diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 1bfa7a41ccc9..ffc0150ebac5 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,53 +1,18 @@ -#------------------------------------------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. -#------------------------------------------------------------------------------------------------------------- +FROM mcr.microsoft.com/devcontainers/typescript-node:22-bookworm -FROM node:8 +RUN apt-get install -y wget bzip2 -# Avoid warnings by switching to noninteractive -ENV DEBIAN_FRONTEND=noninteractive +# Run in silent mode and save downloaded script as anaconda.sh. +# Run with /bin/bash and run in silent mode to /opt/conda. +# Also get rid of installation script after finishing. +RUN wget --quiet https://repo.anaconda.com/archive/Anaconda3-2023.07-1-Linux-x86_64.sh -O ~/anaconda.sh && \ + /bin/bash ~/anaconda.sh -b -p /opt/conda && \ + rm ~/anaconda.sh -# The node image comes with a base non-root 'node' user which this Dockerfile -# gives sudo access. However, for Linux, this user's GID/UID must match your local -# user UID/GID to avoid permission issues with bind mounts. Update USER_UID / USER_GID -# if yours is not 1000. See https://aka.ms/vscode-remote/containers/non-root-user. -ARG USER_UID=1000 -ARG USER_GID=$USER_UID +ENV PATH="/opt/conda/bin:$PATH" + +# Sudo apt update needs to run in order for installation of fish to work . +RUN sudo apt update && \ + sudo apt install fish -y -# Configure apt and install packages -RUN apt-get update \ - && apt-get -y install --no-install-recommends apt-utils dialog 2>&1 \ - # - # Verify git and needed tools are installed - && apt-get -y install git iproute2 procps \ - # - # Remove outdated yarn from /opt and install via package - # so it can be easily updated via apt-get upgrade yarn - && rm -rf /opt/yarn-* \ - && rm -f /usr/local/bin/yarn \ - && rm -f /usr/local/bin/yarnpkg \ - && apt-get install -y curl apt-transport-https lsb-release \ - && curl -sS https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/pubkey.gpg | apt-key add - 2>/dev/null \ - && echo "deb https://dl.yarnpkg.com/$(lsb_release -is | tr '[:upper:]' '[:lower:]')/ stable main" | tee /etc/apt/sources.list.d/yarn.list \ - && apt-get update \ - && apt-get -y install --no-install-recommends yarn \ - # - # Install tslint and typescript globally - && npm install -g tslint typescript \ - # - # [Optional] Update a non-root user to match UID/GID - see https://aka.ms/vscode-remote/containers/non-root-user. - && if [ "$USER_GID" != "1000" ]; then groupmod node --gid $USER_GID; fi \ - && if [ "$USER_UID" != "1000" ]; then usermod --uid $USER_UID node; fi \ - # [Optional] Add add sudo support for non-root user - && apt-get install -y sudo \ - && echo node ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/node \ - && chmod 0440 /etc/sudoers.d/node \ - # - # Clean up - && apt-get autoremove -y \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* -# Switch back to dialog for any ad-hoc use of apt-get -ENV DEBIAN_FRONTEND= diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 17c0189dcafd..67a8833d30cf 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,26 +1,30 @@ -// For format details, see https://aka.ms/vscode-remote/devcontainer.json or the definition README at -// https://github.com/microsoft/vscode-dev-containers/tree/master/containers/typescript-node-8 +// For format details, see https://aka.ms/devcontainer.json. { - "name": "Node.js 8 & TypeScript", - "dockerFile": "Dockerfile", - - // Use 'settings' to set *default* container specific settings.json values on container create. - // You can edit these settings after create using File > Preferences > Settings > Remote. - "settings": { - "terminal.integrated.shell.linux": "/bin/bash" + "name": "VS Code Python Dev Container", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "build": { + "dockerfile": "./Dockerfile", + "context": ".." }, + "customizations": { + "vscode": { + "extensions": [ + "charliermarsh.ruff", + "editorconfig.editorconfig", + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "ms-python.python", + "ms-python.vscode-pylance", + "ms-python.debugpy" + ] + } + }, + // Commands to execute on container creation,start. + "postCreateCommand": "bash scripts/postCreateCommand.sh", + "onCreateCommand": "bash scripts/onCreateCommand.sh", - // Uncomment the next line if you want to publish any ports. - // "appPort": [], - - // Uncomment the next line to run commands after the container is created. - // "postCreateCommand": "yarn install", - - // Uncomment the next line to use a non-root user. On Linux, this will prevent - // new files getting created as root, but you may need to update the USER_UID - // and USER_GID in .devcontainer/Dockerfile to match your user if not 1000. - // "runArgs": [ "-u", "node" ], + "containerEnv": { + "CI_PYTHON_PATH": "/workspaces/vscode-python/.venv/bin/python" + } - // Add the IDs of extensions you want installed when the container is created in the array below. - "extensions": ["ms-vscode.vscode-typescript-tslint-plugin"] } diff --git a/.eslintplugin/no-bad-gdpr-comment.js b/.eslintplugin/no-bad-gdpr-comment.js new file mode 100644 index 000000000000..786259683ff6 --- /dev/null +++ b/.eslintplugin/no-bad-gdpr-comment.js @@ -0,0 +1,51 @@ +"use strict"; +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ +Object.defineProperty(exports, "__esModule", { value: true }); +var noBadGDPRComment = { + create: function (context) { + var _a; + return _a = {}, + _a['Program'] = function (node) { + for (var _i = 0, _a = node.comments; _i < _a.length; _i++) { + var comment = _a[_i]; + if (comment.type !== 'Block' || !comment.loc) { + continue; + } + if (!comment.value.includes('__GDPR__')) { + continue; + } + var dataStart = comment.value.indexOf('\n'); + var data = comment.value.substring(dataStart); + var gdprData = void 0; + try { + var jsonRaw = "{ ".concat(data, " }"); + gdprData = JSON.parse(jsonRaw); + } + catch (e) { + context.report({ + loc: { start: comment.loc.start, end: comment.loc.end }, + message: 'GDPR comment is not valid JSON', + }); + } + if (gdprData) { + var len = Object.keys(gdprData).length; + if (len !== 1) { + context.report({ + loc: { start: comment.loc.start, end: comment.loc.end }, + message: "GDPR comment must contain exactly one key, not ".concat(Object.keys(gdprData).join(', ')), + }); + } + } + } + }, + _a; + }, +}; +module.exports = { + rules: { + 'no-bad-gdpr-comment': noBadGDPRComment, // Ensure correct structure + }, +}; diff --git a/.eslintplugin/no-bad-gdpr-comment.ts b/.eslintplugin/no-bad-gdpr-comment.ts new file mode 100644 index 000000000000..1eba899a7de3 --- /dev/null +++ b/.eslintplugin/no-bad-gdpr-comment.ts @@ -0,0 +1,55 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +import * as eslint from 'eslint'; +const noBadGDPRComment: eslint.Rule.RuleModule = { + create(context: eslint.Rule.RuleContext): eslint.Rule.RuleListener { + return { + ['Program'](node) { + for (const comment of (node as eslint.AST.Program).comments) { + if (comment.type !== 'Block' || !comment.loc) { + continue; + } + if (!comment.value.includes('__GDPR__')) { + continue; + } + + const dataStart = comment.value.indexOf('\n'); + const data = comment.value.substring(dataStart); + + let gdprData: { [key: string]: object } | undefined; + + try { + const jsonRaw = `{ ${data} }`; + gdprData = JSON.parse(jsonRaw); + } catch (e) { + context.report({ + loc: { start: comment.loc.start, end: comment.loc.end }, + message: 'GDPR comment is not valid JSON', + }); + } + + if (gdprData) { + const len = Object.keys(gdprData).length; + if (len !== 1) { + context.report({ + loc: { start: comment.loc.start, end: comment.loc.end }, + message: `GDPR comment must contain exactly one key, not ${Object.keys(gdprData).join( + ', ', + )}`, + }); + } + } + } + }, + }; + }, +}; + +module.exports = { + rules: { + 'no-bad-gdpr-comment': noBadGDPRComment, // Ensure correct structure + }, +}; diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 1b6649bb0880..000000000000 --- a/.eslintrc +++ /dev/null @@ -1,17 +0,0 @@ - -{ - "env": { - "node": true, - "es6": true - }, - "rules": { - "no-console": 0, - "no-cond-assign": 0, - "no-unused-vars": 1, - "no-extra-semi": "warn", - "semi": "warn", - "prettier/prettier": "error" - }, - "extends": ["eslint:recommended", "prettier"], - "plugins": ["prettier"] -} diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000000..e2c2a50781b9 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,15 @@ +# Prettier +2b6a8f2d439fe9d5e66665ea46d8b690ac9b2c39 +649156a09ccdc51c0d20f7cd44540f1918f9347b +4f774d94bf4fbf87bb417b2b2b8e79e334eb3536 +61b179b2092050709e3c373a6738abad8ce581c4 +c33617b0b98daeb4d72040b48c5850b476d6256c +db8e1e2460e9754ec0672d958789382b6d15c5aa +08bc9ad3bee5b19f02fa756fbc53ab32f1b39920 +# Black +a58eeffd1b64498e2afe5f11597888dfd1c8699c +5cd8f539f4d2086b718c8f11f823c0ac12fc2c49 +9ec9e9eaebb25adc6d942ac19d4d6c128abb987f +c4af91e090057d20d7a633b3afa45eaa13ece76f +# Ruff +e931bed3efbede7b05113316506958ecd7506777 diff --git a/.gitattributes b/.gitattributes index f36040d43639..e25c2877c07f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ package.json text eol=lf package-lock.json text eol=lf +requirements.txt text eol=lf diff --git a/.github/ISSUE_TEMPLATE/1_ds_bug_report.md b/.github/ISSUE_TEMPLATE/1_ds_bug_report.md deleted file mode 100644 index 37d7fc69cdec..000000000000 --- a/.github/ISSUE_TEMPLATE/1_ds_bug_report.md +++ /dev/null @@ -1,49 +0,0 @@ ---- -name: Bug report for Notebook Editor, Interactive Window, Python Editor cells -about: Create a report to help us improve -labels: type-bug, data science ---- - -# Bug: Notebook Editor, Interactive Window, Editor cells - - - -## Steps to cause the bug to occur - -1. - -## Actual behavior - -## Expected behavior - - - -### Your Jupyter and/or Python environment - -_Please provide as much info as you readily know_ - -- **Jupyter server running:** Local | Remote | N/A -- **Extension version:** 20YY.MM.#####-xxx -- **VS Code version:** #.## -- **Setting python.jediEnabled:** true | false -- **Python and/or Anaconda version:** #.#.# -- **OS:** Windows | Mac | Linux (distro): -- **Virtual environment:** conda | venv | virtualenv | N/A | ... - -## Developer Tools Console Output - - - -Microsoft Data Science for VS Code Engineering Team: @rchiodo, @IanMatthewHuff, @DavidKutu, @DonJayamanne, @greazer diff --git a/.github/ISSUE_TEMPLATE/2_bug_report.md b/.github/ISSUE_TEMPLATE/2_bug_report.md deleted file mode 100644 index b5923fd25008..000000000000 --- a/.github/ISSUE_TEMPLATE/2_bug_report.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -name: General bug report -about: Create a report to help us improve -labels: classify, type-bug ---- - - - -## Environment data - -- VS Code version: XXX -- Extension version (available under the Extensions sidebar): XXX -- OS and version: XXX -- Python version (& distribution if applicable, e.g. Anaconda): XXX -- Type of virtual environment used (N/A | venv | virtualenv | conda | ...): XXX -- Relevant/affected Python packages and their versions: XXX -- Relevant/affected Python-related VS Code extensions and their versions: XXX -- Jedi or Language Server? (i.e. what is `"python.jediEnabled"` set to; more info #3977): XXX -- Value of the `python.languageServer` setting: XXX - -## Expected behaviour - -XXX - -## Actual behaviour - -XXX - -## Steps to reproduce: - -[**NOTE**: Self-contained, minimal reproducing code samples are **extremely** helpful and will expedite addressing your issue] - -1. XXX - - - -## Logs - -Output for `Python` in the `Output` panel (`View`→`Output`, change the drop-down the upper-right of the `Output` panel to `Python`) - -``` -XXX -``` - -Output from `Console` under the `Developer Tools` panel (toggle Developer Tools on under `Help`; turn on source maps to make any tracebacks be useful by running `Enable source map support for extension debugging`) - -``` -XXX -``` diff --git a/.github/ISSUE_TEMPLATE/3_ds_feature_request.md b/.github/ISSUE_TEMPLATE/3_ds_feature_request.md deleted file mode 100644 index 730f7cfa2f1a..000000000000 --- a/.github/ISSUE_TEMPLATE/3_ds_feature_request.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -name: Feature request for Notebook Editor, Interactive Window, Editor cells -about: Suggest an idea for this project -labels: type-enhancement, data science ---- - -# Feature: Notebook Editor, Interactive Window, Python Editor cells - - - -## Description - -Microsoft Data Science for VS Code Engineering Team: @rchiodo, @IanMatthewHuff, @DavidKutu, @DonJayamanne, @greazer diff --git a/.github/ISSUE_TEMPLATE/3_feature_request.md b/.github/ISSUE_TEMPLATE/3_feature_request.md new file mode 100644 index 000000000000..d13a5e94e700 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3_feature_request.md @@ -0,0 +1,7 @@ +--- +name: Feature request +about: Request for the Python extension, not supporting/sibling extensions +labels: classify, feature-request +--- + + diff --git a/.github/ISSUE_TEMPLATE/4_feature_request.md b/.github/ISSUE_TEMPLATE/4_feature_request.md deleted file mode 100644 index e98872ab0d10..000000000000 --- a/.github/ISSUE_TEMPLATE/4_feature_request.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -name: General feature request -about: Suggest an idea for this project -labels: classify, type-enhancement ---- - - - - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index ef0e2aae348f..c966f6bde856 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,17 @@ blank_issues_enabled: false contact_links: - - name: Stack Overflow - url: https://stackoverflow.com/questions/tagged/visual-studio-code+python - about: Please ask questions here. + - name: 'Bug 🐜' + url: https://aka.ms/pvsc-bug + about: 'Use the `Python: Report Issue...` command (follow the link for instructions)' + - name: 'Pylance' + url: https://github.com/microsoft/pylance-release/issues + about: 'For issues relating to the Pylance language server extension' + - name: 'Jupyter' + url: https://github.com/microsoft/vscode-jupyter/issues + about: 'For issues relating to the Jupyter extension (including the interactive window)' + - name: 'Python Debugger' + url: https://github.com/microsoft/vscode-python-debugger/issues + about: 'For issues relating to the Python debugger' + - name: Help/Support + url: https://github.com/microsoft/vscode-python/discussions/categories/q-a + about: 'Having trouble with the extension? Need help getting something to work?' diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 1d41e4544cbd..000000000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,17 +0,0 @@ -For # - - - -- [ ] Pull request represents a single change (i.e. not fixing disparate/unrelated things in a single PR). -- [ ] Title summarizes what is changing. -- [ ] Has a [news entry](https://github.com/Microsoft/vscode-python/tree/master/news) file (remember to thank yourself!). -- [ ] Appropriate comments and documentation strings in the code. -- [ ] Has sufficient logging. -- [ ] Has telemetry for enhancements. -- [ ] Unit tests & system/integration tests are added/updated. -- [ ] [Test plan](https://github.com/Microsoft/vscode-python/blob/master/.github/test_plan.md) is updated as appropriate. -- [ ] [`package-lock.json`](https://github.com/Microsoft/vscode-python/blob/master/package-lock.json) has been regenerated by running `npm install` (if dependencies have changed). -- [ ] The wiki is updated with any design decisions/details. diff --git a/.github/actions/build-vsix/action.yml b/.github/actions/build-vsix/action.yml new file mode 100644 index 000000000000..912ff2c34a74 --- /dev/null +++ b/.github/actions/build-vsix/action.yml @@ -0,0 +1,101 @@ +name: 'Build VSIX' +description: "Build the extension's VSIX" + +inputs: + node_version: + description: 'Version of Node to install' + required: true + vsix_name: + description: 'Name to give the final VSIX' + required: true + artifact_name: + description: 'Name to give the artifact containing the VSIX' + required: true + cargo_target: + description: 'Cargo build target for the native build' + required: true + vsix_target: + description: 'vsix build target for the native build' + required: true + +runs: + using: 'composite' + steps: + - name: Install Node + uses: actions/setup-node@v6 + with: + node-version: ${{ inputs.node_version }} + cache: 'npm' + + - name: Rust Tool Chain setup + uses: dtolnay/rust-toolchain@stable + + # Jedi LS depends on dataclasses which is not in the stdlib in Python 3.7. + - name: Use Python 3.10 for JediLSP + uses: actions/setup-python@v6 + with: + python-version: '3.10' + cache: 'pip' + cache-dependency-path: | + requirements.txt + python_files/jedilsp_requirements/requirements.txt + + - name: Upgrade Pip + run: python -m pip install -U pip + shell: bash + + # For faster/better builds of sdists. + - name: Install build pre-requisite + run: python -m pip install wheel nox + shell: bash + + - name: Install Python Extension dependencies (jedi, etc.) + run: nox --session install_python_libs + shell: bash + + - name: Add Rustup target + run: rustup target add "${CARGO_TARGET}" + shell: bash + env: + CARGO_TARGET: ${{ inputs.cargo_target }} + + - name: Build Native Binaries + run: nox --session native_build + shell: bash + env: + CARGO_TARGET: ${{ inputs.cargo_target }} + + - name: Run npm ci + run: npm ci --prefer-offline + shell: bash + + - name: Update optional extension dependencies + run: npm run addExtensionPackDependencies + shell: bash + + - name: Build Webpack + run: | + npx gulp clean + npx gulp prePublishBundle + shell: bash + + - name: Build VSIX + run: npx vsce package --target "${VSIX_TARGET}" --out ms-python-insiders.vsix --pre-release + shell: bash + env: + VSIX_TARGET: ${{ inputs.vsix_target }} + + - name: Rename VSIX + # Move to a temp name in case the specified name happens to match the default name. + run: mv ms-python-insiders.vsix ms-python-temp.vsix && mv ms-python-temp.vsix "${VSIX_NAME}" + shell: bash + env: + VSIX_NAME: ${{ inputs.vsix_name }} + + - name: Upload VSIX + uses: actions/upload-artifact@v7 + with: + name: ${{ inputs.artifact_name }} + path: ${{ inputs.vsix_name }} + if-no-files-found: error + retention-days: 7 diff --git a/.github/actions/lint/action.yml b/.github/actions/lint/action.yml new file mode 100644 index 000000000000..0bd5a2d8e1e2 --- /dev/null +++ b/.github/actions/lint/action.yml @@ -0,0 +1,50 @@ +name: 'Lint' +description: 'Lint TypeScript and Python code' + +inputs: + node_version: + description: 'Version of Node to install' + required: true + +runs: + using: 'composite' + steps: + - name: Install Node + uses: actions/setup-node@v6 + with: + node-version: ${{ inputs.node_version }} + cache: 'npm' + + - name: Install Node dependencies + run: npm ci --prefer-offline + shell: bash + + - name: Run `gulp prePublishNonBundle` + run: npx gulp prePublishNonBundle + shell: bash + + - name: Check dependencies + run: npm run checkDependencies + shell: bash + + - name: Lint TypeScript code + run: npm run lint + shell: bash + + - name: Check TypeScript format + run: npm run format-check + shell: bash + + - name: Install Python + uses: actions/setup-python@v6 + with: + python-version: '3.x' + cache: 'pip' + + - name: Run Ruff + run: | + python -m pip install -U "ruff" + python -m ruff check . + python -m ruff format --check + working-directory: python_files + shell: bash diff --git a/.github/actions/smoke-tests/action.yml b/.github/actions/smoke-tests/action.yml new file mode 100644 index 000000000000..0531ef5d42a3 --- /dev/null +++ b/.github/actions/smoke-tests/action.yml @@ -0,0 +1,66 @@ +name: 'Smoke tests' +description: 'Run smoke tests' + +inputs: + node_version: + description: 'Version of Node to install' + required: true + artifact_name: + description: 'Name of the artifact containing the VSIX' + required: true + +runs: + using: 'composite' + steps: + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: ${{ inputs.node_version }} + cache: 'npm' + + - name: Install Python + uses: actions/setup-python@v5 + with: + python-version: '3.x' + cache: 'pip' + cache-dependency-path: | + build/test-requirements.txt + requirements.txt + + - name: Install dependencies (npm ci) + run: npm ci --prefer-offline + shell: bash + + - name: Install Python requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + options: '-t ./python_files/lib/python --implementation py' + + - name: pip install system test requirements + run: | + python -m pip install --upgrade -r build/test-requirements.txt + shell: bash + + # Bits from the VSIX are reused by smokeTest.ts to speed things up. + - name: Download VSIX + uses: actions/download-artifact@v4 + with: + name: ${{ inputs.artifact_name }} + + - name: Prepare for smoke tests + run: npx tsc -p ./ + shell: bash + + - name: Set CI_PYTHON_PATH and CI_DISABLE_AUTO_SELECTION + run: | + echo "CI_PYTHON_PATH=python" >> $GITHUB_ENV + echo "CI_DISABLE_AUTO_SELECTION=1" >> $GITHUB_ENV + shell: bash + + - name: Run smoke tests + env: + DISPLAY: 10 + INSTALL_JUPYTER_EXTENSION: true + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: node --no-force-async-hooks-checks ./out/test/smokeTest.js diff --git a/.github/commands.json b/.github/commands.json new file mode 100644 index 000000000000..2fb6684a7ee6 --- /dev/null +++ b/.github/commands.json @@ -0,0 +1,157 @@ +[ + { + "type": "label", + "name": "*question", + "action": "close", + "reason": "not_planned", + "comment": "We closed this issue because it is a question about using the Python extension for VS Code rather than an issue or feature request. We recommend browsing resources such as our [Python documentation](https://code.visualstudio.com/docs/languages/python) and our [Discussions page](https://github.com/microsoft/vscode-python/discussions). You may also find help on [StackOverflow](https://stackoverflow.com/questions/tagged/vscode-python), where the community has already answered thousands of similar questions. \n\nHappy Coding!" + }, + { + "type": "label", + "name": "*dev-question", + "action": "close", + "reason": "not_planned", + "comment": "We have a great extension developer community over on [GitHub discussions](https://github.com/microsoft/vscode-discussions/discussions) and [Slack](https://vscode-dev-community.slack.com/) where extension authors help each other. This is a great place for you to ask questions and find support.\n\nHappy Coding!" + }, + { + "type": "label", + "name": "*extension-candidate", + "action": "close", + "reason": "not_planned", + "comment": "We try to keep the Python extension lean and we think the functionality you're asking for is great for a VS Code extension. You might be able to find one that suits you in the [VS Code Marketplace](https://aka.ms/vscodemarketplace) already. If not, in a few simple steps you can get started [writing your own extension](https://aka.ms/vscodewritingextensions) or leverage our [tool extension template](https://github.com/microsoft/vscode-python-tools-extension-template) to get started. In addition, check out the [vscode-python-environments](https://github.com/microsoft/vscode-python-environments) as this may be the right spot for your request. \n\nHappy Coding!" + }, + { + "type": "label", + "name": "*not-reproducible", + "action": "close", + "reason": "not_planned", + "comment": "We closed this issue because we are unable to reproduce the problem with the steps you describe. Chances are we've already fixed your problem in a recent version of the Python extension, so we recommend updating to the latest version and trying again. If you continue to experience this issue, please ask us to reopen the issue and provide us with more detail.\n\nHappy Coding!" + }, + { + "type": "label", + "name": "*out-of-scope", + "action": "close", + "reason": "not_planned", + "comment": "We closed this issue because we [don't plan to address it](https://github.com/microsoft/vscode-python/wiki/Issue-Management#criteria-for-closing-out-of-scope-feature-requests) in the foreseeable future. If you disagree and feel that this issue is crucial: we are happy to listen and to reconsider.\n\nIf you wonder what we are up to, please see our [roadmap](https://aka.ms/pythonvscoderoadmap) and [issue reporting guidelines]( https://github.com/microsoft/vscode-python/wiki/Issue-Management).\n\nThanks for your understanding, and happy coding!" + }, + { + "type": "label", + "name": "wont-fix", + "action": "close", + "reason": "not_planned", + "comment": "We closed this issue because we [don't plan to address it](https://github.com/microsoft/vscode/wiki/Issue-Grooming#wont-fix-bugs).\n\nThanks for your understanding, and happy coding!" + }, + { + "type": "label", + "name": "*caused-by-extension", + "action": "close", + "reason": "not_planned", + "comment": "This issue is caused by an extension, please file it with the repository (or contact) the extension has linked in its overview in VS Code or the [marketplace](https://aka.ms/vscodemarketplace) for VS Code. See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting). If you don't know which extension is causing the problem, you can run `Help: Start extension bisect` from the command palette (F1) to help identify the problem extension.\n\nHappy Coding!" + }, + { + "type": "label", + "name": "*as-designed", + "action": "close", + "reason": "not_planned", + "comment": "The described behavior is how it is expected to work. If you disagree, please explain what is expected and what is not in more detail. See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!" + }, + { + "type": "label", + "name": "L10N", + "assign": [ + "csigs", + "TylerLeonhardt" + ] + }, + { + "type": "label", + "name": "*duplicate", + "action": "close", + "reason": "not_planned", + "comment": "Thanks for creating this issue! We figured it's covering the same as another one we already have. Thus, we closed this one as a duplicate. You can search for [similar existing issues](${duplicateQuery}). See also our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!" + }, + { + "type": "comment", + "name": "verified", + "allowUsers": [ + "@author" + ], + "action": "updateLabels", + "addLabel": "verified", + "removeLabel": "author-verification-requested", + "requireLabel": "author-verification-requested", + "disallowLabel": "unreleased" + }, + { + "type": "comment", + "name": "confirm", + "allowUsers": [ + "cleidigh", + "usernamehw", + "gjsjohnmurray", + "IllusionMH" + ], + "action": "updateLabels", + "addLabel": "confirmed", + "removeLabel": "confirmation-pending" + }, + { + "type": "label", + "name": "*off-topic", + "action": "close", + "reason": "not_planned", + "comment": "Thanks for creating this issue. We think this issue is unactionable or unrelated to the goals of this project. Please follow our [issue reporting guidelines](https://aka.ms/vscodeissuereporting).\n\nHappy Coding!" + }, + { + "type": "comment", + "name": "gifPlease", + "allowUsers": [ + "cleidigh", + "usernamehw", + "gjsjohnmurray", + "IllusionMH" + ], + "action": "comment", + "addLabel": "info-needed", + "comment": "Thanks for reporting this issue! Unfortunately, it's hard for us to understand what issue you're seeing. Please help us out by providing a screen recording showing exactly what isn't working as expected. While we can work with most standard formats, `.gif` files are preferred as they are displayed inline on GitHub. You may find https://gifcap.dev helpful as a browser-based gif recording tool.\n\nIf the issue depends on keyboard input, you can help us by enabling screencast mode for the recording (`Developer: Toggle Screencast Mode` in the command palette). Lastly, please attach this file via the GitHub web interface as emailed responses will strip files out from the issue.\n\nHappy coding!" + }, + { + "type": "label", + "name": "*workspace-trust-docs", + "action": "close", + "reason": "not_planned", + "comment": "This issue appears to be the result of the new workspace trust feature shipped in June 2021. This security-focused feature has major impact on the functionality of VS Code. Due to the volume of issues, we ask that you take some time to review our [comprehensive documentation](https://aka.ms/vscode-workspace-trust) on the feature. If your issue is still not resolved, please let us know." + }, + { + "type": "label", + "name": "~verification-steps-needed", + "action": "updateLabels", + "addLabel": "verification-steps-needed", + "removeLabel": "~verification-steps-needed", + "comment": "Friendly ping! Looks like this issue requires some further steps to be verified. Please provide us with the steps necessary to verify this issue." + }, + { + "type": "label", + "name": "~info-needed", + "action": "updateLabels", + "addLabel": "info-needed", + "removeLabel": "~info-needed", + "comment": "Thanks for creating this issue! We figured it's missing some basic information or in some other way doesn't follow our [issue reporting guidelines](https://aka.ms/pvsc-bug). Please take the time to review these and update the issue or even open a new one with the Report Issue command in VS Code (**Help > Report Issue**) to have all the right information collected for you.\n\nHappy Coding!" + }, + { + "type": "label", + "name": "~version-info-needed", + "action": "updateLabels", + "addLabel": "info-needed", + "removeLabel": "~version-info-needed", + "comment": "Thanks for creating this issue! We figured it's missing some basic information, such as a version number, or in some other way doesn't follow our issue reporting guidelines. Please take the time to review these and update the issue or even open a new one with the Report Issue command in VS Code (**Help > Report Issue**) to have all the right information collected for you.\n\nHappy Coding!" + }, + { + "type": "label", + "name": "~confirmation-needed", + "action": "updateLabels", + "addLabel": "info-needed", + "removeLabel": "~confirmation-needed", + "comment": "Please diagnose the root cause of the issue by running the command `F1 > Help: Troubleshoot Issue` and following the instructions. Once you have done that, please update the issue with the results.\n\nHappy Coding!" + } +] diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000000..14c8e18d475d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,49 @@ +version: 2 +updates: + - package-ecosystem: 'github-actions' + directory: / + schedule: + interval: daily + labels: + - 'no-changelog' + + - package-ecosystem: 'github-actions' + directory: .github/actions/build-vsix + schedule: + interval: daily + labels: + - 'no-changelog' + + - package-ecosystem: 'github-actions' + directory: .github/actions/lint + schedule: + interval: daily + labels: + - 'no-changelog' + + - package-ecosystem: 'github-actions' + directory: .github/actions/smoke-test + schedule: + interval: daily + labels: + - 'no-changelog' + + # Not skipping the news for some Python dependencies in case it's actually useful to communicate to users. + - package-ecosystem: 'pip' + directory: / + schedule: + interval: daily + ignore: + - dependency-name: prospector # Due to Python 2.7 and #14477. + - dependency-name: pytest # Due to Python 2.7 and #13776. + - dependency-name: py # Due to Python 2.7. + - dependency-name: jedi-language-server + labels: + - 'no-changelog' + # Activate when we feel ready to keep up with frequency. + # - package-ecosystem: 'npm' + # directory: / + # schedule: + # interval: daily + # default_labels: + # - "no-changelog" diff --git a/.github/instructions/learning.instructions.md b/.github/instructions/learning.instructions.md new file mode 100644 index 000000000000..28b085f486ce --- /dev/null +++ b/.github/instructions/learning.instructions.md @@ -0,0 +1,34 @@ +--- +applyTo: '**' +description: This document describes how to deal with learnings that you make. (meta instruction) +--- + +This document describes how to deal with learnings that you make. +It is a meta-instruction file. + +Structure of learnings: + +- Each instruction file has a "Learnings" section. +- Each learning has a counter that indicates how often that learning was useful (initially 1). +- Each learning has a 1 sentence description of the learning that is clear and concise. + +Example: + +```markdown +## Learnings + +- Prefer `const` over `let` whenever possible (1) +- Avoid `any` type (3) +``` + +When the user tells you "learn!", you should: + +- extract a learning from the recent conversation + _ identify the problem that you created + _ identify why it was a problem + _ identify how you were told to fix it/how the user fixed it + _ generate only one learning (1 sentence) that helps to summarize the insight gained +- then, add the reflected learning to the "Learnings" section of the most appropriate instruction file + +Important: Whenever a learning was really useful, increase the counter!! +When a learning was not useful and just caused more problems, decrease the counter. diff --git a/.github/instructions/pytest-json-test-builder.instructions.md b/.github/instructions/pytest-json-test-builder.instructions.md new file mode 100644 index 000000000000..436bce0c9cd8 --- /dev/null +++ b/.github/instructions/pytest-json-test-builder.instructions.md @@ -0,0 +1,126 @@ +--- +applyTo: 'python_files/tests/pytestadapter/test_discovery.py' +description: 'A guide for adding new tests for pytest discovery and JSON formatting in the test_pytest_collect suite.' +--- + +# How to Add New Pytest Discovery Tests + +This guide explains how to add new tests for pytest discovery and JSON formatting in the `test_pytest_collect` suite. Follow these steps to ensure your tests are consistent and correct. + +--- + +## 1. Add Your Test File + +- Place your new test file/files in the appropriate subfolder under: + ``` + python_files/tests/pytestadapter/.data/ + ``` +- Organize folders and files to match the structure you want to test. For example, to test nested folders, create the corresponding directory structure. +- In your test file, mark each test function with a comment: + ```python + def test_function(): # test_marker--test_function + ... + ``` + +**Root Node Matching:** + +- The root node in your expected output must match the folder or file you pass to pytest discovery. For example, if you run discovery on a subfolder, the root `"name"`, `"path"`, and `"id_"` in your expected output should be that subfolder, not the parent `.data` folder. +- Only use `.data` as the root if you are running discovery on the entire `.data` folder. + +**Example:** +If you run: + +```python +helpers.runner([os.fspath(TEST_DATA_PATH / "myfolder"), "--collect-only"]) +``` + +then your expected output root should be: + +```python +{ + "name": "myfolder", + "path": os.fspath(TEST_DATA_PATH / "myfolder"), + "type_": "folder", + ... +} +``` + +--- + +## 2. Update `expected_discovery_test_output.py` + +- Open `expected_discovery_test_output.py` in the same test suite. +- Add a new expected output dictionary for your test file, following the format of existing entries. +- Use the helper functions and path conventions: + - Use `os.fspath()` for all paths. + - Use `find_test_line_number("function_name", file_path)` for the `lineno` field. + - Use `get_absolute_test_id("relative_path::function_name", file_path)` for `id_` and `runID`. + - Always use current path concatenation (e.g., `TEST_DATA_PATH / "your_folder" / "your_file.py"`). + - Create new constants as needed to keep the code clean and maintainable. + +**Important:** + +- Do **not** read the entire `expected_discovery_test_output.py` file if you only need to add or reference a single constant. This file is very large; prefer searching for the relevant section or appending to the end. + +**Example:** +If you run discovery on a subfolder: + +```python +helpers.runner([os.fspath(TEST_DATA_PATH / "myfolder"), "--collect-only"]) +``` + +then your expected output root should be: + +```python +myfolder_path = TEST_DATA_PATH / "myfolder" +my_expected_output = { + "name": "myfolder", + "path": os.fspath(myfolder_path), + "type_": "folder", + ... +} +``` + +- Add a comment above your dictionary describing the structure, as in the existing examples. + +--- + +## 3. Add Your Test to `test_discovery.py` + +- In `test_discovery.py`, add your new test as a parameterized case to the main `test_pytest_collect` function. Do **not** create a standalone test function for new discovery cases. +- Reference your new expected output constant from `expected_discovery_test_output.py`. + +**Example:** + +```python +@pytest.mark.parametrize( + ("file", "expected_const"), + [ + ("myfolder", my_expected_output), + # ... other cases ... + ], +) +def test_pytest_collect(file, expected_const): + ... +``` + +--- + +## 4. Run and Verify + +- Run the test suite to ensure your new test is discovered and passes. +- If the test fails, check your expected output dictionary for path or structure mismatches. + +--- + +## 5. Tips + +- Always use the helper functions for line numbers and IDs. +- Match the folder/file structure in `.data` to the expected JSON structure. +- Use comments to document the expected output structure for clarity. +- Ensure all `"path"` and `"id_"` fields in your expected output match exactly what pytest returns, including absolute paths and root node structure. + +--- + +**Reference:** +See `expected_discovery_test_output.py` for more examples and formatting. Use search or jump to the end of the file to avoid reading the entire file when possible. diff --git a/.github/instructions/python-quality-checks.instructions.md b/.github/instructions/python-quality-checks.instructions.md new file mode 100644 index 000000000000..48f37529dfbc --- /dev/null +++ b/.github/instructions/python-quality-checks.instructions.md @@ -0,0 +1,97 @@ +--- +applyTo: 'python_files/**' +description: Guide for running and fixing Python quality checks (Ruff and Pyright) that run in CI +--- + +# Python Quality Checks — Ruff and Pyright + +Run the same Python quality checks that run in CI. All checks target `python_files/` and use config from `python_files/pyproject.toml`. + +## Commands + +```bash +npm run check-python # Run both Ruff and Pyright +npm run check-python:ruff # Linting and formatting only +npm run check-python:pyright # Type checking only +``` + +## Fixing Ruff Errors + +**Auto-fix most issues:** + +```bash +cd python_files +python -m ruff check . --fix +python -m ruff format +npm run check-python:ruff # Verify +``` + +**Manual fixes:** + +- Ruff shows file, line number, rule code (e.g., `F841`), and description +- Open the file, read the error, fix the code +- Common: line length (100 char max), import sorting, unused variables + +## Fixing Pyright Errors + +**Common patterns and fixes:** + +- **Undefined variable/import**: Add the missing import +- **Type mismatch**: Correct the type or add type annotations +- **Missing return type**: Add `-> ReturnType` to function signatures + ```python + def my_function() -> str: # Add return type + return "result" + ``` + +**Verify:** + +```bash +npm run check-python:pyright +``` + +## Configuration + +- **Ruff**: Line length 100, Python 3.9+, 40+ rule families (flake8, isort, pyupgrade, etc.) +- **Pyright**: Version 1.1.308 (or whatever is found in the environment), ignores `lib/` and 15+ legacy files +- Config: `python_files/pyproject.toml` sections `[tool.ruff]` and `[tool.pyright]` + +## Troubleshooting + +**"Module not found" in Pyright**: Install dependencies + +```bash +python -m pip install --upgrade -r build/test-requirements.txt +nox --session install_python_libs +``` + +**Import order errors**: Auto-fix with `ruff check . --fix` + +**Type errors in ignored files**: Legacy files in `pyproject.toml` ignore list—fix if working on them + +## When Writing Tests + +**Always format your test files before committing:** + +```bash +cd python_files +ruff format tests/ # Format all test files +# or format specific files: +ruff format tests/unittestadapter/test_utils.py +``` + +**Best practice workflow:** + +1. Write your test code +2. Run `ruff format` on the test files +3. Run the tests to verify they pass +4. Run `npm run check-python` to catch any remaining issues + +This ensures your tests pass both functional checks and quality checks in CI. + +## Learnings + +- Always run `npm run check-python` before pushing to catch CI failures early (1) +- Use `ruff check . --fix` to auto-fix most linting issues before manual review (1) +- Pyright version must match CI (1.1.308) to avoid inconsistent results between local and CI runs (1) +- Always run `ruff format` on test files after writing them to avoid formatting CI failures (1) diff --git a/.github/instructions/testing-workflow.instructions.md b/.github/instructions/testing-workflow.instructions.md new file mode 100644 index 000000000000..844946404328 --- /dev/null +++ b/.github/instructions/testing-workflow.instructions.md @@ -0,0 +1,581 @@ +--- +applyTo: '**/test/**' +--- + +# AI Testing Workflow Guide: Write, Run, and Fix Tests + +This guide provides comprehensive instructions for AI agents on the complete testing workflow: writing tests, running them, diagnosing failures, and fixing issues. Use this guide whenever working with test files or when users request testing tasks. + +## Complete Testing Workflow + +This guide covers the full testing lifecycle: + +1. **📝 Writing Tests** - Create comprehensive test suites +2. **▶️ Running Tests** - Execute tests using VS Code tools +3. **🔍 Diagnosing Issues** - Analyze failures and errors +4. **🛠️ Fixing Problems** - Resolve compilation and runtime issues +5. **✅ Validation** - Ensure coverage and resilience + +### When to Use This Guide + +**User Requests Testing:** + +- "Write tests for this function" +- "Run the tests" +- "Fix the failing tests" +- "Test this code" +- "Add test coverage" + +**File Context Triggers:** + +- Working in `**/test/**` directories +- Files ending in `.test.ts` or `.unit.test.ts` +- Test failures or compilation errors +- Coverage reports or test output analysis + +## Test Types + +When implementing tests as an AI agent, choose between two main types: + +### Unit Tests (`*.unit.test.ts`) + +- **Fast isolated testing** - Mock all external dependencies +- **Use for**: Pure functions, business logic, data transformations +- **Execute with**: `runTests` tool with specific file patterns +- **Mock everything** - VS Code APIs automatically mocked via `/src/test/unittests.ts` + +### Extension Tests (`*.test.ts`) + +- **Full VS Code integration** - Real environment with actual APIs +- **Use for**: Command registration, UI interactions, extension lifecycle +- **Execute with**: VS Code launch configurations or `runTests` tool +- **Slower but comprehensive** - Tests complete user workflows + +## 🤖 Agent Tool Usage for Test Execution + +### Primary Tool: `runTests` + +Use the `runTests` tool to execute tests programmatically rather than terminal commands for better integration and result parsing: + +```typescript +// Run specific test files +await runTests({ + files: ['/absolute/path/to/test.unit.test.ts'], + mode: 'run', +}); + +// Run tests with coverage +await runTests({ + files: ['/absolute/path/to/test.unit.test.ts'], + mode: 'coverage', + coverageFiles: ['/absolute/path/to/source.ts'], +}); + +// Run specific test names +await runTests({ + files: ['/absolute/path/to/test.unit.test.ts'], + testNames: ['should handle edge case', 'should validate input'], +}); +``` + +### Compilation Requirements + +Before running tests, ensure compilation. Always start compilation with `npm run watch-tests` before test execution to ensure TypeScript files are built. Recompile after making import/export changes before running tests, as stubs won't work if they're applied to old compiled JavaScript that doesn't have the updated imports: + +```typescript +// Start watch mode for auto-compilation +await run_in_terminal({ + command: 'npm run watch-tests', + isBackground: true, + explanation: 'Start test compilation in watch mode', +}); + +// Or compile manually +await run_in_terminal({ + command: 'npm run compile-tests', + isBackground: false, + explanation: 'Compile TypeScript test files', +}); +``` + +### Alternative: Terminal Execution + +For targeted test runs when `runTests` tool is unavailable. Note: When a targeted test run yields 0 tests, first verify the compiled JS exists under `out/test` (rootDir is `src`); absence almost always means the test file sits outside `src` or compilation hasn't run yet: + +```typescript +// Run specific test suite +await run_in_terminal({ + command: 'npm run unittest -- --grep "Suite Name"', + isBackground: false, + explanation: 'Run targeted unit tests', +}); +``` + +## 🔍 Diagnosing Test Failures + +### Common Failure Patterns + +**Compilation Errors:** + +```typescript +// Missing imports +if (error.includes('Cannot find module')) { + await addMissingImports(testFile); +} + +// Type mismatches +if (error.includes("Type '" && error.includes("' is not assignable"))) { + await fixTypeIssues(testFile); +} +``` + +**Runtime Errors:** + +```typescript +// Mock setup issues +if (error.includes('stub') || error.includes('mock')) { + await fixMockConfiguration(testFile); +} + +// Assertion failures +if (error.includes('AssertionError')) { + await analyzeAssertionFailure(error); +} +``` + +### Systematic Failure Analysis + +Fix test issues iteratively - run tests, analyze failures, apply fixes, repeat until passing. When unit tests fail with VS Code API errors like `TypeError: X is not a constructor` or `Cannot read properties of undefined (reading 'Y')`, check if VS Code APIs are properly mocked in `/src/test/unittests.ts` - add missing APIs following the existing pattern. + +```typescript +interface TestFailureAnalysis { + type: 'compilation' | 'runtime' | 'assertion' | 'timeout'; + message: string; + location: { file: string; line: number; col: number }; + suggestedFix: string; +} + +function analyzeFailure(failure: TestFailure): TestFailureAnalysis { + if (failure.message.includes('Cannot find module')) { + return { + type: 'compilation', + message: failure.message, + location: failure.location, + suggestedFix: 'Add missing import statement', + }; + } + // ... other failure patterns +} +``` + +### Agent Decision Logic for Test Type Selection + +**Choose Unit Tests (`*.unit.test.ts`) when analyzing:** + +- Functions with clear inputs/outputs and no VS Code API dependencies +- Data transformation, parsing, or utility functions +- Business logic that can be isolated with mocks +- Error handling scenarios with predictable inputs + +**Choose Extension Tests (`*.test.ts`) when analyzing:** + +- Functions that register VS Code commands or use `vscode.*` APIs +- UI components, tree views, or command palette interactions +- File system operations requiring workspace context +- Extension lifecycle events (activation, deactivation) + +**Agent Implementation Pattern:** + +```typescript +function determineTestType(functionCode: string): 'unit' | 'extension' { + if ( + functionCode.includes('vscode.') || + functionCode.includes('commands.register') || + functionCode.includes('window.') || + functionCode.includes('workspace.') + ) { + return 'extension'; + } + return 'unit'; +} +``` + +## 🎯 Step 1: Automated Function Analysis + +As an AI agent, analyze the target function systematically: + +### Code Analysis Checklist + +```typescript +interface FunctionAnalysis { + name: string; + inputs: string[]; // Parameter types and names + outputs: string; // Return type + dependencies: string[]; // External modules/APIs used + sideEffects: string[]; // Logging, file system, network calls + errorPaths: string[]; // Exception scenarios + testType: 'unit' | 'extension'; +} +``` + +### Analysis Implementation + +1. **Read function source** using `read_file` tool +2. **Identify imports** - look for `vscode.*`, `child_process`, `fs`, etc. +3. **Map data flow** - trace inputs through transformations to outputs +4. **Catalog dependencies** - external calls that need mocking +5. **Document side effects** - logging, file operations, state changes + +### Test Setup Differences + +#### Unit Test Setup (\*.unit.test.ts) + +```typescript +// Mock VS Code APIs - handled automatically by unittests.ts +import * as sinon from 'sinon'; +import * as workspaceApis from '../../common/workspace.apis'; // Wrapper functions + +// Stub wrapper functions, not VS Code APIs directly +// Always mock wrapper functions (e.g., workspaceApis.getConfiguration()) instead of +// VS Code APIs directly to avoid stubbing issues +const mockGetConfiguration = sinon.stub(workspaceApis, 'getConfiguration'); +``` + +#### Extension Test Setup (\*.test.ts) + +```typescript +// Use real VS Code APIs +import * as vscode from 'vscode'; + +// Real VS Code APIs available - no mocking needed +const config = vscode.workspace.getConfiguration('python'); +``` + +## 🎯 Step 2: Generate Test Coverage Matrix + +Based on function analysis, automatically generate comprehensive test scenarios: + +### Coverage Matrix Generation + +```typescript +interface TestScenario { + category: 'happy-path' | 'edge-case' | 'error-handling' | 'side-effects'; + description: string; + inputs: Record; + expectedOutput?: any; + expectedSideEffects?: string[]; + shouldThrow?: boolean; +} +``` + +### Automated Scenario Creation + +1. **Happy Path**: Normal execution with typical inputs +2. **Edge Cases**: Boundary conditions, empty/null inputs, unusual but valid data +3. **Error Scenarios**: Invalid inputs, dependency failures, exception paths +4. **Side Effects**: Verify logging calls, file operations, state changes + +### Agent Pattern for Scenario Generation + +```typescript +function generateTestScenarios(analysis: FunctionAnalysis): TestScenario[] { + const scenarios: TestScenario[] = []; + + // Generate happy path for each input combination + scenarios.push(...generateHappyPathScenarios(analysis)); + + // Generate edge cases for boundary conditions + scenarios.push(...generateEdgeCaseScenarios(analysis)); + + // Generate error scenarios for each dependency + scenarios.push(...generateErrorScenarios(analysis)); + + return scenarios; +} +``` + +## 🗺️ Step 3: Plan Your Test Coverage + +### Create a Test Coverage Matrix + +#### Main Flows + +- ✅ **Happy path scenarios** - normal expected usage +- ✅ **Alternative paths** - different configuration combinations +- ✅ **Integration scenarios** - multiple features working together + +#### Edge Cases + +- 🔸 **Boundary conditions** - empty inputs, missing data +- 🔸 **Error scenarios** - network failures, permission errors +- 🔸 **Data validation** - invalid inputs, type mismatches + +#### Real-World Scenarios + +- ✅ **Fresh install** - clean slate +- ✅ **Existing user** - migration scenarios +- ✅ **Power user** - complex configurations +- 🔸 **Error recovery** - graceful degradation + +### Example Test Plan Structure + +```markdown +## Test Categories + +### 1. Configuration Migration Tests + +- No legacy settings exist +- Legacy settings already migrated +- Fresh migration needed +- Partial migration required +- Migration failures + +### 2. Configuration Source Tests + +- Global search paths +- Workspace search paths +- Settings precedence +- Configuration errors + +### 3. Path Resolution Tests + +- Absolute vs relative paths +- Workspace folder resolution +- Path validation and filtering + +### 4. Integration Scenarios + +- Combined configurations +- Deduplication logic +- Error handling flows +``` + +## 🔧 Step 4: Set Up Your Test Infrastructure + +### Test File Structure + +```typescript +// 1. Imports - group logically +import assert from 'node:assert'; +import * as sinon from 'sinon'; +import { Uri } from 'vscode'; +import * as logging from '../../../common/logging'; +import * as pathUtils from '../../../common/utils/pathUtils'; +import * as workspaceApis from '../../../common/workspace.apis'; + +// 2. Function under test +import { getAllExtraSearchPaths } from '../../../managers/common/nativePythonFinder'; + +// 3. Mock interfaces +interface MockWorkspaceConfig { + get: sinon.SinonStub; + inspect: sinon.SinonStub; + update: sinon.SinonStub; +} +``` + +### Mock Setup Strategy + +Create minimal mock objects with only required methods and use TypeScript type assertions (e.g., `mockApi as PythonEnvironmentApi`) to satisfy interface requirements instead of implementing all interface methods when only specific methods are needed for the test. Simplify mock setup by only mocking methods actually used in tests and use `as unknown as Type` for TypeScript compatibility. + +```typescript +suite('Function Integration Tests', () => { + // 1. Declare all mocks + let mockGetConfiguration: sinon.SinonStub; + let mockGetWorkspaceFolders: sinon.SinonStub; + let mockTraceLog: sinon.SinonStub; + let mockTraceError: sinon.SinonStub; + let mockTraceWarn: sinon.SinonStub; + + // 2. Mock complex objects + let pythonConfig: MockWorkspaceConfig; + let envConfig: MockWorkspaceConfig; + + setup(() => { + // 3. Initialize all mocks + mockGetConfiguration = sinon.stub(workspaceApis, 'getConfiguration'); + mockGetWorkspaceFolders = sinon.stub(workspaceApis, 'getWorkspaceFolders'); + mockTraceLog = sinon.stub(logging, 'traceLog'); + mockTraceError = sinon.stub(logging, 'traceError'); + mockTraceWarn = sinon.stub(logging, 'traceWarn'); + + // 4. Set up default behaviors + mockGetWorkspaceFolders.returns(undefined); + + // 5. Create mock configuration objects + // When fixing mock environment creation, use null to truly omit + // properties rather than undefined + pythonConfig = { + get: sinon.stub(), + inspect: sinon.stub(), + update: sinon.stub(), + }; + + envConfig = { + get: sinon.stub(), + inspect: sinon.stub(), + update: sinon.stub(), + }; + }); + + teardown(() => { + sinon.restore(); // Always clean up! + }); +}); +``` + +## Step 4: Write Tests Using Mock → Run → Assert Pattern + +### The Three-Phase Pattern + +#### Phase 1: Mock (Set up the scenario) + +```typescript +test('Description of what this tests', async () => { + // Mock → Clear description of the scenario + pythonConfig.inspect.withArgs('venvPath').returns({ globalValue: '/path' }); + envConfig.inspect.withArgs('globalSearchPaths').returns({ globalValue: [] }); + mockGetWorkspaceFolders.returns([{ uri: Uri.file('/workspace') }]); +``` + +#### Phase 2: Run (Execute the function) + +```typescript +// Run +const result = await getAllExtraSearchPaths(); +``` + +#### Phase 3: Assert (Verify the behavior) + +```typescript + // Assert - Use set-based comparison for order-agnostic testing + const expected = new Set(['/expected', '/paths']); + const actual = new Set(result); + assert.strictEqual(actual.size, expected.size, 'Should have correct number of paths'); + assert.deepStrictEqual(actual, expected, 'Should contain exactly the expected paths'); + + // Verify side effects + // Use sinon.match() patterns for resilient assertions that don't break on minor output changes + assert(mockTraceLog.calledWith(sinon.match(/completion/i)), 'Should log completion'); +}); +``` + +## Step 6: Make Tests Resilient + +### Use Order-Agnostic Comparisons + +```typescript +// ❌ Brittle - depends on order +assert.deepStrictEqual(result, ['/path1', '/path2', '/path3']); + +// ✅ Resilient - order doesn't matter +const expected = new Set(['/path1', '/path2', '/path3']); +const actual = new Set(result); +assert.strictEqual(actual.size, expected.size, 'Should have correct number of paths'); +assert.deepStrictEqual(actual, expected, 'Should contain exactly the expected paths'); +``` + +### Use Flexible Error Message Testing + +```typescript +// ❌ Brittle - exact text matching +assert(mockTraceError.calledWith('Error during legacy python settings migration:')); + +// ✅ Resilient - pattern matching +assert(mockTraceError.calledWith(sinon.match.string, sinon.match.instanceOf(Error)), 'Should log migration error'); + +// ✅ Resilient - key terms with regex +assert(mockTraceError.calledWith(sinon.match(/migration.*error/i)), 'Should log migration error'); +``` + +### Handle Complex Mock Scenarios + +```typescript +// For functions that call the same mock multiple times +envConfig.inspect.withArgs('globalSearchPaths').returns({ globalValue: [] }); +envConfig.inspect + .withArgs('globalSearchPaths') + .onSecondCall() + .returns({ + globalValue: ['/migrated/paths'], + }); + +// Testing async functions with child processes: +// Call the function first to get a promise, then use setTimeout to emit mock events, +// then await the promise - this ensures proper timing of mock setup versus function execution + +// Cannot stub internal function calls within the same module after import - stub external +// dependencies instead (e.g., stub childProcessApis.spawnProcess rather than trying to stub +// helpers.isUvInstalled when testing helpers.shouldUseUv) because intra-module calls use +// direct references, not module exports +``` + +## 🧪 Step 7: Test Categories and Patterns + +### Configuration Tests + +- Test different setting combinations +- Test setting precedence (workspace > user > default) +- Test configuration errors and recovery +- Always use dynamic path construction with Node.js `path` module when testing functions that resolve paths against workspace folders to ensure cross-platform compatibility + +### Data Flow Tests + +- Test how data moves through the system +- Test transformations (path resolution, filtering) +- Test state changes (migrations, updates) + +### Error Handling Tests + +- Test graceful degradation +- Test error logging +- Test fallback behaviors + +### Integration Tests + +- Test multiple features together +- Test real-world scenarios +- Test edge case combinations + +## 📊 Step 8: Review and Refine + +### Test Quality Checklist + +- [ ] **Clear naming** - test names describe the scenario and expected outcome +- [ ] **Good coverage** - main flows, edge cases, error scenarios +- [ ] **Resilient assertions** - won't break due to minor changes +- [ ] **Readable structure** - follows Mock → Run → Assert pattern +- [ ] **Isolated tests** - each test is independent +- [ ] **Fast execution** - tests run quickly with proper mocking + +### Common Anti-Patterns to Avoid + +- ❌ Testing implementation details instead of behavior +- ❌ Brittle assertions that break on cosmetic changes +- ❌ Order-dependent tests that fail due to processing changes +- ❌ Tests that don't clean up mocks properly +- ❌ Overly complex test setup that's hard to understand + +## 🔄 Reviewing and Improving Existing Tests + +### Quick Review Process + +1. **Read test files** - Check structure and mock setup +2. **Run tests** - Establish baseline functionality +3. **Apply improvements** - Use patterns below. When reviewing existing tests, focus on behavior rather than implementation details in test names and assertions +4. **Verify** - Ensure tests still pass + +### Common Fixes + +- Over-complex mocks → Minimal mocks with only needed methods +- Brittle assertions → Behavior-focused with error messages +- Vague test names → Clear scenario descriptions (transform "should return X when Y" into "should [expected behavior] when [scenario context]") +- Missing structure → Mock → Run → Assert pattern +- Untestable Node.js APIs → Create proxy abstraction functions (use function overloads to preserve intelligent typing while making functions mockable) + +## 🧠 Agent Learnings + +- When mocking `testController.createTestItem()` in unit tests, use `typemoq.It.isAny()` for parameters when testing handler behavior (not ID/label generation logic), but consider using specific matchers (e.g., `It.is((id: string) => id.startsWith('_error_'))`) when the actual values being passed are important for correctness - this balances test precision with maintainability (2) +- Remove unused variables from test code immediately - leftover tracking variables like `validationCallCount` that aren't referenced indicate dead code that should be simplified (1) +- Use `Uri.file(path).fsPath` for both sides of path comparisons in tests to ensure cross-platform compatibility - Windows converts forward slashes to backslashes automatically (1) +- When tests fail with "Cannot stub non-existent property", the method likely moved to a different class during refactoring - find the class that owns the method and test that class directly instead of stubbing on the original class (1) diff --git a/.github/instructions/testing_feature_area.instructions.md b/.github/instructions/testing_feature_area.instructions.md new file mode 100644 index 000000000000..a4e11523d7c8 --- /dev/null +++ b/.github/instructions/testing_feature_area.instructions.md @@ -0,0 +1,263 @@ +--- +applyTo: 'src/client/testing/**' +--- + +# Testing feature area — Discovery, Run, Debug, and Results + +This document maps the testing support in the extension: discovery, execution (run), debugging, result reporting and how those pieces connect to the codebase. It's written for contributors and agents who need to navigate, modify, or extend test support (both `unittest` and `pytest`). + +## Overview + +- Purpose: expose Python tests in the VS Code Test Explorer (TestController), support discovery, run, debug, and surface rich results and outputs. +- Scope: provider-agnostic orchestration + provider-specific adapters, TestController mapping, IPC with Python-side scripts, debug launch integration, and configuration management. + +## High-level architecture + +- Controller / UI bridge: orchestrates TestController requests and routes them to workspace adapters. +- Workspace adapter: provider-agnostic coordinator that translates TestController requests to provider adapters and maps payloads back into TestItems/TestRuns. +- Provider adapters: implement discovery/run/debug for `unittest` and `pytest` by launching Python scripts and wiring named-pipe IPC. +- Result resolver: translates Python-side JSON/IPCPayloads into TestController updates (start/pass/fail/output/attachments). +- Debug launcher: prepares debug sessions and coordinates the debugger attach flow with the Python runner. + +## Key components (files and responsibilities) + +- Entrypoints + - `src/client/testing/testController/controller.ts` — `PythonTestController` (main orchestrator). + - `src/client/testing/serviceRegistry.ts` — DI/wiring for testing services. +- Workspace orchestration + - `src/client/testing/testController/workspaceTestAdapter.ts` — `WorkspaceTestAdapter` (provider-agnostic entry used by controller). +- **Project-based testing (multi-project workspaces)** + - `src/client/testing/testController/common/testProjectRegistry.ts` — `TestProjectRegistry` (manages project lifecycle, discovery, and nested project handling). + - `src/client/testing/testController/common/projectAdapter.ts` — `ProjectAdapter` interface (represents a single Python project with its own test infrastructure). + - `src/client/testing/testController/common/projectUtils.ts` — utilities for project ID generation, display names, and shared adapter creation. +- Provider adapters + - Unittest + - `src/client/testing/testController/unittest/testDiscoveryAdapter.ts` + - `src/client/testing/testController/unittest/testExecutionAdapter.ts` + - Pytest + - `src/client/testing/testController/pytest/pytestDiscoveryAdapter.ts` + - `src/client/testing/testController/pytest/pytestExecutionAdapter.ts` +- Result resolution and helpers + - `src/client/testing/testController/common/resultResolver.ts` — `PythonResultResolver` (maps payload -> TestController updates). + - `src/client/testing/testController/common/testItemUtilities.ts` — helpers for TestItem lifecycle. + - `src/client/testing/testController/common/types.ts` — `ITestDiscoveryAdapter`, `ITestExecutionAdapter`, `ITestResultResolver`, `ITestDebugLauncher`. + - `src/client/testing/testController/common/debugLauncher.ts` — debug session creation helper. + - `src/client/testing/testController/common/utils.ts` — named-pipe helpers and command builders (`startDiscoveryNamedPipe`, etc.). +- Configuration + - `src/client/testing/common/testConfigurationManager.ts` — per-workspace test settings. + - `src/client/testing/configurationFactory.ts` — configuration service factory. +- Utilities & glue + - `src/client/testing/utils.ts` — assorted helpers used by adapters. + - Python-side scripts: `python_files/unittestadapter/*`, `python_files/pytestadapter/*` — discovery/run code executed by adapters. + +## Python subprocess runners (what runs inside Python) + +The adapters in the extension don't implement test discovery/run logic themselves — they spawn a Python subprocess that runs small helper scripts located under `python_files/` and stream structured events back to the extension over the named-pipe IPC. This is a central part of the feature area; changes here usually require coordinated edits in both the TypeScript adapters and the Python scripts. + +- Unittest helpers (folder: `python_files/unittestadapter`) + + - `discovery.py` — performs `unittest` discovery and emits discovery payloads (test suites, cases, locations) on the IPC channel. + - `execution.py` / `django_test_runner.py` — run tests for `unittest` and, where applicable, Django test runners; emit run events (start, stdout/stderr, pass, fail, skip, teardown) and attachment info. + - `pvsc_utils.py`, `django_handler.py` — utility helpers used by the runners for environment handling and Django-specific wiring. + - The adapter TypeScript files (`testDiscoveryAdapter.ts`, `testExecutionAdapter.ts`) construct the command line, start a named-pipe listener, and spawn these Python scripts using the extension's ExecutionFactory (activated interpreter) so the scripts execute inside the user's selected environment. + +- Pytest helpers (folder: `python_files/vscode_pytest`) + + - `_common.py` — shared helpers for pytest runner scripts. + - `run_pytest_script.py` — the primary pytest runner used for discovery and execution; emits the same structured IPC payloads the extension expects (discovery events and run events). + - The `pytest` execution adapter (`pytestExecutionAdapter.ts`) and discovery adapter build the CLI to run `run_pytest_script.py`, start the pipe, and translate incoming payloads via `PythonResultResolver`. + +- IPC contract and expectations + + - Adapters rely on a stable JSON payload contract emitted by the Python scripts: identifiers for tests, event types (discovered, collected, started, passed, failed, skipped), timings, error traces, and optional attachments (logs, captured stdout/stderr, file links). + - The extension maps these payloads to `TestItem`/`TestRun` updates via `PythonResultResolver` (`src/client/testing/testController/common/resultResolver.ts`). If you change payload shape, update the resolver and tests concurrently. + +- How the subprocess is started + - Execution adapters use the extension's `ExecutionFactory` (preferred) to get an activated interpreter and then spawn a child process that runs the helper script. The adapter will set up environment variables and command-line args (including the pipe name / run-id) so the Python runner knows where to send events and how to behave (discovery vs run vs debug). + - For debug sessions a debug-specific entry argument/port is passed and `common/debugLauncher.ts` coordinates starting a VS Code debug session that will attach to the Python process. + +## Core functionality (what to change where) + +- Discovery + - Entry: `WorkspaceTestAdapter.discoverTests` → provider discovery adapter. Adapter starts a named-pipe listener, spawns the discovery script in an activated interpreter, forwards discovery events to `PythonResultResolver` which creates/updates TestItems. + - Files: `workspaceTestAdapter.ts`, `*DiscoveryAdapter.ts`, `resultResolver.ts`, `testItemUtilities.ts`. +- Run / Execution + - Entry: `WorkspaceTestAdapter.executeTests` → provider execution adapter. Adapter spawns runner in an activated env, runner streams run events to the pipe, `PythonResultResolver` updates a `TestRun` with start/pass/fail and attachments. + - Files: `workspaceTestAdapter.ts`, `*ExecutionAdapter.ts`, `resultResolver.ts`. +- Debugging + - Flow: debug request flows like a run but goes through `debugLauncher.ts` to create a VS Code debug session with prepared ports/pipes. The Python runner coordinates attach/continue with the debugger. + - Files: `*ExecutionAdapter.ts`, `common/debugLauncher.ts`, `common/types.ts`. +- Result reporting + - `resultResolver.ts` is the canonical place to change how JSON payloads map to TestController constructs (messages, durations, error traces, attachments). + +## Typical workflows (short) + +- Full discovery + + 1. `PythonTestController` triggers discovery -> `WorkspaceTestAdapter.discoverTests`. + 2. Provider discovery adapter starts pipe and launches Python discovery script. + 3. Discovery events -> `PythonResultResolver` -> TestController tree updated. + +- Run tests + + 1. Controller collects TestItems -> creates `TestRun`. + 2. `WorkspaceTestAdapter.executeTests` delegates to execution adapter which launches the runner. + 3. Runner events arrive via pipe -> `PythonResultResolver` updates `TestRun`. + 4. On process exit the run is finalized. + +- Debug a test + 1. Debug request flows to execution adapter. + 2. Adapter prepares ports and calls `debugLauncher` to start a VS Code debug session with the run ID. + 3. Runner coordinates with the debugger; `PythonResultResolver` still receives and applies run events. + +## Tests and examples to inspect + +- Unit/integration tests for adapters and orchestration under `src/test/` (examples): + - `src/test/testing/common/testingAdapter.test.ts` + - `src/test/testing/testController/workspaceTestAdapter.unit.test.ts` + - `src/test/testing/testController/unittest/testExecutionAdapter.unit.test.ts` + - Adapter tests demonstrate expected telemetry, debug-launch payloads and result resolution. + +## History & evolution (brief) + +- Migration to TestController API: the code organizes around VS Code TestController, mapping legacy adapter behaviour into TestItems/TestRuns. +- Named-pipe IPC: discovery/run use named-pipe IPC to stream events from Python runner scripts (`python_files/*`) which enables richer, incremental updates and debug coordination. +- Environment activation: adapters prefer the extension ExecutionFactory (activated interpreter) to run discovery and test scripts. + +## Pointers for contributors (practical) + +- To extend discovery output: update the Python discovery script in `python_files/*` and `resultResolver.ts` to parse new payload fields. +- To change run behaviour (args/env/timouts): update the provider execution adapter (`*ExecutionAdapter.ts`) and add/update tests under `src/test/`. +- To change debug flow: edit `common/debugLauncher.ts` and adapters' debug paths; update tests that assert launch argument shapes. + +## Django support (how it works) + +- The extension supports Django projects by delegating discovery and execution to Django-aware Python helpers under `python_files/unittestadapter`. + - `python_files/unittestadapter/django_handler.py` contains helpers that invoke `manage.py` for discovery or execute Django test runners inside the project context. + - `python_files/unittestadapter/django_test_runner.py` provides `CustomDiscoveryTestRunner` and `CustomExecutionTestRunner` which integrate with the extension by using the same IPC contract (they use `UnittestTestResult` and `send_post_request` to emit discovery/run payloads). +- How adapters pass Django configuration: + - Execution adapters set environment variables (e.g. `MANAGE_PY_PATH`) and modify `PYTHONPATH` so Django code and the custom test runner are importable inside the spawned subprocess. + - For discovery the adapter may run the discovery helper which calls `manage.py test` with a custom test runner that emits discovery payloads instead of executing tests. +- Practical notes for contributors: + - Changes to Django discovery/execution often require edits in both `django_test_runner.py`/`django_handler.py` and the TypeScript adapters (`testDiscoveryAdapter.ts` / `testExecutionAdapter.ts`). + - The Django test runner expects `TEST_RUN_PIPE` environment variable to be present to send IPC events (see `django_test_runner.py`). + +## Settings referenced by this feature area + +- The extension exposes several `python.testing.*` settings used by adapters and configuration code (declared in `package.json`): + - `python.testing.pytestEnabled`, `python.testing.unittestEnabled` — enable/disable frameworks. + - `python.testing.pytestPath`, `python.testing.pytestArgs`, `python.testing.unittestArgs` — command path and CLI arguments used when spawning helper scripts. + - `python.testing.cwd` — optional working directory used when running discovery/runs. + - `python.testing.autoTestDiscoverOnSaveEnabled`, `python.testing.autoTestDiscoverOnSavePattern` — control automatic discovery on save. + - `python.testing.debugPort` — default port used for debug runs. + - `python.testing.promptToConfigure` — whether to prompt users to configure tests when potential test folders are found. +- Where to look in the code: + - Settings are consumed by `src/client/testing/common/testConfigurationManager.ts`, `src/client/testing/configurationFactory.ts`, and adapters under `src/client/testing/testController/*` which read settings to build CLI args and env for subprocesses. + - The setting definitions and descriptions are in `package.json` and localized strings in `package.nls.json`. + +## Project-based testing (multi-project workspaces) + +Project-based testing enables multi-project workspace support where each Python project gets its own test tree root with its own Python environment. + +### Architecture + +- **TestProjectRegistry** (`testProjectRegistry.ts`): Central registry that: + + - Discovers Python projects via the Python Environments API + - Creates and manages `ProjectAdapter` instances per workspace + - Computes nested project relationships and configures ignore lists + - Falls back to "legacy" single-adapter mode when API unavailable + +- **ProjectAdapter** (`projectAdapter.ts`): Interface representing a single project with: + - Project identity (ID, name, URI from Python Environments API) + - Python environment with execution details + - Test framework adapters (discovery/execution) + - Nested project ignore paths (for parent projects) + +### How it works + +1. **Activation**: When the extension activates, `PythonTestController` checks if the Python Environments API is available. +2. **Project discovery**: `TestProjectRegistry.discoverAndRegisterProjects()` queries the API for all Python projects in each workspace. +3. **Nested handling**: `configureNestedProjectIgnores()` identifies child projects and adds their paths to parent projects' ignore lists. +4. **Test discovery**: For each project, the controller calls `project.discoveryAdapter.discoverTests()` with the project's URI. The adapter sets `PROJECT_ROOT_PATH` environment variable for the Python runner. +5. **Python side**: + - For pytest: `get_test_root_path()` in `vscode_pytest/__init__.py` returns `PROJECT_ROOT_PATH` (if set) or falls back to `cwd`. + - For unittest: `discovery.py` uses `PROJECT_ROOT_PATH` as `top_level_dir` and `project_root_path` to root the test tree at the project directory. +6. **Test tree**: Each project gets its own root node in the Test Explorer, with test IDs scoped by project ID using the `@@vsc@@` separator (defined in `projectUtils.ts`). + +### Nested project handling: pytest vs unittest + +**pytest** supports the `--ignore` flag to exclude paths during test collection. When nested projects are detected, parent projects automatically receive `--ignore` flags for child project paths. This ensures each test appears under exactly one project in the test tree. + +**unittest** does not support path exclusion during `discover()`. Therefore, tests in nested project directories may appear under multiple project roots (both the parent and the child project). This is **expected behavior** for unittest: + +- Each project discovers and displays all tests it finds within its directory structure +- There is no deduplication or collision detection +- Users may see the same test file under multiple project roots if their project structure has nesting + +This approach was chosen because: + +1. unittest's `TestLoader.discover()` has no built-in path exclusion mechanism +2. Implementing custom exclusion would add significant complexity with minimal benefit +3. The existing approach is transparent and predictable - each project shows what it finds + +### Empty projects and root nodes + +If a project discovers zero tests, its root node will still appear in the Test Explorer as an empty folder. This ensures consistent behavior and makes it clear which projects were discovered, even if they have no tests yet. + +### Logging prefix + +All project-based testing logs use the `[test-by-project]` prefix for easy filtering in the output channel. + +### Key files + +- Python side: + - `python_files/vscode_pytest/__init__.py` — `get_test_root_path()` function and `PROJECT_ROOT_PATH` environment variable for pytest. + - `python_files/unittestadapter/discovery.py` — `discover_tests()` with `project_root_path` parameter and `PROJECT_ROOT_PATH` handling for unittest discovery. + - `python_files/unittestadapter/execution.py` — `run_tests()` with `project_root_path` parameter and `PROJECT_ROOT_PATH` handling for unittest execution. +- TypeScript: `testProjectRegistry.ts`, `projectAdapter.ts`, `projectUtils.ts`, and the discovery/execution adapters. + +### Tests + +- `src/test/testing/testController/common/testProjectRegistry.unit.test.ts` — TestProjectRegistry tests +- `src/test/testing/testController/common/projectUtils.unit.test.ts` — Project utility function tests +- `python_files/tests/pytestadapter/test_discovery.py` — pytest PROJECT_ROOT_PATH tests (see `test_project_root_path_env_var()` and `test_symlink_with_project_root_path()`) +- `python_files/tests/unittestadapter/test_discovery.py` — unittest `project_root_path` / PROJECT_ROOT_PATH discovery tests +- `python_files/tests/unittestadapter/test_execution.py` — unittest `project_root_path` / PROJECT_ROOT_PATH execution tests +- `src/test/testing/testController/unittest/testDiscoveryAdapter.unit.test.ts` — unittest discovery adapter PROJECT_ROOT_PATH tests +- `src/test/testing/testController/unittest/testExecutionAdapter.unit.test.ts` — unittest execution adapter PROJECT_ROOT_PATH tests + +## Coverage support (how it works) + +- Coverage is supported by running the Python helper scripts with coverage enabled and then collecting a coverage payload from the runner. + - Pytest-side coverage logic lives in `python_files/vscode_pytest/__init__.py` (checks `COVERAGE_ENABLED`, imports `coverage`, computes per-file metrics and emits a `CoveragePayloadDict`). + - Unittest adapters enable coverage by setting environment variable(s) (e.g. `COVERAGE_ENABLED`) when launching the subprocess; adapters and `resultResolver.ts` handle the coverage profile kind (`TestRunProfileKind.Coverage`). +- Flow summary: + 1. User starts a Coverage run via Test Explorer (profile kind `Coverage`). + 2. Controller/adapters set `COVERAGE_ENABLED` (or equivalent) in the subprocess env and invoke the runner script. + 3. The Python runner collects coverage (using `coverage` or `pytest-cov`), builds a file-level coverage map, and sends a coverage payload back over the IPC. + 4. `PythonResultResolver` (`src/client/testing/testController/common/resultResolver.ts`) receives the coverage payload and stores `detailedCoverageMap` used by the TestController profile to show file-level coverage details. +- Tests that exercise coverage flows are under `src/test/testing/*` and `python_files/tests/*` (see `testingAdapter.test.ts` and adapter unit tests that assert `COVERAGE_ENABLED` is set appropriately). + +## Interaction with the VS Code API + +- TestController API + - The feature area is built on VS Code's TestController/TestItem/TestRun APIs (`vscode.tests.createTestController` / `tests.createTestController` in the code). The controller creates a `TestController` in `src/client/testing/testController/controller.ts` and synchronizes `TestItem` trees with discovery payloads. + - `PythonResultResolver` maps incoming JSON events to VS Code API calls: `testRun.appendOutput`, `testRun.passed/failed/skipped`, `testRun.end`, and `TestItem` updates (labels, locations, children). +- Debug API + - Debug runs use the Debug API to start an attach/launch session. The debug launcher implementation is in `src/client/testing/testController/common/debugLauncher.ts` which constructs a debug configuration and calls the VS Code debug API to start a session (e.g. `vscode.debug.startDebugging`). + - Debug adapter/resolver code in the extension's debugger modules may also be used when attaching to Django or test subprocesses. +- Commands and configuration + - The Test Controller wires commands that appear in the Test Explorer and editor context menus (see `package.json` contributes `commands`) and listens to configuration changes filtered by `python.testing` in `src/client/testing/main.ts`. +- The "Copy Test ID" command (`python.copyTestId`) can be accessed from both the Test Explorer context menu (`testing/item/context`) and the editor gutter icon context menu (`testing/item/gutter`). This command copies test identifiers to the clipboard in the appropriate format for the active test framework (pytest path format or unittest module.class.method format). +- Execution factory & activated environments + - Adapters use the extension `ExecutionFactory` to spawn subprocesses in an activated interpreter (so the user's venv/conda is used). This involves the extension's internal environment execution APIs and sometimes `envExt` helpers when the external environment extension is present. + +## Learnings + +- Never await `showErrorMessage()` calls in test execution adapters as it blocks the test UI thread and freezes the Test Explorer (1) +- VS Code test-related context menus are contributed to using both `testing/item/context` and `testing/item/gutter` menu locations in package.json for full coverage (1) + +``` + +``` diff --git a/.github/lock.yml b/.github/lock.yml deleted file mode 100644 index 16fbb5233be9..000000000000 --- a/.github/lock.yml +++ /dev/null @@ -1,2 +0,0 @@ -daysUntilLock: 7 -lockComment: false diff --git a/.github/prompts/extract-impl-instructions.prompt.md b/.github/prompts/extract-impl-instructions.prompt.md new file mode 100644 index 000000000000..c2fb08b443c7 --- /dev/null +++ b/.github/prompts/extract-impl-instructions.prompt.md @@ -0,0 +1,79 @@ +--- +mode: edit +--- + +Analyze the specified part of the VS Code Python Extension codebase to generate or update implementation instructions in `.github/instructions/.instructions.md`. + +## Task + +Create concise developer guidance focused on: + +### Implementation Essentials + +- **Core patterns**: How this component is typically implemented and extended +- **Key interfaces**: Essential classes, services, and APIs with usage examples +- **Integration points**: How this component interacts with other extension parts +- **Common tasks**: Typical development scenarios with step-by-step guidance + +### Content Structure + +````markdown +--- +description: 'Implementation guide for the part of the Python Extension' +--- + +# Implementation Guide + +## Overview + +Brief description of the component's purpose and role in VS Code Python Extension. + +## Key Concepts + +- Main abstractions and their responsibilities +- Important interfaces and base classes + +## Common Implementation Patterns + +### Pattern 1: [Specific Use Case] + +```typescript +// Code example showing typical implementation +``` +```` + +### Pattern 2: [Another Use Case] + +```typescript +// Another practical example +``` + +## Integration Points + +- How this component connects to other VS Code Python Extension systems +- Required services and dependencies +- Extension points and contribution models + +## Essential APIs + +- Key methods and interfaces developers need +- Common parameters and return types + +## Gotchas and Best Practices + +- Non-obvious behaviors to watch for +- Performance considerations +- Common mistakes to avoid + +``` + +## Guidelines +- **Be specific**: Use actual class names, method signatures, and file paths +- **Show examples**: Include working code snippets from the codebase +- **Target implementation**: Focus on how to build with/extend this component +- **Keep it actionable**: Every section should help developers accomplish tasks + +Source conventions from existing `.github/instructions/*.instructions.md`, `CONTRIBUTING.md`, and codebase patterns. + +If `.github/instructions/.instructions.md` exists, intelligently merge new insights with existing content. +``` diff --git a/.github/prompts/extract-usage-instructions.prompt.md b/.github/prompts/extract-usage-instructions.prompt.md new file mode 100644 index 000000000000..ea48f162a220 --- /dev/null +++ b/.github/prompts/extract-usage-instructions.prompt.md @@ -0,0 +1,30 @@ +--- +mode: edit +--- + +Analyze the user requested part of the codebase (use a suitable ) to generate or update `.github/instructions/.instructions.md` for guiding developers and AI coding agents. + +Focus on practical usage patterns and essential knowledge: + +- How to use, extend, or integrate with this code area +- Key architectural patterns and conventions specific to this area +- Common implementation patterns with code examples +- Integration points and typical interaction patterns with other components +- Essential gotchas and non-obvious behaviors + +Source existing conventions from `.github/instructions/*.instructions.md`, `CONTRIBUTING.md`, and `README.md`. + +Guidelines: + +- Write concise, actionable instructions using markdown structure +- Document discoverable patterns with concrete examples +- If `.github/instructions/.instructions.md` exists, merge intelligently +- Target developers who need to work with or extend this code area + +Update `.github/instructions/.instructions.md` with header: + +``` +--- +description: "How to work with the part of the codebase" +--- +``` diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000000..0058580e92e0 --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,19 @@ +changelog: + exclude: + labels: + - 'no-changelog' + authors: + - 'dependabot' + + categories: + - title: Enhancements + labels: + - 'feature-request' + + - title: Bug Fixes + labels: + - 'bug' + + - title: Code Health + labels: + - 'debt' diff --git a/.github/release_plan.md b/.github/release_plan.md index e263cbf00c08..091ed559825b 100644 --- a/.github/release_plan.md +++ b/.github/release_plan.md @@ -1,88 +1,138 @@ -# Prerequisites - -- Python 3.7 and higher -- run `python3 -m pip install --user -r news/requirements.txt` -- run `python3 -m pip install --user -r tpn/requirements.txt` - -# Release candidate (Monday, XXX XX) - -- [ ] Announce the code freeze (not just to team but also to ptvsd and language server) -- [ ] Update master for the release - - [ ] Create a branch against `master` for a pull request - - [ ] Change the version in [`package.json`](https://github.com/Microsoft/vscode-python/blob/master/package.json) from a `-dev` suffix to `-rc` (🤖) - - [ ] Run `npm install` to make sure [`package-lock.json`](https://github.com/Microsoft/vscode-python/blob/master/package.json) is up-to-date (🤖) - - [ ] Update `requirements.txt` to point to latest release version of [ptvsd](https://github.com/microsoft/ptvsd). - - [ ] Update `languageServerVersion` in `package.json` to point to the latest version (???) of [the Language Server](https://github.com/Microsoft/python-language-server). - - [ ] Update [`CHANGELOG.md`](https://github.com/Microsoft/vscode-python/blob/master/CHANGELOG.md) (🤖) - - [ ] Run [`news`](https://github.com/Microsoft/vscode-python/tree/master/news) (typically `python news --final --update CHANGELOG.md | code-insiders -`) - - [ ] Copy over the "Thanks" section from the previous release - - [ ] Make sure the "Thanks" section is up-to-date (e.g. compare to versions in requirements.json) - - [ ] Touch up news entries (e.g. add missing periods) - - [ ] Check the Markdown rendering to make sure everything looks good - - [ ] Add any relevant news entries for ptvsd and the language server if they were updated - - [ ] Update [`ThirdPartyNotices-Distribution.txt`](https://github.com/Microsoft/vscode-python/blob/master/ThirdPartyNotices-Distribution.txt) by using https://tools.opensource.microsoft.com/notice (see team notes) - - [ ] Update [`ThirdPartyNotices-Repository.txt`](https://github.com/Microsoft/vscode-python/blob/master/ThirdPartyNotices-Repository.txt) as appropriate - - [ ] Create a pull request against `master` (🤖) - - [ ] Merge pull request into `master` -- [ ] Update the [`release` branch](https://github.com/microsoft/vscode-python/branches) - - [ ] Delete the `release` branch in the repo - - [ ] Create a new `release` branch from `master` - - (alternately, force-push the master branch to the GitHub "release" branch) - - [ ] (if necessary) Request that the branch be set anew as "protected" -- [ ] Update master post-release (🤖) - - [ ] Bump the version number to the next monthly ("YYYY.M.0-dev") release in the `master` branch - - [ ] `package.json` - - [ ] `package-lock.json` - - [ ] Create a pull request against `master` - - [ ] Merge pull request into `master` -- [ ] Announce the code freeze is over -- [ ] Update [Component Governance](https://dev.azure.com/ms/vscode-python/_componentGovernance) (Click on "microsoft/vscode-python" on that page) - - [ ] Provide details for any automatically detected npm dependencies - - [ ] Manually add any repository dependencies -- [ ] GDPR bookkeeping (@brettcannon) (🤖; see team notes) -- [ ] Open appropriate [documentation issues](https://github.com/microsoft/vscode-docs/issues?q=is%3Aissue+is%3Aopen+label%3Apython) - - new features - - settings changes - - etc. (ask the team) -- [ ] Begin drafting a [blog](http://aka.ms/pythonblog) post -- [ ] Ask CTI to test the release candidate - -# Final (Monday, XXX XX) - -## Preparation - -- [ ] Make sure the [appropriate pull requests](https://github.com/microsoft/vscode-docs/pulls) for the [documentation](https://code.visualstudio.com/docs/python/python-tutorial) -- including the [WOW](https://code.visualstudio.com/docs/languages/python) page -- are ready -- [ ] final updates to the `release` branch - - [ ] Create a branch against `release` for a pull request - - [ ] Update the version in [`package.json`](https://github.com/Microsoft/vscode-python/blob/master/package.json) (🤖) - - [ ] Run `npm install` to make sure [`package-lock.json`](https://github.com/Microsoft/vscode-python/blob/master/package.json) is up-to-date (the only update should be the version number if `package-lock.json` has been kept up-to-date) (🤖) - - [ ] Update [`CHANGELOG.md`](https://github.com/Microsoft/vscode-python/blob/master/CHANGELOG.md) (🤖) - - [ ] Update version and date for the release section - - [ ] Run [`news`](https://github.com/Microsoft/vscode-python/tree/master/news) and copy-and-paste new entries (typically `python news --final | code-insiders -`; quite possibly nothing new to add) - - [ ] Update [`ThirdPartyNotices-Distribution.txt`](https://github.com/Microsoft/vscode-python/blob/master/ThirdPartyNotices-Distribution.txt) by using https://tools.opensource.microsoft.com/notice (🤖; see team notes) - - [ ] Update [`ThirdPartyNotices-Repository.txt`](https://github.com/Microsoft/vscode-python/blob/master/ThirdPartyNotices-Repository.txt) manually if necessary - - [ ] Create pull request against `release` (🤖) - - [ ] Merge pull request into `release` -- [ ] Make sure component governance is happy - -## Release - -- [ ] Publish the release via Azure DevOps - - [ ] Make sure [CI](https://github.com/Microsoft/vscode-python/blob/master/CONTRIBUTING.md) is passing - - [ ] Make sure the "Upload" stage on the release page succeeded - - [ ] Make sure no extraneous files are being included in the `.vsix` file (make sure to check for hidden files) - - [ ] Deploy the "Publish" stage -- [ ] Publish [documentation changes](https://github.com/Microsoft/vscode-docs/pulls?q=is%3Apr+is%3Aopen+label%3Apython) -- [ ] Publish the [blog](http://aka.ms/pythonblog) post -- [ ] Determine if a hotfix is needed -- [ ] Merge `release` back into `master` (🤖) - -## Clean up after _this_ release - -- [ ] Go through [`info needed` issues](https://github.com/Microsoft/vscode-python/issues?q=is%3Aopen+label%3A%22info+needed%22+-label%3A%22data+science%22+sort%3Aupdated-asc) and close any that have no activity for over a month (🤖) -- [ ] GDPR bookkeeping (🤖) +### General Notes +All dates should align with VS Code's [iteration](https://github.com/microsoft/vscode/labels/iteration-plan) and [endgame](https://github.com/microsoft/vscode/labels/endgame-plan) plans. + +Feature freeze is Monday @ 17:00 America/Vancouver, XXX XX. At that point, commits to `main` should only be in response to bugs found during endgame testing until the release candidate is ready. + +
+ Release Primary and Secondary Assignments for the 2025 Calendar Year + +| Month and version number | Primary | Secondary | +|------------|----------|-----------| +| January v2025.0.0 | Eleanor | Karthik | +| February v2025.2.0 | Anthony | Eleanor | +| March v2025.4.0 | Karthik | Anthony | +| April v2025.6.0 | Eleanor | Karthik | +| May v2025.8.0 | Anthony | Eleanor | +| June v2025.10.0 | Karthik | Anthony | +| July v2025.12.0 | Eleanor | Karthik | +| August v2025.14.0 | Anthony | Eleanor | +| September v2025.16.0 | Karthik | Anthony | +| October v2025.18.0 | Eleanor | Karthik | +| November v2025.20.0 | Anthony | Eleanor | +| December v2025.22.0 | Karthik | Anthony | + +
+ + +# Release candidate (Thursday, XXX XX) +NOTE: This Thursday occurs during TESTING week. Branching should be done during this week to freeze the release with only the correct changes. Any last minute fixes go in as candidates into the release branch and will require team approval. + +Other: +NOTE: Third Party Notices are automatically added by our build pipelines using https://tools.opensource.microsoft.com/notice. +NOTE: the number of this release is in the issue title and can be substituted in wherever you see [YYYY.minor]. + + +### Step 1: +##### Bump the version of `main` to be a release candidate (also updating third party notices, and package-lock.json).❄️ (steps with ❄️ will dictate this step happens while main is frozen 🥶) + +- [ ] checkout to `main` on your local machine and run `git fetch` to ensure your local is up to date with the remote repo. +- [ ] Create a new branch called **`bump-release-[YYYY.minor]`**. +- [ ] Update `pet`: + - [ ] Go to the [pet](https://github.com/microsoft/python-environment-tools) repo and check `main` and latest `release/*` branch. If there are new changes in `main` then create a branch called `release/YYYY.minor` (matching python extension release `major.minor`). + - [ ] Update `build\azure-pipeline.stable.yml` to point to the latest `release/YYYY.minor` for `python-environment-tools`. +- [ ] Change the version in `package.json` to the next **even** number. (🤖) +- [ ] Run `npm install` to make sure `package-lock.json` is up-to-date _(you should now see changes to the `package.json` and `package-lock.json` at this point which update the version number **only**)_. (🤖) +- [ ] Update `ThirdPartyNotices-Repository.txt` as appropriate. You can check by looking at the [commit history](https://github.com/microsoft/vscode-python/commits/main) and scrolling through to see if there's anything listed there which might have pulled in some code directly into the repository from somewhere else. If you are still unsure you can check with the team. +- [ ] Create a PR from your branch **`bump-release-[YYYY.minor]`** to `main`. Add the `"no change-log"` tag to the PR so it does not show up on the release notes before merging it. + +NOTE: this PR will fail the test in our internal release pipeline called `VS Code (pre-release)` because the version specified in `main` is (temporarily) an invalid pre-release version. This is expected as this will be resolved below. + + +### Step 2: Creating your release branch ❄️ +- [ ] Create a release branch by creating a new branch called **`release/YYYY.minor`** branch from `main`. This branch is now the candidate for our release which will be the base from which we will release. + +NOTE: If there are release branches that are two versions old you can delete them at this time. + +### Step 3 Create a draft GitHub release for the release notes (🤖) ❄️ + +- [ ] Create a new [GitHub release](https://github.com/microsoft/vscode-python/releases/new). +- [ ] Specify a new tag called `YYYY.minor.0`. +- [ ] Have the `target` for the github release be your release branch called **`release/YYYY.minor`**. +- [ ] Create the release notes by specifying the previous tag for the last stable release and click `Generate release notes`. Quickly check that it only contain notes from what is new in this release. +- [ ] Click `Save draft`. + +### Step 4: Return `main` to dev and unfreeze (❄️ ➡ 💧) +NOTE: The purpose of this step is ensuring that main always is on a dev version number for every night's 🌃 pre-release. Therefore it is imperative that you do this directly after the previous steps to reset the version in main to a dev version **before** a pre-release goes out. +- [ ] Create a branch called **`bump-dev-version-YYYY.[minor+1]`**. +- [ ] Bump the minor version number in the `package.json` to the next `YYYY.[minor+1]` which will be an odd number, and add `-dev`.(🤖) +- [ ] Run `npm install` to make sure `package-lock.json` is up-to-date _(you should now see changes to the `package.json` and `package-lock.json` only relating to the new version number)_ . (🤖) +- [ ] Create a PR from this branch against `main` and merge it. + +NOTE: this PR should make all CI relating to `main` be passing again (such as the failures stemming from step 1). + +### Step 5: Notifications and Checks on External Release Factors +- [ ] Check [Component Governance](https://dev.azure.com/monacotools/Monaco/_componentGovernance/192726?_a=alerts&typeId=11825783&alerts-view-option=active) to make sure there are no active alerts. +- [ ] Manually add/fix any 3rd-party licenses as appropriate based on what the internal build pipeline detects. +- [ ] Open appropriate [documentation issues](https://github.com/microsoft/vscode-docs/issues?q=is%3Aissue+is%3Aopen+label%3Apython). +- [ ] Contact the PM team to begin drafting a blog post. +- [ ] Announce to the development team that `main` is open again. + + +# Release (Wednesday, XXX XX) + +### Step 6: Take the release branch from a candidate to the finalized release +- [ ] Make sure the [appropriate pull requests](https://github.com/microsoft/vscode-docs/pulls) for the [documentation](https://code.visualstudio.com/docs/python/python-tutorial) -- including the [WOW](https://code.visualstudio.com/docs/languages/python) page -- are ready. +- [ ] Check to make sure any final updates to the **`release/YYYY.minor`** branch have been merged. + +### Step 7: Execute the Release +- [ ] Make sure CI is passing for **`release/YYYY.minor`** release branch (🤖). +- [ ] Run the [CD](https://dev.azure.com/monacotools/Monaco/_build?definitionId=299) pipeline on the **`release/YYYY.minor`** branch. + - [ ] Click `run pipeline`. + - [ ] for `branch/tag` select the release branch which is **`release/YYYY.minor`**. + - NOTE: Please opt to release the python extension close to when VS Code is released to align when release notes go out. When we bump the VS Code engine number, our extension will not go out to stable until the VS Code stable release but this only occurs when we bump the engine number. +- [ ] 🧍🧍 Get approval on the release on the [CD](https://dev.azure.com/monacotools/Monaco/_build?definitionId=299). +- [ ] Click "approve" in the publish step of [CD](https://dev.azure.com/monacotools/Monaco/_build?definitionId=299) to publish the release to the marketplace. 🎉 +- [ ] Take the Github release out of draft. +- [ ] Publish documentation changes. +- [ ] Contact the PM team to publish the blog post. +- [ ] Determine if a hotfix is needed. +- [ ] Merge the release branch **`release/YYYY.minor`** back into `main`. (This step is only required if changes were merged into the release branch. If the only change made on the release branch is the version, this is not necessary. Overall you need to ensure you DO NOT overwrite the version on the `main` branch.) + + +## Steps for Point Release (if necessary) +- [ ] checkout to `main` on your local machine and run `git fetch` to ensure your local is up to date with the remote repo. +- [ ] checkout to the `release/YYY.minor` and check to make sure all necessary changes for the point release have been cherry-picked into the release branch. If not, contact the owner of the changes to do so. +- [ ] Create a branch against **`release/YYYY.minor`** called **`release-[YYYY.minor.point]`**. +- [ ] Bump the point version number in the `package.json` to the next `YYYY.minor.point` +- [ ] Run `npm install` to make sure `package-lock.json` is up-to-date _(you should now see changes to the `package.json` and `package-lock.json` only relating to the new version number)_ . (🤖) +- [ ] If Point Release is due to an issue in `pet`. Update `build\azure-pipeline.stable.yml` to point to the branch `release/YYYY.minor` for `python-environment-tools` with the fix or decided by the team. +- [ ] Create a PR from this branch against `release/YYYY.minor` +- [ ] **Rebase** and merge this PR into the release branch +- [ ] Create a draft GitHub release for the release notes (🤖) ❄️ + - [ ] Create a new [GitHub release](https://github.com/microsoft/vscode-python/releases/new). + - [ ] Specify a new tag called `vYYYY.minor.point`. + - [ ] Have the `target` for the github release be your release branch called **`release/YYYY.minor`**. + - [ ] Create the release notes by specifying the previous tag as the previous version of stable, so the minor release **`vYYYY.minor`** for the last stable release and click `Generate release notes`. + - [ ] Check the generated notes to ensure that all PRs for the point release are included so users know these new changes. + - [ ] Click `Save draft`. +- [ ] Publish the point release + - [ ] Make sure CI is passing for **`release/YYYY.minor`** release branch (🤖). + - [ ] Run the [CD](https://dev.azure.com/monacotools/Monaco/_build?definitionId=299) pipeline on the **`release/YYYY.minor`** branch. + - [ ] Click `run pipeline`. + - [ ] for `branch/tag` select the release branch which is **`release/YYYY.minor`**. + - [ ] 🧍🧍 Get approval on the release on the [CD](https://dev.azure.com/monacotools/Monaco/_build?definitionId=299) and publish the release to the marketplace. 🎉 + - [ ] Take the Github release out of draft. + +## Steps for contributing to a point release +- [ ] Work with team to decide if point release is necessary +- [ ] Work with team or users to verify the fix is correct and solves the problem without creating any new ones +- [ ] Create PR/PRs and merge then each into main as usual +- [ ] Make sure to still mark if the change is "bug" or "no-changelog" +- [ ] Cherry-pick all PRs to the release branch and check that the changes are in before the package is bumped +- [ ] Notify the release champ that your changes are in so they can trigger a point-release + ## Prep for the _next_ release -- [ ] Create a new [release plan](https://raw.githubusercontent.com/microsoft/vscode-python/master/.github/release_plan.md) (🤖) -- [ ] [(Un-)pin](https://help.github.com/en/articles/pinning-an-issue-to-your-repository) [release plan issues](https://github.com/Microsoft/vscode-python/labels/release%20plan) (🤖) +- [ ] Create a new [release plan](https://raw.githubusercontent.com/microsoft/vscode-python/main/.github/release_plan.md). (🤖) +- [ ] [(Un-)pin](https://help.github.com/en/articles/pinning-an-issue-to-your-repository) [release plan issues](https://github.com/Microsoft/vscode-python/labels/release-plan) (🤖) diff --git a/.github/test_plan.md b/.github/test_plan.md deleted file mode 100644 index dc55aa904595..000000000000 --- a/.github/test_plan.md +++ /dev/null @@ -1,593 +0,0 @@ -# Test plan - -## Environment - -- OS: XXX (Windows, macOS, latest Ubuntu LTS) - - Shell: XXX (Command Prompt, PowerShell, bash, fish) -- Python - - Distribution: XXX (CPython, miniconda) - - Version: XXX (2.7, latest 3.x) -- VS Code: XXX (Insiders) - -## Tests - -**ALWAYS**: - -- Check the `Output` window under `Python` for logged errors -- Have `Developer Tools` open to detect any errors -- Consider running the tests in a multi-folder workspace -- Focus on in-development features (i.e. experimental debugger and language server) - -
- Scenarios - -### [Environment](https://code.visualstudio.com/docs/python/environments) - -#### Interpreters - -- [ ] Interpreter is [shown in the status bar](https://code.visualstudio.com/docs/python/environments#_choosing-an-environment) -- [ ] An interpreter can be manually specified using the [`Select Interpreter` command](https://code.visualstudio.com/docs/python/environments#_choosing-an-environment) -- [ ] Detected system-installed interpreters -- [ ] Detected an Anaconda installation -- [ ] (Linux/macOS) Detected all interpreters installed w/ [pyenv](https://github.com/pyenv/pyenv) detected -- [ ] [`"python.pythonPath"`](https://code.visualstudio.com/docs/python/environments#_manually-specifying-an-interpreter) triggers an update in the status bar -- [ ] `Run Python File in Terminal` -- [ ] `Run Selection/Line in Python Terminal` - - [ ] Right-click - - [ ] Command - - [ ] `Shift+Enter` - -#### Terminal - -Sample file: - -```python -import requests -request = requests.get("https://drive.google.com/uc?export=download&id=1_9On2-nsBQIw3JiY43sWbrF8EjrqrR4U") -with open("survey2017.zip", "wb") as file: - file.write(request.content) -import zipfile -with zipfile.ZipFile('survey2017.zip') as zip: - zip.extractall('survey2017') -import shutil, os -shutil.move('survey2017/survey_results_public.csv','survey2017.csv') -shutil.rmtree('survey2017') -os.remove('survey2017.zip') -``` - -- [ ] _Shift+Enter_ to send selected code in sample file to terminal works - -#### Virtual environments - -**ALWAYS**: - -- Use the latest version of Anaconda -- Realize that `conda` is slow -- Create an environment with a space in their path somewhere as well as upper and lowercase characters -- Make sure that you do not have `python.pythonPath` specified in your `settings.json` when testing automatic detection -- Do note that the `Select Interpreter` drop-down window scrolls - -- [ ] Detected a single virtual environment at the top-level of the workspace folder on Mac when when `python` command points to default Mac Python installation or `python` command fails in the terminal. - - [ ] Appropriate suffix label specified in status bar (e.g. `(venv)`) -- [ ] Detected a single virtual environment at the top-level of the workspace folder on Windows when `python` fails in the terminal. - - [ ] Appropriate suffix label specified in status bar (e.g. `(venv)`) -- [ ] Detected a single virtual environment at the top-level of the workspace folder - - [ ] Appropriate suffix label specified in status bar (e.g. `(venv)`) - - [ ] [`Create Terminal`](https://code.visualstudio.com/docs/python/environments#_activating-an-environment-in-the-terminal) works - - [ ] Steals focus - - [ ] `"python.terminal.activateEnvironment": false` deactivates automatically running the activation script in the terminal - - [ ] After the language server downloads it is able to complete its analysis of the environment w/o requiring a restart -- [ ] Detect multiple virtual environments contained in the directory specified in `"python.venvPath"` -- [ ] Detected all [conda environments created with an interpreter](https://code.visualstudio.com/docs/python/environments#_conda-environments) - - [ ] Appropriate suffix label specified in status bar (e.g. `(condaenv)`) - - [ ] Prompted to install Pylint - - [ ] Asked whether to install using conda or pip - - [ ] Installs into environment - - [ ] [`Create Terminal`](https://code.visualstudio.com/docs/python/environments#_activating-an-environment-in-the-terminal) works - - [ ] `"python.terminal.activateEnvironment": false` deactivates automatically running the activation script in the terminal - - [ ] After the language server downloads it is able to complete its analysis of the environment w/o requiring a restart -- [ ] (Linux/macOS until [`-m` is supported](https://github.com/Microsoft/vscode-python/issues/978)) Detected the virtual environment created by [pipenv](https://docs.pipenv.org/) - - [ ] Appropriate suffix label specified in status bar (e.g. `(pipenv)`) - - [ ] Prompt to install Pylint uses `pipenv install --dev` - - [ ] [`Create Terminal`](https://code.visualstudio.com/docs/python/environments#_activating-an-environment-in-the-terminal) works - - [ ] `"python.terminal.activateEnvironment": false` deactivates automatically running the activation script in the terminal - - [ ] After the language server downloads it is able to complete its analysis of the environment w/o requiring a restart -- [ ] (Linux/macOS) Virtual environments created under `{workspaceFolder}/.direnv/python-{python_version}` are detected (for [direnv](https://direnv.net/) and its [`layout python3`](https://github.com/direnv/direnv/blob/master/stdlib.sh) support) - - [ ] Appropriate suffix label specified in status bar (e.g. `(venv)`) - -#### [Environment files](https://code.visualstudio.com/docs/python/environments#_environment-variable-definitions-file) - -Sample files: - -```python -# example.py -import os -print('Hello,', os.environ.get('WHO'), '!') -``` - -``` -# .env -WHO=world -PYTHONPATH=some/path/somewhere -SPAM='hello ${WHO}' -``` - -**ALWAYS**: - -- Make sure to use `Reload Window` between tests to reset your environment -- Note that environment files only apply under the debugger and Jedi - -- [ ] Environment variables in a `.env` file are exposed when running under the debugger -- [ ] `"python.envFile"` allows for specifying an environment file manually (e.g. Jedi picks up `PYTHONPATH` changes) -- [ ] `envFile` in a `launch.json` configuration works -- [ ] simple variable substitution works - -#### [Debugging](https://code.visualstudio.com/docs/python/environments#_python-interpreter-for-debugging) - -- [ ] `pythonPath` setting in your `launch.json` overrides your `python.pythonPath` default setting - -### [Linting](https://code.visualstudio.com/docs/python/linting) - -**ALWAYS**: - -- Check under the `Problems` tab to see e.g. if a linter is raising errors - -#### Language server - -- [ ] LS is downloaded using HTTP (no SSL) when the "http.proxyStrictSSL" setting is false -- [ ] An item with a cloud icon appears in the status bar indicating progress while downloading the language server -- [ ] Installing [`requests`](https://pypi.org/project/requests/) in virtual environment is detected - - [ ] Import of `requests` without package installed is flagged as unresolved - - [ ] Create a virtual environment - - [ ] Install `requests` into the virtual environment - -#### Pylint/default linting - -[Prompting to install Pylint is covered under `Environments` above] - -For testing the disablement of the default linting rules for Pylint: - -```ini -# pylintrc -[MESSAGES CONTROL] -enable=bad-names -``` - -```python3 -# example.py -foo = 42 # Marked as a blacklisted name. -``` - -- [ ] Installation via the prompt installs Pylint as appropriate - - [ ] Uses `--user` for system-install of Python - - [ ] Installs into a virtual environment environment directly -- [ ] Pylint works -- [ ] `"python.linting.pylintUseMinimalCheckers": false` turns off the default rules w/ no `pylintrc` file present -- [ ] The existence of a `pylintrc` file turns off the default rules - -#### Other linters - -**Note**: - -- You can use the `Run Linting` command to run a newly installed linter -- When the extension installs a new linter, it turns off all other linters - -- [ ] flake8 works - - [ ] `Select linter` lists the linter and installs it if necessary -- [ ] mypy works - - [ ] `Select linter` lists the linter and installs it if necessary -- [ ] pycodestyle works - - [ ] `Select linter` lists the linter and installs it if necessary -- [ ] prospector works - - [ ] `Select linter` lists the linter and installs it if necessary -- [ ] pydocstyle works - - [ ] `Select linter` lists the linter and installs it if necessary -- [ ] pylama works - - [ ] `Select linter` lists the linter and installs it if necessary -- [ ] 3 or more linters work simultaneously (make sure you have turned on the linters in your `settings.json`) - - [ ] `Run Linting` runs all activated linters - - [ ] `"python.linting.enabled": false` disables all linters - - [ ] The `Enable Linting` command changes `"python.linting.enabled"` -- [ ] `"python.linting.lintOnSave` works - -### [Editing](https://code.visualstudio.com/docs/python/editing) - -#### [IntelliSense](https://code.visualstudio.com/docs/python/editing#_autocomplete-and-intellisense) - -Please also test for general accuracy on the most "interesting" code you can find. - -- [ ] `"python.autoComplete.extraPaths"` works -- [ ] `"python.autocomplete.addBrackets": true` causes auto-completion of functions to append `()` -- [ ] Auto-completions works - -#### [Formatting](https://code.visualstudio.com/docs/python/editing#_formatting) - -Sample file: - -```python -# There should be _some_ change after running `Format Document`. -import os,sys; -def foo():pass -``` - -- [ ] Prompted to install a formatter if none installed and `Format Document` is run - - [ ] Installing `autopep8` works - - [ ] Installing `black` works - - [ ] Installing `yapf` works -- [ ] Formatters work with default settings (i.e. `"python.formatting.provider"` is specified but not matching `*Path`or `*Args` settings) - - [ ] autopep8 - - [ ] black - - [ ] yapf -- [ ] Formatters work when appropriate `*Path` and `*Args` settings are specified (use absolute paths; use `~` if possible) - - [ ] autopep8 - - [ ] black - - [ ] yapf -- [ ] `"editor.formatOnType": true` works and has expected results - -#### [Refactoring](https://code.visualstudio.com/docs/python/editing#_refactoring) - -- [ ] [`Extract Variable`](https://code.visualstudio.com/docs/python/editing#_extract-variable) works - - [ ] You are prompted to install `rope` if it is not already available -- [ ] [`Extract method`](https://code.visualstudio.com/docs/python/editing#_extract-method) works - - [ ] You are prompted to install `rope` if it is not already available -- [ ] [`Sort Imports`](https://code.visualstudio.com/docs/python/editing#_sort-imports) works - -### [Debugging](https://code.visualstudio.com/docs/python/debugging) - -- [ ] [Configurations](https://code.visualstudio.com/docs/python/debugging#_debugging-specific-app-types) work (see [`package.json`](https://github.com/Microsoft/vscode-python/blob/master/package.json) and the `"configurationSnippets"` section for all of the possible configurations) -- [ ] Running code from start to finish w/ no special debugging options (e.g. no breakpoints) -- [ ] Breakpoint-like things - - [ ] Breakpoint - - [ ] Set - - [ ] Hit - - [ ] Conditional breakpoint - - [ ] Expression - - [ ] Set - - [ ] Hit - - [ ] Hit count - - [ ] Set - - [ ] Hit - - [ ] Logpoint - - [ ] Set - - [ ] Hit -- [ ] Stepping - - [ ] Over - - [ ] Into - - [ ] Out -- [ ] Can inspect variables - - [ ] Through hovering over variable in code - - [ ] `Variables` section of debugger sidebar -- [ ] [Remote debugging](https://code.visualstudio.com/docs/python/debugging#_remote-debugging) works - - [ ] ... over SSH - - [ ] ... on other branches -- [ ] [App Engine](https://code.visualstudio.com/docs/python/debugging#_google-app-engine-debugging) - -### [Unit testing](https://code.visualstudio.com/docs/python/unit-testing) - -#### [`unittest`](https://code.visualstudio.com/docs/python/unit-testing#_unittest-configuration-settings) - -```python -import unittest - -MODULE_SETUP = False - - -def setUpModule(): - global MODULE_SETUP - MODULE_SETUP = True - - -class PassingSetupTests(unittest.TestCase): - CLASS_SETUP = False - METHOD_SETUP = False - - @classmethod - def setUpClass(cls): - cls.CLASS_SETUP = True - - def setUp(self): - self.METHOD_SETUP = True - - def test_setup(self): - self.assertTrue(MODULE_SETUP) - self.assertTrue(self.CLASS_SETUP) - self.assertTrue(self.METHOD_SETUP) - - -class PassingTests(unittest.TestCase): - - def test_passing(self): - self.assertEqual(42, 42) - - def test_passing_still(self): - self.assertEqual("silly walk", "silly walk") - - -class FailingTests(unittest.TestCase): - - def test_failure(self): - self.assertEqual(42, -13) - - def test_failure_still(self): - self.assertEqual("I'm right!", "no, I am!") -``` - -- [ ] `Run All Unit Tests` triggers the prompt to configure the test runner -- [ ] Tests are discovered (as shown by code lenses on each test) - - [ ] Code lens for a class runs all tests for that class - - [ ] Code lens for a method runs just that test - - [ ] `Run Test` works - - [ ] `Debug Test` works - - [ ] Module/suite setup methods are also run (run the `test_setup` method to verify) -- [ ] while debugging tests, an uncaught exception in a test does not - cause ptvsd to raise SystemExit - -#### [`pytest`](https://code.visualstudio.com/docs/python/unit-testing#_pytest-configuration-settings) - -```python -def test_passing(): - assert 42 == 42 - -def test_failure(): - assert 42 == -13 -``` - -- [ ] `Run All Unit Tests` triggers the prompt to configure the test runner - - [ ] `pytest` gets installed -- [ ] Tests are discovered (as shown by code lenses on each test) - - [ ] `Run Test` works - - [ ] `Debug Test` works -- [ ] A `Diagnostic` is shown in the problems pane for each failed/skipped test - - [ ] The `Diagnostic`s are organized according to the file the test was executed from (not necessarily the file it was defined in) - - [ ] The appropriate `DiagnosticRelatedInformation` is shown for each `Diagnostic` - - [ ] The `DiagnosticRelatedInformation` reflects the traceback for the test - -#### [`nose`](https://code.visualstudio.com/docs/python/unit-testing#_nose-configuration-settings) - -```python -def test_passing(): - assert 42 == 42 - -def test_failure(): - assert 42 == -13 -``` - -- [ ] `Run All Unit Tests` triggers the prompt to configure the test runner - - [ ] Nose gets installed -- [ ] Tests are discovered (as shown by code lenses on each test) - - [ ] `Run Test` works - - [ ] `Debug Test` works - -#### General - -- [ ] Code lenses appears - - [ ] `Run Test` lens works (and status bar updates as appropriate) - - [ ] `Debug Test` lens works - - [ ] Appropriate ✔/❌ shown for each test -- [ ] Status bar is functioning - - [ ] Appropriate test results displayed - - [ ] `Run All Unit Tests` works - - [ ] `Discover Unit Tests` works (resets tests result display in status bar) - - [ ] `Run Unit Test Method ...` works - - [ ] `View Unit Test Output` works - - [ ] After having at least one failure, `Run Failed Tests` works -- [ ] `Configure Unit Tests` works - - [ ] quick pick for framework (and its settings) - - [ ] selected framework enabled in workspace settings - - [ ] framework's config added (and old config removed) - - [ ] other frameworks disabled in workspace settings -- [ ] `Configure Unit Tests` does not close if it loses focus -- [ ] Cancelling configuration does not leave incomplete settings -- [ ] The first `"request": "test"` entry in launch.json is used for running unit tests - -### [Data Science](https://code.visualstudio.com/docs/python/jupyter-support) - -#### P0 Test Scenarios - -- [ ] Start and connect to local Jupyter server - 1. Open the file src/test/datascience/manualTestFiles/manualTestFile.py in VSCode - 1. At the top of the file it will list the things that you need installed in your Python environment - 1. On the first cell click `Run Below` - 1. Interactive Window should open, show connection information, and execute cells - 1. The first thing in the window should have a line like this: `Jupyter Server URI: http://localhost:[port number]/?token=[token value]` -- [ ] Verify Basic Notebook Editor - 1. Create a new file in VS code with the extension .ipynb - 1. Open the file - 1. The Notebook Editor should open - 1. Verify that there is a single cell in the notebook editor - 1. Add `print('bar')` to that cell - 1. Run the cell - 1. Verify that `bar` shows up below the input - 1. Add a cell with the topmost hover bar - 1. Verify the cell appears above all others - 1. Add a cell at the bottom with the bottom most hover bar - 1. Verify the cell appears below all cells - 1. Select a cell - 1. Add a cell with the plus button on the cell - 1. Verify cell appears below - 1. Repeat with the topmost toolbar -- [ ] Verify basic outputs - 1. Run all the cells in manualTestFile.py - 1. Check to make sure that no outputs have errors - 1. Verify that graphs and progress bars are shown -- [ ] Verify export / import - 1. With the results from `Start and connect to local server` open click the `Export as Jupyter Notebook` button in the Interactive Window - 1. Choose a file location and save the generated .ipynb file - 1. When the prompt comes up in the lower right choose to open the file in the browser - 1. The file should open in the web browser and contain the output from the Interactive Window - 1. Try the same steps and choose to open the file in the ipynb editor. - 1. The file should open in the Notebook Editor. -- [ ] Verify text entry - 1. In the Interactive Window type in some new code `print('testing')` and submit it to the Interactive Windows - 1. Verify the output from what you added -- [ ] Verify dark and light main themes - 1. Repeat the `Start and connect to local server` and `Verify basic outputs` steps using `Default Dark+` and `Default Light+` themes -- [ ] Verify Variable Explorer - 1. After manualTestFile.py has been run drop down the Variables section at the top of the Interactive Window - 1. In the Variables list there should be an entry for all variables created. These variables might change as more is added to manualTestFile.py. - 1. Check that variables have expected values. They will be truncated for longer items - 1. Sort the list ascending and descending by Type. Also sort the list ascending and descending by Count. Values like (X, Y) use the first X value for Count sort ordering - 1. Check that list, Series, ndarray, and DataFrame types have a button to "Show variable in data viewer" on the right - 1. In the Interactive Window input box add a new variable. Verify that it is added into the Variable Explorer - 1. Export the contents of the interactive window as a notebook and open the notebook editor - 1. Find the first cell and click on the Run Below button - 1. Open the variable explorer and verify the same variables are there - 1. Add a new cell with a variable in it. - 1. Run the cell and verify the variable shows up in the variable explorer -- [ ] Verify Data Explorer - 1. From the listed types in the Variable explorer open up the Data Viewer by clicking the button or double clicking the row - 1. Inspect the data in the Data Viewer for the expected values - [ ] Verify Sorting and Filtering - 1. Open up the myDataFrame item - 1. Sort the name column ascending and descending - 1. Sort one of the numerical columns ascending and descending - 1. Click the Filter Rows button - 1. In the name filter box input 'a' to filter to just name with an a in them - 1. In one of the numerical columns input a number 1 - 9 to filter to just that column - 1. Open the myList variable in the explorer - 1. Make sure that you can scroll all the way to the end of the entries - [ ] Verify notebook outputs - 1. Open the src/test/datascience/manualTestFiles/manualTestFile.py in VSCode. - 1. Run all of the cells in the file. - 1. Interactive Window should open - 1. Export the cells in the interactive window and open the notebook editor - 1. Run all the cells in the notebook editor and verify the same outputs appear as in the interactive window -- [ ] Verify Notebook Editor Intellisense - 1. Open the src/test/datascience/manualTestFiles/manualTestFile.py in VSCode. - 1. Run all of the cells in the file. - 1. Interactive Window should open - 1. Export the cells in the interactive window and open the notebook editor - 1. Hover over each cell in the notebook editor and verify you get hover intellisense - 1. Add a new cell in between cells - 1. Add `import sys` and `sys.executable` to the cell - 1. Move the cell around and verify intellisense hover still works on the `import sys` - 1. Delete and readd the cell and verify intellisense hover still works. -- [ ] Verify Notebook Keyboard Shortcuts - 1. Using the notebook generated from the manualTestFile.py, do the following - 1. Select a cell by clicking on it - 1. Move selection up and down with j,k and arrow keys. - 1. Focus a cell by double clicking on it or hitting the enter key when selected - 1. Move selection through the code with the arrow keys. - 1. Verify selection travels between focused cells - 1. Hit escape when a cell has focus and verify it becomes selected instead of focused - 1. Hit `y` on a markdown cell when not focused and see that it becomes a code cell - 1. Hit `m` on a code cell when not focused and see that it becomes a markdown cell - 1. Hit `l` on a code cell and verify line numbers appear - 1. Hit `o` on a code cell with output and verify that outputs disappear - 1. Hit `d` + `d` and verify a cell is deleted. - 1. Hit `z` and verify a deleted cell reappears - 1. Hit `a` and verify the selected cell moves up - 1. Hit `b` and verify the selected cell moves down - 1. Hit `shift+enter` and verify a cell runs and selection moves to the next cell - 1. Hit `alt+enter` and verify a cell runs and a new cell is added below - 1. Hit `ctrl+enter` and verify a cell runs and selection does not change -- [ ] Verify debugging - 1. Open the file src/test/datascience/manualTestFiles/manualTestFile.py in VSCode - 1. On the first cell click `Run Below` - 1. Interactive Window should open, show connection information, and execute cells - 1. Go back to the first cell and click `Debug Cell` - 1. Debugger should start and have an ip indicator on the first line of the cell - 1. Step through the debugger. - 1. Verify the variables tab of the debugger shows variables. - 1. Verify the variables explorer window shows output not available while debugging - 1. When you get to the end of the cell, the debugger should stop - 1. Output from the cell should show up in the Interactive Window (sometimes you have to finish debugging the cell first) - -#### P1 Test Scenarios - -- [ ] Connect to a `remote` server - 1. Open up a valid python command prompt that can run `jupyter notebook` (a default Anaconda prompt works well) - 1. Run `jupyter notebook` to start up a local Jupyter server - 1. In the command window that launched Jupyter look for the server / token name like so: http://localhost:8888/?token=bf9eae43641cd75015df9104f814b8763ef0e23ffc73720d - 1. Run the command `Python: Select Jupyter server URI` then `Type in the URI to connect to a running jupyter server` - 1. Input the server / token name here - 1. Now run the cells in the manualTestFile.py - 1. Verify that you see the server name in the initial connection message - 1. Verify the outputs of the cells -- [ ] Interactive Window commands - - [ ] Verify per-cell commands - 1. Expand and collapse the input area of a cell - 1. Use the `X` button to remove a cell - 1. Use the `Goto Code` button to jump to the part of the .py file that submitted the code - - [ ] Verify top menu commands - 1. Use `X` to delete all cells - 1. Undo the delete action with `Undo` - 1. Redo the delete action with `Redo` - 1. In manualTestFile.py modify the trange command in the progress bar from 100 to 2000. Run the Cell. As the cell is running hit the `Interrupt iPython Kernel` button - 1. The progress bar should be interrupted and you should see a KeyboardInterrupt error message in the output - 1. Test the `Restart iPython kernel` command. Kernel should be restarted and you should see a status output message for the kernel restart - 1. Use the expand all input and collapse all input commands to collapse all cell inputs -- [ ] Verify theming works - 1. Start Python Interactive window - 1. Add a cell with some comments - 1. Switch VS Code theme to something else - 1. Check that the cell you just added updates the comment color - 1. Switch back and forth between a 'light' and a 'dark' theme - 1. Check that the cell switches colors - 1. Check that the buttons on the top change to their appropriate 'light' or 'dark' versions - 1. Enable the 'ignoreVscodeTheme' setting - 1. Close the Python Interactive window and reopen it. The theme in just the 'Python Interactive' window should be light - 1. Switch to a dark theme. Make sure the interactive window remains in the light theme. -- [ ] Verify code lenses - 1. Check that `Run Cell` `Run Above` and `Run Below` all do the correct thing -- [ ] Verify context menu navigation commands - 1. Check the `Run Current Cell` and `Run Current Cell And Advance` context menu commands - 1. If run on the last cell of the file `Run Current Cell And Advance` should create a new empty cell and advance to it -- [ ] Verify command palette commands - 1. Close the Interactive Window then pick `Python: Show Interactive Window` - 1. Restart the kernel and pick `Python: Run Current File In Python Interactive Window` it should run the whole file again -- [ ] Verify shift-enter - 1. Move to the top cell in the .py file - 1. Shift-enter should run each cell and advance to the next - 1. Shift-enter on the final cell should create a new cell and move to it -- [ ] Verify file without cells - 1. Open the manualTestFileNoCells.py file - 1. Select a chunk of code, shift-enter should send it to the terminal - 1. Open VSCode settings, change `Send Selection To Interactive Window` to true - 1. Select a chunk of code, shift-enter should send that selection to the Interactive Windows - 1. Move your cursor to a line, but don't select anything. Shift-enter should send that line to the Interactive Window -- [ ] Multiple installs - 1. Close and re-open VSCode to make sure that all jupyter servers are closed - 1. Also make sure you are set to locally launch Jupyter and not to connect to an existing URI - 1. In addition to your main testing environment install a new python or miniconda install (conda won't work as it has Jupyter by default) - 1. In VS code change the python interpreter to the new install - 1. Try `Run Cell` - 1. You should get a message that Jupyter was not found and that it is defaulting back to launch on the python instance that has Jupyter -- [ ] LiveShare Support - 1. Install the LiveShare VSCode Extension - 1. Open manualTestFile.py in VSCode - 1. Run the first cell in the file - 1. Switch to the `Live Share` tab in VS Code and start a session - - [ ] Verify server start - 1. Jupyter server instance should appear in the live share tab - 1. Open another window of VSCode - 1. Connect the second instance of VSCode as a Guest to the first Live Share session - 1. After the workspace opens, open the manualTestFile.py on the Guest instance - 1. On the Guest instance run a cell from the file, both via the codelens and via the command palette `Run Cell` command - - [ ] Verify results - 1. Output should show up on the Guest Interactive Window - 1. Same output should show up in the Host Interactive Window - 1. On the Host instance run a cell from the file, both via the codelens and via the command palette - - [ ] Verify results - 1. Output should show up on the Guest Interactive Window - 1. Same output should show up in the Host Interactive Window - 1. Export the file to a notebook - 1. Open the notebook editor on the host - 1. Run a cell on the host - 1. Verify the editor opens on the guest and the cell is run there too - -#### P2 Test Scenarios - -- [ ] Directory change - - [ ] Verify directory change in export - 1. Follow the previous steps for export, but export the ipynb to a directory outside of the current workspace - 1. Open the file in the browser, you should get an initial cell added to change directory back to your workspace directory - - [ ] Verify directory change in import - 1. Follow the previous steps for import, but import an ipynb that is located outside of your current workspace - 1. Open the file in the editor. There should be python code at the start to change directory to the previous location of the .ipynb file -- [ ] Interactive Window input history history - 1. Start up an Interactive Window session - 1. Input several lines into the Interactive Window terminal - 1. Press up to verify that those previously entered lines show in the Interactive Window terminal history -- [ ] Extra themes 1. Try several of the themes that come with VSCode that are not the default Dark+ and Light+ -
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000000..09d019dec4a7 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,449 @@ +name: Build + +on: + push: + branches: + - 'main' + - 'release' + - 'release/*' + - 'release-*' + +permissions: {} + +env: + NODE_VERSION: 22.21.1 + PYTHON_VERSION: '3.10' # YML treats 3.10 the number as 3.1, so quotes around 3.10 + # Force a path with spaces and to test extension works in these scenarios + # Unicode characters are causing 2.7 failures so skip that for now. + special-working-directory: './path with spaces' + special-working-directory-relative: 'path with spaces' + # Use the mocha-multi-reporters and send output to both console (spec) and JUnit (mocha-junit-reporter). + # Also enables a reporter which exits the process running the tests if it haven't already. + MOCHA_REPORTER_JUNIT: true + +jobs: + setup: + name: Set up + if: github.repository == 'microsoft/vscode-python' + runs-on: ubuntu-latest + defaults: + run: + shell: python + outputs: + vsix_basename: ${{ steps.vsix_names.outputs.vsix_basename }} + vsix_name: ${{ steps.vsix_names.outputs.vsix_name }} + vsix_artifact_name: ${{ steps.vsix_names.outputs.vsix_artifact_name }} + steps: + - name: VSIX names + id: vsix_names + run: | + import os + if os.environ["GITHUB_REF"].endswith("/main"): + vsix_type = "insiders" + else: + vsix_type = "release" + print(f"::set-output name=vsix_name::ms-python-{vsix_type}.vsix") + print(f"::set-output name=vsix_basename::ms-python-{vsix_type}") + print(f"::set-output name=vsix_artifact_name::ms-python-{vsix_type}-vsix") + + build-vsix: + name: Create VSIX + if: github.repository == 'microsoft/vscode-python' + needs: setup + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: windows-latest + target: x86_64-pc-windows-msvc + vsix-target: win32-x64 + - os: windows-latest + target: aarch64-pc-windows-msvc + vsix-target: win32-arm64 + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + vsix-target: linux-x64 + # - os: ubuntu-latest + # target: aarch64-unknown-linux-gnu + # vsix-target: linux-arm64 + # - os: ubuntu-latest + # target: arm-unknown-linux-gnueabihf + # vsix-target: linux-armhf + # - os: macos-latest + # target: x86_64-apple-darwin + # vsix-target: darwin-x64 + # - os: macos-14 + # target: aarch64-apple-darwin + # vsix-target: darwin-arm64 + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + vsix-target: alpine-x64 + # - os: ubuntu-latest + # target: aarch64-unknown-linux-musl + # vsix-target: alpine-arm64 + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: 'python-env-tools' + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Build VSIX + uses: ./.github/actions/build-vsix + with: + node_version: ${{ env.NODE_VERSION}} + vsix_name: ${{ needs.setup.outputs.vsix_basename }}-${{ matrix.vsix-target }}.vsix + artifact_name: ${{ needs.setup.outputs.vsix_artifact_name }}-${{ matrix.vsix-target }} + cargo_target: ${{ matrix.target }} + vsix_target: ${{ matrix.vsix-target }} + + lint: + name: Lint + if: github.repository == 'microsoft/vscode-python' + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Lint + uses: ./.github/actions/lint + with: + node_version: ${{ env.NODE_VERSION }} + + check-types: + name: Check Python types + if: github.repository == 'microsoft/vscode-python' + runs-on: ubuntu-latest + steps: + - name: Use Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v6 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Install core Python requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + options: '-t ./python_files/lib/python --no-cache-dir --implementation py' + + - name: Install Jedi requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + requirements-file: './python_files/jedilsp_requirements/requirements.txt' + options: '-t ./python_files/lib/jedilsp --no-cache-dir --implementation py' + + - name: Install other Python requirements + run: | + python -m pip install --upgrade -r build/test-requirements.txt + + - name: Run Pyright + uses: jakebailey/pyright-action@8ec14b5cfe41f26e5f41686a31eb6012758217ef # v3.0.2 + with: + version: 1.1.308 + working-directory: 'python_files' + + python-tests: + name: Python Tests + # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. + runs-on: ${{ matrix.os }} + defaults: + run: + working-directory: ${{ env.special-working-directory }} + strategy: + fail-fast: false + matrix: + # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, + # macOS runners are expensive, and we assume that Ubuntu is enough to cover the Unix case. + os: [ubuntu-latest, windows-latest] + # Run the tests on the oldest and most recent versions of Python. + python: ['3.10', '3.x', '3.13'] + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + path: ${{ env.special-working-directory-relative }} + persist-credentials: false + + - name: Use Python ${{ matrix.python }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python }} + + - name: Install base Python requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + requirements-file: '"${{ env.special-working-directory-relative }}/requirements.txt"' + options: '-t "${{ env.special-working-directory-relative }}/python_files/lib/python" --no-cache-dir --implementation py' + + - name: Install test requirements + run: python -m pip install --upgrade -r build/test-requirements.txt + + - name: Run Python unit tests + run: python python_files/tests/run_all.py + + tests: + name: Tests + if: github.repository == 'microsoft/vscode-python' + runs-on: ${{ matrix.os }} + defaults: + run: + working-directory: ${{ env.special-working-directory }} + strategy: + fail-fast: false + matrix: + # We're not running CI on macOS for now because it's one less matrix + # entry to lower the number of runners used, macOS runners are expensive, + # and we assume that Ubuntu is enough to cover the UNIX case. + os: [ubuntu-latest, windows-latest] + python: ['3.x'] + test-suite: [ts-unit, venv, single-workspace, multi-workspace, debugger, functional] + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + path: ${{ env.special-working-directory-relative }} + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: ${{ env.special-working-directory-relative }}/python-env-tools + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Install Node + uses: actions/setup-node@v6 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + cache-dependency-path: ${{ env.special-working-directory-relative }}/package-lock.json + + - name: Install dependencies (npm ci) + run: npm ci + + - name: Compile + run: npx gulp prePublishNonBundle + + - name: Localization + run: npx @vscode/l10n-dev@latest export ./src + + - name: Install Python ${{ matrix.python }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python }} + + - name: Upgrade Pip + run: python -m pip install -U pip + + # For faster/better builds of sdists. + - name: Install build pre-requisite + run: python -m pip install wheel nox + + - name: Install Python Extension dependencies (jedi, etc.) + run: nox --session install_python_libs + + - name: Install test requirements + run: python -m pip install --upgrade -r build/test-requirements.txt + + - name: Rust Tool Chain setup + uses: dtolnay/rust-toolchain@stable + + - name: Build Native Binaries + run: nox --session native_build + shell: bash + + - name: Install functional test requirements + run: python -m pip install --upgrade -r ./build/functional-test-requirements.txt + if: matrix.test-suite == 'functional' + + - name: Prepare pipenv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + python -m pip install pipenv + python -m pipenv run python ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} pipenvPath + + - name: Prepare poetry for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + python -m pip install poetry + Move-Item -Path ".\build\ci\pyproject.toml" -Destination . + poetry env use python + + - name: Prepare virtualenv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + python -m pip install virtualenv + python -m virtualenv .virtualenv/ + if ('${{ matrix.os }}' -match 'windows-latest') { + & ".virtualenv/Scripts/python.exe" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} virtualEnvPath + } else { + & ".virtualenv/bin/python" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} virtualEnvPath + } + + - name: Prepare venv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' && startsWith(matrix.python, 3.) + run: | + python -m venv .venv + if ('${{ matrix.os }}' -match 'windows-latest') { + & ".venv/Scripts/python.exe" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} venvPath + } else { + & ".venv/bin/python" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} venvPath + } + + - name: Prepare conda for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + # 1. For `*.testvirtualenvs.test.ts` + if ('${{ matrix.os }}' -match 'windows-latest') { + $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath python.exe + $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath Scripts | Join-Path -ChildPath conda + } else{ + $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath bin | Join-Path -ChildPath python + $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath bin | Join-Path -ChildPath conda + } + & $condaPythonPath ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} condaExecPath $condaExecPath + & $condaPythonPath ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} condaPath + & $condaExecPath init --all + + - name: Set CI_PYTHON_PATH and CI_DISABLE_AUTO_SELECTION + run: | + echo "CI_PYTHON_PATH=python" >> $GITHUB_ENV + echo "CI_DISABLE_AUTO_SELECTION=1" >> $GITHUB_ENV + shell: bash + if: matrix.test-suite != 'ts-unit' + + # Run TypeScript unit tests only for Python 3.X. + - name: Run TypeScript unit tests + run: npm run test:unittests + if: matrix.test-suite == 'ts-unit' && startsWith(matrix.python, '3.') + + # The virtual environment based tests use the `testSingleWorkspace` set of tests + # with the environment variable `TEST_FILES_SUFFIX` set to `testvirtualenvs`, + # which is set in the "Prepare environment for venv tests" step. + # We also use a third-party GitHub Action to install xvfb on Linux, + # run tests and then clean up the process once the tests ran. + # See https://github.com/GabrielBB/xvfb-action + - name: Run venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + CI_PYTHON_VERSION: ${{ matrix.python }} + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testSingleWorkspace + working-directory: ${{ env.special-working-directory }} + if: matrix.test-suite == 'venv' && matrix.os == 'ubuntu-latest' + + - name: Run single-workspace tests + env: + CI_PYTHON_VERSION: ${{ matrix.python }} + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testSingleWorkspace + working-directory: ${{ env.special-working-directory }} + if: matrix.test-suite == 'single-workspace' + + - name: Run multi-workspace tests + env: + CI_PYTHON_VERSION: ${{ matrix.python }} + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testMultiWorkspace + working-directory: ${{ env.special-working-directory }} + if: matrix.test-suite == 'multi-workspace' + + - name: Run debugger tests + env: + CI_PYTHON_VERSION: ${{ matrix.python }} + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testDebugger + working-directory: ${{ env.special-working-directory }} + if: matrix.test-suite == 'debugger' + + # Run TypeScript functional tests + - name: Run TypeScript functional tests + run: npm run test:functional + if: matrix.test-suite == 'functional' + + smoke-tests: + name: Smoke tests + if: github.repository == 'microsoft/vscode-python' + runs-on: ${{ matrix.os }} + needs: [setup, build-vsix] + strategy: + fail-fast: false + matrix: + # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, + # macOS runners are expensive, and we assume that Ubuntu is enough to cover the UNIX case. + include: + - os: windows-latest + vsix-target: win32-x64 + - os: ubuntu-latest + vsix-target: linux-x64 + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: ${{ env.special-working-directory-relative }}/python-env-tools + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Smoke tests + uses: ./.github/actions/smoke-tests + with: + node_version: ${{ env.NODE_VERSION }} + artifact_name: ${{ needs.setup.outputs.vsix_artifact_name }}-${{ matrix.vsix-target }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index d6a047017218..000000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,483 +0,0 @@ -name: CI - -on: - push: - branches: - # Run the CI workflow only on master for microsoft/vscode-python for now. - - master - -env: - PYTHON_VERSION: 3.8 - CACHE_NPM_DEPS: cache-npm - CACHE_OUT_DIRECTORY: cache-out-directory - CACHE_PIP_DEPS: cache-pip - # Key for the cache created at the end of the the 'Cache ./pythonFiles/lib/python' step. - CACHE_PYTHONFILES: cache-pvsc-pythonFiles - ARTIFACT_NAME_VSIX: ms-python-insiders-vsix - COVERAGE_REPORTS: tests-coverage-reports - TEST_RESULTS_DIRECTORY: . - LKG_TAG: ci-lkg - -jobs: - ### Initialization: retrieve, install and cache dependencies - python-deps: - name: Install Python Requirements - runs-on: ubuntu-latest - if: github.repository == 'microsoft/vscode-python' - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Use Python ${{env.PYTHON_VERSION}} - uses: actions/setup-python@v1 - with: - python-version: ${{env.PYTHON_VERSION}} - - - name: Upgrade pip - run: python -m pip install -U pip - - - name: Install Python requirements - run: | - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/old_ptvsd --no-cache-dir --implementation py --no-deps --upgrade 'ptvsd==4.3.2' - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/debugpy/no_wheels --no-cache-dir --implementation py --no-deps --upgrade --pre debugpy - - - name: Install debugpy wheels - run: | - python -m pip --disable-pip-version-check install -r build/debugger-install-requirements.txt - python ./pythonFiles/install_debugpy.py - - # Retrieve the list of debugpy versions from PyPI in order to increase the specificity of the pip cache key, - # so that the cache gets invalidated as necessary. - # See https://github.com/microsoft/vscode-python/pull/9843#discussion_r373635221 - - name: curl PyPI to get debugpy versions - run: curl --output debugpy.json https://pypi.org/pypi/debugpy/json - - - name: Cache pip files - uses: actions/cache@v1 - with: - path: ~/.cache/pip - key: ${{runner.os}}-${{env.CACHE_PIP_DEPS}}-pip-${{env.PYTHON_VERSION}}-${{hashFiles('requirements.txt')}}-${{hashFiles('build/debugger-install-requirements.txt')}}-${{hashFiles('debugpy.json')}} - - - name: Cache ./pythonFiles/lib/python - uses: actions/cache@v1 - with: - path: ./pythonFiles/lib/python - key: ${{runner.os}}-${{env.CACHE_PYTHONFILES}}-pythonFiles-${{env.PYTHON_VERSION}}-${{hashFiles('requirements.txt')}}-${{hashFiles('build/debugger-install-requirements.txt')}}-${{hashFiles('debugpy.json')}} - - js-ts-deps: - name: Install npm dependencies - runs-on: ubuntu-latest - if: github.repository == 'microsoft/vscode-python' - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Install dependencies (npm ci) - run: npm ci --prefer-offline - - - name: Cache npm files - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{runner.os}}-${{env.CACHE_NPM_DEPS}}-${{hashFiles('package-lock.json')}} - - ### Hygiene + VSIX upload - compile-hygiene: - name: Compile, lint, check for errors - runs-on: ubuntu-latest - if: github.repository == 'microsoft/vscode-python' - needs: [js-ts-deps, python-deps] - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Retrieve cached npm files - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{runner.os}}-${{env.CACHE_NPM_DEPS}}-${{hashFiles('package-lock.json')}} - - - name: Install dependencies (npm ci) - run: npm ci --prefer-offline - - - name: Run gulp prePublishNonBundle - run: npx gulp prePublishNonBundle - - - name: Cache the out/ directory - uses: actions/cache@v1 - with: - path: ./out - key: ${{runner.os}}-${{env.CACHE_OUT_DIRECTORY}}-${{hashFiles('src/**')}} - - - name: Check dependencies - run: npm run checkDependencies - - - name: Run linting on TypeScript code - run: npx tslint --project tsconfig.json - - - name: Run prettier on TypeScript code - run: npx prettier 'src/**/*.ts*' --check - - - name: Run prettier on JavaScript code - run: npx prettier 'build/**/*.js' --check - - - name: Use Python ${{env.PYTHON_VERSION}} - uses: actions/setup-python@v1 - with: - python-version: ${{env.PYTHON_VERSION}} - - - name: Run Black on Python code - run: | - python -m pip install -U black - python -m black . --check - working-directory: pythonFiles - - build-vsix: - name: Build VSIX - runs-on: ubuntu-latest - if: github.repository == 'microsoft/vscode-python' - needs: [python-deps, js-ts-deps] - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Retrieve cached npm files - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{runner.os}}-${{env.CACHE_NPM_DEPS}}-${{hashFiles('package-lock.json')}} - - - name: curl PyPI to get debugpy versions - run: curl --output debugpy.json https://pypi.org/pypi/debugpy/json - - - name: Retrieve cached pythonFiles/ directory - uses: actions/cache@v1 - with: - path: ./pythonFiles/lib/python - key: ${{runner.os}}-${{env.CACHE_PYTHONFILES}}-pythonFiles-${{env.PYTHON_VERSION}}-${{hashFiles('requirements.txt')}}-${{hashFiles('build/debugger-install-requirements.txt')}}-${{hashFiles('debugpy.json')}} - - - name: Install dependencies (npm ci) - run: npm ci --prefer-offline - - - name: Clean directory - run: npm run clean - - # Use the GITHUB_RUN_ID environment variable to update the build number. - # GITHUB_RUN_ID is a unique number for each run within a repository. - # This number does not change if you re-run the workflow run. - - name: Update build number - run: npm run updateBuildNumber -- --buildNumber $GITHUB_RUN_ID - - - name: Package the VSIX - run: npm run package - - - uses: actions/upload-artifact@v1 - with: - name: ${{env.ARTIFACT_NAME_VSIX}} - path: ms-python-insiders.vsix - - ### Non-smoke tests - tests: - name: Tests - # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. - runs-on: ${{ matrix.os }} - if: github.repository == 'microsoft/vscode-python' - needs: [python-deps, js-ts-deps] - strategy: - matrix: - # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, - # macOS runners are expensive, and we assume that Ubuntu is enough to cover the UNIX case. - os: [ubuntu-latest, windows-latest] - # Run the tests on the oldest and most recent versions of Python. - python: [2.7, 3.8] - test-suite: [ts-unit, python-unit, venv, single-workspace, multi-workspace, debugger, functional] - env: - # Something in Node 12.16.0 breaks the TS debug adapter, and ubuntu-latest bundles Node 12.16.1. - # We can remove this when we switch over to the python-based DA in https://github.com/microsoft/vscode-python/issues/7136. - # See https://github.com/microsoft/ptvsd/issues/2068 - NODE_VERSION: 12.15.0 - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Retrieve cached npm files - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{runner.os}}-${{env.CACHE_NPM_DEPS}}-${{hashFiles('package-lock.json')}} - - - name: Install dependencies (npm ci) - run: npm ci - - - name: Retrieve cached compile output directory - # Use an id for this step so that its cache-hit output can be accessed and checked in the next step. - id: out-cache - uses: actions/cache@v1 - with: - path: ./out - key: ${{runner.os}}-${{env.CACHE_OUT_DIRECTORY}}-${{hashFiles('src/**')}} - - - name: Compile if not cached - run: npx gulp prePublishNonBundle - if: steps.out-cache.outputs.cache-hit == false - - - name: Use Python ${{matrix.python}} - uses: actions/setup-python@v1 - with: - python-version: ${{matrix.python}} - - - name: Use Node ${{env.NODE_VERSION}} - uses: actions/setup-node@v1 - with: - node-version: ${{env.NODE_VERSION}} - - - name: curl PyPI to get debugpy versions - run: curl --output debugpy.json https://pypi.org/pypi/debugpy/json - - - name: Retrieve cached pythonFiles/ directory - uses: actions/cache@v1 - # Use an id for this step so that its cache-hit output can be accessed and checked in the next step. - id: pythonFiles-cache - with: - path: ./pythonFiles/lib/python - key: ${{runner.os}}-${{env.CACHE_PYTHONFILES}}-pythonFiles-${{env.PYTHON_VERSION}}-${{hashFiles('requirements.txt')}}-${{hashFiles('build/debugger-install-requirements.txt')}}-${{hashFiles('debugpy.json')}} - - - name: Install Python requirements if not cached - run: | - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/old_ptvsd --no-cache-dir --implementation py --no-deps --upgrade 'ptvsd==4.3.2' - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/debugpy/no_wheels --no-cache-dir --implementation py --no-deps --upgrade --pre debugpy - # We need to have debugpy available in wheels/ so that tests relying on it keep passing, but we don't need install_debugpy's logic in the test phase. - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/debugpy/wheels --no-cache-dir --implementation py --no-deps --upgrade --pre debugpy - if: steps.pythonFiles-cache.outputs.cache-hit == false - - - name: Install test requirements - run: python -m pip install --upgrade -r build/test-requirements.txt - - - name: Install IPython test requirements - run: | - python -m pip install numpy - python -m pip install --upgrade -r ./build/ipython-test-requirements.txt - if: matrix.test-suite == 'python-unit' - - - name: Install functional test requirements - run: | - python -m pip install numpy - python -m pip install --upgrade -r ./build/functional-test-requirements.txt - if: matrix.test-suite == 'functional' - - - name: Prepare environment for venv tests - env: - TEST_FILES_SUFFIX: testvirtualenvs - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - run: | - # venv/bin or venv\\Scripts (windows)? - $environmentExecutableFolder = 'bin' - if ('${{runner.os}}' -match 'windows-latest') { - $environmentExecutableFolder = 'Scripts' - } - - # pipenv - python -m pip install pipenv - python -m pipenv run python build/ci/addEnvPath.py ${{env.PYTHON_VIRTUAL_ENVS_LOCATION}} pipenvPath - - # venv - if ('${{matrix.python}}' -like '3.?') { - python -m venv .venv - & ".venv/$environmentExecutableFolder/python" ./build/ci/addEnvPath.py ${{env.PYTHON_VIRTUAL_ENVS_LOCATION}} venvPath - } - - # virtualenv - python -m pip install virtualenv - python -m virtualenv .virtualenv - & ".virtualenv/$environmentExecutableFolder/python" ./build/ci/addEnvPath.py ${{env.PYTHON_VIRTUAL_ENVS_LOCATION}} virtualEnvPath - - # conda - - # 1. For `terminalActivation.testvirtualenvs.test.ts` - - $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath $environmentExecutableFolder | Join-Path -ChildPath conda - if ('${{runner.os}}' -match 'windows-latest') { - $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath python - } else{ - $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath $environmentExecutableFolder | Join-Path -ChildPath python - & $condaPythonPath ./build/ci/addEnvPath.py ${{env.PYTHON_VIRTUAL_ENVS_LOCATION}} condaExecPath $condaExecPath - } - & $condaPythonPath ./build/ci/addEnvPath.py ${{env.PYTHON_VIRTUAL_ENVS_LOCATION}} condaPath - - # 2. For `interpreterLocatorService.testvirtualenvs.ts` - - & $condaExecPath create -n "test_env1" -y python - & $condaExecPath create -p "./test_env2" -y python - & $condaExecPath create -p "$Env:HOME/test_env3" -y python - shell: pwsh - if: matrix.test-suite == 'venv' - - # Run TypeScript unit tests only for Python 3.X. - - name: Run TypeScript unit tests - run: npm run test:unittests:cover - if: matrix.test-suite == 'ts-unit' && startsWith(matrix.python, 3.) - - # Upload unit test coverage reports for later use in the "reports" job. - - name: Upload unit test coverage reports - uses: actions/upload-artifact@v1 - with: - name: ${{runner.os}}-${{env.COVERAGE_REPORTS}} - path: .nyc_output - if: matrix.test-suite == 'ts-unit' && startsWith(matrix.python, 3.) - - # Run the Python and IPython tests in our codebase. - - name: Run Python and IPython unit tests - run: | - python pythonFiles/tests/run_all.py - python -m IPython pythonFiles/tests/run_all.py - if: matrix.test-suite == 'python-unit' - - # The virtual environment based tests use the `testSingleWorkspace` set of tests - # with the environment variable `TEST_FILES_SUFFIX` set to `testvirtualenvs`, - # which is set in the "Prepare environment for venv tests" step. - # We also use a third-party GitHub Action to install xvfb on Linux, - # run tests and then clean up the process once the tests ran. - # See https://github.com/GabrielBB/xvfb-action - - name: Run venv tests - uses: GabrielBB/xvfb-action@v1.0 - with: - run: npm run testSingleWorkspace - if: matrix.test-suite == 'venv' - - - name: Run single-workspace tests - uses: GabrielBB/xvfb-action@v1.0 - with: - run: npm run testSingleWorkspace - if: matrix.test-suite == 'single-workspace' - - - name: Run multi-workspace tests - uses: GabrielBB/xvfb-action@v1.0 - with: - run: npm run testMultiWorkspace - if: matrix.test-suite == 'multi-workspace' - - - name: Run debugger tests - uses: GabrielBB/xvfb-action@v1.0 - with: - run: npm run testDebugger - if: matrix.test-suite == 'debugger' - - - name: Run functional tests - run: npm run test:functional - if: matrix.test-suite == 'functional' - - smoke-tests: - name: Smoke tests - # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. - runs-on: ${{ matrix.os }} - needs: [build-vsix] - if: github.repository == 'microsoft/vscode-python' - strategy: - matrix: - # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, - # macOS runners are expensive, and we assume that Ubuntu is enough to cover the UNIX case. - os: [ubuntu-latest, windows-latest] - python: [3.8] - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Retrieve cached npm files - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{runner.os}}-${{env.CACHE_NPM_DEPS}}-${{hashFiles('package-lock.json')}} - - - name: Install dependencies (npm ci) - run: npm ci --prefer-offline - - - name: Download VSIX - uses: actions/download-artifact@v1 - with: - name: ${{env.ARTIFACT_NAME_VSIX}} - - # Extract the artifact from its download folder (./${{env.ARTIFACT_NAME_VSIX}}) to the repo root, - # then delete the download folder and compile the source code. - - name: Prepare for smoke tests - run: | - mv ${{env.ARTIFACT_NAME_VSIX}}/* . - rm -r ${{env.ARTIFACT_NAME_VSIX}} - npx tsc -p ./ - shell: bash - - - name: Run smoke tests - env: - DISPLAY: 10 - uses: GabrielBB/xvfb-action@v1.0 - with: - run: node ./out/test/smokeTest.js - - coverage: - name: Coverage reports upload - runs-on: ubuntu-latest - if: github.repository == 'microsoft/vscode-python' - needs: [tests, smoke-tests] - steps: - - name: Checkout - uses: actions/checkout@v2 - - - name: Retrieve cached npm files - uses: actions/cache@v1 - with: - path: ~/.npm - key: ${{runner.os}}-${{env.CACHE_NPM_DEPS}}-${{hashFiles('package-lock.json')}} - - - name: Install dependencies (npm ci) - run: npm ci --prefer-offline - - # It isn't possible to specify a regex for artifact names, so we have to download each artifact manually. - # The name pattern is ${{runner.os}}-${{env.COVERAGE_REPORTS}}, and possible values for runner.os are `Linux`, `Windows`, or `macOS`. - # See https://help.github.com/en/actions/reference/contexts-and-expression-syntax-for-github-actions#runner-context - - name: Download Ubuntu test coverage artifacts - uses: actions/download-artifact@v1 - with: - name: Linux-${{env.COVERAGE_REPORTS}} - - - name: Extract Ubuntu coverage artifacts to ./nyc_output - run: | - mkdir .nyc_output - mv Linux-${{env.COVERAGE_REPORTS}}/* .nyc_output - rm -r Linux-${{env.COVERAGE_REPORTS}} - - - name: Generate coverage reports - run: npm run test:cover:report - continue-on-error: true - - - name: Upload coverage to codecov - uses: codecov/codecov-action@v1 - with: - CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}} - file: ./coverage/cobertura-coverage.xml - - lkg-tag: - # LKG = last known good - name: Tag successful build as CI LKG - runs-on: ubuntu-latest - needs: [tests, smoke-tests] - if: github.repository == 'microsoft/vscode-python' - steps: - - name: Delete existing tag - run: | - curl -s -X DELETE https://api.github.com/repos/microsoft/vscode-python/git/refs/tags/${{env.LKG_TAG}} \ - -H "Authorization: token ${{secrets.GITHUB_TOKEN}}" - - # We only need to create a tag reference for lightweight tags. - # See https://developer.github.com/v3/git/tags/#create-a-tag-object - # And https://developer.github.com/v3/git/refs/#create-a-reference - - name: Create a tag reference - run: | - curl -s -X POST "https://api.github.com/repos/microsoft/vscode-python/git/refs" \ - -H "Authorization: token ${{secrets.GITHUB_TOKEN}}" \ - -d @- << EOF - { - "ref": "refs/tags/${{env.LKG_TAG}}", - "sha": "${{github.sha}}" - } - EOF diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 000000000000..5528fbbe9c0a --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,70 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +name: 'CodeQL' + +on: + push: + branches: + - main + - release-* + - release/* + pull_request: + # The branches below must be a subset of the branches above + branches: [main] + schedule: + - cron: '0 3 * * 0' + +permissions: + security-events: write + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + # Override automatic language detection by changing the below list + # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] + language: ['javascript', 'python'] + # Learn more... + # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + persist-credentials: false + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v4 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + #- name: Autobuild + # uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v4 diff --git a/.github/workflows/community-feedback-auto-comment.yml b/.github/workflows/community-feedback-auto-comment.yml new file mode 100644 index 000000000000..27f93400a023 --- /dev/null +++ b/.github/workflows/community-feedback-auto-comment.yml @@ -0,0 +1,28 @@ +name: Community Feedback Auto Comment + +on: + issues: + types: + - labeled +jobs: + add-comment: + if: github.event.label.name == 'needs community feedback' + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Check For Existing Comment + uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0 + id: finder + with: + issue-number: ${{ github.event.issue.number }} + comment-author: 'github-actions[bot]' + body-includes: 'Thanks for the feature request! We are going to give the community' + + - name: Add Community Feedback Comment + if: steps.finder.outputs.comment-id == '' + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 + with: + issue-number: ${{ github.event.issue.number }} + body: | + Thanks for the feature request! We are going to give the community 60 days from when this issue was created to provide 7 👍 upvotes on the opening comment to gauge general interest in this idea. If there's enough upvotes then we will consider this feature request in our future planning. If there's unfortunately not enough upvotes then we will close this issue. diff --git a/.github/workflows/gen-issue-velocity.yml b/.github/workflows/gen-issue-velocity.yml new file mode 100644 index 000000000000..41d79e4074d0 --- /dev/null +++ b/.github/workflows/gen-issue-velocity.yml @@ -0,0 +1,34 @@ +name: Issues Summary + +on: + schedule: + - cron: '0 0 * * 2' # Runs every Tuesday at midnight + workflow_dispatch: + +permissions: + issues: read + +jobs: + generate-summary: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Set up Python + uses: actions/setup-python@v6 + with: + python-version: '3.x' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests + + - name: Run summary script + run: python scripts/issue_velocity_summary_script.py + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/info-needed-closer.yml b/.github/workflows/info-needed-closer.yml new file mode 100644 index 000000000000..46892a58e800 --- /dev/null +++ b/.github/workflows/info-needed-closer.yml @@ -0,0 +1,33 @@ +name: Info-Needed Closer +on: + schedule: + - cron: 20 12 * * * # 5:20am Redmond + repository_dispatch: + types: [trigger-needs-more-info] + workflow_dispatch: + +permissions: + issues: write + +jobs: + main: + runs-on: ubuntu-latest + steps: + - name: Checkout Actions + uses: actions/checkout@v6 + with: + repository: 'microsoft/vscode-github-triage-actions' + path: ./actions + persist-credentials: false + ref: stable + - name: Install Actions + run: npm install --production --prefix ./actions + - name: Run info-needed Closer + uses: ./actions/needs-more-info-closer + with: + token: ${{secrets.GITHUB_TOKEN}} + label: info-needed + closeDays: 30 + closeComment: "Because we have not heard back with the information we requested, we are closing this issue for now. If you are able to provide the info later on, then we will be happy to re-open this issue to pick up where we left off. \n\nHappy Coding!" + pingDays: 30 + pingComment: "Hey @${assignee}, this issue might need further attention.\n\n@${author}, you can help us out by closing this issue if the problem no longer exists, or adding more information." diff --git a/.github/workflows/issue-labels.yml b/.github/workflows/issue-labels.yml new file mode 100644 index 000000000000..dcbd114086e2 --- /dev/null +++ b/.github/workflows/issue-labels.yml @@ -0,0 +1,34 @@ +name: Issue labels + +on: + issues: + types: [opened, reopened] + +env: + TRIAGERS: '["karthiknadig","eleanorjboyd","anthonykim1"]' + +permissions: + issues: write + +jobs: + # From https://github.com/marketplace/actions/github-script#apply-a-label-to-an-issue. + add-classify-label: + name: "Add 'triage-needed' and remove assignees" + runs-on: ubuntu-latest + steps: + - name: Checkout Actions + uses: actions/checkout@v6 + with: + repository: 'microsoft/vscode-github-triage-actions' + ref: stable + path: ./actions + persist-credentials: false + + - name: Install Actions + run: npm install --production --prefix ./actions + + - name: "Add 'triage-needed' and remove assignees" + uses: ./actions/python-issue-labels + with: + triagers: ${{ env.TRIAGERS }} + token: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/lock-issues.yml b/.github/workflows/lock-issues.yml new file mode 100644 index 000000000000..544d04ee185e --- /dev/null +++ b/.github/workflows/lock-issues.yml @@ -0,0 +1,24 @@ +name: 'Lock Issues' + +on: + schedule: + - cron: '0 0 * * *' + workflow_dispatch: + +permissions: + issues: write + +concurrency: + group: lock + +jobs: + lock-issues: + runs-on: ubuntu-latest + steps: + - name: 'Lock Issues' + uses: dessant/lock-threads@7266a7ce5c1df01b1c6db85bf8cd86c737dadbe7 # v6.0.0 + with: + github-token: ${{ github.token }} + issue-inactive-days: '30' + process-only: 'issues' + log-output: true diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml new file mode 100644 index 000000000000..c8a6f2dd416e --- /dev/null +++ b/.github/workflows/pr-check.yml @@ -0,0 +1,689 @@ +name: PR/CI Check + +on: + pull_request: + push: + branches-ignore: + - main + - release* + +permissions: {} + +env: + NODE_VERSION: 22.21.1 + PYTHON_VERSION: '3.10' # YML treats 3.10 the number as 3.1, so quotes around 3.10 + MOCHA_REPORTER_JUNIT: true # Use the mocha-multi-reporters and send output to both console (spec) and JUnit (mocha-junit-reporter). Also enables a reporter which exits the process running the tests if it haven't already. + ARTIFACT_NAME_VSIX: ms-python-insiders-vsix + TEST_RESULTS_DIRECTORY: . + # Force a path with spaces and to test extension works in these scenarios + # Unicode characters are causing 2.7 failures so skip that for now. + special-working-directory: './path with spaces' + special-working-directory-relative: 'path with spaces' + +jobs: + build-vsix: + name: Create VSIX + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + include: + - os: windows-latest + target: x86_64-pc-windows-msvc + vsix-target: win32-x64 + - os: windows-latest + target: aarch64-pc-windows-msvc + vsix-target: win32-arm64 + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + vsix-target: linux-x64 + # - os: ubuntu-latest + # target: aarch64-unknown-linux-gnu + # vsix-target: linux-arm64 + # - os: ubuntu-latest + # target: arm-unknown-linux-gnueabihf + # vsix-target: linux-armhf + # - os: macos-latest + # target: x86_64-apple-darwin + # vsix-target: darwin-x64 + # - os: macos-14 + # target: aarch64-apple-darwin + # vsix-target: darwin-arm64 + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + vsix-target: alpine-x64 + # - os: ubuntu-latest + # target: aarch64-unknown-linux-musl + # vsix-target: alpine-arm64 + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: 'python-env-tools' + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Build VSIX + uses: ./.github/actions/build-vsix + with: + node_version: ${{ env.NODE_VERSION}} + vsix_name: 'ms-python-insiders-${{ matrix.vsix-target }}.vsix' + artifact_name: '${{ env.ARTIFACT_NAME_VSIX }}-${{ matrix.vsix-target }}' + cargo_target: ${{ matrix.target }} + vsix_target: ${{ matrix.vsix-target }} + + lint: + name: Lint + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Lint + uses: ./.github/actions/lint + with: + node_version: ${{ env.NODE_VERSION }} + + check-types: + name: Check Python types + runs-on: ubuntu-latest + steps: + - name: Use Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v6 + with: + python-version: ${{ env.PYTHON_VERSION }} + + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: 'python-env-tools' + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Install base Python requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + options: '-t ./python_files/lib/python --no-cache-dir --implementation py' + + - name: Install Jedi requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + requirements-file: './python_files/jedilsp_requirements/requirements.txt' + options: '-t ./python_files/lib/jedilsp --no-cache-dir --implementation py' + + - name: Install other Python requirements + run: | + python -m pip install --upgrade -r build/test-requirements.txt + + - name: Run Pyright + uses: jakebailey/pyright-action@8ec14b5cfe41f26e5f41686a31eb6012758217ef # v3.0.2 + with: + version: 1.1.308 + working-directory: 'python_files' + + python-tests: + name: Python Tests + # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. + runs-on: ${{ matrix.os }} + defaults: + run: + working-directory: ${{ env.special-working-directory }} + strategy: + fail-fast: false + matrix: + # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, + # macOS runners are expensive, and we assume that Ubuntu is enough to cover the Unix case. + os: [ubuntu-latest, windows-latest] + # Run the tests on the oldest and most recent versions of Python. + python: ['3.10', '3.x', '3.13'] # run for 3 pytest versions, most recent stable, oldest version supported and pre-release + pytest-version: ['pytest', 'pytest@pre-release', 'pytest==6.2.0'] + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + path: ${{ env.special-working-directory-relative }} + persist-credentials: false + + - name: Use Python ${{ matrix.python }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python }} + + - name: Install specific pytest version + if: matrix.pytest-version == 'pytest@pre-release' + run: | + python -m pip install --pre pytest + + - name: Install specific pytest version + if: matrix.pytest-version != 'pytest@pre-release' + run: | + python -m pip install "${{ matrix.pytest-version }}" + + - name: Install specific pytest version + run: python -m pytest --version + - name: Install base Python requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + requirements-file: '"${{ env.special-working-directory-relative }}/requirements.txt"' + options: '-t "${{ env.special-working-directory-relative }}/python_files/lib/python" --no-cache-dir --implementation py' + + - name: Install test requirements + run: python -m pip install --upgrade -r build/test-requirements.txt + + - name: Run Python unit tests + run: python python_files/tests/run_all.py + + tests: + name: Tests + # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. + runs-on: ${{ matrix.os }} + defaults: + run: + working-directory: ${{ env.special-working-directory }} + strategy: + fail-fast: false + matrix: + # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, + # macOS runners are expensive, and we assume that Ubuntu is enough to cover the Unix case. + os: [ubuntu-latest, windows-latest] + # Run the tests on the oldest and most recent versions of Python. + python: ['3.x'] + test-suite: [ts-unit, venv, single-workspace, debugger, functional] + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + path: ${{ env.special-working-directory-relative }} + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: ${{ env.special-working-directory-relative }}/python-env-tools + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Install Node + uses: actions/setup-node@v6 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + cache-dependency-path: ${{ env.special-working-directory-relative }}/package-lock.json + + - name: Install dependencies (npm ci) + run: npm ci + + - name: Compile + run: npx gulp prePublishNonBundle + + - name: Localization + run: npx @vscode/l10n-dev@latest export ./src + + - name: Use Python ${{ matrix.python }} + uses: actions/setup-python@v6 + with: + python-version: ${{ matrix.python }} + + - name: Upgrade Pip + run: python -m pip install -U pip + + # For faster/better builds of sdists. + - name: Install build pre-requisite + run: python -m pip install wheel nox + + - name: Install Python Extension dependencies (jedi, etc.) + run: nox --session install_python_libs + + - name: Install test requirements + run: python -m pip install --upgrade -r build/test-requirements.txt + + - name: Rust Tool Chain setup + uses: dtolnay/rust-toolchain@stable + + - name: Build Native Binaries + run: nox --session native_build + shell: bash + + - name: Install functional test requirements + run: python -m pip install --upgrade -r ./build/functional-test-requirements.txt + if: matrix.test-suite == 'functional' + + - name: Prepare pipenv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + python -m pip install pipenv + python -m pipenv run python ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} pipenvPath + + - name: Prepare poetry for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + python -m pip install poetry + Move-Item -Path ".\build\ci\pyproject.toml" -Destination . + poetry env use python + + - name: Prepare virtualenv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + python -m pip install virtualenv + python -m virtualenv .virtualenv/ + if ('${{ matrix.os }}' -match 'windows-latest') { + & ".virtualenv/Scripts/python.exe" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} virtualEnvPath + } else { + & ".virtualenv/bin/python" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} virtualEnvPath + } + + - name: Prepare venv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' && startsWith(matrix.python, 3.) + run: | + python -m venv .venv + if ('${{ matrix.os }}' -match 'windows-latest') { + & ".venv/Scripts/python.exe" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} venvPath + } else { + & ".venv/bin/python" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} venvPath + } + + - name: Prepare conda for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + if: matrix.test-suite == 'venv' + run: | + # 1. For `*.testvirtualenvs.test.ts` + if ('${{ matrix.os }}' -match 'windows-latest') { + $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath python.exe + $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath Scripts | Join-Path -ChildPath conda + } else{ + $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath bin | Join-Path -ChildPath python + $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath bin | Join-Path -ChildPath conda + } + & $condaPythonPath ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} condaExecPath $condaExecPath + & $condaPythonPath ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} condaPath + & $condaExecPath init --all + + - name: Set CI_PYTHON_PATH and CI_DISABLE_AUTO_SELECTION + run: | + echo "CI_PYTHON_PATH=python" >> $GITHUB_ENV + echo "CI_DISABLE_AUTO_SELECTION=1" >> $GITHUB_ENV + shell: bash + if: matrix.test-suite != 'ts-unit' + + # Run TypeScript unit tests only for Python 3.X. + - name: Run TypeScript unit tests + run: npm run test:unittests + if: matrix.test-suite == 'ts-unit' && startsWith(matrix.python, 3.) + + # The virtual environment based tests use the `testSingleWorkspace` set of tests + # with the environment variable `TEST_FILES_SUFFIX` set to `testvirtualenvs`, + # which is set in the "Prepare environment for venv tests" step. + # We also use a third-party GitHub Action to install xvfb on Linux, + # run tests and then clean up the process once the tests ran. + # See https://github.com/GabrielBB/xvfb-action + - name: Run venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + CI_PYTHON_VERSION: ${{ matrix.python }} + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testSingleWorkspace + working-directory: ${{ env.special-working-directory }} + if: matrix.test-suite == 'venv' + + - name: Run single-workspace tests + env: + CI_PYTHON_VERSION: ${{ matrix.python }} + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testSingleWorkspace + working-directory: ${{ env.special-working-directory }} + if: matrix.test-suite == 'single-workspace' + + - name: Run debugger tests + env: + CI_PYTHON_VERSION: ${{ matrix.python }} + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testDebugger + working-directory: ${{ env.special-working-directory }} + if: matrix.test-suite == 'debugger' + + # Run TypeScript functional tests + - name: Run TypeScript functional tests + run: npm run test:functional + if: matrix.test-suite == 'functional' + + native-tests: + name: Native Tests + # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. + runs-on: ${{ matrix.os }} + defaults: + run: + working-directory: ${{ env.special-working-directory }} + strategy: + fail-fast: false + matrix: + # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, + # macOS runners are expensive, and we assume that Ubuntu is enough to cover the Unix case. + os: [ubuntu-latest, windows-latest] + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + path: ${{ env.special-working-directory-relative }} + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: ${{ env.special-working-directory-relative }}/python-env-tools + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Python Environment Tools tests + run: cargo test -- --nocapture + working-directory: ${{ env.special-working-directory }}/python-env-tools + + smoke-tests: + name: Smoke tests + # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. + runs-on: ${{ matrix.os }} + needs: [build-vsix] + strategy: + fail-fast: false + matrix: + # We're not running CI on macOS for now because it's one less matrix entry to lower the number of runners used, + # macOS runners are expensive, and we assume that Ubuntu is enough to cover the UNIX case. + include: + - os: windows-latest + vsix-target: win32-x64 + - os: ubuntu-latest + vsix-target: linux-x64 + + steps: + # Need the source to have the tests available. + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: python-env-tools + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Smoke tests + uses: ./.github/actions/smoke-tests + with: + node_version: ${{ env.NODE_VERSION }} + artifact_name: '${{ env.ARTIFACT_NAME_VSIX }}-${{ matrix.vsix-target }}' + + ### Coverage run + coverage: + name: Coverage + # TEMPORARILY DISABLED - hanging in CI, needs investigation + if: false + # The value of runs-on is the OS of the current job (specified in the strategy matrix below) instead of being hardcoded. + runs-on: ${{ matrix.os }} + needs: [lint, check-types, python-tests, tests, native-tests] + strategy: + fail-fast: false + matrix: + # Only run coverage on linux for PRs + os: [ubuntu-latest] + + steps: + - name: Checkout + uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Checkout Python Environment Tools + uses: actions/checkout@v6 + with: + repository: 'microsoft/python-environment-tools' + path: python-env-tools + persist-credentials: false + sparse-checkout: | + crates + Cargo.toml + Cargo.lock + sparse-checkout-cone-mode: false + + - name: Install Node + uses: actions/setup-node@v6 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + + - name: Install dependencies (npm ci) + run: npm ci + + - name: Compile + run: npx gulp prePublishNonBundle + + - name: Localization + run: npx @vscode/l10n-dev@latest export ./src + + - name: Use Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@v6 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' + cache-dependency-path: | + requirements.txt + python_files/jedilsp_requirements/requirements.txt + build/test-requirements.txt + build/functional-test-requirements.txt + + - name: Install base Python requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + options: '-t ./python_files/lib/python --implementation py' + + - name: Install Jedi requirements + uses: brettcannon/pip-secure-install@92f400e3191171c1858cc0e0d9ac6320173fdb0c # v1.0.0 + with: + requirements-file: './python_files/jedilsp_requirements/requirements.txt' + options: '-t ./python_files/lib/jedilsp --implementation py' + + - name: Install build pre-requisite + run: python -m pip install wheel nox + shell: bash + + - name: Rust Tool Chain setup + uses: dtolnay/rust-toolchain@stable + + - name: Build Native Binaries + run: nox --session native_build + shell: bash + + - name: Install test requirements + run: python -m pip install --upgrade -r build/test-requirements.txt + + - name: Install functional test requirements + run: python -m pip install --upgrade -r ./build/functional-test-requirements.txt + + - name: Prepare pipenv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + run: | + python -m pip install pipenv + python -m pipenv run python ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} pipenvPath + + - name: Prepare poetry for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + shell: pwsh + run: | + python -m pip install poetry + Move-Item -Path ".\build\ci\pyproject.toml" -Destination . + poetry env use python + + - name: Prepare virtualenv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + run: | + python -m pip install virtualenv + python -m virtualenv .virtualenv/ + if ('${{ matrix.os }}' -match 'windows-latest') { + & ".virtualenv/Scripts/python.exe" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} virtualEnvPath + } else { + & ".virtualenv/bin/python" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} virtualEnvPath + } + + - name: Prepare venv for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + run: | + python -m venv .venv + if ('${{ matrix.os }}' -match 'windows-latest') { + & ".venv/Scripts/python.exe" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} venvPath + } else { + & ".venv/bin/python" ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} venvPath + } + + - name: Prepare conda for venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' + shell: pwsh + run: | + # 1. For `*.testvirtualenvs.test.ts` + if ('${{ matrix.os }}' -match 'windows-latest') { + $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath python.exe + $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath Scripts | Join-Path -ChildPath conda + } else{ + $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath bin | Join-Path -ChildPath python + $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath bin | Join-Path -ChildPath conda + } + & $condaPythonPath ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} condaExecPath $condaExecPath + & $condaPythonPath ./build/ci/addEnvPath.py ${{ env.PYTHON_VIRTUAL_ENVS_LOCATION }} condaPath + & $condaExecPath init --all + + - name: Run TypeScript unit tests + run: npm run test:unittests:cover + + - name: Run Python unit tests + run: | + python python_files/tests/run_all.py + + # The virtual environment based tests use the `testSingleWorkspace` set of tests + # with the environment variable `TEST_FILES_SUFFIX` set to `testvirtualenvs`, + # which is set in the "Prepare environment for venv tests" step. + # We also use a third-party GitHub Action to install xvfb on Linux, + # run tests and then clean up the process once the tests ran. + # See https://github.com/GabrielBB/xvfb-action + - name: Run venv tests + env: + TEST_FILES_SUFFIX: testvirtualenvs + CI_PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + CI_DISABLE_AUTO_SELECTION: 1 + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testSingleWorkspace:cover + + - name: Run single-workspace tests + env: + CI_PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + CI_DISABLE_AUTO_SELECTION: 1 + uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + with: + run: npm run testSingleWorkspace:cover + + # Enable these tests when coverage is setup for multiroot workspace tests + # - name: Run multi-workspace tests + # env: + # CI_PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + # CI_DISABLE_AUTO_SELECTION: 1 + # uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + # with: + # run: npm run testMultiWorkspace:cover + + # Enable these tests when coverage is setup for debugger tests + # - name: Run debugger tests + # env: + # CI_PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + # CI_DISABLE_AUTO_SELECTION: 1 + # uses: GabrielBB/xvfb-action@b706e4e27b14669b486812790492dc50ca16b465 # v1.7 + # with: + # run: npm run testDebugger:cover + + # Run TypeScript functional tests + - name: Run TypeScript functional tests + env: + CI_PYTHON_VERSION: ${{ env.PYTHON_VERSION }} + CI_DISABLE_AUTO_SELECTION: 1 + run: npm run test:functional:cover + + - name: Generate coverage reports + run: npm run test:cover:report + + - name: Upload HTML report + uses: actions/upload-artifact@v7 + with: + name: ${{ runner.os }}-coverage-report-html + path: ./coverage + retention-days: 1 diff --git a/.github/workflows/pr-file-check.yml b/.github/workflows/pr-file-check.yml new file mode 100644 index 000000000000..6364e5fa744e --- /dev/null +++ b/.github/workflows/pr-file-check.yml @@ -0,0 +1,44 @@ +name: PR files + +on: + pull_request: + types: + - 'opened' + - 'reopened' + - 'synchronize' + - 'labeled' + - 'unlabeled' + +permissions: {} + +jobs: + changed-files-in-pr: + name: 'Check for changed files' + runs-on: ubuntu-latest + steps: + - name: 'package-lock.json matches package.json' + uses: brettcannon/check-for-changed-files@871d7b8b5917a4f6f06662e2262e8ffc51dff6d1 # v1.2.1 + with: + prereq-pattern: 'package.json' + file-pattern: 'package-lock.json' + skip-label: 'skip package*.json' + failure-message: '${prereq-pattern} was edited but ${file-pattern} was not (the ${skip-label} label can be used to pass this check)' + + - name: 'package.json matches package-lock.json' + uses: brettcannon/check-for-changed-files@871d7b8b5917a4f6f06662e2262e8ffc51dff6d1 # v1.2.1 + with: + prereq-pattern: 'package-lock.json' + file-pattern: 'package.json' + skip-label: 'skip package*.json' + failure-message: '${prereq-pattern} was edited but ${file-pattern} was not (the ${skip-label} label can be used to pass this check)' + + - name: 'Tests' + uses: brettcannon/check-for-changed-files@871d7b8b5917a4f6f06662e2262e8ffc51dff6d1 # v1.2.1 + with: + prereq-pattern: src/**/*.ts + file-pattern: | + src/**/*.test.ts + src/**/*.testvirtualenvs.ts + .github/test_plan.md + skip-label: 'skip tests' + failure-message: 'TypeScript code was edited without also editing a ${file-pattern} file; see the Testing page in our wiki on testing guidelines (the ${skip-label} label can be used to pass this check)' diff --git a/.github/workflows/pr-issue-check.yml b/.github/workflows/pr-issue-check.yml new file mode 100644 index 000000000000..5587227d2848 --- /dev/null +++ b/.github/workflows/pr-issue-check.yml @@ -0,0 +1,31 @@ +name: PR issue check + +on: + pull_request: + types: + - 'opened' + - 'reopened' + - 'synchronize' + - 'labeled' + - 'unlabeled' + +permissions: {} + +jobs: + check-for-attached-issue: + name: 'Check for attached issue' + runs-on: ubuntu-latest + steps: + - name: 'Ensure PR has an associated issue' + uses: actions/github-script@v9 + with: + script: | + const labels = context.payload.pull_request.labels.map(label => label.name); + if (!labels.includes('skip-issue-check')) { + const prBody = context.payload.pull_request.body || ''; + const issueLink = prBody.match(/https:\/\/github\.com\/\S+\/issues\/\d+/); + const issueReference = prBody.match(/#\d+/); + if (!issueLink && !issueReference) { + core.setFailed('No associated issue found in the PR description.'); + } + } diff --git a/.github/workflows/pr-labels.yml b/.github/workflows/pr-labels.yml new file mode 100644 index 000000000000..af24ac10772c --- /dev/null +++ b/.github/workflows/pr-labels.yml @@ -0,0 +1,24 @@ +name: 'PR labels' +on: + pull_request: + types: + - 'opened' + - 'reopened' + - 'labeled' + - 'unlabeled' + - 'synchronize' + +jobs: + classify: + name: 'Classify PR' + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + steps: + - name: 'PR impact specified' + uses: mheap/github-action-required-labels@0ac283b4e65c1fb28ce6079dea5546ceca98ccbe # v5.5.2 + with: + mode: exactly + count: 1 + labels: 'bug, debt, feature-request, no-changelog' diff --git a/.github/workflows/python27-issue-response.yml b/.github/workflows/python27-issue-response.yml new file mode 100644 index 000000000000..9db84bca1a23 --- /dev/null +++ b/.github/workflows/python27-issue-response.yml @@ -0,0 +1,16 @@ +on: + issues: + types: [opened] + +jobs: + python27-issue-response: + runs-on: ubuntu-latest + permissions: + issues: write + if: "contains(github.event.issue.body, 'Python version (& distribution if applicable, e.g. Anaconda): 2.7')" + steps: + - name: Check for Python 2.7 string + run: | + response="We're sorry, but we no longer support Python 2.7. If you need to work with Python 2.7, you will have to pin to 2022.2.* version of the extension, which was the last version that had the debugger (debugpy) with support for python 2.7, and was tested with `2.7`. Thank you for your understanding! \n ![https://user-images.githubusercontent.com/51720070/80000627-39dacc00-8472-11ea-9755-ac7ba0acbb70.gif](https://user-images.githubusercontent.com/51720070/80000627-39dacc00-8472-11ea-9755-ac7ba0acbb70.gif)" + gh issue comment ${{ github.event.issue.number }} --body "$response" + gh issue close ${{ github.event.issue.number }} diff --git a/.github/workflows/remove-needs-labels.yml b/.github/workflows/remove-needs-labels.yml new file mode 100644 index 000000000000..24352526d0d8 --- /dev/null +++ b/.github/workflows/remove-needs-labels.yml @@ -0,0 +1,20 @@ +name: 'Remove Needs Label' +on: + issues: + types: [closed] + +jobs: + classify: + name: 'Remove needs labels on issue closing' + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: 'Removes needs labels on issue close' + uses: actions-ecosystem/action-remove-labels@2ce5d41b4b6aa8503e285553f75ed56e0a40bae0 # v1.3.0 + with: + labels: | + needs PR + needs spike + needs community feedback + needs proposal diff --git a/.github/workflows/test-plan-item-validator.yml b/.github/workflows/test-plan-item-validator.yml new file mode 100644 index 000000000000..57db4a3e18a7 --- /dev/null +++ b/.github/workflows/test-plan-item-validator.yml @@ -0,0 +1,30 @@ +name: Test Plan Item Validator +on: + issues: + types: [edited, labeled] + +permissions: + issues: write + +jobs: + main: + runs-on: ubuntu-latest + if: contains(github.event.issue.labels.*.name, 'testplan-item') || contains(github.event.issue.labels.*.name, 'invalid-testplan-item') + steps: + - name: Checkout Actions + uses: actions/checkout@v6 + with: + repository: 'microsoft/vscode-github-triage-actions' + path: ./actions + persist-credentials: false + ref: stable + + - name: Install Actions + run: npm install --production --prefix ./actions + + - name: Run Test Plan Item Validator + uses: ./actions/test-plan-item-validator + with: + label: testplan-item + invalidLabel: invalid-testplan-item + comment: Invalid test plan item. See errors below and the [test plan item spec](https://github.com/microsoft/vscode/wiki/Writing-Test-Plan-Items) for more information. This comment will go away when the issues are resolved. diff --git a/.github/workflows/triage-info-needed.yml b/.github/workflows/triage-info-needed.yml new file mode 100644 index 000000000000..c7a37ba0c78d --- /dev/null +++ b/.github/workflows/triage-info-needed.yml @@ -0,0 +1,57 @@ +name: Triage "info-needed" label + +on: + issue_comment: + types: [created] + +env: + TRIAGERS: '["karrtikr","karthiknadig","paulacamargo25","eleanorjboyd", "brettcannon","anthonykim1"]' + +jobs: + add_label: + if: contains(github.event.issue.labels.*.name, 'triage-needed') && !contains(github.event.issue.labels.*.name, 'info-needed') + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Checkout Actions + uses: actions/checkout@v6 + with: + repository: 'microsoft/vscode-github-triage-actions' + ref: stable + path: ./actions + persist-credentials: false + + - name: Install Actions + run: npm install --production --prefix ./actions + + - name: Add "info-needed" label + uses: ./actions/python-triage-info-needed + with: + triagers: ${{ env.TRIAGERS }} + action: 'add' + token: ${{secrets.GITHUB_TOKEN}} + + remove_label: + if: contains(github.event.issue.labels.*.name, 'info-needed') && contains(github.event.issue.labels.*.name, 'triage-needed') + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - name: Checkout Actions + uses: actions/checkout@v6 + with: + repository: 'microsoft/vscode-github-triage-actions' + ref: stable + path: ./actions + persist-credentials: false + + - name: Install Actions + run: npm install --production --prefix ./actions + + - name: Remove "info-needed" label + uses: ./actions/python-triage-info-needed + with: + triagers: ${{ env.TRIAGERS }} + action: 'remove' + token: ${{secrets.GITHUB_TOKEN}} diff --git a/.gitignore b/.gitignore index f3befcb98957..2fa056f84fa6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ log.log **/node_modules *.pyc *.vsix +envVars.txt **/.vscode/.ropeproject/** **/testFiles/**/.cache/** *.noseids @@ -22,8 +23,8 @@ cucumber-report.json **/.venv*/ port.txt precommit.hook -pythonFiles/experimental/ptvsd/** -pythonFiles/lib/** +python_files/lib/** +python_files/get-pip.py debug_coverage*/** languageServer/** languageServer.*/** @@ -33,13 +34,25 @@ obj/** tmp/** .python-version .vs/ -test-results.xml +test-results*.xml xunit-test-results.xml build/ci/performance/performance-results.json !build/ debug*.log -ptvsd*.log +debugpy*.log pydevd*.log nodeLanguageServer/** nodeLanguageServer.*/** +dist/** +# translation files +*.xlf +package.nls.*.json +l10n/ +python-env-tools/** +# coverage files produced as test output +python_files/tests/*/.data/.coverage* +python_files/tests/*/.data/*/.coverage* +src/testTestingRootWkspc/coverageWorkspace/.coverage +# ignore ai artifacts generated and placed in this folder +ai-artifacts/* diff --git a/.nvmrc b/.nvmrc index e23e7f3a97dc..c6a66a6e6a68 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v12.4.0 +v22.21.1 diff --git a/.prettierrc.js b/.prettierrc.js index e584661edd38..87a94b7bf466 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -3,19 +3,13 @@ module.exports = { printWidth: 120, tabWidth: 4, endOfLine: 'auto', - trailingComma: 'none', + trailingComma: 'all', overrides: [ { files: ['*.yml', '*.yaml'], options: { tabWidth: 2 } - }, - { - files: ['**/datascience/serviceRegistry.ts'], - options: { - printWidth: 240 - } } ] }; diff --git a/.sonarcloud.properties b/.sonarcloud.properties index 55054bc331d7..9e466689a90a 100644 --- a/.sonarcloud.properties +++ b/.sonarcloud.properties @@ -1,4 +1,4 @@ -sonar.sources=src/client,src/datascience-ui +sonar.sources=src/client sonar.tests=src/test sonar.cfamily.build-wrapper-output.bypass=true -sonar.cpd.exclusions=src/datascience-ui/**/redux/actions.ts +sonar.cpd.exclusions=src/client/activation/**/*.ts diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 508eae4c5ddc..15e6aada1d50 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -2,8 +2,11 @@ // See https://go.microsoft.com/fwlink/?LinkId=827846 // for the documentation about the extensions.json format "recommendations": [ - "ms-vscode.vscode-typescript-tslint-plugin", + "charliermarsh.ruff", "editorconfig.editorconfig", - "esbenp.prettier-vscode" + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "ms-python.python", + "ms-python.vscode-pylance" ] } diff --git a/.vscode/launch.json b/.vscode/launch.json index 933c2788db59..1e983413c8d4 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,104 +7,34 @@ "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "stopOnEntry": false, + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], "smartStep": true, "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/out/**/*" - ], + "outFiles": ["${workspaceFolder}/out/**/*", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ], + "skipFiles": ["/**"], "env": { // Enable this to turn on redux logging during debugging "XVSC_PYTHON_FORCE_LOGGING": "1", // Enable this to try out new experiments locally - "XVSC_PYTHON_LOAD_EXPERIMENTS_FROM_FILE" : "1", + "VSC_PYTHON_LOAD_EXPERIMENTS_FROM_FILE": "1", // Enable this to log telemetry to the output during debugging - "XVSC_PYTHON_LOG_TELEMETRY": "1" + "XVSC_PYTHON_LOG_TELEMETRY": "1", + // Enable this to log debugger output. Directory must exist ahead of time + "XDEBUGPY_LOG_DIR": "${workspaceRoot}/tmp/Debug_Output_Ex" } }, - { - "name": "Extension (DS UI in Browser)", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}" - ], - "stopOnEntry": false, - "smartStep": true, - "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/out/**/*" - ], - "preLaunchTask": "Inject DS WebBrowser UI", - "env": { - "VSC_PYTHON_DS_UI_PROMPT": "1" - }, - "skipFiles": [ - "/**" - ] - }, { "name": "Extension inside container", "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", - "args": [ - "--extensionDevelopmentPath=${workspaceFolder}", - "${workspaceFolder}/data" - ], - "stopOnEntry": false, + "args": ["--extensionDevelopmentPath=${workspaceFolder}", "${workspaceFolder}/data"], "smartStep": true, "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/out/**/*" - ], + "outFiles": ["${workspaceFolder}/out/**/*", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile" }, - { - "name": "Python: Current File with iPython", - "type": "python", - "request": "launch", - "module": "IPython", - "console": "integratedTerminal", - "args": [ - "${file}" - ] // Additional args should be prefixed with a '--' first. - }, - { - "name": "Python: Current File", - "type": "python", - "request": "launch", - "program": "${file}", - "console": "integratedTerminal" - }, - { - "name": "Debugger as debugServer", - "type": "node", - "request": "launch", - "program": "${workspaceFolder}/out/client/debugger/debugAdapter/main.js", - "stopOnEntry": false, - "smartStep": true, - "args": [ - "--server=4711" - ], - "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/out/client/**/*.js" - ], - "cwd": "${workspaceFolder}", - "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] - }, { "name": "Tests (Debugger, VS Code, *.test.ts)", "type": "extensionHost", @@ -116,19 +46,14 @@ "--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/out/test" ], - "stopOnEntry": false, "sourceMaps": true, "smartStep": true, - "outFiles": [ - "${workspaceFolder}/out/**/*" - ], + "outFiles": ["${workspaceFolder}/out/**/*", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", "env": { "IS_CI_SERVER_TEST_DEBUGGER": "1" }, - "skipFiles": [ - "/**" - ] + "skipFiles": ["/**"] }, { // Note, for the smoke test you want to debug, you may need to copy the file, @@ -144,17 +69,14 @@ "--extensionTestsPath=${workspaceFolder}/out/test" ], "env": { - "VSC_PYTHON_CI_TEST_GREP": "Smoke Test" + "VSC_PYTHON_CI_TEST_GREP": "Smoke Test", + "VSC_PYTHON_SMOKE_TEST": "1", + "TEST_FILES_SUFFIX": "smoke.test" }, - "stopOnEntry": false, "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], + "outFiles": ["${workspaceFolder}/out/**/*.js", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] + "skipFiles": ["/**"] }, { "name": "Tests (Single Workspace, VS Code, *.test.ts)", @@ -170,15 +92,29 @@ "env": { "VSC_PYTHON_CI_TEST_GREP": "" // Modify this to run a subset of the single workspace tests }, - "stopOnEntry": false, "sourceMaps": true, - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], + "outFiles": ["${workspaceFolder}/out/**/*.js", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] + "skipFiles": ["/**"] + }, + { + "name": "Jedi LSP tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "${workspaceFolder}/src/test", + "--disable-extensions", + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/out/test" + ], + "env": { + "VSC_PYTHON_CI_TEST_GREP": "Language Server:" + }, + "sourceMaps": true, + "outFiles": ["${workspaceFolder}/out/**/*.js", "!${workspaceFolder}/**/node_modules**/*"], + "preLaunchTask": "preTestJediLSP", + "skipFiles": ["/**"] }, { "name": "Tests (Multiroot, VS Code, *.test.ts)", @@ -191,16 +127,14 @@ "--extensionDevelopmentPath=${workspaceFolder}", "--extensionTestsPath=${workspaceFolder}/out/test" ], - "stopOnEntry": false, + "env": { + "VSC_PYTHON_CI_TEST_GREP": "" // Modify this to run a subset of the single workspace tests + }, "sourceMaps": true, "smartStep": true, - "outFiles": [ - "${workspaceFolder}/out/**/*" - ], + "outFiles": ["${workspaceFolder}/out/**/*", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] + "skipFiles": ["/**"] }, { "name": "Unit Tests (without VS Code, *.unit.test.ts)", @@ -218,13 +152,9 @@ //"--grep", "", "--timeout=300000" ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], + "outFiles": ["${workspaceFolder}/out/**/*.js", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] + "skipFiles": ["/**"] }, { "name": "Unit Tests (fast, without VS Code and without react/monaco, *.unit.test.ts)", @@ -239,17 +169,13 @@ "--ui=tdd", "--recursive", "--colors", - //"--grep", "", + // "--grep", "", "--timeout=300000", "--fast" ], - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], + "outFiles": ["${workspaceFolder}/out/**/*.js", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] + "skipFiles": ["/**"] }, { "name": "Functional Tests (without VS Code, *.functional.test.ts)", @@ -264,43 +190,9 @@ "--ui=tdd", "--recursive", "--colors", - //"--grep", "", - "--timeout=300000" - ], - "env": { - // Remove `X` prefix to test with real browser to host DS ui (for DS functional tests). - "xVSC_PYTHON_DS_UI_BROWSER": "1", - // Remove `X` prefix to test with real python (for DS functional tests). - "XVSCODE_PYTHON_ROLLING": "1", - // Remove 'X' to turn on all logging in the debug output - "XVSC_PYTHON_FORCE_LOGGING": "1", - // Remove `X` prefix and update path to test with real python interpreter (for DS functional tests). - "XCI_PYTHON_PATH": "" - }, - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], - "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] - }, - { - "name": "Functional DS UI Tests (without VS Code, *.ui.functional.test.ts)", - "type": "node", - "request": "launch", - "program": "${workspaceFolder}/node_modules/mocha/bin/_mocha", - "stopOnEntry": false, - "sourceMaps": true, - "args": [ - "./out/test/**/*.ui.functional.test.js", - "--require=out/test/unittests.js", - "--ui=tdd", - "--recursive", - "--colors", - //"--grep", "", + // "--grep", "", "--timeout=300000", - "--fast" + "--exit" ], "env": { // Remove `X` prefix to test with real browser to host DS ui (for DS functional tests). @@ -310,36 +202,61 @@ // Remove 'X' to turn on all logging in the debug output "XVSC_PYTHON_FORCE_LOGGING": "1", // Remove `X` prefix and update path to test with real python interpreter (for DS functional tests). - "XCI_PYTHON_PATH": "" + "XCI_PYTHON_PATH": "", + // Remove 'X' prefix to dump output for debugger. Directory has to exist prior to launch + "XDEBUGPY_LOG_DIR": "${workspaceRoot}/tmp/Debug_Output", + // Remove 'X' prefix to dump webview redux action log + "XVSC_PYTHON_WEBVIEW_LOG_FILE": "${workspaceRoot}/test-webview.log" }, - "outFiles": [ - "${workspaceFolder}/out/**/*.js" - ], + "outFiles": ["${workspaceFolder}/out/**/*.js", "!${workspaceFolder}/**/node_modules**/*"], "preLaunchTask": "Compile", - "skipFiles": [ - "/**" - ] + "skipFiles": ["/**"] }, { "type": "node", "request": "launch", "name": "Gulp tasks (helpful for debugging gulpfile.js)", "program": "${workspaceFolder}/node_modules/gulp/bin/gulp.js", - "args": [ - "watch" - ], - "skipFiles": [ - "/**" - ] + "args": ["watch"], + "skipFiles": ["/**"] + }, + { + "name": "Node: Current File", + "program": "${file}", + "request": "launch", + "skipFiles": ["/**"], + "type": "node" + }, + { + "name": "Python: Current File", + "type": "debugpy", + "justMyCode": true, + "request": "launch", + "program": "${file}", + "console": "integratedTerminal", + "cwd": "${workspaceFolder}" + }, + { + "name": "Python: Attach Listen", + "type": "debugpy", + "request": "attach", + "listen": { "host": "localhost", "port": 5678 }, + "justMyCode": true + }, + { + "name": "Debug pytest plugin tests", + + "type": "debugpy", + "request": "launch", + "module": "pytest", + "args": ["${workspaceFolder}/python_files/tests/pytestadapter"], + "justMyCode": true } ], "compounds": [ { - "name": "Extension + Debugger", - "configurations": [ - "Extension", - "Debugger as debugServer" - ] + "name": "Debug Python and Extension", + "configurations": ["Python: Attach Listen", "Extension"] } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index 64e62ac725c8..01de0d907706 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,6 +2,7 @@ { "files.exclude": { "out": true, // set this to true to hide the "out" folder with the compiled JS files + "dist": true, "**/*.pyc": true, ".nyc_output": true, "obj": true, @@ -10,11 +11,11 @@ "**/node_modules": true, ".vscode-test": false, ".vscode test": false, - "**/.mypy_cache/**": true, - "**/.ropeproject/**": true + "**/.mypy_cache/**": true }, "search.exclude": { "out": true, // set this to false to include "out" folder in search results + "dist": true, "**/node_modules": true, "coverage": true, "languageServer*/**": true, @@ -22,38 +23,56 @@ ".vscode test": true }, "[python]": { + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.organizeImports.isort": "explicit" + }, + "editor.defaultFormatter": "charliermarsh.ruff", + }, + "[rust]": { + "editor.defaultFormatter": "rust-lang.rust-analyzer", "editor.formatOnSave": true }, "[typescript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, "[javascript]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[JSON]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true + }, + "[YAML]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.formatOnSave": true }, "typescript.tsdk": "./node_modules/typescript/lib", // we want to use the TS server from our node_modules folder to control its version - "tslint.enable": true, - "python.linting.enabled": false, - "python.testing.promptToConfigure": false, - "python.workspaceSymbols.enabled": false, - "python.formatting.provider": "black", "typescript.preferences.quoteStyle": "single", "javascript.preferences.quoteStyle": "single", - "typescriptHero.imports.stringQuoteStyle": "'", "prettier.printWidth": 120, "prettier.singleQuote": true, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true, - "source.fixAll.tslint": true - }, - "python.jediEnabled": false, - "python.analysis.logLevel": "Trace", - "python.analysis.downloadChannel": "beta", - "python.linting.pylintEnabled": false, - "python.linting.flake8Enabled": true, - "cucumberautocomplete.skipDocStringsFormat": true, - "python.linting.flake8Args": [ - // Match what black does. - "--max-line-length=88" + "source.fixAll.eslint": "explicit" + }, + "python.languageServer": "Default", + "typescript.preferences.importModuleSpecifier": "relative", + // Branch name suggestion. + "git.branchProtectionPrompt": "alwaysCommitToNewBranch", + "git.branchRandomName.enable": true, + "git.branchProtection": ["main", "release/*"], + "git.pullBeforeCheckout": true, + // Open merge editor for resolving conflicts. + "git.mergeEditor": true, + "python.testing.pytestArgs": [ + "python_files/tests" ], - "typescript.preferences.importModuleSpecifier": "relative" + "python.testing.unittestEnabled": false, + "python.testing.pytestEnabled": true, + "rust-analyzer.linkedProjects": [ + ".\\python-env-tools\\Cargo.toml" + ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 792b1476c15e..c5a054ed43cf 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -12,29 +12,12 @@ "type": "npm", "script": "compile", "isBackground": true, - "problemMatcher": [ - "$tsc-watch", - { - "base": "$tslint5", - "fileLocation": "relative" - } - ], + "problemMatcher": ["$tsc-watch"], "group": { "kind": "build", "isDefault": true } }, - { - "label": "Compile Web Views", - "type": "npm", - "script": "compile-webviews-watch", - "isBackground": true, - "group": { - "kind": "build", - "isDefault": true - }, - "problemMatcher": [] - }, { "label": "Run Unit Tests", "type": "npm", @@ -45,11 +28,35 @@ } }, { - "label": "Inject DS WebBrowser UI", + "type": "npm", + "script": "preTestJediLSP", + "problemMatcher": [], + "label": "preTestJediLSP" + }, + { + "type": "npm", + "script": "check-python", + "problemMatcher": ["$python"], + "label": "npm: check-python", + "detail": "npm run check-python:ruff && npm run check-python:pyright" + }, + { + "label": "npm: check-python (venv)", "type": "shell", - "command": "node", - "args": ["build/debug/replaceWithWebBrowserPanel.js"], - "problemMatcher": [] + "command": "bash", + "args": ["-lc", "source .venv/bin/activate && npm run check-python"], + "problemMatcher": [], + "detail": "Activates the repo .venv first (avoids pyenv/shim Python) then runs: npm run check-python", + "windows": { + "command": "pwsh", + "args": [ + "-NoProfile", + "-ExecutionPolicy", + "Bypass", + "-Command", + ".\\.venv\\Scripts\\Activate.ps1; npm run check-python" + ] + } } ] } diff --git a/.vscodeignore b/.vscodeignore index 6e4b4c440266..d636ab48f361 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -1,54 +1,36 @@ **/*.map **/*.analyzer.html -!out/datascience-ui/common/node_modules/**/* -!out/datascience-ui/notebook/commons.initial.bundle.js.map -!out/datascience-ui/notebook/interactiveWindow.js.map -!out/datascience-ui/notebook/nativeEditor.js.map -!out/datascience-ui/viewers/commons.initial.bundle.js.map -!out/datascience-ui/viewers/dataExplorer.js.map -!out/datascience-ui/viewers/plotViewer.js.map +**/.env *.vsix -.appveyor.yml .editorconfig .env .eslintrc +.eslintignore .gitattributes .gitignore .gitmodules -.huskyrc.json +.git* .npmrc .nvmrc .nycrc -.travis.yml CODE_OF_CONDUCT.md CODING_STANDARDS.md CONTRIBUTING.md -CONTRIBUTING - LANGUAGE SERVER.md -coverconfig.json -cucumber-report.json gulpfile.js -package.datascience-ui.dependencies.json package-lock.json -packageExtension.cmd -pvsc-dev-ext.py -pvsc.code-workspace -PYTHON_INTERACTIVE_TROUBLESHOOTING.md requirements.in +sprint-planning.github-issues test.ipynb -travis*.log tsconfig*.json tsfmt.json -tslint.json -typings.json -vsc-extension-quickstart.md vscode-python-signing.* -webpack.config.js -webpack.datascience-*.config.js +noxfile.py -.devcontainer/** +.config/** .github/** .mocha-reporter/** .nvm/** +.nox/** .nyc_output .prettierrc.js .sonarcloud.properties @@ -58,6 +40,8 @@ webpack.datascience-*.config.js .vscode test/** languageServer/** languageServer.*/** +nodeLanguageServer/** +nodeLanguageServer.*/** bin/** build/** BuildOutput/** @@ -67,44 +51,39 @@ debug_coverage*/** images/**/*.gif images/**/*.png ipywidgets/** -news/** +i18n/** node_modules/** obj/** out/**/*.stats.json out/client/**/*.analyzer.html out/coverconfig.json -out/datascience-ui/**/*.analyzer.html -out/datascience-ui/common/** -out/datascience-ui/**/*.js.LICENSE -out/datascience-ui/data-explorer/** -out/datascience-ui/datascience-ui/** -out/datascience-ui/history-react/** -out/datascience-ui/interactive-common/** -out/datascience-ui/ipywidgets/** -out/datascience-ui/native-editor/** -out/datascience-ui/notebook/datascience-ui/** -out/datascience-ui/notebook/ipywidgets/** -out/datascience-ui/notebook/index.*.html -out/datascience-ui/plot/** -out/datascience-ui/react-common/** -out/datascience-ui/viewers/datascience-ui/** -out/datascience-ui/viewers/ipywidgets/** -out/datascience-ui/viewers/index.*.html -out/pythonFiles/** +out/python_files/** out/src/** out/test/** out/testMultiRootWkspc/** precommit.hook -pythonFiles/**/*.pyc -pythonFiles/lib/**/*.dist-info/** -pythonFiles/lib/**/*.egg-info/** -pythonFiles/lib/python/bin/** -pythonFiles/tests/** -requirements.txt +python_files/**/*.pyc +python_files/lib/**/*.egg-info/** +python_files/lib/jedilsp/bin/** +python_files/lib/python/bin/** +python_files/tests/** scripts/** src/** test/** tmp/** -tpn/** typings/** types/** +**/__pycache__/** +**/.devcontainer/** + +python-env-tools/.gitignore +python-env-tools/bin/.gitignore +python-env-tools/.github/** +python-env-tools/.vscode/** +python-env-tools/crates/** +python-env-tools/target/** +python-env-tools/Cargo.* +python-env-tools/.cargo/** + +python-env-tools/**/*.md +pythonExtensionApi/** diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cd8adc105e4..56c1f7697ad7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,5378 @@ # Changelog -## 2020.4.0-rc (9 April 2020) +**Please see https://github.com/microsoft/vscode-python/releases for the latest release notes. The notes below have been kept for historical purposes.** + +## 2022.10.1 (14 July 2022) + +### Code Health + +- Update app insights key by [karthiknadig](https://github.com/karthiknadig) in ([#19463](https://github.com/microsoft/vscode-python/pull/19463)). + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.10.0 (7 July 2022) + +### Enhancements + +- Add `breakpoint` support for `django-html` & `django-txt` by [Lakshmikanth2001](https://github.com/Lakshmikanth2001) in ([#19288](https://github.com/microsoft/vscode-python/pull/19288)). +- Fix `unittest` discovery issue with experimental component by [ksy7588](https://github.com/ksy7588) in ([#19324](https://github.com/microsoft/vscode-python/pull/19324)). +- Trigger refresh when using `Select Interpreter` command if no envs were found previously by [karrtikr](https://github.com/karrtikr) in ([#19361](https://github.com/microsoft/vscode-python/pull/19361)). +- Update `debugpy` to 1.6.2. + +### Bug Fixes + +- Fix variable name for `flake8Path`'s description by [usta](https://github.com/usta) in ([#19313](https://github.com/microsoft/vscode-python/pull/19313)). +- Ensure we dispose objects on deactivate by [karthiknadig](https://github.com/karthiknadig) in ([#19341](https://github.com/microsoft/vscode-python/pull/19341)). +- Ensure we can change interpreters after trusting a workspace by [karrtikr](https://github.com/karrtikr) in ([#19353](https://github.com/microsoft/vscode-python/pull/19353)). +- Fix for `::::` in node id for `pytest` by [karthiknadig](https://github.com/karthiknadig) in ([#19356](https://github.com/microsoft/vscode-python/pull/19356)). +- Ensure we register for interpreter change when moving from untrusted to trusted. by [karthiknadig](https://github.com/karthiknadig) in ([#19351](https://github.com/microsoft/vscode-python/pull/19351)). + +### Code Health + +- Update CI for using GitHub Actions for release notes by [brettcannon](https://github.com/brettcannon) in ([#19273](https://github.com/microsoft/vscode-python/pull/19273)). +- Add missing translations by [paulacamargo25](https://github.com/paulacamargo25) in ([#19305](https://github.com/microsoft/vscode-python/pull/19305)). +- Delete the `news` directory by [brettcannon](https://github.com/brettcannon) in ([#19308](https://github.com/microsoft/vscode-python/pull/19308)). +- Fix interpreter discovery related telemetry by [karrtikr](https://github.com/karrtikr) in ([#19319](https://github.com/microsoft/vscode-python/pull/19319)). +- Simplify and merge async dispose and dispose by [karthiknadig](https://github.com/karthiknadig) in ([#19348](https://github.com/microsoft/vscode-python/pull/19348)). +- Updating required packages by [karthiknadig](https://github.com/karthiknadig) in ([#19375](https://github.com/microsoft/vscode-python/pull/19375)). +- Update the issue notebook by [brettcannon](https://github.com/brettcannon) in ([#19388](https://github.com/microsoft/vscode-python/pull/19388)). +- Remove `notebookeditor` proposed API by [karthiknadig](https://github.com/karthiknadig) in ([#19392](https://github.com/microsoft/vscode-python/pull/19392)). + +**Full Changelog**: https://github.com/microsoft/vscode-python/compare/2022.8.1...2022.10.0 + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.8.1 (28 June 2022) + +### Code Health + +1. Update vscode `extension-telemetry` package. + ([#19375](https://github.com/microsoft/vscode-python/pull/19375)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.8.0 (9 June 2022) + +### Enhancements + +1. Make cursor focus switch automatically to the terminal after launching a python process with configuration option. (Thanks [djplt](https://github.com/djplt)) + ([#14851](https://github.com/Microsoft/vscode-python/issues/14851)) +1. Enable localization using vscode-nls. + ([#18286](https://github.com/Microsoft/vscode-python/issues/18286)) +1. Add support for referencing multiroot-workspace folders in settings using `${workspaceFolder:}`. + ([#18650](https://github.com/Microsoft/vscode-python/issues/18650)) +1. Ensure conda envs lacking an interpreter which do not use a valid python binary are also discovered and is selectable, so that `conda env list` matches with what the extension reports. + ([#18934](https://github.com/Microsoft/vscode-python/issues/18934)) +1. Improve information collected by the `Python: Report Issue` command. + ([#19067](https://github.com/Microsoft/vscode-python/issues/19067)) +1. Only trigger auto environment discovery if a user attempts to choose a different interpreter, or when a particular scope (a workspace folder or globally) is opened for the first time. + ([#19102](https://github.com/Microsoft/vscode-python/issues/19102)) +1. Added a proposed API to report progress of environment discovery in two phases. + ([#19103](https://github.com/Microsoft/vscode-python/issues/19103)) +1. Update to latest LS client (v8.0.0) and server (v8.0.0). + ([#19114](https://github.com/Microsoft/vscode-python/issues/19114)) +1. Update to latest LS client (v8.0.1) and server (v8.0.1) that contain the race condition fix around `LangClient.stop`. + ([#19139](https://github.com/Microsoft/vscode-python/issues/19139)) + +### Fixes + +1. Do not use `--user` flag when installing in a virtual environment. + ([#14327](https://github.com/Microsoft/vscode-python/issues/14327)) +1. Fix error `No such file or directory` on conda activate, and simplify the environment activation code. + ([#18989](https://github.com/Microsoft/vscode-python/issues/18989)) +1. Add proposed async execution API under environments. + ([#19079](https://github.com/Microsoft/vscode-python/issues/19079)) + +### Code Health + +1. Capture whether environment discovery was triggered using Quickpick UI. + ([#19077](https://github.com/Microsoft/vscode-python/issues/19077)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.6.0 (5 May 2022) + +### Enhancements + +1. Rewrite support for unittest test discovery. + ([#17242](https://github.com/Microsoft/vscode-python/issues/17242)) +1. Do not require a reload when swapping between language servers. + ([#18509](https://github.com/Microsoft/vscode-python/issues/18509)) + +### Fixes + +1. Do not show inherit env prompt for conda envs when running "remotely". + ([#18510](https://github.com/Microsoft/vscode-python/issues/18510)) +1. Fixes invalid regular expression logging error occurs when file paths contain special characters. + (Thanks [sunyinqi0508](https://github.com/sunyinqi0508)) + ([#18829](https://github.com/Microsoft/vscode-python/issues/18829)) +1. Do not prompt to select new virtual envrionment if it has already been selected. + ([#18915](https://github.com/Microsoft/vscode-python/issues/18915)) +1. Disable isort when using isort extension. + ([#18945](https://github.com/Microsoft/vscode-python/issues/18945)) +1. Remove `process` check from browser specific entry point for the extension. + ([#18974](https://github.com/Microsoft/vscode-python/issues/18974)) +1. Use built-in test refresh button. + ([#19012](https://github.com/Microsoft/vscode-python/issues/19012)) +1. Update vscode-telemetry-extractor to @vscode/telemetry-extractor@1.9.7. + (Thanks [Quan Zhuo](https://github.com/quanzhuo)) + ([#19036](https://github.com/Microsoft/vscode-python/issues/19036)) +1. Ensure 64-bit interpreters are preferred over 32-bit when auto-selecting. + ([#19042](https://github.com/Microsoft/vscode-python/issues/19042)) + +### Code Health + +1. Update Jedi minimum to python 3.7. + ([#18324](https://github.com/Microsoft/vscode-python/issues/18324)) +1. Stop using `--live-stream` when using `conda run` (see https://github.com/conda/conda/issues/11209 for details). + ([#18511](https://github.com/Microsoft/vscode-python/issues/18511)) +1. Remove prompt to recommend users in old insiders program to switch to pre-release. + ([#18809](https://github.com/Microsoft/vscode-python/issues/18809)) +1. Update requirements to remove python 2.7 version restrictions. + ([#19060](https://github.com/Microsoft/vscode-python/issues/19060)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.4.1 (7 April 2022) + +### Fixes + +1. Ensure `conda info` command isn't run multiple times during startup when large number of conda interpreters are present. + ([#18200](https://github.com/Microsoft/vscode-python/issues/18200)) +1. If a conda environment is not returned via the `conda env list` command, consider it as unknown env type. + ([#18530](https://github.com/Microsoft/vscode-python/issues/18530)) +1. Wrap file paths containing an ampersand in double quotation marks for running commands in a shell. + ([#18722](https://github.com/Microsoft/vscode-python/issues/18722)) +1. Fixes regression with support for python binaries not following the standard names. + ([#18835](https://github.com/Microsoft/vscode-python/issues/18835)) +1. Fix launch of Python Debugger when using conda environments. + ([#18847](https://github.com/Microsoft/vscode-python/issues/18847)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.4.0 (30 March 2022) + +### Enhancements + +1. Use new pre-release mechanism to install insiders. + ([#18144](https://github.com/Microsoft/vscode-python/issues/18144)) +1. Add support for detection and selection of conda environments lacking a python interpreter. + ([#18357](https://github.com/Microsoft/vscode-python/issues/18357)) +1. Retains the state of the TensorBoard webview. + ([#18591](https://github.com/Microsoft/vscode-python/issues/18591)) +1. Move interpreter info status bar item to the right. + ([#18710](https://github.com/Microsoft/vscode-python/issues/18710)) +1. `debugpy` updated to version `v1.6.0`. + ([#18795](https://github.com/Microsoft/vscode-python/issues/18795)) + +### Fixes + +1. Properly dismiss the error popup dialog when having a linter error. (Thanks [Virgil Sisoe](https://github.com/sisoe24)) + ([#18553](https://github.com/Microsoft/vscode-python/issues/18553)) +1. Python files are no longer excluded from Pytest arguments during test discovery. + (thanks [Marc Mueller](https://github.com/cdce8p/)) + ([#18562](https://github.com/Microsoft/vscode-python/issues/18562)) +1. Fixes regression caused due to using `conda run` for executing files. + ([#18634](https://github.com/Microsoft/vscode-python/issues/18634)) +1. Use `conda run` to get the activated environment variables instead of activation using shell scripts. + ([#18698](https://github.com/Microsoft/vscode-python/issues/18698)) + +### Code Health + +1. Remove old settings migrator. + ([#14334](https://github.com/Microsoft/vscode-python/issues/14334)) +1. Remove old language server setting migration. + ([#14337](https://github.com/Microsoft/vscode-python/issues/14337)) +1. Remove dependency on other file system watchers. + ([#18381](https://github.com/Microsoft/vscode-python/issues/18381)) +1. Update TypeScript version to 4.5.5. + ([#18602](https://github.com/Microsoft/vscode-python/issues/18602)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.2.0 (3 March 2022) + +### Enhancements + +1. Implement a "New Python File" command + ([#18376](https://github.com/Microsoft/vscode-python/issues/18376)) +1. Use `conda run` for conda environments for running python files and installing modules. + ([#18479](https://github.com/Microsoft/vscode-python/issues/18479)) +1. Better filename patterns for pip-requirements. + (thanks [Baptiste Darthenay](https://github.com/batisteo)) + ([#18498](https://github.com/Microsoft/vscode-python/issues/18498)) + +### Fixes + +1. Ensure clicking "Discovering Python Interpreters" in the status bar shows the current discovery progress. + ([#18443](https://github.com/Microsoft/vscode-python/issues/18443)) +1. Fixes Pylama output parsing with MyPy. (thanks [Nicola Marella](https://github.com/nicolamarella)) + ([#15609](https://github.com/Microsoft/vscode-python/issues/15609)) +1. Fix CPU load issue caused by poetry plugin by not watching directories which do not exist. + ([#18459](https://github.com/Microsoft/vscode-python/issues/18459)) +1. Explicitly add `"justMyCode": "true"` to all `launch.json` configurations. + (Thanks [Matt Bogosian](https://github.com/posita)) + ([#18471](https://github.com/Microsoft/vscode-python/issues/18471)) +1. Identify base conda environments inside pyenv correctly. + ([#18500](https://github.com/Microsoft/vscode-python/issues/18500)) +1. Fix for a crash when loading environments with no info. + ([#18594](https://github.com/Microsoft/vscode-python/issues/18594)) + +### Code Health + +1. Remove dependency on `ts-mock-imports`. + ([#14757](https://github.com/Microsoft/vscode-python/issues/14757)) +1. Update `vsce` to `v2.6.6`. + ([#18411](https://github.com/Microsoft/vscode-python/issues/18411)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.0.1 (8 February 2022) + +### Fixes + +1. Fix `invalid patch string` error when using conda. + ([#18455](https://github.com/Microsoft/vscode-python/issues/18455)) +1. Revert to old way of running debugger if conda version less than 4.9.0. + ([#18436](https://github.com/Microsoft/vscode-python/issues/18436)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2022.0.0 (3 February 2022) + +### Enhancements + +1. Add support for conda run without output, using `--no-capture-output` flag. + ([#7696](https://github.com/Microsoft/vscode-python/issues/7696)) +1. Add an option to clear interpreter setting for all workspace folders in multiroot scenario. + ([#17693](https://github.com/Microsoft/vscode-python/issues/17693)) +1. Public API for environments (proposed). + ([#17905](https://github.com/Microsoft/vscode-python/issues/17905)) +1. Group interpreters in interpreter quick picker using separators. + ([#17944](https://github.com/Microsoft/vscode-python/issues/17944)) +1. Add support for pylint error ranges. Requires Python 3.8 and pylint 2.12.2 or higher. (thanks [Marc Mueller](https://github.com/cdce8p)) + ([#18068](https://github.com/Microsoft/vscode-python/issues/18068)) +1. Move pinned interpreter status bar item towards the right behind `pythonInterpreterInfoPinned` experiment. + ([#18282](https://github.com/Microsoft/vscode-python/issues/18282)) +1. Move interpreter status bar item into the `Python` language status item behind `pythonInterpreterInfoUnpinned` experiment. + ([#18283](https://github.com/Microsoft/vscode-python/issues/18283)) +1. Update Jedi language server to latest. + ([#18325](https://github.com/Microsoft/vscode-python/issues/18325)) + +### Fixes + +1. Update zh-tw translations. (thanks [ted1030](https://github.com/ted1030)) + ([#17991](https://github.com/Microsoft/vscode-python/issues/17991)) +1. Support selecting conda environments with python `3.10`. + ([#18128](https://github.com/Microsoft/vscode-python/issues/18128)) +1. Fixes to telemetry handler in language server middleware. + ([#18188](https://github.com/Microsoft/vscode-python/issues/18188)) +1. Resolve system variables in `python.defaultInterpreterPath`. + ([#18207](https://github.com/Microsoft/vscode-python/issues/18207)) +1. Ensures interpreters are discovered even when running `interpreterInfo.py` script prints more than just the script output. + ([#18234](https://github.com/Microsoft/vscode-python/issues/18234)) +1. Remove restrictions on using `purpose` in debug configuration. + ([#18248](https://github.com/Microsoft/vscode-python/issues/18248)) +1. Ensure Python Interpreter information in the status bar is updated if Interpreter information changes. + ([#18257](https://github.com/Microsoft/vscode-python/issues/18257)) +1. Fix "Run Selection/Line in Python Terminal" for Python < 3.8 when the code includes decorators. + ([#18258](https://github.com/Microsoft/vscode-python/issues/18258)) +1. Ignore notebook cells for pylance. Jupyter extension is handling notebooks. + ([#18259](https://github.com/Microsoft/vscode-python/issues/18259)) +1. Fix for UriError when using python.interpreterPath command in tasks. + ([#18285](https://github.com/Microsoft/vscode-python/issues/18285)) +1. Ensure linting works under `conda run` (work-around for https://github.com/conda/conda/issues/10972). + ([#18364](https://github.com/Microsoft/vscode-python/issues/18364)) +1. Ensure items are removed from the array in reverse order when using array indices. + ([#18382](https://github.com/Microsoft/vscode-python/issues/18382)) +1. Log experiments only after we finish updating active experiments list. + ([#18393](https://github.com/Microsoft/vscode-python/issues/18393)) + +### Code Health + +1. Improve unit tests for envVarsService, in particular the variable substitution logic (Thanks [Keshav Kini](https://github.com/kini)) + ([#17747](https://github.com/Microsoft/vscode-python/issues/17747)) +1. Remove `python.pythonPath` setting and `pythonDeprecatePythonPath` experiment. + ([#17977](https://github.com/Microsoft/vscode-python/issues/17977)) +1. Remove `pythonTensorboardExperiment` and `PythonPyTorchProfiler` experiments. + ([#18074](https://github.com/Microsoft/vscode-python/issues/18074)) +1. Reduce direct dependency on IOutputChannel. + ([#18132](https://github.com/Microsoft/vscode-python/issues/18132)) +1. Upgrade to Node 14 LTS (v14.18.2). + ([#18148](https://github.com/Microsoft/vscode-python/issues/18148)) +1. Switch `jedils_requirements.txt` to `requirements.txt` under `pythonFiles/jedilsp_requirements/`. + ([#18185](https://github.com/Microsoft/vscode-python/issues/18185)) +1. Removed `experiments.json` file. + ([#18235](https://github.com/Microsoft/vscode-python/issues/18235)) +1. Fixed typescript and namespace errors. (Thanks [Harry-Hopkinson](https://github.com/Harry-Hopkinson)) + ([#18345](https://github.com/Microsoft/vscode-python/issues/18345)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Pylance](https://github.com/microsoft/pylance-release) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.12.0 (9 December 2021) + +### Enhancements + +1. Python extension should activate on onDebugInitialConfigurations. + (thanks [Nayana Vinod](https://github.com/nayana-vinod) and [Jessica Jolly](https://github.com/JessieJolly)). + ([#9557](https://github.com/Microsoft/vscode-python/issues/9557)) +1. Declare limited support when running in virtual workspaces by only supporting language servers. + ([#17519](https://github.com/Microsoft/vscode-python/issues/17519)) +1. Add a "Do not show again" option to the formatter installation prompt. + ([#17937](https://github.com/Microsoft/vscode-python/issues/17937)) +1. Add the ability to install `pip` if missing, when installing missing packages from the `Jupyter Extension`. + ([#17975](https://github.com/Microsoft/vscode-python/issues/17975)) +1. Declare limited support for untrusted workspaces by only supporting Pylance. + ([#18031](https://github.com/Microsoft/vscode-python/issues/18031)) +1. Update to latest jedi language server. + ([#18051](https://github.com/Microsoft/vscode-python/issues/18051)) +1. Add language status item indicating that extension works partially in virtual and untrusted workspaces. + ([#18059](https://github.com/Microsoft/vscode-python/issues/18059)) + +### Fixes + +1. Partial fix for using the same directory as discovery when running tests. + (thanks [Brian Rutledge](https://github.com/bhrutledge)) + ([#9553](https://github.com/Microsoft/vscode-python/issues/9553)) +1. Handle decorators properly when using the `Run Selection/Line in Python Terminal` command. + ([#15058](https://github.com/Microsoft/vscode-python/issues/15058)) +1. Don't interpret `--rootdir` as a test folder for `pytest`. + (thanks [Brian Rutledge](https://github.com/bhrutledge)) + ([#16079](https://github.com/Microsoft/vscode-python/issues/16079)) +1. Ensure debug configuration env variables overwrite env variables defined in .env file. + ([#16984](https://github.com/Microsoft/vscode-python/issues/16984)) +1. Fix for `pytest` run all tests when using `pytest.ini` and `cwd`. + (thanks [Brian Rutledge](https://github.com/bhrutledge)) + ([#17546](https://github.com/Microsoft/vscode-python/issues/17546)) +1. When parsing pytest node ids with parameters, use native pytest information to separate out the parameter decoration rather than try and parse the nodeid as text. + (thanks [Martijn Pieters](https://github.com/mjpieters)) + ([#17676](https://github.com/Microsoft/vscode-python/issues/17676)) +1. Do not process system Python 2 installs on macOS Monterey. + ([#17870](https://github.com/Microsoft/vscode-python/issues/17870)) +1. Remove duplicate "Clear Workspace Interpreter Setting" command from the command palette. + ([#17890](https://github.com/Microsoft/vscode-python/issues/17890)) +1. Ensure that path towards extenal tools like linters are not synched between + machines. (thanks [Sorin Sbarnea](https://github.com/ssbarnea)) + ([#18008](https://github.com/Microsoft/vscode-python/issues/18008)) +1. Increase timeout for activation of conda environments from 30s to 60s. + ([#18017](https://github.com/Microsoft/vscode-python/issues/18017)) + +### Code Health + +1. Removing experiments for refresh and failed tests buttons. + ([#17868](https://github.com/Microsoft/vscode-python/issues/17868)) +1. Remove caching debug configuration experiment only. + ([#17895](https://github.com/Microsoft/vscode-python/issues/17895)) +1. Remove "join mailing list" notification experiment. + ([#17904](https://github.com/Microsoft/vscode-python/issues/17904)) +1. Remove dependency on `winston` logger. + ([#17921](https://github.com/Microsoft/vscode-python/issues/17921)) +1. Bump isort from 5.9.3 to 5.10.0. + ([#17923](https://github.com/Microsoft/vscode-python/issues/17923)) +1. Remove old discovery code and discovery experiments. + ([#17962](https://github.com/Microsoft/vscode-python/issues/17962)) +1. Remove dependency on `azure-storage`. + ([#17972](https://github.com/Microsoft/vscode-python/issues/17972)) +1. Ensure telemetry correctly identifies when users set linter paths. + ([#18019](https://github.com/Microsoft/vscode-python/issues/18019)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.11.0 (4 November 2021) + +### Enhancements + +1. Improve setting description for enabling A/B tests. (Thanks [Thi Le](https://github.com/thi-lee)) + ([#7793](https://github.com/Microsoft/vscode-python/issues/7793)) +1. Support `expectedFailure` when running `unittest` tests using `pytest`. + ([#8427](https://github.com/Microsoft/vscode-python/issues/8427)) +1. Support environment variable substitution in `python` property for `launch.json`. + ([#12289](https://github.com/Microsoft/vscode-python/issues/12289)) +1. Update homebrew instructions to install python 3. + (thanks [Carolinekung2 ](https://github.com/Carolinekung2)) + ([#17590](https://github.com/Microsoft/vscode-python/issues/17590)) + +### Fixes + +1. Reworded message for A/B testing in the output channel to "Experiment 'X' is active/inactive". + (Thanks [Vidushi Gupta](https://github.com/Vidushi-Gupta) for the contribution) + ([#6352](https://github.com/Microsoft/vscode-python/issues/6352)) +1. Change text to "Select at workspace level" instead of "Entire workspace" when selecting or clearing interpreters in a multiroot folder scenario. + (Thanks [Quynh Do](https://github.com/quynhd07)) + ([#10737](https://github.com/Microsoft/vscode-python/issues/10737)) +1. Fix unresponsive extension issues caused by discovery component. + ([#11924](https://github.com/Microsoft/vscode-python/issues/11924)) +1. Remove duplicate 'Run Python file' commands in command palette. + ([#14562](https://github.com/Microsoft/vscode-python/issues/14562)) +1. Change drive first before changing directory in windows, to anticipate running file outside working directory with different storage drive. (thanks [afikrim](https://github.com/afikrim)) + ([#14730](https://github.com/Microsoft/vscode-python/issues/14730)) +1. Support installing Insiders extension in remote sessions. + ([#15145](https://github.com/Microsoft/vscode-python/issues/15145)) +1. If the executeInFileDir setting is enabled, always change to the script directory before running the script, even if the script is in the Workspace folder. (thanks (acash715)[https://github.com/acash715]) + ([#15181](https://github.com/Microsoft/vscode-python/issues/15181)) +1. replaceAll for replacing separators. (thanks [Aliva Das](https://github.com/IceJinx33)) + ([#15288](https://github.com/Microsoft/vscode-python/issues/15288)) +1. When activating environment, creating new Integrated Terminal doesn't take selected workspace into account. (Thanks [Vidushi Gupta](https://github.com/Vidushi-Gupta) for the contribution) + ([#15522](https://github.com/Microsoft/vscode-python/issues/15522)) +1. Fix truncated mypy errors by setting `--no-pretty`. + (thanks [Peter Lithammer](https://github.com/lithammer)) + ([#16836](https://github.com/Microsoft/vscode-python/issues/16836)) +1. Renamed the commands in the Run/Debug button of the editor title. (thanks (Analía Bannura)[https://github.com/analiabs] and (Anna Arsentieva)[https://github.com/arsentieva]) + ([#17019](https://github.com/Microsoft/vscode-python/issues/17019)) +1. Fix for `pytest` run all tests when using `pytest.ini`. + ([#17546](https://github.com/Microsoft/vscode-python/issues/17546)) +1. Ensures test node is updated when `unittest` sub-tests are used. + ([#17561](https://github.com/Microsoft/vscode-python/issues/17561)) +1. Update debugpy to 1.5.1 to ensure user-unhandled exception setting is false by default. + ([#17789](https://github.com/Microsoft/vscode-python/issues/17789)) +1. Ensure we filter out unsupported features in web scenario using `shellExecutionSupported` context key. + ([#17811](https://github.com/Microsoft/vscode-python/issues/17811)) +1. Remove `python.condaPath` from workspace scope. + ([#17819](https://github.com/Microsoft/vscode-python/issues/17819)) +1. Make updateTestItemFromRawData async to prevent blocking the extension. + ([#17823](https://github.com/Microsoft/vscode-python/issues/17823)) +1. Semantic colorization can sometimes require reopening or scrolling of a file. + ([#17878](https://github.com/Microsoft/vscode-python/issues/17878)) + +### Code Health + +1. Remove TSLint comments since we use ESLint. + ([#4060](https://github.com/Microsoft/vscode-python/issues/4060)) +1. Remove unused SHA512 hashing code. + ([#7333](https://github.com/Microsoft/vscode-python/issues/7333)) +1. Remove unused packages. + ([#16840](https://github.com/Microsoft/vscode-python/issues/16840)) +1. Remove old discovery code and discovery experiments. + ([#17795](https://github.com/Microsoft/vscode-python/issues/17795)) +1. Do not query for version and kind if it's not needed when reporting an issue. + ([#17815](https://github.com/Microsoft/vscode-python/issues/17815)) +1. Remove Microsoft Python Language Server support from the extension. + ([#17834](https://github.com/Microsoft/vscode-python/issues/17834)) +1. Bump `packaging` from 21.0 to 21.2. + ([#17886](https://github.com/Microsoft/vscode-python/issues/17886)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.10.1 (13 October 2021) + +### Enhancements + +1. Provide IntelliSense status information when using `github.dev` or any other web platform. + ([#17658](https://github.com/Microsoft/vscode-python/issues/17658)) + +### Fixes + +1. Ensure commands run are not logged twice in Python output channel. + ([#7160](https://github.com/Microsoft/vscode-python/issues/7160)) +1. Ensure we use fragment when formatting notebook cells. + ([#16980](https://github.com/Microsoft/vscode-python/issues/16980)) +1. Hide UI elements that are not applicable when using `github.dev` or any other web platform. + ([#17252](https://github.com/Microsoft/vscode-python/issues/17252)) +1. Localize strings on `github.dev` using VSCode FS API. + ([#17712](https://github.com/Microsoft/vscode-python/issues/17712)) + +### Code Health + +1. Log commands run by the discovery component in the output channel. + ([#16732](https://github.com/Microsoft/vscode-python/issues/16732)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.10.0 (7 October 2021) + +### Enhancements + +1. Set the default value of `python.linting.pylintEnabled` to `false`. + ([#3007](https://github.com/Microsoft/vscode-python/issues/3007)) +1. Phase out Jedi 0.17, and use Jedi behind a language server protocol as the Jedi option. Remove Jedi-related settings `python.jediMemoryLimit` and `python.jediPath`, since they are not used with the new language server implementation. + ([#11995](https://github.com/Microsoft/vscode-python/issues/11995)) +1. Add support for dynamic updates in interpreter list. + ([#17043](https://github.com/Microsoft/vscode-python/issues/17043)) +1. Query for fresh workspace envs when auto-selecting interpreters in a new workspace. + ([#17264](https://github.com/Microsoft/vscode-python/issues/17264)) +1. Increase Microsoft Python Language Server deprecation prompt frequency and update wording. + ([#17361](https://github.com/Microsoft/vscode-python/issues/17361)) +1. Remove "The Python extension will have limited support for Python 2.7 in the next release" notification. + ([#17451](https://github.com/Microsoft/vscode-python/issues/17451)) +1. Added non-blocking discovery APIs for Jupyter. + ([#17452](https://github.com/Microsoft/vscode-python/issues/17452)) +1. Resolve environments using cache if cache has complete env info. + ([#17474](https://github.com/Microsoft/vscode-python/issues/17474)) +1. Ensure debugger contribution points are turned off when using virtual workspaces. + ([#17493](https://github.com/Microsoft/vscode-python/issues/17493)) +1. Display a notification about the end of Jedi support when using Python 2.7. + ([#17512](https://github.com/Microsoft/vscode-python/issues/17512)) +1. If user has selected an interpreter which is not discovery cache, correctly add it to cache. + ([#17575](https://github.com/Microsoft/vscode-python/issues/17575)) +1. Update to latest version of Jedi LS. + ([#17591](https://github.com/Microsoft/vscode-python/issues/17591)) +1. Update to `vscode-extension-telemetry` 0.4.2. + ([#17608](https://github.com/Microsoft/vscode-python/issues/17608)) + +### Fixes + +1. Don't override user provided `--rootdir` in pytest args. + ([#8678](https://github.com/Microsoft/vscode-python/issues/8678)) +1. Don't log error during settings migration if settings.json doesn't exist. + ([#11354](https://github.com/Microsoft/vscode-python/issues/11354)) +1. Fix casing of text in `unittest` patterns quickpick. + (thanks [Anupama Nadig](https://github.com/anu-ka)) + ([#17093](https://github.com/Microsoft/vscode-python/issues/17093)) +1. Use quickpick details for the "Use Python from `python.defaultInterpreterPath` setting" entry. + ([#17124](https://github.com/Microsoft/vscode-python/issues/17124)) +1. Fix refreshing progress display in the status bar. + ([#17338](https://github.com/Microsoft/vscode-python/issues/17338)) +1. Ensure we do not start a new discovery for an event if one is already scheduled. + ([#17339](https://github.com/Microsoft/vscode-python/issues/17339)) +1. Do not display workspace related envs if no workspace is open. + ([#17358](https://github.com/Microsoft/vscode-python/issues/17358)) +1. Ensure we correctly evaluate Unknown type before sending startup telemetry. + ([#17362](https://github.com/Microsoft/vscode-python/issues/17362)) +1. Fix for unittest discovery failure due to root id mismatch. + ([#17386](https://github.com/Microsoft/vscode-python/issues/17386)) +1. Improve pattern matching for shell detection on Windows. + (thanks [Erik Demaine](https://github.com/edemaine/)) + ([#17426](https://github.com/Microsoft/vscode-python/issues/17426)) +1. Changed the way of searching left bracket `[` in case of subsets of tests. + (thanks [ilexei](https://github.com/ilexei)) + ([#17461](https://github.com/Microsoft/vscode-python/issues/17461)) +1. Fix hang caused by loop in getting interpreter information. + ([#17484](https://github.com/Microsoft/vscode-python/issues/17484)) +1. Ensure database storage extension uses to track all storages does not grow unnecessarily. + ([#17488](https://github.com/Microsoft/vscode-python/issues/17488)) +1. Ensure all users use new discovery code regardless of their experiment settings. + ([#17563](https://github.com/Microsoft/vscode-python/issues/17563)) +1. Add timeout when discovery runs `conda info --json` command. + ([#17576](https://github.com/Microsoft/vscode-python/issues/17576)) +1. Use `conda-forge` channel when installing packages into conda environments. + ([#17628](https://github.com/Microsoft/vscode-python/issues/17628)) + +### Code Health + +1. Remove support for `rope`. Refactoring now supported via language servers. + ([#10440](https://github.com/Microsoft/vscode-python/issues/10440)) +1. Remove `pylintMinimalCheckers` setting. Syntax errors now reported via language servers. + ([#13321](https://github.com/Microsoft/vscode-python/issues/13321)) +1. Remove `ctags` support. Workspace symbols now supported via language servers. + ([#16063](https://github.com/Microsoft/vscode-python/issues/16063)) +1. Fix linting for some files in .eslintignore. + ([#17181](https://github.com/Microsoft/vscode-python/issues/17181)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.9.3 (20 September 2021) + +### Fixes + +1. Fix `Python extension loading...` issue for users who have disabled telemetry. + ([#17447](https://github.com/Microsoft/vscode-python/issues/17447)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.9.2 (13 September 2021) + +### Fixes + +1. Ensure line feeds are changed to CRLF in test messages. + ([#17111](https://github.com/Microsoft/vscode-python/issues/17111)) +1. Fix for `unittest` ModuleNotFoundError when discovering tests. + ([#17363](https://github.com/Microsoft/vscode-python/issues/17363)) +1. Ensure we block getting active interpreter on auto-selection. + ([#17370](https://github.com/Microsoft/vscode-python/issues/17370)) +1. Fix to handle undefined uri in debug in terminal command. + ([#17374](https://github.com/Microsoft/vscode-python/issues/17374)) +1. Fix for missing buttons for tests when using multiple test folders. + ([#17378](https://github.com/Microsoft/vscode-python/issues/17378)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.9.1 (9 September 2021) + +### Fixes + +1. Fix for debug configuration used when no launch.json exists is still used after launch.json is created. + ([#17353](https://github.com/Microsoft/vscode-python/issues/17353)) +1. Ensure default python executable to use is 'python' instead of ''. + ([#17089](https://github.com/Microsoft/vscode-python/issues/17089)) +1. Ensure workspace interpreters are discovered and watched when in `pythonDiscoveryModuleWithoutWatcher` experiment. + ([#17144](https://github.com/Microsoft/vscode-python/issues/17144)) +1. Do path comparisons appropriately in the new discovery component. + ([#17244](https://github.com/Microsoft/vscode-python/issues/17244)) +1. Fix for test result not found for files starting with py. + ([#17270](https://github.com/Microsoft/vscode-python/issues/17270)) +1. Fix for unable to import when running unittest. + ([#17280](https://github.com/Microsoft/vscode-python/issues/17280)) +1. Fix for multiple folders in `pytest` args. + ([#17281](https://github.com/Microsoft/vscode-python/issues/17281)) +1. Fix issue with incomplete `unittest` runs. + ([#17282](https://github.com/Microsoft/vscode-python/issues/17282)) +1. Improve detecting lines when using testing wrappers. + ([#17285](https://github.com/Microsoft/vscode-python/issues/17285)) +1. Ensure we trigger discovery for the first time as part of extension activation. + ([#17303](https://github.com/Microsoft/vscode-python/issues/17303)) +1. Correctly indicate when interpreter refresh has finished. + ([#17335](https://github.com/Microsoft/vscode-python/issues/17335)) +1. Missing location info for `async def` functions. + ([#17309](https://github.com/Microsoft/vscode-python/issues/17309)) +1. For CI ensure `tensorboard` is installed in python 3 environments only. + ([#17325](https://github.com/Microsoft/vscode-python/issues/17325)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.9.0 (1 September 2021) + +### Enhancements + +1. Added commands to select and run a set of tests. + ([#3652](https://github.com/Microsoft/vscode-python/issues/3652)) +1. Fix for tests should be re-discovered after switching environment. + ([#5347](https://github.com/Microsoft/vscode-python/issues/5347)) +1. Remove the testing functionality from the status bar. + ([#8405](https://github.com/Microsoft/vscode-python/issues/8405)) +1. Automatically detect new test file in test explorer. + ([#8675](https://github.com/Microsoft/vscode-python/issues/8675)) +1. Search test names in test explorer. + ([#8836](https://github.com/Microsoft/vscode-python/issues/8836)) +1. Added a command for displaying the test explorer. + ([#9026](https://github.com/Microsoft/vscode-python/issues/9026)) +1. Make "run all tests" icon gray instead of green. + ([#9402](https://github.com/Microsoft/vscode-python/issues/9402)) +1. Use VS Code's test UI instead of code lenses above tests. + ([#10898](https://github.com/Microsoft/vscode-python/issues/10898)) +1. Added command to run last executed test. + ([#11864](https://github.com/Microsoft/vscode-python/issues/11864)) +1. Fix for PyTest discovery can fail but not give any clue as to what the problem is. + ([#12043](https://github.com/Microsoft/vscode-python/issues/12043)) +1. Add shortcut to run the current test (at cursor position). + ([#12218](https://github.com/Microsoft/vscode-python/issues/12218)) +1. Run all tests in a multi-root workspace without prompting. + ([#13147](https://github.com/Microsoft/vscode-python/issues/13147)) +1. Plug into VS Code's Test UI. + ([#15750](https://github.com/Microsoft/vscode-python/issues/15750)) +1. Show notification to join insiders after 5 mins. + ([#16833](https://github.com/Microsoft/vscode-python/issues/16833)) +1. Update Simplified Chinese translation. (thanks [FiftysixTimes7](https://github.com/FiftysixTimes7)) + ([#16916](https://github.com/Microsoft/vscode-python/issues/16916)) +1. Added Debug file button to editor run menu. + ([#16924](https://github.com/Microsoft/vscode-python/issues/16924)) +1. Cache last selection for debug configuration when debugging without launch.json. + ([#16934](https://github.com/Microsoft/vscode-python/issues/16934)) +1. Improve display of default interpreter and suggested interpreter in the interpreter selection quick pick. + ([#16971](https://github.com/Microsoft/vscode-python/issues/16971)) +1. Improve discovery component API. + ([#17005](https://github.com/Microsoft/vscode-python/issues/17005)) +1. Add a notification about Python 2.7 support, displayed whenever a tool is used or whenever debugging is started. + ([#17009](https://github.com/Microsoft/vscode-python/issues/17009)) +1. Add caching debug configuration behind experiment. + ([#17025](https://github.com/Microsoft/vscode-python/issues/17025)) +1. Do not query to get all interpreters where it's not needed in the extension code. + ([#17030](https://github.com/Microsoft/vscode-python/issues/17030)) +1. Add a warning prompt for the Microsoft Python Language Server deprecation. + ([#17056](https://github.com/Microsoft/vscode-python/issues/17056)) +1. Update to latest jedi-language-server. + ([#17072](https://github.com/Microsoft/vscode-python/issues/17072)) + +### Fixes + +1. Fix for test code lenses do not disappear even after disabling the unit tests. + ([#1654](https://github.com/Microsoft/vscode-python/issues/1654)) +1. Fix for code lens for a test class run under unittest doesn't show overall results for methods. + ([#2382](https://github.com/Microsoft/vscode-python/issues/2382)) +1. Fix for test code lens do not appear on initial activation of testing support. + ([#2644](https://github.com/Microsoft/vscode-python/issues/2644)) +1. Fix for "No tests ran, please check the configuration settings for the tests". + ([#2660](https://github.com/Microsoft/vscode-python/issues/2660)) +1. Fix for code lenses disappear on save, then re-appear when tabbing on/off the file. + ([#2790](https://github.com/Microsoft/vscode-python/issues/2790)) +1. Fix for code lenses for tests not showing up when test is defined on line 1. + ([#3062](https://github.com/Microsoft/vscode-python/issues/3062)) +1. Fix for command 'python.runtests' not found. + ([#3591](https://github.com/Microsoft/vscode-python/issues/3591)) +1. Fix for navigation to code doesn't work with parameterized tests. + ([#4469](https://github.com/Microsoft/vscode-python/issues/4469)) +1. Fix for tests are not being discovered at first in multiroot workspace. + ([#4848](https://github.com/Microsoft/vscode-python/issues/4848)) +1. Fix for tests not found after upgrade. + ([#5417](https://github.com/Microsoft/vscode-python/issues/5417)) +1. Fix for failed icon of the first failed test doesn't changed to running icon when using unittest framework. + ([#5791](https://github.com/Microsoft/vscode-python/issues/5791)) +1. Fix for failure details in unittest discovery are not always logged. + ([#5889](https://github.com/Microsoft/vscode-python/issues/5889)) +1. Fix for test results not updated if test is run via codelens. + ([#6787](https://github.com/Microsoft/vscode-python/issues/6787)) +1. Fix for "Run Current Test File" is not running tests, just discovering them. + ([#7150](https://github.com/Microsoft/vscode-python/issues/7150)) +1. Fix for testing code lenses don't show for remote sessions to a directory symlink. + ([#7443](https://github.com/Microsoft/vscode-python/issues/7443)) +1. Fix for discover test per folder icon is missing in multi-root workspace after upgrade. + ([#7870](https://github.com/Microsoft/vscode-python/issues/7870)) +1. Fix for clicking on a test in the Test Explorer does not navigate to the correct test. + ([#8448](https://github.com/Microsoft/vscode-python/issues/8448)) +1. Fix for if multiple tests have the same name, only one is run. + ([#8761](https://github.com/Microsoft/vscode-python/issues/8761)) +1. Fix for test failure is reported as a compile error. + ([#9640](https://github.com/Microsoft/vscode-python/issues/9640)) +1. Fix for discovering tests immediately after interpreter change often fails. + ([#9854](https://github.com/Microsoft/vscode-python/issues/9854)) +1. Fix for unittest module invoking wrong TestCase. + ([#10972](https://github.com/Microsoft/vscode-python/issues/10972)) +1. Fix for unable to navigate to test function. + ([#11866](https://github.com/Microsoft/vscode-python/issues/11866)) +1. Fix for running test fails trying to access non-existing file. + ([#12403](https://github.com/Microsoft/vscode-python/issues/12403)) +1. Fix for code lenses don't work after opening files from different projects in workspace. + ([#12995](https://github.com/Microsoft/vscode-python/issues/12995)) +1. Fix for the pytest icons keep spinning when run Test Method. + ([#13285](https://github.com/Microsoft/vscode-python/issues/13285)) +1. Test for any functionality related to testing doesn't work if language server is set to none. + ([#13713](https://github.com/Microsoft/vscode-python/issues/13713)) +1. Fix for cannot configure PyTest from UI. + ([#13916](https://github.com/Microsoft/vscode-python/issues/13916)) +1. Fix for test icons not updating when using pytest. + ([#15260](https://github.com/Microsoft/vscode-python/issues/15260)) +1. Fix for debugging tests is returning errors due to "unsupported status". + ([#15736](https://github.com/Microsoft/vscode-python/issues/15736)) +1. Removes `"request": "test"` as a config option. This can now be done with `"purpose": ["debug-test"]`. + ([#15790](https://github.com/Microsoft/vscode-python/issues/15790)) +1. Fix for "There was an error in running the tests" when stopping debugger. + ([#16475](https://github.com/Microsoft/vscode-python/issues/16475)) +1. Use the vscode API appropriately to find out what terminal is being used. + ([#16577](https://github.com/Microsoft/vscode-python/issues/16577)) +1. Fix unittest discovery. (thanks [JulianEdwards](https://github.com/bigjools)) + ([#16593](https://github.com/Microsoft/vscode-python/issues/16593)) +1. Fix run `installPythonLibs` error in windows. + ([#16844](https://github.com/Microsoft/vscode-python/issues/16844)) +1. Fix for test welcome screen flashes on refresh. + ([#16855](https://github.com/Microsoft/vscode-python/issues/16855)) +1. Show re-run failed test button only when there are failed tests. + ([#16856](https://github.com/Microsoft/vscode-python/issues/16856)) +1. Triggering test refresh shows progress indicator. + ([#16891](https://github.com/Microsoft/vscode-python/issues/16891)) +1. Fix environment sorting for the `Python: Select Interpreter` command. + (thanks [Marc Mueller](https://github.com/cdce8p)) + ([#16893](https://github.com/Microsoft/vscode-python/issues/16893)) +1. Fix for unittest not getting discovered in all cases. + ([#16902](https://github.com/Microsoft/vscode-python/issues/16902)) +1. Don't show full path in the description for each test node. + ([#16927](https://github.com/Microsoft/vscode-python/issues/16927)) +1. Fix for no notification shown if test framework is not configured and run all tests is called. + ([#16941](https://github.com/Microsoft/vscode-python/issues/16941)) +1. In experiments service don't always `await` on `initialfetch` which can be slow depending on the network. + ([#16959](https://github.com/Microsoft/vscode-python/issues/16959)) +1. Ensure 2.7 unittest still work with new test support. + ([#16962](https://github.com/Microsoft/vscode-python/issues/16962)) +1. Fix issue with parsing test run ids for reporting test status. + ([#16963](https://github.com/Microsoft/vscode-python/issues/16963)) +1. Fix cell magics, line magics, and shell escaping in jupyter notebooks to not show error diagnostics. + ([#17058](https://github.com/Microsoft/vscode-python/issues/17058)) +1. Fix for testing ui update issue when `pytest` parameter has '/'. + ([#17079](https://github.com/Microsoft/vscode-python/issues/17079)) + +### Code Health + +1. Remove nose test support. + ([#16371](https://github.com/Microsoft/vscode-python/issues/16371)) +1. Remove custom start page experience in favor of VSCode's built-in walkthrough support. + ([#16453](https://github.com/Microsoft/vscode-python/issues/16453)) +1. Run auto-selection only once, and return the cached value for subsequent calls. + ([#16735](https://github.com/Microsoft/vscode-python/issues/16735)) +1. Add telemetry for when an interpreter gets auto-selected. + ([#16764](https://github.com/Microsoft/vscode-python/issues/16764)) +1. Remove pre-existing environment sorting algorithm and old rule-based auto-selection logic. + ([#16935](https://github.com/Microsoft/vscode-python/issues/16935)) +1. Add API to run code after extension activation. + ([#16983](https://github.com/Microsoft/vscode-python/issues/16983)) +1. Add telemetry sending time it took to load data from experiment service. + ([#17011](https://github.com/Microsoft/vscode-python/issues/17011)) +1. Improve reliability of virtual env tests and disable poetry watcher tests. + ([#17088](https://github.com/Microsoft/vscode-python/issues/17088)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [poetry](https://pypi.org/project/poetry/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.8.3 (23 August 2021) + +### Fixes + +1. Update `vsce` to latest to fix metadata in VSIX for web extension. + ([#17049](https://github.com/Microsoft/vscode-python/issues/17049)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.8.2 (19 August 2021) + +### Enhancements + +1. Add a basic web extension bundle. + ([#16869](https://github.com/Microsoft/vscode-python/issues/16869)) +1. Add basic Pylance support to the web extension. + ([#16870](https://github.com/Microsoft/vscode-python/issues/16870)) + +### Code Health + +1. Update telemetry client to support browser, plumb to Pylance. + ([#16871](https://github.com/Microsoft/vscode-python/issues/16871)) +1. Refactor language server middleware to work in the browser. + ([#16872](https://github.com/Microsoft/vscode-python/issues/16872)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.8.1 (6 August 2021) + +### Fixes + +1. Fix random delay before running python code. + ([#16768](https://github.com/Microsoft/vscode-python/issues/16768)) +1. Fix the order of default unittest arguments. + (thanks [Nikolay Kondratyev](https://github.com/kondratyev-nv/)) + ([#16882](https://github.com/Microsoft/vscode-python/issues/16882)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.8.0 (5 August 2021) + +### Enhancements + +1. Add new getting started page using VS Code's API to replace our custom start page. + ([#16678](https://github.com/Microsoft/vscode-python/issues/16678)) +1. Replace deprecated vscode-test with @vscode/test-electron for CI. (thanks [iChenLei](https://github.com/iChenLei)) + ([#16765](https://github.com/Microsoft/vscode-python/issues/16765)) + +### Code Health + +1. Sort Settings Alphabetically. (thanks [bfarahdel](https://github.com/bfarahdel)) + ([#8406](https://github.com/Microsoft/vscode-python/issues/8406)) +1. Changed default language server to `Pylance` for extension development. (thanks [jasleen101010](https://github.com/jasleen101010)) + ([#13007](https://github.com/Microsoft/vscode-python/issues/13007)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.7.2 (23 July 2021) + +### Enhancements + +1. Update `debugpy` with fix for https://github.com/microsoft/debugpy/issues/669. + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.7.1 (21 July 2021) + +### Enhancements + +1. Update `debugpy` to the latest version. + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.7.0 (20 July 2021) + +### Enhancements + +1. Support starting a TensorBoard session with a remote URL hosting log files. + ([#16461](https://github.com/Microsoft/vscode-python/issues/16461)) +1. Sort environments in the selection quickpick by assumed usefulness. + ([#16520](https://github.com/Microsoft/vscode-python/issues/16520)) + +### Fixes + +1. Add link to docs page on how to install the Python extension to README. (thanks [KamalSinghKhanna](https://github.com/KamalSinghKhanna)) + ([#15199](https://github.com/Microsoft/vscode-python/issues/15199)) +1. Make test explorer only show file/folder names on nodes. + (thanks [bobwalker99](https://github.com/bobwalker99)) + ([#16368](https://github.com/Microsoft/vscode-python/issues/16368)) +1. Ensure we dispose restart command registration before we create a new instance of Jedi LS. + ([#16441](https://github.com/Microsoft/vscode-python/issues/16441)) +1. Ensure `shellIdentificationSource` is set correctly. (thanks [intrigus-lgtm](https://github.com/intrigus-lgtm)) + ([#16517](https://github.com/Microsoft/vscode-python/issues/16517)) +1. Clear Notebook Cell diagnostics when deleting a cell or closing a notebook. + ([#16528](https://github.com/Microsoft/vscode-python/issues/16528)) +1. The `poetryPath` setting will correctly apply system variable substitutions. (thanks [Anthony Shaw](https://github.com/tonybaloney)) + ([#16607](https://github.com/Microsoft/vscode-python/issues/16607)) +1. The Jupyter Notebook extension will install any missing dependencies using Poetry or Pipenv if those are the selected environments. (thanks [Anthony Shaw](https://github.com/tonybaloney)) + ([#16615](https://github.com/Microsoft/vscode-python/issues/16615)) +1. Ensure we block on autoselection when no interpreter is explictly set by user. + ([#16723](https://github.com/Microsoft/vscode-python/issues/16723)) +1. Fix autoselection when opening a python file directly. + ([#16733](https://github.com/Microsoft/vscode-python/issues/16733)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.6.0 (16 June 2021) + +### Enhancements + +1. Improved telemetry around the availability of `pip` for installation of Jupyter dependencies. + ([#15937](https://github.com/Microsoft/vscode-python/issues/15937)) +1. Move the Jupyter extension from being a hard dependency to an optional one, and display an informational prompt if Jupyter commands try to be executed from the Start Page. + ([#16102](https://github.com/Microsoft/vscode-python/issues/16102)) +1. Add an `enumDescriptions` key under the `python.languageServer` setting to describe all language server options. + ([#16141](https://github.com/Microsoft/vscode-python/issues/16141)) +1. Ensure users upgrade to v0.2.0 of the torch-tb-profiler TensorBoard plugin to access jump-to-source functionality. + ([#16330](https://github.com/Microsoft/vscode-python/issues/16330)) +1. Added `python.defaultInterpreterPath` setting at workspace level when in `pythonDeprecatePythonPath` experiment. + ([#16485](https://github.com/Microsoft/vscode-python/issues/16485)) +1. Added default Interpreter path entry at the bottom of the interpreter list. + ([#16485](https://github.com/Microsoft/vscode-python/issues/16485)) +1. Remove execution isolation script used to run tools. + ([#16485](https://github.com/Microsoft/vscode-python/issues/16485)) +1. Show `python.pythonPath` deprecation prompt when in `pythonDeprecatePythonPath` experiment. + ([#16485](https://github.com/Microsoft/vscode-python/issues/16485)) +1. Do not show safety prompt before auto-selecting a workspace interpreter. + ([#16485](https://github.com/Microsoft/vscode-python/issues/16485)) +1. Assume workspace interpreters are safe to execute for discovery. + ([#16485](https://github.com/Microsoft/vscode-python/issues/16485)) + +### Fixes + +1. Fixes a bug in the bandit linter where messages weren't being propagated to the editor. + (thanks [Anthony Shaw](https://github.com/tonybaloney)) + ([#15561](https://github.com/Microsoft/vscode-python/issues/15561)) +1. Workaround existing MIME type misconfiguration on Windows preventing TensorBoard from loading when starting TensorBoard. + ([#16072](https://github.com/Microsoft/vscode-python/issues/16072)) +1. Changed the version of npm to version 6 instead of 7 in the lockfile. + ([#16208](https://github.com/Microsoft/vscode-python/issues/16208)) +1. Ensure selected interpreter doesn't change when the extension is starting up and in experiment. + ([#16291](https://github.com/Microsoft/vscode-python/issues/16291)) +1. Fix issue with sys.prefix when getting environment details. + ([#16355](https://github.com/Microsoft/vscode-python/issues/16355)) +1. Activate the extension when selecting the command `Clear Internal Extension Cache (python.clearPersistentStorage)`. + ([#16397](https://github.com/Microsoft/vscode-python/issues/16397)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.5.2 (14 May 2021) + +### Fixes + +1. Ensure Pylance is used with Python 2 if explicitly chosen + ([#16246](https://github.com/microsoft/vscode-python/issues/16246)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.5.1 (13 May 2021) + +### Fixes + +1. Allow Pylance to be used with Python 2 if explicitly chosen + ([#16204](https://github.com/microsoft/vscode-python/issues/16204)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.5.0 (10 May 2021) + +### Enhancements + +1. In an integrated TensorBoard session, if the jump to source request is for a file that does not exist on disk, allow the user to manually specify the file using the system file picker. + ([#15695](https://github.com/Microsoft/vscode-python/issues/15695)) +1. Allow running tests for all files within directories from test explorer. + (thanks [Vladimir Kotikov](https://github.com/vladimir-kotikov)) + ([#15862](https://github.com/Microsoft/vscode-python/issues/15862)) +1. Reveal selection in editor after jump to source command. (thanks [Wenlu Wang](https://github.com/Kingwl)) + ([#15924](https://github.com/Microsoft/vscode-python/issues/15924)) +1. Add support for debugger code reloading. + ([#16029](https://github.com/Microsoft/vscode-python/issues/16029)) +1. Add Python: Refresh TensorBoard command, keybinding and editor title button to reload TensorBoard (equivalent to browser refresh). + ([#16053](https://github.com/Microsoft/vscode-python/issues/16053)) +1. Automatically indent following `match` and `case` statements. (thanks [Marc Mueller](https://github.com/cdce8p)) + ([#16104](https://github.com/Microsoft/vscode-python/issues/16104)) +1. Bundle Pylance with the extension as an optional dependency. + ([#16116](https://github.com/Microsoft/vscode-python/issues/16116)) +1. Add a "Default" language server option, which dynamically chooses which language server to use. + ([#16157](https://github.com/Microsoft/vscode-python/issues/16157)) + +### Fixes + +1. Stop `unittest.TestCase` appearing as a test suite in the test explorer tree. + (thanks [Bob](https://github.com/bobwalker99)). + ([#15681](https://github.com/Microsoft/vscode-python/issues/15681)) +1. Support `~` in WORKON_HOME and venvPath setting when in discovery experiment. + ([#15788](https://github.com/Microsoft/vscode-python/issues/15788)) +1. Fix TensorBoard integration in Remote-SSH by auto-configuring port forwards. + ([#15807](https://github.com/Microsoft/vscode-python/issues/15807)) +1. Ensure venvPath and venvFolders setting can only be set at User or Remote settings. + ([#15947](https://github.com/Microsoft/vscode-python/issues/15947)) +1. Added compatability with pypy3.7 interpreter. + (thanks [Oliver Margetts](https://github.com/olliemath)) + ([#15968](https://github.com/Microsoft/vscode-python/issues/15968)) +1. Revert linter installation prompt removal. + ([#16027](https://github.com/Microsoft/vscode-python/issues/16027)) +1. Ensure that `dataclasses` is installed when using Jedi LSP. + ([#16119](https://github.com/Microsoft/vscode-python/issues/16119)) + +### Code Health + +1. Log the failures when checking whether certain modules are installed or getting their version information. + ([#15837](https://github.com/Microsoft/vscode-python/issues/15837)) +1. Better logging (telemetry) when installation of Python packages fail. + ([#15933](https://github.com/Microsoft/vscode-python/issues/15933)) +1. Ensure npm packave `canvas` is setup as an optional dependency. + ([#16127](https://github.com/Microsoft/vscode-python/issues/16127)) +1. Add ability for Jupyter extension to pass addtional installer arguments. + ([#16131](https://github.com/Microsoft/vscode-python/issues/16131)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.4.0 (19 April 2021) + +### Enhancements + +1. Add new command to report an Issue using the vscode-python template. + ([#1119](https://github.com/microsoft/vscode-python/issues/1119)) +1. Highlight `.pypirc`, `.pep8`, and `.pylintrc` as ini-files. (thanks [Jan Pilzer](https://github.com/Hirse)) + ([#11250](https://github.com/Microsoft/vscode-python/issues/11250)) +1. Added `python.linting.cwd` to change the working directory of the linters. (thanks [Matthew Shirley](https://github.com/matthewshirley)) + ([#15170](https://github.com/Microsoft/vscode-python/issues/15170)) +1. Remove prompt to install a linter when none are available. + ([#15465](https://github.com/Microsoft/vscode-python/issues/15465)) +1. Add jump to source integration with the PyTorch profiler TensorBoard plugin during TensorBoard sessions. + ([#15641](https://github.com/Microsoft/vscode-python/issues/15641)) +1. Drop prompt being displayed on first extension launch with a tip or a survey. + ([#15647](https://github.com/Microsoft/vscode-python/issues/15647)) +1. Use the updated logic for normalizing code sent to REPL as the default behavior. + ([#15649](https://github.com/Microsoft/vscode-python/issues/15649)) +1. Open TensorBoard webview panel in the active viewgroup on the first launch or the last viewgroup that it was moved to. + ([#15708](https://github.com/Microsoft/vscode-python/issues/15708)) +1. Support discovering Poetry virtual environments when in discovery experiment. + ([#15765](https://github.com/Microsoft/vscode-python/issues/15765)) +1. Install dev tools using Poetry when the poetry environment related to current folder is selected when in discovery experiment. + ([#15786](https://github.com/Microsoft/vscode-python/issues/15786)) +1. Add a refresh icon next to interpreter list. + ([#15868](https://github.com/Microsoft/vscode-python/issues/15868)) +1. Added command `Python: Clear internal extension cache` to clear extension related cache. + ([#15883](https://github.com/Microsoft/vscode-python/issues/15883)) + +### Fixes + +1. Fix `python.poetryPath` setting for installer on Windows. + ([#9672](https://github.com/Microsoft/vscode-python/issues/9672)) +1. Prevent mypy errors for other files showing in current file. + (thanks [Steve Dignam](https://github.com/sbdchd)) + ([#10190](https://github.com/Microsoft/vscode-python/issues/10190)) +1. Update pytest results when debugging. (thanks [djplt](https://github.com/djplt)) + ([#15353](https://github.com/Microsoft/vscode-python/issues/15353)) +1. Ensure release level is set when using new environment discovery component. + ([#15462](https://github.com/Microsoft/vscode-python/issues/15462)) +1. Ensure right environment is activated in the terminal when installing Python packages. + ([#15503](https://github.com/Microsoft/vscode-python/issues/15503)) +1. Update nosetest results when debugging. (thanks [djplt](https://github.com/djplt)) + ([#15642](https://github.com/Microsoft/vscode-python/issues/15642)) +1. Ensure any stray jedi process is terminated on language server dispose. + ([#15644](https://github.com/Microsoft/vscode-python/issues/15644)) +1. Fix README image indent for VSCode extension page. (thanks [Johnson](https://github.com/j3soon/)) + ([#15662](https://github.com/Microsoft/vscode-python/issues/15662)) +1. Run `conda update` and not `conda install` when installing a compatible version of the `tensorboard` package. + ([#15778](https://github.com/Microsoft/vscode-python/issues/15778)) +1. Temporarily fix support for folders in interpreter path setting. + ([#15782](https://github.com/Microsoft/vscode-python/issues/15782)) +1. In completions.py: jedi.api.names has been deprecated, switch to new syntax. + (thanks [moselhy](https://github.com/moselhy)). + ([#15791](https://github.com/Microsoft/vscode-python/issues/15791)) +1. Fixes activation of prefixed conda environments. + ([#15823](https://github.com/Microsoft/vscode-python/issues/15823)) + +### Code Health + +1. Deprecating on-type line formatter since it isn't used in newer Language servers. + ([#15709](https://github.com/Microsoft/vscode-python/issues/15709)) +1. Removing old way of feature deprecation where we showed notification for each feature we deprecated. + ([#15714](https://github.com/Microsoft/vscode-python/issues/15714)) +1. Remove unused code from extension. + ([#15717](https://github.com/Microsoft/vscode-python/issues/15717)) +1. Add telemetry for identifying torch.profiler users. + ([#15825](https://github.com/Microsoft/vscode-python/issues/15825)) +1. Update notebook code to not use deprecated .cells function on NotebookDocument. + ([#15885](https://github.com/Microsoft/vscode-python/issues/15885)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.3.1 (23 March 2021) + +### Fixes + +1. Fix link to create a new Jupyter notebook in Python start page. + ([#15621](https://github.com/Microsoft/vscode-python/issues/15621)) +1. Upgrade to latest `jedi-language-server` and use it for python >= 3.6. Use `jedi<0.18` for python 2.7 and <=3.5. + ([#15724](https://github.com/Microsoft/vscode-python/issues/15724)) +1. Check if Python executable file exists instead of launching the Python process. + ([#15725](https://github.com/Microsoft/vscode-python/issues/15725)) +1. Fix for Go to definition needs to be pressed twice. + (thanks [djplt](https://github.com/djplt)) + ([#15727](https://github.com/Microsoft/vscode-python/issues/15727)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.3.0 (16 March 2021) + +### Enhancements + +1. Activate the extension when the following files are found: `Pipfile`, `setup.py`, `requirements.txt`, `manage.py`, `app.py` + (thanks [Dhaval Soneji](https://github.com/soneji)) + ([#4765](https://github.com/Microsoft/vscode-python/issues/4765)) +1. Add optional user-level `python.tensorBoard.logDirectory` setting. When starting a TensorBoard session, use this setting if it is present instead of prompting the user to select a log directory. + ([#15476](https://github.com/Microsoft/vscode-python/issues/15476)) + +### Fixes + +1. Fix nosetests to run tests only once. (thanks [djplt](https://github.com/djplt)) + ([#6043](https://github.com/Microsoft/vscode-python/issues/6043)) +1. Make on-enter behaviour after `raise` much more like that of `return`, fixing + handling in the case of pressing enter to wrap the parentheses of an exception + call. + (thanks [PeterJCLaw](https://github.com/PeterJCLaw)) + ([#10583](https://github.com/Microsoft/vscode-python/issues/10583)) +1. Add configuration debugpyPath. (thanks [djplt](https://github.com/djplt)) + ([#14631](https://github.com/Microsoft/vscode-python/issues/14631)) +1. Fix Mypy linter pointing to wrong column number (off by one). + (thanks [anttipessa](https://github.com/anttipessa/), [haalto](https://github.com/haalto/), [JeonCD](https://github.com/JeonCD/) and [junskU](https://github.com/junskU)) + ([#14978](https://github.com/Microsoft/vscode-python/issues/14978)) +1. Show each python.org install only once on Mac when in discovery experiment. + ([#15302](https://github.com/Microsoft/vscode-python/issues/15302)) +1. All relative interpreter path reported start with `~` when in discovery experiment. + ([#15312](https://github.com/Microsoft/vscode-python/issues/15312)) +1. Remove FLASK_DEBUG from flask debug configuration to allow reload. + ([#15373](https://github.com/Microsoft/vscode-python/issues/15373)) +1. Install using pipenv only if the selected environment is pipenv which is related to workspace folder, when in discovery experiment. + ([#15489](https://github.com/Microsoft/vscode-python/issues/15489)) +1. Fixes issue with detecting new installations of Windows Store python. + ([#15541](https://github.com/Microsoft/vscode-python/issues/15541)) +1. Add `cached-property` package to bundled python packages. This is needed by `jedi-language-server` running on `python 3.6` and `python 3.7`. + ([#15566](https://github.com/Microsoft/vscode-python/issues/15566)) +1. Remove limit on workspace symbols when using Jedi language server. + ([#15576](https://github.com/Microsoft/vscode-python/issues/15576)) +1. Use shorter paths for python interpreter when possible. + ([#15580](https://github.com/Microsoft/vscode-python/issues/15580)) +1. Ensure that jedi language server uses jedi shipped with the extension. + ([#15586](https://github.com/Microsoft/vscode-python/issues/15586)) +1. Updates to Proposed API, and fix the failure in VS Code Insider tests. + ([#15638](https://github.com/Microsoft/vscode-python/issues/15638)) + +### Code Health + +1. Add support for "Trusted Workspaces". + + "Trusted Workspaces" is an upcoming feature in VS Code. (See: + https://github.com/microsoft/vscode/issues/106488.) For now you need + the following for the experience: + + - the latest VS Code Insiders + - add `"workspace.trustEnabled": true` to your user settings.json + + At that point, when the Python extension would normally activate, VS Code + will prompt you about whether or not the current workspace is trusted. + If not then the extension will be disabled (but only for that workspace). + As soon as the workspace is marked as trusted, the extension will + activate. + ([#15525](https://github.com/Microsoft/vscode-python/issues/15525)) + +1. Updates to the VSCode Notebook API. + ([#15567](https://github.com/Microsoft/vscode-python/issues/15567)) +1. Fix failing smoke tests on CI. + ([#15573](https://github.com/Microsoft/vscode-python/issues/15573)) +1. Update VS Code engine to 1.54.0 + ([#15604](https://github.com/Microsoft/vscode-python/issues/15604)) +1. Use `onReady` method available on language client to ensure language server is ready. + ([#15612](https://github.com/Microsoft/vscode-python/issues/15612)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.2.4 (9 March 2021) + +### Fixes + +1. Update to latest VSCode Notebook API. + ([#15415](https://github.com/Microsoft/vscode-python/issues/15415)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.2.3 (8 March 2021) + +### Fixes + +1. Add event handlers to stream error events to prevent process from exiting due to errors in process stdout & stderr streams. + ([#15395](https://github.com/Microsoft/vscode-python/issues/15395)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [jedi-language-server](https://pypi.org/project/jedi-language-server/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.2.2 (5 March 2021) + +### Fixes + +1. Fixes issue with Jedi Language Server telemetry. + ([#15419](https://github.com/microsoft/vscode-python/issues/15419)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.2.1 (19 February 2021) + +### Fixes + +1. Fix for missing pyenv virtual environments from selectable environments. + ([#15439](https://github.com/Microsoft/vscode-python/issues/15439)) +1. Register Jedi regardless of what language server is configured. + ([#15452](https://github.com/Microsoft/vscode-python/issues/15452)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.2.0 (17 February 2021) + +### Enhancements + +1. Use Language Server Protocol to work with Jedi. + ([#11995](https://github.com/Microsoft/vscode-python/issues/11995)) + +### Fixes + +1. Don't suggest insiders program nor show start page when in Codespaces. + ([#14833](https://github.com/Microsoft/vscode-python/issues/14833)) +1. Fix description of `Pyramid` debug config. + (thanks [vvijayalakshmi21](https://github.com/vvijayalakshmi21/)) + ([#5479](https://github.com/Microsoft/vscode-python/issues/5479)) +1. Refactored the Enable Linting command to provide the user with a choice of "Enable" or "Disable" linting to make it more intuitive. (thanks [henryboisdequin](https://github.com/henryboisdequin)) + ([#8800](https://github.com/Microsoft/vscode-python/issues/8800)) +1. Fix marketplace links in popups opening a non-browser VS Code instance in Codespaces. + ([#14264](https://github.com/Microsoft/vscode-python/issues/14264)) +1. Fixed the error command suggested when attempting to use "debug tests" configuration + (Thanks [Shahzaib paracha](https://github.com/ShahzaibParacha)) + ([#14729](https://github.com/Microsoft/vscode-python/issues/14729)) +1. Single test run fails sometimes if there is an error in unrelated file imported during discovery. + (thanks [Szymon Janota](https://github.com/sjanota/)) + ([#15147](https://github.com/Microsoft/vscode-python/issues/15147)) +1. Re-enable localization on the start page. It was accidentally + disabled in October when the Jupyter extension was split out. + ([#15232](https://github.com/Microsoft/vscode-python/issues/15232)) +1. Ensure target environment is activated in the terminal when running install scripts. + ([#15285](https://github.com/Microsoft/vscode-python/issues/15285)) +1. Allow support for using notebook APIs in the VS code stable build. + ([#15364](https://github.com/Microsoft/vscode-python/issues/15364)) + +### Code Health + +1. Raised the minimum required VS Code version to 1.51. + ([#15237](https://github.com/Microsoft/vscode-python/issues/15237)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2021.1.0 (21 January 2021) + +### Enhancements + +1. Remove code snippets (you can copy the + [old snippets](https://github.com/microsoft/vscode-python/blob/2020.12.424452561/snippets/python.json) + and use them as + [your own snippets](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_create-your-own-snippets)). + ([#14781](https://github.com/Microsoft/vscode-python/issues/14781)) +1. Add PYTHONPATH to the language server settings response. + ([#15106](https://github.com/Microsoft/vscode-python/issues/15106)) +1. Integration with the bandit linter will highlight the variable, function or method for an issue instead of the entire line. + Requires latest version of the bandit package to be installed. + (thanks [Anthony Shaw](https://github.com/tonybaloney)) + ([#15003](https://github.com/Microsoft/vscode-python/issues/15003)) +1. Translated some more of the Python Extension messages in Simplified Chinese. + (thanks [Shinoyasan](https://github.com/shinoyasan/)) + ([#15079](https://github.com/Microsoft/vscode-python/issues/15079)) +1. Update Simplified Chinese translation. + (thanks [Fiftysixtimes7](https://github.com/FiftysixTimes7)) + ([#14997](https://github.com/Microsoft/vscode-python/issues/14997)) + +### Fixes + +1. Fix environment variables not refreshing on env file edits. + ([#3805](https://github.com/Microsoft/vscode-python/issues/3805)) +1. fix npm audit[high]: [Remote Code Execution](npmjs.com/advisories/1548) + ([#14640](https://github.com/Microsoft/vscode-python/issues/14640)) +1. Ignore false positives when scraping environment variables. + ([#14812](https://github.com/Microsoft/vscode-python/issues/14812)) +1. Fix unittest discovery when using VS Code Insiders by using Inversify's `skipBaseClassChecks` option. + ([#14962](https://github.com/Microsoft/vscode-python/issues/14962)) +1. Make filtering in findInterpretersInDir() faster. + ([#14983](https://github.com/Microsoft/vscode-python/issues/14983)) +1. Remove the Buffer() is deprecated warning from Developer tools. ([#15045](https://github.com/microsoft/vscode-python/issues/15045)) + ([#15045](https://github.com/Microsoft/vscode-python/issues/15045)) +1. Add support for pytest 6 options. + ([#15094](https://github.com/Microsoft/vscode-python/issues/15094)) + +### Code Health + +1. Update to Node 12.20.0. + ([#15046](https://github.com/Microsoft/vscode-python/issues/15046)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.12.2 (15 December 2020) + +### Fixes + +1. Only activate discovery component when in experiment. + ([#14977](https://github.com/Microsoft/vscode-python/issues/14977)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.12.1 (15 December 2020) + +### Fixes + +1. Fix for extension loading issue in the latest release. + ([#14977](https://github.com/Microsoft/vscode-python/issues/14977)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.12.0 (14 December 2020) + +### Enhancements + +1. FastAPI debugger feature. + (thanks [Marcelo Trylesinski](https://github.com/kludex/)!) + ([#14247](https://github.com/Microsoft/vscode-python/issues/14247)) +1. Put linter prompt behind an experiment flag. + ([#14760](https://github.com/Microsoft/vscode-python/issues/14760)) +1. Add Python: Launch TensorBoard command behind an experiment. + ([#14806](https://github.com/Microsoft/vscode-python/issues/14806)) +1. Detect tfevent files in workspace and prompt to launch native TensorBoard session. + ([#14807](https://github.com/Microsoft/vscode-python/issues/14807)) +1. Use default color for "Select Python interpreter" on the status bar. + (thanks [Daniel Rodriguez](https://github.com/danielfrg)!) + ([#14859](https://github.com/Microsoft/vscode-python/issues/14859)) +1. Experiment to use the new environment discovery module. + ([#14868](https://github.com/Microsoft/vscode-python/issues/14868)) +1. Add experimentation API support for Pylance. + ([#14895](https://github.com/Microsoft/vscode-python/issues/14895)) + +### Fixes + +1. Format `.pyi` files correctly when using Black. + (thanks [Steve Dignam](https://github.com/sbdchd)!) + ([#13341](https://github.com/Microsoft/vscode-python/issues/13341)) +1. Add `node-loader` to support `webpack` for `fsevents` package. + ([#14664](https://github.com/Microsoft/vscode-python/issues/14664)) +1. Don't show play icon in diff editor. + (thanks [David Sanders](https://github.com/dsanders11)!) + ([#14800](https://github.com/Microsoft/vscode-python/issues/14800)) +1. Do not show "You need to select a Python interpreter before you start debugging" when "python" in debug configuration is invalid. + ([#14814](https://github.com/Microsoft/vscode-python/issues/14814)) +1. Fix custom language server message handlers being registered too late in startup. + ([#14893](https://github.com/Microsoft/vscode-python/issues/14893)) + +### Code Health + +1. Modified the errors generated when `launch.json` is not properly configured to be more specific about which fields are missing. + (thanks [Shahzaib Paracha](https://github.com/ShahzaibP)!) + ([#14739](https://github.com/Microsoft/vscode-python/issues/14739)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.11.1 (17 November 2020) + +### Enhancements + +1. Replaced "pythonPath" debug configuration property with "python". + ([#12462](https://github.com/Microsoft/vscode-python/issues/12462)) + +### Fixes + +1. Fix for Process Id Picker no longer showing up + ([#14678](https://github.com/Microsoft/vscode-python/issues/14678))) +1. Fix workspace symbol searching always returning empty. + ([#14727](https://github.com/Microsoft/vscode-python/issues/14727)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.11.0 (11 November 2020) + +### Enhancements + +1. Update shipped debugger wheels to python 3.8. + ([#14614](https://github.com/Microsoft/vscode-python/issues/14614)) + +### Fixes + +1. Update the logic for parsing and sending selected code to the REPL. + ([#14048](https://github.com/Microsoft/vscode-python/issues/14048)) +1. Fix "TypeError: message must be set" error when debugging with `pytest`. + ([#14067](https://github.com/Microsoft/vscode-python/issues/14067)) +1. When sending code to the REPL, read input from `sys.stdin` instead of passing it as an argument. + ([#14471](https://github.com/Microsoft/vscode-python/issues/14471)) + +### Code Health + +1. Code for Jupyter Notebooks support has been refactored into the Jupyter extension, which is now a dependency for the Python extension + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.10.0 (27 October 2020) + +### Enhancements + +1. `debugpy` updated to latest stable version. +1. Make data viewer openable from the variables window context menu while debugging. + ([#14406](https://github.com/Microsoft/vscode-python/issues/14406)) +1. Do not opt users out of the insiders program if they have a stable version installed. + ([#14090](https://github.com/Microsoft/vscode-python/issues/14090)) + +### Fixes + +1. Make sure not to set `__file__` unless necessary as this can mess up some modules (like multiprocessing). + ([#12530](https://github.com/Microsoft/vscode-python/issues/12530)) +1. Fix isolate script to only remove current working directory. + ([#13942](https://github.com/Microsoft/vscode-python/issues/13942)) +1. Make sure server name and kernel name show up when connecting. + ([#13955](https://github.com/Microsoft/vscode-python/issues/13955)) +1. Have Custom Editors load on editor show unless autostart is disabled. + ([#14016](https://github.com/Microsoft/vscode-python/issues/14016)) +1. For exporting, first check the notebook or interactive window interpreter before the jupyter selected interpreter. + ([#14143](https://github.com/Microsoft/vscode-python/issues/14143)) +1. Fix interactive debugging starting (trimQuotes error). + ([#14212](https://github.com/Microsoft/vscode-python/issues/14212)) +1. Use the kernel defined in the metadata of Notebook instead of using the default workspace interpreter. + ([#14213](https://github.com/Microsoft/vscode-python/issues/14213)) +1. Fix latex output not showing up without a 'display' call. + ([#14216](https://github.com/Microsoft/vscode-python/issues/14216)) +1. Fix markdown cell marker when exporting a notebook to a Python script. + ([#14359](https://github.com/Microsoft/vscode-python/issues/14359)) + +### Code Health + +1. Add Windows unit tests to the PR validation pipeline. + ([#14013](https://github.com/Microsoft/vscode-python/issues/14013)) +1. Functional test failures related to kernel ports overlapping. + ([#14290](https://github.com/Microsoft/vscode-python/issues/14290)) +1. Change message from `IPython kernel` to `Jupyter kernel`. + ([#14309](https://github.com/Microsoft/vscode-python/issues/14309)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.9.2 (6 October 2020) + +### Fixes + +1. Support nbconvert version 6+ for exporting notebooks to python code. + ([#14169](https://github.com/Microsoft/vscode-python/issues/14169)) +1. Do not escape output in the actual ipynb file. + ([#14182](https://github.com/Microsoft/vscode-python/issues/14182)) +1. Fix exporting from the interactive window. + ([#14210](https://github.com/Microsoft/vscode-python/issues/14210)) +1. Fix for CVE-2020-16977 + ([CVE-2020-16977](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2020-16977)) +1. Fix for CVE-2020-17163 + ([CVE-2020-17163](https://msrc.microsoft.com/update-guide/vulnerability/CVE-2020-17163)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.9.1 (29 September 2020) + +### Fixes + +1. Fix IPyKernel install issue with windows paths. + ([#13493](https://github.com/microsoft/vscode-python/issues/13493)) +1. Fix escaping of output to encode HTML chars correctly. + ([#5678](https://github.com/Microsoft/vscode-python/issues/5678)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.9.0 (23 September 2020) + +### Enhancements + +1. Docstrings are added to `class` and `def` snippets (thanks [alannt777](https://github.com/alannt777/)). + ([#5578](https://github.com/Microsoft/vscode-python/issues/5578)) +1. Upgraded isort to `5.3.2`. + ([#12932](https://github.com/Microsoft/vscode-python/issues/12932)) +1. Remove default "--no-reload" from debug configurations. + (thanks [ian910297](https://github.com/ian910297)) + ([#13061](https://github.com/Microsoft/vscode-python/issues/13061)) +1. Update API to expose events for cell excecution and kernel restart. + ([#13306](https://github.com/Microsoft/vscode-python/issues/13306)) +1. Show a general warning prompt pointing to the upgrade guide when users attempt to run isort5 using deprecated settings. + ([#13716](https://github.com/Microsoft/vscode-python/issues/13716)) +1. Upgrade isort to `5.5.2`. + ([#13831](https://github.com/Microsoft/vscode-python/issues/13831)) +1. Enable custom editor support in stable VS code at 20%. + ([#13890](https://github.com/Microsoft/vscode-python/issues/13890)) +1. Upgraded to isort `5.5.3`. + ([#14027](https://github.com/Microsoft/vscode-python/issues/14027)) + +### Fixes + +1. Fixed the output being trimmed. Tables that start with empty space will now display correctly. + ([#10270](https://github.com/Microsoft/vscode-python/issues/10270)) +1. #11729 + Prevent test discovery from picking up stdout from low level file descriptors. + (thanks [Ryo Miyajima](https://github.com/sergeant-wizard)) + ([#11729](https://github.com/Microsoft/vscode-python/issues/11729)) +1. Fix opening new blank notebooks when using the VS code custom editor API. + ([#12245](https://github.com/Microsoft/vscode-python/issues/12245)) +1. Support starting kernels with the same directory as the notebook. + ([#12760](https://github.com/Microsoft/vscode-python/issues/12760)) +1. Fixed `Sort imports` command with setuptools version `49.2`. + ([#12949](https://github.com/Microsoft/vscode-python/issues/12949)) +1. Do not fail interpreter discovery if accessing Windows registry fails. + ([#12962](https://github.com/Microsoft/vscode-python/issues/12962)) +1. Show error output from nbconvert when exporting a notebook fails. + ([#13229](https://github.com/Microsoft/vscode-python/issues/13229)) +1. Prevent daemon from trying to prewarm an execution service. + ([#13258](https://github.com/Microsoft/vscode-python/issues/13258)) +1. Respect stop on error setting for executing cells in native notebook. + ([#13338](https://github.com/Microsoft/vscode-python/issues/13338)) +1. Native notebook launch doesn't hang if the kernel does not start, and notifies the user of the failure. Also does not show the first cell as executing until the kernel is actually started and connected. + ([#13409](https://github.com/Microsoft/vscode-python/issues/13409)) +1. Fix path to isolated script on Windows shell_exec. + ([#13493](https://github.com/Microsoft/vscode-python/issues/13493)) +1. Updating other cells with display.update does not work in native notebooks. + ([#13509](https://github.com/Microsoft/vscode-python/issues/13509)) +1. Fix for notebook using the first kernel every time. It will now use the language in the notebook to determine the most appropriate kernel. + ([#13520](https://github.com/Microsoft/vscode-python/issues/13520)) +1. Shift+enter should execute current cell and select the next cell. + ([#13553](https://github.com/Microsoft/vscode-python/issues/13553)) +1. Fixes typo in export command registration. + (thanks [Anton Kosyakov](https://github.com/akosyakov/)) + ([#13612](https://github.com/Microsoft/vscode-python/issues/13612)) +1. Fix the behavior of the 'python.showStartPage' setting. + ([#13706](https://github.com/Microsoft/vscode-python/issues/13706)) +1. Correctly install ipykernel when launching from an interpreter. + ([#13956](https://github.com/Microsoft/vscode-python/issues/13956)) +1. Backup on custom editors is being ignored. + ([#13981](https://github.com/Microsoft/vscode-python/issues/13981)) + +### Code Health + +1. Fix bandit issues in vscode_datascience_helpers. + ([#13103](https://github.com/Microsoft/vscode-python/issues/13103)) +1. Cast type to `any` to get around issues with `ts-node` (`ts-node` is used by `nyc` for code coverage). + ([#13411](https://github.com/Microsoft/vscode-python/issues/13411)) +1. Drop support for Python 3.5 (it reaches end-of-life on September 13, 2020 and isort 5 does not support it). + ([#13459](https://github.com/Microsoft/vscode-python/issues/13459)) +1. Fix nightly flake test issue with timeout waiting for kernel. + ([#13501](https://github.com/Microsoft/vscode-python/issues/13501)) +1. Disable sorting tests for Python 2.7 as isort5 is not compatible with Python 2.7. + ([#13542](https://github.com/Microsoft/vscode-python/issues/13542)) +1. Fix nightly flake test current directory failing test. + ([#13605](https://github.com/Microsoft/vscode-python/issues/13605)) +1. Rename the `master` branch to `main`. + ([#13645](https://github.com/Microsoft/vscode-python/issues/13645)) +1. Remove usage of the terms "blacklist" and "whitelist". + ([#13647](https://github.com/Microsoft/vscode-python/issues/13647)) +1. Fix a test failure and warning when running test adapter tests under pytest 5. + ([#13726](https://github.com/Microsoft/vscode-python/issues/13726)) +1. Remove unused imports from data science ipython test files. + ([#13729](https://github.com/Microsoft/vscode-python/issues/13729)) +1. Fix nighly failure with beakerx. + ([#13734](https://github.com/Microsoft/vscode-python/issues/13734)) + +## 2020.8.6 (15 September 2020) + +### Fixes + +1. Workaround problem caused by https://github.com/microsoft/vscode/issues/106547 + +## 2020.8.6 (15 September 2020) + +### Fixes + +1. Workaround problem caused by https://github.com/microsoft/vscode/issues/106547 + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.8.5 (9 September 2020) + +### Fixes + +1. Experiments.json is now read from 'main' branch. + ([#13839](https://github.com/Microsoft/vscode-python/issues/13839)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.8.4 (2 September 2020) + +### Enhancements + +1. Make Jupyter Server name clickable to select Jupyter server. + ([#13656](https://github.com/Microsoft/vscode-python/issues/13656)) + +### Fixes + +1. Fixed connection to a Compute Instance from the quickpicks history options. + ([#13387](https://github.com/Microsoft/vscode-python/issues/13387)) +1. Fixed the behavior of the 'python.showStartPage' setting. + ([#13347](https://github.com/microsoft/vscode-python/issues/13347)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.8.3 (31 August 2020) + +### Enhancements + +1. Add telemetry about the install source for the extension. + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.8.2 (27 August 2020) + +### Enhancements + +1. Update "Tip" notification for new users to either show the existing tip, a link to a feedback survey or nothing. + ([#13535](https://github.com/Microsoft/vscode-python/issues/13535)) + +### Fixes + +1. Fix saving during close and auto backup to actually save a notebook. + ([#11711](https://github.com/Microsoft/vscode-python/issues/11711)) +1. Show the server display string that the user is going to connect to after selecting a compute instance and reloading the window. + ([#13551](https://github.com/Microsoft/vscode-python/issues/13551)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.8.1 (20 August 2020) + +### Fixes + +1. Update LSP to latest to resolve problems with LS settings. + ([#13511](https://github.com/microsoft/vscode-python/pull/13511)) +1. Update debugger to address terminal input issues. +1. Added tooltip to indicate status of server connection + ([#13543](https://github.com/Microsoft/vscode-python/issues/13543)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.8.0 (12 August 2020) + +### Enhancements + +1. Cell id and cell metadata are now passed as the metadata field for execute_request messages. + (thanks [stisa](https://github.com/stisa/)) + ([#13252](https://github.com/Microsoft/vscode-python/issues/13252)) +1. Add "Restart Language Server" command. + ([#3073](https://github.com/Microsoft/vscode-python/issues/3073)) +1. Support multiple and per file interactive windows. See the description for the new 'python.dataScience.interactiveWindowMode' setting. + ([#3104](https://github.com/Microsoft/vscode-python/issues/3104)) +1. Add cell editing shortcuts for python interactive cells. (thanks [@earthastronaut](https://github.com/earthastronaut/)). + ([#12414](https://github.com/Microsoft/vscode-python/issues/12414)) +1. Allow `python.dataScience.runStartupCommands` to be an array. (thanks [@janosh](https://github.com/janosh)). + ([#12827](https://github.com/Microsoft/vscode-python/issues/12827)) +1. Remember remote kernel ids when reopening notebooks. + ([#12828](https://github.com/Microsoft/vscode-python/issues/12828)) +1. The file explorer dialog now has an appropriate title when browsing for an interpreter. (thanks [ziebam](https://github.com/ziebam)). + ([#12959](https://github.com/Microsoft/vscode-python/issues/12959)) +1. Warn users if they are connecting over http without a token. + ([#12980](https://github.com/Microsoft/vscode-python/issues/12980)) +1. Allow a custom display string for remote servers as part of the remote Jupyter server provider extensibility point. + ([#12988](https://github.com/Microsoft/vscode-python/issues/12988)) +1. Update to the latest version of [`jedi`](https://github.com/davidhalter/jedi) (`0.17.2`). This adds support for Python 3.9 and fixes some bugs, but is expected to be the last release to support Python 2.7 and 3.5. (thanks [Peter Law](https://github.com/PeterJCLaw/)). + ([#13037](https://github.com/Microsoft/vscode-python/issues/13037)) +1. Expose `Pylance` setting in `python.languageServer`. If [Pylance extension](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance) is not installed, prompt user to install it. + ([#13122](https://github.com/Microsoft/vscode-python/issues/13122)) +1. Added "pythonArgs" to debugpy launch.json schema. + ([#13218](https://github.com/Microsoft/vscode-python/issues/13218)) +1. Use jupyter inspect to get signature of dynamic functions in notebook editor when language server doesn't provide enough hint. + ([#13259](https://github.com/Microsoft/vscode-python/issues/13259)) +1. The gather icon will change and get disabled while gather is executing. + ([#13177](https://github.com/microsoft/vscode-python/issues/13177)) + +### Fixes + +1. Gathered notebooks will now use the same kernelspec as the notebook it was created from. + ([#10924](https://github.com/Microsoft/vscode-python/issues/10924)) +1. Don't loop selection through all failed tests every time tests are run. + ([#11743](https://github.com/Microsoft/vscode-python/issues/11743)) +1. Some tools (like pytest) rely on the existence of `sys.path[0]`, so + deleting it in the isolation script can sometimes cause problems. The + solution is to point `sys.path[0]` to a bogus directory that we know + does not exist (assuming noone modifies the extension install dir). + ([#11875](https://github.com/Microsoft/vscode-python/issues/11875)) +1. Fix missing css for some ipywidget output. + ([#12202](https://github.com/Microsoft/vscode-python/issues/12202)) +1. Delete backing untitled ipynb notebook files as soon as the remote session has been created. + ([#12510](https://github.com/Microsoft/vscode-python/issues/12510)) +1. Make the data science variable explorer support high contrast color theme. + ([#12766](https://github.com/Microsoft/vscode-python/issues/12766)) +1. The change in PR #12795 led to one particular test suite to take longer + to run. Here we increase the timeout for that suite to get the test + passing. + ([#12833](https://github.com/Microsoft/vscode-python/issues/12833)) +1. Refactor data science filesystem usage to correctly handle files which are potentially remote. + ([#12931](https://github.com/Microsoft/vscode-python/issues/12931)) +1. Allow custom Jupyter server URI providers to have an expiration on their authorization headers. + ([#12987](https://github.com/Microsoft/vscode-python/issues/12987)) +1. If a webpanel fails to load, dispose our webviewhost so that it can try again. + ([#13106](https://github.com/Microsoft/vscode-python/issues/13106)) +1. Ensure terminal is not shown or activated if hideFromUser is set to true. + ([#13117](https://github.com/Microsoft/vscode-python/issues/13117)) +1. Do not automatically start kernel for untrusted notebooks. + ([#13124](https://github.com/Microsoft/vscode-python/issues/13124)) +1. Fix settings links to open correctly in the notebook editor. + ([#13156](https://github.com/Microsoft/vscode-python/issues/13156)) +1. "a" and "b" Jupyter shortcuts should not automatically enter edit mode. + ([#13165](https://github.com/Microsoft/vscode-python/issues/13165)) +1. Scope custom notebook keybindings to Jupyter Notebooks. + ([#13172](https://github.com/Microsoft/vscode-python/issues/13172)) +1. Rename "Count" column in variable explorer to "Size". + ([#13205](https://github.com/Microsoft/vscode-python/issues/13205)) +1. Handle `Save As` of preview Notebooks. + ([#13235](https://github.com/Microsoft/vscode-python/issues/13235)) + +### Code Health + +1. Move non-mock jupyter nightly tests to use raw kernel by default. + ([#10772](https://github.com/Microsoft/vscode-python/issues/10772)) +1. Add new services to data science IOC container and rename misspelled service. + ([#12809](https://github.com/Microsoft/vscode-python/issues/12809)) +1. Disable Notebook icons when Notebook is not trusted. + ([#12893](https://github.com/Microsoft/vscode-python/issues/12893)) +1. Removed control tower code for the start page. + ([#12919](https://github.com/Microsoft/vscode-python/issues/12919)) +1. Add better tests for trusted notebooks in the classic notebook editor. + ([#12966](https://github.com/Microsoft/vscode-python/issues/12966)) +1. Custom renderers for `png/jpeg` images in `Notebooks`. + ([#12977](https://github.com/Microsoft/vscode-python/issues/12977)) +1. Fix broken nightly variable explorer tests. + ([#13075](https://github.com/Microsoft/vscode-python/issues/13075)) +1. Fix nightly flake test failures for startup and shutdown native editor test. + ([#13171](https://github.com/Microsoft/vscode-python/issues/13171)) +1. Fix failing interactive window and variable explorer tests. + ([#13269](https://github.com/Microsoft/vscode-python/issues/13269)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [Pylance](https://github.com/microsoft/pylance-release) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.7.1 (22 July 2020) + +1. Fix language server setting when provided an invalid value, send config event more consistently. + ([#13064](https://github.com/Microsoft/vscode-python/pull/13064)) +1. Add banner for pylance, and remove old LS experiment. + ([#12817](https://github.com/microsoft/vscode-python/pull/12817)) + +## 2020.7.0 (16 July 2020) + +### Enhancements + +1. Support connecting to Jupyter hub servers. Use either the base url of the server (i.e. 'https://111.11.11.11:8000') or your user folder (i.e. 'https://111.11.11.11:8000/user/theuser). + Works with password authentication. + ([#9679](https://github.com/Microsoft/vscode-python/issues/9679)) +1. Added "argsExpansion" to debugpy launch.json schema. + ([#11678](https://github.com/Microsoft/vscode-python/issues/11678)) +1. The extension will now automatically load if a `pyproject.toml` file is present in the workspace root directory. + (thanks [Brandon White](https://github.com/BrandonLWhite)) + ([#12056](https://github.com/Microsoft/vscode-python/issues/12056)) +1. Add ability to check and update whether a notebook is trusted. + ([#12146](https://github.com/Microsoft/vscode-python/issues/12146)) +1. Support formatting of Notebook Cells when using the VS Code Insiders API for Notebooks. + ([#12195](https://github.com/Microsoft/vscode-python/issues/12195)) +1. Added exporting notebooks to HTML. + ([#12375](https://github.com/Microsoft/vscode-python/issues/12375)) +1. Change stock launch.json "attach" config to use "connect". + ([#12446](https://github.com/Microsoft/vscode-python/issues/12446)) +1. Update to the latest version of [`jedi`](https://github.com/davidhalter/jedi) (`0.17.1`). This brings completions for Django (via [`django-stubs`](https://github.com/typeddjango/django-stubs)) as well as support for Python 3.9 and various bugfixes (mostly around generic type annotations). (thanks [Peter Law](https://gitlab.com/PeterJCLaw/)) + ([#12486](https://github.com/Microsoft/vscode-python/issues/12486)) +1. Prompt users that we have deleted pythonPath from their workspace settings when in `Deprecate PythonPath` experiment. + ([#12533](https://github.com/Microsoft/vscode-python/issues/12533)) +1. Changed public API for execution to return an object and provide a callback which is called when interpreter setting changes. + ([#12596](https://github.com/Microsoft/vscode-python/issues/12596)) +1. Allow users to opt out of us checking whether their notebooks can be trusted. This setting is turned off by default and must be manually enabled. + ([#12611](https://github.com/Microsoft/vscode-python/issues/12611)) +1. Include the JUPYTER_PATH environment variable when searching the disk for kernels. + ([#12694](https://github.com/Microsoft/vscode-python/issues/12694)) +1. Added exporting to python, HTML and PDF from the interactive window. + ([#12732](https://github.com/Microsoft/vscode-python/issues/12732)) +1. Show a prompt asking user to upgrade Code runner to new version to keep using it when in Deprecate PythonPath experiment. + ([#12764](https://github.com/Microsoft/vscode-python/issues/12764)) +1. Opening notebooks in the preview Notebook editor for [Visual Studio Code Insiders](https://code.visualstudio.com/insiders/). + ([#10496](https://github.com/Microsoft/vscode-python/issues/10496)) + +### Fixes + +1. Ensure we only have a single isort process running on a single file. + ([#10579](https://github.com/Microsoft/vscode-python/issues/10579)) +1. Provided a method for external partners to participate in jupyter server URI picking/authentication. + ([#10993](https://github.com/Microsoft/vscode-python/issues/10993)) +1. Check for hideFromUser before activating current terminal. + ([#11122](https://github.com/Microsoft/vscode-python/issues/11122)) +1. In Markdown cells, turn HTML links to markdown links so that nteract renders them. + ([#11254](https://github.com/Microsoft/vscode-python/issues/11254)) +1. Prevent incorrect ipywidget display (double plots) due to synchronization issues. + ([#11281](https://github.com/Microsoft/vscode-python/issues/11281)) +1. Removed the Kernel Selection toolbar from the Interactive Window when using a local Jupyter Server. + To show it again, set the setting 'Python > Data Science > Show Kernel Selection On Interactive Window'. + ([#11347](https://github.com/Microsoft/vscode-python/issues/11347)) +1. Get Jupyter connections to work with a Windows store installed Python/Jupyter combination. + ([#11412](https://github.com/Microsoft/vscode-python/issues/11412)) +1. Disable hover intellisense in the interactive window unless the code is expanded. + ([#11459](https://github.com/Microsoft/vscode-python/issues/11459)) +1. Make layout of markdown editors much faster to open. + ([#11584](https://github.com/Microsoft/vscode-python/issues/11584)) +1. Watermark in the interactive window can appear on top of entered text. + ([#11691](https://github.com/Microsoft/vscode-python/issues/11691)) +1. Jupyter can fail to run a kernel if the user's environment contains non string values. + ([#11749](https://github.com/Microsoft/vscode-python/issues/11749)) +1. On Mac meta+Z commands are performing both cell and editor undos. + ([#11758](https://github.com/Microsoft/vscode-python/issues/11758)) +1. Paste can sometimes double paste into a notebook or interactive window editor. + ([#11796](https://github.com/Microsoft/vscode-python/issues/11796)) +1. Fix jupyter connections going down when azure-storage or other extensions with node-fetch are installed. + ([#11830](https://github.com/Microsoft/vscode-python/issues/11830)) +1. Variables should not flash when running by line. + ([#12046](https://github.com/Microsoft/vscode-python/issues/12046)) +1. Discard changes on Notebooks when the user selects 'Don't Save' on the save changes dialog. + ([#12180](https://github.com/Microsoft/vscode-python/issues/12180)) +1. Disable `Extract variable & method` commands in `Notebook Cells`. + ([#12206](https://github.com/Microsoft/vscode-python/issues/12206)) +1. Disable linting in Notebook Cells. + ([#12208](https://github.com/Microsoft/vscode-python/issues/12208)) +1. Register services before extension activates. + ([#12227](https://github.com/Microsoft/vscode-python/issues/12227)) +1. Infinite loop of asking to reload the extension when enabling custom editor. + ([#12231](https://github.com/Microsoft/vscode-python/issues/12231)) +1. Fix raw kernel autostart and remove jupyter execution from interactive base. + ([#12330](https://github.com/Microsoft/vscode-python/issues/12330)) +1. If we fail to start a raw kernel daemon then fall back to using process execution. + ([#12355](https://github.com/Microsoft/vscode-python/issues/12355)) +1. Fix the export button from the interactive window to export again. + ([#12460](https://github.com/Microsoft/vscode-python/issues/12460)) +1. Process Jupyter messages synchronously when possible. + ([#12588](https://github.com/Microsoft/vscode-python/issues/12588)) +1. Open variable explorer when opening variable explorer during debugging. + ([#12773](https://github.com/Microsoft/vscode-python/issues/12773)) +1. Use the given interpreter for launching the non-daemon python + ([#12821](https://github.com/Microsoft/vscode-python/issues/12821)) +1. Correct the color of the 'Collapse All' button in the Interactive Window + ([#12838](https://github.com/microsoft/vscode-python/issues/12838)) + +### Code Health + +1. Move all logging to the Python output channel. + ([#9837](https://github.com/Microsoft/vscode-python/issues/9837)) +1. Add a functional test that opens both the interactive window and a notebook at the same time. + ([#11445](https://github.com/Microsoft/vscode-python/issues/11445)) +1. Added setting `python.logging.level` which carries the logging level value the extension will log at. + ([#11699](https://github.com/Microsoft/vscode-python/issues/11699)) +1. Monkeypatch `console.*` calls to the logger only in CI. + ([#11896](https://github.com/Microsoft/vscode-python/issues/11896)) +1. Replace python.dataScience.ptvsdDistPath with python.dataScience.debugpyDistPath. + ([#11993](https://github.com/Microsoft/vscode-python/issues/11993)) +1. Rename ptvsd to debugpy in Telemetry. + ([#11996](https://github.com/Microsoft/vscode-python/issues/11996)) +1. Update JSDoc annotations for many of the APIs (thanks [Anthony Shaw](https://github.com/tonybaloney)) + ([#12101](https://github.com/Microsoft/vscode-python/issues/12101)) +1. Refactor `LinterId` to an enum instead of a string union. + (thanks to [Anthony Shaw](https://github.com/tonybaloney)) + ([#12116](https://github.com/Microsoft/vscode-python/issues/12116)) +1. Remove webserver used to host contents in WebViews. + ([#12140](https://github.com/Microsoft/vscode-python/issues/12140)) +1. Inline interface due to issues with custom types when using `ts-node`. + ([#12238](https://github.com/Microsoft/vscode-python/issues/12238)) +1. Fix linux nightly tests so they run and report results. Also seems to get rid of stream destroyed messages for raw kernel. + ([#12539](https://github.com/Microsoft/vscode-python/issues/12539)) +1. Log ExP experiments the user belongs to in the output panel. + ([#12656](https://github.com/Microsoft/vscode-python/issues/12656)) +1. Add more telemetry for "Select Interpreter" command. + ([#12722](https://github.com/Microsoft/vscode-python/issues/12722)) +1. Add tests for trusted notebooks. + ([#12554](https://github.com/Microsoft/vscode-python/issues/12554)) +1. Update categories in `package.json`. + ([#12844](https://github.com/Microsoft/vscode-python/issues/12844)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.6.3 (30 June 2020) + +### Fixes + +1. Correctly check for ZMQ support, previously it could allow ZMQ to be supported when zmq could not be imported. + ([#12585](https://github.com/Microsoft/vscode-python/issues/12585)) +1. Auto indentation no longer working for notebooks and interactive window. + ([#12389](https://github.com/Microsoft/vscode-python/issues/12389)) +1. Add telemetry for tracking run by line. + ([#12580](https://github.com/Microsoft/vscode-python/issues/12580)) +1. Add more telemetry to distinguish how is the start page opened. + ([#12603](https://github.com/microsoft/vscode-python/issues/12603)) +1. Stop looking for mspythonconfig.json file in subfolders. + ([#12614](https://github.com/Microsoft/vscode-python/issues/12614)) + +## 2020.6.2 (25 June 2020) + +### Fixes + +1. Fix `linting.pylintEnabled` setting check. + ([#12285](https://github.com/Microsoft/vscode-python/issues/12285)) +1. Don't modify LS settings if jediEnabled does not exist. + ([#12429](https://github.com/Microsoft/vscode-python/issues/12429)) + +## 2020.6.1 (17 June 2020) + +### Fixes + +1. Fixed issue when `python.jediEnabled` setting was not removed and `python.languageServer` setting was not updated. + ([#12429](https://github.com/Microsoft/vscode-python/issues/12429)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [ptvsd](https://pypi.org/project/ptvsd/) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.6.0 (16 June 2020) + +### Enhancements + +1. Removed `python.jediEnabled` setting in favor of `python.languageServer`. Instead of `"python.jediEnabled": true` please use `"python.languageServer": "Jedi"`. + ([#7010](https://github.com/Microsoft/vscode-python/issues/7010)) +1. Added a start page for the extension. It opens to new users or when there is a new release. It can be disabled with the setting 'Python: Show Start Page'. + ([#11057](https://github.com/Microsoft/vscode-python/issues/11057)) +1. Preliminary support using other languages for the kernel. + ([#11919](https://github.com/Microsoft/vscode-python/issues/11919)) +1. Enable the use of the custom editor for native notebooks. + ([#10744](https://github.com/Microsoft/vscode-python/issues/10744)) + +### Fixes + +1. Ensure sorting imports in a modified file picks up the proper configuration. + thanks [Peter Law](https://github.com/PeterJCLaw)) + ([#4891](https://github.com/Microsoft/vscode-python/issues/4891)) +1. Made variable explorer (from IPython Notebook interface) resizable. + ([#5382](https://github.com/Microsoft/vscode-python/issues/5382)) +1. Add junit family to pytest runner args to remove pytest warning. + ([#10673](https://github.com/Microsoft/vscode-python/issues/10673)) +1. Switch order of restart and cancel buttons in interactive window to be consistent with ordering in notebook toolbar. + ([#11091](https://github.com/Microsoft/vscode-python/issues/11091)) +1. Support opening other URI schemes besides 'file' and 'vsls'. + ([#11393](https://github.com/Microsoft/vscode-python/issues/11393)) +1. Fix issue with formatting when the first line is blank. + ([#11416](https://github.com/Microsoft/vscode-python/issues/11416)) +1. Force interactive window to always scroll long output. Don't allow scrollbars within scrollbars. + ([#11421](https://github.com/Microsoft/vscode-python/issues/11421)) +1. Hover on notebooks or interactive window seems to stutter. + ([#11422](https://github.com/Microsoft/vscode-python/issues/11422)) +1. Make shift+tab work again in the interactive window. Escaping focus from the prompt is now relegated to 'Shift+Esc'. + ([#11495](https://github.com/Microsoft/vscode-python/issues/11495)) +1. Keep import and export working with raw kernel mode. Also allow for installing dependencies if running an import before jupyter was ever launched. + ([#11501](https://github.com/Microsoft/vscode-python/issues/11501)) +1. Extra kernels that just say "Python 3 - python" are showing up in the raw kernel kernel picker. + ([#11552](https://github.com/Microsoft/vscode-python/issues/11552)) +1. Fix intermittent launch failure with raw kernels on windows. + ([#11574](https://github.com/Microsoft/vscode-python/issues/11574)) +1. Don't register a kernelspec when switching to an interpreter in raw kernel mode. + ([#11575](https://github.com/Microsoft/vscode-python/issues/11575)) +1. Keep the notebook input prompt up if you focus out of vscode. + ([#11581](https://github.com/Microsoft/vscode-python/issues/11581)) +1. Fix install message to reference run by line instead of debugging. + ([#11661](https://github.com/Microsoft/vscode-python/issues/11661)) +1. Run by line does not scroll to the line that is being run. + ([#11662](https://github.com/Microsoft/vscode-python/issues/11662)) +1. For direct kernel connection, don't replace a notebook's metadata default kernelspec with a new kernelspec on startup. + ([#11672](https://github.com/Microsoft/vscode-python/issues/11672)) +1. Fixes issue with importing `debupy` in interactive window. + ([#11686](https://github.com/Microsoft/vscode-python/issues/11686)) +1. Reopen all notebooks when rerunning the extension (including untitled ones). + ([#11711](https://github.com/Microsoft/vscode-python/issues/11711)) +1. Make sure to clear 'outputPrepend' when rerunning cells and to also only ever add it once to a cell. + (thanks [Barry Nolte](https://github.com/BarryNolte)) + ([#11726](https://github.com/Microsoft/vscode-python/issues/11726)) +1. Disable pre-warming of Kernel Daemons when user does not belong to the `LocalZMQKernel - experiment` experiment. + ([#11751](https://github.com/Microsoft/vscode-python/issues/11751)) +1. When switching to an invalid kernel (one that is registered but cannot start) in raw mode respect the launch timeout that is passed in. + ([#11752](https://github.com/Microsoft/vscode-python/issues/11752)) +1. Make `python.dataScience.textOutputLimit` apply on subsequent rerun. We were letting the 'outputPrepend' metadata persist from run to run. + (thanks [Barry Nolte](https://github.com/BarryNolte)) + ([#11777](https://github.com/Microsoft/vscode-python/issues/11777)) +1. Use `${command:python.interpreterPath}` to get selected interpreter path in `launch.json` and `tasks.json`. + ([#11789](https://github.com/Microsoft/vscode-python/issues/11789)) +1. Restarting a kernel messes up run by line. + ([#11793](https://github.com/Microsoft/vscode-python/issues/11793)) +1. Correctly show kernel status in raw kernel mode. + ([#11797](https://github.com/Microsoft/vscode-python/issues/11797)) +1. Hovering over variables in a python file can show two hover values if the interactive window is closed and reopened. + ([#11800](https://github.com/Microsoft/vscode-python/issues/11800)) +1. Make sure to use webView.cspSource for all csp sources. + ([#11855](https://github.com/Microsoft/vscode-python/issues/11855)) +1. Use command line arguments to launch our raw kernels as opposed to a connection file. The connection file seems to be causing issues in particular on windows CI machines with permissions. + ([#11883](https://github.com/Microsoft/vscode-python/issues/11883)) +1. Improve our status reporting when launching and connecting to a raw kernel. + ([#11951](https://github.com/Microsoft/vscode-python/issues/11951)) +1. Prewarm raw kernels based on raw kernel support and don't prewarm if jupyter autostart is disabled. + ([#11956](https://github.com/Microsoft/vscode-python/issues/11956)) +1. Don't flood the hard drive when typing in a large notebook file. + ([#12058](https://github.com/Microsoft/vscode-python/issues/12058)) +1. Disable run-by-line and continue buttons in run by line mode when running. + ([#12169](https://github.com/Microsoft/vscode-python/issues/12169)) +1. Disable `Sort Imports` command in `Notebook Cells`. + ([#12193](https://github.com/Microsoft/vscode-python/issues/12193)) +1. Fix debugger continue event to actually change a cell. + ([#12155](https://github.com/Microsoft/vscode-python/issues/12155)) +1. Make Jedi the Default value for the python.languageServer setting. + ([#12225](https://github.com/Microsoft/vscode-python/issues/12225)) +1. Make stop during run by line interrupt the kernel. + ([#12249](https://github.com/Microsoft/vscode-python/issues/12249)) +1. Have raw kernel respect the jupyter server disable auto start setting. + ([#12246](https://github.com/Microsoft/vscode-python/issues/12246)) + +### Code Health + +1. Use ts-loader as a tyepscript loader in webpack. + ([#9061](https://github.com/Microsoft/vscode-python/issues/9061)) +1. Fixed typo from unitest -> unittest. + (thanks [Rameez Khan](https://github.com/Rxmeez)). + ([#10919](https://github.com/Microsoft/vscode-python/issues/10919)) +1. Make functional tests more deterministic. + ([#11058](https://github.com/Microsoft/vscode-python/issues/11058)) +1. Reenable CDN unit tests. + ([#11442](https://github.com/Microsoft/vscode-python/issues/11442)) +1. Run by line for notebook cells minimal implementation. + ([#11607](https://github.com/Microsoft/vscode-python/issues/11607)) +1. Get shape and count when showing debugger variables. + ([#11657](https://github.com/Microsoft/vscode-python/issues/11657)) +1. Add more tests to verify data frames can be opened. + ([#11658](https://github.com/Microsoft/vscode-python/issues/11658)) +1. Support data tips overtop of python files that have had cells run. + ([#11659](https://github.com/Microsoft/vscode-python/issues/11659)) +1. Functional test for run by line functionality. + ([#11660](https://github.com/Microsoft/vscode-python/issues/11660)) +1. Fixed typo in a test from lanaguage -> language. + (thanks [Ashwin Ramaswami](https://github.com/epicfaace)). + ([#11775](https://github.com/Microsoft/vscode-python/issues/11775)) +1. Add bitness information to interpreter telemetry. + ([#11904](https://github.com/Microsoft/vscode-python/issues/11904)) +1. Fix failing linux debugger tests. + ([#11935](https://github.com/Microsoft/vscode-python/issues/11935)) +1. Faster unit tests on CI Pipeline. + ([#12017](https://github.com/Microsoft/vscode-python/issues/12017)) +1. Ensure we can use proposed VS Code API with `ts-node`. + ([#12025](https://github.com/Microsoft/vscode-python/issues/12025)) +1. Faster node unit tests on Azure pipeline. + ([#12027](https://github.com/Microsoft/vscode-python/issues/12027)) +1. Use [deemon](https://www.npmjs.com/package/deemon) package for background compilation with support for restarting VS Code during development. + ([#12059](https://github.com/Microsoft/vscode-python/issues/12059)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [ptvsd](https://pypi.org/project/ptvsd/) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.5.3 (10 June 2020) + +1. Update `debugpy` to use `1.0.0b11` or greater. + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [ptvsd](https://pypi.org/project/ptvsd/) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.5.2 (8 June 2020) + +### Fixes + +1. Double-check for interpreters when running diagnostics before displaying the "Python is not installed" message. + ([#11870](https://github.com/Microsoft/vscode-python/issues/11870)) +1. Ensure user cannot belong to all experiments in an experiment group. + ([#11943](https://github.com/Microsoft/vscode-python/issues/11943)) +1. Ensure extension features are started when in `Deprecate PythonPath` experiment and opening a file without any folder opened. + ([#12177](https://github.com/Microsoft/vscode-python/issues/12177)) + +### Code Health + +1. Integrate VS Code experiment framework in the extension. + ([#10790](https://github.com/Microsoft/vscode-python/issues/10790)) +1. Update telemetry on errors and exceptions to use [vscode-extension-telemetry](https://www.npmjs.com/package/vscode-extension-telemetry). + ([#11597](https://github.com/Microsoft/vscode-python/issues/11597)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [ptvsd](https://pypi.org/project/ptvsd/) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.5.1 (19 May 2020) + +### Fixes + +1. Do not execute shebang as an interpreter until user has clicked on the codelens enclosing the shebang. + ([#11687](https://github.com/Microsoft/vscode-python/issues/11687)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [ptvsd](https://pypi.org/project/ptvsd/) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.5.0 (12 May 2020) + +### Enhancements + +1. Added ability to manually enter a path to interpreter in the select interpreter dropdown. + ([#216](https://github.com/Microsoft/vscode-python/issues/216)) +1. Add status bar item with icon when installing Insiders/Stable build. + (thanks to [ErwanDL](https://github.com/ErwanDL/)) + ([#10495](https://github.com/Microsoft/vscode-python/issues/10495)) +1. Support for language servers that don't allow incremental document updates inside of notebooks and the interactive window. + ([#10818](https://github.com/Microsoft/vscode-python/issues/10818)) +1. Add telemetry for "Python is not installed" prompt. + ([#10885](https://github.com/Microsoft/vscode-python/issues/10885)) +1. Add basic liveshare support for raw kernels. + ([#10988](https://github.com/Microsoft/vscode-python/issues/10988)) +1. Do a one-off transfer of existing values for `python.pythonPath` setting to new Interpreter storage if in DeprecatePythonPath experiment. + ([#11052](https://github.com/Microsoft/vscode-python/issues/11052)) +1. Ensure the language server can query pythonPath when in the Deprecate PythonPath experiment. + ([#11083](https://github.com/Microsoft/vscode-python/issues/11083)) +1. Added prompt asking users to delete `python.pythonPath` key from their workspace settings when in Deprecate PythonPath experiment. + ([#11108](https://github.com/Microsoft/vscode-python/issues/11108)) +1. Added `getDebuggerPackagePath` extension API to get the debugger package path. + ([#11236](https://github.com/Microsoft/vscode-python/issues/11236)) +1. Expose currently selected interpreter path using API. + ([#11294](https://github.com/Microsoft/vscode-python/issues/11294)) +1. Show a prompt asking user to upgrade Code runner to new version to keep using it when in Deprecate PythonPath experiment. + ([#11327](https://github.com/Microsoft/vscode-python/issues/11327)) +1. Rename string `${config:python.pythonPath}` which is used in `launch.json` to refer to interpreter path set in settings, to `${config:python.interpreterPath}`. + ([#11446](https://github.com/Microsoft/vscode-python/issues/11446)) + +### Fixes + +1. Added 'Enable Scrolling For Cell Outputs' setting. Works together with the 'Max Output Size' setting. + ([#9801](https://github.com/Microsoft/vscode-python/issues/9801)) +1. Fix ctrl+enter on markdown cells. Now they render. + ([#10006](https://github.com/Microsoft/vscode-python/issues/10006)) +1. Cancelling the prompt to restart the kernel should not leave the toolbar buttons disabled. + ([#10356](https://github.com/Microsoft/vscode-python/issues/10356)) +1. Getting environment variables of activated environments should ignore the setting `python.terminal.activateEnvironment`. + ([#10370](https://github.com/Microsoft/vscode-python/issues/10370)) +1. Show notebook path when listing remote kernels. + ([#10521](https://github.com/Microsoft/vscode-python/issues/10521)) +1. Allow filtering on '0' for the Data Viewer. + ([#10552](https://github.com/Microsoft/vscode-python/issues/10552)) +1. Allow interrupting the kernel more than once. + ([#10587](https://github.com/Microsoft/vscode-python/issues/10587)) +1. Make error links in exception tracebacks support multiple cells in the stack and extra spaces. + ([#10708](https://github.com/Microsoft/vscode-python/issues/10708)) +1. Add channel property onto returned ZMQ messages. + ([#10785](https://github.com/Microsoft/vscode-python/issues/10785)) +1. Fix problem with shape not being computed for some types in the variable explorer. + ([#10825](https://github.com/Microsoft/vscode-python/issues/10825)) +1. Enable cell related commands when a Python file is already open. + ([#10884](https://github.com/Microsoft/vscode-python/issues/10884)) +1. Fix issue with parsing long conda environment names. + ([#10942](https://github.com/Microsoft/vscode-python/issues/10942)) +1. Hide progress indicator once `Interactive Window` has loaded. + ([#11065](https://github.com/Microsoft/vscode-python/issues/11065)) +1. Do not perform pipenv interpreter discovery on extension activation. + Fix for [CVE-2020-1171](https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2020-1171). + ([#11127](https://github.com/Microsoft/vscode-python/issues/11127)) +1. Ensure arguments are included in log messages when using decorators. + ([#11153](https://github.com/Microsoft/vscode-python/issues/11153)) +1. Fix for opening the interactive window when no workspace is open. + ([#11291](https://github.com/Microsoft/vscode-python/issues/11291)) +1. Conda environments working with raw kernels. + ([#11306](https://github.com/Microsoft/vscode-python/issues/11306)) +1. Ensure isolate script is passed as command argument when installing modules. + ([#11399](https://github.com/Microsoft/vscode-python/issues/11399)) +1. Make raw kernel launch respect launched resource environment. + ([#11451](https://github.com/Microsoft/vscode-python/issues/11451)) +1. When using a kernelspec without a fully qualified python path make sure we use the resource to get the active interpreter. + ([#11469](https://github.com/Microsoft/vscode-python/issues/11469)) +1. For direct kernel launch correctly detect if interpreter has changed since last launch. + ([#11530](https://github.com/Microsoft/vscode-python/issues/11530)) +1. Performance improvements when executing multiple cells in `Notebook` and `Interactive Window`. + ([#11576](https://github.com/Microsoft/vscode-python/issues/11576)) +1. Ensure kernel daemons are disposed correctly when closing notebooks. + ([#11579](https://github.com/Microsoft/vscode-python/issues/11579)) +1. When VS quits, make sure to save contents of notebook for next reopen. + ([#11557](https://github.com/Microsoft/vscode-python/issues/11557)) +1. Fix scrolling when clicking in the interactive window to not jump around. + ([#11554](https://github.com/Microsoft/vscode-python/issues/11554)) +1. Setting "Data Science: Run Startup Commands" is now limited to being a user setting. + Fix for [CVE-2020-1192](https://portal.msrc.microsoft.com/en-us/security-guidance/advisory/CVE-2020-1192). + +### Code Health + +1. Enable the `Self Cert` tests for Notebooks. + ([#10447](https://github.com/Microsoft/vscode-python/issues/10447)) +1. Remove deprecated telemetry and old way of searching for `Jupyter`. + ([#10809](https://github.com/Microsoft/vscode-python/issues/10809)) +1. Add telemetry for pipenv interpreter discovery. + ([#11128](https://github.com/Microsoft/vscode-python/issues/11128)) +1. Update to the latest version of [`jedi`](https://github.com/davidhalter/jedi) (`0.17`). Note that this may be the last version of Jedi to support Python 2 and Python 3.5. (#11221; thanks Peter Law) + ([#11221](https://github.com/Microsoft/vscode-python/issues/11221)) +1. Lazy load types from `jupyterlab/services` and similar `npm modules`. + ([#11297](https://github.com/Microsoft/vscode-python/issues/11297)) +1. Remove IJMPConnection implementation while maintaining tests written for it. + ([#11470](https://github.com/Microsoft/vscode-python/issues/11470)) +1. Implement an IJupyterVariables provider for the debugger. + ([#11542](https://github.com/Microsoft/vscode-python/issues/11542)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [ptvsd](https://pypi.org/project/ptvsd/) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.4.1 (27 April 2020) + +### Fixes + +1. Use node FS APIs when searching for python. This is a temporary change until VSC FS APIs are fixed. + ([#10850](https://github.com/Microsoft/vscode-python/issues/10850)) +1. Show unhandled widget messages in the jupyter output window. + ([#11239](https://github.com/Microsoft/vscode-python/issues/11239)) +1. Warn when using a version of the widget `qgrid` greater than `1.1.1` with the recommendation to downgrade to `1.1.1`. + ([#11245](https://github.com/Microsoft/vscode-python/issues/11245)) +1. Allow user modules import when discovering tests. + ([#11264](https://github.com/Microsoft/vscode-python/issues/11264)) +1. Fix issue where downloading ipywidgets from the CDN might be busy. + ([#11274](https://github.com/Microsoft/vscode-python/issues/11274)) +1. Error: Timeout is shown after running any widget more than once. + ([#11334](https://github.com/Microsoft/vscode-python/issues/11334)) +1. Change "python.dataScience.runStartupCommands" commands to be a global setting, not a workspace setting. + ([#11352](https://github.com/Microsoft/vscode-python/issues/11352)) +1. Closing the interactive window shuts down other active notebook sessions. + ([#11404](https://github.com/Microsoft/vscode-python/issues/11404)) + +### Thanks + +Thanks to the following projects which we fully rely on to provide some of +our features: + +- [debugpy](https://pypi.org/project/debugpy/) +- [isort](https://pypi.org/project/isort/) +- [jedi](https://pypi.org/project/jedi/) + and [parso](https://pypi.org/project/parso/) +- [Microsoft Python Language Server](https://github.com/microsoft/python-language-server) +- [ptvsd](https://pypi.org/project/ptvsd/) +- [exuberant ctags](http://ctags.sourceforge.net/) (user-installed) +- [rope](https://pypi.org/project/rope/) (user-installed) + +Also thanks to the various projects we provide integrations with which help +make this extension useful: + +- Debugging support: + [Django](https://pypi.org/project/Django/), + [Flask](https://pypi.org/project/Flask/), + [gevent](https://pypi.org/project/gevent/), + [Jinja](https://pypi.org/project/Jinja/), + [Pyramid](https://pypi.org/project/pyramid/), + [PySpark](https://pypi.org/project/pyspark/), + [Scrapy](https://pypi.org/project/Scrapy/), + [Watson](https://pypi.org/project/Watson/) +- Formatting: + [autopep8](https://pypi.org/project/autopep8/), + [black](https://pypi.org/project/black/), + [yapf](https://pypi.org/project/yapf/) +- Interpreter support: + [conda](https://conda.io/), + [direnv](https://direnv.net/), + [pipenv](https://pypi.org/project/pipenv/), + [pyenv](https://github.com/pyenv/pyenv), + [venv](https://docs.python.org/3/library/venv.html#module-venv), + [virtualenv](https://pypi.org/project/virtualenv/) +- Linting: + [bandit](https://pypi.org/project/bandit/), + [flake8](https://pypi.org/project/flake8/), + [mypy](https://pypi.org/project/mypy/), + [prospector](https://pypi.org/project/prospector/), + [pylint](https://pypi.org/project/pylint/), + [pydocstyle](https://pypi.org/project/pydocstyle/), + [pylama](https://pypi.org/project/pylama/) +- Testing: + [nose](https://pypi.org/project/nose/), + [pytest](https://pypi.org/project/pytest/), + [unittest](https://docs.python.org/3/library/unittest.html#module-unittest) + +And finally thanks to the [Python](https://www.python.org/) development team and +community for creating a fantastic programming language and community to be a +part of! + +## 2020.4.0 (20 April 2020) ### Enhancements @@ -33,6 +5405,20 @@ ([#11021](https://github.com/Microsoft/vscode-python/issues/11021)) 1. Hide "untrusted" interpreters from 'Select interpreter' dropdown list when in DeprecatePythonPath Experiment. ([#11046](https://github.com/Microsoft/vscode-python/issues/11046)) +1. Make spacing of icons on notebook toolbars match spacing on other VS code toolbars. + ([#10464](https://github.com/Microsoft/vscode-python/issues/10464)) +1. Make jupyter server status centered in the UI and use the same font as the rest of VS code. + ([#10465](https://github.com/Microsoft/vscode-python/issues/10465)) +1. Performa validation of interpreter only when a Notebook is opened instead of when extension activates. + ([#10893](https://github.com/Microsoft/vscode-python/issues/10893)) +1. Scrolling in cells doesn't happen on new line. + ([#10952](https://github.com/Microsoft/vscode-python/issues/10952)) +1. Ensure images in workspace folder are supported within markdown cells in a `Notebook`. + ([#11040](https://github.com/Microsoft/vscode-python/issues/11040)) +1. Make sure ipywidgets have a white background so they display in dark themes. + ([#11060](https://github.com/Microsoft/vscode-python/issues/11060)) +1. Arrowing down through cells put the cursor in the wrong spot. + ([#11094](https://github.com/Microsoft/vscode-python/issues/11094)) ### Fixes @@ -80,6 +5466,16 @@ ([#10953](https://github.com/Microsoft/vscode-python/issues/10953)) 1. Jupyter notebooks and interactive window crashing on startup. ([#11035](https://github.com/Microsoft/vscode-python/issues/11035)) +1. Fix perf problems after running the interactive window for an extended period of time. + ([#10971](https://github.com/Microsoft/vscode-python/issues/10971)) +1. Fix problem with opening a notebook in jupyter after saving in VS code. + ([#11151](https://github.com/Microsoft/vscode-python/issues/11151)) +1. Fix CTRL+Z and Z for undo on notebooks. + ([#11160](https://github.com/Microsoft/vscode-python/issues/11160)) +1. Fix saving to PDF for viewed plots. + ([#11157](https://github.com/Microsoft/vscode-python/issues/11157)) +1. Fix scrolling in a notebook whenever resizing or opening. + ([#11238](https://github.com/Microsoft/vscode-python/issues/11238)) ### Code Health @@ -1204,7 +6600,7 @@ part of! ([#8000](https://github.com/Microsoft/vscode-python/issues/8000)) 1. Prompt to open exported `Notebook` in the `Notebook Editor`. ([#8078](https://github.com/Microsoft/vscode-python/issues/8078)) -1. Add commands translation for Farsi locale. +1. Add commands translation for Persian locale. (thanks [Nikronic](https://github.com/Nikronic)) ([#8092](https://github.com/Microsoft/vscode-python/issues/8092)) 1. Enhance "select a workspace" message when selecting interpreter. @@ -1750,7 +7146,7 @@ part of! ([#7376](https://github.com/Microsoft/vscode-python/issues/7376)) 1. Refactor Azure Pipelines to use stages. ([#7431](https://github.com/Microsoft/vscode-python/issues/7431)) -1. Add unit tests to guarantee that the extension version in the master branch has the '-dev' suffix. +1. Add unit tests to guarantee that the extension version in the main branch has the '-dev' suffix. ([#7471](https://github.com/Microsoft/vscode-python/issues/7471)) 1. Add a smoke test for the `Interactive Window`. ([#7653](https://github.com/Microsoft/vscode-python/issues/7653)) @@ -3825,7 +9221,7 @@ part of! ([#3317](https://github.com/Microsoft/vscode-python/issues/3317)) 1. Add YAML file specification for CI builds ([#3350](https://github.com/Microsoft/vscode-python/issues/3350)) -1. Stop running CI tests against the `master` branch of ptvsd. +1. Stop running CI tests against the `main` branch of ptvsd. ([#3414](https://github.com/Microsoft/vscode-python/issues/3414)) 1. Be more aggressive in searching for a Python environment that can run Jupyter (make sure to cleanup any kernelspecs that are created during this process). @@ -4696,7 +10092,7 @@ nearly as feature-rich and useful as it is. ([#1703](https://github.com/Microsoft/vscode-python/issues/1703)) 1. Update debug capabilities to add support for the setting `supportTerminateDebuggee` due to an upstream update from [PTVSD](https://github.com/Microsoft/ptvsd/issues). ([#1719](https://github.com/Microsoft/vscode-python/issues/1719)) -1. Build and upload development build of the extension to the Azure blob store even if CI tests fail on the `master` branch. +1. Build and upload development build of the extension to the Azure blob store even if CI tests fail on the `main` branch. ([#1730](https://github.com/Microsoft/vscode-python/issues/1730)) 1. Changes to the script used to upload the extension to the Azure blob store. ([#1732](https://github.com/Microsoft/vscode-python/issues/1732)) @@ -4826,7 +10222,7 @@ his help on [our issue tracker](https://github.com/Microsoft/vscode-python)! ([#1216](https://github.com/Microsoft/vscode-python/issues/1216)) 1. Parallelize jobs (unit tests) on CI server. ([#1247](https://github.com/Microsoft/vscode-python/issues/1247)) -1. Run CI tests against the release version and master branch of PTVSD (experimental debugger), allowing tests to fail against the master branch of PTVSD. +1. Run CI tests against the release version and main branch of PTVSD (experimental debugger), allowing tests to fail against the main branch of PTVSD. ([#1253](https://github.com/Microsoft/vscode-python/issues/1253)) 1. Only trigger the extension for `file` and `untitled` in preparation for [Visual Studio Live Share](https://aka.ms/vsls) diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 18873b3ccf8a..f9ba8cf65f3e 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,6 +1,9 @@ -This project has adopted the [Microsoft Open Source Code of -Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct -FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) -with any additional questions or comments. +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/CODING_STANDARDS.md b/CODING_STANDARDS.md deleted file mode 100644 index f6d3a03a943d..000000000000 --- a/CODING_STANDARDS.md +++ /dev/null @@ -1,55 +0,0 @@ -## Coding guidelines for TypeScript - -- The following standards are inspired from [Coding guidelines for TypeScript](https://github.com/Microsoft/TypeScript/wiki/Coding-guidelines) (which you should follow when something is not specified in this document, although any pre-existing practices in a file being edited trump either style guide). - -### Names - -- Use `PascalCase` for type names. -- Use `I` as a prefix for interface names only when an interface is implemented by a class. -- Use `PascalCase` for enum values. -- Use `camelCase` for function names. -- Use `camelCase` for property names and local variables. -- Do not use `_` as a prefix for private properties (unless used as backing properties). -- Use whole words in names when possible. - -### Types - -- Do not export types/functions unless you need to share it across multiple components. -- Do not introduce new types/values to the global namespace. -- Shared types should be defined in `types.ts`. - Within a file, type definitions should come first. - -### null and undefined - -Use undefined. Do not use null. - -### Comments - -- Comments must end with a period. -- Use JSDoc style comments for functions, interfaces, enums, and classes. - -### Strings - -Use single quotes for strings. - -### Imports - -- Use ES6 module imports. -- Do not use bare `import *`; all imports should either explicitly pull in an object or import an entire module, otherwise you're implicitly polluting the global namespace and making it difficult to figure out from code examination where a name originates from. - -### Style - -- Use `prettier` to format `TypeScript` and `JavaScript` code. -- Use arrow functions over anonymous function expressions. -- Always surround loop and conditional bodies with curly braces. Statements on the same line are allowed to omit braces. -- Open curly braces always go on the same line as whatever necessitates them. -- Parenthesized constructs should have no surrounding whitespace. -- A single space follows commas, colons, and semicolons in those constructs. For example: - - - `for (var i = 0, n = str.length; i < 10; i++) { }` - - `if (x < 10) { }` - - `function f(x: number, y: string): void { }` - -- `else` goes on the same line from the closing curly brace. -- Use 4 spaces per indentation. -- All files must end with an empty line. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 32566fd24863..c6c0998395b2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,325 +1 @@ -# Contributing to the Python extension for Visual Studio Code - ---- - -| `release` branch | `master` branch | Nightly CI | coverage (`master` branch) | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | -| [![Build Status](https://dev.azure.com/ms/vscode-python/_apis/build/status/CI?branchName=release)](https://dev.azure.com/ms/vscode-python/_build/latest?definitionId=88&branchName=release) | [![Build Status](https://dev.azure.com/ms/vscode-python/_apis/build/status/CI?branchName=master)](https://dev.azure.com/ms/vscode-python/_build/latest?definitionId=88&branchName=master) | [![Build Status](https://dev.azure.com/ms/vscode-python/_apis/build/status/Nightly%20Build?branchName=master)](https://dev.azure.com/ms/vscode-python/_build/latest?definitionId=85&branchName=master) | [![codecov](https://codecov.io/gh/microsoft/vscode-python/branch/master/graph/badge.svg)](https://codecov.io/gh/microsoft/vscode-python) | - -[[Development build](https://pvsc.blob.core.windows.net/extension-builds/ms-python-insiders.vsix)] - ---- - -[For contributing to the [Microsoft Python Language Server](https://github.com/Microsoft/python-language-server) see its own repo; for [debugpy](https://github.com/microsoft/debugpy) see its own repo] - -## Contributing a pull request - -### Prerequisites - -1. [Node.js](https://nodejs.org/) 12.x -1. [Python](https://www.python.org/) 2.7 or later -1. Windows, macOS, or Linux -1. [Visual Studio Code](https://code.visualstudio.com/) -1. The following VS Code extensions: - - [TSLint](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-typescript-tslint-plugin) - - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - - [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) -1. Have an issue which has a "needs PR" label (feel free to indicate you would like to provide a PR for the issue so others don't work on it as well) - -### Setup - -```shell -git clone https://github.com/microsoft/vscode-python -cd vscode-python -npm ci -python3 -m venv .venv -# Activate the virtual environment as appropriate for your shell, For example, on bash it's ... -source .venv/bin/activate -# The Python code in the extension is formatted using Black. -python3 -m pip install black -# Install Python dependencies using `python3`. -# If you want to use a different interpreter then specify it in the -# CI_PYTHON_PATH environment variable. -npx gulp installPythonLibs -``` - -If you see warnings that `The engine "vscode" appears to be invalid.`, you can ignore these. - -### Incremental Build - -Run the `Compile` and `Hygiene` build Tasks from the [Run Build Task...](https://code.visualstudio.com/docs/editor/tasks) command picker (short cut `CTRL+SHIFT+B` or `⇧⌘B`). This will leave build and hygiene tasks running in the background and which will re-run as files are edited and saved. You can see the output from either task in the Terminal panel (use the selector to choose which output to look at). - -You can also compile from the command-line. For a full compile you can use: - -```shell -npx gulp prePublishNonBundle -``` - -For incremental builds you can use the following commands depending on your needs: - -```shell -npm run compile -npm run compile-webviews-watch # For data science (React Code) -``` - -Sometimes you will need to run `npm run clean` and even `rm -r out`. -This is especially true if you have added or removed files. - -### Errors and Warnings - -TypeScript errors and warnings will be displayed in the `Problems` window of Visual Studio Code. - -### Run dev build and validate your changes - -To test changes, open the `vscode-python` folder in VSCode, and select the workspace titled `vscode`. -Then, open the debug panel by clicking the `Run and Debug` icon on the sidebar, select the `Extension` -option from the top menu, and click start. A new window will launch with the title -`[Extension Development Host]`. - -### Running Unit Tests - -Note: Unit tests are those in files with extension `.unit.test.ts`. - -1. Make sure you have compiled all code (done automatically when using incremental building) -1. Ensure you have disabled breaking into 'Uncaught Exceptions' when running the Unit Tests -1. For the linters and formatters tests to pass successfully, you will need to have those corresponding Python libraries installed locally -1. Run the Tests via the `Unit Tests` launch option. - -You can also run them from the command-line (after compiling): - -```shell -npm run test:unittests # runs all unit tests -npm run test:unittests -- --grep='' -``` - -_To run only a specific test suite for unit tests:_ -Alter the `launch.json` file in the `"Debug Unit Tests"` section by setting the `grep` field: - -```js - "args": [ - "--timeout=60000", - "--grep", "" - ], -``` - -...this will only run the suite with the tests you care about during a test run (be sure to set the debugger to run the `Debug Unit Tests` launcher). - -### Running Functional Tests - -Functional tests are those in files with extension `.functional.test.ts`. -These tests are similar to system tests in scope, but are run like unit tests. - -You can run functional tests in a similar way to that for unit tests: - -- via the "Functional Tests" launch option, or -- on the command line via `npm run test:functional` - -### Running System Tests - -Note: System tests are those in files with extension `.test*.ts` but which are neither `.functional.test.ts` nor `.unit.test.ts`. - -1. Make sure you have compiled all code (done automatically when using incremental building) -1. Ensure you have disabled breaking into 'Uncaught Exceptions' when running the Unit Tests -1. For the linters and formatters tests to pass successfully, you will need to have those corresponding Python libraries installed locally by using the `./requirements.txt` and `build/test-requirements.txt` files -1. Run the tests via `npm run` or the Debugger launch options (you can "Start Without Debugging"). -1. **Note** you will be running tests under the default Python interpreter for the system. - -_Change the version of python the tests are executed with by setting the `CI_PYTHON_PATH`._ - -Tests will be executed using the system default interpreter (whatever that is for your local machine), unless you explicitly set the `CI_PYTHON_PATH` environment variable. To test against different versions of Python you _must_ use this. - -In the launch.json file, you can add the following to the appropriate configuration you want to run to easily change the interpreter used during testing: - -```js - "env":{ - "CI_PYTHON_PATH": "/absolute/path/to/interpreter/of/choice/python" - } -``` - -You can also run the tests from the command-line (after compiling): - -```shell -npm run testSingleWorkspace # will launch the VSC UI -npm run testMultiWorkspace # will launch the VSC UI -``` - -...note this will use the Python interpreter that your current shell is making use of, no need to set `CI_PYTHON_PATH` here. - -_To limit system tests to a specific suite_ - -If you are running system tests (we call them _system_ tests, others call them _integration_ or otherwise) and you wish to run a specific test suite, edit the `src/test/index.ts` file here: - -https://github.com/Microsoft/vscode-python/blob/b328ba12331ed34a267e32e77e3e4b1eff235c13/src/test/index.ts#L21 - -...and identify the test suite you want to run/debug like this: - -```ts -const grep = '[The suite name of your *test.ts file]'; // IS_CI_SERVER &&... -``` - -...and then use the `Launch Tests` debugger launcher. This will run only the suite you name in the grep. - -And be sure to escape any grep-sensitive characters in your suite name (and to remove the change from src/test/index.ts before you submit). - -### Testing Python Scripts - -The extension has a number of scripts in ./pythonFiles. Tests for these -scripts are found in ./pythonFiles/tests. To run those tests: - -- `python2.7 pythonFiles/tests/run_all.py` -- `python3 -m pythonFiles.tests` - -By default, functional tests are included. To exclude them: - -`python3 -m pythonFiles.tests --no-functional` - -To run only the functional tests: - -`python3 -m pythonFiles.tests --functional` - -### Standard Debugging - -Clone the repo into any directory, open that directory in VSCode, and use the `Extension` launch option within VSCode. - -### Debugging the Python Extension Debugger - -The easiest way to debug the Python Debugger (in our opinion) is to clone this git repo directory into [your](https://code.visualstudio.com/docs/extensions/install-extension#_your-extensions-folder) extensions directory. -From there use the `Extension + Debugger` launch option. - -### Coding Standards - -Information on our coding standards can be found [here](https://github.com/Microsoft/vscode-python/blob/master/CODING_STANDARDS.md). -We have CI tests to ensure the code committed will adhere to the above coding standards. \*You can run this locally by executing the command `npx gulp precommit` or use the `precommit` Task. - -Messages displayed to the user must be localized using/created constants from/in the [localize.ts](https://github.com/Microsoft/vscode-python/blob/master/src/client/common/utils/localize.ts) file. - -## Development process - -To effectively contribute to this extension, it helps to know how its -development process works. That way you know not only why the -project maintainers do what they do to keep this project running -smoothly, but it allows you to help out by noticing when a step is -missed or to learn in case someday you become a project maintainer as -well! - -### Helping others - -First and foremost, we try to be helpful to users of the extension. -We monitor -[Stack Overflow questions](https://stackoverflow.com/questions/tagged/visual-studio-code+python) -to see where people might need help. We also try to respond to all -issues in some way in a timely manner (typically in less than one -business day, definitely no more than a week). We also answer -questions that reach us in other ways, e.g. Twitter. - -For pull requests, we aim to review any externally contributed PR no later -than the next sprint from when it was submitted (see -[Release Cycle](#release-cycle) below for our sprint schedule). - -### Release cycle - -Planning is done as two week sprints. We start a sprint every other Wednesday. -You can look at the newest -[milestone](https://github.com/Microsoft/vscode-python/milestones) to see when -the current sprint ends. All -[P0](https://github.com/Microsoft/vscode-python/labels/P0) issues are expected -to be fixed in the current sprint, else the next release will be blocked. -[P1](https://github.com/Microsoft/vscode-python/labels/P1) issues are a -top-priority and we try to close before the next release. All other issues are -considered best-effort for that sprint. - -The extension aims to do a new release every four weeks (two sprints). A -[release plan](https://github.com/Microsoft/vscode-python/labels/release%20plan) -is created for each release to help track anything that requires a -person to do (long-term this project aims to automate as much of the -development process as possible). - -All development is actively done in the `master` branch of the -repository. This allows us to have a -[development build](#development-build) which is expected to be stable at -all times. Once we reach a release candidate, it becomes -our [release branch](https://github.com/microsoft/vscode-python/branches). -At that point only what is in the release branch will make it into the next -release. - -### Issue triaging - -#### Classifying issues - -To help actively track what stage -[issues](https://github.com/Microsoft/vscode-python/issues) -are at, various labels are used. The following label types are expected to -be set on all open issues (otherwise the issue is not considered triaged): - -1. `needs`/`triage`/`classify` -1. `feature` -1. `type` - -These labels cover what is blocking the issue from closing, what is affected by -the issue, and what kind of issue it is. (The `feature` label should be `feature-*` if the issue doesn't fit into any other `feature` label appropriately.) - -It is also very important to make the title accurate. People often write very brief, quick titles or ones that describe what they think the problem is. By updating the title to be appropriately descriptive for what _you_ think the issue is, you not only make finding older issues easier, but you also help make sure that you and the original reporter agree on what the issue is. - -#### Post-classification - -Once an issue has been appropriately classified, there are two keys ways to help out. One is to go through open issues that -have a merged fix and verify that the fix did in fact work. The other is to try to fix issues marked as `needs PR`. - -### Pull requests - -Key details that all pull requests are expected to handle should be -in the [pull request template](https://github.com/Microsoft/vscode-python/blob/master/.github/PULL_REQUEST_TEMPLATE.md). We do expect CI to be passing for a pull request before we will consider merging it. - -### Versioning - -Starting in 2018, the extension switched to -[calendar versioning](http://calver.org/) since the extension -auto-updates and thus there is no need to track its version -number for backwards-compatibility. In 2020, the extension switched to -having the the major version be the year of release, the minor version the -release count for that year, and the build number is a number that increments -for every build. -For example the first release made in 2020 is `2020.1.`. - -## Releasing - -Overall steps for releasing are covered in the -[release plan](https://github.com/Microsoft/vscode-python/labels/release%20plan) -([template](https://github.com/Microsoft/vscode-python/blob/master/.github/release_plan.md)). - -### Building a release - -To create a release _build_, follow the steps outlined in the [release plan](https://github.com/Microsoft/vscode-python/labels/release%20plan) (which has a [template](https://github.com/Microsoft/vscode-python/blob/master/.github/release_plan.md)). - -## Local Build - -Steps to build the extension on your machine once you've cloned the repo: - -```bash -> npm install -g vsce -# Perform the next steps in the vscode-python folder. -> npm ci -> python3 -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt -> python3 -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/old_ptvsd --no-cache-dir --implementation py --no-deps --upgrade 'ptvsd==4.3.2' -> python3 -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/debugpy/no_wheels --no-cache-dir --implementation py --no-deps --upgrade --pre debugpy -> python3 -m pip --disable-pip-version-check install -r build/debugger-install-requirements.txt -> python3 ./pythonFiles/install_debugpy.py -> npm run clean -> npm run package # This step takes around 10 minutes. -``` - -Resulting in a `ms-python-insiders.vsix` file in your `vscode-python` folder. - -⚠️ If you made changes to `package.json`, run `npm install` (instead of `npm ci`) to update `package-lock.json` and install dependencies all at once. - -## Development Build - -If you would like to use the latest version of the extension as committed to `master` that has passed our test suite, then you may set the `"python.insidersChannel"` setting to `"daily"` or `"weekly"` based on how often you would like the extension to check for updates. - -You may also download and install the extension manually from the following -[location](https://pvsc.blob.core.windows.net/extension-builds/ms-python-insiders.vsix). -Once you have downloaded the -[ms-python-insiders.vsix](https://pvsc.blob.core.windows.net/extension-builds/ms-python-insiders.vsix) -file, please follow the instructions on -[this page](https://code.visualstudio.com/docs/editor/extension-gallery#_install-from-a-vsix) -to install the extension. Do note that the manual install will not automatically update to newer builds unless you set the `"python.insidersChannel"` setting (it will get replaced with released versions from the Marketplace once they are newer than the version install manually). +Please see [our wiki](https://github.com/microsoft/vscode-python/wiki) on how to contribute to this project. diff --git a/PYTHON_INTERACTIVE_TROUBLESHOOTING.md b/PYTHON_INTERACTIVE_TROUBLESHOOTING.md deleted file mode 100644 index 03688ee0a986..000000000000 --- a/PYTHON_INTERACTIVE_TROUBLESHOOTING.md +++ /dev/null @@ -1,66 +0,0 @@ -# Troubleshooting Jupyter issues in the Python Interactive Window or Notebook Editor - -This document is intended to help troubleshoot problems with starting Jupyter in the Python Interactive Window or Notebook Editor. - ---- - -## Jupyter Not Starting - -This error can happen when - -- Jupyter is out of date -- Jupyter is not installed -- You picked the wrong Python environment (one that doesn't have Jupyter installed). - -### The first step is to verify you are running the Python environment that you have Jupyter installed into. - -The first time that you start the Interactive Window or the Notebook Editor VS Code will attempt to locate a Python environment that has Jupyter installed in it and can start a notebook. - -The first Python interpreter to check will be the one selected with the selection dropdown on the bottom left of the VS Code window: - -![selector](resources/PythonSelector.png) - -Once a suitable interpreter with Jupyter has been located, VS Code will continue to use that interpreter for starting up Jupyter servers. -If no interpreters are found with Jupyter installed a popup message will ask if you would like to install Jupyter into the current interpreter. - -![install Jupyter](resources/InstallJupyter.png) - -If you would like to change from using the saved Python interpreter to a new interpreter for launching Jupyter just use the "Python: Select interpreter to start Jupyter server" VS Code command to change it. - -### The second step is to check that jupyter isn't giving any errors on startup. - -Run the following command from an environment that matches the Python you selected: -`python -m jupyter notebook --version` - -If this command shows any warnings, you need to upgrade or fix the warnings to continue with this version of Python. -If this command says 'no module named jupyter', you need to install Jupyter. - -### How to install Jupyter - -You can do this in a number of different ways: - -#### Anaconda - -Anaconda is a popular Python distribution. It makes it super easy to get Jupyter up and running. - -If you're already using Anaconda, follow these steps to get Jupyter - -1. Start anaconda environment -1. Run 'conda install jupyter' -1. Restart VS Code -1. Pick the conda version of Python in the python selector - -Otherwise you can install Anaconda and pick the default options -https://www.anaconda.com/download - -#### Pip - -You can also install Jupyter using pip. - -1. python -m pip install --upgrade pip -1. python -m pip install jupyter -1. Restart VS Code -1. Pick the Python environment you did the pip install in - -For more information see -http://jupyter.org/install diff --git a/README.md b/README.md index 55b9e8e465f1..e9dd52a538cd 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,44 @@ # Python extension for Visual Studio Code -A [Visual Studio Code](https://code.visualstudio.com/) [extension](https://marketplace.visualstudio.com/VSCode) with rich support for the [Python language](https://www.python.org/) (for all [actively supported versions](https://devguide.python.org/#status-of-python-branches) of the language: 2.7, >=3.5), including features such as IntelliSense, linting, debugging, code navigation, code formatting, Jupyter notebook support, refactoring, variable explorer, test explorer, snippets, and more! +A [Visual Studio Code](https://code.visualstudio.com/) [extension](https://marketplace.visualstudio.com/VSCode) with rich support for the [Python language](https://www.python.org/) (for all [actively supported Python versions](https://devguide.python.org/versions/#supported-versions)), providing access points for extensions to seamlessly integrate and offer support for IntelliSense (Pylance), debugging (Python Debugger), formatting, linting, code navigation, refactoring, variable explorer, test explorer, environment management (**NEW** Python Environments Extension). + +## Support for [vscode.dev](https://vscode.dev/) + +The Python extension does offer [some support](https://github.com/microsoft/vscode-python/wiki/Partial-mode) when running on [vscode.dev](https://vscode.dev/) (which includes [github.dev](http://github.dev/)). This includes partial IntelliSense for open files in the editor. + + +## Installed extensions + +The Python extension will automatically install the following extensions by default to provide the best Python development experience in VS Code: + +- [Pylance](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-pylance) – performant Python language support +- [Python Debugger](https://marketplace.visualstudio.com/items?itemName=ms-python.debugpy) – seamless debug experience with debugpy +- **(NEW)** [Python Environments](https://marketplace.visualstudio.com/items?itemName=ms-python.vscode-python-envs) – dedicated environment management (see below) + +These extensions are optional dependencies, meaning the Python extension will remain fully functional if they fail to be installed. Any or all of these extensions can be [disabled](https://code.visualstudio.com/docs/editor/extension-marketplace#_disable-an-extension) or [uninstalled](https://code.visualstudio.com/docs/editor/extension-marketplace#_uninstall-an-extension) at the expense of some features. Extensions installed through the marketplace are subject to the [Marketplace Terms of Use](https://cdn.vsassets.io/v/M146_20190123.39/_content/Microsoft-Visual-Studio-Marketplace-Terms-of-Use.pdf). + +### About the Python Environments Extension + +You may now see that the **Python Environments Extension** is installed for you, but it may or may not be "enabled" in your VS Code experience. Enablement is controlled by the setting `"python.useEnvironmentsExtension": true` (or `false`). + +- If you set this setting to `true`, you will manually opt in to using the Python Environments Extension for environment management. +- If you do not have this setting specified, you may be randomly assigned to have it turned on as we roll it out until it becomes the default experience for all users. + +The Python Environments Extension is still under active development and experimentation. Its goal is to provide a dedicated view and improved workflows for creating, deleting, and switching between Python environments, as well as managing packages. If you have feedback, please let us know via [issues](https://github.com/microsoft/vscode-python/issues). + +## Extensibility + +The Python extension provides pluggable access points for extensions that extend various feature areas to further improve your Python development experience. These extensions are all optional and depend on your project configuration and preferences. + +- [Python formatters](https://code.visualstudio.com/docs/python/formatting#_choose-a-formatter) +- [Python linters](https://code.visualstudio.com/docs/python/linting#_choose-a-linter) + +If you encounter issues with any of the listed extensions, please file an issue in its corresponding repo. ## Quick start -- **Step 1.** [Install a supported version of Python on your system](https://code.visualstudio.com/docs/python/python-tutorial#_prerequisites) (note: that the system install of Python on macOS is not supported). -- **Step 2.** Install the Python extension for Visual Studio Code. +- **Step 1.** [Install a supported version of Python on your system](https://code.visualstudio.com/docs/python/python-tutorial#_prerequisites) (note: the system install of Python on macOS is not supported). +- **Step 2.** [Install the Python extension for Visual Studio Code](https://code.visualstudio.com/docs/editor/extension-gallery). - **Step 3.** Open or create a Python file and start coding! ## Set up your environment @@ -14,21 +47,25 @@ A [Visual Studio Code](https://code.visualstudio.com/) [extension](https://marke - Select your Python interpreter by clicking on the status bar - + - Configure the debugger through the Debug Activity Bar - + - Configure tests by running the `Configure Tests` command - + ## Jupyter Notebook quick start +The Python extension offers support for Jupyter notebooks via the [Jupyter extension](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter) to provide you a great Python notebook experience in VS Code. + +- Install the [Jupyter extension](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter). + - Open or create a Jupyter Notebook file (.ipynb) and start coding in our Notebook Editor! - + For more information you can: @@ -43,31 +80,26 @@ Open the Command Palette (Command+Shift+P on macOS and Ctrl+Shift+P on Windows/L | Command | Description | | ------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `Python: Select Interpreter` | Switch between Python interpreters, versions, and environments. | -| `Python: Start REPL` | Start an interactive Python REPL using the selected interpreter in the VS Code terminal. | +| `Python: Start Terminal REPL` | Start an interactive Python REPL using the selected interpreter in the VS Code terminal. | | `Python: Run Python File in Terminal` | Runs the active Python file in the VS Code terminal. You can also run a Python file by right-clicking on the file and selecting `Run Python File in Terminal`. | -| `Python: Select Linter` | Switch from Pylint to Flake8 or other supported linters. | -| `Format Document` | Formats code using the provided [formatter](https://code.visualstudio.com/docs/python/editing#_formatting) in the `settings.json` file. | | `Python: Configure Tests` | Select a test framework and configure it to display the Test Explorer. | -To see all available Python commands, open the Command Palette and type `Python`. +To see all available Python commands, open the Command Palette and type `Python`. For Jupyter extension commands, just type `Jupyter`. ## Feature details Learn more about the rich features of the Python extension: -- [IntelliSense](https://code.visualstudio.com/docs/python/editing#_autocomplete-and-intellisense): Edit your code with auto-completion, code navigation, syntax checking and more -- [Linting](https://code.visualstudio.com/docs/python/linting): Get additional code analysis with Pylint, Flake8 and more -- [Code formatting](https://code.visualstudio.com/docs/python/editing#_formatting): Format your code with black, autopep or yapf - -- [Debugging](https://code.visualstudio.com/docs/python/debugging): Debug your Python scripts, web apps, remote or multi-threaded processes - -- [Testing](https://code.visualstudio.com/docs/python/unit-testing): Run and debug tests through the Test Explorer with unittest, pytest or nose - -- [Jupyter Notebooks](https://code.visualstudio.com/docs/python/jupyter-support): Create and edit Jupyter Notebooks, add and run code cells, render plots, visualize variables through the variable explorer, visualize dataframes with the data viewer, and more +- [IntelliSense](https://code.visualstudio.com/docs/python/editing#_autocomplete-and-intellisense): Edit your code with auto-completion, code navigation, syntax checking and more. +- [Linting](https://code.visualstudio.com/docs/python/linting): Get additional code analysis with Pylint, Flake8 and more. +- [Code formatting](https://code.visualstudio.com/docs/python/formatting): Format your code with black, autopep or yapf. +- [Debugging](https://code.visualstudio.com/docs/python/debugging): Debug your Python scripts, web apps, remote or multi-threaded processes. +- [Testing](https://code.visualstudio.com/docs/python/unit-testing): Run and debug tests through the Test Explorer with unittest or pytest. +- [Jupyter Notebooks](https://code.visualstudio.com/docs/python/jupyter-support): Create and edit Jupyter Notebooks, add and run code cells, render plots, visualize variables through the variable explorer, visualize dataframes with the data viewer, and more. +- [Environments](https://code.visualstudio.com/docs/python/environments): Automatically activate and switch between virtualenv, venv, pipenv, conda and pyenv environments. +- [Refactoring](https://code.visualstudio.com/docs/python/editing#_refactoring): Restructure your Python code with variable extraction and method extraction. Additionally, there is componentized support to enable additional refactoring, such as import sorting, through extensions including [isort](https://marketplace.visualstudio.com/items?itemName=ms-python.isort) and [Ruff](https://marketplace.visualstudio.com/items?itemName=charliermarsh.ruff). -- [Environments](https://code.visualstudio.com/docs/python/environments): Automatically activate and switch between virtualenv, venv, pipenv, conda and pyenv environments -- [Refactoring](https://code.visualstudio.com/docs/python/editing#_refactoring): Restructure your Python code with variable extraction, method extraction and import sorting ## Supported locales @@ -75,13 +107,13 @@ The extension is available in multiple languages: `de`, `en`, `es`, `fa`, `fr`, ## Questions, issues, feature requests, and contributions -- If you have a question about how to accomplish something with the extension, please [ask on Stack Overflow](https://stackoverflow.com/questions/tagged/visual-studio-code+python) -- If you come across a problem with the extension, please [file an issue](https://github.com/microsoft/vscode-python) -- Contributions are always welcome! Please see our [contributing guide](https://github.com/Microsoft/vscode-python/blob/master/CONTRIBUTING.md) for more details +- If you have a question about how to accomplish something with the extension, please [ask on our Discussions page](https://github.com/microsoft/vscode-python/discussions/categories/q-a). +- If you come across a problem with the extension, please [file an issue](https://github.com/microsoft/vscode-python). +- Contributions are always welcome! Please see our [contributing guide](https://github.com/Microsoft/vscode-python/blob/main/CONTRIBUTING.md) for more details. - Any and all feedback is appreciated and welcome! - - If someone has already [filed an issue](https://github.com/Microsoft/vscode-python) that encompasses your feedback, please leave a 👍/👎 reaction on the issue - - Otherwise please file a new issue -- If you're interested in the development of the extension, you can read about our [development process](https://github.com/Microsoft/vscode-python/blob/master/CONTRIBUTING.md#development-process) + - If someone has already [filed an issue](https://github.com/Microsoft/vscode-python) that encompasses your feedback, please leave a 👍/👎 reaction on the issue. + - Otherwise please start a [new discussion](https://github.com/microsoft/vscode-python/discussions/categories/ideas). +- If you're interested in the development of the extension, you can read about our [development process](https://github.com/Microsoft/vscode-python/blob/main/CONTRIBUTING.md#development-process). ## Data and telemetry @@ -89,6 +121,6 @@ The Microsoft Python Extension for Visual Studio Code collects usage data and sends it to Microsoft to help improve our products and services. Read our [privacy statement](https://privacy.microsoft.com/privacystatement) to -learn more. This extension respects the `telemetry.enableTelemetry` +learn more. This extension respects the `telemetry.telemetryLevel` setting which you can learn more about at https://code.visualstudio.com/docs/supporting/faq#_how-to-disable-telemetry-reporting. diff --git a/SUPPORT.md b/SUPPORT.md new file mode 100644 index 000000000000..b1afe54cc555 --- /dev/null +++ b/SUPPORT.md @@ -0,0 +1,11 @@ +# Support + +## How to file issues and get help + +This project uses GitHub Issues to track bugs and feature requests. Please search the [existing issues](https://github.com/microsoft/vscode-python/issues) before filing new issues to avoid duplicates. For new issues, file your bug or feature request as a new Issue. + +For help and questions about using this project, please see the [`python`+`visual-studio-code` labels on Stack Overflow](https://stackoverflow.com/questions/tagged/visual-studio-code+python) or the `#vscode` channel on the [`microsoft-python` server on Discord](https://aka.ms/python-discord-invite). + +## Microsoft Support Policy + +Support for this project is limited to the resources listed above. diff --git a/ThirdPartyNotices-Distribution.txt b/ThirdPartyNotices-Distribution.txt deleted file mode 100644 index f32f10925a09..000000000000 --- a/ThirdPartyNotices-Distribution.txt +++ /dev/null @@ -1,40734 +0,0 @@ -NOTICES AND INFORMATION -Do Not Translate or Localize - -This software incorporates material from third parties. -Microsoft makes certain open source code available at https://3rdpartysource.microsoft.com, -or you may send a check or money order for US $5.00, including the product name, -the open source component name, platform, and version number, to: - -Source Code Compliance Team -Microsoft Corporation -One Microsoft Way -Redmond, WA 98052 -USA - -Notwithstanding any other terms, you may reverse engineer this software to the extent -required to debug changes to any libraries licensed under the GNU Lesser General Public License. - - -------------------------------------------------------------------- - -@blueprintjs/core 3.22.3 - Apache-2.0 -https://github.com/palantir/blueprint#readme -Copyright 2015 Palantir Technologies, Inc. -Copyright 2016 Palantir Technologies, Inc. -Copyright 2017 Palantir Technologies, Inc. -Copyright 2018 Palantir Technologies, Inc. -Copyright 2019 Palantir Technologies, Inc. -Copyright 2015-present Palantir Technologies, Inc. -Copyright 2019-present Palantir Technologies, Inc. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@blueprintjs/icons 3.13.0 - Apache-2.0 -https://github.com/palantir/blueprint#readme -Copyright 2015 Palantir Technologies, Inc. -Copyright 2017 Palantir Technologies, Inc. -Copyright 2018 Palantir Technologies, Inc. -Copyright 2017-present Palantir Technologies, Inc. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@blueprintjs/select 3.11.2 - Apache-2.0 -https://github.com/palantir/blueprint#readme -Copyright 2017 Palantir Technologies, Inc. -Copyright 2018 Palantir Technologies, Inc. -Copyright 2017-present Palantir Technologies, Inc. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -acorn-node 1.7.0 - Apache-2.0 -https://github.com/browserify/acorn-node -Copyright (c) 2016 Jordan Gensler -Copyright (c) 2017-2018 by Adrian Heine -Copyright 2018 Renee Kooi - -# [Apache License 2.0](https://spdx.org/licenses/Apache-2.0) - -Copyright 2018 Renée Kooi - -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. - -## acorn-bigint - -The code in the `lib/bigint` folder is compiled from code licensed as MIT: - -> Copyright (C) 2017-2018 by Adrian Heine -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. - -Find the source code at https://github.com/acornjs/acorn-bigint. - -## acorn-import-meta - -The code in the `lib/import-meta` folder is compiled from code licensed as MIT: - -> Copyright (C) 2017-2018 by Adrian Heine -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -> THE SOFTWARE. - -Find the source code at https://github.com/acornjs/acorn-import-meta. - -## acorn-dynamic-import - -The code in the `lib/dynamic-import` folder is licensed as MIT: - -> MIT License -> -> Copyright (c) 2016 Jordan Gensler -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - -Find the source code at https://github.com/kesne/acorn-dynamic-import. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -aria-query 3.0.0 - Apache-2.0 -https://github.com/A11yance/aria-query#readme - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, -and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by -the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all -other entities that control, are controlled by, or are under common -control with that entity. For the purposes of this definition, -"control" means (i) the power, direct or indirect, to cause the -direction or management of such entity, whether by contract or -otherwise, or (ii) ownership of fifty percent (50%) or more of the -outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity -exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, -including but not limited to software source code, documentation -source, and configuration files. - -"Object" form shall mean any form resulting from mechanical -transformation or translation of a Source form, including but -not limited to compiled object code, generated documentation, -and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or -Object form, made available under the License, as indicated by a -copyright notice that is included in or attached to the work -(an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object -form, that is based on (or derived from) the Work and for which the -editorial revisions, annotations, elaborations, or other modifications -represent, as a whole, an original work of authorship. For the purposes -of this License, Derivative Works shall not include works that remain -separable from, or merely link (or bind by name) to the interfaces of, -the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including -the original version of the Work and any modifications or additions -to that Work or Derivative Works thereof, that is intentionally -submitted to Licensor for inclusion in the Work by the copyright owner -or by an individual or Legal Entity authorized to submit on behalf of -the copyright owner. For the purposes of this definition, "submitted" -means any form of electronic, verbal, or written communication sent -to the Licensor or its representatives, including but not limited to -communication on electronic mailing lists, source code control systems, -and issue tracking systems that are managed by, or on behalf of, the -Licensor for the purpose of discussing and improving the Work, but -excluding communication that is conspicuously marked or otherwise -designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity -on behalf of whom a Contribution has been received by Licensor and -subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -copyright license to reproduce, prepare Derivative Works of, -publicly display, publicly perform, sublicense, and distribute the -Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of -this License, each Contributor hereby grants to You a perpetual, -worldwide, non-exclusive, no-charge, royalty-free, irrevocable -(except as stated in this section) patent license to make, have made, -use, offer to sell, sell, import, and otherwise transfer the Work, -where such license applies only to those patent claims licensable -by such Contributor that are necessarily infringed by their -Contribution(s) alone or by combination of their Contribution(s) -with the Work to which such Contribution(s) was submitted. If You -institute patent litigation against any entity (including a -cross-claim or counterclaim in a lawsuit) alleging that the Work -or a Contribution incorporated within the Work constitutes direct -or contributory patent infringement, then any patent licenses -granted to You under this License for that Work shall terminate -as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the -Work or Derivative Works thereof in any medium, with or without -modifications, and in Source or Object form, provided that You -meet the following conditions: - -(a) You must give any other recipients of the Work or -Derivative Works a copy of this License; and - -(b) You must cause any modified files to carry prominent notices -stating that You changed the files; and - -(c) You must retain, in the Source form of any Derivative Works -that You distribute, all copyright, patent, trademark, and -attribution notices from the Source form of the Work, -excluding those notices that do not pertain to any part of -the Derivative Works; and - -(d) If the Work includes a "NOTICE" text file as part of its -distribution, then any Derivative Works that You distribute must -include a readable copy of the attribution notices contained -within such NOTICE file, excluding those notices that do not -pertain to any part of the Derivative Works, in at least one -of the following places: within a NOTICE text file distributed -as part of the Derivative Works; within the Source form or -documentation, if provided along with the Derivative Works; or, -within a display generated by the Derivative Works, if and -wherever such third-party notices normally appear. The contents -of the NOTICE file are for informational purposes only and -do not modify the License. You may add Your own attribution -notices within Derivative Works that You distribute, alongside -or as an addendum to the NOTICE text from the Work, provided -that such additional attribution notices cannot be construed -as modifying the License. - -You may add Your own copyright statement to Your modifications and -may provide additional or different license terms and conditions -for use, reproduction, or distribution of Your modifications, or -for any such Derivative Works as a whole, provided Your use, -reproduction, and distribution of the Work otherwise complies with -the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, -any Contribution intentionally submitted for inclusion in the Work -by You to the Licensor shall be under the terms and conditions of -this License, without any additional terms or conditions. -Notwithstanding the above, nothing herein shall supersede or modify -the terms of any separate license agreement you may have executed -with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade -names, trademarks, service marks, or product names of the Licensor, -except as required for reasonable and customary use in describing the -origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or -agreed to in writing, Licensor provides the Work (and each -Contributor provides its Contributions) on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -implied, including, without limitation, any warranties or conditions -of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A -PARTICULAR PURPOSE. You are solely responsible for determining the -appropriateness of using or redistributing the Work and assume any -risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, -whether in tort (including negligence), contract, or otherwise, -unless required by applicable law (such as deliberate and grossly -negligent acts) or agreed to in writing, shall any Contributor be -liable to You for damages, including any direct, indirect, special, -incidental, or consequential damages of any character arising as a -result of this License or out of the use or inability to use the -Work (including but not limited to damages for loss of goodwill, -work stoppage, computer failure or malfunction, or any and all -other commercial damages or losses), even if such Contributor -has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing -the Work or Derivative Works thereof, You may choose to offer, -and charge a fee for, acceptance of support, warranty, indemnity, -or other liability obligations and/or rights consistent with this -License. However, in accepting such obligations, You may act only -on Your own behalf and on Your sole responsibility, not on behalf -of any other Contributor, and only if You agree to indemnify, -defend, and hold each Contributor harmless for any liability -incurred by, or claims asserted against, such Contributor by reason -of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following -boilerplate notice, with the fields enclosed by brackets "{}" -replaced with your own identifying information. (Don't include -the brackets!) The text should be enclosed in the appropriate -comment syntax for the file format. We also recommend that a -file or class name and description of purpose be included on the -same "printed page" as the copyright notice for easier -identification within third-party archives. - -Copyright {yyyy} {name of copyright owner} - -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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -aws-sign2 0.7.0 - Apache-2.0 -https://github.com/mikeal/aws-sign#readme -Copyright 2010 LearnBoost - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -azure-storage 2.10.3 - Apache-2.0 -http://github.com/Azure/azure-storage-node -Copyright (c) Microsoft and contributors. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -caseless 0.12.0 - Apache-2.0 -https://github.com/mikeal/caseless#readme - -Apache License -Version 2.0, January 2004 -http://www.apache.org/licenses/ -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION -1. Definitions. -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: -You must give any other recipients of the Work or Derivative Works a copy of this License; and -You must cause any modified files to carry prominent notices stating that You changed the files; and -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. -END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -detect-libc 1.0.3 - Apache-2.0 -https://github.com/lovell/detect-libc#readme -Copyright 2017 Lovell Fuller - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -diff-match-patch 1.0.4 - Apache-2.0 -https://github.com/JackuB/diff-match-patch#readme -Copyright 2018 - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ejs 2.7.4 - Apache-2.0 -https://github.com/mde/ejs -Copyright Joyent, Inc. and other Node contributors. - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -estree-is-function 1.0.0 - Apache-2.0 -https://github.com/goto-bus-stop/estree-is-function -Copyright 2017 Renee Kooi - -# [Apache License 2.0](https://spdx.org/licenses/Apache-2.0) - -Copyright 2017 Renée Kooi - -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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fast-diff 1.2.0 - Apache-2.0 -https://github.com/jhchen/fast-diff#readme -Copyright 2006 Google Inc. http://code.google.com/p/google-diff-match-patch - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - - - "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - - - - "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - - - - "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - - - - "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - - - - "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - - - - "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - - - - "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - - - - "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - - - - "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - - - - "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - - (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. - - You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS - -APPENDIX: How to apply the Apache License to your work. - -To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. - -Copyright [yyyy] [name of copyright owner] - -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. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -forever-agent 0.6.1 - Apache-2.0 -https://github.com/mikeal/forever-agent - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -get-assigned-identifiers 1.2.0 - Apache-2.0 -https://github.com/goto-bus-stop/get-assigned-identifiers -Copyright 2017 Renee Kooi - -# [Apache License 2.0](https://spdx.org/licenses/Apache-2.0) - -Copyright 2017 Renée Kooi - -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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -less-plugin-inline-urls 1.2.0 - Apache-2.0 -http://lesscss.org - -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -oauth-sign 0.9.0 - Apache-2.0 -https://github.com/mikeal/oauth-sign#readme - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -reflect-metadata 0.1.13 - Apache-2.0 -http://rbuckton.github.io/reflect-metadata -Copyright (c) Microsoft. -Copyright (c) 2016 Brian Terlson -Copyright (c) 2015 Nicolas Bevacqua -Copyright (c) Microsoft Corporation. - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -request 2.88.0 - Apache-2.0 -https://github.com/request/request#readme -Copyright 2010-2012 Mikeal Rogers - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -rxjs 5.5.12 - Apache-2.0 -https://github.com/ReactiveX/RxJS -Copyright Google Inc. -(c) this.destination.next -(c) this.destination.error -Copyright (c) Microsoft Corporation. -Copyright (c) 2015-2017 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2015-2017 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors - - 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. - - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2015-2017 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors - - 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. - - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2015-2017 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors - - 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. - - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2015-2017 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors - - 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. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -scope-analyzer 2.0.5 - Apache-2.0 -https://github.com/goto-bus-stop/scope-analyzer -Copyright 2017 Renee Kooi - -# [Apache License 2.0](https://spdx.org/licenses/Apache-2.0) - -Copyright 2017 Renée Kooi - -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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -spdx-correct 3.1.0 - Apache-2.0 -https://github.com/jslicense/spdx-correct.js#readme - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - 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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tslib 1.10.0 - Apache-2.0 -http://typescriptlang.org/ -Copyright (c) Microsoft Corporation. - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tslib 1.9.3 - Apache-2.0 -http://typescriptlang.org/ -Copyright (c) Microsoft Corporation. - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tslib 1.9.0 - Apache-2.0 -http://typescriptlang.org/ -Copyright (c) Microsoft Corporation. - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tslint 5.20.1 - Apache-2.0 -https://palantir.github.io/tslint -Copyright 2018 -Copyright 2013 Palantir Technologies, Inc. -Copyright 2014 Palantir Technologies, Inc. -Copyright 2015 Palantir Technologies, Inc. -Copyright 2016 Palantir Technologies, Inc. -Copyright 2017 Palantir Technologies, Inc. -Copyright 2018 Palantir Technologies, Inc. -Copyright 2019 Palantir Technologies, Inc. - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tunnel-agent 0.6.0 - Apache-2.0 -https://github.com/mikeal/tunnel-agent#readme - -Apache License - -Version 2.0, January 2004 - -http://www.apache.org/licenses/ - -TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - -1. Definitions. - -"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. - -"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. - -"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. - -"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. - -"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. - -"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. - -"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). - -"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. - -"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." - -"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. - -2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. - -3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. - -4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: - -You must give any other recipients of the Work or Derivative Works a copy of this License; and - -You must cause any modified files to carry prominent notices stating that You changed the files; and - -You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and - -If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. - -5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. - -6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. - -7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. - -8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. - -9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - -END OF TERMS AND CONDITIONS - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -xml-name-validator 3.0.0 - Apache-2.0 -https://github.com/jsdom/xml-name-validator#readme - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -browser-process-hrtime 0.1.3 - BSD-2-Clause -https://github.com/kumavis/browser-process-hrtime#readme -Copyright 2014 - -Copyright 2014 kumavis - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -css-select 1.2.0 - BSD-2-Clause -https://github.com/fb55/css-select#readme -Copyright (c) Felix Bohm - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -css-what 2.1.3 - BSD-2-Clause -https://github.com/fb55/css-what#readme -Copyright (c) Felix Bohm - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -domelementtype 1.3.1 - BSD-2-Clause -https://github.com/fb55/domelementtype#readme -Copyright (c) Felix Bohm - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -domhandler 2.4.2 - BSD-2-Clause -https://github.com/fb55/DomHandler#readme -Copyright (c) Felix Bohm - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -domutils 1.7.0 - BSD-2-Clause -https://github.com/FB55/domutils#readme -Copyright (c) Felix Bohm - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -domutils 1.5.1 - BSD-2-Clause -https://github.com/FB55/domutils -Copyright (c) Felix Bohm - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -entities 1.1.2 - BSD-2-Clause -https://github.com/fb55/entities#readme -Copyright (c) Felix Bohm -(c) // http://mathiasbynens.be/notes/javascript-encoding - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -escodegen 1.2.0 - BSD-2-Clause -http://github.com/Constellation/escodegen -Copyright (c) 2012 Kris Kowal -Copyright (c) 2012 John Freeman -Copyright (c) 2012 Yusuke Suzuki -Copyright (c) 2012-2013 Mathias Bynens -Copyright (c) 2014 Yusuke Suzuki -Copyright (c) 2013 Irakli Gozalishvili -Copyright (c) 2009-2011, Mozilla Foundation and contributors -Copyright (c) 2012 Arpad Borsos -Copyright (c) 2012-2013 Yusuke Suzuki -Copyright (c) 2011-2012 Ariya Hidayat -Copyright (c) 2012 Yusuke Suzuki (http://github.com/Constellation) -Copyright (c) 2012 Joost-Wim Boekesteijn -Copyright (c) 2012 Robert Gust-Bardon -Copyright (c) 2012-2013 Michael Ficarra - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -escodegen 1.11.1 - BSD-2-Clause -http://github.com/estools/escodegen -Copyright (c) 2014 Ivan Nikulin -Copyright (c) 2012 Kris Kowal -Copyright (c) 2012 John Freeman -Copyright (c) 2015 Ingvar Stepanyan -Copyright (c) 2012 Yusuke Suzuki -Copyright (c) 2012-2013 Mathias Bynens -Copyright (c) 2013 Irakli Gozalishvili -Copyright (c) 2012 Arpad Borsos -Copyright (c) 2012-2014 Yusuke Suzuki -Copyright (c) 2011-2012 Ariya Hidayat -Copyright (c) 2012 Yusuke Suzuki (http://github.com/Constellation) -Copyright (c) 2012 Joost-Wim Boekesteijn -Copyright (c) 2012 Robert Gust-Bardon -Copyright (c) 2012-2013 Michael Ficarra - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -escodegen 1.9.1 - BSD-2-Clause -http://github.com/estools/escodegen -Copyright (c) 2014 Ivan Nikulin -Copyright (c) 2012 Kris Kowal -Copyright (c) 2012 John Freeman -Copyright (c) 2015 Ingvar Stepanyan -Copyright (c) 2012 Yusuke Suzuki -Copyright (c) 2012-2013 Mathias Bynens -Copyright (c) 2013 Irakli Gozalishvili -Copyright (c) 2012 Arpad Borsos -Copyright (c) 2012-2014 Yusuke Suzuki -Copyright (c) 2011-2012 Ariya Hidayat -Copyright (c) 2012 Yusuke Suzuki (http://github.com/Constellation) -Copyright (c) 2012 Joost-Wim Boekesteijn -Copyright (c) 2012 Robert Gust-Bardon -Copyright (c) 2012-2013 Michael Ficarra - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -esprima 3.1.3 - BSD-2-Clause -http://esprima.org -Copyright JS Foundation and other contributors, https://js.foundation - -Copyright JS Foundation and other contributors, https://js.foundation/ - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -esprima 1.0.4 - BSD-2-Clause -http://esprima.org -Copyright (c) 2012 Mathias Bynens -Copyright (c) 2012 Kris Kowal -Copyright (c) 2011 Yusuke Suzuki -Copyright (c) 2012 Yusuke Suzuki -Copyright (c) 2011 Ariya Hidayat -Copyright (c) 2012 Ariya Hidayat -Copyright (c) 2011 Arpad Borsos -Copyright (c) 2012 Arpad Borsos -Copyright (c) 2012 Joost-Wim Boekesteijn -Copyright (c) 2012, 2011 Ariya Hidayat (http://ariya.ofilabs.com/about) and other contributors. - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -esprima 4.0.1 - BSD-2-Clause -http://esprima.org -Copyright JS Foundation and other contributors, https://js.foundation - -Copyright JS Foundation and other contributors, https://js.foundation/ - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -estraverse 4.3.0 - BSD-2-Clause -https://github.com/estools/estraverse -Copyright (c) 2014 Yusuke Suzuki -Copyright (c) 2012 Ariya Hidayat -Copyright (c) 2012-2013 Yusuke Suzuki -Copyright (c) 2012-2016 Yusuke Suzuki (http://github.com/Constellation) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -estraverse 1.5.1 - BSD-2-Clause -https://github.com/Constellation/estraverse -Copyright (c) 2012 Ariya Hidayat -Copyright (c) 2012-2013 Yusuke Suzuki -Copyright (c) 2012-2013 Yusuke Suzuki (http://github.com/Constellation) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -esutils 2.0.3 - BSD-2-Clause -https://github.com/estools/esutils -Copyright (c) 2014 Ivan Nikulin -Copyright (c) 2013 Yusuke Suzuki -Copyright (c) 2013-2014 Yusuke Suzuki -Copyright (c) 2013 Yusuke Suzuki (http://github.com/Constellation) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -esutils 1.0.0 - BSD-2-Clause -https://github.com/Constellation/esutils -Copyright (c) 2013 Yusuke Suzuki -Copyright (c) 2013 Yusuke Suzuki (http://github.com/Constellation) - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -esutils 1.1.6 - BSD-2-Clause -https://github.com/Constellation/esutils -Copyright (c) 2014 Ivan Nikulin -Copyright (c) 2013 Yusuke Suzuki -Copyright (c) 2013-2014 Yusuke Suzuki -Copyright (c) 2013 Yusuke Suzuki (http://github.com/Constellation) - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -extract-zip 1.6.7 - BSD-2-Clause -https://github.com/maxogden/extract-zip#readme -Copyright (c) 2014 Max Ogden and other contributors - -Copyright (c) 2014 Max Ogden and other contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -http-cache-semantics 3.8.1 - BSD-2-Clause -https://github.com/pornel/http-cache-semantics#readme - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -normalize-package-data 2.5.0 - BSD-2-Clause -https://github.com/npm/normalize-package-data#readme -Copyright (c) Meryn Stol -Copyright (c) 2013 Meryn Stol - -This package contains code originally written by Isaac Z. Schlueter. -Used with permission. - -Copyright (c) Meryn Stol ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nth-check 1.0.2 - BSD-2-Clause -https://github.com/fb55/nth-check -Copyright (c) Felix Bohm - -Copyright (c) Felix Böhm -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -onecolor 3.1.0 - BSD-2-Clause -https://github.com/One-com/one-color#readme -Copyright (c) 2011, One.com - -Copyright (c) 2011, One.com -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Neither the name of the author nor the names of contributors may - be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sax 0.5.8 - BSD-2-Clause -https://github.com/isaacs/sax-js -Copyright (c) Isaac Z. Schlueter -copyright-software-short-notice-20021231.html' W3C Software Short -copyright' Copyright 2012 W3C http://www.csail.mit.edu/' title Massachusetts Institute of Technology' MIT , http://www.ercim.org/' - -Copyright (c) Isaac Z. Schlueter ("Author") -All rights reserved. - -The BSD License - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS -BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN -IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -The file "examples/strict.dtd" is licensed by the W3C and used according -to the terms of the W3C SOFTWARE NOTICE AND LICENSE. See LICENSE-W3C.html -for details. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -terser 4.6.3 - BSD-2-Clause -https://terser.org -Copyright 2012 (c) Mihai Bazon -Copyright 2012-2018 (c) Mihai Bazon - -UglifyJS is released under the BSD license: - -Copyright 2012-2018 (c) Mihai Bazon - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - - * Redistributions of source code must retain the above - copyright notice, this list of conditions and the following - disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, -OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR -TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -uri-js 4.2.2 - BSD-2-Clause -https://github.com/garycourt/uri-js -(c) 2011 Gary Court. -Copyright 2011 Gary Court. -Copyright (c) 2008 Ariel Flesler -Copyright (c) 2009 John Resig, Jorn Zaefferer - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -winreg 1.2.4 - BSD-2-Clause -http://fresc81.github.io/node-winreg -Copyright (c) 2016 Paul -Copyright (c) 2016, Paul Bottin - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@jupyter-widgets/schema 0.4.0 - BSD-3-Clause -https://github.com/jupyter-widgets/ipywidgets#readme -Copyright (c) Jupyter Development Team. - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@jupyterlab/coreutils 3.1.0 - BSD-3-Clause -https://github.com/jupyterlab/jupyterlab -Copyright (c) Jupyter Development Team. -Copyright (c) 2015 Project Jupyter Contributors - -Copyright (c) 2015 Project Jupyter Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Semver File License -=================== - -The semver.py file is from https://github.com/podhmo/python-semver -which is licensed under the "MIT" license. See the semver.py file for details. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@jupyterlab/coreutils 3.2.0 - BSD-3-Clause -https://github.com/jupyterlab/jupyterlab -Copyright (c) Jupyter Development Team. -Copyright (c) 2015 Project Jupyter Contributors - -Copyright (c) 2015 Project Jupyter Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Semver File License -=================== - -The semver.py file is from https://github.com/podhmo/python-semver -which is licensed under the "MIT" license. See the semver.py file for details. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@jupyterlab/observables 2.4.0 - BSD-3-Clause -https://github.com/jupyterlab/jupyterlab -Copyright (c) Jupyter Development Team. -Copyright (c) 2015 Project Jupyter Contributors - -Copyright (c) 2015 Project Jupyter Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Semver File License -=================== - -The semver.py file is from https://github.com/podhmo/python-semver -which is licensed under the "MIT" license. See the semver.py file for details. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@jupyterlab/services 4.2.0 - BSD-3-Clause -https://github.com/jupyterlab/jupyterlab -(c) 2011 Gary Court. -Copyright (c) Jupyter Development Team. -Copyright (c) 2015 Project Jupyter Contributors - -Copyright (c) 2015 Project Jupyter Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Semver File License -=================== - -The semver.py file is from https://github.com/podhmo/python-semver -which is licensed under the "MIT" license. See the semver.py file for details. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@nteract/transform-plotly 6.0.0 - BSD-3-Clause -Copyright (c) 2016, nteract contributors - -Copyright (c) 2016, nteract contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of nteract nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@nteract/transform-vega 6.0.3 - BSD-3-Clause -Copyright (c) 2016, nteract contributors - -Copyright (c) 2016, nteract contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of nteract nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/algorithm 1.2.0 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/algorithm 1.1.3 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/collections 1.2.0 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS -Copyright (c) 2014-2018, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/commands 1.7.2 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/coreutils 1.3.1 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/disposable 1.3.1 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/disposable 1.2.0 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/domutils 1.1.4 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS -Copyright (c) 2014-2019, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/keyboard 1.1.3 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/messaging 1.3.0 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/properties 1.1.3 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/signaling 1.2.3 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@phosphor/signaling 1.3.1 - BSD-3-Clause -https://github.com/phosphorjs/phosphor -Copyright (c) 2014-2017, PhosphorJS - -Copyright (c) 2014-2017, PhosphorJS Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@sinonjs/commons 1.7.0 - BSD-3-Clause -https://github.com/sinonjs/commons#readme -Copyright (c) 2018 - -BSD 3-Clause License - -Copyright (c) 2018, Sinon.JS -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@sinonjs/formatio 4.0.1 - BSD-3-Clause -https://sinonjs.github.io/formatio/ -Copyright (c) 2010-2012, Christian Johansen (christian@cjohansen.no) and August Lilleaas (august.lilleaas@gmail.com). - -(The BSD License) - -Copyright (c) 2010-2012, Christian Johansen (christian@cjohansen.no) and -August Lilleaas (august.lilleaas@gmail.com). All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Christian Johansen nor the names of his contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@sinonjs/samsam 4.2.0 - BSD-3-Clause -http://sinonjs.github.io/samsam/ -Copyright (c) 2010-2012, Christian Johansen, christian@cjohansen.no and August Lilleaas, august.lilleaas@gmail.com. - -(The BSD License) - -Copyright (c) 2010-2012, Christian Johansen, christian@cjohansen.no and -August Lilleaas, august.lilleaas@gmail.com. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Christian Johansen nor the names of his contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -bcrypt-pbkdf 1.0.2 - BSD-3-Clause -https://github.com/joyent/node-bcrypt-pbkdf#readme -Copyright 2016, Joyent Inc -Copyright (c) 2013 Ted Unangst -Copyright 1997 Niels Provos - -The Blowfish portions are under the following license: - -Blowfish block cipher for OpenBSD -Copyright 1997 Niels Provos -All rights reserved. - -Implementation advice by David Mazieres . - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. The name of the author may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - -The bcrypt_pbkdf portions are under the following license: - -Copyright (c) 2013 Ted Unangst - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -Performance improvements (Javascript-specific): - -Copyright 2016, Joyent Inc -Author: Alex Wilson - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -charenc 0.0.2 - BSD-3-Clause -https://github.com/pvorb/node-charenc#readme -Copyright (c) 2009, Jeff Mott. -Copyright (c) 2011, Paul Vorbach. - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -crypt 0.0.2 - BSD-3-Clause -https://github.com/pvorb/node-crypt#readme -Copyright (c) 2009, Jeff Mott. -Copyright (c) 2011, Paul Vorbach. - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3 3.5.17 - BSD-3-Clause -http://d3js.org -Copyright (c) 2010-2016, Michael Bostock - -Copyright (c) 2010-2016, Michael Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* The name Michael Bostock may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-array 1.2.4 - BSD-3-Clause -https://d3js.org/d3-array/ -Copyright 2018 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-array 2.3.3 - BSD-3-Clause -https://d3js.org/d3-array/ -Copyright 2019 Mike Bostock -Copyright 2010-2018 Mike Bostock -Copyright 2018 Vladimir Agafonkin. - -Copyright 2010-2018 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-cloud 1.2.5 - BSD-3-Clause -https://www.jasondavies.com/wordcloud/ -Copyright 2017 Mike Bostock. -Copyright (c) 2013, Jason Davies. - -Copyright (c) 2013, Jason Davies. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - * The name Jason Davies may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL JASON DAVIES BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-collection 1.0.7 - BSD-3-Clause -https://d3js.org/d3-collection/ -Copyright 2018 Mike Bostock -Copyright 2010-2016, Mike Bostock - -Copyright 2010-2016, Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-color 1.4.0 - BSD-3-Clause -https://d3js.org/d3-color/ -Copyright 2019 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-color 1.2.8 - BSD-3-Clause -https://d3js.org/d3-color/ -Copyright 2019 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-contour 1.3.2 - BSD-3-Clause -https://d3js.org/d3-contour/ -Copyright 2018 Mike Bostock -Copyright 2012-2017 Mike Bostock - -Copyright 2012-2017 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-dispatch 1.0.5 - BSD-3-Clause -https://d3js.org/d3-dispatch/ -Copyright 2018 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-dsv 0.1.14 - BSD-3-Clause -https://github.com/d3/d3-dsv -Copyright 2013-2015 Mike Bostock - -Copyright 2013-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-dsv 1.1.1 - BSD-3-Clause -https://d3js.org/d3-dsv/ -Copyright 2019 Mike Bostock -Copyright 2013-2016 Mike Bostock - -Copyright 2013-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-ease 1.0.5 - BSD-3-Clause -https://d3js.org/d3-ease/ -Copyright 2018 Mike Bostock -Copyright 2001 Robert Penner -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -Copyright 2001 Robert Penner -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-force 2.0.1 - BSD-3-Clause -https://d3js.org/d3-force/ -Copyright 2019 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-format 1.3.2 - BSD-3-Clause -https://d3js.org/d3-format/ -Copyright 2018 Mike Bostock -Copyright 2010-2015 Mike Bostock - -Copyright 2010-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-format 1.4.1 - BSD-3-Clause -https://d3js.org/d3-format/ -Copyright 2019 Mike Bostock -Copyright 2010-2015 Mike Bostock - -Copyright 2010-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-format 0.4.2 - BSD-3-Clause -https://github.com/d3/d3-format -Copyright 2010-2015 Mike Bostock - -Copyright 2010-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-geo 1.11.6 - BSD-3-Clause -https://d3js.org/d3-geo/ -(c) , cc cos -Copyright 2019 Mike Bostock -Copyright 2010-2016 Mike Bostock -Copyright (c) 2008-2012, Charles Karney - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -This license applies to GeographicLib, versions 1.12 and later. - -Copyright (c) 2008-2012, Charles Karney - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-hierarchy 1.1.8 - BSD-3-Clause -https://d3js.org/d3-hierarchy/ -Copyright 2018 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-interpolate 1.3.2 - BSD-3-Clause -https://d3js.org/d3-interpolate/ -Copyright 2018 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-path 1.0.7 - BSD-3-Clause -https://d3js.org/d3-path/ -Copyright 2018 Mike Bostock -Copyright 2015-2016 Mike Bostock - -Copyright 2015-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-path 1.0.8 - BSD-3-Clause -https://d3js.org/d3-path/ -Copyright 2019 Mike Bostock -Copyright 2015-2016 Mike Bostock - -Copyright 2015-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-quadtree 1.0.1 - BSD-3-Clause -https://d3js.org/d3-quadtree/ -Copyright 2016 Mike Bostock. -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-request 1.0.6 - BSD-3-Clause -https://d3js.org/d3-request/ -Copyright 2017 Mike Bostock. -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-scale 3.2.0 - BSD-3-Clause -https://d3js.org/d3-scale/ -Copyright 2019 Mike Bostock -Copyright 2010-2015 Mike Bostock - -Copyright 2010-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-scale-chromatic 1.5.0 - BSD-3-Clause -https://d3js.org/d3-scale-chromatic/ -Copyright 2019 Mike Bostock -Copyright 2010-2018 Mike Bostock -Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State University. - -Copyright 2010-2018 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Apache-Style Software License for ColorBrewer software and ColorBrewer Color -Schemes - -Copyright (c) 2002 Cynthia Brewer, Mark Harrower, and The Pennsylvania State -University. - -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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-selection 1.4.0 - BSD-3-Clause -https://d3js.org/d3-selection/ -Copyright 2019 Mike Bostock -Copyright (c) 2010-2018, Michael Bostock - -Copyright (c) 2010-2018, Michael Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* The name Michael Bostock may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-shape 1.3.5 - BSD-3-Clause -https://d3js.org/d3-shape/ -Copyright 2019 Mike Bostock -Copyright 2010-2015 Mike Bostock - -Copyright 2010-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-time 1.0.11 - BSD-3-Clause -https://d3js.org/d3-time/ -Copyright 2019 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-time 0.1.1 - BSD-3-Clause -https://github.com/d3/d3-time -Copyright 2010-2015 Mike Bostock - -Copyright 2010-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-time 1.1.0 - BSD-3-Clause -https://d3js.org/d3-time/ -Copyright 2019 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-time-format 0.2.1 - BSD-3-Clause -https://github.com/d3/d3-time-format -Copyright 2010-2015 Mike Bostock - -Copyright 2010-2015 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-time-format 2.1.3 - BSD-3-Clause -https://d3js.org/d3-time-format/ -Copyright 2018 Mike Bostock -Copyright 2010-2017 Mike Bostock - -Copyright 2010-2017 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-timer 1.0.9 - BSD-3-Clause -https://d3js.org/d3-timer/ -Copyright 2018 Mike Bostock -Copyright 2010-2016 Mike Bostock - -Copyright 2010-2016 Mike Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the author nor the names of contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -datalib 1.9.2 - BSD-3-Clause -https://github.com/vega/datalib#readme -Copyright (c) 2015, University of Washington Interactive Data Lab - -Copyright (c) 2015, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -diff 4.0.1 - BSD-3-Clause -https://github.com/kpdecker/jsdiff#readme -Copyright (c) 2009-2015, Kevin Decker - -Software License Agreement (BSD License) - -Copyright (c) 2009-2015, Kevin Decker - -All rights reserved. - -Redistribution and use of this software in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of Kevin Decker nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -diff 3.5.0 - BSD-3-Clause -https://github.com/kpdecker/jsdiff#readme -Copyright (c) 2009-2015, Kevin Decker - -Software License Agreement (BSD License) - -Copyright (c) 2009-2015, Kevin Decker - -All rights reserved. - -Redistribution and use of this software in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above - copyright notice, this list of conditions and the - following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the - following disclaimer in the documentation and/or other - materials provided with the distribution. - -* Neither the name of Kevin Decker nor the names of its - contributors may be used to endorse or promote products - derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR -IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER -IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -duplexer2 0.1.4 - BSD-3-Clause -https://github.com/deoxxa/duplexer2#readme -Copyright (c) 2013, Deoxxa Development - -Copyright (c) 2013, Deoxxa Development -====================================== -All rights reserved. --------------------- - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -3. Neither the name of Deoxxa Development nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY DEOXXA DEVELOPMENT ''AS IS'' AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL DEOXXA DEVELOPMENT BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -hoist-non-react-statics 3.3.1 - BSD-3-Clause -https://github.com/mridgway/hoist-non-react-statics#readme -Copyright 2015, Yahoo! Inc. -Copyright (c) 2015, Yahoo! Inc. - -Software License Agreement (BSD License) -======================================== - -Copyright (c) 2015, Yahoo! Inc. All rights reserved. ----------------------------------------------------- - -Redistribution and use of this software in source and binary forms, with or -without modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Yahoo! Inc. nor the names of YUI's contributors may be - used to endorse or promote products derived from this software without - specific prior written permission of Yahoo! Inc. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -istanbul-lib-coverage 3.0.0 - BSD-3-Clause -https://istanbul.js.org/ -Copyright 2012-2015 Yahoo! Inc. -Copyright 2012-2015, Yahoo Inc. - -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -istanbul-lib-hook 3.0.0 - BSD-3-Clause -https://istanbul.js.org/ -Copyright 2012-2015 Yahoo! Inc. -Copyright 2012-2015, Yahoo Inc. - -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -istanbul-lib-instrument 4.0.0 - BSD-3-Clause -https://istanbul.js.org/ -Copyright 2012-2015 Yahoo! Inc. -Copyright 2012-2015, Yahoo Inc. - -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -istanbul-lib-report 3.0.0 - BSD-3-Clause -https://istanbul.js.org/ -Copyright 2012-2015 Yahoo! Inc. -Copyright 2012-2015, Yahoo Inc. - -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -istanbul-lib-source-maps 4.0.0 - BSD-3-Clause -https://istanbul.js.org/ -Copyright 2015 Yahoo! Inc. -Copyright 2015, Yahoo Inc. -Copyright 2012-2015, Yahoo Inc. - -Copyright 2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -istanbul-reports 3.0.0 - BSD-3-Clause -https://istanbul.js.org/ -(c) Sindre Sorhus -Copyright 2012-2015 Yahoo! Inc. -Copyright 2012-2015, Yahoo Inc. -Copyright (c) Facebook, Inc. and its affiliates. - -Copyright 2012-2015 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lolex 5.1.2 - BSD-3-Clause -http://github.com/sinonjs/lolex -Copyright (c) 2013 -Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no. - -Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -md5 2.2.1 - BSD-3-Clause -https://github.com/pvorb/node-md5#readme -Copyright (c) 2009, Jeff Mott. -Copyright (c) 2011-2012, Paul Vorbach. -Copyright (c) 2011-2015, Paul Vorbach. - -Copyright © 2011-2012, Paul Vorbach. -Copyright © 2009, Jeff Mott. - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, this - list of conditions and the following disclaimer in the documentation and/or - other materials provided with the distribution. -* Neither the name Crypto-JS nor the names of its contributors may be used to - endorse or promote products derived from this software without specific prior - written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nise 3.0.0 - BSD-3-Clause -https://github.com/sinonjs/nise#readme -Copyright (c) 2013 -Copyright (c) 2010-2017, Christian Johansen, christian@cjohansen.no -Copyright jQuery Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -(The BSD License) - -Copyright (c) 2010-2017, Christian Johansen, christian@cjohansen.no -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Christian Johansen nor the names of his contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -node-pre-gyp 0.12.0 - BSD-3-Clause -https://github.com/mapbox/node-pre-gyp#readme -Copyright (c), Mapbox - -Copyright (c), Mapbox - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of node-pre-gyp nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -parse-cache-control 1.0.1 - BSD-3-Clause -https://github.com/roryf/parse-cache-control -Copyright (c) 2012-2014, Walmart and other contributors. - -Copyright (c) 2012-2014, Walmart and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -qs 6.5.2 - BSD-3-Clause -https://github.com/ljharb/qs -Copyright (c) 2014 Nathan LaFreniere and other contributors. - -Copyright (c) 2014 Nathan LaFreniere and other contributors. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * The names of any contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - * * * - -The complete list of contributors can be found at: https://github.com/hapijs/qs/graphs/contributors - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-transition-group 2.9.0 - BSD-3-Clause -https://github.com/reactjs/react-transition-group#readme -(c) Sindre Sorhus -Copyright 2013-present, Facebook, Inc. -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) 2018, React Community Forked from React (https://github.com/facebook/react) - -BSD 3-Clause License - -Copyright (c) 2018, React Community -Forked from React (https://github.com/facebook/react) Copyright 2013-present, Facebook, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -rw 1.3.3 - BSD-3-Clause -https://github.com/mbostock/rw -Copyright (c) 2014-2016, Michael Bostock - -Copyright (c) 2014-2016, Michael Bostock -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* The name Michael Bostock may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL MICHAEL BOSTOCK BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -serialize-javascript 2.1.2 - BSD-3-Clause -https://github.com/yahoo/serialize-javascript -Copyright 2014 Yahoo! Inc. -Copyright (c) 2014, Yahoo! Inc. - -Copyright 2014 Yahoo! Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of the Yahoo! Inc. nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL YAHOO! INC. BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sinon 8.0.1 - BSD-3-Clause -https://sinonjs.org/ -Copyright (c) 2013 -Copyright (c) 2009-2015, Kevin Decker -Copyright (c) 2010-2017, Christian Johansen, christian@cjohansen.no -Copyright jQuery Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -(The BSD License) - -Copyright (c) 2010-2017, Christian Johansen, christian@cjohansen.no -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of Christian Johansen nor the names of his contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -source-map 0.1.43 - BSD-3-Clause -https://github.com/mozilla/source-map -Copyright 2011 The Closure Compiler -Copyright 2011 Mozilla Foundation and contributors -Copyright 2012 Mozilla Foundation and contributors -Copyright 2014 Mozilla Foundation and contributors -Copyright 2009-2011 Mozilla Foundation and contributors -Copyright (c) 2009-2011, Mozilla Foundation and contributors - - -Copyright (c) 2009-2011, Mozilla Foundation and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the names of the Mozilla Foundation nor the names of project - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -source-map 0.5.7 - BSD-3-Clause -https://github.com/mozilla/source-map -Copyright 2011 The Closure Compiler -Copyright 2011 Mozilla Foundation and contributors -Copyright 2014 Mozilla Foundation and contributors -Copyright 2009-2011 Mozilla Foundation and contributors -Copyright (c) 2009-2011, Mozilla Foundation and contributors - - -Copyright (c) 2009-2011, Mozilla Foundation and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the names of the Mozilla Foundation nor the names of project - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -source-map 0.6.1 - BSD-3-Clause -https://github.com/mozilla/source-map -Copyright 2011 The Closure Compiler -Copyright 2011 Mozilla Foundation and contributors -Copyright 2014 Mozilla Foundation and contributors -Copyright 2009-2011 Mozilla Foundation and contributors -Copyright (c) 2009-2011, Mozilla Foundation and contributors - - -Copyright (c) 2009-2011, Mozilla Foundation and contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the names of the Mozilla Foundation nor the names of project - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sprintf-js 1.0.3 - BSD-3-Clause -https://github.com/alexei/sprintf.js#readme -Copyright (c) 2007-2014, Alexandru Marasteanu - -Copyright (c) 2007-2014, Alexandru Marasteanu -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. -* Neither the name of this software nor the names of its contributors may be - used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tough-cookie 2.4.3 - BSD-3-Clause -https://github.com/salesforce/tough-cookie -Copyright (c) 2015, Salesforce.com, Inc. -Copyright (c) 2018, Salesforce.com, Inc. - -Copyright (c) 2015, Salesforce.com, Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of Salesforce.com nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega 5.7.3 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2013, Jason Davies. -Copyright 2018 Vladimir Agafonkin. -Copyright (c) 2012 Mathias Bynens -Copyright (c) 2013 Mathias Bynens -Copyright (c) 2012 Kris Kowal -Copyright (c) 2013 Thaddee Tyl -Copyright (c) 2012 Yusuke Suzuki -Copyright (c) 2011 Ariya Hidayat -Copyright (c) 2012 Ariya Hidayat -Copyright (c) 2013 Ariya Hidayat -Copyright (c) 2012 Arpad Borsos -Copyright (c) 2012 Joost-Wim Boekesteijn -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-canvas 1.2.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-crossfilter 4.0.1 - BSD-3-Clause - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-dataflow 5.4.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-embed 4.2.5 - BSD-3-Clause -https://github.com/vega/vega-embed#readme -Copyright (c) Microsoft Corporation. -Copyright (c) 2015, University of Washington Interactive Data Lab - -Copyright (c) 2015, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-encode 4.4.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-event-selector 2.0.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-expression 2.6.2 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2012 Mathias Bynens -Copyright (c) 2013 Mathias Bynens -Copyright (c) 2012 Kris Kowal -Copyright (c) 2013 Thaddee Tyl -Copyright (c) 2012 Yusuke Suzuki -Copyright (c) 2011 Ariya Hidayat -Copyright (c) 2012 Ariya Hidayat -Copyright (c) 2013 Ariya Hidayat -Copyright (c) 2012 Arpad Borsos -Copyright (c) 2012 Joost-Wim Boekesteijn -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-force 4.0.3 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-functions 5.4.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-geo 4.1.0 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-hierarchy 4.0.3 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-lite 3.4.0 - BSD-3-Clause -https://vega.github.io/vega-lite/ -Copyright (c) Microsoft Corporation. -Copyright (c) 2012 Mathias Bynens -Copyright (c) 2013 Mathias Bynens -Copyright (c) 2012 Kris Kowal -Copyright (c) 2013 Thaddee Tyl -Copyright (c) 2012 Yusuke Suzuki -Copyright (c) 2011 Ariya Hidayat -Copyright (c) 2012 Ariya Hidayat -Copyright (c) 2013 Ariya Hidayat -Copyright (c) 2012 Arpad Borsos -Copyright (c) 2015, University of Washington Interactive Data Lab. -Copyright (c) 2012 Joost-Wim Boekesteijn - -Copyright (c) 2015, University of Washington Interactive Data Lab. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the University of Washington Interactive Data Lab - nor the names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-loader 4.1.2 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-parser 5.10.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-projection 1.3.0 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-regression 1.0.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-runtime 5.0.2 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-scale 4.1.3 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-scenegraph 4.3.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-schema-url-parser 1.1.0 - BSD-3-Clause -https://github.com/vega/schema#readme -Copyright (c) 2017, Vega - -BSD 3-Clause License - -Copyright (c) 2017, Vega -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-selections 5.0.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-statistics 1.6.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-themes 2.5.0 - BSD-3-Clause -https://github.com/vega/vega-themes#readme -Copyright (c) 2016, University of Washington Interactive Data Lab - -Copyright (c) 2016, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-tooltip 0.18.1 - BSD-3-Clause -https://github.com/vega/vega-tooltip#readme -Copyright 2016 Interactive Data Lab and contributors - -Copyright 2016 Interactive Data Lab and contributors - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-transforms 4.4.3 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-typings 0.10.2 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-typings 0.7.2 - BSD-3-Clause -https://github.com/vega/vega#readme - -Copyright (c) . All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - - 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-util 1.12.0 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-util 1.10.0 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-view 5.3.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-view-transforms 4.4.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-voronoi 4.1.1 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vega-wordcloud 4.0.2 - BSD-3-Clause -https://github.com/vega/vega#readme -Copyright (c) 2013, Jason Davies. -Copyright (c) 2015-2018, University of Washington Interactive Data Lab - -Copyright (c) 2015-2018, University of Washington Interactive Data Lab -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -spdx-exceptions 2.2.0 - CC-BY-3.0 -https://github.com/kemitchell/spdx-exceptions.json#readme -Copyright (c) 2010-2015 Linux Foundation and its Contributors. - -Creative Commons Attribution 3.0 Unported CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. - - 1. Definitions - - a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. - - b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. - - c. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. - - d. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. - - e. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. - - f. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. - - g. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. - - h. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. - - i. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. - - 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. - - 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: - - a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; - - b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; - - c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, - - d. to Distribute and Publicly Perform Adaptations. - - e. For the avoidance of doubt: - - i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; - - ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, - - iii. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. - - The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. - - 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: - - a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. - - b. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv), consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. - - c. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. - - 5. Representations, Warranties and Disclaimer - - UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. - - 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - 7. Termination - - a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. - - b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. - - 8. Miscellaneous - - a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. - - b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. - - c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. - - d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. - - e. This License may not be modified without the mutual written agreement of the Licensor and You. - - f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. - -Creative Commons Notice - -Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. - -Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License. - -Creative Commons may be contacted at http://creativecommons.org/. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-font-family-system-ui 3.0.0 - CC0-1.0 -https://github.com/JLHwung/postcss-font-family-system-ui#readme - -# CC0 1.0 Universal - -## Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an “owner”) of an original work of -authorship and/or a database (each, a “Work”). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific works -(“Commons”) that the public can reliably and without fear of later claims of -infringement build upon, modify, incorporate in other works, reuse and -redistribute as freely as possible in any form whatsoever and for any purposes, -including without limitation commercial purposes. These owners may contribute -to the Commons to promote the ideal of a free culture and the further -production of creative, cultural and scientific works, or to gain reputation or -greater distribution for their Work in part through the use and efforts of -others. - -For these and/or other purposes and motivations, and without any expectation of -additional consideration or compensation, the person associating CC0 with a -Work (the “Affirmer”), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and -publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be - protected by copyright and related or neighboring rights (“Copyright and - Related Rights”). Copyright and Related Rights include, but are not limited - to, the following: - 1. the right to reproduce, adapt, distribute, perform, display, communicate, - and translate a Work; - 2. moral rights retained by the original author(s) and/or performer(s); - 3. publicity and privacy rights pertaining to a person’s image or likeness - depicted in a Work; - 4. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(i), below; - 5. rights protecting the extraction, dissemination, use and reuse of data in - a Work; - 6. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - 7. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations - thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, - applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and - unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright - and Related Rights and associated claims and causes of action, whether now - known or unknown (including existing as well as future claims and causes of - action), in the Work (i) in all territories worldwide, (ii) for the maximum - duration provided by applicable law or treaty (including future time - extensions), (iii) in any current or future medium and for any number of - copies, and (iv) for any purpose whatsoever, including without limitation - commercial, advertising or promotional purposes (the “Waiver”). Affirmer - makes the Waiver for the benefit of each member of the public at large and - to the detriment of Affirmer’s heirs and successors, fully intending that - such Waiver shall not be subject to revocation, rescission, cancellation, - termination, or any other legal or equitable action to disrupt the quiet - enjoyment of the Work by the public as contemplated by Affirmer’s express - Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be - judged legally invalid or ineffective under applicable law, then the Waiver - shall be preserved to the maximum extent permitted taking into account - Affirmer’s express Statement of Purpose. In addition, to the extent the - Waiver is so judged Affirmer hereby grants to each affected person a - royalty-free, non transferable, non sublicensable, non exclusive, - irrevocable and unconditional license to exercise Affirmer’s Copyright and - Related Rights in the Work (i) in all territories worldwide, (ii) for the - maximum duration provided by applicable law or treaty (including future time - extensions), (iii) in any current or future medium and for any number of - copies, and (iv) for any purpose whatsoever, including without limitation - commercial, advertising or promotional purposes (the “License”). The License - shall be deemed effective as of the date CC0 was applied by Affirmer to the - Work. Should any part of the License for any reason be judged legally - invalid or ineffective under applicable law, such partial invalidity or - ineffectiveness shall not invalidate the remainder of the License, and in - such case Affirmer hereby affirms that he or she will not (i) exercise any - of his or her remaining Copyright and Related Rights in the Work or (ii) - assert any associated claims and causes of action with respect to the Work, - in either case contrary to Affirmer’s express Statement of Purpose. - -4. Limitations and Disclaimers. - 1. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - 2. Affirmer offers the Work as-is and makes no representations or warranties - of any kind concerning the Work, express, implied, statutory or - otherwise, including without limitation warranties of title, - merchantability, fitness for a particular purpose, non infringement, or - the absence of latent or other defects, accuracy, or the present or - absence of errors, whether or not discoverable, all to the greatest - extent permissible under applicable law. - 3. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person’s Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the Work. - 4. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to this - CC0 or use of the Work. - -For more information, please see -http://creativecommons.org/publicdomain/zero/1.0/. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-nesting 4.2.1 - CC0-1.0 -https://github.com/jonathantneal/postcss-nesting#readme - -# CC0 1.0 Universal - -## Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an “owner”) of an original work of -authorship and/or a database (each, a “Work”). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific works -(“Commons”) that the public can reliably and without fear of later claims of -infringement build upon, modify, incorporate in other works, reuse and -redistribute as freely as possible in any form whatsoever and for any purposes, -including without limitation commercial purposes. These owners may contribute -to the Commons to promote the ideal of a free culture and the further -production of creative, cultural and scientific works, or to gain reputation or -greater distribution for their Work in part through the use and efforts of -others. - -For these and/or other purposes and motivations, and without any expectation of -additional consideration or compensation, the person associating CC0 with a -Work (the “Affirmer”), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and -publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be - protected by copyright and related or neighboring rights (“Copyright and - Related Rights”). Copyright and Related Rights include, but are not limited - to, the following: - 1. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - 2. moral rights retained by the original author(s) and/or performer(s); - 3. publicity and privacy rights pertaining to a person’s image or likeness - depicted in a Work; - 4. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(i), below; - 5. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - 6. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - 7. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations - thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the “Waiver”). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer’s heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer’s express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer’s express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, non -transferable, non sublicensable, non exclusive, irrevocable and unconditional -license to exercise Affirmer’s Copyright and Related Rights in the Work (i) in -all territories worldwide, (ii) for the maximum duration provided by applicable -law or treaty (including future time extensions), (iii) in any current or -future medium and for any number of copies, and (iv) for any purpose -whatsoever, including without limitation commercial, advertising or promotional -purposes (the “License”). The License shall be deemed effective as of the date -CC0 was applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder of the -License, and in such case Affirmer hereby affirms that he or she will not (i) -exercise any of his or her remaining Copyright and Related Rights in the Work -or (ii) assert any associated claims and causes of action with respect to the -Work, in either case contrary to Affirmer’s express Statement of Purpose. - -4. Limitations and Disclaimers. - 1. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - 2. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, statutory - or otherwise, including without limitation warranties of title, - merchantability, fitness for a particular purpose, non infringement, or - the absence of latent or other defects, accuracy, or the present or - absence of errors, whether or not discoverable, all to the greatest - extent permissible under applicable law. - 3. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person’s Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the Work. - 4. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. - -For more information, please see -http://creativecommons.org/publicdomain/zero/1.0/. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-pseudo-class-any-link 4.0.0 - CC0-1.0 -https://github.com/jonathantneal/postcss-pseudo-class-any-link#readme - -# CC0 1.0 Universal - -## Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator and -subsequent owner(s) (each and all, an “owner”) of an original work of -authorship and/or a database (each, a “Work”). - -Certain owners wish to permanently relinquish those rights to a Work for the -purpose of contributing to a commons of creative, cultural and scientific works -(“Commons”) that the public can reliably and without fear of later claims of -infringement build upon, modify, incorporate in other works, reuse and -redistribute as freely as possible in any form whatsoever and for any purposes, -including without limitation commercial purposes. These owners may contribute -to the Commons to promote the ideal of a free culture and the further -production of creative, cultural and scientific works, or to gain reputation or -greater distribution for their Work in part through the use and efforts of -others. - -For these and/or other purposes and motivations, and without any expectation of -additional consideration or compensation, the person associating CC0 with a -Work (the “Affirmer”), to the extent that he or she is an owner of Copyright -and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and -publicly distribute the Work under its terms, with knowledge of his or her -Copyright and Related Rights in the Work and the meaning and intended legal -effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be - protected by copyright and related or neighboring rights (“Copyright and - Related Rights”). Copyright and Related Rights include, but are not limited - to, the following: - 1. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - 2. moral rights retained by the original author(s) and/or performer(s); - 3. publicity and privacy rights pertaining to a person’s image or likeness - depicted in a Work; - 4. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(i), below; - 5. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - 6. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation thereof, - including any amended or successor version of such directive); and - 7. other similar, equivalent or corresponding rights throughout the world - based on applicable law or treaty, and any national implementations - thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention of, -applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and -unconditionally waives, abandons, and surrenders all of Affirmer’s Copyright -and Related Rights and associated claims and causes of action, whether now -known or unknown (including existing as well as future claims and causes of -action), in the Work (i) in all territories worldwide, (ii) for the maximum -duration provided by applicable law or treaty (including future time -extensions), (iii) in any current or future medium and for any number of -copies, and (iv) for any purpose whatsoever, including without limitation -commercial, advertising or promotional purposes (the “Waiver”). Affirmer makes -the Waiver for the benefit of each member of the public at large and to the -detriment of Affirmer’s heirs and successors, fully intending that such Waiver -shall not be subject to revocation, rescission, cancellation, termination, or -any other legal or equitable action to disrupt the quiet enjoyment of the Work -by the public as contemplated by Affirmer’s express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason be -judged legally invalid or ineffective under applicable law, then the Waiver -shall be preserved to the maximum extent permitted taking into account -Affirmer’s express Statement of Purpose. In addition, to the extent the Waiver -is so judged Affirmer hereby grants to each affected person a royalty-free, non -transferable, non sublicensable, non exclusive, irrevocable and unconditional -license to exercise Affirmer’s Copyright and Related Rights in the Work (i) in -all territories worldwide, (ii) for the maximum duration provided by applicable -law or treaty (including future time extensions), (iii) in any current or -future medium and for any number of copies, and (iv) for any purpose -whatsoever, including without limitation commercial, advertising or promotional -purposes (the “License”). The License shall be deemed effective as of the date -CC0 was applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder of the -License, and in such case Affirmer hereby affirms that he or she will not (i) -exercise any of his or her remaining Copyright and Related Rights in the Work -or (ii) assert any associated claims and causes of action with respect to the -Work, in either case contrary to Affirmer’s express Statement of Purpose. - -4. Limitations and Disclaimers. - 1. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - 2. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, statutory - or otherwise, including without limitation warranties of title, - merchantability, fitness for a particular purpose, non infringement, or - the absence of latent or other defects, accuracy, or the present or - absence of errors, whether or not discoverable, all to the greatest - extent permissible under applicable law. - 3. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person’s Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the Work. - 4. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. - -For more information, please see -http://creativecommons.org/publicdomain/zero/1.0/. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -spdx-license-ids 3.0.5 - CC0-1.0 -https://github.com/shinnn/spdx-license-ids#readme - -Creative Commons Legal Code - -CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. - - 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; - - ii. moral rights retained by the original author(s) and/or performer(s); - - iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; - - iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; - - v. rights protecting the extraction, dissemination, use and reuse of data in a Work; - - vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and - - vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. - - 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. - - 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. - - 4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. - - b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. - - c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. - - d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@istanbuljs/load-nyc-config 1.0.0 - ISC -https://github.com/istanbuljs/load-nyc-config#readme -Copyright (c) 2019 - -ISC License - -Copyright (c) 2019, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -abbrev 1.1.1 - ISC -https://github.com/isaacs/abbrev-js#readme -Copyright Isaac Z. Schlueter and Contributors -Copyright (c) Isaac Z. Schlueter and Contributors - -This software is dual-licensed under the ISC and MIT licenses. -You may use this software under EITHER of the following licenses. - ----------- - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------- - -Copyright Isaac Z. Schlueter and Contributors -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -anymatch 2.0.0 - ISC -https://github.com/micromatch/anymatch -Copyright (c) 2014 Elan Shanker - -The ISC License - -Copyright (c) 2014 Elan Shanker - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -aproba 1.2.0 - ISC -https://github.com/iarna/aproba -Copyright (c) 2015, Rebecca Turner - -Copyright (c) 2015, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -are-we-there-yet 1.1.5 - ISC -https://github.com/iarna/are-we-there-yet -Copyright (c) 2015, Rebecca Turner - -Copyright (c) 2015, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ast-types-flow 0.0.7 - ISC -https://github.com/kyldvs/ast-types-flow#readme - -ISC License - -Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") - -Copyright (c) 1995-2003 by Internet Software Consortium - -Permission to use, copy, modify, and /or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -block-stream 0.0.9 - ISC -https://github.com/isaacs/block-stream#readme -Copyright (c) Isaac Z. Schlueter -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -boolbase 1.0.0 - ISC -https://github.com/fb55/boolbase - -ISC License - -Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") - -Copyright (c) 1995-2003 by Internet Software Consortium - -Permission to use, copy, modify, and /or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cacache 13.0.1 - ISC -https://github.com/npm/cacache#readme -Copyright (c) npm, Inc. - -ISC License - -Copyright (c) npm, Inc. - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted, provided that the -above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS -ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cacache 12.0.3 - ISC -https://github.com/npm/cacache#readme -Copyright (c) npm, Inc. - -ISC License - -Copyright (c) npm, Inc. - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted, provided that the -above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS -ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chownr 1.1.2 - ISC -https://github.com/isaacs/chownr#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chownr 1.1.1 - ISC -https://github.com/isaacs/chownr#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cliui 3.2.0 - ISC -https://github.com/yargs/cliui#readme -Copyright (c) 2015 - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cliui 4.1.0 - ISC -https://github.com/yargs/cliui#readme -Copyright (c) 2015 - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cliui 5.0.0 - ISC -https://github.com/yargs/cliui#readme -Copyright (c) 2015 - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cliui 6.0.0 - ISC -https://github.com/yargs/cliui#readme -Copyright (c) 2015 - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -console-control-strings 1.1.0 - ISC -https://github.com/iarna/console-control-strings#readme -Copyright (c) 2014, Rebecca Turner - -Copyright (c) 2014, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -copy-concurrently 1.0.5 - ISC -https://www.npmjs.com/package/copy-concurrently -Copyright (c) 2017, Rebecca Turner - -Copyright (c) 2017, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d 1.0.1 - ISC -https://github.com/medikoo/d#readme -Copyright (c) 2013-2019, Mariusz Nowak, medikoo, medikoo.com - -ISC License - -Copyright (c) 2013-2019, Mariusz Nowak, @medikoo, medikoo.com - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -d3-delaunay 5.1.6 - ISC -https://github.com/d3/d3-delaunay -Copyright 2019 Mapbox, Inc. -Copyright 2018 Observable, Inc. -Copyright 2019 Mike Bostock https://github.com/mapbox/delaunator - -Copyright 2018 Observable, Inc. - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -delaunator 4.0.1 - ISC -https://github.com/mapbox/delaunator#readme -Copyright (c) 2017, Mapbox - -ISC License - -Copyright (c) 2017, Mapbox - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es5-ext 0.10.50 - ISC -https://github.com/medikoo/es5-ext#readme -Copyright (c) 2008 Matsuza -Copyright (c) 2011-2019, Mariusz Nowak, medikoo, medikoo.com - -ISC License - -Copyright (c) 2011-2019, Mariusz Nowak, @medikoo, medikoo.com - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es6-weak-map 2.0.3 - ISC -https://github.com/medikoo/es6-weak-map#readme -Copyright (c) 2013-2018, Mariusz Nowak, medikoo, medikoo.com - -ISC License - -Copyright (c) 2013-2018, Mariusz Nowak, @medikoo, medikoo.com - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -figgy-pudding 3.5.1 - ISC -https://github.com/zkat/figgy-pudding#readme -Copyright (c) npm, Inc. - -ISC License - -Copyright (c) npm, Inc. - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted, provided that the -above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS -ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -foreground-child 2.0.0 - ISC -https://github.com/tapjs/foreground-child#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs-minipass 1.2.5 - ISC -https://github.com/npm/fs-minipass#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs-minipass 1.2.7 - ISC -https://github.com/npm/fs-minipass#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs-minipass 2.0.0 - ISC -https://github.com/npm/fs-minipass#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs-write-stream-atomic 1.0.10 - ISC -https://github.com/npm/fs-write-stream-atomic -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs.realpath 1.0.0 - ISC -https://github.com/isaacs/fs.realpath#readme -Copyright (c) Isaac Z. Schlueter and Contributors -Copyright Joyent, Inc. and other Node contributors. - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----- - -This library bundles a version of the `fs.realpath` and `fs.realpathSync` -methods from Node.js v0.10 under the terms of the Node.js MIT license. - -Node's license follows, also included at the header of `old.js` which contains -the licensed code: - - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fstream 1.0.12 - ISC -https://github.com/npm/fstream#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -gauge 2.7.4 - ISC -https://github.com/iarna/gauge -Copyright (c) 2014, Rebecca Turner - -Copyright (c) 2014, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -get-caller-file 1.0.3 - ISC -https://github.com/stefanpenner/get-caller-file#readme -Copyright 2018 Stefan Penner - -ISC License (ISC) -Copyright 2018 Stefan Penner - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -get-caller-file 2.0.5 - ISC -https://github.com/stefanpenner/get-caller-file#readme -Copyright 2018 Stefan Penner - -ISC License (ISC) -Copyright 2018 Stefan Penner - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -glob 7.1.3 - ISC -https://github.com/isaacs/node-glob#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -glob 7.1.6 - ISC -https://github.com/isaacs/node-glob#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -## Glob Logo - -Glob's logo created by Tanya Brassie , licensed -under a Creative Commons Attribution-ShareAlike 4.0 International License -https://creativecommons.org/licenses/by-sa/4.0/ - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -glob 7.1.4 - ISC -https://github.com/isaacs/node-glob#readme - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -## Glob Logo - -Glob's logo created by Tanya Brassie , licensed -under a Creative Commons Attribution-ShareAlike 4.0 International License -https://creativecommons.org/licenses/by-sa/4.0/ - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -glob-parent 3.1.0 - ISC -https://github.com/es128/glob-parent -Copyright (c) 2015 Elan Shanker - -The ISC License - -Copyright (c) 2015 Elan Shanker - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -graceful-fs 4.2.0 - ISC -https://github.com/isaacs/node-graceful-fs#readme -Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -graceful-fs 4.2.3 - ISC -https://github.com/isaacs/node-graceful-fs#readme -Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -har-schema 2.0.0 - ISC -https://github.com/ahmadnassri/har-schema -Copyright (c) 2015, Ahmad Nassri -copyright ahmadnassri.com (https://www.ahmadnassri.com/) - -Copyright (c) 2015, Ahmad Nassri - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-unicode 2.0.1 - ISC -https://github.com/iarna/has-unicode -Copyright (c) 2014, Rebecca Turner - -Copyright (c) 2014, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ignore-walk 3.0.1 - ISC -https://github.com/isaacs/ignore-walk#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -infer-owner 1.0.4 - ISC -https://github.com/npm/infer-owner#readme -Copyright (c) npm, Inc. and Contributors - -The ISC License - -Copyright (c) npm, Inc. and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -inflight 1.0.6 - ISC -https://github.com/isaacs/inflight -Copyright (c) Isaac Z. Schlueter - -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -inherits 2.0.3 - ISC -https://github.com/isaacs/inherits#readme -Copyright (c) Isaac Z. Schlueter - -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -inherits 2.0.4 - ISC -https://github.com/isaacs/inherits#readme -Copyright (c) Isaac Z. Schlueter - -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ini 1.3.5 - ISC -https://github.com/isaacs/ini#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isexe 2.0.0 - ISC -https://github.com/isaacs/isexe#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -istanbul-lib-processinfo 2.0.2 - ISC -https://github.com/istanbuljs/istanbul-lib-processinfo#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-stringify-safe 5.0.1 - ISC -https://github.com/isaacs/json-stringify-safe -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -linear-layout-vector 0.0.1 - ISC - -ISC License - -Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") - -Copyright (c) 1995-2003 by Internet Software Consortium - -Permission to use, copy, modify, and /or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lru-cache 4.1.5 - ISC -https://github.com/isaacs/node-lru-cache#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minimalistic-assert 1.0.1 - ISC -https://github.com/calvinmetcalf/minimalistic-assert -Copyright 2015 Calvin Metcalf - -Copyright 2015 Calvin Metcalf - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minimatch 3.0.4 - ISC -https://github.com/isaacs/minimatch#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minipass 3.1.1 - ISC -https://github.com/isaacs/minipass#readme -Copyright (c) npm, Inc. and Contributors - -The ISC License - -Copyright (c) npm, Inc. and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minipass 2.3.5 - ISC -https://github.com/isaacs/minipass#readme -Copyright (c) npm, Inc. and Contributors - -The ISC License - -Copyright (c) npm, Inc. and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minipass 2.9.0 - ISC -https://github.com/isaacs/minipass#readme -Copyright (c) npm, Inc. and Contributors - -The ISC License - -Copyright (c) npm, Inc. and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minipass-collect 1.0.2 - ISC -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minipass-flush 1.0.5 - ISC -https://github.com/isaacs/minipass-flush#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minipass-pipeline 1.2.2 - ISC -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -move-concurrently 1.0.1 - ISC -https://www.npmjs.com/package/move-concurrently -Copyright (c) 2017, Rebecca Turner - -Copyright (c) 2017, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mute-stream 0.0.7 - ISC -https://github.com/isaacs/mute-stream#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nopt 4.0.1 - ISC -https://github.com/npm/nopt#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -npm-bundled 1.0.6 - ISC -https://github.com/npm/npm-bundled#readme -Copyright (c) npm, Inc. and Contributors - -The ISC License - -Copyright (c) npm, Inc. and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -npm-packlist 1.4.1 - ISC -https://www.npmjs.com/package/npm-packlist -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -npm-packlist 1.4.6 - ISC -https://www.npmjs.com/package/npm-packlist -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -npmlog 4.1.2 - ISC -https://github.com/npm/npmlog#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nyc 15.0.0 - ISC -https://istanbul.js.org/ -Copyright (c) 2015 - -ISC License - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -once 1.4.0 - ISC -https://github.com/isaacs/once#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -osenv 0.1.5 - ISC -https://github.com/npm/osenv#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -package-hash 4.0.0 - ISC -https://github.com/novemberborn/package-hash#readme -Copyright (c) 2016-2017, Mark Wubben (novemberborn.net) - -ISC License (ISC) -Copyright (c) 2016-2017, Mark Wubben (novemberborn.net) - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-posix 1.0.0 - ISC -https://github.com/jden/node-path-posix -Copyright Joyent, Inc. and other Node contributors. - -Node's license follows: - -==== - -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - -==== - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-gray 4.1.0 - ISC -https://github.com/postcss/postcss-color-gray#readme -(c) 2017 Shinnosuke Watanabe -Copyright 2017 Shinnosuke Watanabe - -ISC License (ISC) -Copyright 2017 Shinnosuke Watanabe - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -promise-inflight 1.0.1 - ISC -https://github.com/iarna/promise-inflight#readme -Copyright (c) 2017, Rebecca Turner - -Copyright (c) 2017, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -proto-list 1.2.4 - ISC -https://github.com/isaacs/proto-list#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pseudomap 1.0.2 - ISC -https://github.com/isaacs/pseudomap#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -range-inclusive 1.0.2 - ISC -https://github.com/emilbayes/range-inclusive#readme -Copyright (c) 2015, Emil Bay - -Copyright (c) 2015, Emil Bay - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -remove-trailing-separator 1.1.0 - ISC -https://github.com/darsain/remove-trailing-separator#readme - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -request-promise-core 1.1.2 - ISC -https://github.com/request/promise-core#readme -Copyright (c) 2016, Nicolai Kamenzky and contributors - -ISC License - -Copyright (c) 2016, Nicolai Kamenzky and contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -request-promise-native 1.0.7 - ISC -https://github.com/request/request-promise-native#readme -Copyright (c) 2017, Nicolai Kamenzky and contributors - -ISC License - -Copyright (c) 2017, Nicolai Kamenzky and contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -require-main-filename 1.0.1 - ISC -https://github.com/yargs/require-main-filename#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -require-main-filename 2.0.0 - ISC -https://github.com/yargs/require-main-filename#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -rimraf 3.0.0 - ISC -https://github.com/isaacs/rimraf#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -rimraf 2.7.1 - ISC -https://github.com/isaacs/rimraf#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -run-queue 1.0.3 - ISC -https://npmjs.com/package/run-queue - -ISC License - -Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") - -Copyright (c) 1995-2003 by Internet Software Consortium - -Permission to use, copy, modify, and /or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sax 1.2.4 - ISC -https://github.com/isaacs/sax-js#readme -Copyright (c) Isaac Z. Schlueter and Contributors -Copyright Mathias Bynens - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -==== - -`String.fromCodePoint` by Mathias Bynens used according to terms of MIT -License, as follows: - - Copyright Mathias Bynens - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -saxes 3.1.11 - ISC -https://github.com/lddubeau/saxes#readme -Copyright (c) Isaac Z. Schlueter and Contributors -Copyright Mathias Bynens - -The ISC License - -Copyright (c) Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -==== - -The following license is the one that governed sax, from which saxes -was forked. Isaac Schlueter is not *directly* involved with saxes so -don't go bugging him for saxes issues. - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -==== - -`String.fromCodePoint` by Mathias Bynens is no longer used, but it can -still be found in old commits. It was once used according to terms of -MIT License, as follows: - - Copyright Mathias Bynens - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -semver 5.7.0 - ISC -https://github.com/npm/node-semver#readme -Copyright Isaac Z. -Copyright Isaac Z. Schlueter -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -semver 5.7.1 - ISC -https://github.com/npm/node-semver#readme -Copyright Isaac Z. -Copyright Isaac Z. Schlueter -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -set-blocking 2.0.0 - ISC -https://github.com/yargs/set-blocking#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -setprototypeof 1.1.1 - ISC -https://github.com/wesleytodd/setprototypeof -Copyright (c) 2015, Wes Todd - -Copyright (c) 2015, Wes Todd - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION -OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -signal-exit 3.0.2 - ISC -https://github.com/tapjs/signal-exit -Copyright (c) 2015 - -The ISC License - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -spawn-wrap 2.0.0 - ISC -https://github.com/istanbuljs/spawn-wrap#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ssri 7.1.0 - ISC -https://github.com/npm/ssri#readme -Copyright (c) npm, Inc. - -ISC License - -Copyright (c) npm, Inc. - -Permission to use, copy, modify, and/or distribute this software for -any purpose with or without fee is hereby granted, provided that the -above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE COPYRIGHT HOLDER DISCLAIMS -ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE -OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE -USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -stealthy-require 1.1.1 - ISC -https://github.com/analog-nico/stealthy-require#readme -Copyright (c) 2017, Nicolai Kamenzky and contributors - -ISC License - -Copyright (c) 2017, Nicolai Kamenzky and contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tar 4.4.13 - ISC -https://github.com/npm/node-tar#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tar 2.2.2 - ISC -https://github.com/isaacs/node-tar#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License -Copyright (c) Isaac Z. Schlueter and Contributors -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tar 4.4.8 - ISC -https://github.com/npm/node-tar#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -test-exclude 6.0.0 - ISC -https://istanbul.js.org/ -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -topojson-client 3.1.0 - ISC -https://github.com/topojson/topojson-client -Copyright 2019 Mike Bostock -Copyright 2012-2019 Michael Bostock - -Copyright 2012-2019 Michael Bostock - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -type 1.0.1 - ISC -https://github.com/medikoo/type#readme - -ISC License - -Copyright (c) 2004-2010 by Internet Systems Consortium, Inc. ("ISC") - -Copyright (c) 1995-2003 by Internet Software Consortium - -Permission to use, copy, modify, and /or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unique-filename 1.1.1 - ISC -https://github.com/iarna/unique-filename -Copyright npm, Inc - -Copyright npm, Inc - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -which 1.3.1 - ISC -https://github.com/isaacs/node-which#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -which 2.0.2 - ISC -https://github.com/isaacs/node-which#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -which-module 1.0.0 - ISC -https://github.com/nexdrew/which-module#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -which-module 2.0.0 - ISC -https://github.com/nexdrew/which-module#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -wide-align 1.1.3 - ISC -https://github.com/iarna/wide-align#readme -Copyright (c) 2015, Rebecca Turner - -Copyright (c) 2015, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -wrappy 1.0.2 - ISC -https://github.com/npm/wrappy -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -write-file-atomic 3.0.1 - ISC -https://github.com/npm/write-file-atomic -Copyright (c) 2015, Rebecca Turner - -Copyright (c) 2015, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -y18n 4.0.0 - ISC -https://github.com/yargs/y18n -Copyright (c) 2015 - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software for any purpose -with or without fee is hereby granted, provided that the above copyright notice -and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF -THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yallist 3.0.3 - ISC -https://github.com/isaacs/yallist#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yallist 2.1.2 - ISC -https://github.com/isaacs/yallist#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yallist 4.0.0 - ISC -https://github.com/isaacs/yallist#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yallist 3.1.1 - ISC -https://github.com/isaacs/yallist#readme -Copyright (c) Isaac Z. Schlueter and Contributors - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yargs-parser 5.0.0 - ISC -https://github.com/yargs/yargs-parser#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yargs-parser 16.1.0 - ISC -https://github.com/yargs/yargs-parser#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yargs-parser 13.1.1 - ISC -https://github.com/yargs/yargs-parser#readme -Copyright (c) 2016 - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/code-frame 7.0.0 - MIT -https://babeljs.io/ -Copyright (c) 2014-2018 Sebastian McKenzie - -MIT License - -Copyright (c) 2014-2018 Sebastian McKenzie - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/code-frame 7.5.5 - MIT -https://babeljs.io/ -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/core 7.7.7 - MIT -https://babeljs.io/ -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/generator 7.7.7 - MIT -https://babeljs.io/ -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/helper-function-name 7.7.4 - MIT -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/helper-get-function-arity 7.7.4 - MIT -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/helper-split-export-declaration 7.7.4 - MIT -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/helpers 7.7.4 - MIT -https://babeljs.io/ -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/parser 7.7.7 - MIT -https://babeljs.io/ -Copyright (c) 2012-2014 by various contributors - -Copyright (C) 2012-2014 by various contributors (see AUTHORS) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/polyfill 7.4.4 - MIT -https://babeljs.io/ -(c) 2019 Denis Pushkarev -copyright (c) 2019 Denis Pushkarev -Copyright (c) 2014-present, Facebook, Inc. -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/runtime 7.6.3 - MIT -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/runtime 7.5.4 - MIT -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/runtime 7.8.3 - MIT -https://babeljs.io/docs/en/next/babel-runtime -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/template 7.7.4 - MIT -https://babeljs.io/ -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/traverse 7.7.4 - MIT -https://babeljs.io/ -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@babel/types 7.7.4 - MIT -https://babeljs.io/ -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -MIT License - -Copyright (c) 2014-present Sebastian McKenzie and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@istanbuljs/schema 0.1.2 - MIT -https://github.com/istanbuljs/schema#readme -Copyright (c) 2019 CFWare, LLC - -MIT License - -Copyright (c) 2019 CFWare, LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@jest/types 24.9.0 - MIT -https://github.com/facebook/jest#readme -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@koa/cors 3.0.0 - MIT -https://github.com/koajs/cors -Copyright (c) 2015 - 2018 koajs and other contributors - -This software is licensed under the MIT License. - -Copyright (c) 2015 - 2018 koajs and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@loadable/component 5.12.0 - MIT -https://github.com/gregberge/loadable-components#readme -Copyright 2019 Greg Berge - -Copyright 2019 Greg Bergé - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@nteract/vega-embed-v2 1.1.0 - MIT -Copyright (c) 2018 - -MIT License - -Copyright (c) 2018 nteract - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@nteract/vega-embed-v3 1.1.1 - MIT -Copyright (c) 2018 - -MIT License - -Copyright (c) 2018 nteract - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@testing-library/dom 6.11.0 - MIT -https://github.com/testing-library/dom-testing-library#readme -Copyright (c) 2017 Kent C. Dodds -Copyright (c) Facebook, Inc. and its affiliates. - -The MIT License (MIT) -Copyright (c) 2017 Kent C. Dodds - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@testing-library/react 9.4.0 - MIT -https://github.com/testing-library/react-testing-library#readme -Copyright (c) 2017 Kent C. Dodds -Copyright (c) 2014-present, Facebook, Inc. -Copyright (c) Facebook, Inc. and its affiliates. - -The MIT License (MIT) -Copyright (c) 2017 Kent C. Dodds - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/accepts 1.3.5 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/body-parser 1.17.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/caseless 0.12.2 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/clone 0.1.30 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/color-name 1.1.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/concat-stream 1.6.0 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/connect 3.4.32 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/cookiejar 2.1.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/cookies 0.7.4 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/dedent 0.7.0 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/dom4 2.0.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/events 3.0.0 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/express 4.17.2 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/express-serve-static-core 4.17.0 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/fast-json-stable-stringify 2.0.0 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/form-data 0.0.33 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/hoist-non-react-statics 3.3.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/http-assert 1.5.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/istanbul-lib-coverage 2.0.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/istanbul-lib-report 1.1.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/istanbul-reports 1.1.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/keygrip 1.0.1 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/koa 2.11.0 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/koa__cors 2.2.3 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/koa-compose 3.2.5 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/koa-compress 2.0.9 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/koa-logger 3.1.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/loadable__component 5.10.0 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/mime 2.0.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/minimatch 3.0.3 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/node 8.10.58 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/node 10.14.18 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/prop-types 15.7.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/qs 6.5.3 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/range-parser 1.2.3 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/react-redux 7.1.5 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/redux-logger 3.0.7 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/serve-static 1.13.3 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/sinon 7.5.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/superagent 3.8.7 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/testing-library__dom 6.11.1 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/testing-library__react 9.1.2 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/tough-cookie 2.3.5 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/yargs 13.0.5 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@types/yargs-parser 15.0.0 - MIT -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -1to2 1.0.0 - MIT -Copyright (c) 2014 3VOT - -The MIT License (MIT) - -Copyright (c) 2014 3VOT - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -accepts 1.3.7 - MIT -https://github.com/jshttp/accepts#readme -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -acorn 6.4.1 - MIT -https://github.com/acornjs/acorn -Copyright (c) 2012-2018 by various contributors - -Copyright (C) 2012-2018 by various contributors (see AUTHORS) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -acorn 7.1.1 - MIT -https://github.com/acornjs/acorn -Copyright (c) 2012-2018 by various contributors - -Copyright (C) 2012-2018 by various contributors (see AUTHORS) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -acorn-dynamic-import 4.0.0 - MIT -https://github.com/kesne/acorn-dynamic-import -Copyright (c) 2016 Jordan Gensler - -MIT License - -Copyright (c) 2016 Jordan Gensler - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -acorn-walk 6.2.0 - MIT -https://github.com/acornjs/acorn -Copyright (c) 2012-2018 by various contributors - -Copyright (C) 2012-2018 by various contributors (see AUTHORS) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ajv 6.10.1 - MIT -https://github.com/epoberezkin/ajv -(c) 2011 Gary Court. -Copyright 2011 Gary Court. -Copyright (c) 2015-2017 Evgeny Poberezkin - -The MIT License (MIT) - -Copyright (c) 2015-2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ansi-regex 3.0.0 - MIT -https://github.com/chalk/ansi-regex#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ansi-regex 5.0.0 - MIT -https://github.com/chalk/ansi-regex#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ansi-regex 4.1.0 - MIT -https://github.com/chalk/ansi-regex#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ansi-regex 2.1.1 - MIT -https://github.com/chalk/ansi-regex#readme -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ansi-styles 4.2.1 - MIT -https://github.com/chalk/ansi-styles#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ansi-styles 3.2.1 - MIT -https://github.com/chalk/ansi-styles#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ansi-wrap 0.1.0 - MIT -https://github.com/jonschlinkert/ansi-wrap -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -any-promise 1.3.0 - MIT -http://github.com/kevinbeaty/any-promise -Copyright (c) 2014-2016 Kevin Beaty - -Copyright (C) 2014-2016 Kevin Beaty - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -append-buffer 1.0.2 - MIT -https://github.com/doowb/append-buffer -Copyright (c) 2017, Brian Woodward. -Copyright (c) 2017, Brian Woodward (https://doowb.com). - -The MIT License (MIT) - -Copyright (c) 2017, Brian Woodward. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -append-transform 2.0.0 - MIT -https://github.com/istanbuljs/append-transform#readme -Copyright (c) James Talmage -(c) James Talmage (https://github.com/jamestalmage) - -The MIT License (MIT) - -Copyright (c) James Talmage (github.com/jamestalmage) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -applicationinsights 1.0.6 - MIT -https://github.com/Microsoft/ApplicationInsights-node.js#readme -Copyright (c) Microsoft Corporation. - -The MIT License (MIT) -Copyright © Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -arch 2.1.1 - MIT -https://github.com/feross/arch -Copyright (c) Feross Aboukhadijeh -Copyright (c) Feross Aboukhadijeh (http://feross.org). - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -archy 1.0.0 - MIT -https://github.com/substack/node-archy - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -argparse 1.0.10 - MIT -https://github.com/nodeca/argparse#readme -Copyright (c) 2012 by Vitaly Puzrin -Copyright (c) 2012 Vitaly Puzrin (https://github.com/puzrin). - -(The MIT License) - -Copyright (C) 2012 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -arr-diff 4.0.0 - MIT -https://github.com/jonschlinkert/arr-diff -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -arr-flatten 1.1.0 - MIT -https://github.com/jonschlinkert/arr-flatten -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -arr-union 3.1.0 - MIT -https://github.com/jonschlinkert/arr-union -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016 Jon Schlinkert (https://github.com/jonschlinkert) - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -array-from 2.1.1 - MIT -https://github.com/studio-b12/array-from#readme -(c) Studio B12 GmbH -Copyright (c) 2015-2016 Studio B12 GmbH - -Copyright © 2015-2016 Studio B12 GmbH - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -array-slice 1.1.0 - MIT -https://github.com/jonschlinkert/array-slice -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -array-uniq 1.0.3 - MIT -https://github.com/sindresorhus/array-uniq#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -array-unique 0.3.2 - MIT -https://github.com/jonschlinkert/array-unique -Copyright (c) 2014-2016, Jon Schlinkert -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -asap 2.0.6 - MIT -https://github.com/kriskowal/asap#readme -Copyright 2009-2014 - - -Copyright 2009–2014 Contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -asn1 0.2.4 - MIT -https://github.com/joyent/node-asn1#readme -Copyright (c) 2011 Mark Cavage -Copyright 2011 Mark Cavage - -Copyright (c) 2011 Mark Cavage, All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -assert-plus 1.0.0 - MIT -https://github.com/mcavage/node-assert-plus#readme -Copyright 2015 Joyent, Inc. -Copyright (c) 2012 Mark Cavage -Copyright (c) 2012, Mark Cavage. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -assertion-error 1.1.0 - MIT -https://github.com/chaijs/assertion-error#readme -Copyright (c) 2013 Jake Luer -Copyright (c) 2013 Jake Luer (http://qualiancy.com) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -assign-symbols 1.0.0 - MIT -https://github.com/jonschlinkert/assign-symbols -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ast-transform 0.0.0 - MIT -https://github.com/hughsk/ast-transform -Copyright (c) 2014 Hugh Kennedy - -## The MIT License (MIT) ## - -Copyright (c) 2014 Hugh Kennedy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ast-types 0.7.8 - MIT -http://github.com/benjamn/ast-types -Copyright (c) 2013 Ben Newman - -Copyright (c) 2013 Ben Newman - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -async 2.6.2 - MIT -https://caolan.github.io/async/ -Copyright (c) 2010-2018 Caolan McMahon - -Copyright (c) 2010-2018 Caolan McMahon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -async-each 1.0.3 - MIT -https://github.com/paulmillr/async-each/ -Copyright (c) 2016 Paul Miller (paulmillr.com) (http://paulmillr.com) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -async-limiter 1.0.0 - MIT -https://github.com/strml/async-limiter#readme -Copyright (c) 2017 Samuel Reed - -The MIT License (MIT) -Copyright (c) 2017 Samuel Reed - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -asynckit 0.4.0 - MIT -https://github.com/alexindigo/asynckit#readme -Copyright (c) 2016 Alex Indigo - -The MIT License (MIT) - -Copyright (c) 2016 Alex Indigo - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -autoprefixer 7.2.6 - MIT -https://github.com/postcss/autoprefixer#readme -Copyright 2013 Andrey Sitnik - -The MIT License (MIT) - -Copyright 2013 Andrey Sitnik - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -aws4 1.8.0 - MIT -https://github.com/mhart/aws4#readme -Copyright 2013 Michael Hart (michael.hart.au@gmail.com) - -Copyright 2013 Michael Hart (michael.hart.au@gmail.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -babel-runtime 6.26.0 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -backports.functools-lru-cache 1.6.1 - MIT -Copyright Jason R. Coombs - -Copyright Jason R. Coombs - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -balanced-match 0.1.0 - MIT -https://github.com/juliangruber/balanced-match -Copyright (c) 2013 Julian Gruber - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -balanced-match 1.0.0 - MIT -https://github.com/juliangruber/balanced-match -Copyright (c) 2013 Julian Gruber - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -balanced-match 0.4.2 - MIT -https://github.com/juliangruber/balanced-match -Copyright (c) 2013 Julian Gruber - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -base 0.11.2 - MIT -https://github.com/node-base/base -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -base64-js 0.0.8 - MIT -https://github.com/beatgammit/base64-js -Copyright (c) 2014 - -The MIT License (MIT) - -Copyright (c) 2014 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -base64-js 1.3.0 - MIT -https://github.com/beatgammit/base64-js -Copyright (c) 2014 - -The MIT License (MIT) - -Copyright (c) 2014 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -binary-extensions 1.13.1 - MIT -https://github.com/sindresorhus/binary-extensions#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) -(c) Sindre Sorhus (https://sindresorhus.com), Paul Miller (https://paulmillr.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -bluebird 3.5.5 - MIT -https://github.com/petkaantonov/bluebird -Copyright (c) 2013-2017 Petka Antonov -Copyright (c) 2013-2018 Petka Antonov - -The MIT License (MIT) - -Copyright (c) 2013-2018 Petka Antonov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -brace-expansion 1.1.11 - MIT -https://github.com/juliangruber/brace-expansion -Copyright (c) 2013 Julian Gruber - -MIT License - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -braces 1.8.5 - MIT -https://github.com/jonschlinkert/braces -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -braces 2.3.2 - MIT -https://github.com/micromatch/braces -Copyright (c) 2014-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -brfs 2.0.2 - MIT -https://github.com/substack/brfs - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -brfs 1.6.1 - MIT -https://github.com/substack/brfs - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -brotli 1.3.2 - MIT -https://github.com/devongovett/brotli.js -Copyright 2013 Google Inc. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -browser-resolve 1.11.3 - MIT -https://github.com/shtylman/node-browser-resolve#readme -Copyright (c) 2013-2015 Roman Shtylman - -The MIT License (MIT) - -Copyright (c) 2013-2015 Roman Shtylman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -browserify-mime 1.2.9 - MIT -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -browserify-optional 1.0.1 - MIT -https://github.com/devongovett/browserify-optional - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -browserslist 2.11.3 - MIT -https://github.com/ai/browserslist#readme -Copyright 2014 Andrey Sitnik - -The MIT License (MIT) - -Copyright 2014 Andrey Sitnik - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -buffer-crc32 0.2.13 - MIT -https://github.com/brianloveswords/buffer-crc32 -Copyright (c) 2013 Brian J. Brennan - -The MIT License - -Copyright (c) 2013 Brian J. Brennan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -buffer-equal 0.0.1 - MIT -https://github.com/substack/node-buffer-equal - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -buffer-equal 1.0.0 - MIT -https://github.com/substack/node-buffer-equal#readme - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -buffer-from 1.1.1 - MIT -https://github.com/LinusU/buffer-from#readme -Copyright (c) 2016, 2018 Linus Unneback - -MIT License - -Copyright (c) 2016, 2018 Linus Unnebäck - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -bytes 3.1.0 - MIT -https://github.com/visionmedia/bytes.js#readme -Copyright (c) 2015 Jed Watson -Copyright (c) 2012-2014 TJ Holowaychuk -Copyright (c) 2015 Jed Watson -Copyright (c) 2012-2014 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2012-2014 TJ Holowaychuk -Copyright (c) 2015 Jed Watson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cache-base 1.0.1 - MIT -https://github.com/jonschlinkert/cache-base -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cache-content-type 1.0.1 - MIT -https://github.com/node-modules/cache-content-type#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -caching-transform 4.0.0 - MIT -https://github.com/istanbuljs/caching-transform#readme -Copyright (c) James Talmage -(c) James Talmage (https://github.com/jamestalmage) - -The MIT License (MIT) - -Copyright (c) James Talmage (github.com/jamestalmage) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -camelcase 5.3.1 - MIT -https://github.com/sindresorhus/camelcase#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -camelcase 3.0.0 - MIT -https://github.com/sindresorhus/camelcase#readme -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -caniuse-api 2.0.0 - MIT -https://github.com/nyalab/caniuse-api#readme -Copyright (c) 2014 Sebastien Balayn - -The MIT License (MIT) - -Copyright (c) 2014 Sébastien Balayn - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -canvas 2.6.0 - MIT -https://github.com/Automattic/node-canvas -copyright On Windows -Copyright (c) 2010 LearnBoost -Copyright (c) 2011 LearnBoost -Copyright (c) 2010 LearnBoost, and contributors -Copyright (c) 2014 Automattic, Inc and contributors - -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chai 4.2.0 - MIT -http://chaijs.com -Copyright (c) 2013 -Copyright (c) 2017 Chai.js Assertion Library -Copyright (c) 2013 Jake Luer -Copyright (c) 2011 Jake Luer -Copyright (c) 2013 Jake Luer -Copyright (c) 2011-2014 Jake Luer -Copyright (c) 2011-2016 Jake Luer -Copyright (c) 2012-2014 Jake Luer -Copyright (c) 2012-2016 Jake Luer -Copyright (c) 2012-2015 Sakthipriyan Vairamani - -MIT License - -Copyright (c) 2017 Chai.js Assertion Library - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chai-http 4.3.0 - MIT -https://github.com/chaijs/chai-http#readme -Copyright (c) 2013-2014 TJ Holowaychuk -Copyright (c) 2015-2016 Douglas Christopher Wilson -Copyright (c) Jake Luer -Copyright Joyent, Inc. and other Node contributors. -Copyright (c) 2011-2012 Jake Luer - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chalk 2.4.2 - MIT -https://github.com/chalk/chalk#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -check-error 1.0.2 - MIT -https://github.com/chaijs/check-error#readme -Copyright (c) 2012-2016 Jake Luer -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cheerio 1.0.0-rc.3 - MIT -https://github.com/cheeriojs/cheerio#readme -Copyright (c) 2016 Matt Mueller - -MIT License - -Copyright (c) 2016 Matt Mueller - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chokidar 2.1.6 - MIT -https://github.com/paulmillr/chokidar -Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com) & Elan Shanker - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chokidar 1.7.0 - MIT -https://github.com/paulmillr/chokidar -Copyright (c) 2016 Paul Miller (http://paulmillr.com) & Elan Shanker - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chokidar 2.1.8 - MIT -https://github.com/paulmillr/chokidar -Copyright (c) 2012-2019 Paul Miller (https://paulmillr.com) & Elan Shanker - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -class-utils 0.3.6 - MIT -https://github.com/jonschlinkert/class-utils -Copyright (c) 2015, 2017-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015, 2017-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -classnames 2.2.6 - MIT -https://github.com/JedWatson/classnames#readme -Copyright (c) 2017 Jed Watson. - -The MIT License (MIT) - -Copyright (c) 2017 Jed Watson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -clone 2.1.2 - MIT -https://github.com/pvorb/node-clone#readme -Copyright (c) 2011-2015 Paul Vorbach -Copyright (c) 2011-2016 Paul Vorbach (https://paul.vorba.ch/) and contributors (https://github.com/pvorb/clone/graphs/contributors). - -Copyright © 2011-2015 Paul Vorbach - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the “Software”), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -clone 1.0.4 - MIT -https://github.com/pvorb/node-clone#readme -Copyright (c) 2011-2015 Paul Vorbach -Copyright (c) 2011-2015 Paul Vorbach (http://paul.vorba.ch/) and contributors (https://github.com/pvorb/node-clone/graphs/contributors). - -Copyright © 2011-2015 Paul Vorbach - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the “Software”), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -clone-buffer 1.0.0 - MIT -https://github.com/gulpjs/clone-buffer#readme -Copyright (c) 2016 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2016 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -clone-stats 0.0.1 - MIT -https://github.com/hughsk/clone-stats -Copyright (c) 2014 Hugh Kennedy - -## The MIT License (MIT) ## - -Copyright (c) 2014 Hugh Kennedy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -clone-stats 1.0.0 - MIT -https://github.com/hughsk/clone-stats -Copyright (c) 2014 Hugh Kennedy - -## The MIT License (MIT) ## - -Copyright (c) 2014 Hugh Kennedy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cloneable-readable 1.1.3 - MIT -https://github.com/mcollina/cloneable-readable#readme -Copyright (c) 2016 Matteo Collina - -The MIT License (MIT) - -Copyright (c) 2016 Matteo Collina - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -clsx 1.0.4 - MIT -https://github.com/lukeed/clsx#readme -(c) Luke Edwards (https://lukeed.com) -Copyright (c) Luke Edwards (lukeed.com) - -MIT License - -Copyright (c) Luke Edwards (lukeed.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -co 4.6.0 - MIT -https://github.com/tj/co#readme -Copyright (c) 2014 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk <tj@vision-media.ca> - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -code-point-at 1.1.0 - MIT -https://github.com/sindresorhus/code-point-at#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -collection-visit 1.0.0 - MIT -https://github.com/jonschlinkert/collection-visit -Copyright (c) 2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015, 2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color 0.11.4 - MIT -https://github.com/qix-/color#readme -Copyright (c) 2012 Heather Arthur - -Copyright (c) 2012 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color 2.0.1 - MIT -https://github.com/Qix-/color#readme -Copyright (c) 2012 Heather Arthur - -Copyright (c) 2012 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color 1.0.3 - MIT -https://github.com/qix-/color#readme -Copyright (c) 2012 Heather Arthur - -Copyright (c) 2012 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color 3.0.0 - MIT -https://github.com/Qix-/color#readme -Copyright (c) 2012 Heather Arthur - -Copyright (c) 2012 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color-convert 1.9.3 - MIT -https://github.com/Qix-/color-convert#readme -Copyright (c) 2011-2016, Heather Arthur and Josh Junon. -Copyright (c) 2011-2016 Heather Arthur - -Copyright (c) 2011-2016 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color-convert 2.0.1 - MIT -https://github.com/Qix-/color-convert#readme -Copyright (c) 2011-2016, Heather Arthur and Josh Junon. -Copyright (c) 2011-2016 Heather Arthur - -Copyright (c) 2011-2016 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color-name 1.1.3 - MIT -https://github.com/dfcreative/color-name -Copyright (c) 2015 Dmitry Ivanov - -The MIT License (MIT) -Copyright (c) 2015 Dmitry Ivanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color-name 1.1.4 - MIT -https://github.com/colorjs/color-name -Copyright (c) 2015 Dmitry Ivanov - -The MIT License (MIT) -Copyright (c) 2015 Dmitry Ivanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color-string 1.5.3 - MIT -https://github.com/Qix-/color-string#readme -Copyright (c) 2011 Heather Arthur - -Copyright (c) 2011 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -color-string 0.3.0 - MIT -https://github.com/harthur/color-string -Copyright (c) 2011 Heather Arthur - -Copyright (c) 2011 Heather Arthur - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -colornames 1.1.1 - MIT -https://github.com/timoxley/colornames#readme -Copyright (c) 2015 Tim Oxley - -The MIT License (MIT) - -Copyright (c) 2015 Tim Oxley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -colors 1.3.3 - MIT -https://github.com/Marak/colors.js -Copyright (c) Marak Squires -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Original Library - - Copyright (c) Marak Squires - -Additional Functionality - - Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -colorspace 1.1.2 - MIT -https://github.com/3rd-Eden/colorspace -Copyright (c) 2015 Arnout Kazemier, Martijn Swaagman - -The MIT License (MIT) - -Copyright (c) 2015 Arnout Kazemier, Martijn Swaagman, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -combined-stream 1.0.8 - MIT -https://github.com/felixge/node-combined-stream -Copyright (c) 2011 Debuggable Limited - -Copyright (c) 2011 Debuggable Limited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -commander 2.20.0 - MIT -https://github.com/tj/commander.js#readme -Copyright (c) 2011 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2011 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -component-emitter 1.3.0 - MIT -https://github.com/component/emitter#readme -Copyright (c) 2014 Component - -(The MIT License) - -Copyright (c) 2014 Component contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -compressible 2.0.17 - MIT -https://github.com/jshttp/compressible#readme -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Jeremiah Senkpiel -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Jeremiah Senkpiel -Copyright (c) 2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Jeremiah Senkpiel -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -concat-map 0.0.1 - MIT -https://github.com/substack/node-concat-map - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -concat-stream 1.6.2 - MIT -https://github.com/maxogden/concat-stream#readme -Copyright (c) 2013 Max Ogden - -The MIT License - -Copyright (c) 2013 Max Ogden - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -config-chain 1.1.12 - MIT -http://github.com/dominictarr/config-chain -Copyright (c) 2011 Dominic Tarr - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -content-disposition 0.5.3 - MIT -https://github.com/jshttp/content-disposition#readme -Copyright (c) 2014-2017 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -content-type 1.0.4 - MIT -https://github.com/jshttp/content-type#readme -Copyright (c) 2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -convert-source-map 1.7.0 - MIT -https://github.com/thlorenz/convert-source-map -Copyright 2013 Thorsten Lorenz. - -Copyright 2013 Thorsten Lorenz. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -convert-source-map 1.6.0 - MIT -https://github.com/thlorenz/convert-source-map -Copyright 2013 Thorsten Lorenz. - -Copyright 2013 Thorsten Lorenz. -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cookie-signature 1.0.6 - MIT -https://github.com/visionmedia/node-cookie-signature -Copyright (c) 2012 LearnBoost - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cookiejar 2.1.2 - MIT -https://github.com/bmeck/node-cookiejar#readme -Copyright (c) 2013 Bradley Meck - -The MIT License (MIT) -Copyright (c) 2013 Bradley Meck - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cookies 0.8.0 - MIT -https://github.com/pillarjs/cookies#readme -Copyright (c) 2014 Jed Schmidt, http://jed.is -Copyright (c) 2015-2016 Douglas Christopher Wilson -Copyright (c) 2015-2016 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014 Jed Schmidt, http://jed.is/ -Copyright (c) 2015-2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -copy-descriptor 0.1.1 - MIT -https://github.com/jonschlinkert/copy-descriptor -Copyright (c) 2015, Jon Schlinkert. -Copyright (c) 2015-2016, Jon Schlinkert - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -core-js 1.2.7 - MIT -https://github.com/zloirock/core-js#readme -(c) 2016 Denis Pushkarev -Copyright (c) 2015 Denis Pushkarev - -Copyright (c) 2015 Denis Pushkarev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -core-js 2.6.9 - MIT -https://github.com/zloirock/core-js#readme -(c) 2019 Denis Pushkarev -copyright (c) 2019 Denis Pushkarev -Copyright (c) 2014-2019 Denis Pushkarev - -Copyright (c) 2014-2019 Denis Pushkarev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -core-util-is 1.0.2 - MIT -https://github.com/isaacs/core-util-is#readme -Copyright Joyent, Inc. and other Node contributors. - -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -create-react-context 0.3.0 - MIT -https://github.com/thejameskyle/create-react-context#readme -Copyright (c) 2017-present James Kyle - -Copyright (c) 2017-present James Kyle - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cross-env 6.0.3 - MIT -https://github.com/kentcdodds/cross-env#readme -Copyright (c) 2017 Kent C. Dodds - -The MIT License (MIT) -Copyright (c) 2017 Kent C. Dodds - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cross-spawn 5.1.0 - MIT -https://github.com/IndigoUnited/node-cross-spawn#readme -Copyright (c) 2014 IndigoUnited - -Copyright (c) 2014 IndigoUnited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cross-spawn 7.0.1 - MIT -https://github.com/moxystudio/node-cross-spawn -Copyright (c) 2018 Made With MOXY Lda - -The MIT License (MIT) - -Copyright (c) 2018 Made With MOXY Lda - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cross-spawn 6.0.5 - MIT -https://github.com/moxystudio/node-cross-spawn -Copyright (c) 2018 Made With MOXY Lda - -The MIT License (MIT) - -Copyright (c) 2018 Made With MOXY Lda - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -crypto-js 3.3.0 - MIT -http://github.com/brix/crypto-js -(c) 2012 by Cedric Mesnil. -Copyright (c) 2009-2013 Jeff Mott -Copyright (c) 2013-2016 Evan Vosberg - -# License - -[The MIT License (MIT)](http://opensource.org/licenses/MIT) - -Copyright (c) 2009-2013 Jeff Mott -Copyright (c) 2013-2016 Evan Vosberg - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -css-color-function 1.3.3 - MIT -https://github.com/ianstormtaylor/css-color-function#readme -Copyright (c) 2013 Ian Storm Taylor - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -css-unit-converter 1.1.1 - MIT -https://github.com/andyjansson/css-unit-converter -Copyright 2015 Andy Jansson - -The MIT License (MIT) - -Copyright 2015 Andy Jansson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -csstype 2.6.6 - MIT -https://github.com/frenic/csstype#readme -Copyright (c) 2017-2018 Fredrik Nicol - -Copyright (c) 2017-2018 Fredrik Nicol - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -cyclist 0.2.2 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -dashdash 1.14.1 - MIT -https://github.com/trentm/node-dashdash#readme -Copyright 2016 Trent Mick -Copyright 2016 Joyent, Inc. -Copyright (c) 2013 Joyent Inc. -Copyright (c) 2013 Trent Mick. - -# This is the MIT license - -Copyright (c) 2013 Trent Mick. All rights reserved. -Copyright (c) 2013 Joyent Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -debug 4.1.1 - MIT -https://github.com/visionmedia/debug#readme -Copyright (c) 2014 TJ Holowaychuk -Copyright (c) 2014-2017 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -debug 3.2.6 - MIT -https://github.com/visionmedia/debug#readme -Copyright (c) 2014 TJ Holowaychuk -Copyright (c) 2014-2017 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -debug 3.1.0 - MIT -https://github.com/visionmedia/debug#readme -Copyright (c) 2014 TJ Holowaychuk -Copyright (c) 2014-2017 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -debug 2.6.9 - MIT -https://github.com/visionmedia/debug#readme -Copyright (c) 2014 TJ Holowaychuk -Copyright (c) 2014-2016 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -decamelize 1.2.0 - MIT -https://github.com/sindresorhus/decamelize#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -decode-uri-component 0.2.0 - MIT -https://github.com/samverschueren/decode-uri-component#readme -(c) Sam Verschueren (https://github.com/SamVerschueren) -Copyright (c) Sam Verschueren - -The MIT License (MIT) - -Copyright (c) Sam Verschueren (github.com/SamVerschueren) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -decompress-response 4.2.1 - MIT -https://github.com/sindresorhus/decompress-response#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -dedent 0.7.0 - MIT -https://github.com/dmnd/dedent -Copyright (c) 2015 Desmond Brand (dmnd@desmondbrand.com) - -The MIT License (MIT) - -Copyright (c) 2015 Desmond Brand (dmnd@desmondbrand.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -deep-assign 1.0.0 - MIT -https://github.com/sindresorhus/deep-assign#readme -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -deep-diff 0.3.8 - MIT -https://github.com/flitbit/diff#readme -Copyright (c) 2011-2013 Phillip Clark - -Copyright (c) 2011-2013 Phillip Clark - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -deep-eql 3.0.1 - MIT -https://github.com/chaijs/deep-eql#readme -Copyright (c) 2013 -Copyright (c) 2013 Jake Luer -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -deep-equal 1.1.1 - MIT -https://github.com/substack/node-deep-equal#readme -Copyright (c) 2012, 2013, 2014 James Halliday , 2009 Thomas Robinson <280north.com> - -MIT License - -Copyright (c) 2012, 2013, 2014 James Halliday , 2009 Thomas Robinson <280north.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -deep-equal 1.0.1 - MIT -https://github.com/substack/node-deep-equal#readme - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -deep-extend 0.6.0 - MIT -https://github.com/unclechu/node-deep-extend -Copyright (c) 2013-2018 Viacheslav Lotsmanov -Copyright (c) 2013-2018, Viacheslav Lotsmanov - -The MIT License (MIT) - -Copyright (c) 2013-2018, Viacheslav Lotsmanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -deep-is 0.1.3 - MIT -https://github.com/thlorenz/deep-is -Copyright (c) 2009 Thomas Robinson <280north.com> -Copyright (c) 2012 James Halliday -Copyright (c) 2012, 2013 Thorsten Lorenz - -Copyright (c) 2012, 2013 Thorsten Lorenz -Copyright (c) 2012 James Halliday -Copyright (c) 2009 Thomas Robinson <280north.com> - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -default-require-extensions 3.0.0 - MIT -https://github.com/avajs/default-require-extensions#readme -Copyright (c) Node.js contributors, James Talmage - -MIT License - -Copyright (c) Node.js contributors, James Talmage (github.com/jamestalmage) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -define-properties 1.1.3 - MIT -https://github.com/ljharb/define-properties#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (C) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -define-property 1.0.0 - MIT -https://github.com/jonschlinkert/define-property -Copyright (c) 2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015, 2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -define-property 2.0.2 - MIT -https://github.com/jonschlinkert/define-property -Copyright (c) 2015-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -define-property 0.2.5 - MIT -https://github.com/jonschlinkert/define-property -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -delayed-stream 1.0.0 - MIT -https://github.com/felixge/node-delayed-stream -Copyright (c) 2011 Debuggable Limited - -Copyright (c) 2011 Debuggable Limited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -delegates 1.0.0 - MIT -https://github.com/visionmedia/node-delegates#readme -Copyright (c) 2015 TJ Holowaychuk - -Copyright (c) 2015 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -depd 2.0.0 - MIT -https://github.com/dougwilson/nodejs-depd#readme -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2014-2018 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014-2018 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -depd 1.1.2 - MIT -https://github.com/dougwilson/nodejs-depd#readme -Copyright (c) 2014 Douglas Christopher Wilson -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2014-2015 Douglas Christopher Wilson -Copyright (c) 2014-2017 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -destroy 1.0.4 - MIT -https://github.com/stream-utils/destroy -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -detect-file 1.0.0 - MIT -https://github.com/doowb/detect-file -Copyright (c) 2016-2017, Brian Woodward. -Copyright (c) 2017, Brian Woodward (https://github.com/doowb). - -The MIT License (MIT) - -Copyright (c) 2016-2017, Brian Woodward. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -detect-indent 6.0.0 - MIT -https://github.com/sindresorhus/detect-indent#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -detect-newline 2.1.0 - MIT -https://github.com/sindresorhus/detect-newline#readme -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -dfa 1.2.0 - MIT -https://github.com/devongovett/dfa#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -diagnostic-channel 0.2.0 - MIT -https://github.com/Microsoft/node-diagnostic-channel -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -diagnostic-channel-publishers 0.2.1 - MIT -https://github.com/Microsoft/node-diagnostic-channel -Copyright (c) Microsoft Corporation. - - MIT License - - Copyright (c) Microsoft Corporation. All rights reserved. - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -diagnostics 1.1.1 - MIT -https://github.com/bigpipe/diagnostics -Copyright (c) 2015 Arnout Kazemier, Martijn Swaagman - -The MIT License (MIT) - -Copyright (c) 2015 Arnout Kazemier, Martijn Swaagman, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -dom-helpers 3.4.0 - MIT -https://github.com/jquense/dom-helpers#readme -(c) 2010-2015 Thomas Fuchs -Copyright (c) 2015 Jason Quense -Copyright 2013-2014, Facebook, Inc. -Copyright 2014-2015, Facebook, Inc. - -The MIT License (MIT) - -Copyright (c) 2015 Jason Quense - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -dom-serializer 0.1.1 - MIT -https://github.com/cheeriojs/dom-renderer#readme -Copyright (c) 2014 - -License - -(The MIT License) - -Copyright (c) 2014 The cheeriojs contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -dom4 2.1.5 - MIT -https://github.com/WebReflection/dom4 -(c) Andrea Giammarchi -Copyright (c) 2013-2015 by Andrea Giammarchi - -Copyright (C) 2013-2015 by Andrea Giammarchi - @WebReflection - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -duplexer 0.1.1 - MIT -https://github.com/Raynos/duplexer -Copyright (c) 2012 Raynos. - -Copyright (c) 2012 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -duplexify 3.7.1 - MIT -https://github.com/mafintosh/duplexify -Copyright (c) 2014 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ecc-jsbn 0.1.2 - MIT -https://github.com/quartzjer/ecc-jsbn -Copyright (c) 2003-2005 Tom Wu -Copyright (c) 2014 Jeremie Miller - -The MIT License (MIT) - -Copyright (c) 2014 Jeremie Miller - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ee-first 1.1.1 - MIT -https://github.com/jonathanong/ee-first -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -emoji-regex 8.0.0 - MIT -https://mths.be/emoji-regex -Copyright Mathias Bynens - -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -emoji-regex 7.0.3 - MIT -https://mths.be/emoji-regex -Copyright Mathias Bynens - -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -enabled 1.0.2 - MIT -https://github.com/bigpipe/enabled#readme -Copyright (c) 2015 Arnout Kazemier, Martijn Swaagman - -The MIT License (MIT) - -Copyright (c) 2015 Arnout Kazemier, Martijn Swaagman, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -encodeurl 1.0.2 - MIT -https://github.com/pillarjs/encodeurl#readme -Copyright (c) 2016 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -encoding 0.1.12 - MIT -https://github.com/andris9/encoding#readme -Copyright (c) 2012-2014 Andris Reinman - -Copyright (c) 2012-2014 Andris Reinman - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -end-of-stream 1.4.1 - MIT -https://github.com/mafintosh/end-of-stream -Copyright (c) 2014 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -env-variable 0.0.5 - MIT -https://github.com/3rd-Eden/env-variable -Copyright 2014 Arnout Kazemier - -Copyright 2014 Arnout Kazemier - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -errno 0.1.7 - MIT -https://github.com/rvagg/node-errno#readme -Copyright (c) 2012-2015 Rod Vagg (https://github.com/rvagg) ( rvagg (https://twitter.com/rvagg)) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -error-ex 1.3.2 - MIT -https://github.com/qix-/node-error-ex#readme -Copyright (c) 2015 JD Ballard - -The MIT License (MIT) - -Copyright (c) 2015 JD Ballard - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -error-inject 1.0.0 - MIT -https://github.com/node-modules/error-inject - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es-abstract 1.17.0 - MIT -https://github.com/ljharb/es-abstract#readme -(c) Object C -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (C) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es-to-primitive 1.2.0 - MIT -https://github.com/ljharb/es-to-primitive#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es-to-primitive 1.2.1 - MIT -https://github.com/ljharb/es-to-primitive#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es6-iterator 2.0.3 - MIT -https://github.com/medikoo/es6-iterator#readme -Copyright (c) 2013-2017 Mariusz Nowak (www.medikoo.com) - -The MIT License (MIT) - -Copyright (C) 2013-2017 Mariusz Nowak (www.medikoo.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es6-map 0.1.5 - MIT -https://github.com/medikoo/es6-map#readme -Copyright (c) 2013 Mariusz Nowak (www.medikoo.com) - -Copyright (C) 2013 Mariusz Nowak (www.medikoo.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es6-promise 4.2.8 - MIT -https://github.com/stefanpenner/es6-promise -Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors - -Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es6-promisify 5.0.0 - MIT -https://github.com/digitaldesignlabs/es6-promisify#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es6-set 0.1.5 - MIT -https://github.com/medikoo/es6-set#readme -Copyright (c) 2013 Mariusz Nowak (www.medikoo.com) - -Copyright (C) 2013 Mariusz Nowak (www.medikoo.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -es6-symbol 3.1.1 - MIT -https://github.com/medikoo/es6-symbol#readme -Copyright (c) 2013-2015 Mariusz Nowak (www.medikoo.com) - -Copyright (C) 2013-2015 Mariusz Nowak (www.medikoo.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -escape-html 1.0.3 - MIT -https://github.com/component/escape-html -Copyright (c) 2015 Andreas Lubbe -Copyright (c) 2012-2013 TJ Holowaychuk -Copyright (c) 2015 Tiancheng Timothy Gu - -(The MIT License) - -Copyright (c) 2012-2013 TJ Holowaychuk -Copyright (c) 2015 Andreas Lubbe -Copyright (c) 2015 Tiancheng "Timothy" Gu - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -escape-string-regexp 1.0.5 - MIT -https://github.com/sindresorhus/escape-string-regexp -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -eslint-config-prettier 6.9.0 - MIT -https://github.com/prettier/eslint-config-prettier#readme -Copyright (c) 2017, 2018, 2019 Simon Lydell and contributors - -The MIT License (MIT) - -Copyright (c) 2017, 2018, 2019 Simon Lydell and contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -eslint-plugin-prettier 2.7.0 - MIT -https://github.com/prettier/eslint-plugin-prettier#readme -Copyright (c) 2017 Andres Suarez and Teddy Katz - -The MIT License (MIT) -===================== - -Copyright © 2017 Andres Suarez and Teddy Katz - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the “Software”), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -eslint-plugin-prettier 3.1.2 - MIT -https://github.com/prettier/eslint-plugin-prettier#readme -Copyright (c) 2017 Andres Suarez and Teddy Katz - -# The MIT License (MIT) - -Copyright © 2017 Andres Suarez and Teddy Katz - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the “Software”), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -event-emitter 0.3.5 - MIT -https://github.com/medikoo/event-emitter#readme -Copyright (c) 2012-2015 Mariusz Nowak (www.medikoo.com) - -Copyright (C) 2012-2015 Mariusz Nowak (www.medikoo.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -event-stream 3.3.4 - MIT -http://github.com/dominictarr/event-stream -Copyright (c) 2011 Dominic Tarr - -The MIT License (MIT) - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -execa 1.0.0 - MIT -https://github.com/sindresorhus/execa#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -expand-brackets 2.1.4 - MIT -https://github.com/jonschlinkert/expand-brackets -Copyright (c) 2015-2016, Jon Schlinkert -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -expand-tilde 2.0.2 - MIT -https://github.com/jonschlinkert/expand-tilde -Copyright (c) 2015 Jon Schlinkert. -Copyright (c) 2015-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -extend 3.0.2 - MIT -https://github.com/justmoon/node-extend#readme -Copyright (c) 2014 Stefan Thomas - -The MIT License (MIT) - -Copyright (c) 2014 Stefan Thomas - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -extend-shallow 3.0.2 - MIT -https://github.com/jonschlinkert/extend-shallow -Copyright (c) 2014-2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2015, 2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -extend-shallow 2.0.1 - MIT -https://github.com/jonschlinkert/extend-shallow -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2014-2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2014-2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -extglob 2.0.4 - MIT -https://github.com/micromatch/extglob -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -extsprintf 1.3.0 - MIT -https://github.com/davepacheco/node-extsprintf -Copyright (c) 2012, Joyent, Inc. - -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -falafel 2.2.0 - MIT -https://github.com/substack/node-falafel#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fast-deep-equal 2.0.1 - MIT -https://github.com/epoberezkin/fast-deep-equal#readme -Copyright (c) 2017 Evgeny Poberezkin - -MIT License - -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fast-json-stable-stringify 2.0.0 - MIT -https://github.com/epoberezkin/fast-json-stable-stringify - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fast-levenshtein 2.0.6 - MIT -https://github.com/hiddentao/fast-levenshtein#readme -Copyright (c) 2013 Ramesh Nair (http://www.hiddentao.com/) - -(MIT License) - -Copyright (c) 2013 [Ramesh Nair](http://www.hiddentao.com/) - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fast-plist 0.1.2 - MIT -https://github.com/Microsoft/node-fast-plist#readme -Copyright (c) Microsoft Corporation. - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fast-safe-stringify 2.0.6 - MIT -https://github.com/davidmarkclements/fast-safe-stringify#readme -Copyright (c) 2016 David Mark Clements -Copyright (c) 2017 David Mark Clements & Matteo Collina -Copyright (c) 2018 David Mark Clements, Matteo Collina & Ruben Bridgewater - -The MIT License (MIT) - -Copyright (c) 2016 David Mark Clements -Copyright (c) 2017 David Mark Clements & Matteo Collina -Copyright (c) 2018 David Mark Clements, Matteo Collina & Ruben Bridgewater - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fast-xml-parser 3.16.0 - MIT -https://github.com/NaturalIntelligence/fast-xml-parser#readme -Copyright (c) 2017 Amit Kumar Gupta -Copyright 2013 Timothy J Fontaine - -MIT License - -Copyright (c) 2017 Amit Kumar Gupta - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -If you use this library in a public repository then you give us the right to mention your company name and logo in user's list without further permission required, but you can request them to be taken down within 30 days. - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fbjs 0.8.17 - MIT -https://github.com/facebook/fbjs#readme -Copyright 2015-present Facebook. -copyright 2014-2015 Jon Schlinkert -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) 2014-present, Facebook, Inc. -copyright 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. - -MIT License - -Copyright (c) 2013-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fd-slicer 1.1.0 - MIT -https://github.com/andrewrk/node-fd-slicer#readme -Copyright (c) 2014 Andrew Kelley - -Copyright (c) 2014 Andrew Kelley - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation files -(the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fd-slicer 1.0.1 - MIT -Copyright (c) 2014 Andrew Kelley - -Copyright (c) 2014 Andrew Kelley - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation files -(the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fecha 2.3.3 - MIT -https://github.com/taylorhakes/fecha -Copyright (c) 2015 Taylor Hakes - -The MIT License (MIT) - -Copyright (c) 2015 Taylor Hakes - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -figures 2.0.0 - MIT -https://github.com/sindresorhus/figures#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fill-range 4.0.0 - MIT -https://github.com/jonschlinkert/fill-range -Copyright (c) 2014-2017, Jon Schlinkert -Copyright (c) 2014-2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -find-cache-dir 3.2.0 - MIT -https://github.com/avajs/find-cache-dir#readme -Copyright (c) James Talmage - -MIT License - -Copyright (c) James Talmage (github.com/jamestalmage) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -find-up 3.0.0 - MIT -https://github.com/sindresorhus/find-up#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -find-up 4.1.0 - MIT -https://github.com/sindresorhus/find-up#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -findup-sync 3.0.0 - MIT -https://github.com/gulpjs/findup-sync#readme -Copyright (c) 2013-2018 Ben Alman , Blaine Bublitz , and Eric Schoffstall - -The MIT License (MIT) - -Copyright (c) 2013-2018 Ben Alman , Blaine Bublitz , and Eric Schoffstall - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -flatten 1.0.3 - MIT -https://github.com/mk-pmb/flatten-js/#readme -Copyright (c) 2016 Joshua Holbrook - -The MIT License (MIT) - -Copyright (c) 2016 Joshua Holbrook - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -flush-write-stream 1.1.1 - MIT -https://github.com/mafintosh/flush-write-stream -Copyright (c) 2015 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2015 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fontkit 1.8.0 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -for-in 1.0.2 - MIT -https://github.com/jonschlinkert/for-in -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -for-own 1.0.0 - MIT -https://github.com/jonschlinkert/for-own -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2014-2015, 2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2015, 2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -foreach 2.0.5 - MIT -https://github.com/manuelstofer/foreach -Copyright (c) 2013 Manuel Stofer - -The MIT License - -Copyright (c) 2013 Manuel Stofer - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -form-data 2.3.3 - MIT -https://github.com/form-data/form-data#readme -Copyright (c) 2012 Felix Geisendorfer (felix@debuggable.com) and contributors - -Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) and contributors - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -formidable 1.2.1 - MIT -https://github.com/felixge/node-formidable -Copyright (c) 2011 Felix Geisendorfer - -Copyright (C) 2011 Felix Geisendörfer - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -forwarded 0.1.2 - MIT -https://github.com/jshttp/forwarded#readme -Copyright (c) 2014-2017 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fragment-cache 0.2.1 - MIT -https://github.com/jonschlinkert/fragment-cache -Copyright (c) 2016-2017, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2016-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fresh 0.5.2 - MIT -https://github.com/jshttp/fresh#readme -Copyright (c) 2012 TJ Holowaychuk -Copyright (c) 2016-2017 Douglas Christopher Wilson -Copyright (c) 2012 TJ Holowaychuk -Copyright (c) 2016-2017 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2012 TJ Holowaychuk -Copyright (c) 2016-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -from 0.1.7 - MIT -https://github.com/dominictarr/from#readme -Copyright (c) 2011 Dominic Tarr - -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -from2 2.3.0 - MIT -https://github.com/hughsk/from2 -Copyright (c) 2014 Hugh Kennedy - -## The MIT License (MIT) ## - -Copyright (c) 2014 Hugh Kennedy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fromentries 1.2.0 - MIT -https://github.com/feross/fromentries -Copyright (c) Feross Aboukhadijeh -Copyright (c) Feross Aboukhadijeh (http://feross.org). - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs-extra 4.0.3 - MIT -https://github.com/jprichardson/node-fs-extra -Copyright (c) 2011-2017 JP Richardson -Copyright (c) 2011-2017 JP Richardson (https://github.com/jprichardson) -Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors - -(The MIT License) - -Copyright (c) 2011-2017 JP Richardson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files -(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS -OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs-extra 8.1.0 - MIT -https://github.com/jprichardson/node-fs-extra -Copyright (c) 2011-2017 JP Richardson -Copyright (c) 2011-2017 JP Richardson (https://github.com/jprichardson) -Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors - -(The MIT License) - -Copyright (c) 2011-2017 JP Richardson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files -(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS -OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fs-mkdirp-stream 1.0.0 - MIT -https://github.com/gulpjs/fs-mkdirp-stream#readme -Copyright 2010 James Halliday -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors (Originally based on code from node-mkdirp - MIT/X11 license - Copyright 2010 James Halliday) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fsevents 1.2.9 - MIT -https://github.com/strongloop/fsevents -(c) Sindre Sorhus -Copyright (c) 2015 -Copyright (c) 2016 -Copyright Isaac Z. -Copyright (c), Mapbox -Copyright (c) Fork Ltd. -Copyright (c) Fork, Ltd. -(c) 2012-2017 - Fork Ltd. -Copyright 2017 Lovell Fuller -Copyright Isaac Z. Schlueter -Copyright (c) 2016 Zeit, Inc. -Copyright (c) 2011 Dominic Tarr -Copyright (c) 2013, Dominic Tarr -Copyright (c) Isaac Z. Schlueter -Copyright (c) 2015 Calvin Metcalf -Copyright (c) Feross Aboukhadijeh -Copyright (c) 2015, Rebecca Turner -Copyright (c) Microsoft Corporation. -Copyright (c) 2010-2014 Philipp Dunkel -Copyright (c) 2011 Alexander Shtuchkin -Copyright (c) npm, Inc. and Contributors -(c) Sindre Sorhus (http://sindresorhus.com) -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) 2013-2018 Viacheslav Lotsmanov -Copyright (c) 2013-2018, Viacheslav Lotsmanov -Copyright Isaac Z. Schlueter and Contributors -(c) 2014 by Philipp Dunkel -Copyright (c) Isaac Z. Schlueter and Contributors -Copyright 2010 James Halliday (mail@substack.net) -Copyright Joyent, Inc. and other Node contributors. -Copyright (c) 2014, Rebecca Turner -Copyright (c) 2015, Rebecca Turner -Copyright Mathias Bynens -Copyright (c) Feross Aboukhadijeh (http://feross.org) -Copyright (c) 2014 TJ Holowaychuk -Copyright (c) 2015 TJ Holowaychuk -Copyright (c) 2018 Nikita Skovoroda -Copyright (c) 2013 Julian Gruber -Copyright (c) 2014 Nathan Rajlich -Copyright (c) 2014-2017 TJ Holowaychuk -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License ------------ - -Copyright (C) 2010-2014 Philipp Dunkel - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -This software is dual-licensed under the ISC and MIT licenses. -You may use this software under EITHER of the following licenses. - ----------- - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----------- - -Copyright Isaac Z. Schlueter and Contributors -All rights reserved. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -Copyright (c) 2015, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -Copyright (c) 2015, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -(MIT) - -Copyright (c) 2013 Julian Gruber <julian@juliangruber.com> - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -MIT License - -Copyright (c) 2013 Julian Gruber - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright (c) 2014, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -(The MIT License) - -Copyright (c) 2014 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software -and associated documentation files (the 'Software'), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT -LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -The MIT License (MIT) - -Copyright (c) 2013-2018, Viacheslav Lotsmanov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright (c) 2015 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - 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. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - ----- - -This library bundles a version of the `fs.realpath` and `fs.realpathSync` -methods from Node.js v0.10 under the terms of the Node.js MIT license. - -Node's license follows, also included at the header of `old.js` which contains -the licensed code: - - Copyright Joyent, Inc. and other Node contributors. - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - -Copyright (c) 2014, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -Copyright (c) 2014, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -Copyright (c) 2011 Alexander Shtuchkin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -The ISC License - -Copyright (c) npm, Inc. and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -Copyright (c) Fork, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -Copyright (c), Mapbox - -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of node-pre-gyp nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) npm, Inc. and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -# Copyright (c) 2015 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.** - - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -MIT License - -Copyright (c) 2018 Nikita Skovoroda - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -==== - -`String.fromCodePoint` by Mathias Bynens used according to terms of MIT -License, as follows: - - Copyright Mathias Bynens - - Permission is hereby granted, free of charge, to any person obtaining - a copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including - without limitation the rights to use, copy, modify, merge, publish, - distribute, sublicense, and/or sell copies of the Software, and to - permit persons to whom the Software is furnished to do so, subject to - the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -Copyright (c) 2016, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) 2015, Contributors - -Permission to use, copy, modify, and/or distribute this software -for any purpose with or without fee is hereby granted, provided -that the above copyright notice and this permission notice -appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE -LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES -OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, -ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -Copyright (c) 2015, Rebecca Turner - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -The ISC License - -Copyright (c) Isaac Z. Schlueter and Contributors - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR -IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -function-bind 1.1.1 - MIT -https://github.com/Raynos/function-bind -Copyright (c) 2013 Raynos. - -Copyright (c) 2013 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -fuzzy 0.1.3 - MIT -https://github.com/mattyork/fuzzy -Copyright (c) 2012 Matt York -Copyright (c) 2015 Matt York - -Copyright (c) 2012 Matt York - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -get-func-name 2.0.0 - MIT -https://github.com/chaijs/get-func-name#readme -Copyright (c) 2012-2016 Jake Luer -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -get-port 3.2.0 - MIT -https://github.com/sindresorhus/get-port#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -get-stream 3.0.0 - MIT -https://github.com/sindresorhus/get-stream#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -get-value 2.0.6 - MIT -https://github.com/jonschlinkert/get-value -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2014-2016, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -getpass 0.1.7 - MIT -https://github.com/arekinath/node-getpass#readme -Copyright Joyent, Inc. -Copyright 2016, Joyent, Inc. - -Copyright Joyent, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -glob-stream 6.1.0 - MIT -https://github.com/gulpjs/glob-stream#readme -Copyright (c) 2015-2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2015-2017 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -global-modules 1.0.0 - MIT -https://github.com/jonschlinkert/global-modules -Copyright (c) 2015-2017 Jon Schlinkert. -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -global-prefix 1.0.2 - MIT -https://github.com/jonschlinkert/global-prefix -Copyright (c) 2015-2017 Jon Schlinkert. -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -gud 1.0.0 - MIT -https://github.com/jamiebuilds/global-unique-id#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -gulp-cli 2.2.0 - MIT -http://gulpjs.com -Copyright (c) 2014 Jason Jarrett -Copyright (c) 2012 Tyler Kellen, contributors -Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -gulp-untar 0.0.8 - MIT -https://github.com/jmerrifield/gulp-untar#readme -(c) Jon Merrifield (http://www.jmerrifield.com) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -gulp-vinyl-zip 2.1.2 - MIT -https://github.com/joaomoreno/gulp-vinyl-zip - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -har-validator 5.1.3 - MIT -https://github.com/ahmadnassri/node-har-validator -Copyright (c) 2018 Ahmad Nassri - -MIT License - -Copyright (c) 2018 Ahmad Nassri - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has 1.0.3 - MIT -https://github.com/tarruda/has -Copyright (c) 2013 Thiago de Arruda - -Copyright (c) 2013 Thiago de Arruda - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-flag 3.0.0 - MIT -https://github.com/sindresorhus/has-flag#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-flag 4.0.0 - MIT -https://github.com/sindresorhus/has-flag#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-symbols 1.0.1 - MIT -https://github.com/ljharb/has-symbols#readme -Copyright (c) 2016 Jordan Harband - -MIT License - -Copyright (c) 2016 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-symbols 1.0.0 - MIT -https://github.com/ljharb/has-symbols#readme -Copyright (c) 2016 Jordan Harband - -MIT License - -Copyright (c) 2016 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-value 1.0.0 - MIT -https://github.com/jonschlinkert/has-value -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-value 0.3.1 - MIT -https://github.com/jonschlinkert/has-value -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-values 1.0.0 - MIT -https://github.com/jonschlinkert/has-values -Copyright (c) 2014-2017, Jon Schlinkert -Copyright (c) 2014-2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -has-values 0.1.4 - MIT -https://github.com/jonschlinkert/has-values -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -hash-base 3.0.4 - MIT -https://github.com/crypto-browserify/hash-base -Copyright (c) 2016 Kirill Fomichev - -The MIT License (MIT) - -Copyright (c) 2016 Kirill Fomichev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -hash.js 1.1.7 - MIT -https://github.com/indutny/hash.js -Copyright Fedor Indutny, 2014. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -hasha 5.1.0 - MIT -https://github.com/sindresorhus/hasha#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -homedir-polyfill 1.0.3 - MIT -https://github.com/doowb/homedir-polyfill -Copyright (c) 2016 Brian Woodward -Copyright (c) 2016 - 2019, Brian Woodward (https://github.com/doowb). - -The MIT License (MIT) - -Copyright (c) 2016 Brian Woodward - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -html-encoding-sniffer 1.0.2 - MIT -https://github.com/jsdom/html-encoding-sniffer#readme -Copyright (c) 2016 Domenic Denicola - -Copyright © 2016 Domenic Denicola - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -html-escaper 2.0.0 - MIT -https://github.com/WebReflection/html-escaper -Copyright (c) 2017-present by Andrea Giammarchi - -Copyright (C) 2017-present by Andrea Giammarchi - @WebReflection - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -htmlparser2 3.10.1 - MIT -https://github.com/fb55/htmlparser2#readme -Copyright 2010, 2011, Chris Winberry - -Copyright 2010, 2011, Chris Winberry . All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -http-assert 1.4.1 - MIT -https://github.com/jshttp/http-assert#readme -Copyright (c) 2014 - -(The MIT License) - -Copyright (c) 2014 - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -http-basic 8.1.3 - MIT -https://github.com/ForbesLindesay/http-basic#readme -Copyright (c) 2014 Forbes Lindesay - -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -http-errors 1.7.3 - MIT -https://github.com/jshttp/http-errors#readme -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong me@jongleberry.com -Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com - - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com -Copyright (c) 2016 Douglas Christopher Wilson doug@somethingdoug.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -http-proxy-agent 2.1.0 - MIT -https://github.com/TooTallNate/node-http-proxy-agent#readme -Copyright (c) 2013 Nathan Rajlich - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -http-response-object 3.0.2 - MIT -https://github.com/ForbesLindesay/http-response-object#readme -Copyright (c) 2014 Forbes Lindesay - -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -http-signature 1.2.0 - MIT -https://github.com/joyent/node-http-signature/ -Copyright Joyent, Inc. -Copyright 2012 Joyent, Inc. -Copyright 2015 Joyent, Inc. -Copyright (c) 2011 Joyent, Inc. - -Copyright Joyent, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -https-proxy-agent 2.2.4 - MIT -https://github.com/TooTallNate/node-https-proxy-agent#readme -Copyright (c) 2013 Nathan Rajlich - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -humanize-number 0.0.2 - MIT -https://github.com/component/humanize-number - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -iconv-lite 0.4.24 - MIT -https://github.com/ashtuchkin/iconv-lite -Copyright (c) Microsoft Corporation. -Copyright (c) 2011 Alexander Shtuchkin - -Copyright (c) 2011 Alexander Shtuchkin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -iferr 0.1.5 - MIT -https://github.com/shesek/iferr -Copyright (c) 2014 Nadav Ivgi - -The MIT License (MIT) - -Copyright (c) 2014 Nadav Ivgi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -import-cwd 2.1.0 - MIT -https://github.com/sindresorhus/import-cwd#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -import-from 2.1.0 - MIT -https://github.com/sindresorhus/import-from#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -imurmurhash 0.1.4 - MIT -https://github.com/jensyt/imurmurhash-js -Copyright (c) 2013 Gary Court, Jens Taylor - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -indexes-of 1.0.1 - MIT -https://github.com/dominictarr/indexes-of -Copyright (c) 2013 Dominic Tarr - -Copyright (c) 2013 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -interpret 1.2.0 - MIT -https://github.com/gulpjs/interpret#readme -Copyright (c) 2014-2018 Tyler Kellen , Blaine Bublitz , and Eric Schoffstall - -Copyright (c) 2014-2018 Tyler Kellen , Blaine Bublitz , and Eric Schoffstall - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -inversify 4.13.0 - MIT -http://inversify.io -Copyright (c) 2015-2017 Remo H. Jansen -Copyright (c) 2015-2017 Remo H. Jansen (http://www.remojansen.com) - -The MIT License (MIT) - -Copyright (c) 2015-2017 Remo H. Jansen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -invert-kv 1.0.0 - MIT -https://github.com/sindresorhus/invert-kv -(c) Sindre Sorhus (http://sindresorhus.com) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ip 1.1.5 - MIT -https://github.com/indutny/node-ip -Copyright Fedor Indutny, 2012. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ip-regex 2.1.0 - MIT -https://github.com/sindresorhus/ip-regex#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ipaddr.js 1.9.0 - MIT -https://github.com/whitequark/ipaddr.js#readme -Copyright (c) 2011-2017 - -Copyright (C) 2011-2017 whitequark - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-absolute 1.0.0 - MIT -https://github.com/jonschlinkert/is-absolute -Copyright (c) 2009-2014, TJ Holowaychuk -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2009-2014, TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-accessor-descriptor 0.1.6 - MIT -https://github.com/jonschlinkert/is-accessor-descriptor -Copyright (c) 2015, Jon Schlinkert. -Copyright (c) 2015 Jon Schlinkert (https://github.com/jonschlinkert) - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-accessor-descriptor 1.0.0 - MIT -https://github.com/jonschlinkert/is-accessor-descriptor -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-arguments 1.0.4 - MIT -https://github.com/ljharb/is-arguments -Copyright (c) 2014 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-arrayish 0.3.2 - MIT -https://github.com/qix-/node-is-arrayish#readme -Copyright (c) 2015 JD Ballard - -The MIT License (MIT) - -Copyright (c) 2015 JD Ballard - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-arrayish 0.2.1 - MIT -https://github.com/qix-/node-is-arrayish#readme -Copyright (c) 2015 JD Ballard - -The MIT License (MIT) - -Copyright (c) 2015 JD Ballard - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-binary-path 1.0.1 - MIT -https://github.com/sindresorhus/is-binary-path -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-buffer 1.1.6 - MIT -https://github.com/feross/is-buffer#readme -Copyright (c) Feross Aboukhadijeh -Copyright (c) Feross Aboukhadijeh (http://feross.org). - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-callable 1.1.4 - MIT -https://github.com/ljharb/is-callable#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-callable 1.1.5 - MIT -https://github.com/ljharb/is-callable#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-data-descriptor 0.1.4 - MIT -https://github.com/jonschlinkert/is-data-descriptor -Copyright (c) 2015, Jon Schlinkert. -Copyright (c) 2015 Jon Schlinkert (https://github.com/jonschlinkert) - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-data-descriptor 1.0.0 - MIT -https://github.com/jonschlinkert/is-data-descriptor -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-date-object 1.0.1 - MIT -https://github.com/ljharb/is-date-object#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-descriptor 0.1.6 - MIT -https://github.com/jonschlinkert/is-descriptor -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-descriptor 1.0.2 - MIT -https://github.com/jonschlinkert/is-descriptor -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-extendable 1.0.1 - MIT -https://github.com/jonschlinkert/is-extendable -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-extendable 0.1.1 - MIT -https://github.com/jonschlinkert/is-extendable -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-extglob 2.1.1 - MIT -https://github.com/jonschlinkert/is-extglob -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-fullwidth-code-point 1.0.0 - MIT -https://github.com/sindresorhus/is-fullwidth-code-point -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-fullwidth-code-point 2.0.0 - MIT -https://github.com/sindresorhus/is-fullwidth-code-point#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-fullwidth-code-point 3.0.0 - MIT -https://github.com/sindresorhus/is-fullwidth-code-point#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-generator-function 1.0.7 - MIT -https://github.com/ljharb/is-generator-function#readme -Copyright (c) 2014 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-glob 4.0.1 - MIT -https://github.com/micromatch/is-glob -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2019, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-glob 3.1.0 - MIT -https://github.com/jonschlinkert/is-glob -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-ip 2.0.0 - MIT -https://github.com/sindresorhus/is-ip#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-negated-glob 1.0.0 - MIT -https://github.com/jonschlinkert/is-negated-glob -Copyright (c) 2016 Jon Schlinkert -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2016 Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-number 4.0.0 - MIT -https://github.com/jonschlinkert/is-number -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-number 3.0.0 - MIT -https://github.com/jonschlinkert/is-number -Copyright (c) 2014-2016, Jon Schlinkert -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-obj 1.0.1 - MIT -https://github.com/sindresorhus/is-obj#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-path-inside 1.0.1 - MIT -https://github.com/sindresorhus/is-path-inside#readme -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-plain-object 2.0.4 - MIT -https://github.com/jonschlinkert/is-plain-object -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-regex 1.0.4 - MIT -https://github.com/ljharb/is-regex -Copyright (c) 2014 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-regex 1.0.5 - MIT -https://github.com/ljharb/is-regex -Copyright (c) 2014 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-relative 1.0.0 - MIT -https://github.com/jonschlinkert/is-relative -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-retry-allowed 1.1.0 - MIT -https://github.com/floatdrop/is-retry-allowed#readme -(c) Vsevolod Strukchinsky (http://github.com/floatdrop) -Copyright (c) Vsevolod Strukchinsky - -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-stream 1.1.0 - MIT -https://github.com/sindresorhus/is-stream#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-stream 2.0.0 - MIT -https://github.com/sindresorhus/is-stream#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-symbol 1.0.2 - MIT -https://github.com/ljharb/is-symbol#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-typedarray 1.0.0 - MIT -https://github.com/hughsk/is-typedarray - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-unc-path 1.0.0 - MIT -https://github.com/jonschlinkert/is-unc-path -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-utf8 0.2.1 - MIT -https://github.com/wayfind/is-utf8#readme -Copyright (c) 2014 Wei Fanzhe - -The MIT License (MIT) - -Copyright (C) 2014 Wei Fanzhe - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -   -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-valid-glob 1.0.0 - MIT -https://github.com/jonschlinkert/is-valid-glob -Copyright (c) 2015-2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-windows 1.0.2 - MIT -https://github.com/jonschlinkert/is-windows -Copyright (c) 2015-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -is-wsl 1.1.0 - MIT -https://github.com/sindresorhus/is-wsl#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isarray 1.0.0 - MIT -https://github.com/juliangruber/isarray -Copyright (c) 2013 Julian Gruber - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isarray 0.0.1 - MIT -https://github.com/juliangruber/isarray -Copyright (c) 2013 Julian Gruber - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isnumeric 0.2.0 - MIT -http://ilee.co.uk -(c) Lee Crossley (http://ilee.co.uk/) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isobject 2.1.0 - MIT -https://github.com/jonschlinkert/isobject -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isobject 3.0.1 - MIT -https://github.com/jonschlinkert/isobject -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isomorphic-fetch 2.2.1 - MIT -https://github.com/matthew-andrews/isomorphic-fetch/issues -Copyright (c) 2015 Matt Andrews - -The MIT License (MIT) - -Copyright (c) 2015 Matt Andrews - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isort 4.3.21 - MIT -Copyright (c) 2015 Helen Sherwood-Taylor -Copyright (c) 2013 Timothy Edmund Crosley - -The MIT License (MIT) - -Copyright (c) 2013 Timothy Edmund Crosley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -isstream 0.1.2 - MIT -https://github.com/rvagg/isstream -Copyright (c) 2015 Rod Vagg -Copyright (c) 2015 Rod Vagg rvagg (https://twitter.com/rvagg) - -The MIT License (MIT) -===================== - -Copyright (c) 2015 Rod Vagg ---------------------------- - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jest-docblock 21.2.0 - MIT -https://github.com/facebook/jest#readme -Copyright (c) 2014-present, Facebook, Inc. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jest-worker 24.9.0 - MIT -https://github.com/facebook/jest#readme -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jquery 3.4.1 - MIT -https://jquery.com -(c) JS Foundation and other contributors -Copyright JS Foundation and other contributors -Copyright JS Foundation and other contributors, https://js.foundation - -Copyright JS Foundation and other contributors, https://js.foundation/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jquery-ui 1.12.1 - MIT -http://jqueryui.com -Copyright 2011, John Resig -Copyright 2011, The Dojo Foundation -Copyright (c) 2015 Alexander Schmitz -Copyright (c) 2010-2014, The Dojo Foundation -Copyright Software Freedom Conservancy, Inc. -Copyright (c) 2011 John Resig, http://jquery.com -(c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. -Copyright (c) 2009 Thomas Robinson <280north.com> -Copyright 2012 Anton Kovalyov (http://jshint.com) -Copyright jQuery Foundation and other contributors -Copyright Joyent, Inc. and other Node contributors. -Copyright (c) 2002 Douglas Crockford (www.JSLint.com) -Copyright 2012 jQuery Foundation and other contributors -Copyright 2014 jQuery Foundation and other contributors -Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) -Copyright (c) 2013, Brandon Aaron (http://brandon.aaron.sh) -Copyright 2013 jQuery Foundation, Inc. and other contributors -Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors -Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors -Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors -Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors -Copyright jQuery Foundation and other contributors http://jquery.com -Copyright Software Freedom Conservancy, Inc. http://jquery.org/license -Copyright jQuery Foundation and other contributors, https://jquery.org -Copyright 2012 jQuery Foundation and other contributors http://jquery.com -Copyright 2013 jQuery Foundation and other contributors http://jquery.com -Copyright 2014 jQuery Foundation and other contributors http://jquery.com -Copyright 2006 Google Inc. http://code.google.com/p/google-diff-match-patch -Copyright 2007, 2014 jQuery Foundation and other contributors, https://jquery.org - -Copyright jQuery Foundation and other contributors, https://jquery.org/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/jquery-ui - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code contained within the demos directory. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - - -Copyright (c) 2013, Brandon Aaron (http://brandon.aaron.sh) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright (c) 2011 John Resig, http://jquery.com/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright (c) 2011 John Resig, http://jquery.com/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -The MIT License (MIT) - -Copyright (c) 2015 Alexander Schmitz - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -Copyright (c) 2011 John Resig, http://jquery.com/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright 2012 Anton Kovalyov (http://jshint.com) - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -Copyright Software Freedom Conservancy, Inc. -http://jquery.org/license - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -js-tokens 4.0.0 - MIT -https://github.com/lydell/js-tokens#readme -Copyright 2014, 2015, 2016, 2017, 2018 Simon Lydell -Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell - -The MIT License (MIT) - -Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -js-yaml 3.13.1 - MIT -https://github.com/nodeca/js-yaml -Copyright (c) 2011-2015 by Vitaly Puzrin - -(The MIT License) - -Copyright (C) 2011-2015 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jsbn 0.1.1 - MIT -https://github.com/andyperlitch/jsbn#readme -Copyright (c) 2005 Tom Wu -Copyright (c) 2003-2005 Tom Wu -Copyright (c) 2005-2009 Tom Wu - -Licensing ---------- - -This software is covered under the following copyright: - -/* - * Copyright (c) 2003-2005 Tom Wu - * All Rights Reserved. - * - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of this software and associated documentation files (the - * "Software"), to deal in the Software without restriction, including - * without limitation the rights to use, copy, modify, merge, publish, - * distribute, sublicense, and/or sell copies of the Software, and to - * permit persons to whom the Software is furnished to do so, subject to - * the following conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, - * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - * - * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL, - * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER - * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF - * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT - * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - * - * In addition, the following condition applies: - * - * All redistributions must retain an intact copy of this copyright notice - * and disclaimer. - */ - -Address all questions regarding this license to: - - Tom Wu - tjw@cs.Stanford.EDU - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-edm-parser 0.1.2 - MIT -https://github.com/yaxia/json-edm-parser#readme -Copyright (c) 2016 Yang Xia - -The MIT License (MIT) - -Copyright (c) 2016 Yang Xia - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-parse-better-errors 1.0.2 - MIT -https://github.com/zkat/json-parse-better-errors#readme -Copyright 2017 Kat Marchan - -Copyright 2017 Kat Marchán - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-schema-traverse 0.4.1 - MIT -https://github.com/epoberezkin/json-schema-traverse#readme -Copyright (c) 2017 Evgeny Poberezkin - -MIT License - -Copyright (c) 2017 Evgeny Poberezkin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-stable-stringify 1.0.1 - MIT -https://github.com/substack/json-stable-stringify - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-stable-stringify-without-jsonify 1.0.1 - MIT -https://github.com/samn/json-stable-stringify - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-stringify-pretty-compact 2.0.0 - MIT -https://github.com/lydell/json-stringify-pretty-compact#readme -Copyright (c) 2014, 2016, 2017, 2019 Simon Lydell - -The MIT License (MIT) - -Copyright (c) 2014, 2016, 2017, 2019 Simon Lydell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json5 2.1.0 - MIT -http://json5.org/ -Copyright (c) 2012-2018 Aseem Kishore, and others - -MIT License - -Copyright (c) 2012-2018 Aseem Kishore, and [others]. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -[others]: https://github.com/json5/json5/contributors - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jsonc-parser 2.1.0 - MIT -https://github.com/Microsoft/node-jsonc-parser#readme -Copyright (c) Microsoft -Copyright 2018, Microsoft -Copyright (c) Microsoft Corporation. - -The MIT License (MIT) - -Copyright (c) Microsoft - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jsonfile 4.0.0 - MIT -https://github.com/jprichardson/node-jsonfile#readme -Copyright 2012-2016, JP Richardson -Copyright (c) 2012-2015, JP Richardson - -(The MIT License) - -Copyright (c) 2012-2015, JP Richardson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files -(the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, - merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE -WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS -OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, - ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jsonparse 1.3.1 - MIT -https://github.com/creationix/jsonparse#readme -Copyright (c) 2012 Tim Caswell -Copyright (c) 2011-2012 Tim Caswell - -The MIT License - -Copyright (c) 2012 Tim Caswell - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jsonparse 1.2.0 - MIT -https://github.com/creationix/jsonparse -Copyright (c) 2012 Tim Caswell -Copyright (c) 2011-2012 Tim Caswell - -The MIT License - -Copyright (c) 2012 Tim Caswell - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -jsprim 1.4.1 - MIT -https://github.com/joyent/node-jsprim#readme -Copyright (c) 2012, Joyent, Inc. - -Copyright (c) 2012, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -keygrip 1.1.0 - MIT -https://github.com/crypto-utils/keygrip#readme -Copyright (c) 2011-2014 Jed Schmidt -Copyright (c) 2011-2014 Jed Schmidt (http://jedschmidt.com) - -The MIT License (MIT) - -Copyright (c) 2011-2014 Jed Schmidt (http://jedschmidt.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -kind-of 6.0.3 - MIT -https://github.com/jonschlinkert/kind-of -Copyright (c) 2014-2017, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -kind-of 3.2.2 - MIT -https://github.com/jonschlinkert/kind-of -Copyright (c) 2014-2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -kind-of 5.1.0 - MIT -https://github.com/jonschlinkert/kind-of -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -kind-of 4.0.0 - MIT -https://github.com/jonschlinkert/kind-of -Copyright (c) 2014-2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -koa 2.11.0 - MIT -https://github.com/koajs/koa#readme -Copyright (c) 2019 Koa - -(The MIT License) - -Copyright (c) 2019 Koa contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -koa-compose 3.2.1 - MIT -https://github.com/koajs/compose#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -koa-compose 4.1.0 - MIT -https://github.com/koajs/compose#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -koa-compress 3.0.0 - MIT -https://github.com/koajs/compress#readme -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -koa-convert 1.2.0 - MIT -https://github.com/gyson/koa-convert#readme -Copyright (c) 2015 - -The MIT License (MIT) - -Copyright (c) 2015 yunsong - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -koa-is-json 1.0.0 - MIT -https://github.com/koajs/is-json -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -koa-logger 3.2.1 - MIT -https://github.com/koajs/logger#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -kuler 1.0.1 - MIT -https://github.com/3rd-Eden/kuler -Copyright 2014 Arnout Kazemier - -Copyright 2014 Arnout Kazemier - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lazystream 1.0.0 - MIT -https://github.com/jpommerening/node-lazystream -Copyright (c) 2013 J. Pommerening, contributors. - -Copyright (c) 2013 J. Pommerening, contributors. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lcid 1.0.0 - MIT -https://github.com/sindresorhus/lcid -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lead 1.0.0 - MIT -https://github.com/gulpjs/lead#readme -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -levn 0.3.0 - MIT -https://github.com/gkz/levn -Copyright (c) George Zahariev - -Copyright (c) George Zahariev - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -line-by-line 0.1.6 - MIT -https://github.com/Osterjour/line-by-line -Copyright (c) 2012 Markus von der Wehd -Copyright (c) 2012 Markus von der Wehd - - -Copyright (c) 2012 Markus von der Wehd - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the Software -is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -linebreak 1.0.2 - MIT -https://github.com/devongovett/linebreaker -Copyright (c) 1991-2014 Unicode, Inc. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lines-and-columns 1.1.6 - MIT -https://github.com/eventualbuddha/lines-and-columns#readme -Copyright (c) 2015 Brian Donovan - -The MIT License (MIT) - -Copyright (c) 2015 Brian Donovan - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -load-json-file 1.1.0 - MIT -https://github.com/sindresorhus/load-json-file -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -locate-path 5.0.0 - MIT -https://github.com/sindresorhus/locate-path#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -locate-path 3.0.0 - MIT -https://github.com/sindresorhus/locate-path#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lodash 4.17.15 - MIT -https://lodash.com/ -Copyright OpenJS Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lodash-es 4.17.15 - MIT -https://lodash.com/custom-builds -Copyright OpenJS Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -Copyright OpenJS Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lodash.assign 4.2.0 - MIT -https://lodash.com/ -Copyright jQuery Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lodash.escape 4.0.1 - MIT -https://lodash.com/ -Copyright jQuery Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lodash.isplainobject 4.0.6 - MIT -https://lodash.com/ -Copyright jQuery Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lodash.memoize 4.1.2 - MIT -https://lodash.com/ -Copyright jQuery Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lodash.union 4.6.0 - MIT -https://lodash.com/ -Copyright jQuery Foundation and other contributors -Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - -Copyright jQuery Foundation and other contributors - -Based on Underscore.js, copyright Jeremy Ashkenas, -DocumentCloud and Investigative Reporters & Editors - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/lodash/lodash - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code displayed within the prose of the -documentation. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -Files located in the node_modules and vendor directories are externally -maintained libraries used by this software which have their own -licenses; we recommend you read them, as their terms may differ from the -terms above. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -logform 2.1.2 - MIT -https://github.com/winstonjs/logform#readme -Copyright (c) 2017 Charlie Robbins & the Contributors. - -MIT License - -Copyright (c) 2017 Charlie Robbins & the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -loose-envify 1.4.0 - MIT -https://github.com/zertosh/loose-envify -Copyright (c) 2015 Andres Suarez - -The MIT License (MIT) - -Copyright (c) 2015 Andres Suarez - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -lower-case 1.1.4 - MIT -https://github.com/blakeembrey/lower-case -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -The MIT License (MIT) - -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -magic-string 0.22.5 - MIT -https://github.com/rich-harris/magic-string#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -make-dir 3.0.0 - MIT -https://github.com/sindresorhus/make-dir#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -make-dir 1.3.0 - MIT -https://github.com/sindresorhus/make-dir#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -map-cache 0.2.2 - MIT -https://github.com/jonschlinkert/map-cache -Copyright (c) 2015, Jon Schlinkert. -Copyright (c) 2015-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -map-stream 0.1.0 - MIT -http://github.com/dominictarr/map-stream -Copyright (c) 2011 Dominic Tarr - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -map-visit 1.0.0 - MIT -https://github.com/jonschlinkert/map-visit -Copyright (c) 2015-2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -md5.js 1.3.4 - MIT -https://github.com/crypto-browserify/md5.js -Copyright (c) 2016 Kirill Fomichev - -The MIT License (MIT) - -Copyright (c) 2016 Kirill Fomichev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -media-typer 0.3.0 - MIT -https://github.com/jshttp/media-typer -Copyright (c) 2014 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -memoize-one 5.1.1 - MIT -https://github.com/alexreardon/memoize-one#readme -Copyright (c) 2019 Alexander Reardon - -MIT License - -Copyright (c) 2019 Alexander Reardon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -merge-descriptors 1.0.1 - MIT -https://github.com/component/merge-descriptors -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -merge-source-map 1.0.4 - MIT -https://github.com/keik/merge-source-map#readme - -The MIT License (MIT) - -Copyright (c) keik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -merge-stream 2.0.0 - MIT -https://github.com/grncdr/merge-stream#readme -Copyright (c) Stephen Sugden (stephensugden.com) - -The MIT License (MIT) - -Copyright (c) Stephen Sugden (stephensugden.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -methods 1.1.2 - MIT -https://github.com/jshttp/methods -Copyright (c) 2013-2014 TJ Holowaychuk -Copyright (c) 2015-2016 Douglas Christopher Wilson -Copyright (c) 2013-2014 TJ Holowaychuk -Copyright (c) 2015-2016 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2013-2014 TJ Holowaychuk -Copyright (c) 2015-2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -micromatch 2.3.11 - MIT -https://github.com/jonschlinkert/micromatch -Copyright (c) 2014-2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2014-2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -micromatch 3.1.10 - MIT -https://github.com/micromatch/micromatch -Copyright (c) 2014-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mime 1.6.0 - MIT -https://github.com/broofa/node-mime#readme -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -The MIT License (MIT) - -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mime 2.4.4 - MIT -https://github.com/broofa/node-mime#readme -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -The MIT License (MIT) - -Copyright (c) 2010 Benjamin Thomas, Robert Kieffer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mime-db 1.40.0 - MIT -https://github.com/jshttp/mime-db#readme -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mime-types 2.1.24 - MIT -https://github.com/jshttp/mime-types#readme -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mimic-fn 1.2.0 - MIT -https://github.com/sindresorhus/mimic-fn#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mimic-response 2.0.0 - MIT -https://github.com/sindresorhus/mimic-response#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minimist 0.0.8 - MIT -https://github.com/substack/minimist - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minimist 1.2.0 - MIT -https://github.com/substack/minimist - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minizlib 1.3.3 - MIT -https://github.com/isaacs/minizlib#readme -Copyright Isaac Z. Schlueter and Contributors -Copyright Joyent, Inc. and other Node contributors. - -Minizlib was created by Isaac Z. Schlueter. -It is a derivative work of the Node.js project. - -""" -Copyright Isaac Z. Schlueter and Contributors -Copyright Node.js contributors. All rights reserved. -Copyright Joyent, Inc. and other Node contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -""" - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -minizlib 1.2.1 - MIT -https://github.com/isaacs/minizlib#readme -Copyright Isaac Z. Schlueter and Contributors -Copyright Joyent, Inc. and other Node contributors. - -Minizlib was created by Isaac Z. Schlueter. -It is a derivative work of the Node.js project. - -""" -Copyright Isaac Z. Schlueter and Contributors -Copyright Node.js contributors. All rights reserved. -Copyright Joyent, Inc. and other Node contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -""" - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mixin-deep 1.3.2 - MIT -https://github.com/jonschlinkert/mixin-deep -Copyright (c) 2014-2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2015, 2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -mkdirp 0.5.1 - MIT -https://github.com/substack/node-mkdirp#readme -Copyright 2010 James Halliday (mail@substack.net) - -Copyright 2010 James Halliday (mail@substack.net) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -moment 2.24.0 - MIT -http://momentjs.com -Copyright (c) JS Foundation and other contributors - -Copyright (c) JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -monaco-editor 0.18.1 - MIT -https://github.com/Microsoft/monaco-editor#readme -Copyright (c) 2015 -Copyright (c) Joshaven Potter -Copyright (c) 2014 Taylor Hakes -Copyright (c) Artyom Shalkhakov. -Copyright (c) 2015 David Owens II -Copyright (c) 2014 Forbes Lindesay -Copyright (c) 2015 Nicolas Bevacqua -Copyright (c) Microsoft Corporation. -Copyright (c) 2008 Microsoft Corporation -Copyright (c) David Owens II, owensd.io. -Copyright Drifty Co. http://drifty.com/. -Copyright (c) 2016 - present Microsoft Corporation -Copyright Joyent, Inc. and other Node contributors. -Copyright (c) 2007-2017 Einar Lielmanis, Liam Newman, and contributors. -Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. -Copyright (c) 2011-2014, Christopher Jeffrey (https://github.com/chjj/) -Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) https://github.com/markedjs/marked - -The MIT License (MIT) - -Copyright (c) 2016 - present Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -monaco-editor-textmate 2.2.1 - MIT -https://github.com/NeekSandhu/monaco-editor-textmate#readme -Copyright (c) 2018 Neek Sandhu - -The MIT License (MIT) - -Copyright (c) 2018 Neek Sandhu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -monaco-textmate 3.0.1 - MIT -https://github.com/NeekSandhu/monaco-textmate#readme -Copyright (c) Microsoft Corporation. - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ms 2.0.0 - MIT -https://github.com/zeit/ms#readme -Copyright (c) 2016 Zeit, Inc. - -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ms 2.1.1 - MIT -https://github.com/zeit/ms#readme -Copyright (c) 2016 Zeit, Inc. - -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ms 2.1.2 - MIT -https://github.com/zeit/ms#readme -Copyright (c) 2016 Zeit, Inc. - -The MIT License (MIT) - -Copyright (c) 2016 Zeit, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -named-js-regexp 1.3.5 - MIT -https://github.com/edvinv/named-js-regexp#readme -Copyright (c) 2015 - -The MIT License - -Copyright (c) 2015, @edvinv - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nan 2.14.0 - MIT -https://github.com/nodejs/nan#readme -Copyright (c) 2018 NAN WG Members -Copyright (c) 2018 NAN contributors -Copyright Joyent, Inc. and other Node contributors. -Copyright (c) 2018 NAN contributors - Rod Vagg - -The MIT License (MIT) -===================== - -Copyright (c) 2018 NAN contributors ------------------------------------ - -*NAN contributors listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nanomatch 1.2.13 - MIT -https://github.com/micromatch/nanomatch -Copyright (c) 2016-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2016-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -needle 2.3.0 - MIT -https://github.com/tomas/needle#readme -Copyright (c) Fork Ltd. -Copyright (c) Fork, Ltd. -(c) 2012-2017 - Fork Ltd. - -Copyright (c) Fork, Ltd. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -negotiator 0.6.2 - MIT -https://github.com/jshttp/negotiator#readme -Copyright (c) 2012 Federico Romero -Copyright (c) 2014 Federico Romero -Copyright (c) 2012 Isaac Z. Schlueter -Copyright (c) 2012-2014 Federico Romero -Copyright (c) 2012-2014 Isaac Z. Schlueter -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2014-2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2012-2014 Federico Romero -Copyright (c) 2012-2014 Isaac Z. Schlueter -Copyright (c) 2014-2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -next-tick 1.0.0 - MIT -https://github.com/medikoo/next-tick#readme -Copyright (c) 2012-2016 Mariusz Nowak - -The MIT License - -Copyright (C) 2012-2016 Mariusz Nowak - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nice-try 1.0.5 - MIT -https://github.com/electerious/nice-try -Copyright (c) 2018 Tobias Reich - -The MIT License (MIT) - -Copyright (c) 2018 Tobias Reich - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -no-case 2.3.2 - MIT -https://github.com/blakeembrey/no-case -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -The MIT License (MIT) - -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -node-fetch 2.6.0 - MIT -https://github.com/bitinn/node-fetch -Copyright (c) 2016 David Frank - -The MIT License (MIT) - -Copyright (c) 2016 David Frank - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -node-fetch 1.7.3 - MIT -https://github.com/bitinn/node-fetch -Copyright (c) 2016 David Frank - -The MIT License (MIT) - -Copyright (c) 2016 David Frank - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -node-gyp-build 4.2.1 - MIT -https://github.com/prebuild/node-gyp-build -Copyright (c) 2017 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2017 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -node-preload 0.2.1 - MIT -https://github.com/cfware/node-preload#readme -Copyright (c) 2019 CFWare, LLC - -MIT License - -Copyright (c) 2019 CFWare, LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -node-stream-zip 1.8.2 - MIT -https://github.com/antelle/node-stream-zip -Copyright (c) 2015 Antelle https://github.com/antelle -(c) 2015 Antelle https://github.com/antelle/node-stream-zip/blob/master/LICENSE -Copyright (c) 2012 Another-D-Mention Software and other contributors, http://www.another-d-mention.ro -Portions copyright https://github.com/cthackers/adm-zip https://raw.githubusercontent.com/cthackers/adm-zip/master/LICENSE - -Copyright (c) 2015 Antelle https://github.com/antelle - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -== dependency license: adm-zip == - -Copyright (c) 2012 Another-D-Mention Software and other contributors, -http://www.another-d-mention.ro/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -normalize-path 2.1.1 - MIT -https://github.com/jonschlinkert/normalize-path -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -normalize-path 3.0.0 - MIT -https://github.com/jonschlinkert/normalize-path -Copyright (c) 2014-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -normalize-range 0.1.2 - MIT -https://github.com/jamestalmage/normalize-range#readme -Copyright (c) James Talmage -(c) James Talmage (http://github.com/jamestalmage) - -The MIT License (MIT) - -Copyright (c) James Talmage (github.com/jamestalmage) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -normalize.css 8.0.1 - MIT -https://necolas.github.io/normalize.css -Copyright (c) Nicolas Gallagher and Jonathan Neal - -# The MIT License (MIT) - -Copyright © Nicolas Gallagher and Jonathan Neal - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -now-and-later 2.0.1 - MIT -https://github.com/gulpjs/now-and-later#readme -Copyright (c) 2014 Blaine Bublitz, Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2014 Blaine Bublitz, Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -npm-run-path 2.0.2 - MIT -https://github.com/sindresorhus/npm-run-path#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -num2fraction 1.2.2 - MIT -https://github.com/yisibl/num2fraction#readme -Copyright (c) 2014 PostCSS - -The MIT License (MIT) - -Copyright (c) 2014 PostCSS - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -number-is-nan 1.0.1 - MIT -https://github.com/sindresorhus/number-is-nan#readme -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -nwsapi 2.1.4 - MIT -http://javascript.nwbox.com/nwsapi/ -Copyright (c) 2007-2017 Diego Perini -Copyright (c) 2007-2019 Diego Perini -Copyright (c) 2007-2019 Diego Perini (http://www.iport.it/) - -Copyright (c) 2007-2019 Diego Perini (http://www.iport.it/) - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object-assign 4.1.1 - MIT -https://github.com/sindresorhus/object-assign#readme -(c) Sindre Sorhus -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object-copy 0.1.0 - MIT -https://github.com/jonschlinkert/object-copy -Copyright (c) 2016, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object-inspect 1.7.0 - MIT -https://github.com/substack/object-inspect -Copyright (c) 2013 James Halliday - -MIT License - -Copyright (c) 2013 James Halliday - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object-inspect 1.4.1 - MIT -https://github.com/substack/object-inspect -Copyright Joyent, Inc. and other Node contributors. - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object-keys 1.1.1 - MIT -https://github.com/ljharb/object-keys#readme -Copyright (c) 2013 Jordan Harband - -The MIT License (MIT) - -Copyright (C) 2013 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object-visit 1.0.1 - MIT -https://github.com/jonschlinkert/object-visit -Copyright (c) 2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015, 2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object.assign 4.1.0 - MIT -https://github.com/ljharb/object.assign#readme -Copyright (c) 2014 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object.getownpropertydescriptors 2.0.3 - MIT -https://github.com/ljharb/object.getownpropertydescriptors#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -object.pick 1.3.0 - MIT -https://github.com/jonschlinkert/object.pick -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2014-2015 Jon Schlinkert, contributors. -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -on-finished 2.3.0 - MIT -https://github.com/jshttp/on-finished -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Douglas Christopher Wilson -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2013 Jonathan Ong -Copyright (c) 2014 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -one-time 0.0.4 - MIT -https://github.com/unshiftio/one-time -Copyright (c) 2015 Unshift.io, Arnout Kazemier - -The MIT License (MIT) - -Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -onigasm 2.2.2 - MIT -https://github.com/NeekSandhu/onigasm#readme -Copyright (c) 2018 Neek Sandhu - -The MIT License (MIT) - -Copyright (c) 2018 Neek Sandhu - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -only 0.0.2 - MIT -Copyright (c) 2012 TJ Holowaychuk - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -optionator 0.8.2 - MIT -https://github.com/gkz/optionator -Copyright (c) George Zahariev - -Copyright (c) George Zahariev - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ordered-read-streams 1.0.1 - MIT -https://github.com/armed/ordered-read-streams#readme -Copyright (c) 2014 Artem Medeusheyev - -The MIT License (MIT) - -Copyright (c) 2014 Artem Medeusheyev - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -os-homedir 1.0.2 - MIT -https://github.com/sindresorhus/os-homedir#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -os-locale 1.4.0 - MIT -https://github.com/sindresorhus/os-locale -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -os-tmpdir 1.0.2 - MIT -https://github.com/sindresorhus/os-tmpdir#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -p-limit 2.2.0 - MIT -https://github.com/sindresorhus/p-limit#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -p-locate 4.1.0 - MIT -https://github.com/sindresorhus/p-locate#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -p-locate 3.0.0 - MIT -https://github.com/sindresorhus/p-locate#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -p-map 3.0.0 - MIT -https://github.com/sindresorhus/p-map#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -p-try 2.2.0 - MIT -https://github.com/sindresorhus/p-try#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pako 0.2.9 - MIT -https://github.com/nodeca/pako -Copyright (c) 2014-2016 by Vitaly Puzrin - -(The MIT License) - -Copyright (C) 2014-2016 by Vitaly Puzrin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -parallel-transform 1.1.0 - MIT -https://github.com/mafintosh/parallel-transform -Copyright 2013 Mathias Buus - -Copyright 2013 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -parse-json 2.2.0 - MIT -https://github.com/sindresorhus/parse-json -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -parse-passwd 1.0.0 - MIT -https://github.com/doowb/parse-passwd -Copyright (c) 2016 Brian Woodward -Copyright (c) 2016, Brian Woodward (https://github.com/doowb). - -The MIT License (MIT) - -Copyright (c) 2016 Brian Woodward - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -parse5 3.0.3 - MIT -https://github.com/inikulin/parse5 -Copyright (c) 2013-2016 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) - -Copyright (c) 2013-2016 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -parseurl 1.3.3 - MIT -https://github.com/pillarjs/parseurl#readme -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2017 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2017 Douglas Christopher Wilson - - -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pascalcase 0.1.1 - MIT -https://github.com/jonschlinkert/pascalcase -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -passthrough-counter 1.0.0 - MIT -https://github.com/stream-utils/passthrough-counter -Copyright (c) 2013 Jonathan Ong me@jongleberry.com -Copyright (c) year Jonathan Ong me@jongleberry.com - -The MIT License (MIT) - -Copyright (c) {{year}} Jonathan Ong me@jongleberry.com - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-dirname 1.0.2 - MIT -https://github.com/es128/path-dirname#readme -Copyright (c) Elan Shanker and Node.js contributors. - - -The MIT License (MIT) - -Copyright (c) Elan Shanker and Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-exists 4.0.0 - MIT -https://github.com/sindresorhus/path-exists#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-exists 3.0.0 - MIT -https://github.com/sindresorhus/path-exists#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-is-absolute 1.0.1 - MIT -https://github.com/sindresorhus/path-is-absolute#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-key 3.1.1 - MIT -https://github.com/sindresorhus/path-key#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-key 2.0.1 - MIT -https://github.com/sindresorhus/path-key#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-parse 1.0.6 - MIT -https://github.com/jbgutierrez/path-parse#readme -Copyright (c) 2015 Javier Blanco -(c) Javier Blanco (http://jbgutierrez.info) - -The MIT License (MIT) - -Copyright (c) 2015 Javier Blanco - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-to-regexp 1.8.0 - MIT -https://github.com/pillarjs/path-to-regexp#readme -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -The MIT License (MIT) - -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pathval 1.1.0 - MIT -https://github.com/chaijs/pathval -Copyright (c) 2011-2013 Jake Luer jake@alogicalparadox.com -Copyright (c) 2012-2014 Jake Luer - -MIT License - -Copyright (c) 2011-2013 Jake Luer jake@alogicalparadox.com - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated -documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial -portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO -THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pdfkit 0.11.0 - MIT -http://pdfkit.org/ -(c) 2012 by Cedric Mesnil. -Copyright 2013 Google Inc. -Copyright (c) 2011 Devon Govett -Copyright (c) 2014 Devon Govett -copyright (c) 2019 Denis Pushkarev -Copyright (c) 2014-present, Facebook, Inc. -(c) 1995-2013 Jean-loup Gailly and Mark Adler -(c) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -Copyright (c) 2009 Thomas Robinson <280north.com> -Copyright Joyent, Inc. and other Node contributors. -Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. -Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. -Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. -Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. -Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. - -MIT LICENSE -Copyright (c) 2014 Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pend 1.2.0 - MIT -Copyright (c) 2014 Andrew Kelley - -The MIT License (Expat) - -Copyright (c) 2014 Andrew Kelley - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation files -(the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -performance-now 0.2.0 - MIT -https://github.com/meryn/performance-now -Copyright (c) 2013 Meryn Stol - -Copyright (c) 2013 Meryn Stol - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -performance-now 2.1.0 - MIT -https://github.com/braveg1rl/performance-now -Copyright (c) 2013 Braveg1rl -Copyright (c) 2017 Braveg1rl - -Copyright (c) 2013 Braveg1rl - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pidusage 1.2.0 - MIT -https://github.com/soyuka/pidusage -Copyright (c) 2014 - -The MIT License (MIT) - -Copyright (c) 2014 soyuka - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pify 2.3.0 - MIT -https://github.com/sindresorhus/pify -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pify 3.0.0 - MIT -https://github.com/sindresorhus/pify#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pinkie 2.0.4 - MIT -(c) Vsevolod Strukchinsky (http://github.com/floatdrop) -Copyright (c) Vsevolod Strukchinsky - -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pinkie-promise 2.0.1 - MIT -https://github.com/floatdrop/pinkie-promise -(c) Vsevolod Strukchinsky (http://github.com/floatdrop) -Copyright (c) Vsevolod Strukchinsky - -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky (github.com/floatdrop) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pixrem 4.0.1 - MIT -https://github.com/robwierzbowski/node-pixrem -Copyright (c) 2013 Robert Wierzbowski, contributors - -Copyright (c) 2013 Robert Wierzbowski, contributors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pkg-dir 4.2.0 - MIT -https://github.com/sindresorhus/pkg-dir#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pleeease-filters 4.0.0 - MIT -https://github.com/iamvdo/pleeease-filters#readme -Copyright (c) 2012 - 2013 Christian Schepp Schaefer -(c) 2014 Vincent De Oliveira · iamvdo (https://github.com/iamvdo) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -plotly.js-dist 1.51.1 - MIT -https://github.com/plotly/plotly.js#readme -(c) Sindre Sorhus -Copyright 2018 Mike Bostock -copyright 2019 Plotly, Inc. -Copyright 2016 Mike Bostock. -Copyright 2017 Mike Bostock. -Copyright 2019 Mike Bostock. -Copyright (c) 2011 Google Inc. -Copyright (c) 2019 Plotly, Inc -Copyright 2012-2019, Plotly, Inc. -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2009 Thomas Robinson <280north.com> -Copyright Joyent, Inc. and other Node contributors. -copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc -Copyright (c) 2010-2013 Arthur Clemens, arthur@visiblearea.com -(c) Copyright 2016, Sean Connelly (@voidqk), http://syntheti.cc -(c) Copyright 2017, Sean Connelly (@voidqk), http://syntheti.cc -Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors - -The MIT License (MIT) - -Copyright (c) 2019 Plotly, Inc - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pn 1.1.0 - MIT -https://github.com/cscott/node-pn#readme -Copyright (c) 2014-2018 C. Scott Ananian - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -png-js 1.0.0 - MIT -https://github.com/devongovett/png.js#readme -Copyright (c) 2011 Devon Govett -Copyright (c) 2017 Devon Govett -Copyright (c) 2011 Mozilla Foundation - -MIT License - -Copyright (c) 2017 Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -popper.js 1.16.0 - MIT -https://popper.js.org/ -copyright 2016 Federico Zivolo -Copyright (c) Federico Zivolo 2019 -Copyright (c) 2016 Federico Zivolo and contributors - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -portfinder 1.0.25 - MIT -https://github.com/indexzero/node-portfinder#readme -(c) 2011, Charlie Robbins -Copyright (c) 2012 Charlie Robbins - -node-portfinder - -Copyright (c) 2012 Charlie Robbins - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -posix-character-classes 0.1.1 - MIT -https://github.com/jonschlinkert/posix-character-classes -Copyright (c) 2016-2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2016-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss 6.0.23 - MIT -https://postcss.org/ -Copyright 2013 Andrey Sitnik - -The MIT License (MIT) - -Copyright 2013 Andrey Sitnik - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-attribute-case-insensitive 2.0.0 - MIT -https://github.com/Semigradsky/postcss-attribute-case-insensitive#readme -Copyright 2016 Dmitry Semigradsky - -The MIT License (MIT) - -Copyright 2016 Dmitry Semigradsky - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-calc 6.0.2 - MIT -https://github.com/postcss/postcss-calc#readme -Copyright (c) 2014 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-function 4.1.0 - MIT -https://github.com/postcss/postcss-color-function#readme -Copyright (c) 2017 Maxime Thirouin & Ian Storm Taylor - -The MIT License (MIT) - -Copyright (c) 2017 Maxime Thirouin & Ian Storm Taylor - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-hex-alpha 3.0.0 - MIT -https://github.com/postcss/postcss-color-hex-alpha#readme -Copyright (c) 2014 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-hsl 2.0.0 - MIT -https://github.com/dmarchena/postcss-color-hsl -Copyright (c) 2016 David Marchena - -MIT License - -Copyright (c) 2016 David Marchena - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-hwb 3.0.0 - MIT -https://github.com/postcss/postcss-color-hwb#readme -Copyright (c) 2014 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-rebeccapurple 3.1.0 - MIT -https://github.com/postcss/postcss-color-rebeccapurple#readme -Copyright (c) 2014 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-rgb 2.0.0 - MIT -https://github.com/dmarchena/postcss-color-rgb -Copyright 2016 David Marchena - -The MIT License (MIT) - -Copyright 2016 David Marchena - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-color-rgba-fallback 3.0.0 - MIT -https://github.com/postcss/postcss-color-rgba-fallback#readme -Copyright (c) 2015 Guillaume Demesy - -The MIT License (MIT) - -Copyright (c) 2015 Guillaume Démésy - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-cssnext 3.1.0 - MIT -http://cssnext.io/ -Copyright (c) 2014 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-custom-media 6.0.0 - MIT -https://github.com/postcss/postcss-custom-media#readme -Copyright (c) 2017 Maxime Thirouin & Nicolas Gallagher - -The MIT License (MIT) - -Copyright (c) 2017 Maxime Thirouin & Nicolas Gallagher - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-custom-properties 6.3.1 - MIT -https://github.com/postcss/postcss-custom-properties#readme -Copyright (c) 2017 Maxime Thirouin, Nicolas Gallagher & TJ Holowaychuk - -The MIT License (MIT) - -Copyright (c) 2017 Maxime Thirouin, Nicolas Gallagher & TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-custom-selectors 4.0.1 - MIT -https://github.com/postcss/postcss-custom-selectors#readme -Copyright (c) 2017 PostCSS - -The MIT License (MIT) - -Copyright (c) 2017 PostCSS - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-font-variant 3.0.0 - MIT -https://github.com/postcss/postcss-font-variant#readme -Copyright (c) 2014 Maxime Thirouin & Ian Storm Taylor - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin & Ian Storm Taylor - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-image-set-polyfill 0.3.5 - MIT -https://github.com/SuperOl3g/postcss-image-set-polyfill#readme -Copyright 2015 Alex - -The MIT License (MIT) - -Copyright 2015 Alex - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-import 12.0.1 - MIT -https://github.com/postcss/postcss-import#readme -Copyright (c) Maxime Thirouin, Jason Campbell & Kevin Martensson - -The MIT License (MIT) - -Copyright (c) Maxime Thirouin, Jason Campbell & Kevin Mårtensson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-initial 2.0.0 - MIT -https://github.com/maximkoretskiy/postcss-initial#readme -Copyright 2015 Maksim Koretskiy - -The MIT License (MIT) - -Copyright 2015 Maksim Koretskiy - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-load-config 2.1.0 - MIT -https://github.com/michael-ciniawsky/postcss-load-config#readme -Copyright (c) Michael Ciniawsky - -License (MIT) - -Copyright (c) Michael Ciniawsky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-loader 3.0.0 - MIT -https://github.com/postcss/postcss-loader#readme -Copyright 2017 Andrey Sitnik - -License (MIT) - -Copyright 2017 Andrey Sitnik - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-media-minmax 3.0.0 - MIT -https://github.com/postcss/postcss-media-minmax#readme -Copyright (c) 2014 PostCSS - -The MIT License (MIT) - -Copyright (c) 2014 PostCSS - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-media-query-parser 0.2.3 - MIT -https://github.com/dryoma/postcss-media-query-parser - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-message-helpers 2.0.0 - MIT -https://github.com/MoOx/postcss-message-helpers -Copyright (c) 2014 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-pseudoelements 5.0.0 - MIT -https://github.com/axa-ch/postcss-pseudoelements - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-replace-overflow-wrap 2.0.0 - MIT -https://github.com/MattDiMu/postcss-replace-overflow-wrap -Copyright 2016 Matthias Muller - -The MIT License (MIT) - -Copyright 2016 Matthias Müller - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-selector-matches 3.0.1 - MIT -https://github.com/postcss/postcss-selector-matches#readme -Copyright (c) 2017 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2017 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-selector-not 3.0.1 - MIT -https://github.com/postcss/postcss-selector-not#readme -Copyright (c) 2017 Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) 2017 Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-selector-parser 2.2.3 - MIT -https://github.com/postcss/postcss-selector-parser -Copyright (c) Ben Briggs (http://beneb.info) - -Copyright (c) Ben Briggs (http://beneb.info) - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-values-parser 1.5.0 - MIT -https://github.com/lesshint/postcss-values-parser#readme -Copyright (c) Andrew Powell - -Copyright (c) Andrew Powell - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -prelude-ls 1.1.2 - MIT -http://preludels.com -Copyright (c) George Zahariev - -Copyright (c) George Zahariev - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -prettier-linter-helpers 1.0.0 - MIT -https://github.com/prettier/prettier-linter-helpers#readme -Copyright (c) 2017 Andres Suarez and Teddy Katz - -# The MIT License (MIT) - -Copyright © 2017 Andres Suarez and Teddy Katz - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the “Software”), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pretty-format 24.9.0 - MIT -https://github.com/facebook/jest#readme -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -process-nextick-args 2.0.0 - MIT -https://github.com/calvinmetcalf/process-nextick-args -Copyright (c) 2015 Calvin Metcalf - -# Copyright (c) 2015 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.** - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -process-nextick-args 2.0.1 - MIT -https://github.com/calvinmetcalf/process-nextick-args -Copyright (c) 2015 Calvin Metcalf - -# Copyright (c) 2015 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.** - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -process-nextick-args 1.0.7 - MIT -https://github.com/calvinmetcalf/process-nextick-args -Copyright (c) 2015 Calvin Metcalf - -# Copyright (c) 2015 Calvin Metcalf - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -**THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.** - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -process-on-spawn 1.0.0 - MIT -https://github.com/cfware/process-on-spawn#readme -Copyright (c) 2019 CFWare, LLC - -MIT License - -Copyright (c) 2019 CFWare, LLC - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -promise 7.3.1 - MIT -https://github.com/then/promise#readme -Copyright (c) 2014 Forbes Lindesay - -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -promise 8.0.3 - MIT -https://github.com/then/promise#readme -Copyright (c) 2014 Forbes Lindesay - -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -prop-types 15.7.2 - MIT -https://facebook.github.io/react/ -(c) Sindre Sorhus -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) 2013-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -proxy-addr 2.0.5 - MIT -https://github.com/jshttp/proxy-addr#readme -Copyright (c) 2014-2016 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014-2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -prr 1.0.1 - MIT -https://github.com/rvagg/prr -Copyright (c) 2014 Rod Vagg -(c) 2013 Rod Vagg https://github.com/rvagg/prr -Copyright (c) 2013 Rod Vagg rvagg (https://twitter.com/rvagg) - -The MIT License (MIT) -===================== - -Copyright (c) 2014 Rod Vagg ---------------------------- - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -psl 1.2.0 - MIT -https://github.com/lupomontero/psl#readme -Copyright (c) 2017 Lupo Montero lupomontero@gmail.com -Copyright (c) 2017 Lupo Montero - -The MIT License (MIT) - -Copyright (c) 2017 Lupo Montero lupomontero@gmail.com - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pump 2.0.1 - MIT -https://github.com/mafintosh/pump#readme -Copyright (c) 2014 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pump 3.0.0 - MIT -https://github.com/mafintosh/pump#readme -Copyright (c) 2014 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pumpify 1.5.1 - MIT -https://github.com/mafintosh/pumpify -Copyright (c) 2014 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2014 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -punycode 1.4.1 - MIT -https://mths.be/punycode -Copyright Mathias Bynens - -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -punycode 2.1.1 - MIT -https://mths.be/punycode -Copyright Mathias Bynens - -Copyright Mathias Bynens - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -python-jsonrpc-server 0.2.0 - MIT -Copyright 2017 Palantir Technologies, Inc. -Copyright 2018 Palantir Technologies, Inc. - -The MIT License (MIT) - -Copyright 2017 Palantir Technologies, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -querystringify 2.1.1 - MIT -https://github.com/unshiftio/querystringify -Copyright (c) 2015 Unshift.io, Arnout Kazemier - -The MIT License (MIT) - -Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -queue 4.5.1 - MIT -https://github.com/jessetane/queue#readme -Copyright (c) 2014 Jesse Tane - -The MIT License (MIT) -Copyright (c) 2014 Jesse Tane - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -quote-stream 1.0.2 - MIT -https://github.com/substack/quote-stream - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -raf 3.4.1 - MIT -https://github.com/chrisdickinson/raf#readme -Copyright 2013 Chris Dickinson - -Copyright 2013 Chris Dickinson - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react 16.8.6 - MIT -https://reactjs.org/ -(c) Sindre Sorhus -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-dom 16.8.6 - MIT -https://reactjs.org/ -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-is 16.8.6 - MIT -https://reactjs.org/ -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-is 16.11.0 - MIT -https://reactjs.org/ -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-lifecycles-compat 3.0.4 - MIT -https://github.com/reactjs/react-lifecycles-compat#readme -Copyright (c) 2013-present, Facebook, Inc. - -MIT License - -Copyright (c) 2013-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-motion 0.5.2 - MIT -https://github.com/chenglou/react-motion#readme -(c) Sindre Sorhus -Copyright (c) 2015 React Motion -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) 2014-present, Facebook, Inc. - -The MIT License (MIT) - -Copyright (c) 2015 React Motion authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-move 2.9.1 - MIT -https://github.com/react-tools/react-move#readme -(c) Sindre Sorhus -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) 2017 Steven Hall and Tanner Linsley - - -MIT License - -Copyright (c) 2017 Steven Hall and Tanner Linsley - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-popper 1.3.7 - MIT -https://github.com/souporserious/react-popper -Copyright (c) 2018 React Popper - -The MIT License (MIT) - -Copyright (c) 2018 React Popper authors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-redux 7.1.1 - MIT -https://github.com/reduxjs/react-redux -(c) Sindre Sorhus -Copyright 2015, Yahoo! Inc. -Copyright (c) 2015-present Dan Abramov -Copyright (c) 2013-present, Facebook, Inc. - -The MIT License (MIT) - -Copyright (c) 2015-present Dan Abramov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-svg-pan-zoom 3.1.0 - MIT -https://chrvadala.github.io/react-svg-pan-zoom/ -(c) Sindre Sorhus -Copyright 2009-2015 -(c) 2019 Denis Pushkarev -Copyright (c) 2016 Jed Watson. -Copyright (c) 2017 Jed Watson. -Copyright (c) 2015 Andreas Lubbe -(c) ,null c&&ic(c.type),b b.value,null -Copyright (c) 2012-2013 TJ Holowaychuk -Copyright (c) 2015 Tiancheng Timothy Gu -Copyright (c) 2014-2017, Jon Schlinkert. -Copyright (c) 2016 https://github.com/chrvadala -Copyright (c) Facebook, Inc. and its affiliates. -Copyright (c) 2016 Federico Zivolo and contributors -Copyright 2013-2016 by Paul Miller (http://paulmillr.com) - -MIT License - -Copyright (c) 2016 https://github.com/chrvadala - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-svgmt 1.1.8 - MIT -https://hugozap.github.io/react-svgmt -Copyright (c) 2014 -Copyright (c) 2017 Hugo Zapata -Copyright (c) 2014-2015 Waybury - -The MIT License (MIT) - -Copyright (c) 2017 Hugo Zapata - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -react-virtualized 9.21.1 - MIT -https://github.com/bvaughn/react-virtualized -Copyright (c) 2015 Brian Vaughn -Copyright (c) 2013-present, Facebook, Inc. - -The MIT License (MIT) - -Copyright (c) 2015 Brian Vaughn - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -read-cache 1.0.0 - MIT -https://github.com/TrySound/read-cache#readme -(c) Bogdan Chadkin -Copyright 2016 Bogdan Chadkin - -The MIT License (MIT) - -Copyright 2016 Bogdan Chadkin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -read-pkg 1.1.0 - MIT -https://github.com/sindresorhus/read-pkg -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -readable-stream 2.3.6 - MIT -https://github.com/nodejs/readable-stream#readme -Copyright Joyent, Inc. and other Node contributors. - -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -readable-stream 2.3.7 - MIT -https://github.com/nodejs/readable-stream#readme -Copyright Joyent, Inc. and other Node contributors. - -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -readable-stream 2.0.6 - MIT -https://github.com/nodejs/readable-stream#readme -Copyright Joyent, Inc. and other Node contributors. - -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -readable-stream 3.4.0 - MIT -https://github.com/nodejs/readable-stream#readme -Copyright Joyent, Inc. and other Node contributors. - -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -readdirp 2.2.1 - MIT -https://github.com/paulmillr/readdirp -Copyright (c) 2012-2015 Thorsten Lorenz - -This software is released under the MIT license: - -Copyright (c) 2012-2015 Thorsten Lorenz - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -reduce-css-calc 2.1.7 - MIT -https://github.com/MoOx/reduce-css-calc#readme -Copyright (c) 2014 Maxime Thirouin & Joakim Bengtson - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin & Joakim Bengtson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -reduce-css-calc 1.3.0 - MIT -https://github.com/MoOx/reduce-css-calc#readme -Copyright (c) 2014 Maxime Thirouin & Joakim Bengtson - -The MIT License (MIT) - -Copyright (c) 2014 Maxime Thirouin & Joakim Bengtson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -reduce-function-call 1.0.3 - MIT -https://github.com/MoOx/reduce-function-call#readme -Copyright (c) Maxime Thirouin - -The MIT License (MIT) - -Copyright (c) Maxime Thirouin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -redux 4.0.4 - MIT -http://redux.js.org -Copyright (c) 2015-present Dan Abramov - -The MIT License (MIT) - -Copyright (c) 2015-present Dan Abramov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -redux 3.7.2 - MIT -http://redux.js.org -Copyright (c) 2015-present Dan Abramov - -The MIT License (MIT) - -Copyright (c) 2015-present Dan Abramov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -redux-logger 3.0.6 - MIT -https://github.com/theaqua/redux-logger#readme -Copyright (c) 2016 Eugene Rodionov - -Copyright (c) 2016 Eugene Rodionov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -regenerator-runtime 0.13.2 - MIT -Copyright (c) 2014-present, Facebook, Inc. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -regenerator-runtime 0.11.1 - MIT -Copyright (c) 2014-present, Facebook, Inc. - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -regex-not 1.0.2 - MIT -https://github.com/jonschlinkert/regex-not -Copyright (c) 2016, 2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2016, 2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -regexp.prototype.flags 1.3.0 - MIT -https://github.com/es-shims/RegExp.prototype.flags#readme -Copyright (c) 2014 Jordan Harband - -The MIT License (MIT) - -Copyright (C) 2014 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -remove-bom-buffer 3.0.0 - MIT -https://github.com/jonschlinkert/remove-bom-buffer -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -remove-bom-stream 1.2.0 - MIT -https://github.com/gulpjs/remove-bom-stream#readme -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -remove-files-webpack-plugin 1.4.0 - MIT -https://github.com/Amaimersion/remove-files-webpack-plugin/blob/master/README.md - -MIT License - -Copyright (c) 2020 Sergey Kuznetsov - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -repeat-element 1.1.3 - MIT -https://github.com/jonschlinkert/repeat-element -Copyright (c) 2015-present, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-present, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -repeat-string 1.6.1 - MIT -https://github.com/jonschlinkert/repeat-string -Copyright (c) 2014-2015, Jon Schlinkert. -Copyright (c) 2014-2016, Jon Schlinkert. -Copyright (c) 2016, Jon Schlinkert (http://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -replace-ext 0.0.1 - MIT -http://github.com/wearefractal/replace-ext -Copyright (c) 2014 Fractal - -Copyright (c) 2014 Fractal - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -replace-ext 1.0.0 - MIT -https://github.com/gulpjs/replace-ext#readme -Copyright (c) 2014 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2014 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -request-progress 3.0.0 - MIT -https://github.com/IndigoUnited/node-request-progress#readme -Copyright (c) 2012 IndigoUnited - -Copyright (c) 2012 IndigoUnited - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -require-directory 2.1.1 - MIT -https://github.com/troygoode/node-require-directory/ -Copyright (c) 2011 Troy Goode - -The MIT License (MIT) - -Copyright (c) 2011 Troy Goode - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -requires-port 1.0.0 - MIT -https://github.com/unshiftio/requires-port -Copyright (c) 2015 Unshift.io, Arnout Kazemier - -The MIT License (MIT) - -Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -resize-observer-polyfill 1.5.1 - MIT -https://github.com/que-etc/resize-observer-polyfill -Copyright (c) 2016 Denis Rul - -The MIT License (MIT) - -Copyright (c) 2016 Denis Rul - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -resolve 1.11.1 - MIT -https://github.com/browserify/resolve#readme - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -resolve 1.1.7 - MIT -https://github.com/substack/node-resolve#readme - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -resolve-dir 1.0.1 - MIT -https://github.com/jonschlinkert/resolve-dir -Copyright (c) 2015, Jon Schlinkert. -Copyright (c) 2015-2016, Jon Schlinkert -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -resolve-from 5.0.0 - MIT -https://github.com/sindresorhus/resolve-from#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -resolve-options 1.1.0 - MIT -https://github.com/gulpjs/resolve-options#readme -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -resolve-url 0.2.1 - MIT -https://github.com/lydell/resolve-url -Copyright (c) 2013 Simon Lydell -Copyright 2014 Simon Lydell X11 - -The MIT License (MIT) - -Copyright (c) 2013 Simon Lydell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -restructure 0.5.4 - MIT -https://github.com/devongovett/restructure - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ret 0.1.15 - MIT -https://github.com/fent/ret.js#readme -Copyright (c) 2011 by Roly Fentanes - -Copyright (C) 2011 by Roly Fentanes - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -rgb 0.1.0 - MIT -https://github.com/kamicane/rgb - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -rgb-hex 2.1.0 - MIT -https://github.com/sindresorhus/rgb-hex#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -safe-buffer 5.1.2 - MIT -https://github.com/feross/safe-buffer -Copyright (c) Feross Aboukhadijeh -Copyright (c) Feross Aboukhadijeh (http://feross.org) - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -safe-regex 1.1.0 - MIT -https://github.com/substack/safe-regex - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -safer-buffer 2.1.2 - MIT -https://github.com/ChALkeR/safer-buffer#readme -Copyright (c) 2018 Nikita Skovoroda - -MIT License - -Copyright (c) 2018 Nikita Skovoroda - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -scheduler 0.13.6 - MIT -https://reactjs.org/ -Copyright (c) Facebook, Inc. and its affiliates. - -MIT License - -Copyright (c) Facebook, Inc. and its affiliates. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -schema-utils 2.6.2 - MIT -https://github.com/webpack/schema-utils -Copyright JS Foundation and other contributors - -Copyright JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -set-value 2.0.1 - MIT -https://github.com/jonschlinkert/set-value -Copyright (c) 2014-2017, Jon Schlinkert -Copyright (c) 2014-2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2014-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -setimmediate 1.0.5 - MIT -https://github.com/yuzujs/setImmediate#readme -Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic Denicola - -Copyright (c) 2012 Barnesandnoble.com, llc, Donavon West, and Domenic Denicola - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -shallow-copy 0.0.1 - MIT -https://github.com/substack/shallow-copy - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -shebang-command 1.2.0 - MIT -https://github.com/kevva/shebang-command#readme -(c) Kevin Martensson (http://github.com/kevva) -Copyright (c) Kevin Martensson - -The MIT License (MIT) - -Copyright (c) Kevin Martensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -shebang-command 2.0.0 - MIT -https://github.com/kevva/shebang-command#readme -Copyright (c) Kevin Martensson - -MIT License - -Copyright (c) Kevin Mårtensson (github.com/kevva) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -shebang-regex 3.0.0 - MIT -https://github.com/sindresorhus/shebang-regex#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -shebang-regex 1.0.0 - MIT -https://github.com/sindresorhus/shebang-regex -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -simple-concat 1.0.0 - MIT -https://github.com/feross/simple-concat -Copyright (c) Feross Aboukhadijeh -Copyright (c) Feross Aboukhadijeh (http://feross.org). - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -simple-get 3.1.0 - MIT -https://github.com/feross/simple-get -Copyright (c) Feross Aboukhadijeh -Copyright (c) Feross Aboukhadijeh (http://feross.org). - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -simple-swizzle 0.2.2 - MIT -https://github.com/qix-/node-simple-swizzle#readme -Copyright (c) 2015 Josh Junon - -The MIT License (MIT) - -Copyright (c) 2015 Josh Junon - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -slash 1.0.0 - MIT -https://github.com/sindresorhus/slash -(c) Sindre Sorhus (http://sindresorhus.com) - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -slickgrid 2.4.17 - MIT -https://github.com/6pac/SlickGrid#readme -(c) jQuery Foundation -(c) 2012 Julian Aubourg -(c) 2009-2016 Michael Leibman -Copyright (c) 2008 Ariel Flesler -Copyright 2011-2015 Twitter, Inc. -Copyright (c) 2010 Three Dub Media -(c) 2005, 2014 jQuery Foundation, Inc. -Copyright (c) 2011-2014, The Dojo Foundation -Copyright (c) 2009 John Resig, Jorn Zaefferer -Copyright 2011, Software Freedom Conservancy, Inc. -Copyright jQuery Foundation and other contributors -Copyright 2012 jQuery Foundation and other contributors -Copyright 2014 jQuery Foundation and other contributors -Copyright 2015 jQuery Foundation and other contributors -Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) -Copyright (c) 2011 Brandon Aaron (http://brandonaaron.net) -(c) 2005, 2013 jQuery Foundation, Inc. and other contributors -Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors -Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors -Copyright (c) 2009-2019 Michael Leibman and Ben McIntyre, http://github.com/6pac/slickgrid - -Copyright (c) 2009-2019 Michael Leibman and Ben McIntyre, http://github.com/6pac/slickgrid - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -snapdragon 0.8.2 - MIT -https://github.com/jonschlinkert/snapdragon -Copyright (c) 2015-2016, Jon Schlinkert. -Copyright (c) 2012 TJ Holowaychuk -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -snapdragon-node 2.1.1 - MIT -https://github.com/jonschlinkert/snapdragon-node -Copyright (c) 2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -snapdragon-util 3.0.1 - MIT -https://github.com/jonschlinkert/snapdragon-util -Copyright (c) 2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -source-map-resolve 0.5.2 - MIT -https://github.com/lydell/source-map-resolve#readme -Copyright 2014 Simon Lydell X11 -Copyright 2017 Simon Lydell X11 -Copyright 2014, 2017 Simon Lydell X11 -Copyright (c) 2014, 2015, 2016, 2017 Simon Lydell -Copyright 2014, 2015, 2016, 2017 Simon Lydell X11 - -The MIT License (MIT) - -Copyright (c) 2014, 2015, 2016, 2017 Simon Lydell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -source-map-support 0.5.16 - MIT -https://github.com/evanw/node-source-map-support#readme -Copyright (c) 2014 Evan Wallace - -The MIT License (MIT) - -Copyright (c) 2014 Evan Wallace - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -source-map-url 0.4.0 - MIT -https://github.com/lydell/source-map-url#readme -Copyright (c) 2014 Simon Lydell -Copyright 2014 Simon Lydell X11 - -The MIT License (MIT) - -Copyright (c) 2014 Simon Lydell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -spdx-expression-parse 3.0.0 - MIT -https://github.com/jslicense/spdx-expression-parse.js#readme -Copyright (c) 2015 Kyle E. Mitchell - -The MIT License - -Copyright (c) 2015 Kyle E. Mitchell & other authors listed in AUTHORS - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -split 0.3.3 - MIT -http://github.com/dominictarr/split -Copyright (c) 2011 Dominic Tarr - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -split-string 3.1.0 - MIT -https://github.com/jonschlinkert/split-string -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sshpk 1.16.1 - MIT -https://github.com/arekinath/node-sshpk#readme -Copyright Joyent, Inc. -Copyright 2015 Joyent, Inc. -Copyright 2016 Joyent, Inc. -Copyright 2017 Joyent, Inc. -Copyright 2018 Joyent, Inc. - -Copyright Joyent, Inc. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -stack-trace 0.0.10 - MIT -https://github.com/felixge/node-stack-trace -Copyright (c) 2011 Felix Geisendorfer (felix@debuggable.com) - -Copyright (c) 2011 Felix Geisendörfer (felix@debuggable.com) - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -static-eval 2.0.2 - MIT -https://github.com/substack/static-eval - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -static-extend 0.1.2 - MIT -https://github.com/jonschlinkert/static-extend -Copyright (c) 2016, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -static-module 3.0.3 - MIT -https://github.com/substack/static-module - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -static-module 2.2.5 - MIT -https://github.com/substack/static-module - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -statuses 1.5.0 - MIT -https://github.com/jshttp/statuses#readme -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson - - -The MIT License (MIT) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -stream-combiner 0.0.4 - MIT -https://github.com/dominictarr/stream-combiner -Copyright (c) 2012 Dominic Tarr - -Copyright (c) 2012 'Dominic Tarr' - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -stream-shift 1.0.0 - MIT -https://github.com/mafintosh/stream-shift -Copyright (c) 2016 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2016 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string_decoder 0.10.31 - MIT -https://github.com/rvagg/string_decoder -Copyright Joyent, Inc. and other Node contributors. - -Copyright Joyent, Inc. and other Node contributors. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to permit -persons to whom the Software is furnished to do so, subject to the -following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN -NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE -USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string_decoder 1.1.1 - MIT -https://github.com/nodejs/string_decoder -Copyright Joyent, Inc. and other Node contributors. - -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string_decoder 1.2.0 - MIT -https://github.com/nodejs/string_decoder -Copyright Joyent, Inc. and other Node contributors. - -Node.js is licensed for use as follows: - -""" -Copyright Node.js contributors. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - -This license applies to parts of Node.js originating from the -https://github.com/joyent/node repository: - -""" -Copyright Joyent, Inc. and other Node contributors. All rights reserved. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. -""" - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string-argv 0.3.1 - MIT -https://github.com/mccormicka/string-argv -Copyright 2014 Anthony McCormick - -The MIT License (MIT) - -Copyright 2014 Anthony McCormick - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string-width 3.1.0 - MIT -https://github.com/sindresorhus/string-width#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string-width 1.0.2 - MIT -https://github.com/sindresorhus/string-width#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string-width 4.2.0 - MIT -https://github.com/sindresorhus/string-width#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string-width 2.1.1 - MIT -https://github.com/sindresorhus/string-width#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string.prototype.trimleft 2.1.1 - MIT -https://github.com/es-shims/String.prototype.trimLeft#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -string.prototype.trimright 2.1.1 - MIT -https://github.com/es-shims/String.prototype.trimRight#readme -Copyright (c) 2015 Jordan Harband - -The MIT License (MIT) - -Copyright (c) 2015 Jordan Harband - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-ansi 5.2.0 - MIT -https://github.com/chalk/strip-ansi#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-ansi 3.0.1 - MIT -https://github.com/chalk/strip-ansi -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-ansi 6.0.0 - MIT -https://github.com/chalk/strip-ansi#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-ansi 4.0.0 - MIT -https://github.com/chalk/strip-ansi#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-bom 2.0.0 - MIT -https://github.com/sindresorhus/strip-bom -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-bom 4.0.0 - MIT -https://github.com/sindresorhus/strip-bom#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-eof 1.0.0 - MIT -https://github.com/sindresorhus/strip-eof -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -strip-json-comments 2.0.1 - MIT -https://github.com/sindresorhus/strip-json-comments#readme -(c) Sindre Sorhus (http://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sudo-prompt 8.2.5 - MIT -https://github.com/jorangreef/sudo-prompt#readme -Copyright (c) 2015 Joran Dirk Greef - -The MIT License (MIT) - -Copyright (c) 2015 Joran Dirk Greef - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -superagent 3.8.3 - MIT -https://github.com/visionmedia/superagent#readme -Copyright (c) 2014-2016 TJ Holowaychuk - -(The MIT License) - -Copyright (c) 2014-2016 TJ Holowaychuk - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -supports-color 7.1.0 - MIT -https://github.com/chalk/supports-color#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -supports-color 6.1.0 - MIT -https://github.com/chalk/supports-color#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -supports-color 5.5.0 - MIT -https://github.com/chalk/supports-color#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -svg-to-pdfkit 0.1.8 - MIT -https://github.com/alafr/SVG-to-PDFKit#readme -(c) www.w3.org -Copyright 2013 Google Inc. -Copyright (c) 2011 Devon Govett -copyright (c) 2018 Denis Pushkarev -Copyright (c) 2014-present, Facebook, Inc. -(c) 1995-2013 Jean-loup Gailly and Mark Adler -Copyright (c) 2019 SVG-to-PDFKit contributors -(c) 2014-2017 Vitaly Puzrin and Andrey Tupitsin -Copyright (c) 2009 Thomas Robinson <280north.com> -Copyright Joyent, Inc. and other Node contributors. -Copyright 2008 World Wide Web Consortium, Massachusetts Institute -Copyright 2009 World Wide Web Consortium, Massachusetts Institute -Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. -Copyright (c) 1985, 1987, 1989, 1990, 1997 Adobe Systems Incorporated. -Copyright (c) 1989, 1990, 1991, 1993, 1997 Adobe Systems Incorporated. -Copyright (c) 1985, 1987, 1989, 1990, 1993, 1997 Adobe Systems Incorporated. -Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated. -Copyright 2009 World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics (ERCIM), Keio University). - -The MIT License (MIT) - -Copyright (c) 2019 SVG-to-PDFKit contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -symbol-observable 1.0.1 - MIT -https://github.com/blesh/symbol-observable#readme -Copyright (c) Ben Lesh -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) -Copyright (c) Ben Lesh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -symbol-observable 1.2.0 - MIT -https://github.com/blesh/symbol-observable#readme -Copyright (c) Ben Lesh -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) -Copyright (c) Ben Lesh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -symbol-tree 3.2.4 - MIT -https://github.com/jsdom/js-symbol-tree#symbol-tree -Copyright (c) 2015 Joris van der Wel - -The MIT License (MIT) - -Copyright (c) 2015 Joris van der Wel - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sync-request 6.1.0 - MIT -https://github.com/ForbesLindesay/sync-request#readme -Copyright (c) 2014 Forbes Lindesay - -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -sync-rpc 1.3.6 - MIT -https://github.com/ForbesLindesay/sync-rpc#readme -Copyright (c) 2013 Dominic Tarr -Copyright (c) 2017 Forbes Lindesay (https://github.com/ForbesLindesay) - -# The MIT License (MIT) - -Copyright (c) 2017 [Forbes Lindesay](https://github.com/ForbesLindesay) - -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - - -Copyright (c) 2013 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -terser-webpack-plugin 1.4.3 - MIT -https://github.com/webpack-contrib/terser-webpack-plugin -Copyright JS Foundation and other contributors - -Copyright JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -terser-webpack-plugin 2.3.2 - MIT -https://github.com/webpack-contrib/terser-webpack-plugin -Copyright JS Foundation and other contributors - -Copyright JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -text-hex 1.0.0 - MIT -https://github.com/3rd-Eden/text-hex -Copyright (c) 2014-2015 Arnout Kazemier - -The MIT License (MIT) - -Copyright (c) 2014-2015 Arnout Kazemier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -text-table 0.2.0 - MIT -https://github.com/substack/text-table - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -then-request 6.0.2 - MIT -https://github.com/then/then-request#readme -Copyright (c) 2014 Forbes Lindesay - -Copyright (c) 2014 Forbes Lindesay - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -throttleit 1.0.0 - MIT -https://github.com/component/throttle - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -through 2.3.8 - MIT -https://github.com/dominictarr/through -Copyright (c) 2011 Dominic Tarr - -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -through2 2.0.5 - MIT -https://github.com/rvagg/through2#readme -Copyright (c) Rod Vagg -Copyright (c) Rod Vagg rvagg (https://twitter.com/rvagg) and additional contributors - -# The MIT License (MIT) - -**Copyright (c) Rod Vagg (the "Original Author") and additional contributors** - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -through2-filter 3.0.0 - MIT -https://github.com/brycebaril/through2-filter#readme -Copyright (c) Bryce B. Baril - -(The MIT License) - -Copyright (c) Bryce B. Baril - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -timed-out 4.0.1 - MIT -https://github.com/floatdrop/timed-out#readme -(c) Vsevolod Strukchinsky (floatdrop@gmail.com) -Copyright (c) Vsevolod Strukchinsky - -The MIT License (MIT) - -Copyright (c) Vsevolod Strukchinsky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tiny-inflate 1.0.3 - MIT -https://github.com/devongovett/tiny-inflate -Copyright (c) 2015-present Devon Govett - -MIT License - -Copyright (c) 2015-present Devon Govett - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tmp 0.0.29 - MIT -http://github.com/raszi/node-tmp -Copyright (c) 2014 KARASZI Istvan -Copyright (c) 2011-2015 KARASZI Istvan - -The MIT License (MIT) - -Copyright (c) 2014 KARASZI István - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -to-absolute-glob 2.0.2 - MIT -https://github.com/jonschlinkert/to-absolute-glob -Copyright (c) 2015-2016, Jon Schlinkert -Copyright (c) 2016, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -to-object-path 0.3.0 - MIT -https://github.com/jonschlinkert/to-object-path -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2015, Jon Schlinkert. -Copyright (c) 2015-2016, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2015-2016, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -to-regex 3.0.2 - MIT -https://github.com/jonschlinkert/to-regex -Copyright (c) 2016-2018, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2016-2018, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -to-regex-range 2.1.1 - MIT -https://github.com/micromatch/to-regex-range -Copyright (c) 2015-2017, Jon Schlinkert -Copyright (c) 2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -to-through 2.0.0 - MIT -https://github.com/gulpjs/to-through#readme -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -toidentifier 1.0.0 - MIT -https://github.com/component/toidentifier#readme -Copyright (c) 2016 Douglas Christopher Wilson -Copyright (c) 2016 Douglas Christopher Wilson - -MIT License - -Copyright (c) 2016 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -transformation-matrix 2.0.5 - MIT -https://github.com/chrvadala/transformation-matrix#readme -Copyright (c) 2017 https://github.com/chrvadala - -MIT License - -Copyright (c) 2017 https://github.com/chrvadala - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tree-kill 1.2.2 - MIT -https://github.com/pkrumins/node-tree-kill -Copyright (c) 2018 Peter Krumins - -MIT License - -Copyright (c) 2018 Peter Krumins - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -triple-beam 1.3.0 - MIT -https://github.com/winstonjs/triple-beam#readme -Copyright (c) 2017 -(c) 2010 Charlie Robbins - -MIT License - -Copyright (c) 2017 winstonjs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tslint-config-prettier 1.18.0 - MIT -https://github.com/prettier/tslint-config-prettier#readme -Copyright 2017 Alex Jover Morales - -Copyright 2017 Alex Jover Morales - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tslint-eslint-rules 5.4.0 - MIT -Copyright (c) 2015 Vitor Buzinaro, Victor Schiavi - -Copyright (c) 2015 Vitor Buzinaro, Victor Schiavi - - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tslint-plugin-prettier 2.1.0 - MIT -https://github.com/prettier/tslint-plugin-prettier#readme -Copyright (c) Ika - -MIT License - -Copyright (c) Ika (https://github.com/ikatyang) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tsscmp 1.0.6 - MIT -https://github.com/suryagh/tsscmp#readme -Copyright (c) 2016 - -The MIT License (MIT) - -Copyright (c) 2016 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tsutils 2.29.0 - MIT -https://github.com/ajafff/tsutils#readme -Copyright (c) 2017 Klaus Meinhardt - -The MIT License (MIT) - -Copyright (c) 2017 Klaus Meinhardt - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tsutils 2.28.0 - MIT -https://github.com/ajafff/tsutils#readme -Copyright (c) 2017 Klaus Meinhardt - -The MIT License (MIT) - -Copyright (c) 2017 Klaus Meinhardt - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -type-check 0.3.2 - MIT -https://github.com/gkz/type-check -Copyright (c) George Zahariev - -Copyright (c) George Zahariev - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -type-detect 4.0.8 - MIT -https://github.com/chaijs/type-detect#readme -Copyright (c) 2013 -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -type-is 1.6.18 - MIT -https://github.com/jshttp/type-is#readme -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2015 Douglas Christopher Wilson -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014 Jonathan Ong -Copyright (c) 2014-2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -typed-styles 0.0.7 - MIT -Copyright (c) 2017 Artur Kenzhaev - -MIT License - -Copyright (c) 2017 Artur Kenzhaev - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -typedarray 0.0.6 - MIT -https://github.com/substack/typedarray -Copyright (c) 2012, Joshua Bell -Copyright (c) 2010, Linden Research, Inc. - -/* - Copyright (c) 2010, Linden Research, Inc. - Copyright (c) 2012, Joshua Bell - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. - $/LicenseInfo$ - */ - -// Original can be found at: -// https://bitbucket.org/lindenlab/llsd -// Modifications by Joshua Bell inexorabletash@gmail.com -// https://github.com/inexorabletash/polyfill - -// ES3/ES5 implementation of the Krhonos Typed Array Specification -// Ref: http://www.khronos.org/registry/typedarray/specs/latest/ -// Date: 2011-02-01 -// -// Variations: -// * Allows typed_array.get/set() as alias for subscripts (typed_array[]) - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -typedarray-to-buffer 3.1.5 - MIT -http://feross.org -Copyright (c) Feross Aboukhadijeh -Copyright (c) Feross Aboukhadijeh (http://feross.org). - -The MIT License (MIT) - -Copyright (c) Feross Aboukhadijeh - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ua-parser-js 0.7.20 - MIT -http://github.com/faisalman/ua-parser-js -(c) 1996-2007 the VideoLAN team -Copyright (c) 2012-2019 Faisal Salman -Copyright (c) 2012-2019 Faisal Salman - -MIT License - -Copyright (c) 2012-2019 Faisal Salman <> - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -uint64be 1.0.1 - MIT -https://github.com/mafintosh/uint64be -Copyright (c) 2015 Mathias Buus - -The MIT License (MIT) - -Copyright (c) 2015 Mathias Buus - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unc-path-regex 0.1.2 - MIT -https://github.com/regexhq/unc-path-regex -Copyright (c) 2015 Jon Schlinkert -Copyright (c) 2015, Jon Schlinkert. - -The MIT License (MIT) - -Copyright (c) 2015, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -underscore 1.8.3 - MIT -http://underscorejs.org -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -(c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors Underscore - -Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative -Reporters & Editors - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unicode 10.0.0 - MIT -http://github.com/eversport/node-unicodetable -Copyright (c) 2014 - -Copyright (c) 2014 ▟ ▖▟ ▖(dodo) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unicode-properties 1.3.1 - MIT -https://github.com/devongovett/unicode-properties -Copyright 2018 - -Copyright 2018 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unicode-trie 2.0.0 - MIT -https://github.com/devongovett/unicode-trie -Copyright 2018 - -Copyright 2018 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unicode-trie 1.0.0 - MIT -https://github.com/devongovett/unicode-trie -Copyright 2018 - -Copyright 2018 - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unicode-trie 0.3.1 - MIT -https://github.com/devongovett/unicode-trie - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -union-value 1.0.1 - MIT -https://github.com/jonschlinkert/union-value -Copyright (c) 2015-2017, Jon Schlinkert -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -uniq 1.0.1 - MIT -https://github.com/mikolalysenko/uniq -(c) 2013 Mikola Lysenko. -Copyright (c) 2013 Mikola Lysenko - - -The MIT License (MIT) - -Copyright (c) 2013 Mikola Lysenko - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unique-stream 2.3.1 - MIT -https://github.com/eugeneware/unique-stream#readme -Copyright 2014 Eugene Ware - -Copyright 2014 Eugene Ware - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -units-css 0.4.0 - MIT -https://github.com/alexdunphy/units -(c) Alex Dunphy -(c) Lee Crossley (http://ilee.co.uk/) - -(c) Alex Dunphy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -(c) Alex Dunphy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -universalify 0.1.2 - MIT -https://github.com/RyanZim/universalify#readme -Copyright (c) 2017, Ryan Zimmerman - -(The MIT License) - -Copyright (c) 2017, Ryan Zimmerman - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the 'Software'), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unpipe 1.0.0 - MIT -https://github.com/stream-utils/unpipe -Copyright (c) 2015 Douglas Christopher Wilson -Copyright (c) 2015 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2015 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -unset-value 1.0.0 - MIT -https://github.com/jonschlinkert/unset-value -Copyright (c) 2015, 2017, Jon Schlinkert. -Copyright (c) 2017, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015, 2017, Jon Schlinkert - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -untildify 3.0.3 - MIT -https://github.com/sindresorhus/untildify#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -upath 1.1.2 - MIT -http://github.com/anodynos/upath/ -Copyright (c) 2019 Angelos Pikoulas -Copyright (c) 2014-2017 Angelos Pikoulas (agelos.pikoulas@gmail.com) - -Copyright(c) 2014-2017 Angelos Pikoulas (agelos.pikoulas@gmail.com) - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -upper-case 1.1.3 - MIT -https://github.com/blakeembrey/upper-case -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -The MIT License (MIT) - -Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -urix 0.1.0 - MIT -https://github.com/lydell/urix -Copyright (c) 2013 Simon Lydell -Copyright 2014 Simon Lydell X11 - -The MIT License (MIT) - -Copyright (c) 2013 Simon Lydell - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -url-parse 1.4.7 - MIT -https://github.com/unshiftio/url-parse#readme -Copyright (c) 2015 Unshift.io, Arnout Kazemier - -The MIT License (MIT) - -Copyright (c) 2015 Unshift.io, Arnout Kazemier, the Contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -use 3.1.1 - MIT -https://github.com/jonschlinkert/use -Copyright (c) 2015-2017, Jon Schlinkert. -Copyright (c) 2015-present, Jon Schlinkert. -Copyright (c) 2018, Jon Schlinkert (https://github.com/jonschlinkert). - -The MIT License (MIT) - -Copyright (c) 2015-present, Jon Schlinkert. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -util-deprecate 1.0.2 - MIT -https://github.com/TooTallNate/util-deprecate -Copyright (c) 2014 Nathan Rajlich - -(The MIT License) - -Copyright (c) 2014 Nathan Rajlich - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -utils-merge 1.0.1 - MIT -https://github.com/jaredhanson/utils-merge#readme -Copyright (c) 2013-2017 Jared Hanson -Copyright (c) 2013-2017 Jared Hanson < http://jaredhanson.net/ (http://jaredhanson.net/)> - -The MIT License (MIT) - -Copyright (c) 2013-2017 Jared Hanson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -uuid 3.3.3 - MIT -https://github.com/kelektiv/node-uuid#readme -Copyright 2011, Sebastian Tschan https://blueimp.net -Copyright (c) 2010-2016 Robert Kieffer and other contributors -Copyright (c) Paul Johnston 1999 - 2009 Other contributors Greg Holt, Andrew Kepert, Ydnar, Lostinet - -The MIT License (MIT) - -Copyright (c) 2010-2016 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -uuid 3.3.2 - MIT -https://github.com/kelektiv/node-uuid#readme -Copyright 2011, Sebastian Tschan https://blueimp.net -Copyright (c) 2010-2016 Robert Kieffer and other contributors -Copyright (c) Paul Johnston 1999 - 2009 Other contributors Greg Holt, Andrew Kepert, Ydnar, Lostinet - -The MIT License (MIT) - -Copyright (c) 2010-2016 Robert Kieffer and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -validator 9.4.1 - MIT -http://github.com/chriso/validator.js -Copyright (c) 2016 Chris O'Hara -Copyright (c) 2017 Chris O'Hara - -Copyright (c) 2016 Chris O'Hara - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -value-or-function 3.0.0 - MIT -https://github.com/gulpjs/value-or-function#readme -Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2015 Blaine Bublitz, Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vary 1.1.2 - MIT -https://github.com/jshttp/vary#readme -Copyright (c) 2014-2017 Douglas Christopher Wilson - -(The MIT License) - -Copyright (c) 2014-2017 Douglas Christopher Wilson - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -verror 1.10.0 - MIT -https://github.com/davepacheco/node-verror -Copyright (c) 2016, Joyent, Inc. - -Copyright (c) 2016, Joyent, Inc. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -viewport-dimensions 0.2.0 - MIT -https://github.com/alexdunphy/viewport -(c) Alex Dunphy - -(c) Alex Dunphy - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vinyl 2.2.0 - MIT -https://github.com/gulpjs/vinyl#readme -Copyright (c) 2013 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2013 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vinyl 1.2.0 - MIT -http://github.com/gulpjs/vinyl -Copyright (c) 2013 Fractal - -Copyright (c) 2013 Fractal - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vinyl 2.0.2 - MIT -https://github.com/gulpjs/vinyl#readme -Copyright (c) 2013 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2013 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vinyl-fs 3.0.3 - MIT -https://github.com/gulpjs/vinyl-fs#readme -Copyright (c) 2013-2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2013-2017 Blaine Bublitz , Eric Schoffstall and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vinyl-sourcemap 1.1.0 - MIT -https://github.com/gulpjs/vinyl-sourcemap#readme -Copyright (c) 2014, Florian Reiterer -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors - -The MIT License (MIT) - -Copyright (c) 2017 Blaine Bublitz , Eric Schoffstall and other contributors (Based on code from gulp-sourcemaps - ISC License - Copyright (c) 2014, Florian Reiterer) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vlq 0.2.3 - MIT -https://github.com/Rich-Harris/vlq#readme -Copyright (c) 2017 these people (https://github.com/Rich-Harris/vlq/graphs/contributors) - -Copyright (c) 2017 [these people](https://github.com/Rich-Harris/vlq/graphs/contributors) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vscode-debugadapter 1.35.0 - MIT -https://github.com/Microsoft/vscode-debugadapter-node#readme -Copyright (c) Microsoft Corporation. - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vscode-debugprotocol 1.35.0 - MIT -https://github.com/Microsoft/vscode-debugadapter-node#readme -Copyright (c) Microsoft Corporation. - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vscode-extension-telemetry 0.1.0 - MIT -https://github.com/Microsoft/vscode-extension-telemetry#readme -Copyright (c) Microsoft Corporation. - -vscode-extension-telemetry - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vscode-test 1.2.3 - MIT -https://github.com/Microsoft/vscode-test#readme -Copyright (c) Microsoft Corporation. - -MIT License - -Copyright (c) Microsoft Corporation. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -w3c-hr-time 1.0.1 - MIT - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -w3c-xmlserializer 1.1.2 - MIT -https://github.com/jsdom/w3c-xmlserializer#readme - -MIT License - -Copyright (c) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -wait-for-expect 3.0.1 - MIT -https://github.com/TheBrainFamily/wait-for-expect#readme -Copyright (c) 2018 The Brain Software House - -MIT License - -Copyright (c) 2018 The Brain Software House - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -warning 4.0.3 - MIT -https://github.com/BerkeleyTrue/warning -Copyright (c) 2013-present, Facebook, Inc. -Copyright (c) 2014-present, Facebook, Inc. - -MIT License - -Copyright (c) 2013-present, Facebook, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -webpack-bundle-analyzer 3.6.0 - MIT -https://github.com/webpack-contrib/webpack-bundle-analyzer -Copyright 2015, Yahoo! Inc. -Copyright (c) 2017 Jed Watson. -(c) Michel Weststrate 2015 - 2018 -Copyright 2002-2017, Carrot Search -Copyright JS Foundation and other contributors -copyright 2018 Jason Mulligan - -Copyright JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -'Software'), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -webpack-require-from 1.8.0 - MIT -https://github.com/agoldis/webpack-require-from#readme -Copyright (c) 2017 Andrew Goldis - -MIT License - -Copyright (c) 2017 Andrew Goldis - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -webpack-sources 1.4.3 - MIT -https://github.com/webpack/webpack-sources#readme -Copyright (c) 2017 JS Foundation and other contributors - -MIT License - -Copyright (c) 2017 JS Foundation and other contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -whatwg-encoding 1.0.5 - MIT -https://github.com/jsdom/whatwg-encoding#readme -Copyright (c) 2016-2018 Domenic Denicola - -Copyright © 2016–2018 Domenic Denicola - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -whatwg-fetch 3.0.0 - MIT -https://github.com/github/fetch#readme -Copyright (c) 2014-2016 GitHub, Inc. - -Copyright (c) 2014-2016 GitHub, Inc. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -winston 3.2.1 - MIT -https://github.com/winstonjs/winston#readme -(c) 2015 Nimrod Becker -(c) 2010 Charlie Robbins -(c) 2016 Charlie Robbins -(c) 2011 Daniel Aristizabal -Copyright (c) 2010 Charlie Robbins - -Copyright (c) 2010 Charlie Robbins - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -winston-transport 4.3.0 - MIT -https://github.com/winstonjs/winston-transport#readme -Copyright (c) 2015 Charlie Robbins & the contributors. - -The MIT License (MIT) - -Copyright (c) 2015 Charlie Robbins & the contributors. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -wordwrap 1.0.0 - MIT -https://github.com/substack/node-wordwrap#readme - -This software is released under the MIT license: - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -wrap-ansi 6.2.0 - MIT -https://github.com/chalk/wrap-ansi#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -wrap-ansi 5.1.0 - MIT -https://github.com/chalk/wrap-ansi#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -wrap-ansi 2.1.0 - MIT -https://github.com/chalk/wrap-ansi#readme -(c) Sindre Sorhus (https://sindresorhus.com) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -The MIT License (MIT) - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ws 6.2.1 - MIT -https://github.com/websockets/ws -Copyright (c) 2011 Einar Otto Stangvik - -The MIT License (MIT) - -Copyright (c) 2011 Einar Otto Stangvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ws 7.2.0 - MIT -https://github.com/websockets/ws -Copyright (c) 2011 Einar Otto Stangvik - -The MIT License (MIT) - -Copyright (c) 2011 Einar Otto Stangvik - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -xml2js 0.4.19 - MIT -https://github.com/Leonidas-from-XIV/node-xml2js -Copyright 2010, 2011, 2012, 2013. - -Copyright 2010, 2011, 2012, 2013. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -xml2js 0.2.8 - MIT -https://github.com/Leonidas-from-XIV/node-xml2js -Copyright 2010, 2011, 2012, 2013. - -Copyright 2010, 2011, 2012, 2013. All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to -deal in the Software without restriction, including without limitation the -rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -xmlbuilder 9.0.7 - MIT -http://github.com/oozcitak/xmlbuilder-js -Copyright (c) 2013 Ozgur Ozcitak - -The MIT License (MIT) - -Copyright (c) 2013 Ozgur Ozcitak - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -xmlchars 2.1.1 - MIT -https://github.com/lddubeau/xmlchars#readme -copyright Louis-Dominique Dubeau -Copyright Louis-Dominique Dubeau and contributors - -Copyright Louis-Dominique Dubeau and contributors to xmlchars - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -xmlhttprequest 1.8.0 - MIT -https://github.com/driverdan/node-XMLHttpRequest -Copyright (c) 2010 passive.ly LLC - - Copyright (c) 2010 passive.ly LLC - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation - files (the "Software"), to deal in the Software without - restriction, including without limitation the rights to use, - copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following - conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -xtend 4.0.2 - MIT -https://github.com/Raynos/xtend -Copyright (c) 2012-2014 Raynos. - -The MIT License (MIT) -Copyright (c) 2012-2014 Raynos. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yargs 13.3.0 - MIT -https://yargs.js.org/ -Copyright 2014 -Copyright (c) 2011 Andrei Mackenzie -Copyright 2010 James Halliday (mail@substack.net) -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Copyright 2010 James Halliday (mail@substack.net) -Modified work Copyright 2014 Contributors (ben@npmjs.com) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yargs 15.1.0 - MIT -https://yargs.js.org/ -Copyright 2014 -Copyright (c) 2011 Andrei Mackenzie -Copyright 2010 James Halliday (mail@substack.net) - -Copyright 2010 James Halliday (mail@substack.net) -Modified work Copyright 2014 Contributors (ben@npmjs.com) - -This project is free software released under the MIT/X11 license: - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yauzl 2.4.1 - MIT -https://github.com/thejoshwolfe/yauzl -Copyright (c) 2014 Josh Wolfe - -The MIT License (MIT) - -Copyright (c) 2014 Josh Wolfe - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yauzl 2.10.0 - MIT -https://github.com/thejoshwolfe/yauzl -Copyright (c) 2014 Josh Wolfe - -The MIT License (MIT) - -Copyright (c) 2014 Josh Wolfe - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -yazl 2.5.1 - MIT -https://github.com/thejoshwolfe/yazl -Copyright (c) 2014 Josh Wolfe - -The MIT License (MIT) - -Copyright (c) 2014 Josh Wolfe - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -ylru 1.2.1 - MIT -https://github.com/node-modules/ylru -Copyright (c) 2016 -Copyright (c) 2016 Dominic Tarr - -Copyright (c) 2016 node-modules -Copyright (c) 2016 'Dominic Tarr' - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -zeromq 6.0.0-beta.6 - MIT -https://github.com/zeromq/zeromq.js#readme -Copyright (c) 2017 -Copyright (c) 2011 TJ Holowaychuk -Copyright 2017-2019 Rolf Timmermans -Copyright (c) 2010, 2011 Justin Tulloss -Copyright (c) 2017-2019 Rolf Timmermans - -Copyright 2017-2019 Rolf Timmermans - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -The MIT License (MIT) -===================== - -Copyright (c) 2017 Node.js API collaborators ------------------------------------ - -*Node.js API collaborators listed at * - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -zone.js 0.7.6 - MIT -https://github.com/angular/zone.js#readme -Copyright Google Inc. -Copyright (c) 2016 Google, Inc. - -The MIT License - -Copyright (c) 2016 Google, Inc. - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -futures 3.3.0 - Python-2.0 -Copyright 2009 Brian Quinlan. -copyright u'2009-2011, Brian Quinlan -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation - -PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 --------------------------------------------- - -1. This LICENSE AGREEMENT is between the Python Software Foundation -("PSF"), and the Individual or Organization ("Licensee") accessing and -otherwise using this software ("Python") in source or binary form and -its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python -alone or in any derivative version, provided, however, that PSF's -License Agreement and PSF's notice of copyright, i.e., "Copyright (c) -2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation; All Rights -Reserved" are retained in Python alone or in any derivative version -prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python. - -4. PSF is making Python available to Licensee on an "AS IS" -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR -IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND -DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS -FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT -INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -postcss-apply 0.8.0 - Unlicense -https://github.com/pascalduez/postcss-apply - -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -tweetnacl 0.14.5 - Unlicense -https://tweetnacl.js.org - -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or -distribute this software, either in source code form or as a compiled -binary, for any purpose, commercial or non-commercial, and by any -means. - -In jurisdictions that recognize copyright laws, the author or authors -of this software dedicate any and all copyright interest in the -software to the public domain. We make this dedication for the benefit -of the public at large and to the detriment of our heirs and -successors. We intend this dedication to be an overt act of -relinquishment in perpetuity of all present and future rights to this -software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR -OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -typescript-char 0.0.0 - Unlicense -https://github.com/mason-lang/typescript-char#readme - -This is free and unencumbered software released into the public domain. - -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. - -In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and - -successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -For more information, please refer to - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -@sheerun/mutationobserver-shim 0.3.2 - WTFPL -Copyright (c) 2014 Graeme Yeates - -Copyright © 2014 Graeme Yeates - -This work is free. You can redistribute it and/or modify it under the -terms of the Do What The Fuck You Want To Public License, Version 2, -as published by Sam Hocevar. See http://www.wtfpl.net/ for more details. - -This program is free software. It comes without any warranty, to -the extent permitted by applicable law. You can redistribute it -and/or modify it under the terms of the Do What The Fuck You Want -To Public License, Version 2, as published by Sam Hocevar. See -http://www.wtfpl.net/ for more details. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -chai-as-promised 7.1.1 - WTFPL -https://github.com/domenic/chai-as-promised#readme -Copyright (c) 2004 Sam Hocevar -Copyright (c) 2012-2016 Domenic Denicola - -Copyright © 2012–2016 Domenic Denicola - -This work is free. You can redistribute it and/or modify it under the -terms of the Do What The Fuck You Want To Public License, Version 2, -as published by Sam Hocevar. See below for more details. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -json-schema 0.2.3 - AFL-2.1 OR BSD-3-Clause -https://github.com/kriszyp/json-schema#readme -Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) - -AFL-2.1 OR BSD-3-Clause - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -rc 1.2.8 - BSD-2-Clause OR (MIT OR Apache-2.0) -https://github.com/dominictarr/rc#readme -Copyright (c) 2011 Dominic Tarr -Copyright (c) 2013, Dominic Tarr - -The MIT License - -Copyright (c) 2011 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -amdefine 1.0.1 - BSD-3-Clause OR MIT -http://github.com/jrburke/amdefine -Copyright (c) 2011-2016, The Dojo Foundation - -amdefine is released under two licenses: new BSD, and MIT. You may pick the -license that best suits your development needs. The text of both licenses are -provided below. - - -The "New" BSD License: ----------------------- - -Copyright (c) 2011-2016, The Dojo Foundation -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the Dojo Foundation nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - -MIT License ------------ - -Copyright (c) 2011-2016, The Dojo Foundation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -pause-stream 0.0.11 - MIT AND Apache-2.0 -Copyright (c) 2013 Dominic Tarr - -Dual Licensed MIT and Apache 2 - -The MIT License - -Copyright (c) 2013 Dominic Tarr - -Permission is hereby granted, free of charge, -to any person obtaining a copy of this software and -associated documentation files (the "Software"), to -deal in the Software without restriction, including -without limitation the rights to use, copy, modify, -merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom -the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice -shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR -ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - ----------------------------------------------------------------------- - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright (c) 2013 Dominic Tarr - - 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. - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -type-fest 0.8.1 - MIT OR (CC0-1.0 AND MIT) -https://github.com/sindresorhus/type-fest#readme -Copyright (c) Sindre Sorhus (sindresorhus.com) - -MIT License - -Copyright (c) Sindre Sorhus (sindresorhus.com) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -atob 2.1.2 - MIT OR Apache-2.0 -https://git.coolaj86.com/coolaj86/atob.js.git -Copyright 2015 AJ ONeal -Copyright (c) 2015 AJ ONeal -copyright 2012-2018 AJ ONeal - -At your option you may choose either of the following licenses: - - * The MIT License (MIT) - * The Apache License 2.0 (Apache-2.0) - - -The MIT License (MIT) - -Copyright (c) 2015 AJ ONeal - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright 2015 AJ ONeal - - 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. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -vsls 0.3.1291 - OTHER -https://aka.ms/vsls -Copyright (c) Microsoft Corporation. - -MICROSOFT PRE-RELEASE SOFTWARE LICENSE TERMS - -MICROSOFT VISUAL STUDIO LIVE SHARE SOFTWARE - -These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you. They apply to the pre-release software named above. The terms also apply to any Microsoft services or updates for the software, except to the extent those have additional terms. - -IF YOU COMPLY WITH THESE LICENSE TERMS, YOU HAVE THE RIGHTS BELOW. - -1. INSTALLATION AND USE RIGHTS. You may install and use any number of copies of the software to evaluate it as you develop and test your software applications. You may use the software only with Microsoft Visual Studio or Visual Studio Code. The software works in tandem with an associated preview release service, as described below. - -2. PRE-RELEASE SOFTWARE. The software is a pre-release version. It may not work the way a final version of the software will. Microsoft may change it for the final, commercial version. We also may not release a commercial version. Microsoft is not obligated to provide maintenance, technical support or updates to you for the software. - -3. ASSOCIATED ONLINE SERVICES. - - a. Microsoft Azure Services. Some features of the software provide access to, or rely on, Azure online services, including an associated Azure online service to the software, Visual Studio Live Share (the “corresponding service”). The use of those services (but not the software) is governed by the separate terms and privacy policies in the agreement under which you obtained the Azure services at https://go.microsoft.com/fwLink/p/?LinkID=233178 (and, with respect to the corresponding service, the additional terms below). Please read them. The services may not be available in all regions. - - b. Limited Availability. The corresponding service is currently in “Preview,” and therefore, we may change or discontinue the corresponding service at any time without notice. Any changes or updates to the corresponding service may cause the software to stop working and may result in the deletion of any data stored on the corresponding service. You may not receive notice prior to these updates. - -4. Licenses for other components. The software may include third party components with separate legal notices or governed by other agreements, as described in the ThirdPartyNotices file accompanying the software. Even if such components are governed by other agreements, the disclaimers and the limitations on and exclusions of damages below also apply. - -5. DATA. - - a. Data Collection. The software may collect information about you and your use of the software, and send that to Microsoft. Microsoft may use this information to provide services and improve our products and services. You may opt out of many of these scenarios, but not all, as described in the product documentation. In using the software, you must comply with applicable law. You can learn more about data collection and use in the help documentation and the privacy statement at http://go.microsoft.com/fwlink/?LinkId=398505. Your use of the software operates as your consent to these practices. - - b. Processing of Personal Data. To the extent Microsoft is a processor or subprocessor of personal data in connection with the software, Microsoft makes the commitments in the European Union General Data Protection Regulation Terms of the Online Services Terms to all customers effective May 25, 2018, at http://go.microsoft.com/?linkid=9840733. - -6. FEEDBACK. If you give feedback about the software to Microsoft, you give to Microsoft, without charge, the right to use, share and commercialize your feedback in any way and for any purpose. You will not give feedback that is subject to a license that requires Microsoft to license its software or documentation to third parties because we include your feedback in them. These rights survive this agreement. - -7. SCOPE OF LICENSE. The software is licensed, not sold. This agreement only gives you some rights to use the software. Microsoft reserves all other rights. Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement. In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways. For example, if Microsoft technically limits or disables extensibility for the software, you may not extend the software by, among other things, loading or injecting into the software any non-Microsoft add-ins, macros, or packages; modifying the software registry settings; or adding features or functionality equivalent to that found in other Visual Studio products. You may not: - - * work around any technical limitations in the software; - - * reverse engineer, decompile or disassemble the software, or attempt to do so, except and only to the extent required by third party licensing terms governing use of certain open source components that may be included with the software; - - * remove, minimize, block or modify any notices of Microsoft or its suppliers in the software; - - * use the software in any way that is against the law; or - - * share, publish, rent or lease the software, or provide the software as a stand-alone offering for others to use. - -8. UPDATES. The software may periodically check for updates and download and install them for you. You may obtain updates only from Microsoft or authorized sources. Microsoft may need to update your system to provide you with updates. You agree to receive these automatic updates without any additional notice. Updates may not include or support all existing software features, services, or peripheral devices. - -9. EXPORT RESTRICTIONS. You must comply with all domestic and international export laws and regulations that apply to the software, which include restrictions on destinations, end users and end use. For further information on export restrictions, visit (aka.ms/exporting). - -10. SUPPORT SERVICES. Because the software is “as is,” we may not provide support services for it. - -11. ENTIRE AGREEMENT. This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services. - -12. APPLICABLE LAW. If you acquired the software in the United States, Washington State law applies to interpretation of and claims for breach of this agreement, and the laws of the state where you live apply to all other claims. If you acquired the software in any other country, its laws apply. - -13. CONSUMER RIGHTS; REGIONAL VARIATIONS. This agreement describes certain legal rights. You may have other rights, including consumer rights, under the laws of your state or country. Separate and apart from your relationship with Microsoft, you may also have rights with respect to the party from which you acquired the software. This agreement does not change those other rights if the laws of your state or country do not permit it to do so. For example, if you acquired the software in one of the below regions, or mandatory country law applies, then the following provisions apply to you: - - a. Australia. You have statutory guarantees under the Australian Consumer Law and nothing in this agreement is intended to affect those rights. - - b. Canada. If you acquired the software in Canada, you may stop receiving updates by turning off the automatic update feature, disconnecting your device from the Internet (if and when you re-connect to the Internet, however, the software will resume checking for and installing updates), or uninstalling the software. The product documentation, if any, may also specify how to turn off updates for your specific device or software. - - c. Germany and Austria. - - (i) Warranty. The properly licensed software will perform substantially as described in any Microsoft materials that accompany the software. However, Microsoft gives no contractual guarantee in relation to the licensed software. - - (ii) Limitation of Liability. In case of intentional conduct, gross negligence, claims based on the Product Liability Act, as well as, in case of death or personal or physical injury, Microsoft is liable according to the statutory law. - - Subject to the foregoing clause (ii), Microsoft will only be liable for slight negligence if Microsoft is in breach of such material contractual obligations, the fulfillment of which facilitate the due performance of this agreement, the breach of which would endanger the purpose of this agreement and the compliance with which a party may constantly trust in (so-called "cardinal obligations"). In other cases of slight negligence, Microsoft will not be liable for slight negligence. - -14. LEGAL EFFECT. This agreement describes certain legal rights. You may have other rights under the laws of your country. You may also have rights with respect to the party from whom you acquired the software. This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so. - -15. DISCLAIMER OF WARRANTY. THE SOFTWARE IS LICENSED “AS-IS.” YOU BEAR THE RISK OF USING IT. MICROSOFT GIVES NO EXPRESS WARRANTIES, GUARANTEES OR CONDITIONS. TO THE EXTENT PERMITTED UNDER YOUR LOCAL LAWS, MICROSOFT EXCLUDES THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. - -16. LIMITATION ON AND EXCLUSION OF DAMAGES. YOU CAN RECOVER FROM MICROSOFT AND ITS SUPPLIERS ONLY DIRECT DAMAGES UP TO U.S. $5.00. YOU CANNOT RECOVER ANY OTHER DAMAGES, INCLUDING CONSEQUENTIAL, LOST PROFITS, SPECIAL, INDIRECT OR INCIDENTAL DAMAGES. - - This limitation applies to (a) anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and (b) claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law. - - It also applies even if Microsoft knew or should have known about the possibility of the damages. The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages. - -Please note: As the software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French. - -Remarque : Ce logiciel étant distribué au Québec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français. - -EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues. - -LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES. Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices. - -Cette limitation concerne : - -* tout ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et - -* les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur. - -Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage. Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard. - -EFFET JURIDIQUE. Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas. - - -------------------------------------------------------------------- - -------------------------------------------------------------------- - -path-is-inside 1.0.2 - WTFPL OR MIT -https://github.com/domenic/path-is-inside#readme -Copyright (c) 2004 Sam Hocevar -Copyright (c) 2013-2016 Domenic Denicola - -Dual licensed under WTFPL and MIT: - ---- - -Copyright © 2013–2016 Domenic Denicola - -This work is free. You can redistribute it and/or modify it under the -terms of the Do What The Fuck You Want To Public License, Version 2, -as published by Sam Hocevar. See below for more details. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - Version 2, December 2004 - - Copyright (C) 2004 Sam Hocevar - - Everyone is permitted to copy and distribute verbatim or modified - copies of this license document, and changing it is allowed as long - as the name is changed. - - DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. You just DO WHAT THE FUCK YOU WANT TO. - ---- - -The MIT License (MIT) - -Copyright © 2013–2016 Domenic Denicola - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -------------------------------------------------------------------- diff --git a/ThirdPartyNotices-Repository.txt b/ThirdPartyNotices-Repository.txt index e58a39680f1f..9e7e822af1bb 100644 --- a/ThirdPartyNotices-Repository.txt +++ b/ThirdPartyNotices-Repository.txt @@ -6,20 +6,17 @@ Microsoft Python extension for Visual Studio Code incorporates third party mater 1. Go for Visual Studio Code (https://github.com/Microsoft/vscode-go) 2. Files from the Python Project (https://www.python.org/) -3. Google Diff Match and Patch (https://github.com/GerHobbelt/google-diff-match-patch) -4. enchannel-zmq-backend (https://github.com/nteract/enchannel-zmq-backend) -6. omnisharp-vscode (https://github.com/OmniSharp/omnisharp-vscode) -8. PTVS (https://github.com/Microsoft/PTVS) -9. Python documentation (https://docs.python.org/) -10. python-functools32 (https://github.com/MiCHiLU/python-functools32/blob/master/functools32/functools32.py) -11. pythonVSCode (https://github.com/DonJayamanne/pythonVSCode) -12. Sphinx (http://sphinx-doc.org/) -13. nteract (https://github.com/nteract/nteract) -14. less-plugin-inline-urls (https://github.com/less/less-plugin-inline-urls/) -15. jupyter-notebook (https://github.com/jupyter/notebook) -16. ipywidgets (https://github.com/jupyter-widgets) -17. vscode-cpptools (https://github.com/microsoft/vscode-cpptools) -18. font-awesome (https://github.com/FortAwesome/Font-Awesome) +3. omnisharp-vscode (https://github.com/OmniSharp/omnisharp-vscode) +4. PTVS (https://github.com/Microsoft/PTVS) +5. Python documentation (https://docs.python.org/) +6. python-functools32 (https://github.com/MiCHiLU/python-functools32/blob/master/functools32/functools32.py) +7. pythonVSCode (https://github.com/DonJayamanne/pythonVSCode) +8. Sphinx (http://sphinx-doc.org/) +9. nteract (https://github.com/nteract/nteract) +10. less-plugin-inline-urls (https://github.com/less/less-plugin-inline-urls/) +11. vscode-cpptools (https://github.com/microsoft/vscode-cpptools) +12. mocha (https://github.com/mochajs/mocha) +13. get-pip (https://github.com/pypa/get-pip) %% Go for Visual Studio Code NOTICES, INFORMATION, AND LICENSE BEGIN HERE @@ -246,25 +243,6 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ========================================= END OF Files from the Python Project NOTICES, INFORMATION, AND LICENSE -%% Google Diff Match and Patch NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= - * Copyright 2006 Google Inc. - * http://code.google.com/p/google-diff-match-patch/ - * - * 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. -========================================= -END OF Google Diff Match and Patch NOTICES, INFORMATION, AND LICENSE - %% omnisharp-vscode NOTICES, INFORMATION, AND LICENSE BEGIN HERE ========================================= Copyright (c) Microsoft Corporation @@ -966,107 +944,9 @@ Apache License ========================================= END OF less-plugin-inline-urls NOTICES, INFORMATION, AND LICENSE -%% jupyter notebook NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -# Licensing terms - -This project is licensed under the terms of the Modified BSD License -(also known as New or Revised or 3-Clause BSD), as follows: - -- Copyright (c) 2001-2015, IPython Development Team -- Copyright (c) 2015-, Jupyter Development Team - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this -list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. - -Neither the name of the Jupyter Development Team nor the names of its -contributors may be used to endorse or promote products derived from this -software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -## About the Jupyter Development Team - -The Jupyter Development Team is the set of all contributors to the Jupyter project. -This includes all of the Jupyter subprojects. - -The core team that coordinates development on GitHub can be found here: -https://github.com/jupyter/. - -## Our Copyright Policy - -Jupyter uses a shared copyright model. Each contributor maintains copyright -over their contributions to Jupyter. But, it is important to note that these -contributions are typically only changes to the repositories. Thus, the Jupyter -source code, in its entirety is not the copyright of any single person or -institution. Instead, it is the collective copyright of the entire Jupyter -Development Team. If individual contributors want to maintain a record of what -changes/contributions they have specific copyright on, they should indicate -their copyright in the commit message of the change, when they commit the -change to one of the Jupyter repositories. - -With this in mind, the following banner should be used in any source code file -to indicate the copyright and license terms: - - # Copyright (c) Jupyter Development Team. - # Distributed under the terms of the Modified BSD License. - -========================================= -END OF jupyter notebook NOTICES, INFORMATION, AND LICENSE - -%% ipywidgets NOTICES, INFORMATION, AND LICENSE BEGIN HERE -========================================= -Copyright (c) 2015 Project Jupyter Contributors -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -========================================= -END OF ipywidgets NOTICES, INFORMATION, AND LICENSE - %% vscode-cpptools NOTICES, INFORMATION, AND LICENSE BEGIN HERE ========================================= -vscode-cpptools +vscode-cpptools Copyright (c) Microsoft Corporation @@ -1074,96 +954,81 @@ All rights reserved. MIT License -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the Software), to deal in the -Software without restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the -Software, and to permit persons to whom the Software is furnished to do so, +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the Software), to deal in the +Software without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the +Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ========================================= END OF vscode-cpptools NOTICES, INFORMATION, AND LICENSE -%% enchannel-zmq-backend NOTICES, INFORMATION, AND LICENSE BEGIN HERE -Copyright (c) 2016, -All rights reserved. +%% mocha NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +(The MIT License) -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. +Copyright (c) 2011-2020 OpenJS Foundation and contributors, https://openjsf.org -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: -* Neither the name of enchannel-zmq-backend nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ========================================= -END OF enchannel-zmq-backend NOTICES, INFORMATION, AND LICENSE -======= -%% font-awesome NOTICES, INFORMATION, AND LICENSE BEGIN HERE +END OF mocha NOTICES, INFORMATION, AND LICENSE + + +%% get-pip NOTICES, INFORMATION, AND LICENSE BEGIN HERE ========================================= -Font Name - FontAwesome - -Font Awesome Free License -------------------------- - -Font Awesome Free is free, open source, and GPL friendly. You can use it for -commercial projects, open source projects, or really almost whatever you want. -Full Font Awesome Free license: https://fontawesome.com/license/free. - -# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/) -In the Font Awesome Free download, the CC BY 4.0 license applies to all icons -packaged as SVG and JS file types. - -# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL) -In the Font Awesome Free download, the SIL OFL license applies to all icons -packaged as web and desktop font files. - -# Code: MIT License (https://opensource.org/licenses/MIT) -In the Font Awesome Free download, the MIT license applies to all non-font and -non-icon files. - -# Attribution -Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font -Awesome Free files already contain embedded comments with sufficient -attribution, so you shouldn't need to do anything additional when using these -files normally. - -We've kept attribution comments terse, so we ask that you do not actively work -to remove them from files, especially code. They're a great way for folks to -learn about Font Awesome. - -# Brand Icons -All brand icons are trademarks of their respective owners. The use of these -trademarks does not indicate endorsement of the trademark holder by Font -Awesome, nor vice versa. **Please do not use brand logos for any purpose except -to represent the company, product, or service to which they refer.** + +Copyright (c) 2008-2019 The pip developers + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + ========================================= -END OF font-awesome NOTICES, INFORMATION, AND LICENSE +END OF get-pip NOTICES, INFORMATION, AND LICENSE diff --git a/build/.mocha-multi-reporters.config b/build/.mocha-multi-reporters.config index 539aa1c15b60..abe46f117f5b 100644 --- a/build/.mocha-multi-reporters.config +++ b/build/.mocha-multi-reporters.config @@ -1,3 +1,3 @@ { - "reporterEnabled": "spec,mocha-junit-reporter" + "reporterEnabled": "./build/ci/scripts/spec_with_pid,mocha-junit-reporter" } diff --git a/build/.mocha.functional.json b/build/.mocha.functional.json new file mode 100644 index 000000000000..71998902e984 --- /dev/null +++ b/build/.mocha.functional.json @@ -0,0 +1,14 @@ +{ + "spec": "./out/test/**/*.functional.test.js", + "require": [ + "out/test/unittests.js" + ], + "exclude": "out/**/*.jsx", + "reporter": "mocha-multi-reporters", + "reporter-option": "configFile=./build/.mocha-multi-reporters.config", + "ui": "tdd", + "recursive": true, + "colors": true, + "exit": true, + "timeout": 180000 +} diff --git a/build/.mocha.functional.opts b/build/.mocha.functional.opts deleted file mode 100644 index 47ae4d6eeb25..000000000000 --- a/build/.mocha.functional.opts +++ /dev/null @@ -1,10 +0,0 @@ -./out/test/**/*.functional.test.js ---require=out/test/unittests.js ---exclude=out/**/*.jsx ---ui=tdd ---recursive ---colors ---exit ---timeout=180000 ---reporter mocha-multi-reporters ---reporter-options configFile=build/.mocha-multi-reporters.config diff --git a/build/.mocha.functional.perf.json b/build/.mocha.functional.perf.json new file mode 100644 index 000000000000..d67cbb73e8f7 --- /dev/null +++ b/build/.mocha.functional.perf.json @@ -0,0 +1,11 @@ +{ + "spec": "./out/test/**/*.functional.test.js", + "exclude-out": "out/**/*.jsx", + "require": ["out/test/unittests.js"], + "reporter": "spec", + "ui": "tdd", + "recursive": true, + "colors": true, + "exit": true, + "timeout": 180000 +} diff --git a/build/.mocha.functional.perf.opts b/build/.mocha.functional.perf.opts deleted file mode 100644 index decfc3ece6e6..000000000000 --- a/build/.mocha.functional.perf.opts +++ /dev/null @@ -1,9 +0,0 @@ -./out/test/**/*.functional.test.js ---require=out/test/unittests.js ---exclude=out/**/*.jsx ---ui=tdd ---recursive ---colors ---exit ---timeout=180000 ---reporter spec diff --git a/build/.mocha.performance.json b/build/.mocha.performance.json new file mode 100644 index 000000000000..84dc3952cc85 --- /dev/null +++ b/build/.mocha.performance.json @@ -0,0 +1,11 @@ +{ + "spec": "./out/test/**/*.functional.test.js", + "require": ["out/test/unittests.js"], + "reporter": "mocha-multi-reporters", + "reporter-option": "configFile=build/.mocha.perf.config", + "ui": "tdd", + "recursive": true, + "colors": true, + "exit": true, + "timeout": 30000 +} diff --git a/build/.mocha.performance.opts b/build/.mocha.performance.opts deleted file mode 100644 index dafed0fdb18a..000000000000 --- a/build/.mocha.performance.opts +++ /dev/null @@ -1,10 +0,0 @@ -./out/test/**/*.functional.test.js ---require=out/test/unittests.js ---ui=tdd ---recursive ---colors ---exit ---timeout=30000 ---reporter mocha-multi-reporters ---reporter-options configFile=build/.mocha.perf.config ---grep DataScience diff --git a/build/.mocha.unittests.js.json b/build/.mocha.unittests.js.json new file mode 100644 index 000000000000..a0bc134c7dc8 --- /dev/null +++ b/build/.mocha.unittests.js.json @@ -0,0 +1,9 @@ +{ + "spec": "./out/test/**/*.unit.test.js", + "require": ["source-map-support/register", "out/test/unittests.js"], + "reporter": "mocha-multi-reporters", + "reporter-option": "configFile=build/.mocha-multi-reporters.config", + "ui": "tdd", + "recursive": true, + "colors": true +} diff --git a/build/.mocha.unittests.js.opts b/build/.mocha.unittests.js.opts deleted file mode 100644 index 314f85a1d3a9..000000000000 --- a/build/.mocha.unittests.js.opts +++ /dev/null @@ -1,8 +0,0 @@ ---require source-map-support/register ---require out/test/unittests.js ---reporter mocha-multi-reporters ---reporter-options configFile=build/.mocha-multi-reporters.config ---ui tdd ---recursive ---colors -./out/test/**/*.unit.test.js \ No newline at end of file diff --git a/build/.mocha.unittests.json b/build/.mocha.unittests.json new file mode 100644 index 000000000000..cb6bff959497 --- /dev/null +++ b/build/.mocha.unittests.json @@ -0,0 +1,13 @@ +{ + "spec": "./out/test/**/*.unit.test.js", + "require": [ + "out/test/unittests.js" + ], + "exclude": "out/**/*.jsx", + "reporter": "mocha-multi-reporters", + "reporter-option": "configFile=./build/.mocha-multi-reporters.config", + "ui": "tdd", + "recursive": true, + "colors": true, + "timeout": 180000 +} diff --git a/build/.mocha.unittests.opts b/build/.mocha.unittests.opts deleted file mode 100644 index 1583fcaaa727..000000000000 --- a/build/.mocha.unittests.opts +++ /dev/null @@ -1,7 +0,0 @@ -./out/test/**/*.unit.test.js ---require out/test/unittests.js ---reporter mocha-multi-reporters ---reporter-options configFile=build/.mocha-multi-reporters.config ---ui tdd ---recursive ---colors diff --git a/build/.mocha.unittests.ts.json b/build/.mocha.unittests.ts.json new file mode 100644 index 000000000000..b20e02bfa96f --- /dev/null +++ b/build/.mocha.unittests.ts.json @@ -0,0 +1,9 @@ +{ + "spec": "./src/test/**/*.unit.test.ts", + "require": ["ts-node/register", "out/test/unittests.js"], + "reporter": "mocha-multi-reporters", + "reporter-option": "configFile=build/.mocha-multi-reporters.config", + "ui": "tdd", + "recursive": true, + "colors": true +} diff --git a/build/.mocha.unittests.ts.opts b/build/.mocha.unittests.ts.opts deleted file mode 100644 index 9d97e8ef972a..000000000000 --- a/build/.mocha.unittests.ts.opts +++ /dev/null @@ -1,8 +0,0 @@ ---require ts-node/register ---require src/test/unittests.ts ---reporter mocha-multi-reporters ---reporter-options configFile=build/.mocha-multi-reporters.config ---ui tdd ---recursive ---colors -./src/test/**/*.unit.test.ts diff --git a/build/.nycrc b/build/.nycrc index e9540ef130f2..b92a4f36785d 100644 --- a/build/.nycrc +++ b/build/.nycrc @@ -2,8 +2,8 @@ "extends": "@istanbuljs/nyc-config-typescript", "all": true, "include": [ - "src/client/**/*.ts", "src/test/**/*.js", - "src/datascience-ui/**/*.ts", "src/datascience-ui/**/*.js" + "src/client/**/*.ts", "out/client/**/*.js" ], - "exclude": ["src/test/**/*.ts", "src/test/**/*.js"] -} \ No newline at end of file + "exclude": ["src/test/**/*.ts", "out/test/**/*.js"], + "exclude-node-modules": true +} diff --git a/build/azure-pipeline.pre-release.yml b/build/azure-pipeline.pre-release.yml new file mode 100644 index 000000000000..e7159618d3ae --- /dev/null +++ b/build/azure-pipeline.pre-release.yml @@ -0,0 +1,158 @@ +# Run on a schedule +trigger: none +pr: none + +schedules: + - cron: '0 10 * * 1-5' # 10AM UTC (2AM PDT) MON-FRI (VS Code Pre-release builds at 9PM PDT) + displayName: Nightly Pre-Release Schedule + always: false # only run if there are source code changes + branches: + include: + - main + +resources: + repositories: + - repository: templates + type: github + name: microsoft/vscode-engineering + ref: main + endpoint: Monaco + +parameters: + - name: publishExtension + displayName: 🚀 Publish Extension + type: boolean + default: false + +extends: + template: azure-pipelines/extension/pre-release.yml@templates + parameters: + publishExtension: ${{ parameters.publishExtension }} + ghCreateTag: false + standardizedVersioning: true + l10nSourcePaths: ./src/client + + buildPlatforms: + - name: Linux + vsceTarget: 'web' + - name: Linux + packageArch: arm64 + vsceTarget: linux-arm64 + - name: Linux + packageArch: arm + vsceTarget: linux-armhf + - name: Linux + packageArch: x64 + vsceTarget: linux-x64 + - name: Linux + packageArch: arm64 + vsceTarget: alpine-arm64 + - name: Linux + packageArch: x64 + vsceTarget: alpine-x64 + - name: MacOS + packageArch: arm64 + vsceTarget: darwin-arm64 + - name: MacOS + packageArch: x64 + vsceTarget: darwin-x64 + - name: Windows + packageArch: arm + vsceTarget: win32-arm64 + - name: Windows + packageArch: x64 + vsceTarget: win32-x64 + + buildSteps: + - task: NodeTool@0 + inputs: + versionSpec: '22.17.0' + displayName: Select Node version + + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.9' + addToPath: true + architecture: 'x64' + displayName: Select Python version + + - script: python -m pip install -U pip + displayName: Upgrade pip + + - script: python -m pip install wheel nox + displayName: Install wheel and nox + + - script: npm ci + displayName: Install NPM dependencies + + - script: nox --session install_python_libs + displayName: Install Jedi, get-pip, etc + + - script: python ./build/update_package_file.py + displayName: Update telemetry in package.json + + - script: npm run addExtensionPackDependencies + displayName: Update optional extension dependencies + + - script: npx gulp prePublishBundle + displayName: Build + + - bash: | + mkdir -p $(Build.SourcesDirectory)/python-env-tools/bin + chmod +x $(Build.SourcesDirectory)/python-env-tools/bin + displayName: Make Directory for python-env-tool binary + + - bash: | + if [ "$(vsceTarget)" == "win32-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-pc-windows-msvc" + elif [ "$(vsceTarget)" == "win32-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-pc-windows-msvc" + elif [ "$(vsceTarget)" == "linux-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + elif [ "$(vsceTarget)" == "linux-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-unknown-linux-gnu" + elif [ "$(vsceTarget)" == "linux-armhf" ]; then + echo "##vso[task.setvariable variable=buildTarget]armv7-unknown-linux-gnueabihf" + elif [ "$(vsceTarget)" == "darwin-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-apple-darwin" + elif [ "$(vsceTarget)" == "darwin-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-apple-darwin" + elif [ "$(vsceTarget)" == "alpine-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + elif [ "$(vsceTarget)" == "alpine-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-unknown-linux-gnu" + elif [ "$(vsceTarget)" == "web" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + else + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + fi + displayName: Set buildTarget variable + + - task: DownloadPipelineArtifact@2 + inputs: + buildType: 'specific' + project: 'Monaco' + definition: 591 + buildVersionToDownload: 'latest' + branchName: 'refs/heads/main' + targetPath: '$(Build.SourcesDirectory)/python-env-tools/bin' + artifactName: 'bin-$(buildTarget)' + itemPattern: | + pet.exe + pet + ThirdPartyNotices.txt + + - bash: | + ls -lf ./python-env-tools/bin + chmod +x ./python-env-tools/bin/pet* + ls -lf ./python-env-tools/bin + displayName: Set chmod for pet binary + + - script: python -c "import shutil; shutil.rmtree('.nox', ignore_errors=True)" + displayName: Clean up Nox + + tsa: + config: + areaPath: 'Visual Studio Code Python Extensions' + serviceTreeID: '6e6194bc-7baa-4486-86d0-9f5419626d46' + enabled: true diff --git a/build/azure-pipeline.stable.yml b/build/azure-pipeline.stable.yml new file mode 100644 index 000000000000..cd66613eec8d --- /dev/null +++ b/build/azure-pipeline.stable.yml @@ -0,0 +1,153 @@ +trigger: none +# branches: +# include: +# - release* +# tags: +# include: ['*'] +pr: none + +resources: + repositories: + - repository: templates + type: github + name: microsoft/vscode-engineering + ref: main + endpoint: Monaco + +parameters: + - name: publishExtension + displayName: 🚀 Publish Extension + type: boolean + default: false + +extends: + template: azure-pipelines/extension/stable.yml@templates + parameters: + publishExtension: ${{ parameters.publishExtension }} + l10nSourcePaths: ./src/client + + buildPlatforms: + - name: Linux + vsceTarget: 'web' + - name: Linux + packageArch: arm64 + vsceTarget: linux-arm64 + - name: Linux + packageArch: arm + vsceTarget: linux-armhf + - name: Linux + packageArch: x64 + vsceTarget: linux-x64 + - name: Linux + packageArch: arm64 + vsceTarget: alpine-arm64 + - name: Linux + packageArch: x64 + vsceTarget: alpine-x64 + - name: MacOS + packageArch: arm64 + vsceTarget: darwin-arm64 + - name: MacOS + packageArch: x64 + vsceTarget: darwin-x64 + - name: Windows + packageArch: arm + vsceTarget: win32-arm64 + - name: Windows + packageArch: x64 + vsceTarget: win32-x64 + + buildSteps: + - task: NodeTool@0 + inputs: + versionSpec: '22.17.0' + displayName: Select Node version + + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.9' + addToPath: true + architecture: 'x64' + displayName: Select Python version + + - script: python -m pip install -U pip + displayName: Upgrade pip + + - script: python -m pip install wheel nox + displayName: Install wheel and nox + + - script: npm ci + displayName: Install NPM dependencies + + - script: nox --session install_python_libs + displayName: Install Jedi, get-pip, etc + + - script: python ./build/update_package_file.py + displayName: Update telemetry in package.json + + - script: npm run addExtensionPackDependencies + displayName: Update optional extension dependencies + + - script: npx gulp prePublishBundle + displayName: Build + + - bash: | + mkdir -p $(Build.SourcesDirectory)/python-env-tools/bin + chmod +x $(Build.SourcesDirectory)/python-env-tools/bin + displayName: Make Directory for python-env-tool binary + + - bash: | + if [ "$(vsceTarget)" == "win32-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-pc-windows-msvc" + elif [ "$(vsceTarget)" == "win32-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-pc-windows-msvc" + elif [ "$(vsceTarget)" == "linux-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + elif [ "$(vsceTarget)" == "linux-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-unknown-linux-gnu" + elif [ "$(vsceTarget)" == "linux-armhf" ]; then + echo "##vso[task.setvariable variable=buildTarget]armv7-unknown-linux-gnueabihf" + elif [ "$(vsceTarget)" == "darwin-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-apple-darwin" + elif [ "$(vsceTarget)" == "darwin-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-apple-darwin" + elif [ "$(vsceTarget)" == "alpine-x64" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + elif [ "$(vsceTarget)" == "alpine-arm64" ]; then + echo "##vso[task.setvariable variable=buildTarget]aarch64-unknown-linux-gnu" + elif [ "$(vsceTarget)" == "web" ]; then + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + else + echo "##vso[task.setvariable variable=buildTarget]x86_64-unknown-linux-musl" + fi + displayName: Set buildTarget variable + + - task: DownloadPipelineArtifact@2 + inputs: + buildType: 'specific' + project: 'Monaco' + definition: 593 + buildVersionToDownload: 'latestFromBranch' + branchName: 'refs/heads/release/2026.4' + targetPath: '$(Build.SourcesDirectory)/python-env-tools/bin' + artifactName: 'bin-$(buildTarget)' + itemPattern: | + pet.exe + pet + ThirdPartyNotices.txt + + - bash: | + ls -lf ./python-env-tools/bin + chmod +x ./python-env-tools/bin/pet* + ls -lf ./python-env-tools/bin + displayName: Set chmod for pet binary + + - script: python -c "import shutil; shutil.rmtree('.nox', ignore_errors=True)" + displayName: Clean up Nox + tsa: + config: + areaPath: 'Visual Studio Code Python Extensions' + serviceTreeID: '6e6194bc-7baa-4486-86d0-9f5419626d46' + enabled: true + apiScanDependentPipelineId: '593' # python-environment-tools + apiScanSoftwareVersion: '2024' diff --git a/build/azure-pipelines/pipeline.yml b/build/azure-pipelines/pipeline.yml new file mode 100644 index 000000000000..0796e38ca598 --- /dev/null +++ b/build/azure-pipelines/pipeline.yml @@ -0,0 +1,58 @@ +############################################################################################### +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +############################################################################################### +name: $(Date:yyyyMMdd)$(Rev:.r) + +trigger: none + +pr: none + +resources: + repositories: + - repository: templates + type: github + name: microsoft/vscode-engineering + ref: main + endpoint: Monaco + +parameters: + - name: quality + displayName: Quality + type: string + default: latest + values: + - latest + - next + - name: publishPythonApi + displayName: 🚀 Publish pythonExtensionApi + type: boolean + default: false + +extends: + template: azure-pipelines/npm-package/pipeline.yml@templates + parameters: + npmPackages: + - name: pythonExtensionApi + testPlatforms: + - name: Linux + nodeVersions: + - 22.21.1 + - name: MacOS + nodeVersions: + - 22.21.1 + - name: Windows + nodeVersions: + - 22.21.1 + testSteps: + - template: /build/azure-pipelines/templates/test-steps.yml@self + parameters: + package: pythonExtensionApi + buildSteps: + - template: /build/azure-pipelines/templates/pack-steps.yml@self + parameters: + package: pythonExtensionApi + ghTagPrefix: release/pythonExtensionApi/ + tag: ${{ parameters.quality }} + publishPackage: ${{ parameters.publishPythonApi }} + workingDirectory: $(Build.SourcesDirectory)/pythonExtensionApi diff --git a/build/azure-pipelines/templates/pack-steps.yml b/build/azure-pipelines/templates/pack-steps.yml new file mode 100644 index 000000000000..97037efb59ba --- /dev/null +++ b/build/azure-pipelines/templates/pack-steps.yml @@ -0,0 +1,14 @@ +############################################################################################### +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +############################################################################################### +parameters: +- name: package + +steps: + - script: npm install --root-only + workingDirectory: $(Build.SourcesDirectory) + displayName: Install root dependencies + - script: npm install + workingDirectory: $(Build.SourcesDirectory)/${{ parameters.package }} + displayName: Install package dependencies diff --git a/build/azure-pipelines/templates/test-steps.yml b/build/azure-pipelines/templates/test-steps.yml new file mode 100644 index 000000000000..15eb3db6384d --- /dev/null +++ b/build/azure-pipelines/templates/test-steps.yml @@ -0,0 +1,23 @@ +############################################################################################### +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +############################################################################################### +parameters: +- name: package + type: string +- name: script + type: string + default: 'all:publish' + +steps: + - script: npm install --root-only + workingDirectory: $(Build.SourcesDirectory) + displayName: Install root dependencies + - bash: | + /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & + echo ">>> Started xvfb" + displayName: Start xvfb + condition: eq(variables['Agent.OS'], 'Linux') + - script: npm run ${{ parameters.script }} + workingDirectory: $(Build.SourcesDirectory)/${{ parameters.package }} + displayName: Verify package diff --git a/build/build-install-requirements.txt b/build/build-install-requirements.txt new file mode 100644 index 000000000000..8baaa59ded67 --- /dev/null +++ b/build/build-install-requirements.txt @@ -0,0 +1,2 @@ +# Requirements needed to run install_debugpy.py and download_get_pip.py +packaging diff --git a/build/ci/addEnvPath.py b/build/ci/addEnvPath.py index abad9ec3b5c9..66eff2a7b25d 100644 --- a/build/ci/addEnvPath.py +++ b/build/ci/addEnvPath.py @@ -3,7 +3,8 @@ #Adds the virtual environment's executable path to json file -import json,sys +import json +import sys import os.path jsonPath = sys.argv[1] key = sys.argv[2] diff --git a/build/ci/codecov.yml b/build/ci/codecov.yml deleted file mode 100644 index 8ed52955f093..000000000000 --- a/build/ci/codecov.yml +++ /dev/null @@ -1,27 +0,0 @@ -codecov: - notify: - require_ci_to_pass: yes - -coverage: - precision: 0 - round: down - range: '70...100' - - status: - project: yes - patch: yes - changes: no - -parsers: - gcov: - branch_detection: - conditional: yes - loop: yes - method: no - macro: no - -comment: - branch: !release* - layout: 'header, diff, files' - behavior: default - require_changes: no diff --git a/build/ci/conda_base.yml b/build/ci/conda_base.yml index d57f9470a0b9..a1b589e38a32 100644 --- a/build/ci/conda_base.yml +++ b/build/ci/conda_base.yml @@ -1,4 +1 @@ -pandas -jupyter -numpy -matplotlib +pip diff --git a/build/ci/conda_env_1.yml b/build/ci/conda_env_1.yml index 4385658ea6ef..4f9ceefd27fb 100644 --- a/build/ci/conda_env_1.yml +++ b/build/ci/conda_env_1.yml @@ -1,7 +1,4 @@ name: conda_env_1 dependencies: - - python=3.7 - - pandas - - jupyter - - numpy - - matplotlib + - python=3.9 + - pip diff --git a/build/ci/conda_env_2.yml b/build/ci/conda_env_2.yml index f0dbe377e502..af9d7a46ba3e 100644 --- a/build/ci/conda_env_2.yml +++ b/build/ci/conda_env_2.yml @@ -1,7 +1,4 @@ name: conda_env_2 dependencies: - - python=3.8 - - pandas - - jupyter - - numpy - - matplotlib + - python=3.9 + - pip diff --git a/build/ci/performance/DS_test_benchmark.json b/build/ci/performance/DS_test_benchmark.json deleted file mode 100644 index 5d83e811700a..000000000000 --- a/build/ci/performance/DS_test_benchmark.json +++ /dev/null @@ -1,542 +0,0 @@ -[ - { - "name": "DataScience gotocell tests Basic execution", - "time": 0.135 - }, - { - "name": "DataScience gotocell tests Basic edit", - "time": 0.199 - }, - { - "name": "DataScience Error Handler Functional Tests Jupyter not installed", - "time": 0.215 - }, - { - "name": "DataScience Intellisense tests Simple autocomplete", - "time": 0.623 - }, - { - "name": "DataScience Intellisense tests Multiple interpreters", - "time": 0.535 - }, - { - "name": "DataScience Intellisense tests Jupyter autocomplete", - "time": 0.425 - }, - { - "name": "DataScience Intellisense tests Jupyter autocomplete not timeout", - "time": 0.496 - }, - { - "name": "DataScience Intellisense tests Filtered Jupyter autocomplete, verify magic commands appear", - "time": 0.409 - }, - { - "name": "DataScience Intellisense tests Filtered Jupyter autocomplete, verify magic commands are filtered", - "time": 0.366 - }, - { - "name": "DataScience Interactive Panel Input Cell is displayed", - "time": 0.121 - }, - { - "name": "DataScience Interactive Window output tests Simple text", - "time": 0.528 - }, - { - "name": "DataScience Interactive Window output tests Clear output", - "time": 0.495 - }, - { - "name": "DataScience Interactive Window output tests Hide inputs", - "time": 0.559 - }, - { - "name": "DataScience Interactive Window output tests Show inputs", - "time": 0.481 - }, - { - "name": "DataScience Interactive Window output tests Expand inputs", - "time": 0.496 - }, - { - "name": "DataScience Interactive Window output tests Ctrl + 1/Ctrl + 2", - "time": 0.427 - }, - { - "name": "DataScience Interactive Window output tests Escape/Ctrl+U", - "time": 0.365 - }, - { - "name": "DataScience Interactive Window output tests Click outside cells sets focus to input box", - "time": 0.447 - }, - { - "name": "DataScience Interactive Window output tests Collapse / expand cell", - "time": 0.568 - }, - { - "name": "DataScience Interactive Window output tests Hide / show cell", - "time": 0.486 - }, - { - "name": "DataScience Interactive Window output tests Mime Types", - "time": 1.141 - }, - { - "name": "DataScience Interactive Window output tests Undo/redo commands", - "time": 0.74 - }, - { - "name": "DataScience Interactive Window output tests Click buttons", - "time": 0.706 - }, - { - "name": "DataScience Interactive Window output tests Export", - "time": 0.462 - }, - { - "name": "DataScience Interactive Window output tests Dispose test", - "time": 0.466 - }, - { - "name": "DataScience Interactive Window output tests Editor Context", - "time": 0.469 - }, - { - "name": "DataScience Interactive Window output tests Simple input", - "time": 0.516 - }, - { - "name": "DataScience Interactive Window output tests Copy to source input", - "time": 0.561 - }, - { - "name": "DataScience Interactive Window output tests Multiple input", - "time": 0.96 - }, - { - "name": "DataScience Interactive Window output tests Restart with session failure", - "time": 0.89 - }, - { - "name": "DataScience Interactive Window output tests Gather code run from text editor", - "time": 0.485 - }, - { - "name": "DataScience Interactive Window output tests Gather code run from input box", - "time": 0.502 - }, - { - "name": "DataScience Interactive Window output tests Copy back to source", - "time": 0.296 - }, - { - "name": "DataScience Interactive Window output tests Limit text output", - "time": 0.431 - }, - { - "name": "DataScience Interactive Window output tests Type in input", - "time": 0.617 - }, - { - "name": "DataScience LiveShare tests Host alone", - "time": 0.473 - }, - { - "name": "DataScience LiveShare tests Host Shutdown and Run", - "time": 0.596 - }, - { - "name": "DataScience LiveShare tests Going through codewatcher", - "time": 0.711 - }, - { - "name": "DataScience LiveShare tests Export from guest", - "time": 0.138 - }, - { - "name": "DataScience LiveShare tests Guest does not have extension", - "time": 1.839 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Simple text", - "time": 0.596 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Invalid session still runs", - "time": 0.515 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Invalid kernel still runs", - "time": 0.563 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Mime Types", - "time": 1.979 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Click buttons", - "time": 0.551 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Server already loaded", - "time": 2.183 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Server load skipped", - "time": 0.672 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Convert to python", - "time": 0.563 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Save As", - "time": 0.516 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests RunAllCells", - "time": 0.629 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Startup and shutdown", - "time": 1.198 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Failure", - "time": 0.745 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Selection/Focus Markdown saved when selecting another cell", - "time": 0.464 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Model updates Add a cell and undo", - "time": 0.179 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Model updates Edit a cell and undo", - "time": 0.962 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Model updates Remove, move, and undo", - "time": 0.339 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Model updates Update as user types into editor (update redux store and model)", - "time": 0.609 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Model updates Updates are not lost when switching to markdown (update redux store and model)", - "time": 0.698 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Traverse cells by using ArrowUp and ArrowDown, k and j", - "time": 0.307 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Traverse cells by using ArrowUp and ArrowDown, k and j", - "time": 0.155 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Pressing 'Shift+Enter' on a selected cell executes the cell and advances to the next cell", - "time": 0.529 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Pressing 'Ctrl+Enter' on a selected cell executes the cell and cell selection is not changed", - "time": 0.283 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Pressing 'Alt+Enter' on a selected cell adds a new cell below it", - "time": 0.158 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Auto brackets work", - "time": 0.343 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Navigating cells using up/down keys while focus is set to editor", - "time": 0.154 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Navigating cells using up/down keys through code & markdown cells, while focus is set to editor", - "time": 1.632 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Pressing 'a' on a selected cell adds a cell at the current position", - "time": 0.201 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Pressing 'b' on a selected cell adds a cell after the current position", - "time": 0.21 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Toggle visibility of output", - "time": 0.358 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Toggle markdown and code modes using 'y' and 'm' keys (cells should not be focused)", - "time": 0.274 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Toggle markdown and code modes using 'y' and 'm' keys & ensure changes to cells is preserved", - "time": 0.568 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Test undo using the key 'z'", - "time": 2.229 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Test save using the key 'ctrl+s' on Windows", - "time": 0.785 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Test save using the key 'ctrl+s' on Mac", - "time": 1.685 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Test save using the key 'cmd+s' on a Mac", - "time": 0.655 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Keyboard Shortcuts Test save using the key 'cmd+s' on a Windows", - "time": 1.671 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook every 1s", - "time": 3.03 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save File saved with same format", - "time": 2.031 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Should not auto save notebook, ever", - "time": 5.039 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook when focus changes from active editor to none", - "time": 0.425 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook when focus changes from active editor to something else", - "time": 0.435 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Should not auto save notebook when active editor changes", - "time": 5.014 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook when window state changes to being not focused", - "time": 0.456 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook when window state changes to being focused", - "time": 0.649 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook when window state changes to being focused for focusChange", - "time": 0.471 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook when window state changes to being not focused for focusChange", - "time": 0.48 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Auto Save Auto save notebook when view state changes", - "time": 0.495 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Update Metadata Update notebook metadata on execution", - "time": 0.885 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Clear Outputs Clear Outputs in WebView", - "time": 0.479 - }, - { - "name": "DataScience Native Editor Without Custom Editor API Editor tests Clear Outputs Clear execution_count and outputs in notebook", - "time": 0.508 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Simple text", - "time": 0.966 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Invalid session still runs", - "time": 0.894 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Invalid kernel still runs", - "time": 0.946 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Mime Types", - "time": 3.283 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Click buttons", - "time": 0.984 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Server already loaded", - "time": 2.298 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Server load skipped", - "time": 0.778 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Convert to python", - "time": 1.022 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests RunAllCells", - "time": 1.048 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Startup and shutdown", - "time": 2.3 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Failure", - "time": 1.219 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Selection/Focus Markdown saved when selecting another cell", - "time": 1.319 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Model updates Add a cell and undo", - "time": 0.257 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Model updates Edit a cell and undo", - "time": 2.682 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Model updates Remove, move, and undo", - "time": 0.709 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Model updates Update as user types into editor (update redux store and model)", - "time": 1.802 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Model updates Updates are not lost when switching to markdown (update redux store and model)", - "time": 1.91 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Traverse cells by using ArrowUp and ArrowDown, k and j", - "time": 0.341 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Traverse cells by using ArrowUp and ArrowDown, k and j", - "time": 0.164 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Pressing 'Shift+Enter' on a selected cell executes the cell and advances to the next cell", - "time": 0.987 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Pressing 'Ctrl+Enter' on a selected cell executes the cell and cell selection is not changed", - "time": 0.425 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Pressing 'Alt+Enter' on a selected cell adds a new cell below it", - "time": 0.287 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Auto brackets work", - "time": 0.796 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Navigating cells using up/down keys while focus is set to editor", - "time": 0.146 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Navigating cells using up/down keys through code & markdown cells, while focus is set to editor", - "time": 3.292 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Pressing 'a' on a selected cell adds a cell at the current position", - "time": 0.331 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Pressing 'b' on a selected cell adds a cell after the current position", - "time": 0.349 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Toggle visibility of output", - "time": 0.509 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Toggle markdown and code modes using 'y' and 'm' keys (cells should not be focused)", - "time": 0.358 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Keyboard Shortcuts Toggle markdown and code modes using 'y' and 'm' keys & ensure changes to cells is preserved", - "time": 1.251 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Update Metadata Update notebook metadata on execution", - "time": 1.242 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Clear Outputs Clear Outputs in WebView", - "time": 0.593 - }, - { - "name": "DataScience Native Editor With Custom Editor API Editor tests Clear Outputs Clear execution_count and outputs in notebook", - "time": 0.614 - }, - { - "name": "DataScience notebook tests Verify manual working directory", - "time": 0.117 - }, - { - "name": "DataScience notebook tests Verify ${fileDirname} working directory", - "time": 0.353 - }, - { - "name": "DataScience notebook tests Change Interpreter", - "time": 0.218 - }, - { - "name": "DataScience notebook tests Restart kernel", - "time": 0.492 - }, - { - "name": "DataScience notebook tests Cancel execution", - "time": 0.318 - }, - { - "name": "DataScience notebook tests Interrupt kernel", - "time": 15.383 - }, - { - "name": "DataScience notebook tests MimeTypes", - "time": 0.603 - }, - { - "name": "DataScience notebook tests Non default config fails", - "time": 0.104 - }, - { - "name": "DataScience notebook tests Invalid kernel spec works", - "time": 0.151 - }, - { - "name": "DataScience notebook tests Server cache working", - "time": 0.255 - }, - { - "name": "DataScience notebook tests Server death", - "time": 0.282 - }, - { - "name": "DataScience notebook tests Execution logging", - "time": 0.152 - } -] diff --git a/build/ci/performance/checkPerformanceResults.js b/build/ci/performance/checkPerformanceResults.js deleted file mode 100644 index f632fd0b5224..000000000000 --- a/build/ci/performance/checkPerformanceResults.js +++ /dev/null @@ -1,94 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; -const fs = require('fs'); -const path = require('path'); -const constants = require('../../constants'); - -const benchmarkFile = path.join(constants.ExtensionRootDir, 'build', 'ci', 'performance', 'DS_test_benchmark.json'); -const performanceResultsFile = path.join( - constants.ExtensionRootDir, - 'build', - 'ci', - 'performance', - 'performance-results.json' -); -const errorMargin = 1.1; -let failedTests = ''; - -function getFailingTimesString(missedTimes) { - let printValue = ''; - for (const time of missedTimes) { - printValue += String(time) + ', '; - } - return printValue.substring(0, printValue.length - 2); -} - -fs.readFile(benchmarkFile, 'utf8', (benchmarkError, benchmark) => { - if (benchmarkError) { - throw benchmarkError; - } - - fs.readFile(performanceResultsFile, 'utf8', (performanceResultsFileError, performanceData) => { - if (performanceResultsFileError) { - throw performanceResultsFileError; - } - - const benchmarkJson = JSON.parse(benchmark); - const performanceJson = JSON.parse(performanceData); - - performanceJson.forEach((result) => { - const cleanTimes = result.times.filter((x) => x !== 'S' && x !== 'F'); - const n = cleanTimes.length; - const testcase = benchmarkJson.find((x) => x.name === result.name); - - if (testcase && testcase.time !== 'S') { - if (n === 0 && result.times.every((t) => t === 'F')) { - // Test failed every time - failedTests += 'Failed every time: ' + testcase.name + '\n'; - } else { - let missedTimes = []; - for (let time of cleanTimes) { - if (parseFloat(time) > parseFloat(testcase.time) * errorMargin) { - missedTimes.push(parseFloat(time)); - } - } - - if (missedTimes.length >= 2) { - const skippedTimes = result.times.filter((t) => t === 'S'); - const failedTimes = result.times.filter((t) => t === 'F'); - - failedTests += - 'Performance is slow in: ' + - testcase.name + - '.\n\tBenchmark time: ' + - String(parseFloat(testcase.time) * errorMargin) + - '\n\tTimes the test missed the benchmark: ' + - missedTimes.length + - '\n\tFailing times: ' + - getFailingTimesString(missedTimes) + - '\n\tTimes it was skipped: ' + - skippedTimes.length + - '\n\tTimes it failed: ' + - failedTimes.length + - '\n'; - } - } - } - }); - - // Delete performance-results.json - fs.unlink(performanceResultsFile, (deleteError) => { - if (deleteError) { - if (failedTests.length > 0) { - console.log(failedTests); - } - throw deleteError; - } - }); - - if (failedTests.length > 0) { - throw new Error(failedTests); - } - }); -}); diff --git a/build/ci/performance/createNewPerformanceBenchmark.js b/build/ci/performance/createNewPerformanceBenchmark.js deleted file mode 100644 index 7cdf93d3ac81..000000000000 --- a/build/ci/performance/createNewPerformanceBenchmark.js +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; -const fastXmlParser = require('fast-xml-parser'); -const fs = require('fs'); -const path = require('path'); -const constants = require('../../constants'); - -const xmlFile = path.join(constants.ExtensionRootDir, 'xunit-test-results.xml'); -let performanceData = []; - -function getTime(testcase) { - if (testcase.failure) { - return 'F'; - } else if (testcase.skipped === '') { - return 'S'; - } - return parseFloat(testcase.time); -} - -fs.readFile(xmlFile, 'utf8', (xmlReadError, xmlData) => { - if (xmlReadError) { - throw xmlReadError; - } - - if (fastXmlParser.validate(xmlData)) { - const defaultOptions = { - attributeNamePrefix: '', - ignoreAttributes: false - }; - const jsonObj = fastXmlParser.parse(xmlData, defaultOptions); - - jsonObj.testsuite.testcase.forEach((testcase) => { - const test = { - name: testcase.classname + ' ' + testcase.name, - time: getTime(testcase) - }; - - if (test.time !== 'S' && test.time > 0.1) { - performanceData.push(test); - } - }); - - fs.writeFile( - path.join(constants.ExtensionRootDir, 'build', 'ci', 'performance', 'DS_test_benchmark.json'), - JSON.stringify(performanceData, null, 2), - (writeResultsError) => { - if (writeResultsError) { - throw writeResultsError; - } - console.log('DS_test_benchmark.json was saved!'); - } - ); - } -}); diff --git a/build/ci/performance/perfJobs.yaml b/build/ci/performance/perfJobs.yaml deleted file mode 100644 index 65c41b40c0a7..000000000000 --- a/build/ci/performance/perfJobs.yaml +++ /dev/null @@ -1,79 +0,0 @@ -jobs: - - job: Testing_Round_1 - timeoutInMinutes: 120 - strategy: - matrix: - Python37: - PythonVersion: '3.7' - pool: DSPerf - steps: - - task: Npm@1 - displayName: 'npm ci' - inputs: - workingDir: ${{ parameters.workingDirectory }} - command: custom - verbose: true - customCommand: ci - - task: Gulp@0 - displayName: 'Compile and check for errors' - inputs: - targets: 'prePublishNonBundle' - - powershell: | - mocha --require source-map-support/register --opts ./build/.mocha.performance.opts - node ./build/ci/performance/savePerformanceResults.js - - - job: Testing_Round_2 - dependsOn: - - Testing_Round_1 - timeoutInMinutes: 120 - strategy: - matrix: - Python37: - PythonVersion: '3.7' - pool: DSPerf - steps: - - powershell: | - mocha --require source-map-support/register --opts ./build/.mocha.performance.opts - node ./build/ci/performance/savePerformanceResults.js - - - job: Testing_Round_3 - dependsOn: - - Testing_Round_2 - timeoutInMinutes: 120 - strategy: - matrix: - Python37: - PythonVersion: '3.7' - pool: DSPerf - steps: - - powershell: | - mocha --require source-map-support/register --opts ./build/.mocha.performance.opts - node ./build/ci/performance/savePerformanceResults.js - - - job: Testing_Round_4 - dependsOn: - - Testing_Round_3 - timeoutInMinutes: 120 - strategy: - matrix: - Python37: - PythonVersion: '3.7' - pool: DSPerf - steps: - - powershell: | - mocha --require source-map-support/register --opts ./build/.mocha.performance.opts - node ./build/ci/performance/savePerformanceResults.js - - - job: Testing_Round_5 - dependsOn: - - Testing_Round_4 - timeoutInMinutes: 120 - strategy: - matrix: - Python37: - PythonVersion: '3.7' - pool: DSPerf - steps: - - powershell: | - mocha --require source-map-support/register --opts ./build/.mocha.performance.opts - node ./build/ci/performance/savePerformanceResults.js diff --git a/build/ci/performance/savePerformanceResults.js b/build/ci/performance/savePerformanceResults.js deleted file mode 100644 index 456eb254331b..000000000000 --- a/build/ci/performance/savePerformanceResults.js +++ /dev/null @@ -1,79 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; -const fastXmlParser = require('fast-xml-parser'); -const fs = require('fs'); -const path = require('path'); -const constants = require('../../constants'); - -const xmlFile = path.join(constants.ExtensionRootDir, 'xunit-test-results.xml'); -const jsonFile = path.join(constants.ExtensionRootDir, 'build', 'ci', 'performance', 'performance-results.json'); -let performanceData = []; - -function getTime(testcase) { - if (testcase.failure) { - return 'F'; - } else if (testcase.skipped === '') { - return 'S'; - } - return parseFloat(testcase.time); -} - -fs.readFile(xmlFile, 'utf8', (xmlReadError, xmlData) => { - if (xmlReadError) { - throw xmlReadError; - } - - if (fastXmlParser.validate(xmlData)) { - const defaultOptions = { - attributeNamePrefix: '', - ignoreAttributes: false - }; - const jsonObj = fastXmlParser.parse(xmlData, defaultOptions); - - fs.readFile(jsonFile, 'utf8', (jsonReadError, data) => { - if (jsonReadError) { - // File doesn't exist, so we create it - jsonObj.testsuite.testcase.forEach((testcase) => { - const test = { - name: testcase.classname + ' ' + testcase.name, - times: [getTime(testcase)] - }; - - performanceData.push(test); - }); - } else { - performanceData = JSON.parse(data); - - jsonObj.testsuite.testcase.forEach((testcase) => { - let test = performanceData.find((x) => x.name === testcase.classname + ' ' + testcase.name); - let time = getTime(testcase); - - if (test) { - // if the test name is already there, we add the new time - test.times.push(time); - } else { - // if its not there, we add the whole thing - const test = { - name: testcase.classname + ' ' + testcase.name, - times: [time] - }; - - performanceData.push(test); - } - }); - } - - fs.writeFile( - path.join(constants.ExtensionRootDir, 'build', 'ci', 'performance', 'performance-results.json'), - JSON.stringify(performanceData, null, 2), - (writeResultsError) => { - if (writeResultsError) { - throw writeResultsError; - } - console.log('performance-results.json was saved!'); - } - ); - }); - } -}); diff --git a/build/ci/performance/vscode-python-performance.yaml b/build/ci/performance/vscode-python-performance.yaml deleted file mode 100644 index 3e84f35805bf..000000000000 --- a/build/ci/performance/vscode-python-performance.yaml +++ /dev/null @@ -1,26 +0,0 @@ -name: '$(Year:yyyy).$(Month).0.$(BuildID)-weekly-performance-test' - -trigger: none -pr: none -schedules: - - cron: '0 0 * * sat' - displayName: Weekly Performance Test - branches: - include: - - master - -stages: - - stage: Test_performance - jobs: - - template: perfJobs.yaml - - - stage: Results - dependsOn: - - Test_performance - jobs: - - job: CheckResults - timeoutInMinutes: 5 - pool: DSPerf - steps: - - powershell: | - node ./build/ci/performance/checkPerformanceResults.js diff --git a/build/ci/postInstall.js b/build/ci/postInstall.js deleted file mode 100644 index 6d02c8f1611e..000000000000 --- a/build/ci/postInstall.js +++ /dev/null @@ -1,50 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; - -var colors = require('colors/safe'); -var fs = require('fs'); -var path = require('path'); -var constants_1 = require('../constants'); -/** - * In order to compile the extension in strict mode, one of the dependencies (@jupyterlab) has some files that - * just won't compile in strict mode. - * Unfortunately we cannot fix it by overriding their type definitions - * Note: that has been done for a few of the JupyterLabl files (see typings/index.d.ts). - * The solution is to modify the type definition file after `npm install`. - */ -function fixJupyterLabDTSFiles() { - var relativePath = path.join( - 'node_modules', - '@jupyterlab', - 'services', - 'node_modules', - '@jupyterlab', - 'coreutils', - 'lib', - 'settingregistry.d.ts' - ); - var filePath = path.join(constants_1.ExtensionRootDir, relativePath); - if (!fs.existsSync(filePath)) { - throw new Error("Type Definition file from JupyterLab not found '" + filePath + "' (pvsc post install script)"); - } - var fileContents = fs.readFileSync(filePath, { encoding: 'utf8' }); - if (fileContents.indexOf('[key: string]: ISchema | undefined;') > 0) { - // tslint:disable-next-line:no-console - console.log(colors.blue(relativePath + ' file already updated (by Python VSC)')); - return; - } - if (fileContents.indexOf('[key: string]: ISchema;') > 0) { - var replacedText = fileContents.replace('[key: string]: ISchema;', '[key: string]: ISchema | undefined;'); - if (fileContents === replacedText) { - throw new Error("Fix for JupyterLabl file 'settingregistry.d.ts' failed (pvsc post install script)"); - } - fs.writeFileSync(filePath, replacedText); - // tslint:disable-next-line:no-console - console.log(colors.green(relativePath + ' file updated (by Python VSC)')); - } else { - // tslint:disable-next-line:no-console - console.log(colors.red(relativePath + ' file does not need updating.')); - } -} -fixJupyterLabDTSFiles(); diff --git a/build/ci/pyproject.toml b/build/ci/pyproject.toml new file mode 100644 index 000000000000..6335f021a637 --- /dev/null +++ b/build/ci/pyproject.toml @@ -0,0 +1,8 @@ +[tool.poetry] +name = "poetry-tutorial-project" +version = "0.1.0" +description = "" +authors = [""] + +[tool.poetry.dependencies] +python = "*" diff --git a/build/ci/scripts/spec_with_pid.js b/build/ci/scripts/spec_with_pid.js new file mode 100644 index 000000000000..a8453353aa79 --- /dev/null +++ b/build/ci/scripts/spec_with_pid.js @@ -0,0 +1,103 @@ +'use strict'; + +/** + * @module Spec + */ +/** + * Module dependencies. + */ + +const Base = require('mocha/lib/reporters/base'); +const { constants } = require('mocha/lib/runner'); + +const { EVENT_RUN_BEGIN } = constants; +const { EVENT_RUN_END } = constants; +const { EVENT_SUITE_BEGIN } = constants; +const { EVENT_SUITE_END } = constants; +const { EVENT_TEST_FAIL } = constants; +const { EVENT_TEST_PASS } = constants; +const { EVENT_TEST_PENDING } = constants; +const { inherits } = require('mocha/lib/utils'); + +const { color } = Base; + +const prefix = process.env.VSC_PYTHON_CI_TEST_PARALLEL ? `${process.pid} ` : ''; + +/** + * Constructs a new `Spec` reporter instance. + * + * @public + * @class + * @memberof Mocha.reporters + * @extends Mocha.reporters.Base + * @param {Runner} runner - Instance triggers reporter actions. + * @param {Object} [options] - runner options + */ +function Spec(runner, options) { + Base.call(this, runner, options); + + let indents = 0; + let n = 0; + + function indent() { + return Array(indents).join(' '); + } + + runner.on(EVENT_RUN_BEGIN, () => { + Base.consoleLog(); + }); + + runner.on(EVENT_SUITE_BEGIN, (suite) => { + indents += 1; + Base.consoleLog(color('suite', `${prefix}%s%s`), indent(), suite.title); + }); + + runner.on(EVENT_SUITE_END, () => { + indents -= 1; + if (indents === 1) { + Base.consoleLog(); + } + }); + + runner.on(EVENT_TEST_PENDING, (test) => { + const fmt = indent() + color('pending', `${prefix} %s`); + Base.consoleLog(fmt, test.title); + }); + + runner.on(EVENT_TEST_PASS, (test) => { + let fmt; + if (test.speed === 'fast') { + fmt = indent() + color('checkmark', prefix + Base.symbols.ok) + color('pass', ' %s'); + Base.consoleLog(fmt, test.title); + } else { + fmt = + indent() + + color('checkmark', prefix + Base.symbols.ok) + + color('pass', ' %s') + + color(test.speed, ' (%dms)'); + Base.consoleLog(fmt, test.title, test.duration); + } + }); + + runner.on(EVENT_TEST_FAIL, (test) => { + n += 1; + Base.consoleLog(indent() + color('fail', `${prefix}%d) %s`), n, test.title); + }); + + runner.once(EVENT_RUN_END, this.epilogue.bind(this)); +} + +/** + * Inherit from `Base.prototype`. + */ +inherits(Spec, Base); + +Spec.description = 'hierarchical & verbose [default]'; + +/** + * Expose `Spec`. + */ + +// eslint-disable-next-line no-global-assign +exports = Spec; +module.exports = exports; diff --git a/build/ci/static_analysis/policheck/exceptions.mdb b/build/ci/static_analysis/policheck/exceptions.mdb new file mode 100644 index 000000000000..d4a413f897e1 Binary files /dev/null and b/build/ci/static_analysis/policheck/exceptions.mdb differ diff --git a/build/ci/templates/globals.yml b/build/ci/templates/globals.yml deleted file mode 100644 index 993d41b98d18..000000000000 --- a/build/ci/templates/globals.yml +++ /dev/null @@ -1,12 +0,0 @@ -variables: - PythonVersion: '3.8' # Always use latest version. - NodeVersion: '12.4.0' # Check version of node used in VS Code. - NpmVersion: '6.13.4' - MOCHA_FILE: '$(Build.ArtifactStagingDirectory)/test-junit.xml' # All test files will write their JUnit xml output to this file, clobbering the last time it was written. - MOCHA_REPORTER_JUNIT: true # Use the mocha-multi-reporters and send output to both console (spec) and JUnit (mocha-junit-reporter). - VSC_PYTHON_FORCE_LOGGING: true # Enable this to turn on console output for the logger - VSC_PYTHON_LOG_FILE: '$(Build.ArtifactStagingDirectory)/pvsc.log' - VSC_PYTHON_WEBVIEW_LOG_FILE: '$(Build.ArtifactStagingDirectory)/pvsc_webview.log' - CI_BRANCH_NAME: ${Build.SourceBranchName} - npm_config_cache: $(Pipeline.Workspace)/.npm - vmImageMacOS: 'macOS-10.15' diff --git a/build/ci/templates/jobs/build_compile.yml b/build/ci/templates/jobs/build_compile.yml deleted file mode 100644 index 13b6915f7e3d..000000000000 --- a/build/ci/templates/jobs/build_compile.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Overview: -# Generic jobs template to compile and build extension - -jobs: - - job: Compile - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: ../steps/compile.yml - - - job: Build - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: ../steps/build.yml - - - job: Dependencies - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: ../steps/dependencies.yml - - - job: Hygiene - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: ../steps/initialization.yml - parameters: - PythonVersion: $(PythonVersion) - workingDirectory: $(Build.SourcesDirectory) - compile: 'false' - installVSCEorNPX: 'false' - - - bash: npx tslint --project tsconfig.json - displayName: 'Lint' - workingDirectory: $(Build.SourcesDirectory) - - - bash: npx prettier "src/**/*.ts*" --check - displayName: 'Code Format (TypeScript)' - workingDirectory: $(Build.SourcesDirectory) - - - bash: npx prettier "build/**/*.js" --check - displayName: 'Code Format (JavaScript)' - workingDirectory: $(Build.SourcesDirectory) - - - bash: | - python -m pip install -U black - python -m black . --check - displayName: 'Code Format (Python)' - workingDirectory: $(Build.SourcesDirectory)/pythonFiles diff --git a/build/ci/templates/jobs/coverage.yml b/build/ci/templates/jobs/coverage.yml deleted file mode 100644 index 50fb4af733e0..000000000000 --- a/build/ci/templates/jobs/coverage.yml +++ /dev/null @@ -1,8 +0,0 @@ -jobs: - - job: Coverage - pool: - vmImage: 'ubuntu-16.04' - variables: - TestsToRun: 'testUnitTests' - steps: - - template: ../steps/merge_upload_coverage.yml diff --git a/build/ci/templates/steps/build.yml b/build/ci/templates/steps/build.yml deleted file mode 100644 index d419e72d9f6e..000000000000 --- a/build/ci/templates/steps/build.yml +++ /dev/null @@ -1,61 +0,0 @@ -# ----------------------------------------------------------------------------------------------------------------------------- -# Overview: -# ----------------------------------------------------------------------------------------------------------------------------- -# Set of steps used to compile and build the extension -# -# ----------------------------------------------------------------------------------------------------------------------------- -# Variables -# ----------------------------------------------------------------------------------------------------------------------------- -# 1. build -# Mandatory -# Possible values, `true` or `false`. -# If `true`, means we need to build the VSIX, else just compile. - -steps: - - template: initialization.yml - parameters: - PythonVersion: $(PythonVersion) - workingDirectory: $(Build.SourcesDirectory) - compile: 'false' - - - bash: | - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/old_ptvsd --no-cache-dir --implementation py --no-deps --upgrade 'ptvsd==4.3.2' - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/debugpy/no_wheels --no-cache-dir --implementation py --no-deps --upgrade --pre debugpy - failOnStderr: true - displayName: 'pip install requirements' - - - bash: | - python -m pip --disable-pip-version-check install -r build/debugger-install-requirements.txt - python ./pythonFiles/install_debugpy.py - failOnStderr: true - displayName: 'Install DEBUGPY wheels' - - - bash: npm run clean - displayName: 'Clean' - - - bash: | - npm run updateBuildNumber -- --buildNumber $BUILD_BUILDID - displayName: 'Update dev Version of Extension' - condition: and(succeeded(), eq(variables['Build.SourceBranchName'], 'master')) - - - bash: | - npm run updateBuildNumber -- --buildNumber $BUILD_BUILDID --updateChangelog - displayName: 'Update release Version of Extension' - condition: and(succeeded(), startsWith(variables['Build.SourceBranchName'], 'release')) - - - bash: | - npm run package - displayName: 'Build VSIX' - - - task: CopyFiles@2 - inputs: - contents: '*.vsix' - targetFolder: $(Build.ArtifactStagingDirectory) - displayName: 'Copy VSIX' - - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory) - artifactName: VSIX - displayName: 'Publish VSIX to Artifacts' diff --git a/build/ci/templates/steps/compile.yml b/build/ci/templates/steps/compile.yml deleted file mode 100644 index e35db11613a8..000000000000 --- a/build/ci/templates/steps/compile.yml +++ /dev/null @@ -1,14 +0,0 @@ -# Compiles the source - -steps: - - template: initialization.yml - parameters: - PythonVersion: $(PythonVersion) - workingDirectory: $(Build.SourcesDirectory) - compile: 'false' - installVSCEorNPX: 'false' - - - task: Gulp@0 - displayName: 'Compile and check for errors' - inputs: - targets: 'prePublishNonBundle' diff --git a/build/ci/templates/steps/dependencies.yml b/build/ci/templates/steps/dependencies.yml deleted file mode 100644 index 5850b0def046..000000000000 --- a/build/ci/templates/steps/dependencies.yml +++ /dev/null @@ -1,20 +0,0 @@ -# ----------------------------------------------------------------------------------------------------------------------------- -# Overview: -# ----------------------------------------------------------------------------------------------------------------------------- -# Set of steps used to validate dependencies for the extension. In a separate pipeline because this -# can take a long time. -# - -steps: - - template: initialization.yml - parameters: - PythonVersion: $(PythonVersion) - workingDirectory: $(Build.SourcesDirectory) - compile: 'false' - - - bash: npm run clean - displayName: 'Clean' - - # This is a slow process, hence do this as a separate step - - bash: npm run checkDependencies - displayName: 'Check Dependencies' diff --git a/build/ci/templates/steps/generate_upload_coverage.yml b/build/ci/templates/steps/generate_upload_coverage.yml deleted file mode 100644 index 608a2fff8bdc..000000000000 --- a/build/ci/templates/steps/generate_upload_coverage.yml +++ /dev/null @@ -1,23 +0,0 @@ -steps: - # Generate the coverage reports. - - bash: npm run test:cover:report - displayName: 'run test:cover:report' - condition: contains(variables['TestsToRun'], 'testUnitTests') - failOnStderr: false - - # Publish Code Coverage Results - - task: PublishCodeCoverageResults@1 - displayName: 'Publish test:unittests coverage results' - condition: contains(variables['TestsToRun'], 'testUnitTests') - inputs: - codeCoverageTool: 'cobertura' - summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml' - reportDirectory: '$(System.DefaultWorkingDirectory)/coverage' - - - bash: cat ./coverage/cobertura-coverage.xml | ./node_modules/.bin/codecov --pipe - displayName: 'Upload coverage to codecov' - continueOnError: true - condition: contains(variables['TestsToRun'], 'testUnitTests') - failOnStderr: false - env: - CODECOV_TOKEN: $(CODECOV_TOKEN) diff --git a/build/ci/templates/steps/initialization.yml b/build/ci/templates/steps/initialization.yml deleted file mode 100644 index cf24c1778dae..000000000000 --- a/build/ci/templates/steps/initialization.yml +++ /dev/null @@ -1,145 +0,0 @@ -# ----------------------------------------------------------------------------------------------------------------------------- -# Overview: -# ----------------------------------------------------------------------------------------------------------------------------- -# Set of common steps required when initializing a job. -# -# ----------------------------------------------------------------------------------------------------------------------------- -# Variables -# ----------------------------------------------------------------------------------------------------------------------------- -# 1. workingDirectory -# Mandatory -# Working directory. -# 2. PythonVersion -# Python version to be used. -# If not provided, python will not be setup on CI. -parameters: - workingDirectory: '' - PythonVersion: '' - compile: 'true' - sqlite: 'false' - installVSCEorNPX: 'true' - enableGather: 'false' - -steps: - - bash: | - printenv - displayName: 'Show all env vars' - condition: eq(variables['system.debug'], 'true') - - - task: NodeTool@0 - displayName: 'Use Node $(NodeVersion)' - inputs: - versionSpec: $(NodeVersion) - - - task: UsePythonVersion@0 - displayName: 'Use Python ${{ parameters.PythonVersion }}' - condition: and(succeeded(), not(eq('${{ parameters.PythonVersion }}', ''))) - inputs: - versionSpec: ${{ parameters.PythonVersion }} - - # Install the a version of python that works with sqlite3 until this bug is addressed - # https://mseng.visualstudio.com/AzureDevOps/_workitems/edit/1535830 - # - # This task will only run if variable `NeedsPythonFunctionalReqs` is true. - - bash: | - sudo apt-get update - sudo apt-get install libsqlite3-dev - version=$(python -V 2>&1 | grep -Po '(?<=Python )(.+)') - wget https://www.python.org/ftp/python/$version/Python-$version.tar.xz - tar xvf Python-$version.tar.xz - cd Python-$version - ./configure --enable-loadable-sqlite-extensions --with-ensurepip=install --prefix=$HOME/py-$version - make - sudo make install - sudo chmod -R 777 $HOME/py-$version - export PATH=$HOME/py-$version/bin:$PATH - sudo ln -s $HOME/py-$version/bin/python3 $HOME/py-$version/bin/python - echo '##vso[task.prependpath]'$HOME/py-$version/bin - displayName: 'Setup python to run with sqlite on 3.*' - condition: and(succeeded(), eq('${{ parameters.sqlite }}', 'true'), not(eq('${{ parameters.PythonVersion }}', '')), not(eq('${{ parameters.PythonVersion }}', '2.7')), eq(variables['Agent.Os'], 'Linux')) - - - task: Npm@1 - displayName: 'Use NPM $(NpmVersion)' - inputs: - command: custom - verbose: true - customCommand: 'install -g npm@$(NpmVersion)' - - # In the past installs of npm, node-pre-gyp 0.12.0 was installed. - # However in the latest versions, 0.11.0 is getting isntalled. - # - bash: | - # npm uninstall canvas - # npm i -g node-pre-gyp@0.12.0 - # npm i -D node-pre-gyp@0.12.0 - # npm install -D canvas --build-from-source - # displayName: 'Uninstall canvas and install build from source (only for Linux)' - # condition: and(succeeded(), eq(variables['Agent.Os'], 'Linux')) - - # See the help here on how to cache npm - # https://docs.microsoft.com/en-us/azure/devops/pipelines/caching/?view=azure-devops#nodejsnpm - - task: CacheBeta@0 - inputs: - key: npm | $(Agent.OS) | package-lock.json - path: $(npm_config_cache) - restoreKeys: | - npm | $(Agent.OS) - displayName: Cache npm - - - task: Npm@1 - displayName: 'npm ci' - inputs: - workingDir: ${{ parameters.workingDirectory }} - command: custom - verbose: true - customCommand: ci - - - task: Npm@1 - displayName: 'Install optional python-program-analysis' - condition: and(succeeded(), eq('${{ parameters.enableGather }}', 'true')) - inputs: - workingDir: ${{ parameters.workingDirectory }} - command: custom - verbose: true - customCommand: 'install @msrvida/python-program-analysis' - - # On Mac, the command `node` doesn't always point to the current node version. - # Debugger tests use the variable process.env.NODE_PATH - - script: | - export NODE_PATH=`which node` - echo $NODE_PATH - echo '##vso[task.setvariable variable=NODE_PATH]'$NODE_PATH - displayName: 'Setup NODE_PATH for extension (Debugger Tests)' - condition: and(succeeded(), eq(variables['agent.os'], 'Darwin')) - - # Install vsce - - bash: | - npm install -g vsce - displayName: 'Install vsce' - condition: and(succeeded(), eq('${{ parameters.installVSCEorNPX }}', 'true')) - - - bash: npx tsc -p ./ - displayName: 'compile (npx tsc -p ./)' - workingDirectory: ${{ parameters.workingDirectory }} - condition: and(succeeded(), eq('${{ parameters.compile }}', 'true')) - - # https://code.visualstudio.com/api/working-with-extensions/continuous-integration#azure-pipelines - - bash: | - set -e - /usr/bin/Xvfb :10 -ac >> /tmp/Xvfb.out 2>&1 & - disown -ar - displayName: 'Start Display Server (xvfb) to launch VS Code)' - condition: and(succeeded(), eq(variables['Agent.Os'], 'Linux')) - - - bash: python -m pip install -U pip - displayName: 'Install pip' - # # Show all versions installed/available on PATH if in verbose mode. - # # Example command line (windows pwsh): - # # > Write-Host Node ver: $(& node -v) NPM Ver: $(& npm -v) Python ver: $(& python --version)" - # - bash: | - # echo AVAILABLE DEPENDENCY VERSIONS - # echo Node Version = `node -v` - # echo NPM Version = `npm -v` - # echo Python Version = `python --version` - # echo Gulp Version = `gulp --version` - # condition: and(succeeded(), eq(variables['system.debug'], 'true')) - # displayName: Show Dependency Versions diff --git a/build/ci/templates/steps/merge_upload_coverage.yml b/build/ci/templates/steps/merge_upload_coverage.yml deleted file mode 100644 index 51ef76aac61c..000000000000 --- a/build/ci/templates/steps/merge_upload_coverage.yml +++ /dev/null @@ -1,29 +0,0 @@ -steps: - - template: initialization.yml - parameters: - workingDirectory: $(Build.SourcesDirectory) - compile: 'false' - - # Download previously generated coverage artifacts - - task: DownloadPipelineArtifact@2 - inputs: - patterns: '**/.nyc_output/**' - displayName: 'Download .nyc_output coverage artifacts' - condition: always() - - # Now that we have downloaded artifacts from `coverage-output-`, copy them - # into the root directory (they'll go under `.nyc_output/...`) - # These are the coverage output files that can be merged and then we can generate a report from them. - # This step results in downloading all individual `./nyc_output` results in coverage - # from all different test outputs. - # Running the process of generating reports, will result in generation of - # reports from all coverage data, i.e. we're basically combining all to generate a single merged report. - - bash: | - cp -r $(Pipeline.Workspace)/coverage-output-*/.nyc_output/ ./ - cd .nyc_output/ - ls -dlU .*/ */ - ls - displayName: 'Copy ./.nyc_output' - condition: always() - - - template: generate_upload_coverage.yml diff --git a/build/ci/templates/test_phases.yml b/build/ci/templates/test_phases.yml deleted file mode 100644 index 4e601b3240b0..000000000000 --- a/build/ci/templates/test_phases.yml +++ /dev/null @@ -1,544 +0,0 @@ -# To use this step template from a job, use the following code: -# ```yaml -# steps: -# template: path/to/this/dir/test_phases.yml -# ``` -# -# Your job using this template *must* supply these values: -# - TestsToRun: 'testA, testB, ..., testN' - the list of tests to execute, see the list above. -# -# Your job using this template *may* supply these values: -# - NeedsPythonTestReqs: [true|false] - install the test-requirements prior to running tests. False if not set. -# - NeedsPythonFunctionalReqs: [true|false] - install the functional-requirements prior to running tests. False if not set. -# - NeedsIPythonReqs: [true|false] - install the ipython-test-requirements prior to running tests. False if not set. -# - PythonVersion: 'M.m' - the Python version to run. DefaultPythonVersion (from globals.yml) if not set. -# - NodeVersion: 'x.y.z' - Node version to use. DefaultNodeVersion (from globals.yml) if not set. - -## Supported `TestsToRun` values, multiples are allowed separated by commas or spaces: -# -# 'testUnitTests' -# 'pythonUnitTests' -# 'pythonInternalTools' -# 'testSingleWorkspace' -# 'testMultiWorkspace' -# 'testDebugger' -# 'testFunctional' -# 'testPerformance' -# 'venvTests' - -steps: - - template: steps/initialization.yml - parameters: - PythonVersion: $(PythonVersion) - workingDirectory: $(Build.SourcesDirectory) - compile: 'false' - sqlite: 'true' - - # Run the `prePublishNonBundle` gulp task to build the binaries we will be testing. - # This produces the .js files required into the out/ folder. - # Example command line (windows pwsh): - # > gulp prePublishNonBundle - - task: Gulp@0 - displayName: 'gulp prePublishNonBundle' - inputs: - targets: 'prePublishNonBundle' - condition: and(succeeded(), not(contains(variables['TestsToRun'], 'testSmoke'))) - - # Run the typescript unit tests. - # - # This will only run if the string 'testUnitTests' exists in variable `TestsToRun` - # - # Example command line (windows pwsh): - # > npm run test:unittests:cover - - bash: | - npm run test:unittests:cover - displayName: 'run test:unittests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'testUnitTests')) - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish test:unittests results' - condition: contains(variables['TestsToRun'], 'testUnitTests') - inputs: - testResultsFiles: '$(MOCHA_FILE)' - testRunTitle: 'unittests-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'UnitTests' - - - task: CopyFiles@2 - inputs: - sourceFolder: '$(Build.SourcesDirectory)/.nyc_output' - targetFolder: '$(Build.ArtifactStagingDirectory)/nyc/.nyc_output' - displayName: 'Copy nyc_output to publish as artificat' - condition: contains(variables['TestsToRun'], 'testUnitTests') - - # Upload Code Coverage Results (to be merged later). - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: '$(Build.ArtifactStagingDirectory)/nyc' - artifactName: 'coverage-output-$(Agent.Os)' - condition: contains(variables['TestsToRun'], 'testUnitTests') - - - template: steps/generate_upload_coverage.yml - - # Install the requirements for the Python or the system tests. This includes the supporting libs that - # we ship in our extension such as PTVSD, DEBUGPY and Jedi. - # - # This task will only run if variable `NeedsPythonTestReqs` is true. - # - # Example command line (windows pwsh): - # > python -m pip install -m -U pip - # > python -m pip install --upgrade -r build/test-requirements.txt - # > python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt - - bash: | - python -m pip install --upgrade -r build/test-requirements.txt - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/old_ptvsd --no-cache-dir --implementation py --no-deps --upgrade 'ptvsd==4.3.2' - python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python/debugpy/no_wheels --no-cache-dir --implementation py --no-deps --upgrade --pre debugpy - displayName: 'pip install system test requirements' - condition: and(succeeded(), eq(variables['NeedsPythonTestReqs'], 'true')) - - # Install the requirements for functional tests. - # - # This task will only run if variable `NeedsPythonFunctionalReqs` is true. - # - # Example command line (windows pwsh): - # > python -m pip install numpy - # > python -m pip install --upgrade -r build/functional-test-requirements.txt - # > python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt - - bash: | - python -m pip install numpy - python -m pip install --upgrade -r ./build/functional-test-requirements.txt - python -c "import sys;print(sys.executable)" - displayName: 'pip install functional requirements' - condition: and(succeeded(), eq(variables['NeedsPythonFunctionalReqs'], 'true')) - - # Add CONDA to the path so anaconda works - # - # This task will only run if variable `NeedsPythonFunctionalReqs` is true. - - bash: | - echo "##vso[task.prependpath]$CONDA/bin" - displayName: 'Add conda to the path' - condition: and(succeeded(), eq(variables['NeedsPythonFunctionalReqs'], 'true'), ne(variables['Agent.Os'], 'Windows_NT')) - - # Add CONDA to the path so anaconda works (windows) - # - # This task will only run if variable `NeedsPythonFunctionalReqs` is true. - - powershell: | - Write-Host "##vso[task.prependpath]$env:CONDA\Scripts" - displayName: 'Add conda to the path' - condition: and(succeeded(), eq(variables['NeedsPythonFunctionalReqs'], 'true'), eq(variables['Agent.Os'], 'Windows_NT')) - - # On MAC let CONDA update install paths - - bash: | - sudo chown -R $USER $CONDA - displayName: 'Give CONDA permission to its own files' - condition: and(succeeded(), eq(variables['Agent.Os'], 'Darwin')) - - # Create the two anaconda environments - # - # This task will only run if variable `NeedsPythonFunctionalReqs` is true. - # - - script: | - conda env create --quiet --force --file build/ci/conda_env_1.yml - conda env create --quiet --force --file build/ci/conda_env_2.yml - displayName: 'Create CONDA Environments' - condition: and(succeeded(), eq(variables['NeedsPythonFunctionalReqs'], 'true')) - - # Run the pip installs in the 3 environments (darwin linux) - - bash: | - source activate base - conda install --quiet -y --file build/ci/conda_base.yml - python -m pip install --upgrade -r build/conda-functional-requirements.txt - source activate conda_env_1 - python -m pip install --upgrade -r build/conda-functional-requirements.txt - source activate conda_env_2 - python -m pip install --upgrade -r build/conda-functional-requirements.txt - conda deactivate - displayName: 'Install Pip requirements for CONDA envs' - condition: and(succeeded(), eq(variables['NeedsPythonFunctionalReqs'], 'true'), ne(variables['Agent.Os'], 'Windows_NT')) - - # Run the pip installs in the 3 environments (windows) - - script: | - call activate base - conda install --quiet -y --file build/ci/conda_base.yml - python -m pip install --upgrade -r build/conda-functional-requirements.txt - call activate conda_env_1 - python -m pip install --upgrade -r build/conda-functional-requirements.txt - call activate conda_env_2 - python -m pip install --upgrade -r build/conda-functional-requirements.txt - displayName: 'Install Pip requirements for CONDA envs' - condition: and(succeeded(), eq(variables['NeedsPythonFunctionalReqs'], 'true'), eq(variables['Agent.Os'], 'Windows_NT')) - - # Downgrade pywin32 on Windows due to bug https://github.com/jupyter/notebook/issues/4909 - # - # This task will only run if variable `NeedsPythonFunctionalReqs` is true. - - bash: | - python -m pip install --upgrade pywin32==224 - displayName: 'Downgrade pywin32 on Windows / Python 3.6' - condition: and(succeeded(), eq(variables['NeedsPythonFunctionalReqs'], 'true'), eq(variables['Agent.Os'], 'Windows_NT'), eq(variables['PythonVersion'], '3.6')) - - # Install the requirements for ipython tests. - # - # This task will only run if variable `NeedsIPythonReqs` is true. - # - # Example command line (windows pwsh): - # > python -m pip install numpy - # > python -m pip install --upgrade -r build/ipython-test-requirements.txt - # > python -m pip --disable-pip-version-check install -t ./pythonFiles/lib/python --no-cache-dir --implementation py --no-deps --upgrade -r requirements.txt - - bash: | - python -m pip install numpy - python -m pip install --upgrade -r ./build/ipython-test-requirements.txt - displayName: 'pip install ipython requirements' - condition: and(succeeded(), eq(variables['NeedsIPythonReqs'], 'true')) - - # Install jupyter for smoke tests. - - bash: | - python -m pip install --upgrade jupyter - displayName: 'pip install jupyter' - condition: and(succeeded(), eq(variables['NeedsIPythonReqs'], 'true'), contains(variables['TestsToRun'], 'testSmoke')) - - - bash: | - python -m pip --disable-pip-version-check install -r build/debugger-install-requirements.txt - python ./pythonFiles/install_debugpy.py - failOnStderr: true - displayName: 'Install DEBUGPY wheels' - condition: and(eq(variables['NeedsPythonTestReqs'], 'true'), eq(variables['PythonVersion'], '3.7')) - - # Run the Python unit tests in our codebase. Produces a JUnit-style log file that - # will be uploaded after all tests are complete. - # - # This task only runs if the string 'pythonUnitTests' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > python -m pip install -m -U pip - # > python -m pip install -U -r build/test-requirements.txt - # > python pythonFiles/tests/run_all.py --color=yes --junit-xml=python-tests-junit.xml - - bash: | - python pythonFiles/tests/run_all.py --color=no --junit-xml=$COMMON_TESTRESULTSDIRECTORY/python-tests-junit.xml - displayName: 'Python unittests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'pythonUnitTests')) - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish Python unittests results' - condition: contains(variables['TestsToRun'], 'pythonUnitTests') - inputs: - testResultsFiles: 'python-tests-junit.xml' - searchFolder: '$(Common.TestResultsDirectory)' - testRunTitle: 'pythonUnitTests-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'UnitTests' - - # Run the Python IPython tests in our codebase. Produces a JUnit-style log file that - # will be uploaded after all tests are complete. - # - # This task only runs if the string 'pythonIPythonTests' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > python -m pip install -m -U pip - # > python -m pip install -U -r build/test-requirements.txt - # > python pythonFiles/tests/run_all.py --color=yes --junit-xml=python-tests-junit.xml - - bash: | - python -m IPython pythonFiles/tests/run_all.py -- --color=no --junit-xml=$COMMON_TESTRESULTSDIRECTORY/ipython-tests-junit.xml - displayName: 'Python ipython tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'pythonIPythonTests')) - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish IPython test results' - condition: contains(variables['TestsToRun'], 'pythonIPythonTests') - inputs: - testResultsFiles: 'ipython-tests-junit.xml' - searchFolder: '$(Common.TestResultsDirectory)' - testRunTitle: 'pythonIPythonTests-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'UnitTests' - - # Run the News tool tests. - # - # This task only runs if the string 'pythonInternalTools' exists in variable `TestsToRun` - # - # Example command line (windows pwsh): - # > python -m pip install -U -r news/requirements.txt - # > python -m pytest tpn --color=yes --junit-xml=python-news-junit.xml - - script: | - python -m pip install --upgrade -r news/requirements.txt - python -m pytest news --color=yes --junit-xml=$COMMON_TESTRESULTSDIRECTORY/python-news-junit.xml - displayName: 'Run Python tests for news' - condition: and(succeeded(), contains(variables['TestsToRun'], 'pythonInternalTools')) - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish Python tests for news results' - condition: contains(variables['TestsToRun'], 'pythonInternalTools') - inputs: - testResultsFiles: 'python-news-junit.xml' - searchFolder: '$(Common.TestResultsDirectory)' - testRunTitle: 'news-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'UnitTests' - - # Run the TPN tool tests. - # - # This task only runs if the string 'pythonUnitTests' exists in variable `TestsToRun` - # - # Example command line (windows pwsh): - # > python -m pip install -U -r tpn/requirements.txt - # > python -m pytest tpn --color=yes --junit-xml=python-tpn-junit.xml - - script: | - python -m pip install --upgrade -r tpn/requirements.txt - python -m pytest tpn --color=yes --junit-xml=$COMMON_TESTRESULTSDIRECTORY/python-tpn-junit.xml - displayName: 'Run Python tests for TPN tool' - condition: and(succeeded(), contains(variables['TestsToRun'], 'pythonInternalTools')) - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish Python tests for TPN tool results' - condition: contains(variables['TestsToRun'], 'pythonInternalTools') - inputs: - testResultsFiles: 'python-tpn-junit.xml' - searchFolder: '$(Common.TestResultsDirectory)' - testRunTitle: 'tpn-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'UnitTests' - - # Venv tests: Prepare the various virtual environments and record their details into the - # JSON file that venvTests require to run. - # - # This task only runs if the string 'venvTests' exists in variable 'TestsToRun' - # - # This task has a bunch of steps, all of which are to fill the `EnvPath` struct found in - # the file: - # `src/test/common/terminals/environmentActionProviders/terminalActivation.testvirtualenvs.ts` - # - # Example command line (windows pwsh): - # // This is done in powershell. Copy/paste the code below. - - pwsh: | - # venv/bin or venv\\Scripts (windows)? - $environmentExecutableFolder = 'bin' - if ($Env:AGENT_OS -match '.*Windows.*') { - $environmentExecutableFolder = 'Scripts' - } - - # pipenv - python -m pip install pipenv - python -m pipenv run python build/ci/addEnvPath.py $(PYTHON_VIRTUAL_ENVS_LOCATION) pipenvPath - - # venv - # what happens when running under Python 2.7? - python -m venv .venv - & ".venv/$environmentExecutableFolder/python" ./build/ci/addEnvPath.py $(PYTHON_VIRTUAL_ENVS_LOCATION) venvPath - - # virtualenv - python -m pip install virtualenv - python -m virtualenv .virtualenv - & ".virtualenv/$environmentExecutableFolder/python" ./build/ci/addEnvPath.py $(PYTHON_VIRTUAL_ENVS_LOCATION) virtualEnvPath - - # conda - - # 1. For `terminalActivation.testvirtualenvs.test.ts` - - $condaExecPath = Join-Path -Path $Env:CONDA -ChildPath $environmentExecutableFolder | Join-Path -ChildPath conda - if( '$(Agent.Os)' -match '.*Windows.*' ){ - $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath python - } else{ - $condaPythonPath = Join-Path -Path $Env:CONDA -ChildPath $environmentExecutableFolder | Join-Path -ChildPath python - & $condaPythonPath ./build/ci/addEnvPath.py $(PYTHON_VIRTUAL_ENVS_LOCATION) condaExecPath $condaExecPath - } - & $condaPythonPath ./build/ci/addEnvPath.py $(PYTHON_VIRTUAL_ENVS_LOCATION) condaPath - - # 2. For `interpreterLocatorService.testvirtualenvs.ts` - - & $condaExecPath create -n "test_env1" -y python - & $condaExecPath create -p "./test_env2" -y python - & $condaExecPath create -p "$Env:HOME/test_env3" -y python - - # Set the TEST_FILES_SUFFIX - Write-Host '##vso[task.setvariable variable=TEST_FILES_SUFFIX;]testvirtualenvs' - - displayName: 'Prepare Venv-Test Environment' - condition: and(succeeded(), contains(variables['TestsToRun'], 'venvTests')) - - # Run the virtual environment based tests. - # This set of tests is simply using the `testSingleWorkspace` set of tests, but - # with the environment variable `TEST_FILES_SUFFIX` set to `testvirtualenvs`, which - # got set in the Prepare Venv-Test Environment task above. - # **Note**: Azure DevOps tasks set environment variables via a specially formatted - # string sent to stdout. - # - # This task only runs if the string 'venvTests' exists in variable 'TestsToRun' - # - # Example command line (windows pwsh): - # > $Env:TEST_FILES_SUFFIX=testvirtualenvs - # > npm run testSingleWorkspace - - script: | - cat $PYTHON_VIRTUAL_ENVS_LOCATION - - npm run testSingleWorkspace - - displayName: 'Run Venv-Tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'venvTests')) - env: - DISPLAY: :10 - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish Venv-Tests results' - condition: contains(variables['TestsToRun'], 'venvTests') - inputs: - testResultsFiles: '$(MOCHA_FILE)' - testRunTitle: 'venvTest-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'SystemTests' - - # Set the CI_PYTHON_PATH variable that forces VS Code system tests to use - # the specified Python interpreter. - # - # This is how to set an environment variable in the Azure DevOps pipeline, write - # a specially formatted string to stdout. For details, please see - # https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-in-script - # - # Example command line (windows pwsd): - # > $Env:CI_PYTHON_PATH=(& python -c 'import sys;print(sys.executable)') - - script: | - python -c "from __future__ import print_function;import sys;print('##vso[task.setvariable variable=CI_PYTHON_PATH;]{}'.format(sys.executable))" - displayName: 'Set CI_PYTHON_PATH' - - # Run the functional tests. - # - # This task only runs if the string 'testFunctional' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > npm run test:functional - - script: | - npm run test:functional - displayName: 'Run functional tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'testFunctional')) - env: - DISPLAY: :10 - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish functional tests results' - condition: contains(variables['TestsToRun'], 'testFunctional') - inputs: - testResultsFiles: '$(MOCHA_FILE)' - testRunTitle: 'functional-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'FunctionalTests' - - # Run the single workspace tests. - # - # This task only runs if the string 'testSingleWorkspace' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > npm run testSingleWorkspace - - script: | - npm run testSingleWorkspace - displayName: 'Run single workspace tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'testSingleWorkspace')) - env: - DISPLAY: :10 - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish single workspace tests results' - condition: contains(variables['TestsToRun'], 'testSingleWorkspace') - inputs: - testResultsFiles: '$(MOCHA_FILE)' - testRunTitle: 'singleWorkspace-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'SystemTests' - - # Run the multi-workspace tests. - # - # This task only runs if the string 'testMultiWorkspace' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > npm run testMultiWorkspace - - script: | - npm run testMultiWorkspace - displayName: 'Run multi-workspace tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'testMultiWorkspace')) - env: - DISPLAY: :10 - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish multi-workspace tests results' - condition: contains(variables['TestsToRun'], 'testMultiWorkspace') - inputs: - testResultsFiles: '$(MOCHA_FILE)' - testRunTitle: 'multiWorkspace-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'SystemTests' - - # Run the debugger integration tests. - # - # This task only runs if the string 'testDebugger' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > npm run testDebugger - - script: | - npm run testDebugger - displayName: 'Run debugger tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'testDebugger')) - env: - DISPLAY: :10 - - # Upload the test results to Azure DevOps to facilitate test reporting in their UX. - - task: PublishTestResults@2 - displayName: 'Publish debugger tests results' - condition: contains(variables['TestsToRun'], 'testDebugger') - inputs: - testResultsFiles: '$(MOCHA_FILE)' - testRunTitle: 'debugger-$(Agent.Os)-Py$(pythonVersion)' - buildPlatform: '$(Agent.Os)-Py$(pythonVersion)' - buildConfiguration: 'SystemTests' - - # Run the performance tests. - # - # This task only runs if the string 'testPerformance' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > npm run testPerformance - - script: | - npm run testPerformance - displayName: 'Run Performance Tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'testPerformance')) - env: - DISPLAY: :10 - - # Run the smoke tests. - # - # This task only runs if the string 'testSmoke' exists in variable `TestsToRun`. - # - # Example command line (windows pwsh): - # > npm run clean - # > npm run updateBuildNumber -- --buildNumber 0.0.0-local - # > npm run package - # > npx gulp clean:cleanExceptTests - # > npm run testSmoke - - bash: | - npm install -g vsce - npm run clean - npx tsc -p ./ - npx gulp clean:cleanExceptTests - mkdir -p ./tmp - cp -r ./out/test ./tmp/test - npm run updateBuildNumber -- --buildNumber $BUILD_BUILDID - npm run package - npx gulp clean:cleanExceptTests - cp -r ./tmp/test ./out/test - node ./out/test/smokeTest.js - displayName: 'Run Smoke Tests' - condition: and(succeeded(), contains(variables['TestsToRun'], 'testSmoke')) - env: - DISPLAY: :10 - - - task: PublishBuildArtifacts@1 - inputs: - pathtoPublish: $(Build.ArtifactStagingDirectory) - artifactName: $(Agent.JobName) - condition: always() diff --git a/build/ci/vscode-python-ci-manual.yaml b/build/ci/vscode-python-ci-manual.yaml deleted file mode 100644 index bad74182082c..000000000000 --- a/build/ci/vscode-python-ci-manual.yaml +++ /dev/null @@ -1,296 +0,0 @@ -# manual CI build - -name: '$(Year:yyyy).$(Month).0.$(BuildID)-manual' - -trigger: none -pr: none - -# Variables that are available for the entire pipeline. -variables: - - template: templates/globals.yml - -stages: - - stage: Build - jobs: - - template: templates/jobs/build_compile.yml - - # Each item in each matrix has a number of possible values it may - # define. They are detailed in templates/test_phases.yml. The only - # required value is "TestsToRun". - - - stage: Linux - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - # with mocks - # focused on small units (i.e. functions) - # and tightly controlled dependencies - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - # no mocks, no vscode - # focused on integration - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - # no mocks, with vscode - # focused on integration - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - # no mocks, with vscode - # focused on integration - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - # This is for the venvTests to use, not needed if you don't run venv tests... - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - #maxParallel: 3 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - # This is the oldest Python 3 version we support. - - job: 'Py36' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.6' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.6' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.6' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - #maxParallel: 3 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - # This is the oldest Python 3 version we support. - - job: 'Py35' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.5' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.5' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.5' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.5' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - PythonVersion: '3.5' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - #maxParallel: 3 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - stage: Mac - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - #maxParallel: 3 - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - # This is the oldest Python 3 version we support. - - job: 'Py35' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.5' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.5' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.5' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.5' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - PythonVersion: '3.5' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - #maxParallel: 3 - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - stage: Windows - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - #maxParallel: 3 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - # This is the oldest Python 3 version we support. - - job: 'Py35' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.5' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.5' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.5' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.5' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - PythonVersion: '3.5' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - #maxParallel: 3 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - - stage: Reports - dependsOn: - - Linux - - Mac - - Windows - condition: always() - jobs: - - template: templates/jobs/coverage.yml diff --git a/build/ci/vscode-python-ci.yaml b/build/ci/vscode-python-ci.yaml deleted file mode 100644 index 5ebd33761a14..000000000000 --- a/build/ci/vscode-python-ci.yaml +++ /dev/null @@ -1,194 +0,0 @@ -# CI build (PR merge) - -name: '$(Year:yyyy).$(Month).0.$(BuildID)-ci' - -# Notes: Only trigger a commit for master and release, and skip build/rebuild -# on changes in the news and .vscode folders. -trigger: - branches: - include: ['master', 'release*'] - paths: - exclude: ['/news/1 Enhancements', '/news/2 Fixes', '/news/3 Code Health', '/.vscode'] - -# Not the PR build for merges to master and release. -pr: none - -# Variables that are available for the entire pipeline. -variables: - - template: templates/globals.yml - -stages: - - stage: Build - jobs: - - template: templates/jobs/build_compile.yml - - # Each item in each matrix has a number of possible values it may - # define. They are detailed in templates/test_phases.yml. The only - # required value is "TestsToRun". - - - stage: Linux - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - # with mocks - # focused on small units (i.e. functions) - # and tightly controlled dependencies - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - # no mocks, no vscode - # focused on integration - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - # no mocks, with vscode - # focused on integration - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - # no mocks, with vscode - # focused on integration - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - # This is for the venvTests to use, not needed if you don't run venv tests... - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - maxParallel: 2 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - # This is the oldest Python 3 version we support. - - job: 'Py35' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.5' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Venv': - PythonVersion: '3.5' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - PythonVersion: '3.5' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - maxParallel: 2 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - stage: Mac - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - maxParallel: 2 - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - stage: Windows - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - maxParallel: 2 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - - stage: Reports - dependsOn: - - Linux - - Mac - - Windows - condition: always() - jobs: - - template: templates/jobs/coverage.yml diff --git a/build/ci/vscode-python-nightly-ci.yaml b/build/ci/vscode-python-nightly-ci.yaml deleted file mode 100644 index 7be04e88561c..000000000000 --- a/build/ci/vscode-python-nightly-ci.yaml +++ /dev/null @@ -1,510 +0,0 @@ -# Nightly build - -name: '$(Year:yyyy).$(Month).0.$(BuildID)-nightly' - -# Not the CI build, see `vscode-python-ci.yaml`. -trigger: none - -# Not the PR build for merges to master and release. -pr: none - -schedules: - - cron: '0 8 * * 1-5' - # Daily midnight PST build, runs Monday - Friday always - displayName: Nightly build - branches: - include: - - master - - release* - always: true - -# Variables that are available for the entire pipeline. -variables: - - template: templates/globals.yml - -stages: - - stage: Build - jobs: - - template: templates/jobs/build_compile.yml - - # Each item in each matrix has a number of possible values it may - # define. They are detailed in templates/test_phases.yml. The only - # required value is "TestsToRun". - - - stage: Linux - dependsOn: - - Build - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - # This is for the venvTests to use, not needed if you don't run venv tests... - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - maxParallel: 1 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - job: 'Py36' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.6' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.6' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.6' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '3.6' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '3.6' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.6' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - job: 'Py35' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.5' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.5' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.5' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '3.5' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '3.5' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.5' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - job: 'Py27' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '2.7' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '2.7' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '2.7' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '2.7' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '2.7' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - # Note: Virtual env tests use `venv` and won't currently work with Python 2.7 - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - stage: Mac - dependsOn: - - Build - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - maxParallel: 1 - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - job: 'Py36' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.6' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.6' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.6' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '3.6' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '3.6' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.6' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - job: 'Py35' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.5' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.5' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.5' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '3.5' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '3.5' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.5' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - job: 'Py27' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '2.7' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '2.7' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '2.7' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '2.7' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '2.7' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - # Note: Virtual env tests use `venv` and won't currently work with Python 2.7 - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - stage: Windows - dependsOn: - - Build - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - maxParallel: 1 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - - job: 'Py36' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.6' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.6' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.6' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '3.6' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '3.6' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.6' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - - job: 'Py35' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '3.5' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '3.5' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '3.5' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '3.5' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '3.5' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - 'Venv': - PythonVersion: '3.5' - TestsToRun: 'venvTests' - NeedsPythonTestReqs: true - PYTHON_VIRTUAL_ENVS_LOCATION: './src/tmp/envPaths.json' - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - - job: 'Py27' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Unit': - PythonVersion: '2.7' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - PythonVersion: '2.7' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - PythonVersion: '2.7' - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Multi Workspace': - PythonVersion: '2.7' - TestsToRun: 'testMultiWorkspace' - NeedsPythonTestReqs: true - 'Debugger': - PythonVersion: '2.7' - TestsToRun: 'testDebugger' - NeedsPythonTestReqs: true - # Note: Virtual env tests use `venv` and won't currently work with Python 2.7 - # Note: We only run the smoke tests with the latest Python release. - maxParallel: 1 - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - - stage: Reports - dependsOn: - - Linux - - Mac - - Windows - condition: always() - jobs: - - template: templates/jobs/coverage.yml diff --git a/build/ci/vscode-python-nightly-flake-ci.yaml b/build/ci/vscode-python-nightly-flake-ci.yaml deleted file mode 100644 index 720faa3d2fb5..000000000000 --- a/build/ci/vscode-python-nightly-flake-ci.yaml +++ /dev/null @@ -1,89 +0,0 @@ -# Nightly build - -name: '$(Year:yyyy).$(Month).0.$(BuildID)-nightly-flake' - -# Not the CI build, see `vscode-python-nightly-flake-ci.yaml`. -trigger: none - -# Not the PR build for merges to master and release. -pr: none - -schedules: - - cron: '0 8 * * 1-5' - # Daily midnight PST build, runs Monday - Friday always - displayName: Nightly Flake build - branches: - include: - - master - - release* - always: true - -# Variables that are available for the entire pipeline. -variables: - - template: templates/globals.yml - -stages: - - stage: Build - jobs: - - template: templates/jobs/build_compile.yml - - # Each item in each matrix has a number of possible values it may - # define. They are detailed in templates/test_phases.yml. The only - # required value is "TestsToRun". - - - stage: Linux - dependsOn: - - Build - jobs: - - job: 'Py3x_Linux' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - VSCODE_PYTHON_ROLLING: true - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - stage: Mac - dependsOn: - - Build - jobs: - - job: 'Py3x_Mac' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - VSCODE_PYTHON_ROLLING: true - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - stage: Windows - dependsOn: - - Build - jobs: - - job: 'Py3x_Windows' - dependsOn: [] - timeoutInMinutes: 120 - strategy: - matrix: - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - VSCODE_PYTHON_ROLLING: true - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml diff --git a/build/ci/vscode-python-pr-validation.yaml b/build/ci/vscode-python-pr-validation.yaml deleted file mode 100644 index ff5cffc1c5dc..000000000000 --- a/build/ci/vscode-python-pr-validation.yaml +++ /dev/null @@ -1,121 +0,0 @@ -# PR Validation build. - -name: '$(Year:yyyy).$(Month).0.$(BuildID)-pr' - -# Notes: Only trigger a PR build for master and release, and skip build/rebuild -# on changes in the news and .vscode folders. -pr: - autoCancel: true - branches: - include: ['master', 'release*', 'ds*'] - paths: - exclude: ['/news/1 Enhancements', '/news/2 Fixes', '/news/3 Code Health', '/.vscode'] - -# Not the CI build for merges to master and release. -trigger: none - -# Variables that are available for the entire pipeline. -variables: - - template: templates/globals.yml - -stages: - - stage: Build - jobs: - - template: templates/jobs/build_compile.yml - - # Each item in each matrix has a number of possible values it may - # define. They are detailed in templates/test_phases.yml. The only - # required value is "TestsToRun". - - - stage: Linux - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - strategy: - matrix: - 'Unit': - TestsToRun: 'testUnitTests, pythonUnitTests, pythonInternalTools, pythonIPythonTests' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - 'Smoke': - TestsToRun: 'testSmoke' - NeedsPythonTestReqs: true - NeedsIPythonReqs: true - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - job: 'Py27' - dependsOn: [] - strategy: - matrix: - 'Unit': - PythonVersion: '2.7' - # Note: "pythonInternalTools" tests are 3.7+. - TestsToRun: 'testUnitTests, pythonUnitTests' - NeedsPythonTestReqs: true - 'Functional': - PythonVersion: '2.7' - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - pool: - vmImage: 'ubuntu-16.04' - steps: - - template: templates/test_phases.yml - - - stage: Mac - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - strategy: - matrix: - # This gives us our best functional coverage for the OS. - 'Functional+Single': - TestsToRun: 'testfunctional, testSingleWorkspace' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - pool: - vmImage: '$(vmImageMacOS)' - steps: - - template: templates/test_phases.yml - - - stage: Windows - dependsOn: [] - jobs: - - job: 'Py3x' - dependsOn: [] - timeoutInMinutes: 90 - strategy: - matrix: - # This gives us our best functional coverage for the OS. - 'Functional': - TestsToRun: 'testfunctional' - NeedsPythonTestReqs: true - NeedsPythonFunctionalReqs: true - 'Single Workspace': - TestsToRun: 'testSingleWorkspace' - NeedsPythonTestReqs: true - pool: - vmImage: 'vs2017-win2016' - steps: - - template: templates/test_phases.yml - - - stage: Reports - dependsOn: - - Linux - - Mac - - Windows - condition: always() - jobs: - - template: templates/jobs/coverage.yml diff --git a/build/conda-functional-requirements.txt b/build/conda-functional-requirements.txt deleted file mode 100644 index 756692183841..000000000000 --- a/build/conda-functional-requirements.txt +++ /dev/null @@ -1,24 +0,0 @@ -# List of requirements for conda environments that cannot be installed using conda -livelossplot -versioneer -flake8 -autopep8 -bandit -black ; python_version>='3.6' -yapf -pylint -pycodestyle -prospector -pydocstyle -nose -pytest==4.6.9 # Last version of pytest with Python 2.7 support -rope -flask -django -isort -pathlib2>=2.2.0 ; python_version<'3.6' # Python 2.7 compatibility (pytest) -pythreejs -ipyvolume -beakerx -bqplot -K3D \ No newline at end of file diff --git a/build/constants.js b/build/constants.js index 60109ea4ce0e..73815ebea45f 100644 --- a/build/constants.js +++ b/build/constants.js @@ -1,8 +1,10 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. + 'use strict'; const util = require('./util'); + exports.ExtensionRootDir = util.ExtensionRootDir; // This is a list of files that existed before MS got the extension. exports.existingFiles = util.getListOfFiles('existingFiles.json'); diff --git a/build/debug/replaceWithWebBrowserPanel.js b/build/debug/replaceWithWebBrowserPanel.js deleted file mode 100644 index 21c293117535..000000000000 --- a/build/debug/replaceWithWebBrowserPanel.js +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -const path = require('path'); -const fs = require('fs-extra'); -const common = require('../constants'); - -// Used to debug extension with the DS UI loaded in a web browser. -// We don't want to include test code into extension, hence just patch the js code for debugging. -// This code is used in fucntional ui tests. - -const fileToModify = path.join(common.ExtensionRootDir, 'out/client/common/installer/serviceRegistry.js'); -const fileContents = fs.readFileSync(fileToModify).toString(); - -const newInjection = 'require("../../../test/datascience/uiTests/webBrowserPanelProvider").WebBrowserPanelProvider'; -const oldInjection = 'webPanelProvider_1.WebPanelProvider'; - -if (fileContents.indexOf(oldInjection) === -1 && fileContents.indexOf(newInjection) === -1) { - throw new Error('Unable to modify serviceRegistry.js for WebBrowser debugging'); -} -if (fileContents.indexOf(oldInjection)) { - const newFileContents = fileContents.replace(oldInjection, newInjection); - fs.writeFileSync(fileToModify, newFileContents); -} diff --git a/build/debugger-install-requirements.txt b/build/debugger-install-requirements.txt deleted file mode 100644 index 6ee0765db4b3..000000000000 --- a/build/debugger-install-requirements.txt +++ /dev/null @@ -1,2 +0,0 @@ -# Requirements needed to run install_debugpy.py -packaging diff --git a/build/existingFiles.json b/build/existingFiles.json index 6a3493259618..48ab84ff565d 100644 --- a/build/existingFiles.json +++ b/build/existingFiles.json @@ -135,27 +135,6 @@ "src/client/common/variables/sysTypes.ts", "src/client/common/variables/types.ts", "src/client/debugger/constants.ts", - "src/client/debugger/debugAdapter/Common/Contracts.ts", - "src/client/debugger/debugAdapter/Common/debugStreamProvider.ts", - "src/client/debugger/debugAdapter/Common/processServiceFactory.ts", - "src/client/debugger/debugAdapter/Common/protocolLogger.ts", - "src/client/debugger/debugAdapter/Common/protocolParser.ts", - "src/client/debugger/debugAdapter/Common/protocolWriter.ts", - "src/client/debugger/debugAdapter/Common/Utils.ts", - "src/client/debugger/debugAdapter/DebugClients/DebugClient.ts", - "src/client/debugger/debugAdapter/DebugClients/DebugFactory.ts", - "src/client/debugger/debugAdapter/DebugClients/helper.ts", - "src/client/debugger/debugAdapter/DebugClients/launcherProvider.ts", - "src/client/debugger/debugAdapter/DebugClients/LocalDebugClient.ts", - "src/client/debugger/debugAdapter/DebugClients/localDebugClientV2.ts", - "src/client/debugger/debugAdapter/DebugClients/nonDebugClientV2.ts", - "src/client/debugger/debugAdapter/DebugClients/RemoteDebugClient.ts", - "src/client/debugger/debugAdapter/DebugServers/BaseDebugServer.ts", - "src/client/debugger/debugAdapter/DebugServers/LocalDebugServerV2.ts", - "src/client/debugger/debugAdapter/DebugServers/RemoteDebugServerv2.ts", - "src/client/debugger/debugAdapter/main.ts", - "src/client/debugger/debugAdapter/serviceRegistry.ts", - "src/client/debugger/debugAdapter/types.ts", "src/client/debugger/extension/banner.ts", "src/client/debugger/extension/configuration/baseProvider.ts", "src/client/debugger/extension/configuration/configurationProviderUtils.ts", @@ -191,7 +170,6 @@ "src/client/interpreter/configuration/types.ts", "src/client/interpreter/contracts.ts", "src/client/interpreter/display/index.ts", - "src/client/interpreter/display/shebangCodeLensProvider.ts", "src/client/interpreter/helpers.ts", "src/client/interpreter/interpreterService.ts", "src/client/interpreter/interpreterVersion.ts", @@ -217,7 +195,6 @@ "src/client/ioc/index.ts", "src/client/ioc/serviceManager.ts", "src/client/ioc/types.ts", - "src/client/jupyter/provider.ts", "src/client/language/braceCounter.ts", "src/client/language/characters.ts", "src/client/language/characterStream.ts", @@ -229,7 +206,6 @@ "src/client/language/types.ts", "src/client/language/unicode.ts", "src/client/languageServices/jediProxyFactory.ts", - "src/client/languageServices/languageServerSurveyBanner.ts", "src/client/languageServices/proposeLanguageServerBanner.ts", "src/client/linters/bandit.ts", "src/client/linters/baseLinter.ts", @@ -403,6 +379,7 @@ "src/test/common/socketStream.test.ts", "src/test/common/terminals/activation.bash.unit.test.ts", "src/test/common/terminals/activation.commandPrompt.unit.test.ts", + "src/test/common/terminals/activation.nushell.unit.test.ts", "src/test/common/terminals/activation.conda.unit.test.ts", "src/test/common/terminals/activation.unit.test.ts", "src/test/common/terminals/activator/base.unit.test.ts", @@ -424,7 +401,6 @@ "src/test/configuration/interpreterSelector.unit.test.ts", "src/test/constants.ts", "src/test/core.ts", - "src/test/debugger/attach.ptvsd.test.ts", "src/test/debugger/capabilities.test.ts", "src/test/debugger/common/constants.ts", "src/test/debugger/common/debugStreamProvider.test.ts", @@ -524,7 +500,7 @@ "src/test/providers/shebangCodeLenseProvider.test.ts", "src/test/providers/symbolProvider.unit.test.ts", "src/test/providers/terminal.unit.test.ts", - "src/test/pythonFiles/formatting/dummy.ts", + "src/test/python_files/formatting/dummy.ts", "src/test/refactor/extension.refactor.extract.method.test.ts", "src/test/refactor/extension.refactor.extract.var.test.ts", "src/test/refactor/rename.test.ts", diff --git a/build/fail.js b/build/fail.js new file mode 100644 index 000000000000..2adc808d8da9 --- /dev/null +++ b/build/fail.js @@ -0,0 +1,6 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +process.exitCode = 1; diff --git a/build/functional-test-requirements.txt b/build/functional-test-requirements.txt index d2f1977a7be4..5c3a9e3116ed 100644 --- a/build/functional-test-requirements.txt +++ b/build/functional-test-requirements.txt @@ -1,2 +1,5 @@ # List of requirements for functional tests versioneer +numpy +pytest +pytest-cov diff --git a/build/ipython-test-requirements.txt b/build/ipython-test-requirements.txt deleted file mode 100644 index 688e039a4461..000000000000 --- a/build/ipython-test-requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -# List of requirements for ipython tests -numpy -pandas -ipython diff --git a/build/license-header.txt b/build/license-header.txt new file mode 100644 index 000000000000..2970b03d7a1c --- /dev/null +++ b/build/license-header.txt @@ -0,0 +1,9 @@ +PLEASE NOTE: This is the license for the Python extension for Visual Studio Code. The Python extension automatically installs other extensions as optional dependencies, which can be uninstalled at any time. These extensions have separate licenses: + + - The Python Debugger extension is released under an MIT License: + https://marketplace.visualstudio.com/items/ms-python.debugpy/license + + - The Pylance extension is only available in binary form and is released under a Microsoft proprietary license, the terms of which are available here: + https://marketplace.visualstudio.com/items/ms-python.vscode-pylance/license + +------------------------------------------------------------------------------ diff --git a/build/test-requirements.txt b/build/test-requirements.txt index e2248888e5d1..6d64ff72ac7f 100644 --- a/build/test-requirements.txt +++ b/build/test-requirements.txt @@ -1,18 +1,42 @@ -# Install flake8 first, as both flake8 and autopep8 require pycodestyle, -# but flake8 has a tighter pinning. +# pin setoptconf to prevent issue with 'use_2to3' +setoptconf==0.3.0 + flake8 -autopep8 bandit -black ; python_version>='3.6' -yapf pylint pycodestyle -prospector pydocstyle -nose -pytest==4.6.9 # Last version of pytest with Python 2.7 support -rope +prospector +pytest flask +fastapi +uvicorn django -isort -pathlib2>=2.2.0 ; python_version<'3.6' # Python 2.7 compatibility (pytest) +testresources +testscenarios + +# Integrated TensorBoard tests +tensorboard +torch-tb-profiler + +# extension build tests +freezegun + +# testing custom pytest plugin require the use of named pipes +namedpipe; platform_system == "Windows" + +# typing for Django files +django-stubs + +coverage +pytest-cov +pytest-json +pytest-timeout + + +# for pytest-describe related tests +pytest-describe + +# for pytest-ruff related tests +pytest-ruff +pytest-black diff --git a/build/test_update_ext_version.py b/build/test_update_ext_version.py new file mode 100644 index 000000000000..b94484775f59 --- /dev/null +++ b/build/test_update_ext_version.py @@ -0,0 +1,126 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import datetime +import json + +import freezegun +import pytest +import update_ext_version + + +CURRENT_YEAR = datetime.datetime.now().year +TEST_DATETIME = f"{CURRENT_YEAR}-03-14 01:23:45" + +# The build ID is calculated via: +# "1" + datetime.datetime.strptime(TEST_DATETIME,"%Y-%m-%d %H:%M:%S").strftime('%j%H%M') +EXPECTED_BUILD_ID = "10730123" + + +def create_package_json(directory, version): + """Create `package.json` in `directory` with a specified version of `version`.""" + package_json = directory / "package.json" + package_json.write_text(json.dumps({"version": version}), encoding="utf-8") + return package_json + + +def run_test(tmp_path, version, args, expected): + package_json = create_package_json(tmp_path, version) + update_ext_version.main(package_json, args) + package = json.loads(package_json.read_text(encoding="utf-8")) + assert expected == update_ext_version.parse_version(package["version"]) + + +@pytest.mark.parametrize( + "version, args", + [ + ("2000.1.0", []), # Wrong year for CalVer + (f"{CURRENT_YEAR}.0.0-rc", []), + (f"{CURRENT_YEAR}.1.0-rc", ["--release"]), + (f"{CURRENT_YEAR}.0.0-rc", ["--release", "--build-id", "-1"]), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release", "--for-publishing", "--build-id", "-1"], + ), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release", "--for-publishing", "--build-id", "999999999999"], + ), + (f"{CURRENT_YEAR}.1.0-rc", ["--build-id", "-1"]), + (f"{CURRENT_YEAR}.1.0-rc", ["--for-publishing", "--build-id", "-1"]), + (f"{CURRENT_YEAR}.1.0-rc", ["--for-publishing", "--build-id", "999999999999"]), + ], +) +def test_invalid_args(tmp_path, version, args): + with pytest.raises(ValueError): + run_test(tmp_path, version, args, None) + + +@pytest.mark.parametrize( + "version, args, expected", + [ + ( + f"{CURRENT_YEAR}.1.0-rc", + ["--build-id", "12345"], + (f"{CURRENT_YEAR}", "1", "12345", "rc"), + ), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release", "--build-id", "12345"], + (f"{CURRENT_YEAR}", "0", "12345", ""), + ), + ( + f"{CURRENT_YEAR}.1.0-rc", + ["--for-publishing", "--build-id", "12345"], + (f"{CURRENT_YEAR}", "1", "12345", ""), + ), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release", "--for-publishing", "--build-id", "12345"], + (f"{CURRENT_YEAR}", "0", "12345", ""), + ), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release", "--build-id", "999999999999"], + (f"{CURRENT_YEAR}", "0", "999999999999", ""), + ), + ( + f"{CURRENT_YEAR}.1.0-rc", + ["--build-id", "999999999999"], + (f"{CURRENT_YEAR}", "1", "999999999999", "rc"), + ), + ( + f"{CURRENT_YEAR}.1.0-rc", + [], + (f"{CURRENT_YEAR}", "1", EXPECTED_BUILD_ID, "rc"), + ), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release"], + (f"{CURRENT_YEAR}", "0", "0", ""), + ), + ( + f"{CURRENT_YEAR}.1.0-rc", + ["--for-publishing"], + (f"{CURRENT_YEAR}", "1", EXPECTED_BUILD_ID, ""), + ), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release", "--for-publishing"], + (f"{CURRENT_YEAR}", "0", "0", ""), + ), + ( + f"{CURRENT_YEAR}.0.0-rc", + ["--release"], + (f"{CURRENT_YEAR}", "0", "0", ""), + ), + ( + f"{CURRENT_YEAR}.1.0-rc", + [], + (f"{CURRENT_YEAR}", "1", EXPECTED_BUILD_ID, "rc"), + ), + ], +) +@freezegun.freeze_time(f"{CURRENT_YEAR}-03-14 01:23:45") +def test_update_ext_version(tmp_path, version, args, expected): + run_test(tmp_path, version, args, expected) diff --git a/build/tslint-rules/baseRuleWalker.js b/build/tslint-rules/baseRuleWalker.js deleted file mode 100644 index b8ce93d4179d..000000000000 --- a/build/tslint-rules/baseRuleWalker.js +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; - -const path = require('path'); -const Lint = require('tslint'); -const util = require('../util'); -class BaseRuleWalker extends Lint.RuleWalker { - shouldIgnoreCurrentFile(node, filesToIgnore) { - const sourceFile = node.getSourceFile(); - if (sourceFile && sourceFile.fileName) { - const filename = path.resolve(util.ExtensionRootDir, sourceFile.fileName); - if (filesToIgnore.indexOf(filename.replace(/\//g, path.sep)) >= 0) { - return true; - } - } - return false; - } -} -exports.BaseRuleWalker = BaseRuleWalker; diff --git a/build/tslint-rules/messagesMustBeLocalizedRule.js b/build/tslint-rules/messagesMustBeLocalizedRule.js deleted file mode 100644 index acf4beaba811..000000000000 --- a/build/tslint-rules/messagesMustBeLocalizedRule.js +++ /dev/null @@ -1,71 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; - -const path = require('path'); -const Lint = require('tslint'); -const ts = require('typescript'); -const util = require('../util'); -const baseRuleWalker = require('./baseRuleWalker'); -const methodNames = [ - // From IApplicationShell (vscode.window): - 'showErrorMessage', - 'showInformationMessage', - 'showWarningMessage', - 'setStatusBarMessage', - // From IOutputChannel (vscode.OutputChannel): - 'appendLine', - 'appendLine' -]; -// tslint:ignore-next-line:no-suspicious-comments -// TODO: Ideally we would not ignore any files. -const ignoredFiles = util.getListOfFiles('unlocalizedFiles.json'); -const ignoredPrefix = path.normalize('src/test'); -const failureMessage = 'Messages must be localized in the Python Extension (use src/client/common/utils/localize.ts)'; -class NoStringLiteralsInMessages extends baseRuleWalker.BaseRuleWalker { - visitCallExpression(node) { - if (!this.shouldIgnoreNode(node)) { - node.arguments - .filter((arg) => ts.isStringLiteral(arg) || ts.isTemplateLiteral(arg)) - .forEach((arg) => { - this.addFailureAtNode(arg, failureMessage); - }); - } - super.visitCallExpression(node); - } - shouldIgnoreCurrentFile(node) { - //console.log(''); - //console.log(node.getSourceFile().fileName); - //console.log(ignoredFiles); - if (super.shouldIgnoreCurrentFile(node, ignoredFiles)) { - return true; - } - const sourceFile = node.getSourceFile(); - if (sourceFile && sourceFile.fileName) { - if (sourceFile.fileName.startsWith(ignoredPrefix)) { - return true; - } - } - return false; - } - shouldIgnoreNode(node) { - if (this.shouldIgnoreCurrentFile(node)) { - return true; - } - if (!ts.isPropertyAccessExpression(node.expression)) { - return true; - } - const prop = node.expression; - if (methodNames.indexOf(prop.name.text) < 0) { - return true; - } - return false; - } -} -class Rule extends Lint.Rules.AbstractRule { - apply(sourceFile) { - return this.applyWithWalker(new NoStringLiteralsInMessages(sourceFile, this.getOptions())); - } -} -Rule.FAILURE_STRING = failureMessage; -exports.Rule = Rule; diff --git a/build/unlocalizedFiles.json b/build/unlocalizedFiles.json index a30be98420fe..4da3d450af23 100644 --- a/build/unlocalizedFiles.json +++ b/build/unlocalizedFiles.json @@ -7,7 +7,6 @@ "src/client/formatters/baseFormatter.ts", "src/client/formatters/blackFormatter.ts", "src/client/interpreter/configuration/pythonPathUpdaterService.ts", - "src/client/interpreter/locators/services/pipEnvService.ts", "src/client/linters/errorHandlers/notInstalled.ts", "src/client/linters/errorHandlers/standard.ts", "src/client/linters/linterCommands.ts", @@ -15,6 +14,7 @@ "src/client/providers/importSortProvider.ts", "src/client/providers/objectDefinitionProvider.ts", "src/client/providers/simpleRefactorProvider.ts", + "src/client/pythonEnvironments/discovery/locators/services/pipEnvService.ts", "src/client/terminals/codeExecution/helper.ts", "src/client/testing/common/debugLauncher.ts", "src/client/testing/common/managers/baseTestManager.ts", diff --git a/build/update_ext_version.py b/build/update_ext_version.py new file mode 100644 index 000000000000..6d709ae05f7f --- /dev/null +++ b/build/update_ext_version.py @@ -0,0 +1,126 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import argparse +import datetime +import json +import pathlib +import sys +from typing import Sequence, Tuple, Union + +EXT_ROOT = pathlib.Path(__file__).parent.parent +PACKAGE_JSON_PATH = EXT_ROOT / "package.json" + + +def build_arg_parse() -> argparse.ArgumentParser: + """Builds the arguments parser.""" + parser = argparse.ArgumentParser( + description="This script updates the python extension micro version based on the release or pre-release channel." + ) + parser.add_argument( + "--release", + action="store_true", + help="Treats the current build as a release build.", + ) + parser.add_argument( + "--build-id", + action="store", + type=int, + default=None, + help="If present, will be used as a micro version.", + required=False, + ) + parser.add_argument( + "--for-publishing", + action="store_true", + help="Removes `-dev` or `-rc` suffix.", + ) + return parser + + +def is_even(v: Union[int, str]) -> bool: + """Returns True if `v` is even.""" + return not int(v) % 2 + + +def micro_build_number() -> str: + """Generates the micro build number. + The format is `1`. + """ + return f"1{datetime.datetime.now(tz=datetime.timezone.utc).strftime('%j%H%M')}" + + +def parse_version(version: str) -> Tuple[str, str, str, str]: + """Parse a version string into a tuple of version parts.""" + major, minor, parts = version.split(".", maxsplit=2) + try: + micro, suffix = parts.split("-", maxsplit=1) + except ValueError: + micro = parts + suffix = "" + return major, minor, micro, suffix + + +def main(package_json: pathlib.Path, argv: Sequence[str]) -> None: + parser = build_arg_parse() + args = parser.parse_args(argv) + + package = json.loads(package_json.read_text(encoding="utf-8")) + + major, minor, micro, suffix = parse_version(package["version"]) + + current_year = datetime.datetime.now().year + current_month = datetime.datetime.now().month + int_major = int(major) + valid_major = ( + int_major + == current_year # Between JAN-DEC major version should be current year + or ( + int_major == current_year - 1 and current_month == 1 + ) # After new years the check is relaxed for JAN to allow releases of previous year DEC + or ( + int_major == current_year + 1 and current_month == 12 + ) # Before new years the check is relaxed for DEC to allow pre-releases of next year JAN + ) + if not valid_major: + raise ValueError( + f"Major version [{major}] must be the current year [{current_year}].", + f"If changing major version after new year's, change to {current_year}.1.0", + "Minor version must be updated based on release or pre-release channel.", + ) + + if args.release and not is_even(minor): + raise ValueError( + f"Release version should have EVEN numbered minor version: {package['version']}" + ) + elif not args.release and is_even(minor): + raise ValueError( + f"Pre-Release version should have ODD numbered minor version: {package['version']}" + ) + + print(f"Updating build FROM: {package['version']}") + if args.build_id: + # If build id is provided it should fall within the 0-INT32 max range + # that the max allowed value for publishing to the Marketplace. + if args.build_id < 0 or (args.for_publishing and args.build_id > ((2**32) - 1)): + raise ValueError(f"Build ID must be within [0, {(2**32) - 1}]") + + package["version"] = ".".join((major, minor, str(args.build_id))) + elif args.release: + package["version"] = ".".join((major, minor, micro)) + else: + # micro version only updated for pre-release. + package["version"] = ".".join((major, minor, micro_build_number())) + + if not args.for_publishing and not args.release and len(suffix): + package["version"] += "-" + suffix + print(f"Updating build TO: {package['version']}") + + # Overwrite package.json with new data add a new-line at the end of the file. + package_json.write_text( + json.dumps(package, indent=4, ensure_ascii=False) + "\n", encoding="utf-8" + ) + + +if __name__ == "__main__": + main(PACKAGE_JSON_PATH, sys.argv[1:]) diff --git a/build/update_package_file.py b/build/update_package_file.py new file mode 100644 index 000000000000..f82587ced846 --- /dev/null +++ b/build/update_package_file.py @@ -0,0 +1,22 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import json +import pathlib + +EXT_ROOT = pathlib.Path(__file__).parent.parent +PACKAGE_JSON_PATH = EXT_ROOT / "package.json" + + +def main(package_json: pathlib.Path) -> None: + package = json.loads(package_json.read_text(encoding="utf-8")) + package["enableTelemetry"] = True + + # Overwrite package.json with new data add a new-line at the end of the file. + package_json.write_text( + json.dumps(package, indent=4, ensure_ascii=False) + "\n", encoding="utf-8" + ) + + +if __name__ == "__main__": + main(PACKAGE_JSON_PATH) diff --git a/build/util.js b/build/util.js index 93a60e7fb19b..c54e204ae7d7 100644 --- a/build/util.js +++ b/build/util.js @@ -1,9 +1,11 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. + 'use strict'; const fs = require('fs'); const path = require('path'); + exports.ExtensionRootDir = path.dirname(__dirname); function getListOfFiles(filename) { filename = path.normalize(filename); @@ -12,8 +14,6 @@ function getListOfFiles(filename) { } const data = fs.readFileSync(filename).toString(); const files = JSON.parse(data); - return files.map((file) => { - return path.join(exports.ExtensionRootDir, file.replace(/\//g, path.sep)); - }); + return files.map((file) => path.join(exports.ExtensionRootDir, file.replace(/\//g, path.sep))); } exports.getListOfFiles = getListOfFiles; diff --git a/build/webpack/common.js b/build/webpack/common.js index 53ee36a6077d..c7f7460adf86 100644 --- a/build/webpack/common.js +++ b/build/webpack/common.js @@ -1,11 +1,14 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. + 'use strict'; const glob = require('glob'); const path = require('path'); +// eslint-disable-next-line camelcase const webpack_bundle_analyzer = require('webpack-bundle-analyzer'); const constants = require('../constants'); + exports.nodeModulesToExternalize = [ 'unicode/category/Lu', 'unicode/category/Ll', @@ -17,26 +20,10 @@ exports.nodeModulesToExternalize = [ 'unicode/category/Mc', 'unicode/category/Nd', 'unicode/category/Pc', - '@jupyterlab/services', - 'azure-storage', - 'request', - 'request-progress', 'source-map-support', - 'diff-match-patch', 'sudo-prompt', 'node-stream-zip', 'xml2js', - 'vsls/vscode', - 'pdfkit/js/pdfkit.standalone', - 'crypto-js', - 'fontkit', - 'linebreak', - 'png-js', - '@koa/cors', - 'koa', - 'koa-compress', - 'koa-logger', - 'zeromq' ]; exports.nodeModulesToReplacePaths = [...exports.nodeModulesToExternalize]; function getDefaultPlugins(name) { @@ -49,8 +36,8 @@ function getDefaultPlugins(name) { reportFilename: `${name}.analyzer.html`, generateStatsFile: true, statsFilename: `${name}.stats.json`, - openAnalyzer: false // Open file manually if you want to see it :) - }) + openAnalyzer: false, // Open file manually if you want to see it :) + }), ); } return plugins; diff --git a/build/webpack/loaders/externalizeDependencies.js b/build/webpack/loaders/externalizeDependencies.js index 1fe6f0d10487..0ada9b0424d8 100644 --- a/build/webpack/loaders/externalizeDependencies.js +++ b/build/webpack/loaders/externalizeDependencies.js @@ -2,19 +2,26 @@ // Licensed under the MIT License. const common = require('../common'); -function replaceModule(contents, moduleName, quotes) { - const stringToSearch = `${quotes}${moduleName}${quotes}`; - const stringToReplaceWith = `${quotes}./node_modules/${moduleName}${quotes}`; + +function replaceModule(prefixRegex, prefix, contents, moduleName, quotes) { + const stringToSearch = `${prefixRegex}${quotes}${moduleName}${quotes}`; + const stringToReplaceWith = `${prefix}${quotes}./node_modules/${moduleName}${quotes}`; return contents.replace(new RegExp(stringToSearch, 'gm'), stringToReplaceWith); } -// tslint:disable:no-default-export no-invalid-this + +// eslint-disable-next-line camelcase function default_1(source) { common.nodeModulesToReplacePaths.forEach((moduleName) => { if (source.indexOf(moduleName) > 0) { - source = replaceModule(source, moduleName, '"'); - source = replaceModule(source, moduleName, "'"); + source = replaceModule('import\\(', 'import(', source, moduleName, '"'); + source = replaceModule('import\\(', 'import(', source, moduleName, "'"); + source = replaceModule('require\\(', 'require(', source, moduleName, '"'); + source = replaceModule('require\\(', 'require(', source, moduleName, "'"); + source = replaceModule('from ', 'from ', source, moduleName, '"'); + source = replaceModule('from ', 'from ', source, moduleName, "'"); } }); return source; } +// eslint-disable-next-line camelcase exports.default = default_1; diff --git a/build/webpack/loaders/fixNodeFetch.js b/build/webpack/loaders/fixNodeFetch.js deleted file mode 100644 index 0d648d131349..000000000000 --- a/build/webpack/loaders/fixNodeFetch.js +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -const path = require('path'); -const constants = require('../../constants'); - -const nodeFetchIndexFile = path.join( - constants.ExtensionRootDir, - 'node_modules', - '@jupyterlab', - 'services', - 'node_modules', - 'node-fetch', - 'lib', - 'index.js' -); -// On windows replace `\` with `\\`, else we get an error in webpack (Module parse failed: Octal literal in strict mode). -const nodeFetchFile = constants.isWindows ? nodeFetchIndexFile.replace(/\\/g, '\\\\') : nodeFetchIndexFile; - -/** - * Node fetch has an es6 module file. That gets bundled into @jupyterlab/services. - * However @jupyterlab/services/serverconnection.js is written such that it uses fetch from either node or browser. - * We need to force the browser version for things to work correctly. - * - * @export - * @param {string} source - * @returns - */ -exports.default = function (source) { - if (source.indexOf("require('node-fetch')") > 0) { - source = source.replace(/require\('node-fetch'\)/g, `require('${nodeFetchFile}')`); - } - return source; -}; diff --git a/build/webpack/pdfkit.js b/build/webpack/pdfkit.js deleted file mode 100644 index 5c31590a3924..000000000000 --- a/build/webpack/pdfkit.js +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -/* -This file is only used when using webpack for bundling. -We have a dummy file so that webpack doesn't fall over when trying to bundle pdfkit. -Just point it to a dummy file (this file). -Once webpack is done, we override the pdfkit.js file in the externalized node modules directory -with the actual source of pdfkit that needs to be used by nodejs (our extension code). -*/ - -class PDFDocument {} -module.exports = PDFDocument; diff --git a/build/webpack/plugins/less-plugin-base64.js b/build/webpack/plugins/less-plugin-base64.js deleted file mode 100644 index 7c42013b4e55..000000000000 --- a/build/webpack/plugins/less-plugin-base64.js +++ /dev/null @@ -1,64 +0,0 @@ -// Most of this was based on https://github.com/less/less-plugin-inline-urls -// License for this was included in the ThirdPartyNotices-Repository.txt -const less = require('less'); - -class Base64MimeTypeNode { - constructor() { - this.value = 'image/svg+xml;base64'; - this.type = 'Base64MimeTypeNode'; - } - - eval(context) { - return this; - } -} - -class Base64Visitor { - constructor() { - this.visitor = new less.visitors.Visitor(this); - - // Set to a preEval visitor to make sure this runs before - // any evals - this.isPreEvalVisitor = true; - - // Make sure this is a replacing visitor so we remove the old data. - this.isReplacing = true; - } - - run(root) { - return this.visitor.visit(root); - } - - visitUrl(URLNode, visitArgs) { - // Return two new nodes in the call. One that has the mime type and other with the node. The data-uri - // evaluator will transform this into a base64 string - return new less.tree.Call( - 'data-uri', - [new Base64MimeTypeNode(), URLNode.value], - URLNode.index || 0, - URLNode.currentFileInfo - ); - } -} -/* - * This was originally used to perform less on uris and turn them into base64 encoded so they can be loaded into - * a webpack html. There's one caveat though. Less and webpack don't play well together. It runs the less at the root dir. - * This means in order to use this in a less file, you need to qualify the urls as if they come from the root dir. - * Example: - * url("./foo.svg") - * becomes - * url("./src/datascience-ui/history-react/images/foo.svg") - */ -class Base64Plugin { - constructor() {} - - install(less, pluginManager) { - pluginManager.addVisitor(new Base64Visitor()); - } - - printUsage() { - console.log('Base64 Plugin. Add to your webpack.config.js as a plugin to convert URLs to base64 inline'); - } -} - -module.exports = Base64Plugin; diff --git a/build/webpack/webpack.datascience-ui-notebooks.config.js b/build/webpack/webpack.datascience-ui-notebooks.config.js deleted file mode 100644 index e661d5ee7620..000000000000 --- a/build/webpack/webpack.datascience-ui-notebooks.config.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -const builder = require('./webpack.datascience-ui.config.builder'); -module.exports = [builder.notebooks]; diff --git a/build/webpack/webpack.datascience-ui-viewers.config.js b/build/webpack/webpack.datascience-ui-viewers.config.js deleted file mode 100644 index 89e3f2c56fdd..000000000000 --- a/build/webpack/webpack.datascience-ui-viewers.config.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -const builder = require('./webpack.datascience-ui.config.builder'); -module.exports = [builder.viewers]; diff --git a/build/webpack/webpack.datascience-ui.config.builder.js b/build/webpack/webpack.datascience-ui.config.builder.js deleted file mode 100644 index 05587db4e14c..000000000000 --- a/build/webpack/webpack.datascience-ui.config.builder.js +++ /dev/null @@ -1,283 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -// Note to editors, if you change this file you have to restart compile-webviews. -// It doesn't reload the config otherwise. - -const common = require('./common'); -const webpack = require('webpack'); -const HtmlWebpackPlugin = require('html-webpack-plugin'); -const FixDefaultImportPlugin = require('webpack-fix-default-import-plugin'); -const path = require('path'); -const CopyWebpackPlugin = require('copy-webpack-plugin'); -const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); -const TerserPlugin = require('terser-webpack-plugin'); -const constants = require('../constants'); -const configFileName = 'tsconfig.datascience-ui.json'; - -// Any build on the CI is considered production mode. -const isProdBuild = constants.isCI || process.argv.includes('--mode'); - -function getEntry(isNotebook) { - if (isNotebook) { - return { - nativeEditor: ['babel-polyfill', `./src/datascience-ui/native-editor/index.tsx`], - interactiveWindow: ['babel-polyfill', `./src/datascience-ui/history-react/index.tsx`] - }; - } - - return { - plotViewer: ['babel-polyfill', `./src/datascience-ui/plot/index.tsx`], - dataExplorer: ['babel-polyfill', `./src/datascience-ui/data-explorer/index.tsx`] - }; -} - -function getPlugins(isNotebook) { - const plugins = []; - if (isProdBuild) { - plugins.push(...common.getDefaultPlugins(isNotebook ? 'notebook' : 'viewers')); - } - - if (isNotebook) { - plugins.push( - new MonacoWebpackPlugin({ - languages: [] // force to empty so onigasm will be used - }), - new HtmlWebpackPlugin({ - template: path.join(__dirname, '/nativeOrInteractivePicker.html'), - chunks: [], - filename: 'index.html' - }), - new HtmlWebpackPlugin({ - template: 'src/datascience-ui/native-editor/index.html', - chunks: ['monaco', 'commons', 'nativeEditor'], - filename: 'index.nativeEditor.html' - }), - new HtmlWebpackPlugin({ - template: 'src/datascience-ui/history-react/index.html', - chunks: ['monaco', 'commons', 'interactiveWindow'], - filename: 'index.interactiveWindow.html' - }) - ); - } else { - const definePlugin = new webpack.DefinePlugin({ - 'process.env': { - NODE_ENV: JSON.stringify('production') - } - }); - - plugins.push( - ...(isProdBuild ? [definePlugin] : []), - ...[ - new HtmlWebpackPlugin({ - template: 'src/datascience-ui/plot/index.html', - indexUrl: `${constants.ExtensionRootDir}/out/1`, - chunks: ['commons', 'plotViewer'], - filename: 'index.plotViewer.html' - }), - new HtmlWebpackPlugin({ - template: 'src/datascience-ui/data-explorer/index.html', - indexUrl: `${constants.ExtensionRootDir}/out/1`, - chunks: ['commons', 'dataExplorer'], - filename: 'index.dataExplorer.html' - }) - ] - ); - } - - return plugins; -} - -function buildConfiguration(isNotebook) { - // Folder inside `datascience-ui` that will be created and where the files will be dumped. - const bundleFolder = isNotebook ? 'notebook' : 'viewers'; - const filesToCopy = []; - if (isNotebook) { - // Include files only for notebooks. - filesToCopy.push( - ...[ - { - from: path.join(constants.ExtensionRootDir, 'out/ipywidgets/dist/ipywidgets.js'), - to: path.join(constants.ExtensionRootDir, 'out', 'datascience-ui', bundleFolder) - }, - { - from: path.join(constants.ExtensionRootDir, 'node_modules/font-awesome/**/*'), - to: path.join(constants.ExtensionRootDir, 'out', 'datascience-ui', 'common', 'node_modules') - } - ] - ); - } - return { - context: constants.ExtensionRootDir, - entry: getEntry(isNotebook), - output: { - path: path.join(constants.ExtensionRootDir, 'out', 'datascience-ui', bundleFolder), - filename: '[name].js', - chunkFilename: `[name].bundle.js` - }, - mode: 'development', // Leave as is, we'll need to see stack traces when there are errors. - devtool: isProdBuild ? 'source-map' : 'inline-source-map', - optimization: { - minimize: isProdBuild, - minimizer: isProdBuild ? [new TerserPlugin({ sourceMap: true })] : [], - moduleIds: 'hashed', // (doesn't re-generate bundles unnecessarily) https://webpack.js.org/configuration/optimization/#optimizationmoduleids. - splitChunks: { - chunks: 'all', - cacheGroups: { - // These are bundles that will be created and loaded when page first loads. - // These must be added to the page along with the main entry point. - // Smaller they are, the faster the load in SSH. - // Interactive and native editors will share common code in commons. - commons: { - name: 'commons', - chunks: 'initial', - minChunks: isNotebook ? 2 : 1, // We want at least one shared bundle (2 for notebooks, as we want monago split into another). - filename: '[name].initial.bundle.js' - }, - // Even though nteract has been split up, some of them are large as nteract alone is large. - // This will ensure nteract (just some of the nteract) goes into a separate bundle. - // Webpack will bundle others separately when loading them asynchronously using `await import(...)` - nteract: { - name: 'nteract', - chunks: 'all', - minChunks: 2, - test(module, _chunks) { - // `module.resource` contains the absolute path of the file on disk. - // Look for `node_modules/monaco...`. - const path = require('path'); - return ( - module.resource && - module.resource.includes(`${path.sep}node_modules${path.sep}@nteract`) - ); - } - }, - // Bundling `plotly` with nteract isn't the best option, as this plotly alone is 6mb. - // This will ensure it is in a seprate bundle, hence small files for SSH scenarios. - plotly: { - name: 'plotly', - chunks: 'all', - minChunks: 1, - test(module, _chunks) { - // `module.resource` contains the absolute path of the file on disk. - // Look for `node_modules/monaco...`. - const path = require('path'); - return ( - module.resource && module.resource.includes(`${path.sep}node_modules${path.sep}plotly`) - ); - } - }, - // Monaco is a monster. For SSH again, we pull this into a seprate bundle. - // This is only a solution for SSH. - // Ideal solution would be to dynamically load monaoc `await import`, that way it will benefit UX and SSH. - // This solution doesn't improve UX, as we still need to wait for monaco to load. - monaco: { - name: 'monaco', - chunks: 'all', - minChunks: 1, - test(module, _chunks) { - // `module.resource` contains the absolute path of the file on disk. - // Look for `node_modules/monaco...`. - const path = require('path'); - return ( - module.resource && module.resource.includes(`${path.sep}node_modules${path.sep}monaco`) - ); - } - } - } - }, - chunkIds: 'named' - }, - node: { - fs: 'empty' - }, - plugins: [ - new FixDefaultImportPlugin(), - new CopyWebpackPlugin( - [ - { from: './**/*.png', to: '.' }, - { from: './**/*.svg', to: '.' }, - { from: './**/*.css', to: '.' }, - { from: './**/*theme*.json', to: '.' }, - { - from: path.join(constants.ExtensionRootDir, 'node_modules/requirejs/require.js'), - to: path.join(constants.ExtensionRootDir, 'out', 'datascience-ui', bundleFolder) - }, - ...filesToCopy - ], - { context: 'src' } - ), - new webpack.optimize.LimitChunkCountPlugin({ - maxChunks: 100 - }), - ...getPlugins(isNotebook) - ], - externals: ['log4js'], - resolve: { - // Add '.ts' and '.tsx' as resolvable extensions. - extensions: ['.ts', '.tsx', '.js', '.json', '.svg'] - }, - - module: { - rules: [ - // All files with a '.ts' or '.tsx' extension will be handled by 'awesome-typescript-loader'. - { - test: /\.tsx?$/, - use: { - loader: 'awesome-typescript-loader', - options: { - configFileName, - reportFiles: ['src/datascience-ui/**/*.{ts,tsx}'] - } - } - }, - { - test: /\.svg$/, - use: ['svg-inline-loader'] - }, - { - test: /\.css$/, - use: ['style-loader', 'css-loader'] - }, - { - test: /\.js$/, - include: /node_modules.*remark.*default.*js/, - use: [ - { - loader: path.resolve('./build/webpack/loaders/remarkLoader.js'), - options: {} - } - ] - }, - { - test: /\.json$/, - type: 'javascript/auto', - include: /node_modules.*remark.*/, - use: [ - { - loader: path.resolve('./build/webpack/loaders/jsonloader.js'), - options: {} - } - ] - }, - { - test: /\.(png|woff|woff2|eot|gif|ttf)$/, - use: [ - { - loader: 'url-loader?limit=100000', - options: { esModule: false } - } - ] - }, - { - test: /\.less$/, - use: ['style-loader', 'css-loader', 'less-loader'] - } - ] - } - }; -} - -exports.notebooks = buildConfiguration(true); -exports.viewers = buildConfiguration(false); diff --git a/build/webpack/webpack.datascience-ui.config.js b/build/webpack/webpack.datascience-ui.config.js deleted file mode 100644 index 5edb7cf8166a..000000000000 --- a/build/webpack/webpack.datascience-ui.config.js +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -const builder = require('./webpack.datascience-ui.config.builder'); -module.exports = [builder.notebooks, builder.viewers]; diff --git a/build/webpack/webpack.debugadapter.config.js b/build/webpack/webpack.debugadapter.config.js deleted file mode 100644 index c26664f843dc..000000000000 --- a/build/webpack/webpack.debugadapter.config.js +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; - -const path = require('path'); -const tsconfig_paths_webpack_plugin = require('tsconfig-paths-webpack-plugin'); -const constants = require('../constants'); -const common = require('./common'); -// tslint:disable-next-line:no-var-requires no-require-imports -const configFileName = path.join(constants.ExtensionRootDir, 'tsconfig.extension.json'); -const config = { - mode: 'production', - target: 'node', - entry: { - 'debugger/debugAdapter/main': './src/client/debugger/debugAdapter/main.ts' - }, - devtool: 'source-map', - node: { - __dirname: false - }, - module: { - rules: [ - { - // JupyterServices imports node-fetch. - test: /@jupyterlab[\\\/]services[\\\/].*js$/, - use: [ - { - loader: path.join(__dirname, 'loaders', 'fixNodeFetch.js') - } - ] - }, - { - test: /\.ts$/, - exclude: /node_modules/, - use: [ - { - loader: 'ts-loader' - } - ] - } - ] - }, - externals: ['vscode', 'commonjs'], - plugins: [...common.getDefaultPlugins('debugger')], - resolve: { - extensions: ['.ts', '.js'], - plugins: [new tsconfig_paths_webpack_plugin.TsconfigPathsPlugin({ configFile: configFileName })] - }, - output: { - filename: '[name].js', - path: path.resolve(constants.ExtensionRootDir, 'out', 'client'), - libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../../[resource-path]' - } -}; -// tslint:disable-next-line:no-default-export -exports.default = config; diff --git a/build/webpack/webpack.extension.browser.config.js b/build/webpack/webpack.extension.browser.config.js new file mode 100644 index 000000000000..909cceaf1bea --- /dev/null +++ b/build/webpack/webpack.extension.browser.config.js @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// @ts-check + +'use strict'; + +const path = require('path'); +const webpack = require('webpack'); +const NodePolyfillPlugin = require('node-polyfill-webpack-plugin'); + +const packageRoot = path.resolve(__dirname, '..', '..'); +const outDir = path.resolve(packageRoot, 'dist'); + +/** @type {(env: any, argv: { mode: 'production' | 'development' | 'none' }) => import('webpack').Configuration} */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars +const nodeConfig = (_, { mode }) => ({ + context: packageRoot, + entry: { + extension: './src/client/browser/extension.ts', + }, + target: 'webworker', + output: { + filename: '[name].browser.js', + path: outDir, + libraryTarget: 'commonjs2', + devtoolModuleFilenameTemplate: '../../[resource-path]', + }, + devtool: 'source-map', + // stats: { + // all: false, + // errors: true, + // warnings: true, + // }, + resolve: { + extensions: ['.ts', '.js'], + fallback: { path: require.resolve('path-browserify') }, + }, + plugins: [ + new NodePolyfillPlugin(), + new webpack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + ], + externals: { + vscode: 'commonjs vscode', + + // These dependencies are ignored because we don't use them, and App Insights has try-catch protecting their loading if they don't exist + // See: https://github.com/microsoft/vscode-extension-telemetry/issues/41#issuecomment-598852991 + 'applicationinsights-native-metrics': 'commonjs applicationinsights-native-metrics', + '@opentelemetry/tracing': 'commonjs @opentelemetry/tracing', + }, + module: { + rules: [ + { + test: /\.ts$/, + loader: 'ts-loader', + options: { + configFile: 'tsconfig.browser.json', + }, + }, + { + test: /\.node$/, + loader: 'node-loader', + }, + ], + }, + // optimization: { + // usedExports: true, + // splitChunks: { + // cacheGroups: { + // defaultVendors: { + // name: 'vendor', + // test: /[\\/]node_modules[\\/]/, + // chunks: 'all', + // priority: -10, + // }, + // }, + // }, + // }, +}); + +module.exports = nodeConfig; diff --git a/build/webpack/webpack.extension.config.js b/build/webpack/webpack.extension.config.js index e51eaf12bc89..082ce52a4d32 100644 --- a/build/webpack/webpack.extension.config.js +++ b/build/webpack/webpack.extension.config.js @@ -1,116 +1,90 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. + 'use strict'; -const copyWebpackPlugin = require('copy-webpack-plugin'); -const removeFilesWebpackPlugin = require('remove-files-webpack-plugin'); const path = require('path'); +// eslint-disable-next-line camelcase const tsconfig_paths_webpack_plugin = require('tsconfig-paths-webpack-plugin'); const constants = require('../constants'); const common = require('./common'); -// tslint:disable-next-line:no-var-requires no-require-imports + const configFileName = path.join(constants.ExtensionRootDir, 'tsconfig.extension.json'); -// Some modules will be pre-genearted and stored in out/.. dir and they'll be referenced via NormalModuleReplacementPlugin -// We need to ensure they do not get bundled into the output (as they are large). +// Some modules will be pre-genearted and stored in out/.. dir and they'll be referenced via +// NormalModuleReplacementPlugin. We need to ensure they do not get bundled into the output +// (as they are large). const existingModulesInOutDir = common.getListOfExistingModulesInOutDir(); -// tslint:disable-next-line:no-var-requires no-require-imports -const FileManagerPlugin = require('filemanager-webpack-plugin-fixed'); -// If ENABLE_GATHER variable is defined, don't exclude the python-program-analysis pacakge. -// See externals, below. -const ppaPackageList = process.env.ENABLE_GATHER ? [] : ['@msrvida/python-program-analysis']; const config = { mode: 'production', target: 'node', entry: { - extension: './src/client/extension.ts' + extension: './src/client/extension.ts', + 'shellExec.worker': './src/client/common/process/worker/shellExec.worker.ts', + 'plainExec.worker': './src/client/common/process/worker/plainExec.worker.ts', + 'registryKeys.worker': 'src/client/pythonEnvironments/common/registryKeys.worker.ts', + 'registryValues.worker': 'src/client/pythonEnvironments/common/registryValues.worker.ts', }, devtool: 'source-map', node: { - __dirname: false + __dirname: false, }, module: { rules: [ { - // JupyterServices imports node-fetch. - test: /@jupyterlab[\\\/]services[\\\/].*js$/, + test: /\.ts$/, use: [ { - loader: path.join(__dirname, 'loaders', 'fixNodeFetch.js') - } - ] + loader: path.join(__dirname, 'loaders', 'externalizeDependencies.js'), + }, + ], }, { test: /\.ts$/, + exclude: /node_modules/, use: [ { - loader: path.join(__dirname, 'loaders', 'externalizeDependencies.js') - } - ] + loader: 'ts-loader', + }, + ], }, { - test: /\.ts$/, - exclude: /node_modules/, + test: /\.node$/, use: [ { - loader: 'ts-loader' - } - ] + loader: 'node-loader', + }, + ], }, - { enforce: 'post', test: /unicode-properties[\/\\]index.js$/, loader: 'transform-loader?brfs' }, - { enforce: 'post', test: /fontkit[\/\\]index.js$/, loader: 'transform-loader?brfs' }, - { enforce: 'post', test: /linebreak[\/\\]src[\/\\]linebreaker.js/, loader: 'transform-loader?brfs' } - ] - }, - // Packages listed in externals keeps webpack from trying to package them. - // The ppaPackageList variable is set to non-empty if the build pipeline has been - // authenticated to install @msrvida/python-program-analysis. - externals: ['vscode', 'commonjs', ...ppaPackageList, ...existingModulesInOutDir], - plugins: [ - ...common.getDefaultPlugins('extension'), - // Copy gather spec files into a known location for the webpacked extension - new FileManagerPlugin({ - onEnd: [ - { - copy: [ - { - source: './node_modules/@msrvida/python-program-analysis/dist/es5/specs/*.yaml', - destination: './out/client/gatherSpecs' - } - ] - } - ] - }), - new copyWebpackPlugin([ { - from: './node_modules/pdfkit/js/pdfkit.standalone.js', - to: './node_modules/pdfkit/js/pdfkit.standalone.js' - } - ]), - // ZMQ requires prebuilds to be in our node_modules directory. So recreate the ZMQ structure. - // However we don't webpack to manage this, so it was part of the excluded modules. Delete it from there - // so at runtime we pick up the original structure. - new removeFilesWebpackPlugin({ after: { include: ['./out/client/node_modules/zeromq.js'] } }), - new copyWebpackPlugin([{ from: './node_modules/zeromq/**/*.js' }]), - new copyWebpackPlugin([{ from: './node_modules/zeromq/**/*.node' }]), - new copyWebpackPlugin([{ from: './node_modules/zeromq/**/*.json' }]), - new copyWebpackPlugin([{ from: './node_modules/node-gyp-build/**/*' }]) + test: /\.worker\.js$/, + use: { loader: 'worker-loader' }, + }, + ], + }, + externals: [ + 'vscode', + 'commonjs', + ...existingModulesInOutDir, + // These dependencies are ignored because we don't use them, and App Insights has try-catch protecting their loading if they don't exist + // See: https://github.com/microsoft/vscode-extension-telemetry/issues/41#issuecomment-598852991 + 'applicationinsights-native-metrics', + '@opentelemetry/tracing', + '@azure/opentelemetry-instrumentation-azure-sdk', + '@opentelemetry/instrumentation', + '@azure/functions-core', ], + plugins: [...common.getDefaultPlugins('extension')], resolve: { - alias: { - // Pointing pdfkit to a dummy js file so webpack doesn't fall over. - // Since pdfkit has been externalized (it gets updated with the valid code by copying the pdfkit files - // into the right destination). - pdfkit: path.resolve(__dirname, 'pdfkit.js') - }, extensions: ['.ts', '.js'], - plugins: [new tsconfig_paths_webpack_plugin.TsconfigPathsPlugin({ configFile: configFileName })] + plugins: [new tsconfig_paths_webpack_plugin.TsconfigPathsPlugin({ configFile: configFileName })], + conditionNames: ['import', 'require', 'node'], }, output: { filename: '[name].js', path: path.resolve(constants.ExtensionRootDir, 'out', 'client'), libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../../[resource-path]' - } + devtoolModuleFilenameTemplate: '../../[resource-path]', + }, }; -// tslint:disable-next-line:no-default-export + exports.default = config; diff --git a/build/webpack/webpack.extension.dependencies.config.js b/build/webpack/webpack.extension.dependencies.config.js index 3ef870b67fd3..a90e9135a605 100644 --- a/build/webpack/webpack.extension.dependencies.config.js +++ b/build/webpack/webpack.extension.dependencies.config.js @@ -1,12 +1,13 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. + 'use strict'; -// tslint:disable-next-line: no-require-imports const copyWebpackPlugin = require('copy-webpack-plugin'); const path = require('path'); const constants = require('../constants'); const common = require('./common'); + const entryItems = {}; common.nodeModulesToExternalize.forEach((moduleName) => { entryItems[`node_modules/${moduleName}`] = `./node_modules/${moduleName}`; @@ -18,50 +19,26 @@ const config = { entry: entryItems, devtool: 'source-map', node: { - __dirname: false - }, - module: { - rules: [ - { - // JupyterServices imports node-fetch. - test: /@jupyterlab[\\\/]services[\\\/].*js$/, - use: [ - { - loader: path.join(__dirname, 'loaders', 'fixNodeFetch.js') - } - ] - }, - { enforce: 'post', test: /unicode-properties[\/\\]index.js$/, loader: 'transform-loader?brfs' }, - { enforce: 'post', test: /fontkit[\/\\]index.js$/, loader: 'transform-loader?brfs' }, - { enforce: 'post', test: /linebreak[\/\\]src[\/\\]linebreaker.js/, loader: 'transform-loader?brfs' } - ] + __dirname: false, }, + module: {}, externals: ['vscode', 'commonjs'], plugins: [ ...common.getDefaultPlugins('dependencies'), // vsls requires our package.json to be next to node_modules. It's how they // 'find' the calling extension. - new copyWebpackPlugin([{ from: './package.json', to: '.' }]), - // onigasm requires our onigasm.wasm to be in node_modules - new copyWebpackPlugin([ - { from: './node_modules/onigasm/lib/onigasm.wasm', to: './node_modules/onigasm/lib/onigasm.wasm' } - ]) + // eslint-disable-next-line new-cap + new copyWebpackPlugin({ patterns: [{ from: './package.json', to: '.' }] }), ], resolve: { - alias: { - // Pointing pdfkit to a dummy js file so webpack doesn't fall over. - // Since pdfkit has been externalized (it gets updated with the valid code by copying the pdfkit files - // into the right destination). - pdfkit: path.resolve(__dirname, 'pdfkit.js') - }, - extensions: ['.js'] + extensions: ['.js'], }, output: { filename: '[name].js', path: path.resolve(constants.ExtensionRootDir, 'out', 'client'), libraryTarget: 'commonjs2', - devtoolModuleFilenameTemplate: '../../[resource-path]' - } + devtoolModuleFilenameTemplate: '../../[resource-path]', + }, }; -// tslint:disable-next-line:no-default-export + exports.default = config; diff --git a/cgmanifest.json b/cgmanifest.json new file mode 100644 index 000000000000..57123f566794 --- /dev/null +++ b/cgmanifest.json @@ -0,0 +1,15 @@ +{ + "Registrations": [ + { + "Component": { + "Other": { + "Name": "get-pip", + "Version": "21.3.1", + "DownloadUrl": "https://github.com/pypa/get-pip" + }, + "Type": "other" + }, + "DevelopmentDependency": false + } + ] +} diff --git a/data/.vscode/settings.json b/data/.vscode/settings.json deleted file mode 100644 index 99acc159fcaa..000000000000 --- a/data/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "python.pythonPath": "/usr/bin/python3" -} diff --git a/data/get-pip.py b/data/get-pip.py deleted file mode 100644 index 90d5644ff02e..000000000000 --- a/data/get-pip.py +++ /dev/null @@ -1,21492 +0,0 @@ -#!/usr/bin/env python -# -# Hi There! -# You may be wondering what this giant blob of binary data here is, you might -# even be worried that we're up to something nefarious (good for you for being -# paranoid!). This is a base85 encoding of a zip file, this zip file contains -# an entire copy of pip (version 19.1). -# -# Pip is a thing that installs packages, pip itself is a package that someone -# might want to install, especially if they're looking to run this get-pip.py -# script. Pip has a lot of code to deal with the security of installing -# packages, various edge cases on various platforms, and other such sort of -# "tribal knowledge" that has been encoded in its code base. Because of this -# we basically include an entire copy of pip inside this blob. We do this -# because the alternatives are attempt to implement a "minipip" that probably -# doesn't do things correctly and has weird edge cases, or compress pip itself -# down into a single file. -# -# If you're wondering how this is created, it is using an invoke task located -# in tasks/generate.py called "installer". It can be invoked by using -# ``invoke generate.installer``. - -import os.path -import pkgutil -import shutil -import sys -import struct -import tempfile - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 - -if PY3: - iterbytes = iter -else: - def iterbytes(buf): - return (ord(byte) for byte in buf) - -try: - from base64 import b85decode -except ImportError: - _b85alphabet = (b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - b"abcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~") - - def b85decode(b): - _b85dec = [None] * 256 - for i, c in enumerate(iterbytes(_b85alphabet)): - _b85dec[c] = i - - padding = (-len(b)) % 5 - b = b + b'~' * padding - out = [] - packI = struct.Struct('!I').pack - for i in range(0, len(b), 5): - chunk = b[i:i + 5] - acc = 0 - try: - for c in iterbytes(chunk): - acc = acc * 85 + _b85dec[c] - except TypeError: - for j, c in enumerate(iterbytes(chunk)): - if _b85dec[c] is None: - raise ValueError( - 'bad base85 character at position %d' % (i + j) - ) - raise - try: - out.append(packI(acc)) - except struct.error: - raise ValueError('base85 overflow in hunk starting at byte %d' - % i) - - result = b''.join(out) - if padding: - result = result[:-padding] - return result - - -def bootstrap(tmpdir=None): - # Import pip so we can use it to install pip and maybe setuptools too - import pip._internal - from pip._internal.commands.install import InstallCommand - from pip._internal.req.constructors import install_req_from_line - - # Wrapper to provide default certificate with the lowest priority - class CertInstallCommand(InstallCommand): - def parse_args(self, args): - # If cert isn't specified in config or environment, we provide our - # own certificate through defaults. - # This allows user to specify custom cert anywhere one likes: - # config, environment variable or argv. - if not self.parser.get_default_values().cert: - self.parser.defaults["cert"] = cert_path # calculated below - return super(CertInstallCommand, self).parse_args(args) - - pip._internal.commands_dict["install"] = CertInstallCommand - - implicit_pip = True - implicit_setuptools = True - implicit_wheel = True - - # Check if the user has requested us not to install setuptools - if "--no-setuptools" in sys.argv or os.environ.get("PIP_NO_SETUPTOOLS"): - args = [x for x in sys.argv[1:] if x != "--no-setuptools"] - implicit_setuptools = False - else: - args = sys.argv[1:] - - # Check if the user has requested us not to install wheel - if "--no-wheel" in args or os.environ.get("PIP_NO_WHEEL"): - args = [x for x in args if x != "--no-wheel"] - implicit_wheel = False - - # We only want to implicitly install setuptools and wheel if they don't - # already exist on the target platform. - if implicit_setuptools: - try: - import setuptools # noqa - implicit_setuptools = False - except ImportError: - pass - if implicit_wheel: - try: - import wheel # noqa - implicit_wheel = False - except ImportError: - pass - - # We want to support people passing things like 'pip<8' to get-pip.py which - # will let them install a specific version. However because of the dreaded - # DoubleRequirement error if any of the args look like they might be a - # specific for one of our packages, then we'll turn off the implicit - # install of them. - for arg in args: - try: - req = install_req_from_line(arg) - except Exception: - continue - - if implicit_pip and req.name == "pip": - implicit_pip = False - elif implicit_setuptools and req.name == "setuptools": - implicit_setuptools = False - elif implicit_wheel and req.name == "wheel": - implicit_wheel = False - - # Add any implicit installations to the end of our args - if implicit_pip: - args += ["pip"] - if implicit_setuptools: - args += ["setuptools"] - if implicit_wheel: - args += ["wheel"] - - # Add our default arguments - args = ["install", "--upgrade", "--force-reinstall"] + args - - delete_tmpdir = False - try: - # Create a temporary directory to act as a working directory if we were - # not given one. - if tmpdir is None: - tmpdir = tempfile.mkdtemp() - delete_tmpdir = True - - # We need to extract the SSL certificates from requests so that they - # can be passed to --cert - cert_path = os.path.join(tmpdir, "cacert.pem") - with open(cert_path, "wb") as cert: - cert.write(pkgutil.get_data("pip._vendor.certifi", "cacert.pem")) - - # Execute the included pip and use it to install the latest pip and - # setuptools from PyPI - sys.exit(pip._internal.main(args)) - finally: - # Remove our temporary directory - if delete_tmpdir and tmpdir: - shutil.rmtree(tmpdir, ignore_errors=True) - - -def main(): - tmpdir = None - try: - # Create a temporary working directory - tmpdir = tempfile.mkdtemp() - - # Unpack the zipfile into the temporary directory - pip_zip = os.path.join(tmpdir, "pip.zip") - with open(pip_zip, "wb") as fp: - fp.write(b85decode(DATA.replace(b"\n", b""))) - - # Add the zipfile to sys.path so that we can import it - sys.path.insert(0, pip_zip) - - # Run the bootstrap - bootstrap(tmpdir=tmpdir) - finally: - # Clean up our temporary working directory - if tmpdir: - shutil.rmtree(tmpdir, ignore_errors=True) - - -DATA = b""" -P)h>@6aWAK2mmD%m`<4gN^}MtBUtcb8d5e!POD!tS%+HIDSFlx3GPKk -)RN?{vP)h>@6aWAK2mmD%m`-N@Pvb`c003_S000jF003}la4%n9ZDDC{Utcb8d0kO4Zo@DP-1Q0q8SE -6P(>Xwfj$MoHf@(`KQCU(&8g71HO0ki&o<#cYNZz>|C(zo>JZGyl;FMx!FrO6t%vRrOrPh9=?L}8oY6 -ou)77Hd@$a4r7F5rryfn~JTAHWO)@Mv!(a4fto86JiEF(QHSJ}y)-GntEpbmcJyNSL0Vx@Gi7c>xAuL -EgIxovfWq|0NvR`+SC`IVq5DSMEVyuc5y>N3AD=LF+DESFFQK3yL&bIL-tGT-b6~%(tWCE -QA8qFLP)h ->@6aWAK2mmD%m`<{zTe%hm001@%000>P003}la4%nJZggdGZeeUMUtei%X>?y-E^v93R&8(FHW2=X;*U%xw2l%3W6Py<0o>h8I>=Z-x4>3Qeu^QF|!Q -E#E$`?b;8%9;(7<*M_Y#j*ssX^r(Dmd>coV;T2Z)}Jd=35ADU(@5Q2r#EE2I)jML=NjONY)o=yYXtEu$-H-Gm-+BOZ^V00~A@_@kKt#R;YX;F~+>#O^V-@pfx`4TJ9IRvvJI8Va8$ENdb=f@y)O)kTy&U -t8+keW`k*)triwXqw@TIWQ=kz7M~CAHT>NbjTlEYY)AN#)U|Z9b9>#fqZ|RKjCp?0)`@@)+QZGV(<*pWow<6RAI8<%7GiZm__ -Ldg`4O+Qpu7fWi`gXwe$yB+-oXAT^C-o>eO(u)G`>R`0FaN!ISX|%Tmbd@B{p;!heuwGfY&xCN-zpmA-{5oleV1B&e-FWh`ubGg0izE% -KZO)wlw#YA$T!=C?FodnQsl@e#K*pC0%ZPUoT5Xu16`yZo4?Mm2gR8?r;Ukv%TPaPRYIpgHc4htJxYu -31A&PNe&h4w2e)^%_UDMfHx;k#%rzESxFX0 -R}T+&50~)Fjo=x}j=wK!TtU+k9kx$}@KO4FHcr{QMdYUqkGc4oVwSXF^3yn{;cse6L;km*aWLjY?u`B -1>(cZ-(H2Eg3N2sONIU#CQ@u5ZKCbfq;O15N=grLo&d;ADssDON)B))X1`r}2Jv~}VIMtf&o5~8eW>) -o|`KIcquJn2mN`9rQZ=1QY-O00;mj6qrs-OWq+R2><}#8~^|s0001RX>c!JX ->N37a&BR4FJg6RY-C?$Zgwtkd7T+uZ`(NX-M@mHK1jk!!gU{w^8(#8-4@qNf;PQHVHkoU(GEAVs3R#m -z9RqqW=K&YB{}V`Uu;qH#rdA`#l^*MEvrg$RUeq(^`6#>w33!&%LQSQSGi)mCS@yFy(6+@QjvSafXBt -f#l>R5_6-+`RD8F?v+j{g`%9kspNc-IqsW`ZR`5M3cvaB?$xG4!+=!A2TE1n4GBC)mRjiUJkSTb*Wjh -PIqbh4o>Vel;#qJIGJW#G4{cL^jb5Gf{qaP -bJ2{7ltA&thiTmQ^&%NG|a>t9YSx=P+iqqN2{L)Ld!LWMQ$3ys9$U-Zz4SH1a%>qWdN*nXrg=@cb4eE -)*B17tl@(8n8q9_t)F6+2#AI%YS8`zFc2_xc>b-X3H!VZ)lxKpi@%;cHhpBSuO~CG%cUwUE5SNCZM^P -d;t3SJwDzvsG+=y$wx5sfa}Y_>XJTLLbrMGnD6L2JOnAw?WiCt>whU&{G&b#v#iedV326BSQJ$*CCP3 -D-Lj|ULUStV7L3Mfrm`%QwA#i5T_rMiz|SkZ1YMF)DiM+7S8~m3+P_7V6fuB1e)%sXRc!-r-sP1X;oP -%YTW~eFXV^pFC#Y3GK)+n3cm=XrnIj6MNYHS}p0Y+?C5S!5LoVd%TX3IC8Z5O?F~CC%J15UQMzjuOAy -}hiuyO8u%@y1k>4ReX01TYqQXC~G>VZ0F5QHKZC(T0=$;s{M_5>*e;#{D6Rwp9c25m^ow8v{&K>^e1q -L1egr3PoC1>3S>rL`CnbLo{f(?9|se}KfDXwOjqRrhkNEWM?tS#3BtMZ-y8weAoG#i4P23@5fMHoa%+ -B<$qikl+6aI_rE9^6aIcxq>v6*CpBKHADdZ?lLr_YwF~0Fb}Jxf{bEPHF$a>Euk~MKj-ylTt4el(8|v -~A>_t#b)k7CAkam01~D!4ZNg|V0x;I0s4S-xgno2{7!$D#<`9Aet(pGGSsjk}mi0tgmf4mhCOyv@QPfvQt>_eA0?703f|_rP6D1N!Ocn9Kw`v-2!0BW5R)9t= -|MJlMex_Wz>O{XXrL2(aS-b`elYMQJ3GmYgjKpOBRsqLIjJnN;Ne!vxk76@28w7{%c5>WJWlH -x}Qgmfr52$^nE7|5IXR3R?St9NT0w1Z$$f5 -N*$*im8@KaxYz1&RTA8UTBP02<`s={ajqr(_UfzN$&o%Sd3yqrMe2j8Z7S>iX^$5`CqwQ_z>8FoBesb -<+sV#Ke4=kCz!qe90RD=eDP(v;?$p4YRS^-Gui1a%h8bW1bW(@|n>(JN^}VR{97X^hQ@05cBwnL=+=# -ssX0oe=a*rYJHx<8`l0lEn77Pm?-JcHO_*AlZ-SRW>i5^(g2mD8vokeQd@b_Q0tX#}OK(TP&PVog6P; -xeqb1qOSZxW2>rZL@2iU(@vyIJo$kF#9@;2v3@Vn>|OJNy?@snVAt|e!M}ZT_a4jr?bo~aH`muUUp`- -b`uySUYBf;$1bPqT5KUw*;Gu~)GTS^b|$7G*~s!U_GS -Qcl+`vR_F%qBjetusFfk=S`$Iee9qVpMg4e+;&^fBT&<^cq-!q<^@r*td88%Pm*8%57eRS{m4B8pSAm -aw8I^8Pi0Pt*)f^zoILHT;`4AS99?MKrHbF|p-ChXZwy>2=b`1tD%cY}GxG9K<AD>ZFVp6F_Tx}_y>SOQVcg1L8{1nA{@yu{@9|!|3}S5cRw*8w-`_S3dBzsLcgunx@kv&<&BR(Nw)2i!uo5_6uh8)BCFt#eS)UW6pRI@#4)htTEHT3k*4F| -FAouPcT&|vl+C_90U#K$I#uV;AAR8Sa;3mOKQ)_Cwzqz7@(jhT8i7+M+Os^5 -ZTjVUa6j@+;Z-F9N@&2ZL=O3rAo6LB3R45XM~Kt|e3(=i~4JnJ^j^$gbQ@CDB+3Ub?mB0|&% --IbhlOHq8$`FDuqEi^x=132U060enqnG11okVU%nptw#zcRuu_3HIScjn77`g0~kCb0!wb>G9^4A=ao -nJje22g7Rj4W!S6H+p%I=vF`nk6z`XRmPYW@B5qF2Bi6cF>3<$S9@-sz?r7i2b!(QhNCUQew8)3I<|G -vAuMtxDgJBmVGr#fg46O!2ri&i`#(@i0|XQR000O8B@~!Wn_6G(90>pb=p6t6761SMaA|NaUukZ1WpZ -v|Y%gPBV`ybAaCya8ZI9bF68^rwf^a^pba0ejkjn=HF3_f%Hn?Pa$fgL2#X_JZ+EyZyI#OE44f@~jnW -0`N*-p|nhx)@}MRDF|o|(~XHhU(strD-KmK(KGy1tmrW)~O5t}?b3%35u@hplwmvRHMGrP*u>z3Co}y -SP|evlCTOCF#A=xv@zlv-gs2B~4wFPPBJ3sf{i&Sr)&kRLh+TNef*ot7VzwX0J;l^Ny;L^){_d+Su~c -^_|I8>5{V0?>mZ@`2W;ZRwl{J4lKL7>O&=U-Z*8?Q`Bl#rFmgHnm2g`=i49nq^_|MP4 -5?5C?||4v{3a((^c`o~k0`>j%CNAg17!&muRI(uG}id;4q{D@GkPq18E2>h7uSo+UZT^IELbM>Jkes1he*3XQtt$}390AX&>Lr5x5YjV~@PvQj!HIL{)pdIxXCUOi;mcU -s7mtF6qC6@2fZsI0j!a^;XFl$v?#-~uOWV?{1&={2QLBkPzK{T7w9a_7k?ObhV_^wt<;=UUYGpI;?Yf -;F3!X5Ov^+#$T4L^iUy)v-2^y({XT5&c$$maODTk-x1%=K27f6)elr>{Xt61>8dHw?(#X^>HM9jcB`p -gK%5Zl(}&5N5GDL(IqQzxD-fZap_EBGld7MnB3^{(8&|XrbfBA3xfAxuGS(&;EOsNnYz3U#@ -;x(`vD2`5~`SRMz4R^hPAC*rpE~EO9E7OqS#sxJ8wY+~3;ahTU0s~U=04}E;-@%zkNxns0l)+IHPG~? -AWhM*lUx#lNqayExCbFu~Vx!q|#?Fs!$IRygx4SqVDNTM}irIsfuxA;EF}l(j+9^i?7dSQ?T(^~vA3v -dZT$ZKqE-zf@Z-^8Q;8;o<@N+6_Y*8Nw+)?K>;Ut1h?Edw1E>`d_^OuBh7QF{=Ygs~py285%{s~ie+c -*JWbe^w@6Y&!&=bp&8W31Q8DxE=y593b0hmX;x2+{*a!%c22WGs1mPx6BEy&66qI;RM6E{?# -SV+&IN7QXd9hKhj^Z;}uko@~bZBkPASLj!vamyQ#!?%RIMdv|Ocih|aj6{9?@3=uT%Yi^(d0a$bj@mX -6Z}Y6!0q|XU}&Gy-s0QEmK(GP>?P-@- -}FGCAq(8BmK)ENY%C>{@kup=535S7)WhZuWwBh=>9d(yc-jKdNiNgvm4>y+ETPyHP1B`uE!<7niVo^W -U`Ct4YeVdkf{o@?ah_7C}SWH7MC##ScJ2L7a9WpkNjV9b^Y_z^_#iqpWgiN;`Q%i(y>LOQ&~7QB>1siU)Xw)& -SA5B?S;v{Y7dN+H1qkMm=8^iV2h!C)NMx!qL0)sc2&vioyyrq9X7RUf2CRss-ic;5$@7X1`}kcK82*9 -y$d0AbKjizq^@o0a1fvp=A`_uTFOD;==3l&vb;Y%Z#JwwHujGsH@(B%aB|{o4y7L{hr2ugEg(4#n4T7G4-3+x`A?N`r4sYW6%Bb`^1;659gMKsrE8tRv)CWQ1q|14)$28C`)1kBhXH6Sca6>ujIgg=u&;l-TP1 -#QSgPwbOR~qx4Mw4b3NIaWuf%Y)y`nKIVkspc|2M`fvLF};57QC1r{D5ASFs@jYN???8fR~<^ZgwjiA -+pBnG)(9Sp4=g9wF=nsFxg6M@7p15sJCIc`fsBWag}TmkvwWaFI*RL^PAGV_;eXgBK@Qo?Ed7lRa0Oq -mz~-~^G)(ik|gvJCPG`fQuF0D#?l9lXX#lRb_m1OGLM2E*22!mpG(ZLbuLRSrzelcSF -zls^7D2!n9@9fb3P4e?(bc!=K@80lO0aY~&=+HOE(v^%|Vdc+GV;)avEO;n0ayM8fn9xseTzaKDiJhf -q!_S~>k|07&q{%;L!7+h&M4kjD#Md;FQb$aBPe%k${DqM}zsfT_(@Js)#FB-(eqnqvgbLunUF-t0#LN -{vkq8<2HKmt^y&wVP7;$!j$;(N|yhMRtY!pwZY=Bpn`n{6MdI{PxQgMYe(HX5mr^5@4CWma)E74;=RW{-kU^pzFuXY%3m -@Y%ll`DXgLKFW^hKW{I`U$!H_eZHJ2GWj6~;UQ}{i_b7fylvqE>^t?uYoBh^6P^SGQ&Ug1=|4USO_gs -M48cA>7`?T!I!Xpc`J=RZAvhk)jax -JZZM0lj_`L7FC#_9G?Z`u~WBo#Mu`aBu|F$XaYs_!mH}G(N8%Nn=NcVBzXzo34+k_80zvnYWgDLITog -qi)6&Q4O_ZW%yntxp-0&jeg5?{YPLmf1~ek_@IV>W -aCyyIdvDt~693NQke{e28$?n5 -b8h=QVP{l+0I|V7sD9St?XgNg%UgyS1o*^|dgp**(IFr^Fm9xvW@%OE0TpGYW!WG?JULsA`rK3C~3PZ -M6cD_G_U=Bb>oXSw``l$kU>Vl>8KJiaVj08KqY(d8I_Ip -lCCHW2R=t3&^ekpeE_a%INODf^nguUOEnV`Aj5&e0`cUliuq*ONZbR2bmW{=qQ8W>pfJf-=sWuC$$vs -4)1_W(p%SFixu7|}Gw7Og~mLGQviMzfD&7&UstF5kXCo3b~2emc6-%ayZIuWX -iu_JiMNUXkRD=p+ONjmwnHl{7Bi+F+$5AE9j3**IiBBf%T=^-=n3T>+&uFu}h0#I%R#LV-EeL$nSE=3}jGNEy=F5Z6s>|z#Zch+OU==PwQ4f -|21+Ip|g-=EC_bX=F({G+VuEzcJ0%+Zxc{_OJOEC5Zm({Lhr*wy(}{QT|Z%kx+9%kzsfJ3RjQ>>W)3g -eBh1aCeE12;CrRH9{#R8HnD8x3IYR72w`z01V~_a3C1(MyIYoBkiGARdEN~R*Yjz0vBI`J)tk~BmoOW -Pykw*5PtC^gNa>4>HS(NrkR65cLGcg?5U;x?CKnJ$ZJ-ETPPOT0EN*7%^?8S*&FzPcZ$|kbx{e@y$+A -PuqbPI#e$Z|Hcvt6Fo6i!aA;QxTxNL&ex%qE+>Hb0!V>`nLx|G2^i2UP;Rj0&S+h&nrO`CefxzbOfIE -q!nBZ!U($tE;r8dkE9grl^GqhRCYp(YX#E@A903{PJe~SwAf&38yf~?~hf_}D~z~~}F2|<8@NEf4L&n -}BxH~`Ri=}l1pa3ijgv*NI3klL1jGM=RY_QDe5s9DhfJw7pLNTzYKCOGJvJT*e^oM^|6vl(B7e=;{u*lnpmJ|VLppb@LF-?C1~ha&A}}_j9Cr1xas?q-#DJR=kuey|17Jm=kAp -teA}a%Lli!PkWANW$a2F-3E1uk%>#wPk7F_DHw?~s%PuYAy#$>*u*$&C5nfs;H4Q -5!R7oA+qDUrgUIq9ZQi^ZbDmMJ3+a`pMkAHWrTBz_Qj270w}fItSk*@;K -tW9ARToS#f)3y-VXKp9xpX>PA_sD_{c!986vC3{qdp)xG@RuC6e?vA6L$**mjYl3LL305(zy_P=b91 -y8n*_yL(sZoU3C#$r-fQ>C>Cu=C>S!XeK?-~t=+UP1lc*n`cH)PgVe}W8eu~=w^7F>Y)c&1SbckUr0r -M5ie(bA{S^Ep(kqP_h5|?ja@;&AC!@l%A$GquJh32cG=OSvSMV)~m@z2;FgLVIo0G$)-1S}w$f9gGq; -jyEpG1S~9am$^?;P0aDetw|52@}@C=V_RNJx@3ZVjTe6O?hUjwn=L6cfF-0}>$}4`Rz3GQCDLLy6n4V -6*^C0l(&VqRj-{jA@CnYr;xf93M0PkqbX&hU1o9{7H1SW(vJt!GJvp>I>sVM8^%AP1(N -Uvm|krEULd>@$Xs8O+nPH+VEK4)hs%`?1>W<^-C{xer|nvON%i?XI~qHoUrxfoB`PLQf%%O>Of5t2*X -jT}%3a1pYij0yUspm}L2wIQ~d)`~NfHcLE!VBwS?N$k}uh-Jwm!qKb{E*9g!v_7Z9=(KYX{GHv8QM+e -9%v0>r#n%E8s)ruHQvBLw~?#&-$%W$Bl#+sP#5gj=I*L^}m%#vs=OS-#AYfYL$cf--Db`-@oWxekaF# -}_WNT`1N6B>qXz}3R)*FL@IVIOc3Y)*+!jpGyfJ_Qp=uIr+t(2YZnk!%x!j=1n=u*AL<+Q-*H54Hxx@ -(_IS_5!xoU;E*eEk40ZC|xp0i*$FG2^`AiGMznLMC>XPT%o?H#|y^D+0Awp1wB&Eeo~R$kFHMa1%&## -^!=I}e@(VkC8$0*-GG#lVk6Z9s0JOoC5tb5-CB-hzAVDv$4cr9u3(Q96qm~ZmwUv{h#5! -#D=-RVUwneHM@7Dpo0fi9sHo)iI)cyCQ`S^FWGRs^N|9U333kC4Rku7CR`Gxds2M_!Oi%Wzl6N3YRu$ -VCD|_=}+d&$Z<-=7emjg9J-=B^I94I5Ga4S{-Amqxxo9S@d=amMsSHN1Jxf(}U|PD|oMbq^-Mhmc~+nonTd)iCI6&_pJNji&3Mb-<8T@`l&+jF^&t=*b6b$G28ro4%>AWt?O$ -~FoBV!&7M(;itmdZmS0MckW*cQ5?ubyCWcm2ZtTS>rpE$1IMpKQV2@6jis}mMBjlIWeY@^Y{Io|I-{l -p0$&FrMI=AcUMQ${1aV;2XU-fW8!+C_C0t8ZeYMSfD#VIEM -dgjSw}H`|&e@Vyqzp`Iqyv_bYezMmkPu8XWaor|2IFA5#mVNpqjzT9S51m*dl -Mza=1I9P`IAzXPoz>?p`LvE-9P^Rkn(2es?IP%0{5!OX8{5kmv~{voa=r5!jd%y0D}0ej-TD(qi-(Z? -Gb(bp@M`chb@DiLTU*NIHk}UUr(ouec86;phh?fo?0X -E6O)D6KBniOx7Hj~{nn3zj7DNI3KX{ePo7b-Cw2r$@&<=8}pl2;#eb|I2dxM8foUKHT9WL0oz77gGh$ -B9b00*q}zV2_ch9Oj`m5#o{oP;M%zXO -I@sXZb?@d=*Mr-eD>Y>^sXmj`-~jIELc*b5!}Xi9i;F3HW83IW4*@7_Yn{-;Qp;^ll-wH@gILYhw!w! -QaE_yg>T57C$0)&_!jn#QdZI529V)XAA14@VXfK+~ooUY5WUmX`pXgmH;kt0V;reO`?H2Myb6@zt$(c -*j-i^t?IKqKj#$$K2QdFmS$+2S~*eY)Wp>_?5$~d;YAkw?EK(>Z&eYbW6iX%E%rt`BK4IPafV8IuxzI -UXrP`h{GQHQ3h1bG;{(I=9**tvrasz_fhnm^!Xwx`CW%mGpN>`q_t1QYD}U;#$t!@+yDpX%-n -s={#FFJvucRY3!PmbK4af=Xpa|r -`Wy@UvY6sk*dNdKevjoVF7O>Z;`rvFM;x9B+zCUm(7ZYWsxZfX;ylq;<)ua$UhmnCnKQ**iL_6OVy~cQ2EEPSl7#CKKZ)SJf5c0g`Ac}QHi{ -MN`letwJfLCGk9&9zJl+kbzSxhU}g}fjDiLKU8hybS&OURh5P6nXm<-ntDA&9&>;Ii8JU_sJzK< -33+f-~EDBwoL{I6V}9`Qg>Ow3-B!MFQQza5L)M -Lq>0DS*a*w~LLqg_W8YWi3UskklKyHH+M!(#06~4JdZw=J|28tgC44MOkg-C9?pPeUf|N7?b>Fe|JS5_E6C$D#2023DJGL|2wvTAZ*2-Evzsun-wYLzz -A#aO_iH|Y{~IW%cAzXbw2B@JNQ);WkH;6w@kt -Qz%qcny8?hW1^8*y28fwPHB*PJV1a;1(4OO$#*M8*QH#(2meEbGv}=&+}SNo3h^Q=(ef6#rol|Z~qGN -==9`I$-DQjU!T4HetXY#ZhAe36qPAeI#Tf0JkZi*Pfwd7#up{2U1ESme0^U>ek%QLD+{?VUwrT`EZ)?ueUce5N!F~kQyQPOWS=0{F#{lw5(EP{@>hQ^vdEPA6lNfqFsWw&m1a{$*Tq#h>Pk!^w?|!#;a+aLF{_*VHo -7X>}!S&)5zJakH>cOG-G(gng!vNNBFct%CQos|^JI2IFlFv?d4yp~%joN5;Fy<$wbu{uCgHBpX6b(d0 -9Mc!V!XVHF6?XF>YD_-wvC5m#6ffK3TwOBcD{*uL{Qs7q4i7DqZJi7Opx^fC5fs?g_Zk}n)y5kbIsv- -^$ZBJ$i);q&6be@O=SD86BXD85^m^i7ryHQz3-0pp>nqz6Y!dl}a2`akK|F|mD)S-=#<~QajXsWOCw# -6&G`Y_V|vAwFGBuebiNbx<$YW2Uc+-I=qJKXj^gqPU?v~s2u?C!czw;-yb0cf7}$HB-UvMnY9en -(S#i%nl?Z4_Vty19wKiUK1vT-s&2nq;Z?cql$zKD`ReEAew)MVd06V1bW$Hn -{{g0Sm>1fB3uB1j|w1RoV#sf0&THLxOaTw5YQ#!kx8;!zoVkH~UV(EI>L<4RD;6HsHx&6@v(FLyM-~*uR9^n8MOm_s -B-2zOq_6V1QX|)c4*p?QE_LbT_%L=SZwM_hd3*TeyHYGovzQZ^GgMpc>s|HLgW!gjQUe_LGYTFJ*mNU -BjJ)f5>dC3{v4pV1dukLPFakNAp?{9-eiDR^fF~-YRXKW3 -P!M<7HhqBN1#H8pas$=zlDi;CE^;c>&Jlbh$>`9n2mD>koa7m#Q372oT>HFXAR$u0ynoQiI`Ffb}W`i -xq|f=E$*CNl3CEgp(mtRDe$o$g;B*?|B@O6Y(x;0G4-5X;QS>sm4BJ&uI(HnS|&?MuWF!Zf5-aA&;HX^+2w>{r79ekp;*6_Q!#Qk{n`AO%w=7g)y;u9Vad>+JX|3<;6NBEDEm)P< -M|B18ps!|cX1^%j1Sc$S$N6}!6a^`R_LMOIvl54q9M@U00boq%53s!X^KzBug$;j4CM*v7m6r -lcBS|0Nnd&jmjZhiB))dY~cE$a-m;iu0IEXIh?z8Twa%$ -1Mhlwu_s$6Ef~LyTg?8LpWZGsgHXeTbkje$j%5XL61qJZ92bW@!Awrqn?#c*xPd*mls-KO7(-#xRq>- -QOE2j2NkyzlCE<9vOfcx8H=Vo6^2P1y!ywu)pzfv~cvSdS;E07o0a^aC!LjO8itY17kybAC_ -VTGe9;4~noPZ-+LAR-niNDeeU>1=>OS_nuO+zr4&9(95xr~PV(86o?OIXKoqq`fq9HIZ4Sk2f@lU}GD -c3KX)8xNkTZlyKXJTYf9Toh9}$`yQ4KvC^zUhcg-t)#M;+*()cM0L#@bT-fF?1NS264u7;(a}OL>-#H -@>3ZUVABN6Mb!d@@Fu-pb(h#s(VV-AgMYkyWj>yQ&JnF~C6CdN5l`@y)?g)Sq-181Beg&cQ$g?!g|>z%&|+dHUQxf -&Sh&TD3rTC+}QCEAdn{7GHgJeVf*E6-ebj<7wRzqy$DQ(+LWV0KqZtYM>JcWm<7y*4wloVe`}4qZ*zF -B1M3vb-A7|h~DY6S*J@2%x4gMhSqemRtcUUiC-Pzz=y46(34ZuUWhYdODC6;rPM)8P!}!&0|t^pZ*F5 -?u%PVXfj~m#a}N~m)EO|hw$gap!jL0ug}l9k`|aB!;m$4dqFRIP^4r3PWDu4ElrqI(HsgHdz%jyS`QjNtkYZL`QV|94HEDG$602E-A-9gwfj=y3*-{w!+=H)kvAYLi -li)B0!NEegMJ%Bc$Od_K+{l1Qyd(}B10+ZNuo}-7$hNDl -GxBq4j4SsVPJNQ=s7G?~i4~C$L`pP7nM$XAV{zgcCVVQw!|^^2&&Jw+{#t4YqYd^~CD^zx&UKzkUQ0`+c6}<}V>Sm$kmUrqHg~;T&%S@VaW6uW`=F*0bn5%o#!n{!$(^t0hfTPbvq`sU!9ZWE9K@Cv%`hybt3ET -841O}uO|?eBpLCnG``hD%nsI%DMA`KnQ9?O5M=pOXo@1<&9=rKo9$b-xz+8kU)e;=NL3aWRn -P!+)b<~%M6n*Nj>fnS?*uQ|W28RJgUBLU3!8p!S%BVJV0_5Z -0DR$kG8lE+PM4*UMuMRzrw2VomoI{-4Q;Mq7bs=-=y^JmHt{X8pIS#u$AYroz*a>+3LDtGD^Ni*X|%4 -qkp&-QQ{ELwIoaqVF%Y0)m2LPcbLhW9>Dens)w%*f6U>Pf$0)Wi+Pw -p%O#vR54Di&NObs3RadSZS0mek*6ZH)f!@l-l;i2kAsra@2%{#+^VCxY&co!|BLT7s&uQd|X%zvRqLnfrCYUEfIlF= -I3BRY8B&#)JAPP&5G7Dwv!m`)K}e|cM&Yi5EK>iQ4X@SL!S0r2VH115xqQoVyZnfo}G>QX%b|yc+1vY -4=it?WWCBM{;3Ec&6}ensfQr3Ko6jBDab)o>#Q7$O}WPH#EuU>8Y;2>Qp}d=JRWqVR7mLXeUES25N|v -3!HysgAO6?Vr^#`)?DlbN77@O}jf~NfyY?`#=dJW352-_C%>3xqMJ>wpG9z&UOT1rJ0oS$g=?zM-BO?s(WM2?Y+ -`6kKC)2Pz)w>;!kDv}UzZkwmvoxXT98bi+msR`WWk#uXvG@FEV}wPU3B&Ti@tr)IpO!;a^3aR{(tFPO -Rp_Tw8%k^O0UEr@;>{nAG&V|J9L^;&^4!13FGLokLS?~Tg226utqOncyjvgB6%`Tz(Z-WraZwdO8@31II$_5AmKi>cSn;tw{6P^7*@jVp%XzloLr -mH6r&%GrjHqVj}1eszn0+B(lDlm;vFo>M$qXe?m~8U$O7g79VQEwU@oerT!CBY0b9UZI>e#Cx?bA2hX -aD4qSmf6M`}&kq)VN3i&mrQPS#_Jb}o>FvT)5Fh8^F6g;F)#uLSi-!y32Ezhm*6gRfcU@Tm}{(^6{ul -tj}?riF5@(F^c@;pzS##2X4}w&jNlZ_dF2r)>3lUFpIeI-0*t!T$9}g%`jKvQC#RU?2+}9#|NGiT_v@ -gxSCFja(}Np-NbVA*|QD6e;o@3cVJznisi=dkAnq*0o8M?tljjk5}o>FsbveyS<+spd<2|XWxqbJHeb -R%XRhwRDc3%14)g(->(qM)>&8w^!Yz%a9gol_I0AN^lC1X)u!+{)Z2;xkVRdmV$Q4Y+z -h;7Oku^-dt6UE^ENCRO_t7oYy3H(35CkXAgL=Sc}CLEb -~k@Q!M@BfVqk}S2*xMb7j+ht%AHsmw84s_aJiuxs{j>x(ANO8IzK`di5-l6%b*8xz$x8y?`Zr`MGw!-a$`(ioVien2MKf?*LrD#29!0OF5bw -IlNQKAImf+m4`Isx;gcug{kvD-zAF#ft;8*+D8IlI1_;!#CbeLAgKJ)2bI~GI4dSR+OGA6#2L{7=%U* -N{)@M@fCLAe15&+S_phssYKIGBX=G?lCNw6@dWC&7R5T_2>O!b1(4FFv0IAF9*Cg2*Nd0*_CMMaZU6N -6T!*f`n6s@WHxkH99AE7C8FzoRYorbWt&mf6&E_}3!er_WDp$`f`OZ6y$zgc?6>5pp$wHf(o!L&s!Yf -M>~*7CNiZ8l)xV`M0bcZSVO>kh;A&Hq&1Nia*a)g@v8rsd)Qr&vS;lW}=zo>p;g?2qyM2)8)QWd2c -=@T72H~-|urfE?wl{LZP+m-j#VRuETTvVvX=~q~ycV(i=-^)h3P5NM#>Y5O<-{a0lbxrOiKH-2oaWIO -2vB^B7ErL&CQ+=UCWGY|B1~QhF=+gwMZ7Om+mx*}|4lx66g%mrqT!*5W&Zy9OfH$$<(oqUJu%!jup{8 -|SnbIh&YA{(`1${M9d89LA)M5!&Ud5TNr;Hs1!!i-_td&V64PELw&0)9V$qMbi2~iVk{|(r?XfB_vZ+IWF17Mb1*k2aKH>8ii@K`l=_sZ$v -M9*tj!avsu~^C>nE{UW9V-(5+-pASk(!ON$=<|EbP-=)Yib^(u!XTz>_iq0UwR{KXxG=X3Z3TUzd&S$Adw7>kRYTiWa;ySS+!Op^7 -@>;FDr(vcraYBwn2T<%iQluwIaOjD$)_VI;Sh|x^rw(Wo>@2pBW{oU8vSSn%#voNde0Ojzv(~bzSrIvo=}L8PJ1d@1VT}Zay%${j5!7of -FF4x#+$mJpX9cjLdiY-v?(=_;mGBRQKf(nx;x&OA> -Y7_NIPAu=X6E4gOlLDYQyyiZnxpj#e;+I7(|ifMI|{eO!+)7tUpvBx9R{P4_wAgQO>WkE!eW>629Mi* -|zkgyNeN0Gg&jb=mQB3fh%i_foujaUy~d7BqsK -O1%f`Z|>V{`HBTUjGd+s6z!xOV&0*LY3j=_&hUN96BXji~e9Mkf3Ll_O3c$Rdb(hzMa7dE#hs<>bk<8-ca;%f=+2 -B?LARs-r!mhEYf-zH^UfJ0D#hWnhQ_5KcS!MK=sBNx9MnT_{@@}Ets8v^zV -b{m6S#-bcLg>)A@k?K5%)FA5ui$Ug!acqOqX^tc59)fR8*bm=%HG1Hjk}>1>84MmO>m-ggj<# -2@S>J7=$7yzw0SMR{u(00wg=Dj6#tCim_W%;^sz`sP4hYsr`-)+5Fgm_`_soM=8Lg -jb_Gq0=!mO{LGDQZP=}6Tw!oplvBsLpc#&?pmq7K5TwwqN83 -P@vn>!T1}^skd4cm7T>Y?GueJa%)AgHLvrQLP8f;`Y45jCRmI~jhG=asrPUkvxlYEtOI$hV=BisUj=P -%MMLyO3yL!X+9_E?JOu+tV08JYTYjJKfrX+u@MV5%%;`FssVRySpC -neniMp$a)=BR>C^$^}t>Y7IVeCe0|w&8FuU??yN*o(aD!EwWPut@KkK!@ac1C&kcjFxPlqD$rEC(z*`Iv_G&MN#W@$7bE)l{d6?Sf_{0DTgNgf` -sJX&RJTuiNyy%n}i-K9@jsa3)COK?G0~|*%#BDrwk;-yEAszdPV=O`_u-1NbS3r58ZUfUmZSdAXwXgm -NBp}JPV@F{&v^Q_?F0Fa8Db)ve=`bXJf0Uinw=*+b;2pd?R>g+1ZZ2Rr>MBx4?qqj(*b&|Fi*$H|<0N -gCOqS$4W$x)o7p(IK5j}qhOd_Nf0}LGhFW`sb0G^0Pvp9&@{>05d5LJR159$u8ovrr}s -{5P`RiZUmU}hJa;lZKEAL5Za8+YVBTA-AYI4Ht@o8?%#Z-eJw`|{vLA?3MmBD7)(2p=_97TiMOw@b|I -%_wc%itJ3e;j!k#aW4Sf&5`ktn>7iXhrSqLRI;O%5hW4=K+>c9(o#>7=Zip?Dks@-Hs#!3;VMb36dJ#eXLFPdW_GC>_d20@}7kFVWIDa&{vH- -EN1yJJOcJKF73f-WtR4T{wqg9f)5`tb*@pxdWp~3!_XbRvm-79Y>k1bVY>D2A --n$m*jt&O((YCxW{No=2i2ErucJtpww6sMuJdptAY@+?Ab~7MH`2IAFiVwYQxr3^{&>WtFft}rxCxVE -rxjQ)887^|O4Ui$+fxMymhLT+7%IW^SKfVLnl=0OPR^emt<$f=?Q#S%m1+Obc@8(BsxGE+(3ml1$ -s;nGX8cL39C52D<2ztp*_`R#$N)5*)F`8XUj~&=~CoSPjE|zUW0sB;kkv0=hi!nw@2V-qZew|pW^7vs -zOHS$8y|8z%7U6=3lrbn#q3w1jFdD`$>T>`qNSEF9+aDm>@}!wZ3Sa@-bQGOWue^gvMU^IR?8t -Fqvo2YB*}lmu&FWR+Q1rgXtT{>1R7QkR^+0?m0Bxwepd--ktnEzG1*OnHiZKa^&}#(a59;CXMoAn_Qr -{2HiY#pN-@jsSf*Kf46bguJ*magDtc!=%mu^u23=BBcp$fV)PW<4n23L5*rK#@0l6-7aTCj!*U*z>a4 -Xam|0-1aG~P(_DLL{5v@4fh08)*k%1vc=b&`T@70&uynG*sm!RjDixRc=_qE-zZ+@CXV -QI}+eBketNTBb6r%3VGMjIc|It{(6|F8=t6^kF(s$pjQy}q2m8aR!)sFaf&x1v$dt*4mgqJU_MZg81w -F#f9hV_OVhSzHMq1vx1jY@aXqpcH#i(iY)IxI^mQ#}!TQsE5{KgbuiJZq$erTT+ -SFOrwE>8OT)Ew6i6U0d1dUuSLoGc2vZ%DRt*bzkc$w2k~;cHQ(T@Po}Sz1qJ-wG}PA% -Wo*Pf%$$AtG+?+;Mzt`_<)^gCx4Seb}vaZ&KQXR&?mZUoY?TA1MnZoAAUuH6R_-dHbg@)Vmo|MLTDIq -!gA*JVHSV_*pdUX8)aC2MITv8<(Ynz04{xCPgT;nz~*Xq5Z5^(sY+QLBC`v3ao`6rJhRZmHd2o2tF7a -0s(G$EMoZUXYed%4|aw@{>|^DPYi#e6%{S+%>7~g7Q0W;cdLz4mueH?tZRML;vcnA^7EVu@@}R@N*~p -t0R&Dec}pG=CpFUTRNEj14N@n=}7-?@0aUdS7tD|D?y&n)bt0e^`{mnPJQNkB!O~?0Umjy+;;Abuy+z -*wcqyp-n4Bqt#dj!adPJISX&=&XSK88i5s#o$?I$A~lNTyidze7S64{t(juAtsRE&qnlc+bk)Uh+7uPXI`>X%qOtkav -RnN9v(QF|MwA=LKZI$qfD!y($g~D9ZHJ8PbezjeYoTk0pePxVR6*UUvG=+3d|lwkTx4zt9MrNzbk2@E -0Enx0Le4E!!BFCVTIYD@Fa=r>m-mIufFF^!Kv!CrJ6+swa$yd=%=l71Otf`1zWKH^Tl~8tVcFP6w89o -5#re0S)_OpL*S;YZvXS1Wfff9Ssy6)*eM@#%h}x4BAnLu_W4s7SZ_MBPb-e+Lc<^+)<=-3X3uYO<3Z# -$!#kO(>hyEt=s=BuPY-=}Dyc^ft8P~B!oPFgeN)1d8@}_>&(ZWsCm)#_DQ@apPCb=-!HPP#;Y!;q%Ht_o4_?|*PB;2Cn=qBKa~U=R(S_q2mm)}%V -Bj*&Y+i?-TiA1RNJ_u*2)-VP(sZM=S4H<_cG3ZJKO3-p4a-Bb0E2A57A$d(?7wc7UkAv}tiK0gY@E5y -5O-(!^=9+kiR$(|wg+eLxh%cTsQ1d+>(9>X!gASq51LIo?~X1^=gX0}UJrkk$ZQV#1JZw%!@516MOo> -(IhTG%w=ymATIbt|mt`eq>*dnKoH{p;Feu8Opt~D550)>K!oUUoR8nCG=d%n&0o&WFKNpm^Yg4X=<|h -c0`^C%_1g~efB`9s#Pj|*UdS_@JD&D^>Kt`hEGqc=$n+=xe>Lf8_oNEj)FY)3V{K?ifg~7q&}=u3R*=oF@*oXjD -?P9Q=G6>Ml@4b?7!_r|qg@7@9FtG9&V0#roLDz3(r_>01tKM0y^V66M%6zcF@Xufm%05lLxX4L_1J~3 -*KX(~b##Dubqy4NBLg2J57T+BeQt&y^>lU=wL0{}hqC_gp}+PZyq=~I1JV!!{_!vml&vGML?x`eJ7^s -78DE~ec|4@w)i&QWGY0jBHuuY1WuTAe;GH7~_i2Y+;VIsh4z{b$I>Bj5042cp*LZDw(;CqpY|)MPzdE -va2DDKzM?`iS_7_R~8yW74067A!dQ{4jbJk;+BIj-?uw60ZOy5=DXYYF9)Sx1aE11}<4U4>tSsI>Vvx -u?9;XPRaHfwOp0Ya}=(^m{g2JBc{!(`ibLn2_H>g&yeC;;wQyyOjkXM7o?tZ01%WHY}8fe2XQ(5a05o -d|8z%;+b%ZGD~Ml41ADcN&o}qSLpG-I(?LQy#riYNpiLtS8bwW=)Mq(&-g>5~ -+$(yuPCU{hk?8vR>>Y#eF&ho3$)*W;mRA<{5G{8eM*gRbFaqoT!{iM7b$!wcgmO6uFG=1-3^{{v&wV8=EBir -?)<86ic|nk`~!j4j1di4{o^r4RY?%u5_y2$-*hWyk{G+u2)TigpK2>aLB5{(aJlTo -mfGKNVQQ>+lrUUm7f$QSaY5hN+!FYTqOs*+}2)hl*p_rMU|hH_B4^D5)WRIuq$W}*)6ma(u-y>x|ZLy -LnaqC%cOZq?Sn4LN~X#@2rOA57472YOUa9kmNwZ*Gg0z* -VpmUUjcdN~W$8?-$toe^B?9hQ>?h+-vz0S^LdUh~)pz#Y*ZF^n>6VNTwO -RYZQ}fNkJ;^joq5lwY7=ZK(un+$a(xAfxxt@b8${(vJ}n-EstvzCbkO!v)m!WS1TPO9d>}s)}mqy{W~ -#9?N${iD_#nR%nV`~dqJiOkyz!-7?sBoqJUDUl2kULyQtKI=KWKDp{nOT+<0l7!GW?B`g$ -Q(L7{*%_DyuF2-XJxe&9)<9!NocK6bUs*=wjDO`m@S5P2|Om%#ZiW*iLb|zRzANCK#O9U~|)s&6k921 -V7cc^fh_y;JHa&e)(r+Amt-W}fgwCgR>($X^rtC88$yO*7=&vy8#h@0DRu<+Esip2;C~PH=N^!^ -fIf;AonYB3=8}QFo`Q;%;321Ohh)!Amy&o}%W25#%BS*H0fGsD5kaUCa9_ExUK}Z*pu!I>@GY9b=!ew -&M>|g^qYFt=Le=qwg{8oiPIZZVjVX=pQ75)X!IUjB7huh6t$BG^7^Ae)pq7C2`Dof|i2~#NSfu|qp8V -(E@gx!8`PW|`_9%wz`rgbfm2#?j!8bjZkz3xNcEZ3XTx68mJE)z4Z~=E6OGlVDSl>6D^^LFnl4Q|@1+ -isudK#Wi!U5tZYqcB -{@MB@kT%3O;47LskuvO;}WooBnjl2Nr~S}Au7HD -|Mi_E4O=#&Ny@{fhF}Ikq61ZFGeDy+>b^fWyM{jYq!I6u?44*jo*wCGW@2qi5S|5%>!N$VF17~x`p8i -ipm>60cY4X32^}VNo6~v+kar!+ey_08`;9uNli|3f5n{4%GHg_f1Dm- -*fCWLJscKfp3nVN``BSB1qbx5h|-(C&wjW5ko#V<|7esfr?N!IyRdr!CHZpv{=K8QE5EmD46bB*Dh~E -&QnmGy>RouylOuIq6aKvcFcmorxTmcpVm*SZjJdEdbq_|odH{f%T=sb6e&~(xCjC9LNf@j%X&o -2qC(XkmY{FDCFtg8xuHYrPAq1GCtT8f4d~%u(CBKLxNw}EQQt*apI9<@J|2`?AZ@%kpR4-(M+g4h|;$jMC;HP^om}1v#cx_7l|uAa4Qs-tS#L&2+mfjsE2#Uf=&oAXpdVN@h -WN`>;5`Z&cTdck67>1cinyZaDDmyQoK9A`0@Pp<$Lk!t+;*rLA*KtaB(g0PEdT}_p7_NZ}|D{^4}kC? -k?Y4-hO!B->IvcpDrU2YA0`KmD8DT((z8cpEH4Gfxy8J>I>UbgGjt3Ox$AOGdM$L)FiYe5`*MOiosx3 -6^iS>`qF9u%H%GD8dv)|oFFZW9x1YjS-YiX9l7ToFSB7N9abbdW=bT}HSn_BWE?FBWa5j=RxQ&e=Lhk -;j@cXa1wz&eLk?7P_gozz{d#4*;ZbWk6X%PljS4KuxAU%YIdK7Vyu=5q5lVggYp8O*^t;DveiwD;-9G -m~&-^rG`kA!!MQk%TO*?D4Epq?mutRRXH?8u1ID4IaDClxQeF02TthaEa)hAyfZV~VE`AOgM%X*^Q$Z -x*?0USS0)N}tl>IPuJKfn3*yYHX-=b*6Hh>q|fg{$ZOIo!UJ-`VYmHM6kAgdb>6r+wCS1@lo|eZip6O -jPV^7e_N^@eil*2C&Q_&!?VS#XJbbz9&smugkekhoopa`S{QQLg>b;q$@JlB@iJb`QCW)Yh&kc_0{oY -?0r10V~Rcp&iU*1lxNSHIN|fp=7M?B&ZeF#(4egJ7YIG#xZ~&b-bDH|K?X__Qp;e_#LJ$-tm*W4EbWi -`YvT_o4fhD+&eT@;(D4;CA6L^rM$6j~FwjHbq-SB{mU^%M73li@A=-mIVZmy*=Ihbyh^hA(ohKO>jj+j -xffh8i5Jcm+zcHD{xktP$bn+BbZonOM=@oDp*l*HQeveN$GUx=x;4n?JprMvd}toz{s6ZwfZrf9bwtO -Yn~W@4oVE=*%1VtK`k@&C6L*l* -{~6-i$`02bXoVPUiE=ZM&`W`8+Aso2qV;?4qew+cuxe-wz(>^TkzRz7}m>w^g-j%!5^RbybvC=FfGp& -fDE4x4&2R+oo!YPn)d0HV^9Dd~0@%%xO`rR{5eWs-mu&)9Ov%O;$H~k~Q*WuD|vHm}RH=r$xRA@b}HTcW+MWx~gZ%+q|uJ`u+6u6@Tl)BE+ -TZ>SNxd+j>RF>di$S&-w5Bch@O;0Q8B!twl-nRc5PnS>2YaDqGrBJU^Ykdv!`w+{~%_ECC_S+e-eRfA -F1&D*~*Kl*xmHKL16de=jI~zN+(VxqDeQZAK)xoF!iosno^A7X4mV?bp?|q^B>-kF=4?AFlI!^>wkzv -7a*r_P%Vk8vxJc*V%(42IU>Bt#|dtrXu1K_f%*I7GXRApOND+A?ge)>Wl?&;0E -z;pt8*wc1ZlsBg7EBYR5y2&^HA%erV -5;l@9I`{J9I-=EA+{`b3+*QYPPdrgFO`u@$E@7}&U`6_t&!#5`^>x0?7A-w!n%k -;g&M^}v%s2_ita_|vah)%2_)rvtg863GUI$0L)1SDk*ZJGOzWM9?#WyD}{xX02{`KpZum2qDc?-fcU6 -@LV$6rP|AMv^vLI>fm=+C@%KZny0^y2dl9DA00$LB7iGy1&T&4_-Qc1A~qp3RaMp!W;3I?Y@BL+qej= -yAg5B~4oze7kM&<=bq7(YV3X&Ea0GbpBsilj~`ZcQs7Z^mv;$8{!#xr}ZA9f5T7SWmiL8Xo${%e=GaF -CMq84)a8Y5ip?pV5v+r|oaPG>B)=tZ%^jmy?y!Tm#?%cNn<(&~ZQCYhY(`4K4_?dIt4@S7xK?^ra$oCtBTYB% -p&&V(`Ua=pWuIoe~A5jboBJ_>9g)nmn4JCaIdQ}*B>4xO><4MGRaoA*{;!rq}qvo3#Z824z=xwPv{4q -qJY~KA9}*6GJ}-3yD);uoK>3nd`iuh`DHSvty^5rKQ5YiLmX|LPlyptk91Zt#)JrHnjCx?k|sAH?etY -u-6SO5lJ8%fCIW*FSeXz}Chyf2m)X{|CwR(3lB(-E%s{cgM?&lk)Qnv%D`}aUk%kT&P2QZf?-$ -LfNHJ+lU}Xf%$o-h=JdZ5zqH$^AB(81=Nz;_hdfhg+bh0MWbea%7qsa$SBFwWhKpj6m8ap^5U$9mk_< -{EXD>Qf)#b~}NZt{6nFRqJ^dr^NuO1!~?;4&fUzz1IuO`Bca;4Ivb)>kG9vx7WUfrvDq8t{Ord1x_qk -uB%>CkX3^ul8kA&V7>;$%*0+c)pNeKk2T`kz8!e9?9n?R-9I^3~-m -fgS}#0$8$E#C%D1fj6>`MCO8wN!|q0gj60J3LTjm5%g(l2ir4@13_I+$kNUBul*oE#{_Ax71t ->dE~4h*);fPU5X8x~*YEeTXH1!oBjP?HjKS!Y*JridY@$ttU9RS+$yfy9Iyq2quG$wmidT;wD$NHbU$CH -w+P!95}_T0^#SV9?@Onmk{$TOx;DLUI8%yCPCJgw6v~NIWM687)NHWJ;1AM2Cq;q7it%O_Mtr@tXA6g -pc!Wo?Pj4bSp7hWcC%r{%z58gnMzPR?#EcC|w>K`V^WFWinmn7u&1J_|JI@%Rwmb5p??@YnsQ6pFA*p -J0Ui_%^xZfj(-Z&2PXSXJ32}{K0gbZJWPI|eXq)Ko7`q4v&@SXSsS#Iaw16ITx6_vl2MX@*>(CKHl#z -Y^1~TX&?4KyceW*gP&dg{UXo!8qR2mO;O?aLx7S(Q0npwO#U*4+!S?(2e}|GvY>KT$I-~T@<+fyBDUG -lt>bvarzs`5#kGu*RJLsN4)`RCIo3DNeJEUOLxBI#RTAf=!GtYOkR~C|Cj%6~pV?{!k4~eRaif9@OOu!)JFSf(~Ym*MLEjd}9eQvphUg2(@$10I$>yR$cPGTtRH!LijY>ysKXk0|&&N0>RX7tvtEGUS-$1Q* -E&pO^I1HbP_vfm1_!wnow^yTLGvT$}U@eB*$HZ9}!#8rgte8vJoue@x*8vM6JtJ&I$);dJZ`xEEewIn -eQ(sZxl$@fL!b^?Bx?blvQ}e$j1VY**dq4ttY@Z1wW)|DlUz)vj<(xhJFk6T*4cG0%dsSq!T|q4rGp< -0&IlsYRUV3nYW8;R#F}{NAzEEkTf?1dmG7kkTuH+`^p#)G?6Ao;;}2HGwD~{!Yga?T?fFz!$?xN(miT0#Zmg`7GJ2Ifm!E4xhdcA -aI5oeduNSCk!Pv@E_iNr6;4<0Su}R30530;H~SQx&2ui0)t2g^E=((A*d-bNPS7P~k7ZGA9Nd$H^FDj -#;0paEs7hr$s}9O~P9>z}c;uBl)E}A)CAG=$9b)ECm*v$BXIlOG}Fwfo65STxWsfY50n#@U8G0u -9kPq9&>ffPK8$Ze(VZhRj2e640R%vO${5_`SPnRO+Y3=}8Uarg<}k$Tn?ESD=ff~{J&x?&I&adN(~f| -VuPQL~;-=ym;HiU1|)${sAnRKp!h9$h%Sx!;B<6!eYuV?M(HSv4F*MdN{xCcb!nn$oc)T4ggt5b8Szo -}~(0pwWCj7MTPTm>r$7tez8(i|nj}^xKqXwXMlCH3pu)l8}JGLmNa2@PgP2B9qAK+~7s5Ljmbwlq4R} -2K*VBx-4bdxVTtf;0qiY#3;$OFG_WfThqpUI9#PJz>=#CXrihc@xJh!mc=E_mvtvZnlW`W9T4nY<=w! -&ncaa~Hbt&8nmt@ixj#$doY^W$ss`ERb`9M;--qlA+`i)(wPcDVlfWJub2aZ;GtQNTAS{D=J@HjMdk9 -n9YU8}5hDC&m-b1!i#a4-hPX&!7LgiR!X%ZR3+z?KKZmM$L$y1Ixn_+CIZt&Km*N!nyijMIQB({UjSv -)iJ^M-g2+$U-Bvh^f+0EiYgX3w&aZ3=-YlfR5%1)tu6BRsypyx2BA4O(sLf}R~rZtr_~dlQkKj=U5_p -{;5@Y|ZhdUCLi4_4xlx{jD1o -^vuCxy@P#9IN4DQdWW%RNltnj;fb--asfMq8K8P15W3L?bYs#Jr5$2QpjSrXU%zVb;bi1jW{zAeNrw(CS4e8wne7WJ^+iGwrYDNZcgC-oG -(diaPnk&&hn$Jx3GS7(C6ypF_&{+Bg^@IPqyiT5;Vu30P+KC;Dv#s#k=R5aoV^R5QrvZlTgk_h2yreX)njZV)i?W_8U ->^P>*j~QaGj;0_%wEg>3f>DE}#k@yYyMuu#bdaVr6)waU4U -Hw6b%cMtLxtYhxA!3q-#PrT!-$6^W;?sO^xvLn-OJ{}TLK*d4UF9Do$zjh56{+nv_DI93A_BU5>@~OQr7)0!#G)~EnfaBDcRM`7%w!^Y$s -(k&)NMSD!84+s&#n;9hb0~L%5pZ$~$1xPQ#M9bpqZgul*XU0juBDF!#7EO3M+Xm1L=JLNFw{4xZp)du -Oj_170$(p?5+wxkn5I2Q2rZc`4042g7IGhIwUJq`mv=0V{UZ`Ibehx8U2#qaI}qoN|Jf7dX-vpeLQpa -5NwG5{3Xq1F-^B}vr*qRbH?o%nq?=A$dC{3;E|V^|?9J5*od32dd#svOWCy#Ag~=@exs*_hZ!Z<-0LDtO -i?MDTqBLRoCrnL@KfN>uFS7tOmjrVd)bOA&y|CJ%ghob<>Ce5s;#)!GW6DQ-YbVL8Wb!(Sq)sLQDT&= -Nc>{b{-w@-CP|=WEZsg;<_wI#}waLRo#F}Oz4aOIfHhEbS!h<&@kijnggfAs_Mcx*ifAyA=mHV}o6 -T{0q-Vt$vNcegQtrVH|92QRw0DqPQP$4y=MH!zcBAeeQO#qt(52U&KVSi&sFcf5=vR#(LWuEFbrGa7eV|C7PIv7K#w@4t{-HkVWKhxPV(_x@`^`uB7jGmV8r-r96}8r)p^VPbtjgK -NW-O`rJJ3J<_l6T5%0nFQg0q~%3@pj|6t_s*#3W-MCdTJUI#$sUvTSQt(M}|XSe4p>D-v%!~XpWfmm5 -m=C|e?;_;v#YcP-ppS{663@nt*_l)Q1JD^9A5FdP|4?Nb#_W_=WlKa!BVbby>jCJw=n}8xg^29)h0LRAw*H)olAzXP%3LBZ$I&z2~r(h8<_s4@^ -8*`Y@a41yFFa({<{`tx*lk|PsLXveH@37=R%IoU(C>%|GwENNIt$z&$*BP$;&N_4KWZNHiWI7mFAk!x -dcP8M2gY{Ll=ByeUu*@Om`I_%0>yo7b$bh9bhf(nvN7Tz{I48;JoSWoSlkjRjk~Rw6QnEaQA29-c0-; -R;J(R;~g9o_zAi8w`?#LGP*UBqYi-0xcgjHm)+5@8`|0!HnRFS6DMW1(wBvF;u^ShXg2orwN#i6vfsR -UhsEC3P?i-1PPv5lJw;Uxt)8w@wS|MP7+7{cBqQ4m`Zim6~%tj=sb8=<;l6mat;{2AIa{TDuj$UP3_Z -a1#VBEzmAaMnhGV!}z=#U1;hFQK{}{N+!;L$^4&B;|q+^}AQ6NnXPCS?Znt56|De27wayB^)erbsMT> -=)ofTC~{7uAs~()>s^u-6FKS~3B!ABm78>NotZmO-w^Duw+Mse@Wtg|aOWTkmVT*=_tcc~0TwKwUCKG -)x7PTKIQgTIz_Y7ut^S?FT&pWTQaxhe)|vqk-VRSsUxn!#2w+=R%k7HOqSZ^Q*T8#VS(ix~Z`4N+J{Q -F5Z$cN3aAUA6yP*9ZACkKEmlc;wf@ltPwNNy%>$LOiH`EEmQ&P$F!Nap~pBT0getk{smAW)Qa#Ee?DE -aBe?)c_%3`^|5T#e&C%jZ5w6tGjFO3obCLo8 -BW%dX&$M*j5aI;|UofsX!E(Y7X1s&ZVfpuvkX5Vt5Qyc?wry<6j7ccs8+cLGp#r)nsL<8sNi`sx@y$9 -VN0|2`ypR1tP12~V&DxS-=@m)nhGTy<-kPk#MXUSu;mH|?zuSbpai1k(xrRP%_`Laqk)r|9f*MKzE{4KUQ1;A$>945UAuc&|!UUoBa~x4&CsS^#ze -Jrvn41ux4zH~{oAD;z&;~5YfR&@W!Cu%x66R~{VTDpwO?$_5%*Ro-8IpOBq;3G@G(IXR9+&&~$9(n@s -{=Q*7x>&){Npov0}PITdh+uaqPe&tqcC5_90WlxNo&qLW8JcJ#$x}P&wTm|V%#{w0E+f)MTfb32A$qp -EqYJqaQvtVF`}8=S_UZ-rnpCqDY?#phoD)QgFK8BLo7yU_gC{U`3`PLB*j4aWcc0v32 -5Y{f9e0gm*iMO0ap2R3YYAo9_$FjC)dKv#NQz0maxB5&G@?hdX>txiLS^$!GT5vf-2^G&w!Kk**%0}v8=D6H18kaS7hhc!rO*=iedzGo~H3W+ELCE05n -V7Rt0cai2|ojQ21uCsc%sBnQ0FC;dToJR!MHJleu$J-=xSEYAv^3XTf_-do*T+v1@K)R;VeUC&Uz9kwsJf0KnqT*`_@nh;H -C9JT>Bi$^Nz=*&SKdPy_gHUDRD9Vg&Ma8Cnh(PrY=dtKJ^Kr=0LR@`rLzmi#4fN99x@Yio`JP8RL}NCfmUX76Oenz_hVQ@2O8OA)q0JZV!LX~8m6?= -S~)WpnamAvhut6pYte($N=&by4D*)zEWVuHajY+Fv+==!F7<#HNETDtsVvpi*zfma-~Q2Jmw009kvJ! -B#}keVnF<;ZmunrUY02hJ|5n0GfczalyecR+6R9N -wfu^h#|<3r+nG2DiLpA2U2(g*_eO}+~lYz+R2?An>k_BXb03qPI9=Y>QG4P%^vOHzM3O$oAK}Cp!f(r -da~%p-f8;~p`Sf>ENAXu@>K`!t=$drFFBHT1Sto{6}Dj~fh*ceqV>F4xMfR*nw;LwHJBIHVVggv!E6+ -{@CAqyn;FN3?!Y8g95ZD>osxRO;O82jH}?S7sKuD!?Hah{zb+QndhLPHL^9^ffC*R%;YB#+b*v%MgKR -U{oemiG?sD-_+jTC4<>ePTP@SaB#a2-d<)hP^QDF-G?Q>BKl+AIc1)}fUxM*woe9p&xZXr85AZW6wLCzFg@!cPJD4WmmbV{lTP~ -}^c*FpNCB_-)zL(>^O!RL0XC3|p=rJa>37CFxp)KL%SGmjjF;#<_kcI}OYo9irlT_XP=)wx+jR3YDEx -x6_s}$DC+}md+(GVbS8EO8hjfPDKDx!PEBXg<`PfP*|fwY)&E@bg{6GA8n`jE96zwOY8mhyi}A*LoZN -T|uZV%Jf0_ohC6Wut^ub%+!V~Zu+KMo11qhNZwNe5a7Bm>FwIvlkC#6G%;7jn~el)(qr8%SrVPgV9E -f<0XtY(K*Rgf=k)Ay~*_FhBLp=fbqsyqaryM(SGj2OwF6p>>hIiobgGXUZu(Txy$kO)?(Ljnz!fYQ*S -250?v~2PLlQc9f^^UxVA7tH1yy7e4GqS#;a;#%>Qr}=}CU -(g?D)=X^8yx_V699H!B{LHXc8_yjdF3QO60_@ -or=u&d~A3lh?h-45m6i$; -OM@~HHt}@gG0MVB&2Tg7BK3eHtj2$bR1l)clOf*T&}5eLi`{VHq1brA8x<#AST?;lbRwxL=cFhWI){k -v$bS_Db-u~j9U6?LdHA@^kYs6-6@*JqzV__EQrC+sFD7*g*t4Vg|K>GD3_Gl95c8COZZQE@I-mpXmlq -N+@trO(G!hbz&rkcR4KVV5?kfwZ^%EeyV-(?16`?z2?)eFE@7N<1W!a2@4xvZ6xoSHL68O;CBMOgKc3 -L=#&69^sY{;;&uZl1%!Pbu-;Mh5%X?E48M|%>;$jg-7f0gECtuXG>v|{$y -pzb{^;!Y?o>&L}A)2Pyayg0kGVx)@)p76j6x!G?V(;=FdoE&evBk8TU|zv5J8TN~)VG;!c7_T`wUm;d -xY?R+cKKt$2-_k#QcyjQ+&i*w0w{frLv-rJ~ygHe71H|NR%zEZr&)CYvf6z#hO?e}MT~fD -_gPE_aPY~DCv&25|=mM|eLD^D7iRY_gU6dI!(&d&9nqP*^p96tvFv=WX*vUEb9i5*=Z+hP_oGoqwhvI -bRNNOl6ku%O|qI2_ly?E#mmJ+6V_gW0b>?Y3bi7XNkoVATUDf*v#C -+a8Ety-}Roi!Oo89zp0QnfiQcXWv2XFMo)V`Lc?={BDQ}&nYl?j>+`PkbH`Q6(E5_xlGw3=Y=9bEhNo -M@3+o@4BFsy*`UWbp5E>)TgWFoZ|VAN2|-c$bggy$9Vp6W$`Dc=lJS*dAP|P}480JT`cXu5LD;#e~k4 -E>icLXZ(WKMVR;f_$|YRpIY1Ill!TE$_>Ps--QG6>F-I8GO^$ELyT21t#=7c5I>e!Gk!r%pY`}Ea%VW -qNlEPV{hK%6y?uA`RrD3bcT6M7*mQ1NS7O{=tBJ05q&6?j;x0A+j&+PA!G7e<3r7N)n@WDwE6{(O{P4 -}m$t$mqb^vTGGKF%xi7dcLUEH;re(fveZ;35^{^U -3HwxQ%8#;1gEA=QYLa-Q%Od;IWeW1Nn4&mt6=PQ_Wr>MG&wL35tmR6}nV)=Y>c#F_VIA_gNE;w#7$Ra -$8p@9H>`Ie5*gffq+5PC&RlJ7+WE~$86x@B8|K%rTdbUf59@{3ujHd;3_w7mq3~jC%D{W|9TCa*pOW_ -cE2aj*tzYBb8k1MmYX8Cx-l>9;1IHz*7G&5OMLeGCr^T^93$~O-^I9obI0MjFD4zsvL5fxyr`0d%hL>_92ndclV%0*Qp!secGr6(xND<*Kl39StOSk9Qa6* -bRAd~_aq@3Ro;;axYYAhEa3dvt44iVnW3>rBHPM11I#XLF#dCyfzh_8v8(f#@%TFe~XqjUJx)Fdm|=^ -+?lwE8{d-w>sUlE`P;LJbiUULvvw6&^_dk2PdDxyTxmIBR#6ezfD -Ta-cyT=Vl(~$r=H17vdJby5hGXn@W|P@D%|$v&jnQ;SwCEdrUxzE1P$Zx!Yi3&Wl_xQ=MA16vf5{u9i -88v4)gyt(GZok}|KEqLX#ia?&*(nMKh|7zi@Ai9B%$kRhh#NUNND`Q?|sDLB5Ys`>mPs}G*0PsX-IFM -ty54yc)H^0_|md5gF -1uO2)t3~L5I;!+7p0mw7rte)fqVPl}|XX#VFTL*pe+VcKEHH8sWw17}7rZ4hURdR*F@C7n~__qg#-`{ -Zj*=H(wtS|oBlSJH=9Zr|BR1-|&$iAaGs*HBQnfD+XdqSvSX(}(w!LB*EW?3z^5~OACc5DrLSEvE_r#x3Zn`O`nPdA)mR-1O%uzx33mSs5t -O`P@{^&)1uF$HXIZdnxPZ)O0C_&h@&vnw)~*Kz%ON&&j8$?xtR5-SIB_hh#xWO$w<61krbkL$ED5Z&p -I(F{q-~7VvExDrgHhf(&J0sx9m(?yI%lIWm-Qu4JuTMAcK3P*N-TfmjBJz@*TMejsV7TABehy=r*rS9 -y!PG0qh8ps4#xYyayE0Q(gwVV~eT!yBzU2$(IJdoVcaMtJ$6A|=4{sTqJjaP4#`w2E8v+H?<$sgpxZc -?E(VOu%{BTWkv$uDxtE8$eqB{B97CgcIDg*+U&w -j93a&A&YC`J?HHyC5)9g&}i!H}yCG_zgdF`XH6AZ?sZb*gCL0l&qJfbi8u?@Yjc-3d2t?$)x9ePby)> -cKA9MW{MZe5$gsGq)~)AwYmM$~WGYpGKY#d2^UId0o5XvUx;bul+PQ&>6}c8oXR9T;cU!Di^f!tcH<^ -JbB4=*XLgQ*q{+CR}wXdM_pMNiJQ{Abpl}{AtGyHgS_vlbngoU&@QK$MO&fX~yT}`E>Nwf>wf;1Z5it -aeiTZ)`*@gCaCz#9y~a5R)qm38ZjqETli`@rha>Oe-@gZ*31<5lGj7$ChhI@isY$!udvp!l2iBoRfHl -jPNmL?TZ=1QY-O00;mj6qrsQRMS^(3IG5U8vpc!JX>N -37a&BR4FKlmPVRUJ4ZgVbhdA(R|ZyUK0{;pra${$urrB&0SS3reZ7>RQ=F0q3+K`wBO#cG$5cwQ~HB- -gSUGppsZ+YNV!xF}ioFzt);D6UjmUJlRvSALsM_xpwsyI=llcr3Ic%Va -CRkcsUaIvDB -f2lkzYVpGutlOuSZ^n~Ar;W+pBw@`tn-jYdb}q^b(#Jp_}C%$zn#+R>-W(+|n36YP|{KKme!8_Q#|A< -5EgD-*m=#;{~Og{ar3Z%;p-Chtx@{D773PA@M{zCXpfD2o0$`nXkAtW_Ze{=*$InG5#D)q$W8PQwLr( -nAWjmBQ-UWbjoSbXB`iZ)!XmU6dKkB1vg>lWth3t+Py8yRM7k(6}=;;b}oyrgMl?@Pw5d<+6|t6DD<8 -V4XPVS{S+0w?Q;1JB>%se)RtAeKNG}&Dq=2^OJXM9(0;}VRKqI&jW~u*xk7Zz~pi*_69DW_-V;5H8;S -Jc9^uYr~Vilf1Frnregj#ajr|rUnn5y|7Q}#AQ5n0r0^mG!X?mT8#+}65@;5MC$tZN8vmqK+37M9Pn$ -et5qpK@x{~Fj5jGRiKAKWwHs)2{BKoyMF#|Dq)K{hfD^r&xyf~@L9BXcsadleA@^*3`BF1N>buqB+gG -9C}#Ya;E3Lq~d_)d^Xj-lWLsp!Pc#GACRQfNSG_R30lSYIAwY*U*$XC}xrFw@AiNGc=O>MojgHkxi<9 -+L%DVnytyir*cJjdY!y@hY`4$QjRiGoO$->J6~Q0j|!Hq}0i#(5tlgbx^62fPo-^R3%DHIyt%HblrrS -9lFwyceI@{MjOjsS?G<*NLHs9kzvrhwpoSe*>KGGfG9%#wnh5Q--gRuPn#;aQ|oB#>xj@oAZ8lTffShEI8EzBU= -xHiI@gcy3LNno3kI^oi4?Vlobh~6U_EGpIfQ-Vxkr4xH?Zpf9|q(xDR#4byKMs9&4Fd;qWomRj=-YGX}N7$P`L -a?`l>p+T(A@5{Xv$Il~PCtMp|@~)Q61b?my4Au7jcZ)=h`8>YfCdJFL7GW5zbTsb`_yx1uFZ+<&RL9X4%8 -8Q00vsJ$gWG2(=&CCiV@HYiY{}=bvRT+_7tLx*&m6Yqjt`E(T#U8gY0vuh^|+Y~%O5F+1piV+u4_j+TM}nBNti5Iy>~_pTM7b7*n3S;-v$qeLHdwOOGO1$2F3;ZfIyZ^M=_pFbQ6N9SYYohuU|`2m6(B|J>SPKizI -08tO;ndAi@L3uwW2)InO8u(xnlJ!Y;r6I(EdV`?5}!f5UM@7!ddiFc1R8EOAMr@3un3x>Vv@Ct{Xn(K_$c;-TaI_jgeq#O5Qn>CJa+*Hsmv3$C -i^kzmJ#VYCNBV^AmjYY`qy@e|vUF9%ja -&O;|%5rSh2V~Nl;7{y~ZnTguX1u%IqKY%g0Z$}2si=E0*?jIe(070Fd%#;v>3+W)t26 -m7H#7b|5vxl_TolkO9)B{xcJeUin+O$R8Ln9p*LRvM$l9pC(aokO)x#R_o+3wMRW>cv2pCd1`TFaFB* -jx0fZ2epWi>@LVJi`xF)2DDWkd%H>?H*Wh(TC3&mRo%)Fg#~{roMUZ}KLnw&^4a3c9UNZtmLc<*_B_p{6ac&I^eI~{n`Cq>^q5JjQIQF!ZCpRG-de -=CV%mx%c&;$@YcV4gJwnu30L%Nahz#{x}n8D~Bdl306J%w+Sjqr{C@i%%3-<|-F0KbuRt=GT2?e&_B; -}xc$zO=V23MD!mQxc&S!{-n@N6qmOjTW|&nOZA~kCGgw1|wLbQQGRd$lF}?Lf%Sq;GXP7D}*oF=x%bN -Vi^;ucIk~|rk%-LQZ(pWavP136FM9^xgdZFCq|~R;6`o+1p11>sb8eUK0VkMq?bt7PBsqt5UIb?&Au+ -tP3}`PXHbo{Hgw&^Dsm$rMSIjo>};Ueh02uUCiGtje@YCnW6R2KG`aN(lwNpKLsc66W;q60MLnA%Is= -~&ykQB|lP)1lmk+M&hfdIBOaX*gDO>u(d3g?CSiA9UVMlXXz -^ArJTuFmK*kgFA9G&8tu&Ubj5;TUX@iYf`G|YmgXhnvm%YFQUvOHXGh84*hi{GSDw5l$|OZ*F~9o%zWMK?4Wu?4v)2 --d|>(w-E)H=;VaNP;0n^>F5r2%3{X6$pfwVejD?#!uK#o#xW7crH{5UlY9|tN5~5OOaLaQS{)`pFyU4 -9LVJ;9dW|MDgZmx+kTvFznlUfG305eP)+wcc4(_(QKimYT8m*;t&=8P8%c7g3KilP#1ce?-ls77iG%f -}z?=(n#UAFY#@t{8jlU6qt_C4N$i#$8h0rirk)i0XkQM!ZDk9xKI;vmJpLPO3TsMh&xHk1`uq -hqh8`4q}#A(?czB8=Ts){if1l4n$1+LF?T#3+hQ;a1_WWj3`s=!HH0FM`M!VCkq)ZO#xaTI7r{z|VW3 -J@6@tlxMIy{eh!}p#rC=+Wq)O5~f%dGuFOFUGx(vjzEX%Ao+1p!ysZ}!!8hc>8d=J9so0nCcW0;6QcgTQT*&xbXDboOsfZ -@QW<`Qkwrpud%-3sM_~dQ@wOgpyEW1th<$zyZKPBR{U@j!d9 -Geou14|xU23S%q%9Eki)Qo9E0_1G*;;~SmNuJOVH^DJ-F17aV47!E#y_40aSwi4wsjYt5IfYc1CLVJF -H`SQC9hJ+Sqy(p(dhzO#tt}@8XdCov)RZ@r&UA{^nE=r=THvL;3_rpk?cK|gm03?_gtk^Io37oX-OXX -cZ60>UIj?M@j(jaj|<~%8!ni`K?ZGf+YAs1j3Y{fTh)U($5Gn%1GhiRUJ5=I`Y3AEI0MCP`F5b<|ftF -M*YscKWf4%!IFI -5kKh=0pMj?@;DdsFohb$84p8~+A=*MBW2z -be`-K7=o(!ImSGZWW9|Yfh+IG+84 -B0&(a{2D+}xSyI|J!dVW65DFLP5vOC6>HSp<2NV8jm&4`x8qV6dvwhn1eeQVRKRGLwVp(etAhhsQ_Ht ->|a!-p7`tX_eQFE|v1kS%3AuO^ -!h0nwbSZSBFV8ODe}WKn_2%;DAJ5-@2tK@g_xk(;f~=P^T$(Ly4P|ET6fCSDDJ3NUhfA3V-%3kFug3z9l*V9ci>WF!w?95*SK4BSSWW#J#e3SgrhO9o^-kYYk?w}1Pp{&!4KR8)st25O>AB#}tMjdp;dim{u&*Q_4xtsoME5m>X${1JlLWrqh0?iq8-@^q2&6>~KN+9PMjN3`Y*; -vS#i42BiUw2C9@6f9&ifj}0=v@c*V$o0%3V)ay~z?2VG3eV7jEL~{XXh!5Q>feqVYK0CGz}ku@8(KRJ -LOo84#RDN|mtA6qL;QF|EOk5}wF$7g$8cA>=dzrgI#j4u+Jg34^nUI2BHwcesm4ammI7*KES5812FyZ -WL}(act2C-&(VxWV@l><2yA3kvHjn*5*|df=?ginbiH*lzLa8HXRVnDYWhURFTFYggR*NMoQ??XU4(1 -C@PDt#`M4YahsRJ*HHoG(ctb1B^2GQv9J$r@$s?ZM){AYe^La}X*=r8%Lus90nt_!8=v+;mo9PCf`|8 -E;xZKETe|0VM{ZkxyS;LqB}^uTVRRi>x;swiANoS-p76WBYpLgOC#GSgF>2oE)2oW(RsfeNF_P>2xz) -J}*cjH?L4>jET}>HA~UyV5LV?uEP+3A2eJV>DR|L1YQFbCr{ca9kUL%vvel)H!co{`7%@^LcJfEw<1<6TxSCT#sX!qg$&Zst;B)BY*UZ4MB=aI7nzA -jazD)%dw8{X`9Aox`;Qu3i5m-^7k1eN)gg|RW0YSEWEPC<6}%gVa~87}&~)G5XA^djlsR}_2ttJ7!Eo -ZY7asK%9v^|QpoCF@L93~n8!NH1W&57{vwdzGhI(NcJqL0I^F+rmLjye5aBnqdvqRZ8LZOOmc>&?B5&nDT?nP -YDT}rXviCa1Rl!s)A$}0wW^7g$K9lxDH}e1sw#K(n>CtwB{aM1TqsCd2j{`ByE*rBqO3d4WTTzu;HOc -Oxo}V1@Ja4!2>^_Q_Zlz#AX!>RNNhmqU2vdKI%9N){I{EJ#W-AiZG3e(^DgPVYyAVc=1CzSVe+hVkeQ_V-{Kpa>LBsi$b;LH}E{7hL1zO?#QfbZ --J#bTY^Qxj34>ry5fGL(;MinceFez#Yvwj#*vRBzmf?8(SkecmmZyOlz8Aj8?ao0U~;4FH@~$Z{6X+5 -W3FhH`Xx)QmsyZt%G1ZFw&X$Avv}S5&WoR?qh;WBDdXv4k)lS5I5yRqh4BlqdLXktIswiYQ@e@|A|v2 -5>q{o&4|EEk!YDc?~dbuHZ*5HKuZyT%|`W6`4=Ly-5}0&Jm`8x5QYNoNkNrQ=H -;i=Wq1^LMOHC3TkW#C4>851YUb$OFKFxW$O9Eib$>4 -AkldiEGTET%iMj`xty7BAZSN}d;)*$mdwgi!seKn<>978~7(2#uRXlCHvkAIp1uVet8izj8Gz@poD~j -v=ll>dS3KtEQL)-{zM-4cqvJ_tpqhvPt%9uUr#8E%pZk@IGfY|9~HQdYRQREr`GvD^u0Uowky!*5%tW -?n!V}eWY7^9n2CbB1>Pm==mNvMjo?d)!i;EmLpF;i=0fc7KrRKFe+A~U~~WKQYI2PY{dx}jT7jg9Q_u -`Lia1n-Juw+=$;`2^d%2~}4(A#QH|b)qVx7BuuI#8c~SHlOags%EfPQO7$j`n(#l7!IPpM@>{t3aQ675`;2lv<$LVqp#gVQ;s@clx(f|I67SeYi8 -BZ@Cl%g4iM0|(xPN7Se=gw6;L6Hc2KF|C1xE+#TuD9gV84%2{hgXh>2drefE3`Ih>cGc#tA}=%J?tlD -d)(X=-JcIWxOjuh+gh-KEJ@ByRUIkrntg*#|=QcJbwqHP54B651~ZPmt9~L(xR-Gf<5iWq6jrr+8{?B -1HX@LPSSrb=c`8pY{$nU6*~tz`c*Dj*D&6*h*|KP&{=0^O!B~5zcskdxM}IxcdIobq#B@ai&jWbQNeA)+&Ae#^6*YaK)b)#D%XK>MGMHlFdjAFj5$vL8!(*E -xOnLffqF{|0l!K}xX;a{WODZ;6Oqi##X=kpdCpTR`qJ8j4T$(W}mh7e(JM<5_24dm;%{iRnx#{7)^R+ -LCSuXgOzW8d{9zxAev1OH&8!SUi{x*9LCWeQ^Kdgcgs$kSp!FKWgfG-Kigy&K~{}H921SHMWvF0_ltB -a21+(X@fVPqR^7?w#Wt59`Kn=+hNlKl3V3P-aF|JA|2DhU-ZS#!HXIN8~`Z#E~yn_ -MTSS{&)XtD?K+a)-um5EaSxm3%^!nghyKZkWdqn3*o}>96aE8GO9KQH0000803{TdPC*9bFG&ml03<2 -^02%-Q0B~t=FJEbHbY*gGVQepOd2n)XYGq?|E^v9(T5XTpxDo#DU%@&bYy-BC9$GXo;47||v==nZEiN -ezK@cdkOs|=hMOCDBBLw;Hof*D}l;qvLHvLfJaIqzFI2_JA^UQFMjXJYDKencAM4mHwu2o|g-)mL2M& -$PQZ04Rz<-aNIzv)iTW=E7$%R0+%MRib(7gTpfoy#@T@^d^$Rz@@xFEjDE5Veu2(tgIvN*i9593Q@D8 -r4iqYmF>*X1ZEd*M8zZ-d(-RfBfmikAKg9`RD7`FJJ!+)ILr;-p&|&NNOtKhpJn%=dv(s_DX8_|Iefv -2mRl+btz^v@k-Qx{QaMvbHmxrK7X%GW2fM^4IQQhLRXcqs6W$%>&SG=Jq(J@X -rp*InJHPogk+&CO}4L6sUF<_Fmf^#;+TH~dR4Z~|CE=?uSRpOmbU`D?Za(lhjk#cJjxUUlZAs_)PVWr -;4RPpT~stWt*U1#2r=sDq%vaGJQUt9Rd_0b;xd^WUYr*fnnsU|8Ew*;rnu7$xR;VYPho`boTE -2o(|37q7N)ChivjD*{ug)bS$d(V4xDeEKFJ#h4VKBs?w0ildDCv>4%YA1#oW>%wZ%^Q9ujkfIVN!WcE -#SDJGJk9RJPMPmpSsrq`=Q+FOWh@wC{t#X%ar2mcZXDa%IuE3f!jtnpB_s@xI!%{W -W@QCl(!eq-uL-{DOw8}u5Jr87|4){VjM!{Oky;MNE_V9-Kn4OZuu?7Y#Y8yflybNICYoAe;DAfRN@LM -ICU^1J5imib+?Gx$8Nj6tQ_8qp5cMMzlmLZ;UCuAnn;9}wVvPVFL+#D{L|gzZJaTP@g^uUS0&jS%eW# -T5fsC7rCvN^#4lHv5&G;5hh -H1Y30uN?6Az6v*k=yq7^i?N;2fFV@Ci=RS2%KRC-jLt4!q6fad3}bRx~LvIvhY$XzC?^VO|rToLUcu*;PD{Ps!;0IJ`qz -He@APmJutlj5Vy$v(}#OzV9jSh^>%KPwH+OQGmYyWEseF+VeQza75c{I1h11sZ0{v6a^3S6aF}MvStt -_h`{L95vO4SFikXsdes8M`xbFf1X%=($_}6i$I0|CnZhSkO~^pv8e0f`K`Y0~T!iM4AabGmgwTMj?#9 -!5CrjtU^M=AhXk-IE1G|h4VU;nP!@OzEf*OIG);+pnFnk~`48SE5hgsGi$+8nVM~x3wm~QbJYHH7WC1r?BJ#!5e7zY4cHdRcEg$7Cy2ZOF8^rz6_33xt)361l$zRUZVA_xE1B*;Hx+uQz -sq_)ytXPxqfN1w?F&)Z{-0--%1WDIuVg!U}z&Lu3&da9ObnGGlF%tJb -)lqE#k@Cz#%y)fd58eLRqd{+C+o!ijezSG{j70ZP6X%whbkHhNbi>^W-7HJF+6?>K?rMp2jh@zRT&s^ -!Ou!tdt)-hW3$vJeL}5f!i44TEsiIQ{>HWAuwZy_#R>hEG^zwK)VUGrwY;0;(az>$b0gGvs6%NaY3cX -&O7$DaiAi~VGV=gTwU!#dw!XG|G%7{=M88>iz6Pk0G_^lotio-!RC`J)_+nyo!aliXvXR{`;BcO#C4t -j-0vM!xbe}6V$HRf5LI2|UYGoew7cll(`7k+?(xSdpZUfSHQ`D~Kc+BzxN(P+FOQhY5D$?0+^OaU5E- -knK&(`pcvvT(D8Q)j3B$>OqZ@K3!!dOry%k5u##I3t-y!Q{S`A6;Dddpp^IwK+F(O;IY}lm(?}7ct9g -RtJpFWwX{#5X^Z_%d;!XD^XLBeu*)1S4$4%U<)zo`e>R(&_%A!RHHXKy5&;(c5l%{U=!qM?fu0q>_G+ -H>X!K~o{UW}RvwbULWTwH|U6bYLJ1Q^L^A0XQ$2JroTSQ->YCgD_l{nyDe&4o`6qhQq$!6d>K#_VXhX -7)m_b2l@}jx=XEq15qH}R8aN$Ft-)PwIa7lLf%FcSXMOVLYnmbiO`n$t&PZCzyBDQP^DJ;MqDYbdC?I -^W40l0h~-;FPB`q?Hu%iRu&fxj1DJzD1GBr7(*12!Uno%#GkaW{^a*<*(_(Zop;0aa*N~bMSK=TYnMiZamRzsE6U{V5c9{aXf%>}?56elkRA?#- -7lwNHjBQ!*udFPjP=#cBLp~hF#X33JK^%Eoq66(aIz@^wzE`)t7J34XZd}pGM>qn(h4Dmi;?jEW{Do-&yE3m>I@d3N+re()MqBmF5j@;ndd1aHJpl_F-rfhR}9GC!+dgv?pWL#7)FX)!oU9Nx}I$=n=Wee=*5q@qP^62QLv@zDJs2UqGk(gy@;8#K%dLM9eR< -4^bo22~#OhBa|fXo$is>n~2Gr7ARg0N4UC!CsDLSvDy0Cpld-lt(lzGE`#mDrJVeFy)6T!TxOin2LU* -j@un0c5EzKp3@D$l`-@fxrODhW@s;n&UuXTnZb&68+e%R;cqCEWZhPohHPmbFh%??wXk3P1zG0zL%vm -9jfUaDY1`H36LZ9i2#Nc^(z6J!tR9zR@}f!cziB-qY&wCYAGJ#jXE$CXTaiHLD!(zV3F4nf!FIx5OAW -Kd@awiQdy& -c=++pAV|7RoCl*)On-&HDrpLjE`fb=xJnEa@*K+@J+Hp@lgZBGG3F*^C??<7s+O -S{$oA&$os6gT?WeJXN5#ReqEJ2Jv(0c_Ww;3_tum`@OF#ONj|Iuf76JSr%UUKQ}-~u2IHvqGs4ZYnyq -REe)-M#PeyZN!qZRqOvopRfFo+9$fcldjEON(u98Sh{|vIpIz`y2H4wB{2zlWqDiVwLpk(=I~)7h_W6 -K`&DmTZJj)4&&k8mHLV!y>q+7Iw${@6aWAK2mmD%m`*6173nh(000;}000;O003}la4%nJZggdGZeeUMa%F -RGY<6WXaCx0uZI9!&5&rI9!TONeMs1}5S`=7dTU_sQ&7sNWkX)JsmxDq}w5_Zx>O^VxjH3U&Gec5*5w -*J)Be<+3ayXpVXNL50xqK;F(UhVoF6=v@WIgniY!-{RC&5bhsvBRis$p%_vP!X5bO+g;Maj5g2U*whU -R^B~@Qn4c-PPhw)G+hIP<7%gnjT&<`0$L$roO;Gf~i&%jN?q80`yqh$=^iLZ(-h%cV#VppD~yUT-=GSt4d&H*zbZJJH9j8Q!t< -s%5G+Ps5;ey0EVXAviqu0OSZlTwgj#K441GkSbX0JUiK$O!#9iNa=BPk=T>$-tL5=nHOIxFlV{j#U4s -aKWyQ?tR5*(iWT`HHKjmDhViYdy72fBALY8~6Wdb(SiM*`3c?vBrZn?i~aT3LCPQ;Au -sJtan%oFJ^tw-UTpWpnPzxe9Q7yr(``{Cy1_07M)Kn{t=+K-58Na0&jG_OH{+G1W-=u2M%Q(N}E=-s@ -Kn^N94wdAFx^QLOQ2hYPuFf#)ch`KQfvlER8ednBKjsR-u?PX^>pY_Td}zkM@tq0O>=z=2K?yAs{2yMA! -hy&I#ya#Ar*6@x>_8g^F%a|SV%N?rYYX}#H(?yzmG|NZ5fb+N-=%<|-Ezy881#45VTT-x5})*Pr(kV$ -xa{!d@_(8VL_3y)V5>gQoraXC58LsZQ6xkn_6(gsT+M1sPbO>jMn@)2N+t92$4tx;KliBHoYd`&wXXN -hss8;q1wspjmt4n}anc?__&BIKHWH(bmtr0nTDgGz;J7Fr&5Z^dDR8hMJ4+M{5fnVT=+GWJUJ7dm7jG -Oq3S`oX_OD<3?fM3xz*Le*Rm;%00e4y)C?0N+KA1 ->B<}Pk-W&gm}Y_)t&H&8KpHC0kos@J-InRC#Eo8fm4^-suhFXHVQY>^z|hRdG-t+`1Zc}yc5^(A4Ta# -14oY^B4q3_KLLoKDDj{HgmWhvyPha9QbTCfsE_bTINVw{jI)161Ey|@W2aA((_CD>o_KL`Lgc${S`0E -mDfs~hMdW{<4%L2W#_2DS*b&$ih?T)5qOJcjj>L}#Ro68b*T(79!zAxOR~nbRcQN1C%9{bu15c`s`BL%XOot0-bc -G>vXmBo;Ofb>JjS?-=W^dvzBR7hY9k*2sGR*cD_Uo^RK&I&C*IzTYpKqH&us4@CuNin71Yj6i_>~=Oi -P_nAbe4TlUKJ#0> -5=9$;C(3aI&^QRhCO%ndBYeLKOw+;o^Q$ubW>+n<6d=#uMrUQp}a@fx7vdgE+(^GNi5n5k&E?1I -rCSY#)Iw=^P`rdCClfEScQtN?tLJmCU%hlF@xy5=@%7yP7_lEjUqtjCViYFU_2aP6mS1n0Rs}x1x00|VxhCtUVt#b{RBY^a>o*^91)B1sO`DJTB2b{iNdq9 -UoUeQD}MLh1#!#)@1|v=!_H(Cf?5qQ)%6`bjd->~eUSBNG23|cO{lTHyMzxC3}@nF4-soU8HXR898Ko -RAuz|zMTu-PnHxUQs&t#fh8jGZvIY;)p+FGu@8qo~s*JZ7X4f#mGe9t1Z%jy@dSm`;uNbRTZb6p8#V$ -#w67y7_l$^sd;xGs3uBVk@#H#3ru3@iu?U}TwAEc^$C{9{@j54$_S%?A?buBgW|*;lu -%r2Kqyt^l~Id)ur2=Po=Wy&g`cAeB1-%Gtn0rd)_!pq0p3b3YZCHqoB&gCAn^x^?<8X4UK2Fj8A*Tcxu21bB7wWTU+Lg^#h$Ys -axe_!3RXiw+@CH~rEp~pdy58$noh?vn;YVqJDCt}f{HLSnN0h2b;!j>(7ResBi1GkY7qtBR-drGWj$( -Jgfle`Nv4x1+B|8&F%+j#|7`g3xqV8eoZ=h9&x-34Dd*N(XVr%CDz%a6#FY=fb(o|BN~~U~q^;_zzv$ -MsC7m($3dSIo-4U`4akHzf?uCv%fxC1<_)b6`;OyUz^)UKQACs|Xut5nXy~0AUDbbPcp`<}NlN=eD6S -DaPRO=Tx_&>i&j8wX{g1AO#l!U4eoE}b>#;%}fXuo@yH*VTbGuflIFtj^>g(X*4+B>6$SHwfu!Pq=h57^~Y{k-nvWbNExXF8r(Pk;q0Uv7@T^f@Lt%I^ZB(P5e&kl#WDi4BwKOmY{^nQp-~$67E;21$CIMyQ^ -l=EBTH7<6o;-SMtMSRr+`SNuGa4}4G`btnu_Md@s#-o`Q-YM>CsfV~in?Rwh-h|IP$H*V#y97F6W%Bs -i4TQV1fohtK3Zl?rJobaFz+te1f37Eb01H?8U6?8BHpar5L2qq8`QL7IgTGW={T)|k?QZ(f#Z5k+)?HoH@fI156wbvF}(Pk -57FYiMb1nCb8vo_YM!cysvoiNZ%zw8^XhMlPNH3mjXiSxoQa99`NW3?1STtB;DR)m7iaaRH15o4>8$0 -9yeg$TqZJ+ht|>)Fm|A4WC3H<=&ZgDW05-fhYJ&6+z5qvKH1opGv -m^w9wA^M~)g_9nHrM=XC@!R;-R5q%=FV~M_#%`UFWp0V|_Fa9z?q))=aAD)DDpYBdtc==hDSZ~CASH@=D`Z3Z&&|~;O^~`e_+8QfzHB`TQS&r)yTe}fF%$fHejGk?5 -$U0e1dn#20Y8|FB@Uki~smZ`2F2~o_}0lR<#516$l(6B(PQknXP_J}BGIv -myKKFVoZ%V!QQ*RHiZ&<86{NfHs-u#&2OZJDlV?EFx|xDqU+lABCdIb2M$-D5o2(M!Kh4~yi)<$rPVJ0`z?&ztxqEI?xlGf$_KWFA{FumIiv -5rXfA+I9VHwp+)WYA8u+O^XbR+h&+OD$SBwhhXv6YCcS_<)#b44h~xi_Y5%6D_u04A1XR%APRNom+Td -c*PSClDHwqRtP;4TpcXdjPYg6kBiq?^SXF^HUU!zUdZ;m4d)?{06z}t#^eLzAaIn? -)LxCXwFx2%WLB`!yTt>{B$d*^T^lbg>5SBs2WQ!106?NH67Wf|~9C;~^o~*E!YX4`ZG3n9Ch2k78 -^CiO1yS%1*@D{@u!)evsvz#6SIV=~F7i7f@{X!f*KN>yfl-aQdDapbw;537%YG`LzqP4gGXwa$VSDRC -kDM&di%*hB=si&%ufdlq*01yInwMUxC$j7uG_o?475h>Cq*xMw-L!>hPL-v$YioVgip?a7CFq%yctV@UE^jjsUz{ -2|BuS(l$D>Wb`^%H-wMeMK%ma-UVl{lgDcc>?M^$O?OzPXQz{1x4YWruRV8inj+^4?kCOimqF+;ZA$4 -*Z0mk2F^5rcbpodeaBHOi6E@TJJ%9I{+`A^78=)8nPG4b-sx!N!M`Cg&MyoIW4^T@31QY-O00;mj6qr -th=FjKEF8~1Lpa1|C0001RX>c!JX>N37a&BR4FL!8VWo#~RdBuJCbK6GJ=uHzqb8 -ID1t*^4|#9OjHEJ%V9Rv^IOkj!NLzrVib!a>W~-FmFDMFKNDJv}`=-90@$qtWQrNweJ+Wv$jlsnWcv< -19<_a~0<+wP@08g+Jy|uU7Fm`o>$J!#`)IRGvjlK3PpT{Z^&+k=vUH(;X2tnAAg6y8Rk)4o3;nZ9^tbAwsZ#?FI#`? -UJJaxWT;>3*;yx_mD*5Isjek>SRlH83#W!Ci`Lb9gTqxPZX$EbURZ{Arujtn;F0f6vVRV(`tHQkBUY< -u~QWZ_POsY<)aFtdy^f0WJWxA~^UF(E?K94T}bf*pv1mGTGH%*;ooELezjI;FjB+BDW(ydvgA505%2@ -sB7x|pYVos@Z;8QhcYR}a3fpLcvBd9vRg(|PWJ_$ID+jj}e2$qLV -|;Z~mPI**M_16J)vw5kKLVp*$ENCSUNI9V{APM<($`K_EaRSLULC)Ro*q3rdUF&#fBgDyN3WwFkDndA -c>Mfms&GJvtWmYRNT98L$QxjatO{Y`Tx!_Q;Co+Df))zz>cVNhO7c2_r^8h?X|?nbfA;dH=;`q<$4`% -5Phq^XEUKEtwk&|PDtxfTX}F52dQ~*_R3$(qn3k)woKkh3xe-jc4NUeZF3+J>nZ&DTdC}yT)j(evn<} -ZBZCw;V8Ilr)k&fQHef8$$%V#Ii$hIB$pO2pWEq -eX-#f#$?KMmJxQeCUqCV5l=oE)cWy6ypU$P_|Yev3?b{5(yUK-6czAXD{{*f$1FKS_RTKu7>nK99Fpa -jM=l+YEjmzl5*J2PpkG-@#8nE?#5_!JF9T`logYV1YOr;1a{VukEu|b<=aGhW{dw>$;{)tQ!Dm&+1p{ -_5`>KIy+PYS=oq{ABn}D6nR}1K%7^+X8ed{${_$SIweoja9buIUXw2E9n4>GnX;FT2Iw+|>8s(8jCg` -ihKgHJXF5(#-o)p(T+x)Qo}B#hy0}(z9_7=j1|b!O;n}TQw|+T#eRBNrMfBw5^H-1G9RKj_2#N*wr|R -AW-l7D6bz`oVvG6>ppV6}*B6%G}SZtN7RSr}{aT-+Ra;mlyX3i33V43S>4~98&%fRn#7B7=Pzps+*RE -_VBHPAA_8cEtcP~P&A^n?#tAq-SaiPoak74M -5s_8Zu&&LxPg$7n~D03HHsO_%4DDnp?t*Qoe2!|B{227(82>mB^5YuyDq(p|FWFQbK0{trBRTLMo-f> -5%MFS7|0lo!^37S)Qm6Rw5VAiaQ(|c#?uj-*CXPyB?{`hD?p}1t80r7Wc%7HeCq+5*X2`r*X8^$KgPh}-pk|zDY4iz%qjS_Y--dCLXjKz6qW|;Bz&!L&4cG4N`uK{uo -s96iXjdB4w4Js!788ukK$^XrXwFn$)e1mf**mUCQweo^Ek!9eRGx -dX-&pj#%P7>+>+EcL&^qgQ{$euISiUVr~Syz^)h%D`KkvyVn_*l31E5hs4q;*c;pNGZ -5gkPV$W+l5v};(tM9|QT1^srf%)p7|&G*)XK>-57w~Uv-`64<%ifGti+7=Dy-sc6b&4m&Sd=Wyr#Jb2 -<0AWtQjBYTRL5D_>@BldgfWfc@VizzR(lTgu1V5nDEpbV9haseg0Rpg8g)VSe^d``^@VqPlVR}%pRKAS#b@jm|2YbIR*O1b>?b>Y% -oi!nGC|As$mdE{SDz~fWuirFlWKMk3hvOcU$Oq4f=~%yh8$;6*IdqqINb_{_is_Kv9rs!X_VJBs=gOt -p4~og@3oC**6y{D8`jq!E6N4yo{SFQM;l+rvt1=RRs%LMIHr|-PD7KyP&R1FpEHOfMH0N7XojS#9)-y -7jcaozXML$DHt*QgII#_C#zo_zc{8fqzVCrM8!24k+r%=&_)0Ng}|dB10612X-^hRp_JTO&}^MlTU@} -9%}X#u5XVh?Nz3)dwj{8)y_W822t}Ib){+aBs2Dg%yHgytaaquS_QYb!06Vb^=^O2!HbQ)F}M#;9Uip4*ZC0g((tr^vd*$VX1CQA<2O->Hc7FAa;g#+97 -D>kdHke8%TNXlcSnTAQbry3M!RgpdlyeXCtF$5e^f!Q9#i=wIZ$V4zRBhZw=wEa1dXKlHpogpZF&U}^ -9H5{KNV0Le4ZmeNAc1pWH(e@`Xl`Cw9hKjvbs7SNNHoWC5oRxj9u_j#+K%+bX^JfS)yTl3@uktztX@- -i1zmAH?l=>YB$(jjw|0i7IOiPO$u>l#uB;Kw`UTF^keB&X*O35l(?8q%PcirP)Bd+5nt7$;1q@MJdLG -b*{EaWTDrbyj}vF@OZ4wJl=X7m~Wzfc$ix~3H{Tt5;uRhLH}`9KA~E2p-(voKz*0tcR%Fux|anvBsA5 -Ay_O2M#0mM4W8>_9$q>$9M3)<{d{VkqulXWBSaOh3Ot3egPeslp&1BJyk1 -e|kM11Ri0+-FKWafDf`T4zs`H5KBxEByn+7_g+tJ;y?NziHp=BjnRP?|IN;`kifo!FrbOPN^J_u5k@3 -%}WG(Mvm3kZPyVlsLHGcZL3 -5`-GgJirJ97p+vdR|VsUIx#3BYbaxp7~$IAY*9hM*$v3bk~LMRN6%(?F~cV_rqfJsTS-4An$wX<44vB -i(IKGM4^4v+HLoS?ZX^@kXN?bT5SwvVEZ2pfUiD~s -zYkiTu^LvOI0wtV%hh|siazv(l@5#{p~1ggSDPzcA`QDxRw!iS9sQAdtqU_+>YtQf0@vl=ZkC4Lijkd -yzJrpB@;ffu$#zCs%Y$^!`j7_>#O{Ptk^Pt>cUSL)%n-%xG*{?&tTW!102&H)uwp?D+Q5o_@jRuwzbX -wbE$Ic2pOkRj`BfeJC|rwQ&(#FhL)^@;UWQIr@snqND4;cH6=AZuZqvusBVpyI{8iXzW;*b3@oNFXo< -6_bT*bDX}k+SRf<1J)c+1NzC8x)$-0wZr490xa8Dy@B~b+v!XM)HHx3npDU)D9>0=SBrRgiE -DPgLIpFK&7{~xU2m(yyLZn)0cjTKe!IKfZR5M!bbFU~ChmUy-8bL4Gg_8FnXXfHne66SyjiSbWQ0RSa -|C@E!3S2$KG6P6aXpzh{*YyL6=8kayf6y@OXVV4nfFsG3XCK$YppmzbnR)cI<41aaaKEpK+|TGJ;`y% -y?6e4o}~-c8f@LVyww&}VHn;}C>_E|6>lu&hw8BcQ=IoO<8pZcl1hsUHaH4hm|2tGIoca&TE3a1K@$~ -84Qh3+7eO2^l6Sc`3U(Ed1q+8$eedoR5t(S?Gn93(t7D9%OSD*k_+(QKtN~=;5(J_a35T!I26v6S?PD1k^0^2KQv-jiGF~Ex`VeDpON=;x ->aDYI9TDrJ{j|vW!`?;R{N?$oSz=8(zn&(Jp -KJif_2d(c1ZFdQJ=L>oGF5#$pDirxocUA}=JDzJY^ug%{O3DK{EFI50`^)&-sOm#hRnvi8{kcU2K1Zr -v>l0IecYXjz^CP$oW#ycvyX5AYvCNN9Oq@%=Yp>4PnX*6WK(61KI*>KI3{Wkl0?9Ce9u*pAvX;70#)Y -p!>2JM`%AnDT1zHmTQG;@Et!M(285qTHN8V?^_Vv=pT0cAz%yX5^c)c9(8w~0FM0KBwxL(_Sy5cFJ^~ -!UVk8xpUknTWDqUjl)iOgzImu1!tYmMs;|EZl@D|$>CWmm?HS@Xpy^CNK){x@Zo!T+Yr7x ->@Q4wC*d^`OWI@gMtYVlceXrWk%?4%4P1VtYE4D&w;rTcoEnV8^9p`C1oJqO))rzCp*eaTf6-c695Vc -63cxKaq}~neaZU{%MUH($+=yMhk(=925a06INzGt-U&z_ptn=@RI}0P#>i&KGM+>^5LayS->5q4nN2a%{kSIz_p$)Pfn-j-;mV7K~_At7Orf2iya6XOhc5m^eEsY->82bX6{qnp -5LKrl6U0oob2gZ@hqz?^8Uh0nL+NhVJGH=s%(%xq)unvJn`rLe(y95!DJocZENdRz$06D^bSt6 -?9r#FSjAxGAkB~#E!{|R1gq)=o+75lnn@3Uc`9V>4!r;8<9)kCv3=VHU;~Hk-5iU5oXOQ857~GgG@Z* -Fs+&eO0ua;0p7d6j~yXSmw}xDziUo|*4<{YWGM? -sddb0U4{LVIM4p#d`AWyV^~QKuqL-=dUw+K@|p&;2L}2S*jKw`m1vP<==P|~CP&@BYHN2SVd@@89G7D -QHz@prt7E_@jwX6NLKBg*mI#wgQT4$i-zSVu!!AYkdc>fIozwO*sYbwY=wZRA{{-EI)kRz;T}g2u!3- -)$!t+pq=yw<$Q&kyyWs2tfLg5Z5A7%hpO$kca;$a_8SjQ(fr-4J4Hk)`mM)$9Y_kjUllBw1MsM>871q -I2aHHVNA;o3b7)!Q6T>uBW`hpPt~w1Q4BBs-QY)*jhK>83&&kQ~3!u}E#k;Ms>gXxPV%+7B^Im)o4ZP ->IhnI!OQIhSCl7s;#W}Sp1q$Y|}CrDs$0FXNX76Vab30#PCB_su@mxlKHU*u3tpJ?>+}T+r>U -$xH&_w?{UlxTA&fd1mgDCm*FAX=mwY;fi(dou9#94XHoUAGG^5y -ch_$*y$43rB-Q})M-8(Q(G(chu)23Dh8N#wDaj!Dlv0DMRQ+hy&*2tm)WXy(DmkoaFLAPc(j%On^uDx -my2nLvhC8%ywHEIypXb&&qdq+73GXz?Q2pcp9@dqI^>7~Xouzyp^CR?T4@ClmI6tagUTtPZ8kDajUfo -T>maoXB}f=BP7mwy}R-OUJwpDk|h(1EGS+dS?y!3$Gs&K -zDfo4LBp>AlEYl)=uw6tqbAE#2L^u97hEd>WLE4pPN{q0!^@N8(wCYg>7IeBO0aECP%lcJ~fg -HBz_HFKeQ>B%}~bJy=y&UMwZMrnXU^4y2m|g9bE4FTAn-P>;Qc$*Dx@wIh86v}0_7s&5NK;(Q5O(Ygo -f=+zYdVek%3_@h@6MG%5$iJkB_>u_-e@qyb(sEn~|_N1q4FjE}4j*)f@3~0D*^HAKk1drjL)5FM*uBuORZ0#*p8HGmv;zwOb#7~YBNh}A-*ZC&uv+7HlULOpq=NyD8de8`@_mWr) -P6(OFAduaLNI0#=*@G$x3KHMbnvWB0uhbAn0BiZX0sFEefw_yBm+lNmy@Bh`s=@XOnu0NC$f7f>+$Qb -NBZ`yHC1)4(nm&5`LsozvoBxGuZD#{~N~-|B>;-l?%J!9P1C*O{AULnoMUVg64>|AJi7z2v*bg4w`%Mv&B~-!UBzV@=MwH`f?Y+$s>L9QGh>Pzfby($EEu3ovM5$ -NQpBo0+!txRXqJ~r9Tw#|qc7hIJ>q -jQe&AvZB7zrupXMj&W((qL=SJzXW&eTIKu|!{z>e=y8 -EZ9J-llcu?W{W*|5XNyMU&#BT7J8(4(+w*4SYfIh+~3xF};BwoZ14p3p=|7on-+EN+MDw%&aEjlR#+W -3nnKa(C1PWf9V>6sjj{Lk4?PpU(giHIn>p4fl`iT{b|8{}=7!OdiP8fEl?)7WptwNL -TbPn~wBfg*mT1+ok#6M)wXty(ohyJ=*C^V=X&yzgykZo0T%KQXEJ ->LFtrtN#4urwp1FK#?`qz8Z*(Q(vXUw4vPNj)~l6-){ydB`cP3XV~?%!x(uuYa}oN?41dXMNpjZuGaX -w0%9N5*l#Qg#m+h!NHaA8V)6TzZ*6p9&wF2`X%B&D)sMp2jBV*$`lO$d$GP@GYvp=r$q|uSN!sk$*yJ -hAX;2E{|Fnnm=Dfl&2Nxcl!4-JXqs(s=LICueUv7+sNfo1o3jfoFE}8&jtWeE?L -BeOAsMD{8U=EmmKy()Bt)r@)t*!04&c2hZE5z{n}K0I+2Nf(L1C2v(v=L<&HqCY4hcIRr%uWua^O;1`b1ld8_(~skexgkqC8%{fa!%4sD*o6`yO~kuMs=-wZ=$ap*}m?c$~fwd$~q7BdA#xDrMgXh;-Da1nF -55Mug@k6qz&L}BV36_r#|TEjBLt_{XCz!^pX;WUbK^^boXy*PRM`Uo>ky?piN_~na}fBZwqDI*i~b-) -@mauvrx6CCZHYtm#!HY02kf2hqVBNURj189a`PBMMNv2C93Y?Y#Hi6Ryn#iU;s~fD@7P4`3=Hsi)am?4AD^;E+*${K -V0p#lDag)q+#Pjbdj-u9fo4$S7ANaI_&=@Du1A;stKN~iE@pJTPJJ;~BRdGALF8_um3O-uqu%ReqB%X -he>Qbcp8RQ?Z_?JofwpeYjxGuumSl;T(`1l30u%?K<8su@k>CKGvVggCy+#;%r*kosh=1^Y6}%7MuO^ -RJ$Ge&U!>j}R=@w}-YESk56vw)tg>`#c`?vYQo2`2}qo?)%Jd1d}?&TE^4Q -3jT2%qF27eFw3zhYKmMlz6kII7j~Ue+@HcB>N@Y*0r2^!C_SC&UckbALv$&}@c5O;R0?8r(bV(miS=B ->=kEA&52-b>ce|PRGuGUtV!ny(9Q?3e-|#&xjAA;!DoH2^i&TJUU$FcP5%Vx_mdw}8EDc^JN5p+bQ0r3awQTlKuFKD@8{$$g2d_=y5g(G1g2_CieWUIX2YxR3Ll(F&yw3%?Y*u3gKnK40+6vRvp-s+vpM* -{{Gzupjoaicza>{WpH8^P0CF9L&^%2mdykjt!7>wy>HX(a*h?zgF+^mO#O!7i!Qw+zGNykwxWmxm26xHfTXR02^EI|ylyhxUpm{u8Rmo8FhU>69isp?DLHONOcQJi~HiM -a~*Kq@|4T%mgkSK|tKVrgB3d|+5(lC>C6xa$=xc5*hmOxCn_XN}po#j|L0kI^->iT{baehEfu5t#S_q -!IEoZSSR6%4wLe!AL>!>wT~8hxaFcA?1!Tpx~KpcY&pFPwUJ?7sV#c3#0o=YXtCq_&@+khosCQKzJYr -@BI^2tv&_Mu`g5g99v*6z)?En{G5eI2t{c?IOjbOi1(mO=5j@f7q@>{^4PSqk{|NX^u1$(iWg-Y@CI8 ->eCdu^-XkR1?X+@b+^*Pnj14!osG{@VygeqF{croR490HLhRwY*AapmYF+Bfllz=;0gK)c=Xsxr&H{| -2dBk%8pjSBLA&<+?MF@w1*X(M2+)4?O{Qk_g%U85)w4Y#jn&bhNa2b9OhmTCDMHb#lU(%9|c*k4fh;O -d>JyTxY(nUowED>4K){egRM^vi&HA6{Q%|8mlLPAIRZ -BhPhy&s#!${6m}9po^t-6a`h1t@*r7C;Y0FkkN~VanC$y8PRv2fyfCR^2zZ(m6@#MQ+6!gHfSCMigCj -ecG)`ghD9uUgS~5QQtl*Ey?@iai*L`qJIfsMsVYarnEud~wf-@nV-o6y0P}8fDj+W{)_#IfldEqW;r` -}q?0QzNlQBgXR}H`zMI*^WIhu{sii5NnYXF6Fn}c(l`oT@YZ0>)3uhplvD&t}e@Ae{10B9OursrM|^t -N4v=7^3$?be~!%9#x`T}W_mrH{$dIfpFia!N!Q`{%7th -Ty|g?WXE?C#gt_CLJ4OX9`iz@zL+L9`?#q`Dg`%ta%Y#fe>vlBNj;t#HxMtudDpgQCD-#z*)=00C{`X -JKY`g0%IL3zD(o;?~YL7LuVIx%#@4Tlr_-eTiv4M)td+^?L$#MAK*>cobD@{?ubC95 -LS-w`G;)K<@p^Wa)puld?sPBa)tD^zOc2DJRi_>9v-G10hB*a!)C6^Y`pQCG*m)_tD1KIl@$dobA-Ar -{zWzG{v<>+^?WF}i0X0dFEsyX!*e%PVZK{@2ZAczw>4J6Pp^wh~(=WrRuN&matWfCq3y^eK0G9s;`D( -ZbvNRuay$B}O -9kg8kBHi&5~f?F^+Ja=Jl=5TVUuIX8L3@uTY_qvGaB4JKr^`wKoNk%=O52y`dQEgsgzJp#;`o!9-I4y -R~ZMXi+TqDi{_?@jmQPf-0COdaQr<@R!%-j44W -uVIz2FHX0gJJ!pur3j9wE+d9h!FaY$I`t~kt7d~J+>VH}8>CXm#s&n=j#N9#2U^=BBb7U1rx?&#B_AKw0S1K6jWTNX^7MZpUVC<@nSefKW)qVF8bdf&O>#xF|k -L!nP1^*;aOqm!?%%^%MFhC*23NrdO5gv^rjc)8IRJT@ -+ja?gg#H4~G^QLj5*TX#AWSpO{r^n2Z5B&Z(rAO;B>;iaUbadF%Z -s9*MS?8niO8X0dhu>k^8< -D@h5x;IhcNA8;}`!h3oH%;P)MGY;ePL0;>lK5fC#8Il%U|Pdgc3S+LXT<`nw?9!cFQR3Z#5t$z>M_gu -yak=Sh?H9>v%pCWJxrzD*;?0nM7n+$GyBznlnfPST`7No{=-DZXu0^T-P|{ogR@PS5-bK3Os -9!hg_HMbne=j`3HA{iMY_5uXgL9XxfI|LwJcZC8!q_97P<9@_3%E79Ey5N8@TTI;9*ZRw@<-HI}847t -P(^pd7mh-9mGhRoVwwZs6kjDLOqyVhlJC~3IwNq*Iie&M9gG_Hm|7|xQe5-c9HiPW(K_kSFc+OLzoL2 -(=X?D3&~dY2OimoNwBaveHF0BJerQ$Vagbi{0v?br9e?Z&PwSpMma8V6;r;Z^7!L*EaA)grHgRgUyDp -`aZghVDYhIf(~|+v=VJZg0RKmm9i2#zN`OGo|tMmKJyLEch+}FY3kpxY0otgQ;z?KZ}NI?~YGu%4>vY -@HKPbS<da680JcjJ~ -_~AdmRsrAAQ}v7HB+cXv1&WiW6vEs?KRj_zL!DYiIbGy2H82dltEV!N^j^6^bYaRySU+di<@{jloOCx -3a!SVk~EI)0cv1BSs7u+~J^PJiwh9>(F)Bje)D2E4l$1X9Un{I+Qe%w3f=`(IMNvGsE#EH%$7!zPJJb(4Gj))}Y+NOD -=uTTTa{ReTE`bdjf@a?44XdeYQ747(`ldY*OHHrCJQKs(FfekRrMtCnplCMI?=;>x2FY2p?Uy(^Bx_9%U` -|&tXV_-_{U#I=a|0Aj6YSA~9oXw0+&)6Yb+ox-<#Al`Oza;TT41M(fLFAJPg359;rybPGyWZ+D802kzoSma&Snd#5-SbiOug^0_MM(Z@7A!GyNQy|h|JZgFSuO -(I`f<8)zHO}Jf~>psA?9%OMz`=s+QNQxvL0$rWGmUGMB$Ti9fA>OEq+jq}4?*qDemL3Znmj48TvH9Ke -ru(>j^E202CysZaXMJMic1Meki;>Ac9mN(}^C$q|Fru<5fsaj6;0n69;3CcsLotzPY(;!nI87sMjxfTK!QK9oKcgs&#QMDZn&g5T -ctQURDH;S>%=Sc-t5&~mR$c`#b+<9_cz_1@Iz}dxWO8K#%JnYjn#`r%dPEt`8e*R$uS7~5EGyBy$+(0 -vFS-CcCNM8k9^`19N&@$bc2WI8^pss~Or2e%s1`#hPCFP@gM!T#8swC=g)k$w9#!h06g}LiQ^`j5 -;3}bI{=)ZJm{OiplZ#vO77Q6O_{#?hF`7UQV&*FQlL$2y4`j)I=bUB^Fmi|<6LUpjSpNPrwXUA{T7P; -o_a4fI0UI12Cfcl-Ew|?&vrFdlD=|*oZHflmAmG|CgJ}}p6QO6vBtt1h~E`~b2uH;ikaX3)N6&;D^^^ --*pLgu_1f(o4r?^^dz>4LS{vS&JjmLKbWoFVn0IzE@b1SB$=orM99Bb|w`YLF&oP9IO -D;Uof!SRD@3xFryC$#BotGzk{EP3jY9y5nXH(-Xfd_ye$&W-HyW;CWqLi$luv2d^JgB8`bBwjzc#g?0 -cz>>99oVmFu3RK4|1ILf`d1J;r=3>fgOfw -2qF=9+jPYQj#n6lxgn``$-4<^(HRBjDtYBZumE_HDMV_hnJce~{ru2cv%e=VG_oE=mGK=!kXMKRWha -FqIFn7WfbPk>U#P_0Fq-LM|(w}|Qc)MNcoJJIntYd!nqc5S$&u}H9b*(Oo(Aro!jH54r6bMzw -+AeiI%$L(NT_e2+|zM3SqZcK{4c0XJ9COdn)vX-C&q*f_PMs^KVvY4SF7PA(a~-}j^NIL$o#uf+BGM< -Md7oKI&|FLU454d_N%;Ng?i1OO@>T5gQ)c2a}X6@k2yo~r?Hf_hp{}+@vSkRHZ0bjmCffG*FHLqn}|< -IxlP^re^5&U1QY-O00;mj6qruVcj`1~0001l0000T0001RX>c!JX>N37a&BR4FJo+JFJE72ZfSI1UoL -QYC5$l+10f6qdtR|3MIMxVzz61Hov{)4iu^uEX=g^0bAH{&pmNd4C~iSwVkbxy-Y{f5*XF&GRj3$4EO -<65jLAyDb?eG0=bX|5?~g1r(SK(lZhQ4bbzU$JNFP1}>pr^ITY04)P)h>@6aWAK2mmD%m`?EJz?)hJ0 -06@m001KZ003}la4%nJZggdGZeeUMV{B0e;tvUD+nb7B&GEe6TCK-<0YtSMXevp0~Y}2!kf2@ -P)YXp&DT$N(JGZq#Z;Uu-_BRP1PFlN@tM#^l!{h~o(cH$YnH7L6rftzC6`9e6?tpa(ql;*MLySSdb}2 -bi!sqCn&`JZsA&4K+^bI(Dx6FJ4pQqOFd_NMXduncdDSmkCi^ESD-Yz1{jDqcd>ojk(9@{<}}x#I_2KW%M?d(?Kkt=1W;=qne1ibE>~#zJ(K5o(QQB9IVI(7;|`(NR@YDWbn1^ghjOq4tE8QH);5M234luJC1PD3O -&@`_6KZYpd83LzBRzkR4J}$f@zwqz>3RAG!+TDOMQyY0>Sp>D{ -;6+ppJmciHdPUv9@SfVmmuhUR}zkyX6jW^gCTYx4qfRw(^u938h+*~rFL;Y>@{h1kl(^YIn#MzF&Y-a -=C$=o90ugu>P}zhShaC!)9H;;CR&@leq-l0jKxC)CN&ZavW=N`OqYW5*yd`z@reDUaUcFzG4E^YW9>n360J`v -i&cKsT!~<<%X7^#je$K%_H7L@BV>Z;0T+pE_Vn%*W{Q9=T$*}fKQ|*S&%*r5~v?2>T!SxM245kPP)Ir -aWk{oud+(9e%Z_6~bZsiDjpuV?ykL$HB=kHdycTcabrsvh)8}xdCO9m4RX?9bLr?iq`gMnMO?tg6$<1 -EI#3CxCku4zf7gf4C3myxa^=I5A3kdaQ68`}!rHZmysj;qcyH5o1vbEDWr&9od`?;0xD+b=W%A#7m^j -4&IPTl%^A7chDK=)8UJJ?+%Z@K`5XnGBJSTB5Lqs6X!WHpCLZrJ#&Mz3<2Uf!Fo4`Tq^c9gmWUX*@YG -!wcE4V9z1}~`w5OgI;eTxAMh-L`bu7+L!b9T9l8X_J&2yA5z<$=qvfNSZ;qk!Gv_rZ&qKh%>5e_7A$U -*T;SAl#hiA=qtIL(_9f~g&v|q@J=M{3vYsKo8hMR)UJ0*}x6W8Xv8S;vAD6~K5iO`5qzCq{F)IC)Y27 -!1K^(h|Z7`${P#1Z0)2PA|Z{{i^uyg&9`Il3m(uH<<$as=st_GP>eEzd6Pu9QAsY9xruAk#6J)R~#1C -$gNN+qME|bbq3?4SN)wE3DoUOcz|m7?bC}5RNCB1C!M3YFeo$YRKY}cp6r&d2MP&2O7%cfp%Yn*1_Zf -TaFe_Y#fJz(N1gsv4j#97TyP7ubPTNVM=a7KoE>K`ZyIj<*LoSKh5-f`~8B;6qmF~;MmiAH!=@8uHMY -zLE?Yh>2n`92A{=rI@qHmwBiL00!T%PorJ~6SG3h7_kIMbpz1K)>y_b4F41wD879jo^>K -MZ%P~j&;;vWaP5Qh1s8$t73fJq&6o3_};$<-!S-8C1YzvWUP1LWougJO8&(1>J3Oo6%d<^ribWDMO7`6w9J_Fxtv{Io?p($#pT)i#re%u^7>}+_B1(NTqgF( -)y>Jt+0_;BUjDp1|7B^{HS+t#<@L?0w`a@u$@2U&2eN<66mH2ah?qcLC -F*EF+MGjry1CPWFESro9x91aVR?9zo`cf73S>ze1;DHmp0)43`506r`?FEaM25gHDgZrB@K6d~xmOsO -Zfs0(1VNovGM?zm7j%~^35LKf^_XqHlmI#s3UZQTl-091m=3Cp;mtDMb-k8<#x1N%WH8jk18G0@hB*f -key#|jm+Q}D=K#u=*wGn;hiZi!`w(X87!l-HvC$cihKfuFxMkL;mIrs^tjPJ58vj?2{7&xWa_66Iz_3 -Ur8^|C=QhRofW^m5iqF5TeX|DKev?TI2^bWEg;8nGQuxN4!ezm_UO~(k%n0KZvUKRcEX3e!KWBIr-`A -jPxG3|_IWQPP}qV4{bkEoeu68 -9z@5#&**K)j)>y8X8jX?!4KN{d@?l~fb8S$>PU)>)i;|?EJBa7g(P*SIfOF`mT>Z{cH8u -J`Ai!Ui1ta7cYK9#*8ud5BSfE)7k}5nG>=V)Pd?rQzdxE){7kg)lVgGmV*O+01E5{Q^T~5bp34b&P9kUR(R60eP -*2ky+S+9Xza;G0+jpOLi{;uzG@OS -Rn7zXG5X?*M$6Mt=U}X5Ng}spoo58LM{GtWsw8U5rTtAdPLF# -kjF($z+vwO~qcCguZaB^m~Yh;}x_z651YL*lrAw#9~#j3^yX;UWnMhzy|Aapm&ggWk-v{ru%8J(~9#x)zz0Mo0hx6r0 -=FfW1-e9f`m3G&iV$zhiGq|2~{5Ae12C_|j=Gg1l%7G~(+=45DD?irA6z8*SH3*ehc=zw%whBMBfB`Z -I17L*;SDPwi9q1c)Yj?#h_nU@ -tmvuP=+>`ci3yjtzbLKi@zii#Kmq-ZKFQure!(cWhg>{Nx)H8r38VA#C%P`PL)2Sl|GzIo9g|R2^RZ_ -sYPsk&a5%=qFI4zkaZ3uXLl@5ih8%wm4?@o_)gT2pZnZ=Q-dQ<%e)lxjt%Gq9}KMw+34o1frW)&L -Xd%YRml<;C*emFk5C3A4}uV>_&sqbBFmo^Lo0`l_v_$9gLd5* -eA=NJ#^K|K!!58h;{>25~FH66v@#p46w;RghC!>hQ`C^#xJMUswQ(G-OppBQ@Mkkcr~q;*xDX_b@bH}tpu4KAa&SMbmYLkJ`Uhc$(L@+hdjqVo(=7 -&u^U}FcEi{8`RVyFxrUuXs{wr*>IZg*;|O#M9E`OkOlmrnA3FHvbI)Pd5WfYJ)}MeHRD#gJasldqU)w -Uz4Don?evK^-v~VRTVh!E3Y&tEX%VVj>uMksBhZK8Zrk}ZdOKFApFu7P62~glgLRujVD9HAFNS-fhPbblW9lfQqMz -+l(|~AU@XHBQ0#Yb(*1L3;UmKY2dXM?Ag)C6B{8Gw@UR)f6+HJz_0JWGqzHg|{hEc!*s9({lQTCDCzx -k&YJ+YwnIUzZdgj-n?uMO?yoW~n{T)Ps5qfA&-WkGA|0gyW+)ej(;7L+Wo=d~-vx<3W5Z;eKulJZQ2x -dY%Q`NQ)!ZWmM;DNag(}GP=daxxGgc;EzwSrs*l_oyKgi@41u|SIVrT8dg4_e=;!M0KKW1L$sOBONju -|m}Hg93EPieba>9F!tnN&UBWAbfiE`sT->uQhjTvANa*bwvXfPuB9!Y`-e0$QC%!7Imc_F@^Jr3De-E -7#H#!)8t;)=abKC9#980L?02lg?k!9?>?^qfGmPp%;yCw<-LFX5iAO!k1o;ju-LHi9Quem(~j=*$Pp7nQ%Gc7;+0x5xb4AC-z$SaBHt -4FsqMs72ls3uuu0W58|VS6E~)yZKE0znN8WwM3Fv<4F70g5jM@E>XRvZ`8V){m^S-abkKLGb2Q}EYv; -Kr=SWXOAu$*;L54VG#!4X6jyy4d~>u2O@TPs~oYc<;&$6cA#J*~RfBQ1P19n50vt#@-b)w%C-*HkVC9 -vkF;U|qn|9fLYOYezU`RpWtoZ&&diE$aQAwWE{X)mlh5-UsWdnYZF7H8YsUi8TH;Akw)>eDJf@m*QPP -90mW@{82*9F%Jn1hw2AE`aa5Aaa2GdkE7q?rD$UANqzKY*5BTnK0&{s5m_9^!)ro(-DdB$Ea-Tuu6eGvp+=p4Ne>w3qYsrFHJRQEh}rSHpIPr^ -|Jrfhw6#*231tzU7#&RqJQj|h0ptjYv0=m2H-VnR5UIX2;F)iTuCaAr+)?kv^{Hh(Z8TC1El*4eR;dF -OkuZ*Y5xxx_mcH~@&$C`$;|(=}eGb=IPm*3{QDJV1@1h4>P5G&&EzDKgY4Jf4xI?WXK?w>v(!kU(G!C ->&~}q+->#FTZOr+NB}*0WCg|S)Z!S|5lUDY{9-}^Ow}>kix1REdKu~ITRSWe*SqP!y|!U;PgQv2ecao -e(>ZzW9)D^dbaiAg#~+ILppYL)TA7YDP77^t8_*bbVVI1e$hhcN?#>*`m9Hi$oxP;@@9FuRM$DMQ;j$ -N*n64rs!S1@7+-HC)VG+;uVERiKL={zVWsLp2g+4Sz421_#edv5V$U&q0)gwnUvKBWYxzHWLI}2IB3bc*ihXw@?P~Y6fd2qcO9KQH0000803{TdPU -1+jZM_))00mtD03QGV0B~t=FJEbHbY*gGVQepBY-ulJZDen7bZKvHb1ras-8^e=%Cf?!ZDWu<1K -D4Vp%Ya#QQSX4z@)`P+AQi-xk^CT@ZC6=mEBCSPJh?$zFxw3tVJW*pYZ5#2IylDO+(!6eD-lVcoqFJi -dV38G5nPuxpe1LA1l68@bsY>$&yqApy^q4kFArt&@8p^U%`79KP%;A4ktpz}B)L^QbN2PL6%Bog%B+9 -hZ-^D`Zs*;(7*F2^P;G8$A%5nTLO|M=SZ8popW>Cr+v1h=MxGexFkwDM1ZdBet^DJ|agCFxE%Zf+98V -E5{b-Ku-!5{!K&Z}Z2;&|RRZKdK^q^q*18X>23k+qGA`S)O;pEv5Md8}kMu!w)wX*YWw;`P+;5_2u_GZEcyrOIa_K#r5X)`osG-@!PYTw--0NJ2mSPWmk84_w&`yF--6LKjP~j-oL -+m|7Lg3HZ{GzJ-d!?f4+iY2I+hYjFW+Ye+0-M?kop6J_pH^(+t$^b(%DWkHCD}sV@NB;tC&CWAUTRT2 -*(geO!|)ji__gaXp`>3m3*x+h -7vKz5oj59JgXKpgA%&I34(F)($*(Yk#5IhIPErC0D>oIsPy=#n~{evG!UmE{Pj0(aUy>GEz}}9bZ6-_ -HVPii!E6je5k|ihX+DIPQC((fGaQY$xi?P&!h~JPdrMa`$V2)Z>kgWtFHktti5Q|7+<}D{qkMcEZ(-O --Ouq5--Q$P?yOnn|q86f<{-TnG8qnZEOeO+sX1fB9(U7&A!MJR`|jLJ2*MaMsZ8yE0KYsv`_O -Rmhz6M??mQxoeW3(=M{^nY$YZw}ns=|FGChz|IBQMV;XG)M#xNVZvnO?m{ceSJ#j{s0(O;IunF`L9n6 -7@iw4Vxb!3|1ckQoiy9vm28@7=)o8Z&{5(AHOIaP_by-_>Q=#61k6tNiD9>S^wCU0=Ih}~f@U%@V+K2 -NP%;k8&Yx1^*)}Ffi15qMKE{6`O9~oJl!+E}tC$!9j67|@XeO={7^gIGl+9{NBP$@_>31@#cWMfTJsaBb9Y -#Q?@~HhY1B2%{m0$7I5dP{cXn1s2SFb -?6f)1~mqWLFu~NP^5C*ETPGR0+$JXXY;+D@#Y&jO*bEcf6vqkf?W#Q_&wNE`b#3Xj*C2713F&tH3Srg -qp|okJOOH+guk(r)-;uw!pL30xkCN=;VZVcXw^8V%28xlN;?SW*qC@=B?Vr+MmftEU!olBNe9fqQ -86pwjU$XTsp3&c`51h2&k#DxY)iWT6XG^Dy{t3*-zDuo4(T_WL=NnNTWou`S`GgvOvsAOvrG61H5ELs -p52(7Ho#1I))BREzGNP>Znj78Zh3bbh1Nm3kd2dm*rSRar|Np&WZyqLiBG%Kd$%QOU(h6zi?DT$kH(}QJ*MZma2$5{p`h -5*tT0$I|7a+0Gf8byI?&oqBLy|?f8G0v4-?gs|3I`M`)#5h9h90Df<)>7!ac1&9Z%gj_*X*8y;%`*k- -+h7xvHsr|Ghg6Et7^%>2i)Q>q_iymRf_~vWA1qZ?#-QPP1=lZO%h6kTU<%M#NQ6b43`(Gxw$q-)2lx6kQ`BLWty?u8MBj@sdVYJ2I8B -Pan@Yg*KMr6ZhZ#C2N_XaAW&H!0e@>0$c0E6H!t2L*fw_fWJ=**1|~k^-k^v$TQtoTS36*OcNl;D3o$ ->MPNt5M4&$5!1^HaH<&?hQ0GcD@o0~shPgdWkqlU>wyX_4}rnlBF!~8MnbhW*^l>+mM_@0&ll&}PTU> -4Vn#%wtEaR%&c=YmQjE3-%YQPK)Y8MzeR8bibk>Arh%EavWT*@DLl!47Oo|G)RTlY-^09^Z>FgR4P-A -g%ef{B@L7iV;-d>)ceGjqAVgc=3I28WZqbNMy5S3N2KoNrU*MQP%Vm)!hSU6`KF -z>C4{gpZ!n_2m_I-kfR&e?>zaihcrU7vMWX85hkQ%)48pwPXiobT<{#$2#HpUfy72!uQ)B~T0&-Ay^C -(sZ$alpAj3tYa^m&rWMl=%hWC%<%@UiW(i>t}F4rvU_~%fQv_D|moYmcrOiPST^`K!0#WN13KH2eIAn -d0qo6AbzUvX>CUx9HT|Q`$o%s_^1015P+xkVaa`3_eIt|VOfQEv4>e0dbU&xo)kPHgb=ulr?~G91{lWy3suieSKlTYcYU5UJ1O>wn67iM@RlO?V>a>W -aJ-l7q*Y1FE0+z>V}N@I0~?HGjX$0!Z9E%pl^M#J2S4Y(erd*~@iSgXXNi{FgtGKa-ypE6&#qzP|uB? -64Ci{xJMln~9$$-;18snOaVGu`?=En^*DVPILqkA-^LuX|^L8?kL8?*U&ClyE^AV&RL4`(i@fJ)-Qu< -5N_@-@rOz?v#N7k6y!QY!8P0?2?lbrx!Yb$WJ=+|H63K$0hAM;wEKQDLGp+{LbJ{COqJT2MoJ>3)8_v -$9cQOap6DXyzaspWiiE%NBo%LhYUZu@R??J&a>W5YWKnl?*<~QsIRrK@oS#8+%oa{q`$fhhV|$%ZIb0 -!4AT)MYT(=BC@t~tbR?5|+`|~k(UeTo*ko=7iK-5%B{uQI%6ZV2Av;CH+B2!viDk6g)xg60OibH+mZ{ -@xNRp)>!tpT(Q_C%QcMuM!0H!;SozTtA_ktk{gp9cWm>tA#0uwkHcnt^vDA6oAO^OD`HLYcpJ|I2r6( -!&3y#ooI&(*~{!CAZGXhl1*aa(2kDV4IRrPdQ@%|FX^nes1(b{1lv(LY>&-y&=n=J#1+VHFLeHoPQr>r+DvDSwj{#Xao}HDUrQfqXW}()_+=3Su@8Z2FNQ1xXEphzZ1VeQG$Fvyyk%Y=}}f%5 -$Z~N}MmLEJT-c&@ePjplYRY3b|M|tBg$L80A3M8PPI?X|_d_WR)yo)m=w|V6xT{Na%&2PF}vGk+9k+1 -cB;Qx}Ogh0S$@_qcII=6Zt!~030yz)D=Hu4M<9jxyxk%3*Kik2gF;0nIM>;$C$t!qYgHB6EJUrO+Ex~ -Kiu5DKYMo(9HZs$WOdJ_RyYvtuJFKPp&k^{qi7dPkv3vh0EI9)zLXD2Jje{pWS_1`%zQ20-rio_^oiz -dcRXL96Bg(W)`mbk!~AZEMzQLPba-wCFljBbdxN60NRepn&JMzeoXy{myqd0~aI;4%K!b_^O$yQ_o*U -OcpL&&-B}QNyk9xpUH16)qQG4!Zj>n+qhrF>Yk~`}e~KU97>nu)pYu#QZE@Q=1?N-r#nr=oJKT{aIw -{BzpBd{%{d;$!J%+l(?RYA*SMOU|XgKe`6|>qu#r!=}dVnwWN=YN;+GJLMvgkv8P*!qU-y5w4t6}MMb -1hUbV>ISUn|K3sdSeUL$OVi|pK-XBh06r=Gbn1aTVtKO~7e{cVKuNYcs1Arst_${nRJ^k=lsW(Q7PLN -L~`ln)#pn;;5nM5YkSJE4+!bh;tmW6mH1z?dzel|RNtwx_Ul1-fQJFCieFJ!gMrOZ#94xs<+afDA6(b5CAOaF5=eA2J@m$cOEs_?=84z5aMN`o1)fl-HsGz?H4>Kr()v8X ->IESj=SXWTpM4`r)`G)T@;bl96=N -sk6yIuD)IlK>^fyQe~k2c>iUPsuddhnzbd~y^!|MLy)pudO?r7Ff~GafFL2|NF585*C!~F7yM)%3Djn -D`)6M)nGyh>1l=d6<6Q&%Z1|Km0fwG~CVY{L`rrRq6=o>G=CrlFD3P4wHHK*TIn^P9GUc-_UrhC+;?Z -7YJJVX$$#Lg#+2WNvg+ulB#L^?t0QO7M7G?RIyzkEY^5GoDlnlxOoH!MHC5e-ZP%0%=^5Lanlbg;Ea1 -ib^3`b$qQ0@G@!q6LJ&Uxp*I60;Z}8^MSqOVUKIH;+`Qhnjf{=AOsUU?YK}dgyrl^{8L{O%E%xy70z6 -Ryh1p$pgaSH}-Sn+g@4W*wOKi6b^qLul(QNKx{??D@$B<{j$c-1iyPg(D;RE8SWJ(BR@N3vxkZmBk== -F3G^gHxd63J)V?W9}qmd8eQvRhy69ffm>+I)xN%+WLLFWwd{si$1)JZEnLg1>ezs5cl^X~Yy{QIsd -}Sq$*FD>p1K0z>;+h<2(AdCD6$!R_CjY-0I`7ZkMP+KngZ*$6NrQqCOr-m8c{n;n|KvPws)^mws#=Z6 -ZW8Mt_xsr+N|mbPRwK@F%$9%a~4OHxR}MBMJG0asJjB*zWOzphpVbcu-r>>D@@irq%$?6)CwZUwUmYo -M##8qobrQMoYx(Ei$0iiA!Bj~j*H6+I-$aN$ZFA2!7%9&xE!<$eC))71EXV|5Fm{8-Y}4clyJ#8?!Um -)L1Pl8wGQzxtxk1V6zkg2Ag&f~i$?__WNJnli<0)c5ZF!(G7dyMKVGGag~GZ}GCNb;Yt~Si=J%?E6$lppsk;Ng~v|9!`1PmOG@>cuGxHUtnOd&1=d&@k0U+F`vw>ykc&bfF$kla{a+<&kB74m@nw` -hG5kMCo9T#)RB&kQV`lG!)l&#=sUmB7bHYRwZd21S93ZM|uMQiv{{j+FPw9uWvG}>Z(Q&Dn<)yphpYJ -ktMC{HfM@_{RK~LfDCcoi07o)T8P`K)prmKL6!5d=D)itUcNjufk03d(%@BI -okmj6#!%*bN(TNq-(Lp(pc^)THL-QG|X+8 -=UPC^~jRPxDX%+8Pr(AUA?yFB~?G-vqkP4{=Q}f`RUi5EtpAo+K3l20D;~Wl{`s1ej8+8ypkt^4%jq% -QM~TQQAq)i>gn8Zp8>Jp8_gty=>M=ZJgBxHe07)0cl1D-Z+8aBa2*ts@YB%7|fP+=9rQ0V9hNC2Zp!9 -I%8Ten`4`jw=TXn;)nk}EjH&XTbRWkkZO<6d%PiR4kLC;n;!!@n$iV<-ot%1wHw>BrCtAHgQQ-vDMYr -hefvAflr^7Q56ioDZipGGK4EP7EmI4btUdnV1^Re-v-_|XtwN_Ox@$9yl-U6`~&zK0=EkoAgEQrgrlI&xC`j4P{R3}whHu -dStwys`Mty35VBbU`_d`V*ksGUg#MvSZWN-Acu`(RrY{1u2%?jG0E2G -8M<>wl{iv+)BZ}ZRUU=cz3dRa^QpconoMCg&ex=lLb!(XqR5iO(bdLM9ap}>q82#k2t)H&3@-%kB4f@ -&2ayy>|$9RI7E(V-)EzEnN!INrl2A42TW_OD$o^k>;rYBXC%H|8%SQpJixmLs0cG5$y7DqJX74}|CN^e1?@jMWx -yRK)WP3bav&YGBz)e9yLhFlg^KZB#Xqsa3@ZkyG}o+IVEIMssz7Fo;$)UC6xOZl^U1n$9-nbmG&866= -;#g`HOgMlb#_xuR3ap*u!x*{%P{8l!!*7@vWvmDy#>zw`WvvG-}clwW@RuP1Vv%oOlF6rXK}q?tW36k{?LRKM! -oueoy;8WF-7dsm=TtC}?KGfu*MR_`8vXr&Dmf)C((Gb}G@Lj_0gYpDsO6e&I?HkChO2ixD5LPA%ueGO!j -UnqqqqFV9!bRO9$eGI8uAJLh*gk-lb3w*z%^oy~y)dCOlo*c_Knx6QDsFBHN(!M07Xb(d|-Qs=~X -Sse8P6w^8>_-&Wy0@NdtfJ6XD)S+VGTn7bvsY{}Ew9hz=2=pN|f``v>b=ij>q-obDOkaN(=DWp`D`>Q -)l?ABW9jT>(o^wg;y*cEm8o$wYPe)4hfTPGU+jkD&c?+$kRhii{ux;;SZ(#Shm+GEhnC1-bX@G#>415 -ir?1QY-O00;mj6qrtQDQyFr1ONcK3jhEh0001RX>c!JX>N37a&BR4FJo+JFKuCIZeMU=a&u*JE^v8`R -&8(FHW2=p- -W&q5oiTE<3M!DMTNZh2iCY8f;SO{qGIn&uhBVu&8}(+Kc)soJBg{&a@#ojivRUCHSXzlkI7Yir(!x_h -m3!!0_?qwK7I)iii!v-BQzSt$=The}vxWFu>?SrGZ%9#>il^Nf4(a1g`cLV(M`{*~5BpR?$#tWD8Ka| -jj`r_-u>UfVu))Gn|8$H(^{+2xy8mv7l$AFi*ju7Ag-9nWlU+*zI1rH7lot3?j)q_I&HF~;kfF}Q$je -9(eh!3Y#=XiJYNbreXa_$u=GH47+GUXGs}5N{qoWghWxq{=ZYt7TI`ez(5I6#>xyJ#An()+FO*YOqRe3rdTsR$> -+)DL_fjdcJt%T$BR7Buz3zLm1u?LH3X_5Deh5E4dyYCP|@%^;aklrt@eV_hOnDS+z=w;Axn!z*bP>ywViYNR+}Hv~+pQ8EqmgbiE+3bU4M#js`wS -cJM7eR_h;rHrN%{6q&=P%tfI$z%-wD-z~tm@QGuW3_zOg`{E2k9VK1 -=0fB-O&hn92IJ}Kr$-47BUT9-@L&Rgd({>8|>kFZDk`=Z!dmIa!4fJ`j{WRuGc-Dmfo(euW -pp8O|lEt0r5Vur6csTn}=bP3#t4c=O>=?$pf~?LuY8dtF`NV=+b)aN8YXRb~|wv7-2IK2+@SGC1zdRY -iUKg`(<7)fe4lZzB$RKe| -uSGkFGZKEEO(zT`JB@NaKLXthQ$*kcQ8Xo^1@>T`NfZ(u<&^m}`opKvluXqNGjhzyr&Ahy_+;qUn9A` -@-x3jyZXsTom`Ep>>_!V}It7_xdOrp4I)PM?H2iTd;8FF^2;SP!mouBi)?8xk=O1Qi0&DOrg&wo%I>C -Xa%DLgamv~q8_N0_!6`jsd#qDOd*e@VzUrviMH95M1iE%>jwGXJHv-WO4`R=jUch8;c(vb8#>G7@^4fzB3jKwLs}{olSDDywaevlv6G@E -dA{p(Ct02oUbjMOLbpm(oo2axUM$>tCH8yX?END!H4Oc;Iw}8EvwMA%w6!OcT(j5SYTpZ4Qw_XQZ}IFyQ!+Tbj9#xc3j!Z->}%5EZqDS(iUF@XCbt5@-~i-g=jriV@5Bt_!R#;D4 -q}2gT<3YJShZV|AE?|b_~(b)BYtxS;pfcqY=z>+igl+n*)l>azHeAbj$9vlZkag=PE;BAsgT@6WzWkp -zfNj;pCi}Yb4_l*W6NVWqXsw*v#LI0 -EE4Rxo237=Tb+RG&Hp}OC+Q&6X$X{NlpA+~3e}eNK*cKkRCiNYayINoNOwbpsy)?WAaWEA8_s>=|N+7 -yxdJfbSk^wwhK~fX3^QFZdNN7`%nrR9rscg}++2FR?5pM{A0#q^Fo~nbZC2L5FW{=-iYr?YqhNQ{)4n -;dZx5|OOBYsYyjX%q*DFD%K#8T9Kd0#S93!6P+zmz!)p -b)ljLjj1(|Qi3k9lx!LF*H+%#H>iU -{akAwAIo>=CLRyo?=)UZx7_wlv4u?jxa|)RZ^LD2DM<(JiacDsQmXHKj@-5>_ep$fmc09Pz$0qD0L|D -T=;I9#Bv0B%D^>-OxuIU6bgDL8$&^mVt7B-e1 -Vfl2#h2b)eyD7iqg@Uy7@thj}#347A=5v5#>hPf^jDwuD98jH$Z~O49(6*%0sJ82~r`uP*Ps+%?R!Fq -++Pw%wh1jrU*x~G3sC1?tAzn0Jcw=^Fs;#)T(RVYh1k10@($?sn;{a~Iv?UABfNqL7u{&9fX2!A>}9Q4CtS~>xs)&dJg*nJB*fz=(})@#7A(1LuO#U=C0Y^&73Jp~o4RUb!8i5gldoS?d1j{^kXFdc5!TCYCvh`e(kI)!mF9$?fZgujkRao#czc?w@Phj20# -O*z4-4R-Qm{P)3P%sEa#2X%}?xpBj$DNn=k4+n3%@1ZT6fR=9|AM;-Kt4+L9Hz&96v@JFXU_1ohL&Y~ -_B@L3Z5-07tQBF&n;~#$%BW(Nrs%~i+tt6eQnWyS>aF9rVHo8Qe#SDf4Sr#$t_R>i_=c4Ld{0f^ -74xl^fLaRuV`4^LjJnGNu(rCR07fB}YNLXhd;5WH!}Z;u!CPXOgPvG@d4@A75r154ni?zj{Uj*-wH0ef<~g?E2!DmK=_fga3jUz)H4lPf!4a&_1mYba{`rSi&yDwO)# -}fY&sm*;14t78jAJ78i(dqIvG)qGxilT#BU6QghgJBc}2!59U6@W_&4b%yP8amuh;h>F|2tt;CwaYx> -lXJ~#HO|+w*iEKNDYTNpyn;H`HI5qr%-Mh&$Q3@DZZlwa1PhXv%pQ%sdAYB|mR1lXy?+55Z6J_0%V07 -+BcB9-4Qx-YO2E0$#7e%~!Ku*QZ9WGvRt(y}LEn(`2Buw84NO#HRf**J9#ss_!8@}rAl6)&wbKZIpAo -)qObf1CeIh0tR73%d5j!EgnL**^8Vy?Aw%ezZxA<9pK=u>oqbCqDCKyLtC(53TZPy5rE!VT`0v#vsSC -bWle7xz{B91T1!{m%9#63%gtd?*(xmb;@;0UK~nA#@nh6_G++wT;ul8!r3fh -&gV~=}!rTq;Xu#2{={cWMuL?gLIrjKI^^*#EtVyfcz|4=zE2^sI);x%ndKnxJui1iJ_vwOV=?n@>bwm -=*L=D48|!|;8b@2`U=AhH7=kGQ?w%9Vnfpo3$aPb6q}`54Y#n?6R)9e)g6{~ynkyecJC!7c;(HqAZsD -NocxzVwKR3o!NDmGM8-K@k(ubz0j@a%w9L>uI;tGTN)}m+5_IZUyvuy5R!(X_a(Ln&}bn!L;Q84xt*w)Vn{PLHctL$ -2-H8w4Prhs1ybgnFcn?q>+dK+poe0DQv-ULfEYF)Q3fL^dt~PEQbRIvC(*zTgbEd9+W~Gyza0S*~Tr@ -UqoD?GSh1VgNTywuXJgAb#e4@F-8PK9Ww{L{}{O63kHwBsAvfS!1Awhf^Fn1c}W*O`=BaO -whGke?%*!AuEoYo<6?~G6Zi^pc*bL^YByF_1!pKv-FX>6SIS$_I5>z0;(IClXIL~ZplUVXJ~H+ddEd4GIpF@BVt05_`BE9x)cbU3~BFM -3xg5F9FMATAFELcS6MgD>2$Q4i$%rcVg;gBWAawh%b#~nC=%ZUzrlfC}_6I?6r7mdeH!Q|6j4EA~#*l -B;eL66dGk2ZG23${{c`-0|XQR000O8B@~!W+pKr?eEbYEXCaCwbYO>f&U488kT2)<4ArI+p|WI1GSY0=e;@VbuLYQW -a3qTFnS3Ob#bS{>(&CNoffQ00$^;X8LOCZ5YtU5JRFpbdpkJkAP4c{IO{*Z!39B2a456=D^437^_lfs -Ibe1z=KncpT$YU1`2g9U@@J(mgc&Gp1MaA~5qGO7IaSlrp2)Ew6RSYVE2AI2ib}V_Bk5npp -OTD4*An=BI+EhHH_=boEker0rd6d@g?8f-E2PR-<}^H?jJrS39HVSuM>igV;wWtDz3=Wse#^O5-w-iE -7g#PxCgW4V~zRbQk9^{nrt1_SjLsJO=iIxr&>Fo9Qb~nxCdgRSKS`35P?0^DT(@|l80e)tf^z+ -&T1b6`@hW{`z)MXu)(A?nj8(H=SVdamNlqy-EvBP0dj&fJ?4CgD3GGwVB{NWK3^lj3u@m%il*wumbm| -CzYdA|a!e-98Onnemg;BhD!Kv0xmq5@{o@~BkdB#7BSq{}>HRDwEDOg-D-e#Z{p{ZS>xa=)Vu|mxr!(r*ZwCAhi}!2^?-sHBuuD5PcrTza@6aWAK2mmD%m`;7SnRnv>005Q+0018 -V003}la4%nJZggdGZeeUMV{dJ3VQyq|FJowBV{0yOd972yYTPgoz3VH6g|IdllU@rwzL1L$Q4v;hgBx`bbo$}{J_0z4xj4aqB7n#rPTYYlA -q=3$Tw#v)FGMM&H=7wzI_EL?H`RL!s-vL{LN+AuR8-|MZV|J{`}k7_v@6aWAK2mmD%m`?f@3If#w0040d001Na003}la4%nJZggdGZeeUMV{dJ3VQyq| -FJo_QaBO9CX>V>WaCxm(+iu%95PjEI47?5`W-Vd!YQPU^>IH&r*M^hDqG$p_ktl~--AYnP?ZE%OLsGJ -CZhArWB8oF}X6DRr#6%PsP?}V#5{y#dSy>1L;e#yFN-=7`9jD%xJJ~E1`=XvjSUOIkF-l$rl;?_xJWP -Wq<-tQJ8I6i83-h?ay|SODOe)1w8Dv~Wjq;W$T8d)pIBza*mh@`%e*JEFd%gM_7BHDioZmD8oO$w*r7 -4kszRHv-UgRKEC=^N}!AnKtE1C?W(O^ysPj9X^*X!FGbo1f>J}##6=+2E(s2_@mw8inrQSx$J=|{tEm -g{#P79LDJ^GW|*ZQkB2CexSp>*M+TVFGt|J=?)!w6C=KV%o01VYI$p)60KuR}Fp3#RW_+fIu7Y;kc^v -Vc-`Kvm~ri1^%DIT#-m!79x!uk}|U_?MEafRUR3OAwrjP*b7xMEMWSjLj`#CkxY56>r9 -}7J2J5y=AB|73)Q0r%T>s82|fqkAAlaM9OOg6CV1Wy%#If^p2Au!%a}umUZ*KI -Gj3*d9+pn0O}`Bopkc6V*64juWM!lzNQSMXLvzSHH=;QNIM7H6;_!Oh8q@1A|Jk7?PshZtEX370$zq; -p}l+k!$v4g(hOBMI-draIH1p<^_&;!9G_U-%l)mLZn+!F~`X9ykk4@oGVH_$&{FRHw5d#jACs~fn}_;^0oIC-#l)gv24QY2=3%kgA^$)Y>4&4zCJ@i -im(#CEcCe=w?b#MU9eO+czeB01_l7q?^ybfO9KQH0000803{TdP8q- -EpY8|%08}3U04D$d0B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WV{dL|X=inEVRUJ4ZZ2?ny%}9^qe$}IzoL -)P$gsj_viEe>a?)dN0T4wiZ!IDcD -uaXO>+6S;`)iV>zY*=<$N;Pvg$zUypEE*Y$z+!BFc(9TBn>QS#>z1<%TGQt3PJLEjm@H^ThV2|Bof)=BU#M*QbEZvHCev*{ -wfhI{XnM|@G<=j@1vW>6q!F)pC@;vYNv`lxDpzH-fWA2J-4Ud-Iqlo~=YuT=q+4;PGTjac%lUw*D&7P -7pYw{ztX%N3+M97N}s5HWBn&sP^Zi0>w-Q+-M0lxywrXY~=64(@QU`34vdYF?>R3aVIq6Ho}ud*DqOr -G*)Pf$G_JV*GYg2$CuAa(0)DIo6gc8O+(bh9O8RZ>!I$!ykg%0jp+b)sfxGjto0GD>QoL^mNxiSnvm0 -VTYt$^$JMr}UfvWeB+~!L8u0(lu_N726a01{UEF`3x)UDd!Y+EDCa{HlTLx?EAE?X$j;6ep87XvM+aB -KX>FdbepzC6KUU(qN5VPC8v_xsd(3NbgEbYY3%pt!({afQk_*IEdTx>Jm&()YBrPRCcnu0tWKLfEa1P -%1!V9H+w^WQuE2=x2X0{D9X-`f6TF4MV9zM`+rmoWfnG@h86an+4H;6h?Ln0Hy|BLM)wZ`NR@TeikVUvK^JW4m>0Ra6D0IwA2pLs(MvnP!~RaTc6kdg;EeGl2Ypo~Kjez92busnKmNgAIMQJ=W2LJx -DEhN_^LLjg!+?i~O^HPmp}RbmMnK=2-dD+syg08Z3E4JrO4R+)Y6Rrij3q|n?R@{%e~>6TP_MRj0y#{ -25SgLnr9(`uPpTgxUmqS(g!-X9dYA!rCCVdB5M23Q54Ms6#1h`b1IX)|^(FC<>{XO)9(pvk5iU+)$K! -3lT3i_xZKr5s#(5!LRomcT9i(>~Akj*#V|Cj_q7*fFF~XAE?>AQC9_+t{K#?J4$hsySBU7ndE~Gfo5@ -X2YI`dP~7I!P|jNVYOtVITJBGR#E4!B`8^XLF_A0!8|MBPNDRfP`gB^-0|U*7UfXZO=8eg6MDwNG*UW -!iyhvPTaXeWy`)dJqR+QJRy$=YBIi|sNhns@i1dpDlnxDbr`EW8GV;giT_Xhd1Cw{D58;PkO4XP{gH9 -RjqhdmjS5-OF4tvJt8e}C=9(*eUt*+(|{~x=kw|dU+yWW8d4$@@rcSf>&ht@h$Jiws4G1>f0{ZE@SOoy&Y9TCq> -3!4KqTSH}TXbOsOaNfN_L#X176?gSWp9xe60{2i2`VeR~;`7ojAGg}I>8H_r7ZNK*Gq88mq!A!uY?2}e=q}M6a=a@a#Szi_ -`v-ja8`)C+*ZE#p2zPQY|@i7M9}T$1^zKM&V7RP3bTT~}=(`;1LL5!E%TYKEuEGKqQyQ=^8i|1=Y2dzw -8aSy~kSN)3CGmvK*LU|j<|-F%V%PBnU$O1P&^-Ig6)JZkQa#qpWocOLTcI3WcC4|RcUv0-%2^ZrSTnu_DVL;6TTa7L|JX;;a^L6-0KP!Ze18lbB!Qf;xx;3hHC%2-2$kCDH`q -_ov_;5%>}#~H>a*sU$;x0+_C9LIJjiCTSmja;V}z7lm#yq8xs)1Y31!J&m#YZ-PQjQpTeRB+C|z<*%3 -6Q>KL9&q*RaX~f!4LdqwTbx##ef_`DU>Um8wk@ENGMwxC*;X4dBBI`6mk&hIoCb}-cPqUx4kSlj1#12 -%b{6^@;+a`!93b~4o*#ES+8dEC1x>*K(3j))y=IS}aj=tGw>wu451b@emg1{(2NQ!_bE7^e%Bix;Dub -!Zl}rtr7_*YfsK6@bFGsGEX1BrZKFpKn@E&#+&={)T-c6=kUTLg{0Wo=$|GyGbSZ5vh4OyF-pB+%S{{ ->J>0|XQR000O8B@~!W>aZw&{RRL4-x&Y^A^-pYaA|NaUukZ1WpZv|Y%gPPZEaz0WOFZMZ+C8NZ((FEa -Cx0r-H+Qg41dpGA*3kc6p6Pz3JUzYv#Bju0Cv7DY4;4ZO6QWQUa -B$aD*WSr-ck>;$F9OjTB@(o7J ->J7IvQ>Ub1o)^Ys>-)pJi2&H}Btc18#1zI@SaiyUW8Up;En-v`rpy7Lf;|tgcV*2A&i}VR}fbqUr2{W -TTpFREDW017AvM_Nj3ovJ6;n-X90O=F2ggtO|DsS-~rAa$3C=EF_lX}BSrH`VJ|ALb;&5xT_#L>yP$L -9}t#?&f(UMwgE@cc;^4DlZ9C-*Mmyc9{P+7WtkUWmo`lu9=-+=*sVMrDtUaoP -D*~la{!v+AM%6k6CUkm`&qU_v(3VUTMln-YWH`gJ_AsQHGxyR{5Kl%pgpx+6ycwkQQ2fAw2t*;tYYlEi6_Z=ByuW|c5duWsOk-ZI?@*R6<{jz -nI-}dxz98XBv>VdH4*#Ae++vn8y{(E>q-*)Q%_9RaSW!$P}OHL0thU)|ga5Y~7<>7JE+^V8W#{9Mt==0(1;#5&{dxA-Ct~A|bwU&cWN4RrT|-azia{o=*cH@tfGJlNy -CS4KGqM?~hdMEg1NN2rp)Q8MZrHBIX5|2Er%q59PoB!%`(X>tQk6m1&*8eTRLrq*+H*Y8xzmW8`0(g? -H)r8cyBm0FxaNd}*&cf~JOTVj$e*f&LH6`T*tPPRG?pVOS}ju-rtPv9B3>PE4S9kSS4`~*#<8LA=!#- -JV)a1;`G+$=6r%F>zf2E5qC81^XhO4vY=dy`ABqXX+IK^{WD*Z>#sow7O2Vi%WLpoO+Rh3Ju++v!rLwGdQCHb%U>UVy>!BboLsEfp>B -5A@E0TCUaz-Q4_1)-f&3G7}gf4OH8M}@?%X`fCzWA}#YqKI{C8975>!tM;rE$8D0vTI|#qG`xL9pIAW --Q^&AxKY}y-o+fgk{*b;H(7Ylo-rNLXj+PPVQtP;@~{pq_i75$q)@>AtX%-YPFBq$DHASn&M=QdJrNu -nNnwJ!_KNk(4;A^oD@ZrE5o*bu)GlacsULx`ivYiCRk>~hp%%YFecYMncxs3KML^i{Fg2|k{gyM! -Z0i5{JykSq6^U1QqnW0(SroDCV7NbqPNd+Ou;)#Z3B^-~##-}v?u4>NmNnD`m_5*M{MlZ}g-pJBgrzD&9ww?Zy?LF7%>X8JTnchGdh+ -BB>Y+H)fjM}8OBl}!*QGZ4KJgUxII4v~(BR(G_|H0_<`#N!Mp=6@OE*j2@-}*`bb`AKdM -Hd5w>;snZk#C$Dkj;1}T|d5>f5vDvvWj5`7Nf0J{tT03ZMW0B~t=FJEbHbY*gGVQ -epBZ*6U1Ze(*WW^!d^dSxzfd8JoPkJ~m7z3W#H1_H@jS?Sq;PMd5|v_OisX%A^Y(9%d|O_3}~t=BE`- -#a8FTe1}-yAfc^9L@*do8gddjOqxbP49XGloH-)WgKBUt3>aB#&MDia(l8#(s&!qbwRmwU?dYo#i~7w -#((Ys#J!g+stR80m<3v?u4A$ut?uJ+$)r;?2wODDbj+chbViBM?jcC;qj1SuX)w%jCDDTc`1icdI9f9 -49mjaMK+W8!ZCx$+j_N~;6uf!+2mR%zAATbx`7cG=G$*MA*K4Pguzpl?>kQu^hkkVQl%$`MB&h_mmOO -;e1LSOYueS-oXSG^|_q*Qd9>YuPm=I7C&8h=y!J>#5_^0OvI*`tiNKBCgv$Ga6Km@J=Ezy9H3Q6CfH; -|S){s_b(ESyxP22;#JOV$BGOCv*Rko6Y5qHxq9#Nn$=g30LJTETOOZWbokcI%3 -ZC5d^=quX0+Rs7ta5TITSxdcG+57Eaz|-qK{PqJW2UwEx;q>PisLe|F0xr7a^elv#o2ypnOrPUsi?Y| -B63@>I{ZKiva^PN(v9(%-)ts0(|o25+!Ro-uzGOa<@H`Wd7g)2XNoXb0K?2(x=ZMc9dn>`3 -!uHIW94)<%wyibK6v{(|?NkIoBY*8GnW{$$M@>@7)Vtq@}f($!NwnT-*7v%RnwN^tpsLk?@AgdLy_zT+|AQk -P0kPQ7a;q8_H%8eKZiK&22Mz2_+jWIkU*c!o;^z@lJ}@oRg!<^l~_*hGR4*{>+)2Q&+d1a(>}KW0$SHe|%kN4fh -QiZ)N4=LY56t;)RXY+~ijQCaLjBFN5dF-RCmTo49B7^ls%#Z9C)CyD55IGY6LfxNtX^9gZG0hO2qy=E -_zZx>SfuetboU!3DzPh89@6aWAK2mmD%m`?eE!dct`005B&0015U003}la4%nJZggdGZeeU -MV{dJ3VQyq|FKA(NXfAMheN;_voG=i*^DC@KD!$(RHaR&s*yHPFKuOcVE{MArv6CUf8Vh&yGz -oP1K{zS@w_+V>5Lu;W1V;20AoaqlQxdkLJ#Y)G(c{QfyPWcVUcTmH9e3WMQww%+x!&(@_y2P6PDo2bekbsUtFO2FPxsgC=IZXIB6s)u+bTI=2qxcoDqgUb=eS$t%bJa;kG|j=7DFi -GqJF<*9tet5mtvITZ<&IIErL -h|(@vcdO*iPn`^2Q5KuAz!`&sp#@{g72W_&FqP)Rap$B)y`(^owj-+32AkB)m*_<%^R-9noi6f?-F;W -{m8j@a}6MIC3zekSae!ndNwPMpU`@TAMNj#ENUpi->d9P* -NIyWGbU+Zd-_hCEg9RGbc8sTD_Jkn3zf7Aao2mM=u3ermacA_C_~sa|n+fZucWMVb8tP)h>@6aWAK2m -mD%m`;IRL>biq002S+0015U003}la4%nJZggdGZeeUMV{dJ3VQyq|FKA_Ka4v9pbyH1m+b|5h`&SSd0 -y{uv>^v;H1O>Wtwo_0DicQ;EZAl}grvCSnKjg+is*6F9@A2u8uE=yCMCF|)6arLd4LOh(Hm!FkrZ`Ee -q0TCs3#A>BmTg|ND!)iZQJAiix{TQ46n+L_C!Oa2Dv=}P^yhedI-MRt@V!9ml+k?0|3qXcNs^+K%=T{8pk)d;+=uM18sS3A;8l7O(sa8^)5+@6vqy -B?@IA0(Q^y4d1xGL9xHlqko3{3#HSi+^BGz1aK36Wb#j6rg?TX7X#DQ0H}hV!?Vf!{S4HNq7^V<3#CE -%0gN@JpBYK2CY9k}&M5UUp{5sp_MtHV%|t+p%V;J%+V8JhUi_JiBCt>9`JvbL#c0HrIt7He24LuwB}} -tWZJM*lgW@=F6qE7c!JX>N37a&BR4FJo_QZDD -R?b1!Lbb97;BY%Xwl%{={&+cvVl?_a^^Ah6upYIAsp2Lx4tbhAYR^zIhf&Gm=vLML0at&1!#pq@o~EqW?dzsx*;3SH*YZ^UzPeJ+dDB$2{!!MOO -;K(1&w9_BtgRdKTj+0M+qFe`wZ^gPeY?*Z!SzUYA8v2o-`w4$zuf$KdnNnqi+!9v@hYzy-EIGIlQvw` -U9;lC?p9PSZ>p?}SJ`T7u>Q8?yu8LI-mYb#JFa#)P*l{F2y~2>nc(TF-tDp~*HG{Ir>wovRF4w -}I|Jie7JjSoS?KY1YTcspmBfK36q1lse-O94E`|I@a~Rv&reL3S@&{J^kIo-CT_r?)GyI9?Ye7YEVuo -y)9!)^5}KxjF{BE5yoG3|q6>53jaM9u-2YM -Kx5?SK=K|((iGgoZ%{SBTQ>(E*fXv{XF-yB!VIs_asaCnZ9-xo{#SYyrD>Jzz!J@_uC8*vW`#%zQ9rk -6_L^ojnM~;Kdk(g%V$iGI0#f*g$)Wckwrm5!5zGL`4rtpPBrg0YN+m3N!K(UG_L}|tpWnZdyr#v;-cc -`FU_EFfN%%P{1;4top4>MbR})#{i=a3RikSj0PZ=B_IHEku)HhM{#GYTu#J<6(XhiJvN?qKF}{t7P-07cDSXYMEfqd|H+O3IDX)rtUUd*48WoV~s1$f>i7y;k4UY@Ypm4_<b)T63u4kf`L0Hz*j0Rg91Mi_M%H5z#YWi=XU3L(Pqn%pBllja??dSox{J27Ff -*TyVD9Tdz(yU6M8;_<{fXdr>se)<0g=Q)|GAY*Sg|v%a)h>WTZE+a$yDk0Em8!+0+4$bpCYEIKjxnHv -3!vH14(F8J8ItA^sV>c(O2PPQF{$X!#MZ7o8gE1B79VMYrEHS&G -(hWP1B2Ba+f$Y%ly(NY)L~0xZy^$TrML58o#U^7JPBi;tc7NDIXi%01_CMcIv{-&O$6fE`o7>yBZ|>i -`{QY+|4*cgs^_z?)Viw(TZqt?5tIlwp$ibP%AMS46r$4>9yYXVfZtD&w0_zO}k=f*;6~3tIuOWgp`u0 -8MSS=t8=_X+k;fYJ_0jrXg6uNy-PpTbD0>Z-1|YT|1#*q+wTf1GwF0MG{Satm5VH@Fn$QCMk(O@` -X!vqx@43uS56~TBVjAou)pA-_j -2KDm((W>^*M8qzt`Z*@lL@qR+#%Brchp^YfAnxiH${ov!SZhB}=&- -*<$C1lB8~nRaBji3XJz}Dl1il@B9#v7Wnq)tKnhWpmpZHH+{onDWh1(9XU|n-+tu$2hLi^k -HsJYMGg&NF^==PA&%~<%lU@TR9zB})fwdLKJeSY8xRy}buT_a43cV;5b7(o9_*hskoD=x0=S+*7(hKG -#sedcY+Uoyc63Wn531rmbb(V_Pc9E0e;TyoBLm!sej4L&C% -DtGiOR7ry*3A%vq+RmreZ<=5Fuj=gW9tn~ExH4i_wS++Z(P(#lu**Jjg(uxKb+>o5$g!-5f%*)S^yNCH)AYtGK&u_iGjCdV!0+c4b+b#rG&5#>z -O(5nmFiS<&l%<|tz@U2M08GwHBg@{MQ~n&7CM$s&5p -pS`D4}iYa-i>)VKSh4$&c#K#-n)Fw=Cd_F{*&25?b3pf4{J%FU1sRU%(Q_YQD-|b!xpM0eNVBFAsM9P -#$vOB#=&8ud+%BJa@L_+

|XoD4)na*Q5bHcgDw5pJP44n!fBV;Ns3)-9hD1^ORgYn|4PM(<-d$shs -yq@EU8{1`A#Zd)OVb7^xi(lBf%r^04teyB7i~qz9=>-}&YWN{~$0d&unFy;oaz5AzgToo!#u_wS5sAG -#=1gv($~3xMp)n0}J$p+}CRnr<=HnKA`nAyw?9B3ZAN%<(SBNU-;kt$|A%z|7hCZ2$9<{!C;YWsE^}Y -kc$J4<~{S))BL`Gg#ASO+=sUh@F(~OVxLUY>+dApBQ4L_=gw{fMS3wXmbF#3}8%L;AM5mIH;U?i!2hX -Ha})n%Q@QO3uH_D9bB0suSu?{_cjVHk9f-%Z>VWS)l+Sj#i9muf(2fz=@kmq~2$YgkrV#)K`gd<4#=mHz1m0efwM+5U2SR?0F(T5if0UW?bKpe?n)EKrP+u}zP=rr- -qAV49+HNcbtU3XPyjn2&N%`Na}F)EEk-yfDQFupu^(Rqr5F;(>F=gzpwI^0mW95U1dhrI?|Ca9VScj$ZSlA -TPT9+r+0TjBJyiY`!aykDV;5pZ}QhdJV5W`MopU)W9y23UZz)Dt+uU3YYsb~8Um(b0ThC8}j){&s7uG ->Dy*X6X~{*;RKrD2c7d~|T&IZHYMb5KrVS5NI{=?1(u*e=65f -#Y5pjeUWLF4clB5$TsiGk%lzTsLU$RZ`2j@gDys+c3T5a6cH&f1-;)l(35Wn2deoheTi0kF&N#Znm(S -O>x7V&H}a=*nPG)f5bK;9@<$y(f%B^7@_o-K{UMQtdwx{{It`ciJ9B%Ppt1pF@z%qB6B^a^!UUG3c2) -c!lny68X6%8$0+iG@{N9pz==pG6aMX3lVHLZ{1MO#Ye$%}sr0=FHn^u7kT7-XY@w*ubu_)}R-pa@FM! -wu!!N~j-v1nrrg_m{ktEL+Gt1n)x@~{J;drL>8DD~{g&q=l6TtXo4YujPeoWY_z>3=emGVNRJOoVf_? -^Z|Ra00OxqOR*JN(>V%W#Q7QJf_7k)mRbyh)L{i924gOutcL*%wbPZ>F*&m0>*&~OOe=}gzqTT>>lRG=i$3&O*6o(kZs$wBW}=0v;(xq^Vhf|d23aNpL2>X?9cRmSlskdn5#RI -(wN<;w@P@f@(j^ASH#t22fq$LyA -BNmSh%zJg^3VV}I5t?%lefemqqIoLLy2~KY>!BTb6mnp6h|5mka!o4J8Ud`UkE+fV)L-|lZ-<2~kvUNa`Z$6|T6F -V(3q9n&!VZZt`qfkqP5D{1JRXSlhkvE7OGISz}f4>suI!}qSYg}ANj!98XdELhmLY6`M5fyzEGZ7+q6 -6Y#r!ebML*V1ZILn~J%f;M^kl;g#nw(pok?=2`OkS`1VK;x|L2N_APIeNCorGhqi{#9OS0KGYq)5p0` -*>6SeW#{)%$MTNO#(8FcPFO&liFb_=MClq?WT`&o3y}ro05Oh3P8Nv{V3Qr$KLCJg^dps(tg2|Xb&V^ -2C`)o`9RMV3bAdr(o};V{!AHT7LfrJwa`)nTtgTabNd(4ydpo+=u}SE;P+TgXhkZ`6H{*B -)JBD=dA%{sO}l>IDgsEPNLqXZm)xuUGba-JM>uMrQ5Sn-7@_DAI>Qj^#>oT)n2ktNv6a#49`cZYSc#QGf^FTjN@=)FjW2UV`^FPYwqu0rx&W|0gtW<3`kAdbMC>*V)pV$gQ5Y6TS< -ue(y+*)(suKoxndda~%1e)U{8z5xRiMSq&%;*!Nb!-`|gK_Wh;H|%1dMPK5ZH`muUcRdqGGu3T8q#Q5 -9nW7&_0;2ziyae+PmH6o`gf(st@2i8JIN2(SQQW05-0x91{Bw)Kc^DaqA=z^_LB4pb(vZNote>$E+3o -pgISJ#NX||#a@dZ?G5`*O3HyKV;F#+|P#dsBOAI;deQc3<7P)h>@6aWAK2mmD%m`;UvZu{B_006cp00 -15U003}la4%nJZggdGZeeUMV{dJ3VQyq|FKlUZbS`jt&07C&+cp;e-G2q)ppevalyBvD6FN!(%o`@P365^2d!(rv&QZETZ#kMH~Ykn&cFh7`rN*S%y#L3q;%sR`XEQTLh^ -_WNSt#y>03`p>o4?RdLeEVjs_<6U0dv9=P@Gg16uGMB?(-iSM<{Hia!D{9g1n9?CD-fAXWTIXfW{nE0 -jM5noE)scnyhALK+qG@Pbd8)Ve>l_JtD4At=u=oclg`A_{ZN(n^;-6@FOLy!Y4$iLbHLq3Pa8-JebV1 --%ait5c3RZDVH#J+49fN^ZXab7EwbahJ0k+P!EX>Ul8Xg8iAl2d-pXPAgBeSUqNNS^JX -rbERK74I&Pa+-$w&?KK*w7`NeR9>2VSgIT -=P3d6vz*gLV`8(Xj>E%bV!gqF(bVKo-pKB5b~mvVn?oAfL!|t)q@^#kJLwm&l4+X#kP%CFdep!QXSy>xzQ -4l2tTMOQcyRN()G5Eqivb0FU?nyIO2$4ZD;~K_pj#v_hNoB}v4~iE -7u^`}4W{%Es+S^`jIxVT1EtF*(sq>2)$Q@%#Puv90$Q|6Q*K4T7Qp2E%R7p=2?1=5xGx-pM~a&eG+3Q -+YAO*tujigQ`lf`&I0Y)uL-ytH~Xc3aesH{;~HgS7bTk$R#uxBG3j~=xT~68@~gCW#r3eX}=Y+q56~o -X1$CtSIp9S+bm1KDov}F@pO43I7BZ5x|_#j+DgX0nA}Gw6GrA>(&fLwilv5JU_KD+_JlToQ!a^PM^Yz -1wj!48tVx#uh;XmvR~rs84?O$dp3ASP_h>`lP#oc4RW{XX2zOHjuw7%$SF8i%#@dp@jM&bqIFs~WuP% -Tx4Ctqo<}K#Mtj-pZu;K_Co9#c?y@En*S3aU5 -{8s?439CmN}J+ofLf+D;})09LySvkpQnsD4%no5lrWZ3Z;(sc(n=y%AP~!U6lnmZ`1R-Dx8sutwHb(^ -f}@EcD<|>3a_vL1}Jbuo`k%W43P*Ot!@|++Ck&*B*#fDAg{QxJ=7gh@>y<@!C|b8PZzO?k$q9~_ExRE -smGz%$)ghMK%Y1c>ss6w@V9^-;#$ba7{=n|5U2>^iyNWzxGWlt37qZL?tM}i&>^yK56zDlI)tF%}PHw-_q2;W4yFV(9!VpNqlJ1aZg(!C;Ehp~2Ge)a;lA_MM6H$GQ8JbDW1DsRP#YxiZJvuRJNVS#5jFP*SnX -@pgBV4wF8T-DdxE`Q>3^Zz1HR;YJ8BwDsY73X#d|jt=G>{DhlDp6@!E>ZrR=jlTJs0LcKhLI1W82gsHJ&kj^=b8xCQL10$n{8&heP9oqNT?sj -MB@IBZVO#?%QEf#oW<#zvVRR4tKA2-CyBLzo6KJGHeHx^6gkkC4!KEPck5!WJS_h|IsO -Yb|p@ax;#R@}GK3k$?L&^s!Q@rAltK`e-hCsPwz5D?jf3wQ-%CICuPN$_<>er9;(O#*l|yKo}b)$q+I -K7PY{n`rSYzv;_~JkaGX>2t0E@OQnKuw!?$?kOBpMq>?3ieYj>w!usp#a@qmOm~T=(^#chgC8&iJpC` -x9WL! -@FJ8pP0gAdN;Lhu1Z2HWf8uT)O6GZ)VN25b)+bl%v_}%Af=XH&WO`hwCMCXgJc+sHQ78s#9AFEiv*a9 -Pwi<`~<`rScID#0e**~yX&yauc)yBR|t=d0F3?pn!KKmW7nUsXQs;+YQ27;Ncuu$%hl8it4C{@A#pM3 -82CJ#7LDV{H6zrlJkfqnG_1K@obAzOyC48?<&5{U$I@hQyG@tK`QyfC#9oS+D&XSJoX{@GJtHlHgASa -}uuYm3ihp5PGc0fO+$};OHET_nWdMj@O+(z>z~H5e55qBMZ+8VAhFg3xhWlXl!a=jg`eB)d$4q~vf(O -S6{zC=;PBoq5i2?;1dbwV&$dW8A2x@4Tx^nPvNs{w~yd)1!vMdW^!E}JGWwK#pdEB?K79Xji=LYp)%- -63o^3FWW-8KTwmITV|Ke_&~-}u=Ztvhvjaj^r))o=1rG#A~zqZb|TF1S)XQy1U9`R?_Z`Hc5S0D;fHd -Hv>Z-+uGmo4*<+R2i3}ZOq1K8>^4E`_-#!P`9BEDK2`*jFJziq9Is#y(Pqj8w{R*dL~E@&O{bqm9zx2 -87denkt}$$pBkbSGRz#jfd16i+5*j!`$773HN{7`gY&NJetG@5N8TBRLWzwK(G4O3llCN;dsa2Ro+4{ -_lt6iN+Tl$_>V(R?F6NkFm$)EuF)&x_Z+DZn<}U!>iuTUutG`Xe00$W%QSlZ--ypQ_72eSplFj~+5)n -U4mwnsf=B_R7~)A7Ctwr(_{MG-h-*5eTZy$LDji|}o>q<{AmMT*%uk~?>`<` -w*GPi|otw-6;uwl0&Rwt)f5oNQgD%h`X@rkPn%|yhM-=TU@lHst$vTF1Gm8gXo7J)Pk#^RT^AYNHkK) -pBol*5v^hSJq%m&KD6SJ{_EV3{*(EEASH=S}g>3>j50|XQR000O8B@~!W4*|qV32Fx`- -~|FB(KZ*EQb{VdSMsLG<&ENy;ICU(3i -*K01;?x#8^_o~@m?S>)yrpj7oOpTW3sj8APPiOR6E%<(4{s8HFi=KtMgnE<0y9=CK!QOhL&#|*%Qab+4eJjM#R<4o0LR -*8Y(nFlT}cDo#2_5S&o!5Lp2Ra~Eo2RGiSs#ILDt}c>og4&D^@W%qjIg_>+ES~-EWqxfVLh9Y@4Uxj7n&3Ucjr+OW+esc@V?r)PzhB_a-6Q^(;6xvt^n-Q#lLnKVFZNR%WJDfuT`lMU|jd}ye|E?jCyf^V1S}1aAU!owI^!+p0N$c39`DCd0w#MbC6eIau92hGFo5D}^V)Zg!4p^%hf7*hCvKQ4}RXyE|qCA_7lk(zuHc@XZBnV1*m3aPY)$%D^CC|bQ& -=cN2ZrU(jt%&8i5{@W*+2A4$4))!sUsht*{gWToJlCuce30cx&VHuK7@@HL~?=kCBU>8TsTSso8a8YR -~RZ~5FOhCgo7lG><$9Z#GX&!=6eA(zTirerktQNQ0OJ2MR6dsnSwN6+YXhGzZlt3I6;2Sz_iI9_dz?* -jwVsMl%^voxL^q^4C_EqfO+s9Gz`wr6roG#J{UG785K|$Skg1!uRH5@VPV4yW`A%Qo1lKc+L8l<%ZBH -NPF8n?#LPO{TLIUeSpoYq=$tQ1QMdr+DOlRqpC@)u!^7()m#FaopkI2^__#>GuXsG$28Mk*BIEV|gqH -UGp)dB;|AH=seb2^ai}sMvs)7zMv?HCghR+Ey(e#aGgMqO11`3y>ForOz3YsxbI`(}k!xpiN!&fcoGY -8@t;qcqm4X8fmir-$$>&<)PgFQ+Zj(&yYnHDvJEsX5xI+jRH69spKdMj)$#e_aeusCS#vlXo$q0Rb!e -h7+;B1Au=`yw;4rTcK%_mM;UfQ8PryzozVc3!xlVvakg{Yr#1}DtV8RTCYDxn3?kWE;gb`I;Z -N}!?p2QE^k?Q9w~b6UFBq-0mhCn(^M%=N?nex$KG4FWG#z=cU^GLEqCu+cs9gF0-lV*OphM?+@;720j -mKy7+tC#U4s;eqIZydkg7$FY7w@X~6|RC5LJL_khmaqU+gX|{y9t8aoIp-V8m)uZpIhr!<>fJg}7?~H -_F&t8(BqbT{OatPK5Z0Jv?X9_qtRRK9Y0y55b{U`puDtK9kLj37U;n8K -Obaa3@UQK{$@Xe7q$&Hv!gexDb#+Bp8R{0_D5ybV|#npUqf#U|kTH4kzb44fjg5y62u7vr-Yr(L%Dc39w&%HbDmT6lO -FsZtkm_SXR_5LvvP5uK=O9KQH0000803{TdPN9$nMRNxL0D%|)03HAU0B~t=FJEbHbY*gGVQepBZ*6U -1Ze(*Wb7*gOE^v9xSl@5sHWGfC6_z&f4`X_DUp -`!?7m$dVvCw@I6poPXS{8yBTLh5*LICaQznmf)wGO1sjBE&k?Q9lFzZFN+sSfgA1f7XQGqyeStK=Ylx -VDqTOsl=$8!+X^0rd|%0<87&Her7`#F2~{rdXm;UNex3gGCL9qKU=XTf)d+YCb`^!lnU0B2NkG`gJqUGe4e}D -~E!q9;^#VMu3(3otVP4o?@Epw5`V((!G#2~_6_^mxN~b_OELjQ0-qlUDW9zC$+th~r!cP3oWJIY-NE&>n!>Lh$Z?w>);W77%kVlKA8P+7`0O(P|W?VSC{o1KD>9}h1kmfD6IGT_8}&Q -Lr~dbEohU?7uZ$2)k#3g_NS;7Yp+r{3@kRjoqRqK_>&HG*z=SG22JU -MS(e+KZxI>2S7?=51FLtdI(rv2~(JyJB*g;Mv{=Hwojw_fVhC1c0Jxjf?57sk%CPKlg(W4}ovG(!|{4 -f6g$5PSoX=l~qftOV50LN|G1elyF9(kWSH(eJKQ-N(Q8QmbqZuTCBMUZs4av`(0&?fC5$Oli0ubs}n> -y+$@Zz`TZ*KN2o#^1UpG(%QUmof@93OU{8I|~$^;~#r#X8T%~PdBzigi4<=cLk#lF -4-82Jmv`{mTNp)?YM-B!z@~P8Cu`lSSw@C5U!~>HRtbmtQMn@NtjfK1^4Mb;geLYwJ=5Dm{hg}aby8tuI -YA?STys)PRLg3da1cyu7%yY)CEuqP^m9(k%g)9%ORL=`v%;q1&*17Ows67{y9MWNhqj)o@`Mdvy97(C -lt=K2H0{a(7;CIeje!31}l8Pc!W+K8Z<|i!p0Bd(Zst*p?PLAad?EdEZ^Zf_K;3n*foIOE>;tiGB1a% -TCdmEGo1`EiuJy)rfh(fI}JlP2U3Rx0~2n4M|4@&9H039J~IO;^dB2jR|w^29`$j>ROW9J+pV64Z@POqzhdkQ|IdhWAitnM4a_S?_6d1+MMfN}ecj{@PKV!9gk -#Gfdcn!%qRCra9twa6!mJCl7wh60k?9ZlqQqT9K5Ui%_;r}FsU;g#$;_lP!=kHJ9fDD4mdx)}yLRmuy -+R4DX?=QuEtjAMhs_fd63-MZT7v3`V?$g8L)yI!F_or6Uu?0i=;y7jES+v;@#S*M+bu=O1d10B>kP9w -w68F>yei)qlf&J1}d9}oW1#9HE%Jx0Qo<9rI4QS+7^b7&W)2~Q_eU<+_RDBp0Q!_uVoYB!S%n?cOdt~ -D@h*QI>b$PBVO4&_ImOh0FwW+^ -4Ct837BZ$8Zft5=8JKb|Zg>vv+lXQY8<<2@np$*uUn27wkp0duYaLL5-Il`-VbB$ar?`F=pvRMTU3cKv{5mu8<+dF%)Rnp41RGmYvW!|`+N^Ij<-G4VMcEy -x8TSo$(lk~^S{UjDrnGIIlb3S>zmK(;DkR9Gy{}N8Ug0c6HEeWy|;lb!9ATMfoaDQ -lD7orE(*%6xwK63MKzSu0?}$sMH><7K)WhvZHXwOVcz$S0nmM|F{LgKTB-AGC4%q=YmME4 -S^Q(vZ-pg~B|M_BJXU4mn)UvOGt701Cwg;fQBS8?=E2y{Lp2A=V0s#) -haRgz!*HMUJjW0ZiW55Y{iHm92-X6>W=l9?tQ$5ln>_RHi)~*n-5+qfkIHk(5Mn=O{&zk7@u9RK^oLo -1UN-_%!hF85m>l=sa5ZG;g?=PXvs1T}PF*w-CWbIg`Ew71ne{rIw!a)S;?#_#o`b(e1K@Yn=k(Tddc(I=^<1vyBZZDe6mptXo0ROo8lBKEcdt+z3pCbhX`489z|^z3P@%%uvTUF2me -I$lX&Gsv^+WjlWKGwmAM<5`*}YqBr-w!z&O#2M=Vq-MM@EG6V<%O`9Xc1N82}lD4TJ1yks1}wac}rN` -~v>|XQ2|ZjR%`59{fJ7${Y4Vu|3q&buU0aCvuvqh87N1#SkSM1!1ORzCvaziL8Tf7R;@q+Dz|xwNum4 -LiR#Q(8DVE(7Pi6W2p0nU%L*dxGeR?qTHq=!Ujj{)W>UZKQi{d;!x~jxM$n+{3n0m`fd)%i#C33XQPp -Xbhv&O*=8*H-E=fKXbFcI1hn927t)iVeK+GfEW(F02Iqjz5pK<=U~V5aeK_iq`aVnGftGdYqo9Zv?6Z-eB*uAek&Zi2-TrWH#%a{;jQpz+Vy=c*(BetgXqZqFb=1qOj -9<83)-V`18@C<^f&knAHVT%uOiy+(v=zuufo!&+3sIZO9KQH0000803{TdPFx5_P=^Nq0RI~R03QGV0 -B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WcW7m0Y%Xwlof+GX+cx&yU%_=zSkB6t^kK2VAj(6#4NzcF1iJzH -5Cj4(9og*AqDoSB{P#V)NTw{x9>>6VB=X#EJcs^)Y~E~0DJs_No=KAOYu;E(?j&_gdfq#`!$dr7NaAcxWKX;5*|6$TD#|ViQB(;RHRzgc9L}AWv}i=S14HFNb!zcMU4v9aVYcL`@o@EfKVfIJAtTa*neSwLY1 -Es5)sD0gZhotWlbBo{^6z;X#;f&=k#`5(Qw$TWZdfl_=FS*=yaZ=cgyThHj)4LYb|Mi6>~DIMtx^lhY -+I7osZAU8{xQ>O=lEd*?K9bR75!J?Iuzq*LJZ+g42J!ijL9K;WB(Mq#WI>w5!fVJxBEWLj7oVm>w%JF -=>y+(GrmHg2;I#_JdmE63d~b;^*)2iFqvV=KjueDQ_gD|sLIlc*L-Rx^+vNS0+Y7#lf4!q8wGZXtZx0 -P;DOir~hd811B!{5}E~C92w^v{dhJ;k@^eYG^+Vz=Lg6hmnrag647I?M&zlKZ)yX<*+KKv39eD>7qy! -@H!=LsN7*_y?OI;@@eD9W7$f=G&9l1>vcAuhlq;-5o>aRIw%y(z-RsY6e6RQeL!`SVbez3=Cn%jdt+7 -FV0~GoBY+BnId@S}Om`2MEk`QzRSdDF9oM-~S=mY4A8+r0w|TN0*%M2bAny_MLu!_!O~9UzsR-tEIU? -geOXMI;44#C1G1*=9g)v*MFMQWG?Q%KcvPKkJ)}YIi^{a72!_SXn;W34U?3H*|p4-^e-nh-E+bn>`R& -%b4Z`0DO<}2Eo0=d*trr3aq=9V+4%ws+GSuZ6Fgt1#n;Z_BY7K4uv -#PczCYZNfs!?i!%4`yVM+5Uu&YH6`yVz|$Ev5;)-8;CsO%aM9Xk0=qM19ZP;b_axJJ?KeG>DZbcBG?g -OCrqPAK_yBkyYD<*tkwEt;QtYYPgBk@P3I^Z$qdGu2&=>HOik%c)J9a>rhL(bb8Qatz{5a1jkWoE@eI -$b4dd%=`8c4T(1g$s6`qJ*muJN6Ympe7bg9>_`uukrwd?|bf?u)xify9GMEQsxyvEY}nRdDqy`Df1(r -%6nv;(~CYQIo*E7T|egOE(r}6>Pg*vii+bKGRHCNWlL6M`e1Ybd~)nSd&~h1Tiv|_3I)gz)<7H5=^#{ -0ya>lCCzZ^H~*6fOkk#<#^1sA5CQIq>Amy2cLok1CWQuX5Q^F5*2Yqs#IxgMi0wy^!fhr)KzIsclX+d -R7-%zbBsj*AaIBQ;C5pmX15ID5Tlu!D+@fgwG=$C$Y7P}NS|111k-;y9>|kPrJ6 -{d5~pt-DxVVUU#om+^%$2s%W-IIpBEDjK|g@L)2RRW4r3})faS|p9-uZ>hO7Ot3xwllMFaV -2J4s)#Hc5_c+TSG2t1vh_zf2@14R6Tm@-n~5(|LqSoEk2u< -MO*`U>?*@aUnv_W*G41vBMT?zzY}WQLj4pe4Goz`aFRk(eg0q9`T{SadSR&kMoY}9iI0O^Rl@x%zZT8 -2tpgB`Q2y@LNpJa=Ml`5f`775468|`?-~KOJ4q`j%!s04cg~kuY!sSb)#r_Aqn0-`6|yw>>(A_ato-N -@Uhxf{kL=wgbTxxq)4JNeOU`QnRsI>f*c;$BJP~Z*=NF2DsP4GM4UYrnWoagGW2=4K_E*NqRb8A3_aF -StpSxR$f}FPf8R>6^=kuYjwL?0PSB2*20^%y|`#A?s^)FxNNsLFYfyQ|G9+AF<$gg{fxe79`OidZ@&= -qL9)7Gi->LYA4vS&xiJ2NPxud5Alp|Gdq&?IBo*5n^Kc^f~Btyq-d%oYB~GOvR9EI%S)H-oyM!efT?H -|8$DVx!rd-0t_D_|H0Vp(m|iPE69q^TjAP*}(wDWS?nJnEl~k!sUhmul#DkyS6a5+33;N)b<_+q5lR@ -O9KQH0000803{TdPJ78H{yP8w06zc#03ZMW0B~t=FJEbHbY*gGVQepLZ)9a`b1z?CX>MtBUtcb8c~eq -Sa#SctOwLYBPgN+%NGwrE&d)1J%*-oR$jwhl%_)Wm7Nr&xr52~=l_&slW=Uphu^yL_k`fmHP)h>@6aW -AK2mmD%m`>FkRK%14000#P001EX003}la4%nJZggdGZeeUMZEs{{Y;!MTVQyq;WMOn=E^v8`QqfAoFc -f{yS6u5$3o#!soS;KgbVCFMpF(JFM_ihOBol}D@1|YTtyp1sXfH|5x#ygl+L;Edw2XhEu8d<=lpC>@d -d)u3d1*Ar#u^vE3g;1o-xs_;C8Qo0qz>q`P;48d@~klxDxctwxVsS^tA%MI0WRg2)c<3{&PE9dyL^9s -=ZpK>#Up=tU9BEgcZA4#VtYm)uKHw8yp{CUI~hX_`gpFwRL$Rlc&u%s(0tbs@UGH{-IR5bbaHQOE^v9RRo`pdFc5zCUvan(ahPY=YanA#)^&_!V`Gd`icsxKqfL=KNp6~ -k{O{8bN0F1Xg)uz@S$Fs8?$dXdxspq0SzD2N6pd6>OY7hCj)}XfGmL9s%T_7_H5F2@nsWAtM9?K>**u -0aVNeOmLr7)Tt&QJBe!lv8Mb0nZpMN6Xe#~YcXCJbR%}*RpGO){|4iUbzhDi%w!gn+!Tqya7!fvxHt2 -xygE~Hvgb1sEZk{9y!7uIGR;PO1bMBbu;xm2*E!q?_LY=jQCtro0a0EJLGx?15DfeCFW=h##`q|9#`o -CC2nGebzBkn^plbUHe9*u_T&S7epq$NkV{2$FoI#NnSvn=}hl2{#H&r$oRaq+zvX7^c(U7f(_!fiHmxX?B4 -A=HQlMC~Q@aavYv-w#8;!!e%?ptDu@DIz{+g#ja>VY;TO0 -lY`GHVZc;s0NP(wX}zJ7McN^?W@tm;n;$m%uW^UR*+IWc7w=?f4bwwCcnu;i{vHbT6U_&e49? -W;U$jW!{!=t8GvJ@qkx$x4EfWjv7MjC3_gdLNuT_W6c6G4HMf4~&HWR&KYchDi-}8 -8a_|%>lT!TFOa>~QGdBoLzl8&>#P)h>@6aWAK2mmD%m`+CGD;LTE001Ne0012T003}la4%nJZggdGZe -eUMZEs{{Y;!MZZe(S6E^v8;Q%!H9Fc7`-D@N%7kWzAwl-_$;MXTPC14D6ZY|AsG;oo-*35DIXwGf!`n ->QbC+yvKw*S;vvXloY=(wCxhXQZMJ#^@91&bz?iRUiaKFqzBoKS`3xC?Ytj>Rr9!v#s%xxzig~obMBm -wb^X`q7O)DnLyo;FhW7u8hmhPT_XW1(ilKh6$&Lgkc_<3;&)?8#!Zb4l%=+s%Q7Q0%{C^rg+?1JiCqx ->vUZ))_L@Xo55R-RJ!HgT3-Ze0@d^Goi!+3Jk0D#uB0%BKi#c5W1(t)@BRIt9YqLc*u9{BfW<@Z0qdA -jJe#NZ)NSZA*Osu0N?#spnq2M-4CqVj77Jl&h2d8)}E{jgQw3wDIa>mIx29I6y -HHxVr2|P=y5ncFPQw)EP{_#SFK3nMKo|0@WL3ZGO-2XXw3i?qp&eXZ&{m>3Myq6bW=R)g=%Kz7CR|RM -si*C9l50ecdU!4Sv6)Fow)sGOvVY3?|c}L`(Xc5^-YE}yUoLuQLe^V-(h_>Myj-B_O##aqB4aGue%b%du$p1dIO?*Uj)#jjB!>hb$fpHNE!1QY-O00;mj6qru*Rsgq=1polA5&!@k0001 -RX>c!JX>N37a&BR4FKusRWo&aVY-w(5E^v9hSZ#0HHW2>qUvWs0O4<}HNta$z&;b0vXFZ{}W9^EF -yuWzwpT0aheeGXf&t|V?zfUG?IWYXp1Y)dqExgSX<7nQ6t2~RT3)d;WH_}}UEDh;hrTX&f&G`jcA@!3 -WMk?T(rMLD_I8NbyZ*T9CW`atZDhZ@WWC$^;70w7;kl+?g!Yl2_k|5DnOyT4M=u;0cu`AJZ96sZQ0$oS{oU+o*`AX0(K(KaVsW^cmPv3AZNW#*lDh#;Pdi^VU4h%pEv*4%%F8Or -xuw5l!Qz900xq6;Z?_c`gEqeV~~QL2Xp@elr1+9(18rx*a^E7mU3 -qaVIdat(9Bd2Troe@UwsUk=;K5DBUE=!$*3#0P^5~@f@6oDn9aj08>1`MCW9$2_IyMQN8PdvDan1qCE -U_l#cSZpx=+R#A->!5(uu|pKXTI7mqiyDxQyognim8+M9kjemM&}8ZKyv&~CasFyL6?2jPQ{tz -xUw5Zg^Se{W~>xOlWVaKbxsT0sG-AwHYwc~c?um??D_@?`(+E_jBwA&QRuI$nlU5IliqAs5z!w4;~dl -m6)Upf}-4;rZTb<{)Fta}i~8ca}?ixjMV3AV`#y4{!Bu|2i}jB&N)(}RFZR_1IAq5w4xK#2xKCk+DE- -uro|g8WJ64Tpq??Osd%mdf7hN}nsq6O;xTf;S*X9K?0 -*WPqnRi_4Tfg6m0VBUmY)-v1r&T<^R$`!u)+FfVq$DAu_>$%1ca*2@|1s7}!Hyzj)fCPkjfU8N$>)7k -!>)Iv!lF%=V_&#ti$;7S_$9$8!{!+Bg3^o`2(5Y%W(`Z^Yp5=}{l9~%Q4Y1kFQ=@8y_KPHcG^rF-|NNZv^R|2-@Su>-4Ko*6oQQ -Sx;}0_FoM$j*b;A!`DWd+9$79N>CLqo__-Pwtqdl8yn)djz!sdxeLTiFuKO^Z_J45L;ta1NY>5ZK2l# -8>QeRNK*e5KdQfEr(dzrbDN_{28TM=5$Neq=2u&KB5@S=p*paqFzbKGLfCflm3zDE{FJu2>L+jxVF*) -25}e-&v}0)L#o1KbmcPLwwYao|^oPeJ|T2|iBR#a3*gX1~$5Kb-aur(cZ7!7BWX#IkiWDo3wGPAC5YP -)h>@6aWAK2mmD%m`(ry0006200000001Na003}la4%nJZggdGZeeUMZ*XODVRUJ4ZgVeRUukY>bYEXC -aCrj&P)h>@6aWAK2mmD%m`;CD^JYs1008w9001EX003}la4%nJZggdGZeeUMZ*XODVRUJ4ZgVeVXk}w --E^v9ZSpRO@HW2>bPeHgCA{DA1AVUTWX}c9|)1vJL6j>n9(#hs5i7H7o^NPOv?nqIjBs*OP%s`NsL@-a -u*ku7;I6(}`}Ae@0-bHVzTRH@y+{C{yrOwxU2|{)U_YPDmbhxdJVFRlq3s4nFllK?ALM%aw*_N=X%~6 -|Di)@_HjXQ1+gB(<$h<0*}$~1LSC#HA?Yq4HMm!Ewx>E>*$3tcwIueMIU -DDVpx9)hNI6e?(E^$LTj?<%E7y%XpP&wmTgrd!s0|Y7Nd}|iB7WhcG$dIK%PDx9q=N1C=TyH_q7?Vh% -{z%Of+hGSCk6rlgu5FvD=H!pfvg#|GrQzZs;I%@T!E06$-e4d`R0|BSR^efu_mh$A^2ab~?QrLV|IIO -NQ&{qm(`QX|OtkCSzMEYj-~^19$^8!Dz-=jZUytBc?t>(n;J502?nlXnYD4CkNrN-bR!d=_?HzO=Vb; -%pRCNY6FdxMbbO#+0_;M^7V2grC()V*0sbclFPO}t}oehUTY-cS|3D*Uz7B!V?pE~68h>El|)K61Y_k -~E=XnXhju-b@N>V?hXRRMi_(^mBo-n0Cl*e-l8!P)9RtA3(px%uhlo>FIJkipnKgFfnUSOc8vZJvJ5w -ADs(}Mzmv5?#VTt9tb$H$J^F*b#GiF$eU!1t0kc4SP` -!(T0@JHDc1Jdz^W>-Gi@BdnPV2qw>oOO+Rw}ro%8elyE=%lAGZyC(%Ua^%Sxjp3urX$p50156OhOy9J;EMUVL92#-kh6G+`Ql=21{~0Oavk -tq#?!_+p)@zB9WaBh{e@@HOkICn#4xU+=hBkx`!Z5e!%3IUH>-5xEqss3U;=-P_Lg9mv9Ya@M@OiBVm -QP(B65IGq`7UwbGmoQ|x@K+)>`nkjS`(s{;-=NIim_((fc#5Zb_JUiaAIlJpe1lQ@s&1H9p7nIx|EAb -7e2TZU@pF6>MSE-2AFdnPA`a*W0=3b-%T)3D4vj-H`w>kbN03A{O3#IgG%W2MJ2RsrU?27N{TPL~&-G -dsTch~qpEGdlLw6m-~`GL-TK=Q^A&V!@0Z;CO|1OJnG{MT-payXREQ0U|YVqZlm7V#rCK7#ex*_jO{V -Uz|4vJMArp<-0TUQq&j5vFSNxx>an4YRjKc&yH-Tc(-TwzUGH!!FYu;Jp03yZ)XBQ>;yiGCXIDAWxY2 -X=XN*BqpqS?ir^5yz&kx7Y6)XiuZPNV^~FthHH*%$HPgJ{+H~|q8Z*Yow^_mLE$OTbiKh|Oa${)E&8v)z}<+o!J;si492_!=omf04 --*JG^4tTBDn2@KDp-=)X63k$ -gTzaw8~Zg>z=z)iSjo~;{Q8fRf2h0OS+@SW7e`F$;M##w-<=~fN_nO{Od%iSoL3d*_87~hvhN)mMRo3 -6Q1(C0X4L0S&Sh>M`?fVFy<>wn87~(yTa4Rb650jI>K{-`0|XQR000O8B@~!WlCbOpBnkikKO_JEA^- -pYaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?GFJ^LOWqM^UaCya9>u=k-760zPf=v)e!fXNCM+3eXmYZ(H+T -0>-cX8(#0xi)AZzNGAsU&XE|9$6>dXTbYJG&nyw2mH!hv)G-50X163X&wdTGx^#3E@R0q$YH$L|$u_* -yq`-d7p|rXQ}3*RPC!=+~4!^zI_zk2gzo$9kQ=@6(>)u%!F+DEB5*vQDo`$RG&YMHWb+#UN`bIA%;>W@?^b|a;bu1LJpOqMi{*-OeQqf|TgZ#26WMM2AKPTrMD(>$k -0V0nzNknC%m0s}4UR14WL3TFf^ZdrhgUlSahu#9WE&Ds3$Q_f2^pG8xX7&@M_c7p3)K76>j{hZw0jEy -jcj0>((U!aUDop9yIanIm|m4#&qewTb(8>37}V|nX+1s-d;fB5a=Z^`vPZm$2C+qX+A#KwS!rd@cy%iPZiHN-8`!cl_1c-o7=xD?Li16bJ0celvWY13{p1ML$P(9 -z$#ZGdBd@>@_v~eo7^Sd*2WgCImaX2>T)Cvk&QLs~(-VV(Np?LjELX@Ed7ZH?dZxLftgA5UzjV;GGDb -EI+OJ_8#}Qfl)M3BZq;~+g+j)STx_0bRP@O&i1*&2Z2jSOSY}ujJqm~SkS5ZM)347WoR*cH@!Lr%GL^ -vZPENA+j-=4EPBf(-vu2ev-46U2{sLih{^8H7zF9xo~`dcZ!vC>6+H!J2Mob^bC3LUWZxARW8bFRi!u -N&0kw!4dZn`pUTdh8(Zzyb%l#wPKjMj`%0-56V##w(f6*=Bwb;ACn$ZImvv79s2fHJfoh7=#_fyc2^KDJ);JJ_*ciBe?Xd0Y(G3NBL0T70P1g@ -plT4I>Mhp??bV`;1do4huw!9DXwPm9ojM>nyWXlLExQ1*3&nbjEgSvns;9LqsYbJ!GgK#bCTyse64mU -?uMX-pgIZ=W4en{7+Cd?gup*~4><-!<2q18;b`-!2b -SfPv?f{sk#_SG)YU%s*x81%aY!9T2|``X8ucC7pn-GP-18@d0-zMDwfIMO#-J1UYZI7vlXvQVP8^xj4?vG&U$_nnRCZJ0)m*o=v;fxN4%WbuX`U&%OHjS|Gj78c=T`!;wpNf4}- -@_Py9GwvbwwcJj;Jd%UGjf@dcz0rb#uHBD4BO*{qvCS7&DZnL-7eoq77k}$|{Op?wc-5PC{*9@*bZ8j%zXdusUCq -Rpr58RXFCo_?cfusEXNKKmZQjEQRnGIU${~=-9h5)n*{pF)SU39va$yiQ~v6vkAN)?@z(XW6)LbsyU{ -z|b~M@h_@W=Wk5mP7=UCDdIQ0+@4lxZX4YS;ESGw*z*i9$Aq_{rU>mDk%EAS?1xYj=#iQGYS6-)v2Ne -y$z-mXgKUA@)P;;Fax7D(c?nTchGncIYDE$lyO7Ou}fmgp4q?}>}t9@<7RtvunTUeFD`7-ycR`O>vp#YH* -1Ks071OXNq=OKio*CKGKR&bq1oX$w!zlmyPd769>enxR}H)xK|;Gj+-&!*Hw}t#%hC9AMTCkmuH#b3B -BhFj?F+h9_}4Iw+W{>MM@}Z5((Z@>Zt*an5SrZz{Z`avX3wE;=u?`Ym0@Zi!~Oqc3xx#|jd>k*GtFFe -n?bIA*y0-5sB)d^WXL9DGq$YtjcDrGZw_4D2}3^1+C`hSq_?+g&DU7fI6=wOGh@ -%~U|ZD+(QWk}xcPNnI?GPqe;k-fnu&c29pu?o!}f4##D{;tq>Tysv)APid!v0?0Ljk8FoV!3aB=w+G9J+cTipiDLaH$sh!en9MaewRNQ#SadeaVrtNoo9v%I|P<~C4v)+7 -OWs}!`oYE0SShx+AApGreF1Y)r%d7fP*oOAcwl_Y-nL|F-M^WI{ICi-Is6sTGV-X4q~lg68gXxQ#uCy -2}bW}$tt0^7INPwVPTG-=G}`~FQpqCSmWQkA!l+8HdeaPLg3(dmgZEc!wM9NEe3p3Qm}d^kn6cl5@<{ -E-Mr~pCMw*@tM6T1H5=Iz2gdDraeEwY_PR~+HAjOjFPz*i`&Pv3{LKfOaPYXrd))zI)ye7;ICgGtt@- -|H%u_J^AhOO9eQ{26WfSC>wg+9rfsx%rIc7!>XS!z@0q+=ar!(*{)V?GFK}{YaA9&~E^v9xTYGQgHWL5epMvmWVHt3g+XBTM -0_3jkcDD`M-3@lr_KKoVX^W28$dXQ!;&ng$%?uwRCCW+KUU5bru|y7s^Z3n!^n5 -IT`Q}SZL5aKQnkD&I6j!o=kwW2?(3>)SyA2I%JSBJt<-F`ZK^%1Wu0dCqRer!eplb!W%~0@9pF-@WHF{UN%*^7iAlplvjtcsCaJYBr^sdsj^%)S=SUR{Cg`4;lA8&l> -WObYreTNe>X+eR$0y4-D_sNk;c}mMn8n -Oa@PMg1%2vXpgnG=9?d{f6QKf{p#g6+57L_zP)<;6*jML#H98f+E+&5Rq^xkica!IDAqWR?>IP&Oa!v}-Umek)$%!)9v6(3r1f{Xu|Q!2cd#vTc -CAaBk;uccb6TW~ezBacSK*y%p`Z^eoA;lJ7;9EoZY?F1BpX??lGe3aPdk0z(3eEVVqJp)kb-OU9B|va -^4JL#Xz1GuLts=<%A9m$0@X@{E_vu0YVks`annNa@V_#HK29Ne*|xUdeU`yu%y;&-l6!2qo+Qj{&(fy -r9Rg7(kB#2UA-q@@##C??jKY!%m2T6|%geK^%;)JUdOz@N&_Jwrk1@_BjKdHt5)DgkjL>d&Bvfk|iXsXxkL`~9&>$g-9>Ndf_`WErgEBifV+X}4s4CyzQq^R-(~U?G^i;pL(Qg*6Dz#gXkmtc9M5o9OD>hUYj;iDi0X(OXf9hJ(sE7!R5$XsRpETD -cd%P%RJuHxeMzERR-%Vl!LB-NLpR&$Ti0g4G%dl;!kLbwzHc@Ay3}E40P0QHit`*m7PWwN{{yb8saIf -(OoWyO!etMO_d=wDMlS<{`e|NCXeX7I}rDfhkSEW>*#fHkJlLUZ6nI(><4@wFL+Prxc!sEDKOMJSZU?dzzbDbU09++JCIGtW=#H0_LfMm0%QnnLV*PVA+8|#0c(t^czME -102Z{7eCelA+OsekSBiAEbNk@y3N*bJEzfz&djOef$!%E%C@{!8^=n8>Gf+Oh+lExWfjxE~25K!z4#Kjid3CXC+ge?mpWlKLcWcaP&+B8&&jGj2AwPxM -;rzvm7oWI!HOSbLwT^X9l(i9^lLHul-s#fwMbdNz;eT652#iJw_B*(ChPV?x0bLD5N=4Ssqu;@{t5}M5XLxlkeRUh -CZaR7U;3t8qb;NNtPI|#`5))$lI0{%&Vg_xI&M7QjD_q1d-pRF6L(kI&k8hBH1%*$0 -TykT#Mo$i#%#CK@F^DHhe4TOh*)EWFdW9j4%B?`Y4VMiNJ-15?oEN`vLLr -#Xidu14um}d>UV^lZVW`z?BWw8S?zU`%BlMf6QgfUzwSw1l55k`(5Yj`Kb2*wXta#Qf*!20nMc)$pNL -%0c9p1_XCP9gv@8N*V47fzV6Hb9D0My-R{RqMEW?_S%a|?QNJJ2qVm%j+maWTOA`D-^yo4?9HVz$4x)Jxflc -}Tzu1k|kM#4?417K#Wdk-<)7}%m{+RRj4d)@+Cs0_dk+r3HOth=%s`KxNkz997asDEiS7*us$cf#Zq& -8T7Nonj69^6{2RppM=xHUHE{b{vDC+Y^xN361Pamc=S7)K#gJs6i_BYV7{A+LQu)Q--}#AqE^79Z3{foXVXUnPP -)|fg;+_CdlATO#0|oLHGU6b3Xctw@t6VJMv06c`VxQp?&g*EHJFR)j*!%eY7I;7dD%(~G)Ee{=YFFL) -U>JgYgwY9*g$-crrB;EzC~vM*ie{PW$~7`!oRXQyd((7bdK4b%*^kL_H{ir*Wy#_t`9Ec$61xEQ6gj -t76Bgs-@llOF`e7IrZg@qGDtaQq*UjNddNiM-|@fiU;Lyb4c7AuaK$im8ZBt;JIZ9{ -n^rXZHpV4&U)(^PGOn=u{s+=4>%D{&FG;BO95yhcO;>D)h!q*-2F{8-irWKO)s<95zx^>y{G)(VYT&+ -8pgPS~vTm5&W*J!Mm`+*<()Hux(e;`pWmP_(`^c1a~jkOk+=^X5+ -EgK6#(0+m2yv2;7ZopXY!<%S75SPG|Bn@!g!-L$1sOaO(tWxT~hV%>q&sfT~^Xy%%hiS^r2i&xOu7+P -o69}Oj8Mz$Q#grtKrYI|VKs}XR;WV=wn#{m%sIKm`>-B#2TWTxO5(7_{+Qo(FfU84L*Q#r#17?m1WyK -6||vWV=@zrL0Z-s#gOeYkg^({Otqz>2aFz%$-A!9Cz*w~&C*tdXuhX89#NMf>HCP8r7%`;}S+;nWpdP -}d=?0qtWUhVVXm)ocRuO>+ZeQ=^9g!}f5YZ{;A?v%Dj<@`)x1qV|~;hfq?NYmC(2xizN!`SY@pogoS`ui}VYnX^tzBlkt_ -#Sf&=erL>bxVQ1K0*^mEvGAOT*H(>aa`bcU0b1?Q49BT#?`9t08V9!Vn%J;H$1^aV&}h4{gPuE2UdS< -0y?E(#~c7Zm`hX>fmlSxZ^$u54(AT7ZmU+#Th2+p&(l8#aa%MR$S~h3CP0?6P4Th2o5k5-DJ* -0VQCj?6;q?fk6pkHDb$kJKK#Q)FvF~4gVBfv}7ADa}Bw7IHnGSS1O3*{ch&4#jHz-r0P=+# -7XgiH+*(a>OmuRdiLZH7|Oj5$a29~WwEA_RYtw%-2GVHxZ2-)jlIGe6sL#A^E?zHU+Enntt6Kn_Bf#n -3ZY413CcdYP^K>_fj&v|w8mV#bcMaUo#j05+u-$>6C&+6RG>I6+I5`yqErP*W*d~_+&yS%N*>QgRvz5 -C&{PTbFqEGoBzBj`?5BX4ENi_E36_6;nruXM-Pea7sS?=S)63OhjhR#8)Rbh`twi6f{?P%==1=+Mq$uOVl$!t3a1!8Oi^mb|v=#+@ogA<>f8kU<@_)4mI*qzY|=yx})H_i%>ziccx -=P$qU-079RJ(l(}C)L|Lg0_SOiRm<}j(hXk$5wJFD{a!Lq(gfLVUWK?5O4mvfXo#sUn2qF}J*HD?KxFGcU)@8~k|1u)E2vBSO3{IRz+$6Z-mZ-`V>Gql0U}&?Bn&_yiHa4#;q@K -}~ntV}oMSj5JCgv(5NcVC2L5)$IPD_pArgNj+?ry3D4e?RR`D;+Urig?DUYpC@P(Kk>HQfOG%;v1XMv -fT=J!h*{?ZnL)SwaZHahSN!z(NW9py+8dT5@e}Lt)GETq)HyzN(=J`BO}qW2{$G5K-<`f3wXYv2mQ3y -7F5Z28b8}4PT-=Q_vWIHi;D<+G(i6W%3g(!f5`;&ADgEF3>C)sXX?Us~+)NrCY7b+-zNHg8%ZLU3H} -u;lmi`7P4pOG3opUz?2wp&WmLJUz3gWr8O++o=@}`v#`P+#+7;hWsW295Z7pBAyTB9UTVR-B2%&zQ-ieXPIc)2XjeV_4ccfge(T&T-0hqd^^Z`2wQJLleu;+gWWLY)94Kg2zoQ2J@9R`Q -q6U5%uHc2Lm{904xZZ7WC5O_P32f2RZB2sKU_prrRNd)em?aj1>IzH%CTJmr6tB+vSETJ{+*mu&@irF -|#&fzl$0nKGeL~j)CJ|wf(f+?9-5-IvN1~1$sxMl~ZDv~CfwOy@JPxItsRc0Qen>TJj>7)$WS!}se?9 -J3R{HAFD!i)m1Pn1Sf7Uz26Trl8gaV)-WSHuT8gpymH%qC#MBRcBEpOL;2X!^L|2)s7&KmHyQ8>r`P! -9jD%?hJ7aM<>qV}lu{gR?$w=BE1{Zp8mhhyBaPynx=~eE>7~6B9a1801;r4tvc9%cjE+|Z!`2*}2M|5rTv2eQ3n}9oe!esB9l27Tg3`J;~vYU!&l!LG{L4|rSf-Wy%%aUtU -_wLuPT=qyu!F&?R@eC4wd)l-eFYq??c--mCufO{k#uJP7~ -*9RL6TaA|NaUukZ1WpZv|Y%g+UaW7wAX>MtBUtcb8d97AaZ<{a>e)q4iQcZ=5@dF}d(o}U@wXT}F?V+ -kF%YlP<1)JI?ZT|hv7zhNCRoeVQeE#n4yYJ4BOskSImesb_z!()}rL?7dZB$WPV17?XYcEuu3z-v=Il -oxLGZWHSUKE|@wcp;sb1gKKAngEaz;?I+;0FvbnJAzGRa_fjdJi=oScxje#1^#VMO<4^n7F0ZxeA#go -}u-)i``WNk8k(i@7d*-tIMzK?$_<@_3dXYJDV{t3B}b!9Y^>mcM-i2#zyo9at4_IA&j9MsO*Y9G=7V5 -<%@_erkX7xkDUtO@U7%57h90-6s_cu5GMg>%+zWT=U{IdTfms)B{n!DgrtzsX^5c7XjRwHh|)7xA1s@ -a9;PH88;>rMs;p4b9J(2+JuWZQn)k3(5Dt)?T6^>b*ZD9OO6%;Rx^><%b?Fj?6cURGy5LLt&YVYMhlrlXzm<@|19mue6F@ViDQ=n)`{a+|-ZAv#U -WDBYE>RHf3AQ0RHOHZrBL-OF02wDrW`#(sVJ`d_db0GsqED(ub>S6z;v3Z@wh=8JQS*C?f0J{?3BNmv{;fH%!Wz8~E;nn2NLs+6IVd&$`mE6{< -G-k(oroI0v=9dFbNKBbXA@T$u4lL1Eyi&WS2ZVgIMf|Elm_7tihOs(Ac?CPO;-P+MRY+{c{j9W$!d2? -Xs6Q3L)(8ouesA5cpJ1QY-O00;mj6qrt??u(Tt4FCX#EC2u@0001RX>c!JX>N37a&BR4FLGsZFJo_Rb -98cbV{~tFb1ras?HX%un$tyO(piCZh2eEnr)VK6n|;^`Ru+P@oltP4S-ayc{1I9ps=X)}XM6qwV9j@j`jN@aGJgY>7W!{=dv1g3Dd=|H)la-C3y-)3^KQP3e*Fje9b& -?Qxrdh~+_{R4lxA&^xZQ_);mU7OcVR%%|3uLs^3&YhI;=e6B0W3x_S9G5D1_<0{{kPa@ltl~~||gQ^f -~yUSW>Zr~4IF<@$1<=y5(TLO9eQs-_TNY!HE>q=xrIVlaZuRS(4(vY2g_w -Kvw_Ny;%|C+u3_U+rdw||-1`IL8Zhs!Ala6i$p@lU(~kJ?P2zahII3?U`PVDR_4J}%gw%N&gV@1%4NH -u8;t+Yg5Zjp*AN9xezz>CuG*|)Eoy}-pX -1SXWp>=O{XRD;96!K+&osk`+2nvcC(jaq3FfS@XmT6_r(=}vTe-$Jmg7w3nazCGyFwwkoURUH>VRf66%~30-BXL%Xy8@*S0dLDv(Yz##M -TThAHWW{p;URigg@sJG%K=apbPc~0!LlP;ogC$oVc#0`mt)*K7Q^`WeaG#R4_SyjA*l5JNYXxS@#;(1f?TMKSWVK2{byH*Y6GRl)KPmo8eG{?EA%=l#m^ccsSC<;0;{iC47h2>RZ0W -HxgXk)v2m^!xWRLum-3F-OT&8#OP(l9$Gz;v?z*8tFK<~t%fXR8qTzw1j;Orl_-w@TI<3wu#l}?QgKt -UeU(1LBt7XI$G@CQ4-pA-;#8SD!(NUuV=e9AM-*&rVjv2LI{jDg(+dzIY(YUO0!Ndlz+y1`;ATZ4w7& -511vPv`=rknM%mU;!xlH$d6-wWDJR5|K3o4pfFu99Z8&$T1`blQQn@X({>D6{rOAdSsehvtrFAwYPee -jL~7H?BkYgvPBWSsL_BUD~=PMKH=Y1aQ=o*G@|(}84zMAM2mJZEP6;3U~5=gRsy20EeVbwYDkqKHZmV -7SB}t|WD*(cOt88u -3tyLc}HZm0=lcXiB^7tvZGwjT8uNOpSDalc*@cjJRpWMZtwVb5knaGVH3z`9^Rx1m}1>gormyiis6cK -{DE73ywL%i5OSg1DPY(6o#{>66}D@M_$-jVSK59>ZTEJs2wwLG(VE<>1`8&!h)Cz0h+~$GiQ=5EpVJg -6>)T}Ac$0ai|5-a@!W3QV{Ly}bAz3hzRJxgWqR5ZYRR;+X(85!Z9Km<=4+IO4vmTpSPqFp0d!KsLOzG -)d?S}1)Im&jft}8%hNc5TM@l2Qa&!7`{?adR^CweeVYfaXN1o!gDRo86FWpeyu8g`63px~Yxzld)oAf5*bJ ->4hhpWq;Y1+FikfzT7{?f$6d8s4}^BogSCdsyEGylamsvdiV -rJRxz%iJLW^h#i=`V$aS$CtlD@(>U%}RjdDpk}i}$9dv77CGjb -N=GSGGbmDtDhqn`yOGJ_0k0jm2nD95l+qIVj`^}T#XZ-6o_8tgQFXM3hW&I@58htYcu={u~;4Jr0@Qw -FArgRvURJY2D@QjY*TronmPuFdjTB<#zh~Y4eG-+_rOCS%04G$yq=WW4aq1bpTY&VN3pU!3FG%dy1dcv%25BpU7S+$E9~l%HG< -+NFNOb4Qq$0#wIr$VMccF>r(Y-W7xL%CgM*3o5UY#84L4YsgC3@m~*=s?S!;!egDiA#=H~LSwFIZm`G -O)b!8|0CLG~(mim@yBol3MG@kz9@4u9k%_Jp$#NZ}a=EXA>Fc`oA()lVP>ZNkQz5?r}mpW)VPr~%y5b -$+itgtE7klQf!EDdWB`Go>=7pR(8MGxsi`UT_;g2rm-<|GRvZhf9!3{`Xhg$2J4zA$;3I2aKR21Kia& -YdRZt0FMTYf5bf}S-BJzuZv)qtqf>D|^y6}Zx_dUjRg+5B$T?QE@0dIW -i-VnSzCik-WU|>E$PKP({+O3en&uxYRET7yJd9y8>X99fVc*ct&vjeZYHjGq+WgNTRj;rN~+29oUMu0 -$F94(^}Sr`f?A{)w&*T-0n8KDWOdER{hFnr-SU~lPE!kK9h-9~)PSkRygKa#=#^@sU@@S$@JP>0|@JE -5L#RUc~W`T^4mcjnZq%9H)LpVOO8G^9VX# -r&LhanR+SY;r%bZw%tqbgT-xkC%hg=Z$Urg9ue2_n>N>fj{GyNf54!?%O2%;b&@;i(#8o_;$nW=xxJ& -%yt@T?Zt+?sFShLLQrp4Os;3Jc@b1Ph5@S$+8ty3)MFms>@t2?D=EDEpZ;P00(<;0rT -ZqqWm#Tv)E@7X=Jizp%Y5~e??qhRJx^+;?CHju)`yKfetJwB2d0;U%w&wS!Q?+sO9KQH0000803{TdPPfS(c6$&20FpHT0384T0B~t=FJ -EbHbY*gGVQepQWpOWZWpQ6-X>4UKaCy}m?|0j_@w@&Cyf}FhTbYiNc3HGKeQD}!-WuDB-L#$U(l7~Go -GFq8NZVSP|9y7{fCNa&NxXiU-`*kuxWnOo-vNE_;KAsv_^nQ*Sc<$-Y@TLjH3T -DWW1%rxD3|B20s0UL+m*7AL-11k76N)z$vUnI*kep(2Ty~2@o%hNm&w|4m_m2mlCcplEs)8>!!Y>|rz%TmaggY9Ob03jT*M|g4aa`Ru0 -H=jpmUk0Zi0_4}xkB5f`Z;yAsj}8ux_YU@tP;w;n*1Z^;<{)S_?annu+?{ac-kZ#eh}5(qn`zHpsrz(*|ivk?Q8g@hru0T7dqcg@f&qXPPI)QYeaAYoP$SUTc`Qc45P?cf=A6q_ituPgCQqEkV{=cV1%};=o)KMMi6GFp5MJSk~fgBaOye -120Qae!cySKn5TX{n;qcLDtSrKotVE`JxRQ{m7>`fHdws$|U$wm -o+Y%u?Ie)u_0jGjt5#DqbW04H+ZscBHohIx+TY_v_GefCounxoGmb6R*}f-C2Rq~sgwnngPNF4rdE&4 -a`c}F5&^)4faDfG(4V$=X0EiO6pWWJ6I#m8CzPZ+RC@@u1x-B`4gI<2v$4h=bn2?o$5A;Bs{J{2{bBn -vXt@roptL-14m$I;(q0GVY*e{}yB*i33xl=po!p|ETw9esDzmhjnp$#7zVF|Km5%zJZtl`4gbO2g=I&mkbGJ*38t9X%4%mjX!+7RvWE{(8foZuJm{}WFLOw!!H -kyLYVTaEuF?{W{8HRH>l~}-pX#;*HpAC-WXpj57Dfo|aHArQnKZbaAd8Ceu~ft}r)D;_b>jbjqVfkMA -wwWK3(+U`Goel*^gkskTEbv|7$>rhL80jWq6@v4qhC>VhFJ=WrQldWZjn>L-j#8%ZK*^#N}13yGS#`s -Flgy(f^{(4=5_aj)|dHhtzh&Kny2Sw}flQ9wOm8#qBjJxE<(KY&Qb<64 -rJpaN+Ln&LXt3D2rUQC~u4T1z-&Og%F^2^|MLyJD&?u`MH#KuZKvl9rPNCOD*psn6I`nSs0y(!S%hY2 -QFb*8~L3B+AmI&+QvQrzOo5Ua%K$NJnkBloDan;;CkhUe18=aiq~}6Rk<4hMi^GY(v~3dr5c&a|1 -Dd?OiQf$XMENDJDCd#|LKznMA -Bg0vO5wY9zd?5hUIKZWxZiX2IqjO%Lt=dlx?wJwkDwIkpMi;P-f>iinn)@HiI8=WRh9D+c!wS-!wjh$`418T;P6odbf$lymXW{;ev?|3sFqZpjxM_|AhZ_4qy6xU6^H%yjj(l -Oa->H=n~Rjn{nRb(7VZ-f%sp=gPx0Vr!?L=45S7QC7D(^a=`w-E7FWE(x&{B&E#a-DQs1&)G&?P-7N8 -aFS|Cv{s*76{X3yL^Ye|KO$8*sodJsG;tTPd*&Wf*@&O6eVd~MG<*EZ{!5mo%zrma`Y0-;4WYTrzJOd -1>u*9tz+n@*P0r`uULkw6aVZ+{5$qXi*GcXrnQ3>Q=_d%gKW>Om*y&N_zeL-<;btVCC572912ob%Rd@*>Bv?R3 -P1lDiwfL*}QT$JD~{CZ*pY -+Y$ow-W^v~eAK_TpZn`QI-`kIEp3cM;u%~q!uk3LP$nYEjsjAH -GukHP_H=Nx6|VUSOMD#uE^-TU}cfGH@U-Vszi*>jC62lRJC``$%8K*Oc`AWGx(`5F7dO;Z@sMo(?48S -Y7VrQsbi%dVo+*I4>4^0{T<=~??l>bTKuSiIpwl8rKbE%-^GTE{bYJ6HynaFEY^>p=rE=ols6Z1;XVO)VQYkm&OYUpK&2&U1CJNSeeSu>mO9bm7vN34`7PMF&hU>vEF){whGZeCo? -@xwIYrn+x3*^FKH;GMzz8!eKOvJde{Q_6ENdz1PSYoY>K#Hl$P-MM%270D9XuWudNJ+)HaA1AdENPwr -kz5k+t^p`Yh}8rgK5B`#K);-`Z;i)5Sqf+NP1?#&o}Hxa~8z$%H4M^CByag6jsYNv`!!H0St=EG0ATw --Ub`E-4#%dq`Hs-aNG3kld6x7HHB+$}}^OYQ4q?p(zKxTiM=4b6{%ffMdjjKX14u@D38p1MJM2*p1|+ -l@ONONNWuzxPijWKFJGh1I&;TA>xS=*?h{D>e6cx88OpKHf*b)sO`HoXBiv@BHJAF66rz-Hj{u6dnS8 -1c-hn|Zf5L}I?W#`>YwOa4cxwM2GC{e`genqX7vW!KRAZCjBO;Aq>AeoQ5)^(0` -xSk$UpglV^@1k|3I{6mf63#bk_6uQL`kd?nSfD)&}v?akib0h6+ABExxnhj!XNJi`{(bz0Q=8i7r;3S -fqtn`dM8-oRdc1>kIt0T9UqH%ed?zY?T(h*9TmO%@}SHdx=!mNEqgy^5S3m)l*<#SKl7x9vRpX@kyZT -`ZeIiAVun7!P}Ts(o+!<}Y00n?Bc-IT$`=nYFDHp9Lxi+^XRng&_Svj1fFC5E6aaLtqXMUKo6jXD#+D -hC}_m?TifrZQt1a(^bcS7{K)#&u-(=&o}_;3d|5aj(-J&8v@Gw%@_8`#hG=tb{Gy`$95h2H6_YvgsCFn?%?ct2BK6ta -V_&sKm@XjDT4?N!=<;hB2jrz@Eqc)mD2@r$uT8+a1k{ZnM-Om|5_7>tk2Jlvt85vrZ4L;Sj7u--jT%c6&w(J^w^L5JEIaHmO0xGWSb92Xe -Y;S-miNNL@-RqIH3}bg*Sr1%iH@(X9?gR02OiOeSVbu-Zg+nxkRFW`khh)<*;9t)J$q&yl(&Xcc@i7Q$@dvKQx(q2L{*kMV*_$f$*+H}~GFdixSyZ| -=W@Ck(VBY*^M8Dl8yUT*{&@!$Mwefxtn8II;EoPtTt}-+un=`SUH^;|SUhA8}m -YqlE{$u_7yI!MtXfW72krDkj1hBY$vQJG75dBcb()56=rcW%6UJC|;GA-{%WYoVjuT5q<c!JX>N37a&BR4FLGsZFLGsZUukZ -0bYX04E^vA6J!_NO#*yFkD{xe)0G3F|a>eo0CbUo1BUVMPlC1c0iV6maAs1N?VDQ*o#^wKh-97IIK(6 -DvFL$WYY8RO4nd#~2>F3P0ZT3-?ZHInnS(ZiR{?N32l&`y{8hV!Tzwg}>@2h6FE9;&7v+3k--R01imH -O-08NY6tdRwYG|11yNvSRnP*m6;JJyz^e{3%=CT;}zTWo^?y%T(@A9@6ZZ)kV|FLWiqe*0Qb{+70U#Q -CHr2MbksRxyrG_Y0LgGlr7t{y6+@}_xjybRqCJWT3$DGxyh^YpDe5MJ)5d|&DySPYFYO${LeeoIOJ`| -qP*k3WY?nr*x{?kU#B;1emFoGS^XWo{=R9hp5|4>S`(RN-LtmN70z!i8LI-{)AdkRMaJrDS@KQu_V69 -Pd|qFdZBsk=Qx)0mh8=q7ujK3u2S6l1;M*=(1i7h`MH3*9Q^FYh32tB~!Tkp8gsyE -!MXzUIIevK7+U8RrY1Kv8O5{d~muc%60(+d__pf*e$GgSgdOx_~F1m!dj}bZde2MU?F!40s(yCP~}Ie -wID75&1PK*9EmR$T=Meu(BZo1*&csq1c}%6E?Qx ->o@nH1z^@ -M3t&n{>R379&<;n)_VqHZp-z6LmjE6_L%O#Hs!W7_K6Sj -4f387wfA{@WmJ7lf8M)y4><>Gqm>j9QdkzR=v|W0Mww-ED7L9!(aDX#*npE}jl6TtCw(@X(f{w+0ftI -@cGtifyF@DJFM$K@^JBCIEX&0m!L9<$LG48p-A8I?7m -98_8Cd$P%ECs#I$~U*Dn#F(fFu?HRDae`I29pRS-oj$76Ju8ba_^kJub4<3&4z7d<~3EmBNj66dvxh8 -sKmMuE|zEw8JPgL2#o0IRzRZK~UoI&}bEeuPc-w>Ov=q=|MGIlo^GIT!>>Fn392F&gY0HjMmjm!kl23 -xEAQHpY9jCg;L!rnd|S873#SY%L*S^C`r?F9xcC#uv6+QEKb(aIsmlLrwAqPj))ytXF@b;5YrrY(|=e -5jWQ1K0q?aYS@^2|a0|&{Qz7|>o~*4wwAjbG>8YQ3gbJ2Xa0RMLio!%%153bP68QpD9r|0Bp3gOQ0rR -IITL`4ja+$zK`RhHqL}ri$lrsJ@N6IBsF%QU(5VPX{6yz1VXZNFb&)-E~eev(n$M>&HR%DeTm@5)^69 -Hy!_f3?b-c!~erGrP#iFMuNc0Wm4bjHkty?rfGrbto -L2Gq<x+wC&kwMgz2q;-lX-;aK{gnnH%RngH-WaG+| -3?jbC;)r^z6QYs(ILN$eSza8Y{5mfyB;O0WqaAFj9S96Xwm!Nm!069!(jBxORKQ%j=%xgufc_0oTVv- -h43HNdH{o?Ns_XZZp%jz1AWM);E_F|5T1fO(`V4@vWbfn(q_x!ydcUMHv$@g2#}0Z3!bS%r8R27BHEU -423t3$XB=E^?sJm>2sxY9DShHrVjy5nsuxF*wQ;;h*O^d)pO*x1N1*WD*oxzj^gY|5V=1eMsJ(^DyQ( -R5-5G66blNZhe@VC$g|HS|Yq9)>npypeY-MV3e3gC9AeNAo_9_#|@(~vaaVWMc8DN)~!K-*3t3B25aL --7S#;bA0i1biV8pe&-+cA?gGRKf{D`$x{k?s@>&=axXOX0xE>2S#RiQk_(t|2N;<|@F^)tk2^>-ZWk9 -2zJ4;bk&Gc}m7o){vVe$1q1{=Y;ECXl46*y^;O3_T^(5^ODiJIMbnRY$9JUz@aQct2d3lV_V#15CoY%Xh_fz4kFpJ -9L=QBj4*`DjBWFw>SqRF68Gt`6jJ}~0d~)_=dDBkOz`dqpq*|wpiuz2Z@>eFD!7=eNXXe%`OerrdcL2 -bts6xT8oIMwv|@+*iTcCTuYpiNy~ffZjfd17G?vOQs7we#bi_dv0{b?RU+30WSq+6@yB@Fma23Vegz} -(^qX(nr#zaA}rEn6FM_SH1fiy=dyok1B)?9!vxNCvSEhLA` -xRW9@5X&ICAkzo`>Dw-5v)OZFy9V6nT-(Ks99Yb@8Guzv?z|ACdL(N4lxoiYrs)L~tr4SHvFmYT16ag -am)OQfJ{E*RT$uQAZ|L!+P0>)Tl;mhM`*Q1G1S@dcSkcsRA4$f|#SpR=05;er#}D+U7GS6h3^T88@?% -HaVNVK9RUH>xlPJpV7Q`#)m}m}$TvG$wE-yh9%}vesC1H+7`!<=aJJwzUXXj%c5J219L|Z}x!i@H1C! -{6K&0h>Hs&ISQOctWoqPG!XTv&X057DCsTgSevK@I>}2W_z=X%xmDh_+nlZ?tb;`lky#cVgKrY9@DF>Y?e-f~;|wzlnO(*@=rxC?cfA*gC5lVeV@|4_ -e_Ks$Y23D-7HmE2lK3M@JLbI6GDCh6FEkjz3&l9lCUl%pdE;oveOnGj@;NVrlB-t~ekaQXg#E;w}7EQOiCE`g{$PFlMtp+>5nii?vr -3St9=U^?q+)fV%g>|LDte5|&7H-4FVz6 -JzbFR*9iz!h|UJ5Vu`sLQ7@^`5HnUQGKwy1fP9kfHi|`$_4D%oZIHQEEp#ZG{B;<3swebE)3O%yysh% -w0PRJ(JY5fIT{kzI*uHUEs{B%09r`mc;Rzh!%!O*R0Xo3nZzRt6GAFGpZpwC>+uEe#V>QOo@IP?yE-L -?i_VZjH$q{sJJ1f133JiEw3-pQS2b+r%U#nHa??kiEY|@kV4^8waf8B*lFbG(La^mP<0kRQsj_5sP8($s|tgS=t6F=3R7aKi}jO4M3IxSoMbG -OWF_Mt)!h|P6h!^0Ggu8K8^OpSA@pyGXL_+-w|0t83hdZVspcBLS0+{S(lqjX+x-oV#i=)4QxPw@SD6 -XBBJuV+BF^80u4wc5x;#;0*IQU9gPTB={2i0UT9v73A;e+>)s);3ykw1e85!GCru1davw&vB6sVhO=z -KcOP{ -R6@sL~`%Euv4K=PAZ9)`k8wcew*!H;Dn#UMFye2Kt7F4%Y4l_?$!9_xV)AKGz -LU6l&MQ{&1Y*wm9ITp&fB#%h0v0%1(T95-29-K=$VEOl_i}BYubXQYj#t2KD?~z%EW3rR -%A=C*_!L>XOT+ABz8K{vqnu=@G2!Ee*gzz?gZ9RT*Elf`slpNG;n5p<-bjE{u@>%#EtRGuHIaO58y*1 -wq83Mq$*=?$LU6quE}~^`+5EJ<@tnXlJ~(&dF&V$N@0evK*Sjc~g!zeMqYP`u9zwAJ!^>apYQVj!+nC -`ft24SdzJZFk3RSXZHy-G~^6`3XaSVrBm@plN(dH${zg_~1Z$yZnD4Lh1eh!^G$Nm5ekAYeM6OCc;xV -iN_#JH>n7JJ|vSDMvBLw+~enFS*Twm{BW(WeKU^h{#A08Yg`5zF)TorT@LIid5#MBg+dBkq85#8Mo$1 -!!SS=KL&TFl#s!!U0Zpp}U2Kj$nN}X3vZfc*=RZ9W0_a#)2gFUeJhd&+p079ue2NLC9nA!-JSQhC8DhR8XwE#U6u@Fb5TScrE3EGE+A=93~24Hp@O7%cbXFWes5lftv5+)m -6VmYTm3JqZ}tV?7)a2Z{6+^prG`=3*rff>HJhThnH$i8v4Pw%EaDkD43JlGri -P?~Qj$j|B%ZK75L(eVvBFO1YJNb|a9e_iT%8azPFWi4NWk7@DHKDOnFEFeA_T9lsl=Lq(Uceq1jStEo -dYeek2m>|4;{3cmak{zMP$*rEbG562*>NL)@?P8$JJN-!+itLW9ck4CTBOnQeN`J1MHfuSB}tcxHlk-_~`;LiplM^2M?dUn -G@SK65Q#hZGIwfU0_CEVQD#OhtZ?5BF*5rbxlN3ggsD^H0ad8!n1K;6?7KuOk5rX!r!n0b4wBE10n0rq6eb@>_Mh77MEMV?QdaGOg{G8uub+Z^ -XmB|RRD*M+u*@E^fefGK;Q4+sT8)GkqDIF@-&THR9>i+3}KfEPEP2hsSl4WtFBNwU?6x1&kx8BN3uBHHSE*U83JO7Rv` -S3%B!c>S~skf29|Bxd`I2}7(pD52S17apWk=Wu4Sq?vp0>@Qc$Tt%n`4pl4c4EZ_w3MIXnZKizuc))5 -9^Io0|K(V}IGyU*hpNKpa`7T+P6%FypB%H%(#tf6CkR-Cw^XbXjgV-WvD6_3XAM@0+u;86B3trm&?z6 -A5lKAVAQ{BHsqR2l7egMvoOw#LibhWE%Eho|Umt -8U3iaH6W=Whelz6+qI*-=Mo%4#g1o3!HzFdKMej(XPF?RP&SB>#|NWML5iU`nQ}8!dAqRe=SI?lYFY* -~4$e$r=)+#tlJ}c3K3Gf-IPXs -xtroV;YvOfwTI>M!=JN9384lbV`J|cz7q*T_u9lXMZIQWlP)B7#q_QBakd6Na6 -Zyoz-;2nsINY!ssRM*&$HY$$5$8M)))n_MF-0`9hw~7g)v30V!{_nw`;YS=K46470XP(W^e2aUu27xP -3qB})=kbbyWxSmSFz>F5FtYBchnW4%*OQ_yAqiZd@?*b=&w*9+qT+SW1w31`G;TCkiHJ%X5c -W+CD1Rp`z0XU73plr$vBGj(Kx*%!GA(00-gjR~Zz^+;a?+$Ak0>&*dQl*SR)CXIqq2*&k&P8=cw$n^4 -iP4xx~N&~}b!=`k>2r$xPYGzwfy;vfYv8k<=bWS87FGR#fv>!(oQuV8b=9A;*V?m@@0MOtQwh1El2HC -Wr#`Ab0Vr#_n+kL$oEe$TD$dfQL1!xs;_xr(TAm{ovx*b0=vMn>4b&(nY7Udqh*^SVkYjw4;=HaM6{= -a5Zdn^2%s1q|5FKtRSrDA4A@ZrNtwT4@w7H|P&1kbY*NG!ME8oq+cc0M3@nx>=%GbGg~>X2z*{GJ=G+ -tSd#IV)-pLPqO)uOaQP#4+D=YNu|6ef)r#-D%wMpSEEMZj^xufo<~`7M4hxQFXqrxNXawa -zSXW)&aE&S@zRnZVVE3DJsqy8C$>PRvv=SYeuo@Igc<-?i3aEc -69sbW!nNp&MLg$Rs-s2g4vJ5*Q#)`|17On4muSmI;dKr*#YsbPKV-OS0+TUJf5Dk@8Th#9K1*xz7)y1o5Y#a{?kvJVIOQPd{P(pMFAxxVAz_E11+~*WmPH^NPi|1io=4wAk0@bfW1}o -|?j)aZ%sX@}ikR70Y1 -gsmoyNW>Th_|D_JE5|GQ=(Hls2ntm08u9?6-HkJw9fd{=^}(AqQ+IZ1z;BJ;~jc_HWE+cc{uf8G&Pyh -Jix6*LW=HYl+aH(8`-XC(z$+lEUnS!PV+9o`WJsGY1N^YQY3}eMHQ@gu=lI8Q0XLm~N4B+EVDQwLF6u -H+n5ZSf#A}8q{h`hM`PiOTIuLc27L~-46?zC{jGy9}mYzW!DX`Ej)hw_3zF?ydr5g-O62T@G%L~uJzU -oI$WtyFM=pt$zQxcCS1kbh%53eGI8M7d1vB`8iNBWoxB~%Np|@Ziw|+|#3y}X5V3U$ghzq~N(GHuqh5 -mey*iZU0p4sg^k$H>Y;4q=<-e7;)cjWFw+}`_2OTr2`=pN0P`M0dkV>%6frA}&;>VeT36EXH#bNsCx< -Si{3@Xy3-_aDR&~t5&;C385El2l9>}hB;uKQDo|E8V7@$lx(l>->F<0O*u18>cgc=K3ss<(A>WP>>lC -0X9-s2EJP_YWS?qq(4Sa4Fjj?`ko=h&_)P{kBCe?$xS5?CaW%s-e)zGp?C -))rbu?md5yg?+c-P=L7inFqCv^&7A=LLbU2i_W~lkrs(sQVjL%uIJmC-ld>qfkXgTs|jD9`WXJ -S5|N7Sn@RfLBX3$jE53=vJi4qZG6*`3D)2ENQzQBo8i -0Q3<_B5}tvbc1iWuR=A{8WUVQqPSyD(f51F!CV{HElt&F(2GWz_^nhI)0Xcx)vw&F|eDMN4BONNS7#` -uc8>$=h$7JANaZWbR&bXkb#;hZ>Tt@trB{(h#qUyY9Blr^-+NqZxR8_I^sZlvpWG5jX+RY-D=!FE0)OFXI2KRl$RM#2*xMulQE&NTRc -U69EuM?%-a`>fZ;p-SOY*tMky)!q5-RIDq4zBLZb1U&ad@qKZwkebR~jy4o7oXavR%|jV(~9yFmmu$O -jD3#hY;3y-do1?yQ?m=I8`?Rv?vUjFot2W1E-3S@)h;N1dtPRVi@+hoNq6h888RN}UI&BjnBd?i8qZZ -L>f0oxCrgm8s<*X3!DMRG<5?h8liqJK|42nP~dyCwcz00sKAVr#4aCd&PRD!3vno&|{bj_cBq69&Pgg -ZK0FhWBncLOe+TjY*NM77#8&buW05!5)T`a>Kx{L}-5?cwdS -w-?dN`WhV|J34JZT-l^=KDoj)bKpDvZ5#p!e?Blg(T<-aOLRsQM@jjAdHMm`l?RFHElA+^F2^6<#Tv) -W9dZ_>P^>B&lZ&^FJm{7Wx)iV)t3B0-PSx?g*D5620~Pe57`IFtEl!>CWP)=~d1BoGHgW8*b7yrxuJ} -RRlR)=qP@xoLi8+~MVTs<%OO)%9^_(udhTrn}8n4Wa18L!wSLZ28h_-me;9=BIpDesIB ->n$vh%6&5mz%BfNlbSoQ))YMn~JwMiMV32I9NS8s$Z{3ZCfGI?$&A))ysd3Tc+#Ej|G@Fp!|i7=H)Qa -B#yx9GMlgic%lOr|@)nHGn|jK#;a^ke1ofLL=f77V`iWx!nLXj^$%({n(^q*MkKOIESBOnM@$+ZVAO9FV{ylDvUo>BT_0?GY^rkH_u%S&jumxqmy9FrIJ=2~Q&+*~BfQ9V7G0s<|!}LG--s*6auw{kz9aN(v -Vs~IMbr{N|;a0nVc%qGCOH@vI`k3-VV6248F;gI~z^xc`$3`zQk`n1R4!WciPNol?QN_%|D)c!q4m!p -TmZ5&${gfB^*u-g{YjgStnm|z5s5c@ofd(xF2;=# -iA29D=wLup5_j#@g!5d%)(@jxb`tMD!Bo -2D&hbRGho9EyPu4()H~Qq&QNKvqhHDk9ysyjt4d_Kp-Mv6;6!b+L+ZR~Nna8IQ|*on9>>lLr}`U~2vE -yB%6mJU_l%y~2-g+gBWp>m4-#K&KCvIN=Vrik)(7%jfLFD!d7J=xuY8b#dzU)FlO8_HaYV -iK%RRJFP2w!B^4$fdnDvbvd*?mgE{TMmXA#5W_Zsf5N8swkKr>JIb|RNVaPBa^Z}U2DLYWd#~RQ>@$b -{XC+t8pYHcp_ddK)6#4;lTPSKr@rC51LR -#}T5`Szy>z3tLcR=ttCNq5Er|O_Iyf@XzPt_bulePNnEvtY1X)_2=)m-{4ki8lPY|ZD8Dhzl2VReoqh6+HMV;VX9{h(Z(^C~JuZAu!`5J}l -o>Om8x9Zg*8qeI7kAECJ?*V0!{ECcVBwVg?1f3FQMJ-~mVo6m3GKQXW2Qt}8M<-s`EaJb_v2hMRjts> -_d_A`_Ey6O3y>?v5K;&z8e1Tw2mDhS2#UyjkKz7+ttBuA{ -Sbj8Brdc(j~gq@JuWGUSImt`hV4E4CCm_fi@~tK$;Xs(iWk;FNNd#V;_ -|u8Kk{&zzT}8(OH~O*fyt3>9+#_x>ADO9KQH0000803{TdPT5?&l|Tsq0JI(e -02}}S0B~t=FJEbHbY*gGVQepQWpOWZWpQ6~WpplZd9_(zkK?uxfA^6n@x)v*tI2b{?GhoNbQV1iag)7O=}>}g*u+JX@uNbU9}D5?s_ -)s?pJ!hSM`3jBeFtQ6%>uqwe9KNm=X+>->L#>c+p9nvRu^-m|9jDd@kS=P~6nEkyRz><||{giIKI9s% -+K??)K6w+Yz5G6Z`_t|1&F$Y}l#d61swerGF3|j4gm^s@_+bvA95O!@H -^@(JD@er;%Hs7KHe6Pzc;B8X7>Gmh20qar-eAX!{PY$+waUN|EuYP1@W>ft(rVfEL6Kx7`Hw@NP7Ug`A$|AZ7B{=e9UcoBCVjz*;{t=-n6i -C4x!Hr@(8R&veg<5rvEGP#aH51*Kk=hpU+H5w#CXG1mo|e -`6lU$2efBxg2qU<}XQ9yVjTpV`>62%|PJpa6wCr%l?6S7j$u2GPzIA~Yx&3Pqj_3OW5w&K70kh-mjW0 -{Y&_}R2RqlNtAhQ_jqBAoUlqD21nIVpnUiuwN} -FVOj`wN|xu0d3m1oIGBnGYLahP=|#bn=T%t-RgwfLn_jLuSf-`v;PMDM_XH?%#f4iaB>oTx!nHWIRin@gqC-ZXeaOxL&Oi@9% -99$FSQ1Gp9sy^cwkn0j2j)>BZ>URwNcO0j17_0+Xf`R%0l!MsAFZ?Cgay$E-8NR0z}(;Z_-wHQdVWEj -Z4+8rVY4XDXjyOct!}{a=1jq%p;FLEBS(=lB)P)`jHpB5!oUluc)+zaMr;QLTdP2Z**I$B1YI*lmyHx -Tx4;DeJqUy>l68bY1E?RA(KSc+D9uMO))VHyU@b7iluOMZUc}iJvZkP;p=cv03JLWSwF~5oGYQucpi8 -p9aAO)m(w&#a#A2fEh{ZsT_Ll-@1n~ibg@M6TbD;@Fnf^ED=f*D@hEjh(xN+Iv`9zeO^*zd_IHW@DYi -+CN^*7Yl20F&k&zhoRh4>mYid5X+12Xrz)+4&8Lr|D&Zb4#z`a$%RKX1(mR6ldKUKfd#H!pYTBs -3mg?m##)J;0|$zfW`CV)M?!a??QZ;!Vvc*)hcEx&`u-s2;UvJpm}a{Zk0RCX0cNhe(|8zVpyf+dWdB$ -=Ay?B&C!p-o}f^>Gm)2Shvh`;yCLzyixl?wefj1cc|=H$n?(*4gsG33K@e}>i-a|tk>i`0vThg+!|fc -laoe3_LPWACRAC%Y=2KHJi6{T_Wp;U-j53WQ%5j-&1*e(E*|)Hl>K%gHnZW+Urzd2CGsZESi$#=+)2c -UYvSj6F)qCPtW5tNA;-mwG&wfxXxyCXRLsZJHTq-1AtWDY0-Jw|v`2vijJGvDkb6m4T9*@OePj&Sf?o~Ehwx+At=+ -@yDf#%yT|JBBbG3Ie-ch}Kku)+dSGHjwac3>}!5l`Pt6QQBfgH8+Ge3?wet#IlPh-xZqVO3f -EwqW7_{K@c9eOZkhGpf>N5uDV<^p(LkAit!;P@fM#$SN@BJ>SbvdhS -;jIwSr*o5t`yZa<1{W(Zgm@$6{83Yf#obG>NIz8c|(9_SxqxrYG-G<04_UZv@+MkG|pVP2V7B=Nn-Ym ->&KH-D=mSAJyo9*brbPP)MXPRqkeIW|8;hQKMD{xY%v4bb_otLFQ!t4s*q^i9` -Q)VUq*b8vVTrv*x=jvl8PHRcvCIlgqS53X2Nd5SUSz(pwmtIfY+y;PkM}_R^qY1ljIMfwB|*DOJC6Yd -Rkw7)*zKEm{~d)~zofj1*5;{#Uq?;55A%31sMKI{WS3hEqurfzPtX{vVpGioho*%YC>o`UG0(W8ATmw -J`N@@;G{BfAY>QWge-ifFZRpv+^pZP0&%aI)F(~4~PxJa(OtEOLJoeoQHMs>zsP9tJXlm~<(u)k2ol- -pDWQ=TZ3Ujmm6&Ld4j>(JjMU8WFrvYJ^^z=@7)^-DP7a)&=J1go=mT;r!n=z#LwU)IJe83%F*S9Ru&; -d$f-5@&(XOl!|R^ng$Xxi$${26|B+pZF}?S3>0zJsQ5Tdsa@-Dv7Eqg_?lIU*XRk-U8&-nyFgT^qCt@ -~Z4M;r)roFn;=5l@3%~uNeH^gMzP76d>pF@LW6UU&GK)n}yc4;&;q554 -TkA^3*nRJF-iP3Wz_rCod{C^`ngXbB<`x!r(-|F56?)T+s!E&r=Tre6Et!sL8#`5&Er$YPwTJhy5hIrv>K=3<)XNvXU6djBcSIk&ns1z_3!2T -)4`1QY-O00;mj6qrts?Le0Q0{{Ry3;+Ni0001RX>c!JX>N37a&BR4FLGsZFLGsZUvzR|V{2t{E^v9ZR -!wi?HW0n*SFl(Fk^zN>MNa`-bk}v;U{fb`)5F3r1lk(gT+5`Eq!RnzcZRk;7%7`>feJ8SQk*w4Z{7^G -G5Wx=Y*V?)K$bCiD7A4+tgJ372ibWYMVI}xRt}D?kgIwJj8VE??1bHQ-W7Vgm1iGo*77M43WlvyrK9l;~6e~|{(PMgy=%uXeGsEz*k{O~!O{63w0%I1I1X1BB7F!Ig7_D#g_@u-LZw() -Aj8dhSxf5hG3OvlSDMj$Y(l--w3Y78c2e}PL`XcUHP;4A%b!#YtE4c2)%hp!bTdjREL132g$FyTU~eQ -kV)|D%Xl2E)cR-Fyq~&hI5zro;iuI*OubT?lJg#}Vba$3uGc1z8^5MBZ}_8`OhT(q&mHL@u)Gw;&d#f^`Nc87P*nfI8;W0 -q=19*ucEM!vb|LKI7XhY-8s9CuRa)G8xRhXp)IcNaqlJbEButz -V?Akehs>$uJcKW!b=jk=%~U3?T4rpGn-&E+yMe4=jd+l3~ftJRR7?jSjzAIhI|{z@;c3lOR*QJZbvRE -bkY8uNsvjE2DwEDZ*aYhBAF4QJHexSrD7?!^1|KPCjiD^q08((QERvW*d2Dh4WljYB6Hjrb0Zx!i(vo -nE=r20Mfz;$O5>Nvopt;;$3G$n#6wD8r$!`(o;oClIXUs4HDmGrPU_-YBUTLk4FvaDTnCAI9fEC -+pgL>(=Z{*kO{8oIWqZT~`wtx32xI&Eg3;!56O>_6YvD{ley#zXzej_Hri@|2~}mq`LaUbwO+`L!I>+ -N0LVQg$JaCyaCZI9cwmi|7!LUj<>N^MQk0vEek%x;Uk><0HXEs}P##dM&^7Clx+mQ+z1$D5n~zUP -IcNQ#>Av<2255|2b4l84WE<)OE2y^qp#+jo5{(ljdeP2F};ww86-cOvD#&(75Ijl9)gw|%wg>bjKrL0 -Mm47uB`?vo#_Meuo*-H2C334>{7K7S#&}_ktr^`Tt?#hIxUOpCWWQ -!mXUcu#Hza8XJzrfLcMK8mF462Cu`)|i(=C)qt`Gv|4rXuZp-K&z_ -?}f1ECB#_fEi{KlKf?B4Y6{mIdL&!LA#%E_|x!6Xj+ -_Xj0(Nnp|X-d{3+Q93+hN1s+ooalepVjs`M0<~KFpwuGhE(ZC<$D)*Cs!_u;7as+&5T4dDLA)ow)kU>XjU6`gR%08Pb~SA8zP` -ndmzv0xp0Cmh!`NP@Bx@SL$-<2OWi$t6Cg$-&dnEg;Dz-v)R#%t+<6#*8M2ah3ZPFYM7Co1Z4<@B3wY -1}YR}JvKDt_<9Vq5tb)-p<<)qh+jNiqoOB?$8s^Zr|7i;_c|H4+KZ3mim^@g!@nL76>ya&xdCWCkS70 -RPZ{&Jd=p6oBUo_^(^ULr>5QZZpI`fOQW#J=#_i8ak6s@OQRYO(<~A=G -nEb8c@R?$SWh6<QHpMy6;v1mdj0 -jb!HLdo?UGyv;HY`-z0hkR0WvW2zs*$F)zUy<~b3=p74GXWmS$}YHWlLCBik=mMGz&jT7-Bj1JpMY>% -T3j4Y_WtToCo)#e@iB{liP;R~n#Vl-W#O -I=Wp0TbsgwZL>wq*PB+VpT)_+lH4QeZXrEfbdO-N2zwqBzKQ8o($*!L?_t4E>n=&7gYiNQ&jc)HQ4u> -*~~Vr65tNVtUcPD5Za7$4N8Dq^m-eeXXp6*98pW%^@Fa4Z;17z`v_A3K(1?;%+P%ql_CSq+TH{Nuk9 -F+Gzogxq8@4%vnR7SHr%kgUBW=&_WC=lERL_D3tUa(^v4yLuC$C{@us0;UQtn7YjH)!>P?DckQJqrZS -n&q!CRCmOeJM^`;X#NJ60J%Q$Y+}U_^$}raOpVDgi1OK)4plzt5HO`)OB5>buX5z>H1V=YxhUKmi_hf -^i0ag5L^AmjWzHwGl4XRo^@kx1v?58FW4Xa-yTrC69!3raQYO1(mh4%MM~oz6TcceDs4USE9sz -ZLp&bZviMX@7A!3UPeHQ%$)MLt4|87O3+sb|ogPziw9g>zqDAjE_co@KzLss4}H{8Wp<0O3p23#zL-N -g3Gfp9){)&jiDN%1hrcr+Hx>E4mH_l$(&Y{?r%aeWRg5(KUA`Ga -llms{`4Yi^7UaxP -DvafN{62BdG1vt&dzXrA3lo|OY6hA9lfOr4{Y8w-2n~?(=K{O({C3sNei6WF;fSa~GTcR8kEa9edK7o=fS0O6ab5z-vIW&eym87dB&c -mtOaMmk|YP`}TP-Lghl4if>xv?(({;kz!AJCXZYkVU=z4OFz^2`IYnY(GFn5mDV>hKP<z=AN0Y -)T2Am@KTUI-OlcKfI$u%E|HFac_z$znB@BnZ+j#=Hc{m9AV>vuFw*yHUoFGv#W`7F3rIUsjt5TDx^b) -v0tO7&vJ`?AUR@S{%;E~f=e>}sJ>7D^oi6cY#6+kDue_DOs#YXQ*M^g<&kN%gFqIhQ06Iqv)Vh(%+gg -(*2dCv^MaHk(Tu*hFjQSsj9}_f^fwtPjPn|6VAPHCR3Y*2;uwG;Gek<~;k|3e$FO$%Zvg!07zzB{A}8 -CsEie?Ujt~JC9Y#5{=c6&FxcmU&nH%AmpDH}`HpJTraVb3jsV56o^TZn4rPdwL)7Rg>7u^3u8t;iFbjLnk4u>*n&Z$9_|DyiZ!?@Y*Qx$7UpFG$2vW -meEJK!8lDKJZ)^%bj|mOL!5)4fna}>x%}czJr*zWYEx?vCQZa(=#f8>-8E^F0iebO<;@3LA*AR;GQbA ->GdYtiIx{c1XL^s*&jJ85psXH7dXSe^*~;$V8d5%y?|-ASUMtWJ*wAvtwM7YdY3Tpsogs)varmR5FYz -|tm_v8%ppwM7u^HANj~w}BXXT{&1ik(c~d$}`7Ru<+E_+w1fiEvNp!mFXp#ieMRE~`9e`w0imd9Jktr -WMyE}c+VdZUImg{VD^RTu53~r?eEIqXF2+5CD-wbP}IlJrBr7xH-Sj@g>s(`=8^4E&}_s4R!jGi=>93 -oY{v&-S=X=;d|)#TcnBp2)cdNF@1nljtq(2u1ab-wfl35K9v1Uezi`U9=|3d^nnkk%hjj#S4zRJkha4 -wCmt3k~adqfv&rh)K2yY_piX%3#f;E?Q7EHK;1utm%n3T%Wzv#e2`VpZMr2TP3aP@wedkL2%g}2Wif# -^fX*!*^{pw@Y%wGO>6?-2S&aohq^XtM&oR{br6^pRe|{LJ*d+?1QyfrE?4b^)-C%^R|r;YfGjUAKE#br|1yy{QD`g4PyLYPmUdo=QW+R`AhawzT78y;EEl2M4yQ;#7I`Q`-xa>!E -Co^$VvN51jQegWBeoH~xHI=fxHb^s5XFZ4GqVLm};u#vWB6QI}uZ9tSQDGef7X%h`YS&O4CKiMkDo4m -uLL+>=&KZZ?Z_4W=7LZZR4k96Nd3qY49?4){ao-JTVuIAL6{cm)94upt8#bpJWf@3Iy=u -p!b2ReQL#sXERWg=#p7*jlJMG1BeGr;#DYl6S=J$Iu*r7U(nxoOj@lpRwO*i=3a`W1Z -)HhMK#RIgtVx`De?00k@yE!6NxnWC-Ufv7x>ZlA=+N*QmAwDXETt1~j2`UI8pVcm94lD*2F)D!8*?b$ -$Y15e~quY_Q4T>Ms#Bl=Ml%EMj@#2DD#bM&a(nMdr -nWz+=b{z8>i!#pkT=>Xb_D+x-QprDb$0+I1}j{~6*u>Pf3u*mn!xa+G0;mOgwKMBu}R2oD1yH6$Cp1^ -7L}N+NvtU{4FW0B%wD#%^Lxm)aQOWA73C3347s`!jo6y*)qJAuAZ<{B&N7UO*#jS+nr%~mt`cX+J`oQ(&z*)jjw&Z|F`&*sbVBrKgnTQ=N1 -@Z%9I6tOl8BS{7#3{W4yXu~_0_Xc9pg#uT=TV>biVr=aLXF{eBN*%8GcCm6g -eOZyl8p^s!#3$^tGpP{QYx4Umz6q4p4iAX9AR;doAiMBzMD(ZXUcua}WsH8GkUnUZk{g`?Q;qcl!H+2 -F?)YoF&Z55JV;PO&l=2xFC3G=T(rTn}Dq5o)uZc{2)~{rN)X6{Oh0rU`}8xvwidC`eJx*N$lK-QprH( -*X5*U8{J1l!?;iBvW%&p-O0CrscT60zU>c^Y;WoRU0v1+T`QO=Eztzg$19=1B&-q)n_PXbUGg!VmO1- -NCCqsR#dsGGL9)xPj(NynL~75^STA*y(|wda;nOK#6!5c#d3H|TcXi?W) -Q?F>Z%5oRCrGg#7rOdI@=%EcQGQxH6RKV&*B+ku@Q5m^&G1I@-< -|ASZ)i*XIRR$B3>tk4yRw<&oE!w)mToWbQMnq_WH{uw6!zs`)(vJ{1lBT*J-4QUEm*&{0foA}|PtA}n -{$wr((;XS&;!JjVS*&OAcq+k9hy*CdPLugOO$Nij&wtS-WO(X@(T%>F(SfIvwRr@SK;VbMjR)_?sXQm -~aIP*6jm!{OjafITz99^aoXf)ZG^a1fCg?Z+^f`e)sTgpcY*8vY@4|P&qEE7avD -eF5)(7BeaNOVJx&9=@cCUMHbquaWxu(gMwgGH!C|)RSoJng8+)|?v#je{9x7Eu3gC3kaUOH718|Z&Mw -igw5~2pIG|FqRc2psq8PL$=sCZZPkg7=5qDB|l)I^tf6`2kQrJHplVttDlJ+P`dcvu^BzWtCAYwLU_B -U2qN+V{rHE{Ch{w4Mv}oy3pt_CC@Y<3U95q|_s$3fi}LiA(W!gn4AR3shHfDDg6ZDaAl~yUV1x;kO7T ->?Q&N(=^pL8b>z<$9hPA!UJ)NkFOa{1()N(7ZUl&k;XR=H9wZ#62d`r_-TmQ<3RjT^y>BheE;$pAB1P -%OUO=D|A4xsW3)9G)f=xOreK(Nu9AnBe24t`8)qZS>^Oi~*W8;5tnAuh)SMzjZdttqH@gzx1fhLqi(d>_QV&r -Ap0)1+XtIMblhyTe+pP7;aGRaMF+R#{6#h>p%c-M*Jkuco -^$H7(_JusLjqk)yv0h&KYa59tgIY_L(b{|0xa_Y=Q9v@qF#`3Ee@K!9|CXd~n%A^$d`$8_Mi^xMqG -}a9Bm*6{-(+NQ%6WJJevO0 -+&xR&r1;DS2cV_*LiR|v`Yt84bUv#oR6Tj|cf2O_F;IBT}pAf|F`YEV*>_>%u@##+uLC)7Y>*nL_R=> -2B`g^P&xW7y_*fy`99UV~30p4F;T(@=KT+F?;b2nS8Zw7j;Fk>}}EXT7-FvhC#Md&BZSUGV~LhLX6x- -UkHww~R&AgkTPVyqT_*+QtG!7E&)oX(ioJwLC7bztM;8LwHOd~qm3aVi)Cm4<tHm-swRn>=+#osA8c}Q+lZfIkj364=Zy1#U^!;XXv7TDe#i+*{zQq -gqBxM4V2>eT~$wGc2nz+bK(^YJ&Jy)qW2&#^+As7;!tL9!BLUw`h3^w3;z}YJbaNQ-RVfw&%t0-S>0k -q17Av1{Nh`Y0@1t{=9fY(Qd}Tpoo%A3U+K&PR}kvFB-KhvoC}U|aDNO!&&P(JQn_TkY$%eKpSQ)WX3p -hTUU09ON&kayht=O=G5_^fJk~s)$3b-1$qmXVn!hV`1BpCF+y<_-WGix;mP=h7^&Oysx)C0eQ15_-%z -EG3D!!NU&S`8nmADW>n_Ec{G>WGeMDsjLL_7r*U8dCJv9E!AZ@UmW;vJTgAz`d}EphY9=w;tnn742B% -zJ5eTAvFSXZKh0-fG%60+bc`5Ra|3;#S6A9-w|#p!%iO1l**{h5hGVj)TU4Z4;M -S}5Vdg{+eZu=U9>_^=j{IgP)h>@6aWAK2mmD%m`(ry00062000000018V003}la4%nJZggdGZeeUMb# -!TLb1z?CX>MtBUtcb8c>@4YO9KQH0000803{TdPUCiy>L?2U0JbCm03HAU0B~t=FJEbHbY*gGVQepTb -ZKmJFJW+SWNC79E^vA6T5WIIN*4Z}UolHo0xDwKq_0tv6-&|j*eV+5o43$b{@6%Xn<|$vWDc8*Kdl9l>tR`%1Or(#S&5<FGHN(=4mRX`1iblqWMl32JdlaolrhVg+`L1Kh!Kkx0O-z% -NH({sINXGbz}+y@c*Dt5G-Wg@P>95$E{Gvk_hB#L8YXhaogJJq_)iaFj48gk5fD(wSP}#byc;t}ff)-Dd!QrXL1H{c@)^iyLlwhwNI579q{od^p|eM# -@Ks6mR~QUIIrxF8;hN!}z$1?bq$yV*JfmVMKz=Na7h)&eyXqa=_y25O$U)5Gd9#g^bn|U1in^fYbTRx -kl(Td+40lL)K8)3VIeX6_c0378eKF}yLS;-f&1)a`Z^10xe~Z?k52t;Ye#Q;&UnsD;zmV1^E38XbVJ3 -xqS79)RdLE60M!%U1>FdkhS(o|B(>6v>QUQu&S{MU4)@-CmS~~oDyVp6pa4)XftqZqxeSOyY)cU>%)! -bpU0`bomp`no49FmYwg$J?X6D%Ic0rSBHN@NXXr$JybRe|u?V9vf%Md3IssPA=$fvcK?8JjZjDoRY2G -Zd)RL`=sb7VJq9`XYWpmXBbuholT2IjjexNRF8CNfZd3C)jbE{-yed3 -By)YzZz_p;|w0K5q>jZGg!FNumVg!?M%^eBjPG#s0RRDpjRn{0#sn_=kO76xG)kI@PujghA&H#Yf43Z -jHI~o#cU=gXjAOm?15DocK@NGew0()boAb1?B5Ao87iH2+m0eK7HK^`@#T7-a!im`eOM|4|AgP;JK5~ -NG8Pa7V3qJ}mV5VoENtPmKA0ls&Qa>;m_S8}}N`_vh*jtN&#QM-g3b4;W(o5KF9l3{933RI1(0xS@S0 -DOQDI8ne2I67e`C#>T07|g5uP^R;?P^&CMR^@TGe$a)?axH$e6ruJ+_)x0=9=h!ov>x}v)#Z7mv1Ggj -(4{K;<5t^7l-F&sp=Iz>Tcjxkv6FWk99`4i8f>6c@JE{50vi7hYv-3J?zlm&E9K=v94G6R43433^Hc-XfO-Drtl_2A$4Cda=@KXoyvc@F3C6AY -Eae_v+=#=da(??t0F%r*((xXm(nXhIXRo+Do)XRD;w>trMi0tIVVnrbmfM@s+RmR$degdKA*PHH>A`3 -(yGYu$TeggIMAkCqkpbp&V@?K4o(p;uuXm2J;J4h*1lOfop6v<LYjs`Nw45BKV%C54VOF@YPRG#F31tz52C}T -xfw`=LrqfKZl10&7#`bvAt`Plo -`#|$mV>eS}M`%3Y{s`B#@e|wmimDtVipa3ijjOhzcx(9rxj+?th1*PzZ_~g;)#vh9H;{m68?NcIBsu% -35jvCn}qWil%*(F0<}k_{2sIf}QEf&YFI*0kyBX?>g^yYeCDF?$CWwu-UQ|$$IZkG>Em5ABVjnxE0)A -g*WRjZr4_Y{K#f(KgAePEWucecxlplvG48feXs%t7O<_D_LB%C;*173@mEQ -_e$x8uSczceuiR&*5Sz^;x=Vk`o0=Trqv*^es8V%o@#GKrykbcaT)vxSl%(7299Dr!C90J&c -@RB1z?SBQ%~|1u~s7(Lz11+i7$JVYWhIJ06P-HrZLna9|R&jKZ8MQMV75v_GJfr+4VHAeRX+x)h!+e7 -6nncpRliwEbnidA*yO2s(QR#X7#aJt*&Y-A4nM>5P?$nbd3>iF1MLKD#6Mo@WV->Wino_MO2>pZSkobtz{#>6;IxHFy(Viu|$mo0=D*pIX2j --2!fSlI`+W3M&YWi;(cIml=j)d!Gbkq9XC7v)$q`A-=#Wr@rufY)&N4{dCk+(58Pd@p|UlSU14xG%sdj_5{$V`0>>Z63mJTyWe=^*^}RE%)~A3mOcaoe{yH|O0??rrb2aXpD4rD0_CEmNc@N5Y9^z7;3a~qU&82Il8fkTlyI&^v;-V0 -;Xa19Iou4Z?81t%Nn2Jk7i!C{IK`|M0jLuhh7?c4Mimjd-Ks(M(4WBwqZ8IQ&TX_yBjOXnM-{l%7Okc -_m$=?4HBe*i#q5Ts4P{*mL2Kk+IqEr_}g7dU>q$jv+J%m26GRI6j42k`kS7)c}@ -WqQVm@W&$jcIAX0AhNd_3P5;To9-`+&v4ata38$1#F%%8<2}0h7wbOq~Wdx0vsY}6#c^nBT;2HY#HF= -5`ZtJ?$HkkN^}Ddu@EDRWY(s9<(F3ruEWji$M*J_CnCc-B+z|OtRi -&FFK(hX{^Jp@U9*DH0{o_YtfXOUn;0NOIDW?&_Cd?gD!($%E?d)!c>b -WIukl;~2qXxY$QjDB_p!*BZ*9RWIFi+nUiRY?ys>j=Ph7lZrMZQTm`+#NF1xIw=P!>=(_nOlOkgO{DB -D0=y>_QV;xGT&?m-6zZHo(K`W-_oM>2#KlbTN9D7Q%3Vq{{$ms*viB0oc+)j}PY3bIhdB$Q-`S|%!AN -omE^QWI=7P~|n)1u&r`q7N&V%UZAOZ2tvNO9KQH0000803{TdPKS?;>_H3w0B0cp0384T0B~t=FJEbH -bY*gGVQepTbZKmJFJo_QaA9;VaCzNX>u=n+5&yn_1tBAl1gvGpNiL}i7f2K5>Nd9yVh6sf&rrA$wac? -s6iCVI?c@IT&J0OCc5Pp-=%?-nTjFD0ocYZR6$HUW(-sA5mb_uPEDE6wla+fERl`1Qnx(4P9ZX178OE -!e)g^BVrB{<&nnufc+u&3Z1i_@xYQ@sDXq#4xG-YyCE8Q?YH>zwKk=pkuFu0RQa58Z#GL?(W__tDJyc -GT0Vj-)Ae^uQwvjo;<_qH(;D?lylB)t<=u5@DLy_cd9_f6VtYB5|Ut48RGmkE+G2}}bkzvG9WKK+!w` -^)LOzonnQ%w}h^??K?=f#Kr`gC9{HQ@CvFQcT$;u%1jBy|D}3q^xe|~ -jAGkhfqSrTR31)j5#;5(_2{}4lRaN43m|4t2rm%JB1X>tS7qbmyy!aJW%VD(2Di_)|L@@X2Ai-9vIF6 -h8T3&s9)!lD;b_A<7oH&hhJUFuf!E@+Pxlpv?}r%Y>8T#y>o>P$>TX~fteSM_Aq?{+rgVXf+9cl-(ed -)rv35L+&|$8seMt5kzJ0d_d0()3CGGgXPnLzdWGEG>1r<0;#|a<-lG?ADarEVTfr%R~y$1n>mJgYBtc -V8cCj)&V7Zk-Q|VRAnyobcZBZ1+de&ePEW}3Z|{;EYKQ&vW%FctGLBi0*zma6~Z%U$ke)Gp6n8Mmf&E -xu~|ybz{sZMh|*JLltufs08>>A0|X=iTIB{=dWpQeo-%Pmst|o$Hn1Y)qIk??X;DQ&>$pE|&DZIC(+I ->2oJ!RE7m+pB@`k8O%s!e|3qg~n;g~J(5fCqqdkEP*#p}Zxc5=dwdR|r)m%)zMg5L>Hk!4G+dDdX6+e -iI@2;>IEs&*x`%ovF`A~F(M={%apB<n3~Yw1D(iu{H>jUzDt(Hu(AH`)Bt7d&V-_n2k4f8WIJY3 -KK0BcrZE@7%)*se8&f!tsVY6;lOYjc1`?y-Q2T)_`%a2qiU4%hQ~ezZ2U)7F}D9FoBBxbAoy$z!x`2M -)dIYc7uL&F+te)_wSt3f=e1TDW)M4?*gyxz=f=PxfddPMOfj^HLp=F`kDu -?6HZm*=7w-@iu&ZcPd^-^X_(9(2=^5ycw{u_(E(9&nRM8T6q(U>UScvHzyC*-Wi5n_+;vBkjCrADM&g3NFj(mJ9I8Tg~mlGa7gwcr}HojV7CSb)OrnHk{2&|>{){CgCcIv+iG1S(> -0{~!1*gaL+#%Q!Ve{xDP^Id1y%lLW>6?6&J}9|HnLThTP10|4~kKBfE%l&axDA`QOavKpjQ%(PJSfkL -6_In71JaYi;UO7T(3TMTBht=kR$EH&gWG%|3r{*)8U6tcp>QIwinS&#B^BWlPf*6%2eYRu9$65Y{4*s -V1lYmSC8Y9)XGbVCkqDVJM@;Ks36>k^$@wP+FuJ`Tkfp#la0FRc{`B9t+5E=$>Ld|43ct_Tn)HUw}9y -d}Z5uOlG-p+BS?oTk=xP?MtFfmXSOQ#T8Pq!< -2^5zrPy>1)JiI9ZHtrT7Mgj2AD_jPZV0PQv3P%vIYN4QhqGLx2FdVg&E4xGojWt -DKsLdQ8oI$bpnLa-2vnyd+T>OeCYbP4}cRrc6tCjn-C>bY{ZzYiWPZK_i?EhF$cgm~Nx-Sx<0rf^Q>O -!1JKR2>fc=?EXTYeUe0G=V(ORXF(HRfo6*;uvZiOmKNatp=DrI$RdNG$xQ=8+1g9TtnJ5MsT -I;b}_KY;K)sN1qU_`{1=d$}}OYska&s~3l_4-a2h`k&B(IpH!Z+A1S}L$FY*8t=tgGNiu~gS5+F{_WY -1U6JrtYB8o3K^<0!JIGFeB9Jf^it#nyIBkwKmw;^S{KBSub_FSll*U8kUOOs-=+q#QYr*qmWGgtmB{u -{*3eGM(PiN;J&Od%UzX}J(S0FGblR%|g(NRqC?L7Vb{(ScFC-yJ<=6CidikBRCe0FyMKGH-*9z#Edqd -f+hBrBB>IA;qRbaOmuXB}smfxlk8{Y>{|tdUU40oW5pv%9vegyuFASv((<+>k)n`am%+=+KAJFF+1dE -|CT;H}tulF*V}-JtlCrvbk(csp+d%_UmZ#*cxOEVzF(GKFE8vblCo^sqn73#%xO|cw~OY=ju+3LvOfy -jOOGF&&ZK*wC89N--3eF$kc}nwxB5ch*Ug;X0PniS0(-$YU{db#WSc)1eDwELh1C!%hTD#+4(H -J`10Yy*^j3elMV$Rz9@@^mjza&2Z;2h_7ZrGNY&H&FL+(sIlN3DyU`nh!H{kg-#Dxj_cgdVb_`DWS0Q#ZQJT)knt)+#I8T;K`gZ7A2+l#yH>@aF9Te4iXSQF?J8p@tOCU%vkC&4`~BQ# -cQ%SlO1`qY6#Zy^BE?jly3K!kFarL`Jg*2SdCW@bQn=&yR10{^iHPfP26!yX6bfb@BG<)#B)iZ){Xjj -w(xAcS7~cv1+gw;jk7R9!l~(dz%Gu4ibcJo5;h2S!@RmkRThG5h`c26~HwY_8u1tY$y+*%&dSEe%nZ} -eI>S0y*YY){1w6hSQL`(Z7IotFI%?7z;~f~nf){z{4gnAiVt;Gkexudcy@y#TLwh@Fx|TkypmK^`Sow?g2>(2v5- -1%#5L{E{BMi$U@A99tx|2C|8oZ>hJ7_d}&E&k_Gr&xKWess)FA9$y%&>_~o}u3t?jpxF>9Op6dhGV$> -gR)q#HI%O6VEQ;bA$gap~2-R4jz5$#-n(rP;-n=EFlZ@URC=^4K&^Pz7Y;;@tw)&p}N&x|KSI)Ybf>b -+NinduQ7wZwXlUB!d!!^S#&>Tn-~jY4V_@sV6%nru$DP!bsziAo-Ku3ESqRExEQX6_q(>4WL{L~^T~r -kIOC86&J4)|dd52+ImWg9|D$P8FR8MoOuq*ZxcEEPd*ec9bPv`sv>Ca`s-}EwlK3n0*tAWFJF^*nLbG -#8TVWQVFFv~!68^&FGJLoJC&?1h3{;wWVUo+U^LJKL2!!WHFJ8X-?)9+Y@xSqiyVX0Te}JdE25~M%U! -q3J7NijX>*16g#^1itjb}aHl4V9`bx1d=qoL=!Lr0@;E0|C-{S8MvYA~=JAQR?MJZdy{Ew?MCZy|=io -&Mt6O1$$tP) -O9KQH0000803{TdP8gjcxV!`a00;~K03rYY0B~t=FJEbHbY*gGVQepTbZKmJFJxtKa%E#-bZKvHE^v9 -BR%>e;M-=_8UvW`BR3hpc`q5MYbXjNDEC0UCVc1Yn4v=_F -w>S3>H`iB>x1a9vkAJ+&G5YQHFIv)cuyRRLY%R2Kj_y_S_9*k`q|mJWohQ2uHsU~Ttb#;B=Wb*6t(bt -mGqogo#mwX-Gs50i^tp@WuRp(`4=E6I3pFYmO-)LDjJYo@?Ki5}&|Yax8&Q{#2Ybk@QIc{1GbpvrBS&jvV-olKTFhlvSXm|ghd4Kzo@V>7bf@zd0 -NIO(cPh9+1b#sM|E>HS3Ch{0YUiOw-lFG;-K^EOOX%60kincE?etCRSSDB+1gB5o2GR8KlS}=K4wL_F6k{kNxa#jJ}*7BH6y2#s*i!d#M|wC@z+s4au*{d1k#1b&(D$f5?)0iRn?JNBP -wU2%hGNy{s7y^}>~A+q-GMIbaG3pJ1ZKT#vMpvL0xXwdQ(3zPITD641qLI&T*@snD^^yxJXW_>>1u9Z -(lFA5Df^@dri$++B9)2Yk7e230@e703i#5~>~iw`Pa-qUvK?co53rptROl$LR>HpZZI&Hv-rSs(KC&d -J&c9QO+7J -}9M2-1l9AYm`!X?HONeJDPQ!}&PHClg|E#RM88j+K?LWqjDOfC%o8GC0h;u -*Q;!d0MBsiTpkH4-U{uc7>L8&UFbka4#h)KTu~c9-wo2vusz|bAv~Njkd=hekV6_-}(8^_s_HCnL7-Z -YVoY)PU__^^T~fuO9KQH0000803{TdPK4(bCouv50KxtfEww4oxXkR6D6`e`AU`!TAwkHf|HBmoDSV-#z@K9F@=?DKf#;$H}?qLdXb0us=N3@wfK3rc8AgEn2ybSo@*!lUz9 -yq_~CDN;T2Msgq=N2D0)yIuTduTlBCEhcRNBtRzTYTW!j0wQ0w+ttZRdM4~ob4Ri)~_UCY`&b`ekYgH -yEz$WFv|6|k_yAj1eAm9jwjRP*?tM*;qzOReB}XWjIFT%Q9GTI3Q`iTg%iB()FEfsWa2RV);7nVot&J -^HkiMHfaVmeGrpsRHnc^>fYUT<#$fK$4%X=C0o(=w%T^6*;#>=*GC^?&Z-+5@L01_pknXMza7dg*4ob -cv=nBh_gDzpUa~oZbNlZIhlswbhL6-w$>9yRq_4q}D=_`z^6UNy$={6zV;O~H623>8+28=Bv@gxKrtm{C2CQQqqN4@LUEwo{W-DYCRdBP0kaTP9Y0U0 -}$mJJ~TVBC``TyJ@`)@oek683(0RRBr0{{Ra0001RX>c!JX>N37a&BR4FLiWjY;!MWX>4V4d2@7SZ7y( -mZBtEe+b|5h`&V%7p$U*0I~T|<#fA+7)8q+^I>KOwdS|^Ld*kXT)`hyEqh>(KKcMUqU>9v$RaJ`}G(9%|<{*t8d6l;7rwVl4gG>WH!72!^;q -eRXiCj7P(ZPt&l7A5B%^QM&(M%vTGlKL8*mc;5)kCcZ)M?NL7?>IiVUtpPVH@$mIrtlcfC(WUQ4dwNR -!~uytF^3L#8aIiwgXS8axfyiBBi_2?obQe74>N`N@NeeIbxNA1LK>e7+?#($YYL;y>$qwZ}_x5XIx0M -Rx!GE_-=!QYm-jv9-edKnw_b%(~+&1y>jm-Xd*Luff$hM8{kY|#IM${-NNTv>Y4s^z{VPw&n{jb1@c!Q}LS?4}RM8WT_j_Q;swA$=jlmSD8fQxtgo4xKZHdVv<6min@}Wwg}X>q(p4S|I -Sf!9n2V^(!;+$BgCvz8M#Akx&jVRn@qgBvjOrx4_hM)1*Pn@;2%J&+g^tMduQI8ja0-!&^8b^Kj^hdU -M39cCY0p*UN05AI@pG^CSKbP)h>@6aWAK2mmD%m`+u-GhA*3007bq000~S003}la4%nJZggdGZeeUMb -#!TLb1!FXX<}n8aCxm(ZExE)5dQ98aZpxR!fds1SFFvJ4qKXa#j>nOTNFiC2()~b*hr*CQg!`hzkLrW -$!~En44V-+7IpXB@wwNf(KTh+vURQDEF)Pr+Bgz(tE<*=);*6#{dw-z4cp<#@bGITjFPIbqtVg>HnK@ -GsT><6sj%w;S*5z5q@u+)PSGR>$a(QG#V{OrUjnUFSgtrZj8RN7H%y)!{HjYhqJj- -T}6+0|9-g%cWBsMeI@+tQ-a4XgP2&DB*hA)yu|EV+{V7d=odR3i!|E7o>G(TgQ5WyMO=uy4sLPrQ-}n -kM+o3n~Fu1&JlR#j6dPRMZ$<7*R(ly)GfK5^Gv9oKjS=3pkZjw`^#k!_!KeTXGtP3*-jr*7azsQsyNE -j&y50ZqC+vt0H%8xN0CL4f6f#%=>N|ku#m&r71`{v+e@rKZR$Tr93I!Pkxq?48(!FIMljFGO!JcA}+dw%x~f3*m5=#eEQcyY=6C-?|9ID7}=fq!LDt?FMyt-y^|ud(c -VkCdFqDrn3j9-=wFfQIaC|Ohq|;_~`NDj;0!kWH_z8C$Wj*A6|YR0`~O%gXxnGUnhU0;mBWVIEp5_DV -6M|alOseVOpjBM;u*#ZaDWr+VA@-=}MY~!azYQ2d2FBG#H#j8?^mTM1^)|bk9a~kM^?erd3YX{I)Zm9 -CnSLMP+%nHe%#kT&IQ6Z4*bqc9bM^etwX@KJWIN+1K;ldcCLT2YKF4%%k-c|Em%?UL6N*=;&bHg4`X) -h}$lNAA5+y*+263AIm@Vp{5cJnO~;^iZ9W&5(cwv=-8e!Oisp;LS?YB5);19{*z6`q;%;E1qoHJgAPU -!j1CsUgg+adK!fP7uh5HKsnsm~mZmw4`(0-c{tolcNB53ERK -I_yS2fY7L_7*Z&584=r6-G_J{r?e#Uc&edGDni=QqC^*@`Qo+jZ(Pz`$t{#peuT&pk$CY%0;R#>x8w( -D>Gy27PsF~Nlsp5O!KJINK+tAZ7GV`aYf%PBohPt#dw*o>I^DdNpquKXh7>j^uPv=y4M-(%>NUxopBw -%ek+1#sYO5?Z<6hy1kbOb_c2(EKuG(@=0*a*wU0VVQkD4A_1#jiT3P9Xdbq%^*)X5U|&;y19C@Stpza ->PJcFx-q0T?J?=s4>$w{!&KqAaqB_4t3VW!u$`?+>)W=WrSQA_;8nMw9IR-^D}5;Ged#Y1bsV9SM^UH -6DDWc^0SRJzh{@=0P)h>@6aWAK2mmD%m`=L!_;@%40074g0012T003}la4%nJZggdGZeeUMb#!TLb1! -INb7*CAE^v9hS8Z?GHW2=AVzEv(4KHE&1H>ZmA1kMZRh1P;@omy+`BpMHi -uDsGN$(73*(N>COnr*6L>z=;g_a&-nuDrc^f0dq`ou2%WUVNO*&S!6slhwfXlwq^fzJy>8J+D>fC-A3 -o`1?0i2)jRjH-VYCkm!U04MQBl8_O5Q_wt^g`~B5RK7(*@Ic?SOo!Vi|*_0UM6H+_*jkEL)!qu0e=ow -sYB$AhzJVz9A3E_lZ8!#*I_%S#5#V2sG5ye{KmU6J$$U@#q%LmY9UgBvKMy~?(WPH~Bf*}GsQ;aamD% -@U(Y`YV738=0_Cohy%exF3YAAfpxaejH4o*jQUgCiKZjd=0urx633iCj7Y)7V1bFc>$v!=*Mm1ijd^> -cc}uZ#e2e6ib-Tkzu|$pQEgk%33r=?EA3UOCBqN -!Op!^pE8ECy>j-)dVl5Qr4GY^AW>*}pjafpInY9l7yOb-e460B*O=BnZYElb7njr(@``~#-kuIkYQ(# -{^Z$og?>gHw)hra?{XpcAY>6wYwyA#_Gl}Oo{hXiAsA2I4Q -eDqlC+71Blz-_5~pSjqm`g?a@2cK%LUVz)&$n&qvj>N3{leL^7Ufxr5k4BgaiZoq48c&5+aQ}>_di95 -fuwf2~_K(RBA*mg%?TGzFr80R&)y}Sz3^N{MI?zC1`DsT;k=vI2g;oQgQ{TqOIz2kIatw^mx1PZ#2TM -TUj@#r%u$Qkh{43Fz#Ipy#eA+6r`cj!zI$o%kg6+mJNT@9^%o*f%hhk-C0JJdKt~XMCNINYVU%q&0P87(&Ew7RKl?}0(z)p^E -X2^pOj5014bW))1&y}*0#-(7xx#vj-hi(@}qs&)Ahb#4T)w#oso%0E!xH}hz;jWpcaRxCv9zs2JP7;F -XZ1Rmx|0I16Q|dL(Yi6~o$GiDFcyB%j8s64DFFu3!#Hpz)ti&y~ci9$D1h>X9(b9A%-~j7@m!VJ}B=8 -pnGK%j=l6mR(JPAyAZd6)Bm@?~s6`VneKvLlkUxnU@y$hTr_l2**Nh+gnx`0YQ-`>l%v3@<_|-kpF$} --4~DK$@bb}r~^b4@7=ri{dHQ^d_$6C)i!NSlZ3EM#p{NoOTmk_p^5rFndtW!FB|&M6l`hU(7Gu7@)n!`5ZNmx?XM9 -toje-5NxOjj0>3TnSPOF+`X~TGF_Pn2eyqdo|y;)pdBpv4yzT+!?Pjw}EI3I;x0jF?q}f$;M%Z1+YdUex8Oo7Ze -HOeWad_{7$TG5)8QnkDmBuh(x+faq1Su-&utjvm59(uhK4c$me38)zmIkd-ypSk=1;VN>> -vE+nY@DeFS(Ilct8w&3%OL4)ovxmj0D4}G5ayf;QgRUK0~27BCHc5(*1* -6q$_&Lx(mZEKT+6 -wJwzPR|;={c!WU={g=)%nN8$GJhYZkkHWj*gb?oro(*cFgO$BPK*k-~8>bZ;qb>`1YH>y!lpH@(MjyV -aLCmu1LZ}qDV}T#6((N2)2_*-A+MnS=4ROGQXx&>L=$J=mw1uHRj00Nck;U(t>YeqbKuMQ;2#c=?)@H -ki}(Z%*68tz_AQ^sE|-T#Y%=#qQ9Z|qDbzhg`gebkEz9+yM!GL7VT3CL1G>J=@@{g{1iS -;AI+7vS~N=+pe%rs%yZcdH|>EhHBKSXcBOpvX~mK6oazZJ?_U^{_qQ9;6JI2eXT3yEeWHNTU{5NZPz0 -pJmYZdii=z%$EXL(|VHdvf2a69QyP2%F~dZ^vk%9B9R$I4PW^J(ylAOcN=EJK7}9VyLB{B@U};)6`*y -X-WKW?C6?>rl*tKQN8fjoPNHF -7deh4HPwI@hGB-rxYvxmHc86xDG%hq*U}eDvIVLy^!EXS)T%=@GHKXK3#?*yWSwH%RIJ2=e8P-U9yVl~LXFKZObjp;oPPl(zfckw -(%oicMq>E$X5~INV@b@ft}d_qadFeBniENvXus|wc0=o;SCtrOWkM?=eWL9$5=HgLwf-YTBx@I& -9?wNwf$;*-Rue)U(K)QH_7Swxu!^?(D-fodxyK&uQb1wo#T&c3Sv`W?=29dOTPCqI4oNRX$3npf)t@s -D56mLTN6Uo={@awcx@Wyd&lCt%k#^tYf#YbC}u(3R8pD?TdY9ko_x -XL!VcMH@pJqj8NS7mQC`#fm14Y}oDH&JHv>W5-tGw$RP -!4o@9*A8ptTw#J<)V|>;kBxAI>^3_c(bxB?OeXnBC*yG?zI$s7!#(8a*br_HKVA93|+}5a0?Vo95F3c -I=@?`lBU_AkaTsdoPag1G@vSyorJ>^BqfF~cR?iW$XSZjLKu0)glS?x(3UFIpnY9jF9>A#%@Y)H5!3R -X)x5;S9tJn_s}Dd4wC4e$2%dX1^mx)zloY!&t^VC}$BKTsyxNF6P`^Je`F8eVj?$`Y_5+#9q>O=nYN* -woq#|k`SR?J%I^^#s3d0z-BVU~j&yg2s2~2$%c{G5VG);M#|EBy-n5v1Pd8jhqOafp&+*ow@R -gJwT?`lX;p~v>axh?)E5zpj4&JI)>*m-RMBROa(=J_$C?^#m^xjcFwh2eMle9(QVb`Tc|#I#P*9G>Ej -OBk~UQ%>Hy$GG=+1IqiM>}O{gMsuJ(eWz>zI4i{0aAJD3JkIHJO2qO8~>5ZlWtLObh~B@ZB|5-pnWp4Lk)ShMR2; -3-snw3ZV-KtQ`O=sRAn*d17=acPhfb|}4`UEcr79jdZay?;%AX`y3KgP*RKnBoN#iW{#|Q3UsC(b9p) -p$?;%zOhl1hnOy8*=2xK*NhN&EJv7z-Z*ug -}j(1m!o5j1+bF<0qW-QR+;_On(MZQbQcC)0|VVKdZ7Kw3BH(v%d=S^VDO_wE5E@W~>NdgGvf)_N<$Gv -RJf(r3cUO*I(Jg`&L=wuUkCns~#T;w-27p(_*KTH#2NkCuEsIW>z6PCBXT5-cY9rxyL6v{!1V1Tgm4` -4Cz>)I8lA7yZq)BB^cEsDU8(1~hbmQa)~3#>7B))1EzXZV6>lOalkwj7o8Xz?0nQOF>e11@z-pzi3=S -=h2pYew~DiFq$c9$BXy`C(4KRhBX}hWJ@kqedY5(Cam?@y0h-m)#Jkpf<5L6uR~naL9kUzE5TEU`7J^ -(9DjGy0$8q_MjkhkD&0Kg8C}|*Eve%b~-uo}@d5$>D -r#~+}AS5D7%8yNeA1&{SBech@8Q+u%?Hj{xEYJ#j$F*$Uk27yL^VFSZ&92w-wRulOH1T4Z-5D)++dyl -@j8nx14l?ys`Cfl?wu@fFaNT@J+O4j{4BbbhHNHYdB!>LdY@@xNV0C}mYK_p4TU9mqxq`f)XO9)n206 -F>zPmBwXlVhayJW?K$mnXyjakPGQHE)LD9_6d)?;|XDM(SfobpkSc5bEJ~B!b5Usju(wF2=d{`acjN0 -sFUYGuiMzOPD5Bj74bzhnEFw`m#P6uggdY>x0O7Yog_6pJnLE4z}4MZwzI_trPlhO}O`=?E=NE&)TP+ -h~Y(J)P&m5X7;#648rZBa(Kuct1yAUiZkRrqSMNWK7$IoRcs3knUfKzz%F9D& -R=x79y=*lwoYwM{%_$Rdd=V)tB+WBKF-PQ_0Zr5=U20jYhhfS_xTzg`&CzUW^CiMbCdr9P)h>@6aWAK2mmD%m`;^ti* -HFL006Rn000{R003}la4%nJZggdGZeeUMb#!TLb1!Xab7L-WdF?%GciT3W-~B7F_GU>XG99NglU+~MC -QY1<&!%yX?M$Y1vkXN-62}y&@?lx+_P_6a03bk8vOAAG`(b_BSSEpsi;Iio6pU3RTi!aoX)fx`N>&T_40A7X@$BjG^TVgl509UZ6-`qF# -6RoB2C13O^P-eUPwI``nAU_u(8Dfh5zthFzlAuU?k5UfzZ=k6_jv#Pv%&YlvbdFoI%&RY>M<-uChx+Z -nxY;C%AJCy%z*6->7ufdNCbWy(%<)Y54fKK(&RL%1x7uwmn;R2FY_o1?94HRsC$bE0)3R=&Oy;*hofLNADvEESxva*xHOdg5jYZok%!_cI71J -mi6SQ@Sof4Tz__d768|Z_4I^G)%;emj&It`oVA4W2|7KIm>g*hs>as2Y&e{2%%qlt9* -t9^1{ei4LE>1jY{5hwE26~FCW(9;3XE2p$il5%56)^30Q5`SF;zJJ2#^PnZ!AC0u23 -1)?)bb6L`xQHz7kuZ~2}XuXCJ%XHcxN}XtQVQL_stK_EaJd(-wR;Hg6Yr -CaLPeF{TW97%MXK%?tbPr`gf*&!z<_GG6EPsoW1V>0ZxHt9ppxPS1&IH$D1pla|0aU_Lm+z(2913d?G -rteIhy|JrT}KM|(pY1mJssT{wGtU?Q+wRT2fri6%o{{1nmSLAXyQ9R&AS$%-=qLRyreGV=t9oHldcL* -UA?)JD>6l#=j3t}(bAi1R$#2#_}7{ia@k5%DxXcF)pc-X-wVO -ON%JraRvX+Rhp{*6U?xGP=3@U*B@Rgq?u$og(t|xGO_$UF -LMVX}(ApRfR;v;!#xw)zEG*Ak@e2K=UMCMpS9_kv7uzp9HBO#2Q^yl6A|;_1_;VE -#v-_GamwOeVj7`gBAq!Ft<=1s^N3J(P%8HF*=kRJ-d#rroqCGMC-hR|>WRbN+Hvi)Or>-c1+;H(Y=Ln -aNUbgMnB6tjXiCK#o9*GX@OQ4Tvle!9w3L~Y}j9mn-Xl08oDBMfzbEVHh}$tt}Ab5_!y!YDE^K7+2ArfyEuLMy5+$G92@ -woMy5hoN8~8j;vrrD1fMCcfqc9;yE+|NP{8abf)`~9Iy}k*t`kv<;I1T4hu*KiW;RAE{$N8(^0fP5uf -O|jiDFxwgHn?0@N42Vq>U4V#%#l&$)v_cbJdU&lxfgdGE5P{ ->4>ECC7Nga>$a_2C+W2Fm#ez<_}1U|Fty}*5|Nh9yTb*peTKn&B|qE?Qk#c`{DT!_#KCgTgkb>H&#f{@`8QK@Tr$L~?bYy;;mPL-M=zH(U7z7*OGJN^!iu?)Tc_4t$_ -3}rK^@?FHZQpG?uquJ{1JnM#Xv!9X{|L4_5&%JgL4g|^m&eej!=Y)w>q;Xq)QodseZo0 -SnER?=gqjP=v#dXjb4CfT1E*8!)r}3T=YASY}^qAbJsqrzDcAa`P0hjU@=7}S}lStK2N^B1-0z1#TG5!7pnlwNn+eEQ@p!3B*978;; -|*yF~=@kF!&bF!>RZL`&xqI<G*( -%U&^;mFl?$LKlxzUFe9Vl0R%qy}ahb%pQ`nwQ0~w4tzEUsLu_{_3U_n&Pv{fANEW)rsya0R8So?9YT! -M$TD&;J_gXK3t5wwt5|1ixgn}!?X{;z5bcMr2;m(jV`pq)XRUFxUKKO! -qyqQ?(PYS(oJ}fmEFp)+AQ&0s+wSj-7zQ2Jg48URKOx)T7woy>q^8?UgT+v$8+duADYpVvB_KzN*V`y -4nVbw+w)6nG1y*pQ11D)TCIWz%37~}V25WreL0|Udx*N4A5`NXcPd5h2W>yyLZIgt -T_j8R>55a$;eEORc`JA(pttXxw<0~j$CILcTtTuLX2OK|c;0!9I-IV&7@wgd_j^NWP=57_C#ZY8Rp1u2!ftJI_wBtEJdW8UoJ -S`O3rM3?eIzAr8zl}MGSrFNSEq%*EB$=Z_Qz-V3=|BQwR7;Cp$|3SF{L4udB-yQO2_+HEbTg$#?IvSV -G^}JWkc{aMX+nnIKH(nhyJAJj@NH=v{{05`fCL@cvA53qcEZNOOn_lRLtOl;OI$mV;6YU8(1+bk+jyi -z)rqm75mi*0^sQbN6}q-4J5tntnXRKuWd_>15*_iah~>;O)HyXgXO|p#h(aC{X8vguaYzB^CF+cdacmf+{=~N5K&Z>51WOmE|dFb8F{b -5hKw?#mD(ZSz8lNxx8q=wOyac8Y9$PiFn3N6GOn_SN4A*J*T`2N&wOj8Q9Z%+a5C&CM$;~{qR95b^M6 -VT9y4@`GO1l)v?#F}~K)5Z+(l#1-Vq2oaJr@Bd36DNu6z8+~FXH6o_GFA^9$+TzmXh!$5nQ!;?DOZA=$}6$^AT(M>W~NQ9XgWK!qduA^|aek^?Je&pDh=*v~3dN`7oteW|K0W@UP}owe$6^O-mc4c7$?`giq{z -LRB0-pzteeAM`lHV8i{+8Q(Ot9Q0r=g{VTOj-jr9Y7I>a;#(l(_>&hoY9$d=Jfm;1*&5K|dPc -o+|x%uO8SY*I=_U2awzbeNIO7+r#`)lBV7a$Ck4hWIeZGi?$s%!$mDJ|IdyzCVt9FR$SLFxgX{wNLIK -&x>TiQ$q1WQ9JNhiyv!b}cj%omH5Gqme2IzfoOfKxf7X*&{HoRamg&mS46e_ClnuO%r5JY3N()0oW>} -N(Fk`y-!0up~I!F)}?vjNZWuT53!J;SL-WyOb*vjTiS*UrO9RhUNo$wZkR;3h(|p#*=wBNYgEfTtvR( -lL5lE3$Wf`H)@;3FB9|5PDEr|6@S1ZHKc9#(kI?E1GnxVyVipo`;NQzCF>in@6tUyxVTxZZ@lzwp689 -l;wc9uFQQRryCOeR&sI+PUBD$!>}x$iUYgaMtK08z%(^JI$!_cHs(gkSjTUa#aWL6z($?}Q@M7S{=)T>_PMZd6@$U$GNl`@ -3GW{LSG?OB*!0BtDKdwu&Vzs2}59Zg{92~AmO4k90%HLwyvm}eUkS)`7{ojis*K{tQnKTaS3A1LhFO9 -$4;U`yl~*rBz|w};%f0Oi_*`tz@}OtBP#uNEsXIxCErdtxQISaVafRUl=5`mvT9kDmfY;Zv^N3s^fJFvd>qU -=4H{W#+WYv_D%*i1)VVMQ&yySa<`Ai(OHVO?`GiOfMUUGhs4M{tpEsFOGX3*(^}`JT4RfN5#_jLn+iE -ZCtX^TJ1kZeV#me==dCA2T)Aq+${TN0A-=#%i7RBQfm37N{&r9omwBQuG6p}St2f9}1cRcW#TuUd;dj -hPt!JXn+9tgdKj<0Yfat^eBeKdgGn(E=8q9e_QG@OAGq-m|Dupv9)HKi&aT?4pQLgtCZBWLjud}E}|3 -r=y!1eK`K6FQQSo={wT>@$P*mAz6Wt$mk`foI4PsYJ|LWsL;BNilXPEz-Z9!qS3gWD&q~Gs{Ka{JjxEs? -s@nT+xY2)Inuf*{m2K!KIICaE*<;XgGV2c@Byv?@c5>PI8c|>CGh(zAkgYE1=bz1o4#p$;`KIJ{GGS8 -nD$H&Lp$$NnL)vPcWYZ9;;WxDdvL1+gkU(4kY3r$ofO5&3Ev_$7tC?@9}xx{~3Jb(UN9ClT|_-~$;@s>)yIc`a<2*wLArYwPQ5Gv13`DUm6p0xw~k8mn%zWU?-hr(5?Lb;<>+lJ -ks&FqkM7UR6oD}#dTfwtcv85L~_xOaQ!n5Hc!0|Ki(kqn+fUNwC;8mk -8(<=Uu!F=gVS=8>K9p71cCRTA`94{y~qd$|7lENpXTL5d3N-<8+qN!9S=FunSbm)UdI$YY*E$-Wf+9G -*Yl>)g=w$^+y#SG~Y&9n$R7G?dNyaPHlOgG}LgPVZ`-yy$2Z8TbYCmSzKhb#$**RQvE^o4b%UW8+D=7 -y=yx9|F!+6t}Xsp0;B8FS-1G?pVr+_DX|Z6IDV_MvE83I5Fb`aRI4gK=@KAB%N5yDvnC^L5wr1v>M_M -5WnzmVNPnk5Lq2a1h2JQ`4m2Nd@u=;d%maLuR-)hUmi&WUl7qj^2kG3o{aZZ{Bzo8XFoj2a6NBSjVpc -+jmRsf8d!>By5T9DF`{!U3knO+6A~c`&y8ccO1g@*2ksHdeHFqVnMeW;2;iXxRd;y-r5mwmf=FV@oMB -Ta;y`*~`7fY*9eQeRO%mgbKJ2#()o9jkJdpi!r*t(Uk8RTe@_h -+R`ofiu;AIC -Rpd-d4v^Bi3~FkZ=*M$NfUJCbwZGv+dIVN}j5AOGo!JIebSx`Ir<-|%n>ipiv6U8l+w4CYIE`U0y}K@ -Z0t@%8PJGoKM3eWK-7pJIB%%fu4w232}jEsC`&My0al+Lk6OGF~SW6y!VALy?D!H68{|JX#@dK;Mvs9 -2PfL>uM`>bCC#kn!2T>*8;l5_hZGQshiqco2$ZZe8u8rzEMLpc_r(6J3Cj<6;-*|8g&`y(XGX{U45D^ -bbHESk(aRSS}a(rctV#eFB4``P%0xRlx3e2guRC%r)4`&L?pu(eLlRHXRSdcLmtIRP -%%K6+vmyD)x4LAU-Z4R&$DgX?1wWKoqD$s*Y0tbMH!W`7)RXNZ-Rl -(8^P=u1&*rge?uurKGwG6alA1rZrO$YvA&3#sWk-9~9H^09i~V0A8nvG5c|GaaPet%}) -XwF#^X$w7m)G`qS>Au}3K>h$8`{6bNRbJG?yH4$YF -wd)ULS!D@mf+4v1lME2V++3SdXD&Tgsl8WTGqIe=Hch*q@p3XUp$L-)E-C^zSPu+17S(D5?uq+4?0-t7sI37>WFj{-frAVCLynlTQw1Z4_bfs;Kj!rT1wM8!2T{&yrZ%Jr8Q@|O -?e^Pl}F%w3>Do(oYe)7MwBD2*7!F~m`df{KVx1jwOSt+67^1Zk{V&W)6cgqZ1xF^MMHV4yRn+f`gAsv -R1D@Vq604YmlF#;jSAHl)CIBhUUx1usS$@)L_y({C{s3@!7#!AJJfI|Hb8p{Buw?-Tp@*%&J-8hR#9I -+IBzF|RxKEbD&NjsQh)zKU9!{W>!WIa>_Aj*N`A|}y)KJ`K`*~e*0K#TOY`NoK|_Hp-)W(uAO+V2r%P -9k9(Mq&ij~hE1WtS4#0KZ$aDmd-j=Ml+GRx12)$;P{_4$V@dXwh%i}z>mPhC$&$*67{vY+AqF(Ny`>l -OnZ4fY6V3?~G5Z`i-j*~9MLKG%K(kB&<a8ugOlrOTyEQsB#MvrXC&B)e>$ -6`^%@xSET#(K{)!sxkidx3F)3)gS#W!9lKO!(`w=GQSdFV*>N?RwE{8kPXDFC -#G$mnwP?f@Wd7Hwo5^j`NjzU+rU^pE$dz#HzhF}&3G8R(slrE!LLz5W?GN4P=@td#&`M5iQVDe@j57I;KhKdSl_#vYN6)6%HBCrHqbY%U$-F -FZx-uvecDTaVh@IRH-&;@)4s`!RR>+&c|E{D4_s -`c5zRV)XzksZd#nheF}B0VkG@0nH~Bi?ItawC`BMZTa>EyWQSioB=V!8-PIxw|u9wO)~#jMl0(kDDIF --m8elS@QE{9y@+xGF(Lr3=+^an{H_Z;Pg||poO7C72y(CvL%)*QY|Ox|ST{Zm!nwp)fzOAB8IH~E_6! -&^ICil5_s+ow561QVKP)U_M(m_!uzB+ijJJW35*85CKOk_uk`$M9v7$g6l}6kffZ%z1HhG|}B2T|^gB -i@M;w6c1T(Xrcef{kd(385pphkRs$c#bN^jYltafVmH%5<(CSVO|Az%VelK$`0)L7`le7a$5?PW8qhZYsv^AdZEj83Bm(qW$)uKz#(E6M;Ze(P{PV2fPz~ -1`t|h(o8`p*cl3dP!RY#gQgqN`3{96GMbO9zy}2qt=kyd_g7a|Hd-5t#})#QRd~gGwTQkM20Jcib@?` -(9#zc>k9Lmq2E*cm$_ss^3ee+aVK)w_s6~<030|$o9AGT)F%~un*nQpdcI@(CV6&G6e>7k|a{aX3!}d -(d?ReOunPUfMNvx|hulS7}^C`GAvbI(Ah(!J#AoUGUU8|N0ih2u~Wkq{tN~{Sx5!m_krv^MAwFhA8q+ -h58GWBU~|9`~#>fPC4Z%=*6#}Ji(S1l^h?@KBB^MCL_0MKi-P8`Jxc(3<%Px-tQ`W5dMjI!obx_k)$D -OotCv<$xUj(4UUh4->XNkdIxWhpa0$vahrm~vgJMf7$)E~gw~GbYW1FaVV%`edwh$*75HV3gOxP -&Ft7|`6yokJPg_-Qw;HXs~pMKJBJ^kt{&0o91*v*1veymc`H~>V>*lNzov>r9y=OojdWw^leSAS0J6d)x-~2MYhYhARTa^i(jJz% -J*6rL)^J?w5@={(zgo!nhObPjqEKQ^-+#AlG>rchwW|09uM!1l-4amOJgL2^tq5qbCSCkAi5bjBSex(lKn2EcoO459p;w|>!OB=h_fJjR9lvDYE|dA>>4?4oYO7KWk$&K$S+FUrHh+6>6_@O!NGf66#j0o -EG=1M}B*^lMK+05^w@$h}Wg7o48iRK{~_-#djq-dLcXrS49ZL+eYXa#?3Z?DMaV8YG{F3jFg0DE;jl0 -=v^)Dhys5R>a+aP?W|{%B1LR=H!(?ltiEu$d#xiXAU;eyv;v18Gs4 -+8rozfHyI^Xn#c^X8fpf`U=WaVsxnDyI5p1MO?-71{y~+{YiXcehv6?BKMKEPcRV?;JTPqeRc0wg)v5PI*I;6^D>59%`HnP$Qa0Sd7l0i3N*K#kS -Lh7R@Gy=}X67*a^siQ`LoYPqx*~?RFSj=QQ@a8f$vC;T_5pfvK8GuPmb6FRk?NIPvFB7oiJHyhX8Mhg -aJ+y1-_F7Z8TFU#~u6H;L(j%|4fkD!xbjLI&XeWBA!0J5^AEwtk1ai;DMawX@Z!S7I2DtC@8uxkaoA7#Df4SL9_*Ypu|Ww}wGXJs^B>U+t`{T@cY$;|}R$WD -|IdudXk`8%}1bkm)TdHwX0*{c07W+eLEvt18_6+ppnMj)xro72;(@I-S5XgyWzRi~fmCPyTvfB<-Efr -+sAH=CkXqAPxLRx@8(jVJzrxvM-at^_i^h`G -{+=|vR$;!DOPGNu^{ZOwYDr~-C&|_cBZoHl>+?hqxN;Wf!#Qyi(Oz-fR|xKpokzd?N)NSk8~7HiQLjU -%&*NUFlV|E?dvz^~?sFLuQnzrKRM5Ha)wCe<(pHACw)`Di^eB&Xg*uy0#Vx;iCX@}Lh4L-*wZ8Z!&nX$j_x|2(NRV -X?j{vbayiPeLUkLcQZfptWzY=V;?^Iv{-kI?k$?u&gsld&daotlmI{s&M?0|XQR000O8B@~!WzcL9LD -**ri5(EGM9RL6TaA|NaUukZ1WpZv|Y%g_mX>4;ZZEs{{Y;!Jfd8LxUPJ}QJhVOlf2`4ro`v4|h^kj_2 -i|3{b1B^lk+tIjhZ_6%h0dMp~=s(~8rI{?t-i106LJu`NsIVqWwt=22?7YgdOeyLIb^<)0Gr~?ORd&X -Ec*gUC@mM`_KNyEE^h-A9(+8GvxKj{L7=Ls8Lsh_+V~RYnh0+Y>H1$er1jxfFvLM_V_{8%xuf~ty1zH -C+(K`3o)kVw{v#%bFuC4LJ%u!!DQHLzt&(z!fay&$qKho~j`1abJ)HsxHXCYqZo618v-`&hvT69~;Vm -=>3#r){U3t@@G-AG&^o86Yp+OpYg*{m(`YcDbq7D&6>(ylD0WCAUqM`^iA;8cU@6aWAK2mmD%m`;%}xKsEC008V30018V003}la4%nJZggdG -ZeeUMb#!TLb1!dobYx+4Wn?aJd8JrwZ{xTT{_bDFDhMLCj!+au3k2r^!6xYim(3lLTo>DIAkY#Wb0do -?N!c-q{`WpZO0pkmJr55L~u-`@Wn30+StU(6Uj -Z2~J>aczWKbCyD_m*ru>u4HD98$wrdoV8Fq@1iZMM`3(sW{=l*H{SNu<MfWSoC5Dv4qyPN(xSeA01tJRy&GW>50)|5Y1f9yB#V37WRx -uYZyAe#hNn-G2QCSw>{(P;qg8TpAMJ<}=pTxmE&Bs8qQdIqjD#mL9Y$FTG>)Z(TS;EIh5|p(m6;GMTd#>TrW^wG -oInM2dpFsGd5$5vWmK=ED<$n}H79DV4%7jvq5E;BXHZM`HiJ1NIMdY0+0ILMYp7iBcjwlGU~ox)?f8c -2cf#+a8H>%!G;~JI`jL^*+nco{@BfK4McB$LJy`OPoZn -=^-AsulZuEs9)ev71VpMd*J80@dJ79qu&am3tV1rD<8PUaW5XxjMGX4%Q$C%$5JdB#?N~yyA5=D_C3B&dq;n)XKq>gp!s0yLZN9Bpi(N|>dXad;JrKt -*ja7A2KFPi6qZ9(ps=16Nv(w>yrnl~d#puHK;{LlzlUg94L-qhKKVw;!1e#veG#!jBJe!KrccZ4GrC< -^9Qnom;tLCaN5UB-o_6Y&hiV%m{x5XG&q9DL5>v)lW}r^~y$>xZ*BG0Z46XE@dw9m>g)nN~I}WGPIb! -CP#4XXxNn&$)YLZ&Y387efbcIEt%DHte>@^_2l+8sE2+Z=}PtAE&)VH%cb1Z=0}ZwQyi-bXQ&?oz&ah -H<~9s2JYlmT9@s$7XPkAnH`u~d$KbG2t`f20+#kdye7;Ie*^#n^djRzI-tqYXApXT3W;v8liJq25ao{ -1eZ)5?;{G$keto=tNIzVn&eN;g2ZoY?Cbjm>-!q6)rw<9K&_IviHKjY6|{^sml~X(w%@e@_D#xl+Jw*rZxKDhyPuz2GubG|nLHBUXJi9jcE@<1D%t3u&z -jv;5NT@7A8#A6lNoBxN;EkK4zpP@Za^;%^F)(V`F>WV>{9yck|;glmVMs)u^4M)*xWJ4CQLHs0 -|1vgP-8u$ZBkWbPTkN7YBDTQ?1vxlXl0Ug8m$k2)svPM?P3`b#6o>bO&sbi6h|5Z%1`7Xfq&G?^_R$$ -cXk&x(n=t-W(koAsD@tE~7A0`6-IM*D#4Xrv#Og(~PZRWEpPpYnegx-d0B^aPR>VAXB@-Etrv{ye2?a -sYG_%J5ExYfHY9s9o@h-9X*Bdsh_Eg!KuCQG3_J`A*3k2Q`=x2J(I)hBtKSp&LAn2I5U5Lp(Ka=O$PV -C(pJyy=4lW_>TKTUv?!y*0{oG*-iRTo!zV3*5g-QfW4 --E^-EpjJR*&7=U@1444m^foz;dkyx10Iwe^5&U1QY-O00;mj6qrtKz<#^E0{{TG3I -G5g0001RX>c!JX>N37a&BR4FLiWjY;!MgVPk7yXK8L{E^v93Rl#oCI1s)2D+n(FNr1!4-U6gRkS49s) -HM>fi=rqPMxtyc5~(FAxBmMMNztMt2S|OeE%D7G=grJxsbq}^DO=MjMhN0{Bb7n)Nz1A=jQHo-tb1R{ -?Usvec+>|yD=h=7DX(xtm1Zh%+%i_I-J6*QHN3%O&qN`QnC4|m6w|U*Inxsq5aut`ZW!>oVL2~3Q+k2 -+@Xe)&$+<9030eg>`<=7K07#zz;nwg<UstQ;>I0 -}%o_KvRL-28|LxwNzh_ve0y__}Enr_)~BmdZ=21><3hKToE8^xbm<7ArI;z4;XLlyCsnLGC`B}C8~>Y -o9uU?s|TEPnyQ|62~Mq&b+K6zS+W^BMhP(_t4V4SD>4U4Lfi{2h9d(q}cF&)x5}^W^?1hjG -jAS-2@N1!K1@u7qIImE|Y9+;VQ$gJy-{}_^@I&@WdhK8-VaNoI-4%2NC!$gpp8Cp<7Q*Z+_?(uk}T#Lt32{lQ%=0Y1Pa^~U}LyN;Ueh -H@?@=#G6%V0k?67Q()&ysw;*<8K9+FT`B))zP|gIq3TaQrC51+WUvcY=BS>BISQb^9fGGjSi$5$mYwy -vyKUR0;5ybiR^3TPa&n*gBl)`C{O-1THv#?eWV#J5uk7Ypg`n#<^#Nwe`Xw*S*WG3bpLl~)p4 -Z0LRVJQD+qI>MIKwjBU-1IL(l&Z!{+;2_Wnnk@UC -N>7_o~@jG1cmdQ%T5=j+a3K`fZ8*tkc9MQ|mkgT*cJUsWVexpV0(@x9WC}54M6eef)D%wP)h>@6aWAK2mmD%m`)a=@ -=Ch^000&N001Wd003}la4%nJZggdGZeeUMb#!TLb1!pcbailaZ*OdKUt)D>Y-BEQc};+_(f`Xzjy&IHLGc9gQ>EiFx+aeQl^FeaXml@O-*8>wgg7GjS-+bv`;D$R{!;S`cIKF%jOw^5 -8y*wQEhuv;d>w2}`LIpB|IJxUR1^z>e*n7pny>X#+>pIlBnukUH#oOwPY?y@6aWAK2mmD%m` -)MdwU*}w007$*0018V003}la4%nJZggdGZeeUMb#!TLb1!sdZE#;?X>u-bdBs?3Z`(E${qA4EIv8wYj -<)W-U>+8a?$}UHlb+rAP?{3@ZLk`))Z{H%qw46v0O4) -l*W3-SI(%)i)DBojpBP@tv2<8^ul^$l&fDTvtCQRt{;s{O71uHqZdV)OC?6592YHRnJlFS49!(id8u4 -dNSD?o*uq-@gAr6%wy4pQweZjB-E_Isya20bqtPf;+&OjyYdn@#q~6&5)U4jZ-Rx|{;2Mv|PlYN0Dh% -}-4klh}$GFbmo#1d=m5h_2#&Wx7Sq+tp2;*uaU7VhB%~pa{PGpP&21^b2vh%FqnxnzS(tFKbzGPOERy -d(O_tI!)a>fbo?v>8Hw{is;aKU=KD448sJvV6p^ak7!EVY7ru;&OYn)AYF(ag_;5?=J+UT*}TSb}ONx -{aw+hQ5X=8N1#H&BRW6%yk!FN?!&ci4mCv&whhNOxAHLSUsKfpdQgncRU-EF$Z@rKzc`kVN#RfgCOxb -l1aNFCc7#RmV8X^IYPN}QBg0~z+&(zvZENoBN3=cF~7qfWL3g3=+LaPC~B|#Dd! -A9-+DPGw87v5yx!EXvMF(k%` -tWwCQp>YxbRAO%sdUks?-CDQx}wx)<5)|N+Nve@svI^lMc2feZ=^}C;ZdR4HlM|n@-rRfNHMU_@|p&c -JsjA{ya`{V+-zSAcUSu*m9ZF1$5q;HtWI@3y1hLc(85bs`#;ovFp%B?9w@V#})F_uR4&B`c4q~X%5RZ -d$z%j791D{>Y3~c+U2bJr!p0-BV;eYP;2FEQ?dL0`rHj> -n3W0B4ov_ye-f>0NZjkOPk#ZGGkk!(*gf2?3ql4u3g_3%UJ;gxe4E2Y$SH+I#h0Y -v~fI5@oI;%>mtP7J`S$YRFGq?qzcN#5IuH@gMDcWqcXWoKM)?w)?4WN3-)zBJ8P9;aTRn#0w?SDTHwF -F6uZHD(#Xv?|WEyf^5PH%2c`*Fw3HfuxO-t`h4*><$+-jT~Lha;_rBz`3d6B2Zk#&sD-I-|DmKx*Ep8 -vlmAG`Wr#>{I7m$I3prgB&|X$Zq&UBaC9~JbTMiNMc`<^`7q2X6gMBAc7MyiSE$EZCSPAm6!zaA1 -AiDL34meV|TSGdZAek-m24dqp_vi#y3OQVtNEBanL!VPK=28ctkyom35d|{pxuf#19{9frxSClf6uor -AEln6-lM8(j=;V1H?RX^n~iP^h@N=6k5a(8-{Rz?$!gmDFvmK}y5DHPw29@1V9+P!&|1&tVF)Z>gZ+~h^dGW{ -v2%4hUbfB$;3L?DCKnW#hW*inBHG#3l^l(Ta(v93k%60!QiH;f?|%h{hIY8j>0fIpgY|3njB3|T0w*a -;%W`%_)USQB*oLH!0VuQ_!SjCf;0$}Ac$9FABScal7nSFbh-}296D1N1SPP+2op-4Zh_^&Mm9xOtf1e -q-}ev+O^JstfziNNL;ptKI+cKC&yu4B7{MgkZ@FHJ>BBj=r>7LZgEEUFp*?0YL*~Pb=8&DFrdUDJXz3 -;Ty^H}XfEGi&ffuAH=@Ao-5A2jZJXjPjEv_lIz>dlL3HzK)CdpeP^|Y~O1}|~MpYrUl!E|Ub4Z?#3jT -^3k*Io)JM)la13bmFm_!gBJq!YI@ha(eeb_uFG=oJ%2aA?9BkJ&vo9K;!eJP5&mAMuZh_NR^X-Llyl< -HMHjs3-?Vp(tGHk}>NAyBD}{xHza32Soy}1F1%Shvi%E`?3v`)WAiU4k}LC=};cSDMOT=y}Z1j0uQZB -?1lg*>=Cp#sVh;Rsmc4GgP<%yn6mw`@QYnSzk^};=_a|j_~Y5-)$ue?-|3sD+>w;st73;f;@6aWAK2mmD%m`)o59uH -mu003nK0012T003}la4%nJZggdGZeeUMb#!TLb1!sxaA|I5E^v8mlTUBkFbu`-`V>SiyCgQ&0y_lQVJ -OzF7*-TTcj&2MEG80Wi-!Ir^S2)9v^>vS}YdV93c?qegZ#?Jq;AH4|_-%v+p2Jqdxfnq -aPb%Hp4Vd8(2Yh^lA?Q2JENg6J+KdjszueH$zt1V?G3p-3s^PeHDLZj_(VqTXHt^_5T1pdM=~>#M5brQlVfsB%muq!a6l0_$BpdU{!YBR$j4XKT>19O=LXnU2uw -JHK`JEKDeaqbb!%*CDKp0r^yvdhed4Iz?gKlc!JX>N37a&BR4FLiWjY; -!MlX)bVi)mv?E+s2muu3s@w5Lj$v+D>opi?J?l>bk9Qdz~Uq5EMy3jL4BSHAV7rhL+Xc{qOsnc_D`sC -2!g;E>=Kni<~)g=Da@V%w$=YYnCL-MmM!c5+>JGS!>1@s>~ZL68nA5GWj5tEQ`s+jY!Kvi$|Tyg?}Qo -sC8N9%0I}nhRwfT^DIB)}q -in$M*xYR3(c-wDfN6*KkkRvZ%4oxY06Kaayh`uKoD;*Eiq3et)}vxD&Y_e-+T`{S&lqDpD=t3)jow+#TH`35?q%g(ASfRuD8MP5 -rwB^Ue*WCi{EaQ7V9e-%3x+7bZtnRC-Fo) -rlQj9%KU=-EIWQ#cEN7SLQEzkbm;WL8+;70|7f1glBD2k_*FESOkmV3Q6d+qPP{=RY0j0JRkZ-ywaDg -d$@6@{)BDISCW^E)tX_~Zxz=?zI9|$J%-PhBna&MESc_(2FH5!&EGvs6&F+hG!!|3JQcID9!H5LIZ&} -RoKopp9l;`Z1Mj;3&)xb|JF->!&205XKplT|kgr<<7CrEs(QG$rDSGSkf*9?9Wo5`?*qU;v78>3Gx5O -s=n%bxGcGAAK1JSLqI#i~?FF2HKK;x$iUCyMsA;n1`$&B7b0S9YwIk0aOe5zM_{A6hPUZO1;z}sc`tT`gmHM{c(vCA>q)z+oiR7pjkOrw2Zfsst -__9yvn^%IP=EQp^;aSX@lU!QM*p&6X3T?uggEa)mo;=Gb+!0&yB9(9iT9M4b>D|sIB{R}8ac|U=b7@j -Yr=Zs3=`#>u{7Wf|S-00HHd_%hzoW?di*?y|)+(>e5aZ4JtD8RbUr_wPR;KhL|#Fhke4VF(z6vkR$s#N3#nGKh%AtT92 -_QNWx?*nc2V*gviEDm)^OgEN-?b5D7f&Z$V;9nBE1mZSkNFZDjVc(!5@sx2nvWCMyFt)R@1Xw-V3&p8 -4?Rin_3~zMj*68stK2~yTu<$u4T^aR`Wh513VDvBL%g=2~0$mcMy*eiXpTzGMKYPL-C00^#RI9EM{l% -%ej?^9mC))hWxUmZ4xmo1PQOzxn=4sMusuMQUpd~EUIBx=G{y4E<+lG^eml@Cxc3u10s}8s$6K1Z|&4 -C%~TSYz-}oIZHjiVEXdGPP$LiHOGuiL;}oILtv1`RvRTP=1x>(VRv?PO;<18xU}Pq8zQu2WG?!v2Y5f -;|25pSJK( -Y=dH~4a77YiUV|lH|yBCA6Y+Nj+5(H+c>aYb@{Zcn9$ZI-OhN59k>rQgew+$o}Ds___;jejv6mt}JO~-I>@Sy^h -o!oe{g3Ym8^yV&6EK9Wq+$YnB#a#m-QS(wwBMo}h#~Y&WM^iO9EEK@+0x$57|0j-pU4xq@JPoHO- -z~yLe6jV7@u{59KGuYL$OAk1bZ&xVgZq8)(9Yg)MAfZF9|#J^WH)%Nz#ai5Rr+}F1hTH`%una9Zue50 -Y5RR(1mN5VJ^lcEjt+liU2w75oXBm;fONp3!w!Hx8R}B01`6-6X%^En<_)x8=7K;IqlqU@(%U>i- -?_(2BNj1x*e1zFgpUbDLrJ0|c&oIzYUZN_oOY<3f^-#);{VM9RZRWTlIgWSZD1Si7dBINO(|+W1yiGA@dWhjOcG40eiA -+z_bRXw1GmUBs70{4t&kbIUvw;`vxtg-)?YKl|L%u>JLQN`XG*Zu5ad8$bM}XpyVt~~B<+f5FNIdT55 -Fj%>E22G4@2&bhGzZ}QyN%gqS4R!dyk46~M~T~HcVClJ*aAEkCx~tvhtS!po7-zf<&X;K8B}U2XW!L` -*=^}cwy^3Ta*3ma@cA7_!Gx$8kaBGGv4FJ22`gZdrrfwIeds18t#?Ld4BWBYSt}q$$x#q0GMF_sqF5m -EbOD;`PAl+D4Lw^FKP75T2Gf9?EuU@9XeDV>Pl=Lj1MJA4gF=g&!dR8PeT$-O?p6jkAs_%nn-!;4szr -%~P(rGzEKJj7N-CKSJkGWC44|`EvXj6Fa0zvBVO2311iaAVJ_GMQW0xy|65Z~bLrZm26vQ`zg||BgJ6 -9f_xBaknnKiix!KIg$Ij~v~Q~_U -j=i5w)is*zy^vLsW^huY)Fk@bGZ2)4-vCY-Zsmethlu*<6Q%KJj;5*=P;)e?4&PDTV-fe4P$MN9P^nwDQ_dw~ -v?i6CWeE_p<}S_b$J4!t@7mfX@!;LwvL~#Q#R4pUnzBVUco(5xN -@)b++RltJ2LKiWPVLxw8jYks_YN$yN3L#C;o3fl(5Xqa)kr|IpjDTe+`QD#9Q;&lPp>f%N-h3@4-092cXr?7QySr(s9Xz{|Xt5z~}?zIpW -~dHeHESGU-~f7BHHlSrn6BnF -*ukLi?tkewqqhBpvmCvj%5z -(S;)&hn%_QqW4L9Ng5x{7u$m&(c*|bDh$WD=!R!ED7ZhxRA9)nzEpS%92hIp4qc!6a!QV -#=l=KlfQQtP-6Gzniq%!wXq+2I_0XQnW+b?9(|IUUB8al@z?F0gAZgepWKi?q|BZ>Vn!1WlJ`sOzLwg -9a#sO$HfLH7j#8^!f9{>;jn=LsjQmsqpSxnd&~=%IN5iHRJF5LzErl@GHRbN$mn!?6g@ykD*{ndGrOLV=eiWarkC+O0|l{wXt58_A2g-%PpZm(2a-+cFaOelQ^b= -3i!Zx&qi=`vC8fVoe|PA|yt`$Gbn!F{2w=y-$7`J-H$#!~MXccirgLrQF}wfAWrc%CQ$ZDsv7k2BFFB -A_-_YA%}ea!_)B7Shmxw*xxZgmyzQ@3dRqtlnV+bL6+%R&=ZyE*F3z!TG}m^h~dYegt?R6S=0_Gc@9O -my2PzwZp%@czWLq;WQ*|Vy@IxMPAtWF -UC%6o)enT`|`2TbAOG(LOzRd^6!ji-gQzB}*V%Vm2PYWKWwyb|chy7%;J@TMl_avL5nA`BLXg24`bbG -Vm{wEN6^D`_eL#)^Vg4MQB81hLJYX^b6d^dngzmE$NS+M*4(sh$wFe~OzVlN!UC}8x4F6+4#D`$(G7xzrjRR@!=v&?i+tw8s$=>)z3MfEj(V|>6hnS0F+2sO%4@I$A0Uy)bXwHOAV_R$}P1lsF8WVivW@VakI$orR&Sqs{Z$ -F_F`SU6B2nF8jE?Y#l6UkF^!HctdA*y4Z)5^r1GFNozuGqZ*^ZY@o4a(V3VFIPmY0 -M{9Ein)Da#&V2S_vZQ%%9me75xcYp#r-jv?@%`S^XVSjnX|(nZ*RWZlNk2<>u=9Kt~)e^8PvcH)4)}d -pmX$_Li~Za;)l5UKo-k#Hhr$n>A-j1mruL&|D#~kNtHavm0EPH{%?;&p0n1tO#NpUW=GG}5uLa9BGo* -4I^sN0u$L9eb=RDjIkgT;cE7{6W*>T~uipcQ_U#dNN9B7aYryr~T%qpJ9N@9LScSl`5R~(4JZ^80>s3 -u>yap@y|6yU{lD(KJHH9x1qonEOBEO=9WmLBMK7foxY&$IGwvoF|B(k5u*VHC*wq1!%R9)rH4LILhy8p+;p4#1WeKA&Wc*S>0AF6ny> -hCCy$8t~9Oz5=$%+~v@qHe3vNUOlFWx23-&3A4k?r`RBgiKS8WSE-}+Ik>WW+A!3|27#TW3KIt(-;#> -J1;|Iz_kAXP)h>@6aWAK2mmD%m`*DfpvguQ000F`0012T003}la4%nJZggdGZeeUMc4KodUtei%X>?y --E^v9hJZW>=MwZ|8D|+S9f*e!OI+?1eQbitTWM`t<#7V_Ywx%>H2n3pBk3axH1C%)`{r7$E^@)>`<6V -B>0rc_is~>oLeEfZ!rx}+l&NBAff__%qg7RGSro0Bx~X^+F|oxvEM -CeYYib^;-$zIKIDwN_=x -Gi>EhE0`aVri$vmEP^Hy30cbpTgJ&<7SM!G4TOoU>p*5ryJx!9Ma&aN} -cB;;4`NlG8eKx6KgnjWFAOfc0`-UE%#zoB&G*gr?qH<*R~SsFknHe%G?DZrt|t^XBL%ijbZW48IO`i4 -5S<5egfx;F6ZQaLwx<=-Mob@^}lvJBMK@U$Jd`$0L{rg7teND!%1;9f6?CDqa@&1vtWY3kKZ!7f))My -#S?H0xvJ#7df9RvZ8+A=Pw+TBWLx7vtNJtfvrG#W6~^d{ZM0Ct>w8Uz1i)YX2P(d<}{5UxEJ+?#rdA) -oTogc8)d~;;uD+ka2>MawWwbn&qKYM53E{o*5q6!ammxUxy$fw*aDuf*O5OLDA>}uur8vN$T;4c`2!W -t0Y#V*JUqU6czgkCT|7JnAy8l&*IjaUcTx+0*ec4NTZzOqU&5mQscyjdqT2fltLyV44FORfCINesES3 -@&g0y^J)ZZ0Np1!N9qME%kdajvQ!a#4rPRW>@6-xvV2DPa4E(b!&CW~t{oXCt*S@J}zM1sf(vY&OqL@ -sNP%>@|O0+h`%5hf^X)qPf|-LzC(;nf_7&59MUPDrM}lAEH*Qnus_>;r6_qD2FOiS4$jQBfT$=?e;X1 -j;AsC~^uedA3^EU%Mot#TSgdK$`%SDSq;Z> -GjtY);hdemX1IjCYq-$WARnJ|WJ?PNlqbQM;qjcL;Nd^2$Jb5={XI -f$A~iT#Gv9!=m%OU?c3S`*Hr{o2wcIDx4~rMt34`q*B{k@6xM0(`$?8aNeAGqMEa@l%<_<|b4Wbp~LA -HDTpk*i$6;&V=8uSSxQe%a|?b_c@F`d9SxOtS)M9PbLfKasl%Zm=Bz+FbmSaMuSQGggZILVX5EOw$uk^T9{B4QB?K90a|M12zNgwVM3!IB$!p6H6Nc_=D(3`0_sdt*_O -rmBF$%9?;>hj6f|wL1Whevdnb4u`H$o3>IIV9-riN4cwEK^oKu!W?<5E!Rx>W@o%R9G+Vz`CB4CsKmf -IN!$ijTZ4R7dl1NnM@K%4DN$$_gAPWCvP?D*9+9{QQf`6;3m~k)kIfq2m;bKtL$2zQK6iO=GvMncg{$ -RCUH~%@S_l=lMa3-u#2ScIRN{aX-o=$D8p%4@k+%{gE;ZjenecOsu#sGXgw-A(4$_4Hn7qY+R>x#15+x1>?y{1T;x0e(3Q_RQ0(HY;c_+~1p*>Z)XHaj2)*aEMk3Vf -kgVxzU@jC<45Bxqjui7r#hT~B;i=rDhna$_ElPStBR2-Yp6D31tLsioDy@;)7$=z=LT8Ahef`$nV-ri -#3s?)(0qGoc)y4QdIOAs??b -SreAxh`#(?RhP?P)IL93E0OWr2$6Ih4nIP#)n94x_Y95$#+oveJA6G(~!WJr0|B?Xbe^U-7bz+Y!|+CLVG5s=*XKJ?6*)#i6a&(A^7vRDz_Jm3b}G6vU59IO32fF&JYnljehM>?zGI~p6$ -}uSw;W=|)C!lX6h(2GQehK_F3@ocy2R2>;2{vv_eJnD~pCiB_^xYG=Y#XX#Wst -;B-@lIvzfsCrD%koCe6ka){_v;$zf -Cq+M=*3R-p{i&=r#Fe(G2#eJR?aY|#ce(fSEottNSbbxr9oS-MU%!yPfut09QT(ogc=jKzW -p2CdF1{ab;v^Rb(LTfY$kuw<}{04o*~w$2Sj#54!&D1NJz=M^%?sk*4OQ(J_ykW;_*?^pvU6n-gd~3s -)bvOlHk_cQFec==Mvm>~FMtVaLq7%D?fj6&Z9Qxzck;l^xk!a7(Nz!!a;a>W{sdd=lQ -JW4t@OQ5gvOtTgBm6&M4F^8{bazkH97k(%_KME%-p%h@KD?LXcURSl4`#U*$$;kf3yTN!8>cv?+LEb0 -T|?)j%c;*Pqs4=ze#UgH59Sc5He&r^A@P2FwFN(pz;Jc6G-366#Wrp7%#ljx%w#eP>l}r;vy`WlC^cb -YZ=5Y1{!#LIGd}yIM9Z{y4reIUB2ud?IZE|NsEi?toUL@uW-8)d7G8nRhYw!3(kI*aKv95X6o{zeVIf -1j7D`^WR2*#h*IzN&=04@sa27>l7p#s2Dy!Y6%tTGM$mI0OEO^lmlsx$6n7 -JaZGn(%uuKW`P^P}mi57s*xYXctbJGD8i=n35=NfKVhU>f%CY5hE1%nTo|70{r^R4-opA`FP$_Ije>xdv!}kD|Rjaz!;$L(Vb9HwU*M- -q7rMMbJhVykMY%1A$2|sxw>gd-%bTuv5cTI&221@edbW&L$kDnhfF6+1zf2_iYJ7Hia!xWCj$;u$g6T -R!{9J?0+WlKh-ul=Qy`Yg7LlZX-e7zW&O4+;Iih!>I27}(@u|xh|AUztJ!|sco1&)n -)ml3gFhTe`&i8g5KuKhHQG#RKOp0_{vuSls;DbS^D^bpZvtY{2D)0zvY2E89djD#K1PgXB%eYjlviiP -IHAJ9>%6K6b%4<=BbrEZzIZ+}{=qdz!saUOe#j%5M5^GgK>9XwAoLwlx+q?DEWFd9M>tsV+G(-W6^A| -no88KDg;aoqVq~_t+3nCUKra~1~QDdz`PPl3pS_$Bo0!8;Zw?dJL*cstfF|e)npjA;zbpo2Y=rj=;^v -;KK>Om$<=Oq7XUR%-dU#soUG>tpEQ8xu#6xntu**ztT*M# -N(`j*nWRXP4=h-gse_9RUP;C)?4uZAJaii5i-JRm8c_;M*R0C&U}?QT=4eKWklL-GE+-4T333M=oFvF -<$t*J?MA8^cWmnHu8I6Jq(FOXCk0a;W3&tS%JflJTCC7m@KjJ&G}{&_*GDzUUA!g)D=rBfbSG#>>{6Y -k;e%DNX|f?4_ZyLHyb76vayr21dhxMXD{NQ3b<2yX@2KZbW*ySvi{?6`J)(l`d`7jnv|?wpJ`>xO`2j*tAwbntg%@ln8`WCF$*>ma}0DL;hEjfMTwuwIXzL -wMuln?U+uhy6_aV8>UVqHnELKarMmz8TOx_OX)pZ~!urr!PhMHr-w@tmnw{v$Hj@xmlw1J1e -P|_-wl`_h&-NhRd^8um1AqQG!pA**RoNI`}BrI~2F$rU)EhK?`Ikr-0u1N_4Cz()X=B*&U%?OU(TASe -Br|Sdi*Gqd5!yhq8)-rNv(v?!!(rajyUCW?{a*x@kLGx8MZ};-KSW_t*z3>e=b5iCOo-q$CD!dB(LJ4 -Hg5+)^XDG_~?LJ`~nWY3;D7GIj$M0<8$}G>i{SRb?t938!-mSJ0XD>L49GjoYD>TgfTrDtkE{JzBq+m -u(t(Tfej_)=1~nzGLY?KaU714Qw|Hlu$v83l4t#^qSCl&|AY2>Fvu8nu>*9~+3XlmU1FGHoc@d++0nG -%GUH%SK!i+cWL6_<-8x~!@X{F>yTS|yn&U<}hYuif@6@vMkY6YC9%)k5YHIJ=n?x*~7rDFR*<>dircC -m{S*=%6MZ~G;D|Y1Z4q7mS8+?M+$+pXS3NCfK{f<-d250$s4K^RI#JZ_?`sK3eR`c02vG3%}E}5ni=X -OV!S@p|7UNw27+g6-swXcAseLKi58PwIDTOJVERljaXf=Fr6_t=5uJ|Hm_6G4k5_^`!Z&9`X -z1N$bj!)-WQkKfNr7{sw{l^g-G57*fSHYhS4Ua0%bN|LNWPkN8|cq52@uKw>4!R&P4fu5#U3fu~bola -284PdrioRseE{Pc-&L5nuSMd`MekVC2KlPqUTjb^p^cQn}GxeJg=#p%vw%VyED@*uH3#*9u0eK9$Kx& -{L{M;9yQQHvZ>tKYssL%pbfiRj(V}A3Iz+P&fe{D}JiJ+kd7(+QjydhyG*-+gK9vW$AR;d9dt8J`*FB -&+3Ki)TCpt_(`qt)YLFtQudc?Keuy<=1U!KVT6lkU+{tDH88$onZG)IM{?^YO8n>GEP)l+omkEM{8s_ -NS8tuk%4V0`bX=ueb!wUjg~@GP;iGIRuYo -6iNW109CeDT2Dx%vzEuf9so(p@lK!xb}Y49`osGQBItBvcvEB+})I2;cV4{Wc!JX>N37a&BR4FLq;dFJfVOV -PSGEaCwbZOOM<(48HqU2q_l!WM>_uKv7`P1=pTx+XBs76Y0 -Kt_ikGM5oDRK<-pZII8ffY3lseT21H=dvXtPJ2?i(2t9B_7RPaG-lq4&Sc#(*^o9-)w89Zjnv%)$j3$ -HJ6E-d6!wFn=k7P6I)0wkfN=hI|54ICpNZA&LqGXxG*F7*!{9R<{=NzEJ#JFYXluuUT{eT!RnY43bGL -mjGO&+g+Zb8J;1jhpR49cp{x;7i;2r$2>8j!nlSKSC$DqDLitQF9|tS)s9TC@tHYFc)+=@}U7@@K=5f -2iY8Q-{W#+D!Ys}{Zz~11-l+YhuIz60p;`#((QE#EH|S2mj`iI&M1sc48XW5nlhk=zVF5+h{gEuHGLI -k+}{O2$mo8ygs(!J%h7Vw;ozhY+@XBlMD~UqyRKuywpD&-s4l62Z#Eu#PQHHuK3oq{Q3_X7MfTyCwN8R5PD_#Q9Au -%A->*5VTA2#`_cZdkTMuj8kpIm(kRj>||*{#ZHB8E7n)tBfF~f -`Iq8@hi}|0cy;fPkm24bBj**d9{1KxZc;EPx%;?Zl|{3JAy>c&8luGbhGn#T<%%f1(KOj>yy8<3CV^{ -y&>Zk4A&!csz*p%o3an7#>d8S#^F0Jv>!ni={bdWL>>fVu|0fE>mmI>mO_f}J?Szh>9~x4ZQ^s%lBrZ -5{0d!422^{-D7;r2zsmEae8)ZB;49&L76p$`B6pf -Uge7ytkOaA|NaUukZ1WpZv|Y%g|Wb1!FUbS`jtts84^+&1#Ne+6r!kha;C5ufP2l930 -*)bYCGIZIT5&^CyV(o+-*09}Nz`L)_u574O4M*Toc9dbg;r~pri;o}TBIqH>y6Tu@wrh&Wku@VkBHYE3wfIyCV*>QAdj3y5f3DVRUgl%)m6e4_GPMT&)H4iUi-j!2Vfe -K)Sq+^_vnlvKMFvlS+MH(=UX0l(ou`N*1-cL8vSPhSbE#{5@8SK0)FQJ=@5iQXvu1DCVy&$BMcJ3CD) -URNm7cO+oq(RJ(rQ&q8NeSM0SQ2+wCtiIhNK=xfT}zM;=ddn9id_g4Io~_lBKXe(^#CQB`_{cCjfT!? -A=v*efjG0HvrXw7z`YZqZ>Y3Je$3II{V@F%lA)zj}SN)3qYstOj^i0k*>H|#b(7P=SK{FT7b%zY_3!h -w`h|!x0wS&6j=cbXRoAFNC{`UcG*wzIc6&l;Y!uH`o74-(O!|MvhPr6t -4=Ka=ip2+#;Kr% -%BIZOHFzAop925+l0-r_LPin8!=!@&usS3Ocs7F)iX#&Gq`MNq0=pzHQUeOSA|1o^Zq8?gC}Vs~3S+h -0#L;OqncNQMmtu!d9o@VS|C3Ruu46@u{}!>LEf5it(OC%?Ou;j->W?2$Wq`tv+QFRR2rT3{=^acQ_qp -%)HxR&Nh>S15EYeL;As4*>7P8Fa=t(qTPuSUkLE-~6nGur3tLDHS;%*6ql|P3hFXxr4%sjl83zX*OohQ6D52Ux(1r}du+Pa -p`ETOK5)d_T2JlFqUx6Pq!StWSl4pA#)Yxt%vlZjTj_(aKYhDx(i|qA4@GH$p^ynx -}!&G~n?lfG7T61{p-t!@-*N3<=gH2Umxu6YTOIV(U_!4^33Dv;Ol@p1Ef?Uq9(`q|9Qo-(Bw1`bpO3^ -BmCGJ+fs{_!9Uk{JAd0#sNI2ALD|BpF@q1VuG7`}JHEGMi~2Tzr<+xF8B?m)$d`khttIVmd~N@dkT*xBq}wr!g7t -=$c0YZe*i{p=B5(E`~1!joVyk-SP(A0%*rg6tV;z`Ro(^rO@6Q3$SHVVc-MFcC5N%K+Z*p&sOtP-K9> -Ua1-VtKAW=1h}}Ue@RR$Y$tk|K2FRf#oXTtg(o%wXX02hr{(0z1m?K$bIDT6`vT9?+okv1w)guktUyww(~`1WX}tRbJ>P+65G?rYTnTap)B=l~ -P|TfPo3Xh0H?+rD7As2ffLR -DA{u9UI}AQvOJC_D&Ui9u5)=2U69l;!D{7BkvhGZQqvGY#I&0Ju${SDg9{3xj=$xLvlBTOt&22R$oV -&}e*!NviL4B@Uzav`q#v!%g-{?P13QF`?imJ6!FvHpN>+c&-yrsn? -viMjxQ+V$@0*_lsYdor4OAEQa5fmsVI%I|S90gdOd@L9gT-uViT?h;N04Q*VkQqZf2mE`?0nyK)$XJSQl=f*Pm~&l>qSeASh=ibCah|JhLaq5+L@zJjKfg*T=MTf?<4mR -R00(>@^?zV9PB&ATr{Yt^i_in2echjXL5AhaueN>+l${Yu<7@P-sFRw%AYVd6=EP0(J_>Q -bk*!vYw#J5UP%d;v=kzuI@OPXrF(F)(ddq_4KI5+}1L -^8UV8Q#zK4DGH0h>U4$|i<9%Pre7xp8i6P}4ob^CAvKA$Z}n$}1?eI-aB27_4JeCnB>?JkWUE-Bdvg6M?U8jtW9 -(_xslj|cf{ez1M`{zZkjUAmOKO|54iQVb)E~{2BzF(xN8m`LLW--91(vs0(CTxh;iFrah?CQ3K*EHQ?4;1eONi~=>np -1QKs<+jxYXw{d1jtyE7u+wi9IrwKK3=g!S_^HeAfu&5gDV*e0J4KFLv2S;G6;kDX-aEh-(R7TtE;2f< -1q=wtvhDt1P7Op6YoHJQEtQM)b>}K*Ir*cN2M!QI|2La~RAyQ%p$ -NmY&^yGBN%GA{a)-Uv@LzuHKrJdX44T(z47MGreov4(CSI2)IVLQfb4S+=e2oq8k#3;t$&F}8t3?Ycp -=kwK)=PA;P{vB}qgyTaLJAwZl`y)60n}Uze%DdPi_XmYm=Tt^IlB$mO4BRM6YCpoXQnvYs5fX2jjWy)My`kY -rI|I{9IK<&|9pLk@IUTfqiXQ4C)00^P*tKuG<6@OpWG*0k7uJlDU -oP56z!vogCne;=M$|I7K@%I3eyN-xB`IgH9FPI+(avs}(KXo|TX4qm~N^B;e^e0FE15ir?1QY-O00;mj6qr -s;J=Nh;1ONaV4FCWh0001RX>c!JX>N37a&BR4FLq;dFKuOVV|8+AVQemNd9_wcZ{s!)zUx;I0RqWbTj --&u00y>5x9FiSG(|6lK`_)vVwWPdBxNTk`rkVwC5y71P15tn^Vy&8o?uXRf7A -)4|AV>Vp%~mYuMCGN^>@C3~jc@MQ}JT~8}vCad4@`&(gvJ8hn?nH~74hTp+hq1C-s&S<$N_$$ji8eqt -Ff~9Q0{SagYrHXY3=qk%HE}6CDM=*Rag2`g(Yju|qe7rh(%G)Ln-v&4X6oLMIV_3YT!VbX>5TnW7;t-B#$CHlW6+ -C(13JbDcBS0J-Yn52t+}wN!D#W!wzHdTxR`^~J7KPY<;&gbez&fFVkCQX>aPoE(u3a{?_$XAhy@_eut -O&DYBEXzPKo2u42h}tFv6wVU&!iEQg`OD{<+|&bs*1&5|Lk&Rcq57e6Y?&#jfw2S5(=r|t8k3^@$0ULi5tCM=9bSYG=m-XfM$T#F -TX&Z8DZ>?|4Es|=XBJVkh}Ham&IU_dAif(}j|ARqlpgwux%l-dA5rkW_KAnC3Y5j#clk -npPu`uw5xD(w^vPFjUr2hUyF~`_cBK0ox`LA&_abJdZQwxphZd@cwt;Np4hZ9Fc%Ec7S*EMCd|)-)2f -;5vkd)%g^OE$@ur$D`B1vX-P04~Qa-U$>Ay_OMq>Fej^}`VA9#rZQO^$gOzxYjSA>r;~cE(soBODZo< -{SZ@IP{JbKR`RoJP%ZcgxWpiIx=cmY}bw>0_nW7HSsj$>5Njh_>@H2FGzC$tHqVEE{8LzG6h(!8L@lBvX_;*!lH}{JHmGJ8$9w3>M+;A^0xmjig)awh;jiFKy -~}@%v(gp(A3%q!J_9sPiBD8GDk_SAGnw9W{CT(p`5Sp;&xo3}173_h#D{plwxrT3ccf#u$y12NoI?J1 -J;$p&o`a3Bh<0&W_^a%1P)h>@6aWAK2mmD%m`>-7%6(%B008G70018V003}la4%nJZggdGZeeUMc4Ko -db9G{NWpZA*3QABuF7D5qvCyTUFEHdwti9Jt?&4%Y2_gYBzB-muKMp`8=!-(gKiJ -YckrFbesi{*&(JYl(t;Pg03#%1i_{Rx4;gv&Ce4^c_gc1lF11Y=VIXIw?JQrie=MLAPx5l<(*T4T7-TdY4&0nKWzkK}o{^Os=Fn6(Z2>)b4@*=+}awUp%O5oFE63Ja29kMj4L>dW3u0bJTTx2Cr -neV~j^@)G`pOe*DaN-39TCm*!Qh4x`aiv%?gYSU!C267Xd|hZRF;i^ -Pb*)DG*xtoR3gMQM&!S?MvQ$*@xJMdP7TrH2kYpA8&w+EWx&8#T0t$A -?AT|TX)T!f2x_=@;qad~lmb$%IiK;h5EX+qwyJ97S-oX;0mQ?j^Np3j%Bt_YAgTz(sUdoiOWu$(1S?0 -LTUE}Vz+$GCnME-sMk>x=WntNC%RAE+Sbm&o;UO6Hf#i>u}0Rf}sG&r+UOhuJ2tY9f}64Fwy!4R@~(2 -oUI@p{VjGHhTBLuV?nNx0+(0?IWoY2T-M -ro;~d1H3^3uun_1xGlird>qu=W9OC1x2GJo3-k|ffPG)5W1cb@O@GM2%$OA1hE+#(t+~GVts?z46*Fb6J%pHdYCnBLweWSfni7}_DiZC -#o-ITWS9_H>H*1}*r4y2-;$`C;vlmN&SbR4+q-1`TfuYR+`WYeL1&@8pnqe$Wv>)8lt+ufyZ8V8 -@OEkE3$n+1iTsD7N|^MoR;St&%m=cgpb@$u4urNu>N^CJzOZ;ouCHrf8j5EiEE@`OmUPFo&x!& -r4BxuCOsys?9yn0*)^6LhSpTOt=oUx0F+!rNVU4qUgL_^QuKJ1Cc{xO!?_L`v2Cab5!RbJrhW)(cuBpvtm1HL9Ko)pK@O>c?;+ -iO&YZy&XX%?CM^6BUCAqPxpWJgc&aFp&E>=dMD&)^wT>~lc)3PoS{X1h~j2Xzz#TY-YyGggi(f#*Y!T -jr8g$%NlDSvq)waLhzK>kPW!@x7Bpd#Vn&{~+$z4eOcB<3>%(moMQf -baid-cC~PdIu;R{0Q=?R>KI6we%rZq~3j^p|i9S7$%g02Q0)u27uMYxU9(LUmoyw4%7B$VU*mI;%QWl` -ZIz;%hHwji1@VXD(5O^bXZAM_Fm0=DTBH3;U7j2V9`Rx$ZISjphG+D> -S}2#m2RURAP;AHx`b|igcPb+$A4d`&1LkMf;|Jk`GfEHcXCs&!nDb1V`FF6%#bk1_}Hl=y5~F@Ck3?@ -`k5LF`kLTmIttn``w%1;oIJLT7;S25YvFR{crXp{j)l|64+3WKVrr(@fWJ2@L5-_dF^#OQ(LvzaHtUsG=YkOf^tBTC*;LQG2Olw^>ZQxyIe0-cM-H*}9Ie7Fm1nWQ4 -xwb+%AG9(St9r5E&fyAHhrclAuT#e9$ntSGog)7v$vgjvv~JZHEr&@{}(?o0mVFpt0FK&0!H2}?B~_! -s=6g20ss^k^=I;U*)6(4oBQHm~4%x<-L>`N{3oDlqYrVL+VC3ns~SoMOFHX -0MD&fn{^ztK}Qvr)u={&8LF@KLtCgbCPc5f-cWn8*A5I;v__;sBn)6cp?2D8?+8Xy;jM?=t6tX3&`zz -@*m&+7EW)0XKaGCJeg||Ghm)Yz-$?#7Y95v7aozWRv22Wh90&BeVPSXMgS@6aWAK2mmD%m`?Rsje!{k001r$000*N003}la4%nWWo~3|axY(BX ->MtBUtcb8d97DXkJ~m7z3W#H%At1ZXp&fWLv4TBzdDWqNvuXl7?XWlU;3kU5Yh{!UO|LrBF@Nd%4ymB*G3Rrqw&xC4E;)4=OV%m4iOQ -Nr^qupTWRoQ+t{0Z_yy|^#DbEqJGu8{ac1HJ}^7x!2!}>;>_4wPktdqVTAKlI+$s=)TwrxB>AV-CtYT -bKdo!Hi@s6{Pr3AnBMw$w<^^!6CV;TlpqgJ?JaK7h)JTd8~E>i`6Ad&r7Szkk1ccXcUVi8siH_DTG`M7JOoa8zFa1ON>nM_M+(OzD@WU$ZaIzNQ&)Zlnh;yp!iEG4V}; -ueZAxgg^Pvu6aH=WEGkg{9P=Wvc>od5~W`~T?S|RTu|r5+u(g=t+9uokHmYZ4p{Q3cj$5ysP&K-RK#p -YE>`Fr=tn@klg^=577hBg0@){lHUK)*1-N!bK_QhF4M|9ouca5)*F(IC^r3w~K}gv3^&}D>hzbVXGw8 -kY;Cryo#Gk4y&~5Ysnka6E9^!sE#Oga#mUH1o7<=u&uIT4hktU1{$KVUbHa-Lj0P%IW#W#c&1^qU?mU -hG`xFbVqIm0j)9?Qb_0CV?v5(#Y@!5pQwrASDEf=w9Cf~KHEQCP-EQ^eIREPKa-M7Wt9QfSCIx#7-^* -=~dA25mMt#X5L8^W)xmEgiU8lPqC;5H;sFqz!BXg9GG0f_|Bcr+maxyUtR7D12FasvD3Gw@G#i&P&WE*I)0W(6H%)Vjr@Py&n!;Be3{799 -wT3Z>43Px=SYKCu~A8cGjPOz{t>&i0DD-JMDg6Xh}bBq;n)TqLg<7AYe=@Wz3ja{dTKn5t5*#^3m_l{ -<6Z(zgIPsK)v?-|bXYs^-n-3x0RizuJlY3W&-T$Vsn_j585;gR@t;NdtR#}}HzC_t`|_HsHK8O$&bYi -b7Z9>T@$91z_Dl8l7orw=cgVXSi*|Je_gPY{{K{@9gBAM=Unaw&e?`zCj@j%`2SdsM~gxXX^Ddyy8hs -0pBXYjD8bO`|bf8+o$9RRA~6u3K}mT>C~pKW7hJzhN9tHuw$a%o^GP!f^ji)?0nZr>XeP6!vZ)a2vfI39R$C1ZjSGqa_*hLTwT -s{(9{{{XSmGg&|$&Y@NZ;Zs^TF>X6K~kd)%DP8~(>EuW?r%$p252EZx5tgip#Z!xNeaCz-q>vr2XlK!u!z|h-Al8;RJl5{$r -I5TcvIzFA)-pJ{sPn4rj6eKaGNG(BHQtz30kA0(ktgR{lBtcOZJ8pM(*7}jq1W+i{^+SQ=#^0KWh?-q -5X!78Ojc4&N3@RIJYjcaaVb2Q&`z(q3TR-3(xPKImXOTA;#;oSn+3xoC)2-d@oo#mL#@-EY#ZJswE9} -P;C*tfZaP5*YJA3S;*PF3R9!K8){!bWHDwbuvi#^|qJuX;3j98DyJQ{fcFu@h!=!7w;i#EorwPNc^Gi+F@qEFYpvMy747iPR1Cz)6hMk8o7yGz+_NH}w& -cc9Ah8z|WhfKsFTmUWBb7F_}JzsWZOwBHm@i>fPd*r!MC_n_nNRRiO#E)%9jHmw)uGc%b?*5$zTZ#Dl --p=;!^Cuf0TCcBO?d?2&va`Fhv%9wg^1%!EcUyAexa^|EKJ4p>di;j_;h0A@3Wm#RLN^)lASNL-VaP@ -6L-QyMTt1Ey$8Y|4c?t}-W+LXJrWf@1)E>qopC9;o6~eA5rdeVs3+`x#Cea4>o^?SVKi -uV9l=4Uqz>bcEgwWKVoANy>D=&0081S&=!cySJ7Be)27A(Ad-Yr+-mltK`%CBrwUINfi8yMo;^2C{Qm -J?&6fzStp)W&Gsa*cL2PEL8ogeaX`x84jV0$pC&!EeG1+>MIzyrhP*guY_3CE3rZ&?4xhBZgAn1CtOs -$ZNNr&^c8)NHyR-3vu0a7IWf9gahg?^^xi-X~x{j_vEN2Ko1(h;Slc2DZU0^%whaX*IIHp1~hH1~+2r -CrF1Vu!$G!?N+IQ`wON3OHkys87-yPo`|wPI1dBfz$oD)5J)5Sw= -zogR}?xB*aiou4$P#iD}o^Omd8mHuzuqEZ0y8Clp(GVXUfGrj6N_W34}zQ3y%;G^};O05{Vzlkfnmqj -P5M=JL@ya;Fko%i$jzEU^b9#7|oDWL|pQoZOkN>Yq1(>7C7!<@KhSE7g>O7W9F0q+CtAmC4rToEpkxv?VzBSm3XV9n`*6?t) -P^-8%UXD49c7};}tt#qkM?sE*!YCev39L|XWdnz_4TTUD~BEi{_ad7e(w9@?%WEBs>zn(`Jq(bT$QN9 -8SU2rI594@0IV3+`q3E;?|*{FEbSc4`p$V|e-2UfMDk&g9ZztF43&ew -*;E1Q%Wu1@g$6{arR_P12p|{6cPlGLL)lTH76dpZ`V|;m<4W?Ji-qL9@s9R7NdhkFfn(BFlPZn5L{^b -UN>^0S<`i&egFNFAD-9Vx9pwmIw6af1~m$mXsm7`$OOR}JRuS;RD4jbljB;83E>xn-~E(chCa;SzniZ -WKZlu9vX;a^%@=U<9F(5%^)B$HMH-Th?T5fiQw(9=Y#_F6U^wss_8)*yI>(1shn-g!Z%!KM24Ex}1fi -5XC=U`Rt6`o|DyrjjNBiw#1&t);Q%Op+U*O`=FkiOwD>w#ew2_NL3P>;8^Gnfl<>z7R&h;7>o3-3w>S -wHUneWh&3#%fEG~=3dOO~{d?pxV+0c9e6N`TUvHrRxNRr-E7A;(P-CrU}-=7N@GjL2LTaKkJO4b~#7Q -NaiiJ^nAT9p&%?W)WVpGSl|@xx@oLjLC0*L0&r0VJvNTA>_tzKMgpr6ziyUcKo_?czKEIu+V(ft=AVv -hgm~PgmS|HAUB(0Kg81!Uer1R9(RD>4hXFWV3H;S{A;p~{Fn?EmxOjgan$TqGBrVOyvm`MhMuHujOMq -emk}YPnkhwt&izFq0bB=?MeD0om&csyYVoYiV}60zAW#bIk!w}MP^*nHUJDj#t)aU$nahTg$*JtWP<} -Zws;eX;VI1{VfL3@hzZ;;HPy{I564Ih%dXIqi5zu}^fHw7oIq{912u8(#xWbgAs~52eS<+;5=($5&7n -%oGh!w2>rUUC`z9+Z9+Is{OLt0w_dZyOReoXUcg9!Cu5ZD&_Lq7^fERAZ%XK!1qAU92>fd*Zrl3{5At -~QGKs7RJ_65weQiDK}%1rq%V@VS_GTpG0&?iYZcB(xap9YU;=py`(2?iWz0qu8vSI-dVGKo9%v%P1Ux -1T?nNv)h6hPe9`%^+(vlL&M}b}9oPduA8Wo%Chg1i|NeSqOo~PjN5!ST5k>Tqp%NSl(}sG+*6F5BbJz{#ep?iqhmK^ZoBeQ)rlBgYgl7HNEFd3UoS&Zkw7i78Swg*>r90L)b4;wPa2A)eu(%0~e^gkv!7Pc%tWR?(sr1C -s0E|X5S-%#RTh!uem|V?YrVw_=MEqC^drZTRX;=#Hp-W*|&bgmrmIUnY?y#jo -3BOr4U9l6`r#YmPOhH^Dj1K6;;W9ndAY10uh1e85ItP`aNj(kRWN%Nf1jg4cRAsr;(5s+76qm$Cby3R -P=n@6zL$TskVttL2F?M|4$kT&tQ=W&~efPsvfGnus#w>SI0R537ePs#!p+;I~Ff;n)lCFWi6KzG8t>J -|d+@r1WhdCFKiQ!6L0t%n2QJDrJXi4g1El))D%JrF{mU%g&xy*WQxPTE^(y-oDFWD_gp+*N(Ruq-0NP -5LaTwxg2g0v0n~|)N<*@JkVNw3iq{-T(ybmQmAsrhpiOFinNdP>1T3MG#8N!23!zZutK~|?;!L-S4d| -D)Jq2i2q0-GY!GU6hTT7xJZkjWtW`-!Z(kKIPlON@pda2^9Z<{%H?0&F9y?iL=Zcr%D&MA*HP0J|Ak6Ve(-gV>>!LdUdj-a#z)1x%w9<+)+Fd_|De@AE42k -k8t!6j(!_(^zr8)7vfv?;-S?lWX>SV2BvRj{wfliKj*8}4LO^rhVt0f@ -|kn+U4_UsXY)%+ti+r`CC_>nm -Ccnid3Ia=N#!?Y4IC~zk68<*K@B`DI$1}MJXahg{k$5QZ@YO#y&f%Vjhh-zS0qG=Jy>EZP?|u>`Ydo&J;$)?Qa*`{JO#~JIcYSdk~8)~i8M3t-=!X;aK`dvYeuf6kq84_)fR`y01V(fe1~)w -Lc;JE$MQFj&MhEJ{9XSjjKd++=4-r|X11pU?otof&KZSwoV6w8UpfvME&r9JCr?Im`)nffpH|GnS^4j -c@=}ujl&3fmUzQ=1eXQ$Q&8LKk7{1dk@Jc?(jgiOQ7@ww$FJ$;g=e3!d1wt%h5#uoe}q{1zeE`^9V>G$OxyKvOg!3Ws^W-iMi(}q@ -0YU5tO6n+>(f6noFO+QVB~=kZnB&i4(!Li*p2X1cux&LVO5`QA|{hg87()Xq!X^8548xDE-J -+`n@h#AIykVs*b#zg9fUjZl=3p$bDbSMP;D>&bC(OXCC&MrGU28DE2A51PEP^!qEuw(ZUhtN!vam8id -zo|9^eV)T15-y5=)rQmw+i0Cf5@pJn(@H@y1!abi0A@$cba{(R65T!UlsL+mh=Ib_I3~dx4R2 -t;z~c`nfqm5nb*&xM3;G0{ba06bbsYi;56xsQPG`-1EnDZjRM$)k+(2x!Y1C2r$apXf(^>j$Ec1R)fF -lSxIYy9fy-(5IH^hvBM#K>ke6y1%^HwIyamRy}_{S#mpT#QQ--ajkI3gO$Net=mU%td8u3u6ek^MvE7 -0953hId!_)2O&tGQcilHMqNWFuk=a4o=02dbtT+f{|hfxo|EBTV`K7BfWgj*zxg~7Q_-H1Ead0cOdGK -m^8O^2k>W^dOSdvonl_PW^y?YB_GsC?XpOKs!_@F{+}k)09UlPC(K`AM;YR>^gKCskYMo%UMKsa*6~G -4E4qg|b;1j_jj9gtH_*?tZ^IFz!8F847oQSQ!1fNgr5{%-Jqz6B53%bg;U9AGW$X+q+Msj8!)*BY?+~ -Tkq`_J^y`8Ze?2}xGf}&+A;~LNkM{N{ -6F+iekusMd%>bJ#d6Q3vF0uPBfwR!)ohVYpYsxH?RIt`7TVdo}n+-S9PevNiA+^_z@P6 -YuDAG*mES5i_fWzc8mt*gWHqm!)5Ty~T8tP`9b?q -77j6q20mnD2nJPA@xGzh0hbJfYkIr<3sxg>demN!xMQqAW&gj6<2yYW2E)NZV>}TYmwMGV;%Zc+_g`< -4^icY63rNH!^HM%_aMm<{%=Sqi-(hYm}N#K8wqUMsAhjrq#K`u2Wv- -(nj-|v*(Ac%Id308k@9qn}?e}hTmPrZ+3H%aEDwMKdlTh?sP^D(C8>JXJs|(%?x%HmcE--)8PJ*Jl(U -T{&0sY@bk@3+SuS?!tU8jV_2d25cbx?UG-k!u#nkPfx*-LdZk+uE|&cex -KxcNX`qQ3*dinyjiJ)w-2NLX?}X$u224A6Pr~wi<;22SrYAeW2)bcuw;0o!AFXkTapaB_{v?^QZs-6 -#xJLaA|NaUv_0~WN&gWWNCABa&InhdF_4uciT3y=(q*P`;y4&`7>vrAPZGD>9IkD5ddy}k8 -i?Ga?BDDl%TbtYe{mlmef*>f#j+4B5&(%3?OcEFjW(I?q!2oz5o)xo2nNBV$@$~VNKM&!5-{Akg6^Cg -FA1`FS@nGYDc%F`Bu4E$Sc_K?uT}ZJzi^uSf{xTH5%TlF9E}lk@MIQ@n>Q9@4zW{_qF&EQ#A@ZUUb0q -;ps>FGkNg;2>a#o2n7vo|&%hEU>OL3i67u1Xf5&?+6YY@d*6+`J5%Fp2G+$|^KiV(i2s@e9VN7vWaQA -~(NMLBttaUu2S`N6aO!{hxeK$eQX&NHc$DCIxrX$jptTZniDxQyd7z%YxiMNx`)QcCz%6^QF~nO12&8 -46XLSJ!bV0ZNjps!Y%3RfA9lGw82d07w<*VsrOc92{?opLUNAj)wr_ZwDv89=$#hf7^ZaYWMKuVE1VNf_;>N!!QtLeNFWn5BX4FU;txosNJ5z)y^f`9AaGtVLTV<*>3KSae&v&SJdt8 -jT*)$r?ueNzr>R0lDnKs*C|Np9tGJ>!txiQ78=IS(8z=DQ^ptv6oSq6G_$7kvJMUBl;1uETJk94fV$a -Y5AP>Z>EUwZ-s*N;I&#Hk|EN|bZJsmOr`^YMj<0b}4G2oUgWV+u@9bGcQ@I3Xr7Cg -K371~^=4X?2=|z8qA@C2X*iAdFK9{Y~KSSr(5aJXM7M%SClj5GeRtPc55 -aW@H@u|Qf_}5Ut8|;ATwU}ZDrUgimDHCUDwTQ$nP$8>;Ie_AoB<>O-OrSG4j;B)Oatz#$%LTo_(Zwik -d>#E+Bobs}9HYqbn6pR#Lv%s$b@Uw!xh#XeP77?O!e)z!MDdD%E(&m!3AFagE%_kob! -Y2LqMj;MR>kjlLlqsNpzM1)#4HNN|YNxJ4Vs6%-mGYf2d7@ZU7f7h)X4V5ZS{k)i~Q5kDNDN5`J9)NI -}W8sspJVT{lSIn~X8)X$}O^7YfF;(OE{3e?Bhe4?TmeJA}vWw6K(ry~@F4P;qUhHyA+0Go=k5`{8<0b -})FYGGf#SBQ;%eUZr<^N#U;eg=YrUESE&7`;9`_zzGIKkps956G+(X0LE`@6^cBhWnihr2KKp>nTKFkUhVRPAkSJlGZ|Wt^*wWv!x7gz}$bZ?p7Y -s4qy-AM9;{-qo571nwLL9&xaShtN>lt093v83i4SwYB{4@Ql*rR7^qY3e;fRSnHwqO)j>@?{Nm~0jYA -pWA(ZTf)661ab``O71yA#P)>#jOz^~V2Ac0uc|}RNsWEU=)ooL=+u~4n8A@K^n`q$8nNZbM|NFX3a8;H9kQWlpme!o$*;IvW|Xpd -y1|_R)lQn(1yMKz*h=vEWls|M~Gx4f0D%<@&F68A1R+&s_jk_S;7}`%}{(R{ -#F+W!%(t>8KJ88rFaSB3#MJ7)40fymmS0u{ZgViArnxnxCnx) -_4gsA~MriK>fIcBs_WD0=zxl`D-NUzoe)Mqgwm)_-Z6YVhxj$4`y6XZwGc|iC7 -NjyLUtY04t@dd))*cGYK%}Xk!RpKj5HFxA-@GBWv4X#s*qFfRcJcYg<-m`obnscGq7jQMccgVpU<~61VK$Cz8ZkRO`|CVFf^IFmzd7pr-OBZ1(Ew%&-u5gKXNX{&};mKu+0d~_!WpOYo -^OgX2j>GsOHwxF(zWm8nr=V0HnC+S$o*mV?o;1H@|>ylctp9pYU(_hVJXvLw>$7sqaX~~(QnH`saAfT -ii9Fw?;$>AZvQPz=`H}Sa2(ClZ&j-8_zL-?-jKJf=@a)NzczENh -V{%C?kZHv8@O>(3%QfV~u!R77D$btV(B@?vKGFtq79!h5EITpMu^;uK~Ryw+SVpC>m%2?LuSd1cS2y2 -DR2Cj4Od>hYmPgai@aQ9YNwL&(5_{c~dPSfb(zRIGUp6Xwoc1@DP<)Fzu&3dgM=N8QBjgKgq8^@1VK7IR>s2%9efxk4MM+>0BmYb= -yxr(<6UUV1zm?9KSx^*Fheq6>S$&g<=LG0s2f=!bhycALD8KucGeCE#T*=l@g>G$xtU}0$X{L*jkH6)zaz2SeS=mqLrIgOMpW)GbyZgwc>R^*$%={w0lBi>Kh@UZ1snjHwaV6F-5fwIDWMTOc=J#e#;04=amZ)5+JGQ5b>F7b9^tgw=0hU4!Whmqoa6sEXY3}$gY#u2MPD_2u3>CX1FEskCEsZ0$4a(SV>;Zt{N -ezACyd9I(3r}vb<>JcDmNm7Q0IZ03JYVArTx6J)@+vLn3cR3NCN(rW@wKq{gy+XsN0e -J3pf{+-+dHqo~7`XY*QI%%Q8+ux97XHLlSq=Qe#OoZ4^)4N?o^2WC}^VpiyJWg1vE -1Tiq=-`VGtjq+kpfNiUeiYt>B{$GN42(rNYZs`zI%VAKeErq#Bp$3pv-N4Z^q6Kn-&@&pax4(0E5j+?@~SGC?}(@G!_k&g@GYetx{iBgM3;IW|!XsO -3dmS(kzVVx6$LxK^SVSux!N?%@D-8u#omXC|6^x{xDYGpgb -u@J@bQisfN0X*fbiZr)@v--PC|Xi@~vf1QE6pXY&26*2`s@$b9p_aR?o7IX&+qWza56g8n5x}n8}*c7Ef5-lr}=Q -RrT+0DhsTuP2=}PITSE_@t?DKnk6HqHNa*`W!DG=p=&GOm`S-Sl*z~S}dm;x3gi`VBs+hVy)+Mjk33t$w?@q4Npsn*d>^#2}OBpp(DQK%Hg2KjXAkhx?s{{g^YqI2##Fiq&>3t+KkgE;xCT@tQ+Vjf5FP -&$EUi%l<@yshg>q!2xO5JlGpOKlrU-Yq<*!4sbAJfM9yb_W)?|;OpK*=Mh`KSg -IT~yQT2VAvSB26qbT7rz*xnz~zdZx8^#8|Hw!_4@49M_(VwaN@Htvjd}m`szH{n0(L8Qx)0$vP%&?Z& -1*Z5_>0f*Z4Nnuw5}1W3!^&@SiNWv9)X@4gv*^QX;-#m6p7IcVnzrX$S97d&!IDmdnaQ&cd{1hh}%;Q -d_H$ul$^=&n_?Af`Clk}p;Z^TQ^8&=}N_NaG8w;Ru=J8JqNyELr_|rrY}XbssMnR>!5*2n{X~?pmHr0 -t$@vTZW#-vZOsdt#lJ#Z>V6VTtHRjv~tN?Dar-SZt9}A&Q0LB_LH>`Y7;(+wBwB3+TIqN{coa*LT8bh -UoTDSOw#5TlZXhPzl|Pud}XT_$~3`J5i-cAx>uRMqLqMOebDsPoxZS8uTkU=4;fTXSc>yCd{hm8u>=L -gYG8jjDQcG1IJo9xU@HgRFD2*zS~g&HK*Ns|4NqOP@d`wbmh9N>X!9Ja+fcsdAg$MB3uK|2PsY{6rXPR*0wfGAzTb_6 -0Z8{Ic0uxJ(#=to{5PW5l5VYdV1O$3RU{d+S6lZK#krjySw!pTj#eO@&8jf{{` -lOuq1dI?_Px=w3X|BrQpjsji>To61JjLySMV2PC&cRaSoGhY18=};mYTcvNN2naj(N7C#f?`4Ip%m_?Gc*$B4CMm#+ocsI1-I2^gQ~F}7x1=^nKZ$W6wmIm{ELdqg*XY?M@CdDXHL0;R7^M)G0(h -ygfcjA#iEmj6_@fYR&0w?@&Wa*~+5Q<11R57ez6PuV004oY^ZEdVMw9uVQcON2A4c-ht+6yKG%Wt`%=>Edh3dPUc@DBJz%_f< -GSIGi#i4u*K|Ow%~zv;c%`CS0nvQm>6&_975=()jv-V -NMnJ{5ya_2Amar}&G{Ix1n}g8r{>%AU2D5r#BH8{NstD|vIVBr}#U3F$fSOqjEIo=48F%HbdIGZ(W2{Xj9B2H}TiI3CV8)VC{(q$XdtHE#yUUR*tq={K`9JFwJ72 -~O24WY-AV&u(u`}E*wzbuRLbelJn96UPGTcFv7Ztb5G_H3jMZ4?EYsgDVap5YGuJLJ+ -EE21^dNfuLem6LWr$sPA}5uKvgd;<)4+py~k6=7GR_eGlb-6I%>!Na5m%?1Oi0vZjyg@$`QJfUnpV@Da&0?Q^ -eXV3u@=P6ulu45>TXV-hey&&3qYWgX!OqgO;nq4k9DuRU7A&n;0Hrr8+O}~imdVL77=-l=RXsk^)idv_n&v<_DrdF$M|rvJL5vcJk}YWwdyss|Q34TQj_4j}bXqN!WIfhvPd6Dn(Y#8 -`TVP_}mthlH*t%zm*aJhC;o&USe1_(A)n2b2P&Cw7JqAvt@Ws93bc*{KWID -?()UGx(!h%d0r32rrD%Taej*3AES=yA#OD^bgld0Qe<j5}-!m|GI)d0$6y<#z-(Yv^c0XgIPN@yGu -D>ei{hRiT+LEk#?{Y6R1GfdroLL(x9h8(6EsSU*v2P&ivysC_-iq-t;4|u-c3}>^x3*UdvGp5wM}{S; -E%wf5C?2HWbCn3nVN>`YaJaz+Q0fy413V9Cbm+aGhqXSR?2WK1=R@Mvyz`@>A2# -hP!E<3u1@J3>Awi_`gzwMudrG?@$@$g_0bBAAJ9TrysI9IP3exAGs&mILRT>C1Qs$M_18?Sz~JK*;%R -ViYYx;ZV06xb`J2(^K>T3Jx-XqwpgYKuumY;Nc4fayI{4=fIEjC|T|@5gtd#L(d-93B|h^3~vN^dtTIqy591UV%H5rL)rn7Sa2@({jr+&^6mK*L{ouw4!T8ld_o4RKGoM -Ye8^<@Z9Tx;`!LC)gxUxY|PZn{pGippyu}a@Sf&Cy2~2E;_s&kA)-6xN{M@7!JEhLoSrr|aNnV)jScM -g+EZ_*&s}=@#OY~cm-OvBx@>#;-8$&)Ho8myp1yN~QkOCix(M}U>E3Pv6jFS*2?1Sp`B`p{0s(^&ZSN -cSmb2CV>-EoWc@1mu^*iEh%?dSHl?&fi`jxl()?G9Ed$WbUP>Mk-ZDr`=H8IY$5N-sH!BHX&p0MdIlE -E`=gw6}w(~$ojjM2WSw@B8;puW}aH@Tn{jbJpO!%Vf%mN}3?3w~8im;bZ}MeS~@~kR$+AZOaCK84iI8CLU8Aj?@mv0~X(Jt?5H?9^qroye@!9Yd8 -_4q)7=2s&;JDzb^mvTb7{w}@MO5`KW#t@;;h;fex=j!9cZ|h|aFRFG9O!8qs|Y)4FHt5UDO5)MPY?@|5WBiRq-(M{I_)!0u -mVA^LYvSrihpU8i_hSc`o^N(I!Eg{5=k?o)vLUfo4oEhSsXQ2R8L>)L-snA{`D0zJB;hFVHEC+zxZ=+ -)3lpHjxSC%2_nt*ko9^jB|Vn5CURu$QU*Uu4yh$8Ra+q)Yq9b9vPF;!wLCbBW0v3T$fh(M!*5wpFUI& -3-5&$P0r~>INPv6)voAP_QrB!LtS@c=5pjViq16Kz%NL(5K`4m2L(d^G=SML!ChJ5L(s2tCv`b)g+b* --?y-Oj|5fT765pzWUXHE?9evS0TTi&GN(e(v1LWlm1)GSMJ^B)$gJMe(-OF?LQ$C< -vrSWzy}>2*;in9Qh7>3AYy1~0MzG+<7qh7PQ0e5p?@OC+6Vj(3tWqfDBk(N+3VYm?61;N1f}TH3pV`) -Twor@}L?PCZPHGHi3w$sdSbs*0`ezWek4-Fnh9cLvIEm(u#$W(xE-*#E%rUFYD&oW&`0Lg=2fX`y;|L -5aDw`UX*V&FO(T>e$@ZO6L_CVdVXj`dS}*_}6)QgZaWmcBS`2Iner16q%da^;I&sZGa9}$E|iGDN*DM -RnS#xp=?-@f~}0 -cgPltHk+VQVNNuDcCg+|>iHGxn8ldfv9vqxw>2PtKkc|5Z|2Z#c=P8ioEFN -E~ELImns&PESG&J03HkST6r&FEolH4N2qwk2poxD?!Hok>A%@DO*Ueh4<;Gn?GW>`{I<7l9Fph-h7UM -js7GR37&pC}J&xrQdwNlsnc#J52Pp`${LIqWY_Ygzuo)l?O^aBL%;m_k5p`P&fDFoM=98V{AX2kY;4h?Y4e=81%imDP^2-*?Ot|Z{l_;SS5>I1MLmXc+;qfux=(F3OeZ7Sk(Q&fTvS3B>F8k&vg-9;WF-={&%p3GZ?DAo;Rq27VU -fW>T?o4-X{z|H=^#-{eO&Gh(Iw3Ky6I{KjX~K6**SEjhn^OHj%~sHk=n-0h1kkp -iSi---JtXgR4!jwKp<>noYGtSB0%j6^SEmu)X#n4H&Gl9R6hoUyS~hm -!huqJ<;URKmMdAU*kBqDMEX{Ch1@4H5G3LxCrg1a?15gxWoMmm3^nsCHdyW~2?_UI6n8~+e4#iO!kMT -&eeY|;x_Bo)+3VOy?r=5aKgDjeu)G5XHi)pSPqEW@A&T*MUh;T)B&)GGPs -V2UVH}4wUJq^h04POgK-#3ghmGYU1++o)%iJ;!bShJFECP@S0c2L=4pffTECdM=wNfY}CNfWaoGo0al`eo0;5 -_{;YQJ%i+!*QHLOxEX;7*;Qf&BZJHosL+Xfx -Qg{nkR;RA^)jmh}DrCO9#47X%@0Cj_9I48?3DFTBe)e>}hdBGh(5_1gv`5&Uz -mU@?YERyQU`oek;`3RA_6|aKLmAqN>T5Glu@jK^$EQ+QUe2{5<^erWd;mwTMBDkRRz+M8` -&b)ab@DO>tv`}q7dNcuE%+GMk;iEh)AFD^)vqyAlmwNQ%o2Sc!eQDgNgGNZ46>?8OQ}X|BGX~5%4o7c -elt(U2aE!!@j`(s*1Ull)pD(=JTz1C}c4U2Er*&AlYu&xxFY3>sFt45LAD+N7UP!pV=gp<9mQ2*{&Gz -=z6K5f^Iq^AxtFAq#D6kWGGXv_P7ocdp7Y|eK3S>ADt;TlL{?{5A-#2cSdb-N1b+-1m+jzQG8&6iX(O -8-E>v}Da7fo`#21Q)f_(42(8r#^=gB0qtk5{X&(gw3f_a!SP6H0Z%KTz@~vU*PM`sP&qfm1M2@L68Tt -Z&Ni?f>-pmqw8|NqCc9X$u`!pzo&UEk?gN9zM_kUeYg!MO;qk?`T)&#E=Fl`_5qvJDVo;wxF>F+O)_v -2M!#>U}TbNY8mfsZM|18ISidQ@13U$nau#WK6%w{Wvd-t9@m?7jd;um(Fxk4s+>!W2Q-eOQKQ4!6W^J -DHeN6aj}hWi^Iy}CBCPl&O6Jp<>ht|fc=kGmpm+W>q|n6(Z!Y9KL~gSgFmYk^4l#E?{2$dD@?k;l87< -xzH>ZF(=MyYD*rn0T@A_yLZYcz=qp?8hK)<66a{+3o5mOiCJjKHcS$-)LKN_Lbk48Eg&qHA2{{c`-0| -XQR000O8B@~!WE{%&KemejF>^A`b7ytkOaA|NaUv_0~WN&gWX>eg=WO8M5b1ras?R|T98@aLP|N0ad> -3T@o6h%@pEi;z0ipQSOITL&C*hzNR>+m$mrqnUn&0#n7$Y$?n->Sm<(aokF9#8Ht_j+s+C=?2XLZMLj -VUNAamN%>9{Gwp}Zuc4cKFiMMF*{2qot-_#eoQ8Dn#WUCWbCK+Z`eAW#w!*EnzJp(-adDNcKIfdTot@b#Td>h+wl3DIcr;?kVwtT9=uvTK)eq#qD_9|N}p>yK|sNJyHI-Ouo^ -PSOzei$WbF)D7BaSrvG@Q-$Dr&!$#cNlz1%dmNtp0{@5>q)#U*xP6kzh14f6|c37^4zBZoI-8UwUU~4 -S@@H_1#-}9HohrW$Eajb^HW&ds2aKnkOq9&QD5d#fTs -o5dQ*xfw>~N47XRC3aXL++6tvS|UdUSggu-o%lk;gV{!M+k6rDlBnwUW_$&)lMqI42B$Cqtiv0 -7Fo-bNGu^Wp_NZm}oOgeze96()w+SurR%swi**S{kS4#f9HfpD9_Rgt2O|fHLxy@arSpfB2r$WiMElf -t6$Ok4ff@vj+Zm5fuz))Nad_kDw#9?+mn$ -x6ez)bBpcXpg!Nd{_$NH|Ih#2j&msARxG?^gCq5?Z&~+x=6q!DGEG7K8*4MrpGnM$3+TyJmNxLu)n}Xv{mwIXbrG*(GL$U7PVypPj1;YA;v0 -~}Xbbo(u|{DMC}*5Kz=~QjI+JXj7R{DDbU4;1Rhn{WNUdKhryC7v6DH8ApeY9ODB|Tw&z@xX9eXJZMn -YyCD$u{KE)rPT6VNiKtsA~c;`x*%S{>Pw6CwlcPv$_DjXq>WG=H~(r9Vl}|D0SWX)_!DBc4b*JR0Tmt -jK9G#4+Y$_(MEjf=1GKVbx3Mb8!)~4E|U#>eVXAVFk&c7&!zvL*pr`k4EzXDB?ms8pXeiM&kRw#Voqa -k||$YNz?`MH_8NqY#dJ_a2sGO*ffiC)RYS#Gmo`$8JY>4tX9yM`3<{?3)Z|SiskU&V7xxhJ4^1BWUKR -oB+u7zuiHK9x3pRiU(Gz8&)U3Ots1jn$EcsirS;=q)-dN_DB#zQXo;6GEe9_Jev;jgV=%Z**+tw5kiw -KBY9@a;1b6A*yu5#NGVHQ@)R5mjD&+MJjU=**zXp3+Au~||tD20Smv{6IjBYawzs7hsiEWT3k!@K5d6 -1F2C7*n>cFunK>(P&|-+uq$2WbAVkN+O1f5S4VEY>OC2mCdfueqz%)PEHnp`8kS%jj!p4mT9E*FY;Jw -h|rMIS8_E<6;rzpYK98JznavC=reGV!sZ57X|QbvuqcvA6vBbuxFyC#AL$EY#?YJU -@bNrdog1@6v@v9-f~4>`(0gbT3201qp0U>nS!>#6Wh-O!?EMz(>u$jAvV6T<&Xaih2T3yLiU5lMEYpu -4ANJW*GM^iC#>jJ;Ct$m|l*VFHH@-nljMno)^y6phveA{(luC-h#(p4E>YpSRSr?6!QB{xI5S10X{aA -G7G3}^;mxNZ1m2jg~>iUVcr(@Rsu+ -$3p#cOT!?9vAtF3uy-p-M92fTKI|gP3kF+>9F|bY$0pnHHmns7Y(pNl)nCV!C=LG2*%HC|7PbWE+G-Y -Q>Hhi#TX{=&4j`Cy@&0#wn;U;~Yq&!#;S}+DTpE@Jx>X8Svk>*wKQPZxSc^dk#7VV+hyTi0rleF%{zC7Xq(` -yLjqP?w{i&d=b-xmbDqIJV%Vz5T*^Rnp~HfA}JfDcq*qMNLMtb^hEa1nC>O>4AofDk -$egkiQW2qR!zY(J_Th%uq#dDbKv%p=5>)}3?{{Stj5Q-MS*@)X|)#~R}0%wn@6#2l{4eGZT9XGbYY%d -xtiwb*RGt~;jYZMb{*|1r5W5-X?lY%sWpQ;YYp&QpV8ZmWN+~0hjO5Xa+JeDSd6kIN-mm@L`=aSQ5k{ -F7}YQX5PYQ%dset)rExrsr&2mdnVpyihN`g+k#05)ge>?m2mRb)FIj)HAGiB1g~cXIV+KSRFuX_#jF` -aiJzDLW4wNxA_?;BTEJ>#_h9bh`%6rhlcmt(iNz3D3)-j$VfX3z73LAosuAvhXiqn9k_f9SK3+ghM8X -z`La&nK1O2RRamH!t;*G5QL7xX$=tQST -@)CQ&{AQM$~sy=Vh&*nAUVV+4!_OX#XKu^Shm-zQ0Nt^gxJ9KpQUxL!NOh}gPvtFwu%}c&sETUEN&)A -t$#*pbjcrOdXY>>v5A3mOgAxk$Yx9H{T>j(qDx?3+_zNE?3EMvxur!{)d`;-Y4NJ4($Z)a7*jH@HzD+F4h@ti)xCmr-<(ee^UEb -vGqnz4%q(@4snK4-CSlA&X^JCgNn;-CLXgZX;a}CGJsXkj{OvD+6C@dtXDjt`#7z0h-=m-|Y5%}=4PW*)RFx@IuOSh>Af|ni+ -Df(omKmIs+_xAOB+nkI+p+0N(X+DpZxmqaWoQMBlhY)gyf6THa2G3U6`uxH?@x=KkXrXrsj_PE+TH&@ -3Ix?PTlh59&ZKzz&)>Lbq8#Ig);$^?A(hce>p%Oo-y@p){1{M6dCH90l6CX&ZS?i__Q^0 -FnmW_8#)EpbNWZ^)J|V%XsF{dYE^f1rUtzt7ps^g?+_I~7Bgr7VXuw&$j({!v!_#2eKu%}o;D -(2q8SJ@#jk2*$AE$(jNKf~r++8qfXKtP)Bb7>7)!PIvZjpCWxS*o9nDbS7WVi8Hw@w^{x2#)21!8HX(+x; -5aiufkQ_Ob*oo$)G*rW0HjWQ~`ckoSY1#D}~4Bwg!S;I9N~TQ2v%fr%b4+pk0^EBN5}$lh)$WJ9VpBc -*N;e##9oRCP_H_o-ns%Z-}7aoBjoTN*zM>_DW5^aiAamJ?>y8xVBQ#p#Y7n?-Vs7F~Mm7AZ5hhL-K)C -*fxq{}4v+<0qL^$pd*-e8{}&;6!({@T?$@k%+x?e0e`zb;(ed>%1e;hp%&mEVahj7akU(2>+ -$Z)rW^rV$bmWExQi{O@WSfyuWd9lCs-dj=Zph!BVR7f)AHyg@{IJVT3a~^v_BqbJF`jv@Ma^%R7)+s} -cO6-lfg44XK`8Sy+Kt&DL87j60RAA4zPa&Sr_%^CQRxVLn#^V~ZGQL(IZPKkwn8P-4t`lI5V)S;{R5<}tqx&!8`V0y$=l3xfnnq5SoXUS4(8tE)>o^yd> -4QS;my6ND8h5y8(9;`UU9wy-E!IwmA5~XaWMogg`Xb#%$exudCtlbh9@inE^tQKa -7tT(M{kRafyGVIi(fU~Qf~j6a5MUi=RfSiCB3xPHaB%~;N}DH*8w%;<=J4(=c=a@@-|9zpkVO1?}pr8)UBo+Ps*o?@0>6PG4 -lyKUSSDZR=Dgw6XBlZ$xrnKCS-METu`$g><^W7N*ny#U6!-F-A=P57-P_rv;3995grBp#{dZ`YzwcF2 -yDp_4k1lcXyo(Q1XbdnpQqV~+-_cv123<44nn=ht%9tGB7n$L+5>ay)$`Ja}z1ps+r{@6c?^+nbJPJE -77ZEQeUjlS+ZVYtjmd)OTDlm8^-iL5M)0uAtovS0Z)yELS2E$aHPpYFrKBY&D*y6n$;xHiFj5MGPI9> -fz>DvHX@cSEc3zuV*W@axA=Dc=+$~3NMhzPWyj^k{~lbYZBY^G0(R38R;Nl@oVqV6nY{#>3K{@z0A{5Ly8M!JZSif -8y%XobPcWr$xh{AH=K|b~Im{$Hkb?hwiy2LMaD)n&9CIi=5=Bp{a$mS4wwfFILt}0kO+8DENJyX@+jr -U2kxQ@&_%-&APQ&Q13KXiW0_>z@;U=AVX>Rb0%e0jiZLoE+s&npzCaaY5g9CPK6`#fhFqRt$Y#O?NOI -J~}()#2__z)ry7))n@dtC-r88@}gh&KXe(6fJnBkxwKK2EKek*gT7NPzFlXr4?}_8-kk@elNE15VINt -{V}fy0SR>KSoX0`|)l)YTswG%@BVV{=aQ%9X2a1NQC)MusfOv&%Tze#Ri6yh9%PPd4}&KOJS{`?U<}` -@5aKDnrkzHBN4P0dyKAT%;(t^?rg*yVNVYBaoN9$=X3mTzJ^xT{4nn7A_08{pC)b_RPqc@=i(Gf3K#` -`4T0j{unRROBJxIC-@hJpM&G@Db@u1eA4lJveSh}heFv|?FVQP6nq@Uxnq3UyXf9raEY98gz0LG@7G!f`@qY#!m`Li^0p2|$D<&p{aAYja-moyMIpxv(+Gm&Iv} -Bt76s;)S73kVLQP-tZa(b!OiX~C#is^BR(GmmY>aXW6*Hxl-De<|LZ}Zwa-rb-td>Z!G|N}OzLbr2Q_{hMN2)~s@KP4QgCH{>o@jJ02Qz>u55x;IO69%7@(!gxpX)xC>$8I>28-j -CAr$cm$%S64>E2W)eBlV#3AF8pFI(bn6m@A^0l$KA7B$N)Rh`B(9hEP@eVHTMg|y4iB*^8W^a80c+ -VywB`3tDtI3!(c~iLiI-oAwgLHrM^jDR$wm?3U^l#pbkT{+1Lt_(UT*XxzhBTD$cU9Z3jLB|$qGNoUrZ@B(oUaE7B$dj(bpg{pm -w=Bi#42;RO@MYuypot~w9`BfD(H4x+a8+JdN;e=}uFbJX!J84p9-eEf;nr8{9Q%1KS{V1>9Gjo7&rz< -=otx{em~?(9cc#50@-Tr=%M>LrTf{FaTcR2->Ng(x&1UVl|;8bjiWi82P6f!hA -D4K`7lOf+nJj!8gu7~zYy$sWsEi|2IqyTJGd=?Z>rVKUq_A6M28QPT1!R}Bk6e1A_fM>3-OfZH_}1pf -EApZvTP>r3W}(J9-wXR!u(cLz)yHKCcN=*6a -4ji8ZBewZbwkqqvZPU=f|(^PV1ieA&?$bcU;Ur*!mrS0c)_(5Vhy<&DcQa#LXtBp^gLPLPI#5{0}=|C??d@#Ta-V7@`EkPA4B= -@&DBn)Q&dt=4`=}z`i_iivt1TjnBwgpit*cI>uy3!Dn~3 -&Mxb7>u*TAnp(OG!FPiJz=4rZ1k$Ep1cPrz_P+-6lLeZ#7WvATI&#FmGR$Gm9l!l6+SI@z$vt&UIJ*9 -Aj6K5?(n9b~aYyvUb%GGsK#g}^<7Q8sgz65Wu6VJgSM*y0HHM(`~n_eNuU6i>K28rnFT2^fFITW^$)b -`>{hX{T3V1S+2D+)Qe-tSK6iL#vL+4F4;*8`>(5mQ&Cks3Fw62VL(=pIaas7&sCfo+9t5eLFu=?W=!# -@mg6bUst7xQO+K9Wm$Il*4?yH!cgDT;*MN0Qt#SKb1TA$PXM!L` -FTWWEQfZjHOc_-A8qf~;Egel(%z4!#{7)|cLormD3k@to;$@4z_N7(d7Gfli1UtU4AUfXl{lxU=qCVxUpyW(fXXAv_2qjyqJZbS9VV~qUPYImF$iJ!RsMZQTpu}U{;}G#Q&*e3IZki**5BsCFwmjhJ+g% -O@_cr<6Y#h(CD_W$6UWaNPw*}83_In%2z1)Ia&+Ss}bFU2@44v|A(IKk-vPN}XTYS-V(xoiugFtYR|G -ZC&BqDN1=m+208;^wW`y`l=gjcGCPRl5{ULTF4L3t05FO&*jf^fMM2*@rlu&Z$zRHsw_}vQSk1z0PQ -%z`X6ND9rkB6h*wYkfit^I8Soxm=KF()bP0&#Gacu_4W9Wn$7c!Kfx3(!*97v<2*sP48C`+s0a^Fpu0 -v+TOxES5Vo870?{2;f<#LL{VEJV{)@W@D(#vhQ@cZ3MVS=jvhOf&x(53}4VcLXzFk25wH`9?cX#i8u2 -2$z7^Mab7c6>!2D?w-g7PPaE;k@T+(P_H+H!^oqHj*u^RA-c!b-GCqfdeP#J{Ql8PgeNm7x;K= -rWZzjFV^=d*O0amPcjAd<;F8s*T7n@yhYPd<_I=q*tc}*qZP-T~R&cPJ>R_6SJrL;X{xxpC0Un&!T++ -m1;?0ykuR2G0g+Nr0A-^6Q}W#5yhe}H!F+Bs3+|Z=a2BcDJJd)NnlPo(viWupucBvry_ki1cnbw*Gg) -PVN@&A8R>XY(~S|hy6GRxb3kSjxqypQ)|?5efMorAPxs|)_tvH`4C-B58B%OYl5JZePM!dt$AXIKF$j -#=JGcx2wAOht#6V?sQj+g)`GwWNQ4KTLp;zN+Y_7)U@nBoL1L3ZYuthbULUjdIO;T8w4%_4jith8YB9 -BZ@V?yM@YAU#4{FE(#i_y;@594wG;WjgGv6L)w#24UG8<|F;!k8}5xIUi@CJo8Li?X{9t$ -4XD7bg8t9iM7#n(B!gvi>1;v%KC8oj?3W7ds+qwd+aM*2VGh2o4!%?N>#4EPU8uW2*y+Ev3ehi_8Z9G0iOe9Hm}R3?B4Z_Ykda#soZ(a-8g^3eh@ws9p4LCeK?A;U^ -4BM&WH9#>&&0*HI89pT(pdA?my-V)+c^}8@=Qpod|M1x%>vx_J69UVm&aT^$Z^s -ltFl#vMFIe@Yd~*!QPdv1ze56miqBa{>Wl8U`)7xe1k`lqJwc>K)2Y|KZT?k%kXpTd`=TYtC>~R?IJg -T~VQYSy#?de}qit7{^!#9&eq(k~P6ywnrS$G%oec5fLWLh_lxp-YDyIcUy$s9%ehI5?j;Jd0_?V!AO}I!$FmA -X^0fb?d*`ORwdSXl71e+b}O3S(#|7+eIjso!79S|G9()FqyF>WEoG)Vwx!f`#VWZiSIK2m#FawRL1rE -RL!yNco2c*JfxRc;+15Wwqy1!gd9+WUqS1VR6`vLtm*AV|GMe?6KFstYO~G1+aYoDJZM{f1KNgeesa$jP)8~ -lcKRrfpnieehi%b_2|dfZ@>TWgT|S3ufd1gxoKhjc%`hc=UAe?D)An{omuT3luoTS3V26kRWa -eqzYIp@9-lykk@QIS7&U3F^2bKG8xphqpwZGiD$cge8qi>+A<(2s~hvDYfy3`a?n?vn=FvYtiklcYeoh$RNRbrgCA36p_27` -ICC`ko()&bR|wlpGfhL=B_48Uwps-1d*HX_kfo?b9u2Ycee1yxZo#dvBa-uJhCtr?zpNwjr51r}3yjZ -gJamq3%FtQE^(s58C!*I`$?S>s%87?-$f-5Wu$M{2SE!HBl6Vr&oQv`$QT&)Nd4An0TM$58tj5RGGyd -!+8yQniX&gMA9=Zv=nm{s71+BJB4&y&;a!x*&g$1&^kNF)sqVNGE`J+KZh=aXKNK9JNPd#rbaGyf-CJ -@%~nrk*rE0y1w0uPm%EM&v~758mx|@mOwVq>wg!C5sq8b)x99drNrc5n+aM*twt!iVH% -xbela#~%<6)|NaR`zLV5|bjDn@Hifwc#m>(+p=0QHif3nmy`R -LT&`9y0vTFQ+kAbS;hb0HW}x#L=83vM)&R|d&X}D$o_roe!{ciMz;|jD+NN_BrXm_yDdhq%<{o(+V`r#Qy{hiPDBTjYHieF+PZeuDZcU395=rCQv(l+K(m6Lviq?&J7e)yMCdMp|G`}iG* -wy_E!EgeRq`IDIFdeu2|SeKHV#FJXKMt@47V1=to9ui`hwb;v~JxqJ?!4rO9 -$V$HOBPzttPTxa?`k23`&XQ#2Y~#nETz(rDB$Em9ejY;Y8PlOpfqD4RkDIAV$N!dz!R*_Q)p-%GI5_- -1R{+_du`op_fU1D#IA;M1)=eYZ~jcG&Ot`u(TRkDs>O_(}!~AGx4}>x&#zw1G=>S(~lk6}+<2TL%KpX -2z?qfmnb)Z|$3EuV=Gll2GJRhJ*3_VcbBe-I*-y1PJA=noU7M0Y2qDrRXJ|=)#DnUjZOzVhy~KY@;3t -d>j7kpGTmCf4=gU^Xxn#sOlZroR2R}(?vw(!q1}&oBCT3pa9yzH>`YdoWjO%A>T_eAMzc?#w5fSiNy^ -s`{uJjiSHD|voE=PQikux3QE$Dud%91*h30R*(TiUI1EJNpdp{KuOEln{Yxre2$TeP*u-nW5Uc#F7d( -`0mm@UMz?VD_J5JJQbrZZeuFuj#i9DA_e5Pb0gFZnWe&HORu>V#+i^omhvGRA0?EIZ-2cNFJDbI`yQ3 -NhUM|E3XZv1yoE2$O}%-W_D6{d@cJ0C&GiSDRdq1&g2$b)UqT*>n!zfH;$kxhCB-hmX1-%uK@A{S1cJ -?uT})lZx)Re04(4UPZJC8<1pM%#eRl2JG849OVHDVXMR*?e``CNeMY@bIvEOWlyPYN*Cnm7Az(X(>GK -KfA3IfEp3gVlcK(XA)}C^vC6nrPlKpB~D_K9J-LR>v)bvyPcB8d{>|r+sLk-+>9x`&9gF4o}sA(?^ -oEIzaSp%i8E4OMRTqaB%oD2TRC44c(e&W8w?#_p~hvAJ$afyhFJp1n>f41ZHTw;K -6o38J$^97&y3fp573L44N=iR01keTg)aa&B#P*BoC|1%VinQRqS(|<=$-CPNC@8h3>EK&Nb$}IPR1Ew -ubw%=R?T{2S@OaW{OnJl0mCLk!NbpwS%o0_KQzZhtT*s+$=fEJBXUEpn`6mYEp>WjIbk2wDqrd^kRZ -?^a+wB=bF3awCC|%(gxQW7{dhe9&cJP0Q<*kc)N%ST3EyQgFxMi2MQqwIoJiYD@S^t^Ng2(^vu~#H%u -vqIn7Ae;FDzX8xEVJ$T#Fy5SkC3%uY}&9W&kXlm&WX$!-zz0_m52b2s!7@pZ!SuK>i&)z4CWFD>NH}2dsj$ulFIdE<*RFnio3o@8zHixmg6~Vn -2jH?9!3I5vy>hjXEOp~;koZL3Zw_Y&EC5`lzSp*51~cS-)9o}goNCt%*I)?o -)=;SDUg@j!F>AM>BQ8B@AT0~jT2LcLahT+9iEX#ruv(Dho<534|i;8((&&F$f={jYLJpbWO5BaT0z{! -p&|2*15Hsi4yL1AZ|f?htC{QNa&Cur&G?$>DwGDOROveBtH$E6F^cAe&*brI=={}#=(LvU%4izDeNY} -DGHw->#FeZllHJH2n2qa2Jd^@BkmEww2LV{_+sEH(1=H}3k2)^@*s~Mh%D~(IhT!}hrCQvIO3O&-Ha0 -~X>kpe3HoV2idDmKmUe-Y`6T%fWz74!$_|1v<)t6o(=V$n0Q1HbCd|gQ6gXeL9TLgap&8;6EvYPUhJ* -wDQRDJ?)BU*j?bu$jcMX*rf!8UQy8gi^m8$j)~ALEd-lvd2X<4&vjY0fNvlsC_@+fEXb(~#!E*H!{k6 -?T%ZATU*GYir;F;ccf&jX|vF$2Rk$?7dJaQFk0p(f5taN2gj< -8mrCGP>i3UCB?XJ`rf|5;*y53OoKzFc!d61F>UTAh?Qn@+jUr}W%gQ)nEGza5b`Jwys$X78#2&iz=G% -rsy=PtLmAQ(?94ZR+2FDw@e}3HQiBeB1OFiv%aOf%ykp$>@BZ@k1 -C%^g-)=z8IQ`SB?_R%&#uHeBL_9QvS0NgdC>tJN#dw`gE)2Me!54(9_#I&4zYV~|U2q^QXoP_@E&p!N -2s{)uP#^+ZTm~wqB0TWI#hwPC}GsGX)(x9N$X9Nz~6FB=^AK3KX -rJ~h-l^r?{TMJZQ^(Kb{DHGG4^jk+>ylT|jAcDDA)Gj$9B~26rFglC>Qu0TP{Mw#20aW{_=HL<)o3y&$qfl{ -l)<9nAWin`pU=(Q83U@@LHV2J9*E(x_UA4gfPk -^w@<42tKG_Fa$2v-6qO+Ne)}%Xf>6RgTbWxm@oln3Al%i;jqDvqd=S&;zG5+&9#Sx-i4SZ6FS}}z<`L -Y)^tXNQjPgE93$Rt{y71)nd#?aW!cam^C7H=>z0h9TiB9gVh%J(Vsw$nM0x?Dl8H;e{PoA>jW}!>XP5E8IG$zVJw>aJlG -r?}MU0*@JJ2V)7Ok4YAfG0kWotTRwwf8d?z3LG# -&rW4r&`@VVg7@-@-{XU2y39wrXPjTg7uy6Z?rbS>_QSa45ViPbP@TfP%4dXgkt~u5FEr`)(Mn@zgNsL -Z&kF!Sl#7$R@vnb(l~#iJ`evx_jx${kAPwb`xRUd_E}Sn^b^&=z!{K9=tby+O>|$uP(^yV;L!0)omo) -T`Ra~0LtW?v9EQ+?!SCdKzqX3^iiuYwEA4-As3wvLJ!b3XQ>u9ilNXi#=$FUgZAqo=m~BqT*CiefuSe%OuSqPq-16AM7MAcPi -(06o(9>Mi+Pg#bp_kc)vI#_L@;01?HD~$!O9B@8v#L2Db^j%?);<8t5k480Dy%v$*r5oM~aK&3T)&b<9HF!Pd%@;<}XjlDNEzwZLbVJBhZWZhWb@iXDm;pKGJTCFTa2AySW0wrH^G&^~va{Z -IcEmV%5>=%zRe}YbGp&BGJ69{fz7%e#?G -2j@gdmpU5ZM~9nj2|r-sVyY@@&&C0Zm4NhyrI -;#|6WDR$fJu#d23pLPP|s5hQ_ -CTFs%(T!ol_DYNkZ(BSm0t558cW`&L>T6EEc)xO$|MA^80Ztfp^q`kV%!F)QB -Zo|iSD?$Fe3#Ka)+7rN4VrsB(aQJPono}JZDW(E4{>TiYWR>{9ez)j)%ys)Um-RO6_z2S6xJRCO4E)J@~NByTq-DiWrQ4bdV{?q6E!$CBUpFP*J>@T3I#v9ULoQsm{fZ}L^(+3?~r^zpC475%RR5;^iipF -#m4IlNMA3nfv9zN~yr*;Ro98?ry-9h~g!bNZURU}sbrep2Hx_PVy -J;iEyd6)hvK_D8Z9sjKcoakz=l9zc)_}TKbv`x9NuA%Qd{!ux)z~UMPn4l)-F$Z#8UaDcp>4iPuY9?a -zP15W$GRHhcFh@6$QGcP$u63(HygohS427SjpnWIG$qsl^2D!Ha}M;>!Ns@WJF-AKba?la|Hx&dqm=~ -)y*O@&0@aQ2H{34vAc>S7jnFsvKT)TLPyY|Lfih~0f@Dp{GShm{IOyeKDEcd!g{c14vt#(VE71yX5Ie -^k6`H#=E-%D&9e1|h$gA(pvaE&h}N7ZAI#eOZf(l;6_Gc4SVKXrz_4QCM}*tdjoeiYT(8&HBiFyx%(3 -VlcU$fZGJ=v8B)SYTeQ8K^+3qbN(dDVgeM6#e=wS&W`i9PY?TF|#MXjXp8wW(M8ZB$6ZZC^%2q(KR6t^I$+xvVE-Ks-9kI7Wa!s|LoXTs%2-S&s6jK#( -o37hErK4Qph2)1Nx<^gZE*L&9l_mYdLKm&oS0iBqWi!+hsN#YK@VY}HUPSZ4zaOvDXP1!FdWV{1G<;c -pOt~S>+&=B3^)GKEdhInzB`~y_X77W+1s=kbK%}4i{&{S^62ORayYaiF`i)L%v#L(1TEy!I}oGc!NTk -D1I0S_fYjB`6xb;Hqq?dG22ckgen8h^EgW`-ibiGM7KhzsN29VsKkgOGTUn7>xiPZv1LnraCS-0*kiY -WWm|$^RU;@`vhlvSH9nTEfEKc+FN*uRc#T+_sApkj$2D-+WGO_9c}T-o3R`fVVM*XhSL6XaJz8ppi{{Tw)%`=0zd@Mg~n -{4Y#0#C3vgPc)v#ycXqd%GKTSWaV8>yzb6qn=&Q_8&i467Cg0nPhR!@&)FI;HNe!iGYo^?fsWvBHqL6 -3X_oeOp1QnBtFs}{WRp)2tw+;*;*G)$JvYR~Z*2#g*Hs~n-!ss@t_-xGR&}g_+5&~%u4qHa54MGp*E^ -+IeB8y&b$1gYyisM=#VW_Oq1|;=zKwAa+0EZK{7exT*wr6AcM;EZsUER6aFNHI-Qn<{e^_0j4`q(ZnK -42Whb}CupyRrG5%A(o$&7to_r4Ut|cdxF9b$*QuGf-(F1BQE38ddKwp(@=Z(L;2Vo@dAfl&4K=*w -8?PI(@iyBmDPN`iQ6~bl77B9-XNeiuc^RucR;=DRDZ%w^n~59&dXf7ytkOaA|NaUv_0~WN&gWaCvZHa&u{JXD)Dg?0x-X+cvV`@BS-L<+`F0O0k@_+q!Y -yI*HTzn%KG6-R?fuE71~VvzADer0i(h?%#g%0e}DqO0tu_xA(5vZ7h+%02mAggTZ_}=sxU*e^h|yJ)U&f&*GZCdrF^}^CDr6UBl%&uyz=@!X^Cgxou -K-YyP0HISkD>TjL`9K}k_aG*aW-1a;9@?C2o`QDqEBy -kBc%-MhGQ@LZj(o%>7UWrpYXktsnrxM}c4$1&jmx8X^Ld3I2^~aP!5*G%2n^fHF=H{KcY##|1tf#VOW -<(LBy_QN+_J!bqU^G~%jMRpU@pm^TXtb`tOPjEKo)g;ST#Z?4DxInx!_Mmydb!3by$6gdAP(lI|G0$>p)E -#e+JMry-I5~cG`osRa195mF-o88j>*33Tm!h?Q0>4|K_~G#M+vD#~1(bNVe{}kHar{c`AN^f?cX;#?F -@Es3x9<*4PQ>v$arox#>%)VWp*TEx@%sChhezLt=TP(L_*A?;d~_0zzeR%r!P`o-kJwm9j0PMbayZ`R=@WuD9_uq-P-@ki%d~yI?cnN@y4v${FgLV$y92}j(h@fS7Dh~b -%KgG$n`>$V9bNk=J7~WAIUmU;v`@6$$zC9J+9>0Eh01uxZK=1aSzdqo`j{c4-@%8@Un^3&mf3yG10o6 -MOIPa*S?BNgJ9?&CbaUcHw;`H$N2yye`_~`T<{6yTG9=|))m47%qIS9r6yTcPi%&T|D&;TM9>KqdosC -jh2a1iO(bAX{|2MXa>zCSsr`t$N&|2056!RqEz;^b}(2C!%c1Fx+_yL$y)y+^ -WvjwdDv<)jaWuJEDJ2uuq0RkpCDwu(HvNya!)z#lL2C?| -$JlCxJ{MJ06w`;LeKIAy*-HUtBbEdp!Ifiq2)$S&S4VXo8O*4DQ%^Rft=z>-)W8;?cnTVR&J(tgPD>G -+eD2%yKfhg`zeLWq_O1%@}<8V*}ei)gxF&iyPDPowb|#}voUK4}eyurpjNl4&UxbLb`3-lg8}4gvgl7 -;dSbuM?Q;XgXwete)09h@e!%a0g8{TX7(5$_4ESeMW`J#?mDqt-VLjYp -mJ9q9wvY4@5Q1CaqRhI0%$qnbd3N1inlL)MyIWfVK9d|ai+M8d4Q}FeoaMcWu7Nax9V1F%kB+AEtEk{ -Q57e4dvjxbFG^(ix{eZ=cl>@HZ5sySGY{9?o!%tca_X_6_Dmjx$@8&R45H+s&O{@D1xIHz}BLX-fOz` -VYN3KvwB(PD>7q~5(JDeK7)s*Ny6K8FD)DA^E#DC}we)*(*&TyF?VbLKrwUi+VOrZqG^ydX29*RZd=w -b?6Ht(!3F-YjJxlg(#qm;!uo$kHMx590%6~N>&1SM1gb#vP%j5g9S=r5iD+EMp3F-L(zzaG2V(wDc-1V -)_CR>3|K@3HpnRh)|3JfW3c#_vn!0(n7`+66)f_DM_&<UF5ipBEY8M=nY3#_S>w!Vo=>h(z((K_vJb=}X_Uy~vscBq-AchZIy*RiJ_L^|MR1mhwqVw?NUvZ53jyvwT@*-|Bv6rMx#NG -v_^eZfFrb5_g-cZm3Xg!>lBX;;}TG>4e)8q9pkOoz7(YtJB#Q{zpzEdtin^B2%*fM4kMvU_$TcwmS|P -(s`SOX*(b8E|Z~E#}@P2PO`VEzxfThj`*KD8>sb8#ozl;dNjN(0|5xcAUS-@|eJxQ*oTe@{QSTT+8M@ -0Brpk>>T>hukELA5LvI1yeO?V|7brw&f$sMPWw;orw1SoSeplJsj~}Y&r-NB#{f(;LohSw9hQUl??sk -!5A_L(*$^*f*s610USm8DA$c(-%;~b3NfDQl5RU-P5JAIsG3HecEP6hH6JpgXI3~b8(;Xp?o+j57mc} -uiuj27*U^+D{L$8k~6>u66;22@!dIPxjz%4S+bU)y-1f51rOoE96STh-IkWE -S(A?LUkCc`oP>-2ZZS=S%VZ=?g3gJ2MQB3(?_No{YuQc{v+h{$+ujt5*P?M=>m}%ea@u;s -%W!XOYb*y$j3|cn2JYC5Iq33o_zG0(;^TcdtouxyVUs1n$6Zi90xuf{yXJR~?X%En)NfuwP|G(cPdO+ -O#X_YXaNcB3I%7i9Z*yAfP#HyHO$aG-9&Aa%vUj<>;ZVon~(|iFkFHi7Q2CGmv -%HpMnQzR{F2p9|WPqxAmhCP^Zd=pQzIqohDk_2RsNKqk44|uY>iY5mjE)HOa9hBL1Ob6A;G$P@fn+1l -zXWhf1Sj6JN7f%=$@ECd+!yKn^wkQON6zWg|A3ALFCMfqv6h&b``=ox*TN+?Q3e32PCRF4&N0GGJO2nuP~sFY)oKEQgJfpnsE{W-qeoVn(38K|;VUM*FV;_Ccz@l1R@# -WPi5WZ}WH*j}`Q4?(x@AM!)%Mxt~%IEj#j$>GC)o@%K4vgXnusuujgE*>PN4lGMXACWkXV;)5T6mUsQ*vq(FS|f9Ooa$4dPDE*>pl=5OL}_>^q5@-DuN-(#th>tudP2XL -+_QOrLyl1~N=)n9?#=c{u-T>%W3?APk{6wBg#OzGdhW3xkXaK<(DXpetY`n^+5_pkR?A`;62HHo=5z9K6hb`F -QzuGxA4&k>`zx_DN~-N2e2rPC-g15O-DdVgg_c%%nL-cuj2QNfUWjbIhz{reu{1)wQ!G&`g{3xrO_t$k9npUFWO;~BuF3J}k?wqTnpFj1x|ns&cAuPYz5V;(2^6vGoNb?ry*-fPlZn6rEcOlF?Eh_Wcy!9ed$Z_$k^Gb8XwhWcn -(?jgoRSpl}U;O}jY7`kP;G6s{#dy>}v$_q14je3q1W|s;s_7(!?U*DMDNQY;qK?(!kvzE}D6YDnUp|) -=aZ@f9vrtUqG=xKWPM5H-gkn78hf>8y$O=(JL3QL3HNewQ%o3;qBL?)waF%L92%Zy3nndD+$M5M24{Z -!*RvK@RUHsIkq;!yDUgp`nn~-W17XgWTD5R;vJYv9aTu8C#dq$;kd`RMSJYDwSd;`K9?6k7D0s${3Qq -+r*DeE|N?MT5pNaL!ZJCrx-Alh6Pa>&&r3E1rT!U1GnK>JmM ->^4VwQ$>)F9GEyrx^B9FU+V5vmR50f8MABosV*#z+18kCBg1r5w2S1Js+BkrT$2*F^=vYV{>U3Q4( -;K0O^x*6Zb@6mHxQtU49Zr{XWPGSs2!bUIl`b=h5eEGZUQ!V!gee@v#VCSuW01V%IAEzC&_nU3P&^IA -vrx3~Mv5*R_-ros8JI7u*CS;mPj@s!YY@67hb7FXMc= -u$TP%xH-93qvUQ~>dWB@0GI7gWVmX-Aa4}A1u3#CBWFsg9-J5N6Q{EI(-`BiI6ioN`XzC9AH{pT-U9= -wV!Mlf})Eqyq^BC;EgsO;9@qCnxBYs0=De6`crssu>V;`DyXk~A2xx&tvJ`>2Z{lOLfijq$R&$pQjm1 -yubU80c>mIngyxte#8V6*i5FNgeugIBB5XR+lT(o;|pY@1f4Mgt*1vii -T!w6bwbg+N+9dP;*4uDy9|i(VCOQZitf!i0?IVw$0$yhZm($z)j>vmm;W#nG-|X&7vUZj|zMV^>5sSu -!pJN)S+A%`JewOi4XRio_|LOABCQ8Cu9JF7zdur@N9Bz?g!0++(D`7s3nt1=P@A3$GnR5FN-pprWscb -|f1+1+Ws{ma02#aj_&FAYM^hv)>hb$b~PaFo+M4Ib6iKy6Uc$BVJ$TX*TZvHcOE6cOKpi -Dpaw09qD94lVP -jK)qeB#kLi2cp=A$f4_zz6j@<5)l6|U@;5@CB5`nsZTZ5zhOZK5#XtF1jy&(3y@2F}CUl)4|Yl~6-IG -l0N(pyN)TD%V4V&I5De#|h3m&1{_zCAUI`Lu*CJaUjb;y?{hms%lFdm9$Y8Kq|3={vK2u<|@x_Q@%Cf -BZPTL&(?`-GD0nV%_obExbFwC-4Efn_hqyaHDpPn%+ZMC-SZ3C%b{4=!Q&&|4+bsVrZ3~X)v@f~P(W? -f&Mx+Jk&xwZG!i*s1MPU8N|wAUe)+A{BMA^o;`-=Fc1Pt3V+aTDVL_I3Sw+397~Qt!bA4uW{i;dTPJc -@i4+}K~st`wxR719Nu*hJHAv~CuS9|?08f2O`T7)U1Ycv%$rh;w~@$5WB!iwsaut8M10Es% -=tPt?7$1lc43vnGVek1@NsN?j+-0HTN)8FukQRWs@JYXdCgrvN~53;{~x`)pS6Hy?9^%*pV~uA)O+4D -Vft;9r!D$U)qV0nZNEPA3M#1f5+@1&4CD{CIu%09#)HIidVR>Y#EQzd=-BXddV6Y5Be4M%s$cqVUbd! -eDV4UsSX?(vUIw1_ZZX$l0^q?Nl2k;n+v6Bxk9}>cPr4v6)?1FuHH! -=5W(4dS|(lM1G36gD!+)xOo6meE+6(7C7zt+jLP)F9IHV-M_C!~vQ{yPF4GL!8%g_D?yz*jP(8A3Sc{ -6uX%eoulG2&7aWRoW5B)-lxCTbyhHSEw!583OnSBo>8zVbK)xag%+a-9zkW3Of{xTAvF|t9kjN6a#IB -}b>b>fm6Tqs*bra)ykrQjp$f`bnnpka5JMN919C|}MIMbHMC^z=-vBeRzdo)VE@j9qAvj)A6?iBE%mR -@xz@D4UcOT)+Y^6z}1aU$Gh;4kkI@mqPP+Zx>iQex+TLU=4LJ@x;bm*#M#xVNihtqMDLX6=;jLcqphG -ZnX1C(Z`G`&F^U$jFagifuVJ*NyMv>At|E3ziHMQZj@MkrT`q@Yb}_YlMmGPa;!N7;*LbQQN70M -aZdEoW1UJWSkV0KxZ!gH?Occr1t8sbiB%O(%oW(6Fk~zQPV&_JAybet+4ih*N_DB4V=_prExvy8mOsl -7xOwNODZ|LE!;cW4oYft#guEf9{E@kBp=`db|U4Pu%JwuT3lBZX!mD@QLVea~v7nJU`|BKii1fH$jv} -lG$v>L%hu3x_ic<(&#kKB=Z<=qjZh7W%64*zO{c$+kD*Q8z1wCW}EV?Jg1=%a+gkLwDrc`6B|emu=}D -cl}eWj=Ci35DACh2gZ=Sq*nP8kVJVlB*(@HTdHHmyc1kvtG-^q8|9mzC3hGvVHy{iG)IcB#udY#`VT;xa8QnRF*>Of%r%HL&#gRII7?%+&<*QMfBaF>j_W4I6 -#72V>M9Hm^M)g>AwP*KL9|vTABNhr7D6)1uHKPdy9~Wnlacj=gsbVFud|VK@Wl<@<=r|%Fk|;Ev93{4G7#hE>B -o#x$1|tZoGF%hOs0X#ntYP%mSx$u-vOvx`WQQ5ktG;(*o7K{zeso2c{(^nur}wCMd?TeTi((8Yc~N-V -f(H?#Rl;oUW1Roly}*Yczq9b(8uiRQ0puyslgJ>lpE6pzCd)R}Dh<4yMYz8FekNtyD^xE_+3i&LS8Nr!nro1iv#JcB)c9)l>#; -=iXyUSqcZDdUV!59}X*D!m6fLcN!IYPxH#R>e+B8J=iw##OgHa9F?MO&rmk%m$>+(YCDhx9mqjz8Ao} -G&V-NKjY8EU(Nui~V#L)4)E`I7mLW+#5b@881Q>_3Ae$LX&m4{fXLrA9#_5;&f*Ra1pc-metq6`R3YB -JH#@fKgZ0o>^drOtu|LUu+9`|=1Kk1td;hI5X{Q&5AlJ4Qc>iBfIc)iqpCbUcGLSFqso3I>ySkZmGYDT@f$5=SCml=EN1hd(+Y93ZBj`KbByfgjR?l$z+?QUz -oWlC>9^0FNkT(VsKZsnfbt?E&#!L9k1AlPQ)OizUE;qUy@BjY1x$J(XUA#8r$DIzIFnz`eOQHeWA>NCKY^{NWwlDBdm@6yhr2Ecu>?&_V}B|lI70~M(Bk%ri -NG>p;#GZ0a%3|GQo)D^D!9XKv@FyzC)-I@3*b?Wjqlm%P--_u%N68~e|*CXeACLBZ&L7vhI@ddqmGQ@ -C22GjR5EP0!?W{_XM}#*slYZUw2Ud&-_L!(d66|Ll|5~n0?rC`8e&jSZ__cx66a+D6~O}jw*6|$W_{r -YHI3(#u%XEc=nA@6-M88`e`BYs{`iN_xBS6(@sd3jkb&^GLp*iR*G=a}?XKPvq1=#?=ItBrPw1r?cyVrS4#mx8`? -7(|o3MdgJKp_T_2&9q*)Zv6blY?t(vH!=)6Ch8!}J#yQ0d0Rkh@b|hsMM<_JAgodT`@wV8uk=XB17#` -3BalcYqC;hPSIY8N4>d849-%823}s$SR(0yiSr8$eb;wbU}$a1$Wc7xe>JJSxZ(C5T%&P4Spvj9`>MknDk`XfLiTz+`DV -4)RS%`f!pXLdB2#e=13omK8HqFE2}&%d=fk|U_E(`9-&2@5A<;Qi@<|Btp5`qvog*-eZj{oJENSLHmrNLi+*1w1T1wOFN?Zr8J6W$R -FE5!jlxj0RIS#!ZCFt+x3SXp+32-h-{gh(ny)k(b>UPSNt39)qJXLwEn;}z1nhD;fzS$56dfou-SN)dANLjPM1|60WZBtuPWh;n$ifi`aw^K7off`{nV27ex2-{Q9hJ -MMQRJ#hqRHDJV?Qmt;u%IIA2A+= -L+ov5IK%(~8V(|nEUwX;nnKRYV5sUoO+60TxL;JB+jH7C`2_uOqNa%0(hKrYY$BhVv2OUxoR+Cnn)950eIw6|vPJvK~hb}A^v|jH&KX^?yq26wKhJ*DT@09)LR -Tt&0RmVNAV#ryVSHHatkKg9h0Z8QqUTOREbndyD{Y?onG45Mg2?0#Zn8(lK$-8qyo4 -oPd24MAvUe@pIOOYAeaKE2s~<0t()xt`oQf&tJ&pZQM!6W>nPa=X@e2l^bsi{v$TPyhdNow&W`9`m89 -oY5YsJ7dM++nXo;W)~5z7Cd^A50Gjc|%F*eXqrz1jto>=x#;f=1jyZDkia_@S)h!~+YmKW9o^)wb#3A --qm6RaWxyQv4?TdS=lq-%%b=w&gJ9mhG+W4-zI$fzKpn2itD0|TN!ZAx$lES634?;wTs?cAt5Z#3~$_ -p$bSj<8vGN5qn$xWOxP?Xu|A~%;DquK@+BMxaU1LK%}ehdJ%Bcn?oJdnhIJsS?0;?14QE{c1dl3k3A> -?D~bn9~7Rp4{vZ2^(#8D~)*wrN4s(4A0@_7A!?80B;DqG~}Ku*dXh0h9v^>`y# -s;YH)?Qk+69JSaQH7sXPXw?OWP56Jc2_LvcoR?amjLQ%I6esAS?kD;~s#1{ksmwwlqRLoSvH@uU>lZ5 -l{OBU+v?`q7#mO$qlTmmXI@FXzF$qC?aU-m6s6U(81Up^;>lMjDO_hn5IoQhz)E9vD`}28`Z3F@&3rdx@9X~TXwz -09M7tOu3?xY*8(hIZIc{xCP#xB8|{7QEt#znPh`^F+jFgH9;ggPh;&RCOPLr@uWs%6oQVo0q>c*V+Qi --5)mC5359Bpbw3OLa}jwS*5m0?RACy%qdH<%#~Et{oJ@iOoCWM0RwDq>e(_l>C{c0EK=mPP0c54N|4xml9v!bK5rYHi3%12(1cd;s3M;4wcBRbFm149YfkX-U{PzLw -u4|@Bp-n4IRY)T{0Z+nZe7br6PmNf?B0v2p2Awf!aaL%o2X8W?nsMll8WoA3JMzMt)jwSlbrF+P`_E8 -eYHe|D3ey|K9ci7nSI#ElPM+D4;GxwqFNJH*UcBx@%2w)THwF*-BE@;5HYG0F~RiZm6Wgv7;EjTSg>7 -keaBl1y2iuAsH1X$zU?S$YlmcWnms};*{4gtDCLnTW!9(cWm$#W?^&5Z@Tf!spu7%+{K8Lahs^IO4;N -F9k!lY!=2EBapjs6Q2hwm|s^=7l)dLwwdvWuZJtTazW&l3YlO%fvfOS`##RacIFE`;`Hh1+Ryx|%P05 -jEWz5rOY-MkDcUCsZqdgC^!j31K{c+JGCT|@rbl#YWl$5T%G&taSAq4=c@y>9P@IX4)Xxe_so;Is#n~W%|aq=T)u=osyrh2aZ0%e!wfK^|yr@y&t*5pHuD{G+) -D6ko3MC>>nQkF*wB8}0$=;~gjo4$%LDK=HH>5gM%{Z!aN-{jcwFNjze_^O&79sdNN$&R -vzA?;%{$WE2(&#jmqfKaA+Ol92J=DX^)&u`Kl`|_gb*RIJOdOW;NGg6QjXP3_?g5hB~W7MCeFQV45jP -F3p0-m=%X?bcG@|PJs-ANo>n+^5*SHidHqPAJghdP3Eu0tfrIB@!@r+eoXgI^xEV8s*io#uVAI|`|>r -$={zLt(>70E9*Gu=(F}KhX$GS?s(lxwELBhxIG!vS2Z$ -8B*>yk0FoQ&X&9T#}np|=fU!IsNz^@TuQ078$aUn~2HHOvFXk>p5CYrr}xhJi|(}On#qU1U63{a@n9c -*h)TcN50zn-;(A<}c8L@CNvS9Hz+dDRwFlad?!jgr(rf`1p$-Dja3*-TaCEZHF3w))uUCN@x!3NfqAL -D}TGc}2Y}I(28y=AG1ogFE*3-+1W$VLzaI>6>JXheu-EAqB!QZFnNqxwD4Fvw8{-e^8%I$xlPEh|UKN -S2~w&bg*8x;MHek49(T<(7L~p4Y=>$&!*3_@lwVDGt(2X76+Da}&|H_5iU7b;NuuriV$NFOVsT+`HYtB9=Z8&gBW^;>V54?xFQY{7R-pHrm2&pAI|5 -FGt$KbbL(4msgL#wY!IXrgs{lnlL<^BBR&x(EKd8~BP>TiL*BU`O#>r$7lZ0wUP3O4doCY8&`S!U?Mh -i4VssibKur{M8(g8LrboRE^k7N8_SO0_mbJTNi94_Jk$2C{gRW90~{h*B+58YrWbdD$+3WnPp$W&JW< -rWTVfIDP}rk{Dth}Gv;!64L#peB6Xpn}8^l#edsR>#vv%#dm6Jax~TbU3=2t@hm65&eF@yR*}M0w3{U -XQ%(%>7l6!XK;0T=2JWAq!qzpuD;zi8&*(kxh<=3&CVHyDt5)rj!O*i(CA^~q*LAg^QNPIqc~{a=UN9 -Qa<#WkXm(Y2<{sgKnt~smH%f@`u4i$kjf|fSE@AaFQ1_?OA~|vleuQvtSV=$CSQfX7z~fNb)9zdy%!S -w|yXIg!?Dk!cdD+uOK+=(IgDY*DC6eKMWqJwc(RN!Uo7fI1=>VNc8;+zes~G&!2@5G)WdX<*r3yk?(& -;Iy{E8Y>3O%tuLY)`6d1W#oxEKz(bLhaN%+HNvoSZWid9w`qFEcsDK+NN@O6#E2#l?IYky?W<_b3nF| -5VMf6+UeP|AsNM*h*-Y_l7o>8A3^;a2ptd{j1@JtXlp7~f0$^b(*4=xni7@~A(dbr -#;SYl~blZOXuH*%Zv5=;_u-Adtb)13ccMK?AYWb4Ni$>r?R@%b))m7z2(stK5EI$;uep2O62pwA6+`h -m0X(K;xp;-+JAz?Em5Idjjuc<#OhfaS7F6=M#zW}Dtu;dDc3-eP9H8FG{2=~Y?Ii`~bM$Jwap&B?#Im -*tm_pFEx>7kQK~A9KmxRXLkJ8x91A`mYqVdIKGg6S;pX`)~M)Y^n0(qE0Er@5J!ClHKXut5*-K%Gk#Z -_E)L%Gz<eHvH>LXd{SV|}XMn;+ -eqaV{Qgw52$^~il3LD>g~Ng9bLyauHP;uFGtcO% -2Ti9GEbbTHF|>+r5MGs9IcuENNfnRmxZgmRh(-=Qx9FuTjxhyN+5_ij9AT8<5Q$dPqOqSmS1FOe$d7* -t*emst&*ij9*E*@9U+}w~hwiuNgTvMMP~hTr``rWIH@FuDs!>n^nTk4NS%DsIE47r7_WFBY`>OWnxAD -V2am2IjXDC%&J_Lfs?QjSWy*WL!Sb--Yh7;_8Ztr(HbO=FEPMHZbgBV`Pnhs6}o-_#pEiyrV%uRy^cz -iD-!cm7|Gc&4Hah8hTRM>g9)~1OW~Ywm`ee}bnq?WDSD=%Prm|%bI1CIKJO1kZZ{b_L0NcR#F$Pw%Vp -+~`2C!sibfYIgPfIN17Tgn6HLuU2^^FwtbzuN0}VNPLY&031N%eE8$5c*=Bfa3ixvPY@+o0!s=-PtJ2 -NNdaQO6e|2f96mwrUW;_{Ntp$LbM%mw?8Bvc6yYb2n#N#a|_ElHtWKSDrCWf;nfUCDnWp4IMOsL88=q -xn&6nod4I3R?!%^(n95Q)uTY={?xSw>X0b=#sL>M>VzsLsf296ulgz3KHU4p?`>Z># -nW<}H5CC>uz^K0&H{8DA_erMDOQ#Hx7Bh)~k^ON6rQ9|Wy8bWzcQ8Q`N7Y2e9Zg59o-S8}FW!KdR;Ci -o7_6|b7>P;y-Rk)W;1>h6L}?ixBwON@J+j&<+Jm$Goiz(WAC^9`c=j2`1dtXk=koZe`2ymbhq%#Usl4 -xH4syJlBLs;zV}otoeu8b?l`yY|bh3jzidOk0Ak#NkkQ -jhR4=s9u=gHcKg=BXhv_oJv$h1*5@7(`kX(y4vG-lyPV<^pnk#S(WV-GfYZ;gQSG(Gs=^4shAARBnVg -SEtTg9YY(VIfG{vq?R&(;-jgcT7peDBx;JFENY5-B9XD5QxQ(Xa+j(G(lQ9j(D6+NW`_ -rqmu#Qnawv>sA(sI#P1SwM -(Z1Gb~Ph)su-r*`AskJl|AJ`&B&HFjBt{B*S~;OC5;0;7o&ns{e8#kcjC90KH`?6hdKyuInNxkMgW2y -6E%`I~JPCehhkDO{^*<)n=5smP{3mszaMK&u2uV=jzN{rSw+TqIeZssEkoE>)M!u_&w=;PAeURi)r%D -m{V9|4k=6!EQ0~6ffUOEElVYy&vtjtan}l-gr6JBK>CD3AIbscaSo{Od)tm`@&QLIfyDyd8B=;{ly)= -&`nMcKFETUq#nK@Z?ag1sV}{?!{Ai5tJ99@FR-T0DJpo)uVqqD@VqltRPey^wt(NESxlBt5&|eXc&SbTg(x86&FZ^w| -J{}tCHVw_kdtw+8bIEk-Tn18j;z}$lWk+7q)wU8&_4ElG)JR;VlUMS=vUM6*zk^fO(uo(-Je3$+~Fq& -)s}|cyus$dHCuT4CV{j%;77sfAn|p;`rr(c=7H2(KiPtp*Z;K!IAji-=Cbq^EYn}j!sX+@jLPS_5RU! -1O$paKREs207{*HdmxSu{&q^w0n|$g7oWe_fBjmV9*bAsAH5KVM<<8S#t-lI-@ZL~7aE;;gAF}D5O0p -*=i$N2PvApPkTDKOnBDWP%AJm;hIur=(NpOGO$M58XaE$=tNPVHf25l?lu=Eaqj%Hu?s)#~4qEr^coi -E&r|*UxuVK5}V6THZT_;LfA#L!MVw{Xg0R`KN3=xTm+zBQTmV#vC-uQlP2#rdCz1UwC*tFI* -gYrSAtHB0XSX6QF&PmQwuTvy*&@XtiG)C4+}qVGD6S3=IR(jL2(MFvx+>#Q!S17;pl>1F#|u1hKJm9x -h%;ug7$RM#ll`GiJtbaB2Fpcm6Xs~2Inmsswl^T)>D%yJ!6U7nntsK!I#&*fr>6h*wl~dnHeMfH#iMI=2%pB2vMUpf8*a<;qA{MI;w6ZiI+Km!E>mF12k+<96W_G6T;#1>; -Jz`Nl0}NQ0F0wb`X)!JMgdD1jYem9eyq~3Te=04I`HhrloX9`C{r0rWE3RPZWZ?PS#fDQ<#BiL_EtHK -*Lnko=xf`f5_dw*=ZR)!XwrZ=Gw3dXECfc2*q%^xFJp}?Pc9QOuOfg_IK7`KF^WBA5I(5{#OsJ%LG -cmb8=C%ie4xIowi;=z;s*7z;7M2y``bI8;nt&_J6hkhyzt-LAHJuNH}1yfM!D3Z`nBqS{^|&KpMNL%+ -uP!c&$ho4JD-2?rnP~U^XL7Y?GUSl;)~BefAR(V-TC6n&z^k#+2>yvQtg4AU>(VCIK=B6i35&oO|mXO -$43p5ZD8=jk>^_{qd6`w>{!oSROWkUJ9c+yGawuE};MgXWT@@HWs&?x#0N=EvXp+J`Pl%{U3IN?f%Y_Ua! -{?0p@!EOo{DIh}%IL@Am29bl1r-Xmb+6NlVgO>yGU!_OwykwMenPOtH=es#|Kwz-m3Kw3F^FZ0SjGle -{rp^|r_0jmBKkv4gk)p59e5o=HNSx_Ey&QVf{T@Q1gKO45!Nxq_h#Wh%PSj_$Hw!7pQ}b-d9> -N$(mbOr$szF<>n23?vR2mtATXM@me8sz$(wdCRur^v!L46YOR@P!$xJEJ{s1lTSv%y)TfhXEhutqZ+^ -Q?qx#Sjt^#R=7m06a_wq+ml}_ZnI2{*AKtb!F%NPtMbhhj2xt+Cb9h79t&f(8uPpXI`_oKSphU{`5S< -zxZ&*7|d&1~)hzrLE1<9glW?hSj_QS|>C;3Y)%@|tu$zL47%+R0r}L@V6eq_Q-zv>MR`dF7F2i7l~uq -;VP!bq8RLzDH^Y;ZqiWz3B55nPR@$kyyHB+Lshnoq#|v0IlQbyMN-;$79d{XX1Da53jp`LYs(xbXWIjb;ye -@ilivd22y#zKO_;=6V+@%iqBGv;PqY*!a;Ev((G`sB>5YSMMA?So5W<+}qxO-t(vT`-DrrR@`Z#V)i*uG5=(jFoZF+Z3qR*J*bvE%QzKvg{vbm^EwjO1&Zi!juH$ -gnoMkChT=-wNGwui=!cH*(N!FcIo4M+MRf+&R+rM1H2D#Y?&))P`)A{LV%gaX&{{Ee=R!pFrQo|xrO1DB0iCKn0|3u5MX5FaosUZ7M{5%j<;zd;f*vNFuH?V1TOM?kH$Q -je*JrRu0Bu@J~^2?LH|Kg_Ub_LVP80Lt4kPRkwVi~VuRwf^$l(nAaL{F;xT47(>4tTf_CE4@S1m?HiauyFm0RRT_DR<}eYY(Et&x=1Oc&? -GTw>xVZ9DDcU1!M{D51)yDFO6G3nc|WHh@fXtDu^#^$Y*t2)(nPp6qTstA^7Pb**ypULz=T5de_8L^%mdOTutHZBXSG$fx0nn#09aG{|D|2lW -^Q>X>Ppb;JkX3Q?Hm3-Ax1NYuSdVPFS0fWKc?d#}7n`nL*^_UHN}U&emXYryn7X;uC -&@t1j?O%j>LfmS8;_$Yf3jjo!SSgQ;dmS>i_-`-P^PS`}KBOY)}WMx=n6M^ATn!DVk=EZ0^-L^u$#${ -LG7Htgobq{uR+(FGA3WdZbeYR7srowkjCS)6yHeZKzF|DM0F+5{qwN*=a6^rq^c4$aQ$L0&xUy?sJyy -aqc0Uvv8FLPq_orE!s9Dxj?kFGP%dqhHJV#(T5?u{6GLdcM_aaoj`wEi|J4bF -piJNG=2|;@iCaie+#47Xa{fDdfhW=JXWXD?z2{?(OgA-+Tfts-|(Q>Z(i&A)M>9CuhKymsB{moWH(a{ -)z-EZtkS3cGPMfQ`q>N>YO-Nled)BbPDoVjK{3ev7F!4ptYAJA;WQ?z-q#ZoT|qPTm@;`Tar#aU -x41c>f4pjc>u_W&(SpdqWlJ+P_z85F_D9aN|eid-&y$j|_KT*T82dOgtTJQ@dwC4566#9mT361+JodT -jBCp+Ew7tO&MNrSMlNR#c%e_$twh#%co`9qnNCifZuIx&n4KIL^m$9*;4hsXvCUB-dBTBx|5lg<*?Yp -`qlTzInbkf$BNN%R-~uzH*xovoYtJ6SM-pAyMl-+l1{aCbiz0`ouHB;0GM~cvSOjj(H~n=cdv9NcQ(# -yj-DbP#=yK=ssP$LaR=BSE+`vZl&U9&1%KZJyxu)cDGfltKEI&>Z*5Mz4lh~Z@EmJy$L_C4hEBi5^Z5 -#)mR!2jpLsead37n`}03+MXN!tU(|Zd>N@xXJ@7FuK5}ON64s@qsRAPCqpZ-Cjs3BVYgO;Oj2~2)ta# -brd0oaXz+1LFo^#e_cCaT8hYK0I=$g%{b4pt;BQ)HYwhVmxiZ=OqR1T_TDIQdwet;r2IJ#I$AD{7Ct` -Ky-*2T!!LU{!O^tfa;(;+)}jGTbi4fW;*AY@};z<00VucRlt07lBebM4u7D7LGxmDsNIxxi!&8V}Q@^ -0$x{?iMo0Jwto(YqJ#5m0)jU@*ZGJV1Plh5Zz#42J8$F8BcGdaZ3sKMdO!jf)U`9!G+3a7Lh4cg>rpj -;p5atyRZHB@H7-}4o@)95IU{v7o6%2Z*jeim_UstEAl0j+1}Un8T6k$R@Ab}vn$4)!IinwwbL~hgqi1 -(Cfly_k5zppqB=u#HAHx8l%7;yjU%zTb>Ga<>yEn0dBbk-Kw{Ypd0`kHg*0y}v7Qcuxq_n?8tox8+S3 -u>f`{;ntb#YyGt!tE;}6zb3kataGLpab&!zQeQKjYdKQ(P+T2CHp&H+ -UAW6xezVcQcGFBp^IFC-sj^nZWyzSw@nP>Z1@{Zv&&>;nK`~w`>NCuv&mqgV#m_{p<=5klf!_Ux*{RV -vTVvGWlTEu8M=RAZ0TwIUR>r8M$auewCNZodfHcvSId}b#8QSLO~%n!?mF>%*xgGba{FVbk&L5~qtcA -gu<(r@JlYA8ABB}&?ji$5Pt~eSWa(I=NV68x^PY(YZ~+2BVVj3{g*$8T$aGnQIUEi<@Q~8wX`5=zloF86<9H0)GMajlmoDH}WBVov}Q?7>;KQ`fAp-55yrn=lVddd@WugVVO7$=<}Aorq9s4cH^{M0%_(p1Fyur_@JY%sxb;7JNpO7PRW`$q@MjwhSl^)8x%@}cGj3%!@w7iJ%tc -d9a45B}r(E7i{m~GT0-lN!E>gPq0$5rGPXfw%e?_L0^L0OLWY_ZQQm=2Z0p~9RIMS> -vleU&dzh@dl4d&8{Mu1pmpKEI72beXC2g!)WtwIk^x`R6v)XW(xIVfD0a1GUrVj#Wls13`-xC#e^lnD -(v5gD|{VQ5W-FrpOIX0U>3Hq}P@DvT*Hx(8$jl!%0={N*WI2>Z-ar=4YGV#nx|izkEQG)Eh2M{PUUS3 -APb1^m}Gf*#|?N$0(`y1@`BzRHRKVz9bZ-YqZBv^leRym2>1R_0X!K|S}o)mvu=Qt@N0IIY(9xS^{_> -~F*Dq6&xVSOUtugq$BG^EbIt#SL7gglP|HsU*z1^X6ojzi$)2KX-Dp;u -Zn>sEFdCaq>Ji*McexwdMxl}goyIsuSyvnM$o`NFh?>uk)#e4Ir`LiW@6#NBg%agpXZ(E;rX5kEkwEF -#bris^o5Ye?^j<}-8ob&6+u-o%6hs3+&NP~@7FAAg6R2@GS_FG2+T?1Y2CI(1}BM#b0S% -)wjj1*ktOU#w3A*nMX3k23_??}glptCBC+8rx*MOB6`GN`Wzv(SFE?e@9T$dhrl#BH$+!J(IUl%QQ6C79-{(+x52(L!*AOEP -ARv+1*_nix2O(E{_nnHI2sXvT_Rma==?&9~`pYOLpa~?+RFX7*(*SazCF1u||6uZN`O5M%3Dq_EP!r* -NnDk*klwp$Y@4ByH<+qqIze`@S3cW_(K&N$UjH*=)LG^Vdj?-EaK3x4lQl1O}SP7Vz!Ok&nQ;kKPbqqmp)SHGuB;Dn@hG)bk<2l -w1a%TeS<8lkJPCr#WGX!tQ$Q8VP)BJ*^vRqCAeW9tAafbFWpqm>%m{TAM1?eeKUJIy9xv+b39Kr4he& -s~V-;^m%7V_@l>vxkbf8|Dl+!qHgBi2*2O!)Lv?zQV_x_fa0qQMKM>9?eRNkRxY!;1UaXHQMBwN72VK -JMr%?w?`6bp)>xy_3fu4Ld$+0PlVCJ=AC#kt=b+Y^97zA^n@LeukQg?|` -M8tihVc0Xy@rd;skOS2yAJvKc9C1t%gil*#s!l>h5(aG5-MvhfN>Lus<&fH1Gs@4m32N2 -CNOSNAS@cSpFs;4V#?;(X$Amh1qpbQc1;OPAO0H@7HlOHh+JU!O7&1BPt%Cxpt1%YraGQq|92(f(~Cf -CMjJusQ`#L)iH=M+Vn)`DdaThmQ$mO4_zM(g8v;yv_4_bSsUAFpNHbCjqUI^Y=OTaZ26Y|7!9<~ZLTI -^g@Pf$UxEXF2?{>Pe=G>zCEDcFXE}+$|p0}ei%cb -*V1C#wGPGc&j3}!I88$!ed;$A>9pEOkU6luLsEmh*+3cktwlA3V2Wo3HBcikl7VZoxx5~Hp&4REyqn- -|rdK<2={ICZw_xhe43$Gs}9xokv-Q)L|Kyg2Ka_Z-tS?_q@D;|ZnI3tGMK>)prQPyVCjD2tijP#LV%< -B4yf?9F-4|09%we~i*PX5WP$7ZIALV}){owuPT;#8lb{6_+|e#4q}X22W2sEl}x((9kq#mc)-znDt;K -NASuEifkNllQmeDxCb(`%MWTqQeW6o6=wPv8$GWUsjopJ8rxtHjmO%@iA9)(#fLF$h(YNS%_D&(AG99 -3`edtQp8a$@>|vzp#0Wl5Tbae}G#?hVUda$PNpX3giM=Ps5jaOg=5<2^l)v3NeS4`|uO{PUb -2GF$Ax3zQr#g7N3qk@!Z>p;EGF-S3I|A*#pq)^`vdJ!!`%>2&p#2f9MT<`J{n}?UN2qWJn3Y{l_?->6 -+13J)v!&h{9|NuL(TOS-{*DZ=)PDKDKV#0v(i{bQ1U_esWSggFN6_Xgz1eFAtVqaAA5TI#il-+ZZe|5)n(&Q!o -d?$(z2Y%x_cez%qW&{*ja>M{ztInjv|p}-S6qoSdip#qPD@n?uRnhz>3Rq~RcBy`S(1hzoc;#g&=A;AH;*qDSk7>Z#mgTAQt4ZC52TC=AQ7{8ia{U-Ep+9O9t -LSh4%v83lN%3ZKH$pI*_mhRFBMJ!AO9KWnM`+#&pMVVEPjF<-GHDM6gW3VK{yqPc8h8bhC?&PRn<$%2 -AK!h -ilf=rGAU5urW*A&8>f8f65*jLnJs3dCf%D?H#&m;+RRfp=vd^VRmE>j?^o|8yMv74;|n@Ylv7cp;eUc2iAO}V+aWkb$gFich5VO7P4wD`{ -y3&!OuDhs?VfRrn_g>-#|ymD;z^FkR*i3H)zk6+rv_{t=+lJL0;RR7H~F&e>zeRUBC&r+O^SAFf@Ml% -}h5Q!`}P!0bBPr-m$IP40MR6E(vnWe?@1@hNf+C2lm=DzGTx>a?xyAB9l228?;r#m|TW;YU%Mw{(%?h -?h;eD2{h{ac@a&KowGNhQQB_Y94IUgi*jmf?;Zo+#?An@*zUA!3&-)uHjBQFoA|q1{{bkfE6xz|`9q^GojbMDz#0htW>CD5&)4 -Io!pp|}X&A37-NPU29A`-NwFA5r-%-l{T*d^E<@Y@Z{<=z4N;>0LxU~N`^!@&az6#sxbbKFWy8k%$|N -D^u5Bb;Hx&QtBXZ#vnF_$9%fvjJPWQi7E$O4I+)tPOY1MtiBC1uhM`%2xi7<_3@g6DW8XSwS -vb-EE*wD<#0R65?GB6BPU=Osd*`H38U5PXcvICV2hu9?Rf7$GbZ7k7XE0Iwo+7H`M02Ad#BQmxmZKw+ -$^Nz9`uZA!4M@JaL0WHcK8ppP?SyGm$Y2~Prg$`ojWDVEV8?8r68FDgix*otBB;%-z921Y8jmDsbeQR -};%?GAte$?u=>g9@TRK%k+bMjv_G}8#z3&?fxMC5p5h#RC<$gr$tC$Zv6C7MxHW{uV)iYb)wR%i8+Ig -zELM^3gVQGcIFrMjOFevL?)EJ!~^t_;fRN*Nex=%eWZjd#gRZ(h0ka4UZI3^}9|r}x#krg3x=S9vy95 -AP*M`r^T1f==>ZhvD6704l&pWm<;;gw(1jiVu)E-qB0%BYHgR4s6NVZ7vqe=v(~FlZ~r&T2}l2C4?BZ=^7s6Gyrk4#| -aRI4szZHNrbXNq=hE-S`uR*{akNOS@HB&kgiMVoe1^dFkm$OR>_^+d%ivSO6>NsLAuli%a%S55 -xvyo6Oj4W}eQ-%9TKjMG*Hcdzk)oCiR}|ygkl1LIkZpdt~t9Yqf|Z`l_(WWZf&>8l@^cR=`pJZQsBoD -krdZ7u>+U7D@t=s{1K(Yw6UAIuV90rqNI0@k8CEhmXayxc+I}?&x?$SfqVkZ&bzv2u3I6avHy203WTv -P_+5^CMJqC$+$r<)|}te#@4|p(N`6BrCxP$$RhJ5$+F!N%2iADLlvv``HG68>Ce!G$7PS0#nv@d?FNiG~p#>?NAT|;5o=5DC1* -3a-9ixoO5;Q$Pk0VEfR`G22DpA>}1wTD?U_3LZ0ImJ1>eo&PbU;iEw -W5oW=jild4?CgBNSfH{qnEsQEM$`WsoBrZMn*O}j^cMz -|oK~l&;wrmM*=s(cFqz}Uh;8;v8JHQ0if7psBarU0ne&((1uIUZf^tc(CqtEBZWzO!c$-VfQ-<$0oro -;w(&6xS47{R}wL;lThXX-DP7ElXVp%+yK2ykjnm!AjB4(b2PXRH{IxWMT3Vn4DAw5Jeom}W8nt+dTF@J6~9LR5j_FQFq>i&>O*(Z-M1G9BKfu -dab5-6Tgo#~bs)z#7Fm(;d}ZJdTQlgQ#L$;2dQcSVY9glw=c{RH9pI?`~ -NKrLX(%JwLf7lK7pTBt7>-BK5{JT0#749UyU{tPv(zv;=+OAh_zhbS#rFP^E&T)eQh@3v{p{YPY6kBT -Mc)qF*$HOXOD;c8^XRB7v4f5qZ%)vx>o29rjzxIrsR>LnkDDM@^S8Mb00BM(7IoJhen(b661nRO$;k()p~(h -?VZN7D`bn^Mm6j}WR_hDT;?D?&z&q*}0|97p=G6-ZG8M&^P@g5X?a6*noX;L=n8b*ylhKox6F?%K#OM -$@dQ6aXr?x_3zRARvev8A*lG6+5`@5Dd$-}{WPPZ`NPw+|%4hfXb*|hZYf;l3Ze$lVm;rVV#0dvM>P>S{EaaC!7(IBj -GP)6g<-d@e+CykqsBY~k7fsGLNq)D!I8w3ZVt9mwCSr=ah$(Y~TH<`_oV&YgeX;uBOE-Pd*!z=;&CvH -@K3S#YNl$^Vbc>2$a1nDs53?9VU2m(lJm#A;V>r{NJw3*_YOxC2ZC>8N0>68?3$tcgT0y$F@iwkRm;Z -rb%(HP51g(-#rlX1>-<2d`)NY0`uqic*5e`MS>)l<6jFjzkJGGbJjFcgNItS)?2hG|_;YC_<+-I|WgR --9VW)8-3~(n|wgdln~0A@fviy~SI*yre>Ut+e{v+YR?p{$$W5TV)BS!dS;3jyjJuD9;jW8hNjG(Xue7 -$rSK&il{N@v~WmN>w)*$5856T5Qe&cxtPsmVLHvrJ2v?U^YekELJhHi0L8L`gQ=~$)?FtrVDO1NVYeV --4PY2(IGo_T$B{u=SR|}~Rmq6hSRpqX!aidhPFheP+cPN8VA5-WbU%cWpeC>1<_GC%+bVEttWeo&vO^>mB8 -v4ijGM-?m5y8u@a-1zJQ0B68K&enD3imjOi8K*l(j!9wrL93f2>@0L@s0ge>)2_5T^Ku6pcXtTW1c|X -nsojaxp*W(zgCw=QQ@F)I7x|94y@!j16i*#l=2=Mpy=2&e61C6Anr7*-gNC=lxCHj2FDoua`7kh+N7)fij5sEw*&mt(iTf!y -r0=sUnQlcha=ZJ9f$5BCdW*;XKWdJAc{+a76rk)qm1Uddm2Jgr~{^;FXyK~2@V{(6&X7RflR#RyXu!O -?Jpq8eFG)GB<@+un(Ho_GK$CHuyp`f<0vQ+owA` -;h;io@%qC;N*pHV8p-Ul^rYAStk?hiD<9Gvseu;AN5G^1u3-(8x}QO*0Zh;#vO>)N4RJ7@X^kb8sIw-bDfaS=#c|eV%}|P6~+0e&5rW_YX9)HKaWp!QSijQC-|% -u5%5m*Tc_QXeflMjVLOw)(@h8!zY4S1ufis;->T7U*KR%P@eP|6QR4!-J5qg@SgWU-va=XcrgpPr!JM -NjBE+7Z`AwY(^&XAeXEBd37=ttp(QVLn7fQXnI_OT5>zIy`zT=x>h(X>`3Bl9ML~7Kb;$VbnB*svCxRC+leWxju=P^76fd -Mc!Ry?mUTN(e$64 -_&|Gw?o);`x5`AdGe180f@^xVd?pmM_A&y=f6Q5)6J3Wx2&G_ds%sZOz1yrD;tf78hz|t9?IH^h02V3 -3~?H?DDcrvL=1&FSr*R@FLWpBy^4%Iy#$yzw7X<5p(S`|4>iVzr74^L?U9u@c0dC}8sMbqk=qBv80sZ -~S7>w{CH;j+d^Q|c4^%;y7@I9`LqG4m*zvuj`%RMoXT@L&m5R|-HwGIgn$vM&QRium37W&1aIWZD(K^ -nZhYc7AL1IQn~_$JrYU@B}^>$WR4w$9UrQYULfp+|#c~RKgnC6RqIY{^|bfPRn7T^H^%}Utz&2bGwv2 -TfSMxbwa$(j|Kw;bjLZ5dz^@`0mDXlOf3bxWvc3woo>IwnW^Ak8p~b$;2p>ebR9Tz23hF9*pNgiJ{s{ -ao|OwnFY|fqo7~m+PQEU75B~Pz;O*(*@ln-TsQ8h4tFMaGhd6Jg>G4KEP;6)Y1hwnEmHEc>u0wI^?LJ -hyw*qAF4Wq2S?vZ+ts@~St7H8W&#Te`MRgjb>K;qfIz%#+9Y%uM|I|zCak|@9z)@b2TX0wFT=`Do>4ZsiBY1`DV@}SIOQZ&G6s?gH1%0>NcoWcdZOuVv@E!bckdRp<95rjj -HHWhU_(^axwxN2OV(Y{ORvQP6gk9Py>zjx%{kOSk1{d}str}9j3M!t#+k+-YTS32vXu=7DocN?p;|@a -Jf9V4)zbPtrNNN8m9bwG9!6j;>$3z&F>g6h2?Ymq28@qJs~%9QuA)*r6 -h;5W+^d!?3tiE1zzh!f=0O&_90Z0A|}xSMModI4KsMQ+>)yWxzcMk#e~`NWG($8f!yU_$stas0hU%it -<~n}8+*&j2sJcYgMmsn?Bz`D)~7|QEj~4D(-@JRCMHu6v5bGqR&dT#IE>B1wi=i?zJDOz#yLsGls|ld -cIvk?Wm^O3WimtBa!S}l8feIZRriQ8 -6vHp*ej_fE(4myuEwrtq^shQ@mQ&|PF;9NM?mI=~xc%fqY$ua8#g0{Yr$_tg_&A*|5 -Aj{Ef~s(1L4{NE*EllzL3g{gb}ZQ39Df(@_xf#2_(vgJ;X$z61K!kD@kIAWIPrxjZ!_Z-HA~s@6Yu?H -k_)h9eAO48sA#HJ7D7l>>tePt|Y;0?vJIR0x$>wY+^dXb8n -%=FD$$~c(woi>(jw^2Y>(J_}$CFi*NVeoxn0yI4&Nw2LHZu?E3A0-m;X{J#VVqR3|-0PSCf9!GtWG!R~}MOiOHHtt@=?b%ig7C; -UX@B>Vazre_#2-8bs}yBQWF>N_1Qk6vVmex|Urmlyqvc3w;90o$RCw@7j;${Zq=;i>09AvMY|Xy -)rH>euZQRfW_l<2$s0NIegYtk<=#S|7upBU$em_l)kOSm6L4QO2-YRn8?-)hti4C1dadt7(o#tm>)m6 -Mk%N<3+P@Tdi$CI&Xu412ltnU!gejwR_~LW;!*YCQh_?Qi94mXP!*57&-O+F;)qqEEZxYx;j<$fC6y< -_M3o}j!$$|%7f$v(X4`rHW>OLty8i#d}K(r%IrM}fI9vz?7%5o?Tv`A={;41fGcigQPZ(g=Kj!-t5jR -iaxFJ|NZc1s6VfJYcs!T2N1T7nl@TIQJJfOE%i2dscnHQ}uDVX7Qw95wB62qcW2`rq2 -ffN&iPjktxa`RaIZEkZF%o!72@huFJIW9rXYaiG)=01JbOQGd^1gh`UZCpuApceil>Vwx0(eFtGe|t%uqPqxy7FROZ -@!G}Nvo1yOS`)AjgJ&L^2swn$6X_wde7#ZL|6W%9I(>Zabbb12JZb8A8NPf)0)8>XpJKa$1>pCE(LJC -cPQd#IK9H2HUA1^dI&1liHYOsqX0>>IvKwKzsq$-hxa<|V;d+j@@K -h<|BUqiFAnv$LNkpzQew!W9XHmEt#-()?mEPYy>r%2hzQ~_115_ -#`ELO*dx*RXf%}VG70!PVZBByksBU2&d=-Pk+sh%7Iwatj;wkHOT?NUZe3MTCl~FNW|(Jvn8nEtjTe5 -J5J?zFf5^rnXI@~M3XGt|7y))uchl92u`}m859I@IFv#Z$;MRbF=melHY*0I)J3W9wG8 -@6@gNUJ^%2H3^p)|dvyS2{OmbQorQOp+tKtlYG9UU>r9&~{+-N#}Zw!Szbyrh{HCxNK=K4<5Mg^C)fSY9-3-b5pK+ccBuW;GJ7JC*uj&ef%MJ*R6e+isyy>V&`8;!&N`%`RIkISV+(xPnVP$cD%Z8_0fU$vE{PbGy~kxPj&uk4bRl_>e_?;JP= -SS(2?PSf;Pwz0@vU@#Z}gTY{qhV5gwcyIh}s2Mx$sE*l7cj898TrY~hl;Y6s^2t)|`Hh=g5a0roZC`0G2!1>pLYC}nxyyb3pFUoU -TruR%3-uRyLx(*gavqL?-q(7zpm+SUUW4d$h4$^2eWRJCS)FOA~pH&X6SWh0_XC9TF=bCXC)4LHVa_! -(kRzV&WksuHBKAcGcwT0&L=D}Z2Q8Iw?y7F)fJZ6FtHs)EGo2I$C@v-lsEkRFWLJ_x?}ngT>WKs$J&s --z#5(b<&kyx99k=iuex9d}`&=&_^~E3StT=l4NXl?;~YyuY!L&ob4J;X7z|roTIVt-=2sy8^kO)&rB0 -vL7Rx+iBBxWOX|mD#R-U&2V5r;m{%w1@FbhkKJM|D~!D`4x)-oVEG;SFxje8XP`8c0- -aR8nriiX5#a9PSo~#XZF0xKah;ev&+EF~XsSmjr7!pGAFk$Xjo$lHWE++?#i8^^y49`>E%ene59uoyW -&#@w)SLot`;0gKoX55(3FuD1Mr-tG0olUu#9!Hy0+wy!{ATTuqa_6d6)_VM7n-{AIOKCB>j}rssMUK| -gP4Mx;Ni4^&RwsHqHw)Dyb3)_FdePZL+2?Ane6*;{C@yFKb5ML8)lcZ4Q$spcGKcGqm_a;jG=*Ttq(E -(B~kQNJ3tdD|cdkR;8!u0)yt9P%l#tXrm<>7jW#yT~V(*00y!laTX5ouf- -Anx25)7P7HXVo?1>JCe%mYJ8n_q;BP^-ymiV}HUarM}5`KkvNw((KU|jU1ETR3MX!i-JMDtL>$PmSG+~>EI@EAIn;L_hOa(!2adKLf{@Z`waRe?7G|@j$|dLXBy` -sK#OD$8G<1C=yAFH&cU#HbqH$N@=mIT9r;jJ7XkvuUw)|9)@MEm~75(3<4u_aEGc8hM&u-3O9f%tpi -A(+*FU17Vhn$YdXE&N{ZFBDtraFrL&IzSuZDO}=`)P5DSLo5ksAUE8~5+M4Su<2XY3droW0;GD>w)h0 -+7Cv7~(NSHgp7ONpzS6Q0x9`}BJ_)EQszemuc3wUtc`-&g*(kt~-1j -$%~M*CZlrXl&#Ox|aCe>l0sd368BImX)t$@l)|r=LCe;*0wilgnmr(!83?n=~Ps=t%7xoU*nW`ZX#shBQl`jpRUdOAqP)Z#)_0TkpP- -IOMrNC?34z%taNqG79ysQ9)rrTZ0f|M3YK@qmHf~MshfJCE%ZPutF3erwVhJNNK=G}2Lun+9xOd#toEA3lvPh^|ZP -`u>^+;->S^jEeWBbB8U{$y~rxQg5XVNGz6G;&XF3HX$5r8i}{%vd<=am$5@Je%-DImRr -}ExvqYxk-DXqb?>YCR$M29@_75Wy?ea5eINdKIcPa1p#fA1@fu&Ww?^a@G?)Pbu@{7KO=rG{w=deew&3=C -_-X0y#aLdv2YS+*x{jVx>dZ5cifR0~yYetZYkYCQhLvSFUf5imWt@6>uIp`{A|JyP%xguQ6tZ7Qq>M|__bBp`2k*BF~I{cdmhFs -D<(U)Z^C_FFsK&~GRW~>{+_{zQ$AwhD~P_DCF*^Mwlt2qkQOo0!Y!XAokZP~m`nC}_wrEr;p55dqFTI -@wDS<97fAygWUvua2rs*VK&8CX->7j%5<0%ZrT6UzseFq8J0!3-~%tzDfrZ -$n4{^Hy;xyn^kB*qd|vEMVSj72}%L%1=16_V>0gj?IX-Dov`2{bEle(I~E{#w6lv@w=y@CkeTihO%+D -{J7WO2Ph(uzS8CLIku?&O!+m;MJDyQ2FZ?#9Z)BS)VzGy7hUizNDE$#n%nmoH#X_mcyX%idtH{z^yG1 -9pVevz+AH|0%%AX-(92LXf5B-|hWbvdt%szAi4gLIct>FykPVJXpN{w3pK_q_uSz-}08o&HfMx^+07( -yaO9Mm%3sm0~abG;P_z)UiZ^)ilQwc-S2?ikokvWcUkS_xe3gj?K5+Q?+LPu9yWIk%9bwjgSW -jt!grEEzx=h5n1mo=z-ea<+m*kBb)#6Rt@tS^Ucf$9_0@T1B5jMqlQwzuT`&GcZyg=Ta)8Dki_9P{v9 -U8XiRr`^1E?03$Jk(3Tqrocjp$%0g}(-|wA+2@+sP26w=pxeto4ucGyW1JGAmkUH3uZsLxqK%-BEVoq -6>9p}ND7BPYBxMB$yrPH=1{YxZtcAqLPeJO+xNm%@uBK^qL5qQW>gyJjXtbkOZs|3PH9KZ4y9K<>eaB -nUZsE$EZl`jEyQZ?5e}v-bDV;7z%`d)vet7Ww;N?E0L25mHb-4HZc}Q2Nb;)_{ZjpSob@ct+;%;$L3t -9>$k!SB{hc$FqS#+H&hXW=0Q2j&?jGuU>0$Rdu5UN%k -Y;@+N=k^;u7OsVpQ2W$Z|n?!wzc0YBLm-N*6HllAl%!9pOr}oz^k*d$PallqIQ=(gu>)$wi_FbX1h)) -KI-KxI<8xX;v7rpnG^l)7WEow$uyyK?Ya-Myi-(yY?WbBHv)G<>eU<0F7(>q7K_@{dJpcHCUYP`5qpG)-@m&&U<&j18J<X2Krx|Z?|`2y17~jwZP=|&_bZ0emI$N4sYWp1uF&*KJBaXkrqn2O8m5;jD#X%1)^0N?-nm7vxD)i!kP$mU5vNaTv;K<*9(9*gpo)pnxX?hpzkb$@>9nkjYe*OhOTS6aLL~#Kn5hxRgM65mkDFq7; -**_J1ZZNewZ -CIw$t;1XW^%kDQCC0qEYcYtV<=V#ISPXF4>zH;?60QF0d;Af^e^<6oTof>Z`AU)OKEiRJ}`N#<78!pHM5hnFf@ -HWLR$gtTxDgjf`i(#se}#Jbe^ZM<>y691*YN#ur$kYJp~A6e=!+3VjY_o&vO+KrvUgEb}JpvTH59!GK -tHK^|27oQ1}VPmvQ4Yf2k!T0z`?8;^_Ezc6^*4ACF@U-4*Q(i;0R1Euy!PK-Q4bRHGzLsccac8BDwQQ -1W$k+3toJqaUuL8T9~!mcls?W4H%6i*CPty(>9TexKI1^^qE_Be!Q`< -w?S`SKK2@&AGbgKoZr3r`kTEMowu*|p6tV}_~x&Exz9KDsoaZKFTZ~E{9x~8=kKq++kf79yZ?Ic&EDa -wH(rI!jSU98|FZM9Z}*;-U$^=7i;CBqx;Eide*ZvMuXz8E>G{o@{r%?a{Ws0(l8=~dufBb=q~NDi@a@ -4rmX!O90Umt)?VJ6oGM`hK*WbQ;a`^2Y=2NaJ_=W1nL1l?OD)G(U!JDcQkEz5z_ustge0T8l@SBQqo6 -mTf1m?-+#v^|D;zjA*13lCSPxoJa{buj=HwRD3E&NiJr&-FlEOubk&S1@s;|h_w9GMB1)+#wYsUWPsO -Yde6&W%>k<|_zTx20%ERF>8;%iJ<1lGlinYvNaaJIvDenQf;cZgQdpQ%_Po -+Z}_y+x$!!#IK^?VzMdRTo=k@G(b&T&&0_jMQtOkUs~A(lmpQ6Q-{%h14CLo -xT%BBcp{I-Ub8Ou-KmA6ciaT#VI0N?L1VjL_9SXj*HpoQa?SfY{b20%lL71Uq9>f^h*Yrl$J@^mY#Tb?aY4I|J7oXb -q_L@rzV*6F{_`&7;BLb>QwSC%ljfTYITCgz(181Y9EYBVp5EHf;J-;?{PNY(J$GJPQ>_Q$=-J!-XOpb -Xue1z?Wn&H}j2NCAG!)b)WwgqucO=Oz5^n}frB&Pr%5J!3rY#Btr%(gsFfb@XG7J;uFqcD0iFtYq4O2 -v>RlVVXENw_%wT6lA|qIOYhFoTqa^CtTFT=sl|XwKg=<~p4AMJEJTtQNmKq5RxMHQtdMAN-3TUb{cUs8bPu)R0F4V$~TdX;21f}%%**MdVB_z&a#X2{Q#4g^aF9gD2IqHZ>eFzF=vQ^;bIISf-&b;Vb&5H1|K)SD;MxfG|ZT(E-JRpx -f6oR_+#;PKa;o$!|8Qml9%{!waU%*^qQ@KKoRR1xT)$-kL)kU?6olbD!nc@Fv%Wj#DN(=JvRz<~?5pNeS)mto -7T-|@rQdMhJ!P7H1aSmi6KHBQR!K!HTltnbJBmUIY0NkOr=Ha@b&UrS*B#4vz5F;IW<3NRQ@}R*T{iuw!rvX} -2WICCjp;>dAJ@;sn#B*l4iBxxr6b%t7y7~88p -D;aTN$(9=-tvduxgk4m%CuxEsTwxB0%}BwjqpnnTqu=Spvb(W_gy5P^7I=$%H8(>ecVuWbuV7uA$O@m -`;K9j5G4D*cpf{gMp2y@}(nBvn3;)W8W4s!jH -lIBe~393X#08NI2ciANhirD8@d5z-;(~0XDx*68o3}T7!kLCf|*@-rN?!aqgM{X<|CqDm3Lj1;^8ByJ -ch3*HqPC_-K(FqgZM5A^RtIK^cpfGeRF!rv -wmdo!oA3B*Blo^`gk?IFf033VQ*+!-R#w&4 -YbgFs`50@fki@*GUQ^a*3giB7`OP>jz>+Jq0ngl4%=;C!akgurotwwIXt8M@lLlHl^Jsr7>*KYW2Wk`{k5&yf$9f-(-M$g!tpraO9!QOW$x -bgvPqF(fX&qtuL+J?N!ZQV0Y{e$?JNDO-pLomeAs*KxMX;# -@yE4?k~T(A|Xx0m-23pM!Ea?n2LBa9w-5f}hUL93MXupht6t}5~XnDw^4BkK4p$6K7v{*v~3W+z-xja -98w*C(D8wCTR)#|gOXYCxkkI>sM4$~ISm_2gSFNMoRopj;ac>pz3?Pq3a!!{L{fr_Y4ZG}TLd -V5KEw9kNHzgt0v1pr~rq%(C^X(-7ltk=@Q$!}Ch{fy_MI8werd{D}Q;y+4o@h|ae@jhOa4j=Y7U`_%Y -M;jws;0}oA*~$~apy0zmD>~p?-^=TT2fK-`CV -Fv^^+PiSla}3eZD=0RX0|Eec}(nJ4r|-$zgAR!|A}{BS+0wa_xzKJuemFeuktIc{%0h#s`s58IzcpMC -ztq5u|0H7Hv0nLydQ+tE)Zz1&>4uRtK!kWQjQ(b&itI*8k%kIvB_2I2oriK?nu+MrHnZ!egSfuv -}42DlF4P+$wkUWj$8ynLr{oZO)6r!vBg$4S)+d)MO;`R#jj}ypQlZD`Pv^^Ha@d-6)l;u=uxe$KsYU)=Jz%3oLAbuSZ#Mh!r+HMFvylO!8n -e3Kc&)%s!2OL4F9t=N;n!B#N&VNcmyVMlUXROeNsRhy|uqb(2qH!vBY_+~Xrvo<@H|^Nt45NjX -diFb>MC`=)&p(lfzW(=Q;)*)AJB09M>#f8!afd1&-%N`8@A2cd#}C02$(raKWJ>n`L#>|ViYg3PLkWU -L#cji&X*E+1YO@7?f1bl1!A#5Rd1blQr_U1E7C#H*+b}Y=(nphX5u{?we+DU6$Vq=TY4`fS(yo?v_tW -mh3UcmEO;8$Sb*SQApvx3nq1?ySgrm$szs~kQQ36a5K0>aPrcxEs70hnoszt063i#V^alxPz}oYnizAE4`f|ZYt*ET -$rVVH2~`o`h;RlT{UU($E#U`}FoT~2!tjF%n})0I#)fk+N_bfHP)0DaD(@ieo(OXQa|*rr#&$* -tNC{DbtWdEJWaOIj{OvW=1fcW@fCIhMaVLFxW5^}kE-dl?BB=V8$i!5(w5iL-h6XY;u7TXj=i@_Q)kT -7VRUBqT;~S}Y#H3cUkj61;Z)`N8_U1;YmYQ}%^61fqtqv2KYd_j(eC}4|GCcFC;^u||XJ#)|-P~wAbZ -h#kSKf}?yiZ3pu7janxEg-rn)r<>;}@!5qx0Lw20m!uKLAQ5C~P`yipSh~pswgw6BU+Fz_69~kmy()zdYLT$?@&JON~diL!VdC;@kZIDZGk4As&_J@Ogj?jIw;LI)2Av##@n?c#)ZT -kvsJwckUgDo>O&)Hk;G|OFj+CrO&4A=EE?32y%cxUQM4snK|kj=Nq< -_)0V_ -u{vQWJdD9=>^U~Mw2DljEt>4W0M$_jycAtC*$BCXkh-=`|TLOvz@{ulL#!Qx>L-Q+AG -}E29dGRjGrZ04ib&soXz(!fZQ&o+o`^unSqq(lJSr5*l^<{MGr_f~2y|<_5dKh(^H@NIHbPeC(tJf=D -bcUN?wDoB}WRe(Eh2Y1IjIJ&jR_i>Q5wk)*71li=TTqn2A*jA7RRvm{cR7S5V=4f`NG^m2?<>G5-5e9 -9u0s{+(F>R=dJ|E&Rx5D9{*4A4wgApejcWCTsv1hqT&V(tjVFGgpv#Q)X3;B)=_1mOmKqo5q?Y!2bnc -pub#5rlXbRltqAvPP!>Rl#xoe;Y=8N$p3Mz^!fo!4FK9yFBm|11c -GGoEf5%uT_NcJ4Fc6Bo^ka1y26VGiziD+5%)OBk>p1&o2BB^ne! -seM$Coavx0Rr7O0X5gDNV7DA9moT$lf{z!EcJl6Bf6Ahp0R@)%Xeo`K|GKmWJz5QuH$wi1YDPh#Xdge -mshSyX&ylBsnRQ7^*-r)SZ7^gzYld7tHj{y6$|EHs8WW(@k6qgG(WUz7@G`wB6bYejG@cKKEcTNnDcYXWAzq(x#}w)ZZ$sq)UB!yQzAZO*mV&E8Mt;kOMaVc=qp@X7Smc!%m>4vg7r8?Gj)MKwAQOD -75o#kA}tR$h9E3V6Y8JIwmC7^<=b=^}?U0w^w6$xM{s+8b7ShT!p$ZD3VP((-0&=^eV7S}AYZM-aX{4 -IS^r7pyBm1oS;Um=6F(>ZM)(W1C#&wF=X{3d=gnfRWskXW0fc&!SY{%Q=>b?tM#+C2%1ynq$F~!z?kA -YQE*5%slIkrD1??DRUx>&?`9?as_Q%H?jR;dP$ze3`BD(#gbq+00yQn)vKe)Q@2@mh{gN{%$vf!lP5} -;0;#niY?8}W20)rlBxu}8PfzRk6jo^6WQA8o&krI;Ir%i$4N}u%s_CzV3$2iDMX&JqfYId|rZf$~nM%1~T7 -=%?Xk%LR1@zN|qliKg#$7PTxO6isg!VE?G4``qu$TS)akH3R4Kt84^8rP~<-L`NM3!Pe^8Vn1$c6#q- -htAnMY2pHUL)HqlkgYK%15wn20cu`0i70_BG@j<_5WvS{b~j-)qjfcJ2+9xCnwXO%^h9M&HaOZQeT#W -^Va$HymoOu`melO1=e-W^0G#p<{e-6l(m9R0}gh6sAO&-@z++pvO%SKg9#_|Mc%4W4rg!IY+YTQa0`^ -M^Anrva|uEpek(e`IQ`}3Hdbsz-6QL2>YFzOOnf^(X9gKk;;lq^zE&u&0^&zN`oR3SuKW?y{Xu_98YI -rQBD-}vqjS-7Z_?WArD%5~8gh!QA|w&0MarTzGoqGVTQ)6N>m~d%xx`HxO+Q`5EP5t)eD;B&xXIh&>6 -jFLonknkkuyQ?Im@Uli&3OB>|4^aPe~g3nEC-M_~ySH;OMMERVXPlJqv_Qsy(h<#K$bQ9mF8(frv>Eeo|K$Kjv9QS-U$7<=%InUlk -Ob70`H(pt*0P;j{P^5UEvC=y4^h@P+Zt2GQg^w+*i`Jc_AOV4WZ&*wkKIR03>m$32ChzHlnD&Si){I} -)bJY_{uq>%47Tf&Seyy!w@4xr*X(M{|rV+h-br^AQ|0gj0hd=-$+Qv`_%3zVWRZNEiI5ayJ53}?gV8O -wXDOSP=@WW^C7(_wq-wIYjvcqT4?ym{9agD89V>@;20qQF#&L$I}-M9lRa0K;?ExD>g@FZ$L?5n7o&w -H7!DrNd61$KZ#J0<~!(TB=#Fas(3ob9z_5ZpCIO{{kToj`}vD^4#n7=yeDgC|Zi0#(Hy9L(1vYjc*Ez -GDw$F^9;?H$b~m=b5ADiCZx}gWYlt%k3)a4=3r&5ur=&6VTePDDfmv*~ZLdez2;tf~V|aMa7EQ4~Hc142P!T$@Fg>6qryZ|m3Dn5{ -Osy{hvV7IMuvcWP0UwQ*=raT+}H!ZFeM*TyVzhRB~{onQ_BlBq*wJ7z>p@^pd@CD|Rg$AP`0hL#efJ^tt4U%Qezn;bw9ski>1Gy|$I^#|;DH9567@=5L@;dhf^2AZna}yG)sJSKh*}xpCntJV4DYFGg)}f-nH$bO%kl* -!!7X(V^^kPhrRi;K=FuI(~hp2XjQ$?C%K=qLcHj^822ynLfdga;R-{-b)rTall=xg17^(~-(@#kC%+B -{QBFBcKIy)#4(%#m_1Vz%-#tf8&|ai-;m&tble5i9O0ho1576d4~cm<~z0Jb#QoFXxZZXp+b8`^lh32 -;iLIHp&sYaS9+(A7><1zqh?DW!KzDJ;5v3&~t4cN`PIbG>!zW8(^Jlp~Y6H}M}{Hsh -17MpPil+|I%wp7(b$*^l>>Elmv20p4<)F&%1>dwpga7edG$>i*ZtUGfKy{LRrx0~f8miBV619J2j7a_ -&<)YVEf3xh$H+0p)iFDJ7X%1LTR;#Swfp4RUz)HfS86gCL?y_t^o;7UxO40uTHTq@FwvHVgDM3?i-3p -j%|Mm}6{eg5rRa#~3-d1eo_u46h=fUQ-K{W5QCr?8rhd6=Hv8%z%;i#K7~xJj%=HQ1DPVZ7?Zh-k2T1FbzgGyuJEy>qzXa&u@Eh$l*R9F<20Iw^2d+-tNaDg)r? -TS`7i(Z+DIsr=08nz!CEh>|k0;%qZ#w^en|ADy%JN&#qGO$S}N5&UsJ!7ZUs`QzOLpJ@DsuI+Ut_YBT -2W;#80)F(z{lATP#w9t5>O1kn4rtq`1#C;~2lS5wd0tcjoXrum4kOFy!#iz!Gb7=0Sh#Q6kY55{zQMlH%LDz1uIHj27=T3m!M) -t^tj?tk%+LRuHFya!#R#55ZYk%E*n4ULtbPtIY?liF}{em$<$13=pkJ)oa`0dHRn#+cj{3%+IK3baDG -yZ|l*A}YCo&nDcTlj~h(Otox$NA#J`Ix -vD{3oNPZe%58nNnB*_Z&m^6u(XE3st3y&1hi}%OZ_%dd-jeD=tOti(C0jl{hJj$*McEpM8P&6Q?2-_o{q~BI|ut)d|76Oea=_9PZ3#U-+FNoR^*&l`pv3y!k+5Ryc| -T4J9qmkMa>xF@}Z`qQx1~_nY?ajnSZ$eynl?^ouOBmRH@OV-s1<($59w*F|Ra-2Vl390X3uRI6BXaM7 -jl{tZO_;$m-&pI&NLLzb_Q2mL;lPh=)tzVfE}!)zQ?C3*5~o}Cvf+L15`I?~=s*Wp)=DV8~cDH4XwVV -nl+#O!Fp5Z!=%Wo$-lj6*x07uek3X9grM(T=Sp)T`|sL(8C+AV`FT!3WmZh?#_MrbO8*w@RfDYE5YM8 -RrV41CjI6hZ>^ul0ImQ;wc*BD6vYMPD(W@O;BhUs*Kd>r5>XyRLcYi!m2b?uWmX(vLLF$gv7^1u3g2) -%gU-?Vmx186;&#%@Uw$pCJvK--3>88Ml{GU=*Y%yK?KWSL`b`U~c!X5up=3W=RwsF63%YKkc;ng -k)eX}2ob1vk^O?P!a9YNd;Oc&EXU!?Z_p|w6*uztVQt5DLIa7dVA(PGWDa45xpK%4zJlS;#!IG?*^L2 -e1M!l@Al6z)ASvoTAQwsyhHI_{|f!jJ-v(HNEEhe8SW&ZA=v4lk}?IKV4MKw-iVY;TH -iHH$&`U0kd6j-&|C)@F?t$6X^yT1s7*T0&R`03*{U3Q7d6Ccpzlz2^D@x_gL^lgTpI6P=ngO!)}e6le -}%V-ePH}9g|EQ&cF9@bC7i#uglRvCjSQOwM+sOP{-eeZJ(ko7gPh241*0970$(WjZ`tjFbW;sFuU?S) -3-v#_tP3aFF=1%VxAM@^zwFTlxxEc_ucI^gPo?;yQ>(FuhcU@;9Z&*=)H(Mg5=Pwxf?{TNc16LQu-j* -(#_LA7p4rF-&R7q$AGAu3zeZQH1O%fR@8TS9BSKfId9Oo{0WU<0-IF?=bDCE=%1 -+!y30)gyo&0sXUuycpF(+h{QyUjIVATph;6tpT1Mwx;sWG04~7iC)pI+nun;{h}EKT71c8;9yrF|PG= -QRRB!n<4$yKLaa3b~dgUe{A&-UN;FyrGs~=SaD8K&$@l3&{enX-RdE%j!ymsDV^4$Jz~}lIX(5#LAaw$XHwr}-7Rd%Ad2SP<cw6Lqa?%#e*zZ;Xo^@$Jm0k`K9>4Lk}@@g|#FPjYSo;@Q&5ACPLO>tVYii>SmEG1Dl)|05TA>l3 -b#-RO<&|o&nS1u@5y!?!GJ*)1|JGCBmWAtaMC&m&fGYH`BvJ{MNlEgehAq@K21s*a+w?va|oCP#8EkKLz2qmMTUSUjt$5+~(rD5;PnObNkjS0fgN=+L! -m412=RcRBUbyPCp -mSdCR2vumBAm9n^^O?d4As=r&5h=_8x3J%4REK&ls_2Uev;F#sI%dFHQRJR%}Yu4}Ptuphj(%)98pIS -%4r!qRE&=opfA?0YTMlwZl<6c@_lC>fGZY$YnZ$5y{U{y0Q^Z?)%cH$V-IBE`slkh0ARjf5+8!aE>AEpcVmHDOZduS;aV@uI6=^);M?7biv;4CLoe1VKmtxo$w~BUf2UND -F0hyv?Sg8qm#o)f6`9{c?4$(`1?~umH&&Q7rV))My>z(4=PdmCrj+176JMCPk!C?5QssE3Xmw-|K3Om -fc00$Sde35)pOtnj1wa^T>Ai|IHAwy@Di`|mA#UY&Y^!2l69Ry>=|833mVF)Mnyubfbl8ZXR~oR{uxW -;h8NrpWv78kJ=i{z(n36b6Cy`GCbx}NNr*1v-DNS#v%S6LYUj0J-=646{uEPw-DHlZ#$(4#TyG{iZy+dI5Ey!niN$by@ -~al-=G2CJC|YTGEYJF|JAOupsBVh!U7M{D*3X5jx*&H2(_`04T6x}?XaxfXC -9AW5UHz2R_4q0XUi+DzRJ5KJ)RFoE+bQ2sRprw3+*EZ=Qv70PBK}g7k+ -?EVM?TH>9*p2RCRv#WjXtuOP&EBLd*cgrUUb#Ke3pYFq!>4Q#YijNd|ezA8KB -fionE=OU)Lzfw+bZybqd4SYxI&%YnucnYF?~yon{*Wz_!frL-6>cyY2s{)x(8{u9hY?EIHhD+s+cwJD -G*T{%eSI-(CMBwRJZZNxeMIit&fy=; -GAUe=DL#Z|qxAsXx!VCo~Tp0@muY^fRm5JQzz4CB^dg^EstvM$a4-(ab?aS2lhe#0Bl&OER6Sa|ZCZg -x&t=oAbl6hy(EsG+CtV9{xUZ6`$9DQ!q0FVURSade4IE6{cvl=yhjM9ZoEJY(xESFSiCF22FOOTo`(Q -T{Jo0c411F~H)ndhW&h*J=08&S8>vvSX6rNnpH>mcfw`1Z2rhOetNP{VcE^S4f2#o6Jxd3PV5^k--_u -Fp6!#GN`@_U5@(57W&Cy!iojoq&_~oZq_oCB02>&!fYK-shad<7q&P_nVGi!dYG`=*kyfj*iC!@)=& -eLeAniq61#vcJ?seRt6&&7B)%vx`aZ3Dod!WDyE!2Z3oo|3{ -q^opKUUpQ0>hvw}&rudqrc|m{nZUG60`jn5>r)r-b2@RgngX(mk%x|8NFO^EhN*hR|ab1rqy!7k -jf(=I}tL?_g=X^2y{$r*B8|Y1W;vxe1PEFFTu`pPRcLJ+g{l8S^H`{eaGr}uy*UQwowUV*qtDoo#AYqITdB=;$qUK6jP?~52rFLm37laEa^K7yU1YIVu>FMBw}?aA=6eAW*mQD(J;mj!0{uJ=O`6~i9>2mkbd7r{S2^y6yYySr$+p5{wNogzG*7o+c9zWiC@?`7j)2;n|+ot>6 -W7fUlOE$<-8Ng9Fx*kVI+S!Vl#wYrLD#4MT6c<)VmBemsn7}$G=P1K{f@iFbif9u?R1(IBS%!P2RZxT -A%+W{zt}g<8hwY>07*~5Q&(kZ-24GF0nUG`e8(#XVc4*6KpHR^kb%j|r971!H?tlb1RaG-17W`TYv(mk)PV9xCQ>2LQQ|RJVAAL0rL<@bP6j(wBeP -9iWw2EQq)Cc4{P+U+vI|?Ud(jxf*9!LAI_M3D0)r}N7_9HAA>h>78#Q>-Ls^T}E6~MFZH~`oHFiWyMF#X_LJBf-8(rII*GiJ? -Fdd!s(g?O@lvrn|aEdmC=vPS`yA<5kJfgKXmQYQy8tR2|l64IP&2oH(>TlTr{}7A*m@}zLv_R1tVNAO -pU-s;cd&v<_qLX`=RS8Zu>Ou*P%j+ePM1|Ku%`x}99N|X4keB?G6xRf=hd7yqq`paW5&cMWt(f}w9KG -_L_i4`|Rgi$}EccYuScmx)ZyQolN(?URf|izL))El0>ru_b@zEiCYQU6gij{WyLu6~?}+4I>k0Mn;qay|5P>XWospX#0b%YsW1jDX;eeofOJ+<%GPrAR)i}_Uots9I&>8uG)E~i5b5xM -9;60Uw1ugRnyU;GZH_557l9EjPiz=?dK$O4+A&IjD0`yHi5_jDDkF*>XWf*&f(9(Hn>4z%e?y&!&01A -jOG?FPwOWJQLi+NL4QhrGD&i=yiE}S2FperEO`(cfL+Ma}wx?F~bfU86Aetm1f?WMB=X{8TZko;cdal -wBhO2_NO|MARemHqUBbwzU&W0fx!?$8|ClV}eXOc(j<( -m-II&xV(b!IaT%`#&JIYL>yTnPd>`zT^%LB3WZ-Xg9x6|4(qREc+aoM9T^3^)`1%N8st{wSVscIBGV5 -=fa6OG;j*5w%GQhVZ3l1HNFEBiV*MU3#ozb+(ahD!*hY -8SsjM=bJZTEkvtB9Y=8C>ZYXtYlZx!;ha!pT(1OEO=$go6|MpN%&GFpj>Ig$-$M5VaopH27Y1U*OO6r -jL5OEWe>B(WWJNcfW^drg@Zk+6CuGk?tsY(b6_BG6OgM_HRcuAyH?3qv5eoA77@o!A#ssf%TF}lAt;D -;H&RGFF-o?5K?clzSkH>K%$A80bXY_U!JAF_tQAz>?Ir&vTK?M#Gx}ZdEI$p!P;2t`5_zq9~aX#q2Gd -vU3LK&T^g>$n`eO&N59i{J-*%#l+O)y#4Z~`POW=&>F7@|*_C*~RFQU(^)AEIT9>drZ=Iz-ovp#Th$J -Z{N)U#7#;vI9-9XV?;ZBA-EX5%dR-^eNp3Qia!nB-ThK_@mQ0W5euKAQg(bw-hhF3&;1YtK8l6D687K -sD`e|Ulmyr4)B!q6McbnU6GDJSJ&Y5=y~8+)rZhhI*wyp*U{jolusSVsWrg!Y)s}q&fRA`$X!CO&kS66g31E@k&11SXJBE!JpXbBssQ+3)n+ltZ_n -dK!U7N40PQamZh7sIV)O13DvNP*jPVqnSoQ{ik#F7xPOrO;DMD0HN+LYL570X>PVeTL>5^YgI4hr;@`Fexx8`t5gJ_%1V5) -k(DUM;?ImJBSH%9||2E)zZhX#8aIp&Y1?0S3aq-+A2=sA?AXb;dr-H-EtA958ouzpx?mo4i;X@02*nt -cgC*6vidY(TwkanO)t(D0nITq?PNCBjIS4~PSftt7|M>}@Cm=$*;d0)dIG+Ihmp&E2>W#n;M}DmromE -+uPSjri0GUntlUckCpRQ9J`)Xg;;2Ld?COMq{$g~d+q87H -4cdQmDMJ)Rg|NR_cp0&E+|3tb~YyT!Lsh>F6G58-sr!*SA;Y) -l4LY5oo`Ytc?`KE_B(EOmk;ibnwatIhP(5kcQbHA;b%D6Ry?mco!wz&Q{FwDeaPy*Kgx_065ciCsXHp -_>hZTq2WW3s(lfS7&VdUwxDHXLL8xE&VnZA}XzYzv!>~N*kwtMAYSdpGcBL9u;&bq!`*5TMCa+bmp@r -yv7SjEp3Z`Lm+%(7o^b3We!C2magX1xyk1BQ*KN^m3L^5G6@4%?t%0l?IX0R%aHE}bOSGkt^@!^AY~n}- --qbbSDI8Tj>Cx3?${ovHRWBPD+K>a$pw7^tJBNy70wYp72;ybRCr*kY1rrFcofMe^R~ca}aA(QUur$` -UjHqjjw$FAW5bS!<_Fxxjw0(cD8*Sf*r(@h7hD<%XdX^v3qiHq -qlJuecd>dN>iq2OW5;|L4{cXrNpz|e4iRNq`6#QYJIt1yBN*U_Az+KHsH`;PmFcnc_*@(NygaAB&BB*}4N)7KG=qQ9|fxX~!3cfB~xxS -*o)=!+sS7kAO>Zi0b*uPDfaXUPkWG;US>w=t;{k~Hz24;@ -#9B*kgM5KjRzhqHUL>1qM`5&3$@XIf}Pum2q)wgP;y|uq&aZ$)rVfea=2j3Kd;&+sGvGSD -NoSI9>v&3mo?S^xg4r2cCZ>pZKQ(c+;+Hh0tpPN(62!>Uzig7u03`FP{2qYwW$IofD`kv98#&1Wa;@n -Wd+@t}K=C)$d#HDss!ymq|tp;m9SKg9!(Zt+!jR&Eg*`|PI89JRMj8lMwrmWmZvhjiDG-&6ZUV{#pl> -h|Sib}&YyPimT+ZGer8i1fQAG>vRds9@qIEdcQrYUkNwU}NtxZ9=Neui~TF$(tL0&z*l`-N}=9oSg&f -p@Q79P?AIfv1{3=HllYRVOp)&By%J;+#IVK>xDd|zEmnp9my3d@WMpBE3ihKm8>PxZYOlud_2kX$tCQ -7q}1iZM~-7XjcP|HH3yzhS<$(Bsdx&Zn7V(`Pe;b= -UW{+JiD`TNTcS3iYo{!a(%F0T1Momg+tUIGU?)?fhnF-huVF9y9WjH!~96hw}SL7|UdDFuMH>Dcgugx -W0~cu#qB9Yko*p-q6&HM9YQTe&) -6;qY>_zsW8uaOD?f65@LP`M6hs`z~wl6ORxD%r_2$cGyCWV7K72No+wq~p9Y@4V^CO1>I_yF9|WJ?)^ -%?4+K;b3+ZLUhul%-M@j-SAM|c(@!@I|el8Slx1^4O!B&$$N@|$odm<`c0!A5gS9SHh%(W=JF()bz1` -UE9KQ=Vk{eoTsa#|=2x;lL)>fr6P8xzfAEa}silUFnU&_qGu?`&`g%{?I8VKBAC!DZJN7EJ-K`4~C|Y -#5r%h4rZtyqQm)6@#b?V&WnWXUg=1t*+S3Am#6~7^5m*KjR73wWygW8O&>aI&VO_GB_l#- --B$JCG~Cb#?XPxUKUwL!SLOALPROP3e15?O)T?vDlnr0jsU#s8D$HEFbi*5FcO$l>TIl0elMAL>b^E^ -a=~r(S*;t(hEEJ8;G&vcf@&5O~kmnJ-iGZJCdS7i%F-9(ohn|oP(IyU=j7u50cbRCEBSJnB0n@nlgqm -7h(HEMpBuncpzj-MiK3d5>lTR;P5*x@E(At#ake~lX=JjYW6`~$7fH}^cD)8s -g(h9fn`CwlbJKmBi*q0_ZUwS(`3Dd3zpPzM(WCiY}zhS!G$%Mg65Bp7Z^)9S%lLpEwu#y(W`+Oj!=y> -qJuBD0LT^sBv`T3R`~7WW_+K!KsxKYpKAC ->;kUmlE-tZ8e`v>Q)S4+KBF@HZnoj>(iNCXQ)Z%7|(qH=acD-B9q#xG%Ah1E13n{~1lsXn^VKb)?v(AN^QRz4 -peX2q;X{IuK~8&SI*ZEi+s8a;a!ZKTmgFKVYw8K@&}n(3l25dL&w#$l=?5VL(V;Of;#j;sP^Lj@Q(Pe2QR;V`sxLKefH`NnbG1u-@JPB -c3-+8|1RV>B5r(8&~a4p*H``MmBU}77YO!i4fZXAeSF1g=C=SAs{9{-^}`KNuGZ4Ug!aKjPKGmRteG+ -2k--BJVO7^1K_07gR8pDqY(}|ln4Q;j1d&?UKumv1wN!|hTHVATStj61BnkzJ>r7K8s);UlM{Y~g^v< -366ipkAGmTkA)`MHcsH_{4}7%OS -dGVr!gIACYR%tk*6$szX^HH(|0@MT~rnN=!b(BtNKzE_KrsMVKnq-jkY4|JU`sA8oKScURm&KS#US5T -iN13=gYV-LWWUz(XFq(7g~*bxy)Si35_EcLoOq&ao^Qx7=V5@f5;y&pI9$z$h;uB=b$=5k`Gl74 -5WcE489hM2OULG=j#zd(IB9g|2=zJtr-4;vaEd6!KDp;mpwa4j0``f8*7FB)vp@- -o47$ezw~U~Ts`-pCHtqj*;))lpe+?}!1j7f;)Fi(ORaC~m;bVAAUzUt(_qP<*lLTHOp>T@491q^?nh0 -Kn(jwu!ImXDS^58dSj+aS59P8h95DPF2_Q(F}Ix0#h$!qfQ6!%J5okJvKJ*gt>Kt+=?4<1e7P47AHKr -%hVf@PWDnSQB!|~aU1t;0b5+Dnf&vDb)|&LXFk;W%ggn7`wJT>+K ->_!JLSbNZEdGgJ7R${hjz?Hk%e(_wS!WEAum$CZqdCCK2B*2k!>)uKB%vKi!S+87zkLZ2LYmVUIy;4% -v;#VkmBsHSrgO7l6bNr~pr!&Dk6}YRaUIR2gtMV;%1aRy!Pw-)STA)LNNQ#X4Pazw02ih?me)5sm-{3 -<{7@gofjqLy%pxt7Bf1gQ`^9+k3k-Ns{5!IInSdUgD -F)}`oj6DP{J73e;ksU`e7-pgI;U(=fjsWr!(OWtdz(lcka(n^Oi7dYs%-<^)u(5Hz* -1C}BfOZ6(1*#_Yi{=j?{}RiZ(%%1$S9SIW>?c}CqB;yy?D1BJ&ZP@cC@j5zXZZ5oK7#GbmKv^3IDYl? -TYfdq!zrut#CqhL*@99c_uppZyNAlP-uYXv73KkY;vR$s=(1M*eNfiw#87WMSJ!(xV -0xpXxN9t|rBlP@+f+kDrC|P|z=rl6Q^wtow#96eSGboRn1PepvjzV()llY@|kGqXCqh*mYT*=zeySP) -wA%K_>)e^Ao*XF&3DHT?zta@%m&Zs+dY_;6~USX+S4f-c-H`k`^%x)=un=c?rjE*JgJ33r^TKQTIfNA -$JMghDFvrPEXT2Ro&iEZkmaZW7)x+cDOM$WOl%vTFr{GZ_%QKg6iUyS17A3xiea!jiehZ4w9q9nEc4! -N1P<3$rnexLBBufqDRG<3eslxX5*XY$UZoYSSI>?cR|8p(L&Bh>Vv-cK^Btgv?1AzcNV_)vjw~r8Mg8ZbYe -2yD~bs^2M{yKUTWCDj?}x>^ZjRsl1=I7Zw|ix=CH)S24gr$yi`_23E6t=lY{bP`ka#64&jV#FUe|24W -#X{bQ<{yRq -dA7!U_iMJ>`fltO?*IyF3e9l=?*A%T}!1kHztT8Pp{tiQ)L!uP;)}c(`CGlkEYVh=QcjB8t(4o9G$mG -&_iB5K}i7<4`J{?x;#~>A2QpD?J~3Tq{vLxNi?VMlbBbTab_D4?bOnR@djO -$#$)=|f@vP38}4Lw1(w%YR-MsdjYvlGvWY+rj}n9yA0}sUiXP|8nA9o@>0|g#}=Fg0h&`Bm96&VGG-H --MH?%itL9i(PIXWwAZ7UXc@CDj0H9+(7}Vc1?-N22Cq^CpcdpJquUNiQ!GXGL{C&G7{P)XA_=$|s-}) -nY<%P_jMGzxv!jLs#25P%_W_-pjBpq8#mtGa{#2tRO{nSPGHadA#UY}YScwnb0^(60Wi%v;Ur$DZ8Cs -cqsU1cAJa24nX@Qu@lUog?va&21Cbl^0UEv^+S@%)xgQH03$vF4=xRh*xB+TR7TGsIe_ez%;8Lv``1B -&~P;P<*68MV{dX@yTsz8Ey`Xe-06Gwdqye@z9?G20AM7r1lN8nWgvH-H@jPi5z4l?+LMcn@VLXQG<`+ -*+}gjDIl7Q`XaVuBHY6QU)uf8n96UpNAt=E@BZOYFheq#T(uBwT9^$1|2!Sl3Ej8Zjob&W#-uuC2YZ8 -yBFO@!D!Q##^qO0cs*(^FMLuDb*b9&^3nQ(d!M?^!K1qOthw22w%g7l00jJYj)9X$Q^#naEH1l^934G -sM74FOegurYb`QRMdU7JnAAJmtY>fvewuY_Xp$Fw@5H_(ee&L_(_KD}~yasD~N_uQ@vVNvgDLz)Z<=! -My*#;(_!wJf$P=B7gF-8h2Dsl5p^ib4ka(H}~kNkco!uZXK8PIWKon{ -vWHusXpi=kjo)lcPbl@;)_E(ltgjos$15R#|7B!sR(1I5P65bSMx(F$nFi8#6dI(N8=zY002Z^ZhE?hJBrnOm~Y?G0RVM@tvLMK}mmRr47m$Mf>hpiCE+v -wOOU6BDD}@u}gybrkG_Mk|%boT%*N^!2aY3Ii4{T*Kcb;7+v1$DQ;?hb{=DXqG?)}gz==6ogIhal$DK -|j)7bjGU^Jh1vA0cBTY@?uq@sQ-(^K0KaC-UJvA){hQk>}T)uA3pBo{Gu?p0)Rq?eoN~kmXRr$uNkXc -_916ytp#U9*ZtlF|y>t@Ee#5rE5W-TMWBIr_Qf?-enB^VnSQ!g+&;YUduHc~#{N6BWL1CycQF8+Q{7i -)~DR=pr-bHCAwSVJ>+dx8J_jZRmHawmq`p&QfCboLx+6+bnGg@LfN_)+t5#~L82g|~G4xm-&{L(*(SO -g}T#4U73>*JuF6C2Q0o{!!NGO>n4e`s1uq170pBiQMhi=|a$d+&V3#AzIRiI(=unx&vqH!A$Cw2Pm(V -R=RX-PaAN2#ofC>dv_>KbY+mOd((6k!d2Fn)y+^~N}0s1<8JyO+XeWm5CSzQBQPRJ{a)&#DHEHf?`x~ -t@{Up^?+}nk(7}ifYT{PQsdU=VilaNdd@`Nt{7U_~61|5Rnw_xIhwC~Z44+j5nOdBDwRQA;d^|qRkB? -8T;a42j@z3!wz4>r*{XxdFsn_fGYW4M6Tr0)japGw7CUZQsl9?$AX~p>xOyU}~R}+}jYRfQ*>+5kXUW -|zf+hH*I@%JLgbrlQws6BMhXJwb_A>Q_QRL1}klU`QpZ0C7Wn^WxIfRBS{Ox5>Nu*B-tgB89M-iw1T? -!-x~tf%37ow7`mA01_yg%h2LhPM-Hca``M+$M1pH*kw@`>Sm{MbhI0&?EI8pcZMTTcz2lS1ZU>V9BOw -!p1jYy}ZCFq%eY3PfzP#%G;1d8DKF6FbBeHnoiub#rlm~RQ`@7-5A+zkW8jD@p1q{ZR1D_jhh|v0Bn3 -mm-1!XTn$}=D54CZ4MKU7=kzk -x6yIxsGY;a9M2-5x38~hQdrLcstUK&TIGTUk -XTp<;^CQD%BuofMwd;BzuGc!XMr2(P;b$OuQ%OneWov@|o2YIcn(N%E1^WE;-kZi7_=n6wrp9Be5yeS -e+DhVHqg{2x=2H6^-NJvVIU7jg%(m;O`*wCU%%1RMlLjN*j?uU8L>{h5jQ@rm>Y_;ZB#FuMw7L{_P>z -I~mkYn>&@r>*c%z~Zp@5=yAGEu-tBhi -B@%~)SPu_R+J`_7#xPDVhq6DKDb`DqYSe=c4I14d>z=tYy_|8s1b%l6X>1L_QM)wDpkY?jn|M9DUw7y -Ukp+6$Kfg~e!aew7$NX0v169w}b^FMKyT9q|`SZ+|015x&2(qH$uEbG|hnP_rY97ntt|p^N0YK9=veqjhnRSH&WdSl(cEg)ESWOOfAi7u>0yAM^*MR9?!Hv -C<=~Q@9}WbeV3f!zi(%7yuu;kdkQY`7SpxqAK@%EAuWi1^5ps)(~cTb;s5o?j5B}CIXQ_wLQ+BWw4AB -V?6fi(l%{NL^f@l>s^^knK+(IL~h7v6fEJib)j}jJ-Z_7B=&S2rQ` -HGb4WwU@r=^KoIMRv7$WjOj$A223u#(e-=^UxdqjPjE-vsinQE_7fo&f-j_Z# -+19En7-tR}*U=M7DjX%9!V9vc#5?UsC*IAOO2dQv_cEHtDnN6k2j>2x9aDS&w<7_t;lhqNJ4!DYl7G> -(DIV^wgaY#-X<2aO@pRaM|o7KRLqLo;0$dRK6P<;>p+WWN%ZJcYZuDKOQ@+Jbs*{jk8AAY3lJ~*%lYu -OFU8W>@02j4>tV=w%I4<+fxStSiYm=L*vT75~0K<=jVk-1@%Eqgmd%|GQU_8JJFFyWLnHdE?ak117!8 -(MJckn0pUsjM~}Zg?6N`G9L+PDi~Sx*g0_(lYK_-EVDsJ4y`nYe~Rs5eC;*g8_#PbHw6L2$vniMK$UUIW -}deaxEb_?Fx#FCcXL4s9&s%h2TUnveG)tGo+oU;zT;d)m<;wXifQ;yC}yV%q=I59fkxHKaXk&o=bnif -9kapr{tDf@~F1gri^<|Ht&rMIL^|;ug$}~O@2mS==AWWWEvN9_~+MGqtBndV;(u)RzzV&($j3FxVq2v*`a+>H{(~g|Dk&z=-qnX{S* -9OsshHHl-pQCmD7+E+rYYTbyk7EI3=cdy#eDz0R_ncl=VYMpO%+j*2oM*SBO0ZT!HV`(%PVf?|a?1g} -Kh1;6~n#l6`+DQO;5$=$^T@l);hIRKI8JRNF9xs1Wo5xS`}-k^LBn#L7Y{3zobv%Wh -h2Wtvv6m=9S=VKKtr2}+fgR}@EGW`nk9cRQsy2ybBx~WUq1J>32VO!`{=+i&o8g&xE=`|29rWdP(c_j3M5`|_e00 -y8=(IivEbIZJtXk6bTD+)9BCsuYeZk?&wvFGaTqG>OmQ*ab{rG>yh*1;?|G(&?m#bws^JZFl=GQG8rOK -ztHKJQ$kEA65HH^406@j2`aRfY!BZm3YK$yY()+LRJv1$Mr9zEs8qhQr=qz1LP3-D{PxdMGAvlxJ{`_ -Q3>imNAH2N?jVm;x(aa}?FY?ru|Lmd33^n{C~3`|wP-M_6_}`r>`u=!ikDMl=AxRtZ09+)n&TC1lS0$ -ia`KC~Qut9CbaL~9V%cy=gN+48QTiSh0y^#7aW3ZqHc$7D?~&!ty_0MF_Q`#+_`#95cV8MMXgpVx_AHdG`@2O>0lezjc$L^Y#tpK$8S&WebsF4$^j*sFKq+?P%}`Q+QG!gull%BMK -dkvNjZs~Z3`=rP6Ddov^g8T#U)?H_x^n{kvbkswzHr!7NJm0an=3dI#xZ#C+CkiZfQjZI?{()+{1#0KVTzgt+yV$@N;*Fekna6j%OSVc53V*F -*Q)7GW(8@HP0_$eP~FQ}P#H+K)~Kzf+PAt00vJcf6rypZO9A~ccM5SMR(A|)Q;O=GG!BhtM%cT=V~^< -p^e<*6oW9j5s>n5Z$J34oR0Gy=n5s_F%!WvgW0ki~wCc1Jm&1_1&NJ;4D-^acLT#LLBaHNENKf%j(7o -%9n>)r!xy8t}?%X+K+kJV@(7Ry(bAr_|;5(@0J#F0~o7Od8yl5WF@lZKokyO(*mHiNfU~6IsHsyRqR< --a7wwO!Kf(wJjS&xhpF4<_ASQB@+qK}@~$#Mon7^!^=+HH~|HfW=zf-6!oS3YC>Fdt2uCf=di6?+I^G -98g%s`bX?Og8A!>ME>Pt@6h#w$+#2(}tle_ORH-e|K#PGySsY4p1Hd-%?6{)DT)tlhjh_zzdd-mJ)aMHPb|V7kyuuc>tjl=q-gkT1d~pBaO!TH~p@nTjlG7kH975oI8Ra(#zg?*K}X5FR19RuOsz -96!Dka5j|Mnd?3oW%kPMOp4_zaF2C@RZY}O_YhjODe?*@{yu(3k^N~zcC0Gc&dE|g9uS2=&jy77dxU< -}jnj5XpTwqm8TSRGS%YNRrC3oE)wS7FC1$U#xc7$s^sjX6{R=3wV^u-rpWb&kewiMS&94QXzz-L(7NX -I=L{e(h&sT1iy`CXLTB&kTYNOS(iZK_!%nzU=jH0mW6G?@kYWTxJh)0+77G02Hi6dfQ4mx9&*9Op$hs -h4%3G7lP*mgGES%y8LMV&|j>G}!?cV25p{y{tPJrNgE8x#4Q8=Am}9-aPs0xVP>&8ajRcD1_7va|CX6 -0yi0}vB65z^>U^JK2A3R*AdQiB=ymKRJq=;o}h(pJvN=xPtu`xs2APr4cH3`b7YSLgTu30uL~nIRcDt -u+BmsC!|N@z4Li~fQpQl}+8=9iqhP+&nl*X-gytKneyH!HtRU8^U^dHCao#%$s+xY-G>z066%(OEDTh -w3i02Wjn2+i@#!Na4%<$vZaqnKuQH`4Idchoj=J2t~#Yl(}Bb%T!pger=E;2Cayd;$lAb@IelGq^Qit+y`m#3n?zaV@O$;p8AshOzww21Sc{Ba&nSol5~%QJ@v%4Q7SVXnh50v}Ox|htMdM7B7>Zs;> -W{k=Tn(b`FbZ&5=VRNoQ;@wFb9g?TjA@ptor#>943{!!l;_=7WAm4Ka@<;8sQ&YVUt}jy{iPLWx|{M@l$@S|kd6NX1_sh=OZ<0wT31MSNJ$23WhQ5U^)iRXA3E -&{fk8Ff!MJ7}scgeJEdZ}aNo@;vGyAN5?=v}(06>H)JFi0>a)c~_HoL*HHj<6Tr)+JvwdI)QtyWP=7U -Yq+8j8r^pWuq~_CjFvNt<0nIm|po$?(s_7LArlQj^SJV~@6@&sB?RH}Qx9UF^e$`YC6k=mc+dflhd^^ -kqvD7}@J!`_~~lxRX`1S^2`u;!o`?MlaX~d&D;EevTWop29*+Trr0?e@TwETFsNX_wcK&ZS>GmF+}xA2QS7?O2=5jCx91w^6|ny6F!;Fhr6smZ26Be#q3IS8TQ<9YTe0Nm5a|29Tv&QW&zW4%8xy=V{ClY;G;e?+fhr|iiZN -N#p5j|+vPlDr1)8hTC(;t^i)9~Y@fz}^o=};Pm1m*Dtj$NJG_ng`|wX=05!X5ej>PaS|VS^Gszn9t06 -)xO`mFGTT>&*YdyWecxeX(`-ZR>8|TMM^Z0+zt4xh2a1zx@77!s+Eo%VW0E;-IEO3uJbSO~!PcWM;QuXnbmP@R&B_(ih&CTIqDNowfAC^sW8+`DivE!0Bga(=nqR%%zRJ>k_qYeUSRHn^CO(4 -En_a-O?q7oVfU=mZ~JOy)U1*`o4;@qC -u4KF|}+!A4IKI%Z-|>R;ij*-yLwyv73yzTEnXDpht8kqvc}7pUy);l;()XtV|5U6K6rdcC=^u?3S2NP -zZVFrY)y2N7B@lB2R#h_?CA&fX$Jn$A8~9z+p!Ma{Z8p{W{n)BdgeM37LVe^f?dG5PgaYfl;H_hwxg3J -^FYkB&1Qj=%dwwNM$u( -$nMjMn07}RBa_n$9HYTAA#xo=Uf&IWX>1+v<&eqS5^E$W%ln83$R2i}aIlfLaRXSifQ?~_ccU<6}tx@ -CrRU2Aix!e+Mf%(_^l6>!IrdHY=sy@88f -y!FW3Mgj0lhQF-4`Y%CFwMN_W@?3q#?zaOkPjU=xLgF?OSew02!y<3;~f+ln_wHX`NyE(-nQiD{QE8m -2hq%#Z8grb~=OcVAkoV!0P?6;ItGuy^nVo{jvM7)9FpRoesUxKl~DCDrbxEuREgM^UO92Xkl=`!galY -2jvhiG?9l$QHs(8HGQueOjL%sof0V4h-##<%Ez@jP9fNm@Nr8$q(BGRj7q}}mF53`Z&&x*MiIo{`&XO -{5;k=#Uu?%QQY9QysG2?iX{Dx7>YROdjY;evJAp>Lw56h=;)RDcLaKPEQYfXB3Tj2#^6?);=?h8UECn -Kj;D2CeXZGXn);V7qkw}TXo}Kya?Cy9!Zf3Z)v`RcU6W>Fqk9im$;8AaPm+JKy`;D-NjxOPt^@)lK1c -E5l0x4IiMr(v5qojlyzkz~gM5S599GV(kO`7V+F+*V;nUz=$4i;fvtK5g2P1Q3L08%|`k6C3Foz8_7W -|&7Xk!-6e!%g@U_-$?u4^tth&fFXvsNySmrVDQ|*NU>9BGXD$hlmf5q9K86D;YzNyJpDL=n<%R=I?Qr -VQ|RjO;D8_DB#oSD+q$QM3RbHkGjlTAg{ -X+v0(Wph@&ptKt!WgiWZOoJ`l|8MB_3wN5%8I{0dm8C0hejw>a6#zoI+ts=;8a;~988lSkJ$zGjxC{; -=aCocvJnNiy@z6)=LW=_=Okth7o`Zv0LYOt0p1WJK*m#466Hgg2WxSz|hg$KA2lG{#~Z{*m&5qtKi9o -==!0FHTPMR5Le@VzC-#gvB0!KgABp{J;&mFiL>IHaQ#czSo1IwLAzq#j0*4_%0U0cayDo0Zqd9S5_9^ -W^4fQXJd+b8cDGwXwT0V*kA#beyFo*!+_Q&rWkt$QoMC?WNIz;V`P0uF2dMTYVn}T+ZlllsgEs_>co1 -8ZsclK7&Ys>jC4YDce!YDJQtG!&?xkwen{6P_?U>j^ -3P;rK5G~)?iIQ57vZF^0|!F@ldoC6ta4N)~2qH1D9b{^&1WuyFwWb!AH%O6Miqs6fNce3q=2S|?gv=YrF5aP>OrEISMA -9W6$Ut*~apOE}JI07fHDULjs}2K5~$^}XHLSA7bbXkQX|qRv4O7T5?wJQX7zq2XleqFy-|Acp|?k@1C -#>|sY2QYRhpP7^!GEjz+O(6@(e%Q;{d5TiX#B~E3GmpGL&mAK^w@fl|347;m{G!iEW+u0au^BIClNHY -PMcvbKXiw5iTyfbK`M34Y&V)N$ZZEoJYf_I^$F@%&4~r406Jsn@P<|;oMc(p0g2;PLcj$goH4@{fkRIfqcg8)O2IKg36tnOIhTY&_VzdCkaz>_|M1t*2WX&o6ClY&~PY8_z%6dT8cHE1!6Vn>RL}vEQFIf7yJ -p`E>KXksV(G$Mf30{rjWsFSqZqzh7x=f*3wIWtCHVKi~fI!P>suaNH -;0xqIdN-7CMr-%qc{amK-#g!$zkcdvZDd-;pq%Vt$ZW>>sc|GjbR@5c}Rx%tS*kiPd~x%8i0?Qg90H* -Oobz&FwmJl4PI-?`Rbf81Zc+h6~+zrNOAf7ris$;eU}O9%nqfjJ1f{Mb)6=P=tNIrHWWXpbb)n}bJ@LgSc -)dg{GX0--i2=nk*r@{3K?a7`uL1w#yrqd`<*QShbHUb2M8C&ey?19-R-<*A3-4bOFXvYfVzIt(cu=>j -2$Sox0X7r(DS&SQA=1~KA&04z1#B}jjc5c%PjeqF_yY`u>6{8Q6YxwF&f&Q0sCaZMWPm?6$u>R73%O@T!AucWmH$Q$u=J?Pn4^}~p7Q9us6IJ}N1=VVHVj^3sQ -A1XHId{cb47eJKs|DyL%VrFzp3PI?DU@)f&6nHDR;`zgz$Rbr+Dj32fTq?m=m2&LWhzDBR1Yj|mlj+4Bxw@N@zg^ -s2-OUl?{nh;sH$UH#_ZPRf7uWY!mv`jmmb|^Wes^_$b#o0*-;;~$U&-IEuHVfG18V^v_EZYg0L0{INt -S4{-7)5fkQPQHS+ba?JO&qz`*ng2Ygmg>EfF=-+XoY=d(9}o3Ir8ti&!jPN;a0b8>u~eBRE^Cj>sz=~VxH$Kpa -z1;VFQ9;4=kclDSIjUr&is?^3^6_8ioY1PrM_19oVs3eax;|UlrSM*6Q<0;8l9%v0_WC=FZYhs#Zm=b2zusS0TjXAnXi9}_u^PAG8{@tmtD3M9+Y`9M%2RZ%XliySt9E#=C5^^--A -l@V2nZAum8)n>)SLGpxUbT>wY45O4kv1BiWsYlU<=a!)DD1F+y7>bQxm~CL52$EhX8^oDyANB%5iH2F -M9a*%gGR3h>3mep-7#C0HZB*ou**>AN9HfN30XU9|htc1GeNQ3e$9#k3aKBp)5q#nh38Gcd&La%9Fd7 -LNDCA#bT^gH)?G^EK!j2J*anjMIcZ!9>!i@Wo^;{3I3rqv1(X2rSsT=p9bioTy9ga0T1nVaEA=0P5aM -sK?XuUJ^K!<7Ki0hdiau^aFg(W -(^NvyU8wfkI4PayBk6iXcE@YqU(0VWD;31=+Jl}q($vabb>V{MuIdSKDOig(;g2ND5ATac32_qg?XZP -vQQ7x6cwnEtR2*w`+pQ(19-r3(H`6e1uW2#cOWdQVH&@Tug>UZl~7V^3GIRw=o}ikU62O7;h8=gqaCX(K-0Z?ZC%ep%4o;|T3x~HW%Gy_W>S-GHs2F*umu8A)Te_1#(4I8+$nVD)4i0LCK8o>lXK1ltt -ajwG#ZbGFNuLEwpSw@}n&LUS*QB-LIeUbf{-t`i7`>5x&+E3}7@W>PcPtxjUv*fNfjwPP2h9a)u;(w+o-a!$4ZG}&IsaI* -uz^Cgz&K`x$(V^8dFHALiIsM)hcrT_wK@mc;3^r6KL99(EpB9TwBy0P7L8}{i3^<{iqJljM?{LxlE2g -%LK@p?z+DPdWv470!B(^usmlxTfkICHc3Gk|{*9drYF_U`7=ebGa!P#%_Kfuj8y@z}B%W23!{tQ~=F{r)98)@#25!YjYZ}%KwM=UeG;AIVL@87j;4T)u}da1qu>sC4~ -&w-`)qOw-Xbx~!ByRtcS+Dma7bTE7^t!vtFO=Z^$^bMdF|7SVcaW%bY_(-#geK`HtMeeYD8HFFUdvSQKfm%7j;hh38=m0-t-%r4>_n62Kr9I0VakDlNQ138B(a#kSVIvyYc6#KI@p{xD#;0Q0uv?@g -^KF0$(561=z~;^+OXg%%Df69ts-$_rujAzJTG4zD+j;<7t*ewiD5UhrNq`Xx8> -ct+|PqGF>%$BW_xX;sjFU+H7`VqRkpCDajG@3VTvi4N0n(F^%rjd_Jdrg?eRP%r$VJ}F6PCx -cgzBl^8B<*oF-RzZbO0~+-Z0~@92iC_&}yW-5F6;W>Xg-m*E*{-Yw`C9xphQN7+#y`t2XFQ*LD9@#Bn -9?2M$Rka1J5Z6N@Wc6SfMp_1k?3XqXR+l9Nn!QAh6?ftO~jJ2fca`(D;KOn}yT?j&wX+1&e9YoxusHM -T`-IA+$rFX64H>$m^0zR;?()v|fm;$5XZ?s(sz1lrEUlg*1-gyxCnNNus|WNuDxD~4V(wI%eb(xl#=0 ->}H(dG?2XF+t2{RTBOb3Z|C_o%=s5KF+OZfF8toJUh^mbSFO(L{@kTR*E`2E#E%F2sP@oc7;4Azb$^B -6Rqv}zw+Nsf1idaW?sEB_G5lJ4L=n;589us)YOq$1+HqdXDHVf;}={E-w#RAahkdB^o`dpdr8?ACp)y -9@`Nb>C~6q;=9gl196sU$mHD{x9pnaV1<#Li4@rN -&d^*vdq=ex2-0W-jaEQY2(?OpzKsY-_jnzh6H95`0RQeRZx>L;~H7Mt7spco29cj-%B&_HP%du-t*zf -BWw38~E?9;-d`zaF%{3E@dj?Bno@4davLmUiwMmN1^Z&v5>Kxt;KEZgsJp~VjfE=qPcJvPJAneB8`L- -uEmP*MKnttKlH;};RqK>1#$qJE`U%H&C>@bmH_SvCrKjLcYvbsA~##gFm+Naaqb5)5mvg8qJO0@`U5J -)lTHBifL+Yhnc~4u7g3gqSSD%gyGUgSKyHwE$cN4j{H3qTKy(sE0_1>jmOwp_+o4!So4x)Sg+&*sqY$comq4*sYs;rJ -R~XDf$s!j6~$C&wYDQ>;`3NsU3|L!dNdu2$(6XAUi>;a8J~#$(G|S+hvMtx`t!w?YXK0`qx0+E#lxszbU$58#gVu?nqE(iznmUT#pRdj<;B$)SU3T~=achKQz&PAHa@=|LAj77#=p -XgxcYo_dWwYswWBXkhbeL?jxR2MpH6=Hd@Vj-oSuv!@#7e{JNkG!=E9(A$EQb=v!OUSIy?GhOjs8{2W -yCc%%k}Fd5noz<`MimzMfp1V`Yvn&abENI)u7TuXE(DldJJi98D)zD3(vti!-by3KnoKhzww!kC_e%y -{sDm!S^p$Y<}8 -FELPovI-}iw8a5mB;{cs+AdwU}e55+!YAGBv5VD|gQ{15v#;-^Dl9Sp_$0f=la0Q5soz#lrR@YW^?AZ -{8DDcuJjek~6s3$AXGgzXP5x)Bm|Z%LiT_X8lR+XIx -tckNM!E<7G6*wvAbU6Ya7pDn!99I7i=iccL -n1B3xCH{-8+6f+u&;vI8X2!)AG(mn9X5xC@8AkoJ!9B|+ -$zi4ie2*iIJ>i5gFo#3OL4vHd4I^s7gqHY2>&U5h3lXGZxfdp%|ptG7AHPU~vgfbaifgta$;IPyx)q}4+j-mo(#lq(11x6j_27Bd06OSh8 -Tk=iGY_n@~S}z#yISYusx$ALr_c@*+_+41pI2^?0{?tCbB?Up|g|)^$9yC&KoMJqyNNClv9N>2j4^qp -wtv7r+J~aCT=s`o}oHwbwnZghM70O51WO3>ilzkA`>^R*azDML~N-tjG-{t#Xn3OVH#8se@whvS)c)3 -XpJia69Td|2a9po{`X;&p$5naX6$WD*frDd -x$Cj)rakLN$zvYD22{F(tT4(Z#eeg -;+JTmwxb(Qa#Ix?kzuAFOwDG*E;x(?27Q4i06mU<3QT=&V>Ob<>rJ_#<&E`;Z4J$U+8aM$3YJ5ykJIz -l=Ej&8ymNcRk~`a^t=e99yF{oa>a3kM@&Kgk+zzDqAgBgL@UQL-8ZdQH^=fF+3U+HJ(^Tut70Mynq*~ ->7qbtk(PpdQ2kg64EKeRO3`G|c{?o+P($1?!CbkYUKAhH?^=osTjECCR@rF5YNXc&z|da#!Gk0WeE36 -1L@?!|cl6?cr75_QE~E+7RGLn-W-FUOY$Z}-LA4?Q4>=t1PbBMh-q-DGDtaj}HLF%%|h7>VbD$1vDzIGPX($Ba~DPrp~^-#@~?jzrD1?+sEwwUhT=6090R137zLu+ -)9L8?a+n5NEtUDLVD&GeKkCE(8W#qSSfarY25TjTG-$mKeOgIH8K~FhGKOSLRnG^_%dB_3*s=f&?y4L -k;c8^Msj{^Yvc2|2T{Wx<>;5L!4FO&3_=yzU$|&3FQ;T3@hj<>$C5%#mh3Lj^iqr^J5asDLp;=NF#@E -;)9HK^6~t3*kX(YU$Vu|FUeC^Zz{BP~RL8bPS4## -xN#!yz!*8RT#YAe_*n2?}rI=JJwixQO4YiG+$e2`{61}dB~x7;}M9-XzV=LIUGNK;LrMMIP{)+1j-=dgx^lx%iJci`I18$X0iz6qy1+VrG&onVSG-)!E}7!tQKsu -vsW5dP_JXiy3Of7(gdIEya1{v95 -t0%^XQwAJKHi4U`;O|Whh&i&gJt`(7!Jf`b -tI(?u*DatGD-GC&iFMVhXle~j*Y`G*rTgZP525neERRAg_UkgzcDv4Whmpe_R&m)BB-iwX3;hTtSm8R -a0YL<(JezCJs>%-;xo)vg$3KJcLg&2g#boYRCUmyRFUOCJITT>e57N*bL_&c+{0DF`$opbdneL%FR`n -v|1>6oYM`wambPq2_6s-dR1FXcpib=!Q|)LK#!l1IW_qRGwUK -IaCAdz4WETZ@Y$tX8N^o5SQ=fvDYyQ#bnA(Yz-VwO^(OB@>g#|q!?ITK9k)>Bnqe$%3aOg1&^^j{f>@ -*+g6XNE;qfNxl~!BskS@m#o= -N)h!=s?Hiu%ZxI8Dy>%`5IqWNsp$XsAxj6RzHP9*2040^chg;$*nKI#jrIJ;F%>-Bh<=de7ZRkOPOpx -4Y7X5n*6&cdC`&gYSGuf9E+y$Z7A>9|?AW1$N1dBxgkWYeC} -4hr~gFj+-xSA-04(*EhZk@{d16t8#0P4mX`RLrc@^F9fcHVy5dhy*+?Ht(hCyq|3GNFbDH5V<>}1BA2 -O$+Z!>sjH`B$GCgXzu(y0Z_3?#XD3qb^E-REhA5!ur8_a3`|VD?dM$nPhCX;hSUjkQ;3^Prj-ky|E#H -md0ENdd77lQ*T?z*%Y5Q>C%k*?yj^Ot@gLwlLCvbMfJ%+&-wAAY;x?1R!&Bj)rQ)#x_=Gty&w}iWs-4 -bS}-8S>}RJ&Ei(q^}15pS~Fe4y4uVx!&065LagzL@1IdS%;HiQ8K*;6*DLHXEQWqIDe<#wI~vBLUfB! -y8E8+KBfY0=O8C%H0R>M)Ti*4^aD>#xD4`GF`>dqu&y_Y`~tX>|JVpK|(w6aSKSB2iZUZ{m+S -|MA%gyV4^ztFV(8eLdO@Y{w)Bw#r -BaJ;r#74;Q2PW79T}H~T6I&~{`TZA*vf@j{Sc&;xeKB@6yL>t@tvSr4+kg@^Q&YVKVY(PGd-T3W7Csu -_l-O>GS0&%%;QXg#E>Y9CFiS`9GxNXiyh8}r*fXhGbah>>$ft@Z4k|zK!K5M%TMdhz)wd=#v1hS2Z& -a&Odeb(2%H&x(X1ak%GV(Hb#lF6CtO>obexX1`xqMBVZW4HIekrg$DbaDbUYBzf&670@mE@=o$AlovT -zn>a8@iO%R1`@+J*DtKKQW2i%D+#so!hFOe0DHO=Tn_;Ru*J7m1y -2fDxe~s#>R<(eo|B3@72G0;eOCfx$0%9m-kk+-F8cssO!pUkIjzBVsvh>*t2&=opUaKYNX9+cF!055S ->;EECKD|%n3Ot#RKG9WYKdrT5auC2mo29Ot1dx+PLr|xm(YO8pLf<3iZfjs-DQDG=!L>vTU4Y@l8qrM -0R>frB)`1296&%Cmwc}}^3U1*E+ffxvlLtVjbtl(}g`eoZzI$l$cR_rfA7l&td=P|wi&c=KrI0w{LMKmC31gcYd6 -GgH-O$IA)WO(>HnvrUhIo=fa+oJ5B?m#A+{bBw!(ef$J7kf^77!Qmxn)!ba%>(S$?C-G5$+Q;=`c$hD -5<(_qD7pV&bEuD1?=gQm|&df$D8Ssrk+Os8?%1XQAFJn&8&w0FB$R1Hmi^Omclph%t2e$h(QT>_Td5p -2Kb*6^a(C$oVk30o*$my?79QDHCF&+XHr^nEfrsF>|C%_Q7n#Pf|+Av-^TJznF`0-G@Gqz -nb?vzd#n95uESP(Q4SN$4B1(u-BoYY-N70H)RvDmVpt;*?F{AsgkQNkI3tQERWn1nrS(*zlO!jHk -xRoX5zHT?B!>=PGqm>y9~yYW(rlc*wN!EVY;)+?z#X1wmIE{kvB|=XG@dIih%{HOWc^e>QeI>IetNm;y$GLXo7{q -ds?2)56?B_vr;j9vKF<&hQ1J?-q!28h(`!DtWwOY-S;gY3 -k&6eZP4uL~1kx`ernK=t1&md>5YXgibO$OAt#E{3rBe-HcRhQ>P*3<%NhI(4!jiKH4S0fmOfRyQ|pu7 -uTKqIGySa>YQ=;eaCiq1J^AL94NolEjmGKjAkRGPxOGrYsju1}cX0p(J2q&>CL-Na4qUD%j@!^HBA?# -V}@LPi%Ih;Ilis(Rq+1i)ycnX#h_SvH)d<>Z3A4LQD<2_IZbs1oupUmN{LjV%s5a2;e4&{U$Abs>>t> -&7tYrLU`{7Ma1$DJFCRP|5td7CJZh8+faIk#Z1N5>CxrocxoSAT}^&D#~X~Us{1Cgm4|n4H6VStJUO} -^Um0@Oh2kOQ)kU*;X^NzUwV^I<0QhBe7(yy=+RUS#8^Rt@JMmYsWWpH+s0)Dr_OuN4sv%qr?g4 -^u@hi=WqVHrw0p%dpy|KGwd^xc*ODR*U9VGdaIjp2bMZ}`jat))gpK!{-L6ue~33fsnH!BNBs{d< -sStUz99rBSLq#ms6(2xXqw%i#_vSW$kGj_Vxhz0p0AE2v*s}sh2mvmhG5#3Ny@QbEuhAB1->7TM#cMs -@RqT??~*;-CCA%J27|IvaiqPQMw8dMF8+VCSRqg-4!vQm5JQ92ksmnST#aQV)aHMlC~8$8-o8f{Rctg -Jx+-rAyTJ?l>J*#phiS4#iI~(C?8ENl}I -jY+|o8~xv#d%_-ub(@#AY3OzqBBW+`e2jwnYz+nA6Wk`0R-2{5~-yc?rB|VsaS&%SVT81T@QVGKsCM4 -`C*<$#A}eOh(i%L%bDlUjR_z0y$LxLU`cs4`*ue8WkI!S$qL_{b!H^5;W9+@{|)IRf2LoME-a5=sdc$pBI89u-N{vBZuG9l$365z -!Sd?$uD_~8ff^HkE2g5D90P_bq>0#|EoASjw%0J%al$FscaF|*DaD7Kj;-fwLXgtk0~I`IgM_OqajpcG&b+}8s&dT6iIe2bo8fVS!`qxs{V_H(=YV$jTO|PgtAdS#14L`_T2Ayr$bR|i@ad{;F28X -Yc!Jc4cm4Z*nhVVPj}zV{dMBa&K%eUtei%X>?y-E^v8mk -3kB;Fc3xeImM6z1QlEgN^v3R8Oji+Hnh!zNow)-rZxo^-TwFf@JDN1p>3&RpM-mGLtsg8^NFNEOGc>& -b_6Z~Vf;YiRcV9=uyfaz?&MO-V}hRj3p@@KL%tA=(psy!#xY~5YdC?vinDM>iR@=Y1G;`8l*!q#7q*> -YdCmAu5_7Z&JF`ESqgLuSz)XT6kgTizpD6}DF{EwdvY;ZCKl*Jq$Lb4EO9KQH0000803{TdPD-13rvd -^101pKK03ZMW0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gD9ZDcNRd4*F!Zrd;ryz3RLdZ7SAxf{?SO^ -W7_8b#xr3Bp>-L?x0TsRZroyIhj8+$4=IGIwWZhcmL8tZ{*jW*C$ns_N*>#H_Ndcm~}Y$5aA1c$&cn{ -~FOAP^x3HpKsfIfIhSRcu{Bt+FJz!&scAsg+Zhs4q5Aw2|R5)+{@9qw#Tw`n;aqSVtp9+tqvg+# -Y}4vtU?ozZs^IOst#r{!Bx!ygkdAq|!WA$j%ZSo>9?R>e}FosFNw5*?0L1m@MW;H3*}Ew?=!&V!TBHv -Jl&}w#CaVEc>X{=;i;MwqAVL1sX4lt$;-q&;z>k`w8Vjk;CJUHmlvRbdoO%`_8=3hI|hdsIHFxBkx7# -yCBbwQkG7|^yp*nKjna6^zaI@Ga+55XIoy!sBpCqT23GY>pE5o5rY$=PP3F^Q~d={O9KQH0000803{T -dPIwlb7KjA^0RIvI03!eZ0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gJCVQ_S1axQRrwOCPa+cpq>_pc -xv43i5(NYFhM@I#lT-GFT`ZK_kDLfTAUiCEwh&f%t -H8&eOs4SDH#U7NwHfj_FA1-BbvN;g1S;V*YH;h#+sa0ys@AS>*RmgZa=^GW8Jd6RJGMgO3=N~Jui=NA -BKB58tp|sh|)T-ZgMXqoHcKnu@)(JynOtKQ(yhmVzDSCHzwMlGbbCFwtBZ<_=x(6OHpwv>O*k?dsLNS -8}|3|^Ox;%&6Xb?etXzHEdN6gWa0>|7RHJ)wG-b-=$)C&zv22|MxSpU&+elOhugEoFlLGHt(~Wk@8#4P%ePfa7wx4DWxU8peASIs0OOSwyBAz% -g69$%Unq0XTIuiEh%k%9(3y$UT#W|X>e?H*YlR$SvzQ*k#F|n0EPPp_;xkGQdTtm_l#dJvz#KarWW1^ -{9eL&I`krBF)v7_F+Sukk`kiRrHdsm_n*~wTl^}9)S#+Wyk|T4-WP;$e0_2h+`0LBhViF?KHKfrbR&n -VbGAkLgk6aqKmUYwOIcE3Iw5iLw4)ooHo%kc3G(##9$y-B1A+Pemm+es)b{0}H%HOs@0Vzq?xO~Px@2 -ywaC=0d4Vj?ebhE>6Y|0@e?Wk(_FEc?#HykYl&fV{p8r+~qjaLZ2OaJ0-btLNlI!47aSP>Q=qsy>jD^ -okFhRCdK>Ac*G3e|gFJ`B?_JX=gk*)fUa!zzZ!r+)qJp}@Q0N~UWfcC8}<9@#Xr19 -o?N`vaC_4XZ1-YLLLYega{sp>*`8zT6Q4ha0?4%%KfwK;C5)l&V4)5m@B8uez(3*0^0szRnV$jR-RVZ -<@S>fIRby88tI+Z|{PJIDJ80OW?aX3zE%5;>aEfOT1NzS!gicbmEqau120cob^{EpVD-81h*2pMu9pX -!FPAYA|NMBdE@H^I$+upR4*V{?CIc6T*t1Z;jnI<&Yk`inm1h2nU+@cdXN*Rds5SCZpWN`W9Z9cTR%d -TPJP$H6n$kP$wESXK!7$Q=M(dDBGcpUoe62zXsyyFyl6%?_if~(k7y^pw?yyT>zlZZXa$0q@6aWAK2mmD%m`=uGyiGCz001Qe001EX003}la4%nWWo~3|axY_HV`yb# -Z*FvQZ)`7PVPj}zE^v9BQOj5JFiQBRt56k7-Lj`Y6^y03Y54d!#&~tygfwo(FI_L7IrL^R)f(iuySOAM -#=%$2oZgpVD^tR}GC83IFdwSszFGjM;MRYy2l}Y>a;`V%|Vi8E2@fE*6H5RPtu$-8@YimzH~l%}_6!S -d6qJ$)hVD_@Yne8=6Myf}1qT1RVMt4BXuIm!ZRCa{9k8SavPHFh8-xdXzZdb{W6Pn>v9x`m|^XSbAuE -n*tW%8&FFF1QY-O00;mj6qrthmShtW0RRBE0ssIa0001RX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eV{dJ -6VRSBVd7Y85P6IIvhW9*$CH7m`kQkB5f~uDfY96bN;Vr|I$|_#0xEyc9UBdsi6P6wwok1c!fCzX9d;ELAP+w?@;rD -I(wBZc#u|(8Q~FX3Xc4zMK5;1nTUC25jG!CO9KQH0000803{TdPTIDN+J+AR0D?6D044wc0B~t=FJE? -LZe(wAFJob2Xk}w>Zgg^QY%gPPZgg^QY;0w6E^v9ZTI+M$xDo%ZzXGKvW2%v8#ZKL;XMES3lgxOUTyB -zF?}O{pP$VSb%vTA}wyx9vy}Ni3;6qk&SIs2m1K7nru>0EugCLlE-cqs^qRQCnl*HMlteM#6oK$5kXi -C;)O&U(g13V=){dYsT;L#+2nJmXKBr7)?R&2~|P0dvjXS7J;+T074)5*Fnb3*f&Wl4rX%4M<)PR*+X!1sY -?I3m{x+q0tg^?Gi_vMlmOe~k7)fK1NdZy-G{!kWFUoWYMH~jK*-M|y; -MztQoMJyV=Ov;pU`ACw}i#1fWYhEgXxF+kKT6O+N#nOydcmA+;9Wctd0n)8w57LfT8C|-oMgs0FkO)r -~iy1jxoXyA?UY#voOqJ&TE=`nEaHh0XWm9KGS?6Jr@fm5|SnK=;c%`-;dhkyl-=Wcxn!@%6|K{AT%;uUE{J|DSrOhi -mb;yzCGdfr5AFoU)YG;0o|E9>*t58J -{*kdWJxkK%)C?ASt%4$^Kz1(vD@$7gclQIV}MOgw*M#VZR>&?klk(@_F}iA28B3lTRI~d7NY&-z?r_e04#wGIzyG!lo+L}{Uf@Ie3c*SkNR7<3C -k8YBrA#&REBi7Crc-a%z)I069ZndIftz(&gc~jQhy#QK!n0uNMRo>gVpq*%Faa_tkm&B!8+&={&80FwkbltKo4PLRK4FC^qm-_ -iO&DBnAckN_Z3@YOc=l?AxWGIzYwxEADoyJhq%qme$kbn%vbQ4`h;5;ZLlB4!=xa!cV^o1csBH4W+N3 -X$R^@e((#H{H>J^R4WPYC3M@Qi=c+a@R)v)S@Du4HE5|E%{mc8`s*zsYbqW=?@ut)U6qzbMJ8F5A>YP -Sl=_6(99Mo7s2`-M9|FtBrE3Z>yu(_WHR{?aB?71EbFuj^c@?|eXMuRkhEu>t##x2h6~Lv$4;K)DQxN -DN#SSI$TY*YyJ+yzY8rXpRQ?Sg0VuwngcP9rOYtxNfcMnd|snS>DN=U!l?iZ#~DemUufqNerVQlwnvJ -oZ&*h@1fKtWh3PFmGz=3iWt<(s0+YuGP@Hxiei0L{_^BFc(daeW!P -o?Ezd1VibRg8k6M4K8A2|NfuwaESSBNMB!%fRZBY}hOWf>9ILH+G^gwUv#?ap9a2I@UpfND!i2?Y^??|bkFtoee&guU9*USDQ*+oL`hs=gn-J>)Rn2Tb9 -iN>Xp2y&U*eP-H=Q}_@6}^SU{IKcxGq3z8o6j$+BK*eW(}gzbf(`j%&>q750mp++Grc!(>8oSnL9HRK -ysGnG-UwavRy=e1{IXWv2aKf6y`uFE6_R0rf$OzMqU|b3<@KwlSGo_&U}D+HSWs<9BW4cTb)a1m4nHT -6l%5t5YPx8#7@;f1Xo&ZC!3^>E}`K4ZX0+8fmgg4I;T3UqRnQdT>7SV869_M@bc9Wt_YsP`F -U7aVAm0Ae+~0i+o+N=(3*My^w!3M18y!2J#u@!ccm8*sRO3OrV+0J&*n1~8YrFYn>fYBAddt&xs4ZLa7@tp`u9dt!pKK8p=9- -uJ$M=2Zr3^v3hBDDbIao((rbxxv1ZzJ9Y6*pE%Uaja<=UclwSgdR;sgM+40Cl$*258>KfL~MK|VtWqZo(4%8)UeTsFkO5n`ctKW{PtTRzL -sw6PbJ@CPc-*y^nH7uCy+fHF|cJ`LC%xNWnTnL>ahEhlcBgDGEL7o -@r;M5~ySJA+<4C6nRV)$2vawgn97O$53Vb~D-O2OOeoE21|tb+13;M*t5jIAkJAE+<-xfd0yK@W%=Z} -QkfjKqL>#eWn+X$k!8J-7xv(t%ogcF9{qfmjL>2|{LV?_tLC%EsL}#)oMnFq~VvYc%LDH>jhGz*67%3iNTZ5S$7>&B^K^}Xcv-T7Gn7&Mz^pqE -Oa=$Ny?VJwD0dJQIP3h&^(Y^qXF4JEd4JZ>gdhg^Tn5Wj|&2qED^UIdmo{juUvVpMYGErOEEbWOLp{s -9=zSkPEDj{i6Hk+-hp8-RD>yqAA*?o3g2YCcaa|WyrB<2XbEppeueU0 -TR$K^GVWc_R^2lF?WeRRFF$-+3CC^%c_Vd4OJ2gI{5AKrITlRSHUVRI(Q(c^h0xE#$c+144k`w*cufC -nEQukZkCbMamE`#F=Ruk9Kvww8L^(i>9)@yi@BKRWy;nJD&a3;^b9LHoQZt)6ZKP_w+44vu-;ht1{h<9j1@ -;{a%?5S8R_HLqPkziXA9nrbMptTM9D*LYI$62e}-Pw-^r1=Q0=MwcOGQg`F2&E9Ojmw<#s|EPK -$ibs)KQAeuulP{+l_meAba3x^!j?>W@(da+Epx~|q?W_aSBsMAlUpA_cdT*91BPe92DX_hX6N|wX{mLX-Oq`20BoEVJ>%w@jF&w7e{%cc3HQ+0UEwN -<(eG8>%EjG_=%P_lhWE6!!=27Qg^^jm&$F#cnVoXgwx(+R=&0nzNe!uS&;ioE9m98?T{zA_*95GPg;evmj;DLP1@#r{y-&$k-ZH!-%p|4290>k9NeX8m-r@O -I~&p`r}>>YnH% -zE%JZSu;2haC*!2N3*uJLpxay8U+N#KjI9)Lb79sM=S3Oa(%zGrvy8z{#(%4`@E4@S7UlOg+>AA68c- -TikJhM=I*PcE8rXTuIaY%CP5+-sa_i1ale7MP$1^4jGwnRA*FgJ12J@W0FHH%L6nLudpR8I~(qK+EKf -Rjy82u{7DBqG9eXN3)}LvO}KB#q6f5}Jgoe-dsaDaJ3JebD$wWENX+5Azr#Ja1@QL=ZUg*v${Ewcvz? -Q~_UmStJ#rcs9PQ|SjSDY2M08sSN6VJE-@xnj`S#mU+olg0Y^U#lk1IT@l9>9S~mZ26b2io(ox)1+e&pN)R7?qm6@u+P_5?B6 -(DA}PSdV}pZF1Tq=aXqKb8HzI#u$W6D;3Rh%k<=j9Dd~M3tEb7AB$(Xo1{gXDo|H&YaUaUW++Co8zbz46#g${43s^sd(9h@NTc%<~5JientnIYBnjru++BHuS6iXvGxsZtnsnyRG0>3H -KMDddNruF3Cez;C%dIg*@nw%N)vEIgme@RT^w=*6Y6tMHuPIYo1G|6`IhDHy-4Z2NW2s27?FB~n)Pqf -d$@aW8O$cQbO|k0;nn!8dNGwbYrQIS>1jzx`KE4^T@31QY-O00;mj6qru)(f%6x0{{T!2><{m0001RX>c!Jc4cm4 -Z*nhVVPj}zV{dMBa&K%eW@&6?cXDBHaAk5XaCyB}!EWO=5WV{=2F_t^AeDTOX4BZ6Zk?~}@-iJg#923W%Ulxmnwkk$?Qr1>V@1Kq3&q4 -J)hn26svQF!V1>v<^F7y9S9U|#4hL8$=a5X7vdK$y&&>G#+!5}Iz6Tfmerq;L}1y(f~mprKqRSiwU;h -q!_4lO%MtxD8@0hvhJ`pAe+BNo509ugy!K2gQ@sl^%2VA{LHE=BUqh%=%Wi~RHv2r8vuDquv=X6l1~G -e`hBz#x>t!5)QYW-wNBI{rtS35ifc#QBc9ibEV3D60KX*%L(69^k98T$4q;g4YLb%o|129W$KsNzy8< -O%2Yd=SZRBFfQkhPH1cnAHIi({KEWK5i)h(yXB)G;C=6@)S%y{I`+$Qq -SpwvTkM59U=Ro`ZnfpWpulAnOm2toM6C82TJPVSuh3IO7CmauVfcFpuZJpF;3qv?^>_dyeiyf-_A7!| -aimynve>%4;xjGZf<*=^dlj0agw0)3#Xb8mAPpZSrUbLITxu~l`~fiCL+%zXcjJ&w<-1UVY8{dj -zy0-^sew>xB0k%CxPxXZ}<%cjS+o`MVmT%r;_i!%g!{7fukqP?3fda>n5z0ris@$JqCO6FVc+k{zHm8`poooh+-mXq*fY -Dho{hcSImd$<;Rx?daP?~kB;Hs-A-&H#wd#7R@rA|BhS>#Ja1Jr&F!RLGrf7Zx-63doy()LTCZ`;!=qYZXOc&0;b6qpV()B&d>PDua6!l_go=89lm(5g+Qo4W@>o3mmMtvjIKZ{|i%M~;Sg --f<^>NNR&eCb2fm`csUdf6k{|jFccf6zW?KK0!q#?L0YqnT566NcHK54O9avhzVM+GFvJ^?dQUbX#uM(@s`h+RDRO*K3v3Wq9G?9FD+$Tnp0ZL%^b1$(i*# -zPXyw^?U9ajW;vN$)JKb^Ji2Im)E?%MR^u~MI6lVnYLT{n3Wz6ZmC*+318gun&2G`!CF(De^A7+iTSs -Q{1otU?9tQjzdYlL$nV+JHyHUx1{&B7ZeP5&EH0J)pVIyfP)h>@6aWAK2mmD%m`;=>ZC001 -Tc003}la4%nWWo~3|axY_HV`yb#Z*FvQZ)`7UWp#3Cb98BAb1rasl~-GD+cp$__pjho7?nL+vSX*kjO -C$Q)1^SuZmol2C<=j=sF)2!Y9tlME%M)YNRhIoBu?W8S(kJD4$t{WT9iU+lwwABhGmb|&zcsb*UP0S5 -GgQaQKczU$bHR)EU?b7CL>g0sYvHG(chi2c`~-Vrhgt;4;f(^_j=2>=cmb=^Cdb#K_8D$KSTW$>i>)S -XN&&%qW=l~b-oOGyZa`Es{0CnQ^3@X{WVAAoS2hM&+^qQG2JWl96yQ7=Y1~VWrR?SdlYQNvbqWL$UfsQe(A_7~F2K-aeN=~RK2!t@t5njJd9T+5>YT1gV+3d4Dy0j;wTgPp+a -<_(?}#c?N^wmyk|8Yw!iO1$wjvVOkl)c9twkl_iDl8f7`a+KpH3%ejDnAQ7CvdHTJU@aepT9q -TVtmV*5Ja5S~#1aoF3Xxy+)XCA)AeVxd-k056ja90Bj;S`*88@HQ>3yTWBnvvMM7;3Fwv2?LunN=+{3 -*FFDP(5CPWhFg94#CC<=lTNj*BDDMbyp*vPU09+%HTe+slP0$Ar{c*bk4wog{K8#n5YvzH4t~8=i2ku -632Nlh`x{Fo(+ft>K1V!`S#nzvad<=`<0=R04*}ZXVC%p;TV4euEfFOUaPlzI5 -^0?sb-pd;N&&l{%MLGwkC@M-}WSF~=s?ZcB-xijlk+!;d1-?nt*n4uf?5ggUjKeZ;J -_Cy$<#(WJgXso(Loi`i{7Yb72VdJo^NF3bS)-wz5b{+g(}80UKlj6-x%;ws@paI)*EsXhe|0R=VGH;9 -0cG2u<5X}h1+ylCvRc8cyVGY*rK$O8ZTFSU;_;#nhcK;&L$LN=MU+;CwSY08fRvkYZg{yQl8Wq}5+@1 -eR40im?r?au*(gl?S4q>7dPO -p&Q*7(?4w^l0U_Xcb42bry#{rChnpGQa0kyQfj258cXnWn{%Fjj)&6(jYQ#L?j!2sRft5T_C-6A-xJK -D{>4*jGimlTj22YanE)zB^YL0nts2_ -ZW3Wk9+XU7ku9!|>#pp`ee)!R>o1@8O1eck)%+2M+2+hp9*a5n{G5CYQE3_umwqHk!cG!G7Qn|#bh#QA#jh0-%s}A -el+_Xfw|-4U6Y3x%)+L$%q?{OI9#8Rqszj+^^`U^NL+h;?EIMO_5KG?O9KQH0000803{TdPPkDG57`I -+04f^*03`qb0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%giZKk;ucko~oj#YSkFnGR?oeTn -YCtp}MC}TFLJDw^D3Zt6ifis70M^4qO(h0spnq_chBOX5X`h|F`AZ=uDfY%}v{I-R*ger@oh(OD&8z@ -HZki{(vl3Rn1Jd@L$*0KmUj8TH)dp(esBA{~G?;Y|N?VtJSLDJJ@W$z1$Q$R|Vf}PloGwn_R5`e+|cT -rPngUWo}ix&A7A=5!1O4QIae`q1>?^1IBbT7OWI`{SJm?(1gHS-~3(>m@tJ-LlLtOIAIC*jZo@8VGxUrl0+??oUDYu_E@W=1L -ka&H5cHH4gyk_X0lrbp7@UzW@I3pwY=-_K1)F6$k*dJ%jgW6)0JrpycczO7P34FJsphY3kiX`ox1HqyivMA9G*ZXD3@0Jb(y(hF>G)(FoSOn<1#t2>1a -gk(P~lH>6BP338W>mi3{z+0_`SLS;Wv3cmj-CLx2c>_YO|MECe`Nr!cgJO$$pxHasZ2wNs|a)Jn>56ufYrF2rt!`(%y*z|E1P1fgt}vFy{4&#-K&p^3ChvkuA#W(G7oq)K70j;LMJ8)b%7D -6T1eAEY`?1k2!^YH}Z@Xh%G%6Y(g}PusaW) -XORF&@v|T)i9@Yf>_J}|Y+GH#cy;)j2t}5Z4@t5)5KUTw25F@W~qirxiwGA9ta{_PCQ83(~9q?OpOHn -aEVM+8KLZ5Ucc3dHGncziGey7X(GcsM5!o*P;jonH9cWddiG2Ye8P=4h)@PvDnSliYMvEsgO4y8x -rT~hQ!M$|oe62>SYJ1I{%ta}UZrBito5ReL9g`!ehG^&ndQjO4n%~=g7<>BoeF+co0DZswX+amT#?=A --PmqUl`w$caKoEQNF+ewdY_tvNaUvblIXaOcP)A|*{Xb1}n#3=;-4i4I@li@vP2ttxBmOz -(wSkZ1gSSnini&iNSOwcaR9KTmh}qScEFYi20Lmj1E^ZLjuz}tz##PviI9 -U8Fb6oRve4uReRFkj3xD(SMPtdm?xet1V|P8N*FSwL*9k7$YKv=CYdR<4mJh2j4*tKl@7mh;=H;u~ep -c{f$0!bj#>pqQg^oa-$!xen#j(;BmOto|3qUW=;|}*}gIUiE%`!IRqm4~~&EfYyq6`5mW@1E2l6ag9t -7$y^fEWThr=^&9G4xu!nT~wi#M@(G*UH?`XFNIutthX`asu|L#eSdMOKlppu?#AqUF+hNB1U>Nu_(>! -hS%7f_5J5G<860Z1UVl?(ML?G-Dy@xu)!z4(CK+!ZJ2Eyp>0YWk1u+ZaANgMViq0|QcTTr%wd#-`XF@ -c+4&h}9iHph6!k{!E6$`QW9Cc}rF5AT02Muh2p^ADx4u4+Uo_Gf!_LyjkkEZ`2ooqew{_6%x8=f7bc! -`Id5*~5$|3nlijScQyU?AA=1hwg4}iR6{hOg|rrtD<%Gh;LV_8wNXG4_lyK`g)J@-U-X@`!LLDO0V0>Wz`_kTMAW5Pjq9}p&8lrsP$_HLdXt3LE1)XmXq -<&JQzFO?u(KMoV^ej20Hkmf2NWW -(~v|DxG3pH5*$$+R)I-5fn(kF3)%&7H_dp66sx+x2)9T%YkjJ-tvb-~GXdK%QQ9g#vBAQ)JeUj4@T@a -Cbh+`ft?lKRy$5J%Hllf)H#?T|Kk1zQdd%HvC9_s6q&d55ZHFdeUE=xijZq5c=krhsTC%Pref?}(MkB -In#J!MI8u>lTPc9f-N8@6p8$Y`l+YOKbijXcus1DIZMNjH9)}l8lK#*}Ir<;cRNzQ9aCqJjeoCKf{#WJ6#j`~ArnPrped+1SFY2R -lOX}_?>0(lAL46x8wl`j+5A|6A7XOS*A0IloaPBb{62FF -Gi2mCzaU4AiLbYuNMd1-H=HF3nt@1p+`3H}dIO9KQH0000803{TdP86=8UFQG*0G|Q?03 -!eZ0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%h0mVQ_F|axQRrZIQjMgD?z*_dG?^2_#hZN(@)MbEoboH -<%JB5M-OBPk(9nNeE@Z_W4ds4lTM~UR9$;29%~B9kRSD-ND@rjL!Znl4w1sKgx#v8qFRRLNw4GY?+Yr -LqJsc${VYP8zAayVD+NviPJhIK%=aA14d{E6B=TpWBanj0@m6pqDWfra+>>%>d!*m19z_3wEQN5F01w -JFkCOo&j-)ov7Zg!VvCHaWr=8CT^!pro2U*z6jLaJ90J>`=2t487S@920O9KQH0000803{TdP8q+rFgE}I09F7104o3h0B~t=FJE?LZe(wAFJob2Xk -}w>Zgg^QY%gPBV`yb_FJE72ZfSI1UoLQYODoFHRnSYz%t?(;PE5{7RmjXO$S*2Ua07}sg9Q|n74q^66 -S>mBDvMH6GK*1_27!c7)dB!eO9KQH0000803{TdPV&hS!4U=k08tPC04)Fj0B~t=FJE?LZe(wAFJob2 -Xk}w>Zgg^QY%gPBV`yb_FJ@_MWnW`qV`ybAaCwziZExE)5dQ98!MPtMcZL#lTL%OPup~`@0I3b6+0vp -Y1X?;ptR+$)sW=|`<9A0=Z&uQ7{$hzo-pg~(9Z#aFmA0(lrYOZ`Cj6^1vs|l+S$MKL&1)9cGsr;NnHR -=!%F_Z`**Q0GK?|K!Nvl;^f^N4s@kO^hn_0a-nKArbi4s=IUa3ZAms%@5gQpZ~%T~Msx8V1^V)gz_{P -FoS?36{ksZ>F`LaY$XQ|_Z8RjR2AS-%un^^VUZVOX%PW<^qP1`jOv!T3c3fI!6?41k!4|?WI -<;g*G1A0@WkQA>?ht8mdh(J#81zV)c%9teu2(moX2F14y12bOyJO${%jL(58@3Z=$#O1ACUUd|&J^RN -2A=I1JPBisv%K@Rf;NB7dGlJr?zKB+;yxHtLn`vUcYgyZZw!!*Ha?IBkwG!H&MbvM@|qjN@CdF2Wlo} -c=i))6-%ekMtBv}dVp3U_W9rq8nSE6Xxi#cKt>F=Ag`riTB&sI%Z?_aQZe! -V)o{q(XuFK?}#L$0*Tf(uDCIuLJ=w+u=^+Ho1kL2x-&TqcDHsxVpFC$OtF`k_$`m3r*!VBut;?xuy*A -AQB{T6R{Au`aF7gO;os$~zbwm0UWJZO$_4;xcFg*I%5i4WM3OAd4|eT`@IQl;R)M!b+8HLmE(-DO6Kt!+P~ -zkee;vaT_uPs@kOx0m3()ZZYssV43eDgxj!d5r5j|HBGPv+h|GW^30#ikchj@d@&m&dYIKS8RAqa){} -;eQSYzGDay#zJL+}ZCthv7LTZO>N=s#sOxdFMfMCM@o0il`s9n1YAnI-k9IO~dwe`n(XRh7T*nk9C`%}Frz^}zFQTQy`9Bb}Zihl29;aMVI -nZXus9wQP)T7?v#Qx@GoI8hXO$+g=vxW(Ha#wf5tPs3ahjfC`@&*!7H)%x!8gk2-6b%tXFmI^^cb=wPBSi+xhH?^s-L>Ky_;1v1Efj79+?P@iRwj4UUcqYjMC?X&IAa#H=9$P(N*P%;8ejer;c;Rj$ivfEJo2)C@qYe^IYMMBEDe=){RL!-YN -Dsbq(g?;H#P--^X9kcDGpl~i@1QNOgwtVT)#iLv?k8cbUeRkKC9OrtBkOOatcV?XR60iVNuKaFB(d`iq`^ -HP_Zbh?jTd_kTY5{mX*=!an=gFVEa3HMd3lRS6G6PlqLY?Gz5M!u}Mn+QNPS6}i!RMtG9+^J2>2;AdXMG>b&T`tt2)^4)OIjs1Blk3J4FjAO|jsaO9foIyU{^DWNdenf%3X2MYaa^M -Iy&cT2OOwp5UDDM?P_dwl8um&FgA}XX#n~U_|@a?K1>^3CRQaBe?oXfxUh6MreQ>)1 -9-RGdR}%PhW;amj<5|5RIZDV@UPpO*rVh6P^Q4o9o>u^&U^0t)T(#?2oU0R@R{yE^Aq%oeDfiI0-)8{;09XS604@Lk0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gPBV`yb -_FLGsMX>(s=VPj}zE^v8ulEH4nAPk1@JcZX&B4s?lq+YhmPCHE688L7=Gzt+WZTI#wNlH?w<&@a|ets -MGDIP(oe#~P+rNAABm@-&*a^zwVqAvwjXUy)1HNE`L*})A`oiNy#q|xRFO$<3jKmS~rS55d<0zwGmH4 -%KGbu@*VnrvT$06rFbw&jA$N;QPO?|@YUr(roIC`%0XQ)=Z7m>1+1|29NIZZfQ(EQO_HMQMw6aMFIn4 -)8L#gtY&N0XKTChY<5MyT)(aNt!QN#M)Ygp754ggt(vU*K?h;9J2}W+_aBx!OMJ)3%OYYWR6*TMdd{- -HEmm6)Q&BBM(@sRRbPs3XJtIWX4XQvwL0)_i+@l{0|X -QR000O8B@~!W5m;ebHUIzsGynhq9{>OVaA|NaUv_0~WN&gWV`Xx5X=Z6JUtei%X>?y-E^v8EE6UGR&` -ZuQN>#|rEyyn_Q7F$yElTC$ijOZ#Eh^5;&x?;&uvJhpGBC8%GceXOuvFp#08mQ<1QY-O00;mj6qrs4? --cJd0000r0000V0001RX>c!Jc4cm4Z*nhVWpZ?BW@#^9Uu|J&ZeL$6aCu8B%Fk6O$Slx{FH6l!$uH7N -PAw|QOv_Zr%q_?-Dp4rUNG(d`Dk#d#E71V6H8eH308mQ<1QY-O00;mj6qru^7Y3&2RssNKR|Eha0001 -RX>c!Jc4cm4Z*nhVWpZ?BW@#^DVPj=-bS`jZZOpw{vzy4iC;HB(aCE<%4&AfGJSgHkFbhc_ftX)zFb@ -I^%<$=NqUGhXUG}bB``nK13Ol?iCsGLVH~jyZ3;Lg5l(y}YX7`2H{!6YNVNhL*?Eb}gJi0GD`{n$7;e -GheHu!S3{_ATk^gq8``>;%+?%(Zx3c{q?efb}M?)pF0!IP#4Ks8Qd1O;O#MdJiR!4yd{FifB@4%(;!@ -kJ``S<*b4;tnQ)B|Dth5$Fyfb}+LekR5~W5@Z)rJ0jj;)Q(AaA+n>X9m?$JV7<(qMSdIu)Q8cIA$N4R -i}78G@0fT;qB}I$1@w*yb~Lg}KdykRmkRJ567Ohq$3!3Fp#=Hkh{<~(1m5BBF2Q$UxC8Tys2z^(B4(F -h>xeP7Ly~peb+}-M)4Pz|k@SvuPbHyt5vav>5onq2$Y>o916@EZ1O4avA1BI+_JtP>Q;`&&HN|%+q$- -LKn>^1}XvU5T$7afjW8eRAlGOzxp^t*@9gYuQ$%jZ|by4DUcC;7qq_Q^|Vi8N^a+TL_)+C#(%VnC)u@ -6%e<2FPOc_?X5AH}oq?sX9=PNKk`Kiae=ha3hd#Pm#u#YtXR|D!@R#oLdat(qBPo)dJFO{5Vf&H_uQf -;g!qJ3^|!1)y*Sg`gmN7p`Th6ixiX9zF*3O!jt=RO2>EqbJz9eiSEeAIeMtdCp`8PTVUpfu39~R}FR) -vUj7CIL6lyWne|rIMrxJS$~&@E^@4Hu`I4|!pN@mNA>} -3wk`xhANWuiktGgqj_EK=1+G@X=Bezr;;TK?wy0kjTD}-~9oNgW#LLtv#|^0!9vL)q&HBOcgr*t3&SV ->zdv^aY;iIa;c4=*KEWWB1XGIhu^b=2E+jDiLpAv)1n5~)o*}Z8CecL}F#A(X*aU<>WhKHj^7jhLIZ< -zE%u6U^2)p~oQ=iX(C)Vf{{2fXUSD3(dnkoQIjeuCP&bR@Rii7jl(w -%@T=VG#X+G=|OFp*?KbD8zEfSOa)J}TIH_5y7QybPZ%sN=Jm1NF3fddH7>io@>?M@Bg{eIJC<1X%!8MNMedh-Dl#anpj+znDu& -XOj=~X1FH?Kx$7ay$#G;tSeLalpDXjS8d4c8<$<0`k`B2@Aq)>W@71B*JH0C|msT=;-ctcTm6h(5nJ= -|q}fbk{LPmv^B6_JS$Mr&!MS@vug++8)|*wJkvWo-34%jK5VsCgzlI7DB=k`D5nIpqh%KQvjD@-;Qr7 -l;i-yVJ+`nG(;Fe7hwaxjd(7@_OnxACgu=(BnAd`@F_qljKcR%-svmYBtVXyH*fG!tuouhswZQ9zzk2 -@e<>O+l#{tID_5xDn}Bf)i9>D)f+NOnQlmU7k96^QHEKliqKxQ(x<`=(p5NM*{tw6=J=IcY{l|$y!ua -^{jdM}SkgpI`167W{SLK$fExfbzd)q_{9>TL$E|;TfZrq6yTxzei=+ -#*J;CEa20E{u0L048`Br7If5Fev;bd{M+Mfpihp&*eq -AKVDYMJCO;j1qJe7%l;f-eF0Y9fPw316llg4F^4fG>VhT?3s4ua;U1t?psLeOvPt9?q;%nZ$)PKB0~O -4xJzXPv2FlKU9Lcai2$;DtG{uL_`%bfK2S@tYxM6E`z=mmYk|y*>V4gJX8D)VSWOb>~!U>ptGrh+w$= -da`pJbNBCN~)&W%fsSez)tMcu>KwobR2X2f2py|R2pn?A2!Ot9f3@-!uJho8E)>IHRXl@x;64*N{y4}};WOYKTsv -s9l5Gv)D9)aG+%w+@Eo555*3>D{cv`{^Jb4dt}N5YM>&a=E__;dh5ehcT -m{7x<`U?*USdr^l1YHsJGT2i&WIy#YtUV>qGO9P-2+`uemj>(h3si7Muqd3_H~t}>r$&`4m@_f@Z|C= -0BUf!74jV%ML>WRxE=gjF?M7g&mMwR|dn1jp~OvGyc0pQcBJ2L^TKj=iX#Ubx&s2YBm@VHW9Fu?UBTC -X0~{YcVvf_R09Pw7-U2f35{qK1ki`rrfCdslu&SwrpO!e -=-pk+-}f*w7nhe5>ZzL&jv<_qyL}FZEA;3#SiuNv#@!+#V!QHO;-|oX?b}`ALi-}cL~rafA}8}rztsr -&AXALIiN};zHE)U`HXVd8ybp$q5Jo9&_K$wgHF#PQP|9nyI(LYu|{5GK3^lkS=OFHl}-M0S`{ -jVhYgnq(}25_!xId;xB!he0kif`6meezj>aYNWXSz|IImmPX|z#Bx#&vNR(o53dIl@C2*9Y -XbMJXm?23}h9kcu2T{E0L4fK3wTj0GUnSuO+5`QG18@b35}@o`^TNz8$pIh)XuN~tw@Su#c(@~(9Rmi -7cOigyVi#dM3`kORM-V#-2vB&(gsTRP$lq&QKq~+#0b~UzXCP65LQaFVGn($ua4kgPRoDU<8-=@oSpO -HuSU?@9c&#OXs3vwK@un2fS`MfK749e$e4M``2co=!-Kg-Q&WCB{A07))^s(FD#C$p?jQg`pr6O^2;2?Q)zhydV&#_$9furT%-vRI+E_RJah#j6#yuYnrMD>px+1< -Q%U9*SXeEoOrZ=mLMQCOfeBQwI{z3np8~DdZ_&0ChdjFvR&JBEj3;&%PxZXeL;|BgnyZ$NbQhV|)o#= -$4gMCehkcOR^jaoGor;O&7MUAbi-}DBN=%Vr>(a}YWDr#9LTrV39QBJ`s6uv@4wB+-qKs)GIOa4=iYE -uJj}lERcN;}}w)10z -C*St&H7RM){``t*S#fwWJwWcbj97a>m)8~xh7+j=L7`6OfpDKCOb~^}IFj$m|S0g(T`F+lin9RHF -0QMBbR*Z+5I`lYx>kLLN0FX8;9Nz#9O`Hu=b6kYqJDuVDI|LYG5@cnqFwMi2H#7h1zoZcrH`M&njBz4 -i(U*5xClc;Z!m23=2^OKLx;3P~kC=UOMTO`S9h+}W(8$(z70ibw7?h-&ah+RspPI`#%F#Ij5 -E+_T4GBP40DB0cb=vXU<)E+~4X@q<9IehfU=?lvq(5c{P=GwrKic@i$4klZE!sMR+1115g*?qh}AQ7hbVQm9!{pbu}aRO*ReL~^!_H#R}itfe}^6R -SfT;my{c&58H9LUTZxCWu{*{ljWel)*PhFLB3Nn5N@Go=r+-efW8T_}i%Y90V*kYON?Mlt*9&X1k+!{ --+yRu%A%8#w9f9m1ef{o~Y5u%=rG{l2;)15SZ5bHwAB2S7Ti?fO)(4*=dBnB}5?dj)xp(jQH+QhD|3$ -ZB+y)u$qeVA{9rr*A1UKRQ>wATEFfeV8xoq`rP`_*azRC@7;QWY6_M;*>vWW$`N*(d=5!XU8`%H5PJu -8ArM8U!}rEwp8mc=m-zSFm^}Nqq=M#R6Z5sy2>qjn?FXaGmi|C^!vcm{PRhEBDAWC_U*PhaC!o -@p8PCb6bGyOiQS64pv}$GVsGr8fvck&^L)J&?11E065A1W8!^fa>T8o5SGlr#7g8&3xI_i%XG^&~q4+ -hD(89X;+lYS*US0b0R=!iyBs)BQN^b4!bEtpsE&RpcNNt;tYc9_Hbh;e%3vnV1z3mKT$*kG-8m6rcRp -_rChq+aFDkfF*WbL&5t^vVJKZMw -CX9&q1G|MK_Ye!;kqKQI?Fv^Wz>bgZ^S^KPK=#gIoOcdp(_r(UX*HD=Lh!Y^e+1=BT{&?J)sYw5(z@} -9GkT}kx3A16%+a3F{8MAdsMMW_VA747bdB5ZGNDeI=WwGbBj-Pih+l9dO#K(uvvcgHVwey3TEht=$YI -yDn(JLa$`4>+z3oGU^y+6NYw7znyT}sSS77zl3ofeF5-&(Cgj*E$WL~UaxjU|Ay;ofhNq`D<6&gL -1lXey?e;T2Yu(FmP!7Y3UMp?*u36q@<-bTkjhD4ZM`Jj^62zm~)qQsec??$3cBvdAC+5q10gIKC2&4- -c24-BBAT^z;+2bel41+?wCZ^d_Q{E0f$cNtHY-r+5Wh4o`t6(kMIdT8k!O2xp39hnHb1Hc%>&LEKmVO -||K4u?*i9|8>H_1yxtn4*-z-945_&Iq>%F&)?Mn`2M5%Cr)tRU0T^#OEdL1| -l);Ix${|2QIaJjen5CD`XSK%MN;|~b>whsUS2;SyEuwFQQ$I(MR6`v_{WDDb6cXo9Mb -!slsX*u{?1%aVZ)e4O&IALw2y~~F=~z|x?!o%Ni;q}?%HghHu9DhX!veS_c%v#kTu3k#ed~BdvKwOgd=en^8gufSfQrOu^9&w~UALlyowN36OD7f=>ht65Q)W^abNVw1*S8^#ENbxaNzqXu -p@0FNQqmoX@-YbwGyWgWtX6VP%Skz}xUa_hi``Xfu4@*@a(~DkCf?vkPX13K;oVUEp*kg -3zFC%w4a%~^r@f|F*PYfB#woj#pAs!TwIkDsG+Cy$FY`T{xZBJ&*AvYe8ZeA^4kf(FWZtTRkp&}>4St -9$vVo4&&1tQ%}ZWn|L;1T`|#Sw#9H*A@Gw(U)1OA$xhoUO -%6corfv-&c$apZ|%Llvx5X?mRdv^@_w8z#g23F@KK|;@j%ou^FNDmFA%sHxZ_RKJ-$(-V7#7SM3HbZc -{)@WifD8%G9Q=u}QA1d#u8F_SqMbCL$i#)aY29pMXqmllm9z0am#cjJBwar=eFwxp}n3GLVd0VdSD8W -=iAZ`{b@|_vClON?ON9189ZQaerH{?>FS-!jES8ch8NN}5yyx2bY28P7v9ecolhAdOU_-N8aMUwKA@; -nfLQyZr+MaIx+1CK&(M83h6L749|Ny$_?TS~q_xAs)vQ=rwQ!oP6b!;+gWCd5Vydc9fjvD!Dfx}bMo- -y&OuOuUxa8~n(*VHHzG((ly?^{)tzq2e1l=IXD3 -2zeF?`UHxW&7(fI9B*d|GJd$3)2aE@BiDcH1fD#2LMucnC8WaZ&=-=s1ARp5;5eukZ48S3}4wR<56kb -In09hp6(eZkv_`@ZCN7u<@_0WMrO@dV`BLKp}9SzzrtJDQ>3*;;c20{N)cWQ6lNq!<4_e(EJ;D(>j%m -iR&LEno|-7#*TtGjL~)1hQ<-=v}?-TZH^tBuF9J%<1uAVo4Pi|5Y1YhVB;nop?vigcVW8=uG~C3~ZaY -VdBZxm(u{q=UYLx>ZB1GH5vir~^p%bJ-X!KO&t4TN5M+?DZSe!QW3);?=7+9@x(aI`YfeKwvtSEwPyi -Bx4LDVzB%KgWug3!_8p;m%ZnV@6h{-g3#ZB!BdLK<)x-GRy>*a%&dkE+EY_2&?vGg&gjySp=h4nCts< -le@+MMMc+2CAou6Xvavf$YMg4WE$6|HSGNgIPnUsu^|jTOtlO7BF9pbGx9Mmu+lTrj;JGby`+S$(k-_ -i&lfAHH>jlq5QZ`9WN-s-WT&TX00~em_$iGHWsOcWt>_q~`Io#u4=lT&`J@0nx)K;X+*YdpNTA41-Z5 -}uq3V}~96u{;1A*YDGh0rm9=TP&V^U@M$JE0 -L0QHaN#{0>HzCN0qUW&EK>z^bo{@oL3ONRb^3v@w_Q-X$5q@}Tp&x|ki4Sqbs>a -SM@oeL8&tt6nMTB|=k;S*fne@G~_*F>>UQG3^?o4~gQ#7N!+~!M?(oEr*6V5u%kO{U*dP(;6LGhcyWT -RtVIyBu8#-tscj+r)QPmEh*Bp`AedCSndvVk33-KWOgy&sNP%ZNuf_q9=!6Y{Qm$Tcs`Bi5*vbAif>g(5uL+Ic&j -xdM*#O|V4S`ToFrc_XW}ayjjn{bY!X%1@tOh7pev5A3?%)XSPrqTW^qWpbGNZI^P0xjoV -OUr+30O3<6qeY_yG_BoLMDv%KU~}Q129Oz!?B}z|%DWE+SVJ5yWds9AGDKveqWlnz9GvHx;c+BYD#dA -hbc>)s-jLG(jNO(Qwu3fO1ga6D2!5`b%nYTT{WY`kPoboKClYV`;a-kJt>^wmL~AYkgv~V109EzeRXg --}hV4cK@Tz4gKMBt6AWJzYb9XiZOz}IathY->hyROMOrWq;2{&S$ADE9q7ZlU1@~(opn2ASJ3!Wik-^ -0pCEtxqyAgAUj?nc_U~-%ue=3SO>x#1aFJ4l)#}Y#zLi0m`7Ru@ko^e(Y*RJ7QDQ$40Qtk-{u<<0fxL -&b@hf>*I4s7Z-v7~99(05=6}eiz+1p@t-s(v6T#;Nkp!c0Ma&3c3>&JL{@%H{_RbbKYtp9J{%$geZwl -Y^JIsDP!Tk<`?AUJURr-w@5U#16i>ob%NC*~i72>NSA6xiKO<2S9}9cxCx2tz&Fkwmo`AzIP{(t51jJ -|A33ium!eV4~>PryHEejTo41Xp9F(Y1R8y_1cAHdMv}*jiML{6&{@9F~uSLRI!nnN;4dttN97w{%Cu- -8yd_Vf%##Z-G)PBQi-YcdM2@3-g}Ac8Q@R}drLYn(6Oomg|OU{=p=iT5E2Jg-9x##9#ctyL4V$1>cPM^D%sTv>sdkfcj;x>mRTWqH_5TtuG~3GL4GZHqScAXHWqJ;~(0(J>c}Gp*)&_!6LM`;8DmEqFznzn4?ke5 -Av(;z3{wC}ZjO!}8TSKtJbT>D=2}LgE&Qp$BX>? -z;i==4kxj-jDz~c^SxGx{&4Kj$00N@I++y6uoh0pQ^owL4sM$7yfk5pB?E~~cJ?X>{%0w{?;k9ijRM7 -9*wIE;AbG~07#?d4Gh8e^0)!yeu-(t)by<@L7fyYB6i)d+H9jp-SevY(Ot?_)1`tU8jy?S-C8MaW;lh -XAS>)D0ByW-0_RkT!_(^XFdt&=Yo);g1S8;9Iq_fje|;AIf_MB&9lj;n|Ecj0L;%Ne>X#%SrPd6&AY7x{K#c=Ek0&dbQ`9@T -KHb5@4tpo01NcmdUpwZ>3d8`N1AOfPusCE^As+xJCw4Fp_{jP*0RDhlli(S0wYX`(F3{hQ05A$otnM} -%?@(f;AW^*f?lHFd@dWv%0`S{F2Q-CVv+KY|2;K%dpdl2qy8jfqc2Dp%q8$>eX^y>91F_&Q9dmnKtIP -S51PE+tIKRx36O}(<9P|^&?R|&&6yP5q_tPe-@9IByW4(p;*Ti{c)J$bk1^v6k`Jc*4j{n~2fW9W1IV -z`rIvtvU+QX-w`bq{umAieCf$R76&}Xvzd(YS32+yMJ=y{94Knxd^a^-IvhNeTIyhUM*-{LF%h;wyw% -!MwyJk6`P=an*Wc&0vIYld@+)7>l|To}Kg^e*3s*2tcXFl6WJ;mB^1LmYP5_S`+6`+coeyewGOJpj_| -sq`k@OgYf9($jWNwlF}&6=jnu>FAzF14d!X@Mdi|-PYneYrHfnY71kaEBi=edbI$}RGTVBlY;E-k0y} -x5aRYvIYMl#EnB$4acg5oCO&rCiY>Kas)@EgKf$uio)ViaYl9!D&6%f+z3v3e4cVuc1} -*DR;lJWHj+azgqI+*2J_U&topDrVy-vllY|Re2owj5Ym-~yEUZGBRY_F+n>~UkXdyB_# -;WkGvD`&Ev^@VSrmBgy)S+vDM>G_ImJp0O4H?krw@gZ#kJc~i(w}Z -yWsmmP#=-ArJ?>sZT^(I+!p|MLweCRSbZJV8t5>U!7=#ShZ^c*8ks0%m7}qyP0s^>r7&+Ck-%$U{;Bm2CEdtqt%KA+BSWsWv!kx -vc_F;bVW1lZNsN;(>;9aV<1xTckVX8J>)OlYbjXK1>yh7y_SA*uir~L^cQP-qH^Qsnr?qzZ#%>@UW1t -t`gL9Z5Oc69sG}wT61%1|f0)q3Pi3QF{vmXsRq6g&=*Crud>U_GQ<+OP`ZVUG@9H5%viraV8ttxq_~N -T{Dt_lBD<8@!Ta^>IS4Yo=?0_$)o=wXGoLgGT4Mi7r!8Lir)$E*LR)*)T7u~GAljZM6swgOJeyil_s+4}f~T=Xd#~6MIQK`A8sa%{&$&DyC0uQ{~$vSq|5 -&fl{3wgfPm7o?M|(57VQM50S1?k6l$J6DSAz5VqpbO=#^|g+m4)$2(J8UAJBy9;HK}i@ -QeXCX4rapIKdkc7bzVq3k?~V2!g4o) -NI=x<_a4M8TCBd!?3otEsCDs61M}IZsbq}lu0sBuI|6<>F{vD)4KVW($vZ`Cw6XmA;!C+^1FTMn~HFA -v4Q}y8}!N_mtb6eIILvk8lF(N1k?s{Ej^rp8`EwM!$=ZH!!ZasZX0jGf%lamWXZ>qo@m}TSV7Z@R0dY -ZcFHIS(bDPx(}5+yiUj=q9mi02LFoei76iWDl9(u{bw-{7-k{Oq$#C+bZ)RX_ZvqJx4vz?8Buw(Wvq7$Pm|gf+8cp;L5+wW(vW1%-RVF=Lwii;gp7aKBl -OaT>MU1e9LQ8T0xn0FSvn>jFI}mu&;&ldQ?; -=0-dyZ*#4bq9vAXG5&YS68dk^rC;^>r-bPX`j?am!`FPXkbZAqCs)n@~mTuJ$0^;nZriuW1DTgfgLTKOPI$2tR?YzB^!UB)a -+nfNaso>d*u31cqKS&f|COI{`gt9i({l7z*-rL~6QY -QDGQl`~d{}AOscrPn;vc41Lw;#*OKW6j&4zRxx<-eQ_^!;?cpADcyzdL7z|2StwSWi@)6Zag=N2rbj@2@n+m3vpaAmesc^=|dytq30z#2EtUuqO3eL05EQS%#H4PFkD6e -q6rm!rZn&(0srxXBy4%bLa`+sYY^H`KYn8#%pn0v|kYONpBRbs!}R^=bp!M!tx(^YqF%XvG!Ld&>)t`?klnb?I(%+dNX1Av9b|OLeDQvquD -gDobxIcotZ9OSc(#@UE{{H2c+a9Go-9;2}wI%#?EbL!_FfKuL6m3&`!ppK3Unap=?`e$&;tMlqHaPm6 -lns2m4AdRqaU&7)be_1P(y*Xe=spRNb0j^0<-1N!H-hk??Fn{Qq^y4munD<3AxTwr6#^yBj3dO+V<^# -82!pW_Ce_owjA*USO1BFP~)6_*7~*gmYbkA)=1mbbOzHlv(F#~y?@n90_;rke$d-P`iGGF`+)@GT|o> -0{g08#~EfmA#+05h96uaUff%#9J-$%dIx*CN?dh}B~c4C5xLlsO`^>zJ5v%ykMNRpIcHsiaf;}&I)SOVY%q3JT1; -%|SC0+aC<51T=qHJ8_M4l0=n4Wz0qzwng6DPsa;_|HN8bZb!ea=Tic=@fiO*%t~+M}9!v2t8snK{~2i -yW^>R&28TiN`ms!c>$C+KE!``r%+hXTH!Zhl(XRHp9IX9Ug`j+b=Y&Ip<}e-G*qBYO88!e01%78eEJc -hI7=wvq8J@oIOMar>MbjPkdY$JCC_jXFan!>NCO~je`5-#ESQ)?hvo$pqNE7+zIV!`4(;6&u9BKx{$8 -2hvWHr3U0ZHZWhh9-Dw)i=cAa^XD8M!Mh?zx3HD?-@A+xdWQqeLL`e -%65dWwj@ndB-zuqVKH@kiksIPTv?{7Vte{r{VYP;?J)>cr%RF*<&G2{|Pt$Dn%_IdBY#$z1zSYRK)H1w#9qd#soXaJFFm*d*cumHbs!06f7R7a!bU5T?nnNp(K-@g0$3$jz3ggV+-PI}|xUJpvm)1Ix8|>9 -Cj)yQysXe4R$nclix{2T$P;;&mW}lH|L|;$~tQzdxoCx~N#uQi`s{?(-(q?aHGEpD~?N-NlPu#e2?>* -;DMn^T2EadSJr7Y%SwdQ2HazHPrMqNkz8VNS_IMKIn83d!ibHh)edg#H4M`a-$T2EX2ML#M0Sfva*K2 -Q2@b`boSRtbIDJ<0g>RHD5;MkR|sgdo!tZ~p02qVnT?VM_11{tOS$`f~iZyVCySA)1LYs>e}#vG7AU% -Bq~h@t!45GqaYj2{RqEKB`|cjW{sak58oi$4mD0$fG~46VPY;hnGT{9r%#EY;K#*r>5JLU2a=(N*{1;+?O>~VJ(|68S+4M@Gj7`ne9uW;VY`y(6MB2!xp2(rreuI0~Zb}r6`YaRbZIa|u%)fP~N3iwSTVB~lVEDD=nPMJMwib -v3SdW@T7*mMs93Fl@wmB%F`c~3?H+;xWn>n_s^gWCF1Fpkn@o$+EtNvF+PxD)PEdj?+kcaAaA`-dIGM -f+D7ir?CO1=~LkoBef{pK$zt<7GZE|EEj*xILdHV3Z^o=2w^xuyj4Ik6d@@QRte$0K==%0l&jTDZYkl -kYr6x1iS$K&Bnjvy|Lnbk{|)U_t{}9O8}h!$fx9*(FoufrdHPjM%J-uW=%Vce(RdxYZApeZn&Ol3+BK -?Ypg0k*4Wp&XFuIV@cIKuuLJ{Ja*dL`(=Et!&3attOs)G1!By7-0^#+%L-L&q0o34Mxh60G4DM9?u|2 -=>^eI7DR(O0?X)2q-e*BX{fhel=W -o+lP#1O4-n;5Q%A$7}v=*v+`sXunwV%$wHDZTxJjZxOGp7a)@?0}5)vGl^%4aI#G=0mE{HF<$SA0Bu? -gW`_1Nv^{e{F!Dk}aTrmTfVhGE&)R(%vp4T}P*L-lU?(-Kx+u1{EQft@nhg0>9ZJdplpEAde@{RQuZj -KDzK>BNXjr-R%;xN88xnSusAJI7E0g2nkc%lu6})3IK7RHELvGpfrd*y}W*KySPMXG$yT}>`oHBw@V7 -C&ce%v1;o~FRGQe)bj&HwaqI)+@L&Ocb!qzCK9L*NX4v&Pp^HZq)iJ+5Wa&~_M0W{%Jvn(xbVV4U9YH -hQx|USbXOOg!CO^VszuaSSCi?Rp7MxRHUk$Vti|{dJ6N;a;dfq(aXA$;9G^K-++}Ue%ezZ>unnH=J3} -o8h9?v2JH{#}UPp(SBCDcapICfhiI-d{M;gXB`CeZuwtL=a*yajkO#NP1nqI=45^wzweJ-GWKc+v)yh -h=`vs9hm>VY$4J9`W87qh*C}fVddjN8s^>;`j5d4Sww}>v!#cVEJ#-5CP3I9v>kd_6mL$M+k5}?fu=a -)XP9X#_~Zd{Lt@|;5pF1D=gd|8?ypXb(H938kSn3A3WDgr -91_v;PH2EX8t2(?;8{_{H$?GHKRVa5k7;Xej=UsaNj5b<+=O$h$^V@TYv&LjbErIL9H^zG}*L`SN>5u -PtsNeoEIt*P` -*&6*=yPfMcULCpb7}g!D^r%~WLNR4kox68(!b3SDmvZjQVOo0$GaR~Z%}$yyppLNsifR6CmzmjBfct} -!K-34UEa&({X^bpPno688#vYAaK}w&b{xeQ+wUoMXVpuBRSmK=pxy -XZos$Up=1Vvf%T0brMgU03o)Q*pSycgO}6^czq5mK+qtkXi&EW!xHr01oR84;uA`g3bC}f6)ao6)`kAWzb -H?}EKEI=HKZUzc`j^~|cpra6h3gKKlwOZPSmR0P>WKu=%C$fV9KH9z!aFqlC3gc12@6(hB}&(^5&S)y9y` -XsjzRmh@#%VNda3~BA}%Kv1Z0b`0Cft{PZbbp&+o26Sr{8{gj`R1aIUm1;0G^;9ehtA7E94*E#1F -r1p!%+j^vACx$kg(KYH9DYnsq>{6zucNL(uKB>`lK^(fYQYL4S*C{g@E@ZUgC_K%}L#8Hf3IT!G0h%doCm0!vtu@{2*fmP|H1%+uZ&{1w%%3$ -08l -*+?hmpup%Y)wUb0HAMOv#aPHeO%w6KLn2?6BjA}^_x5_+e{#9*rBdlf7ceHfxD9DZ`vKoOBaSdhupV- -AsU;FNpU{Ri7P`N0+(V% -mi5L!&ek|H`(ksq7{{leT&OenqPE4pbmi92^Bxy7V*2$!qX5XP3OpW6bmqLH-5Ng*MD8iY0$n=!u{~abeJB|1RkJYIK*I##P*t9l#y9sGjqKw&k -LSlk@EAfQZaANXE#V0+kDfDVyPR`@dbE<^zAEZ+eKgL7e$383e_i&@eDlnN$nWX`dOG()W3rc_X2~&! -!{^;4tUdIYBZJC4J)tJ)dYflXJA$vxWdvz|w&aJRrnP})^Tn3{om*ZfMPT~UiI{U2Zc@8fpxLIVMczl -nqG2$s&zfEp+(B``hffZ0N}cC@xjDD7^Nn`OBVZNXr*j1Tyd#(YV2yw5-2EW}rU$uvq_5(*9CXv7Ist -`PTKA1kwt|KG##Q`#cCjqvPfvTy0YEt-$I -kcppF6EFK!Yoj^|JIpy|4zZj5dDL!_|5yuY7O^_dwv>1fuW<2&Y7W -6O-pS;>DvmhTAoV>t2OmJI{5MTS)-?)k+Ky}FCys&+`!wum!=E188Hzi}eN)vKE40ZWZxGDDQ0jqL)8 -6!Nbc~?TSadY>sC)kG`xoF7_Ip=xzxZE;KeiWGN`^jBRhXbl8_*3*- -Ra)~wpVZ>k2GWl-uJf}E+(6Y$;K -S9fupJ>^eifKR6GLuC$!T8@!%hbO?%LEm&Va2fzOI>Rh(@dxh6(y;@R7XF&Jfuekqa)(qT=Q~kGEqOm -{B@C=K|zf`%Q7KVrZhkI@L9)_30m3o$PXg+zaNX#rDVL;S*@m9q+?+m~?{d3kvd>CpGYq{ESKD-|%IUC_Y%Eey;(G*G7_al -hnpA<67Fd0F$irIb2Pg~3EjE^|@yB30}e!z|xD%RVl+5pZbURpm=3v{M$r7eDBfn|Z -^*$E`oT6tz$0Ky1CwwJrX_gQs;ai!p9*y-&+ov-9%Br2C0kJVyif7Nd01!2K>l$9@7ai_YgCE2A0 -jNY3v{Yg+T+u=3G|Jj2=yL@Ry%Mzs1I&i<+Pwv%ACQ0%%A1W{0p+If(xJ<(-*SylM(FN&qvXjH+W|88 --6t4m}3%T&$3Zgl)KE&1ab;M1GWq}Oe)JH38a4a<1i!r|=9ulRhCCkpoMeo;Yyct#yOXyN!^IXLF7Tf -j+>Fx%)5l--u3sE?i`6^~}ZnFaIbGPnz`QfwO-y&8p?)IbciC`25Fd|IEbr<2SO8ZkUvLi0MANH=tI; -w(>{Z*W*DUhw18LZP2;Tfk(VGwmD$hqDaN#~J1ERz*s=Q($7f=ucXvCa5c~S_5^qbDeC?mZjJBb0LcZ -{Yu*9#@)9_>~W1Gi6k`ZE`#$-~1bV2@i!i&sWh4d`o$(Q7%}R{(x($Z`~l)fDuF -4N2Ah<*52vE9mDeq^fLCgEK)XgX5)ko8$577ar=%e+wwNW;4$oUtj}V)#$N#EG5j15mbAv{6SYYNlb* -PUSH<=*qaoRZ3l#UwQ#@vm*gP&eWrk(gFl>0g462V2KuL<_;*`N9Vjfl@k3>IuRuo>Z5&ytT(##>^VZ -`}B`56o1oM(HjP#bm8im9Q>_yDY;`^=8c?A@D7cuEUPQw(;-Acc7b(-91=M^TB719681G%z#gni)yNw -viMU7c>O#fU`j0RX+RPtJES2>Lx)JC!GNm;`~TMj1dTzHU=k`hB37UzAZ=8dycnWIS)qhN;X`OtE@WB -_Z4cJ3PR6YdS_`blnAWw(fe2~?yQe?%TAi>A(_h(&Q6FyUWwH*)jD+*05$DgC1hVX$WLgE-7$kZer*3 -`nNk1$OrF)%4_BG*Qtxlc^}RF9wsrk%zPEq(Sd^uqA4A*!+3DY-+`n1)ODFm3LHM_{`xfHj!5$xOVPu -Hy6s`2FyP6RD@Z!$zigy`1^lM{O1b>^kgnQ7NQadM}O7`O6?&$WWb|K_{z;qY1!QO1Loh2Xb1y_^ZY#}ET_Z(T>o9tlJ5>gE>lBGf((Nxpm4#M?qCX8Dc=z5BZ+vy;R|Aa<}H -5NL-lgS%Sa2jkUQx71nXuDjSd_QApb`555bzrMA9duPD!ZtZt>_N(tH@O$G^b{&q`5rp9v@$yL}Iw2zrwDiWa5<5PKZ9UgX}&niJ(lY?IP-RA1R903FXN ->Qa7tiL;8W!;on3R2hqFpR@_-0F! -G?+viG{xqnBZ?&Qkg_8OU*|(fmtmE`fXlWP>}C)?i{smp!*!6*mFb -0QcYtTZax+hG*lb_5JFtyJ}tkYj5ti_PAAd;1!_1}S=h*C%8hSN(jSsSV@2X~o0m;?l+Gj8IcOpXvW* -Al_`7h_hU5q5BRnX+x`> -Zj(^?NLWsR^g2%g_8A$ByDhk{sRW^`8lD&boVbU(V2E7eD(0w{=p9>2%-1?om+P3$T`%)0u%QDehzI8 -hpd`rKO@%}OhwgU^X-_>4d*$q*lowWqMwaO7>=PQHQ-j&RtRHNRP)&te&rFOE+RHaFTrnQ;ny$6HvIUxa -ATC^i+lg#-{q6mVyZ3qs_n)5A#K=Fg6sD?`fin_7T+e@|FzMmOuOdYiI<7isv+hNxrZG2f|}d|eYS1{ ->Kt0Y$Lk~gdTDooTnx%)0_AEkDi3jT&tH$PNK6m%aL8Oig$?)kl+isPB#+tkSKqI(VFZl~-@X-h?%wB5fNZ=aED~;RE-S*^+flys@y&QJ0-Z&6A~vahXl43-@!ArN+Z-mDq!sg=NSxB -%DLx#M$%6wW9 -qZLIgTnoj6z8AIs2hz~SDFPy^T5u0?)g^(MDnK$b9kRs_1z3Yz!k{Tn8bv_>MkWXxu*7GP -wthzruk3xOoq{uWi-?RZ0ry*f6 -RC;5%XhvW+mhkiivKri>t6um|L!Y&hoGNdh5oB>I7mPsNr5B@A~*(NAca#fMS>8F!U#fae`W}!u&)g> -pndB{KgNrL9SLG`-{`mef{J(Oir*Q_?w1+-Cx*V(0DU7GiT~$gXlAFlzLiBcSo$!&M8G|xN|8Me!rtW -EkS=4R<>e_wAd#>xrh{&@bNoJNFAAAEsIGj$~xCBNqI2vx>ksQRB@A0ps1Vi+uZdY=9 -a3v%I*v@5--Fl)BzzV<4D&5BV<*^3y5y4%y>NbXp_iIx2H#wOnGdOh$O&mbTMD5H3 -*6Fb$319Eo`6(GtWN2jWy68Q=U`hHglo1a`5hpSx4~rU_d>=6$uE$;g#fJrfsw2+N$2g~3M>ncLq?B5 -$Q&d%7X-hvwZ`~keF!GT*x2*?zie;;kJi-of1-RGtO~m5Vf=>adTUZ%Pjc7edTs?xp0)nY7OP;alBz) -pm;gFeqeH(Zr!0-}G8VLn@UQ{pg)ku>`>e>a#he=V_$-h|1`GB;CyjYuviWD1vmG!H6P&CQ2Qa{kI$o -DTs0LZ4IY3#C4br$nAVih@hg9r1{J*9gd+c+0OJ*qd`ZzCbD`PlS@I~tyvA5~FKHM;;V(_?v=h;@vO> -U&a_`Mad}JoED>laL{`A8S}FG&o*M`*{}`c-8FI3>( -{#n_q&+qlyz_>9RXwSiE%v^x4ZgJq~-kLal6sK2@|af5SU3S$XNghlAWX62X4 -Wt;m(?Fud=3D~ptRbpV>BY0=Ea7hlxc(1l~+qZxq7+EiW$11aCtt)gUC!_(9#zvTss&Kkn6=5^N3CTgxA3M>De|g^F$QW>J7)M8)Eap=x2^ViMXw>nde2x<|If;kKZN!VE{Nmh58=^1yFazMKaYRU^Zvz1%>S_~eoBV?<&=LeTT;+IUjpL$SZWaNAep} -54kC8WWEj5XGl{p}=B~c|C4j@kF3B0b{Vb7mH~!f0e8W^?I}hK*&4Ray*7lzSxR(yeck4Y#K1IR*3gF -25<-$E9Mc)c0)H}Yw(Y>U)g#lo)S3$Rg7TO*}dyR9uE}HHT9Yj04$8SAxhL}0s -Ng-J&S)TTi(Br3(0}+bEq3YdG_8!vF~#8$&&=+L!B+3N7ufO2ap=PeE{^RzV=3&2d7zCZ(^((g0^obeI>&|nfJpNa&=PYkU{|p#oi|;?9FkuU$*K2!Sq6DywXyX;|~289F-H@sjYvS@MY1dB$|9gd;8+5<$E{evgiyjHPE2RS;>%A-ByK$9%&!R1e34fVc(9S$CXo>;xvk`?_ -zN~P59N{(?t-C4-+ULxIcbhX$q4yJhT@QRep>>kdx4!(Z9AGC&I~K+@N -DvsdmO~NxANg&zs@u&;+`&e0J?DQ$`7?x_el_RzzF?OKn%_kVS>k#|3zLo`y2RygFH}DTprdp*Fqjbh -=hOjIDVRgpv;`p(N@3<<4@K_6msg;t*)0y=W>gaO9aSPx~O@W-dw?zHohZfVtI=pX_;kSVaIw8?b{%U -p*H73$1wri229Se)S@U*wT5RjKD}TI+ycm3zM&B>1yc&|6mxd>z#xh9oy?#ZAAcF<0^IU-0^g4W_&$;vP5keEi087D~5u?;5Tq68^Gs(KEOmKPSIRbGa&<8YpoiPk-=l?+;tqIk!IA~I#-qz9x<&Cs4`Urp| -?7wJ2<YNFTD8`HmlEqj(%2$ex!3_jlYUD~!f;Y -$}hp@o136AtTdR@3_Vrsiiy1^GXT -UvO~8PBz-cv2;i{j~*obcxhhM=;GNBea7xf?gcU^|gepEK`0+NZc7oP&Swrvv2ExFHgWvLnpLz!2LBS -{L}TkwZxMKZb&L`UmAPxS?0E-w{2KcLkP#6@2Z~`DC(V_zgKb;d*^w5p2GqEHlF<*JOjVAf2N)If)+6 -tm4O`yLy%rpC+uvGb2%=!1Xx0sCK9f8UQ8(FJ?XBw9F`R^Pqj!^w?l -JQFSi#BOTrXmI0qz;XYo4Tz!OUN{EY*T?A%+1ee7U4J{PV<(?cfYPElsd!bEnD}I8|W0Tgj>#X1- -upr?}DDZq5g>2Nx4i}cD;@*d9jH2j5)5`VN_bid7_S0NI;RlyM=&hozcqn{p$eRls%fg^yo|G6nhj|4 -OXvCS26v)l7fyI&JZ8r!{$X)1iSMp5v(Lfm8WjyyaZ!3%qXM?7=3f(-%R=K{*X6SJ^W|shiE76K%a6?R}q7JXN;yf^ZCxBr6AD~>MNciM<0P-0PSY4{H(I*ce$g+f -GK$QYx -`^xO+KY?-5y5{|+wh&Qa!yW>rfTpu~&HS%ion+1jl&zH!d&wbN|dLX;T4%t31X5^5Fm9_C4GfzuFhm? -KI*nEsGkcD_c4+|Pfjky)}+s@fu%cwGi*QhMOlFxeLiO%RU1xxc!t0Z;E5T-sjR`uf;tx`P7PfND(Gf -_>AidvL)7hY=GjTTFf18_Qy&7vyf5W(~)r%}Am%_mh4;Z~mTsh*E6p{5sH4Nt!(#6ww ->*L$GN+`S<`+icCWhj*y9VxrjOdm%s5kVfIQ%woP71<)JQw68<#j12tQ@2D -t5k7oAXhIjl3DfeR_Ia{0^(_W6uu-kZ`PSy&i|oN3mVTQG1itx!sH=Wd6^AW#LNLesimSD9d -9XKIUpIjM@Duq{RFf+OMu>W5rg`9-)CEg#(c`u+oVE|0qw{v(EJP-=8)XYP={>~6rdi4_$I8rLkXn+N -I}@taE5OaU{eHraXK8b4>m|YxRf8`1w!JtP=Q*J2nkWVyGm#Hi&&nLbCSx0;=Bx{Oa?cO;dMEFRd~vfS1^RU|kBH+gxOMmE`w@$1XS`)hnlu%7G#7rW|-SnA~i)yHR0|fB>IXBD;z0]lq6VFL#+CYWJEp;zA!* -INc)3c@E9^90=H1sb-ettneU)rN4b!fQCC1>L4pGkM~rAar)Mp&ezBB$xsORI8=_p6qpvDOV`l~kM+_ -TIp07mc^reKLLC=)#+}VP%90pUL1(aSvyq4@IeCxEIn6aYtxZz1?Wxwa;dw#MohiBJ=Tcht7mC_pvjW -3#ooiFm-BgxZLsAh&xw1ZUE3YbP99(;G+-w9#ir`agn1{o|C$2F~>o@@!kBCcvv&wN>UNa%|vpJMu>S -@oYtEy{kYF&is%ORava0}O>2))uzw7E;x@xk9T9$Gl{NmoGUc|&@+{(I$2uE>f#Ec%1qjy;n24~hF6# -MA$L_6IINyd8_SV_y&s{?`}#9)|tRg?^$I5Dn(A*S3veFQG29 ->?#AQ43Cnic+?!Caod806a7LzY4qmk1+lMtd74MPOcIn+?6xs_VJJk)_Uznu!H7T^eBu?#g>}?qm@0F -b`^u+#|PyJSP=sr~)uAH7`n2~zMgkLa+BZVV9>t8E#R=J|Y6w*m-1ac+Lrwe#ZrquFF$ -nN>)7%$1??vw+9M!z;;yB+3bR!=)arZ7Uuneb^2lz0$bTqreiuPs`Ja#7nd&QNv -j6I~f4pnpe{$R3?|SC}{Dr#p8zR8S<*ttLI_;hXktE{m;PPe{5D_46yHY<{I%U$Ba>_IAQqXW;+La~e -m$UOyBvaW^o|MfN?u7K0QdtxXsVtWhcxCb~K+Q>TJgf;~Ep7Xx`okhFw^~e_g>%J&@`6*;^EJtIpd;o -m88q>!)>L_?eOgb@qqQliM~?t~+oJj+$Ck4gV5 -i7^iD<+3E*WRX{p9V;We9&y3J=R6g}__Bv6z@J_yU%He0qrDlxFvbbTm5Gwi=j_gpH -}BbWix87AB5~_qtT_L&7WiTDZ`s^!hLgzQJd(P$L`YXw=OYr;p{G6#7Kk0?nIEPFikrlK=;^AWH|1Pv -70g6@xy6Z^N@ZYma^wgKjJ`Dvo%3qy2S4Ub=2!X -i^wOQWy-PAVQ!N29XF%;m8J^D25^^{uO8v)LwrNsJDgoTY3ly_TKykdt3gGrh8W&ee>uxB!a)LW$ZXe -?xRK9srXxS=tFiWe4}TK?|gC;{ML+s)16L7z15YF-_h~*S0r~5z^+n_?ypXeJM9j}-;H~0=Z)`3`hGT -iD`9W9y507!-4yT3;x`Y0NcT0!+b49pW<=}|j6?qjnvXYVezp*&3u+>SB#5=z>}km7Eh<9zmMTH@t(K*NkUrmHo+jOW?$hv+mQUUO(iFMY}<}}ohQYY%;xDeCBV!`vRCt^ -k&TNToeD3HYtaksPMXiTkX7Dc4BFGfRuc_=mNmkPocG -c|A0Ic&^lggzKUK3Xl5(V0~S)9N18<=c9we;uWuh#y)fUiCy4euoWB`Jpy;v1eahl`ayG7C!FQfim0c -jSi$umS$~j9u|KS&RtX&rbo4lE!Lkb_2%Hy+;b0ueU|2eO)bGuIOhnnmWBZ!WSE(;|u_C{n*%pOva9m -LKpB}U+@c_hNH0Ma&_o{4#wP5X~VJ(F}uUIN_sdELrVv6R3!NXT$<`u7J;{gd{WP)6RG)_$Arm4&-B& -72ZPxQKuv(&ZU^O2!Z(t{Z*+*9pLgB{s{!y#-h-~@m~iu;x6GqEJg1Xkb+FVhPb(kL?lcq=RX*LQvR9 -547W0nAYlna_IfmB~V7EUL!NL?vP^SrEu|B;#YMM76Q6as$40KUYxu{_W`HmgN=>GsH#Ujf;61$*@l0 -SI+{{UwGFR%F*`26klene6P!w?h%K>|l1a7#ofh$3K=KtKXP5rTxar^qjP?J@c`cSv>>7%bXHVR!gL- -sE&_*W`<^9Z@%Y+_F;g>uFx>-TF@6>^cP5p%0x7QGn -kd%Khj8p}u}OHiz6VDrRp7Q;W7f9ZdNjF|m4j>kq0BFZH^?DgvDA_oDm0=o_E?p|YQ{5XDcQ!T$I&8~ -xDb01Vsv3=Do94*T2LFf~*$_fi7~$|Nuo9MwKdF^@kk5m=d_|5ApFU2#U!Zi(G+qPnhRU$1kr+$q-Ul -!|ezhlR+N16;Hb)D=Tnd9cc+Sm|ul)OBLr(#==tV)wCs)-I`+`6a)2m2fzy?f|caiOylg%Df7^*qpJ` ->Fl(noi<{tg_IU$B{kh!^mZB%)p%+H8I^|LHxB`%Pp6h2iPpj)Ua2?80HhMDJTGCcHd`n5A|rXF*wpQ -bRbX^mUWZx*111m3K)hVH55#hn(+h+;(vHW(*LeiUSH@xVn=!K6wmF?J-75+@Kan!Lr5)!OC5Kk&x#G -dr7CXUyTzMALnztl}z~Dv?8Nd%O<_V+cn^mADIeZ%q)9zdJ^@WAQU)krtm-O>9f0*HtJDe$zj!jR_TZ -w*Bcb}cOA00b)!%pCD7yov+jE;mXa1kwufM#7JKl3De5ku*gqDr0g(<@uzlD^ucppeMJ=N(7a(mpxz4 -%Cd5s@|SxndIDA!dD|GnmVXmQmn$+qYL?bodx%#Ag@cQ)EaNQ7->$;3C>=ae-QjGAWwwCGDlKYWZ#^oAV -(#N=#J47meVPUN+;V<N)&^p8vG=)9dKlp+ -Ek5!q3&%?SCK)k|2sv8!)0Ej6x_*5;%yGTY5=g6b8O)pMNdKlKW&7`7wY+?luERwD-qTVy~ux$X@sil -DAC~yc;rp1&G8)Hyqtt;RL*6>6SrK@Q2s-+slaDEt4Q{PY5IUt$zXUxEY4O0mOZ@jN0#HH$_O_Rhm6SD*klt)eZSy|Psa@JNFQLS -j!tZ$Xok7KZU-;xRIhB}pJ^T}?a+=b3**%`S16(nh|D^ -QKJdEi`=6?1&7(3wphjOC;qma{4Dtqg^j!J6oPjc;!`glNb_P$xsE`Jf-jiEJXj0k8l9deG -T{t{(utqAFN@0A^_me;q6IflIp~l7lpYhf`UTAMh?EYp-W^>ZLlas)U>L<1*avXJMp=CxN*x{5eHxluj`N&l#UD#);-hC5t5|_76qY21!;LhC!!nfl9627{_XSmrNPV;qRdoXaQHZ -yg6Ph%OksT%M0s|n2yW0sXS|})!?yYpmU*74Q0PF3jhL -ywY6Z?*wVA<9=Xiu9b$;ZC;xIrdj~e1`?}<2TuA28%T2xev@UELlQ!@xq*<1w6ze)=#VI6w1ZjlEWVK ->A9%xew-RK%gUKaAVI&lpYXGmUeRZ<*W}RDYO7)&%48k$i|T{lT`sIwJp}(6|DYYfHelOwuMJT)NW;J#Dxf#N8GKt5Z@7ZL<=G?bYxAFA_bL7u -Lc-o9%-!%OeJh_LZ?-eE3oXI;E_$&~G6nCEsOUe??^=!E8^hqY-|~iy0kN~bw#PBG&n~BL4UH{*q<)x -D-l<*jzHEER^sN)Mt7?F62g0{J)rYG5uF*mLBet14w%tFao34g(m@_T7%S11$TrHfZoDRNB_I3u?pY1 -i}dwVSwPJ?vPwgd>vW6@r=bnF&2_PXaX;ex(SD{X)3J#(dD**}yNrBn9Zvv14E%2nm0Ek~1Hy8T^-V? -W04ets{_{$POpG%EZ~tz2WTQ(D{IJU!Rg(yH5c*{19YlTX!%=F>Nn1^5}`Z_uCAu&c><>OWZQ{fKYdm -UNhKKfbb(=8o#C@YCR$Jy&syHy^6ng@o2{X%y45k==>|*Q$swD^K+(-D>N>qdM?dF=>I_=TTF04t7mt -ESEdFRuq!VeDj2=h?QHs#))kQO|n@~TfIoz_NJ?O!?YhCkej1(i>^ps(w#j|9B%a -!YoGF2D2min^n}w|`F=;;b56vPMuotu=#_rKsYpRi?5nLx(O6#Y*!QdDs8VypoXkp~>v_?FCvobdGDj -)@tgEl_a9nPu86X&cfy{8wPdDsJapcj+qw7U*amop56pWu^TRo%DLrC7H@BIU=iPxndAeSzpixzM|kX -*0ztL(?3a?!($s0FBL@x|C#?v>Z?$OC)I2-5DifV|XOkb)ixf!A2ajauFa_=D*$j*sTF+k>oQ`= -|kZc2{E(3K%(mi1{GhmE@@56&drW&RnOsV|%l7P#CU2gKdwWg}t#3cVK4L(=w*Ric{239?>`=V|+l2m -YR=p%Quu(ZQ@{-LC&$qG>LMVTX!8gmxdZq5t@Q{t$M1kw2fHgy+F@E4BoLLcT^AaxXe==s~_kn~)EP3g0z6bkALO -jxo0P$&fczQSYK6Oza)9uMuYF!^C?@Frju~?iAZaIyTTllDE$+xf58hXvZ1kO_kYTYZt{1_DP?8oQHf -*7NI+e?T?{-T6g!B#dgjP^^aQEr{|6^_$R{1^m(L3{sOt>Vg4%c`$CCYlYVJ#SutF#5wxQWx<#nZvj8vssU5)A&IL=j}jj(+vmedf9Xkn>!4-t4jK!*TWA?iKMvM2ZHJP}V9OlX@bS;)!Kf*^6An@~bW=K}%TdQixJAd$6hi2~v83`SFy(`3%s*3SwN6UG( -qm--VilacvZo3uku>%l>JtK-6$gng7-!v`1^gIkn139BjJdcm*#ZOUFq~|d^V0nf(MYkN{t|(>2Uh+c -(;Gs$?&J;YYq#AuFAzxZ=F@Cs*Jr5)`O>W_0svNc)CF7 -4_iBvZ!Jdet8G878Uyyn3F*l)-o*NEudQ7PF#i^;t^1}^+tn*xf|&63*I9Z8>@-B_}`F5t0`ZPA$Mm -DD^J6aa>dAa*?wn9i6>`zWQq=9Qu-5=_{Jl;Uq~qbmu$g-tqKN!lG=%rB=NZKp%f1esE=Lsrnf%u`d7IAH~mRxvA5i%H>#V9qk4Lw6Twe#?$MAs`j`IXzWA%Pz`oeXzN -v3>}5L;Ec#sBv9)XWp3a3@)>>n{@4BY|1S2MUr!jnNz8151 -1M&YWI)hJp4M1=w<+74v!h9@HhN0HLmE55bkTDsonA}AWgKjdg)p<&L9encW7dJ2_YiN~>51ODgTPXq -6MB>{@edT$d8|;xdxK;|rubf%CDb{46wLNLQl(e97LFPO7@$Myab8TzuEwr>uBSO1P+GqXC%i@xH703 -KPt`KPZ-oSkmW;D@(4_1Q?k(sH4=f9Wb5HO?A(~5M91L`PVd}9N$5gII6E<;$G%Uf8K)Vl<;}qky@Wh -|zbd=&(dUzg|2@o!~{+7~ME+=*t%bdI-KVGUE-pa48ZjS*#5X -yX!4`Rqj58tKj+no<&m6}vjyNc-Ra$hc7%%AS!$!Sj-ctB65>w4rv_2lX0V|xpETyV>>{d!p#m1FzXJ -~9FCVY6e+Z1w`k%(Z^|J3Uz_ux)kH>v8NyC0JmPm+~S;01EE2YdvpaFyY2Fy_CZ_RaUw%wQcLSvdRst -&h?K%CAwE51?LLXFQqalFVtT>zUzQxoc6?%^wj-GdsCNsR3*C&r^MhGqfcA?OdgP;5RROr)Vf+qSvv---whkP7?YeX -_bQlpC#ZW~m%>b(JyWm!68J%gu|+4Z$iKb8Ln;hI@gQ}Xz41GaxU>#rf(&u9D?v|$7YA|wK02m}!rMP -c}t74O{$1piL}?Rh;B?@9LdAdU7^I|BC#Gl9LSRpd@ng1(N~w&Xkr_J-|;_HvT!gy1OL*-JYOIoYGN- -6uHR)B6un;6_fxV=uEzNum9 -UZw!wgXBrP-^3O^ZZYK+zs3I?vrT)27ytAxk*wErJ3}UM28XYGOnw-|0^UX@VD@w0^z>&;wvQqkKPW= -bFV*`oiURiXK`8oFRQwPreRgr_MYCvBT_sSf-d)^ZkIjJb%UsxhdpE#OLETq(^AB;`{vop8ho9K&cEHB+jFtxik#ERR7 -CZHRD?o$9ts*%AO-S1ncMiNOBw7x`J~~;%B`vs}?p@J7F*gt+#IF=_^_wSnFEheJa4^FkGu7N*kqF?l -r4VrY$|;K;r}`GTW8c6or>wL=%%y<9^^#4R?hLoDySb -EYcsOdn+Nd9PgM|g^VJBZGd3KfowPmsayU@zR^H>Zz+;7do^WE_f+rs%(o9!0L$^AmyxwYmVFOi{M>n -%OaK1)i6&=3L9Vg^HRI}LTrKnTcey&sabe1Z@+i^nnX&Oz5rZF5b9P!P`xBaYR={h>RM>UW}vZV#yh| -`}8^?F013BZYsi%fft9rAW=|B=LzYdocxU2fIV>g-^6Xe3FovqF_`h*g*rK&nh=cU?vCeG_LsQrtF^% -Q#eWmGaeo)L0ej%~zlqxbTD%BZLN{OmUQqcqqg}_O5IwjMRd_)y1a;|gq9H>S%;V+B6a>n9*o-3y4`D -L%4sc{KDh(d$tu~&RzVc+k6A|iEI*p$`Ml>3Dfm9ksXUW69R*6V=Vi$vIii9|Hxv*oP0jsD+p?qc -vq_aCz2y_3R)h54Va;kvg6c*V#Tr2rH#IL{D6e+{HsJjhFr$qN -&i5k+8Tw7;L7270Y*W+ftlC)=)zGE(KA#L1UWHabWbSd`d}RzTZgWIS?u52%Lz&Q(S`XW6#Q1C_H*ej -obyW{_rJKzr?}m}yu?rRKbW9M7{)OS+5#yGM-UiAAcO>Q6u~JH+MeA0{Z;U{MM&^Fc={Of0?EDJwg*+ -n9zw<7w}@~%lHmUdzc#N!-W&-C+S^A^_-0CwZ_yk0Z4mNiHtf>r@!po%UXXgf!WIQmza!FbPsiB%9DJ -_@Lhze)5$*x#u8armU7_U7(xBe19mrenHYN7~x`f*ABY6w3C*d9%Lezdk@!JVxdq@Am%_H608@2h_5) -zaJ3MQx<^BeBL%LGpkzWsXo%=?P}=cvr}d$~+AV0-%BjQLe(ZVSCy;Kv0&k`De}XYNn#JfPmApUCrX* ->=lY)b)mGRu!nH>@Vbb)$ryM{ZU>7_!$y?hx*>N`c;sO+Xcyfc>cQG!RWa%_FdZm_^pE9FNFEu@#TS? -Fh4yqJ2@V2sR%U>Pb(8LXKxFVQtefe1o8i8?!C6$RM)P-bFN|?b`SOUiyZbCeLx0DfXIR~au7iQ3B=V -mFXbwSRbICD-u-ubILMNSCB5?r^O@6Mg0pKU0#9NF-G<&~ZpHC|EfLPRXCT&(_f+ZYF)5DS0WHgrbd9 -I(S1dctO#O&10gq;|P#*^*&hqO+a(&KjnMRH?VAF|PtbjZ-p;FhpgHoMhaMy%tE)K29wf7q4j|PD~MT3zk~rq3wL3(k}^z(KvD*Hk*)6h -ZH$eHG%oine*MJsKTNq5}R1;jveJ!-ATG%H$F@rvUXz!&kifeKpuv6OCuu{;etI1)&(OrnhLcB6KpOo -ahRj$IBf3l(=@q`n{@LFVIEdTQ~1dc8T-XD><9b$?*f~HzI+~^~tYXjZ+ -i#qiafO;_fWro!VjeiUUd<+N%QKuTDQs9Q;xVW##R;a_q$SnS --6jvm%zyYrZWKqgL?Y5V|2_wPD5G)6K0xLxNB!-Eud;C8!_S8#yHGu=`|`~8|49DNzfc$^|N3sj|M^S -mZ+}H^U^QpyUypnCSKl?S9{}_J!_#;N+|N(pTX-cI0%ec|Mi~^wz#oDnQ82THQ8Yy%D1*Zc{3*OH2$e -)D-694aQ%MGzPw{G01sH?~=v*zp8PTA;f_y&Q%^)kmVXdlQ8K_{qiRRHbKslTSZ8e5jC3IFF6*2)O4l -4c^{j+`;Fn2}4NZazh1?7|FG}h_~#eiDLf~^<{$}Y@00vDrTkIdRLV<_;3cvY-jPJTIRj<0<(9CYgF7 -_bSMU()Nv)!bzKDjTnhl;^z!kIJSU!*30px!>ZS$;Mxuze{+1SJ_akJ~*XtXn*L%^%@_%^V4(a6J0oG -fmU>-+rKz5I)#@6U7oK+{EHek*zmcRwTmjKBT$_MrjcceS8 -B~3REF=Zl`7EnLtbbr0qn})dYKbL`Ufk`Ec3W-Wl7n_gPMMSWb`TA#`EIh;NSBc8b2oUtxl>w`_;-R? -gi8&Dz;+ZSJagGei(($@+eGNy;5-W(CTma`24ms=x=&wTyep5w!AXw+}K$4F1(2$9{<@b2(WOuq5x>G -equ{An{$jMUI`onvq76t_o*JV&os|Jti&rFMpSSynP0}S;+)so1 -JSP*KoYZ7WxQ?6;%q!d_jeeEJ-DB%w@Qu%HtqaAxK`-`;!FP~;wJ=n9D6Z&u#}>at`JJ%sAmbyS&0uy -QH$_(_-6qJ94bi<$O6sTY(m7_$vCz--=Knq&Aj;p)rE{D``S9ro-Dv8NJ>ltGUarGamq{d5-Or>izl@ -q^mcrVUVGYlDB>mil1fP(e&8a^#2ZNor16ui`;^haWzM#E0-(4l{Lq*jt`)+!uPao-*Bz`_L=CY%dX= -fMwb4QMXYA@0v_77&wy#*TA_QM+yAN%Y0h?l(mmwE61{3R0$y1#G!72iL0_?Gz3e{zoBRRJ&zl;seVjsND1yCi`D{kEmdfV_z5LAJ#P54YIu6)zseR -~7{z@X>3TRyV;Q;$Gh%WBt0dN5!r$qyrKSubk85jK1CKzL(ShpOxCwx{Wq6jSBF70F+(m-BwEw-w>V* -#r&nW8U`6hC}i@1s~(ERlOi#3L$a=>{%Bhs;WoNbV#_{`<^ZB9`3E49yz)7%X6a6ke!x7u!I~ovp#h&o3$BEs!_I0Harb_{Y=_vS?pSMyI;YOD_mPvD6ve8 -^#p_(JX%nw1^&j`GQbT#v<2jP&s>wOsX#Ohc?^gq&a-`hpdd%r0D)&t%g#lYe6-a`w2=0Z(MM$Za%V9 -qH-T_AhiYW$K5%&Y=&g?keUjh744tv4q}?xTAh5Vw)uu+d;p~l}cIp~57+SX3oR&|@%$E&a$XA}bDA= -VVl6;s;msYzU=JNzkz9<4)V7bTW*LmO{KPmZc;q~#7}v5lnpWuC8+A=$!-QToGie;3oJr+oeT`|K0oi -9#liy=ORoG^CA=eVoY=y@Lu?D3N*2`lfyq -VO6p7mOC_#dSO0E81j*v@!!j3qQ@S^Jk42wh+iFsovJqQ3rBZl`x7rF@`M0i|F^VY1yz%E6=#ww8t#GPUu -CEYlspeH&QOx<)Cyzwc)bI9!dK6*|(1a&2D2DId31`p0;>9!7*cINal2a)wYWo_)%~+M4z9!i%kkYN0 -QJ+7k-!cx|DO_Gh^`$GJ0C(;5^<-UaLHA_Ydww=kQ!xv(5rvXTVAj*+9i4R$YGnxX6kcYdSx;iT^~a2 -l|mzVb*(8diLTrCsG@`3EMo?Ob&@mk{)$--9gR)1G{-Ouq&Wl@GUUvub3ykxYv2`+Xv{)z|KXiPYvv# -uMT#9^K<&z+z^Dpfp4WRT|M^XA9j-IrkU6YVQmC -nE4T4z<|u3W-2rJ?@=hI^Ergve&r_-;%yFYGc*b8%Z+acF`|eRZ26eh_F(r8%l)Q~6TJ_8uAyw4_NiM -ewdFiKf3kk&e!5@U@*6)t3)$i)e=(^W)r`Hy>JLtHxb59pGXq8)dcIz+?ideJ60NY(Ross{NPD-&oQ!0P}F4&Jw<VIbb0B4Dx0^DpeBPMf|L0)%RX=V)HR -%gh+20tfepj~#J@+%L)hfQ`xb+z{=7HeO8ClXyV2HE-(=&p8Jf+_`qd%#dKXsc5Zt~;;{Pa?vPXWbkhw@c!%4LFN;{bG`j;{9+rHwf=|b;#x -BBFS66t1im?AJTh~9+)!8#5r|r1>TnQ+Q6YOKYm&&c3@9kL=%y+GVLF4Zuw2#=X=Y3g4zqfTwzI@`+w -@=(#vWV!)@AjYVlFcJ4b4LV2mFoj!RFG>00yUNN%P^i%Q#q2% -Tld~cDv{h6K~K_~h_5`D(<$S&+nb(nQ4#-q5l?60wCPR;q`BfFKyn5ryU;Ii4hp5jX=Tl1V -d@h0hb;bO=ZOE@IXOJWy1bp49uuFoZ2_Cmo@AGwo&?A -Vr6hps{7s53|5t>8D)j>C*_zoR2&iX+Trmb5Hfk+k=d0)*LjNmgz*h8X77r63?L^jAJ1A+BzpP;^AR` -(-#u!Ye7ni%gYjF0ygj6`fp5x~DQ-}5+g?nK28+n}N)pPm^eF+XvYT@`mxvgvx%xaQaG~f9{A~$J@i% -R#fWnQ5mMjBVV}$zQz -f#~-nfn2K6|)v&jeEOXp3`g#+cm(U2h2U_Kv*x5mn=c{UYfVYkx-+MwxRW-V>R@C)@-o{r`I=;K&ts84(_s$Kt-ACf0jhFBl3CwnI}SBt!}$X=eW_GtqN&Zbl1o -3q@D!$rT|4TJGq-jqT&a&(a%>Ijn&UJT)$+H<}%ahR?UK_7}YSacG?fV#b>-VXPcc^8|-Wn=je9lmdB -n+M#|Q3YcwkQ3E+68?fc9*M)mT -I!q2RqI!k2!_FaL#C1Ngbe#QULW0(BCnzu1hv*bEM}{iu;`!v= -6<&4V}J53~bL@vW2WE)%v?CH$~^8TYP&ILk>gg$}4EvpvB}opF%_0->G|jKh&Jj2tK^ym_sIa5nZS_H -19n7yyccyyG>L%7pZ4^@K6OlcOi4cZQYCWo``0T&fUcNQ0}%vHbvKr*9SY4qXtRH5FaKrt%>$t3{TmR?zQfE!mFw99Dc*z3$b^?qoCfUzyV+ -jD&OHi=n#mjz|G?t3i^Gtx~1#obufCV11y3$3fe(e%6P^(ToLxCJ0UJn+d;LL!vT?F2+oC?7EUsKfyp -e=DHKLFmN?{iG=66p~tQkmChLF)0(%fr=Y8S!^6)lTcd>5_6rFV2b430bLOomMzJp&icJ0~lV7hj)GV -SNhRgRi$MuQoMEDNq)fXB|rV}VTHbW$OgbubNa3=yrj%)#{AJ1=Bgjh82Zyw{_%{VKRx9y*0H~vQVZv -&LfV>)$*79ocxnlt9&FbPRJO@`8=l7*N+?Y{P}5W!em+#Y;@B|hTy)!_7~{5)Ou347Sn8E0t4qX!9{B -4{I9a)=@6>|qjz`GgM|oE?Wb({OS2*C~<>*9_TF+;BnhnQO=Gdz08(z!DN|KrjWnxZ_KKloIY#j8~K& -`A_Y}Vf#p7cCC+LP~hcsR9>Gb;NQcXE;&yM4+Rh7!wdofx-kC*EAN;oR9q?uSl-xZ)<>#S>zB$fI&S> -ge3tdWk)W^kC(&Y9YrV(5ih@XkD^3=Sz;@LPO&e%h}2fV{zyj5RdySMO#TJxJ)ar)6FYwmEOmGB;9@X -dbFu%=8p$B;QO1XsSm;Vno=hqr8d9MhIw&(+du=wNq;4aUnYfwkb-*YX!@4gGa(gLJz=Vvz{`7I~=VOV06(!X)U-c1 -Q3p&>H2!tj(K*%E2iwu|D*^>nCf)JO6F*$l!*P;kt{U6WvxLW(KGb>(l?a;@3vlAXo_ -&(+!J=zH%Qj&+?^$O`%FLWDC!NUjJy{F{Jw|7i`bs#@v)P(2cO;E_QvZehVhIk!xI|!nMyZ0c1OAFcEx+NcJJ|QN$@K!vBwlUukXo*f2fB`tEfAi@;GC9xA8bzj3Uv7jWYxu2cQOUep -4V1o6Nz&jR?b?~2=_I+=Zazh-P$;UBH7GyrSk)+=}$B2H+6x3Bcldgun)~a^=n2gnXvYoChx_l0bSj< -toog}wLIyF__xHZ@;8bG(66rXSCKcD_iO`SNnAWVx70H($m&yUUO<|g>TIdzKz_^9opJ~$aQgEW -u%(ftDuy4VoLynDl;O+#+Dw`8-_U9u9bDXh6wLQFR#<@r{humPX6x7lc-a$!j?HRr_ha; -&fGQN#@`pJ7ueDUrFjp(XzMt2*(zf;t~;U4YExBk)E3rV762~JwN3$d%|=6R!8YD#oY_8a5s&^KhI?? -0-e-UA~&wia1x)Z^^>!ZP;q8t^*bQl2ca=l$j?v`}u=^0Lx1^1hs(cDxVRS2|zXd`8BjX2=^!P_Asvy -39_a?I@YE3nyEYUgwq(JGb-+$wJ1uTPjrz7HR9)nnsx*hB>9Tbb1ha-(y`h#cSO;}ilP!z^HB+1fzhf9QC6`^oK&9npea2Od23?aNP;JH6F)9)ecL9xfEu_+`K_;55DlZgR{+ -HY^SzRudg&aT@4WIxdbtFjhfTb1%#Ax$hs=o*{Sm1~DV}Umvx2&6IG*T&;Tj}vt@kxsS{^@>PH&)P -$^01aS#qlUeFJa#H*|+4v;StlrI@R%`CADU(m}b@5huN7XI-$~rikZ{=Lp@AKneB71}2aO{95^47Hj3 ->h|V{))k(8Wlo_+r?h>LUtny{Ox7pW%Du`yQqsj&X^hV)rj<%<}md(jA<~>6Bz3K}dGp_{o&YE3}yAO -vk=KcLAXnD}ss7L(Ww=3m7^X~ewoC++;zX_jsH)1-5++H!^ju&+3+5CGm!!u@HDu!QN|R?sk;1yx(bEwY{U~sO&g49_GuCqtM7;`g3m|h -Oj9gtX%bsr6bE~dX6xBV9P1oGb3$HxBM9kDFL4o?0FW{xkR0~Y=gT5wdQlM9C7!$t1P-rU;Qq+Ho>xL --!n8gX?og58pb`~fZXRfp*h-7E_ci`+`cBS+Q|iki?nj*%O&$J;s&;jD#Z#3rMmrNb2Q9;D%C?^a@Ow -9U6wQ?-{7dDjb1a^ud%!!0|Vh4W*vGt9+|RdDAbq9X}nv3%QHjqumKJBOF0!0M`!*!6$ttreU6FJ2R~kB!)-1mtL*Lb6>g683}+PJe8 -#Uc^Hf_+JDaZ(RX3O!D!3;-WA5(eXB5hZC*lYyX}U~o(c7MXq3Fc5X{ve3R1a5y99?vt;e>cyxRhow# -lknw0tuuuFHR*5J&%Ka=efb8hC)*=orcU(n=1IhY3yYC(5{!HIVp#b=g6B=&voI*IZMXWc*HN2bc&!- -_e_?Gt8#C&`n9)=LMdhO>05F&AM?gZReQEBlH3$LRxGE7XPSu*kBWFzM>Y&ANUCubpI(jLi$Q;$?DWo -BJxaC9U8?;Xj=HqFNrR0X*-hY5e)2#!`AKsFN{63#Snr_ify(&;{(T@{vznrdfM9xAwXc4t{$?8T`CG -pA3IQ*FSAL{HXAwpj3P)iEBTZnscLB%C?iPy11el(QKmqlasCWhJn+yL{$M#4i_$VGB?p`#v!rKotKasGAMVjPS3{CkKXKd_DIwC2ED;j>U -)?%+vG(-Rmcj!?*cQQVT?(Z|_;c(Ys@dlUWkV+=mU(7*dJE{Zd|9p)Nh&F#)U{%lHClzE?*ZB~{yBKU -Bv1xl8i|K>CLwOv=5T6XRf)VyxX9+fk4dt`;}zCrY>M-0&>5&|Y~@!U~wPuQeODE7$4ZI6cdte^Yg@+ -4=#=sYN|`My!xXB61P7Ex3NbA(bkPplk_M`Zap7Bfe+QkOt^5)lI5XuV@pB$|+6;5g0WFr;U1tSR@lg -d#O^ZXQR@My3mmD2-r_0dq}6lMn8X2c-BVcOfq)QZlX_qsq+Sx?J(FSj@f0${qv+1A!Ip%A&!nc -;s7bmYJ(n|(I!V|fX#N~WA=u)V^=>tz3M~mXeG*XdpsQSEqp{3lT$p=HYi(T%WGuzhaC1c2hP}Um&m| ->DYO`h@bj!ZGXg!O`R3Flyzled>jREYkBt)^{>Xqidkpua%>Ht+COh}-hnxiv^8DM2tPFBP=YPQe?JR -kB0m-@{yZz`P^55L?hr`HEclzB>Dg9|#aBW-R5fFJ_a1N$d`skW(;S`W}&tV|Bj;!TEnErfJg8+aCHi -ZHI6j`S-h!o_a%btMl)G8RY04N3nWTX>762Bbwv3J`sO&vLvL2jP|Rvu3r_I{rZ|JN)&iMh6B)`w#zRZuhy@^7KR2wCqYuAdTzaOI(g6dq}G2 -btEr2o9x{~e|X0Bs?wQ%DFJ~j%J+E04gIMBJW)uMKBgv`xLfOK^|JiDCxOvVcKYEw0!*&HwbcUi8>{E -?H?~^DTcvM#uKxRFK;Sz5lgog>b^Irn0j(v$V66ME; --S~tdm8}w%ubo6AAPKlgX1S45{t*ogqoz}RVP4c6v9sgV&7EWXUV(-wLgVvg`>j&M4?LM^#Ln^K={d- -h7uBgBBy`;0UyoFq*(3CciI?3${SwDj(L!R(NxoGx6$f;+BX;{O)*kA?}VGoYGu@qd7$eZCg -+qzv!k1qG=38kZgRrU!Y-El6Plt$@zS;Fg&V@C#}pU{&L<7L81?(m` -RriQs>L5*?OcVZXO+a(d^g5=-Fd^eDD`U-%;?*=gV7j4!5B)>IKhxKN>db0;~4pQ=L-d50Sm;@6zCa|%xW~e5;(F5O#CfR=Ii -L-f_2&F(}+Y4gbOkPU}U^HpHMWwu_e_5gj5PtHSyJ(F(CoipfO;nV)*jkpJ^hHU=A_O0o`QDD>G&-)U -F!cfNIJB(kSpci2$%Ju$D#u(-wG*Q!ps9oIJJScD6b{q8Jz^S(06h0R+|P*AUl(!f5|d7(FcCZ}5u~a -Q}L6i%+GojadvdF8C-49!;#N0KMXE>T3Mrg8ZFnh>-a^5I28;g0~VL^j^dJI(4W{`n#Bb^u-|S`{zE6 -zP8T(lcR%!L+jE1fQY%#D*9_A#w5}5n#UEe8bW`g7G>M(j%298k#A`VtD@td=%DouHcmqWYB=-* -@=A_b06+!8`{xvwVk89mHk45DS6-8F%q)&Jee{hJZprnHY7{oSC~*688sS5G*1Rv9b(KgTJ! -}ehoKn7@WAHY?$!}IegDS*Bn|9EfZL0G61M=zBD>QC_+0+5L4_#h2{WyKE+h -M`^8uBF5C;-6LNczMGv`2Mw7z1%H%P%4+3!KtDPiONT(sMueR -AW8tWwuQk;1ijvad#GO8?tw3LfD|~9~>t3>qCd_vmwTqSn$n8hAVK~~kQdwPktuGNLp?kT6Xzph#f^LNg>mz!*#{s~xdCfdb=X>eD$zWGzL)tJV -(ia3og>WeVDKdA6222~g++O~v?M@#p=+1*aC+f>-H5DgzXdSeHP;1mmn3n)Sz={qCOJ?hT6Vv{aR -OW`e*%+BN*R%0GcYuXfs!dGfv!@t#Tc1riNtN%r>OWP0|I2T)mw5|z$O?9 -d3@T}Z2zUPsHwhZ+VJ_q;qg~f6wo?GA&4)~e0*bIrf)64AD+`B{0AXn>!jJ*2&v|m${2SMBE@@zXo&? -jw`O@@Sp<{)hiX~r6zhDb#jD1D;dhK<8G76SvcD##Kb6M$G8FNt4F&YAf7rVX1#Y`Xs>k9=(2>^+qdLEq601P=D~x$pzpEi}ed(^i_}rzY=TUu_Ik8QzYAs_2?)1WsI2)ah+Y&v=gL -UIB@HD6$TS8T>yc*2j@s`>uJ8F+w`>Ju~i1f29zvs?46Y>LmdNx}JWzr0>OPBW*H1Nftcxu=Q62jimk -fRmk4T+>Fekb~w8F_gw5xo(r=hc{S_r&i{951-Gf{6|cmkrg}8hR=M6@eVCyN7vrn@qo?&WVHEv~ow7 -CO@3d26f$7oGxp^=5*BS6N26z#$4BX#y$zRbG*RW4$9}`x;drzj5vc2M`@3<#@Rh`NHgTp;hJB1_-w& -k_{3EFUWa#my9r?rHhlAXi}IX>?u8{~jmh3_gu~oU9iA6-KP&b%$4j?$q)VHRshP+PXLDW>bOb9OC0e ->BX|}Pq4;S(kWFtDpWIod>=4yW)oBr4_ccvtd!4+)+=Dxd3bY-5!EGF9hama}y%#m5lH*9#Yq0WI-DR -NELMrW;y`o=`(>~f>HiNi&ITh??&3NJTG`CFsxO0G@mvfNZ2*Y^86dQqUXJ)y>Za}3HP%*MW-t(#p;c -sadZ+vk%hqeI%s)POqyW`vv5c??KQMdPXqxh2o5E|6Y5_DifoblI#`HwE7XP2%5zXU#D~X4{?H)IveK%)VKGUNyP+p5n^kOU4>@^h36HMI()pOB?{d_IzEUq4CSa=r_}%h8c+ -At5;ao1d8M1!CY1+0epSmrG;EpV-uP4lO@JkqI%Af?%F|t_$H*OX26BriIAlucPZyU{Mq!#@FJo8hrDND__wC&_6-(}~)73XJ?$BFI6UdWxJ#}r|jr}zwg9bW|;l -=BYLe(xY$*bi&%#>f3`MNg>JbVQ=I`xqw>N^`DOzR%iO`cce?DpKzEHen_BeXjWy{lMW$4+7H^^6&sj -a$@(^%_0R>b&QedeiN04`B|Ua6@`@3WxeHPCNyB{>E>i;*w)zjggzjI9%<@HIO)k8xe?IFg)jLDWby7 -5XCoLOY2rV>ZeD1tD6gt?h2DWd6UhLDyVH2Ogth)6m5;6`pGF51!l}G!&D>qm;hI~TBSRE} -{d%$dNvfh#q@o4sB!|w%Dc9e%Y$eB7ef^VNp66HubEL280OVZ(R#?mr7*nFezCE`ZQw^6B|R+?AI$9iM^!D%0Zy2*goqvw5?4tkL$}mozQDij2q6H3N -6U=a|x?wDOqBuURLCT88jk+5rI!ucx@do7jzb^4LU>e1*vX5y5t9ThIwamB(W4fW3`r^6w0Vy_akX5W -w4i@b4YKCZn(D_CARM2j@vSZBSJotV7IesV38Tc*h}>^*N-0(8SxZu+-UtGymkgwbxvyt951RNj=hR= -XZl-on$3*>mAbi6)e~md@U1(-SH5U;vR8019DlQ@Vf^385>VNytb>s3~e{dn4e9)0>=gh>?Og$tPZ}8>qI&5WXM)x8S*A$L9C^a6imy|>FO%J&i -Me-*wyM4bh&ZBNL%)XXP|G614po5Rw@h-f>j^QYFT9iN$Obs^G5akhYnw}J8G8rMweU-SIZhiO)lIhP -A!HSm%LZ6%>cBFC4FbXc;TLzqqjs@kohr;3YymDq|ZPj`He`mN<)0}+>b{G2Z#QXqXQWv=y&bA*+Viv -PL#THuf~u*;63-adW6tJuzhgC!_7HwYWJpwr72$u4=vqNMCqt8c`o1PEzw_Z4Xi9*CSk8^pPSc{%yLD -!<*W(0FWaopcz0E++YPzatkG^B=lJ1cI(6VOzVL|Zuow9-Hkir2v-#bj*;zjc8CGrXL<(7HfX|MP-tU -UpsnY)XuwSe#yS<$uF+!eA$Y7~W4Nq|k$5%7=M_zFRSS{wEn@ -_2}O-fx7gw7>;+hg~}1%HkB{ZO}Qtqu>V9G}pxS55q(Hx1j1qeNjR?}>}X!F+U=!-l~zb^&JpRoC!kn -veBfY4^&`wYMkiI?i{P{=n{E+IN4)(@nk#@S(=N-{RaD4-d>3VsY1IHDR(a|85~jJgb0=|Jku-I6nX+HG&;mQ$ -k9I&J4>>H6TBDx`@TZ|^OubM=n4c-;|pV${_Fc!epmna|BK`Qsgu!q?C+})G|V6{L6HoD(gX>-j2Ie+ -X##~Ah9YR1Aec}67GeT`6NUpAOBgV9iLZTWoCYmiAS$>Lf>Rs}fWV)NKr9%?WUFH&y?TaIU~Cfu@$nl3Qz!LrC&nf7R-n~qOaA6XnHhU`^wybW2)>jPQ_7~e+=jEZ*1oF6VX1YX59}RUN ->!G$2#lO9|IIQemwFo}a`b!h?9Fm}J5u?N%${Z2>B47hLz{8*VBSC9j< -IT5n{?aS@m*HOsBN;sRw>STeZNw5n -z|i|#%i-I*Epaa(6`OSDUybk-&~ld*ZT`DF;!nc@eXdUJE>Il(WB?(@&Et6}@mGh4x0LJaYpCK=yLa( -3M+WnYsP|h=ev0<1iWGLwPP>Gcy$*HQ%SE%<)@`Bk9yL`ikO*!U$(}jNmt@PG9q*M5FHynHnq5Ui9o_H>%dKZCY+q(%udQZ8aM|ZWKwT=w>S)CfKIW5QMtJ@v+IcQs$ -GuNaqC07cDe_w**J~2$+OM25$kN2uryI&>4aBJyFKvK<7SznGz4{#dPOX;aB8VsM`sgzfP{AcNE?5__ -iS@KpE-9%gPp0PJE>0x{jnpvt{H9`b)+uZUX-@nlGN5q@WK>snr9&ol@Fsq+=TzP!U8iGq3`m4%_3es -SvrN5D*ALoXDMz3e5)z+@MBoOk8fcCw8RC&WF3!Q&rw-dF&&BD+bn;g!^S-o&E>L5ACdZEk{h91P4Xn -(%02Bnj*-%ht~(qwyCg@mv^eqhtnXs^a_vV9Ez5+-iMsc9)JSBFUGDc)b`(|ou>>q4d!ZshNgLs8>d^ -U#G50AzH>Id6!Dw)JbKQF}mOPzQ3MWkW!_#%r9aN<_Q#+l+DU6bPwq$&YnB8OnV*Qe-UAb(yn%j9ZO& ->{t?NeGXvE!jA6Z_2S$H$8cvfzx;w?e33m81uGff1W$1o6S9l`cCSt~EWYZVr;U-(+@SnObeerz$(fjBN22=l4i>3eC -vHsad>2I#o6tVy~hQcI;(kOu=FuXh_5pv0L7kpp9e#vxU@+YLTHxXbU%z&?XWeU3H3o2vT+BknJ -x_~)eT1zN$ZXR>zNF)$>WtW-8YfTnL!X&ljh -tGNI(eVXq6(i0?EkZo(%<}$pf~TInUq7EoY5a-{Y3}{T_Xb+n^-_tDTohSe6@r2l`@v6&?%{R0WM^u=smf>zaao-A7rPhSL= -P|8VG%B8~7{Nz;-BDjTO2G+eorO9)>%)hlFEc;qmh0DgyP(wTmD+i%fP53w2_349BHZ@yWd9?*_vJ{J -xo8UB=I}r-m4`*RJ4lvLOrb`;luBb=tCx!#}s%pm(Tn9+#bHw%#1)#AOaicPe~ka%UCMZ5-(*=oDi6+ -YNU1uBq>kM^B(tB0kgL_#$3xlhrjTx_?9m{`rE4{rd)Y^nV)!{`Z{AuR-Fw3=l!7B~C;L3MNRP3dAt$ -FzW&iKuMlq7Tmxo>eCc(Sy_=7@Q9c7m0k^El2z$FA^$~@|H@JDJRSp@@{-wMpYyhI1gz8`+e^XDG6ob -r!RQTWIj^l~4D_cF3art(EDKO1O`*V^ftjKb>>>ynS=>u7DhN(4sPN;PKI`s%7Z1hj)l@b_ -CQdO7?8Bk@}|ItDo+7-e1c=J8+31c`f)0#5r6ln7Y)G{8|u-fXxX!oy*knVX-bfVa=QZ2mV}?iK$w#C -!+|{uac{ZxFMf39PNy_GY6CeN4a#--!r5eg|T}SwkNX^L1eLAWnamX;UT8@dp3*W>vHpicQ}_6ZG$3(>KsGLw`biyWi;UaD2w7^h`759(P^ZLPc`lJeAjjCWEf6?K%>q$q@94IOr3$TYLp$0@Ikw__t(fD4+l|634KdLK{!_lrB;n439_^mhmtwPY%lrzLDkPAneR{5j7QIEpNed$!^uh -8o6VWuaCbL?4>=Sg8#2Q8Rp&iB`vzz1=@8qP(;FDG%`I9S_$bB?R&)~+#*6FIoe%9jD^8{y2dHf`5L4 -X(ikEh$-4o3o&DL|gO|xL=nb5iyv8TxE#E!cyzfpzbDYqg_BjEBHY+`nBUN_W+=JG5jk3c&K(plx#m^S8N!S>Vjo!2JtQLC2)o00cF&OUo9?|ogJI|$hj0Gt+Q@uDWzKd}7Zm;@zf1ZSE8yguCKcIoG4bW(t&<|2=f1$0!kvWPxC2e-w1{|W^gJ(Jh%$az~bT -W2bl2+|=zPtC3wX#YGm#=ebv2v@zdQBs2MBW3E{r%A5PfDxkKa_Q;{|#m3|JL#UowD+GnI{bc&NsQ_o -)|_WFbOn~kR^(MX^KFo|A)FaYjPB8q6FXh742ZQ(6JBvQZu101#lu-dQ$(A2i95qoP~0Ec=QbYZCt285rFJ0)- -7UL1%fZCN3()5Ac?7ZiSBz?CE3vc3cY=-@yem;~kPEyhQ`BDsM}ir!~{&#!T?I9)tO=9FtMF;xBZ>0^O^YNZ6{%dVvz5|$|{9Rjk+oxfNeX#gMb(*l@aDfuSpQ -UBC%(MA4^ZW-TWl&LuzLu1+e^XKh6=mqZDJg@BGL(L#Y+p*s*xLi={6k53Lo?zQ;r>`s{(U6+UzU_X< -cGGj^k0{hzrmt^TT%va2{K9!1)A{O`jj05XTSt2=ZqZ3vNsl0S&s7;@&pT#d#bzRsF;g%qnLwW)*54b -u?{&8gz|)*jB46rd(LWmy4Er5;OM2|%0_&+iE5@jP?Vi^uoFqXAkGK=^166vIqG2z4Vpeg{F;#rBHTi -icHo<>Y%6NR-Vb<^QU9XM3Vl{*{gGznWu}+dUe?$B6Bfd3=C+)ACwdppU>`EX^IzUO(CKB-m^EaJH)O -~6!|1^$q&`kU^xjskz%dGmQc+oX -)(oEAECC-Qma|`qAc^~`L#IRKXpc>|7!==| -1&P_52meu@3MY~L!gaGP&kF*FpU#5!fa89#3%wKaU8}F3MJ{!$=3ASMHN`6ARqz66Ci@LWs7wDE?2$< -m=GMWu|buQ`P>wS1mR%ISTO>yYPMiOp9mKu}G*Q4vK6<;*yvawO#Ub=9XTQY{z{#~ -qz>%=QBZ^@b{2;EePMJFkLAX|UUZKuzy)BnHlY2DJcf9ccudmgyuqRbB_r(V?5==SsLJ7uT8NB90Y;r -&Iv%Y2gWULb>WKN8-f*LZ8_y{#rc($Vis-utuk-3|Si^@UWCs1qgGE~#IRC5wNH^v-v^W9g5-iH~3h{ -aLgFgFD~)r^xrO?v3GP`}uDEK3euS2R9B#u2haEBTb0_WhuUg{qxMf?oAPQ>C9qjCBD+5_`)Z{lJ7eO(sc@DvV_M+e_x;n?J{#ZMqd&_@kF -B%N#!n$VchG98>n#HIS1lmz4jwv$wO62i3#mF!%l`ARYBm` -}<~&G)BmR9-l$LR6m4P^U2-Yh)-dKi$#W$6M4}3RxihHMWP-?9<)ghYz+ce;@u@w@>BtVUPp;EgyOrm -U+IH0b`k)MT6Tu$QM#d9#TI;{+YWNlI!z+Jp_JI>uAzmOBQHM&)ghHhZz^x;vq`vzJ`~l+^Og>q)(?@ -?p%ky?z}@gFa@`l6~7cVw$;&?#<&vG46o^Ut>l -7Y%BY!1L9024)yG*(dC39G#d-(Wjvp1M#!;v)hlG&J{Q6MQSF*lD8)26qNi6g)u_?>c7I9fPJ8a4KD8 -D#4!PR9hC-+Ch%PsN_*w#b#LpaZt;B6t<${NTJV)^~a;}gYk?~qi@d*ib#}|aJilzzoc5i!)Jz0^MaA -r)Jj6GEh6&6`AoR`zS%o8c@WDVs8!+M~tb7?O^*Kz0$;ud8_k|`mA*NmJGbH2M?@W*aHJ>}>0f|DV!a -B@iJi_o6Ja(9~L>y|)wEgD)rqbfF3+tx9QQO`8*PKj}^{4&N_hXz4XNCk1TmUNU2BS5CTu%8iM&EaX{ -uBseo2fWda7(^K;A7mmR02u1O##a9aUgsZx*1x#M?@S{LFajn -?lE4szp$P&;HWWtUFiaqyp)M>0b6^{^O5X){@=`zCvT-Ovy6PNq>HzV#{U+8#;XQ)J0onHWYv;a~ -%7^xGDQNdU%*GtjU=6JQ4rGeD(_1U>Cvpe~XDjq2n*jSgVbTd^#Di>M$N=zqj-eKOFph{0>)Z#LV8s{ -mz<0cDK%Et|YON)e#)fW8O#wu=CYDSvInSAf3r{QQQxbX?e}_7(cJY7PEnYW#sLHUhZK!H+2(8 -2ud;?uQ5y=QBkNj92$yq~oc|#5gfydY%`TG8?4H%!H1Q6 -v_;Vv$b^FaorhafI#n?d2gP+1fR1sR{9#Rq@omxhUqc-ZOb^ixg9AY&x-o1(VM6F|^E0J`C_Evj5D9M -}NfCZ)_Ld*WdoHFTqHD)XD$&P5NIWj1b5W-v8Hmuriu#5=Mg?kU-gE`bPYc9aroLmbE^ker`F^{r -k*)%ab(KJO8eI$pP)lyH^Dlu8uM5`}V#efaF|UrU3182ff02DPoWzxE~YSqbEz_Otr6>MBt=97SX-#L -SL$8%Is9W__W0hee}2wK)O>fJ`^~6VBm9>nKE2CE^eeTb=Zf6E=7zPxs5XYm9KKU_iZTo!>fLCDp-tC -++wLa9|d*!VkHEQ0l}EB$F?{MwXYvbKaS*nC*2rtTd9UzWof=%OxUnp;Mn?A?r{O3(tsj#dw=54Y#H- -nzF6dA-d?ZmBI=K1Odp3tiG+tw5FuI@SL65!SMYYeRMw%-`4AP*uX%k4Nb29+ee0rux0xSAvkxxj3sS -{oie#%*#Yn0ye|*({Byzp*b{bQJ9@%H%k)6w$;6|X5sg$qr%G4FkJ-2Q8F|UtPsTxYj2;CW~B|6NcVV -GXrso*p8zA)Nkgjc>5R$=e$E!@HaMAp-%H}91;cm-rc#ikso_IydY7sOuKaxdcZ^FkFGdb(4-ML+aXG -tkpcYK48TmkdH~=tHvwo{Bs_3{!7lD+S|-j_C==W05*ZD$lxFT!&CS^T3upiB$U=A0o)B+dqShm!0y4 -UA@l6se{ap#d>)>pLDh~whXCyGH0(>>X@VNQZbS2tPt;Gzfi)9zwRj6_NATNNX)glKQk3>$p&rn6CL3 -J<0%UYaoW)BTrOdSv!b^(a!-AgC0ldHo*e5Qu`=)sJlymLyuqLs>wMp_2NGw{SB*3A@37}yr}kd$d2} -@SdgiE?yGISkWp)BW1ixMH_)2_wmGbgHCm|ls7=5CT*K+z-<@&P$?8Od4v(be|@lJWGzLD -eb`RGsmaMUhE7IG0_XwYSH42!rA1UgL8?G$;@4c)E^twa|KLb?u#@8%MD+%&?@o6LU!FHXQ>v>!rTBB -9dc1Bit(uRhW@0o*nEL4@KL>`W|Zeukj(Ah0}x~``08VIfZFSZ)_K5@wIp}FmO&eakM@qC|PV|ih|t|bcGHfN-o!j4OOh74WZZ1nKOUNiGCqR^$3@xwHv%w5T -BK1`QmU{;YeCRd+z{Z=;);T$~WGku+cS8tcenYr53Ke44B!f^O4NxLmE-oDo1JxT9B6S6-&>1Uhz|7M -|Yw)KCx$dAsv;J-Hu`ZJTDkO1uh;9wVl{xy}nXM15lYuj>6;+-$!D2S8v=k4(=1Ok3E3YrrP0;q04!y -11Jn^C~lA%0IEZ#gaqkP!&o$vbOCekGL#nj7)k{sDh0eZK95sJ9Z#7GSq@ev7voWWe6Gd?^VobqoE;+ -k$9A91-@W{$X#&z6f+IfE_Rbcz6`DW&MAt0keYkIQ5NkC$iejFaIE#0NM~-_)}H=2%QBnHMsdh^Tl&9 -y9h2;ewDoy6wATCTjDfs|Bi;!&xfz#Wdg6Ax4>8cPI2{i*x6FCEwuE3PgGYQ|C!Xa{yq<7tmZpv=8K6 -ufZR4{25bkcx -A}!I;jvWVe|fRG|;QLN~cTa-XgS<#NwJ -u$Ys6yVbi{N`)G)`5(HwQKSJ$Nr1x;Yg%(-xMLcmR-^e20W9GsQ5~C}!#%fDN52V6mc(^{$&X(aScDJ -0dq(8JOe}>2HU7L{HT&@TF7Bq025J%M^%Wdz6_Q2&eH{ -wYa^skDdXVv39&ZbtB(Uegw%83~C)q(hHNH9I$sVFO_!EB#v#YqG9wIdL98W(N@NLf}Tta9{7-grK5m -_JCynJ49d&hsty5x120m$DI1>go#Q!7B20>1=;51=fRgFOxNw+1@!**Ew_}DzRO8UpWq};IH;VGZds= -o25;%TQFQ4HcLZ -lhbXKswZ4D~F0n_nB(Z0Iu}$vn#ZbvA~8>&&CTIbnU9fYgt1A)%Lucf2UAV%w8Znzxw>ShUCj2iQq5B?jh8Ach4brPPZeY$L -+1>1@8K=$mm!H=ybT2>e7yZ8F$pgohvQ+^_&79Mi>O@7#%}0&+d9|Sz_6XfLjlEY8JRnz_%oj7%k%2F -FXmNQi<3Xq%Okq=R<%3R-l{!3_2hX$8x7Ibw5Fr;Ob^%CiTlDh-@Px?U0%nmOfx-<@vc!y4}`pl=#E*uNE@3s1(lKads@xnk;X?h`gMdye7mL>a>r1VbcHbLr0R4KCINo~slx( -0Z3am?mO-D;y&)Z+Opo>yX@v}e9;R?Nx-Z)F3V7%T&y4C*W+R%tkbMvLb{su<{g_uyg3`Ahk<(w^hZy -WWQt7E`pvVv7-Y2;HPc>GSs*oA&86U?I_3qbMP;MK=2adJ?XEL1FrVEM|^OYriyyTpw>gIN>) -SWoy`P7t8a>Ius)G}FOvOsFF7bf9hpQ>S^*^H3v-YALQ8s+vY^8F>P2C5j96Gw$a!rOlJ~^vAv(qm+< -uz!&UB`u$S9NXp5cx{5(mdwbMWFb++8M-EqQZ?EU;B}}c`K31DGJnywoIyXz4#GRWKgQArz>U8iU&?q -FXIp}dSxI`$t+q@(6CcUYwg`w@N!%JM?>h6-B?WquRe*2q^h|(7CgfufMmlooQKO|ZYiN$#X>}W4)d| -F66MQhi|zU~e*-S+4G!#)u-)aPZT;hkI@~H+3^_ES=foKVXf^CfK!GAnK>?mgK?i?}Lde^~7z7*UO{ISi^MQazfhd@~`SL -IgL|X87Ai*;bDTxG>5kSEr1ThjJ!EpFrMU)6s>+5f1d5-;D{WbWh5^!(@v4cL+X1*|PP9x31mdOA4Ox -?FZytg3-^p)p+1_m3+MXSGde&39@EyV_X=PzS#XTSo?XH#%dQ+SKMuHYE-{Xs*@f7C0hTI;(S#6euOL -vY~=(A@nf{X?IPxBcFno@e=+hogDE`X&-L-dB^0q?#@wm%6g2-1+=w;y@#xsI`1#DbWb?n$7hv>3T7PFSw7B_*(?uFVpv^1cHXU -j?#a8ptBAp24Xu0$QFt!NyNe3Z+Mm|LdRq(WeDokA=~#KMk3rkW!E3k2uEsMb3v{%NY}m32>*1f&F&^ -dV;PH_v4X%AmNHL$n`+Ck>267J=!dZxPhOf)s$#?F)7f~L&Ty5ka@4M5HVwa}$##QZQc;;=owbZM-E+ -!kW>EnKbXd@Qgtn;r=jRk!7w -H>gOQsDrsr6GB!)SxInO;kD=58vZ1_4grrX4RnaYD08;F$~|^x9`B-iJ9kTP#AmJF!FnTWh=fWTTo9& -&*eS4{_pvE0y)SlDsTLM=A>4S{p`F@!b&vbxJ>TJ7>X92618>wZ -!F4zeQ6jhMN9r3j8caHF(p4f9RPZyKMy$&bm?uH*$qR=RN3`;OZWbqDX`EjzhnyJJQ`?WtXB+&&B8#W -IS*PU^~y*nLMyJGN9jA*YX0b7GA94K@iS6)KoS>O9pC+%YP-#)K><(X1nt5;s#kCTpP%A<6F5zaOHET -iiYRH2y99zn#|>9v;8DN5L?&g_&?-aM)3b8gobGm^K(Js9GO--~5$;}G~AS}-u~MZK*Uleb}3iU9up7Eb8 -&7r_eKQl1QO`?nPVBR>R`cr*r=vBk0Q9XZn&6wKqd8fW^pCE2c!CP5AszKuoF_naAUVou&XwfD3bh@^ -krTINBubvpcR^k`^1YqpQ}i@yG%z07|EF6e9I`t$bk?@7s)#2{^eX;Tc$pFZTvwHI4|bU>BryAx!0aI -qHH=}q6yZoe7z=P$NW(07-ov36jEKG8%lSL+v(1TiIAiAVB##6yj9umJZ+<6OKW9&`lu$1nEV!SCPS- -+6n`pS{1o^Y)-Wdw+lD?Lo=;A836Y?|8X4%Px7!=poCkX*xkwLN?lTySBbLch@cQl_s0{s2@GWqkW_b -kw9ImK7`Z7mlA$`2nBi`iW^pL-@o=l48_qsq)yZ$d+aNHLD#3^E2y3p#CbY3ZY#s8am`}B5R27|+zv* -Kv_7AWu{hUka=~3FQ`rsd2#V#W_(SCi?{MwU#Xi4VxI)GaY3#DyEV&PzJ+SR^NAAPox%2Uo&WXAw?i6 -I=k7|+bhRbnf`Fyr=$BXhKA}-XpxH4J6R%aj=X}7JmMSt%c-L!07rv_1$q#Gh0+A^7%vy?04Z4t>aiT -$ZlHTCGxl=pNk#Y&i{6`u+rKTcF$j6|tt=8y!h)MmfjS|ugbRI ->NMCQQhm4>JvQ&w{mkrV_)%XCan<+X>(byBA+K;@DUDW;2xKnu2r*Z`)$(ZA{<@V7dK7>}l6bJHAST6n&kyRA-!;Y1bI^z`SzV7sWMLF -K>qMqmMj%PhZ5zw%T_G`P--kraTnwrWlhf|(tEcb?ZI>LOA1SvO}+3}IBhrJ{fJD2H9Me%Tl2}vr3&{ -KoTs5bL27+qa`HHL%?(#Szy*oN=!TEn~|Up!x;*KNwM^86s-FxjqlK40l_AqGe>OvHZT2p2}^MSu&cj -^;H`Z~CQmpO_$Ij#lS)-v9dp;BSYkcVc$@;RpBopMG!V+Stz%-2Y~QZzI^BpYcntEs9`plmz0PpDS3$ -1c;!~I~H$|3ntza=C?C35TFi0q87hZzJM6@=LD~W1QX3)rqDpv2!pxiEh=tn;{+&e#t5iPqHhZiU@k( -u!#nw(@K>^(arCZTqVG9s3e*+Rw{ib(rd682iIb(P_xeHDRF+hr4BGn$eHW -PRjEtD%@vpa<%q`UU|!0_r`pKlpA#Je@ -_8{a}+SSP5Y6CCs9B2&ny!?~TWRkI~4r)zuMNBYX&Y~qR@0x!lo#d0y_oF7MG)mJj!F+4TxU4}hwL1T -C04%P$S365DwVd=aeY6}Wl*{_aU-Kk7WXXPKOUK=)ig&tmSV#>>WV3ym8dRqQ|CM`k$ikVG_DDjg%KZ%3DI8#V9^x-2>7qx9Tdy+ -BL`U#!xrR9_e4{Te23XTjs>Nhi5d! -qsbws6EVfgyhDjTnvE7JOM|fE*Mp -K@dt>^xWs;}9(HMi1NWGegfdwn;mRE%MoDr$XvvO7V^JwCms=Zd$qZp=q;1HU`AR110yVLkr8!mV)@| -U6x!=Fm&a?1Sb=fvn+PpXsRp>W_4%A7oJn^g&*pYc@UCqjmCXIW@SZMONUYw#5j>mPCQ==~Q#UZI-@F -Hd>Qn{<0Blv+T`VmGo>uOV7)uw`xG_N6U704Hu>~DuBb{rnvEeVs~lJxglV+?AI(yeR4wtHkLkP-{)- -*{E}jU`bM!(o#CDN6k}>wE;Of4#;J(?c*$p%jiX6bcl`Fq-~!K%2teB9!>sH7W*Orx5!O^A-+^-+q!n -$eDgy5d(kX&m}6~^rI{SH0ABw^lcp(;~<~I-yA3qUf!mWTjmGD@6bd6T2l6_Q6U%ybSWByPOuh|fp4~ -4a*J7X1{T`BNodehW8TWyKtlutYLr_v-JRkuL;s2z6$%K+6upZjj-ApzF`dGGSEWkweBV{_eVA_{iL*Fj0favt2R7d$`%K6&H4N^d{qD|Mvdy8m+v1kjfWm -ObWqYPfAz@kUtTPBFS(=5T*0-E>5szDG}XbVW+4jPj9Q|;3`8?HKA>{tGkPy>++Fo#?PJ|H)_`494E0 -s1c0%Hc&Dwsdig&};pcKHGxW7MC^q#&Kq;qQ=Xb%`%_!T)jcRurlVqSQ)Fp%6JQG!l7=)BRQ269jXYf -Fa|mbf;%J(G!%l$*5u1tJMoM@*R@!ZgVy4r-L}4$PJ_eogxa5oVasUpqoeO#n~?R3aTjsavJ5B=d&a% -sCyrrC&U>{JVNbKu@Uwmn-ALe0`Z$k)Rsl8Ar8S|6`xKA?~(iwH|1BB!&(hohAf0kiDonE -A*8iu*-wW>_^2rdpp>=3ws!}}(KPfcXQdz*bB#0@f8X68yfm!p9_^^8-6B!t<$!ym`H>tR -%bH5N^R#?Av5-23_B(v})`N=t9!@^yJVCi)xB{%E8!eWyNcL1d4@B7Ph+^F`A%9idT42J)(3z{@% -S&_WM>K*Oy0I8bG_a*&gcpvhbTyUp%VsA$@{;QjR$;n>cNM)Sr^8@K_e-Td;w?>zoOspv6}s-NKxz$g -FJ=LJx%q~@BMAYHpW{~tl)Mk`LyQK -KRgH)1|O;v`wzUH)+oiUv!2_nsky9rfTqr#+ -4&`bG-sOIwwVjol;8Oc&DlJ_|eP6mB~<*-r&^lk%4Nk0YC(;VBu8)SGJyfnDXNP36PubB~l)mpg8n7<2mbaDTS#v5^T2!`a&Q>RhPjkAJ^KrXBQ -lH(3umTxn40)*bsEX9EZJe@*lfvb-282{G6xxZQ5(7Kkb&lTX5hnDM9X)n5kc -C6R=*=gtntIG9(M$tSRggU%7ErHjWN?%JMNS;anE<_j@>+TU@)zrPl53uAN;wDJp;PN(ws -**z88(9p8~-Y)3rPGH?Hqf%uW#xUzd^KMx;+HJ`bC2U6zw*ZmL*SJGwELULPJ^-TAS`6x;?YBDyeHJh -YGj|arB3cUQJRcym)5BzpKkH#K-b>FVCgO)&ae1s^|pCStG0KKPvx#@?18VtBeW!WQy-P9a}-yHcCoFZ_uYq#$Z-n`HA!I~J8Vz0UV-Z}OZFw% -o>wc;sxuuc@~LXyrY6z6jBAZ)v(`-JQcc;jz=7`cki|<$OHHC1o1iE@d@aM9ixp6oU6u)NUPQ^0b4r& -h=UBf0A6BvbG} -C_^UGd3L>qTOe?EjVZ;$VI}LyKDv<=?~CG@9boyHP2y@oTxo`n$EB_WKM(5JKTksWm>z=MS$!OtfxZO -Ijg%gG!Fy>XwK?8S~QtwY7F+`--bi8If7hLcttg=h;B*V_)EVl(EE5mjV9?>XK!lAW#IicU -Tfoh#5CnItL)S<=%?qn-YOr_-~DxH@%)v-;RcgyQzTUgx9FatBMu9_Svu?`{H-oCMP_cT8pz7i|YAMu -F{-F%+nDDcIbxeUK_reKROS2xMen>&k1NfLf3|2fkI<+=jyjIPUvvendizjF*9J8QrXV+Li}srCwj#FDarp*r@bMWUozcoC_2dOox-V94mKU`C`2|?yCtw -WgIIBy~-jON!gMyq`t~Eye+l{K2b+2CxHcnEwj7&Vs4zR?F!g=TX2C4p7X;mXXS~t}|IncQhN_B9m3x47LsLW!GJIm^` -MHnC`wsbILfTsvkjhXx&ve;hp=U9w$%Abi*iX3GX!bjP((dMR{0>Yggqbg>qHymG6T-d)}&1%A=4Vp> -S@V%k4gfVtqGMwn|IUKYGKCw&xM^XRXWBWe&9C7)`{~(a++%XRU)l`q^@IUh@Oe%n_C@{wM@DQoo&4FE -mV$VZx9Ya&bdQmZ9<=-YX-&y0)1Ukq^42LWtP>HQGyQ%qo?LX6jLS`mO(y1Vb!XUGlC9ZS -njurn{(A1XFO0FQiI7TK*G%4J4S1q&b-X!i9%?ikH%MwDyk+I+ym@_F{W-gJR)A1Cotp3bSD3A791i7 -U@Ho|ilOaH8rapssXVz;+dl*_6;D?GpbJ<5S-tsaN$k8LRRxQ*agn74D6Tpt#EThZO{(vGQ}AxDZ-f5DLh -49>zQ&!)U(vM;TZAFYeAy>aUURSy9A!`jd(>HT3sD$JF5{y-M^-lW{dkBG^h&bZm15Xspsd+_vKHNSO -|9~3F7hw~nUH{u7`;C7zP1?ojmmbvr{YA?0_&-_xH$L1R$Ut%LGYI%^*Z9DPfA#zycqqtQbr{8IoQ5~ -VNFn&A5(h;3W=W<%AeadM1E&Dn!EcL!4V7i@ZW!`*tH*#m@24mcILf_?k74}oYeiq{bQ>nzj&E>pL!B -F-+g>E3|3jsKT*8F^iBq7l_>00J30`gkn%P@qcmsP$1`G$V_a(vaLgof*aTH)poCH^!(17a+_?;=JCg -Le*i*0CiJGi|hpoAu%AiDh+!+(VmmGg_|xpVqE59M&$b}6#zLn{2#$Mriw{%;t~J4=EgerXwTi$R`!s -RHFWl`mdb-^~NeTjRzX6P_!svb|m}8{Cs67*dt@$W$5lNF6s{s)=8f+rFK6IExO@zkM%m8=7?nXwiBZ -WsX6H-Ous|DRR*`YvqLR7yCeohckQsXtSxJ`Pk060TD+?m6>KcFh%btne|7jO#dp0`1|nYTPA2V$_n{ -ic^D}6|9)_bxA@PcOV4nP+4^#Yiuh{Hz_+)EY2^pStgjANLdh2WHqZ)hH>A2MS`Abfz|iKGVu)EpzPD -bRdX0SXYYpVvd97iqGbDZ~j7s8Ma~rhAOu<->8{C#(?DeDXC{~iNz0L0z%iWdW^ipiM&>DYq`*I5{wv -)Ei??xV>!S*vVfF}j0`*lo#9lkgc<=@aX^w;p3pIBp<&2?n`>On@z&CNn{FBf~%One4H>E5&zb*FU)% -kA3oxE4V~`mgBfG&F-$f^Cewj<;@)t}Jj^hAGs7gz<2F*rO~A&yeqWJ@8oBo#ZsbqJEwCmXc$q=FBpRVN0T -P>yhE~Kz5hsVu?z^Ty2QR&HWbk>a$-UW7^R73ctpgyE?=&1YD)>=ru`_b+7g4slsw1y_l(HQHRTMz{E -V$p{png?PN*7X-G%gPKGwya -lKi4PXfb`dW;Tv5?<)5BakUN_kQn$HrYcv1Z|gV*$&bWq#e#YDvJz|yUVYaREBp9Vae$$QCs9nUu3JD -rg^pCxz5n^crfFIfcy%+n#2KH40-7GHlb#7^OmmX+6WpcKbLZ+q?KMR*1{zXEdQn1 -aNOBi0M{td&rgAx%>w(C|>2$xxMO(sno((Emip*hm)R=@vrVEw3hUMHMqil)|W^Rj((T>KAr9j1R5|} -C%fd-48&tm>P+{`z)4T`8LCkQ`TKkOW*7pMcWQ||1p;Z>PFU(ePdm6mGG)3+E)qRtM7zIYB**>C4Ve| -$ny# -5F3i=~`_C-Cmdaeh`&`;<2HokBrD3DmMOR%uy0lN0%Py@V*Y;cac^nWZufzM3=)!Rby?d8eW2VaFJX?HM6Gct@+) -8RA_NJD^@DOx&{UTL%8u5JAlYQ%WnWl4jU{6 -bR9UK2ZY1!a4<{`Yr#6!@tD -+&Kcl-`8)pk-Gp~{FLO@EU*P`!|A)B$I~Mp^`JmVFoB)OLhEbaB^1dhS@$eTGxbV%P?CmaMl*VHI?tz -IJFL8lB4t{@Q{>goTKD#mh0;^>BvUXs#N+Uw7 -qOkuQMKLucxj{RehFGm#cy_V7;wSCOKtMn)kYq<#ZxAH)igLbolxkt6sJH}OW261S0m|7u;&GnWBay@ -g|Ik2sOr!)eBQa96Hsk4`DMO~@bIb1lu}7Jlq4r^pL1TXCN9aRmT4n~L86zv7LSeU>~*6lCq@poKf)o -{mxo3z0*SZ}wspK@V- -v>{KEHCb8-Q3@(kHgPTl5ecbN-kL3I&fy=9{9ia6bhe3$RUc6=y< -g`OQ|VIJ^w(Ca3rM>aYmF{>cc@F;qQ%g=&u7;}k`A_ -FVKRn?nbN$odx-B{AgdYVEY|nj{)W2#do{tq$Y-qiOt~~pQQLk2I6N&Fy9o?;b%LTTb$9u&qS8SWjhW -O*p@a_c8gT94c!;+I?UkHbfood$J8d9fxaX1PGnX0hvj6BHWR7%4%5OiUO@(gnMe+m&XgbAUj` -|Z~E+}r$+0U`S{YA#OJGrg}@Px9;NGQc!Q#ck4r0?HaS1I?y~Qb>jneu{Q_mnVHs1q%FxVL*A5t!wR49Sy(=NwYrm(28f$bhyX5Eg%Ie+=3Q;3xN=f2{>c}YE&QiGW#BiPUtl^WBPi%uAaq -DWOTa-&5lpb+7U&;$tX4QdN*8~cR7usE3Nn48P&?!pxaGTxJeh%9a!&Ii~m9Ezt!*E%4AK)>lg$s+GA -MJcaS646+$a&Ub+gAd$!(f6e##?7!isM+F7-4)qpNfy39@S3ko~DDx_o9<`FhNLLHcLJg#AS{Ud!nvk -OVfr$KiFJin&a)>AGGRzzvIqH^`7yoS;cd=rDIq6J}js5wKRuJk~wuxbo~P|V7;}imX5N6oH~0cFKUJ -lYPzp&^md@qIXfA+Pen!&p1ZcmsdZbExM}|DF^YJeLKDq9wO~c~nqs$wn5=1kC(mi*a`5n&DxT_xz!% -zOlFRbh%ag+A*<+Z?>v_kKPx1=EOg_IB!#pn+t16fPy*}f -jN^6)MIaZUIzj7%i-u6)ucxhme -9Dy_A+C(i -nZdi`1`(aMP+B&E)emO;>0mHPSzgQXvJ7K!)B%#S94m;tnWw*R4TE`fpZV9Y -rWn7`8EsUn^{oIJf8R(zmE$R)N3NhW(i34`;zeQX<#}P@VV!+rNoKEP(g;W?Qq1@vu=k|9T%j^^m$ce ->4I#zRuqKT$=iP_C{xxATO6)UBS#UY4YKO&Ov}gGLlr$;EwotAs(J~U$ZCku%h#mhf$0VmY2%) -mb>F%YGh9BNk^(#-F6JwyLR}4RiOQb)slcE+{;w&&OVxmWLpO6nb3p%(>e;f=V5m%yl2MX`b-5^iM<@ -i{`lZDi?Z+Y3JICPUT+)h_UplX%(kp&=e}6-K`2S~@jAi`B6AFWIE_P+83nzg*v=&#CunM0v%CV5D~B -ujwY7+##K@VVT`L3R7P#Gny<~W4GqFDAIkriy7y{wQ(d=4@A -(z$p7U*TT2x(L~^LsHTuH#Q^)7p+0hi@egS+x=C7Fun&Wj!Y_yPN;uKs{m?6XXZB$Q<;Uj;bPKi7%JzpHq+@nBNL534rcS$+`OrNC -!-8+Irs^|WA0o!;`r(=85*d{+Uj|OR<1_8E&!E_z&UK$4r6oDab&c(lsP7CC++1_)x@6SApD!jx=21{ -M!`k~%4N+H{jQv;6K*%Z)UD|J|%W -_iF3ZV|eNzD+NAky^_IuAYaClk<4?AuW>tV=V~AuHhyKV7c#pe%7^9+YFK!7uAGrA%-6-Az|`0YjhY0 -N=0YdTw4afDelBt{03f7UZ9(47XXie$;*g>;5>_N#mk<)Q`OUnVQi5+-3iyK>T}`{3VrrnXTk_^3*`s=YoU{4We`d+|+w -cnfh_8RZEB#yW3jBz#e}Pxq9p&)@UZ+iYc`H`c(b3AiqgMgpk$7*;DeLq6p?0(hE3+TrME%`KKf*2WE -4=*`+yYp9S9XC+zWr}st) -N?sEA{hYBwQq&-Y`VXgziaSx-OI(O=FFEz?h4z)_nX^kb@EEN?0Lcs>LbL}PD!jOk563LO#9q@%WiBN -vRNETS^(Xt*os64--R;qwj+X{1BG1sTFUSC-v9E^Zm4MJhuu4%RI(^S?Tt!pL92Pg@9=9&vTyz5(v@# -ZhbpgLLLuPeLP~a<&duVOB2H%c*~ys>`^gGg-GC0jNo=xdOHWGEpT4~~Dbd7o-6?kfpRga$fHXm1&Rjs -#o#t*hQ!HmdA$<6Q7x;Q1Q${sX&!rt1!KZ}Q@XY(v!GG0S~yZ*dZ4g8{>To9uUVKnDd2_+=R-630U-p -g(&S02p5Z{Ys`Za-A?{oPk_Aikbp|-lw)`XUA)u7FAKHkme@eTa2c%z5u?uWDfGekc{; -uU3ADoJM>A>LGvl5Ko7g?Fc%-N1(ox02bW%s}sqlimg+HVxbCCrC_?+qKq!V2uF6eFT@LHr^WIo6i4= -$14Ui@D?J(+4eO;Hus-x!UEoIhG1J@u_7_bY=9r{W_jt}9G9#t{?|xMZBh<>`b#9f^Z#EWvAM9s2NJJ -r_F=eq@Cg<$F{{y%|W>=Um^cf6Rz~PmRKGb+f -Zxpi7lZgazD+~)cSpBa$Ao?IPS+DTK6_vetMKyfaV>=>Aj<=MZY%U~Qx -lDAA;XBdg3#I~|8!JQ^K*!7P3GZ+g7Kk&DjFQTA}ss09#cadxL#`O$P(&)JC%1CdJ+6@(mewUB;B)W0 -pa=D1R2hX`{+35bDM)4mqVo{kg)&O4so5Z8Kl=7o3di%M|LU82&PL0BNg+hWhi8Lf3&5ieligY$E9Pmy_J6aT&ejX1Rg&wTt)vIlsXD -&*owQG;X<@L^zS8WqrqCh7}bLPo9Rz7{> -GS$<7rKgN3X@LB7^O3JOMp_~Pnmm7pox<3n1W>HeFPtf=e%wQ0*=q;ih`jCp;SAhUcOiwbBStpiwbgZ -n=gk3fL|!4UO0lRmhd|J8RVCkZcZbJ`D%|Mc|ghOtTj(mE#B;-Z+I8Jdzci;r-ifYg8_7QN&dbXMYeT -we6ghc+OWL>*w*av#}9rKp7^~}zG+N+diZxPcO*<>1i?@gL*mG$AMt4)IQ>O4H{4n^(p}z<4mV^AcNs -ro7ptZ5uPq$W=Y8PoAuE@Sc9C?P*dUXMH>#P&o3QOBEC~NQiMN(*GTrcXGulCS@ptNHec;$fL-{Ua7= -Kv?yu&%ZoxFlN{KZEn-P^o(>?d|r3XI(FIoz?I*>l{Rup+!GA!XZYLh6_B>1F%S!%<96M9=r(lfR$N7SArKU;aamF!21``ZwP|wHY`Y2=21*ux3QiByI$xTk|`X;7wtK46aBc?-pV8 -P+$kz8gncl7494Pwg2lVDt~BsXe`0b$Y^q#pF;n#9v(u1OmKX6Z?wuDWtwCWbov?vTbkcl`HRd%99Fj -{4nCh-!8&HD{*V4C9f~kMB1DSLvV}UM=8_da1IAl3YMcHJ->Drz(sk2>oyLaGT(Cbn!l&Uo-?X6MiCs -yZ1ggXf6NM3ij`?X#1E0pIW<#Wyi3Vxx}mijV*&{5C1aXnG`JpUuf)}gE8kqH|u_V1TOCBSd=&zQ}R7 -?LFW}kg8F>5auB;+Lh3L%DB?E%Z8($oqOMPIaWmv-QsjEE@3*0<1;!S -CKsu(MVBW}p@9n$mf072jpx(ZI2t$|kg?ty@|&Dk~Q%dzuHOQo;x$)sC%d9}(L9$%$vo=_9ahqJClK~ -+9=B#>zzj&vM0DxS#!gTS2mj)0qBdxI%xISpC-Mr^|sMfQ1pOPU(S@U7_FS~|Naycz5Wac$hYDd?H&0 -ch%{8AQI@7Vk`rSf7q)w#j2sL~VrA+-k)rwRVO}X41bum-J@<`09GTZlJ#nF@JN)XAtwp;om_FLr@rv -(kO*)W9k$|e5z5j*?JILPIQHYb<<{cDIt6>)Y0+3aby?aOZI8*mB?kE52Q2OzK-sx%*{G{r%v0T60wo -AP2LXOY)+Fs>$(!FFEz-`!{cWR4Gy>T?FLcdhJY*kqISu>^|bZ;Z3GG1u!BgpDW>&u>upw$+vJppjVZ -1Rj`l<;ynC6$={AeBo|3`4@5isj_I`wzOrQnxytsE8{@nTFe;Q)Gxo?L)(fk!+^7)JF$Dbi)f9-!BV! -mI=KY^HDc65D;hmbgTAu8GrbEp>V?mDLL=1QY^{#gjFOcSiTHI9s!on7B|+!mw~n}MqWk4`rWMJjj8M -5a&`wmKFgXCp`I;=ve0LGpd&ok{T(Uf%(vb!6MrA(AqPLjVqo=2_ -?xUqHz2r(V&ac*1$-5;Ck$=(N<@xT}XAQ6fdpa^%F+MIVRxh9P|UMu?|jZa0dkp+G>_!(g|Xm%yj$Ke75VioRgKXj^QZvf9&Fx2#kSSU50zuwb6|o9#$7t$O>$ -f@3PTx1<%~BL87Fbh-nuTfC@lUB#BdX26T}jZcd`U5%^uU5wOq*&W)1#tLCiPJbylt~T@jEkU1N~`9^ -Dt`&}h~y3TX2*pzi%jK~OkFHzzZJo|gw#bVI`>Pzw`siZC#z@J8*C@#7ikF?~Q3###dg(RP=o05>Oj; -yN+#p5^Vi41jfoClrifvc46FC6Wkg;{o3obBewxx8rR!&F|Kc#g2YuyolO&i&K7k%Rweyq|^%lEq_3f -QJtC8Rr=$!Qn5A{T~tbZ6!VoJ#C*(VRUW>>B{(kWZK$F=lT)#t9^RwJ2jEc;OgmM?P2`POY;Xl#2^gK -`-11~#drBhiMh30NK!Nzq+aq{TPLU{N)1%6ybAZ#pgr)C5EgcLBo;j}M^ljxVCK9ruElS)Kz2#F3zQX ->^bpIK|oZ9qW4)@>2m!BQ~8Mu5s_Rq*d(F{gym;zH6juGgJ>YvKE;@kcV@6zdOxKZ${JTA+0{PWoPIchHy6taYjTdtBUM!8R6&Qbu-+PTs3G`uzEWji%;D>i5^Vs0Rh6E_*d -wx1pN(3^bJ$lVIGtrvRHBr8)gHI7dTGz-xmqEu44L}`HjoP5=+U#csgYeM_QUZ{4Yf>36dyBd)5_90q^*up_Lbu{Uaqr3Tqz&}kPnG7A -rj;lOw7j*aYH?S%*RX^FDA)wtLOHRo#uSRKgBmC -cha=#DCW$;eJfWUEc`G2MFF_fF(>EiakyylZO5Tp16*AVzPKKzcG??xfL$*Op1|`r2UQ%#u1f@Q`taP -+u-oIV@LCKb$@n_GL-a|j>tddcp;x;-3JuEmm!g(2pcb2+0lnoFAjFZF2N!28Kx7+#)7%^5MWxnGU+- -L6OMUiwKw+O4_=iqr@kBeAKL@~*2mf>;;9FRuv9R=&CDG$9X0Y%m^ofkjgqu}jUeZeu{(^gMvTO1f!# -Sqc7QUULeZ$lG} -@DSE0=p0Vf?`XpVe+cM)pK;{bZ>E}y2gBC&hLeQ4yasN5>*Y!A;5u}J2?bOcAzpQI6qyU+zC-M6=JHv -iuZ1CNxsHj#8)iMrD+*YOd)rP=x^taR{n(TYUO)7efAs{-qc^8iJ;ZqC^0SMwR;Mc82(eR7k~G-CmQj -{@=HaIq@}AieJo19Af~k>g6D2> -D>xppMWiHkPfU`;*#(<9Ex=_bR`wUM?}7$2lJ#pJw*tNz;q-3K~9lo0Rw(N-oP@NEt-5{FZ_{l`1#$^ -#thZv!&xv07tm0AJPz~?&+i`B``$bVw|eMl=BbOo03r)%W9P(aF2w9as6b>E4yG_?5pTpBZKd92BdOc -#$`aR6LfIo#bQSavb9s77!1dwR3wML_Be=9&TQv|z*(&C-N!|3XdcJ{=K4|@UFfHb!Y43G+f01Jfy%v -A{SU50PL1YT3=>Z+s`f)suSL>f>fP5C%2#3Qz4 -u(EE=Wha{?fCELHVz{wiZd`plgRoPN`4v?ZJsUgCZR?UyZI!t1sDvoQP-7#BiNQ!T_c_~a7tGio_yY# -L~rh!Yvi&s=q(Go#Zcs?wYD<&O*$^#WbZ?K3vf2;muRbxZXHEG>-60w^N_6_INQBDSGv6!vt?V$@XFi -CUBEcm_2yPqzOH`_xhQ56zt8AhaxUFy^`>wfZpme0*DayxEqq#oC=~luP{cu7P;~YG$ml9@U3M{)*4B -8)ukscYEfu`(pZa)qzAuUbzYInGP@7*vk>tC8Xp2OEk5EJwJl -s*7dNCIfUG+!42|JPtuM@bI8vmEbUMm?zH|6omGhwWUGBPSq -+9h`NR=fgL_A|d6Uc=q(?0VU31`3=W5V@lvhXG*SORW8rJKKqJuqtUQDcVjE|a>z`n6uGda*EgtTqzm -MAK=_FA>5#w#UpUCIQj*G)hY9&fYXkus3gG1G|5A%t8>i! -NjSJQ2PR4#DYpC9YkHqbAs2B_kSDJ^d%fzgq*vx?}A7N1A-(>o%VZ^Z&X{xupH$yUvV#(0KFS_sna-Qmw0Axbe6{^@k{y3?h5TP6-~c{+st+LMWs8@;2M&2e$vao}v5My5XZ^;ntO -$^%!9w|+%;we$7VmCYf{wiT`7YqvMYFQ1|`(isJXJ=^)c!6m#M~KYX*6lAA29q2@d<|RI~Jho<_~-fNs -m9{H>$E_M&@D2AA`D<(c&rErtl4-oftW{+DStO_&HC*!mU{AO6fg^3OdC(@N3uk7kggyZ3r*yVO@ccl -2(uK-7tpyyJVfd3Ssj(#+S5RGzmUM`O{kuZAG|kn+cCfM0Ro4@1e8!waQ;U_Yk!0?#L&>D_~)`7iA%I -q+4vqtOpv#Q~@Ff9Li%(zd04*Ou~(P&~IT9vp63fR{6|y?=oG(SAAA{Kxz8Wk){O!JiVKn^DSV2~gl? -rjt0-GY?E9$2YHta)yMXXyQJ>a@4a|5Cme7uJ4dm0$dMlpS*g%UQ;y6!6RI;EAgx@p_dj%zD~mXnV51 -hX!&untAd7e$F}F{A&WG{k(v%Tms3QO#A!kz&wr(UnYGIcty~!o0)?g(g_^slQF)2yW(+)(WTF*``KIo7scrOt*r`0rzf-sXyTlxx8^OcKb7#zwE7J4y9?O)4JGt&)at;^RWRppQE -q(kMj>7YaXhV&8;JOvN#yQ>a%)0>2hujWH+az;Gj2hN$>I3z!`6BifQ?TbRtUX_z}X=3=Sy*K!UUJ}x -l&!_LOc;i^W?xfhYewWp8!35QM36GRlbt~x8$V5G!CL~Om{J;Xt3U&mV@gqAnoW0QAbDboO -%*`RRpHBfx=78bl(y2w2~;9mX%B3uksTM%zg$lXT7LT+m-Z!QTdzZtx_-qSk`D9l-^qK9!VCTyAPo21 -=udTht4Wbwv{UXFHHlNJK^3wfEE=%El{74%rqz7@`=Usu3;7)xy0$73%~R`htkOW5(7;Oz{BnOivIk9 -zswR4}OXv)y(4q**VuM12ut2~V430LHFOvr;_n6)6b6DADjsLSjp!n(x}e8_Pe@=@^wQSo5W)ZBFg|D&^Cq`OW>kNVjv -rvRt3~U4JR7{e0AFOI*{^8lBBtXKE7*Oy+|O1E{FCK=wp!q4%Uw6IpGi$~U$pRqO$%=Ww!@e;D*j|mm -w2rkm{XqZLSzdvp?%+SQ_4LH1_r*F3p*fDS=blYxX33^TqE{W6xK~$g(Y2|tRj#KM=z6BR-+NB6^}a= -*ARRY`5+wQ^j!#Ik^9ypHdZF(Rwr|D4@wfCVizq_z@bl$iM%A$lbH^W616$5x5mqWpNhBQ<+i3FYSf0 -cPsS3o{(UW$1Da>)1vqD8;4NJnfoF+PY7r{12~^UmwC@P57B|n3Wv&!JWrk3axFxI6tn ->C1+}la5~+!fJP0$i&~tu?G*W-B*sC&zb!>?VJiTQIX=l(ql}m0=c}qh%cx~2SKY;m@9b|VckMI&dPg -jyN$1GmLtY8(B -kP)>uXK3hJE~z`Yq)_O0G{xaSh|loxasj-(yo`Eajesx7c3COU~kd7v% -|hHqWhygHL=-ueeYP*U@p{fD`vKJ@NSi*=Q~t{)x{mu0 -6gYRjKsJ~i>@f*H{9;4T?uv=Aa1hezDZ*8(o{Wxh<=EdZ`7WeRNV0x!#vxRSF=Ps-AcBh+-JPVf|!$n -Nb-OYLtbugw2z3kOsG!l(Xa&nv0AcmFz=|MmZ94!<)qJB^1OgSIZhq4@xo4Qmc8`e!8jAGp@HF@V24@ -Ru$BWW1+@k}dzVg2GCvRx%c$8%ayZ4MDcj8oKpuBrDJQT*HdkJ*Mb*!@w0}Hr9phNhf+sG{t-KBC=1C -$Ls66B-IKyF|{(bpRqh-pQMlXEY*I+m9K4f$;6h}qIc&6B-{jTltHEEi{By|<;Gnv^Py_lw|DZy#3wyi+e-IQacd>foU;WDPcxT2tM?4EZvLV1ly-i -wi??&H63@_gBCvezNWhHHYnwxXy-2jVc7t?!O0N#;*d~v+|kchKu_Pap?Ni;+YW{j1K&cK$4lSPBrI9 -0T=HVdYQm4UkF@9d8|N2-l_lbqVf*;lPwWF@r~@WI~phWiZwe{|cm>39W#&#w7BsM{{^X7A`zJ9q`x-W(;RB$2vDiqL>%3GuGhxYk3P|gp=MY2qP?by04lX;;Idw&&2K -7{&4RQF~3F)sVuj#=*LKWbLhI-w68A7YoVi%`Q*5%sare%Toh^e~n4%$n(p -si{@{WN{h(v&YMXXxX)**ay&|Toe9_mZ@f4IhVHIzXa12+qP!Ol -`cga&aDKBVm6+Yg}WI~y!FiswJ4FJL9DL+d8@xv@=+YNdGp}1qS4 -k}zm0`82E3vY0_>pK=wE2o;fH*p%Z{h~V{R;w1ApoQpLky9bw}K!ihbk>tp6yY`!?R~ErBo2S2W+GS5 -_FW;bez7V)?@5&b+m2y9?9TW}Q843K*5J82k;*Ty_>e~?~IY~8g+>uX&K5SISarTx~*1 -fvGx#u~mG@pD90=kX8aWXwK#U3A=njP-q51C3yfP`2-{K5<(gZM^{M74hA8Y{Q0YOt3~K>zn8^!^b?~ -X8){L>!qB}VIKGt=hfO_O?`O2LleC7S1oWs@G!nSfii~cxv0hBR4u4R2&V-|u6M&t9o}G6wG^sJx6?Rt0{BzcDyiR$ -gE(l}E{A(E&vpnplbS<1CA7Mc!-@rQ<>#RGIU3cEDZgK9ki -BFP=@a2hPz9nW97Q&Vm|_4HzCo%IjwOf+%Dig~UN!Nnc9^%JAry<6h2$2_+NAi|VpJ&^l$p!IQ}@W+9 -cHGDbluVoeB>+F0+VfFfdtRGI4suxvquy1&5Or#OCE8xfVNyzD9WX(%adi^EQOEoOIM~-f7zVLDVSd$ -aI@b~Hry+&%~mP-K+PP|ws_@15ZeCUZ~1tbF0|ytfRI1tnSJG~m2Ar-@{;F^9TQ1i!zb2b>*6Td -g}LUhtVfl>WpXo*6Q-AgaotKL~iBjEk|n*GLCQZf2{`;LAaUa%Yw*ze2^nWIvU#gfN2iX7h{4e&uAb5?@X##~AlKQc -~q(6z9doi!S-nH-N-hR=+Du7C%h -{i-bU8RZ9W2}_jZeLC(GDglT7z|Xtc4|l@xELek(HnOx}5A=nT5CU3%}~V92d>O77UbO$2^ShO8Hbqs -=RZ+<%%y+p?p5UN8*z-Fmf+t7n@y+%_)%OKL3c1yJ%^npgJ5$GL_z0jED7=L?q~I$~|lS|fT^| -2qAyb1w3XRs`2=eU!fn4D;NRyJFike7$VK!tsINw2~eHebEtfWwtthLyhGR-pr0;x*`{R^{3|wN_+lv -b0+waHUoP$_5+>y+pKQ_YSjwJA2Wd8zxLho_x_dt&hod_1OJ`nZ>tCXNe}Lmj)bRuziB2^A9a6pRpSk -~&X67IRvB+Oe(2=*!4=Rg@}V4oMS8nDw_l5U=a*(q^gkJ+;n62=vJ4PF>PRk6H$!DTN7b@d3`iZFOJ!HIKIR{Fstmy -BZsBx5g$%7<{FPwJ56;xjT^OnJ^S1muT!@kbIX^C{t$Sf0_vPH%B}<}c!+k3-eNFDgoyAV;#RCzRg#U -7d$hbxK&|`fMYhogCRGCA~bq*WYSHKa?)Z!$gusr+qAUn|p!*OhFELW2}a2!1@uVr{e{EO!@k*T`hoE -BaRpUL=^$#?5(x(9xfheVGAyY5Mn^G|F>q5% -IB(ND7T#xh0{7=lXK*!VjNP92MPvt`^4K^&`u7lJflTRt2ir`4{jJVL?`;J0XVHlYI^xmyv3(Y{%qwq -S}&l7$=NTu$2g)86|YU)TPj6rYUBJd{lV?&q7l3E!u#Yg_~@)FTCLatq7guVqnir>@Ncq)Rc@`t870k@d44TxtBOkIdzx_+VYPFJ-eU -v-BACK$#hoDIMI|k`G4De%G-3vwq#L35_+7Wi=qhRB1dO?zTJ2zIjc`Q|typc}K-uK-C$QRvP#2n1T@%vBFa4ua^uffq}R^*)$<+7IlRV+L9LzJL@su%i=$M;LXj{NwAk7|r`*V0(ZElDUMw4HCJ_G~E61uu1$A*{hV^6>`Wm^qzC#k=qc9lM3IFf9(K=z;#gYPLAMEApuyEU7HP066b-%=y$*NfrQ(` -KodFfUFi*6Shg@hoe}bi`Sn4zzdOEIYmeW~H0sDN=q|=FY6}%o&R>rE}4lQX7N4*OKhec5+PrEfl4Ka -F;N45Euz?)?sE$for%{A0)1~Y??!JA9xSJIGBIE6V$T_i|RTtJ()UCeMPLjAV>kxmYv{(%G(!;tiBSkl5ZGrC -9JVVJqaEg}2F5lKNTu?iX)ljNX-Xu|59VqP6g3vI2tv+h`5#Tn!;?Yz!rkFi{leRTH6bP+61M}Fm&U$aF#@};3Ty -y&@eto!hCt^;0(0iAn%)LNWBE%)e(e+UFwKS^Y4c?{q$i45JdQUa%pgwG~avHP{Y_n@zOkI-q3g%+~5ek1h5sp4&8d6d`dEiPPwsTlvAE*CT_3kfJ -4DdwB{CJ~M8Q!SXG2dGWo&56&SVF}eYtM?#qdi#dk&k3Oi&GEz=v4G~;T`H;yc-yzb>-30mZy<8A;B0 -LS<15x&2e!y&qQ5*>!JXq2k>GLyhdH@X<-5Q?9w+_yuoP*%2Qmja-B-(P`5|2vGJvUVA -{P!4MW2(w#fUTb|ZDNQm-o=E^b!M0cPtIIHZxZep4SeDS4$jKjFD&PK$edI+q4L2f`ix2nC#V4c`sK0 -)Lu_&Gw{)tqa@lKj&-`Y=kWjKcSb5bsM&4YznzFxIB9p-=~HQA4U --cTkHR|tX;U=0W3qX4GeVW6wW=tA?Hqqig)L6FlzS|ppZ>_a-}Vgt^USy!*hiSwr7 -g{lY08sF;VjY@V0(7wzF4ZoCumcpD!}KyZVJ_>OGfEWN}#)osHID}>z%2M|u4L5t$MWSk4Z>LR*7^5F -AsSk`utaBjr?=?!_4)QpTB@bYMoyOOT9+JoS -q{fowFCnQ(tiC=8<)E6<>e~;en%NM%+Ijv{&lFgujrrB1s^|Q?f=8j7(!wg`eVxBAD{ezRX;iLyO!!t -g&WAd>lpp_m;C<9$I0C+c4g=Uv#TsbTfH2|w{OtTO9MEwp#!xm^d)=q*!oX=cWWi+O}%GDrg$HcT`?{ -ucMDo{>uYA1pFj~4Zt08l2$a}z5Y+B66*1dD3xn?>d3%?2oNQ)NTQ!2-?iZ0;1NPP=5O1Kjb%^c#11l -!M={CHA><@_3zf30h+cpay|0oUoh1TwMcJl|+F`Y$7)_uJD=)!WX#v|gRxVe#V?hF$quTLv|SoA8MWS -&jGHbd(otRU%yD>kP>z(S|}8@>Dyf`m=*ZZ;|w*Oz?Mk&iLk?_L`Lr}`d(oEtq!4jX;Uwur(Xce6abH -=TUNw(FuVGPcdR0Dl^EIV6{Qyl!qyg3;}N^YZs_RQ@!t{)0b~kx7?##&OIU17W>jP7V^L&YNE(NRS-ST7WF3LUcL=%J0ItteP&GsX`CTF0UthSx>)AcwCL%C3?2^*0w5}SwBx~R5$hNk`BA`;2m* -!s(Q8;mdvWn)MNN@=D9Sk-H2qB5HFpgSZk}}%iKR6ls9DQtAh>v*y23Ecw=h5#Ry4T{(vsECoYZ0bt#e^3r7aqrP-~Uq400C0p3(?aogL>Ct4ShahCDDQT94V;k`>>Nu}5U -oPE1*EbFb+t?V^4_Wr;@Z(b54|N)xQoJD56T)**Qi3B~J;#^CvYv<|kDO7)X3FK|EIyF9ZUMK$g!2Q6 -`|Nb}Fg+y$i{LcK!Ky0l#Zwoa=Q8W;6T$Uko2ez3y)p5AzJ~#$xS>`8;<;$J+Y>_k8F3xzA?N3^0K+@cM~1{7D_{6Y!@^%Tmpx}Dur5Lu0294Nvz7@>QOAho6 -^h1lYK-RkNj;y^8A^*4Um+g_CpS8g!+n&LM9{>EYNr!Uq8-4Z@DSVNdos=bLBYBZrZ5D*=5$&k7Bab5 -k;b-ftMijU669);J>jYA&%Ags$Jd1QfLRY?Z4d$u3-Y6rIw^@5hl>0&!@38$z0a*jB^bd;2+2=WsGC7 -Jo`{gMd?sJ%`2zs6u8fnK=@#Vprfi`l*qFy@JA6TJsvyWVSJbkI+vH7lo_xD$0uA-8+BlE-aSJjEP~( -8Q98h9LL$oK0NT`ouZ`I(nDMsj3zpmOf;hUQd#qCRxxp^dFh;Gu>nq_qY2Nd9C`=H5OYh54mXbyGAfP -v5rD&mprTPo#Bo};#YAx%y|pxNiOOd;P)%T#Z&o?*8GB-)l;lEC=>9wwc?h9YP+^p{S5QS9rrVDM%Ak -TI5o-zrRgkmFNfUdw}=yE_j*X3YX*aB%(R`NS*`vc$9tk=jB-Gr)ZctSpgGX5GV{YLc#RwLc`9&2!<= -ysA+eo^V5@0HSB;s5~Ah`b?&XmNl3Z_|mD9}7PKu8?M;}KS#jHldQvvUiNA)~3c(*j%(B=k-BjZfI^l|1jSqP5-XXIdm_vR!Tst+qqat)CDLx5NORY+tEpY -k9=?p|dsi+B^%;U5yyu?!9t&Jl+(D*MElTF2xw_?wsfrWkq}U#{W-(rN8j?KLtxwj+o*P!P1x4{?~&g -{XYzr)Ju4Hy1r|g9$k}3QVB=Bc}4V@LkIQ{_MVI`_F3u_`U(Wv95V0LOOw*N-o{d6aQu`+`OCb;n$hD -zdN)H+@Zv68bUeE~L|D6++=ZJTBNJl+U|{jXIhSXmg*^9-OxlG72|5zW;WVo38%~~OQR0c$RSyT!Vo+ -I9Qy$ERGq>-n)-gc8G(4Y+(%pk?hv|8+P75l#C+|X(l)7{7YM+RY*Jw=BrExD%sa(-F^;S8oe;4TK0> -HfTLTaSrPsb&ynlfC3!L-;$G;n-0#~^rIZBjvIu`q6Kmp+YYVe*Ra3ocI>m52cdV;$BUCdM&Hn+ZIS^ -$i=nk4&ULjCyn@QCu9q(`d(%&?zPmW_+aR8)+bY7+v}Ts0F_)dix+DqK!t7q!&J|eX5spl`(wLilERTd2i0=a-5=U$9Ejia>Qz7A;x`skY<%LcNV)aB -14{0j2$T!|LU?Q${9$ha$74Ud8@8^nE_}ZE;Ep1$zM?>NK17&KBs~?zOUaSMBV91eHTqR~^4&wm~pF~ -}ZjxcJs!TZEsp6gCdJMR&j+H!dk8D%KTf|X?e=DIM5LomCFbU$VO@I3qZ2~Zh+LW^bHCo9$Vm3}t3>e -?eYkCd;9Jkng~-5(ttC9Nt1ny8ze#_C!-Rzi2^v=IB}!IF^TO9s^uNa5Wuz5yqv2qik0r{kOdr@<0?U -@O3KT;ZlG?DfvS@ygSY1?=$3wgy#vC+~+ZzRt2SFVCB<&8JhYHcZJ8Q6HhD+pXa10kLh(OqXkPJH0@~ -?7BQVTnH#y^iqAb#47?tMbO6y!4K3xSJy{Q+&u7AGO_y9&lekzk8KAXWKPw=;~=x?D<02JXPL#;keY0 -<^MfSJ3@63Hv6vrva5zjoT_ac{KU{&aP(V_&k+7~9rbhRhvaTMP+9MnuEm+A;xgfd7ISDQpRyJmFug{ -@0*SvVh4uu6GrPPIhN!Xa=ADTW`8r82a{&R5Bn?4@L)8*O~?DN&qfq7ODLUh~ItjbL>M5f~3TbI~Aa -4~=SP|71k*as&DB6)Nja;-QyVu#7&(5dbp<{Spni8#r24M6FFsz=hKIc -+4{MF3LFREJYwgVg1I5&-p&rwWQOxPZ^Cvz{%|)hfh<@zJgPK*G-?u$AT${^Kte^zPZdg2Cuv5Wu{{n -C*rv_#+5Y(C7h`PUCeMmaez_ruzo{aMFgrp&e|G}){|8defwbS@tUp&LVge_lV7<2vc$H0cr^m}yBrG -I!Z9Pg2|mpr~5^;KCq-46b7obiA4PT%S)e{+{#4m-x-p38x^OclO+Co$;OzJlxy=XAOa^2hkzE4s#Lp -DT`T7EI)3H;(PiubTi{yvvkg+eG8$G7fL)CnovYzk(qDPO&X6OOT($Vp*~kKGqm7!FH=9d~4Fl_QDFb -i*LjG4K{TYauZ8|cQ?d@*~RP9t+qm?Tis{9F}2H+ZpD{m_dj3byIk5X_!X{r8Ogdfs{^V~m(_8CEaFPEs-=XW0X!Y -LF>jKZHx1QFo*16M1F!vEg{YeU7>*r)=({a%+!;$(|ot3SLWuK1x{P}+8@qoX3zTbH~;P0OA?;h`Cni -BZcI3;Txm?Suj*HU>aDwU^A*kutGD29*s&|(0zpyec1%3e)I_u5JvYgU>5bc#=ByH84oGmT@>h@4%%N -41q$WC_#6<_kYUz*(D}lYeZT4mRFzHdm0`JWI52e55r(TwUYITlTu;C0Q4Sm^pzu`8?Rm>@pW# -6l@$QUKg~SI|6;_i)S=sT(p>6xN)h7ZH7kmh`!kF;4By(h~)_mGR&8x37n4Ob5X>B0D_e5JiW+a^m;j -glJ4=waD{4A-FWbFvLEBl}LCOt^ -JL<=#(Ii(EX2fp9{A0O4a^@E#$IFu#64X( -}r_v#aXP9TPKAS@B5-b0nd&*4}6DwSHNP@uzOe2L#aP7{0^8CCG0tf!BI^6|DD}xUat>Fgw4oOXR)B{ -uJEaSHO|+sk*_Qgrz4s6lN>Cpk|_nS62_yft}o@dPxBlK{*nDZ7Y#j)S=fvL^8u?&%6&n!h?Tc&0Es- -WVM2>rtr&;Y8|M680e_UawUuZwkpMzU&KkrFdsmB9v -G#Oh(W02A*2#eY!R^kWfjX`GK%$*G9cSud0IsVWelYhVG2aq{YgdVv?h3Pd1G1NoZn$hPbG+&Z9^ev; -)jeV>@2AoPVMP#&JKj;2+45p}?E_^EB! -!IcD$QyyzT$RR665XV{*j2)*5K2l=D$CfzS5%71(4dkN&76!*c4+ -HLD5G8VJ8HK6c2V(DnK6qrm*8O`+0VXa8yQw#{=Ro%St)=0MzL_pz8LO#h#)zYBQs(&(=c`v3dN*Px@ -1o0R3E)z#HZdf;8Fe>$dXo0s4pnxW?u?_Iea2MDSSe|3g5uaZlyqeXGSxjXfIug^Iujd7{SpA=U7u`r -$_~k!Zt{B4O-wQSIf%u9eHxW4EK{V+T)G`Tp0*GfgS!?Wk-36f;_t&B9c(4ixd{h7g?B?;*CHS|yd+IDlGS<;177|HqM3KtVn(0x2;hIpABmAyrzBo>zMg?i4+b*j>UEFPAm-sK -+^0r4-r?<}u(NQv48rltV`gRNe_79DM`=XF?kBz8X75O|St30vKkmr=xZ{QXvg4Qis{g370RAYnc*B@ -NtFOEkM-XzKXMCIp{@$lT@1GDZkbpQPqe!rN!AlSg0V#QnMVHyHHhlQc9PS5oO^N5!+ugB -bR6D?M2H0~hAdMefnyS4^q;eglGikvwJVB+1g|VTj3w -f-5Ce;z)27AN>0$&HituVLi-${V6s*IwJqI10S_R>%PM$?mXhrpK$q~9{UZ6|NC)&?&Uym@R!AZhg`s -?umS%lfTP6GGf91v>yVEx#j!T<5xqg;@75MS2d?DD|0q0EG?7oWAA%g=F!?!p2RA4@!bX@n;?VTtd5E -Ql@>~l324~R^W(Vk}?=m_pF7~h)hd;#}AI&-p{RkIepPml>hq&IS!} -PFgg8m)-jb_XPXP56d%U(Qf`&E6j!ht_wkii3rVa?q9O)Ycbtg~5^V0n0y*{^eAx#e&xk?q0dx|a2+Q9H5(BP_>(YGq3 --d`&agLSbNhh&OkuX@;lv0A($gV(N5;@YSd3Jhb~mEDhm$F`14R?vK2GTP)SNMtwFSO{6`_0M>{0j9x -hS<~=E0WLcDj_syqotL-W*bq9qB5>>mq5&p6<7g2xppu!Ory%zqk2!jID{L8M@PH*1gxqFO_5}4Bc#- -^fiLN5rQ!Vy(U{cF@iQ0)l7E5VhS|Q6+w#`9dORu7#3ABi(U@$B*tO8^1i2o*c4Lsa)DeVILpLN9 --{A^j2GH?9<;(aqD9~@^W7Q}?3^i8R5X7Z*yWzCy|=0ostMe0^h+-c_@%rsWv-&ET*a$$73imkXX(|) -L&3-+_W71!ql+551Y&_&lLuDG?w7kwZm>GOP^?)(#~t{vZPk*@>-^;=vsUG64&vCRtUKG;H!zA;d!fKYmYw({vI}agTIE25F(`M-+M4xq>VV>+s(3~8MMH-h^3Wd4Y*2nlu0c;u_!{n**^IL$(&D~GzZc_UBEj+L?YW}mm>j$7dx$wqbk)1K64<64%_Rcd>S1 -=FT<8-E%0zu-$DJg*udz~Y$??=b(tfLis)T3L$DqYK3$9fYgmS*1H(kKn#C0j^Iy$W -SAV6*$G369OpgMiO?f}J{ktl1MT-Hd4DPXAUXNhh^-%pz5WTY!CxXaPychozLoUz8#Z38zk%3>?fnL| -tyyLLpHSPHfn(#ZhW2+y2K;VlzaQB@@$Qw{C1;I!Do%)UyWHRI%xwf#yrq`Py7ZA`T?^D@CQ&(auOHI -ZcssB>kd{ejKU!}{*=6*bovHrD4=2jUBx@Q;WvSq2cDjX`c8L`bKuittMls)vwj=UfGx=gdbHZWy!FI -+BpA_Bm8KP8(8&tUQot4jiEevK2laD><@qw3aDtxkJ0UM4NaYCr@WD<_IWauVD=0h~|^wp!2Q5uV*2W -X)}C_?6l4?aLuhHC@p2(0OzPyE&+qR@*uuU$^}9L6?iT7owY4wjca-$Qao*ms5HR4Lvaa&X_ddl_$!k -Oag`KZ!TiW6AN6!4gS4N3-@XosG*cPj|hOg>cfjoB9O7AV@?4{0HQI==0Guk^QZeYV~dv)lzWl)0cZqv#?I*U$)rD=?-9G$c0u -J2&z2Pwp67Cpiw}(~S$$)b$Q6{vLracqu5%&4n>i}e87fA7{OVTnMWQ8Nk`di+gm|AG~KpzQ0lHV)+l -&qbqls=-~^9q4(3m3&(GJqJ+4!5xsxty%KzNbjiteyApG;03ZU@$MtnNOU}VJRyQcu{v~_lFA@Ru{I!3p*rf$fM-@Ri8cV1E)l@1%wn8 -0o_n_NIrJ_~F|A$#=yGk{i=dYGOALvn_6lER++wvBb1+kQjEwj%7r5E;`~BpZ$=l9&3uR14sL+O(@=L -Mbx3ZBY`#n=DO0VLpUBX4?AJE@dpQr!D7DJJJ0aF7$Q1|mZ_#ean_*p~#FZTVe1pm{1f68Qo7y%;~h= -VXfAqYak&@b14Vf;u*@3HRzpq~UYM10IAu_I(XoWVZ1WALNg2mV?pa1U&8=*UVZA4R@6IbvJ*(=&&E1 -pN-3BkTxf(NAUG0sO?VYD@fX9XNrH=p79{USsj62oL-yE@2<^hdz?J-~soCARu)#0>(Rc2#;*_5nX?L -k8$K!m<~QUYbyRYB$J2Y1NfI#7<_Pm4fMSxPokyUKKo8{G4SQDLHha~34t%V@T#mB%FKO9UyIz_U805 -u_o-kH7ySH(*KYf3+`hf@S0sOILZl9c@<$j0-n%1U#snOeGkUw -vnt)G^2EpS-4jW)iD9hjF&T93&p+UJ+4^IZ>{orz{ -2%+;0pc$txV0;rL+*e=eT@KLbtER%9IioHh6VYlFn%u!1fF5PCQ0 -OUB_5~z2k4ErSc_SHx42C4{X&LhN~B3Onw)QHzR -k_rQI1r~U1`dC>yVtZl<-$3IYx)KKCN0r`ZDDRO09W>Q^j^(Mkld43W(%RKP^x*~}6DELeW+482lVFl -@yugjRiw_GD-&csYP7wYOn1OSeQdlDsAD4U9$dPd)QpYA2vdz;ypkLinUZIs-drHE=32oe(8y+#fgOO -eibGdqc&3jbeJzjQ3swSr|o2XB#(XobJ_IE%RaJx^>LVbg#8hzYT=advrT75XshPKl~9JFmtwO-EbH* -CB$74f)LHUf-E+LeM}K%{6tp0a@nHK%1wuO62?$2cD2^s7RO!KCLkbi-FQL;9&KaQ5zm?KG+W2>TlqN -PwPtT=jf*HwWtP`PRlRc!_jko9_v=E^XX8mvwIZZ0tFX7}_T9o4~IwPizs#%(7UZIQy-Wlnj##6cU|i -x}s`b%p(J0ug%FzGxuE?w>-@KzCh~UUd|P62)>N5l9k?#0cd6At{F)&l==f|@%6xP#8N-h#EikiP$wpUOdMfS>B`{v^dT`YqZM7mG -@i49Z^PR$)%J2lM&_{s+_jYA?OdNEdGpCE3om-q=XOO^d%H6v)yaJ3D{Z -X{gxKDLRE4w$WUlR$%6d@|Qx7*Xu=G{ZjUUyg&o(%$@TD44xWlHocYQ0wq2+z*!#)5!N+a3&&f9dx_3 -pX_oSuVEY$vta*{50x?K@FJvxU5OGyr&Fhsv;LA`2~*qkHXG^GfLmH)@??z5<{AJpSN;pM3Ea2^3KO}9qgwc04qVvOwQSV~y;W)v*>wa>si-42WU5JH;yI;Zf-ogk9!0RhXjXph8(XRpjx%folv9L{m@)RXhex;;pkF6xtR? -axEA4e7E)sP5v5#tAu#$bA4d>G`BwsaT;-66@k39o?G^ -EY^u!02y5eu1DVbr6g}ok`B45`Gv_@OWTP>WfLcV97J;T&&U=sBV@d^`jMwyr$+MMSD?CFY=ge~hcM* -v_$Y?cZr9`C&k9rjb_$`#TT4N$}_cO+ -M}f@rUAs$-%84>gZkAsn*VWV&Y>O{^`1a;e+Sx1PJ;J8~)+~^wF1!p+oiRXnNR(@|W~T1h>nD3BTtqu -I_M0x=KBFclwvc+nhvtDk$o?O4{K$l|u`i*FNtltm|nHrmRF>YGgjA%OAX3V=wryBfwA~U6Io*p2Mg$5 -e|$#EI%YD_s`OyFL01j03Eo$F;vIVO5O<}@DFOhHHxK1(O{1+!22VR+6H5a8meB_(JGEA@>W%N -06TsoO(g%WKv@aWiQJZe1=qSlTVgnQ`UjOi{0DM+3E}^;?Fy8hvN(9e8`%F&hMn8@i32+#P6S-`<;B) -!R*IpLl}P6SgQGXfWSj}Yl -B14A7&{9^?<`m%0u`PL#q+t -i8YN_O259G48G?U%~(Xt;1a#i5vj1mBP<7x&h`qit!^IT||e5UKh-H2 -(C0~wABMOg-rU2x?L-{mR7RQ?RzZLdK#9MY6K&>)V1$=yTF>l2u|s*|_ml!fpKx;-CQ#UW{ljn`3sf> -=?c7g5q)tUd_hX|%@MqYHq@?W$nhL0VAMeL|Bc4@|3TweshD(~0uoba%mv!#vjeSK|0^!BGo7>ot^hL -DFe8Fj<4E)2C(ZTL`Jn5h~w@`?5zLSL3F`xPMjXF4BA2|HgRs+j%`wmqRqCx_1S>FZt^n7n#gk;eMzk -*yvv*JowT>yvcW!x8KwQ;5&R3I`t%jhtz4_#SOK|KQ4+m#yeW6)pKgxbJQ{}xyeH$P+`c=g@CVDV)9) -5ex(prx9Ec99<0K0V{d=1FEk%HVV1}iwH4&TfIYn!%nX&1LCo~JMY&8s(YylbhtCMI -B~zJou-S{+tJEKk&7KNWphb;_9iad60_JKjDA@CB0@w)mhw7F7=W$!Q9}A2k)%%kcuw;1}AUX#9LXn%i~w4l>hnyF~PI{vc9Um(gD@Uuh4bhMz*p1w29{W&=^6Mdm+E87pegLIP7*>M72KmN}9e -*0gJqXB*1&%}HC8R_S-!JnC$7Es!oj}vk~UeP-KddGFMMxoeL<-6DEOYZO2v4;EQR^~X4-5IXFd=Auw@4vv`73u7-E=3F7o!hgew -vQe4uuCHn*8KFxi>Ah%>V@&G24M)s*o=9g_oZ!hvWq)_B|y%gniEV|9o)VB{?+(UtdNSNLHql9p6Ng} -H1o!HHmOicQQ#SJx}@Ia0fq#bS%9=&I-fJo^5{daW>LNUW_(zx7t(>`=tL#AlE(j(b6M1tJC}$=-lxif9+5jOnUB*V)k7QWw6q8ka?|s)t(yTDTYPLGeZFQIBer~Xepl$F^E -^bqTKz?nnS4$<5mwn4ZS|xW;oL!nix%JT(u4~~1c)TJ4GzBUwBVFW9olQr-L9%TR4O&}G<3b0GcE^TP ->7Rcdto|}$=;a*H5kenGL{2ZeCxW$L*cxO<-BgiWVMeu-i+=9F5F{Hgdm(y+s)^Dud$w4@kCOjH#e~# -mOu;}4dl>5!^3K8kejJdg61*~x)FqDGrtngv~d@B8a-E##&a|KeJ5s;*siam4<+1A3lGG|$&;|>>OT5 -1zY}~Tc<;KP_g_)TN>nnRQo>IoL~l`2=K0)c*ONSN*@#Sq20dXB=rr5Wm%x{`M`iaqI0+oGMv|8?Q&! -_5>3B%TrJ=!sqpfn@t3W;CpZS)3X`A_>n)vTJmHpiV|Kv^f=Y#&Fga+fk?3YeII`Kqu*jpxtdFG+aLL -gsTlqvAw@`rh6dUUr?zgakqjBnUgiw}FxC_dJ5N#Y1G20y-*w|DgYiBK}Yb9DNfOJNjk-n~#rt?AJb&`G=C ->uYpKO!%7*=YI#MKP5m(tSya=)fKMeb&;8^gYV7mXb>_aAh|aaO2PLjxmJ)3)w4W1zF|un -VoZjA3SdoWXD(?V|&v+SHYuqc1;bj(_4DU0fm`gPpN455Sh+K1(Wxip`&Mf9X(wFYlWZ?hV<;YA^X>h -@7S{d3n8L)D(H0kye|UVHHXB09GLeh3^vpy1mP9An;-@<@<=LsG&kqzh!B@Xe7GPK7ZUsZkzQ`$KJ6D -_1fclsSvk*i?s&f7x4Mz@r86vlbr*<>mO19gu~}fl&>-h_V^0(6zgDe_E>IaQ)d&OYZ75(@(Yn+K=x2 -2{F|^1gyoh<_rP)dw7|>9b*TJXh#)CQ7e5t~?QPi-)L+D=$pbq5wM!hcB9D#x#cGE?8-CVr6%lQ3fJ# -)XU(t*4~7bi`iQ5TK3@`5L?P+?ZiLQeyp^toFl`}~F+gK>LJGh8~PP-!PmEVSw2#$9SsE<&Gjyvm%~T -r6zqWds*3>tlImYz(`l6Z5#^>ZvQ8rL9UOp5^pGNb>caHD~!!@!>4>?Q|mF>x*>h>YSH)?M$+d*-j>wE<9*H&RoM*!gR8vMTe -{{B>pYk1BKDs;GhU_WOQlcY84LbaKSlt;e{!c&P5o0iH#?&{E(cs!=8b(3(+&EBdceW$;`N!^_USgyk -Z*cpBJ4rjMrr9D6R6Vz~_2=YF40ol|j*{(5w;p#|i;Q?u~IK_Z>>R(d*HuUI*;>l7LM<-*7&)}WQ-9fpe^czB6-7O -&Iz1NtL!?64i+YM_Oaz@#2H^_wYH$ml_V=j9Ce8n5!fgtWxPkalLHW@2L&rH*H$n3m(#$E)S1Giq$ji -|RHLl2F?kmh9N>3Y>Q{}XvKzUF=0*=<-sCs{z8NLA-%E8WjKt|2Wqf|ctqH{&XTZ~y9z*wPq|Gq7-O -v`CRwwH&Gy0V!_XkgG{(KaF{nkljJS>v9lD?ij{eNX!Ht6BFzJk%NGA5?&wNnHewXPflFcPjHfQmH?@ -@H6}Qdxw1IJ-^)jPs`L41)>mz;{*zU6bOL?g`@i>m?U6`AV{19Aq@Maj{o8O{mEZKpX?@vAIsJ-{*}Q -*@S)Z6wZ$3xH~MQe85B7J9gyXB=wi<=zgRW*2 -_0`WYCgx;$JKxSK*Ru%_VxjE;F3>4b&UN{lkzCE$ZdS5LTA4G@p>^RdvGsH$hajYh&b(G=Ja`?pQFPANi44)Ntla-MI52UE+` -#7E&)C)0$zmmnsDM&^7YxbFJ)M*SRED#^wn>4 -+9nNRY=@?_}C(sxb=^)AX=Q+;kx5l}nf1u5UsW)1vpGw0kD3t$ynd(>9v=UFqHBYtNYW>jrCcE};sgW -eqB^m&2-Ve`==}f67emhh|LRPj!z -1P@K9X8s4rtq~jUP#c$srP}N-8{>;|CBtIz}%C<&=%n~s5E{hsjt@PCC!t=Fp-s8fw%?mv8bM{+Fr0E -f5=lDrC^y+me8^Tnuo(pa~IPuHbTG&-)b2Zd@U?8e8BE{afSO!i=BoiM)7e3{-cf3RyEE?-yRzSgW!< -L(VI?-qPgA5-F-dTL>-o1ALk^Qkh|b*Gq_wGz+vZc0Phv#Qq=@*b=xCjxle?>=^s?sCNiWnHj%uDi}_ -$pN|OITC2#dL#4!r=oetq@vfG4VuNm7&b44Uq<2pBT1^&d%6p^#(TsZ!nub5o;u|Yga{g9);K8z2BM0`|S$l&lT+&LN& -95jufcEb1TmOkiMSU(&P$%7N_^a)RnL=*L?)5oHZigA1t6Yf0fXw3UG&|^E3`<;mLF_QG4gz%?NF#c3 -5?ql1}xNpbeW05`jbQuO80vCaw1_$)WWbNFPL=HcKB=|HYQXe}h?9>rLyL6e -Odxmv_+A!_kj^75)0kcNXUq>(~qII0vZa*yT`%=a}0_4+oukI)7e -Yfj=Zfcip0|NZdaQ@UB_3oe(@3qq8eHsVxo&E;15JEb3yWG -04Y9BnHQ+K+530DWlH@qffzUvS}DRQbdp4*6P^*Z4WNMBe%cW2o#w?texIJ~oB`v!gP3A~_F#?{w3TA -F)#+L;h8vlH0Qcuv}{J6dlyLpU)*K@iGaC!T{Om%PkxmZ;^iFC#2aLFlvF$d>fb1YA3v2~-=7-tFDi= -tja7Te!(m&myS@k(d%BekIvim9|4&sQx<=f%Jmzu?ih&)W}MTbIz+68;~lZpdRE-%Wz`Pg=3s-qPm`@ -0DdY@TdKkE^wQ-b7DEeUZNg%^;?NhepT|Xjn-e?sCOcNKEErAew8m?xR-*586pX6@+jFmrJiCYZyK -r&?;*Qx81zVStvlVM#Yx@P@=UYj;rsg7+MKWR*LWrt#5&1a3-o*!jXNg0ynDApy@>2FyqsALxiPtae{ -~R?-8?+aSo4(i)cpmv#M=tk#(Io)m0K=gkrU!)SYv7>7F(;1Ez-Pz*6&TFE<_0vk_1YNwR3hHkkDkSydaf^JOaC$m -hn3A8%yL)?ifH1om&H1-I0@Q4T=DQP%j -1v61JfT1KoyaM}zOr?AAEc360Ruf;(7T}g0E -^48tWlxtw!;|Lu`DEUb&{YeHJ?fDQ_)|+pUl1GkCvBOvw!6M7pk=X0i(^wGONSv_xLuLBvI -*!!MC>!=Blz#!gak1`!t`@vY4LyqeyTK7p_%%_c^!-041dP+G%d#{w&=gJe;1c!Pkq>C6O37@QEC$j$ -9xk&^mu#oUNR>Iz3Hhq%NB+wHZ3r~MlkI-N`qeuVCCHDe1$p$*9(q#5A?~z4J(ic_ -qo@@7xS5h4QN<`e8h}vjSgH-9j{(U?`x-<)$=8p@1-!Fc`2W8Gi`Sn877u4D@c%Oci`Rc7u=sMRXXu{ -ttxDX$)gA>_r8NoXwntkrK))Va1GSs@e7)5hLb8$UKbUq3yt8!G=KPgKJ`pleFSw$60xzjJlCtr3roN -%)ytn}T)5QIrzAm+1W{IgzR&}N-YEr@Md8g0(dy1ct24XdcJQl1ltXt0+vQnmIE#kIR08oB2-9B3C>d -K#xpcP*lG{3hl8SLTZ@)|yj=v%nF7mC;+Xga0ky$-tvOR^?@4c;%HY;T!{n~B1|-+2YSYI|gjTc-2IR -?~LMH=5WmMPa-OmLDOdv8?-gSp?g;i!_UbJ}_S)GE3DplCbwVf8Al5gqB`J< -!m}pP0zA`Gb$2*d@kZpY3)h>P9sp`>nr!21n@I>!azR>6kFuj-jdh)hrWAI?}iv$O`D{6RtB8NA$ZzW -qnyjo4)>XY$`rs#@z!OCZm4*Xm6?HRao&m+P7Ixh~5g}s}Mc^JDhpA@y2R+pz@sK{o~#K`kvQlJJ3Mh -4PB4S0Rqwh-b#2Dz_Pxpsx|?m|MlqnX345Au{;?IIlNbawMH=1cm)WJ+VUeW%R9=+;4LI1$X~DnPYQ( -I%rJo2^lkhFU5?Z@_CdRm$rNerW9Ler}m5R@8R@GS&1dx8=0mcM@l+y-{lb^GNO-&QJ5-Hg7!I9>(Wa -%u3=9Ccz-|X@S_c|J)(*-*^4qBJr!;{?smkqX2Q?NSOL05 -m?QpkaQy3oAOZ#K&*A+`gy5*BBK|aY6Fgp4bj^@pea^hjDKpZP`D1Kbw*a80-Cr1Bx -qmkK=<+%V>xkW5bXG;;2ur1c`rj?%v^!{76+GpE9On8SkScd|)+ss2->20pr1r?dV^EUVMOFefpzag4 -JZNSkhtpk9Dd~CP!nrL}BLd?Gm=`9wpFUCvw5AzN~m1o$1{2bDKmgP}`5fi2yfC`=GwJNg&6XoXT3Lv -N1naC;cH)$j*yc($RNqCEnt}5K*$Pri!)ywXjGj51{+0J>nSY&)(WQxcyRE@HgmT=jP;w>ywbnx7NLt -4p8?Wr*NB3udzkVfIbOTg1x0aCHG)VtI}uEg%|0HLe#BN&R3ZVBYyRYgu2(?z6UJr{Q3;@E|ai<96LP-;r>JPiu+2V^My+O8OPSw-fO2`Fsb*6Pqb73Vvn?eYIH|wS)IoW`h -7NK2%+twRHSUl*lNoi!qNye$dY%qI#7Mpb|0I0f$^)H<6*O!9ZY8lT8;SrUIsYNqFgE~_(Q6kOcBOmBAZLv_d%Ci^1J -bftA;$F1YOmp`oov@pxM!tM9|FK|ovQ#=j)Bx}&bn;F(zA>1kd=WmbCA4)3?Pt*}TI*0Ow?ts9x9ZvRnA-TyJ<7;#d~}O(60Ym7uV(x1qY@S>=Juy=4)EZk -%V-9#a>B$$-M4S4;9<@iLd%Ry_M9!$Ld2EKoN&9(jU<>hB!SxiFwhCGd%%t%Ss2uT3)D#7oOj_{j)5R -SuU35s-#CPpPUIlKcj4edKAc$cOcj8qAo{`wQ+d$a>ByW6&;Qf+z9ch9Z4>+Cf|l-^)9oe+h@g{rBx( --GYCDrGIePH;DS>A%E`ZBS7@19>HN8$0-;C2?U1;2t)`R#4!xTVH6}t0tP{3pDKR260y(c;m0fyNsj^ -!rg`@eu)>;QhET;=i -jYIpQ$DAlPTVi3sP}G#c9lF19KAZQ!H4GiuTT -9T#@f0qs6BSR-HxzjR%4srP=E32|W)vzMQk}B@isgHujYPOD6$(wVy4rZZ!2V(3u$Q@0fVelF;LNgr4 -)w5d(zEaGed^c_TOc6!{7k-S_GDrSkjF1;9x+on}0muds-s8JasOt_?|#GWUov3U9+SXz*{~`J$N{<# -H0(W^K8Km)kxCKAt&%YBTn#wIFqOEYE85&4WCnobt!>B*)LI`b^8mvKWYi(J+Gwp_YZXRb%B6c=Y+@c -7T<5AWFFPu&RCbEY;(s&Jsi7UpvjDB)aZINjzv%FU^xzfGE2?x!aZgfrUUkE$N|0&ZHG -_Je694MV*@mDiih%l+ed)LZ5GuNIuDS8|06&3xL#OY+NC9RbMTV%22_ZO&d0U+_cmm1-vJr91(@bN~6 -|@#(T^q?4Uq*VY@?fYZgqG>yw$FQl^o+@{c_{MY6%=v%o~R{?qyqo0)oog<=T$KK943V%tT)yrrmGJj -Q-bGa3i_sEvjeT+b!hW-)?GMHGpQbB34(zwP|se;-*8^7g?YqNX6O#}!}k?NT^l02-FM8?mp@}J6tUv0YgS%@id2XRTQ?L`+!#dSPuE~z{gj)@`m_L_v=g$&C! -x~%MyKzEkHH}CgRf88&DVg}bOX^Dk?IFIYVEGWoq(6BMx{++gZY@QHi>>H4EM8!i0S8fxf&ga(^&imY -sVIX1^^E~ldSEz`fJ%jRIP=3^E+S!zNYU>wbqnQgj8U@w)gA$f!V$eqIR?8H8DJ&Iuxx+=gwfY?*<@w -6tnq%f~JQ~d&QWrJrmg4GxiZevn?V{mN{JBTH^(Mv_L1Sa%fdSqn8y&dJ_*dOzg=$dAXu_-zCZ`5zt# -@BAp?0!Cw5Y1NJRu9dv|zkE7lDIXTbSQK2)h`(A;UFU5=wi>Ys1vG$}hfVV%_V`D4VxM>7`0|>fU=wj -+BN}Cb{2B$QsvA7$9>E>`%0`z}zd;(yR?|BCnp$a3!WuY}Ja@*Z~P~DrJUN7xYty>r}U_8<+<3a;^aN -!I)%i?mSpvyG$-5b3ea%9o_b>TQzi96qI_LL`?AX7z!kPvs^ -I@QR`vVCe#@%hpI8+_fe?m+#9@3uVLPiLP!#{90H~d2?b~;{1;RK9qXdloMnoa_`1X*Wl8o?64m&;)1 -3QP>V|)ny*fs{ogM(Q8Ix7HDNAnZ@X&xfO<6j&dnQ9C>VsZjI#0x<9tJrb^9qH&4`*%eC8^M3as?v`H -b9nHv!*wz^3ObGw5#rEG06%Wq;m6zPFr*}oO!t26{k;2ycaj*#NBJ(89EBz5r(f6Tui&@q6AG4~wFPxP&%E(5uvoXD~{v` -KTL@b(-&;5c=f!B*{t;C*$CA4H0(g$8e-fo6_cd6RLLo)B)j_}0C^FrDw<=A2_%UJ&47)4CgUU7gH?a -MWuyq!#W$`U<|_u8&0`xsSQy||KeN^c^Hw?P{4R6tyDDX2%QdJHESn@-f)01+nWUf{9(g{RL%Zt*WfdvU{I)vSphFNrS-@is -%v1qetQPwQ~Vk6^Bn#v!h3o&uGFX`-$RgK2Gg3Eex=ypp`GV8$hOpFs<1q@XjlDsM -eXo(UJkEJk6_m3g4L}6t*4%dpd#)i$J4wr(hU$?aLvtw_Gcs@ry$&17^Ss;K1sWZ|YQ0DPovdc9rmq( -uW>IFaXBYaPLRCbXyp!g6_Vq=+lVOt((<*eAXyL#=KvlAs;7K&@AgV$(@UA=i*3(6ht~J9DO8I-KZ=X^yo -pMioJN>PuwI^BE;>yeU=6y;HC79d7UGN~;EV34!}L2rhn=x -_*v0#)NwGBYl8ZYQbQMBe^xDrP`JCcj>3n>O5&N9gL{Lifa`Tnt^se^M+cDn~ELEEkd)1Ok>Kl*!%oI -D+KCMW0Y^n{b`HLb@%_+TlCJdxZbYC<&udHnFmhpY4RJVZX3lXT(Nt2xTnATx44L*gVJLW;Dcszkax(ojuIKIB9 -dMO$m@hl6E&zL9kQ|dW+f9@^4UGi6icpl&vE7e%}`I!Y_>bK2yFENSX}heJ3U3O}lG3ps?3!4DQ_K-& -@2YZy20d(J;OXZ-cDv)-5(czb$?TZ)b9vHJNVSlAK1R%T-Y7rz#-2`g#OSOjU{3TZN9IqRFX?IB$a!` -LcC{lO%D>i+sr3bA!D?-vRe3GWJZC?IT2iyEVY(1_mXIJc{&^5|Sf@gD`4poe+FJ=twmMqot?!mP5Le -`p;1n^3PD!k6-pfRE2zls&>ExQXqjt5CQIR>PSuD2({xY42CcQfe9FeA%p-)3Pvc5{4T-ZfIZ1kZV8j -4SdV|HOh5-5B0rNOK;$QiIK(?Y?A7o0KamIO`a){m;Z;a}YBwMHY)brufS)NCpEOqb=^c-=Puo(upZQ -0qiaf?N9y1=(L!onj>VEbE5Mjs9`(`ro$fgnS!O1<6WZ7|gDEkO%f8;#D&s?fQr;|F$J_&i`%y8;xfk -OXu;MDI>)%AUk=(6l!WH>{i-V+1JJyg;Pi{Bf<{|l&U{T-@0h6KRhqN-mG{x72{^>3r9ZJkjgK#8Xyr -=40p6t@b_A-{w&IF@O*ycp@-N+D?+c~)~O -neNNBM7j?-I0^N5hNy*@4{287-NN${qrn}8tFmufj>Cn@PigLuzq9pI-&>}LxeNka_f>a{CFoSzWK<= -R1hsvF+j8Ms6=4&0+-niAha5Jw@#33SieK`s@evqKoHSMqD)R>Zx$lH6T|voIU2ZlX;d2Qva|N{pJf8 -A#XHvflvx3^L`_o}@6Ds~cYp>D*w?I}$!Q*56QOrO~pzgW)Ug8j_{eA_#E=HP;3ht!JqwSj*fpI?;;- -Idm7}^)466wFq4A@|=dmnE0E?KW^ewOef_Qfaiwb7S)%S9&oojrQMh2rj>}0oSLjEXn8J4^|^_!NJ=> -TOQ0P#J8>sTA0ceHjM9jCw}g<@3upi|>S<(lQiZ`|#tN6B3v;gdlS`fbX)t(t#sS?nqhu0jlE60(L`)ebsBEC5pfOBYdX_0Ciy+767TSGGbW2wg!?7T9-%*}9hZ_vfo1zs< -XV}>N{RSS3_oUCLUBY$^lA?u6Hen^aVS7!B;{!!W;39UkGbCFYEZS~S+~R%Bg4#=#i!bEB>&*DOm5kY -QdXpNboB5H6>{q}gM$*Dsccr)&7x(R3HgEkCna(;^4MKblEblfx!W#h6)%hj*PBamXd|HR}>e{c!KjS -QifzR@^KcW=q%9H1Ad0fg!DsV>LKX!~PEHmwA0HSdA%MCje%cl(069k=yj#G5Cw`ba(OQol{xg@xjt3 -_RWlU~lS`yH{$UCR}>r~yb-F!_?F}mrA}6ah`2Fa; -CFHYxFVK7u=GIjVv#h7-KyOtiHJ{@%IgJpph{S+C3q%xWT^EOW>>f?Y)?D8ozzjH2HcuQuU%`ZQ1K;5 -%%Bd0dt!-9f)QBy67nw5Cx)rOOrO#krEIH|`qK`UZZ&)vgy{^d`|WzabN>BucPqy>DTF%7JLDK19K?V -teCwCRm22KQL;fkKz`s78q|D2s73e?oer!mS|47^y*mL=!TmJK-QWqbb%XyyvPqH72_hbJjeze~XEBU -vJ{W7}b#|!<2xrrephM**bgCq*>kc&b{97R9`!QmZzp%jRr5cNIubpWQ%sLlh=AV(^QgpVTJ(E>yqB54|Jc#U6h;TgJZ6FK7lQpM)1^6t -?mGOJai1)v#`@%A!D$aMh%+}}1899ua)V=>Z6fccdYsq4!Z6*2mwA -5k&Y+bKTmr3Fg2;xA;a|*2TgosP&6Rb7h)IvjG0$Q2PRd_c;HzDBjOAs -$tRE+yZFO3LTqEju2&>F0|BF-%X>Z)4H;8!Ap|90O4)yXyV!y%W^~3#=rm_cIb$^@bX1GoFxjzU6BR7 -Xm*=Wr9rfm9aAAWJXsW*wW=Op?Wo(`MX%0e+?LHdRJ -UVd!$>LH3~WN~8SDT$lJEWyJ-j%xXl&>uo^KEi&ufy89usYwXLXI~zDSHh+(ydHD@P6JQuypTQ^Ay59 -QIru>aJr}qvbnl0?0KVWFCPuH#Vn*&RV=nTy69KZ7?cTwS0vK#9UsKJ*&9>RGm~aCh -bFo>yp9m=2UNWJ`3|DXJDkS?&k8;luRI5iDwD)bkaqJt=HR}CV^pj%I-4n6T{3@eJpIEMmbCYZ2^a+2 ->JatE^Or4R_lVMW=L{ikBMlX}+2Ot&N7O7-Q`Hvp^J0q}v?0%5{NvHT17yEOki2T+mqS&EIPLU7@k{E -^%2t>goLZTG5<4z2Paf15p3~b`V_uRc80(~kzUy>2YQQSe&W6pH?3H!t3)13Q#`b>r$4F%z67}zm~gg -p9sp4>$iw08P6`1Jag-l8#V-|{PtgdC4`J-x3xZ!>h93naDEgVvxx3crsNEcyl -zsK1CWU`gV6dZN6+xf=4d}Q=^rPvG9BGR`bBe5aIK>$LuT#W@@Khk#hTJe{Dc4GxHUf- -TNAu!M+iu(Mx0g1$X>YQiAY|7!dnS!UK0$sXXF$-Q8J5hE>DAXw4Q#fDHP5*2u~?VV%>XynL$B;YDeL -a?R((#Vlgv%}6MHAh3?dA`wCLO2^9^W^9Z42RwYNMfcKer|1n@mCu{((?c!hg3$OR`9G!0j{G{!a28t -USk8w#Ljt=nN%O;>c&OM*bRqh%p3Xp?z`BHWsI*EEy5dBcR&53rP%<-i?UZdtfa*Bc*@tAK)111zeVR -mB;0&h(7k5;SjQ0P(gy9PA*#0`hE6!j4>zz_C4fq!0vA0v(l`$YL>JwFjzZg(@8y -4&to6nFXl#8{9Mu%hHZ6srg|E;Kkp2c6RQSxhR^sO?ec;s}yBz!j-{V?_`dN-C|$oF3is`JY+_42JUs -B8ab+9N+NzdoBBwd$|Z)1%FcAD!y@c+N*Xn#C$0g26@N==7KLG-&n#+;GRxI*Cul2$qY8{hAn#*F%C_ -`n?d)&$0o=M>c@@$Oi0?^R;D~rY%HBwreP}lht`=b9fYNUTT!tIBWKj0QjuG$m%KA_JU*2@p5V3w}C| --US8McwJ+O_xIggXgbF4k(f850rm?^DqpEG8xU>rZEkt@wvV6rXPQ!^&1T`J;#t|IAS8tu`XH-u5WCi -`zZ}4Cm=sgPZZ`4h4YM+8r19-yxrIXI<>(zpIAgv+cZSJW^E+njq;mc)YS0*=SYF?TgB@lw1C)pyb(K -XV(!tNU|u{vR2Ac4Gv{n$J6bc0mapF69GolH`a&C@M#33jWys*ZNKiFtbxaIux*fyz&g0lX!>VMnu5Z -owun24!{;S1gt+*`_wkl)x#0{D_`Jr|ys(Rr}(bv?cIY^OnUoX-m759f>Jj0DEaKEI;F?p|%La_o}V_ -Zr<`ULi56Oifq2Qx~T9?Oz<}Lf!!NYH}!tCx^w@Y#zCM?vxjJiQc1S%3!U*WDzbJvEnTJexx9@RUey% -qCGqR-wBIP8r2-5mr`8zWqDhyRYzshH7{Z7Kox6Rf$hu3W;w+CdBq|jgT!|@u5uPLIm%xLx3m_!Zqdj -w*syQb$RkT7Ts&X2_ra~becQf+V%#O&2hADU#hoCDQy)3e03o9APy8{Er;i9*p@a74Di8EYM#^T1aj0 ->Gr$4tH4yxGqJbJlt$P7WC1R~b2%tAbfnEt{d80{wN5nKUrUTqUcThAX8@-Ib9W;Yh;8K9Z&2{x^F!$ -qt%{YSk72y5I3@5VZKF*;xaq!{5*(`o6dMH&MhtS?G^_-*2LaPtg)ZcfSWB;O+-u3L@}5jzEqfgd~dK -D1?4DcsS&7k|WuLeH0tB=rax{JsP!kEDk1zucGiHyN2xn!S@@ciBC`R?t)0_a58()vHLze`EbJUL%MP -IRLE!MPC^|64G;b6?}CToe=B(S>wfR3a{ -~Xy?;UOr_&0v0Z>q$r&)>fbDBrOEO?<$ls%8vY!xl?il5@Mx_Rc4) -bt@;`WFex9!#p6!4iFOhlC4|_2|@{aNVD0kD!y8ickEtW_MVfpN%_642fO~LJg-f$QdWp;NfLOp19QG -!Z0~E9SEqoI?rnSI7z3!Tf;hh0q|>QFjAA$-`ZkH%9mD)Du35{zidg1^k+8rrJt{zKi-#+rsu$r7Jyb -@l5FQQUk~Qh?l?AYz4&ZN+GCYu;@y@KWE5diodR@4+R*0CqBoz8pQ1z9OirDM#+bQ&4Sj~U5((laXH>>={Zl -V~3fgpyF6hR;aNDu^t>~`~*P6k3a4xupe{iF-|>GO$?NvDT~e|DtnBlJk}A6-XZgdLC%X#@L_dRmek_ -VyTSo*cRV-8Ahl-Q$EKUF$4A~9}pj!ZuS{b7G{U7#N)#f6CZPVAU2kow?(AmxAUW-vxBhU=1jEp;QMdL)57?%SA -QK4OOQe=BC-zsL)HY-jOnYxYZH@2`?B#@|W0l>b{vm%qN{W5<7oNOHz{W(#*Hj|q@+Du#O`hNX0Mm&j=ak1fgNQt_yc%;vl$;B!7M=KOJ#DWgwa3yvu|m;q_Q1qJN -(f{4*5C3*!lTAB+358x(PfgQ6s-%TnJbh!z_BmH#^V`wqu1I^35p}K4H1o&#>+}QZEsrj3gyD7zxamC -U^7yQ(;)KG{o(7hY5-MIIT~)f7!Q^xUpn!!Fh8L?YuHy0p3O~Zag+Au!qzNuC`K-EAvBn3Ty?Ba1=%y -eYDs8?Hj6#mJfPrOCf35YSa&<6c&nf>2a?|gWa@v3B-g2cJ-CmqsJF;`G~<_&mXIpAbo)XAx^n+D-rV};SX`3M7+3-SJmojTd~gJP^W8^Z8AG(e4wg4MADQWFrbfEfk+2Fjl^k=Fuu&YngXBkG)>d(tGj}E -U-#?ueMOijU+R>iyh!)Sd@$H*-X1Sys+GCN&{k6zi|8z=gC!7dyD6cTyB=-HtX0RiN*}RXiQ^RK{6eN -)eBdhu*FL1hX64eHeeb6diN1j2f~O7t`7%$o?YHvXSh9GakRdp5~PhxOLeYCT_$HfM`aPFR%G=`Q8tv -60_Y1;N@9-APNHxL)dd~C-a*mOPd2EZjr|?!-g9HnPRJ_C*y*Xdx%eaIFV~wsfUN`!XWeR}aKl>u20k -1bgXj=rUT$Z$#Vc5smf&gebv8JVVk5Oy-a5ves($I?LX)2k1f2aQc}s37+E?qrP7V?D-kiK~UL}JGos -S( -_aQ{tgh;u{vXq#|3K^Z=O?lB56HUzc#*GA?avqZO{oloD3IDg8io)U34;`Z9JCP#!4V8b$)j+FK%X(L -zk_X1bil0WQ&8Gr5Asn+Ib^l)gX(ciF!)GpWyw$Jew_S1fh0RJvB^i(BqR@@bj*H*k7`(!9cfr9`!ub -S2N5`m4s>^np^bNV_#@Z`e;VDPJo-$3I>gAxBSgnO^JQV;Gb; -f(U?&}a|oKm)tBK^e0#tgO*wYjt>vzil0H0X@HbwgXZl+p8XZ~_p5Rja0HoBt -=(*g+6@C^IUt`KznbBnZz?65hC}ASpN+3=mXMWz=7w!!FlK*9QIW=?9VO{__J&Lvr7d2>>B^< -5`phs=L;iG+d)3gr?(Yu@Tb7l|s2$2x+(joW-Jo_}*EzX3_)t4XH- -jEQmL0He?1C6{?&nEItLdRuhLnxV*dWstXTE#*-(t)LJ&44FvBl8;%ex3s8)CIzh{j -boiak8C^uPQBy7-MqOVPgbrtu|yCL>r!1N%3HY;iMt5j;*`*)N_8(S@bzr&x0rfA-;{j65;O3;oxzua -^xFA_zi!4=e|HZ9l+rRO`E|K1aP%(9JBwCqaUU2X>FA-0)Ax;=K0NU;<&U)}vi-K1apiesFHe(19~~VC$#7 -yXYzjgl4z3W_hG$bPI)28(C>uoQhs)pSYKf -gTBYuJ}hARZRan&fL2jmG)Ps7C5dq79{r49DB`v^mMMGf#K^n`Zc5pdN5wy%$cM=nBF6H%}H4J`q*v6 -I#8h(~lHn|62|Qep3(r4lw-SLV8#rC*&s_Ghgt!+79o~vZi+Gy8&jwzCGBxPQN>9R3weESpUYT(;$T9 -s0AlJxc1lKnO^&T9V0L>FH50?N;omT6}nFqK$G~?GsELL-@u{e6P_8Ly)@xVh6?>_cS&P)>Yn&bAs$q -lRen4-zS-h!ce6d2(p>mUrCj$IL`qAYm}0xphow>vLIr2J(WVmc%{xC8HT@YOSdkn7Hh)=`RCA$J!tND75}Dth0;sKc -DBCj%EKxOQ-oU)ZgI4f4kOKnE030`EAD+itX@_z)^yPK#U|v0;3?3fcE1!juGVkY4LJhb>TPK{0gGj8f%i3Q36li0<^ -Z%)}$80eMS)cx6w-B7uN|dPVTyz;54SSe|IE)UrbEiaXT*8iXMN#iL&e3rYnC{XZ>4P@k^iBpJ2s5x= -i4&T<0HMCh%9T^N%hQ_@nFmD|iw388Fg(>v&pDaPVAipt5+J7fqX$*|q{1IV_gXlF?WTs@Y`I%iyfu! -fvF-GXo$u(H@h4(AL~kz%10`kkpG7^ze|%0=V))1y0^dudgrjq|0wmpYM`P%eU9{k*Ku~OtR?stsP~! -dLjMX4|}@2UAGf|W<^1K!x(eYA>A~WLg>uAFjv%f+#P(WXY3To+Zhmg(0{uZT?@l57>hNa#v&L*r$us -Zzgcly-Dc#vruGegGl36@P!dk(vwpH+S8jLl66KSojwdKOQ^fvh#OF$1LHfP9ZbCOQ%s2j}J6YN*FzcMy -vGnS6qZQ5)$K5JHyG(%xCz#cO~ -r<-CUJW(8ZN_UK{IB_ik5cLUyr%44`nI$u9zfTyYO|DP||v`XXO3Vo2zR*F46^ZQ??F>hMYZqta*12) -#U!=m5+hg-^&g;BLHoejv%``zUc^G>0Y8TT9v|v-ZS;XrkTo(lul%2njz^6cgx^&YExK3Kuc3U3)Kja -H&Zy5%7(8e9h@4$H$0|+PmiQiZY4Uy13_v`j4f3fw$Vb3eJ7MlQW-fSspLI2fznuG9$Z#UJCTqlX3tJ -c(5M+JZnnI;7rx!tn)VRyeDYHJ?wigYQ4X)!n|8ce`&$ZF8Ifq-r4+2x5ml-{*N}*Ct&=Sw!6qsE9(gRT6tS{g414y3nhVNE57XucRHToRM)0#wz)g$3MQG>p2L(c-^5rB*8HAK*ovW&g+U;y+v -K_jvIS*7;3l5k^1=Az_4oL5QMI654ShhEw~mD2h-Nfe|o-px-6Zga?29kSL-)LXp{lWhCL1*YoXBx1m -Yi{nH^irK5cUle9%hK&!ny|I+n=iQS?JmjgkXo?yuUPgNH|9Ie`x)=kUmC{wa~BI*2sIe~C1n^a>XD= -`4x7xD%n3KBvmRBhq|9QNX`JiwBAV{ta3@P!#YDj1mk`{p*><9W4H7X7SHJG4OBD;&GY4KR}DWxlG_k -*ZGy_{{xzTI0$C=%$f%voe~_f%(p`Z;SM&2WxB&)8fF>k<};YI^ -)7~>3wdFY|8=V47fzv7=G|^kfBlQ|>)#Ih`Bhfs|ND=Leq*rz@giR>^&dRzH})AtZ~{U}m_jKSrf?J` -K@y`t7=}JNcoad96oC@owa_qlSWcKY>~!*FmJ9e3m3#tl{6i89kIpIVOQ4*7*Fx`>c>j;#A6XUf;Pvn -3bvNiCbV#@C@ivtm<)kP)NQ!BCsMCefVK<}bM*|Pj!$qK{yl!d&Ot;!@HdZr89BJ__ -VZvier&2LJUoE2)ep^4x9Lr_jah>ppRN7XodG}E+F#unpbGWTC-7_f;@3aa9&W^(k<J0889q~4p|OgG;B_Q;aPc$4XDuxr$*`k9Oi%q;8Y)GRl=a$Yg6ilN4;`+EW -WSw8zWqt<>st4*-x6o&-hrOR}79+l|*I;mt$K2Y0L>Bog-pBGC-sgErLb6VvcRx-G_eqM4Ok8U)qeg8nhgz~&B@LRd2uUX1vycFc^9=T&!k#%NGFdET0?LFJH6#_9m_4Wv)^Be6@Bsr9!Q2fKBj*f@I@CRlK`jok&Pw{-; -50V^dO)&eE#nZzaBIsfKcDQ>;VPyvuF~dIi6FRz{lFz8t5IeG$8Gf)Pk9s@!>0hPxz5Xe%6pvJ7X#HZ -ge4&w1)_=Vq4`aJjiL*w5FY~wL+J9uWp#OKx*6+6V*Ui>omE9*h{ -!2)G-b6eXEl7e{z%FlV4zlF+v!}q$Ses9U|Cqq68lYg{GOQhiAW^_>fxi5h4v94*|?fJ2J!KA;u@ -`gc!3_YFU5bZ!~O(8PSZdb;-U)`zA0Sv+tJAZMVFu_Vl%W^3^{al*kM1d-3d+H})zbWsJB#?+z*eFXU -wS-k3tS-M6r_+IDUdbL7dNPX%)EcfQ>%9d%jr?UhXiZ@_{U=F>J^bCjHer{f-LDMMr`P1WPx{6d{;P$ -)+QUCzArDDF3_0v*3LUkgkA -%x%9JAzTQ`vFcZWfQu`0OAZ?PmDM6ny&N;XmhBCkIgnTEAL7o|el}|9%f<_zgK(2kc)BIAZhJbr7@gJ -tGe;?s`Oq$M@(Wy!P)e)f#8zXVby4vYlLn0@w{t{b9JY?*3gK{X13%cl5XB@@VMzIv;wsdfKN2B?r~! -WA!BTiz$@0pH1O>|7IqiUH^Iz(nA$o4fO8=za&x;`4?2E?~<^n`ARRI7Hiwh1E)y+KJ{`S5M!_aexP6iH<{KaE>@L+zom^R1@)RXRVQjSUtx5mrEvufcuQreJU<2 -D}b^b<^wVO;hbsr7EJ>6%1jn5|I%~V2zoN7e8ggQ9L)6%sW>TpjHd_#XM|pnapS4eYTy@6}`7X-I}2$ -bPRcOON|wd^BUUPy*^Bec{_zIctXvh;Raw9e%hW!G+QnI7`!XXYOt|NwYbDQbiw20y_^-;4+&{#ppnw -3yDCqMgF)SE#7`Ot;0{41&Q&7Z(&gxYee@fGiR^|T^7~#TbeWVwuVo8MVcaD#l{>qtW!0u{)DlV4Cjc -$qdXTV{h-nxnZwoPEo^SN}js?C@r&&lI+m(XtnugeSB@5k?^j4y&d}JUHY!h!lq}D_ni*9*!o43k6ge -4aF!HvP^nAe2e<_~SwMo)X7@Km1GYIbxHt8b-t#ocoACV<(x@X0`Uw}mM`&}v{RhH&Qsxn_723i96Mo -Uqy`BboJkox%i`6p3>V&SScYi9G?H({9iEa19=Y4Y_NMXw>TvONc#Ba^cgPLz3w0_ -+k24ou9kGwx$OS}r}12ZsEbkdqy=TqT=3rt-og}u``xh0 -M2)s8mcP|zHqI7bKNA#Bs=c7z-#H#4O6M@&R_h;a+-$#LQWB>C}Bvdg7tzJpD|_t3?HV^61Fr;JWB=* -l0a5MJ(-YD9;ci~UqSR#+NEpI*6D_=a5b+EyXtKX;LuhO4P;|PCyD$z!TC(+>$S@oSqmQFRcp7#?p(3 -IB73abTu%-a*}Y`bRgAH@rCc#ebGIjeGQo*orYE!!UiY4-B)T$!<{Y9$Q8bUIlqEH!(lud7Bn;KV+@O -fr(X`#Ucsk#k0OYo1>DhKips7V=mncdl`9kG&Xt9Mm-Hm87Ol5lV1Yur<65%V&AFHH7m>bkE;2AIk5w -gz?PQ;aflTs?0p_`7$$>=V2RFCeoaoKYZ4GO0m#ru%x_pV0027QmHaImle3S|iC9(Q{%|JP&C@1q^w{ -RQy+8|3wumic4c_1`7FMO{1SLcUwXh>uD|_-P?a$)g!8gAS32qp^)VVmso~>b8TXJ(!Dr&<%_qd=w%* -kk1iQMn}B2|Gd9w$2r77mpRf`QF;I`nEI@p98ddUiVXb>eW0KN$D#2-%%QMPH3UDR#zW%b1EF?AwPUX -xa-|;@%pO_7AB8{okODl8P#@w={9(HsP0z`(E$mN=7()C(UFEM)*S-2a>hk|3>Z)gX{))PoKSo`q>;D -&deVsIUOqD#QA=^BrR?X4$y8>$U%fVT#icl54RX4`eUzZLz#{Hc6>xqGH&b%l#-F=-?DGC3DXTL*dd( -i5Zj0Jp^K0X3>>32G6KMP#sAAt+@BXF@h50p$!WmebLHdw$OEJN2zHzIUfqtN9cTNC!8a|)F&cp-V0B -D583tX~dp%Q8by?mbvMYZLrS&QDaw0#50prDET8kZtD?Ja0j1kC5Tq<-mnp?o>SC+DE9kIEOk`rdF_| -*6utOaA)Z;lIfz^^!Y-ZDk_(KGQ@?|JW9+lVI31@+Mv-!M_@zEzfpVtlyP3`HbhVe2?AhO3u+UCw`|j`SWPbeG%@Ktjo(CFnuJ#-AY-5N!A+JMP -kvD2}A8s$90r|RH1q>pJb%E34?;LB`s6T5JU7R1aoJ8GP4D^D4bLrJ4jm{UBCk0)Y(pbNXTm?(D>2WV=pdV|u{Tf}Lc%y^U#WIHCo-(Xz=vj~uRLGuf(|k2b-a -gC}O)d2f!C+4r$y!usaL#8s754#Gq9%nrAfj~v!!f%#@Hmy9-*C~PjY5<#%0#?m4_W{vZ%O=3Q2Ejm* -{H4sUMT)F%D&MM)pW5#lcWMu`|r>45R{0#Uf{>Y_Ma~04m}lzU3iB@tt-xxmOTIMBtFCkElSPDr!Vj0NC$VC7J!w7J)}Vkbv{_7vaXk(Mus$@?G7 -Wt;o@EMlANea7sc0J8dema!_2RoLrW11cENg;}NEAPb4qLtK@OFDhA#iDM32!*`o+_MK)>jlXV>GzKV -ZesM<>U))BdE$y)83!#I3v~4=XrT5{5torBEC}VT1 -xP_(*S&hoS&ZA`}XLS4SX1j(#)ZQ?uK#QTi!LCdf}IazH4QIvTq6uNd{|B>O?0EBojprUy|2{fMlfpQ -0j${Y0Wi=RW?K{dGtlr=QUe@lgmx!k=L5M-6GoQH9*kOGU@HuH?fIA)^Cg9Ys>`lk!iG;sfy+ABKU)e -V89?82DJ18(=`gi9^7;G-EIlcdLoNDDQ==hQTo**m7DBsf&u=YszYqOPX -?GPnu%r)^eP_=ef{xwCuVDf>&fG;Drjog6u0OszlKHU6Du;eps^kVZstYZRxNd9%cvB<9c$_|lYZup#BAPJ+ds?pj3T&sD!6vY{F1n8MqsAaCdqaMp6X -Xux@!!+R898-1xUorz55w^15wozuHY?8to$uLANWRDwh<~fjVZZ@O}wh~jMa%p3|E{X)|boVGbh?WeD -dD!CpW3{v;#XjUoOc=(m9tlcRB+Dy?JJ!SP=y^yn%*T?e^Wqe9xfigB67&S -r778B9_bRCA?zV!fkvMTx`%M=!Ri->7OMBP#7+*Rs8chG0RAZ -P)}M?ZDgD>#lkk6XlHwRCM#f(|E0jSv@V}Yo36s`Bn+#8IE|L=fybbq|V ->mRA~x4PNHguP*BcFx&fk?Lpo493lKbEekl -X!Cq@!coqUhi3ko40St*dew9RxVdzH#c@AgBaUNqV>~wmyFn?{;WR3eBswZC$_G8rP>`2r}67`GW1}& -5_`<7MgVR6wIA38qit@wOI4IQ71`^(>%H7^*5_lWpBHR~bFZ4_Q*i;%G6+o3Nn!6UJ27Y!GF15L|IgfeExT>5+k*Fa3SV -{?dvD~ls`>(%APA5Ek?)WL5r|Ci=?}oEDND9w%dWHgbk*|mG=%UIQ~ba2g)zn$AN;5=J;K8$4Wz4y>< -3i2wPNpP^UF#^NI6u86OsBrZB>_p;xNc+U5}Dh6vO@HBLgMKSE-MQ_GJW@GG&e$Dy396Q+n#M#bIGI7 -&_q=!2l%KJzYMN9>%C(@q(SrSJXWZx-{BKb0LjLda2}WxCgc%a)~(p3t)Af!m5ZiWD|{T{|~X%uU-3R -c=eO({vKh$G`WFWg2GT5MG2bv5yC>rcTEf5+ji-DynuddWAAgZ;oeV#-%j&UywAw~q^7l2Xg4^#Y3WV4vGHCeC;>Y&^t{C1cZQD -T@+UsT%@vdM6Z?DzpKjeFegT{BBS&Y3~kkmewf&8tytLX3Z6AMszM_74$OyC|QQSgZIw!m -^Hb5lU4li(2KO#vB!Yg|Z@8eW~k?vVa|CeRr^AwSTfI;77~))m80C>t~h^e?(e{{4lA9P|So7_uQ7p$ -CJ5Uv6cjqdpoGNPAx<3vAo2-JH|-P1xPQ89IuzXZ5L!R7nJX!Ybzn=PDmeK<0V3ZZ3~lDz+gj&7#$%Q*#b)3^-7C%IzTHSy!9*%2!fE|$IDF{5C16S^&$(9x -Usfe-XOgBx!yS~XFmCD-JW!s;*M>J8ehEA3t0-$G}wSwC+LnH_hSiVU|#nfmM3h3J`+|q8P`wTtLvBw -8&xgoHq3_Qx$Ucs|gBh&!Uk~j){m`{O0kO->}!>l~2Fw=-budynAN;2G^ZeG&0xBB$-{nk75skChSwZ -xuE!Hd*D7V^SE#22*dsrLFNADDI^yP7F<%&$c(~_zzM{o&E2PL&C}xsk~>s(8787~&fRJL&zI -|U{5qE;!ubNkTSM;qV`eoU=1QyxgB&PrR4{fIBbN7%ACpS#SYg5u3M-Ck#mcxn1{VcbMZp)@25COBm@ -U#B{?D0C;b@$*o1Ni?52yEJ6_dK3=udUEM_aJ2|w{C)GXGPwpOlWfoOR<*PU;N3MaVuyg{(E -uoxvUJlBV4R`YVkB@o{|} -X3jsF$;i4sEgF_oP!WvBPy57OkQ*0U>j-ujSP&&gS$sMJl$F4#yA15***2kZGFTpp?nC5XQVOpp9d#- -?NFm1V9JD_N<4Cm!COJgEjI@Mi{9v%ZQO-}OP5R?TVMl#~=K6lZ;@MWI^ ->`W75|H_PDgN@hzUOjb8zQ7p9QhF{#K -OHz7}0NsFJgC3fubEiLCG7Dq5HJhK4%~7?Zy!KAu6QaS0LouBH(Rqf(AQcBZxQOD}J|7lbvF`|#~9lKgk5P`K`>aQ#Z~7jD%>RsN*cIlKw|^B)GcfStP}mW=i3*~(k?6n{XfK^CgXTe0VMv-(p -!_y}v2fBPbW>EICXK|jJL-__?(vbSx18RNY@>Z<#oEc$t&%H^eUV^)=Ca9Q~MA;6cX?9*L!h|1ZP?m~ -e?uYvohe2#@9#L7YhACi3}m;XS9%u{_B+tc@l@4ePfq*q0av4xka^jzZ+B3Pz>y_tc_9Q3%0IubAH6T&pS-Xiy)WROys#g=FW{fNuphlI;ICfT?w0mpdK!6?Y@r3)P`ke*DREv;dO2b;%x8ED??b`42rz3RwG=9G&#TqZIk3eNaXf -(nc!fzuuhqy=2~<{a|c)=#Tvj%UV6Pc97eskr{Id^DJIx@=mh`p;A&jHAYcfyg0IiXl_f -zKu;4>`7_^x@5jQrsPGAhCFeAW$iO~Yp^T(=_EdK-MgxB4mX`QbTnzz|m{d`Es -hKaT;7O0ZE^xnaRihWK25nqHpfvCOa#d&(<<#y5b|R&p?GtH9c;Kn8we20HV2(lWIMu}F@Zou`gwii& -VKj1NX??)Br!NAG%f(_uU2$(Cc!TRQ06Q;73dXQmZi;f03bfbra1N{h(QYSq=;)q@2Sh?<08TYzOO42 -a&x*!b&3e%38IwcbJk&glbl}BV#i)b(D4?z}ClHrbih5SNm?vz0VFu7J)4lQAoC3L!d$AZo9itq&9%k -thtb@xP)#g~H6e(1hjQ1W*9^1j3C%zgm^(xiJEmOYSBT6wrSkQacwwSo2*ibsP?griQ#|fsNmjrvrAv -TKiKWU}?VoVh{_}>S682O(CBLCkl?jItNZDHR+5gf*`H@}C1X%r$b8ip|#CSY_gTK%vqNW485;y2Zs+ -6~$FPT-q5j)r?s-@-ply-7Urf5Pa;@B&*6ZLke-_A_%oz%F -kFa2AeQ|_=+72B^el^UZ2=j3*Om#Qp{GY;mTiRAO^Bj^Hu6?K0l=mLKgb^ki(3hN$p{}|eT1*N>Ui$8 -;I2mDpk{b|s()aNG)2~bV>dEo_EEv=VUwc9}z{XDjzl>OL}h13r`A-qLocE-({Wdw_1^HD}Se|SPn>M -dJN*{7~KZTgOt#T!mJ*I!@m6xJKKI3v%>N5tXm?qg!`OEov}^eKq`Vp?y#XK$6Ig8kD&_KySX>Y4JE^ -2Sm=M|DN`j-G8NRkB1+;qkt+te&5=cIE!{>Aw@Fb{C4k@gE){ZvUnyS@?Q0D0veYY+f~4WUm~u>j(dF -pNM8}6T1b?0$>oCVP)N1V~z+dk;LkkPQZ5RXL4}58e!p7M~p1FG(E1&;H2%<4`FYRB+tKEPj&>@Rd3p -W$6zb+J?lxY549m0T_ur&!=-ph9@$vy;3g)>Q{z5ugYOCt7E(IV3RtO*0Q(|US@|+!^e?!dz~WbAUlpQD0qrk@V-|5zXhPWI_5xj+2{K1UDsy!X -$K#Gc&v77=tQ!Cqb}l>c=844&JyxZbs7R4l#TOxk -E|?BnDpz~#v;eOhhQ%ka~B}aize82w4ixUa{Ofb{-d_>zrD#fZ(%!cSzl?$eZ#L8(P>{FRHL=H(AbRV4P;Yipx}Qd&KN|~ -)-g0qouL$fNpLVY~d^gS8mIq;9?0$9wptlj;o>ITPuD6sFj^5fQ$*zkGy*XIhn)X>-{GC4U{HVWeT9k -VLK)t8_1 -caso~|bR=^i2P?h%;Et9xSjeCLDZ{Ryb$wikaMEdRX3zgr>jcT4=c6$1Mbe_a)rcU@=J1fEJ+yRlgdL -V-aihnkx%qJa{3XmGPad~REbYdOXu4ktUXkc;Rb>AWoAGI6C(dup#zMc>h=%{|V5DL+iB>3OmslK~Z~ -C8^?TvZZ>&6;;aDNq)jz_uM`>czlt{wq2=|{X*sW=v-Xl)ZhT -%%(-pORpv-a@(~0HyZ|#Yy`W8_`MSUgS -#%hNpDxLzF_4m+=CGhXJD0Qa7`>x;9%m9{m`wI8kemm*ftvyu*@|Y2w^1^7#sL5=o6qd~qFADffnH5k{>4Vb*d~neQepVEX`LSpi!7lZ`_v8tbT#%$ -~ADEW^%-qVx=2Agbjr|jDOD-iO(oayN}TNY?HfoxI3?|9f3fhl+3Y+NR`6gf=63zyR$Wk5_w_ph81~d -Oth2*FJuwnjIk7kT;1tbsc)w&sI?3*8&9eQg3bsicI39oM+TjMWUAv{@SMvP&b!!RskN -!>=h;6@&Qs+pA7`wADFG0t8t9e-eqzL!5(E%`=D^2y>=hU2JW$j#3R(K$j5G~iFxsBJUV8QuVtS>xSB ->eS)(fdSO1p>{3TUv_!=q`x{MqbPMSZ;90tA(ZUuNohWK6Sn5dLTd3bVAq;gR>E|t_QQ* -eq}&;d5u=htq&&b%xQ*#XG0U96=0mz)#K}^n<2U$bus5_`x1NS3!yiMY}MdQUhD=UfmhXABl3~6Iu}2Kkz*8PH!Jy6cNvs=Afzk)GiTg%Zy53>*8O*li`g}e|IKF}7YM98Vdz3Z)X8}oi<;s`pv4&FeZ!}RO$Yll -WnTNlGFi1C%n^v&TdSBD@7`3*x+nx<$7{Ui4JS9kadynb-?cMXCc3jbnXJb$Tpm-$7gJtIb`w-oR@k= -^og;w`ib?WTr51YYzT&xGObwiV#J+C~8Fx%!rH@A!v&D|x^>ha5$A{DWd|K038M@F&0v3HCAGopTlKc -iFoG>08#1r+eN0xy>N -HO{$Ym4XSVtnfL5p?pyln?eMBL@&WrS?g2p;__yM7YwAnRQzIQ_y(1pN0SMGuSSAjpifxSW8kWL0{wL -^<9E*amT{X5uA0&FBED1H7x0IJf8v}QmHdtBT5EFm?;i97#1~_K=JovBJWHYT0 -G*A4w)Yhfei+r>(yewf+I;Tr*WpZ-*;>Mu7BrOE`QDf*jsbF_Z2_>T=Bduz@*|7!a+4vIFYQ?pJ2632l7_c7f@5g_PqU)`!ITx4|L{5z*L-mOj;Iem&rfU -_Yg$NlYcp{ihQ|w5Ja)y;0V^FDV<=Q(Pp@}=5%JReVNCDau2s%>Uwgzqwn9juCtI@W0WyJ601xdNoDX -Gn!h0%2JKXcei~X+RU@@-?6%Hvk60x)W3I~xkwpejnllo;^3Ygeh8nj -)zHbv?UoStz(OIdEK}Z9DI9Is -wZQ9mUzZ(_9p~V)R5sck0;fFN*RijOgjw*aNnoO*Yzve>1)3l~>u&@Re7Xbs2V(fEuhaD5uA}el~MkgX6k!&y{JJjwTFXo?(K -@AEtSlOdsd$Y8n+w5IG*kx04b7j-zM(t6(SO8;EVKC5i8{>@R+89(>8Z$7V?u=e}>dF>B -G4XodpmH?^bF?kz5{5Ff9sn=lLsRE!R6@jX14rzfk%FO$c~5FNgg8l4|6xkH`3>mNNYGZ$Ji7aCKI1w -u@HS{oLcH)#M^pb(W-mB9PIFj9YP+cGSBYPo9XyVTOyk1dnP4sq9q(T~0;lxybHons^5dlzoc8eUiXf -t&5Y%aV2Hj7V*X+gVTYPPb)&-oJCvninBTGrU5zT*+<;EBZ@KC195NsafJF4!nUDgXQfCiO`r{O=s?o -JyY*#s39!dpAkJ{3t~%u5(Zl@>iJPLEGyEkK@Vs0dP-kw;NrTS~FHnb9_<~*BYaT1ZRS7c@Ow6 -(dWdq?DEI8X_{Gyl)7q3rmHf)xTZ-d5EC~iNR7ppE?YHPqJS-PJk{}P8)R?rZm8rf0;9;o6_LnBs@La -TCo@<(sW2mPCJLyHy?j&@ypP-dNGY2OEqT8W97Xdw*h^FGcSSqE_Cg$~kzx_?jIc)0;>hUsKsP8#27+J~_N5IkSxc90St@V;z<#3V&je-RE~% -nk?bhTRa!}W(vPK@-0!4^?UPZ_5(?M{@DhjK28?fsfj;oSwa)H{qQHRum5c~{e)?MbHnct8%~l0g>Qf -uCUA$@EsJ<(2lZjc*9gb#C1@*m$N -YF?UPFFEUjIVF?b8>QhSGE1B~09=;U4aiudYV@UD6#Kbrz3-jcidMmOK_&$}qua -Ni;0`D!LJ}qcC}%>qYYK2Z;e%A3WdrspE%Dqx8t^8Wq?uBa9A6k>aybY^StZX`n=GpocG!INIx(5 -dc)g??=|qP@wHz3PJ`FpGfc^d6Aj -V{zi4(j$6i!m4FbnCtv#PB?)P*aQ -WRLVH&>lsZIxahyl`ayfW(DC4z&H4`hw2`yKZTyWye@1&PRcH)rBx7p(%B6Viz2{@C1!{vq%4x;%wRi -b+wuYI_JInQUNj|y&EW$cSJ{p9(_(v)OF`5KJcti(hoF=up( -}$y?Ti!)+kNR}GQmZGX<{Zx`c@TP6y8{y$b7kEi@X?FY2hvPpqF7G6!t|}3PPU~VRi2)Dhyby6+b_Z9 -riMfB(HW~BO%A^TG;JwjhS2_9Mbkp#lMPhov#ly|cd0jI{LpX5f+a-kP?@kl%f+IV$z{$Y>oH9$-2*C -Ocy|JR%or7t*hzkVPQb##V!oL3mkHR9=~wU1JR{&o)32Hi%37@@Sa%%`=2(jnZdlXBs7q*9-a9Fa$Fh -vXX-|s2Mervz>>B0Bt3ng;&5i_mzR^uOVPqU%Yn!)+%&*YQK1evm;_jZB9UMCtn%RFV^ -LyIm0z2SYWik&aF4>6dlw7MQn*u&=S9YW>~^R6r{l>ce^5>gQ)zX1MhU3Cg+6gVb5$nUxWzadw1#2jQ)d=|T%`&=fvvPf3A!$W2irsC))Niv@%{di1) -;3`&Tgi~xxn|@GN)LC-bBV!xc#e+2kw9mK9Il{M)emJN4Y$4ioQXMLyxHAVKas+4*tOkZ{Ne|9Lry+5 -v2l}L@%hl2z&FSGmoKB+8k*OLC?!DvDY$T#!)qkM);xnRbeDs1iW*>u8`k-u=;5Ydd23yp6RYmklnqo -h6`)}sI|0wnHFRuTp@$&t(-|36uB!r<5ijf2fQv?lT2uva*iDDQ|ktjuw7>bf4j#CItAoLFhB4PN=f` -NBV%5E?8b_v=|E8$&&k4)agndGgbmuzA3XC0^A$}-p~DQNmd)&+U%&xi3I;I_z{qI<~Og5nnAw&1n%p -VR-uKXW|Vg+$Svu!FwU^Wk7u{KJVo5aQ%J0;9WTJsj;7lr1=;?*h%Xej3{!iNA$McM<($Cn!VMZe<=P -d)$up$+dfN8#-?4fHVtjz$2!gFiwv&Sg=Z^c(ivlbuiD6&}_C-SSUX!QM=Ww%);`{1X567-!xWKzr#g^~J -se;OD{5W2z|pq0!H(--IoNXX!H#)nfNvflv`%E$q>j*r_o|ZBJXwL$~Fc=escNcv{RpyH2#}+(qeT%N -bzZ>8t%NeEiz*-c^I@s2M9;3CrNUKN;-KD1C -p3TptR|?9?S-7HUk04plk*o;Y!>cS%Glxg3WOlHWmKDuQPlw9a=jd4l?ib1c0Uj9Tr^GvI=Cn9R3>P^@7# -r1LK4v7oVbg4TG=AZib_}GRJ{n2!(ru%|HZ4JPvVy-7=aAVwdZ=8)CbQwyZT~vi^3%$NC0&M-g$x23c -iBTZ$s#b6+!>nHO=-T*>u*)Bsm%nU!C#vMT1k(uDh&BpmQ(O*nlLyGoJH?)i1Kx1C=tT`-Sv;7px!61%zMh*?;f^*mx9~GoaRI{n2$N)Y8tDm-e<8&u)XohJBeT>@c75fT?6YCCdR -*HQCIsva|v*g!2zCPxCs-uSo#8l7w8x`7o}f*k;KzM!izr+8c?d<5F_>_4XhRpr*;s$yZ;u3^>ougL{ -FNn;ftC2`r@Oloq3x9VhKIF8^ToZ!e8c^>1(XWfFfnr|jw59+Rx5cqL=|o0&v;(^hR(B*Qxz?J3=tOM -h{A;(zct-Qj);7=!wG!P80Nxhw(mq^0ufK)BEJy_McnAhM>Fc@ -}7NRy8#QF?0MG~?b07p1@=hwR^ULBJznjF_h@H~Zh2pj?t}VUHn+viEwM!2LT3B<(LU`#BR}&Ec)J9o -?~%MX*l$FV`xxGKCGqzEONqThuw{nvI{>5a)HlWU4?-Y&ZW#u9#<@tw>dCT~kz_DL@Fa- -8!czSIi>vKx)qhb$-HbG8;TKn4c51&?Ydpy@h^FKOV{!YqV -m}bxR@5=T?f^*de>@B!&VH65i*76;#4QqN!3FC+Fs+qOo? -70-0?ah3q&B@o5e(8b$Kb-)%>5Kd|_Z;8vBX*$dgWhWFGlm!6HP9`2J@p@)R{5WJMbihj#PHE!0A9Mq -c|JM56oGQtCb2GVx!)N1*z5EXpMB>a>&ZG-vM`0nVG5$O!c%f+xr}pjyX%^Gd8~;Hvxjjpt=?He&6yOD1um!AIJ`u#Jg_Mi3LuYR&duRnwuQVy(AI)7bP& -xOJ_dzGj~`XdnxgS2dUW4-Xe9vYeJoFMEuBjpRIKN%Si5GqD25`}_#)2uF>aa@fr53WxJ%^g_s77U&& -Xpk4WH`|0&ttb6znf4LDva(%1To4`}pZ~2(^xv=X%fSrxd}M@71|zA8vYfS4e#f7cb%2_665K3!{*9A ->`GAT;o>zYGZL~f;~<{-ZN7Gdv_buo^~K3#R=xg#4M795*T$BAa{k30vMj8&Q^U)Kdx6Bb$mMQB&m+E -fjl^1X-0Dr-|WeG;jT@>kYup&GY*oA&07~7lrIi&@oh4c*}!~i>vN20#eE1miJqKGoTBUN+~_$xt8C6@6Q;r=j5h#!PlwtnpA -SW_!46Tq7Q=0e!o|LRdN>M>-&0!u)PDf}+<>?tt*ztCaLKM1q0HCbIg{{zFcpTk*W}va0sJtuC^L+a -Z>4Qho)mNNua6imj(0N!IJysGHhGRgH9%qWXmw#p_Z7ap{~DC4RKmJ4x -TJac;2C>NC9kI5s``IKr&r3b%9F-fJtoB-{6IBF=#ssMx4J?j{I0JhhN2tAF97T#SdNyk>`aM_jaV6 -7=tp;bDv=-JI47KP7=Jit@BA9K@19!>q+N?or^>D(*+i0-f>!{)V4#2;CxmXtJmt0ifvgf!i3_geQJz -u;8D!l0dOkIr5171jU-J^zSMtSp!(#{wfbSiAE^gOfhLgvns*giWY7L(-^j|*zTZjt%2z~B#igf3yZs2l5X&VNO!oB0Ldq%&z1 -QhljpbhtyMD%0VD(LMH0}*>&CLrF-5qhU@Y&Q2&ntY -P1PEdaKCw>5$j#i@E4z#1mc6fz!-2Rmx}U%hfZYyFs!)w~9v-PbA+M#8@mN(rIj?+ISJ0yxxhl*I#>* -Ppn`(;uHIRwc2}te)5ggE#ZY*B)6eLe5>_u}|bXfR3;vA)fK^}IJmIp3BE>026v9@dDN6wtGNu{^FWqn?uyHZ8%rf}v -_i}q8lri~dJ2n@9*ifvx-2exL_;UdZ1skRl6n)Nr~XXKQuPVI!~L^jvX@-I3(3Z)*CWv%F2xc!njPfn -gx(zQ>MKY(fj(u6MtXzlRjPb1;fA2kIzY<>A*nc8ZEuG&{aoQVip6_+HxMtof;Zmn -kbUhWCOXR9REYiIN&Z(>gqSRr8jXt}Z&UXS@yoA!AgcEleCmJn67&}ur$N4v-MudCtJV3TBc6I3oYXq -!){i!Jk72h1JSr$A$2i@3U -`|semb7{sH%5+DK{DWu_OQwcJ#x52l}9YSJh;(U9Xnogo>elW77sj}dl6!+&qFSj< -NBZq4}3PYI@qcVsF<|a`Q?CDVuYLq#e}BFu2hb&K!kVr&a_T8aa=n%P8~`OH4bosY6hcAJ{CIiTYZiO1eF$E6xC}S)s6Z -r`^=bROE%GGT*ZX{(G`rKD^$<5X;L^pb6z`A|+XyO<6!ny{H#@cp7U8G9idSYu7W+ci0Ja8qF -^GV2vpt?@j4P?0A8)flB(p5rDh52Fg+z`Ksw$@|;(!Kq=SJOa --Dm78npdNGY;Q1^woOk{9(r(MA$4kC% -Zz&-A#NbBwE&B>AD25Md3Q6ONh>FxnqgFZoPA9{Jy6V(3*l>M~)`#%k5|97wB-$2?wtl@8AEd}pAybU -qJ8?@brcA}^HCN1lGv2~|Le;!-1pndl;f!~LD;+v|!xi@Ef@Qh^( -(4(?Pps*-ner{(_kN<|Ut$4A7JOoNY(}o3p3j*OD(_r_=2a>o-d2OZyt1oYiuSzI5jLigGr^*n&a$>q -TUdN2L5CXw-^I0T;s_UgSI$LhD0H1r1w6y*${1^^FVai -PIhi;{9#Iq?!|*7-o;9>cqhQ@TK3RBpn?6kJh5%9Vf>!bpm*n3=s -i@4!h0D3j^APx#6DLUy$c|8{Py&r-#7jlUxp_3jX!zUJdn4L{oX4>_ptCq!8O>sY{*+$BY4kS?wvUFZ -Bq1BSA~O}483jiNwW9pqW1(#obIi^=x@stVzBSy@YnK$!N{`yBKezs(R@R?W)pJZisgsXUJGEp{;U)A -yX8)6?%VTQaH6)M4~bIyL+;^A77l#u;qe-x_VO(qSXiDX3qBq9t#&s;biOLAT8maP&~6Z<@f(KwP_X* -`pi{EfA1JIoR4)3AF#8?`ZGmC}w$wAT5W9@sccl1kqchOc9J|a@G#T?VdhkMJTKDL4n9~E)f5MYd(Dr -n^LL#5OY8>nBHH(0pB%_h0u)F-6t{2~Jk0lyMN&(Jx7tS7Iu4RbUg%k=mbL_puhQQTz3JP0Qyp6VOA>!WXXcb*7NT4LhKOQNOxPKj?n!cGQA&7$(dNM~S$m`H)fJ-G#c{wGit29DpV@?7cEH -|^c<#H`!W@bbAkU(v8Lse0jUlK8~x`00UJ9>MqjoAQYPO;moT3~T}YQ27(h7C1{PkF>-vQ~WBle?l_Y -wmUK=xou$wpDpOI67=9gi9YTKzCfF3ly|Bu9MMY5X3!|2AxGq9@t;5+8rITp4ZzJ1k(`9Z4Tzn`Uyt! -E#P=K%E>@)ku~BC#B+oi%OSy8GGP_cuD>F}_2bt6q`CB!wP4_SGIj=R`%i1Qyqq1#)yF*c{AD -u?RDY0b|SCy=c6ap_w2OZ{VFHnDZ-#9tg)?9O8VQ(dRimn&rgJXm;*}fDpZe`U58eOova`eipk{f$Jg*YK19V<$PPO -Y=uL$+8aH4qjGcUlVlF)R%;{xEK)V(wi=j7YjKc(AitTyas6%YtlbADJ#F27 ->;PPv?r?%4sDk#$3m^PWAMM|vSkH(bw2p~W%fs>niH;7G2Jn1b|LK$3uAet`8Na@Ob=hRrJj)P^)Q){ -%`GN0_q{t5OnV;P&_Anz@F7xgARSP>J-PT$^b_c`C*$wo+6~!lC<}TI0dF -{tAor{`cr%H&e0HB&LUy(a^zQo*@IC^yvy;i4ShFF)@O_hAkN%zG({K6H^zY3UvmH7i(os$wS(#ii@33{YPrPXgzRG?9F3Y0pmYP|2@dP*p`^`!3Y1-woC -z|DbOTMi4bk9CatMbhAoq+C~<(>GvJ^c>}=s$n@{&3*;lm3Z2_2ZcxA8KCXAh5F9xTrpTWH`567gZ() -y}ok~sZWl@wFvFHC-G*w6u5GEtaj`e$51N>)H0&9)3X#{+34;lEqcq#6gL~o22ppptp?*Cw=bg3FJei ->P&$+^9MZ{d&}3M<9Q~&3c{zMBFTgp9(Rj7{aMW4roSA9;R9dJpWVV@Rm3c^#)1Wgsqk5;yNfh|_Y42 ->O=8L1Q`BMZ&mUjbTOBw~9z|qJ}ChuG#c6in5z#1ob_HpU;Li@XJamy)Kpr|Z)35)HwLOh2 -EE#L)vBsV}+q!UIy?T$;G+X2ygZzjCe_Rm2EqfzIoSbTvZ_@3pMsGrhPExX504Ru4i$57~4oMAKn?lgNTHBN^^8I83C)4Pq=iD46IFwHEUc?&HBYWg< -=pCPzZk_pv+U3%=>f60Qlva!8N9zDJl@BHjI&5LmNo;Iv -6yfR%5D2RG!T+K+>maiU>SNWl8m%6)%lBWV^TZ3%GO5pGu%a}ku9Iref(WyL$Xm`JAzAeb4EqdVO?Zy -ztT+waH4amoZxL+tE1xQkURk`4eRJEasGH(epI^-n|k&9WsDndK=rk>7(+P2-eP7;UI{N+q)MS-0o1< -`=h<2)T_i&b_D>qioX6W2<{Ldf2r9`D@99MaftNO-z28gnR|gLe{PzR6mKjbXg3fz-#Fh`I#IyoFpsA -jAs=&7yoM{32ilPB^-_82Fm|n&!(vWGVCcoLJ!!9%7G_pXCD}TGBABK%>n09t<6ESTAS|c0O~f0!M5| -3~a1W$Lc;3C+)nf2WAluwNoOm0nOI)1Axcps)BG#6&xLxONkUEx_t+F$1!bGq}R0Ish3y7cPZAqrUlI -oinq?9IS5QA>O+pb>3H8^@nr5t4d)gvKOQ%8YT!Fr*MKIsh#8mBPdKFCd;C^Ur}x7C4z`ka@&B!J3Z;AT -pGbE7)b#Bo9YuTPYS%MO{saH4$3P|fuuJk@0G94zuGAY^?Fud7UW3|@Uxe945%dvfy?E`)c^$>qgY5I^LsXqah$<}N7!fUW(S{$2Mthit6s`SJ42f}*5wrS!&r~+MgME0 -c$BdxAs=bv}wtqf!Td+4>_x1JIaxsN7@W;y7@53wY-u -W0k_c4d%?*MCig#NjrFFgi5d)L$V_i+0ez!E+Hmc9e5E#{n0Sav)riRP9-6wt>^WTDg{Js8Uo`c$ -miP2rYn^@XadW9vf%Fk1jnPNyoq4uMXsVgWuf7UU8ZJp>bimgX8jS`u-C{<@1dGcozWMn5*h+AhIA>= -vcr!6cg%4;BabX);jHARLm$PD;Q^8zc|R490#FDad3AHdJD -Yv2#ksF&G^Cz{;!5EXMTw*F2r8t~344hWbvx=TbKE|AT*l1@?WNa1nQf**?xjZt{-tK}XAl6`$8dkZ0 -Fr)NB^xA^S*>J!V);5+2uZiHR{AVn0QRXfT4!%$83(%0=EAUfNi)kXg{t+_t)1{5taRQGK{1%}D}m?5eVCS=Ov~m2e9~3eid>TkdT6-p3OmgBJ=p5Pe7IyBn@a5-c -r6GysRK(pb~dy%U9BAf|9t`FN2lZ3;aqy2y#@>y6Kg)1KaJiC<~-p-^=fzKz<9;Z~7ol$ixQXj9Pk&| -T~->;^~2C(O#QOv*e)quh(_UBBFu1DHBUhnH&Thx~N*mF-a_gv!rlehz`c5bMgJh8eY^&KJ01LUhk^xr -K%Jy}l{qH9wqs)N0tNBjMTR@k>t4aYcJ8hy-ID-lxVeR2I20&+tJ}fvqII-8DinOzFW`NZEr8$rUHYz -mZw_p895}pty)C3Ck^Mp-j_3wd6iKouk#BYGuzNe%LRp_LQ7=~`kc^I{(0bhzkl -$CXw|!UlLNW{T#j;Cw}2#)ke8*KX*BBj9_Fh*W=}Uc7VX$SZNiS=6U`0Jc4AIx=Z~07>Ok3vhW%2vK% -$q~1*0Gfov27gd5p?j#fss1sm4vW4S8qE}jWIL}l?QWZYJ?CLWo9GKJF@^F`oXTUm(hkX8FN8ynl@GpM0YV)?9rLhIs -Laa{b>VSwXlPCk*nu(*&&IS9hXrw2$|@PXI=T4VJ|=DV3R}iMLJHR`m;`vC80*m`x8zGX3T3F!0&%Fr5i -M%?_LM>B^|;Rp(t=mX6l7vLBR^YnK|Z|Aac{Z-MpWQP3M~LE8gcKq^vGevWI0mZk~TJ9QfAK1vu+q~( -?4^>P%c_2^!fO+1B!kYpGQ$RO3&9iWMH{hojj0gDWMXzYGZ@?jIz*bfVFFvdB&4GP?yH -un`RP$2yUU6b?ew(ZP@eq-9-N{>E0x3%p=iQPjBz`x6J9g>2L-yRj8h7K1d8K7T;3vLxW&cJ5<9NY?! -z)B+Hl;nsMq;^Ml&?Wgb~QL -Mpo_&zg}4lgkxR3tX|TMOGZJg$_Mx>G+IZfVifD72kg3fR#F4~I80pGHdT4!pam{6LF?+HSOHUSki5c -ZuaHY)o;@w-Vm#3~4FIc -Kr;HuOpGrwLNI6)WqAhkZ*Q0E?d!Vyj}t#iw91ZW798qE6XNe -Bfp7*kl(;T$Y(fc`=LMzByb$2P+|i=$QDj-!8J&2K{mPV#wg^|rjG#Jhl)20vtf#q*nvt+zPt6X9S7~ -9_PY+TtL;Ktbo=>CO1#6IINl)(5`ER--Tq_bJ|=>r`%AyfxWLK2>OQN2>?INWS6m_Q`Imk8Iel|trO; -ap?X5eKAUlW($-RRkdB^=bH!8GGJMTp -Y30vl?~iy1{2fY*PrOnOjN{W|Iuz+otiWLWykILQggiR`+=rQ6WctJibir+5q-(ZIf|TjK2bhOz^~~c -I2>k0X2|0KjqC{Y89c%bW)mcerBYHY6mHb+(XVWi5kB-H9&^p@Y$3z8gFGCV9d2#f^D&3GUbfkGe#@AhN=lO%}EVZbCx5}z{h?fgRTF4`D-YYq{6K(%+yzDL30w;aUw9Q -5738+~5(O!1vFfkgMRXN>RB&GsF}-@@Erv^NuPaoJ{F_Fuw1IR?EWE`0kw|H^o576Oa+hA{L^aI_l+a -Bn@^nfTt!fC#y#?e^G-+8@z(9Js|@(R*kv4fhP)-arQL(`>t4eCsW37ec&A9RA99kh}5liXV*!DG(et -clyEEK3~J|VtVHEv+-E}!^Q*r|IT<^PJhwedO7z+8E+s+y&MPOoPblCfWC4gm;#^*FofrPkz$F)1&yk -Ulps&ldc$avhentHNQ;;U);2=M<5sKRO4O0sbtzlhLYRv+C)gNU1=jxiEqnb*qY_i(}B?E` -j|D`_BAY%k#OK0rnng-daU>z1ZODX3|1y9Yk{|v78<@*NL*r1+ipYUL9IQ#bl`FIJp3He -klPw%3P(ceVpE(g+-2f2SaC<DMo26NxRd^CW%iY*kkpQZ4nh{f>MzwgNwFE -E(Y^3#vL6=c5gDBv?(BB14qIa!Q) -`Ap2HQ19^HQ45omWGMaC9)2!f%(o6b|Z9brI#}XO590Bo;7ZwW@M2*U$r)a$>tdLdFzd`_~nt41e4`g -r#1Pegt&aks^Hq|pX^1hjY1ud{H_6QTN9|^)Hubh)g&)Vu+YvqOp@VYz6L+~~8$n|O;t?Tj}ywh>Mat -jnb&o$&DfuhGHJ@_x&H%W`D9ShCP*X7v;Hw6XOlMzZ!R_M^0GU;ygTYh}0`TelH`;;aouusG=^t8|2z -2=P}v1F;sI>NcPf~kA74^X&O-NA{B;b=jOl~O(W!ee*!pwF0Kw%%wlixb<|zAE#pNrE+bNU5ga=k9_> -B~}9^HoKh5UYoXh`UH^~P)nTTt|>@LSRN?a9?#8F3*FouR#~JAlN_X)cuEIa>cnt!y(ca>251rvuddc -hM+nakyie;}a;S92(3dA621)|cy_?++aNWZqXQ`Us3}{RrZ`A=H?^lD1$)|5p_q8JJDHM)s2#X2d`Tn -hV9QpgpltR~1?wyHwR{XpmvJ0`|sW@3FTml|89+hChgc)O1KQ6oLv<1!fw%62E7T=;~W*j?ncuJ!NAt -!RN3e9J|+_GwY9cmHC`TU!tY!+m57TCY2<9r#s5lx!YHr%3~qRrP&3~-+J3GH@PPV{2~H$9VaJflY}Z -QPPTG{8tyapgt5e2;lXa0P~lj4Ac@^%uW<{ek_DU-Z!a%oKkV*c?9C8Lym$i8P1sOvn~+;6`%ziNE!@ -WNrMcB*uK@{gdm3*YvWFxsodCrzY*oe5}y=yar84#0@#6Um}t4sHT+J+0Yh6)b7aXFz^SwCMo9GR-sF%DxwI^?O8>%@RXp#G!m+VY$qpCK-CIT)i#XlEI8Is^F>QeXfNhynB -NG>bTEO9NICGLcI|Uon*7`0K2q}0rw|Fmun2fO>U+!DHq$)^3qeN~A>%mZR#-!{Np!|*HDNUaE+;3v= -`%UsLx~G0$bEJ$?YPMSfK~Ve8|9>A2SM@ANyJjqBZQZhu>YFJZzRzS8(#-pXGC(0Bhfz57xm7k99d -skLudh<1wX(I&~`I$@pg>_3pBJ=TNiDRk2+M47$T=@I0*#$kkIoForQb;q&K%~}`2nz=k}Svw+SAggUSUJ_SxUlXb0j}C#P;> -D;dY`K#h3j;?O=jw(7t*lW!O5ahsJ78q*yrzP8;u$_qf*r_L(Qjn#gwnZM&(-qM=xpx$-^O*8%}5q~{ -^K0f(;ue#hiNK*oZI`3w|1JodoUD#{MQER`l)_5d{|R|FJ8$XOi>l}kW_y>lRvEFzO((6#r+Su4~DVm ->)?;`{*q~X?Z*)``~UrNkZ&u$wvbd!`g^kO$M|{%KS9X|r|^yeS6beWW&d*DH50jPI$sB-jz_hG)0K?3Ba!J`%RAv!?@hF#A`ql) -LS)6rBD-sEB32pU|hnOAGK%dfmu6fpK+fx@uSNF=48_xy}$+{2u*%gw>cMIer#~wFQ@-$;cmZ78*yI1P86tqrO{V -cZc$5n)=m<1v7Ei}8C3U4-0!xj(&k&g1JA&Qo^8A2ZYuMIz@J&vs{uPjQopZP3E@lbZ#PS|rCF!HQth -vmz1@>O@Tv-sIJpajYK&lKkVLNLGvv@35w0Y&d}Vcvmjlk7cp@DCf{sy6ck8I%z{vd#W(tL%HkbLKl#}XQZiROrndS&5y<@hYLRHWRRm;1A2M611`wT_PHi^Qc8 -D_&*~D32?2IT&=AXH{~$K;rs5hUb!Bst_GD_-vfDKIB$Xj872(7u0$%AM2BGC|m*|>CyuiWRB)14$+6 -jTl*I{M&3x%ly!M^7m6d*>^KQ4`8<>yPUXkCDPFwSht>Rr+fH~YEB^=-rnD-DfMth(pUZkDBQ3u+ -aA%BdzB9&ulYss2C5h9RtAf6#|?4fAkga6CY_593!`g{Q{nVnq&Yx~$-z`J=phLyrewp*BemfoD;EfP -OtGzarAbku+RX>B=KbZs^4i&z5Z!#0=^S2DV2c?s^q}Gh`HHGbu36-z=ZO@FregF<4U!$LN3Xg1@DYm -4V7%`e|1tRe!PkiXF`+=U&L^SoPD>YHh9{u|p5#>t8wo1M*@a)3N=lBR%X(@f566iP@+AbbH -xE1dt{7a;ENnNFGpQ__f|BYf5R0YG27tLOs$2%LiuEhciN)=6sS1=*Z8JJhUret8BW#Qsg>5LAr5TyY -5NWxO&Xok%jk=u5I!+`c{P#OMjsWrfp07!@xc?oduh|2!EWk?cuv6{@9Y@;wZ_r^1mPCm`>#8u=!~NT~e?IKHp99dnl@M1MtBobCy(4NSz~TgMuC^J2t%)}IXa6g&7X0Ky- -QP*l3-w8C)5GrPz%yjKFh_9-E6#tnE+u0!#A#ON=XHTYsru^{XRFpyHc_Kr_R#GCfhDeT*K00Gz$f)1 -jaGo@F&(ZFO#8y@Vl}$s*d|Aro8#~|pLV$_#iBZ#KB>l6CH9>vpYcUwr! -M=N$9lhrWz38Dh1CCRE*=C_i`x_Ld(LXPIA4?Tmb7l$H#dBTG^hRHlz%>B;P0OD&u0w$_9;se`h|rtm;LZ{ezRfpqoU&c`mc5`7v9TE>r9abL-nezM#@52`>SYS8K<_Myj4MA31kYE{?Sm7fchV -6kdPPW-$!+Z%UTry^**^?E9)YB6gm$S -dP}&;a~pVfvGX<(~(QBE^XD(kM(X*>E-cK2tH}AQ^FK^?rAp%6z+t+M+{)K+KeRx -GN^N}Q6Z5CzIJI44EL3exe%1;Udb>W?8v_~3K*Zq4Z(^+f8lF^f=QvM?3;6HLeq5%u+9&&)7*jNBm -5&hd4c+b#e3qgouTs76^yonE_jLflrT6p}aM@J=~=@5J^@CXRB;yaXrv49Big+Ng#?{oS{Ra@C?NPuR -m<&#FJ7Bz!7B@&{Mim277(bYjVF$)ZAu9WgLP#xsW&hpf@_|dul@rJ~>H**IB(+pM|Jo7zY5UQ6V^1C -kJS9D7iQ_i+3l4CXC=XBZdcdaA6JMZ+(gwMz{p`1haVeXc>A1h5bVZJOky{HBH4wUJtjmmW2L!;R -bGCm~Po?g~1A-WS$rY<~qtiM#oj3)2TBbQK{R6Pb?hxHUC6ZpXsZ4ciSUce|R~zQ^$R;ZY=uWmD)$8? -)i~1(=P3AZV7ZO)T%&%Iqd8QbLJo4TrCV5N|HEgf#>0BVXJBvsNl6e=K6}OTjSP1^XnaSB8>HJM4BzRR4 -f$<=5Byc4Cr0;*CKc_k+}7QIUGnBwi=dre2dCacQE#z{fY^ay8vFx8_a~F+&cGI-d&|eJ1@&eT{-R8= -UEr=DwaZxiWuiyj@!ayQUqYrYkB|_>l_qHa)A4XgxPRm+fDcUu-TJOif}RCi;HNFX&s9U8xi1`E;)x# -hn~UY4%Vj$JML`1CB_zI<2E(ti3a1c}G8?JZSa8PZ#aK$g-2Dv{Dff9&&1gH^m)y>Y!E7LEoHgby -rOuVQ<_4-{)370-9Uv-*m-VCn^YsV#m{n%*@W6zhY_=QgWv+MW#@mK^-9c$W7K2&#)}MK5*Twv{Xcbb -pfI;J)kJ$W*4wyJzQ2L`w^Yg{kGB{6plk6XaQ@*Yeql*_^Rew+EZ}dYU4W0g%M-R2C;NKm68dw7uz&#UFwP$Fh+%W`IsiW(BV{;t57(tc=iJ(xg`Zy9BbJJuXS_ALkI2jfP{1=VfFq -cBb|9<5eFEO2Uxh=<||qY#+$1>fvT)Lux45gv}oaX92(C4d9p*30HNeK9JRLeS5W4L2h`OGK*_{m7BN -vzOclX$z3J_W*vaLp?RjbR4ZO@pdup+=RMpaB> -cvQ5A-d)x!~1_+|#%)Zj{}`F4YzxQ+c1pW4G;HAaCeUz7U7A)b^n8n2+M4Kol7}wPSVqNV~x5e6xN`y -Abs#U&ZzaoDywe!{q$hHM|jZwY6v#zmyL*Cz;KBOMiRvXU_$Gn`-X%Cy9nPuPyK;M`Pb0S-5fs{3_<4 -VN>mBuy?;@uwM1C%NBi%S7%{D%ajk2@v_LG0^LBQt4niiF -;&9kxFiKBfA=t8E&!YGLt&vk(4ZJ%>>DWdUBP8Wz-Jn2vJQ;vrY&(K4swAs(Mro?LE26XS6?4uAsD5k -@^>AGxR0?d;T9((vcQb&HvEe{M|Z4h14}k9I1&8Po4qOYTjCuoKxlJg!57yd+>UyDF03w`y0CUg2wRsy7N`iP_bod>d#w|W%x)~ -AvLquNe;ve+MFs#I}v;lMWs$$hKA>^e@>PdZgUv=@EvBZ04k_d7AgK6o~MlYK0A=2U(6^)I!&d{KSer -I6Qsj#`4%wc4er?mzd7{%srtd;p<;6$b$yK>e11ZiTofVav6Jnvk>HOg_FQ4Y -jt|KS)x-v73!Wr_*1Zyk;3Z!C7WaV(@iA702$+(Y$nF(m -}^5$f;vsD2j#)^?n~*>HoERf$+rbEJb;z9YjhdJ#1}tj9ugTNiiM -OOcHmYeT_-(lvq2#gY9}t#L_OCJ1Ys`gH_+`FI9=#qk{UKeD!}zS1+t -T_A({zqBlB(&K$l(aO&tkMw7l31yuWi__XG$p(ly>h?%<0;o8^tpx;^*n~xW0yCM3X|nMrC!pG096{S -lSo@8+s7H1rLy?^5Ad-8-&rg!=rIJcA8=yH@jlobVyc}LOSHIbhEe96YE!YC!pB0s)cRNJp!1?+~6FY -40s?*%{iiUa2@%gR8P+s5<2@%pn;WYR&`CuoF0xj%WNN*3%A6N@k#d#Ko4Ys`Ib+jSO|0L+$2lR6N9Z -*x=I(dC3a_lYK~6~llW8B#I>GH%JUJ?ykafxtpl(PVjE{&J4>8(i99%jty+&PMFukj;v+mVyr@0 -Gm7Koi2IYHp%V5&oTJVE>fK+`P$eYnc~pUhGHrxyPcJmr4QNl_R|!YE9k8y+Qb7^BEfiFIINPujr9UV -a0Ey_tMNf<*M@ea81>6!mT<-x>Xhf8d|D#AD=Jn>5|0XLiCuVt*a}W?)XiJ^KW`$pm+rg77`*6Ygm%V -gs}BuUg`Rol<85o+0#=#UOr*SVh=AQAi>C-u*G!d-ylt9KU5xp~kpGa9+6n9T)XSHmC9IyL`3wA%Ru$T7mJ;^ -0W{Id}HeaB2&iwiRLTK)(jQs)4wI86lVSh=*{l3)s=~^CWWAqPg+=SrlM -`@u@g$oP>m#uRm<*Xu^u|<5Om0RdRAb~oviDu(E!uRG_Ht62MLXMQ|kbKCWkyR&QvM%48An^oq_zM#x -odMcsrGm)nqRYEWYke4$>HaSUJymo?bs95LJ$s7ca%r2D?sSK`hw{M^NOt4R*R4l%oy)Xwc@PIoDAKz -GNQNCZL^-#BNzd%%zGm8t)`RlxiCcK2FbpS)W-<4~yUC^@@yoIqLFL8PfnZ4&P*cFGlg?HUyrpPBIj2ULZ -+pPF~VpQdoz?1hn+BF@U+fnS6HNZ@(MvbkVh8oSpVTm>W} -0j}(KRy>O(FIeq(NKY%Q+!T{7gI2QY?ZbAxE8uj>uKY9cM6Qt|rQYtl!tvJ)|G5P)%100TJGCd%RQ^} -g)?X)IKbIc=!!YU18SmY@n-A^U{=NSv-~Deb^x>y}caiTsI7t#1j)E|?Gv*->2%?{M50m&_quHG!xHs ->l(B6p~y#GgEN=wn6yx9rq_W82U6HCNDf^hHT0pG4X3HHVwg4nZE(B@9TH=|v!7ns8M9|5&@6rt4K=d -+o)Ur^&=dovLp?0G6U*(D{yWUoslZ{hU_+Cc^Ro}k;sB=NmiMI`(7T~adM+ljFBEnXSyC8wRwDBZ_+q -4&rePW@$*5VA8Fk?yy|Qu2C*;1bYkcmFi8l%9TS5_*rnmbCh^B_7-zG6Uw%xBuKv`JbKCt$KpqowA#Ml;`ayf2-$|+@iANhYx -LS=%On1BdV= --8ABtXK~(cfOBA6dRb6@R$6m5h2B>S@k&eDP0^zCG=Nb*$DmVoeX5%mM=sc;ruM60pLn>&2sn2i*{4s -P?NKmm{c^-793ZklASPal6+c;pRL0bv8R*mwU=c742Dfx -EXOQq6YYig-12x0F>^gsW~L(mesk~Y>q()b?_9*$@3^jAh;s`P>2{wq2`2^bDXo|o-;10zz-88{;BoK -n%9P -IVXsp=FPEnzpwLwjZ*IFr$25*WNY}+B#&sP_(nHFzt_fk(hZV>c9AsirIUi7);nb6k{FYP2}+vlXI@M -B8aQhk^50eiggK4n6+R*Wo-shtq^ -F5kJ6mGK5BD=v4vg+i=^;wXB@32~8PJ!?500#JN1e0 -;J#AHUrHiX=Pk(guiEfpLf>Mo0XhT1z+XzGIu2ZTOtH?xl=SHF7sgHmdx^CMz33S(OE=3q17J*}KNAQ -LWTB0vn{8YKjqndg@lgb#sWFqna(h_lLKM7V=*r$w2cuCu^*cG6t!;Puq(BDlsxbIAtanzi|h1=n6V@ -|k~MVwH!Y$UO`xT^gww2gljJVQ~4REkU4%YJxQRL};{q!Fb|s9DxUBpuSvMR8ht`mCwFs5vTrc;dpet -1@~7qtjTnMN{cCohkZg?-k2mQUt*(tB)tv-(L|Rr5=UcqdgO&eKMv%2BBwO#@j|*j;n4&GY&i3Sr(X| -bUeS-urQ2z|d4J|fl|2yP%K@2|Qe9j`nv3g_9WJ`l$K~K+<-y^vNEuF}6zYn2h-~nPN3X`MUvUDuv{Fm6_6X`K -g;-qkSdbT^ZZ_c!Ff<8d3v%mN{kQwGokTAbPi|6yqMp(kqs60vcr=TK?$-8T<6sG>6hwXR#v6r>HJTV -kQLq?93C5g7|AbGv&=^amUS&Sa`tqaY}*qb}Po(Zcft+Za_K1gp?iQj$uj5Dqt>rUfc9;K0Skulc}f& -IPy9Ix=8Lc(WIH*04aiJrt%1RrL4Qib_|1gGVwPmlfMPVb``|`2sHfFLVpVyZj1Z?4N(dsV1$Gam?B^ -ZN8!(tJIPKBkf3`Nk4WDwKIvZO+aTUfW%6zpf{49xhXns1f1&7w?C6V#_BCMiEux6NB_qN&VM4g0G78 -)Kyc77{W|Zt*-5|VSzh6K@nrleUW_Y;@Qk*H)#hTYYFaV@&{PBqe9@{frUFN1pXaZxT8Yg6 -IjUWp!yRm%$CcEUVnszU$z1N4lI0+X#YE~a7Tr}Z^6Pn1+{+8A_IJ*k>Q-_;heaxP~oN`+szLsRUzN6 -)Pk2eqOyusM5c+C_ZnlEQLL(>SA0(b2p^R$QP$vSt=dr8-`f5_^20S)dGiKxL=hnap#&EpRzZe(5liM -D=ez3=>Ueyx*9>5jnmIf#B8Xo~b-RT>@)s*c?x{1j+8l_Y?EU$yx{Jt3NqPC`9R_}$IQqGwlZ^r&t*7 -RqTUME!&BMXHgOQ%&D)|1O0e@~Z{*|EOvB9Cc(Fv#PEo9x~0P+Wuw19iOj##?r!NLnhuSSy26ca(5ut -Rxaum(HnV;q$P_sFDKBwjdskY@QhlHrYU*zSG+G8$YlHz)^OBf8jC%K1KY6?8zKw8#qi2sTR>R>u@`y -XtQnXU_TSh}(dF+eH5x%l&Mqe{ZSp%{30ABn%TMg(4WdJs{YpTztu!tQUdyoHZ2eZ55lT#oop=eH-d6 -oQA&0>BgJQ{nT77B0e}eaa_z_l<;a8XY*@WB&L(RkX+U$1q{&ODMu~dC0e*4HnJGSrTd9-r+*W}*b4k?-fwP$~K)AeoS6=1XZy4x;k&p$WJW^ -um+=39_GUp_h*S!|E?ryER-o7r+d$YS;;M&O?UEl9q9`N5?-|t)=@T)jh^rty4*}l3TVmoy4Zwpufck0CSsu4rqLe)e&Y}(CFaNzhk04 -M8!magj64N6wQ|R1>Cu;8(Gmb?C?er{PG7N36r9jD3ZguyaZKiW+TNGf{nGaAb-iABOY`SLyF#!l=uZ -wsl)jI73J}fod7lRT2|araKVGv7!hqe4bCK@Qo$sV32KQTwXPQGiVv>q!zP|d!d|>c%$(T0-2>kSsht -ajlM&-qwa$9MqVt67atSvC)5L}k)g}j4S@Dhz#oeT283)E)z8@0xFTKBm5e@$iyiHjEK6Y -5POvxtHf9ha0qLZzc^UM?b&7y%qJGt#_=D2U*XO}F->9;n3h?3R8@|J>yf|WjStFwNbi6~0XZG`EB)5<&ejG+^*XF9SjJ~#5{nXFv}xH4F7bYHAgkKjtHahZ&|%pmj{|ePZ;p -P54ogg^GB&<;v;KJWDx3!KXkWanI?%e2jQuIJrGy6ebfR_qx_^#+p<&26QCyCaTw!rr2Z0U7);DZ%Ni -ptTDq4CQ{k<9Ry5@(`?p@U$d(6WPPIPT)Wutxi}y*-5IsQ8OIl9H&vdDti=vv!+BvlcvL>i5DOAOeRd -WQ(k<9Mt&~01*0EoRf;P+092|n@Z@4hTkA^+`9ro1Ug=v2$!2eg*`n%Bar!XIZb~?lD{l*Cl#V`yevC -nWLM(rpOhTr@v$a}yV+M#0v?m_YPXGrbUn+@uv8z=-n#f@mR6SZK_9$v@L-tPgwp(BLufG)!K)(hm_D -6)4@K<~C?d|w;?RS(B@J^{Q}baq5HU@c5ukR|~%@8w#`C=?9Re1Rba_2&$M -cZ_+6y|M+&2(aZG6?XKvLRMa=DmK}b2gU(}qp8&UE0%n2_4 -)?z@%I1LQ=;f<6UvIJCGW{^b)bjuZcqBYUOrgbn%g!mhA$OHD6IeM4+H<1z2je5;2T@V=g;_&C>tUO9LFJoA`lcssa;`cGs++WLO4WW2=S?AUAmjpEhtXVJ>=f)^E( -r}GswP$=XTMdH-qe3_U&`cI&dH2z~2*^;oI^B&_3k>z5C*z_Yq=jPvw%(JL!tNHSV^+ANrM9j`pPOcH -A_1r-H#fuHOvxK7q3Nh%d$++^swkf917>sXdzzy>k)Uscg?d-`pNMvDjN3IEdfLf%JC@^FN6KYeo_fG -^(yM>Qtr{9u4PDEVJq!)>|ho+tBxyaGhOL?}M7vhN~w0r%Onnb)UWX5Cx{^FKn~=0{pPCWK`9pXEFOq^|i!eC{V@CU97;3zcFI(gxHG7n3s~XwoBkXSjWy -kT*9{VV;{Zzyzigoao{iYh-6#D#p~IBHUqDA#Pu3o*sA~<`Y>d@Apy%YhSxKGnz+q)Eap8#j@@}!g+a ->uB@ARR3SP&>(riP|39gR?s289%oh++$mbe;nwyOxIp1Kw^rHDGatIcLgQVxsQS)=Yq!1{sjSAJz;YDXH&!Tw^p|o -^5krisUx;e9l=0LQ^?W3GcFIKtaepWpO{f7J7zxhf-$EXR;5*To|c!MC1wr=dWDIWr(vk8ozTsdtb#z -z~#wHH`(o{vM|=CGt*|95lW(d8z(ZawE$oH+xLL$7rQ1d)S86q*r51_>d;um3=Hxovm(xci*D*8NtyZ -5M(Usx0kyKWT3$J7hX5;dxB0_G#O|{Ijb`ec;fB#vNOs_RnE3;rJ=@*HZ5T;BlQf>r#(=7hf-eJzt~n -P%5wZ2v$Z!-bPeR#w8f6XK;3l8*`0i1Fx>BwZ*#aYmHMtzh!|S>Xdq1UO$w_Ki7Z#OMf2lr4;^y^TQZ -1ep$_@q8qaUo>zZ9u!luVoR0rlK-M0Ce{=FLy^C(kgX0AFlyiqYbD6`z1S-)J-y7E1}C+9R11Bd#fX<&W_7G7#!&k{*g4+2x_09? -j~4!}*qXX?8rX39df~7{KvqaI~3MuZ^i2<{+nhDP@m&jx}wJ~?+WD=dwW(ikSS;3XNrdo_E9Yvl9mPBmy1WK6t2Drm4i$i^XYtIgagl`)C|*SxZ^~RZ)`fftuzTHUR~CZ -A$R9O7MjCTz>|i3ZH3~*PGqZk{6?xn%MPnrbXbYRwmKM06g#K=+1Ripmmmm5AaR9a81gy-b3kG=I_%n -Q?{MszkJzF)pYqmk6+|=c4Yp~$7>tE`f{?+jcxKJm_4>h_ZZUTCyMsJw&(|K`^|#i(>Dx*C=A7L0)Zi -v!Z8ZQh+U%t+796uO29aRmR+A|2 -Qs*GB0c>~4fDddIbUZHL%P@f#D|3*gxv5N|J`zoKw^ZzZ$`#c;fLVj|dHJ>SUNUWSL>VRgEfe3ED%<0 -Z1ab_2g_KgjNyvJ=W(yaV42BqMZJ?%1Mi9N#6`VEPX#`E6t!?gjJ|{Gf1W+3tN_B|~0)GFC)Ax&k7Iz -nGh_&pi?az6(WpoBy){v+*IxgKFpMKI_yu7F$H~LG`ZAc6?VgvlH8(ele7krSX -?BjxO3)<{gW;T6uNRiG9%b&mMqZ+%30AEd}bKbb9^+g}G{5a-r$Ba-Hp?Bd0_*QwT4Eei+fO?#gi|rY -;jd&YI$dk-`@WT4E9d|986(iIefvflt+k4}63xH$9t91J|DYp+p7y9FZZwr3!i}1C8p71;0)umuMGJ* -6ppTRNbKv1#ck>O-MxG_h^tk07koZ`HokdsIZSX%(8doP81^6)q(aSLraEM~WGK^j(&ITCL{wi7>e4gC$$9Y5G9 -kZT;UnR?b$bZ{%>^{sB-}dayd}eBqk`C|)7RVLf-@Bqt0n0KXXUs19Wnt#09FNY23^QHN@}vw&zs0d0 -fRkFgFpFO5rz8!gD4;Kj+gqlytryS4a@*e5O3dnh11qY}VnKtOVAXAzgWcK7UwC1i2{r7`o$NmCq);>2TcHON`|Mk^EC4Ib#I350_Y24 -2d@!!7cTNwQ36+ec)1Wu7KiPPI}1P*P#!5f&;Bu-K=gb;gH5~4qie<@^#oiy8n-vrq~W=}t6d)0UgEo -pM^|ADa`vPk3)>hp5;?u<_FdIKr3ue8O`8~S4Lo+HHY_jS>Gehu0YF?kzN?J+X?M@s!F{te%w9u -2A)xs_Ottxcm^GGno~w=g|NR!U2p7@XQj{Fq5cHQT)$cf{kkG^Eq`-c*|TnYz@)p8&GN -%yg%ZXFx4&p>@7D+dHFH+{c;TWF7}oFlcxc`f1KYv&1cj9z|Z6VU#I_(<5|_D(aaNkAW;o;Pmk2=A%^ -NQgaa?o!gk6`zd{|z4zCU&=eyRYmkygX(0(C9)|xqs%wX(a&=JI``>B7is&cufclZ9nt5nr=&XYq^|s7%Ve`QTSBksxS?iyB#nz=Ra_p0h-!T1Pb3sZ1t6NS^tZ`{qs3Z9}` -Bv*cFmPf?F4Z%Uo8pb^-LKDxt;}bVgG$~D%!*8DXuGNkoq%kK>N`_{^?0K~#d63_Ckk%x>RYp5(p}fu -i{F}K>oxYNuITPjBA2PNPm?w?6Z4FLR~Aac>J1MzKWCV8b9BUp7QWZX*=|B=dD_jY*mr2Ve8J+rqQQ_ -m%4pZds#=^n47hd=DmYXucq!==o>8z3C2(A`;f&+8mqIT)dcilzBIZCHF-&{L7on*A2Slv*${l)OWt& -RhD7E?$YRh1__5LvJ$ho)Z!VgE5#3A$1BTHGLh;qw%z0VF_Ih;%zt3|2B~Vy_xHXtH(3sACrd^9dFdxWI=%U9)?%0Rz3On0==H5JH|7AuszEd6^-}f>;X;DLno~leCPxgVYuMr -Jmg1v4~+RH0QLC?DeJ!uCUyJoc$(0j3*k{SKF9ZF2;RD==(N85vFCdt --%&@l0>$bd5yS#PT`C`|ZdOyPEWs$}JbxSqoXd#y(s+*$gQFS~RNbq9GjD}9sMGZ}}*UweY`0R>73FQ -*S*)Fn|O{ZA}rkpVlVaO~TP95AMdwpFd;tE_&K^9-o7l{t9Z0r!YPbO}@j4(X=VQJPFRAIc9(;$Wjy( -U~QFYAsaNKQA_@iAU4;I;_OoF74o!X>hwI%&Ct2V!pO1cG^ZeaYNh9Ihg9k5|g?7v~n}eGT=L->Q(Aa -43*aPyFClL{(qz)edLj5N_QMq9d@33U&SQR= -Ii%9W6uUt)B?Z>?#hwN)my)`4k1b-z-W_90VT1k0*_Hd|aJ>P1BF_+F1~P7h%(i1Z&4W=4sIubih+K) -gF$$fH3W~r7omoQ3+TTw~8Zxned^|5N9RO|Dzop0dLWpIShgHj7@AX{JNvqZzjwQwzygC~MW94|dn^6 -erwtW_-I%~(3OO^!?2!ydtY}W^%n`AWPk449{lg_1TZ%^YbKR=5x1vgOFNb+#CSh*euwT8NAxD4cl2J -ACUoy>(7IhJ>xzB4|~&|p!%kyAR}oN=LAW9)<_i&_^am%lHA3o#FSEP~r=B+~#K(Nmxtq;ovtu(@byB -j$~Nki-B=JW0FPoFKq`b^H5`gntqm@ni?#SE7*LD!ib|tEq+zSzVMdCd ->k5YSZn#F%$zpCf%`Tt~Z1>A4?R-q!uot7c*5;KbLQ7-h>rNYv;n;o^=e{SS#Hy6hDS^a(VKYR}tzHh -vRoEu}?NY^fE4*h4uslKoH!V9|69YR4{qV@lVILZHC5vR{(lYT**coTgg4G6A-z;9d6bPXe+MMdY5(3 -F^X;lo*-v8qt*1#qwa*=Es{2W-^2x!ta<@C32$VIH)kxw&HkJ{fl6)hylL=!3+jtt1s~}aO|&L;z)r=2qAWDv>VQE)+dY+vKCnK`j=<%`j5+30r9Tn}e=9)H1icKXcL#&wqkCd#e%cyu+s!E7r=d8L;6?eg~F0*j4NrZ< -DYC@^995zf1=Cuja6=9IZ5r{6A5jc(hEu*cRhXw7#gE}$_Q(}}{s7m;BUi&Up4kPSR$t@bgiqxy_HaX -Wj?MzR(>1-Hi)RPCIC)PuxL=~>^kszdUjCJ>1os%HfUowiP>*~tYEmNQCBP5^4As*J)QN#xUs{j?OUB -cf7eC~=E<8A#E*XJQF%yqCI*I=9n17V5o_FO&10~^~;b3|z6`MQjL*4;~B#w}ld(03cfSUHkQ{duUG% -6j_VGojDiO;TQBs-#AB0;5H}LyuXoOpm;RNcx1m!2()G4Mh_5#(J!mc&J0q@DzBxEoGz?qC`rM?7V=O -57K7i7=+y?PJtd=(KE2Ibw>!OR_=a_$wYk4Ry@I{*lg=(9^~SsS@5pX65mnbaHP2S701C)A24?Q_@nE1qEuAdJTEV&$a2ZQ6&IB4 -_?oo)vfJVJ<3nq;Xj8gFJZgCaOBUbEDxhj}^Bxl3D(9m-hlMr8q-+pZM6*Q1I^87D78~+8JB4&)Sjjp74+2{jR@D*YkUGz*YQ_I3 -Y_PFBVgrDc(yELvsF-u9tpJ*Z*VEw6hf8*EB`{Eos`n2L2n;v_B2-_ehgIB_(raZ}Hckfy}Zu_i;O)8 -9=@n1;d;(XEh~#Y1A%o(uIn1|0pU%9VRL?3UdzY3OOH?T38}b&EWe<-R|dF-S`AZbc@T(WzLGj;eHVl -QMLs3D0orvx+^V6R*Y2Ib3@>Q?OW$&hW*8|ROEQXh_GZ32H<%O!ML%78CDixMl<;t-@7qFA8+4bu9~P=H= -(NITbOFf3Zd$*N86C`yxPF`gS6_wVSyWDO$E7aJ59gx`nC{(p}LD2|J?#;X~`MEv$u6Opp6xTh|#YW69`#jbuu6?#}4YG77hmK5CoTl -lgW$A})uiB^pJ$wN*Hd>XtvrJR%Uukh7w@KrG-dv^r|0yy28Pz66HoYa+=F=k+h?q$G?B6;oPu=lzaR9Eb3RGC0H{gcME01+_UIms|QuP1eKk_c?# -!o6So0{bW93ogfebTf#^7l1MU$8C!@7X1WTzdQE>s{VT34~T_eBuNwW#e471ScsRf=Gf -uVTAnD(1d!ceP?gxf_)h~jsGB!eNuqV-o>G}d%K>^Gx?WH)$V4?&_8FYc&9vm7*6fenzHBP{ -TH3W^DM5+^<$vmSnraJtOR`YIasUwWvYPxCMmuTmwxSDWxupIe32CYc1-7?8Tetiv@%TH`a06~o^8mz -sHwk5GV;erXRD9Cf7^2ncJEREzP2ey`q!@9e=`0#r@;e=(DkL<+_uAx71A6uCTp(Ey;`P1l>%3^OzOp -l>>$qW(yNrv3X7bmAd0I&<8*C7164ELx(O+=;qDAXWR?8IOS0-h5413+9zjZ})5%o%xM3lKf*@@0Ppu -svR$)YkWo-aYy1NtCd6eE5TNF$xrgRBSc|I}0YCW#*F$`;MQCzjY8O&Lm!Q8X1$jX4v6cN#b1$f=JaALnJzX8PEBe~vCqcAA$gfCw-5RT|69OpYVjx>?0F$Z5rYSaO#k7pDbs -kK!oK9Djxg^yf*wV3P-27Xf0DL-y;DPR6;~8eA6R(=r|HK-L{Tn2gOs$Mn#ZfQCMv -#`C_tt5F2+$@&5pr)7kG|e7kLgN1#UlX08XupB_YpK5@;D7Plvn -{S1HVHQE{}~S}%RD*gjD@6q_zmIUGJ}chM{gX^DmLnbiP%Zw)l1kw%6Xet;tIW};=s27D18+}G%KL!V -yb*3XSQZd{~Q8Q4<-hO9y>=oV?X8y>U}{p529w+To{td|`Nd@RumD^Fwt8b^DO+r)8S7%K?MUAByFA| -7^&f#l1_G!HmE!)K~!(S=`EL`8{Fd>&>#=$<#(E9&#mYRo0Z$g@G{?nx;;hM9WS8&lhD<_ndTz(P^&H -NaqjOfC!0U(eo%3tH4oH_+9?)NSlk^nysH{H@5O>A=c!JFh -wSuL9#^Ro1W7&$zLS9VNuvpmTF=-o)`2+qq*RahnHLfz9wE>uQ3ST&gU4*gvj^V?F@j_8A20(xZ4+iF -BVAH~9n3lJ3I2H)JGHI8$k$}-D^*0Lz!Fq#EPn%!_P=yH1=X^}JS!a*Z*gf>#j;I@JFaC8A&7F5A0f~ -UNlAm$%(qT~Eb+ayi?<%MF6!OCun*L{5Dv?w=WJlmtA`0dlOt8{FN?k8u_J|l#^<5D= -?5ALxmvKRlhkPpHBac$3`8uwY`7Kn3TQ0`zvFTgg0XnfK;;TXxlNa9P0 -=E+<$A&{1RP#jq}`TV@m6fao+81#`f=Odw=U`fbSpYcTe+AnxcB{9Cyb_-Dm~7{p4_7X!~{8g6YH|I& -jo6MtTf|-)-=My@Wv-RtCO{b6tpVED9rZ5ZfbbEDv%FuOapbj#JYvHk%HDiuW?4<;bazWLbOJz;F^zh -&l__3%p+u4oXn`F0E6zvAE;u98>ujIYKOraIfSp81#az7Ue;>&p0?vgI0xImfJLE61q@P<;Vc6S^K0QB!q9W~GCoX-G-HeC=@w2mtH$B -TwmX$*i{A^T?WkL-f|_O=&8z@oXuIW9S|?DVINV;9l&1P;WH0wbPc=L3r -{LUgvUO0-o+O&yh=Q6qb~G%yI&16$*KoR^Jdn(DBaxAr;}&pta^JHDz!~}17Bou_ -T%SI3na{V&0_mM}Q$r&d02r)aDy^vO^+dG|{kR@LnR1CbbbH&FF84VP4QQ~hP#`}{vV)T>v0SfQ7bZ( -^?aTw&kF~uY8iA3^nZUOwiO*simGF?gQmLUlP|P}itM>u_sdwC$rl`;WYHH>L|J)n+&}c?PK60gm*I|w*_4<_9cKFscx-$<=8svTV?Fd9NPH=wT0$%iBZo?`&6fz~j{2e!(V^q(13RD7e7#E5N -qO9wRmOps81As&%BgZ}^b17|edQya=mjhY4i3TfA$l2p~ -hDuV_d^=;5_2K#ADwp|Gxy -0wk?MzM>eTwU$@c(MxiWE=Txz;c{l6gHiZaA;Wj45R&{n50( -4@C40>f#&*)Q+ugo%K^wz@;Jto`K<^|{y3aaO_J?d{2PW|?*Z>^h4*OCAH;7JFhqYh*E@bwPO}*O(Ti9+duQF~z$+WYP -T7xt8Ml6`r~!WYqa=n^%k%M_V*a88!MRo!`Y;}$Rv)j&SZ6!&s|~F4CGlM_kjWn*qtqvpf9IH1qdZ=9 -HvUK%oxduGwNZ2YrhxG=k^_86OdYq2cMrVe?Sc36F6ho`7wre~X^=T;FK4B8 -igdaX3$91P|^3C9PWz1mXb{n7DsoWaOqQhK(Z@IM(@d^abzZ>fQtvem?U7M95@^vlN%}g|BpYIk|Q9S -BKp9Is6V&0^D4?{1Ax|HV@3{t#Y<|IQZ5fA7bfjtz?@UO+S^^Oig-K^Pkxliz5yKVS@fsc@f(ZGl#=M6 -BIR*^?B@~+$7y6B|3yg-rVcQ1Nkq`%f6xfW)YVAx5-DS`wD40IY7dSNeCo+EcdaCagDXJs$42&>D15?@=#45v?%^2@8c$A9tf<68sXa32#z_*i+=PxH -SXIkfn$vg+g?JhTlXWo*t95;yDr%+%w*xMq9E|IJ$Ub`2dp~?1NJO+QF&UkI*S8(y5w`QT}t=h^yzm% -e=G>%}cZq0<1UX51HQh#tY;}|& -to9Z@Z(QP}4|+X!sv<2c)1QpgxG6V@03cS>K})!kcZ#0iEk1^+HFXy8E*U~4Pq$~Qtiob~EOMz+MK-o -ziy^RSqq*Raw=oOU3=-pGg_joCxWRJe`5MI{I|B2$^$_|Vc0{j2^Ci9X7kM}s7sL=tZ@!vcgy~gM038 -w=q9Vm0aedHkp2v%EEpKZ3Iy!gy*d&x^1)$Hpki4k0B^OZXekr8ArPo0rz3Eg70(!?L=Rr3u5b5z+D?ijG1EwPw)^VtjBA -?Z9<08k^T}$$^by+TjJ?-rB1qm2rC`e0`p@O3-12iP&{Gpkl@MFQ{3cCb&f%5mB6BL}QM9qqx=tpcS* -l$&*JDnt3vk^oT92FyAiQCuvS*hJZyEpX_w-mZ|nmV1ZPi8aQ?OC}FkKpueB|OPimxdBlCBG1bQ;e}w -;X(l~Fsy1Ny7gGSL5&otR-=+~=Gs{9jw{a;w_gUo)i)DL_X#c33#2!fy}6s9*iys=^k`&9auj`t?|eM -p?#({*vQcbbLd-ds<=^>rd*&l@K1p0Dt88$K%B8{KxP^mm(o81EUm_^q=>;yarR-{yYVJE0e6yB^&35 -|#cz#lIl1``N@U_70(Y=UPbbt#i8oQL;Cg;P}o@w|i_4AHP}lcKht@M!lU3y*cl;!rm$O)}`Bsa7^vL -lDE7NLH>@w@^1;ZcKIN%s-9h{;5HAwiTcRr>A?198$QMPPFRPVb@l4QU)6b7&32Bp&gmab81dDG;j5T -0fz7(W)i=7Rp@#@b`s+o%IU87q7i%9j|HgK=9mn}|!5`#)BtZYlWKEuVOR{aG_0P)d`r|QOjDI4swF& -5!J{`Xr`yHpgj=Z-*(ak+R72S3x`D<17IM20n@v2Z#HhyZ=0g{gqGQWT;QrGdq>KjqtcehHnrb+xZWN -!Sq;0O1%nWub==k15j?iE|$(~|A^U9x50CEN3nsi2W0{7@x(ID#G9f!HCPz%(7j^9p2$frXl5XsrOl_ -;8ymsDEkKE|4FneC>V1d#uT0BU#tSp@Oek?^R-V)gd*3d_(d~fa*kO#;@kXsyw%PfG3HCV;y;^#Naih -PTe1-b{}B=kX`Qa>F`|VBU$UXsppX+L(CmWNb_}KjzeT3S51Chou&zfS9&@}%#wVj)CHv}n*q5&8|io~0MwZ6C69N|W+4!QX8tPkh{Q!!tX9rM* -4@God+5HrT`f%QaTT;Fxz9QfVH;X}EOlhj5tfjF+!QG1n0Kz)r`JKi}`i -15?^_tP=?!8iCAAwMaJnEqg>q`)pa+g}uGh`*J|*CA|m9$)oO|{wNMkgIZ+!$ez?uCJsc)1QI}G&$7Z -;<{4iHt~_?@ZOK+rFO7g@OMg8Y=*Vgqm!FTSKqM7brbX^j5c@*f&c8(qV4cS^cqj80jxLWnruvXryqB -$AUA{j!BCDOwIG2=TNTg7oLtcL^(e1`TenD5)n`fXf2x4VHCab!Cy#4J8qu*^b=>NhN_}?!1(>D0?az -AW^6iHDKhCwg{<0K4G1dZV^PJFf%Zd=K=_mRk34kddlrKJ0ofxmZ+l-kQ&5w#Eg6XYM*=W3>3x(~B(m -pI9g_of=Z+lSD-XK~w?wtW?+-hJ5A?iss}#1VV9V*E?Z6=L7`(sxG_MD1JNE~lUDlX+3P=WkGKujj$< -RMYNolI#L6Xu7vaqHn=~y@{K8?~=)$tisI(vDvAB -MYo~9BW0Dw#R%s`5%oi*5-seZ+vjFF2FO%5b -!_pi#k@U2t%-$Diqux8HwMv-i6K@0d+`eQ`Bvo?9LOmB_G&f}`@Qmn;@|%sG$cmhwL -jC%EtVzud*jP^LLtA?FP`O_@7_ch54d}O(I-RD2GK?jFxyysVe(X$Oz-}zQ|4u^O~;#*zZ9B+W_y!}4b?+W~{){_*7 -BoMp1HL+3O_c3uxPF1A)CT`K$_ys%g%Z&j_KICsH4`E&)OKPp%@d|q2u1K7j$D*Y1cJFt&d%(jIW|`+cjuMG+1CDTthMb|DtJ*uAq3g!Bma-S7#b>;(1l?TXVHT%A2zc?K(i`? -u4F~GTU{WM-sLYG)sMlleMd*C&55&^}wHKQ*;Lr-@%Ol~gG}Ia8E3YUbzNsXTTQ!dvtRQ^p%&P!C-_5O++jt>GAUag1kbzjf64zj^q=op|8RwW%kH@!*gZ}m -G)8T-p1=?s+V(C8f-xNWR8etb#5lUQnQi2EBglJMl-$+-Giq1Vir)JMOupfNADjH#t@@pl+8gNJ9#`8 -k+md9m=c>|dr_{TlK(_zdtE>2~w!NpKwvB}N#oiUYr=xbU?P$LMrrw2EYA@ODDqzXpo0q+P2*};o@I7 -Uk>;VDsX7?ff9@Km%)3%ehtDtn>)}UnX=!?+bvU_#kyP|J1PHKvZ$gK{sW4pxnzq0%AXLi3&6a71S{B -3Y(qsQ8J^jL`+eFip=Nk7D}1?1a?w_6STymzhtXz%*DhWy{{U4JTVZ+lnrZSS&Ng9m=fz47`loCCi(3 -7n8R2ys%$nS_Yq0?<`Vq-Aj(TxG7EhJs+Nd=Lkm>SMSnuOi>2UKv%mKQ<&v^Wd_f@kx7n5oVU*>sbJU -EGkUP(zfoY7+4h^rx+FaH7%;{bgR{P%Wnj&ztIW+O+3|QYt?7;;gQ4>q$g-b5-bb5lglwK?Zp^(zs>IXA2k0;U3 -;sx|NnLBhUYg7+TrVmSAGJ$zkk&S(EZ|yAB1EHn1uFzUy7nh7^QHWq7Vw+n^p*fCTSESDH26V7@-h|` -V{|Qc&FPN*^QF777w&Hbx`3hm4jyQ)?jL<%kkS+HTyifv7NH<>IB-;5y;!=Z->C>?X`mLNV@w4yq)^? -0syk3()Q&(vWffx|F+-($#&WQT?{DRll2=C)6kv~*^?-5b;bSq_hi&Y*@^hA|4-~li6%QP?lOt#j@%o -T!|$0bGTYNMyZj^Z+y38m$3HUtz(1E`uUSzoHOcTw1@YOehvP;TWB-2sl&?(DPX;dbarmxVWqT*P`73 -JTn~l)pbv@cUHoVWBbp^1+?cl;{5rVh66-)y2q2~(A`>_ytzkZHT1NsSt-me4SpYS~rZ8-R$E{o{zEQ -gF6{Pja!_S-RFKd6h;PZfY%`)Fm^ef^G8{l1%geD2@Mci&#@06%?yzRsRM@ZNZTd&v8un=8`$+}017k -NtJvhZDH((jVI+{;ths?{WdYb{wyTk=@rDb#oqM1K*4%S+~?wXPN33`EA0$P)|Bvnd0C$D(7jzVb)*B -K`?2mOS$qSJ2isFcJ{)ja);B{;aYS3^p1>M6 -65+WOqq+SyJ?B;|k8oag@+C9$8=r-bjaG1o0=F*Vx`2;sn?*X*$SOG(Z<)3l --eNt^mxoU3L!Xjs`Bk9gs>Sf#-QscQlNc~y*di+Y}aPO!(+h0<#4#kkS*iel^J0o=yms}m8Wk9Rl8B)S>W;(@29vDm(e4v=F(5k>-oIJSWnP-0 -+Ep(l-tqj@}Rey0b+Z8IMONtB0U0?>yt8qCz>8TQZ*xOS(Q`qszT>=hzox0yWaHwQ5j4<|b-c5s+Z#kW4GO4DP$0E#L;7NSqv$L<7tI*R=H?) -#IY!1>a~Pzn@ufU79)Tnzg*vf#v=R$*KDhxkpvQA6rpzG*)v2wvSzyJZ8zQ?q}ZfM2#J3z3&1WFy}s` -`ix!d?qi~!icd0ahq|?Ca(6=CNvQsS%pdrPloEsZDRg0CenjG-X@Er0zR)C7PQERjy -9Ic64pqtBa6`=PQi&3@@(E&yEm!dp|D}fzTFd9g$LuEqq>tvzI&T?88tTguM&gkW;k>QIDEc5aJZdc; -fDb4eBuh{D_V3M3IS5VC-9MSz9T1%?dC2Gk+nXe5#PVa&Zpbg=a)~z{s{_qOG2pYf_js?RqQ%Xb_uY2IQF- -aTUlJNl5(&c0VLP{k6^>580+^bvz|FyR8NvLT=;!*dQJ<`L!+%_X|YK%)p%r2BHZEk1sDTc!Jc4 -cm4Z*nhVWpZ?BW@#^DZ*pZWaCt?I%?iRW5QOjh6iYp{6`QjNzJ>P?l8sr(A4!UM@!9PU)Hw|^!+a;4& -J*fnI6iMUH#=R|1fc6W&{P^*7Wo6;LjVuQ6+<$!CoI(F5-T=G$gwu%y=t5y`lNT0ENZnriA+IkzZ`NZ -4O0aGLl)nT3Jv28aFNCP(uk~@6NXDvfd(lpdy;a5ZL&j;)hlrv>;?Njryt=5P)h>@6aWAK2mmD%m`?D -|4^!j<000*T0018V003}la4%nWWo~3|axY_OVRB?;bT40DX>MtBUtcb8d6iR5bJ{Qvz4I$}!XYr@x*? -fflF7kIOyVgu3^vVh0%5O%T3d1@IfcEHe-qYK+t8Vx01y}xU5W*<9_QS}BtI_!SE4 -+j4cDfL+xrUst6jL?O&rBhLmYI2C3NN6R6(mf6!jx;H_^L7p+yE2lXQ_x^$dqTb-Ks>23d|b8pei)Tt -od^r&R~RE)7dQwR4j){waR%yHnQrH;2=sFcxdV+%0AEw;2 -8*M9C%WkX2;0a-6fTMe;o)!;yUnUKp-Z5=G20S=tG{7^e~rFIdCPlvCwZGaZgSMgOg8#vy%b9ETWzF7 -Wm=K2VX|F)9GYN7T_kbC~e=1QYr(J`Kd!6XYFAnxE&>yQ>vI4%DBbNwg)%uK}*<^vDCZ?ptbncHx!t4L#}c!Jc -4cm4Z*nhVXkl_>WppoMX=gQNa%FKYaCw!TU5_P2lBVzTSA^7BEiEMw{vFZ1GZN6yQ(79>qR^=K1{GCF -lbWKE$toJLzkcm`ENXkDVWeFylB|>Gc=(68*=w)8?&o*E`|ba>k3aqMlP|WGeDY6sf4_V6@YCJn_VE4o_BYy$_kVHs_RWjuKi&Ob&E7w}eiQ$E{ORG*e?-IER}YW*`i -sZA=Wp*`Zr}ZCi~sRa&mU>)r(feyKfK-E`{egqInN`S_|3O}uzmFE)%KM4zS*AMy}5h*``ybN$tMr5- -#*@d_j3&My*I!AL%gzWe|i4+Z`)V*um1LU|Ks-l7Cn5sy?xle`t|J(53jHB$5g$#|L*bmZx7+jAFF$;EjL-l0@bdoqUwP^0*Dqr@^!n}Hi$K1`1AW0cdy^vZO`9qKk?d|AO0~@pV5)8ua0b=Jw)@)?jN_i`}j -N0{`=kIn|NibACz}byIQ>6Vy)kM{+9m7YW~Cre;=Lxb$b=7@%ZkOAN=MN{9~jqxBJ&N`$Noq{1OeuKz -|9d+P=HnetvWJ{m-v%qlI|y_ODN#{mYl%Jlj6{;;-Ake)RO|M_)Yq>mTF2G1KwaSifxP{>Puf1Yd43s ->kQA-~JjMj|Tqo>C;dCB|h=d$4@?g^6anl{<9~~zWDU(ueZ;>e7b$Kef81PXHP!)=JSu9ZeM-#^s6tw -{`7-w`}*$g-4rvKzctDKXNtd%CVza0nS6Qo_WAv*H#zjb#`3<24!(N1{qX$ncd^Vb?(V~)w&$@$e){$ -QYYksLy#AZxjgS0eLjSnkf4{wccze73@^~M%6V~@1RySJt$NJue(ZBfMb{i$$^!)X|y^1CHIzIl{{rA -!IXRjU}9&fjgAKtv>t$+C_KD*aa_V-KM%eH;la~_&% -b*`U&BD3J-`3u`Ro50P9`?O^T+7oSC0=rKG6Tzhd;l5asMjb_}_kb`}U_leE8unzx?vS-OHapc>BvAj -`HD;@sY<5|JnI3_1L!e-~Z=r|De}8OT1LaeD~5=$Ka(=>bsX#&zH(x`}NXswxjdGy&u<0=Nd=z0Z(4u -;XdA3H2r(ZG;ja(uCWi_EAL;w{(k$X`hmXZY4q{o$KUwe>-b=F=fn3#-^=^)+wcEr|Dfz6H`1>^g+Kh -w$36d!T~Nn=!KAWN53ggJzIn@L`tj!%KWsmQQ`3QjyLtMjr#CkrKl$_c_Ss**dh*FfpMU$OCtp8%`sC -wpo;~^Ui*KKP6#vU1j992oet7yhr-qxe?i -L&2rxZyHy+EIFZsI}WxSNs->9sgYMgsu16uwedL;*)2OALUrLrSR7|&f9h_-dyKx>!aM(Ia;>c>P?|r -@rHPM8~bgiA6t(H*ILHy*7)Z*qaQ6ESkB2~wuAoi+c<8c#hrni@z++f-G0P8%oZ>Ew-QfpC3-aN<%)J -|jklKQTRgDc*3Mu1;hUo;BPOlwXW@OF$++5`{U+wf$!iREr{^s`nd3We>vG_2#E0gL9`)$?5pUUIdoy -#f7^OD4Q+d`k566BJ!-$#L2gBW24}RlW@vi7}=`~toMoMM&cV~LBBAx!m)aHyZL6hHT_nbHJ@#xIJ9? -n?j_`!-}6er`GeefgxI(O`$xJL2l)@XdO82JbOd89qW5N=|6;~%vhJa}MiCq@wiI$JEoepc2w`mv&Kr -N=zPYn{g9ExlufGv@1z`HJ-|*=~(>D=S{!&oCWlwb1=NCbS&g@$D@8&LAFH_A^==3_KPtjIA>+%xHwc7CsiwxBF>lv2kun>~xH?N0ZS|tUva{jt+ -37T`O?Oo6dnvoPY5@r9u@COP&Gb{?*EaU6NndV)y@`RIlV3HdH-)#fa-SHIhRKhf-z-ZRhZr#J5Rk -lk^UM0RXRx1V+-O@4J1BCmYokwegw -s`)*OcPM`lUqFhJP9AwaF_e7jT-%Jyi5R&T^eqnIxRXMeW%liI~+LoPLs>G#BZa!FN`o@Jo~keW4z3- -D;^7QteCP9PY6?pPM7c*;d%!>r(Mjn5MM{kNH`>dR;*zBv+=`cUF`-AW0vD_bnB=(9~>SJ?gzeL5}66 -&3wN;&p2c1XQ)Wg^!np1#I<}5%x9@xSb^SFx>M^S^BjSyT|KqKM_=AOFNMS&je|6^UCB}mXiYbk;*7W -NgTr#6uF(3gBz7|Vf%lG>u*6ob$mxC3oE-e-pgXOPyQGo($xz5}dJ#a}h$vhCr1DLZ@F^|QPEtYIzg) -C^(hw2S19XMK7UnQI;m*JM+wqg`hHfuGN&wEzBx4k90xTvg*y5=L!wygxo$k|pOuP~R?5 -_URZs3vv;EXK{h9*?t;S0b!mKYax5YDGthbTepHSE*rSTe$M7r!vzJ>%v8mjE5MQ@23`i^l`afD?r7e -GoJbCKSlWqhlc8@8yg*OuEX34O`511D8}=V?bd<45;ZE7=3g#o-lDk4m>_dEQ=8m?qaF}R$~vlud!<` -Ts^@hF)W}xy&SGCkbw6K{11|niiyY4FmU`sb>?ty%P|JjCYLVu6YPtQuSh|?>}_VYM6E6SqlsHc-n}uRM0`#J7_LV -1CV-#&V)gj4e9Y-KlypTq)^E49=_=S6Z0|cAok1?1>*%;F1j=Q;B$Wxo0&to{ss)_8a5|1j=d3%`~zv -j-~Tqa749c&zcH#s%8L^=+a^g4kY#2>_DU*tGMY6+bn$#Rp8ztzgCp_75x68igntOn5ae*U0Q#!K!!-aeXYMV>uvmMTA*SVIT3W{_+1st -V{TTJkeS8EiX;*(wRx27h+{Zj!uLms??~7U8g@)apv-UdcL-xn$Cm_A%A#h2rCV1@j15`FTO*TNCm^5 -SW!D{Ju81n)XPZqgj*wd$0W-0UI*nBr(NFCgzDHwAkmQHL{!hy&Pt3%u_yKNXj2~eaKWi`_naDC1Gp7 -14Lu_jfq0lb;+Dggunj4{&H2DL;M7L70lqNQY)$v^RRnD5T?4<~%dOn*YWz{hl!F$3iQ&mGMEffa(cm -hPAivJso~4UVJYLc%pAemKD;7;Gc#Rwge#4kYL{$?`DL%EX@o*C04LjWG1GX*Vz|hfzK4EK*q3Z9#X) -cH&Y^cw}BXFQg@hG*- -aG|zX9gT)!#w>7QKvQlF$wN0dVP69?uy84$F1mC!<}4ix0=WHE9lVo-z#r$(MwQRr(7>dir!9eDDM4O -W;Z93t7OUH#*oPoDUp1ux`We#AM*4`kCzpE(xQHg@qX}kTC%X$p6_}tvS==0StGNo^;*+bmh2?sz`FS8G?qDEkS0c9))LyFu7opiu|3x<9Lh~0JXTo2*oy=-d@Z}Z@xX5 -28Mt2f(E*uQAUYdqNx}bCaB5p}fEnlGO%dNVa$z0VArm|$=SU`b>%Pl#`2^+$=sKyLx#q;FtY8ry -&5zKFy=;(P@s61o@2a%DonJ~sN0d!6zRB$GJRSR-%=4wq!Qor#?Z3@h!d1TN{rc_HMyfa~pLP3Rj+$__85 -!!`!NDm@zVkWIRW`IDB6mkwYK`yaTYH6_K!(aqy9e!iS(O~Rkqt~U-9|lt>~&7b8;L`yL3%`LF#&|kQZ&TwWtZ=}M#-!utir^B$Vb)#Kzr~ -HoyX~&Shvn-nkaRT$gpmcM8IbwEQ){flHzd*xaJ8Wh^9HjUClo@ujnb`vN4vV@4 -;KRiGqZshQ=%C)C=m`3+oBx-Xlu@Zbe4f+KI__@kI!liB;)aG?nCnONmpK-h2xrC#j@E~%_rhr$~rHy -!;jECHzxX|jX@Y;Zgfh`E!yH~d2}d$o!;SFT$NTv80|SZx8r4wGtJRQN9GG$KB3NDBVgsci9ADoPy+a -TIMoyOaJmrY7=O0wDZ)hhrQt;sdI>W*xGSEdkXRbS2i+;9W}<0Tw(qWG$6}TCy$@&9iR0S?yQOWhV~+ -%)pma(@IKd#cDxuZ$qb%??%ElX;SPV;k>flNqp;!0FX9LV+maVp|CQ8S&gnzzQaWtBlU44BNa-clFAP -W+>1}8ghRWy>M9H){ljYUljXG2!;Jt^lW3Lr!C4o#iH;5&mHF|J`=WtMU}9q)KxJSi$eYrVlO=VllC^ -YyxbuMCQ({dfukcis#d2KoJFvdtCqY2M?d{Y9V3H)&V6nPfRcp%Rj}ZDDcA#YkyMNW6$wX%y>hdLUL~ -xhUknbYT!RY5s8_UTsGXWSc<{WQlX$YKAMHk{(=o8xwTvEY_BQh0ClB}tT=WHB+g(GLhW4LZ%!vg6&$ -y1rkF99cmz~vu0d`V$^&0>m)qn_A`q$P%`C9$dod!psc-3aS}i8n#}DIJpgA|8CxnEL^uDQ;KrStDc? -fa!3T*Gwj9vg;x-#YtRQc=IeLGs1Dr1ANJF3t8u#T7fyBsSq1%I9v+L6jLZ{1R!(momKO5k_M11NQQR -f73M)NG6~%-R0l9XLBnvAX$;Z5IS{PdWN%7%0Nil2hZWJDb~dQv6jxk=0=AwCMS%#bR#3NM4F)Hnor9 -FDP?Nz_Vn}ln?S|0{r$%ZTc!$&!Pv3SYl=w15?&L#DnvT?hP!WH{pDnq6O~KE)@J!IgU -CSWsO9?_z+wQ@B8$?TTAGHybVx#w_m2}@70%C-?jIIj0cwo2F>?!@zp^zloojdDxIC+rV`ZJQ$3F|80 -hLjI4h7o59O^KtKIgllQ8Fib7oAb>1oz!u=fFEc*N@c1HYo(E3=SQILUh5km&Fw$M -^1}^DHK>BWJQ(^%3w%GSm3&lHAkF7<5oQMRq-}K2q$ruQ=8WP66TV+> -#v*-l(p1<#^yDQ7hWky4R}%>5RY6!@1Ub*25{Cm~}fLk$aP4Q|A0=^)46tep)v5l?8kH$xTSG29#``y^SBUItfk!%ElJ~<=wdCQO!3a1r6F}Ee72;?!2F6kG!*q -E__LXHrx^Wy6PrYJ0`VII7_v2>xMsPtOR74dcnX09m=uZ4AW)7fQajxRSGx;-viJt^251(>w3@N+?2w -bZkby%>cN97eezdDySgZ)!GzLdRIek|RN_l)4r9~_AMX=DdtHW?AOj4<#2SUq246GSCY -3sGHAl0SFt7M_!k3U|wO!>wCnY1lx+ck_V01k;HT;G~pk`6)Ff!V>^8f>|%XMJ;!`+zn -d!jE{@Z0Kwib$W%Y`I$Ymtc#?1n;qtAT-O`%`zVmzp5i8nxSpl5Do_}>AMTS|2wH>+n20VDOuK0d?dT(#=r(s(Gb1!F>%a-zI6X$>8AJR}REdyK -_VI0e52JZGSfp@FkEO@geX%NtBjk5dqNAsTR~Bm?3x-V?S0%MX4*5TL1+CKuaDRX-Tvz8Dhf3R-<;`x -@Ey#B@b?XS-ErnDC_irILqDb2UvzLsr{M -G=XsQF)sU0;=uh!jNL4`<^sU^)F{UJP%eIc$ObcnEcX1jq)+S1$X?oS)XhZ|Zl!Ne0&=mI2l*B3sw?! -s)ULLk6lYK$4#F8UIb=kb1)j9Nt%ew_00)?nCv>_#}@Hq7U75&)cG&Y?V~X4ublL-*RN6d8P&GR(A#?iCqFpYpFwQ^yGc*QRn{$$Kynw9ARauru -g3Yu+2v6;WZp#WiStz!jbTIL)@4D@2e^o48>jq -!arO{70Tx1S{8PY$QU_q!V0s?BmF*jgMC&&%}R<-a+gy}QS2jH=88o;GB3tou^AbfQL(`B~~i6T#L*A -yb*qJ=K*B>t)nq>roJN_=a2EXIN>8T#wx#{q6`YuE|wq04pbdgtZ)nBV*?=9xS#O1s!^#1{+3Xrv1XN -Jn(pQBn@U0U)WtYe)Cl1H&;}4G~OHq&L548IRGu22yeX{E$sDJ{(@n*T_+ZM(kr4xK5aWb{NL>cG%vm -SG$2rhR(QA&BK*-$_^VYs-qApZm=#BfSWas?Q%24jDQ+3^=n;O&H7MP_e%a$@p>IC=)j9L@L82eR=~B -a_#*&TwG2Bp$S{zpwdic&NEg>}VXx1wbzls3-d1T|e`3w8$SLq$v2JgHDUqA_sRI?!WfyMa -pz#iF7Tpjd13FbL^#KU7$_M$iE`Vfe1Z>yu -E3swFP?c&6*~1X`boM<(WRP=9_rMrc&JmO01aNR`(+R4UbklL)gl5h3Xw-+*&E)mH7(gifib{^RA{nV -)PXc8KJZzoQA7U_Fq@-icFS^&-Jc5EDve>aGP_$- -pU=?=5Xem4Nq=|)P5^|%Oh$Hn}>ItrP(Y<@QmFSY?1ve+y4MNZe+y7~()X|8E;q~;Bcf8t?vuJj1 -4P$l}cq6BaV2+7|}H6>q9pMSMG;3rvjRcaPfG*ja@ym?z{1Pu^!?o@Bo!;q~M@`Vb*9!*~3S~qmBBNL -U=USeWoQk0HclPuMNV*ZSQQY-Z|&&k1SbQ6R|$3$=Gf6={`Lt$>wS>a0Ho=hQkYlwtm`Zk*9B;-{9Sg -;-g#co4H*~nGBMEGEk@SNupo3aj0iCt|$dm6>bzID3P_@u_k{;-97d(0xp%Xh -<=(5de5hWtI5lh#A5{;>YiFucu@M|Txf@8j>H32DS6MT?iDt9qqedwC7d3oBu!i>FJ;hA>w3e1um{;N -SX}cs6Y!vVq;6jJi|(~FtAD2lF+q{l^DTpUV^*sp<*A;>>~`NDJ`4H;n?BtBsrO`|A`Z!MrvC##3iqc -9Nk47}eT~?QHd>q7^$%I)HY+DxzIXz3uN^BN0IjN=&`$!P`t(G~?lA-`lwjYi^1z}twkff^rFk~JLE= -7iuXVRRqy6f`o4=8CvRCMIZTgsIYY+(3hse7JWzk`s?ogq5;j=?r0tQHSOHOI1_9xg|CV^0*%2Q?ZND -zj?DJ-rIeE_Sa=zo9LU+Orx?*YfSS-&-b?;g;@7c{xWiDR5DC|S)Am+*-!cChB8eeJRbbg$b?=W5^qG -m&1i03F=b^{_`uGPM!*n+Tgt$Ak{KmSwV+{8>f!I$D}F_8`qrndHtB*p;5$Z#FF -uFm`-d2r~Ki1Xle9L>O$4c4d&htXK|=8-STFS=3%XJ}kU7P_RghtrLTXWhS|du>n;MIO&{*v)kwMm3sQT(y4MnR~R?6j7_1Wl(~4jsCO?wtG8-_vyi2?{lqdNmmt*dlUP$_@~jNbnRD=o8h# ->Q)qT5M*6~rJcbihCf?u1Snc7o$^5nRg$vDIN6dz`WS9;kWds*Svx!gmv6=>vR>HKy(+=rm}Y}3D+HN ->3cFm6k#+N|J~WaFzHJ%=0F`7xm}jht=Ti4<7hD2n8PLK*+J6HxO-c6Deyg7ZeoT9AYEI_qO1r0Uo66 -QM-m|HDJ(M13k|w&8y5$Z$9!a8Kr@NuZQ%Dr~KAt5!Xcio?_|$VXbgz{xsN)|tNh~P^5}?BI-nR7SRE -1O~LVj*&B@6y{GgmyU#vBHyBijX+urCIPZR9BpK%ES)MMGRe^)R5d%#5Yv=PfJLbU#5Qtt5{Ks~vVm& -T1IpR6zGU0|C1nYA8&vJ*ny;ICl9GKz0wPur`N3pm)=sHFU2rQp}o7x2Yemnm?E+ALwfNNwy9&vxgt1 -^JM|p1Y3>Qe)Si=ghaPOrPg7N;9{dOKu^$yNr}EwTm-GyJQPHrJ~D+RH!(rD)(zcj&B}vV)A})LGA4O -65g-{sru?2`ZIT-&^9#hFhPf-qJ)EyxH+8QJs1lwUEOASfk9>(XEdYQRfQcQ{lw*Feb7N^jWJo;gPI; -d~L-#t!k2lY7sF=;n1R&6*&h!}sMdk0%I92C^2EXqf$5SJ&93$_mXy{%Wv$dg+sl^oikkIi&Ac3UH>a -({`qOigx4;hjcj6}!m_fs|{{R6t!Dw~^u-PGbVJ%RpPnkmaJt1st6LnRe?OtOq3=RZ8xVOfcGIVY^b) -{}`aUbUzUJnWm3O!iUz5IK^^y}SA>R`u{i7s3o!ftK~yhVHdMunjd~%JU@R%%W>*>4sz8jc -DFDcdXRYBeN6&g}L-$&7Zbj*>sp<4oA@ng;K9ExmR$gffQ*}z-b`T$ce| -=Hm623%OU6xr_f0L9xmY)MS@!}NuN5!^Wu_dvH_z2!9vovCDEb>^k3Q2fncsKq1}>?R{kA -J|`Z#GFV^2qJ-`6T3Bt96%Aj|IZ*$yYaZubu$d^THiFV@;Q=iG(pxA@oUIYkpq$A}C)y5quA*fh4RbC5s3u%&vQ=wV9CZ6ZX;GyB82v5c3Q3y!}K|P7G&VYT7Pr3vm -QH+f&jLJk=&LPkc&c9seB$%k!7v{K#8+MC(mIAs)?+k|NlKV6eZe!UyxzFfU2D;~>ykUq$DbI^Ebg#` -MW?23(S_y)iOYHbOiRL_@ydQRuQUs6_hIw>dI=;T=`R=CfwRu`b`Mb6atIi>wN@`Jb-$;L(Hz*+yZeD -qF$SNHw+`O&;taQzTx>rS)how-=Bv-uqPw+i41kSRM0oUD7kw;1li!6ZvR)#t6Q{X;G%aaHO3MnL2*~eCdzPoQw*n1>N2z6uXfRw0I#-FU`W2{VXI=a`> -db;w%n=eebiGe5elV3y{OlTOe2zGfOXhaxWR{A?N0A6;e6JvbrED%QbAa9^;w+U!$}Myt{aTnuLXIes -g2yadopq)e@5)RDQeJ%cMM2xnpqdu&3RzwA-;mN=*fS8OEymmq)OTm5@GT@dQ3Rdo6JgqFXK1KfLGpRo`q -KsClkxOY|ptV`n}W}HFd9f+khvUy!pi4gBv;&yJ)`%3R$wzJ)C-Iiuep;qn1f#G~3nRz$G14vYMPpAA -89VD_)Rd*Det0YWb{gzyxFGRtb;1xd==wU;VCKa0ygfrEJx7pJ?N%hw(r(y_hKF7(iLXE3BZ-yoiPU? -%5-&pBIio_u4#52qWDP?~Seu0IZ-&7?@p~GC~l7o7w7eQ{M-E05cB7x8usQ(7kSlLeuI*Nq3XzE>#^6 -P^O=dCRA^_G(J|)iWh2FIXr9Kg6UGsA;%xYq3&H=RxMH@M&%p*&>+k -01{hf{T}8+Dwf=S)OSDulbB^4(Eh_9e^b4Wgt4-TRG(o -yLro!3fI)vt8$AI6xcy1=cW@ingdx3N2^e&*Ig2)_FAm!d(vBe4cV3YJ;M(!7~HNd!o^fe8^dq_%Mu7 --(=^F;lWv*6+Y416SeaxxjcP~L&6~yYhf$fMPI^$8^@Q6I&Vb~BX3FL2)4y1Z-9aGIrL)i1l+PUI2GG -G(}Y~AUpl<5?sd10ZMG}JfgAEb3n-%(lP#~Z;piJVQsvy)CQSz!K8C>2D&>C7FLj*ZiEp@51bvmFK#} -6AE>G2mbFIMcHMl%FYfN?(hVXFa$Xjw>bak(KSZ{6e$O@gQQdiz5cIGhv516X=@6XES9midOD5rK5^blSCFU`R9U?V=B$R((6r=*#Y0T@mHb&p_gay2 -kD-I^+7$cK3H3%-b`6|mDft-RtYzwaSXHm>v5uedqN95qT&^&@=Ywk6P(WoN8kEyz<`pYQS_tGz{&1n -dVCMKFqATmB-TPjLXVMTzkd*X1X1sh>pfWG=*(?a*Pp$tAFIogq4M72oXV4he{HibUD2&+xyT^NHao= -^R{{=@Otm#x#YR`+B0776=wXmu=5K7jb^?7c@j6BOr0;+xU23jhvr`;!B6vv0dhi#?4I=q2Fysi=hBB -xBNAmwVea!;=jcL;DGth};rX$2TIu6oNRodO6F*TK5DCx%hVT6P|(Pvy>ln*uJOQp8&+NjFvYhJ6~+G -3vXJI(au{o?dkc(DT;3yn{fUc{k@L!>?!G;Ln;?PT*m`QEl4PqMk-(v_;BIV2}nhM~96Yq@P2{7exWv -MPH(JOL>!;7G)XB;z;qIP9t8lOY4yWkV~kpIr9=?0$I_j($3Jm)}HSo8+3w8m#u-Z?Ie@sbZYfLFp40m;YsM>eL-Gn>XHyi!LU^8d;@Vv_67b`dX=L<75;AIxr6Gogw^t~ZCV%wCFCa08vf -xnP4Io1^%WIs5BGv$=>MGZ|aZb1h)Mr;z^*L| -1>~Rv!y)tNMK>^-W9EG}TvHl;-7g)W3P8G8t2dL%O5!#XO>-*YT09chrYX`1KqVyQMwZ*#g?G@s0($5 -hb@$~NI*aMtu%q->3BMIK;hndhk!MW_1WuW@e7<-+?QD1+=hPHDW$I=0SdC{uIg|rMI;Oy1o2J-1y;7 -cyc$IybT6NIx<^jG03mvxWwI38+8pX@zT}m?Zkl|HPO0~*uX!Fh(Fs_`tH)mcte$Eiz405U=g$QvtVE -MX50c>?BEO+#t5+P7lkHf*|_T^zN3mbH&WWA7cdpF(h8(3Ka#D2WU^6-K|2m}Iz2zM$=cI)UYar54pO -VU}ry>?{1o3jqlU-BWdM~%pPsYd?hVlzI|IU*=FU3a$$&`_$x^EKo$=&iC{_!3LJ0K*QcS}7VfYJJr! ->pfLYQeP!Cb#J5q-Fte(zh3y3N1uE8b#$+rWCT4LAhn^Sg3~qKGxf^ch7r_j2qZ`-Re~uRcd#^XA37D -p=6N!z?Khjk8r>FmKotP*P|GbtM&-Mz!tsc55w#o&@4P|_gp}X4fit=Aq`KGBjqb5Hm=lRn-0TqGc%2 -^JqkG}c>1CjK5Y_a|xPok#wC}qA4C?i!c`>6Wnn+Lj@-8`WNw>!DJ)D3Omj}ss^E*5aPYRs&iMoil#3 -lbgn#8)<8SjSyi+L6E#gZuDwMUuk1@wp(#O5MuH```flC0R}Ce?n4*lX3J@a0@azK*zmfoG=J$F~v-jI`rVdH$ssm@@*Sh9` -@5e#IFlN3V)mL5~imR@=5;l1AlnSQkxpBX*V|h?g`z1$nH(v1q-D^$3q*#+ojv{?Kjfd0&mPG+?IrK` -D<^%CS6sIkOdp^M{R%hOa*U`N;X*~}Mclp#)`0SYdLKAHSfa82Y)T>?aO2U!cruV&g5B=3He910)@se -7P`?)+80Ay^f=omp$lM8-P&o@TiEY6q3 -l65bIi*>pnGi;2a4Z3pg5>|q>kDoxkR%nr2-|e!01USdo%wu9(s+Z!$lsL=#4n!hJgj^`1P^Uuk&pdH&yGB@d3yVzop2p>NvfVM{eB -Fc)@_=O7lQ2Tk`PvV2aZl7_R=pmn^UIKYat+)dTD9V^4NXd*rj&A=KMtESAi!hfbM{l5z9uFLfMTS%D -nuo;mUSuM#4~80Z(v^%X(-f1;`dtZr)rYDs7vSG)QfxMWB^j+{4$Q4c6jXAsMGvDHv`1(Nr8krH}wOB -VyN8@)ZT<@aiE3GPiH4s2der&w39fMPL^kb1yW=Gt$^@Jc{(%K@i0q{6)C@AT`F&Z}MSRr3g-$t=aSv -9cNr`(fJdSw;>7Kt)yXK!Il)3Q_@SL&4DSQn7dKdVh(tYR>AtW}embz!3E}-Gv0y$}d0T(ak$~z`v(o -zd(}X-6MIA_sIKR-K54L1sYHaL;e*4!Sfo27d6RL;s&5T#&Y&GBSV`9EfPm@WnJ`F<3#1Nyk{Tpzg%q -39pGL}lD)CqTi-pNcse*w4SAl}(n<2E+(Z_*k6-|6)v?QJ`X{+-V&(ma%FJZ#u&KuR(E(!a-kv41n@Z -&5`?#iwbAW!~kNXWHmX7cm54pY5ADEK~khHYRsQjq=R6HOd`%Hhvoj8$i4xi4Hb-!?pB_`WlF1CA{bJ -!)H5S>00hpLItD_HCEbbZzXxCn)FYPv(-m8C^*`|_l$3NvigN0W~kt*y**GH94Qk+rqy%_QrZ2hQU-z -ej#`79@`jTKv2FO&|80fs<#ESdFFYRR=;$$ivvMYb)nyJB -PIeC65l~&+|DXeOKUmk&EXmPw5DoTz)edqRU!FwWg?p_M*=|czZH^g+mSj%aF6l+ -d~H`n`w>~Hg&Fcn13uXiuw)EZAus$834;+_@_{J-OYZ@QvN=U4{Mg -xE~#6Up4>fs%~Y;bDWdO)|NBx#=Cc!Jc4cm4Z*nhVXkl_>WppoMX=gQXa&KZ~ -axQRrl~i4C+c*$>_peyQFAm_kaf<-g3kpTxtV%dXknq!`a! -@Hk+3p>h+(76B-TU{v_#BZ#0d6(3RX~qe+V`)6~k1)Iw2gGA8M0Y<^3n1ip)+)G`&`SW1;-?I}f0r*V -W1we%9mM}A>tc5KPy3 -a;grnViY}D}+5zWlBngCd-+0dwLk*N$BjOvA`E5lX(?FrOr@JQ0>_k?&#suWJx1-P)bj%*`k_RxmGd- -cqCKSj!8J$g_zr(of-ro$w3GW4CrfjABZK+!`&}z9U}Cp(>>mHU~Ch5-4Z_NM>lr?cni@LDRjdgk)4Y -coGZ;p>Y8>7@9_dc6#9y>qBT?LI4@Nj49KOQ!^QXMazWALnSMs|c{Eu(KOh%Q;}redGs$9y5zGixS)q -Le;UF0I=ka$SqTX;cTs#N$gW+P*PZAnT=M>Q_nlFa&aum&Jww%wVNxwssFdr=rW?nM+WN{A4!obOly^ -zZ7OMgat9R#Y3w&I1+=9DESiUfX^nqkf+W0oTT8Y`g^!?FYu$=qb#?YsoHr;oTB -=j$Z79@ZVWDe?qGRC&4XPghI;|SQhPu=d_hwkUQF3~bUV=qD$PbCx2B*@u}-(bI`%tj)~Fx- -3qR4gR9^Nf&oNFD_Otr*fWdZ=dgDAstq|!}YCgi^`XmV_mmx?d&Z)p+{YA2k|{R0-#5ioLwnW!2afSQQwIoK`D|jk8*{9IN~g505Lcds=6vHq{B8Q~vEa6$b -|gR*?4fLd~sz34I5B>%vNea(~12uUDOTf3?L@^a$3`Z|EA7`|4ETp_?l$3VvUuWnWrNH{q(AYXnN@O( -`~4!Evb2@lE3&P)h>@6aWAK2mmD%m`>nXC_Oz1006@z001Wd003}la4%nWWo~3|axY_OVRB?;bT4CQV -RB??b98cPVs&(BZ*DGddF5GcbJ|D}{_bDV7uVInEymzDw{c#!3fth2*x=)(QogN}N=O4tA|zHbgs{JU -pB@R2kidpqYWM1>RBUE?o}TG``enw)$N3++tlu2+b -D&(|r&|<4!1SEnFHb3}RN59WvH*0aas7g{vY}FD_mJB3HajHP53C%PQ&!CBm=5jZShE_&St>8ID;{#a -9?1y0gPCbT7S8C?|A6*r6sJ(EUP>13x}LOy$WzXom~7+AtJ?R4~+YZ0t2Hf*CosPoZ$7ir`@gO}6iz1 -|il@0#^*OqGVM!NAvs1X3( -SobvviFwxjRfGy7bXKk|wZ(`fg0Bm<=KaH)Q(joarWfSF8{u+gIoAa1le#2*13QN8@e2TP&^c&D13@z --hBL1O1jy3IX763Q-=kXVfj-tcom#8+@EWqPG-lzy2uV(+prA`QRcQNqfsF&;uHLzNhZVKU=54e0z`J -iWd#!r6OO1AiYII-g^qN=w+ggY2`8SesR?cWke@03gQq6#6~|Kh;~T`X_NA)p&x5 -QHVV43uWkyBgM3&Z^bQN%eW9O4RRSWZQ@8t?MTymE)tMVHixPEM|_LBPf1j&vEz^>iw(UM+@%iSiQE@ -=+yshwL91KPKlx!IPtb_b({aGmyT%5CzgD;Z(h}It?OpD*J)n%d(C#s>eTR~xYqt9+|>S|vrRi@o~WH -AAJsk@oIS6erPSYC@=&h+c3!eq=BnlK$F&-%9Xg -MW9M4v$B4azeUZx)eLk-1ep`!o-(`WGADMYq49T)2YLI0Wl<(ePN>jbSPaILPU8wAwJf -6`s(y_KA)E-QHxRz!qMq84A{l$RQlRG?fa5zlxGkRPt@1`s?KVoqP>Y8Q>1_wih9b}a< -qf|IH^o3f{%kUc+RcRcd>nAW-iRbFsVKqRh4?6rXS-})S=)FhglkM(GAg3~El>Dqld~Ad!g3c;A^+kB -b02E`ksc?lE{7`^di$2nUZv9BG0hQpzPCU`py5FLp#eHO87wp+YOMhg!_8Tem$A>KO5rU7-y9VABgzB -?Mp`Ef0oT0BU3OAU?mHU&1vW}cXTA9o66(geR-QnrkZx*n1^p(IlhTS}VR(>!*_!5lHUEFguFQ3~+3C -vTY@v1f$qg?(3;jfjqJhmR4E7h_;0?}S=*8@GoMF#!t1DgqA9~p*nwZRZloKj|qstJXhfAl+SiLVs5H -J{Oj&?p_o2)P1aA+aZWsd$PrbT`!OWQA2Y~Q$<{!VHZinZ#DDWNvOz(8BV4`!pW#XQQk -4o%HLgj)ev;2^2-#S6Mttit_@7xI`J+Ve!hE+T+Ntbi0!IGSZc~7~ANO>x -b%iK0A9cNJ{iqb3RHw*4co%AEy)0`A(+eM$0$n&eH;|o!+d}`og;c^JF=lxMKa`>7FQ=l=>QO(M3r$4YpgN!ywB2Xnz((PZXnImO=2XsQa8;KQXeQT{Hw}x#yX>Nq#=eS0)uk6i@!q#JjGxHF#gKCYZu;_4 -P~e_8Mr7{zoN=F=bTPX@N+0qvPyt{?uM*g&5`wks76LLz(;oh7BVBtxXh!6Lzm@@CFq0(ENaa7b!7!$ -Hf0JObCM(TX%gGrtHXz&Q -BQ_l(ek$UI*!hxjz(D^=64=VqAq`s^?oz$0={{pF_mzf{K>h0Kv(R%A+)Gl6Uo~iaA_M^{M2QWLrd@8 -f|AoicY>r$*VhvcOsF_VlhWGP=XxAa01%gofO#eJh8iE%(QT*}dl9}^4PkPnN5Ew7@x;$Y*wbdM-_9u3QR94$R`?;^&2L}K3JOz~vlmo%fD|-cB_ -kFYbV}frR@?pW3|EGanv6ud%!5*Qv`|k(`M4tMbxJDinc`xJexfq&g5_>dR>p(2g3Mu#t1!AT)y{yKy -DKWusQ{OHc8>MMUj_S*oIq?CUL@4BGs#msXs_&<%UO^x}ukLy%T}R#~Wb|`qAaCX(c4yAWpXZXdDT^IYvV=`{_bBf5R -P*=N42jMn&tv^96M*~*v2m$p%k%}M)q>+U9-DNP=Ec+>c#SlRN{Uq6@kdJGtWNr%!{tBsvmghKMlt)8 -ut3*c^@7|linXt<9pS(g2e`5qWPLjCZMN61a9D2{mq47^n1IFB@dWY8Un#lS_sI;YZReF$t|bIM|?%0 -cBnx`U@I`me~i`yY=;N1TuDPe^-k&Z2LZ!W>C7HzWEMkMB`M)*%%@XYjgm~ye!dU6Q^3F5y7a)z7e -rINK^~~lb|u=CW9v-EHD}Vq%_5ERmh{nnPM4II*zqPy)}h~Pva$w&=6C2LW!EPnZ_%@0}3AT0Hr}-26 -oP7Hl@7##8BCY6>15vb0Op8=#7@jAk@pfu1i4kDWQdk=VY1X -;sJw;5vnX-vy -OmPT>O{5%fSPrCaczjCHQhU5agg?sVEWouAtsfaRPlbr1B%kMCS6SB*xb)fPOIG4(Q4&5h1fs}+~)xu -qt`&w~xq2JMbcNS)lTN5(nYX=-dV8i8QO6xJuL;$3#sJaVL&rIDoqMd16KCg1m)21V4Orj=_y;(}WDe -yk+sp6)U6uEaTjZh;HE_V!4J7zgjyB@+32J_{^0fKOS&J+zMxvm^~2{Q1{O*b0sH*D>{opG$EMj%j0` -lBQ*4(|j&qp9Q^>qigY^4)Ta`d7*o#Av622**%&4?Anv#?0&j?p<_IAI^+219y%Av^*h-}7n|(G%e%~ -%Y>THFX7g1Ce4JzIv?icH$%uz213XFd5;XT{w6T^M`4d|WhIg1uUBa$IW48YPCtD;^4nl+&=5xJDEc* -1ZIY{t=CU(^8m{Q7?%aiUripjh9ouS69JZjQBHqBwrzEV>c@P1x7{{7L4^#+sW_|YFO&T;C;D0`_ZT^ -g5OcI1Jgmcw|m@Spp&t75+k227ZDEQ6cFWpF6KspA(~ZRfX^m_u}f -1N`HntmZ*~WdtF8Fx7na#$p+^(zvs|QI_jV>Ts^dVL{!$f4>(lS^Z^eozBdjPvZwrO9KQH0000803{T -dPT-eeTE7PX0QM6A03-ka0B~t=FJE?LZe(wAFJow7a%5$6FJow7a&u*LaB^>AWpXZXd6iddbJ|K0{qA -4U6@M^nKnuBbYj??Gmk@}li?IuErLu`v7Saf2Ek@drWLx*w@97zV1cp>XRZ?cAryr-gPdDf1$3OIO_< -1~~$#^iF&WH4Iay|HiPRO30ozr41=vvE_R9-}bI1nULx{CjlQRLCBl8-{CxbfGXPDMt6$b_H8ntX^lX -Il+pB{K=JPvTKTaUwLuA!SEYLw+i<)b|pBqs=B)()ThMs}x^#5^M7Xis>fS_T1OP%S1rS!f1SH%G0bX -DPU@yQDe}gH=RxwDvpXf)Q=*Xv202+kqZ4N0vpL7R+*N|9Pu^MW)CMsSDt>L8yT&%+)$g~VMbX@H$}F -Nm64dQ3;gqqcsZ<0=uNr>`SbLaCL%>B^jRpOVg4pxM$*UQiS&g^1$ikYe3q^&C`atbymW*{G1MFQ-;$8HXWN{9oX -{JmyR}woY#~-^cp3YTbSM0<38xE+kS@J_=^TZiiZmdpjM_DlgFm1Ufj*)9XelU9MVLn|Xn-tz880rcZ -x_^`ex)z{*{nZZe0>X9qyo1{u+=0tNhF~dQE5+Q1ssQhtKn>Li5LBkmOmAxO07t`Tf>$aO}E -==cYo`2iEigOIrX98^wUq0&-vLIGR6HA#Va(;YWo%5o`o9ixor63LP(p -+SGCv+oT{uk_o&OIY;%**T9VsN`~7nidkzDz#Rd+Ip<_}yLyA|%(9;0M=jq#_Dis9d#jLm8od-%n#Dp -oz*43pj4d#-W8T_pfSCabNp(Acjz_gpJu*iELud8m_Cnjd0y&<(>vTWyZIYp43rsJ`ESc!D2l9Y*qX# -(ad;Ru~S&mxUqDoSBosy%7(Uk5DF2L;4JgHbOQ8GSuwtyP+#-DvH}oXKUSd(gz`_l>^Pm$AitLWMxgJ -5%2R{3y9Tkl%OVqQtfHc^?=-#vGA*1mUpAH(jc?zdJDv9T=f92any)Vq;sssUKo5=M>?e#%h5wc5F)w -nTVjZLh9=v+>YWMdSW{OZMW*F|(tVo36bap?j-gr^6_Ld^+kx(mU@ZCvD-@Nvp{r11_cEWou^!C4+^m -{%|@bLTd-#PTrsCv7>tP{G&OsX;8P*x-&@XojYSSz(ByEi=jrAolR2sA`#^C(+#NO8{N7-WRZf)5o45 -9}swhz1*kAIS|UE2uJ5lwPEc9U5V-eD57DxW`uG+g@RoL_@!Lsah}4z -|K(hP#>LW)Dh-;+JBd8sPEdpcgd&Xc1VM=38kU) -^GUgnuA*&V+y*E|E6R&7AE8FGh)nX-{NjxWD6f@85JH(kYLQzqN(u^rDYwz%@X*-D|*8%GQY?$!Mk8< -pLjJ<`i60K**u4qC9RdCi1)1+vP03e}Jw^ja^TGhU;4que#KQCH4g-1T7!7B(cwvFdfS?j&Mw_AiA@t -nca28(>_wYzsU6*iW!o#YXtR)t%xH`YRmsiwuM-35$Xb~Av(=RYOr{D$U~7ra -RXKgQ>3V$;7}LZEb=t+?D;yz+~nfpA(eY8R3lbRlecV*CNSwQ9~`K`=4u)Q72I_8?l@?dgGTBMLhWwv -ZcoDQD3zciQ$u5orZHbBcn2EhR9^I6qa8uuK59{&y0bzw%py -{L;C*SwwC725Z9*VxGeSHc#BTuN!Df2A&f-QX=bWL1#m-an|Ui-jy%lBYA@2_k=M+9eqo2039xOiL?aT)lu)yG&|h=x`}idUtBex1B -D)IUWeNuZ1{qj_gDqp&AEETyo)#$HwMZU*W6M2b{xx;)4(tuq!hhh-d=eM1>Bk$M`DP}B`~yia+w&2u -UM{XCgoqEDy0XVT`Qb>{oVe7voC={t^dGN2t1?cQy -#D(-se>p4LuKd_kcGqd{~LRVTdsrg{bW^2ZV`%<-4|A!DseMR#^4%kc`6|44s$j9g4xsj|;sDL{ve#o -p`SM0EwC{QJd%NWy32ud4D4S8`2 -fxXUB|&a3F_Ss=GFfJP)h>@6aWAK2mmD%m`+^#H%O!f000IK001cf003}la4%nWWo~3|axY_OVRB?;b -T4CXWNB_^b97;JWo=<&XlZU`E^v93SMP7zHW2;pzv9q*h_kv{++x6*Ai$i|X^kaLU^^&+A~0y_WOJoN -kEEP>fBhaQ$-k3zMuFDHyT`kCcaQGT(cuqWc0c#}bkn=)_J>`%yt%vjlV0#WY8=sM#&l=oROUj_l}?z -XrA+@Ll@gIQQ;K1W8ntULmrla-6E9flIUCX`xdRyR@3XV9m@`aSR^&1kPU_s^tC?#Pz5tl+wJGhfVc| -HT$uc1BUnPvknlEwH%u(~|gxViJ{tk$P?h$pAqJj6dG+@hS!AV)kmCl`!lfr4!v?ph<5Zwy%o$jTY8k -x~MLWYiAb2R)F?SI!Yn;YsbMCoQ}>L-&S|L&ibYO_6KP9$5aCGV$*H2O!9lGxfM!lT)P%M8;RM$^zC&QDC_>VF!XWMqTkwZ68U$977P)7EmJ^WE3Hk7F12;u^|pi9)A#N6>AUua(>Bq=5 -SEud)a`%zNf9|}G|(x(E=o_K0nSBqc7CFa&G3Bm!?HfH6SID9jQbE(_0zUibDJ` -{8z#B*)_ycG_ab(13|QM~i3P?*OqAa#d<{{E7UX2cQP9urfOsbIDT5wcfZF;rWdu?LErgOucxE8F$mb+95!4tEjWwD<@+J&TkO}8brqZi;fV=J1X;pdUiGO6+m -Lr=`C}`mInct`<>j>OL;1$QJJ+QB7nEtO#F(sxlb&Z1L+M|S -7*CT3Qi=$l;x1gBaa7hECKbsk7D?4anPqr_eBHQ6`dNk5KI7uFT7m8CRy$D9+8qoaq+1Q&Aoev*akpC -ce!t~gYZ@qCujjg&L#6Cv<+x|3wvx0p2LVE$=Us)gdSVfT^jQt-=Dk(W)?ojVz)ScLY2{KV$Fs?-KRjjH^zi(hJ`1~<9{(mTLxk6 -U>AyA0vPa)O5K>HU^O9KQH0000803{TdPJD*tWk~`60B!^T0384T0B~t=FJE?LZe(wAFJow7a%5$6FJ -o_QaA9;VaCwzeO>f#j5WVv&p2USnE`>zBl;&WFNvsk;*eK!@t?hBW>avS=*QEaU9rF<)C6U^_*z@t;z -M0wSc0WECNB8j@vv?BClL+J4V)7H80gAU5gJn?XN;vnx+6b9dI(*7HJ0&PQ^>MuU9~RA!dC=OcI#lugKg%Ug(N2-m>Q-RUK%|DNshO7@5ws$;JQCN-*#dQU@UsVxB4y2t_5 -DP=mtu#x-+u>VGAym7LfWtTbUh~RWTtK`XZG=MyMT?wF;PlbMX|X4~un*aK6D)xLSqtbTi^yUm1?lo{ -mg%yHk>hxhgBPZ&)}JJVvX@10%w5Jd4v!t9}}%^C(F$U91pd8LrZJvYv%2EZ3{$B8mDyLUe9%+su!e{ -MzD@DYu3@S&$b}xnt=Y9rgL4E)5+)me9rrc(Ib-jyLb8%Pg1q -28eau5AbcsNkactJc5MbQ&}?gR2gFfjE(bc>SM^*!S!%B_%gg141smRp3e@V`Q1M*RJYUNNg3>GY$x93 -2I82Xm_!gb_+z3MG>)_8IO*m_UQ&dy&@O9KQH0000803{TdPQ5~!F=zt-06zx+03rYY0B~t=FJE?LZe -(wAFJow7a%5$6FJo{yG&yi`Z(?O~E^v93R84Q&I1s)2R}A8d1322ay9G843ap~osS$rcvQgw@&=O@6r -AULM5~#m^A0^pNS{vBqNt&7WIP+#W-R}8A55uSNj3(n~I7^1~FqucsbRo9e>C$q?X>P<;C?+Y=87E<> -&_9KgEYN04DQrRK5IR=E2}C~fS1$FQ8`3$sGaQJYac5Ju=P(sTsYJ@0(8}W1?6s+XKuim58hdIub3CI ->RWts66*Hb|U*W2qqh54PgS)%GL2))bpioMReXOOJTW(%?)>IN{<&4;rPMe;+{sIfpl$js25OQloK{t -d99XU;l%I&mj>xVQ_Yz#A%S1C7~lhwI5@{W$nZ?qh8{vVVk-MX8{i9_iM;ZrQe`N|XYIHt>_ -Nk)*@`CIB2#+eiW^k3C^u5108d29mF2`N?Y+(JPD+h@B1xMFjWpG*!z7{6Jf@HqVZ0nit4SEsVihmu$uJ; -FI6p}2#XKkSQQ{nwg@%$DcT7mzl>UPDS|lhl+Ob!THm6)*qKM&%?5qFPL#frat{0G#p!XzlQrh+D%?Q -j6rti1zg5}iTK88LG`t*5#Af|puv>*X|Byv!Xq}HZS5865(It_un{WKWd-VFY{9T2S&SS}qJ&L02c66 -tn2xzPm$>5iG>K=@%p1N|!+uA=Ao@tq^Yo~SH#M2o|_P+RLTZUswsLh%DKsy&JKOdC%NDK`Ex%iZ4S4 -Ww@4r=@h_p>jNeH{otkdruf^izD^o?ytLbGF?ySkHbl)(@7<>wlO!b-g!2x3v3I_Mo#Osz|vW-dzQ<* -wfkdBte@UHsy@{b!4YtMiiM+9V2$j)o~gO_G1n6oD|Wsderb~S&yh7(Ll-}e(Ea8)#@)>veP~TP$s7K -TtT`A!gyuOnT)E(5p6@Bv%y;o8#Q%D^!@m}4u!bFswe=q~581lvC}`W%wPFSTRaC=WX%t=6#a>-vkW6 -h$w!Mgc#=BUO9KQH0000803{TdPDBK($-n{t0DT4k02}}S0B~t=FJE?LZe(wAFJow7a%5$6FJ -*3ZZF4Sgd99R9Z{jczhVS_mqn_FeDzueWNGml!pe`XnB&^g^Fv$Sf8k>!sc9Htycj7=OtM;&~<^q208 -9(#kxwyD+Tp>WMz-$maS#CA`;|6$vP-@I*Rj6{kQKhj*(hV;%G_d38GhbuNak{)T8&z~+z$Nqqm-Yx; -W?Z(G$L0Nc%X866)%MD{pi3Pm6`4dxf)pdZr>P+<;Z*mPtSWw`uK#kI9%aP@)6&AD -vU0G}3P|ExT3(W-(Ah}Wnq=d9Y$Ytxy>vTTz5;y8I2H)Y@N?z1&l(tnK*ythYJ;fd=od($Fa$Qp3!(1 -3F{u^2x+`!8E(eR2EmhX0A4@LpEo)(MwF{r^Irp4ksmi_|^yvR!;HktZt$h<)n)9>r{*={^@2P|e`;Q -IA;$8JBmQ@7f$wOgx=!werm>K^P?c$FY^#b-G-?_R}7|zlNj_aNa(msLia?qw(7b=j}kzqB?p%z{zV9K&!P3=$SMy%B_QGC6OI2~Rh<#4jSWe_&ht{0uaT-C2C<;MpvkHH0jV -{w9p@SBWx3KYvD%Zc!Jc4cm4Z*nhVXkl_> -WppoPb7OFFZ(?O~E^v9RR&8(MMiBnauNWm#1rp~%s!GkJkxGcU^Br%piB4%%S&Kb}Rn0ElU6OLYzO#P -8IGDTKwf+Lk&OAHw%rk>8FPk5@bKiMW7<)r^8n|#bo((_38Q;s+B`nqmGsRb2uoQ+eM&KGY@-t6U=18 -@Ih-^-)boB%`oILOG2~)X61u_BCfI#yQizx2HL|8^sldfA&5qI2L@>hzV+4Mqek_FabC$#3ZwXPXQXQD&RenoOqlu$<~&^~zJWJD85%GW= -6kc2qNty!N%>MSwYMxK3K6tS%rhl+1ADoHhzU>_bDhHz5eAruf0T;iH!|kQ-kNqIrgCi72GvHF9KM@A -z!)`U3hz*$qH5;5Wy&K89`gu=MqnDY)~44LQzM&5P$U8)N$?rFH-MbZ?cGnPG+E%v>6f<^h+U8h+RWJ -eshe9H*rBBNkWx2P8R;}qP*oZO7a8oDxTh}!NQFL=j9`hd)0phiE+LRFeDW6WXAcV)OdsLX!1o8!#p4 -b664P`_{mYT~W}9*Xrm7SZW>1L|z{K^3?f0OkXK;SC?g10UuO{(Kg=4n -TldQf$d=BKbgZLXaCtOvY#!Pjz1UBehpkf@utE_Jq{t2stSV7>&qw|4ltirC4S4QbIe=p&~KKljOriN8{6K|tXno)GjXl~Q%#PHJOaCj*M@UG@9DH~pV_eSn96Eax6@r}wX1 -BA2aJqT~jgXw8&HvsH3Q)l>KE2o1>?pqXdJ(vb#1th6D0ZCJGC0uSEVNnlSV`AHFiVn=gQc#WA@?br% -OJSBy8!Gf1zRA?TU{VJn%q&H=B`~B}>FbOBKdv{C>2D7W))zxr%YWpy+Y%OSb3crv3!LQS5wW5@14X% -!ArMGLpXy;gfi;IiwGaIX#gPj;n(z>wg7j(474PF4-61h}fCQ(u+MuzGJ6a}Msn$I-yNUH&v=IP!FRj -vg8%$6wv<{O#9^_o-y8vou=xV=kRO=kl~d&0;JipMC7U0NhW67Jz5=a7E(CB_88kkbYZ!?wmW>C*BLt -1!tLbUT#-i;C@|ceI_`FA3^`4eU4voMVKe@0|*V{0l9G)ZSb8`zE -2VMH6yP`|CN>ONsU6c~raGWv>FT2#>NmTjoUBSq6-+MP=Mxgk^VYlU87l-_oxD>c(9uX9)DHUFo8GpF -{6=pBcP9k%MmLnkseskntY>+>?hGi^vwwClNc{@<=-e!tP`BRb9gzmpy+O -@arw~nv*%)abV#1?Z%nT7U9G_8+okMEdIok{^7sEl(z`zistOTklASVFuf1G#TVil)@6aWAK2mmD%m`=e8V4@TT000gt000~S003}la4%nWWo~3|axY -_OVRB?;bT4IdV{>gTaCz;SZByb%5Xay1DZ17dY87x0p4Yk;$fC0HR0-CW`^Fl=L{b|PY7*SyuI{^EHz -W&@j)KVQT?ty~bpLy1dLH^$;pm8e!Fltt)rEGe(d-&cIB)kF*O1_QlsbaJSVB+P_qHn>Xm}$Dwht5UF -WYfM)>HRjVp}#9xwc$8u+j62e2|Vel?pry0wxCfcV*z4Vk)s|GMTxyDFWMbef(EVJ+=4;14G|a%XU*q -5y%k?=ZlD&T?s|8rgQ9S9KcEA6!NuN6+^J@S*SY>=;Z5zE`6yUJY#~v!7=9DE%NeRAZ1wV0MXE66>UEd9U65Y)x?i-c-g&yw)AnNa4B7>a5nwf(6LPvw{26pz69aJl-m69DpMCU5F;E2TzD9Mk=-+pHr -lE02dR8)0WF)4dJ7|_!BcP|0vbQA=9Gk|IOsVzxEd-_X4w?1W;z1fU4$KD?(q){h!g#Z+X#jdX1=s$P -8uViFMMkau6j2EsCRGSTV2=d-NEe{`eLThitD$GWKX7!je&7iO1Qxs2aW+cO}%l2iu!r0-5T7|=r3A> -ZqqQ}qNhV0`gMKKYTUHzI`nV!e$QxT0Sqal6jL&}B>zgWg&`*%W^yD0VLSeE>bJPOJ`T_s!B{*M&?qysxIyxO;j%`;O0dAsH>gxMlqi -w*SaFWWWbFnu74l9QzE>}tAI9ru$7Hi9sE+6UgaU1FKyiOyX#`mX@PUCe2(iM1Jfpi64S0r7L*A+=u< -aH&|m3Uo=bR}L_CS94=l}T6TbrsT8B3%)GOKB~#k*;Fl`o-U5tCFr-;ccX=^12%7YP_ySx*D$&q!YYO -kWTQrA?b#^Zb-TzuQN$!@;Z}rCa)WjZp7BF7--k;Za -Il!E&Od6#Gc(qng3%G}$Ax#6Ob#*gmveMys%Wa0z|!9^9pgDndq!&JCi6e%Eex?~p&*O*%t(JH~#(^V -PZQ^u9FP=<)Zl=?LGy3&hZo$Dd(Y3)9P4u3n*+B}}AJbSrOq_%y8bIL3epGZyO3k#4NN*r+!(u9%SLr ->pOo%kzv@$ZMZAogCrb&%`}B9ycgUzC8XXm1-G1EvIRX?ym~3y{igeI8cQz{tqhrBU@PEwRHTwUg23= -Sm8NaRN+}$Sm8NaRN+}$Sm8NaRN+}$Sm8NaRN+}$Sm8NaRN+}$Sm8NaRN+}$Sm8NaRN-0Ms=}`hWpbh -Cs`@VVXpb9}DfGLL!hxIEBLCYEV|x@?7X4R?yGx3m=Y+!{+up0Y1{tL%$mrm^Y{?bxI8lXMrf@(WfB7 -_`d!$g!6dv7o&jZ>zsjc0U$-ovPoDD8Yz_(hWW1QmFZ|daOkC`rMzKIbc!b4$(l$l0%6Y;hqy|4Y9Ni -V8UuSI$lhV%+d%za6(9CBWjCB0g@^g(*RY#*femZXP=@;^*^Zv}sQklt^6GBOGm&o0 -d3z%L+TV^yzly1NgrwK{n?HOktl3r%AB!6?U+3XtDQ5e4`1paO?+;1wP`(|KetgS#0JLI2bkEG~%Z7) -4+PMF>hYKE!9gD5LL|i*X&yv8h{%uPFo8K%x2?C3AyfX-FOmlk>xYoA=foo4m;SvU<{smA=0|XQR000 -O8B@~!WAUDL&Dg^)lr49f9A^-pYaA|NaUv_0~WN&gWV`yP=WMyR&UoP?pZ`X-`?HI!abh_yy#2kl8=1&|&7%p=aCQ@h3r(SYgCG#1fPi#1&mBD7=`jkk8CWR^dqiNs7Zy>%)rH0Na0!hS -(uH?&nTg-nv>b74|?2w{oI`R_`@ey!$Wv2{zaoFg3Lk^tAjTpO&=>qc|uEn}>c(o|*E#gA%koM8GhmY)vMuq5pUTER@DB>X$N!^(GP^Mpl|hyG7t2 -7<4D?2UxUjd;OmO=%T;t`NOW~(cNf5EgH8bey=_4w&>Ip9lFHWUix%h|bl*{R!LqM!9ZerL>hwnwASO -RYD1is_JFx)uU8Iz*)2%YrK?g0^UcGKMuP&Q!u9`$s4=d*$>JB?UI7BWgm4#MoYH%5&mr*r$bjDiEgj -{+SO$6sGTnWjOw+y|Wg)62Fw;Ld#R%SPdBP(vVmbbC%aXU_SGaJkza2m(5P8oM*?PMq6&wTAnK$CZ=I -{}$NciMhG?i_5iFub+~gDbWBXA?^MwSab0gMYOpAo4I~T>u8&AQ+4~-F~G~2_t4qx}2s`J)I$@5QY$1 -Zb3mHFw26VYIwBB*4<-bOttC(Rh<$v6gHPH4B(a`5TJ#?!0ct&J(qcY)dM -Z%`^tJ#bT~Ty6~e??99I#O3}&RXh5*pZSFE_%s{d=FMHP9##+(~_`ZBUesPW>VsaU?E40Suj|~4#j;F)j9~^vqHm?Q!M$M-mY2@Pb|C0PgL6jmX4&#FoUlmGx*?ihV(JTo%@6bZKce; -MJ?e~WF*X0>gJuUH4*?>zGFINFRomka<;Lgi=rM5{kE4dJJE<+CFUuh)X!)W5Sr+(l+OuBgKcgk~jpW -^q=X!$bOC%V53N>P+#7-tWP(^S&A(3HTzmUjHO=Su2ud8P)h>@6aWAK2mmD%m -`?OT19@Q>008PV001BW003}la4%nWWo~3|axY_OVRB?;bT4IfV{39|a%FKYaCw!QYmXI2l7_$cuSkh6 -MrxSKsH{t_wJQMzPiru+4QS;3f*LrOqiOoEryG0OU%&A@1@=m2q+KMJ`&4B{M#klhOXjUx-~LzbKm76 -RNqKzs;Ng?!56k_>PapiP{FAY_PHvSK?|0?tasSKy>f*9IIK17J{dM{2@ZbB(%ZvQ|;lrn^{hN!M!?C -=%-0!Y#%9|W>_vGu;v#b5hK4<>0`*nAD__#Zk!@F|x4VpRr$?oR*&Be#v|026TTwUkSQtxldcMoot+WVR$zB&AExp#S4&KY}M&Ue?ly3O0;-*|&z5UDKnDajz-tOOh=GCXGx49j-zS$i=Tz{3}k568f$Ghv~wEVcc+8uK -@&py4r+`q}mkN0nOSJ%68aa}(0?)v>7l6nLq&%ZEI9vzar(*3^d_W7N)f88Cg^G%7n_3LV1D4v$o^>- -IH@SocJ$i&;p^yhM!+BklldH0(l_+zJU%l=BT?^E{qM-t49{+4D{Uhm4M>)pFgm#0Y~$CkgJz4+_Xmo -Lh_CqI|J-#b6Q_vFRT-{;trbbd|!ZIt#OKBfu2ExD`X#nsK{WIPG{^zi(_UvtL2`)7~OUi=LAkIr5^d -HDQ!dGz$W+$+!SoxeDH@bdA!^YZNF`Ln0bAKoqH`EK`B#0c|SLjGOE?~>$)LrU`P?&e~DdA)7@=Tz@? -GI;s6yubK$muh~q+owg9i*%8XpZ{MvygXd};(l|=9|HZp?BA8E!_8^=?YK|dN$dNQc9Y5<`aMmfe{=V -=Of?5xT>axRRq#BgKia=b(vL0=hvR9vf4IJ3=uh`@?hv&Ocj`FQQeHmKH~;KkdHCdq|0Af}I!VIMFHl -zQ>fQ11pG?aR`Rnf<`FpDI`|ovT!VvB2i{4vf&d}CBUiGdn&))7X$`4;{7r!`1pygjTO4C^WQogHqz -WlhI@0amzK<+%*%?67be@qCx{KnjqlZP)K{O$bJi=UsJJ-GMy)emRS -U!0%afBE9<>62II_ws*9X}&xBKJMQA#}8jUKl_h|`94<*g!SP4#SxQ9bNSDwNAcz2_2sUdewma`lQW; -bdUXEq-(NjF|KZ_zPX6wslscZ~e?vZEIIUx!PfJ_tXnnp@n4%R$O~)xt`PI`Ul-oYd$7eJx~x^y1vkmRC$yJ?7@qL^KC1nMb -(q6;oPNf09A{xv}JH?aWx9x?L-RR$QfQdSJVF(-j{$+ByrmAXzDO_`>6 -qYJ<%W5EU^D}f=7bw8aI^H_gFlf)XGVvG4(SfTriXRMbX;#_-yObWE=SkYUjBv9U~bKw)FCBRSA2OyQ -tRL&?J%Dse>NVlxqX>=EId}U)%mMK+U=!i+TwBysUif1(D9TNr(bK50c{Ga4;>Rn69xB3EmxOE1i(@mu|CY9flZ -^*?t6EF%)pCk_$L0~L6#ENGYY;FZ*$5cvb1PE+1!6sOV?cs0({?P!8#>QIeD7 -Or{t)N@OQAeaXgd8G)wA!-iF&8eNbJ21EjC?1<*jN+m1_72mVm3sebT~E-p2Py&YiWSpI>{!WqAXVU0 -Qx3P0tpW*TVC;@b@G9APp}F8V#yggKw^Mq6%=R3u?Qg2dDjr`h#&DGx2&0>`pRR#uU0T~o#8Z%xuCiBtej*EpHSMyJ6IARr7jsvjEW1)0SUuoOVrqEhhw&}@j7;ZlCl&KG~OvS^7 -zuh>8$B_;w@Ww^Q=^xfDBV%JcaY-L5_`VdyMBEEtLj9?7lQ|9Ie3=hf86YhweW1IN_a3}>x*k~Ey-~j -^)B3vItOE?rG`JfAp;DU$^eq`1G!PIXm1+OqD7L29N;*Q47R+9fJERyk&{MRZj`*URxwG6DzP} -QM3#zIb!`^II_k!o!L>5d=?5R+?e?v7b*`%W!aSMI2_;{gM4*;Is(S&2$j-Lm=Wa%I$)l_CDU%3N-_S -G3%5k_M&$y{R)oGREFPjSjZPBCa^HAuPQ8N}Q^ZZQRK72@!jin{=NnHUk3m}fT -Gi2Gepg*FC$R6zue2-x^vZW)vk7i#)#SvN*x6D<%7I$8ka^Dndvtv;F^`4y?)^PPmV65}iJwi0|2Of| -*^a^Vo&uTo$#4$+%f2mhFAZ%Ad;Jyv}gwR`l-KXf3on;&)pe+ -M5spx7r37FDYr^26q)Tx2qHa0a5siaKFu0O5uiEl2nnb+NNyFtFe=qAYIKK!|R-*tI8Y6RH)A>}QvGk0XoPCBv{8D|wGhvd^qRiFW-7}L6HB|eRghA%Cx3F=r8UmIA* -PVzxzKsuM60~kReaDxf6+)Qgx%kafUof1u@kbj!Kn{~3=s%;9eGv+W5BP%FXnG*WDQ^*abS=3;;*|JE -6We(jEPWmFA!(kXYC1iG^TWAXpY^<96MkUS~nYL+h0)FlFMAFvhU -U88xNkU4uHxqs;Y0fj%A~QG#o} -)K66|S_|CJPe>3ScmTjDe>VB3uDNbIV{p`ACE)%ez$^1%|W^RthmbBS&mNNeEa?zJqFX0yai6ISPzAU -_f;>^r(RG(>w -AoiTH$fMnp<{(M9LTpeG&{G%#&eT9Jr$y(`0a-j16#@W|Kppn(9b`BO4eE0WdO4fnr{Z8BK)A>&3_}XtB -~L85UM$&3$eJnHNxPY=AET;#C|qy6^BFZ3iQsjgC6`V$g7|Ac)!6o~cx6)`om$dk{Zlju+VC%Kp3svYF88&ZJdX!6`JaAqQ8If6;H`0;+#+ta9miv+ij}8BP$&J3 -q<8nw|YQvTXK?*h_zU^VbgvE>OlrjN)RacsQP;XSgp*75A_F*GPAY*4>ll5$1 -A|%WSBBl>4hYd`t%aHp;or0$hY$8WW|0wsG9p22pi(q%u`L9a8G-<;WlYluz!M -?5ZsjK+ubpeZ)-x-*?Xb{cp(`_z=tfLw$!ApSWstZcIiREx+4BP;o!lsDwGP4}D_BwOwK&bJdqx69)yCPwNhU?Ki$we%NG)86sW -R$^45G12c396G~({-^XA*LAXns{g-?IPG5sX`DuqbeH3FcPE+`k~kkJ%1b^ZJb$|Cr+cDDa;D}3f5_s -i%|&IV=kpw%5atkVZ+hx$My6SV({p4KHz5Lt7+4=W$@7Yn4~>u;0EbRJ|Kwa7r<^@ERNVCLARowfb~K -`+h(VU@idieOCZA>W5*eZ*c8R4&G?(eiYeHvJyGgUE)1K^Mj63>G!n=Q{+C~ -NJs^GR*d9V|3jg6M3ahN*KqXfz9NFT?+FNg{Zs|phMs%~#%*mn>FpQ@|REG*>Y7Ly<$2Z#&eKvdC&G< -M$Ju}4{2ps+w;QHK77knE8eZpps#B_SCO7j4Pp6-N~fC<>#Rk&pg_^lG0AKC~=Suu1^q)`Vg<|AaR -qlFLQKHWg2pk-6=#g#1p2#)}GRSaDtMgbb$EOWWLAR{BsJIN=Wf@Wy^7IM_!1R!F|$iNt*HkmvA5%h+ -G9#&Wm&K6NbXmW7~vH%bi_DyZx5N8@>Xch%cv7qA>w1k32O;GvQwta;(s6;`T1OXoEv!I*`^5QT_}lag;Zn{i)Sa8+lVm+xM20;K@L6GLhC+g_UFSblYmV01l -nr0%JM)0p*%t$0HtUSW*B8Kng@IeU9faVQORkZNf|X3JyV-T3)Sp`yj$@#Ow~0lqU^VBzD8|iJx)=8k -7STqWCTmwdJg2RP4$rFxKZ$9Bq{}{0h9;XM1&0Eu^d9=1J?_JLm?$5{*}!pOh7Cs2?3&IOx91 -}CQ!{q76`IYodWqUTSbpyRF6NJXkfdSDT}=vrVylPQf85c_iU{MHwG>Jo2-*0@uZLu1o0}i<{)4i7Ew -^JhtgEFjcbi|Bg2}21N?{JFg1OdG>XPUgxsutMp3$+?PNWSe2U^RC=WuFm9W6Td?}j94>E(*X~=ESXh -N+WJdXxY@L)Mb$!PKlV2rfFfZrPS`AJkr@yZ6U=1s%q5U#8s(J1g$><*Y$>bII8>L&mdPw#ADyYOnKe -HBMLyTwHCun-yPPX^|kWgg;F_Evah;)6jD6kq&l$$;4y>sTcp3y+lt@WsB9MR?!?2se^sjn*tXk= -rUZqjEfC|G-%!GLi)1_$saRwDTxv3R08O$^7#v5pEN(GJkb=_H0Hr=ve@G1|@Y@Q@}6*>(}8XQE!dlm -~;<@>&UPx3v6c+NmhNCzQ+h2jvjBj6*U -6_VF@uRi>(f_&+H8N0-w0W5!^ONs%TjN;S@eNQ4Efr!jg-=MBze2aQGdzJ~{tO(Wv>x9-YQd1Tt|gAv -hEckD0=9y&6tPGiReJAF5lPd0;1Ir&aaanDHEp5|n0IrA1V|@j_gvfKjDmRBg_KNWpP%o!p5mp*&AqN -lY{JK)-ue#Qvcbw^w1@_m)|kAW(Nv5l>okOSK04ONCf+LC&mbV;K1ZNas{Iioq^FP3_pu-t%@b@U -SyD76Xuzr>9rR#N4-^fD3&j&G>$+w&C#~&vgNMgZAbNQ%$crX3C~FD{h84O4#al>=hyIhy+9V@~oJ1} -Kgd0pw#*!)IiU+GS#!KIt5z4~BDuL3>mg!`f1ORs1!juBsLJKpWnON%00&|qf9&h!~#v4Iipwi;uuyi -^0pnGMsQ=~BSSa|rsf(&Hz@Y~vp(>rTzj?`oFeA$+VU?)lmQ21Zrf>_`5ol#?FoM!=Cqsj!7gmX)4AwBAAkfH9i%gs&4;Lb$QPs#^W! -JH%hAtFo}h*8c=$~SDBen$J-MON=TXo^j#cdil+|bO*TiRmP -1V7CL%-;4LmgEvd*P*ThK9VS-L#*q!49pn8pp0zYhP(?1F#LJ~9+GBxz5!~BpyKWcb#xT;(5!_H6h-i -c(e2G2$Z&!#7@#}Hn;##k(EV1yV+ySmV%F00J~uZe`oq<-r-R85ExSO~_c6stK?GP{x%CP&{Jp!iQ -vLUPD24IMXWGj{9wD6#lyLmxPk}@)5@&L=b$`IuCS}}~y=Zcp6PWI+A#EPAFZvF%oy78|CSm20V -mqR8Y-(ot!CNTozz?3yyzg4Qu~q@|aLeB@VFX3LgLLH+^;;-~CgCbkSySyozR!b_tae(l!S-4B3iZtU -KkSr(piTGczm->(w3!P?fiYU8OB-BR!K=f44QF+8A9DTOJGD -5qiV*_Q68;nQ?UV|HLlPpsLZnt8QSGDGrMW~?2PaI|e~ZgW;@*bqq$L}+LLzf<>tSi;}j{mRzCLZ5=( -@wNkEmyD&3@C|=-bK4}|f^d#6oF!(Z4;CEVoJm7*$!JeGTFOm<;0RD>B0VXgpfHH0+0?#dMG)G@Qj0(mae8qi8t}W12 -7H`79X(L<#dz;zrC%BA+BK09hI+nX?yCxqay`Xs-i7mD5JNGTNN6#6*$66WP}PtB1Rqz`2Q=%F&kcByZiZ$c*_a_>L&diQs|Kks`)%LJBdh -X&Kf|F}fjtyW=8NkO^FHo`jgTWeORAN^|{(WFvd_G`}(yb1gH&U?tgc9DARJVvb)*+yzUrbRnX(s(9& -&oKosr@3op`j9YKM$hr%J4c9hR6DGq6Fuk3U!v1wl1^rigK?|X%9L ->9IN7BZ;q?5emd`D(!%f7OjZgAJ#b9{3RLJ7UD#QJLbGaj4JH?5ygO9KQH0000803{TdPR!d$)iXK(0EK%103 -ZMW0B~t=FJE?LZe(wAFJow7a%5$6FJ*OOba!TQWpOTWd6k{rjwZ#mrqAmtQbMD#r2=RCWklNJEj1XtT -N?w@G_pJ=sOc_D$xRo#x-nv|e%A9uBp%7$(hLVhSACh0krC_nUGIwTz4!k0f7^#2|MBT(+ow-I`uMXi -Ki)q4^z)DYWBV_zeedSI?fG|i+vkt>f4zV6;`R2?!>haP{_XashyQ*5`t^(W{rm5Kd~^Tu#k+^c?d9w -HyEpH)mvPMpH`lFC-`u~uk30Wx_xHQk4?o;JZV%sX@BYP@as6j^@7}(A@x$H!HSGPvo44`n;|~vy{t^ -RkUpzd{zrTFEd-3k>)%MNLj`+`ydhy6uKl~hz`tIHKtB-!YrSlvy#J{}!gYC)d*V{9$eY-uodwciz_q -$i~O+I>f^X~Efn;+vffA#j)zm30a+n-)M{%!l>{`FrU@4w&P-(rUEws#NP7eBxI?%~aP|5&Qm_uo9ec ->I}F`}XnfZhQOi?Yp01V!zvde)w^F`Qpv?c=zi5?HoQ9;@$S*&8y!$JjVUsKfJpC_GkX|?Fat$_Pc+q)F({j%QcbhlZP1 -I)&1RecOReg?7!bVzKy?Z`Ga&lZH;)l#a{pF#XII7yZHk*{yHZ8^Y%J+62&M7 -hgU5;`1**{$Sg_yt})Wn8o~8i~P$He;Y%7{}3zr>h9f(``2&htN$go_iaq@^{ef>7k|HtZGL%o9}=~_ -2o?F^=l`!geEsm|ufA{G@{a}m-FE-&_U7T;?e^2-eaKEo-#_hcjPj5Dy$zv%`N8ehQe5=n&EHj~~4I>9-^O=KHwg@i+g*vr``1_Wt|-w(TF(oR1WL%I&!R)cR=rsil1Vs -n_|ZwCB41G|nZ9}RjYe?KmPUW-|ru!y-f}K`G+u+um9EKUVMXk`DA@zC&XfKl<*)BQh8A_Me|WYM|J}?e-ev$%m -hQ{PmYl|JTRNzx3l8J=F2p*Uvxy`jclL|Ie>KfA)uupTz~gx(S<_ZqwNJ+tl{sHYVO~Q!VK>toFE#Pt -W)_Vk)>N-r&bE9JK28pFkw$FDsevDJDT5?|@m)vldK=ku0l$GgXB<o&N$u1D>A7gK0RC>2G04W^X|ExF|ji?C4O|?J$CzKWslnU5esIWtd%R~zmaoVpS_sM65#jhC<`s`n(t7+F7dM{6i~cg>zTa$Tj2Z9g0>mUjr(&bd!a|RD#f+rI -d&XwPvpcg$yg-X}&!w~Or!p7MDQ!u`7{^U4FIySwnR|?$N-WBDD6Yuy$?WzshHI>L>|Sh0VOP<{7TcJ -5VvTd+1@avD-1AKetw%`X3WdDJt+Cn;5{rTug&kugr92+7m4T$Nyog(@!ia|*@yac)8J}s~ge(@87Yk -84>fd=jYLVD?W^yp_2q{m>W#&#%&{J!YK -m68)WFWvabQzoyJOyK;I`kyyEAZRk8`YXh)TRWDul%gWyIj9TYKTt#1yekad9p!9#(kK&bsHk#O*wen -|PftY#6+_0kuFkQqvr<(4(;Lv4f#7F{ -7%5B(rnF!+;$Z{PO6ZWwI6~fQ*_Rv>f5)Y9Lyyf5`-6fU$Y+cc4`X5oBL+004s6QFUc}$x;*9tYc2KL -)*!bbVac#XR+N!KZ#r?7EiTgXZ#v?)m5SPTQ2lf@e(mvWwFMsv25 -76knMQHU@3ey@4h<-)&*y_hvUJ2BM`h#?`zz)gYP@1>??5UJUWIElr31~uyzefhW^-#S9$FG!DIRgGf%}LV7ypjV6ih;NnS7fA+!+19T>MkCZsHz|ZpA#aqFO@D~SXpEDy<-VuqZ*IKE`(_7cpGz9xzW6sUD4B=yMC(x8h~pna;lT!NV|?A<`_0&b?y0VrG3TsR+vvhMwONexrtN#iGO -wN0_)UhhB^KWVd*!SaJ0LJBfL3Dr{(T!H>p9?Q38HmLt3DjE?5wJYutux#Dic2PeWjupim|MexFS@+s -cS_#u2&sBT>YN5B$eq5?R0OhUXNLK4pj(Ne>CL?}qcZpXhe8xrr{=c0Cu6~kfY@Dy`k0v2plOj`v_I0 -~IU;m{0Im{@gAF`!_WSC>t76hxi4v!QuC79b^DB^#dz)JnZnIuo!&5DEXN5B%7xjjTJVK71?Vm*j4t3h^;-HQ9!Hymsq*pGyN3ab-A9TLT~k8U`!G%vI%R9d -x&ps?!dD-I3gUwDCn2g=09g%~jze4ZgQg~^r?YgBbtzGFF-ROAR)67gtgGm4D!$c3G0I8L107}$9I%k -W3Reh@L?AoqdO&IUFZ@8z0eiy~klq}WcaJt0ZWq$J2JCO={o0*S$`#DhFLUL^)L&SB%L+FZCKL~;!r0 -ZUfFPi9ikYcxO1#Ez|LJc5vwEn}g>be_cFxWHI)k{A-B!QTv}*5(xgmV6Kd4d&S}4w!s?q^wa+W(MPo@?L;SSq>|yQOhJJ`5>z3PdBd8i)|Fg)GGs37mIj?&R5IaShjifFJc*iU?R -D`e0KDDSFk|hNSoEZpRK9L`5nW!=VCLr;IYxVvN@?QO!FP!E4|_s?eM#wu(G}P%wmyaEK|kicxOrD;A -f}8-c3vrOm|1)tA&DVxt9V5NmcvNhj8U1v* -s{h0pGWMMu)?wUXe}le!Heu_8KKznn@}NkJEj;vIy=jf&saF2h&Wh{3(I2~O~kbsL!7&>*Gci%knvs?JgOe$H)9pgof -5XgnkYv2f2LS|7*Vu+T#maK^w;NW3HkBIxnM`S|%kQ5eQMZ$~|fF<#hb}TtQB48=g_NufRa2ExKvhy$ -ne2{xG*${B&&N~{Wu<;4o$0ge@GmeNY487h8SsX-cEq;XWP>)cnjF4oIF~qWB9YHQa8Dj3JN?0O-$AM -UlC2o;O-GtKO3W$}6gkm;WM+}a8+?6koprm}Drh74T(I#Q7i@6Sw|5&c+0Ab1OQBunr`Ditez$+oHjf -FNs*iC}EOF{nAU3}L~jskhQ*D$+#?1--n-_RDI!7z?-hz*8q7jnLE%Bbf --4A-0m`b_ij$bA_%C)9>B}tsX#i%l8b9)>A1zAHi3n@A*HVPhVDpHn$nJz>PQ5fC>)z02LQccOVqm5l -LP$)5CrC%u(++I;0-M5m#OBp0_$Vkj%mKtT=ZOdEr(?2|Cqb@B;rtaZeX>v|dr7i)Tt+B@%!oFtc9M9 -IwQnR1NJ^yPx;9f;&=8~NVkqeAk@0z**$6<{G1eM~3%$ucy2gsdkHimO0MLVIV%z+nuv+Y!sS|)NZWa -6h^XkCF`@bwj1T0-&6ybXecPby4$b^D`1eueGIc}$6?13p&BQhTdWqS$n{*~N>Ns2rVOGt8+#7hRx-& -tA0)0D)24*e~9F#YYxNO%QIF?8suTGax3lJ}?BB&7RC)bz$055fWS_@ -_`=(6`KP`#2E20)`a*xf!}ON=m(EV+F1on+5GJ=(d3emeYUrm_TfQVPsj5bV3sH -fUQnHn$aO}YGVa`^KQgO_8zwtqUX`0V*xN&=xYnj%>c`ta3}$g#=^!s;w3X -dNc;*$b-DjRz_O7ycYSWNsvxQ-^vjPO!xTDPL5(-e`-bOFM0Syx^25l#;3TeSGg7~B|1&-(cr6CWCLI -`hB$|be_aOjdOc358@=C5#$@$~WOd3w?_L7Pb0ZTQtKh+H#FK}`P{9~iLu?BE*=nH8lm3BiE>81P#RT*5=c6nyRas%snjLMCjmgYA -M!II)s4C3JRKSOQLyQiTyMfDski=3beFwAiU##cBx`|=nsjQ8RRaFSPR&O#MFdisEtW+Vc7E{>mv#S> -5y;%$uf4!4akqD4(*J2i!g!Y#`J|kd>K?n+ywpaKANjDH7bsHATHcTXu1Bpb;!qxT#I&Or}0}M4UTM< -V1z*aaMc?}BE@k)S{u`=$=U_*hJNyy17I)P&NbwC`#p-Ng$&fe>)j)hInH#yBs@e0?I=}hyCq*7#P$W -of3#q6eR<9Lh^NKVXvkA-c9V+hTw#%_SaT{{b)*DXUPVK}jKe0w%Qz@{K`)URrpcQ{#Art~#%1T0~?c -spaNhN=~=CC*B^<)n?*%%F6GMafhU2#iRByZ)L=R8GGvMQ8Iu%c>iVInDUoGFJ>dK4YlCgpxIfq?(f; -)LAwojc&#yiq$pafzPWxl`u&>ZTKro?t3=8yyUBi50j8rX-Xtj1lZriX>?_979!!?W=JXS| -9F)Uo+yS!J%BhNHfyKew>%MB?A`10?J$)vIxk>=paE&nRSh^8kA7b|1z~1EDgV&iC;Q<89$bSBuYZWd -3mAm*iPXBixk;Kbz<5dV9DZ3fufVe&6t@8l1dT@=^EI8d -jTW3b*I}a0=}f~NRI(-$6djs*BIy_|_yqK<;ERAO8`8UJ$*N`huIV79V8%s-?Q8RL1T5vWPG^h?YSb9 -BsoW&L%(GD6D5SSpjJ|=?8MpSN#l$y*V%1*Oz?6il<&wj{<1$dt38^FzYivbxWd%~$H)5xA7|~;=bgM -(a_8K?>maxKXxj`w*YZxo2zJ?>qn4glU5}O<4ckyg=fVppG?{)dSu>WixuXtM4A@GNakjc+8#gI({3f -5ANnRI~vW|F;ZIh)Nh4NfMSOO7)L3xc1BMk-a7UZ<8~lr1V!6Fb!x7A50CPplxj+JU!{I3l4`y%-^2+ -BcP|X0fi_jAhL|fpjSe)ufY}kP1tYeIn(kjME)R-;grkuWbz+0ZTpv^xQ3mBfw8cWvnMEKoQGY_aGE& -x^J^hH18a81XNgKwHXm-8GK+am1~Ek6mZZ-i`vRMS6(-a#6dBTaS+_#Kf?JO%N@~Eh5f650I;TOldvr30=3Pt1AbQ -k8d=Otkf)7n)4opd?PdP^L$zi6?H9f6X3(02%IIO~1eZVVaSrzQ+p=CY^moMuUY1++3m8gK)WZ`{s`3 -+UsPL~(JX19FI&M-)}YIKNV6WW3^W%J|x^3pYHHhD!f-`oN!LluWCCJm%Ct)Y2D-wjxx>S+$Kg~Ga%P -nw3-wG@?rr5|nz;kM?Gbpn}7RCx+scEg->YGRpUY$iB}T!mQ_Ow0+!u4v?I#snezwphinLNAr7`7 -8_#-a2O;fi4^{tH;Ko8~xh1S}o%5z|IU4`t4jo7}UK+43p`O9>IIAQDCT3dmM(mb0^@H!SnQ-6DKa^C -awm$Ga6+VZ^=5aU#ZytpslnU?9^rJ3B$F0Q4g!V*nIU_|kzX30c=_7P5KZd5Rf=+*%t}qY&3_QEt{UL -Du7vZoLJUo+z!Jx0P?AT>spADEJuMI^;x) -Bq=E?eBHGl)i1we!O+h|MzFFuj;EQ!DqK8eyiue}EFEZ?K^EJ)ITXK9*5>oKfHcg-mS9^NLQt6P?o17<6irrRtEE+RKD#xi?DJ675TmjVh!8__pP$c+7UBh%-YkYvPpr -G++h|^cqiFC7FY=De -Z{6CQKi*WF;CFx5Mksn;~MHUa0D!A5-Q|k5e1smHlc>14RFilZK`Ul2V@YyjgqF>B#YzXbY-THZZl-G -0ynMj?j19e@dq&pl2T0qD%}P7c0@@3(p7VUrQLK0R_K+ELAp&ydMy)qCFMTQK_m^NpyGEZKg1h@u|Y@ -9v&ayZsG9CqP^Fj#U3OGRf#5Bh5lBM%|ynRah36bYEI;De%!8sL0HmMI&e3uc#@(R9 -h4$b(~8$dT*!+6p)+7&nRInPhoUJx#0HkQLAtG!WfDcbL{L~@?q=caJ~=E#k)T+x9g-fI#CxVm*+)+)I)ME+gy%KL%k*#5$$PrsJ`2R%UpfYqV`*+p!8W@BHdk&8b=LN#j3^ct9(`Ac>Gzdhn7< -S3vgeOEvr-R89bTHRNKx&X~3*5<4+yLnX8gN`rrfde1T>yLvx?U-zC8E*}^{xZC^=2>+%+c~S@S)~u* -su#yjIh{JGwANI}5MRiXB|gYQQokngRf}OV3n#ts9!qT1a*&h%i=?-Xz^7p?KYkF~A^ -gY{E$tk^tJe04IvrMS>2wc345$Sb)b1$!Dk3G6&B1yi@DQvU8aX(oF6t?kAUB07|z=IF!5I3xktS`vT -BQ*Ju@38l>9<2Pb7+F#l?b42D1g6R=aIf?299!h)Ws|*K%t5?F=87RJ>%qggq&MR^yL6yIO_bDGa7i!M=FufYc -@dkB2!*kTDvjoLxKRBN3dc(i3}QrD+d8d#Z)x?>S)0J|=Su%;Eru66Q#&?Z~f+O@_JuvBSBRDKfPw?iE1z_(r2%x -QQC1PQQ{uqlN?W2IRuv=qJ0*dJiYwy@0x={6sBz{vg}ic5Na0R~?-i|XMKg*EY>r%0bjGLkl{&Q%i4Q -fWxHanpew0IwZpL&PfG0Fu9&97DQIG`eMQ)J*GDp;szbs|qL+Al(* -Hs(wszu>m!LmxMZi-3?f%8yK4>s~5%m3G-|@TSd@GTnYl|HUWjj&fqBl^(T7`JZtu{NRgh|2#(8)4VC -VS0fL8<>N0#U@V`O2?T7V%>a>wGj3otycoo;(P6l<5m`J=8n__PeDcVMpOeH)l>5>Xaw`qvsDwP<^WG --%NPBw~DeOYa=r_*Gy+Qq>vNK}h)Na^Q7bGR --xGd6qAV9gD9=_S_-;^j%jT5MOd<8PlYdl5h2VWX-PC96&znVDfF4g0}ynP@s6=OSL0uUblYt(INdyX -=h+un0`LAovG!@D-k>O6?3xmK0LEb*S1RLj3O1i2K%Nf~Y2><=FPYvFDU(rq1b22 ->uwk4yHAytu2d7r1o4yp+Hl7{WVtF+l9-KtTl^l6b(7Q&o1hLPw>mda`JEHRPXz(@#qjQQ~^;o0heY> -;mIVG)a+vAVW6Bidf_Cp-uY<07j{dbi+4)5$gU1pz1isH;7{LAvd>FgJxv1K!0Ui8hlIGUz}A^VO`YY -o0N{2(Hz-UAt|lf4P51w~5d?lL;1cS2VBNzSuQFHXK+NvTz}6)ct_G*FIw8c(!h?l2C(mTdSo+J8 -v&{^&IP13E*f65qTHZ2jq04*kKRat1yLk6biaVu2;2|!~SOH(u=@&%eUNVkQa<9--l3s|#dhwMZM&doQVfykmCAUpel -ez7w@ZkQwIp$bLUwj}ZOoEYK7Zvc@D{s?Rg?Hmd5&-fMp-GMcbDc#y0x$A&k}AYi -=>CKIdNJt9TOh2(X~3j(mY7FRm`AUbq5o&Um6#jIFO)_zEt;3Ru)-ghIo;sQVzFfI5RIC^~N+T3m2T`CRfwon7gIP*+dCe1D1@g>c>kO}}w3Q2WtC>E1 -n(`-l)FExkg*T9`T??43%!hq*@qY*{Wgo)VxFv(A{lXCM5Ibj36C|w*UffPFo6QEHw~HUGX -GcCW`lHFq{ZQ1v%ITmgis+Hob5uDE(&+LLVw#d#YrMAaRFwc*aCB2cm<@}Omvp%p{&s2x`2x_o+v394 -l^!QhA``Hzap-o&TPUWr}^=!{kPM$W+VXkq+ly@60<}b;n3A;7D{F*dCDGu-2}l%#;C<^eVuz>h91&w -A|Q`B`2(nSJ^~4t8g7UrnnA<1;Uzh4(h{Khc83#2_I??9NVggAF709)VuoU0zzVcgcRJC#P1jKJdRGx -;R`NtD4Y}F}>|QR6{(y8_SeSx)=!DkE0^TfaAui-;8{k_tM;(TDM0>FQ5=*{GLdH7PtEJ$8bX%)M8$D -__>{E`-j0wB=mry#GP_i0rOC)Zn?7C$MneOT`^v7;VNLxc14YRUSPD^0#c_x)oBT$g;;Wl$USWg>?gv -=~;bT8>^;0RbUab6d0Jglu?fQ?#!ZaRoWC*3Y~dN`7p}51UC9$xJNZD8pN^7VVOO?)`4l!U}dV?L+S)~8WIiG8dobhHwk~Bh+Pq6<6$M# -)pK(|y3J4wvghi^lEb$a$iW?6aEED8=r1k;q*MAlDa8W5;!k2G1bMY>9FT4ksd=Fg6?=pSBcBC6sgk; --XHxkslesSf$AJ?X;KLq7qMOxFvX%nUZOM}CQ4kV@JehODjb_R1gRZvM+BM}A2|2+wIYg&-^HzJE_G@ -5DLZ-=`L0IpPtnzKQ%SYR1z-~;NP2aTwz1kYo}@#wI1Tnx2mvv -fJMDi{cBo#vTME^0Fo`D$Q2Al()!m>Xs)c_fZ}J2lO%OB*um61mjurMWWKj426a^ -@y~yn>1*Ih-R%`3`Sn=@z={8#$HJd@)%aBir3p{Pd^282#<4LJw{6;|tAL#ph4NSx_$sG$aw-+Y<4V?XDF>w6-X#m1HicN0@vt#+GSe}X!3 -e`n;oXy(U_skXKI6{Qa)mp!))>-lvDjC2jmUzrBN$2sz{-}7Y{eI7^VBU2P9D>jSo{O*<^YYcV1=W24 -vP`n3?lof6@3=Ov7_cBl!oL( -rdpD%8EK9Pe%uGLs%pOWPS@|UF&Et}Uz5U=C_(bzG+X9#D!a2JpDC$k5z{jC+tXcIPJu$W@6Z{>hd598g -+X*sp7#W=vJ){8z{un^(8BTJRse6FxV=lEwjmk0$gK^OBqsp@cbmty&IS4vkXX0Zn`-U+5alW9(4vRE -Rj5Z59|^&MLx6P!|=Eh|HYO8JI!-8a7ffvd!LQJ=)k#RH%PZhow3D3d;sEE6~E3hfk5FWjJJEdne#OD -qISkR&IV&!kbhZY&tVZRu&Ylrm|xSJ35l|y3r<@zVFNq?#|9ZbopKTMAa+fz!$%HCw*}Ze3(0z901-; -|EP}~h!q`g0tMi9$RWJdLl#y!pUcJxSJV>{cy)hr+X#hT?6*LI+t^`nq1h^~{pgdhDN`3;%E)+F7;J& -mknD>BmyR~`ZAws6AXzk})==s4*CBEBwuG6>n=Fx6AxoS;ZR@GwY9guD}d|vWcJCVwHj?3vIj2skFq~ -eqo>uZy{32Ah@tH@gP1^rrM4~|2QwP{2+H5=!h1{XAoof-^3AaAx*B0tn-9Lc@*WoPARd1*+uoY2P}d -8irThoo#7=-{%$>MbweF%zcD*`7P=Y4d_3(1YWc?l16ezL1POf^mY<2ucZ&xYCQc?QHXY8hF^8isp9kqS$&nDxw=7d86sA- -uOPDT_8=~)SKnnPlc0q&P)6$#|pI+j2$YH_$=zJut$nUUUKt{gM4RKZ{0IT@7I+GKRG4V7!-3?kY)+t -j5q}x8k;|}?@CJlrSQ!422cDIPlg5fUTop61ZxC?VU!-g#m-e2!-@us?lV?jO=^MWAY)X -H$9J1MZf<>a?28LfdJ4THTl6AqEOuCt#zbPzuXqK{p4a+eC7cU?JsZZxHc9x6}(nmBe&(#;z9VcJ{S- -wlNW{0~t)ZTqnmIkZ!Ya3D`uRO-sChOn2DCeaM{EbOEzir>Fh8kkMDeE~>$_J>V*rt$=i!?TnL8HRd6 -2o+?QQKF@+9)X%P#oiZK+iA|f+c3>g|IwaeE4Gf3HaxLZbgp*62Pe7!dLF+RZS(O#x(GyLfAJ+5fo*{ -|SHxfeUdd0_(ZZ~<75;{a~?R5ZZO$M*Z+j|WKrZrx4#^ZtDuyK?LYnN6q`T3#rUQ-x)*wl08a^BFuK0SI*TGw$$Wra)h -FmExq}#&wB-J0xGVM0ccnImK?PN?1BV|b0JyTMqiPCmajIaT99ba`wx}{cDvwb4!ro?xTS8I;cn3%O{ -H;VOW9?K%m?B8(dT}8SE?!sfNZ1tUxepbvw&8lbFvRn3vfwp(4knoht5Xb6Wv-`H;K -7dTn+;J?Uh3-7!oa_y;~%r|sm>JdX$?!=cPvWTUiol*i#ox6OBwbxdVY@@LUMX$d8SRRaMJAK}eBCB_ -~^G4gEa;RkCePB|=!CWSF*X+;i9u@Aa<=z|BF5(;viMM2NO6mBHZEgo|-IVAZS7=)!s?U;+job2=yk? -;%|-klJ-h)9Y}4o{mVl3{-`1fV3~I@TF_2c+BW)CK#pvsz&7ZD%;vQ*Q(P#I|O;U~LeBvR$%uA$!-sN -?N-Hrc20*@UEoKR$7bB1_Hdr;RlX{KzJ-S9$)WvCfAPs@BQ+bgRg`JZagl)k7wcO+7N;E+uI^97cdURyx)p-Ddk -ghmE?vyFVlhq5|1ZhqD7RGq|ufQ4CheAO64|FK5~%-HH%5T>&X3QF#Z|tMe=Z#Q^_A;gm*be)VF39m` -DYesjsn8rXy5@S~F`PQiP+He;2!vgYibfrm%6NGb$LFg?rx++S7YNNeDOBO5*C!G>{S5D)zF_=lp9>D -%q(EY4WB459%3;=v{EfMuG?2z5xe8L3FrrIMuy&;H=-u?&J&ce$Xfv7J<&4hUk^JxEVpKY&`b*IH{z}ld>g*!`a&9ajn3+L%QvjfNjtodJ8TCim&rfka@HL -%(;1#A?r3n4^+iwb1HMQQFej&5B)Eu%LCkq#x;@oWwHqIHV=cYr -t?H)s5QI8h0gj7@yBF=`PyYZ7ziy#gXP30CEXpuW~YW9%BbH4^AV37m_q+3KONTa*G;-n2s}@dkKAR_rQqCrAg(fi=%l0} -~&D2{{Oc$%ElxVHfc54pg~O0?CA&Ww%q0b_h>+xTq!_(rxt&<4K#Yl8D%{(}T!yZ62A_eGYgj_55Ty1 -@(p|(C!hIyTZIqj_HtYi${3lyov`JfS2~ut{NJDNQo-t_D1bRfP=kx -R0Gp#@+i%UsB41+4WP##=>QH2zch1~pRi+#DKF6p+bN1jj6Jc=GJgr|Yd56CBxV~D&PU{S(BR}z6V^= -+<<7heO@)_l(U+4AC}*>ZTn)Svq4q0ma2eQRBWm87G%WttwlXH=x6d5~_aXq$(0%L>b;bHhA9sKIilr -!Rr4D!86WI;GsBzBL#`T#LBD8OAYV;$Dwyu@TZT1Qmo#t72V0coh8#jme~3kKTZj~lH+1YNV1~`X^{hwuOz=)fP}t!F2(NI3?d%{F&=W#Jw&v5{+2>dF1)&gIQ%UX1V`ba4J1 -cd=B}7B@K^^P%T|+!k1Lse86G4&`)1*%?~=KQ=T=7{=R-xRU_+iv_gU~}xWjnCkqn$Y5dneVSK~Q}*2 -DS&kKK0GwzxY92u(WGXu;iiPGzXNf?bM^O -gJl)GIfx>hDZTslHGqDW*~A4VC2PmVFxWK3z7vqOsyA1nJ*RY@RJ%L+8W_@TCdSNjvASD<{ZSFcCjB- -T!kK0#g$x_p3N5ut0;b0ADRt)}ZqOGVw!+qNzx;z*q|_|B@+zE-?!i$u%X^TX=QMkA1ElH%@jY`YK&R -;1FMb7WykRRmj>Cvi^*2;t-zCnQvI62{zo3AFj;i1PpbHi5la1>E9Az;==#32bKhHQqn)x8?I>{iAPx^DG>h6mBG1d_g5zt4RAMQ_d8rLVs?j}qQRbx>GzmWbe12c8)~+Wqq!bVV|$4j1|>J`= -~@a%x0I^86$e}lbjNS_EdeBunb5S@@6+owV>m3 -`vhqAI-Sb!rk3ff;4^zRIECHNnty^`n(+_UP5Q`Hn-;ZnH2v`Q$ZjoU_HdF1LwS3(~1Z-O+JDlgIhs+ -F;uu|sNw0Iq9-|5#ZEL#ETHk-tGT!QBwWvPd8*_a0=OTe}ma!6{zV&Px`-w54VSt?nlueUT0(rvbn(H -bF|Vb0h+$ -aC5X2iD>dBAE`Y?qk?N4D2Mll?Ak~pj%G_1e!14tuBh}Qx=NC2N>B9L!~r1_I%B_uzA9rpebHq*R>a45EH5UV5;-66m^Pe#24wj{KB{vgp=a}bx@N8s~3-K$EF1)~?q0Z5g|4<0o<+zQK -F^8)m!?Z%8f=L6?aJpIzqi$7TR!{nRic#5lV3`VHBTgKs@iSGGGS7r+7wn}&RfEWw6Ku6ir4{Yf^bf% -33^rRI`DTThV+fXM+sKv6K^D>)|Zi|Pyp6bRxctjP45=5bK-s(3hnHr0>yWLn9Nl9ixBHOFhMBRd=Km -yF~J)0A9-vk-8lLrs0W+=$Etaib74Xx*g>TawwtfNPPsi~RTHzTjuh6zuO!C+L!6gBp-zA@W45X^Ur2sOD=!^z;~89tPrF -;VO?^J4e2OwIAYUl=7++vLO}7CWyt`?4EQB^gKMMT5|F1%LH$w$WbNj4-aM+x!;ujAsTLI~|W_bpN^`~uCY<|-I__D0xVM`{8c>2 -9|tOv&k*qQH1`!cvW@M( -5MP+8x~L#5$kiRmh)en?GzTH05O7x?*jVeGN>&VkjwEXWm<7Wm(wwTx0i0`I-lAVJ1#TXB)L?*)O}ID -!J%9#EE=87+nT(dJMcfTRu@2&oy?&Y^|F-cnekEL)blsDf=yeesHZZZOz1F6{w?5NhRX5as%``JW1W7 -yR8oRyqaA)4f!{m*(MALZ!h -RK?MhNqCwfe63ZswMvj)HmcUY+=1;yER%ebBV^XE%gcSaj*1&w15UDxGSVJ5Ehp@#peCDvoAodODFg! -KX!)ZK49>Pqi^Q?3;*v=)_jA?5=rokaGY@Va*;iN=T*d#K};VGSY-s%rWXKRMvUR3!TkolhbMt=yP)h>@6aWAK2mmD%m`#xjbHVe`%Pte^}Q(fJ3yM6gX{lU{{O5;&9n8pL@k7v=pbfvc4YE!ahnpwG#S}2N4#v~mT=7&^D1jc -SCMJ#9?OGjFIiONTQWo1gXWODKsI8Z-j?^01RLPb$&nF=qBcKB&aV|PD5Omk!R@zk>LoYA`8G5-3Lun -kvPELxesBz2j>K#x5C49pM}Om}c1 -kZy~xSg=yF$GPr2LxzmiK-qCL1J-&btjlN-xXw6hP&MVag18V7clzf{l6AGs<^c*f0;WT-9KrNg`7W3 -OP$)Z#e#OTTj?P~}J!DO(Az5x;TN8?fQ(x@MflIb9hX*gR@Nb_)!jH2Z@T+n>En9t%tKom0{EpE)bWb -(=49F&EDlNoyCR2gl>D`U(lOKcPg{6)(8w`Qn}-t77X13r{FsE5iJ+ois7zA2rAz}|oA_3rO_f8O_qmN6pNJ~Ws<{?8-QZnbi23JQvK -x)s*3FRfXlf6TA>6HO}RWxw_uAse%w@3IFBu8Y(g=do&qNVih+5f<$-ag&+sGe-z$PJ7qv^Z_tfM#=N -zyF`d{R6CralRW2&pQ=~!WHp&R4#urks)Td<=w4vwvTj@p91E;QPOFu~%~`EFj#Yk$Hy>Bw`gGn=b!k -@-oB+4yS|ko8tRU{og|<6COZ|X-@5D+p9shv!U#`3H@o|gG=n>pSzhZO{@9R^Ohmo$dDEMQemVIS4-Q -cae@6aWAK2mmD%m`)i*($`}r008Sy001EX003}la4%nWWo~3|a -xY_OVRB?;bT4OOGBYtUW^!e5E^v93oNaGqRd%hv`&TRpT?r&Z@Ab0ZZYz-rC_1IkK&lEw+%L#fnJz1) -Ol;Gw%CEoUc~%i3HIWiN6t>SfYp<6%#~gFaxy}b4{QiIC)2DxW_Eq`v*=J9`dhxV;`sLT3{d4(m-uuD -D2j%6P>+<#e&0lWbUfq_@?p|M)n}_n}yZ^Yky}iosKmGK}+nZNck9YUw)$Pso+sE=M@A>57*N;AXd-H -gcPkw&=*X!H6pRe!B-H+w*cgD>7zq)>Wcy;yj^?w=m=I-r7e!c(s?%rQAaQWu$e*XQ{{q@!3_3QG(J4 -gKcM_t`B*3a+qs5g)0!_Ph{^*oOZ@w;#Tq&&I3Ezf!HLwSDvaDD&R>(_H7pWVHEyubP3mn`$chmZbm{ -!+@HukQb?d~f{Uw^jh_U4ECtNVBC+K>0w*X7~v$H%{AVt*{}?tUq+ -uHKgW>(@6AbNFn;W4U_!`VV*a`TS3JuWx>Q$De+A`#Q^E){ocsKRx`qhkyF&+w$f0LuOk3bp7`FKCAi -Wmmh9#Ugg7I-n_bg`*2;Z9?H-B?cvRDJM{$E@@OV}h?sR&{^%_VHaNo&o;+^!aE1lutbQ^x2osU -Vg{yzj*fYtEVqslrO%1UY?Y1o;-i~?6YsbeDb_}^X>C*zJBralTuz>U;nzrZ07H6@_%mej~Vi(yX@ra ->&L5`+lRUI?{d5knc(f~^5*KV*E!}_*Eg}KaupZ(`Q88O3~%q={>Am?Bfo9vAIr^;8I -D_jjk8QGPq$%NYHuPcF+^^QNn}|8|=rc#)5Par0w_{^IuT?*6iTdiU_iTmSqdpIut5%g41ZwUlpP+-*QgzE -&>t>ARoGoB!DMtuyeNQOn04|6^G`*-w7*hrCdiHr~H*w)Zd8o)_9Oj$dCm-oLPHc_Bm27wRX=^6LxD= -{$RV4Rri!&3MXlwz&L*kE?zC!-w_b_dkA=zxFwa=W*^#_wPUWHt%8Te<&aJeO&`6`RyZztLr{}>D|wP -#NU1D)eksATmKJMHRpEsHlF(Mh(G=G%d0o#O>j*NiK9LL{Q1SjJb~|De)r9@&z^kw{pZhKynO!b({Eo -s`}(WzpFhd}eE9j>8=rjo<-qODzyAJ<=THCT`>&sW{`7g?@!>_?_Ig?NabD -Ij`ep0exa?=kKgY7?*S_#;y{!9^zl|+#+0OjBR{vRJr+d5XHGgYuSuZa#LI!LZp{?t2S;n5B_q@BD`E -ajW%iqRwIhJj?tY<#b&TY#-W54X{v1ELHIx|W?M$3RX`pa@`=jCXbQaN|tvmcl1*8E(abgo9U$&!VC1W`+FG?G{kyrM-Qja~0TJq4k?}LwIWk>CoCDXaAc@JY{u1iL(Yvwf$p4mpm --!hr(Vc)W{nw1?#R@;s((_Aycnt8R}vL094GEA={d$BQoJ=RQV&x8Axg&k{NWttb+uWZX`2b<9{!jc* -8J^Q@m!z~Nvg(LII&h?W;^sK4$tf?<&KDKa1JxGVda#!%P|{ri^Sx!4Mxz6V9no -XwN8~==axbnQrCR^NUwhx<#4Gb(MvssQjZYD&vrH` -Zk4^qYz~IebTf2aax#M{<#;v>FHh!J+k3~%o2!P`Fl@FayOhu7NipmkN=|{(>v?=-zqXUj*zo|ob<4K -&Ge7mM#Tt5Eh(~1+2itIF`(m4UTx~c-&47*b$u42UCrjC!Toy3S>_x$d2T$^VcYezG^S+f~GS-SeEHR -+6IYUe`kdQg-Z1!>TtNxAOZXC)U>xe~SN_cwX1ecbn3u=N6v6ANYKpKC)>!lp`<42mlpNAsbYB4q#;1%XPuT*}e`q1UECUZDR`9Ie@e-0L>adi -p61v_2fKaOED^T?!cQexl+K$g{|6R6LpDq#+UHP%qEzEwE?gNi#+j}CDs;S#=&zSIQ`BH^UuJmS4^t| -rgit^vkhIytXPrb17rti!w$Dq_!^bn`W!p@nGl#1;fE5^t+u$+Xp1`Z4WHqRSJOsfM%jga4V{T86~jZ2O!=9InOfVs|-@<;4sBkuD)B4&k -(^c@J@Rt|tOBf7+kiTfZDI~>1a$s8u`A4mg9*w+QBb3$H#tDpwH4DBf3W7*?5)$@lyHNr`6IK<(31FM -yX;D3!ZjWbqSi7wR;u({-B{J=>D^8!`_;Kc6J{mL6%Sp%^Nf{79Xdp-u9Pr={dTt!gdC1y01r`O0$MX&_KTqQ1; -~zi{xJEF(Nazz1h{1U4NnG3XYE1kP6c5-D8;L_?=Kwq)GiHjNSXIwT1~vlQclBfCQ`w$IGxlM^AaJdM+WVS$;HGtx6J>du-b};1yf`y1~Pz*+0@fL#7@LD@oFEnpL;3@__|%1-3n2-po|DIK3|SU0<}=>Yfx#IZN%=%F!U*kOenT=0Eh;t6SD#X=M(G6 -GO7V+Bw_h}AbYM(BiA+_tjU2Ye^5#tyNiHI|U$*hx5801GAbb)6pUYh854N|S$J=X@-G%SQ53)|6AkY -&gQgRwW`ZLnDM)$1Y`M!Y4#~WAQP!e3pf7+8DHw@S%&sIxo6j4t5mQU8`)B!-U#aHYD>0LS<37?72Yu -Fb-0nIslfuCw6F_vI1-?INiXZc|5q|f;Y(kww!Wdz-E-#WW!L3;lAe3N0TmO!!IiTChlYRhanC2V%Ef -5H|#4Q01yy0Fq_=~As}JCV0Wg)sQ7XNLK_J|;f>)+gzc((0<|uRQ_#9M0=?nn*nlQN*h!|g5I!)I#AO -T*3KK`#G3*@h(J^O2xk!J?&32PV=1P!SSJn;FHGVH9LyKrbcG}rk*>>ds&cIjVAAxcKA#xNUd!&brjA -Atv!0Ymf#AO)eDs+I@!sRy15sBxJWm((FK`kBt|6tBJ88YB}Vr;CjLhcW?l#t)S$iP=M){$?5A{8FfP -5n+16MT&XCQg`N1r@zQnz3Mq`|i*_u9En$?ZAB_3ut_#>{8tYbB2!2aDtUC=IHEj0s;9GCc!kzCYj6( -2TU%g(cm%UXFC8+pqF#yM>xv@<6v@&N8JgBkOq12Cif#QH>2K3+Nv<15l@zYn}NxpitrdhGMTM*ZqC! -lK?q@;cofFU$wQVpn-&ko1c9ot8DQlGm3@_&2t#D84HH>CdD#T}Pv|?@3)o%okc_(%x%z~?mBa-5Juo -fF2CjYJYq0bNVUC$2U9cx>Lz+y- -|<9@{Djq_QX8%Yi)ybzx%6d%gh7sCnRc96nnJ)}+xY-J-K#~laOeE?ruB^nbF2-cMyh}|mk;|PU*Mpvp11LW`Zj3C&rX^kgK6-}q!9Wiq=(urjGWSLIN8ALCyB10OSXFSq -tGbv?6QKu6qA)aRMm%Ml3TIj${BW?^jaVd+KM}hYYYkDyJV0R -!v}tBFGe_W8M__Ak@}k8YT~-b*009Vi5YB~^4r|wH-L!e$;31-@DKGBQlzb=Tu=P9p+NQ>f0TEN$F5O -}&9S*Szg(z{IH~^c>$tz-jHazKAWvAKK6L*&q;ctb^BZf_y*GUg?je^~`Da@h%Er(*1JFo*<1OvQc?f -4dp*BGnh8*pfd)P?xbcR8d|6%+%kNa{VHfkqrQq?-VkdGtIEVz-&8A=vH%Rb1WUVvVw^-<}eJ13ctO$R4oyuHH=w8eayi -t5gKLUjXaF36ssO#G)NxnIJXLtSkIE@P2?hDpy8m;{f2mSWQ<%`mXS|I@L4TFp?=cSIC8FD!@#Gxp#e5_JkdSgI!$naN<+7nZnmp|Lbp_*DO(+CU52`WVO!!+MFMx -Sc*8VEPw?4zBc|F=Ktj+gv0->d=tISWe-KVK^AvbYN6%mJlmRvDXf$&e0{W4a4r4^;!i7ve8C_Xo@nu$-@CoJbz`t9pQvzzAyT -u3Y0KssfKbI4$we|i-z$uSV<-MN?fB@vMExtT1;t0J14siT9U^>A<0#PZHgoi+HOipfreO7DL^E2AiZ -(^`=*Z~1o=1I#o7;%q}Ex$B-}P-2@4_FIKo2mWrgt_hl8H7*|n)pZsxNHu~Y4Zyy6g~Evu%~XMztdVD ->{*WJMfoRM8Y_s025HbBs}$p2Y(`U{TjeK$}L*pcFt6avUHAGC`ZVm`vbin~{++7Ozxv%{Vln9Ip_sj -5vt+V`!xa$-4zhAZG4iwbIGa54NR{XRp?JmHQe_Z`FEM*LLv3BAQ`A{Sb~-Dely{WM`<9FFK?CLe4hT --ig!r2cd6+aa38tVnSv;Ry_|TpSaxRhciXxBg%LPtid^y@Qga}g(Q4rkf)UofdF4tlx`}H)_(M56c7S -gYcfogjAj`en`U|BXR&EGD)bi@O;n(L0WESCLJlh(47gyha^Q1HLhyWbD3g_@ITIu0pGy2NU2DRKJRP -^{C^519nFXv&gy4J{<26%LachJ`LIO6`iXr1bN9h)^o56;{!D@l2lc%tA35 -@B>ghNVY(iq7YPlnHoryfRI}T+Cd=H0sAOqT7!s#G}*?~#7#dkc(W{MODG-o0DNwnt`I55fx!ePp}t8JRiEfx;mSb{5 -h%QzFR>!N79_stBzG>eh}!bC$@neabA9VMvBTmQ?5$YfT9D6U*^iPM#F2cFV!6jLg7Nynl -;*ORmZlwfsiS1>Xc+UZXdbO^AXC)&}C;m -#VR}wZAZ|qHiZ*5vjxn?EE&7o7sdW&TLQrc<~}=PSlMwXRgt@r^Wce9!2)G0>5kzL^rr;2C|pt|Sti; -H+ZpH`uzx}2$|eKL?g+7DQU$fNAzU}OQ!$~W{FpqBMAstS0Uqv1SC&pIpjZyANL2(+X*N@!>cL6r9Vk -dP?Nq^mQ94c1r$KnS7~O(wA)X7NaMWs>2r|VWd&lgnRWpR9Cdnnc8qkN3iG?J}h||;$A$sJvo02>SN3 -;yZv*Q6(2V=K*f&DgJ50S5{ZCj9`BcyKf!_{5|9GZMNp2_EwGY-iBXJo~yYK(Slke8BW?EDSoHGpdG1 -MG`-gUS{UhUtJ&M;FTSWWMmXW^QCgPl)Mux!G-J4q{LuQMXNtE~`q8+xN-jA&HC9n5cn7j_yPwK&AU` -rJ<@pj@x2A%b;}HIJOF3c1z*giKVO6RZ1j<@@B7=N?~oQi3$3MKuIPTdgAJ0HpqLOXdiy4iA<~IFbz^ -8v3quJpSN>(^8;5~NPK2i+R*5ta61QR4?3l$b37V;J^#kPq}`MaE=KuqL -LU`Joc?Ii$UV{AsnAM5Ef~L-4vosO_eCR(UP;b8ZT8fB_7@9xkIo -@ldCwQ7xI1Iemj>*#`1v+{@^Ef%nvO;7|a9hHxWCq$BV%qB#M3)qAdW?j#k(NH-CZAexMGESpO^I}*` -BoJqOR5ANW5KUmd!xAV2q$nUEO%^o2bxe6oUDN(B^U|4CFcD9|q|?fQNjg1IHb)+o=1%i$%o0MVyV$C -CS_9c7J(NEvF;p_v0f+2Eb1+h!Hu=~|YkkX_6!3D|)u?5G*z??gWKy$ksbAWR8c{a8i)@O)5)}00%A2 -iWa1R=Ps?|FS8tP7`Jy8d)cUb$gqQBcGAmbn@pxQRf-cbSuhPT>=V);~7h@z$#NH1G8j8@2N4Bc|Aq7 -rHffw-G$9#;A7*Q75bZyweq?f(^@XmP0S3NeKC7}$#qbjDIcj6FG<#z>?B%I$$uG%o0-6d~$9D?aSC{ --3MpO2(sku|nrYu94XfzKuva3Rkq97_%4`oqaVi7iRomOuZYIK9yOgh_wpct?m8$k%IW48y+ -4#{E@6sgRj%B>owdV*n3hG|8EXfw;AQw=h7@B&FE!ay;5r*_gbaR_0RNLaL4(O{dY4L;O~T*G1|KXvp -M?%F`A5hKXQyGpns3}U%r2O?5Gm7Py}MJQ;U7P=SZ4cRu)m~|iaBo4c^PaF>JM@BSGYrA{?W(Q3(Gq> -n3D>QwBm#y}45UW?wKu_VQtu2W*(hLhUkc5VKR=WxQCb!uvs>wnjRHWvl8c8rrxr}fe3cPYChq}WwvY -0d(hskL}-wC6qR;4-)4y}{5$<-*l?3So(afeFJb}oabWodS9*mi5^w&-thZ)zfu_JeFPiC<4GYUm00da9_E -6iwWvit*HA@_T4L3X7^S8Ci@HthIckTt)z@^&Z^#x1nwxZeoK^4>aFUk@Y5@ckg750@it5_T!T~!SR* -iJ7t;MIn0Y^Ncxmea;QrJmK!R%!^sm)%9PgOs&}X-2owNWCe=~8|HwC?>3Mhisj74)`-o9 -7oct>vR6V=p`2Q+SRxLM&2pW6a$u{{E#aeESDl9>(7++cH?Fy&}71SAcU7ouNoxve9CAW}E$6=7~f{cxsh>(WF%DO&OCuu!ml00pc)`ddz|uHb= -ZL{@E-i`S!lWv;p~{9locoL02m#U%OsGVF&N&c4jMs@Zkn49EyF3X>T%b|qRA=s9j#Kop>D1dSJY-i$21M-i -==N7B{775D!#4SqnJ1P!i^oifJ+udoMwxrcKPV|4?FtFl134Gp#h~h8F|!UZ}D -y)?A6|4w1Iok~6gfDKO;^l5#{{cmTTTFu(#OUS!Z6n>uh;P{7g%TnJQ!zRSX8$iCP^rdDgmI3=rk+NG -%u1yT|wnw>sgzTHZ$4cM`%J|t0pk?**2;g7qx1?Mt0JXVzVlI2d>;`)NZ!!d -F!RkRs#0W1nIPpN||AiR?@T7r&fVn);ttTxF%^xEU^6U^CZ)(p$wM;RclovSXHP6A_55goYg! -%(+^cn=S5Gk&QCW5H?&7TSgb}*qMlW!G*R2tgj&v6@=MhUkh}uEjHF_JEsfv2AFn&6;->tpfS@GWGmj -}vOa_=jWi>@_?k!$KM6j9(GJCBy4GEoFnGyeKc#$)p8v@egf9F>NefQRGG;tFR+T=4*M=H1 -e3`E^|HXY4!=*1_qn}28VYGhh6uxtI8$@)oTO2i&99jt&Q-j25VK^N)-F*EhNmhql#2`*hM23FZKd@` -{PuXhwrZ5go4m|4VviKU_ND?o$OvKB<|b8Nruf1XNE$Yva>yX<_xpkg(ax8dvRrUZbCD5+q3m3aLs}x -g3i7y1}W(2VYd`{gqKcDxtgMkHAu*xrT10&81S^NV?#}&r?$C>)2k3($FMswMqd54W;UX$EyO93GyXHr&#lvSS5^&{J?M%aFOecVfp4X64K4Whl|o7ht#MJ_wHEMalIyIn=+XQ%5gWzp(I(~i!e;sdWzEht} -5NUGq1u8Y|9tywcq6)+%nyzEDF$GM^h|^eNm7*CbP0<$wrXfR$$U%4ED4it(u_%%vR1xnrSy4i=ATLz -Ovf@%e7&IURADavm?9B+}`n0w;`UR+br|Sorx~tkaOF-@M2%&@V*Et*es`2sfZdQ5NcrY=Jzav8=4dl -uyZcYEOwG`00=?t@Y3ES?cNX|NO4=LfD5hKU2ExDHN}+CW*SHdqjpT9?eprgh7B}%_sVlHrs$B}J%BVMEc%}|lRn%-uWQJZhhK0->&{O=%fx{ct^J@+WLsrf=g&L^sYC93>pwfs+`01@6ub2 ->ht)6eYjT03i6Ac1@vH}229{k!6vZ}a4<*poFt5;xyjFrtBC#ncosU71qtyC_o7h4-ChIVsFuV-Vr#a -o%D1ghW#1U$cp!M+2_<-5&(YG07vu9&*n!Lix*C;n1`p_2h^xNh_QFX!!5`$d#RqMN#wcO8H)8;iIVQ -4xabEVlX$2UG7M5_D60D-a_J`u!}aeVaV7dAiKS*EU$Wz3@AJVKw3Mxc@Q-a -c%3wkC@;pCWG==rI})hyP-@z|8n -$|;mgK9>qJ&+VmUHZau?mZTu-p3U&2L!kqQ}BIZP~V`adWx1XO~JzXyHI&q -&LLpWiJa3P;P4h!=`yiihYq@Q#O&K)ut~tmDozqL?E(cV3pLVR_~x1j{r&(V6HWRSK!H*G0gr}uku(d -feo8H3gA;}L#y4q5#nC^br@b>@LM}hos0Oi+fiyhi$k01nI3vk4T~gs>;$f2^d<2e>%98O{JGXt#N=5 -V8{QZPuUyn-f4_M!L3h}F?gb0)xGJtx>LS3`N=j|>iJ3H|v{Jo1yxFG34$!yZt>tbJO3o;~=D{HEm>0 -*iS5iypV(1(}o!UtOhYILcEMT7AHc)G65_GYTXzWdbX1$R_6yj^PfLC+jg<+~0F%3M;cbhI)ufea_FB -`9ly5lgV#vkC8XbipDrRO(J5S>f2$zVoyn~2y$%Dh(ocl)0dPphJpH;241&g7KG4jZBuuPB-=(m^iuR -GhFwdEQXvrY@*qr#v*X5t8dUdmkug``t2VcW4@90T#6AnXo2h*NETo0Hl#s_V*YDfV&9raCSU&i4d!s -v4ON=e#wJ1HWr}lRqa;ucxY{;*QxLGt}2P5{ZBagBGJZ0XG`a4<#FPP6=c6d#12M_5`K9N>oM}e57E0 -D*QJ}q(B>X`znj}u_Ow@9hZMnQ^_JDrm@~Y!<*m%aZ}K?gBi;ZrRl>x*`(-)MYDG5$*a6|!PH^L^L;r -$1yW`~`$HbMfmLrH#K?WfLTFT7C#hBc{ -L|Cbo=FSyozR!b_tae%h_EyB{E?sj>TbW?6X7X;tqS|9nc=z_qRM)W%aQxu(viPai>Xu{@$!DVl{^M> -BS8pE%!lk{Io+TvguKmb?Cp2+>H`A2gL}ZDmRC2ns!UL(|%Cj6U=aYm{7BVe8;hVVTL9!aqaU9o43yO -lY#4OSh+o5uSw3|1lQ$(&VzJL#Wa@+6k&X+tM99d>Aii$PP;Bfi+unGp$xiW&jUm#@aCnN81o{o3m5> -AS68qp}qnA&fPm=iF|nbiLFC~ZlliewF6_DjHQ;ZUI&3Hr;T`Gj5 -%Y8jUs`+$hQ7pGgL;ecl`o#HuR2ULE88>JzI(0!S?+zU9g)}9k&Q})wc -_JF~4k$UYsR;?7-MruC7l3gYZnbAITgn;I>cVVXwfQRnw`_AqCi%g7rR6E?FlRoFl-^-WjXgQkP_lAu -|ri62c@Lpr!0xd%U>*c{k+9}^a$>v|6+j9@9R^ahruqjDEW1-mVIS4UF{#cdW%8{y{^RiO?VRebbQtL1yD-^1Q -Y-O00;mj6qrs8Dbuo<5&!@WHUI!40001RX>c!Jc4cm4Z*nhVXkl_>WppoSWnyw=cW`oVVr6nJaCyC3? -{nL@(f;ng0<}L_o=U2nYuanB=~Z#;M02+6v7Kfzc{3h}ge2A!sUt`$>R;bycL5TVXeW2mc|FsfO#+Mk -z0WR~gM;oL_2%r|c%m-Gr)QJfGxg@;>hu@&#M*Z(ZQNv2bEn#V>ZR$b=*NzzoS4_WeP3X3< -jaY36{Mzk0#Amrcn7zl^vw9zW%vgZ16vw=1V-i&Wke1GpnM)=+eY$x?u -vllyzZ1ZM6aAMX7qHN9x7#@k@~CTs~BzG*vgW)~Xw0P4Q@AVf-}D$|9Lo5T|F4UNLKzx_D66Njfi*r5 -dOexKd@Vt~cc(&z!hWP?}5&U2I5Kv%(l<^I5qDV?U`)Ua3fDsxWb4g*@agmCoWntHBFNUn=g{cWY#Ec)ry|kMWd;6V&v8_qRw-W*QC;)lu7WO&L(5x -iFz?S@uxY8eFdBLbV>Zfcq`g?1g1ACg*6JlbJ(eZM$%X%8IxT=_xJ?_A?O;;q^3qy*37E34+>bTK929 -+Uwyb!qsb@raddMtn%sT*32UKgyoLRQQnFm72?#@~LTBX$jDx`C+0E&D>=?ZnUyScQ5%=fgyUE$@tvb -KDQ6qIdy15&lez+LjsOt|m*H^b^LwKAqUd5!$E+yA0o`K{thbH0jI!UdF{t4!_U@(o<;9jpp+Bi)rn0>3t96mUci??H)&-TuzI`}-H0-OFCs?GjhZH8b#rE@L2GZwgo)>-fC -buOmy&Pfh@r#p_4ub^&$Hw|&>`G2n^$^n$OE)bQ?Qj9m*kpSElf&T!_gwEk~-m -v-d69;v@mOmOOv`~c8_#Yn=Xlswp+`6LUg>4Arxm+u?>7j!wznhRpu*Vgn~o1Q?l6~-(C%V{PE@A20! -j2)%+{5kj}lQ*XtyU^R*qEymBxpWRAc7csw}%`nPjRpEh3_wM=Y;M4FLfu?3e%|CU~_4N{h0CaN0P -m5GuW$8enJ2+^5DmZb}hKm3&754$)-JkNDmK~QLKhaE5z5i{{$$X7$<)H2y*nWVaC$<`=>Qz$17-Dr` -@i(ah|NRq8aC{ILzxKv121qF&Td}+Qq0$Co)gP@7>EHXuA;y#j8ikPXWc+`GD#%o-GNfd^Z!=b*E%els%~>P^YszXU|52wEv;oTW{>5MYKBrYs>m^x~RxzD3W31s`9X0qQ&X;%tH} -k5B3<^@YHd18B$GmiqA5RjbodmHhiciW7nQ32QbbsrWT0%-IGDmP~WLESW4+^dP60j(jxJVB -(F3VYlM=(|Hb)ES5u-px$bYvCT2?K61xGuPs$t&aA1Ku_YKF$!=k(v?iTVoMts|8M!DY -RWOY3C2CV0J%Ftk_8Y;?NMXcbD?zEb-*pD4e1`UD9j(CT7Jn8Q9B<{-a5z+^j1JX4ogK4N?Iei4Lg}J1!Q7o?a{^ -+bW2pU6^yIvN>|E<^eTG>}=;a -%~8~rs#lopudok5bY -pCseK#C40a(?mKRH%_JauY!P0or7K&obXsfA1I4!h6+VfyEGvd`#r$P@7B$sk^oF&|8Zet%hf$~7Jhy -h1%5XF&q`*5$iqCJSv+ridF90W^F2rq$;-Z0P(`o>BAb@&H0DTCglQAHWQ -0#?3wu8=#EtP9yVVzg7vO2y#9{NZfb)AcYfe-xYba66&tlcd_EUZLNSb1iKrPRBj3mWosR0Pxj3QJ8JwtPWtXCtqfgm?!;YFNITz72T6Q4diC8QElO)?lkyQ1mFSF9}3%H8D!6+t~mx$-5d37Wcu^#P04gVF8jc-)H3aH(CPA -bO0G5u_#D&vh9FuQ)?z8{}(*A2}#tl`0C4V^pjt&Qc@fhE7rk+h&rajK((ayHW*76>3hp2%LIF?TX7h -AhbYaiwvG@r{a69*7*pDgWEd~;Oh>Zmr?Edm}HdZF6nPiSrFV7ZNd(MP~-^7=LDogHMyH>ZEvF_-DgB -qPYS~P+DA2pEhGTB1PS>ycdyebNgZr<&~TePp{6`#%`WwWh`Q2AG011mgF%L1F_i1n-Bv;fu{oDw)rx -GIz|7_=eu0eW|0){3v4?n6*&0?zh9&Z?GL^RL;?k+vDY_McRNc{q_*A{w;!}pF2xC$xEheETOekZ70b -9c+Tg~TGD;!@w$H)Y7n=^!)hy`-*eIZEfzo~gN4jVVdcmCD)h_y<~t)Yw?FCFk`%}8pM1~fGms&0v{) -3x4E`~w;QQ6CSFkIAiI@R`U0I#5f*)7uP~q-ZL(ZAML$#iX%9;AXZ2vK9`x1s3ouxq4giD{UPz-jR|0 -+fT0cClp1pZ=b^D4y4ux-G`(Z?zN1l>Bwu>MUZ^29@KYIAS!g6dh{{!3nup1-KCp -@`mDC`mMJfn+P&4`_K;cywsI$TEfkOK}GPa;AtPukG;oe?^p4GMl?zNKA(W^Z|IS1`j@F&$!X-$v76T -2s3mG_;GC!>q|UqF21G-*-MM@)IfBur2KAk5M<2K4}Q>M -OW%iL2u-n*J~FDiVkCMX?Gua2G{qoEb)2K_f8@wrTIwKAF=9xS@yw+jazuQi0|n7M0%oTdbrS> -pq?)ddf?RPAxpwc)t^MbCIJgM#7)PB<5T$~PTmp%MCgoj?ao4Mb=KY^RBaZhFag42ReG>aed4(M0Oy> -W~jTysV~3H4kAd5~4*bMYBbanRDAnig0&k%^BBxcMQJKAmnQT`T`{zQd5(eSyH-eVH=qN)3n54wYOcL1#vYqCU)^O-IV4Yp4tklR?KM -pzOjk)4KCFTT#H(x^kDOa>l>R!u^vO!Ur@M_#Z%p4K&|c@eb>0n%W)Oq*~CiFf#Pun6|!(fxV&n<4 -I@&!E2#9Ui>B*cLQ&nwfS<1)ei^7fkPsQqrSQ{%f6aaS>FX0=iz>vlKYB=(m)-S?PS(8QglD#7&`kJ8 -U8wHOZVK{Q8!klzVpv$8TE5?*+M~-SP*C0y`$QMuv(kacbPC4;5ZYwNk&`78a~UTAHHD?0PLcC(&w1- -_5pPh+bFZi{5w!b3c&xLPBe_*r>7Itmr~@Fa^uXCr65Y -;-eY?;GR6jy9Rhch!>F%0l3>Vlm)V}?7Fil#>yH^;wdBssnx%z3S$q4$0Zc})SNUk~MFUyLJ`__|q#q -$U2KG8`xL-qM`bnQw9`^`+silwi&)a%!+uenfc?ogm!wd#}m;Am^SqG^sRQ0AcMq5OU -xym&<{Fn3=*4^Cc%5%=XYRQpQaJxT2wee54!tCP;X=m{I{+YQBcOYovgg6$gmk|4dK&uJ*w@G%C6=h#eCyfFpo2LsAsD`(YBbD -mMZ>+WLDFyz?`W>Xf;npVGw7Nt?QA^?l~f=6kH!e?aq{ohe@*)Df%?Cf_Vb#*RhcIvPMnCWPd@qe|H>E7|M23Q^7V@^pMUe}dHLe&Z@>H>{a&vceTfV%1dtGiG%b)K5{pR-eDnI}7%lo^VH&;*h59Q76&Gp?=d6U2S{NiKR7k4*LH`(*|*M -Ggfy?=N8Q0{*!Prou|{{EZmr^h!}@2>x^VQ=p59`obFyZZ-y$brju_YeE~HxJiWPuFkDj~_JRKVItUf -wA6w$V>hFRDSd2r^VKqImEC2{PXhc_O`s_w~yuJ_2c!!U$5WpC;9UJ?&;y?$M^Y|zj^%hzvefk{ORi9 -U(0tlw|{xK`K5eT@(!QM(|!5w!_&|AcjxoxRNdbE_;B^`fm!?M;rhBf-v9LUx4g06l@Ist%bTma@^Jn -3=5Y_76Y*58?%w{>{X_Qu<^Ju>PapW|{oUJq9Paw*`r((yk8}8kZ@w>IUq9xZmOotIT|ea0eE0sx+nY -Dp`RkiE*LRQC+=5b`lt7|mpMZIw*1SB*Z=(O_ -pi&dZ~k2V<=M-Z&%Sy6=ilXTbEflObN%*6H^00~2)-@(R1a5oPapEebAUfRfBEGpye% -U%hz!>2U%2(gMEYHe!&tATM@#XhlKYLle`~Ky3-@bbOc`2{1uRl&Pllg0t{C}qSryTN^`<%(Q*H2e -Bw~zbL|D4PFm^XO)w)}kc*Xvy7H`h0bsB)ECyUOMBh -KGZjSQz^}S5czxn*KG|L}d-TmurF2Sqp{?*M-IrLYz_xBH%<%|2rCw}^;XW92~v*R<1!%F%7RetlI{a -2oU^ZWltqw>i`4*cqh#mcAp>EZsDa`ht%>BpZE-~aom`~r}2Z$2hQ-rT-V`*54jmloiCPI7LKoWNh+y -$5Vh*KdBlyT85v%LmQ*AFtkB-CeUJ57+py?@;>%}W|M2@4uU@}=@x}MAUwr$`4=yn6A!o@b95eeQvCo4)+v^|wEK_44`u{NdY|zkmKR|M@o;r -PSjx4X)Aj%VN{BX*4tc!B@L<^O1kec3EQDW$;~%qh7|*=Vk3jzYOc`GMZ%%the=x{9up5=Te$Z5!Mxz-SH1jf7Onv!SQc)9DGEL18xZaC!tif*wH+aKpGg*Uf^SLC>IP&@<> -6^sMx(^sMx(T&vQf(xcL&(gPS7@MPT4bKFMHM$cTRTr#>hx;MHvx;MHvx;MHvF4*bT>Bh#gPLE#qxGU -FeVOKwhB=p$75|1j(r$;TlpP#$<8xP_tHQ$=L<7i63)S7q&aX -*4i?b2UH3UJ0{f8WFs%X`vXn++vfR1bOU_^pf$fyj$aTmc%cV5FtNevMWnAWqanqMvV1@H*4Q~1iBb@ -jxu{3UAw7Ho=6I>9OcJ8e>-E#k=hma%NI14{6uo4W(*G+$MM}^VkeS%vpa)BB$|7wmO1Q~26!@L!+mr -rz#8)+w-ZZ(&^u*Vbc4QG@+Bk)_AH{+Sry=$s8mzoT&l`~?P`4YDA8_h2Y7AybM405Z^7^X?)AG8~m# -x?vgyMbBFTcI1<1lwt{aVH+&0Qn(%IyTg?p`JE0o1m#QjfR=lB+CU3#?1|uyM!6xE-_MtD`?!A>*ly= -S)#&n;^zyduZ+%JRt?EavzDFt%74iTVsNZ^J|K6l8JQbr^NyX|OY%zGQ4_#5nw~z{02HcVZ5#`mwyURo+Ph(b+W -Z)7`lDhGMqOk~eJfhDeRv+3?S*;wB8^im0+c<0R5^wwz2kbath+zX1+3;v -MVAsmvfLZ${X6u-K@ASa&I*!--dB5-yjB7UZ!~we=4F~KvV8;Ptr?R0ZZq#w3j^O~K+0bLsWA1fp@Dg -ZogFt3OPn?%S*RZ+`dYKJ9HLExcD0L$kXwcBc5;WKRuFXptyd*F=fyoIb4-(o49vUpU!7&@YzllKN0v -n6hnEl3_XG0G_5w`bRgO>!1Ex=`f%K(=FE^z_b&=aN>;4#2sfX4uj0UiT926&9qK4d(Sg!Fts>w){~dy2YOa|f|Y=&1sDl15@002NPv+5BLPMNj9}EVp$8a= -zSpfMFKL*_Z0HGA0+JSBB)~|3kpLqBMgoik7=iOQ*nGp;XG4#%*R40!4XhCF6;v}jkRk9fnor~0Ez(=11JVi#HeM%BdzT>GYZ -N31(E?I14zOevY{uC3^r*6iWMkUpjd$-TritP(`g3HwmTzvNq(RwkgPxw#+nU1fn>#I;2yJ~Cs3?BP3 -1u_)0>$c^?~LRn`GKB5vI5BpBrA}tK$3{I5!f{mJ!Ul_)0>ugxVbj^r11MIYSljmVBY8=FpeK;5K(YeK3M4C#teC9|6f01yK(PYF3KT0)tU!_A -wAGWZ4|quhk`+iop|YVTkgPzmVzw$!teCBe*{X2u3PvgzsbHjnkvh+Ho2(mHsbB>{pA9|1NChJmj8rg -E!AJ!oQ2N%uNCP7cj5ILPPQE^qm*j`WH=SnCOd5KE5mb+c644;?O}h@{;^OPq5O!O2ce5Fw($C10xNL5UpgxwZKRNBM_%-=mADr-|IHvB@L`Ju+qRv!)!G$( -!fXqBMpo+Fw($C10%>B+0X-wG%(W6_+r9K8dzyyg&-;$dV-M#Mqu;V&=ZU_Fw($C10xNLh&ssG_v2hQ -cu5B<9jtV)(y=EUjG&7(=x{^lYDhp$f(~j*Q+!T%))bG4WkFpSccGWSOB(c}$vVm~b}-VxNCzVwj1c) -{!?nOj2O}MfbTHDvNRPd43trN}N(U<)taR*22O}MfbTHDvNCzWW{cPv~MmiYjV5EZ)v@DGaFX>>VgOv -_eI`*W4kq$0qT}PdXUsV5EbQ4n{f{>0qRTkq$;W80 -lc7gOPs57Ykm}!Ab`!1SJh|E*pA+5ovI!TaD1X5j{5|-zHMo!AJ)q9gOrd9$N5{4pur?>0kvJG8?0Dn -xLsPji%EKnn^t@;SQ*%p0Y(NG8DM09kpV^q7(qSE%}5V0GQh|HBcs+mF1%!bl>t@;SQ*$8^pf1c^aLXVj0`X`z{mh -21B?tXGQh|HBcmUCTzJUfRO=41{fJ&WQ@MYO$7XhhjGno -cul_PQCoWP+6mRwh`P*pmrHCK#DuWP*_iMkW}UU<4s98+w3|2}b7TB^lu7x*-*3Lr<_Wu_ve*X;JA3M -kW}UU}S=k2}ULunP6mskqJiT<|StEk_lEOSeamDVoxR*A;!*zo?v8xkqJg77@1&Xf{_VECK#EUmzcpz -CRjm2%!Z!WlL6I9e}=m|#1OEi?i2Gega{075sV)zS;ps -cpFd5Jl^WPz0hRu))U*pmfD2pO`WCm2~^WPyb`%EF#3FtWhN0wW8IEHJXb$O0qeof;{phU(i8z>=1n>z2GEKN#OQP0&=DM$>5q&7`4cVx$wbWkV0 -6htb36v3ZGQIG*DgJ&m45Pp7BT)9LB-bb2~HoohKgoE}b(phwVS^AgK&JjV@s20eqGLC>IP&@<>+=~? -MnxmKk|rAMVlrAMX5<|UTlc#d1?+34Bm+34Bm+34Bm+34Bm*|=7tN2f=pN2f=p$L1wz&W;?n)3ejF)3 -ejF({s>s&~wmp&~tFDL61R?L61R?L66N#EW_~}chYmxbJBCtbJBCtbJBCtbJBBhtwoPTk429~k42Alu -G?bW7Cjd|!3r{DN9XEjS{*s7BWHE8XdR8SlSS)f(K?!RN2Kgz(Yl?yB;(|ZP9m+7NOP9LnYRj0Eju5I -L`#TgrrZPSH|8Y}96G7DPU@{7J(!*TE#u^iitOW%MTdg~R-}_X2^?R6wg&29AvQ2@7O=7)NOrblAUrv -GRJEOVvW$~23U0(PK2FS9kPV!;!3p3CF%t3aC7UxZow#wr&!W7kG9-$&p=(B{qH&X#6nLr=Od6!e(8` -QRF0?C2sTl!6!PA)(Cn7UrmI@(kA(Awn!BG)3Zt@btccR*=_NVUMj4Kh`5zy%i{aNUCPSojBrBREo+o%wESO9BJp>;XezHXMYbRCe-T!B(s2gN{UOXrYEZ -4W;ymOABeqLL^r(xf(ZArvMak3?~9Nw4A_B6#~Y>eHaeSu$YGRFkG7vDs~VvRI=D3AdBaB+9FIW=9re -9HWu4%~pe}_Fz}AVgk2aU)v^*d{sJMsAQQ0(1()Jr@?VETuijucCT5#F243c^pD+S9 -TT6&TvMCqclR(PDb6)jqFhNh)YAuD-o?L2^V^r4sK4nlbE`2GQ^HGHRQrV6yhX|4Ry=NMw@2Um2f+hg -VF9)o{qiBP9o^^y7OdtN91wHeUc}$s#*tB%tP6xybo{68STq-Y9g3q>;u7Uf&G^zMbni|-u5A%3f&X< -8~7#lg=peR2@^0HZq$%BttkP^;t}K+L7Yi?Et`tH< -?2U0<@V0yNSZR*DW{6g)5V*Y(JF52<^h9I9sjx8t6n59F`5P`gI{AQed;pmw#V -YW9pV73)Wt%7!HkO(&k?`)VMurCr)A-4p?a{oAjKq1+oag&!gKs4B_5e647;}jtn?#@|fCu9mlEQd7& -T+ETGYu_?Hh8EjB>p2g}OC0&DA|9E12}vzuu?=y<5xIlMb>fhaQDfa4R#u@CM!0Txn2P$Oag&!=m#xE -WAypXab0HonL}*SP(n$L{0YX86G%~(M%xtRcB7`-#euPx7+@ur(mO&IopSlBTGQROf8<^WjaehI?^#!-gKF;o$`pl!1)%r}m@khn2Yt4`w6(ZMT8mqJR!@Ek!tAdX$9klvkjV^(o3gG_x48fxyJ -rpGEGG&m+{2(|xbtp#GuOLckTzCngv>_}RbwSp}igvxmWPY*rO&b?_SLM!Ca3O1#JVX9!qi}40k#Ta` -btW4TqK52=O7=(u;`R#{0F#=_081SKSN|AuQjzfRU{SKQ|GwUm#B -sTJ<32*L6S3!Wg(|v+SXW#A`+omO$5deVL^H}0ySeXx}Eq{CDXq#M@|4z&_o^e&UT=p@2b`f28L%u -h%-_xmF%(;@0O6AW<}<%Q%HV796*();vuTkDz@1V`6iJsH3ycB#}xpp`0RjuDmECx9<*Z}dtB;XN$Lc -QA{14GiqIet6!uV(#2w)jMOHyF=?^EqDM&^I@8?}%-_CbaDShGEv+@n9c2d!t9I#j?TCqDbVoEX}IYsqZ)f$>RyRO1EcK-1I9ItoRJfGI!cdK)$UfD1_gbj>z%w_S49;BwjjxQ^mBfbm-zX642 ->YhGZR7@F>^uZH)N;a3JxI)w9q0dOF5+@Q55`@`*F^1@{*VeREQ`M!%e{s1jDJ$WHWK-L*a1K(tA>$HRs$#=jRv3`&^ -H@1W;%0#{>M8HP=!l_(y%1sPyq-b1XRl}4PY7ENU{=%ty4R&u)L?<7~HJv&`3zb@G_kz_X^Ib7zEFKB -Uvee+WhpMOMIc~>J4wZVckEcA%!8Ecp4ZgmE3@j|@>N_%mLa}EHB?nZb7=6vRzi{ea3tF!!OhPZQv7? -&`Ny5C)PzGSa6j?W?!lNL$Qjh=#!#CnhR29a!$xA#`Ud7`ozM%TUT@jC_k>D)060krm-Um40-Hob3Cl -y>o6voz-U3IUdoE&H5RPA_^XaX;o3f&GdyN(eg7$7{M3a55mA5uWsf~iGFv*&z}!ennp$Kk{SeGB(N22Jee+2c0Di`jRrw3<9D}FIz_qD^K#UZI;4nAKGMG4`NfQGl6vOI|)9z -6B>NrtTxiNwu#TM*Yb`)EJl(Z3DIRvY+VVwHz&RT}b+@^FZOas|OjSDXk352!<$sc1Hy(vF^g8GZ -_%4XbSXINT-4~$svcht2ofc8FjA(IQf$NB}p!%n(1VN&R-}Dmc@dI5Jph3P>|&-7QQGL5j@-JH+S7DP -fs#3P;guZ!9_Z-Y=@#;HYxgg846h-5tx2I6o4V`QlDzR&x_zUsMEy~5naKdom^&68B?fOC|v{{771DG -Qu*XksCqLd)S)_MZmz%gF?FxbzHk}R*p;|QOl((7stxUXZbmBDP+p|MOL8x8aH`KDEuRo4wn;Wf07n75;sW1JdM;J{Y0{i3Z#kima6yV!6jau_nW-Ls6{HUvN --glOQf>WG}s;${S?gWWC2;fAghUSVfLXZiv6nOvAy4@dv(f?3O_ZduaiRep?$A7YiRZn0c1V!bnt3N2 -XZFf5o?W%Z_zC>uJjT`6-&-YE(WXCq -$&f%V-4)x?grpkDEh0D)gCzP<{y(=0w(qxXy#$JQh{{#QAe_?HM8raPw=I@R^?;6UjZ@Hd!2>ddXFhf -u;MBdEtA3pcrOw7pELkU%2*A*3U8Ud{A4*49GPL|Ey<{<(E+a~``3`ljPOW;OPS;dsKvteg4xW!Gn^M -h0!xRup>SKZob=DQ*Ytq=Y>m0We2WU%F$Snr1>R^~jDi(9cX+ZfXS~FE^*M06xivJ6fYzFQl@N%f>f+NB*~h(Z{3J3$rB^e9-FELU5bwz#0{XxYy&a5XUb*WPCQWeYE%mv ->a$hFr@BkXj3NROj|In5mc$rW;414Z`5Nb~b80f6TSvqdUQiT+A_61lwj{4s9fjE;H*qY~0lVYM2Vj+ -)ooAsuk87y?$wy68awDi|0UL!07QvcpqH37uI?AoW!juN2~k51-4)bVyMH1#5useWX-iD1mcY|>Rx>bVj-162m0X9Q&|@1CAURIsngg{9!Yk3X~_m`L} -w`>X(z9y?zOn&*gdN}i|CSxF>*)PhpD42MAl6@Ee2l)C`g1jt6sr;g-Sf`?vV -%E@v50e(m_?ARyl&UH&((m5Vjpq^#t4N_uFHxKm@;(Kpv6RRoRA5$(=*R2M7dm -yXCWQfu97AbL>2fmP2Xcf&6GbK%P^CDkcppdKNPgLrL28IRr>;TWt4r>nBCaaHL?kqool}Ql)U7xgiX -GaGl6fVuZ3hfcL~jwL;>5$$Ibr#Wrc@n|hN5TMU>j^ajZ`RZhByn|4Mz!k+TI6<3zYj@hg0`js!lF5G -ohWzDLti}rWBm6?T3?L3D`QO$jD`S>7j$s+E`>RHE!qp+m1!yC9r>~hldtQ(RP=Klx&KP!&{$QLf%q} -ffR0{=QDnz?lrnXoK3z60nk#W4r8m{zDn?gDPfTILMh4=*XC9!t~0bZJ5Jq*y4O(MKZev?QRb4|A`XP -z(HT1CoD^A=TR;Id?S`q61BCRg`J8bqb+05Nu~S+Ze!68Rj%$H9Q9fbhP|Tr2VnjMaDMdMN=r}~I_&$ -&B)V-RrNXlh$e#bDbu8;+)jAn)7L5^ieSy-~sWhxXSh*S1vla03RFLkdbmI19WS5E5CEx;t0TIoi3Rp -Ypn6A|#3NKrf&aSNArl`5Zgj!xaH4XIY9L@=oiQ8@*I5J;sqDSahoE)XRMG-J2#Lh%NJQ?*81*^23A9Ctm3w32Cf6QM_g;|%Fxbs;u^N3O$9yFM+ -cLl^de~tacBk4S3-EnMC_v&58*-fF4cnm*43YtoUP=17h?^LsKVvdcV0Fy9=Op4T>v5zGldtCGq@}{N -(%AvEU;D_okCt9(-$Av%+2-c3a@zy|$)3c$J0m%lJRbpK95@JTv67QqDnun%x1WdKEAxZ|a5g`5n4GT -z`P01me>84ofykGJ-6zY|>a}atUrdDMvhZ0g!BJdKZKV1p=seBsbQ*jm#tY;l|jteg#g%apC$hJ62Rz -~T4PWNQ@sNjONMs>M}LML`RdduVlfcZ2Fc*uv~QW$Gyq(YTxwb}>u>Hq4goL#LRA -P@(|a6?z&uYMD}Q6}_bB7`gIJII_?oWX2_rgV8q1VGV~yjD+7pYiM#69VD@ZyUZIY4lys4DY2>)P8s? -`)s|#j^pdgPNP&xQ%Jw6-Xn8Q?vh^}Ka!@;?ZW0G+y4VH$MH=?5M~goJG&E$AG-tg2ap!-vcp#TbS?3BB$Dj~{Ra)8HXdOwsdH*}|S*>R -wG8nl~GC8b?ELlOhgk&a4pWPFG;1O{8%#e)vJ^Zo`#%spq)L<8*0(XcJN(LrS-*cF;Yi=sxa_XCPbZ% -GpR?ni9?TJm70~T*xW8#Dnal;`GhKWpKrWm8+KAqGXN^isSh78jr3Wg74P~PHB33eyMx)u5E?%AW>d5 -n?ox@EUr!x0$q5Nu8eYh$bCRI>MkI2NW^)+@Dk1l7I7g;`<$Gv@yy0S12b_29jUHj`Y`OF_bzA!p{QL -2Dq88-<0dcZ%HQGzgIc=6%DCVxqm9}coJn)ssB2rp#mptaRLwa~mYMd=t9cs=aksPyX-bPuT5;K0F;R -^0RyI}KMnU1Ok&*Le;`et1K06K|xX-wID#tHUsoewAUGAI%#8R9j-Zv#4RfGn6k_!T7Ook~GQ^gJAQe -VQ!4G*RF8_|_Ax$sop(cuvPD&I?8M-7RK`}Bpb?7eF-MSb{r7Yy%rq1t7p?ubS0tzqD%u<@U8;Ls>vWE#KM!VDs|_8NFnj|nzrAI!b@ei -Un$Mrbzf#r7lztHfS5FcEF0v|T$oj( -jWDD2MS?MJvo0m}cTG($!y|7U;RB>K@Y$;wD6*jIiKm-|~pjWvl(JG=>Qk#Ze9lm)~Q1@!|G#FSY;!z -c=UTUB^IOc(Kp82F~E8@o@Jq&UkZ5tm_{*naS+~ZRBsx$ge5Ejjj>W?XeV7$LaL~CL -(1?1QPwm$xEnvjky^G09WL>Bv3BmI}Q>^0n@F&jWR@HKbS$l~FICi`A9xN&Xm -R-VvOgEJR18t~^|Y=6A$b$F7Gw;@t0J0wx!3dK=ZyibGr&w~HhRQyag46O&GAHI_=g5VrL0C$u`(Td4 -Z!->7@F?brvgB?=C5L{PJDW0NnKu-mBq&XdW5lA3w6Zc}*D+u!QDBqC&~CuOR+axuftY}t%6rwMNyT-Q=n8fx9 -#r=#;ak*RGNg1Hs@X!X?2ziq$tQ1mF;CZg@kqP;Nx{FARg$vjexvTyI2Phl0j9Dy$`W=NTx|U=uvg_J -9A4!GdQVPMa!(~!YyekE{2Z4&&eBF7nj@ei0VtIGXWf7f;!$7~LcuATRxHWf9LLa$+&B?v?cB%Iz1mU -*pUjI0uL2vnI}9$~x+13q^s=DI8h+6CI!OJI?N;^oan5h@l9-$NYPHz2a&7W2lXnxjL<=n8P(?jzGGH -Hi<5ZQM)+?!`32&UK?$ssXiR1A`74YsVAEtDsswP6^eo{SjI)kvbh9ov^b?F2u5Ip@cb+4sqA48l(&? -y%1wkx9L*d=(#G_hAgqoMb?Buq@da-*8QGrmyW>ynIv*+M;Z1yK|eku3lU%DYRTrX-U?7{W9;=nBqFW -xGn~uAP4i)xB1|1F*>!fD8%hQ&9!G0S=^MPTMJb9Y`QZR>E540=kUSmvj3!>Rt^cHkRs91R_;-0d;tF -AZ1o=wG7q1xN7i;eY(I#fFKQrA=|Du3hG|VRB;(44SJs!L9(OKJNk~J!<41SNM*3%f=ydOmS| -;c0Ei`_iCi8V;d#~@W_=aRDqyZ)qzx*Qq7=5o}DVx8-BD+xojk%&Mo$Hom*U@Fn1Fh*qyT8F)lr}UDkQd$u`ZgnZGEwB-LVIN?uF4c|z-goW5l2y= -_Bv2C*-*pv1-K!s}qUGO|ciO2?<#eYCVlh5Viy|MbGX`S906_VcrMN|JfZY3diI<4ltALtVt_kp+(s=(FzuG-E!aYO@FjvvGj -z~!NR23oyY0IDl$yAxL{h})syw3ZDm!S6<%6!NVDSDK)r;tTQ5yb*Re#oTXsiIX3ltc^_SnRGYLFp4p -4>?DL5mddAYB0NkdZnmPC6&ITvY;SJ8RW!t)=gx2DG}q!rAn!cJubY2F)kZ)BVymdkO;?qiG9Ne -|l|x`Df(W&C%{fehc(b&1j+?y1b%;D<%~k0kpRQ7S`8=UOOdsWh15WM|mjydjRo_FNgI9zRl97+KU1}sYuY{DgNmUv_$F)?C4m>vBsnori=AIJLp!Too$d?K)NZh-Qv?+tC@>*ABR^ -uX)nv%W5$5bOlY@MJ|_iB{n7%^2>b(pf(h{i={Z(Q1!wERQJhqX*mU&$P*#S+9sv)3MXp({&GaAjpwp -QQ1P!ACm;yh1QO?jN1{J{da9J^j$DR3e -ZR$UOcpxSfP>?+-!Y)XEfXfU?@)9D0k0jH-_mtK}uOGXX;tteNe4BVJWsjTPyqL=6mzq{aI$gxTyg`KK4q>DC6n? -VRv^(g8rG}M|3Wwv5~>ayz}Ds``+v=#5`F?nI7C3SKREwm~WL5FtTs_>v1Z5^)=uh%XUMfQGwA5`glY^_)4 ->h#8I(I2fj^CgzG&T-)-obz!)P2UG2hDsU)0Pw>a4ar`3znwb4QId=d(>Wt0BXy2y*Tq-8?-fg52;i& -A`&BzjMU!!+$MHTs6q2ee5AmKvf2aai>|Z;{ww$-^j^6i5$w=sEloaWyFh)}Rj?+mzDm^RP)m72NtHG -sUDJYWW6xyqMTL70;}#sC($&7>C) -Gkp4uILIz|*yiBv_Q?aZMV*|E`~x@UMm6IMe%HsmU_LQdb2mfoq5jh@vVz%lRRL#deci*mXh3#?DPDh -*Lm*&I9!&_|!nl;q{KV1-TnVH&h@6aWAK2mmD%m`(hWqtfZ%<{Gq{jBmOvH`b4c$_`WMw -}2WL8Sz*|X_?;)mlGr)T2T>Cy4o)v@^D)%np+VoTd+JI}=RsubsKbz9ZNS{yZtQdFII-TZI0UKi^7-Q -A|H=0)GMV!p1*x)*cR=3ob1PwT3$RL|$-$8z1=m#t`)qMsO3wLdHSZeHA%Y}l%)JN31_Z(8$34JkB -3D@F98s26{2TGjuqSyanMeP~lJ)N-`cec9f1(BX@-H{w;&)j}T>ti(+zHeI>gtRppoYAb#|y?%NA=2{${y%j$nUS1xaUBCTKwN;u{XO;czNY&lFg -5W}^RkcOkKPti10I!cPk6x-Chd-RYI=z0Yr9U~nK0Cg;5+~=E;!s>1US6Lby?J$bDK6ezUYuVY9|&<( -mQb-)=9H4XikE80yGChpQT9c(?(EXvD)V+q!1Y3`ijSo-^SrDSqC}xw+dpx9_WUzR<=M^-kfHvssOv&@^HtG`uKd@gtmkSq#m!oQO|Pil+}$YsC~3=Lz7q3Nfut?(Tj -is*^3|$0zGeD7DwpcZ+opZo`Q<)2QX^{LEr0FB_hNTvH;(ixiQ?boC4XbT>Hcyr+SyH_Onubv)c?-RO -P@*2w^V($pX~3{oRjXnjB@h{@7#=(nxl#NB+bv%|CHuP#*So8S-O{fS*dK#Obhy3^zd8t__?pd3aVw# --P^7sHyX9N$&JRKFK7+AL%ZDT0^c(CTN?daJH<}N`llT=G3`mCcEsGg?NR;HYxMv9%L+=^#OK^;ZLB% -cY35!z({%21ksJKx429BTG4n@qH$xtAA0eArj7pBt-}?HaF&Yy_Nt?0PP-2jjm^DeSVY^=Gbb*!YpRf -bz-6BmI^x2<@`y8A0b_UEZy+&b+1nltpWAqQwEn$>APkIiO?l<@}jR?7tajNYh%`0;(8@pcC->to*Uk -2=um@z^gC)C>`dhrIM(l?|I+-YD?aweR^0zmkQCl(?ZJ6_@z6?@nueo+=4*3dC?NJwKKWi`qt`2F(Fguq=V-DWs^3t&%iK<|Na -S(Nl-5)Zq)ERJ!(w8$a_$o-%#TOz#OlVM5wfCyv3$OX)5BI!ViEl(KWFa{~BzsMj7$FiO>k2os;aj}O7(LR7fOXP%)bOu1lxJF4wvFAr%1lmj@q890fNIcFUE? -7hQ@g&124+-F2u2q5U-F$Mh6i4tMKU?^Q9Ge@N2L=GHsJaN?SS@aN5QiI$|EFo9EZ}F)WSMvgHTQctcDxo#NnJG6K(EN|2g%od1Okw*T-C=VQxfJ&fQCT -|Hax9W=iBoVa5sz@C{!QeCD)8BN2}PcxhPD;XImq9wk0a7#AQ)5kDYi(fQm(`_%u$Qizz~;bc{m$lx` -ScyyRJgLo4sob;n~&_laTM1D9B(iGxPzN?~ikC$ -|0gusE`DWf&a4At4$2l*&v;lntc_@g1_2!o`#*kemZ+t5j^60aKGb107_9vw1V>>^Sa4#J(4bZ~&kcH -2F4IL@TBH;_)Z)34DPDnRfez_0+pt80AA$Bj#lgt)>Zxb#%S>sUy6xHIuBIV8%4k%`tr8l?nQMq{GEo -{Fbw1P}_FTu%fkVpDDd3ag9;Q7MrFim>`Y1v8$|F5fy6=|CHtx)6v-pOn(%5i*0YN|XC>t;*7{q%+K5 -cz(l6HZ%!f%(6mzJ+LBI(Gr41y-`T^nd8h##VFCPe+c`b7yqT)gBkWT!{5lUN^kTH{BR5-5 -*0wLk&QS1%Fv-;SPejJhUct#Z_&QvnYqbwr)h8aGE%QT|>W*kvC$vl1?kA|DOaR{Y%!n6!sV4Fk#c@EG{UliKROhB8>8#V0d|p#7dayrPm#_$1w`ZLOp=e91uLu@G&AjQ)uv!jp%8dWy1(Otw -p9EN2pMN!V$YLA#y3&i-EQ{0FZ%()KOK@}$ppa0JmgXIX -X#*Q`rLb7?xTk7gluY976+OLZFHR}^&p_sgr|8jn&Q!%wLqGe4|$X*g5#628jeBmEYFt^NNJIL5fngN2PNOUX0`=a=Pvj77aNnxeL+WiT|YfN)pTzvn6w4V^{9N4HzPHGB`F&2!UAgRK79 -!zug0nddo7D!kNhPKpw+P2Q)=j^FZ{xuEH}Wq9nen<=G|-%efZY7Pw);ohjU04GX!%d-%!AlC=LOQ1E -IB_j3NWg7O$A+05kkZuD)J7%4LyA0K|FX-J6eDe+S#kC}!C=Qxk@B4cQJ4go6M%0P#33?h8EV9Z7iVP -N})#ZAi8$e9Ad=dKghN2%hBgpI06-0Ni|JurA;H`H$!tCCi^zwE{5P -Di5*oQZ1r8nni72!k>>7C|D8^^GV88+t=~HbH+TD5nTOeu&($pAJbHTA!k&&xZ -%bVxot8Cdv!LYZUxK81^)YH#EPD!*3|yyM7+ic>@$LCn2L~I$t^)up)Gu<9baM$rx>PtR5gvAs -Z)P0iD+ArM^vAlDvjf|%<+XxDs<2eE9H0TgnK5QY*5VMcRku^=s4ZWgWET78606Dyi0^OBvV@vr~~`@ -!F^9WjPYVt7;8W&Fx>bm2bCRY=Sf_UGELF_P+%Nhb|+#R?3u6~fjfjXd(te{p7@18ceJGgR1koPYe}! -Pi6rP@!-yCHA-f3crg+(>^H-ufsPWUMTA9)U1=1GmU^ -48pb|!=d^81`6N19k(oHagusA|}{;6FkPiKZ2Pev_RhL6YuoPcmBakCnhf&OucJC6|SfojTX?Raz`Q9JbrVuXq?d@sAYqN0_ -`*x1-32}Jm5w9PCGb!l++w!^yZh51MaqjDS6zl1Ve(aXR?_2@w!isawlalZXbLLmeYZv5XyzoOCKcaB -!JXypa!9aXR9#0o^!l=mWuZh#^pYeeKzFn5gq|yb)@EUUN)=miu-(r)?QRy6klr|`Fgu5W2J0$IP1}Z -?vPv71i#u>WuOSvWPjo^Wlwt!C;9(fK-Jev7&+1%5DPFGE)&ZWUbw9$q3;6U5dkPcK4vr+gf8D~%2CF -nlR@g+vOKOdAI2h5O0oF!yL{5!mtd3Y@}>)H9q?C9|N_{I6qgc -{Oo%6)7kmY>d3w{hmOzA-@JG^yF7k1yMB3jeD(7D)pK=L#<4m5`tX0I&bgDPXQ!{#RL>8u4}%ujjyb< -5mtr=n>Z+g3cDr)DbmHlM`s=~0Z~9_AYsx#Skbvb>$F3W`)W7d7B?q~XW!dbn!n{K -L<*V`sdtDml&Y_w2^CeP?+5BuFcT9!TV$u-47JQL;sJ?V%iLw&br{vk#&Z#K%TZ5P=`A1n3cRtakkcQ -iy*o2MZCvyV?`?Ops{{HHxJKn0t>S_-Wnar4-l!RMQ{)em>yY?e#?Bxa|dJ2lT{QnO~MA8l0%E#^w%h ->iA83T+tufa-_3c@Qi0zSB<(>wcX+tnH=esr8eZc9PGuZ2U>H?n^C$ei+>zQF7k5<;SYobVghz=;_iv -V7puww|bGvq*}V`c2h?B>0aef`k`q3AhQNWQ7@Dw>iK$Oo|Rq|9UJSWENivO#TH1N6zi@e_$<}(40mx=r7T0^&|&?rE&EMd?=TtkqMgZ<4Q`dml<3x2t$tX)TtsFO%x+5LN6{%t(dIBuHTN -s^g*(7AH)eMrP8BqYt|TPr#Wk(y9~zGxix3VR4)jLDvRCSTFpi*16vD$G$6^O8UY(XEaKS&`+y(l|EDOMfy(W`F8C(c -g2TN+-;OgFDk7W?Zw*ks<#^J(X8UWs&CmS2APAQTxzyXxCY{Fg}H?*;wUvG0BF@XS)3{KvL=$&TO{FtzXoXhA;LB>E9dI}@{g -r}WHjdjK6gz4vD%SIj{(BdKdMh^U#Y5A6=qz=ZKMTPK8;PVFC%4TmzQ4sczQL=Nw?&xZlou(!;NCI-H9c_$E -!hdIH!?Fv-&*r(vBjTguT9r{{l-geyu7;A7dIa#c!Jc4cm4Z*nhVXkl_>WppoWVQyz) -b!=y0a%o|1ZEs{{Y%Xwl?OI(=<46{L_pc~TYt`M7n{kzskkGpiGz&9mX+S`0)KADH1z2P3tnG9UyW0Q -0=h`XPEq{d2u+lyZmPuSy_ug~Q{ip)@&71xo@#*lF<5O{Rd~kSrc_==eoE`i_46J?Qy%AUUTAbzaU7S -XVILH=S#D(~r{VPtA2+t1>t2CZRWtNM166>@SbFA6%jOcM1moX&&uD|IdTk2e7x1#LPiS?(tEauTtGq -rJ+7I@5;SzbLru{h82dVHSisMHH_^H^!@nu>DLwS0uB`%=6+crWB^Hie4bEuum!X{@-nOdS!B%QX;jltF#P?nj|x%#-bJIxjFH)Q&XP)*5|*Sig%(!jEV!N$@>DKZ*p=$c^MqF9p -`qg^1Hi?LD~17bt|I-;q}0MvGOUZ&!&A4OlCFJHGn$?8}wdKm96x+rPNjKfU_;5o^ITW)Z(yQ~a<*3N -8e^%A>S=1aK($e0Xv2D_Y5|^Zkpf8JHms%T&i -OfEd8;WnC@*xA03tdKWQq-=0MR*GUOcvrk`lb=)xsH)hB0`BQAD -s8xM-rc)VAaRhEePeUwLYBu`N%!m3zBN%ANbnJ&mdq5nYMP{L4}mHLme(lCMsggTDy^v@T%T;*vs9PW -wY@!=72PCyuWB9$K}k=P(N&RB*4 -;#i6e{L>oJuv8pH|6T1Z*j3y2{RSR4`QeXaLZWrEo7@J>0;+Une6{RIHFe-=ZX5c-{#hr{n7Z9pZ1|o -d*K_?e0i~9dJG`mnkR-mR=47@0Cp@2vMi3;FYFu}cxdy0EjshP -qlaD(1}8_R)0Nh~KGfKo{;msk$2l)^fNbqebg)+wx0b>7SZkJwiVA_^i3A_^iQXeY}d=0b>t5DOs|(i -nId(I?i2(@ISQHCQUJRA7l1!BM$iKh)@Clg(TmB6iy3phvLBvwSvU)DeFirNDV9rQUei6J4H9X -D-wrFa3&OqP@Z6%3WFRPk=h!KhMEZt(+wIcPC)aBa)>@b{fL~P@1TB6xg)D=H+4p8ZUgVV=WXt6e|Du -myV4JLrFNHTw--rmWJ8NFU5UzK7rab}G7^(jo=dq~x0F^FYPX)ID^05|#5<6rs+&@zCQdhMI#Jb?W_3 -SUccoqUH$}80AsAJ~$t$s{LR4p6k=;scy3)&=+x(f$jpnJjA**?FTf9zl(?8hU2q|lBbyva(AAdn6?0 -lA$I7AovpDUftb+HE&!Cx?b8|OGgj-}#rv&qgZoGCkxsvEHd;Z87-Q<}~-X1OT+1UqV0OQ-q{hc=w^` -HEmC2o#JrE%PKw?`pWzEdxJ%;!+z&yr;y?6*R(X{aaSQp+FAUX^VD8k=Q<5=w7nAWzS4^UkXW$E2qg+}e~rXGS&ZmH%u6TXMkbUojk}jYt-Sbt3iorkK~Vv9)y`gzN -aXtF(SH2;?RX!XBGjaL~>H`^oWaRSSLoZk-1Pja+jtebW&XbFG6wI+lJg6YZ8!dumXGYZPkjy>y!HYu -1AGG;AzOHme#`wiX6CNI_g~E?!8VPY&s#xrXJnCu(2y|$N$=eb{FFPS2Fwd(B*!Rs3Dy=Et>5p=D; -0tc)bt=EeEHeJAW0^5zAtc7Rffk6=ZHvd#(i$|r0#O)(K5Cwkz;dO4TnT{~z#tRWN9N6=aWFGUH9NOq -#qZUlG`}SewATc`=-vD18g?1hU&7Q1$d+c<(5O?%-&j)7Lv8SZKH#@V_u%4}`6nb>0lKg@K?**tk6%PgCP%D3bOe!C|rX3Dd6Ia -%%^+sybMU276;9R_~DEL!qxf94dcwHZ$_YrKdJ4$g?18Om^APod^yraHFxi1cl2SQHeq*%ya)OKqaya -uBj4H5@30$xW;^2izVH9Z%Z6|0gtgV0*GT{kXf739YNLLD0=ace(ldNix9>2c{eJm5XwgTlfwK?bfN9 -1>H!<79!`AW*G?BGM)#agN)^Y+JJ!Dc9r)aaEWsJ!9X6k`EL*ezMFsTmfFe#Qwwgl<50s60<(j#Jm6i -~ZuLA096@hKvi-=Y44JidTd6-ievDFVncE|HP+M)?4w(H|b%gn|Vq*+}azumHA{Rps0vdCM*-3PgE?B##8 -@iVc@IEUSzi9wwQ_U!9Y)y?}2dBDq;Z>t_ok~OMJl;I}TPv?oR*y -~KW<=(5x~mK;S%p?!n1(B*X+J!nk)bbNXCVLBbpK8$~=<`dXlMRzp!wgM98QTo>R{^NPSwO(m^(*Gyk -?)|^;9~c+e_u>Nq9bkZ@6aWAK2mmD%m`=#?R+|D00010D001Ze003}la4%nWWo~3|axY_ -OVRB?;bT4dSZf9e8a%pUAX=80~WMynFaCz-qZBN`f7XF@JVO_LpE2XUMka=mfA1D`kQF#+kRsDp*On| -6EGMj|?Zm?{Wv(u&AaY5ZBffphke-nxPQbB_IGxV&UV>{gX5h~Y=P{Cx5 -3VDVs@M-*GU@9*iJT$SyHgW>_5qD7UBB#_AX5(QJLjzGE3sLWE042dTQu?nv@Af{vLmiXW2Z?S$4%rh -fc^J#bq&x=CPqR$<33n*qMSzh-~@;EBvDZ9L{H1?;8a?&-w$5b~Zd%g39iSc*@6;AO@wmqA% -Q<5#%XI@ -!amEf?q)tTK$d;kKmX(S^Eul-`pUj+pPp_Xo -qv4~SwtFlk-u6~aythErwm@@QCi-^a40z3J>B^OBep;6AMBrhCF}S0&yRM`&e-1ZDcfcz+o$LIJD(4> -Pua=m)05+~-A%^M;#h^4g6Rr!8{#Xdyv-2FXp2P_d#Uhl*{C=ez&a(8 -n@)tvNK;N_EiltfUvmbc^>;Qee>_UsquMf~qHhmTf2u10)8B%bD;d{vyRPW8QEce-mtSCwJa2sQ}6oS -7M0T+yYK10u9ZkZX!sCvh!LsT;+_cU62n3a3o$IjumOe*Fl+$z1E?Qh=pbBZO;}sQh8Qx$OarJJ;u=E) -W@SUVMi@y=bv{HNHK-qs&_Ax!47kSzuwsZy>V^t2f+Zt?b67Qk_=x(TX0+IvA)Fe+k}<@`5FbN)3`@q -Cc?|VqI5{5sl5;eHhEQ`1=fDkzT0W@MjNlX>;&OxraRG4waRG4waRG4waWO!HoPeBwoP?Z&oRpQCG1N -$iONdK~0mLMRNDPs5jv)bt1Q-%PbpY7_vH?^FkPC*Dnh0tFhzAhgg7_B1k$j2dOC(<+`4Y*ONWMh!C6 -X_Ze2L^MERmW^gjkYBT*62O3z(o=Fczw@jG~YHN7i69gTsuG3^_xEASyKzsDbZHkSHaORN`FFFf_!9A -tnql0pigh8_;i34^<8PrceX8G4c^kFu;$&F$M=184QOQmERU&3d0c(wng%|k9e`5Rue-_Kw>n6W`a0k -#0d02HVX)f5FgMreup$28jua>0$aRNbH%+kp7$e31)}ysNH2u+j0ow;RAiCRssu#L<1M3}irF5ZAFnO -*pegOP)CYB4K2+wg#_Jb%Q1b)v1{HGH6g3qz6+0C@6*_Uu7FnQZui~e%ras~<;;DydPml#&vI`o%Bpx -MVBcdacBRCWJ5eZhrH>}8#2nL(!Bn@Bq<%M5f_{HRx7ka2Uw&u~F+2Vy2zuZQXo%9J#NWzNie&ab9FD@5P0S0w{FR#+g8V8K?oo-aQsLFQ8#YJ>=hU@DEJyW4Oh+XVH -lL9Y+fkhn<59_w;Z%QAv<+2wCRZq`sA{Xi<5oqHUFxWcb-*hM@fLANRm~NTXfAP4iC2|8kuQ}!5ipfL -kuYnBnEdbXP4(#s#bk^2Ve~NyQ3R1S(F74TQ3a7U(M8yB4Y59P5UmCj%z>y#%OlpRc!L<62#J;k;*_x -A5t@n!)pL;8HhqqV?g!(t0$6Or{;pd-2{b -c-^D`gL0%R*%7=8CJ4DJS7XJ);c4?H<73E#M}Gz{3~X`6&tVbvpJ(QyshCY3^1>ZMAzL%7L&AMply1z -1>$iQD1^&i40IOMnW&ESRbw~${k*8Cn^)`PgMJN2M^B9djS5E$9Ff4eC_f89JzlEh;?T^$Hx(*EmYsi9ZR{`a}Fj!9`QM7eot -`qCpshSZ`tREQB*Xx2t)?jMI$xgXh;)Z^2Xf!E%X)g(wkR}eMCzTXS(zOR`kv -bXvm;={Ky{kCWNFRGTWl!X)NpB9zzs`Gi)2s2%!DTl{MExWBGlg4#)0rnJa{%?nejD4=E7kc1N(`$>^_M-;3WxQnHmcO4y5jn`kBO -`LT>ZijijPb?;#NMnXN2HoW8kT*CmtGtWMMcy|^6b2G`iv~Ljrh>rN(J-=LW6c~QI|{l?;VHJU*-%$M -x9n2*(=K{$4%EKe+lf9pJiGc`u;RWe#H|J0dUrv_j86BrCt6n4-fCYJGWulFX2D*l>@0Mxaj7vF$xfn -*ir$@?bL%M$B`)Ep%6FZe6vt&|QyAgJn;F<|1|9)3bCp_a-NGBVyn{uZcF>s2LU~uyMik%}iJ~+I -=-b;Xtp5N|g<58~+Xq`j~SgvOlzV?gG~(G8f_W{@Uk4#lukY`cEXQ9LBS=8wKu&m_6R=o7~pR#0>t8XOy*JJEe@0(h$-mwL5_R?2CUd`#P=_! -5T0bOOD{0aH)w;d|M@_wF7qS?hfD-!ym#6|W01wfi_j)(Luj7sWT9M3P}^qO9WznH~k8Rrn$i)KaaEA -xuDyhx+l7&m^a-%|dqx~E=MM*pkEgjc@zKhOJ8zY3_nO~2INg|7}i2ajRgH2YD!B@37MeNerj^k}yiz -0mX=yxu=Memfe4@6aWAK2mmD%m`?t?uPJH?0059N001Qb003}la4%nWWo~3|axY_OVRB?;bT4dSZf9q5Wo2t -^Z)9a`E^vA6T5WIJI1>J@UoqHX(H2m%B4x*Riu;gelWwqS5+o^#ehL(uNrWnrPm-JZ4)@>hq2Bl+$#o -hn?gfp&NG3VY%sew3(uQ8V=>DU3hwqP1>E!s}@bvPK-kqEs{7F4?UpO!5>R!-U8s3F*5Ya)h5EN$gA^ -ArbMFBoPJgnky9^^?%^C%Q?PIJuJaca@yILt#x{w}_XC|Qb>l3U6t}3Jo?);tU_tWs(*j0 -8HmeTK3OV5#(Y)H|qkittv<*)^ZJ1_c^^fcuj0Jn*yS9`VQ?!5naf+8C{4>q+i9N^yDCk^EA9!!Od6M ->pk=keF)MobRI@`Y4|{I2o~m)Cv?8f?~}OlA5=x*O&X+Y$=Yoy1ZBx>{s_a~(mGkuJcub3i!dwUK}1e -Ly!b6iA^(sp!rQg%TEz>vBdyLw`jFKezCZm)CnAHT^j^dwg*WG`n<$(^_#~W*I1?0Pw3L0>y<+M}8gf -|~LPrVU3wGa<2r({oe-&wl9^yN!)>a|9gjl}{a%n%Jxs-yhVf30JL?f*wcRDFho-Qbi3)p*bj|Tw4(M -O~e-3VG`;&v6eK)_u3bbR&4*~cr|KmAOf_Af5>Pp>||#au9rQN*uA3Lln8!3DvqG>G#x3>xnO!6|6yE~!Apw&Mkq2Rv -m9BqAcrzFnE$BY@DiG$m2$4|~V2Lc(Pl{ob#CL_i5K)A_rSO*GBzNgC4Us#@zE*UBqT=f!>E}BxjTt5 -d@s|i8xP^UbuiznC8^6R0kM7X(+z+oY#)?7{&}eKMT^&g7p7ikWe{>E=cv1p9N{4f`k({zR^YXc?n;(k{pNHO#FQ% -;41W#<2=V+61;U@w{R<6&Te;<)63X`Qw=!j>R2LYB+c6Gce3X(_fw -UI3j;J3F5obR9PuK_j%Va07yJszICzc?lq%c)p+s0>~Z`GiEF5QE8UF+N~hQS=hjoHM%myuN}Q)?>$1 -)93LRY>c-j-UdX!y_1<&As8<_1&&R~}A`oES314O~I^tSu-v6_{F1GcpVY?B2gYCTYEVm%f$09{dd%G -Jt5`!la{#53Z=8!LubjlO}b=cLX-J5#us2ZLC^D;DY~=sG>Oj=pC^YZwbWOOMi`#ynTm18zsb&aWS?N -Zj=d&)e0CyZTBTjsqRptU`6Q(lysCaJ3rk>xmqgvDfq5H^#Wp!>cw#MS3=gPuJQJg-tb4@uO!YtE1p| -pgt=T^}X60W3FD0d9?tBIv?0IuPYCf{`zz8`JjuJABaMCCMpXytc539P}W}igrL_XorBt0UPukI8qJ! -h*PgE2)T^@Z4qcUX0(GD5sQ9k013cRTyCRv^aBXa3Mbh_%A6|`mr1i`*vycB}9N2qtZ4GO*b8Y|Tm7~ -MvfnNFjM*m-*2kPX#X*KfdILb8+de2BdxHs~KiMsOp2AJ>ahhkP-L!Z)^tFH_5yrQB|de0QV02XxBgL -=LBjZWTh!Zl`w4JUJG7jhaQc77Mz-SZq*t+jJofg`$AVe=x4tp54e$uwa) -fF)GjAOtp)vL*v|e<;>_lNHFPmo&ka31=O -ph;bSshkX3>~yP~G+O%W%J?@g~FCWxdS?v-&z}q6wukfoq>TqF_^Gp96F|bcQ;1XI8&2Bs~57hcFD$@6~Y#O!dfn9yRe+`$)n=~`)Nq4$sL0>BM?HvCVUwQuL0bV=RtEI)e3H5sk|8$ -66wqEUexkr7kp}JCFDc?0-$d?|_m8ao12$-)t6w~tcGMop|^)ksq`KrWq@s2&_dONeJd<&zP^+kx~wT -SQJE9BRa$a9fm%25zy!mX{#M1CCy4*~<|5EC2u|0001RX>c!Jc4cm4Z*nhVXkl_> -WppoWVQyz=Wnyw=cWrNEWo#~RdDU85Pvb}ye)q39n$`$fax<=S5)xXYRiHyRT5bv;)K8H~3b5MP8QW< -(JDUH#-?8Jke9H~?VJTH?SDiZNJJ%{BfA~=UN5_M&XP0z-b~3oU8PM_h)yco9f%b#(fo`7_U4`zG>pL -Eu1QSJWL>Iw-T+egp&Ub&RFv86E*$E>R(?rE;90wtdL3&_h9L{_(Z{0%-GvkWpljEA3f&j_L{p%mIH2o!{2cfR#m(~^-SGmR50)AxHdzn^(X-?G&NH0`;e(2* -bhQ7kj|=m`;GX*sI^mpc{}?JoQScbQLd(xI4`wuWdWH`4iZNO%SW -_CCXgz_41C+RRp!^tMXL{2-mX*&mCj&xjR;Vq{xYA%45-UZuV0Ka|fq~{|s8V4YLS_l#}~1^;|H9R-xm^a{vc}i^1^Z8&>p>&(6NY{76>#Li=0sO2~W@0vGospL&egw;x0G31wIj$F_s(*)jBLMU!^z8gpaPwFp=O*MJN~ZIz -eCP%KQ=%`HKRmeL2Fp*~N3cHif*>^MIEZ2|Fw#0>`whgqzC#R- -QNIKb7e^Q8V5s(2Rq$*_Gy(fs8BeD|j_e;m)8G(;2DOO_8RF)D2K8ibQ%p*$iB>D*&{_pUz)UZYO}Ko -Qvf(+pBLBbCR+B?F9-GM&2MbL%{K>d3f1yW|xkMBH$6do{Wmei;l$7yWDcllBeFn49%h?L84ZVr{{uz -B3!aY;5x_o!LlcBhAfvGaEZaL!F*UJz>%zu3ZcF5?3BOM8|WdYYHLIc^v%^YkE+qn<~|^3_1jf1dDD5 -)3|mHO<_rNu;{k16y36MZ8xH6FVM6h@vsFJEE%j?ERosrGsZz9EJ*G#Eyg>zhqtKJOW1UPrqh8Wi!%< -xAZsx@T)V6!E7ird4L03IG>4WUBw_$cNC1}>-$PQ1*tROQvGz|fmf)^)?pf -$&$#H4LuA>i8Fc^-^ywiIY=7_tr3ARGu-UktR^xjYFX8xm|t!eRn5vcVLcI#3Hjq|HKs8gz!Vc@cVxi -69vUlwc;|Rtet-z?AThSQ4BHD-+ZsVkAJo1}7fJGl3Rr8^mD? -LlG=ZY#_nRpaRD$j7Wse(Lx-XBFP%Tw(50~XfQr-RlaT4;7~MspQW(u)2pl?W-r0Rcvbo3QSv~{k!pPa6BB`kIws-Uq=^LUk2 -w%`Lj&BrpemTbR7DlBSO&O0o!C2>4Qk7`I?f*q=`k7%d54RV@ji5()uPB%@7MnIcICx#1g1JQheGOfn -7vkC)()<#0Chg-4LW~_+A -P@2cfu#*JNqYB4WLsD|0^JKzlTwXDxhaCCdXUZu%^z=wgT_dd8=w$oX8ei`^hjvV#vJX2UXZ0|%nO`h -Eo+`goRdqGYhq%FK&)(5;nynsCIzKz+j31@*LKPUy)AMfuSnapwQ(S{YM^@~+jc~KHm-_;qIK3F5DTx -DqaahaAsfpGsxsFisLu(x#FL`4&HtSjiXPXkpV#BODz2=F8|K0){e@TSDJ;SAM1hQBYSIH}$pz>B52UZ~tYz;+z6sT0B>d -Bxf_SVEfIR~*V3uYJYWzwCW8dGXA{LYK1M8c7`F -5x1)8i1ZgwQMJLg%~&O|+KMk_nip1Qz#0U0qr7HxX+8=)4t7RRUy(Ak^lYdXv6UCf<5l+jd~3pS|kNxI2&qgE|q)ahCmkNLk!iXJg^ZadjPm`#zd%gi${Kaiysd3z*Ur87 -t!iefd&D$;u)$d8y+SFT>V+#BC~T3;ov=~PfK;@g^0uKVSkx-7dk7mB8_%yQzCH(g76S{^j@S1)Pmhd -(_AswwpzHds%zDk3VUH2uVs*MTgo_5U|6wzloVX9F)3rL8(_z88YB4WwBNCSm5eQbACz!4T9?Kv%}6*m0sSN%4wcI8F_`@B>T6p!Ny+LeN$^dP!1`*tmGN0*`TiW -HNPEffj}0P<_Pk7P(bj`HYjGJzR9kLgI$li4Ut&fDXUveZmsvXK@~x^wdA(RMk{gfZeA$HK~Z{*7jlS -oX`8dHN7|5$o2&HxJ5&9>kk{=>F1$N}{|^ST$UrOyi>F}AET>L!WO2}ZvkKLkxLtN^m@)} -jBBFNe5hvAxvq@PsvtZdqwH`<-wq{7w=>ITavruuVYddHtn+`B%1pY=^Wgz7c@lHyPL+aTKGZ_q|@Fb -cwn3P&%_bnl27zvkkPLH4HnMc;(KeE@kJy1%fZ^5H{58PBKg*zrcwAaePmiBZU(q=DQz=ymynjD+fkQ -qz(0pZHtNk*DHVg&;X~yhxcD!brs<-+57(`0Z8uMD4ePBKuAavwNwEd#3S^@n29&0|XQR000O8B@~!W -!@*U6)d~OrFfjlCDF6TfaA|NaUv_0~WN&gWV`yP=WMybDEbsAHj@Zfk-U=J)VtXKzK515k`nDWw_fZnur*Xm;&6E8%$X -4#=+!I#Kl*U=@#Kt7PY#dHu8!!#>G|PbX^rix;1yjzNIK8s`#6mfI?QI0;(|VBe~*(S!u8|hB8{g}nd -LN1VwsjSh0R`|r=Fy78Dr+}^1Dp3xy&iMqtfFO_GhvzrqNtlZsRO1aGB4ue02fGbdlxN{b??vQqJghx -$@XuD$13w`4US#l=SBCE%C`@3>RMWJvvAdx>U9WUCKh{-{q`|AS|iO=wewuWN95gs7m77Jj$1fwYywODzdxs3BcadGF#9zN-3AKxTxHNh?1go_FI-?{$nC9Y~*_8o|gg>>5SrZ<@N#G;{*;7=o4f`w~`ixyjvtacz -`W^J-PmL{^gnu&c4ytgUicS58I3q-rM`^hPa5(sUbb0s*GY&qSoSs~NQ|OORu -FsCHuITvuk`CzN;PU$9@XP7JC0%^Eyg0u)+9SG>Qd6wR^pV_9dTL54(qlf6b -M4G2EhN37!iOiQT%3+eF_p5j@#Sr?Q;yX&SvPVyO4DCRDo$SJk$!`y$pYHW&z+n`ne;BQv+3#C6l~(~Ai@{*ODyuA^=|hx9Q;4Uigs>~jc%0nL>km@+Pm%m-ga*?O2+u=SH%g0;zeKTLA({d425?#4&T;9qRso?A>%V(>JVx -Jf)d7|(gYDlQ_`8?f|*B|u)>f`1JH~Y#!9U~ay -=wsp#hC_U-=+|JW5D-@6FcfgcF`3{{;G5&V01^TMfpb!0%0|tBa~cDIz{OA*D?`Pz3JDH4CJk{tRL<2 -T?nl4}lO7*392|$h5#s3M7~mM<7~vS>fZYgo2$zpwH-g=$4+kR{j$k-~;RuE!7>;2$hT#~7V;GL%a16 -UK?8dMg!)^?_34?D03&k|T5Fl0vOcI!+GSgS*m?+ekA{VwH76~~VKr{mR7fKuh7 -$|{&JOa4_!V%DgP+|hnG*pw7Eyf@`0Z|1sR%yayFe>^A0Sw1#5a|Tl0;?0?(^y@Dm$6bIY(PAL*g!zK -0%{bHCAtR&V5l6a5THf@ISVE0P=$&~LS6HwN`kjR@D!&UHvjJ?|IuzD{-?XipX?&Ki3IH~qDoP95>+) -j=qAH0x`}E6yXhuj)lF0#|J%BWY82gW(yzP8pzbCLji|dxXmu0SD6l$+th$NnEF)hx>A$#}V6%%KQ;F -WH;CD_|Vn12Pzb#}smBl_p#(u^9yEw;wYQTj(HtFw;!r|DAb0+$h!C+4eMW}{ziBWs1`p5Rh<4Io)r} -7?~By4$Y3%17?oBSFyt?o2R?<=^f%duX#@xz}P4}3R;=Z>h|@zr_tQRjgf^iAg0wQ-@o+3E}uV7)*85 -ja)|_!uer?a2val6`uvS^MCb#(4=e*`%jS}0dJcGcE*j7Jx>O^PaMYXUA%bHq -fcL&}Y)7Px7mls##MkV?+;j52ls&SJN#U=#yYIZjeP6onScA>4r?GZeqL?4E(N~&rUKi>~51SZOMzN@ -%-&-5Z)3mXt@(x0a%@*eL**{uarkIbqC_H)mLEfDB@n;uk!!J9yLfuLK7qRC2Cb#?~A`mw&tEcoIV&N -IO1(yj%kD{o$96S}~xZQ{1OvQ{FuaA^d)t%XW;+*;q93u|1|->g2{#dE=|V^(F>lS%jA&|0^0wKfYce -lm4yK{U+pMuoiYMBKu#%Uzn$fnmC;1(Sc#bCsyBc9jKJ@nNs6344EL_rzW3pt@nQps#fIVND&fx(~P; -qTTdF-wwrS-dx$y?_{^$WI;cP+N{x5!k$M%7UjBTn@VJ%*9Y=K?_Ik1nnKU*^Rl>87x2Fm4y> -^n*);tv%0B?It$&NXyWv9U`s17eoYnFPh#dwHA!tku-P|NAe{BwmeS!MbU4s}yOZ4A$%d}%dwdu?9Ua -)ak9IAD-YmF}x4>5e>pQd^SW^oIYP*rK&YE3rws<pIfLYGj^Og@Zu%LSbEbbii8wx7(WM*{Gw}ePOIo&`yo}cVl< -Gu2uqHtjsy<%6csVdj;R0MSb^zHhdd_?RqVOZd6?@ZWNOHr15jG5y85j63jWXv*F&~)n71t?Spx*HfE -u%1H(yM-j;*6LH%ZD^L~PUH{l-v(QEaF>P?y5Wa`bVo5yJWdY?AG3EETB=IW*2nR*2RbILsafoa_rAX -cX3avo2kV58;M3$w@VRD@>WKY8^WOw@dQgQqI)&=y20_f7yL5_zP8>(dp7*dude-9gb#?b?5TLCa6U)CzW`860|XQR000O8B@~!W -A`j9(@(KU|8Y}<+Bme*aaA|NaUv_0~WN&gWV`yP=WMy#li>`sCfgAee`_)hoV?Z$7LBE!3P{r| -+L4`iIys_MP`m+&*b>na7WD8YSW=n`sdj;yn9ToFoyR=ksM6Popx+#Waa^T8 -b&g3_LUSG>yv`Gk??HbdoJ}F0uzv_Q=He3tbk|XrY>q6(>^sKhzC`-#czF)%3onrR@Ekc|}`Jdt{P9F1kE;3_~Fe3P22_Ol}O-?+{_&GQeZ8ei8!sqK7o7OKp+hLj<6EF -w{AUv9#NI~8QlB~om(*+ -qQ^bf=h1q_8*sehD}gdrrr)p7Kwf4$b_GEb}K@IVx+`90+BESBlCTt;<>R-#*x_qrk#oPE#oSv64|hy -W{j;x)PJAxo0%dyG-JE|y7IIT})8L>RIUdi9h7`618d@M;pzV|pwi#Gw{D@_ctdqK=GpNEwR-iMx&N6 -Mf*_p5Ba9K;5_5WsVh&e(`s)Nn#|43H_frNsJ;f%HQtXEGDec$bIF@V1#pw -Gr%*o4RP+_S^8o^_vqiJ{(YPiA90LRR$_*MC->33kLF3>3tYtnQzgVoh?+>8xS!Dda3h+%8jTnYeKA% -zFEMu8_LBMiYKG>b9NkTC(B@WOmni9{Tpiz9)ugAd4vehPVQvs0LvIkvqgdfp#KOks|bsN -FbQQ5`X~Gghok7&@n;>*-it&i5Sv}K1pbZZW;%{BV0!z1b_&HJsQzT<|xvJbBH!@AVShc+<+6bsUdiP -PzAJVNC+s(K$IBL61Qzo8p`62vRIJYn8;wERXzZ4a_OR8x5 -rJX|q=UxQ&9ADt^Xw$q4v`f}vLRKr_p+luupESb7m4c8sTvbyE4C7#m`2%h&Y71?XZP^9KG(vqb*I(O -{ZeD_EU2(WVZ3i6ljGK-*Je~sHSONQqk)56yV52}y}@%q -@cIVx;5+2@WI6w}QoyXkd3E1P@Im20BG0+mecdPWLtKImpe*^uk{-K=>E3((~E-o)*nhgJZE%I#4y<@f`P -qousvNmO*Zp=FQfM*7qWVvvAZTAHeAchCK3hi#8p26TmqD}EUN7+aSI#{Ym3>hdlE3e1mIxEiJsC>IO -TeFN~-L{aMAbp$6`L6t&9D2L(rgaT47OXhT{JK2Z%9_eSFptFGe(yGXiT*eVW -eCNhMYD6A>vrH5mJ%{6_zzs!TjtIoi;<*toEj;^~qtNu!rbMX9{lmgk&_MME!rfkL6qiigCW@*@F*Dsr6q@LqhdwE8(??-mO -Sl{xheZkdcmXF=9`rcgD;=qk|UMq86l+$mF*m5n%cEW}@;B}%&t@bt44(~4dz}AVI--=$01Ea-eCc6u -|3EybvNzUunD%*)$Auub!_||H%FMu}b^B8H~T>G?JPM+t%vvTdbvDMAXaBCD#yx#K~w)O&l0k*}SEqd -J|oWGuS-dL>Gm!qQD+N@T$*fu^_Y@&@yJAx(Ew;e2ycqOzwojsBGN(5$WRXz5ZiiDRs%IDj=?9T`5e% -SQB(EbHO`L5=m!@iBf?#po#iK^Af-_pAov6lnOdl#}|PxUYNPzQl=B$wTdjs93^-&|{*-Kxw+y~}}Vl -l7Y`m;TzA^kh%$t>@mZ<@T8^rnl8fp8Y$XmCCaL7yV3$6F388CmOnD@D|V3KC;!uYXxh!Wj?T*M}a8uEzxB%0^E7ez-u%1% -+O5lGlSucY^UMv44B(BGVBjAmZ$O{|Aer3lifzLy&tqt)b? -bgpXR{*?~!$|E}{*uJpUsEZxry_3AWhyectasV{h8i`Tx_>F -W`&>op%`(WeRKvxI+pLcFI>)b7gcE~D?X?&i_r{ekHFe#@u93;Nb?MxQ%iWSPf5XfXfSp&C`L7V$Jn? -iN`Q(>D@#)hDhP8Vn|iKEJ3&{i*fhPN$Fb1?OF&%TnhUauOwl_6@K?mv?D2*XZ~KpgsWAFI8s(h0ExX -I^Gk2_rCWZ@4rw>0|XQR000O8B@~!WwKBtG$O-@eUMm0qCjbBdaA|NaUv_0~WN&gWV`yP=WMy(|8Z)9a`E^v9>TFq|TND{vDDGHNAk_GKyH!WFmum{IuXN+-d!*(#p$)KgSO@t-|l1idk>}% -|M?0s*u54K-ZY<4w&6vdg-hM+|@tE;QN`l`C9=mqWkZHH#rJWd}DXj$IxO!SENV&EUWJ$`q3PG_e_$L -H6_^!DuH=rO!mT5eT$}Fc@605Y-rl?)dOg&BGGRDkb) -Mu4s3zbuLPi2oz$e*jSm_-Z4)W%s_;5J`md36KDbeZMr@ma2-QqAdZRcY)l73EsjVuht1OL}$mn#6QE -fr?)7T{=t>y3(=*U8zFlpVfTr$x)V;d3?8oo3D!32N)rGALXCuGEN@y_=$E17M4_Ibh#=Yv$T@<^Iv~ -F{P~}p-bTfz|Nc9L(9JUc6c>+l7Nrl%=s^LPHy^e2C#N^($Jf_%a&bk6ba{Anb9(gQ?C^>%KU`g2Tp#ZeT`OfE)?oI5+(3K}l}{O -voU1a5lVa`qM})V4fyta6qt6Oqo~ao0qX_x5SbbLvlPrCx{KXUt=o^afDa}fszT`2u1FCkS3oSOjJ~C -vs>(fX;C`vyi2*EX`pTzf2eUfBZ?$g_>D7EPOL(C1N5W$WJ13~oR`f#uWy`basU$(43FFYugqtU@S2e -X7`k5L}YK%Qbvgk`ael4M2mOcmNeQeVLvO&CqHQhhBe4SUdlP{+u+pRZK8%+qQ(JfLFrbO*h!7Rz*2E -~7O?E7gt4J5_-S%)Vs#yqYKvC_qL}wS7m%Bou|k0)?1vqPs*LcxTX-j&AF;*J3x>MUM1@9Q~bMdGO5t -k@NpW0m;y(aNnmroZ%GrI7brKV~pYX2+zlXPeR}8=eXX}*V6ZBZ-R#y+}pzh2!}$`7N2??O2!!5gM!g -`g9U^MQlFS4Fo|#qTuWFa^>ZkYSU_N9!o9#f>3b+32~)L&?4-nC1(vg^tv|@4fcCx>)EIq3RB*IuZKP5357epZ0(=_2~La$$AZAIz*r@Fo=Klu>9yB%4^fW?bx -dUScWuF1nYZ>y_#D}`-+aY@Va6Z8z3^wi$LB2`36R2GX%$t`&K82xUI5Op3J3vB374}yji+u`71(20V{d2WGO&7`tyvZPWF^kVR>iqOH -pGSOgQ>w#$MfvJ$Paa*j@d3zSPk@)7mU}}-w7pw(MRqoG(O%}P&JUM8Ap_r-4CMK4nVzULpVVpU7_C{ -WhIi%KG0~s%-=DJ~`U@N$kG07yD48uUMy~fQ(YqY7#qWLsYsIu{UBG5e=3{2!r{)>8L(YVA(#ByQNPS -|IS@LldY7KqMg(BvL(gd~IWuiBZ+T0H7ugEc3XvB8kcGcegax4n^Qg!@=2xCOih@rq!}jg1X&y#_1Nw -~yYcY%8L<=iE2>V0$FNdC=$Irqvq@M3aebJ&?`%(&yFE9A=mF3`y(*i@Po0CQhomkYf;l5}F -hEpVrqe#MMAyYqAK@LYf0Udb{*`nKq}IpGD3h%Mlvfy(AWw>M#LZT4Nkpe>u7C}iUH(<<_QEE59r-Wd -3HTjjg6snfQ_w>7e^NVX3!B}6u=B%8>ayB;RmE?H7*5g? -`VzBML!-xb2GgTag9X*kXIvdUxjDJ(CAv!*-*ecg5Co6C?Y#;(6c^A&R1}7ec=s1=&)-$<*QjXQCTaw^j@=vHdlS%|_X=z>> -VNfUnklwXvHEZ|-_A;1M?ak8sLOy8t&#?9$cE{2>-L7KChV?y>C?-6+@%ml28k+s;H@7Y8h`K-sBbuL -Xv1or>hLkvG&lN8Ai;Ss+`CkR5KezdvBf)P}JA9=S0J{JR3Kh<|UlF&Fyx0?S1XUeHnG12YA%Tj(}iXhosj;J9A9 -bY33~5BNHwg@Mb69wu7E-H_R6^fR$`!F_jq_TFf_Kkn<$bXHW|w;{eWxg)_42GUvAU3Iuevd_G>p>0o -x*LEy$1Ibs}te!D(+oNrX*KVM?#d9dI-(`VYE%>-+ymdEG_l+g+-3^$Je>Vngn>^|BUD<`Jy`62Ka{s -Qg&Ec78T^_bg?pOV63>pPC7rG?wW55qHQM9gp+=ahHK|j9R{YT=DTkzVef6G+=I>G!h;U6B+OZ|(i+c -LY&^e>xkpQ6Rf1KRY0o!dAIND?N -qtgkajVh?{oBRcM3tq=wZeRKuaa&KZ~axQRrl~`? -W+DH)o?q4w~Ur0+Rh9o4-opj*f79GJHhE`EjS&ms?731aBOCs*q-;CdR4Itszv-8X|Z)aSd!0p;QC;Q2?HL&qxg^ez6;}kzcCr&iZ^#<$P`SNVxAHbJXEb}sf -BL96-TuP_Qrg%WD>*_)E?8Q-)AcH+$BTNVzCOi=PE9O5Fh1I$mjtL!$8Pb?n&k`oW`l8Q5Q>rt61RJ5??HRj)pNR=>}?zj-!Fc&d~UQh*rDX>yDntd$T+0cWfI>YX~hEw -1%UuG48d7Fc=R9mffjhaT!ZfOv&7r4*C@nO`6L7IZmg}=> -=!;+$#fy+Uq4&V25C~O)cgeALuswIGi&pabR&ZB%)e2nesN@E(K9;~nxXGtz+Vq8x6=;i4k?La$v9-F -c*Dm!&O$Qj;C^__jPXFP=mrqI4rV=+zHF>uzrFg;Uv3j(}3>4Z-4I*Kp$buC%eWE}sJeb)EyG_%~Vdo -#mXpNly_!0huD@_|en0QkIC`H?5$^$mhtkDk?>Le6Vhqr741$7d*p~pGy#3fgle4i;5t=qWX$k)S#>* -uS+Pa=y}J*<(+;BVrc`M7T3`t_dml%4Q5h4t8cg0>0W+*ysWMh|^U!o4LOCCISnyVyjbruDGYf$mTqN -5UW}DwZ{TVF6~La>|9Q)@t}xt2NKZ-4f0`8>bVWemgd^&sQhD`uThf;%l7G*C4(|fe$

-qI{}j8i0{fg8+T27*L(Sn#&=D8*BkNKA6*D{Lwq+W--nPKM|?Nt*|;Y0HTUuzjju_3%|d+ -meyXIAT8DAB#CN;hFZg09-bJ?Zy9h^ow=rK%^>Lrw5#QYoU*=+T7xU3wL>l3U@9zBl&?3Ip`TLQ@G>OkNwF`}oGw==Ygvn;Ek54*2;c0b^=LDa>GJlP-I?4he7 -m-3ERY;cOpVsI%^$`#Ge)PjyqFq6L(#wus2$X8dFS$g1L@w7V$G?%4OtW$1TOzI#HPNHJntJjrYT5@i ->xI81itbc)!`jf)x7hUp`_H4AML#Vnr4}7`ATCIJRxEFv9C3;xgLwV}$Kf~&I!-xc{xp%(CtTrFST35 -VK%`R55Er>JE>s;PRSq3n9WOap^+mw8lyJ=Z*YWVsP1Ddm4T;02Lfe^#v0&T11B_|)4-!7te#2)d9*i -^njTBW2w6QOL;ZYoOqSl#b$r0TN+y&cqP%^cW0etG(*5&Q(_1&fZ>5v)U4Q4BMcF@G9JQq{OCXreNr& -YxqoEHm#RD@whu}`^=K|3@WIV_mbnCrx6^st=4Gc*lq9?hNUQf`<&8)@D>Mn8MMH`FQZnPUD@crNd++ --Jy6?iU+&4t>599NJ{Yu`edaIp^Dst(ZQf`3T)Bj!V_PHF6$1JBSy_+*fVaMzOJ;>ESng!6|Bw=5Cwj -588IQBS;v}ZzQI&&#=in5ls1n1>R1dV8A(u!rl|rW+D=*TD7L<{PCoOt+QH`cO$$g(#5KOL>_*N4KxXLP99*zT2FLHi$2O9KQH0000803{TdPBwKIP2B_l09 -6eD044wc0B~t=FJE?LZe(wAFJow7a%5$6FKuFDXkl`5Wpr?IZ(?O~E^v9RR_|}(MiBkZUopCa)?=|SU-R=OQ(!5 -38I3~y1CggC!`jx{Slb(`Bi$w~4^`!9`Cqz%a{zg*~FSS_HCqjmXjH2n*tdz_wW~(iJ{aD$1mGjLM$_ -%Djsc55wG)<%v98`nOu~=wdZ>{8!W~M|%<~!)z&{m}s_>we-BH1Mc`3(6o{7q^2uT?0btvyO*2oWq-! -+M<@lz$k{X~YTm(F04?$Z47`ViCZ3Bm$NRlb_JWo+Yb7-+@hJwoilx3h-G?Ziof$ZEV{UIHBuS=MZg= -*n|L7_l?aTJ+QHk4J5s#7&X)f&uR$@rXdNL!LCp-d;lPben(Hzf+mLC#Cj780E3nGrP(5J06g`b-XlD^cf--peYV*ThVHmOo6%t6P?x4%#~t?Oqpm~Kxig -*2`YlwP`5>_svr6P#;s}sy1tl>#zKD|@^=FhfL4t8eEB}>I=72G3A^B*V&Gub2jFntweBn|EdP5>2sn -BxYwLtHnXG_%uN>SfkZ#LW(1Tbh-K0B}7;E~}g>U=1(`kR|{NC;m&1X2d^iY3%| -C1Z(s#c3MCaJYwI2)}NV2|qA!Rz60#%7uw?hRR{X!^Z@y%BObGw3#C=?5zzIeV+sYC-HL*llTS#NF2L -30VE)4YQBAr4JuIWPht&a+B;s$Psy-z_#(cdctwkM9a&i7l{~+e>+x^_o((sQf#7nHExrvd!v=39pfB -*ZWL&+Z{^d2T6#WK(Dny}yCoa>)Dnvc8hOdO^45b&#x)i~AaAh?|uusd^0m(SSO&I@6aWAK2mmD%m`<(J5vXzl007(v001Tc003}la4%nWW -o~3|axY_OVRB?;bT4gUV{>P6Z*_2Ra&KZ~axQRrl~rAj+Bg(_=T}^5UO=K0=vHcX)CWj`(lQVwpwVcx -LMCy*9b-qfGo$p^?=c?(0V;JPAtm>odwlOXwz<2z{ZM}}8c%654hGYBK>f)q_(8wH-qr4CzTq@8Vl5P -t6zG(bu=JpR2`L#Zlz8FBB9m;GvD{J09Z#G#lmObQ9T~<-I04vK{=%isxgnjAyFm^7lslWSoFlZ|7D^ -<{39T$XO|H%E1H=?+vyUf+Gsja}l{?1krI_(td5NVqj_N^!y6tuc6gS~5>PbnF$6AWG<>rN_`$+<=oD -r)6^VMzRZ$yY5n0cm9$h8q$dPnHck<%2GZll!>5pPQTnAAS6-{##Zv;%}j>nztoxhC34j;cXtDOQG=( -o3Eh&dKV`y<(huDs@2#Q)GB5?7k_;=ZLBFy*8-d>QrQ<4;3nf2!2+_&DI{3A59lD;TH4Jh%0W;Q&_B| -NKiZx30IaAvy}Uo-JJ9t`bOeIBQ(^Y-+6LRTp;h)_Im;m>b5$^)eekJ2tak_eE--3xi4&>>5?QoG{?% -@5}YPYNvIv|29Dtcgc$S{dy-b13d^%XHo*WaJ&xz!W{WxXrcd_zi&u$c5B3Kvm0iw7+@&iPSdFXkyc2rrVK7b^}H!S}ENTCchvI^8O2)c3JVu4i+_^&_f -)lKk^upD#uX5vqVzV*Rm-=_7Kvn0viiZ2ouv)oO`k7I%9;h|jdEU(1P`54RRJY(~qa!2P*g)-9J=6Ng -x>mzj__%3r2h@dMI7w!qz5zaVdtuWPj4XwC`F-Ww+x;9L74EPbJW-V**f*;#KiE18pvmzgu~E>q`*-6 -%WSbeTFc=Q4Hj{{v7<0|XQR000O8B@~!WY4+g{j33(07+>%wKAk=!sne6z`54=oPMpj0gOj8F*{IJB2j@rMm}1{*rOL)PoSg^ -Gwc}YXJMyQTIU&3C|LeG}RriByWuv#ux{28PqYupJ^-Rcu+`Y~YT$c^Sz9Ad(kO%jCDr -<7&dr{y_=8+$~4?p|?DU6+3!C&mcajygCmT3%17_rD_7mMh|_mcWU)40wgu!4nXrCGo^3;kL200sNV7 -XF;smd64C<%qOm619{-s -+zUCgLUt$8!kbk~9gBjDl7g^fAF_{I_aoyD;NsZ#JP09$HR?usv?RwG^8@zYibVP0Y~Bgt2PpJ{xo|d -ulvyX6U{%v8bG$g)8)$p@12Tk)K0r5O6VB!#pUvGGF)Tn93SS_PIDEui3#!D)YZ^d~S54o?Or;~%2*$0y^n{%FLG&xh=QT^tO@Cr6iqgCV=P9A2D{`g -O)eoTp7J8k1_|WfRXJ%Ud5>a>^siaYI@4A8>j@D4;uKH`YCe(`<7GdK9zZ61iJ!bq-zMyN>G%lvRU%W -X_CvepF)*fdhR9dSBt}LN2TGTZ2w-*K4e8z)qI;mkXz01oUHP23a4wz8}=sp&v$K*V6;w>J7utHKVB; -j9rc(MfJn_XP-+BBGpP|7WlWU&b>MGWjJf%(mA#48^`0L2s%*(j(m9XrCq6r|F4b)Bld~CufRpej9T` -?7!*>6>rd|rxN5ns|G@O0kOn>9<=4=j_m(^71-1^Km~9I7OqshOayPmN*R#0b8)|+-@EctKzbW -`lHNPqNP04T6vLAuB1i#f)oR`c6}-&XTGg5Oc|JA&U)^SgrIrTDV`UBT~4eyf)K2;3BWv# -Z7h-&FH^g5Oi~dxGCf`OVBn;FjQ9lHa6o!MA2gd?NT0HGd-b6E)u!d|S=81>aWlr-DCK^QVG8Rr9&vb -2Xm}K3DT+fKsDa;(5ZO1(cEo)2r8q|q2gekzH{V{PJZlT_7pP4AW}7Ljx^9$lUG -pEoTnr>P}_;m*zXyh&9dNZsZ625lc+4f*N!b(j*B5oFYgqN(tS}hpqlJTY5#6j)?e((76kj0lj`?ST7DG#@C&|fc4ExBn^ -*~p^Tpp-@St`f9IN%?xksl|G|glIlfTE2!ddDl}{PF#0BDci`o80nw48ZVM0^k<(vQu%7MU%VR6(y2P -D!Cqwug&Rc9P=0N!G(v3YkF>8Bl?rUXUSuLEl&M -N0DFr;WL^xJL@o}sqWoB>`E1~!}Rzl(^Rzl%8Rzl(^R-!hQYCevYP&kg2kT{B!P&kg2kT{B!P&kg2kT -{B!P?i_RN-$<5_u@EKLh*5|gv3#-q)k{o94n!$AdZz#IF6N&IEs}}IF6N&xVgsc=3*rzj$$QxE&IvGN -=O{VN+=x1O0sA>7b}tD0ScDLpJv8fHc5~9Nbi6mA{3vf_ykjV5gJn{KEcBZ^KH0NnDO_xa^vrrTTrTlVu8tYPeNcQJ{FjinZc33P<$*fB#s1z!m+@R_ -;35TzVRr5={$?TGz+)LSYWb`c#ML;Py&hthQyJ;h_q(>?>Bi|Ul14=5VjDQO`1b&T2KEl{)O&SRZrqy -ZZ1H%J4JK{`jP?S?QW8@H>2c3vuC?|R@OSX87hvRU4+(Ko=|NUvv~x7dOtUOM9)6k!E1Ck?EE -(GVwrC(#RC*vBt>!)cD-iq6cYZz8p51Mx#=Z+p-fA{}DIK)L4$aOfyz0_096{XVFNE~??3ddfC#F3YwaO`DB9C;ZE$6h9j7Q9R{B0R*z+T*odtO> -%{AJU^ls3hBd^Zl9pJTbU2Tfu{fbvm%%)4^Dq=kUm{;DeX#@Q*6|=);6@KTS+){A_$+ihTddWP+(%UJT7k}Dh>1o6Z_Yf{zg5wcKO>tgP+>&tqc?OV4{rWV+Gf@9C8&|=A9o|DVm$QKS`0^Z*=3#qN} -ebqe^82|Nm0vkHX*9ov6%T@kz1q_PpJBOhQhM;&@kW1Tm5Qy=}53Zei?$wp8_B+ksC?7ssg -%@`VpT*(J57=@hgU~Oz+T}H-c)Y^Hp|a*=x!y&}&ieH(@;Q?18)`XD1+1WcnTDZW21!SiUFp4XoPKwPqJ}{x!20b@>OnP}HtqC9b7z(#eU8d4I6HJWJlBlQmj@lYTiq){M?!A6bP#V -ig8&R^iPmyjg`etFW{RgMM+*Lw2n0X1=|-gRC&ObDKvz7sy+M5?OCR)UF|WQq9b!#Bo)wp>#8BdI*zj -3U1<2ZL*7-7_4;@jf|TZY;+R?m76HzB?u=mP&f(NM-=L^?&TWNMGR6G0pCoh<@nev|N5!i%crd0?)6g -?{yQz0NCU;0FhBAa)RN4neEk%)wSXgkLE+e6ka*5tyyhH`^vx$GdIJjf7b~QwUSiRQTM8d^h}LCd= -ZIi^2S~kb?KdUv0m9t$rCB9(_Z(rrl~a_dBr}ag<87S+Vd7_nObY>e$%BlB@fxwwf3I3O54=hPe0P{) -LI=~>+E@Jbxf_Zbsy@{o05m@>RNZtTcvAi-4}5S+qImjYv!J}oM~$2w*5&Oz2c_iA$z*k+w)fGnOg6~ -`cwIqvvkec^Omzr&3bfy+WqhoU7PHA3r$RIvUA^hk@urjZC$hXx)oW~HZ^;7^Q)Sxq@!Q?rWN@czv`9 -6Z&wvJpq=GS^qMGR5}_**V>HSH8Rb2Dxe#NqikkwA=DWWu{|8V@0|XQR000O8B@~!W9(C^?p9cT{85R -HlCIA2caA|NaUv_0~WN&gWV`yP=WMy$RT#i -UYRF0EFiIy@)jF5 -dYBZWKQ7T@iw&&4E$x0eA$%0qr#*uV{9|n9LA-}|-A@`O6U(PDkR%?KZpSOYvJ<6PAx^gi+EL7Aq -&gch2-E57(}33lpoC*MUpKd&wvHU(jVQ)!(ck0cK?a~ -Xpcti{^aQ!WRVK&BEhjGzTS8oh7na@`{53b!@#3C>O4TBebeoACr`@zyY8fKj>mL27*U&s?a`#$nfBT -v8cs*U!Pu-Lxs0U{D=^DI-b1{A$+ZBIXcC)yG7kL->6LKMb7^J2GNjpI=qi_NRLExcQ#tg6ztr(UZN!RrGQ@nU%nf<}^{=piVJ!|qX -GRF^t-Yo>0jn*e3@Is^Bx}smQ>i=wMT~tJ~Z=VxuTvfE3%NAr=95iQ -HHOah%p$LO{1}aVUAak$pY)|#8Z?BmZqkP>LK1%{r9~preYbRhaNSVE??@zfr=wYL7>GR-}{&&BJt{+ -WJRhwHzK10Q$FcY6tvw{gWHV@MNkBy-AUZTyB{WK69k^Y%EWuU1C{bEOda*r#9NlHmIqzW1sIb4y^k= -+a+FrE2!B!`*_EfKg{Od)r)FWC>vL3g1TWw}HsLfcbvXZKYjl<(up_;GqWz%3RcEBktg7j)KsGRLW@1 -HAgwICxN%f+0$}OwWy(>W@N~)|V`_(CL;FH#TRoP;ogt8|T1m9EGC&mhnZiuyM| -ZFOsaUO|YY>nknZ6$RnY)ISSXp?2z{pmtQ{e7sfUgL#1Qhu{;(c=ha!>fz%RGs#O=IUdb}C*tWJAk4Mw--D6wwD^N>xiwihu)QLU?n -q5Ld!zc4h^W3vh(tVbY(9SnTb2yONJNu5D|G8**C%pv@>{i3IJ#}jIHOJ=YAGeDJ-AJ+9FN%%01QGNk -%!FXi`RjezfW^Xm0suF_}nlque|2h4( ->t+@eKYsv9*ISU%jx<$_s*!_niI1#>Gtox9@l@N=zdFZEPp%{iwu3f;2NXUQ#BeLRx@K!=Gcr@a^RU4 -$C-BV#Bzzd+-37IV3efKM(%hVA{X6x|4z)X2~2 -92~nJRRQ*>-%$X;)c;qZGH~^698*!-06`rz=zEg2)u2urq@jF>H@(8^Z)xB45)%Z`C{B%D0gNgNM9=f -eK3hjrwqf$N^K7;s;+blF;zMmRLlb7PGTC?6rDJ#z!C2x(iHD;Iep%`r8#1DDG2zMLqU=Q~ySBbaue_ -vK-mj$o(B$~P9J`}FeV+IN6H!xhiQLN1vpD$mIkq#>V22e`_1QY-O00;mj6qrtm{!gHV1ONcq4FCWp0 -001RX>c!Jc4cm4Z*nhVXkl_>WppodVqa&L8TaB^>AWpXZXd8JovZ{j!*{?4x$sb4^%IbcPvx7B_C -3N2dRL_k%wS|O7-VAa^jcHnZq{>Dit1OkOSOO?pXJdfwqcJJ=;7c|>1-2wEvt@gleL$fz*{e&~NcZEB -cEGY~XTQEU5w4_ggY3R#;80Q40f^DeMsPUFWX==cyhI&RS@X*vL>=?R&8HQ%hbVIpZQw1^rlS7U618T -HK))YmnRVbK843k3Rr&>!De;_f8q)OzTqQp=i=26Uex)o8DYaQWMO9RDL32K!}6)AGf9cXY4V{5BnOf -^*->L-!3q%exjLyWJeOW#of&?o8xMvN~MTfse`hX#ypzxzZGk0pIs%U6Qahx -Rn}U6$J}?o}F0nZH0|_zEEw&%bDTJB^Aul5X+QM6R@;aPOpfPxdx5jwf7);)u&=yO9S}btF#8zw0kQk -#8Yewl7D|Te -wUTp80hZ7XS_?HUH7`~(iZv-j&r?v=-eqFJX)`i3MP@*ph=qrz1jnr6Oi{jr72lYs*6P((s_a{38GcI -ksFL3W_+s@iv7&xN&?jD2@+D1ozIuFkNa6OQUXMRY2O%u5t{)ly66Ez95Pbamr -C|?sOTRYF3Q>uxDF_;v8G;b*Ia)RkGp(&v5!#hGx=rA8M5eijPf~bgt+&W1O(pUt`UoePWyKl*HdXY>c6h0L6?8uaR|0Zo;Y#H3z+4GCn3@|9yV1HKsDl~15_U3(H{~!pcQ-~->FM($bMPDtHJ1x~2=m#o`Q>;I54*1~mvgH_xP8uLw%&WTVLJ -SOj=@BQ^gp|I#;uIl!I!`+ZnjjQi@6Cc=SGu%v^w-}Lxo@bb;OWQd^x(jU4NGf*?krMFJiDI{smA=0| -XQR000O8B@~!W){$p2AO!#bz77BYApigXaA|NaUv_0~WN&gWV`yP=WMyAWpXZXd97A|Z -`w!@{hv=UYIG{-2p3YFbZykr5g-XYehC{@Q59LnUSO|g7wxXo(ocVHZDSiSxl}roZKX{Gty9Dtxm9H$;c864JL-lTh+V9{00f< -WX7ImVCX4Y5JjA^ExS(q~EN?{aV#73&RZhU}+XymJ}H09As@eN%PDl}vyO?PH3MaCb}M0}xqwX-TM6= -S63(tJZA~LatMI2w}(<;crqQej`J^+*wmBLeQ~Q8>TjTui^c8PD7?qDcv){6xdATMZ^OH4 -|%|ZX5?$yTAN-MO5NE)oU9PKlYmduy&=YNZgW2~rD37#R(qcP0<`m^o>B09H&;lO>g)!z-=ao=(1ZZe||O*=Dp(47xEGn&q4(}~k>5jl+QCAMN#iJVKk1ms3S$&e -YJM>?hci1um}7=^U7sAQmhib2q^@;A-*IbO_RPUj@iNVopcu{MSq(Z`k>XM-` -jBV#n%Wea1egSmw>*Dq*P71mD*U>Q3tVC*X{PzW&7P#n`rL9a_*u2xcAB>a#5=-mE2Hkvk2C{(#&j?T -!26NXD`txjtsxu8P>(A!^|`}&0?@!xL9d}QQP>znhUlM>n10TJsG7Z`w+n7b7yBd3vfOSoLFR;V#|kCu2eght%i4Or73T+<`SGm2r>PTJk3) -~tK8{jY&<4g_iPZ2)8TQdH7IK*5FH9-G%r4KEO|K{X4LeS(n2D7*gIf+f2Ojxi75l4mz;8bJTVJ5QH- -!RA#=^wCiA8Ui2kA?Jc1v-)baC?m8!=JOy-IHO*$;!A0CeMUKw83bNzQVBFZ`)-fPlqx2=eh@)LZ@8Y -%)7cnztd6s})2F*&<%m-~OTr|FR9S#w&s;1txf1*yK2S+dP3eeNqY~*_&CeOywr=Ms+p03gwI28c$qr -)IW(>;EUwzft5x7CB?vX0Ch%->g;!u`MBo|-2WxN*D3kp?}Ev_B?O6@ -XJYk2pwWb>y0dU~nm*GNz*@sip}UG1N5L-G`b9Ioq9x33PS=d%4&xMB_y?|k?VZc?xB_Pg$2eE;Eieb -uY=UrFOJA>-BB!#9;*w_m>DF|9NZ=1QY-O00;mj6qrtRfJZ%W -4FCYeFaQ830001RX>c!Jc4cm4Z*nhVXkl_>WppofZfSO9a&uv9WMy<^V{~tFE^v9xT5WS0$r1jpUoo- -j0;<3UknQuy<*U*Q$mArX5~v)xp|FNQ^jhJCHnN6CQFW^a -JLA)Y?lVbUhIYke%^+?)pm}Fn`KIgJ{tAcqkov$?5k_*09lI{OAzI09xa7e-pXi;O`d%1_afJO<<-rl&Fm`DNckEiYvp_6Z -oneI`3w?II3g^D3DEjji{s&+{0$8j%-@c@fnF&D=bB%GE}1=&s~On6G{9EXEHAP^gUfc -dd8XOZO7$gM#FXxWGE;QiI@fF1WfvJb~MH^;rf$G4!xQD77YtR;!X(iISlT?MumuCQmPBv -5({)EY;NCk9J9mWRTE~zLYAv1ouTV{Gqqo^WD0%D#FTk{SYr=?fbGCM*G?Bwvh%IMD;%rFUNu2vdv`9 -5pbz$rm_l^N_5Gm6PJ9^>>E$ta8?9!uQEwhLnvC7{@n+M*+P$+!g3tcmix)5UF8xX5a;UIjOBuhE88ab9OSO9<%TROhd%ibQ$n3h4Z9hv-c{TU{mB|mYnd -(!}`v0{Lp1%9+#2L2cdh-pqS(&ynhja;jdn1y>0FeIkxddn#6hj85*yRf}kWY2g7YnsO*x-brN7|A@d`UC4?C_ed5 -KA@22l471Ob?1%i-YtO}qd8>f#Kf4Xf2qgYUcN?}sNJ2kqfmd(b`|0Hxo-;w{HtE -QQOfuEb@g-O@bF*%{{0}P{m|__PW(@)_-_AdNNktK*C77ABBWn`^XAo0 -^=9RWRXzxB;y=iGv-PS~sTEWaKN&--#L(Eq@T$bn+{N&^#PE6-!;d9~!(9w-N(`@dG5l0wc)5$Ad068 -3vGPq@&V*0da7chX99AWFr#0jq-fTEknDwp*Vb<}*MeOeM5Va#o(uJ^Ivjd7e0_LOns;u?;e -+rr2pH#vHh2gmNRLUspt0N;B(O^lW#Qq5xKAJ#gC}8KatLGFxr-AWk!>o8-%4-NVmj}{KL;Xo-a8s4R -x=vakcBJ6^gVaQJOCU-roxCv=UEehq%8yq@}w~jA29NKt8J6Q+!)oA_8=G=W^v!5s9ov;#EX*`qK1mZz(G0U3!9s@I9v=5kyWK5zIj&T)qnU1WyQ2aIY@$l --Dj}pKD#-vmv#%BOE^a&GMneae!yLRk8& -ilFJttl=XgqfOZG=$el#MnWUWbXcjla|A42bKH{!_*$QNJ?qfsiy4wG^co+42V;1EbgZ0Rbm5FP~31a -az}GMjTDUEjc{RQV^!DN)u)wy;s&+t>@IoF&PE=&8o_-Dso@A41Y~9ppBR|kS%;AgJQ-zjAu8?d+sMkSWSb9`qn(B(c0nwa03gq0~u=Ud34_m{F_Rg8&XN~oweP -GmGr^7mJ)@aZ_rM|-!k}45~F0XTMB5cp7$^DoGyq!+QI2N;QT)Xst*!sgLe_TO@(WWZn^Vdd${;Qbvr -xcLr@3dckSwqzr$p{&Vk2)v>WK#bQ>R{Ewm(A9}leF^pI;xL)v+?@n>$;L&CmDYzEotp&O?BF4Eyc#7 -Y;C8OTFsY-->W5(@rTh;-jU(LdFR~jmddZ1uM>x4TOBgzio^m}+(y646`QaBAL=tCfw=^hqH;M#bSgPcn%9KVQ;y3jl6l0S(k!GMNOnSp+US(>J@Cps*98P+SSlr^vSMl@ZmW2klSGksE|3 -@MoSXQ$z6+83pAjift|!ce9DG9(eq_|mdIQChND`d+rko^G{l>&UmAP*3k6*6Z`DderC?WYSPO{{3dG -Qxhvi`_TkbGUdY^z>k@t^9=qc0_U(5Eh`5G)^Hjatkq^(nVREE2bHd*LL#dVEuhnR^(mr7>!}H?|k5;ElHl7Tw3U3v+v;51_Rfag!G`4-k#iUNZCp$8le#ZYL)~XjIm4fspz6U>p!?aACL+E)9-+& -gmqXI3u((x=EnMaNsxp>rrY?`^&J@9~+4?cJxqYfal2Ul$>(Z8*zb;)#30F|fcBZad?9)dsdbSwrMFIv%KX8)2-q_Xt%Nw$>OP`%cEN)jDEq6;}P53yPRV$vaduqvdB!8+D8h -vMcYLg!!O6XKu_h^N_g3d)xU86h=zBd&dTO7DzOGgOvJzw%Xt$5s6IL276KeJJLBqUeMttBT!RyF1_) -S-F7!}TlZ|4KyDNRdOE@>Ll<3;XNPMA)zz8|X|@o{QXMdz>Ui*{likvNkDg -?cEOUl%*Sr6^>5dO;)nL`+OTM{X)RhV~iyjg5u_KrKD!XoBP -;<^i^G7(qmijyXSmTlk@pCV*Xp9r!?qtmXjqvIpDqUb%hlBO*V_vNQ3CN9c$CfS;so4yFHz9Bog=hg1 -+3Xs+=d71lxTY75h3nwJbOW0zjn -=m<+l)F953#=JF0^Hy@$&RwUdXgnfbo?=Heljm**dNvY#goOeaIz@ojjTy2C%=li17FB?M~(SFsfn5r?5n5SWHc{>?a#EU8uylg -(=FLMMV5Mv)_YM=m$0K&D{Ma8SI1M#s?x$&_WeU~y!a6q;VuMym3Kh+!^OWsem`1`}9rOUBbwkt(=0T -S~Py&>nW6e|L9F6lcRN7;p|=5v##Njp`kfs*<4;MzLjXq-yKVJy`%|k$QtU<1587xCT;az(|;H&031O -ergS8OBJbY(WO)&f|jZIAYl)%l{v(b0EG$D6+Jb=KqQi%r6PPL6P9iZQ!WxJr%-KBWqQ}cXJ-LZ)T9) -iQJ|t~=J}Gdn7~sOqtFPEhD~A9>qDo;g%H0M0%J+^Wp^I{8TpIc@2E6c;Ku6jvek@TkP6z7DfH7cHwC -amqPM_l8fu5M&bHuCX#z}?v}@`;{Xv9O=m)J4ED>^zY0kUEK(X+361=#J00z!0d>we+zzJR-D3&@+UY -cLU#Ig-%L`+qwNSG}NCxV&n4POW`c$!Qn!E2#@JP91z_hIaMFo5~M3ns(Gbl|~!;muv&wg7y@U5krmo -@?^H#VJu{k~*27i5S;a>8~_iO#*oW>*yV6%rP?BD2V72*=&DkhFpqOSua5j4SfKXf{>;QABxfL(Dt27 -msk$-?b6c6Ru{hXDJT+eoJQaie9Tg!9&;&G7oMaxMd)lm*xpUQ-@ESr((3~(e6oD@fbERF^N3uwTB(v -5Sn)bi8qG$@B~?$;D?Xti8GSVK(pU$g$Z6^8fWpJX$~Uxaq%w-vOknx8qovPAtaM??D({}V^pvqRu7+ -gGSnF&Twg|?zp+5^}?#Q0D=!toxb!o0-wHqSo9?&@e*RexdG%uWc?h`yh&-&6T9SNoohK$Zl7`8R?v< -4K9>956oRC1FU^~=MYMcy0(zCKAx$j-B5l64XKG?whYUz6Wozhej`HB%`=p7uevgPr{o>_yx#NfV -@&OAcZDZ0xoisUf*7P#=s-7%A?h%=!-+yDPmHFb?IOl4C!Qj11P@sxHw)r --@#QpyNZjkP(?>w5crp=eC@c?z|p7Ngg!QQ+p;~+^_r;;ZQN!1_S>)=Hwb6;31UgVnr{s&@_$P{34Eg -Zq3mOK;f%sb@W15u1G>?t=?Qk!-xcjhoGXRGluN}?v^((oBix*#4+S)~@TW)Uw_3+3_PQEHj_kl51{3 -G`{&x!~*#%WHLacT#k-F~7mDO_ -??Ls^0SE0ld08!_k1(qWe~l{(Y*r_I~6V@6ScoasL2NO9KQH0000803{TdPDjU(*SP=y0P+9;03HAU0 -B~t=FJE?LZe(wAFJow7a%5$6FLq^eb7^mGE^v8Gk3CBSK@ddq`4z<^cb5!;MhAk37nmrhm@d7$y*rKb -vCQ7JL#i1EhkM -vtcjNA?`8>V7Kfk_g&A;8%?S<}lZg()hP)h>@6aWAK2mmD%m`;-h*D?bD00031001KZ003}la4%nWWo -~3|axY_OVRB?;bT4CUX)j-2X>MtBUtcb8dE){AP)h>@6aWAK2mmD%m`?X5w4a~^007ns001Qb003}la -4%nWWo~3|axY_OVRB?;bT4CUX)j}FVRB?;bY)|7E^v8`R!wi?HW0n*S4>`Rj)}Ztl1jf`Ey} -|iv4$=)FON>dXu6Ixy-GX%(3X42Jksm3Fx_7-1MFFxU4uCJMZh9w*@I6OZsT`WA(n+o6&?||Qh@z2B7 -~UW;<4UvYxUpjVwmUoQ(#eh$8-dXqHjp-MSKzp@2wW5=ZCR;X40Bv^{q^d!DSAhMya|cHd=IPs9Vb2v -6HydZqQ*>HUn=B+u9HS8VdtQDEArU$6{nd`43S3vUj!1SfFqm8%xVBw(krHovasY!tc0<0K-XyOivu? -$ghpCNqXEFOP)`|>$6N3YWN?E}{uP{t74k*c2aqhRal1~8OFmLQXlI08?wqiPuoO@RpYfNb2XC;Xnnw -7%(x}Hdzzu8A%cJ;v$X}9~q<*eOOhUn;8@%$vA!r=Vy<^-MzVl3{({#^jA*yGCXJFTuyAtbH_ntChq0 -zb{RxIBL>|E{{se40B0}E^j<7C-4+%!Art*HA3WDVP3i>dhK@4wiz1!fP~uU{UT7h&Z&NKUN9qmIRxDVH$~ee08E7bD5-bh~-M5D#huD7O-#Q(I~##gPTx)@#Do) -29K9dFT~;T>M3TJiI%&BT$sNCH$RH@yPpwgzgv74oED80CwxSa3hR!%N{9Yyxl{>C$0q-bS$NiKf1)@ -eVHjQ8l1}>~LgOCkb3wY1RP2#8H4>I8=3Z3C4Mo@)d>VRgT0BQ-C8}*FN?A)$4dOrUwV=J&OPWx1$MV%g8b{I#D+CN~e%ET7$c@3 -D7$=E1kui(@(pXX$}gj8|1Lx|_uQw24ob*IG1P9{)~$Y}eRVdriXz-Riy}0v-hQH~C{)%EBp+rYFHl; -#gr>IO5Vb9H4yU6OZJ`4UQzSS;i^pzFFBk{_zcfVXOR>((kt$`rr2eOrvbs*R?QrZ;-WE42NHg)#zn7 -kEfB74h$A~{4T-6W|dmNHk*3u;6P2o))W%f&ftOnBOk2qx-^=EyC&793FecS9cpCFq~*@-lJr<7{pBE -;ebv3cf|y<@%H_e$2@8dA%dSLne!YzV -N=4=MWbK$zM^#fmN@CY4kr(O9KQH0000803{TdPHjq{)3N{n0Pg?*03ZMW0B~t=FJE?LZe(wAFJo_PZ -*pO6VJ}}_X>MtBUtcb8c}D{=+|B@#>8)HEjqj`u)P$}SRaN`-!zH-+nW4vtfp_}V?cZPexfY%{!W@$qW3U|eBx -%V%(DkjO9KQH0000803{TdPCgZO+YcCG!^= -8E`Peh_SvDDolWR3(&?dn!~42hwxgewU1vW77ZKPw7qqNm&G3LWf8IGM)IrY#ER>OQCDowr#BvCdoF7 -cPWq!a1d01B*WQqLZXBU8YvJY%3=(vjO2oG#rOszX(mhv@h#&tm0fEIa7z-U^4sfc;N3m@&T@zu?Pg+ -gtykAtHv}2c96~K>O0axPHX!y_r{Di#Tl1y=vifFQqhMOBoEzL}#jrNjgenVleX^xj?OTiBB|z;2CtB -_|B9$mG{B3XTf+|6Uis4bU%x9ga6XV|AA2xm&9KSJtnKcC}LKz7F-ogWeL9Z$8_9g8H`;?n94nNEMsB -bn(sl;Az$$Z^_R`&cCM5^R!-7sXFsW5CwNY`atUspsWK;-V(C}8Viz+VDLp-7by?0Kgfy-!$_5DoF&_ -8A0ru@ZUAGfo(niel5LVz}CaPK-BF#v?dU>zv4$0_YY_;=uyD`d}9Vs;q^7EZyg{k;QB -b<|pCf^ZbaB1p`{`R(hAtqISR+115Dg_2sjWrz0JMt%K5(;cAAHlTD}Mz3SI?TfwgVo&GHkw&fEt~YQ -eWF{^<`1t8XXyBd{c3})|Trsqd#PR%T_8RJ_qQ0Lmo`#F@YuJ9p9u57Euc3}B>Zkd#Wd0bq9dh`8`oY -l6FzV$Gv%Ig*#rsS^>o_2#+GvU;o^)(L`i=n>!MN5+1Y85$ErMWH2YLqh989P4ry9^Nb36uTQl0@GhI -heiH9Q607{LELoSiY=8sO=EvI^?JOp@#nCei~AW}4!}=XoX+#2qtKdH`~?K -FQX_JmSE{RK&%MPbYWxD|1$1@TZY~=TrcmRS`CTTLI>*j*MOf6lY}+1p22r9)nT~0j~nev(gv>Zz@2a -RmFH)0p_fZ$!}_27}4naPk6y=@`Bgo1+U2qUXvHRCNFqRUhtZ{;5B){`?X$hohCE5PLms4r^ybk)8q% -&X)=WCG&#a`nk?Zubx$nSA^ndB#6lBGEfX0}9*zfF+{0|Xco@6aWAK2mmD%m`)?`Y;$P~007=7001KZ003}la4%nWWo~3|ax -Y_VY;SU5ZDB8AZgXjLZ+B^KGcqo4d97OebKAHP{@s5Cdj3IFD#@=-A5Jx{EbC$?j(uZ0eb0!(+1Pq3!AS#LSdCBC0Pf2H$hLU;R4*0tWVI**8$|5$Wl1+)^g -lDP38uR!YOTjS`#zN9KfJt=Cp0XM7{V)!t?|XtpGXPX>PJ1M>W+#0)F1TtnjK7I+3s-q>-J(i1U{$A5dEmkcsLVBZ_b4m6Zums57ChR0ld0GZCqy0!DQ4Gi -6rctaktY>2X56C(oU^6bxL=bVoroVS4YEG609ca++@J&V1)(k9icl;hpRCC3+SSAr$!h*nxkQ2Hk2Sw -{Wq(*?4@|D2K26YQ;3==ZCy1gL5f~HVam}YvxVC4h93tcFXP%&+LDrF#W3|b;^)_5@-{=&g1_6!O7$P(b41MgXf(bKR!pjr^z -eoLlJ#|6i@TAivNI6iWWXdCQYdjzqct6boUmk`OdTAg~`s#UA+V5N4;TvV@iZarD>EP_; -FM413)LYE|Pdchf*MVMJLto^D&6GLW|5poY;jQrXiB>>Bz7r}(my^68~!w5}=Nh{-D8985u<@PC$s#> -+hNIdpeI@Li1SP=^?84gJ&mL12Od(3MgF{RNYSRJFEE(q2$SR&6XP%SLBASeN$!HQL^A_oZGE$JFmNG -4QgMzH^b?lA&jDv7F?9dIp6RD)TJ=74x?FdvZddJd+OJEPwnKnjCAkZ?f3noxEGfl3b(qnD)?bE_^d4 -WpMgpE6OjKRO2mtVQ35snopaErdqRcOI8h1Xs$670X)_(n%QJZ4lHjvn?dzey*s3&dgG)6N`yjWijjDZ<3 -<5V+B9LgMJeQ0n4(R0XtF|`vluE2zI`rQ990*Pfnpx_4GWPZq7t@zOQ5VQj&P616P!@s9y_-*3ZdbO! -j}T7py~xhyCDK-2CQ|6za}x=>|&;1C36za4Yu1k+Z@CqR4g}pS1AZMq16MX?`iRjmD`Ztra&D!v?P4~miWOB7xTfJ`6|2nz6yuRNIpx?K9|7FtV{Fh0a_UF-u$<^ -IxGk_6j!x(=ZwS)lQwrSs=U);4g01^D!K6$VJYU*tomzdNlDg4Pl-$3I(u5-w8)ltm`!g4?aO3KER$HRa7JcJM9j2SI270tOJ(I-^YFD53=eW^-1MwYcemmurC;WziuPu1Q -o2=cs%W=ylhUtoQw5-vn~e7*ZmK!Ik(-ouotr8E?cAg=D%?~7XyGQMUFD{F1UGS$nY=PLY4tXZP2AL! -Hg6|iGdIyzLH -tZQELIe@zox+4JgM4?y|Q+}g8Zb4F~1>Ia+dW~p?nyisTtWn$s9@Ycq>DQ_4cZ;#d2E9-diw7pwz0K_ -I=_xoOF+368)zt?r$1O#^v48hyHEq*f~mA2n?p&szYd33iq_o$-wi1QH7gHY6b8>^hlnKM1L-=pzbog -g^d-j;(^yKRF#pRr3Fu-cPUz0oYraEe3Js{`RvM2KpWlDNDXS%YCOa6-svIcDbEt&9`lsk2WzS) -pshnkEY`l&lf}^~a;4|EU0DeDoctYMY_)P9l)^EHKW(vy3*$;b(T1rL98AG@j)%?aRC?Q0s&#FifL-` -az}HVbgH;-#X`YHjUeRz3uV8D_8%HRaZX_^0JLj{`2J2;(M9hOV<0W0x!g+V7vKIdHr2(o4NQS@eX=z6yNO38)jFWEqh_#85f2i@cVqI#Q)=`Wv -4DwvK&)!7BXjN;ne(NrWBKI0IsyUhPyFk?y6=>8cg54O9T&8+T+UyS=$ocA2ZCKNIP -*_hJ^*|+8f7ox9Gthyu}Vsecl;Z)?;0u@YL_im{Xm=8GU@c~*j3_?hx8 -V`@WuY8@g9WA;A|fLx>A?Aq#*a1pAHnSDZ^1&=bx8co1vNvrr)#n|#)hUm4j!H|?iR6=`FG9=DPrpD@OhXyz|0EJZfME;8^p^=9V}t6*G~pZ+IJx$em -p_4qqDk|xV!=k%#e7!r*gxD*J=`^@uq+E4I9-;hB{*3-{{>J>0|XQR000O8B@~!W8*fE&g8~2mdj|jj -A^-pYaA|NaUv_0~WN&gWV{dG4a$#*@FKKRRbZKF1X>(;RaCwbXO^?$s5WVMDjMT%Xs}R8!38_*fpcJt -P?PXVR093inq%}BpHFhZZ_t?&tlkL)tRMnmtkKdbl;~A{fu_nGh82GFtGY2N&6C)$AhMSkK7Ad^H{{V -{@E5Ry_AovcY#soAXe7Rk%@9x)7aDi#W%cCL#%-~;cy4_AmyElSwJBzM$6cwaONSV~!s1uiq8)&`ntm -#30bEYVYlm)iYCRde#4DOV~-h@P*DLN559xu>eAiX2XPt=gSD}$BPgTa -1Bx!pJwUYGq}~dLYTdIy#%%Wg*&66^rhV5PL=3GZ9%|S1lli183zRCX>fmwh)Zr_RvG18nFpJ=n*KpD -nage)VTd2wwWFLpP=%I2$G|~$c3?8MzdHWjC+t(TS$?*>-A9buc7J7}!Znei_{t~u5ZtlCD#6k{adU8 -4L74**Fxvb3ujbADd!e>Wz_>vPj9U{%1_enV=yj8BtOu*4wAqZDO|x5Pf7DiDhAwHv83dON&yX}c_$WP2nJcBh0QR`w&?Xg{2=;Q3#s|)%d0wd|^WLBf)zc!Jc4cm4Z*nhVZ)|UJVQpbAcWG`jGA?j=%~xA*qec{d_pcZw+8VY5(ovQQ~DBND}*yaJ_2LzvZy`fAHU+gx(b4sp6z3)$_@rrqDH>F+xEN4O^L6V@h+L58e?1wnLoleazbttUN -!HW+YL5yo5SiH&vj2WZMB9ojie=#rX_GUDNoZ^5O(Uj8!mhd7<4akys>s8>9kM3o~jq=_mb_Hj{Y&l*Ga>>zrzPLr*dvLa!Q`DiKc$_24%$ZNet}|MU$20fl%iZ -00;ZA0EbEDK=;FZtO(GkzdBu=GTpQd(XBempk!x)l)yJ+^$k|-bJDA+pjcQ~??U#8VK9%YPEc29XMVw -!d`Zp+AW+20bP%JvGnj{vy9~Dk;ATFb7Vx{f4&sa?>J#>`4zv3RT~O^iafS^2HItvOr>dFjrmBQr@z8HsS`Ys_kV -jM~&Q)P`?bq(R1A-!wHhdXVBq1>V|?gR4Sar$xTCz+}^-VS1@@8Rt+*2z5j>#k>B7%xJ=7eT~(2y`MeL~j)N>VDKIDN89u{b -OR?62gvD{@LO7faG(PHNk_HN)4r(|HoBeUT44VP9%;_?+2f1?UhtJ&`w9jKwy>t1Y>nITH!sOp)!n)V -WRIWdpvDlE#a*Gi!2qYv#n*SubWKrveLs+lZwG|Ad@bI(B?F^++it^=Q=KKgY0@H^?C;+-DT8uN!^aD -64^?^`1H?in3hfYr+jA==iT!s8ik*Ug3N!IOP>W3+V!QwgyZNw)W6vMrEyHZ2yxoIY|4mP7a;ZYNmT3 -(5pt>$P-APM1=Pi;W6>PK8AXbPc1lx{ILOV-T@d|!%=4RS(T4vL(wa~G+Vn{77GDsllfFH*BQkvMMR# -!AIx<8L(9R5G#uo~l;^VX%u!1KCiX#`7Is@l?b)B&TWU+>_I+0Kzu9iJL;KlFGU)kao$a^#lMRQ%K0P -EV4y?TI>(^-PZCgB)_f$Njlm)7$Eb@ylgTWt)Phz5tcch3{Un{Ha&X6ZRahB}Mu_vsp8BzlNp)_fmz; -eekg#2x;K#g6nU>y7dP)h>@6aWAK2mmD%m`X7001T#0018V003}la4%nWWo~3|axY_VY;SU5Z -DB8WX>N37a&0bfdF>e6ZW>4Qov%0&QVa>+f}N&OB_i3FI8Gg?z)|8Sw3oqbvdo~_*2@GClH4UI6qxfp)D -X?n{uA$S~Qf}}3Xl!%FscWJ|s(5x0bnKDjLx;~V^7CdQkfhU12c&Q9&fvBJYvkq4j7>@`C!GO%O#1}H -vrRV#fA*Rv^5nHA$SP}>r=WGdLM)J@qZl1+%%<$S5YZjr*{1ki|IW!P4piDrRupmI`#1Ch{kTY*t+)$ -?A(oDRVqX7$_qkhQ>D-tu;Rx}0njqoLpg&-7y6}&~q{c>)5rEV*+NuV+x)s0B%l{}fK6qAKoQ`^<|i51$XAmt>Jpw|al6+hOB(wA%^P^xtiZ~1Buni}S)QR|r%+J~rLQaAw)ml24pD(h(4y^x&${sUHp-0vto>A -cS>cz-W*jX)4|cRl)=Eb^&Cc$C)#)C%g}=+u_JsLypIh9%-~Clg4vd5H4Elfng4dJ>muzmtt3FXj)@n)1 -5F2mc}Ax)c8Q7TIS~W`z$Ml*o&6EjHitMX=tr7IVYjodq3%!kHZjGgBbT@f&&~ISo=8eQxe$|T8`ARe -J+0>_X}LWQs`)EZ$o?UGrY*RUg!MQJvXB@zb<8q5?c0H4(^jUg)=L22REgoxn5Z^&IuLCO7A8yy;B=e -PLA~^cOari24!H1#VfJ1Vprs2p?%Xq)`tJfS?WfyNYh+JD^rc@{pd@U3gh_u7OZyp`)O?0=~Ghx1+vz -cL=%guVdtK-z|K*)ZyxHc4H@~7amd<i{i>7MsAD3RdI= -G%QZ`keT7tc@clKftkh_>tne1B`ow$s&U=i~ix23wp9QSUEccatlJaq#O(;z;eMOr3d0x3IaHkYpyG( -DW*8zdA6gd|B)`9w0#l1%{u#ceHF;^1@B1QwN$x?m3;$A1ybspk%STavt8YCzORnM*b9T$Ee77O#;_h -up4$o5HF9s&78q0g*`xU0kDJOzv9b_7SQlKw5 -rbi0lyTgoY|JBcchqf~7?`u`>1hoM?E?vmAGdTee^<#ld9rM5>8XLBa(7PwT?oDvd|$idum3Sf_ePII -H#Cov^Y+3F?#pU~*bY__*~7xTZ>%b&1SIqmfL(Wd#m&1y@Veyp7wqRjzq?1!|`zWTql{p8l>JcvXrip -R71wwlSti&WuitlB?NO9KQH0000803{TdP8*_L`CI`207U`-03QGV0B~t=FJE?LZe(wAFJx(RbZlv2F -JE72ZfSI1UoLQYg;Bw7!Y~ZI=PN96pq)m=xC~X|GS+EG2qwyQtwQUz+1jLX%?5uzx0H$7a!Bl#=jZ2S -1e3c7q%JeI2;s>2WZofaq(-oG&6!M5GI&cLX48k+M7BrxFjk)-)}N*cgtj&*+7>fl2V5e&ow;-tVwdx -eCWIGvw3%ijm;^|mrJrRoha)@53PP;Wa;Fs|!g{rgHgOd2i9y>8mfOvKw|aWtZ+CGA3Qw83al}x$q7d -UsCCN8ZD=m@)7BHR$vtT|}Dy?+e!n0|)GKc7tV$<31{vtnAAgd9UQcUMdnv<)q(lB(|9INV8+*C*k`* -K+IHxZGe5Ju3DE@~Zubuyl~>7_0PZi>A@HyHB4LANr@q3ltw#VWrC!qidbhZldhG^`E(OG*hf}L4myPF)vB1t}#jcffVR0yAE+XkngKsP)h>@6aWAK2mmD%m`-Ne(&;ZN -006w90012T003}la4%nWWo~3|axY|Qb98KJVlQKFZE#_9E^vA6ed~JMHkROjJq4!Jo?!r26U$@CNp=)2Ig^8~w1Wion6aIS1#418`p)JUk -F_nPkPyk!YL6!RPqP-u~XcI4)P~D!aLDL~uM2PaYpWJ%E2c6W?V;v=-;l&)F)3X5VCSTGVMGno=~ksd -%++Zp%WPmy6~;s#5WyY>OmnGWZQXq?L$ZyrQYH>$WN3+f9|G%d}_^)_IzWZ%&U-UY?(X&AUcKMIw&RU -S7OD{p!ud+3R!s5!&r7s&Xmj^F`aVRXU%GY`H2cXntLndE2CO{=T;-e=lqGsY=zSdR_1BHP!lPPr#r0 -vCj9>cX7IE#3}u9QdMPjB*ea0Rng5dIub<*=)X-X>IUt_OuQ_M6vkR0%n%;cFxPojEXvErSK^Q2>2QC -V$2riVxH&yjNT}~T0)3e`>s4CAP}fnN@=sHG+@$XsdI-SfM-KEH -0WyvYinC$y1YYO~34SuC=fS5Z|X8*Ahvd|%P`ZrE^s9mRLlL6P;gZL+*;(N;NiQqR@*DSm2;?(@%OR? -vrfm1m87OrI@ad3LQp1@N^>fkNq90P#y(HZHAYHo{PQL*`y(r7`T -O}J)LFgbcCwl}ZNf$hBP*09DWRQ-m268r05yO+I;+D~b*bRKF!?eIh!I;+Lc%oat#M-KmlL7F1CUck$ -Ph7%0(Uf_e{?dZ*(A>*a3WR<0`WrckuP-iM@y9`0P@Au!I*XsR&F$B)H1kyUd==I8eOV>n-fZh{b$gv -AS(V0(`f<1`3S%-yq|=JYfvc^~JL36fjANWj;3lPRn+AAxZT|FbnOCdW`SIV{v?b~J1wV9z{rckDZ{# -A-BdK5Pah5sAOV+GGCU_xL(LHE}Roeic_2&+9)}&QambqTF87$R?7aM=t-gXh?b=q~HuPi9@77$!j<& -Dx=N?b{V@nLXV){P;OqtU2)HpYK1k5%Oas2j%j+obFf!Lkh -h|n2p7s*yG`ab!Ikzee<8rwIB^QkU8iWrgf5Lx$H#~{w6Z?^O0J4^ew!p%61hT -PQ{bn(nNHp0-@~fr9k*Csy{1tQTp(;ukGPSADjzla(ecC6|GiUZ2G$1r`&tWd{}wIIteWW9&FLzT8N} -d-mui^&s5Vr)o-a>7p;nwoQW9gI?FDYs&EH0p#Cg#u(kDX)t3gCk5rrT?}N0bOTnHJHQT0WGR&6JoOF -i8XER-09D?G7HYlwg)$E`JjZ8~t>2Cv&SD`z49Q8BH@eYbSBu$>df+RFIYW8hf-PFv~ik19K>G;ksrT -*w;%ATZv=BQstV#P5)2E89gP0FP8d9MQ+D9%9)dk})}qP*pgh9N+mzSsFT^Q5Q|fjMi66TM!7h8^oXb!W@)ns%j)J4 -vf)v+h_UOw?0LXFjUkOmG^kE5uS^ABl#NIV+r&s^{-QIT+`XdyNfD9)3dW(~o8{@ES(d0%s&pA;6zR; -k4}<|z`RVZJsspHr1PxVpuv~2cpdXGcGt@Qx(x$JC_`W!;Yw%h24?p|j^T$UbdRt}*aIDB+Dx!o{pH^ -=nUK7`AKy%U7NdIN&*wTH7z76(9;Ms-;L^i;&RB_JN!e2Ox#K|KlXDZ~-T4Unx^8+6PH5qBNM^ -OxrW#rH^z#3wNBssgE=7#_nuSe+DbZC9{_mM|j`Lo6olAC(hvdi|*1%#jC{ -2YhX>LAfl&VQ93zfFN8d!t<}s-hA_1yga)QQ3DNEL}+$?BG3wH4Xuy?32L)NhKjHd_qSPmYXHQkUJF8 -e8&y$^>I!|V3K#$yQRLBenu`)zRxCW&2W9#Ig_<9SCV7;+Xc2iZV -m)HXQCD-~L^+AY^QjrAX%fE(KpBRfS%?&I=5OG+(_gQlrjNcUp2jKC7;nO_pKX -xaym4#13r^jz%qXX+6_>vCs5lEaauhS#}2sj0h0AS#=1Ibet)*JO;fz2`)xGHElM|t))0Fjia{%A1`l -N((0w2q@y8YmJ^Ow!k>OTRM|t@{kUN)!vt`a-i@dd*XjhBu+OzrTO@A)|wTvC1O|&8zW`4>5E>c>pDB -t-~luh={D=QFkiAf`C4|DL|15OUrZ)R>|rUmzTB=M>`;holGR4l^x*#zR$*}vc^A#;}G5L03l8Ir+*) -#Jql0%{POJe$?>!ElU~FEjg8m`xi&Ejz3p!Vs4+WJZ(H{7(kff5arHOiAvSy{0+?-*VlE>=3IH&4o_J -vR>3XgEgK;=7K2=BQDVDY(Jl7r -jCz!h)&gV^q`Nih$3=IGTfWRCi4bt{E~u30O(7h_bu|DvPrMmNNjWK^zd_MO)BXcW7SYsOSWRCjDIFf -fR7;2AR9gKMO{z^8g=o>^dB$4&OupmJ9Xd$b#4V8=;M^i4O=AzhSBtLP}B$BF#v_Z-a7t^7>+a_UhvF -?B%m>5D@+F`sClnbOo~PE?rN>TOMge3=LR$$JEFMjzdepyn=4=gSgpyq-LcSGXa~p>{YE?MTcr%&KRYvEb=wz>J)gApc*I33UZsF5Q* -gFInqRc2CCK$AS8uFIqNyn4IV2u$f7ipxIbqPt=nrqY4*hrKm5@5@o~ZO(jeOp9#xDY3sE9@R6Q&^aL -X3jgNN9{nhU*c3^ucaM$+O(PqzOkuB*QR?yJA;QUDQTpju79uRrvy_MUS)(u?|mZzYbBGOdfTbdJ=D1 -zY`~?l*oQf-Y=BqsR7R8La~JfTwyAlgXs#8JWlf(f=OUKd83gtT2EGYoq@#gbgeqU{6(oAB#aiCpW0I -Jm}dA3c~d?2fccqlAURbWQ4ZU4&JRzm~#q%uy4HrX9KMvCP=^?Nd2Mvme^hO4NAhxHpu$(GjW5dA6RF -x>OgCm)XB2Vn+%ZRMO~ArkkObj)Lx*J2AG2v)Xe7ryW|fa-rYylP3`V!z{7ApPqG-AhV3c=QU|hSk6f -H>RP^FVT)`=-)yC-!!9`%`RM1u`0GpyHA`+-FOx+KjMh6SCyoSH>6 -GHh3=NSQeX@uVVLh%zKWw&DQwuY}77U+%=x1`=?Rauao7$IJx31Jq4u?A5=`d1l*5CwY*Kpjxn$j>yY -3_Ni}15Z<+_Qf%pId&i;Ne!Hr8Y3dlN(L!}DOeXwgc8ln2>4l&WE_zw<5Mdm%K&G>GC%HF>6@nv^VU{J%+a -#5Q!nReK!@_)bS~QokV5}Jz;3efypwN^t?Ws6MCt8?7CzJH1TnX_xBCJL -_hE56g`>w7t9oY1_{A7J$Dd)^ooeys58LR)Hw$!2~nr3iG?DTB0xafpoT&7Ji5<{r%y&cZ?i{t(L{GB -?(j8*6&(gwxm{!A3+VOG=_);*qfJq)ZFBP7+y4;QpZQ)FL+2$gaf4N27^{X!ht>fWms#R6u67q2#COJMdjGW+axt&}o5XA9X*A0~5K=@?1n1hl2l#lc{fM$1SVkHfz`p^Kh -dTSt`&6>Bt2I%NQD?hr|d?IXGx=SA^6X?LC$%Q37jT+(vSt^`Zl6*5@Y75EqI{LINohPHVvo)sGW$9+ -29S+wjpBEo3=Ib^!0ndfNBT-1g!Vg5Mvf1LRE-6*2{>B)=BxvIUZ%OUbmru)7v{c9&{NL;9q^AZXf4n -?(&vK;14D**lpt0OrIk=DdO2bt!(v(1dJ5Nh$ZU2ix-|%@9nuc2r2=M!4`*5h;xCwr -4rnzw{KVC%x?sEp=dBy5U^+lkhXn3?ZfH`=@(cUiP}(gW9^2_34b{#dB|QkH-y -gy!yJC{^5sgcH{iKKmt3sd(HSoGKN!IDr<6cyXsaOM(Ct( -$FJ6})?-q*T}7x@9=N6B*|H9uiSf_T+i2|X_pgM9)zcWu+K@U0Ux?9mx1|&?qlK$T$H(eHzgTu%bIs6 -)@L{MzRKx0qiNRx{t>2mcs7AsJib@1*94RjIocG&w4(3?F(sH4oV;04rkfeZ7wh7Oty1$*fsJUj7O`r -NEAMqB5dc@zldj%l>RT|}-6Vi}Mv4FV?h{n -dVxI@JFm5`#=Bde^Y1zu_uNm5}uW5?vfbjtrz(`kBS@AsloBt^ON(Fi;0_5kx+b1X?G`0LSEo=$yyv~ -wvo0lfUMu$lk3y!3#)s19oNR{#>XfF=q8R)`@{`*wLM+C87TG=6*=z~jysuFA{ZcYPBz=FMOF>K%C8} -o@T&;b$W8)#q39yT&5%@)vq6<THG5Sb%td}Hz?m;~g4+h;w{6joD5`pVN+X3^5Nl0 -F>A413-Nw5PkcVI~<@%yhzNGBa$-lawMH|@A4X#+#f73LpoN^t72*6m-NeLH`1@#1q%W3?;OTvf`QgC -|)!uTp0peZ&}C9?h_BIjFN6s;^Vqd?uYSbJXFL8T6q -{4zpZt93icxtJ6(U!}P5nZ4%UkZoi?~GdoiN{<9a-{WA{Z?By*OZz|mcU`0R`4Qrpx5tR -_11Cz&kaOlfJdD0cJ#?UYB1TL0L=zOEhR(%4MtITVOh3#;YX`SIx~`QBK)DJwc?WDhW`I93c$2=psI5 -X-rY)o1ig`9ro7r>*bhSX1=vNkYu0d{b9Rn-2)taE-s6d2I)fk8lT_E`2EltgR65Q)3R)bp1lFf7;DE}rDtAydh -f3lv;0L%*Rm1Duq*FxTmA^fm)~3XEK4ac$*uFmngWym3lrB_T{kZe!x8E$)i)zFRe1Qr@#YdIsLzkPY -y(h#ZOczmAlc=$K)no9-tf{_P@1*`iaT-ZDC38RxJ5Nh{5v3bEhB6gl8-jOmCu)pHb6Ak!=POb`L{p@=-)$0jrIu)O(xvu|7u~=4>^*UIY!I$;i-k`g{xr7P5v5Y^rC8=vO+lw{eSuN$ -lmyK?Wv8wR5;Yte_(>UPqA3kXS+=sNKo9UhnM3ff&pymY3W2NHFM^B}@izwdR6w1<~&^Z(&CFwv{OdFypn)x2tpLgry<|Gd|V%KZ2wv~NpJ{ZZAh$P#WdrK}BY`vilV)!2nja&%~H- -KN$w^Q(UY6z#>s5dPu4zETIKW(8|ekZ0!Y1ZoGXbeCT)&4!OW0-v>R_xfcE26qj4Yi4pLIaTfk6@jW9U -(xe*9A*$5>nz^?E?$t}RFmg6b7g&zNoIU~W_tkK4yw-U`AaHS#xTfZ5r3f8xHrrQa+C!y{tjIk`B76E -7suF_dDfO-Pz1}0~g7-GQ}*jv23MPST@6%|}#Ks$nOv-I9bS71ht?iR{vpH{)83=LT8inBVLc?z+4)N -mFGyv9{~oo6v+c48yzqKi!dTOK$Od|Z}JBEb;#Lp+SfSqK8!mFDvFYD@wfSaOU~%aT}v<3n1WAOdBYu -b}}}Lr1J|WFn^vf=>&+N-081eqUuxS}QWuoS;k6JZ0NNwPNK86AQY&n0x>YO=4hRJa)4TZoxN_p>I=8 -p-o1o0ReL@4cBYb)8tx6^4WFIa{hLR&xt6Dq2Ok}1@)XvwP*-=^fM!o#d<-RgAMn3=EwX_H5G^oWe(~ -lpy?pTFW>)q)wSCfQGOq-VR#UmG^(l64v}(+BNGIgKBy*rTP}Y|*X-hx9(91gO27l58-SqAl_cS!E;) -_95+Ae``aTnaatUKxSQqg^E%A47Vd8W~AAh6BQ1y2i2vOd~8lapiWg7Bf(KtWU44h2l1go^gN -lD#x8`Zb!cm`Gir5(9gt^23UecD-#Pt^!tHQbr9!xU>LK!R7CpFQ)4w -gR`yS8P+74rl^(77R!;Z|I();@ZUU#9mRVtkg6y#$G50nf2B`f*4gyb6 -zZj21OV7c06A!;7X=0g_LhEC7&@Faj^VlU)R3ppBxtT9e0wAME)6TJ!ie%cZk_Mna=44GV!!kYy*4NeyR}mKT*IVYdVTM+6q -d!5CG)4BECNRh;UbJ=J-pLcDz7j|&2CS54+|GpvPR|w#>a~l|tv`k@**t959P>VgPn^@Dd|76AUCNps -*~xxH)u9kD1ZU%2g|E|P`8GATVk1)XOAv#sGI#|GN4&O>Lmx>kOu7LATquW~n>MkmHK|barsj92*2@x -ERd1kHIPMe26dSK1l|*_7Ego7VG3k~;WJ1E!r_(}ql@;P@(jQN&z`*tYy?n*s(t7hF<70fH<~v2#_pO -XnXeDEQJ_1`Z;8c^cCfL0qAWnJVtzPC~&p3*2(>XSn%c=)F4#ZmlU(UqS@b@2d611OjgK-AO8p^H>g4 -g78A>s8Kx9D76w>NWnE;9A`nCQ4xeDbS1XEP30>v3-*&IUHT+2ORCkut=e=9?jU&VjlgyDY -t*@UE-AM*gIO8*%XUBc~;!joK8#1_By8;F1(zCl4}lNI^jse_nHdcX(ZyH -_S4Y~p0_B#6-)EfzOqZ+jp959R~uG8(zoVp7r+l1+*+>jkOtN)@uqT=-;}_?+vUUrc>?O2(4rzIj<>0 -1O;xD@M{nr3d6nXstjkxgPrjRqmnT15OvPVL{^wP=IYZW+g-Nz#%A}-931iZSLY!weMTFO!BZ3Zh9Zl -QkG#_mP*5PfVx>~Ti`3MwZxrCn*=juL{gop9y;GngZs3@qq&YB7_+?-;QH-(U^)4$?`&~}QD$NFS#)b -K4ahaKWmaf8*!$yhw-;OUmD)?Wt= -T}1m<9eKl_rLZXt@&J@yt4&u_ZVwR@}e5dC^=xXcSW{L%%?#%73+!k<81b&D3i729GvJs$MoxN3B_DIB;=!vSw|1+Sy0~%gnvLF#<<~$v@)FOAL~FN1*SdPc3s;9*Jf -C56Kk%9iod$QlP56=KPG=6x$2(f<-o_HCHiOo -~`L!vj<{6f?^_?{!v`%y(SAsjxwv%a>c}t{r0?QT{y4Yi8UcoQyh3U&MfiK^jzBp4Z)`D#a`h0*4X4q -d?PwDdT?amihrg^QHlS;A;C#3_OJj51mOO*Q~kxt)W43(~vdT(Q!&T9H4&C#CbbARH(MDB24;DT?KA> -=%5WZyyEZoy#;dlO(&LL)qJYbJBoH?W?wCo^Lqx6+~BgZG_WnnB>f0cQ?rv%-u>laep1OjqQP71G;M; -UdUpOtHzqfxW0`Z)rfW(KA{>D#oJN5*9$2c#}u8H}6@wQgICoqtu!?klI8Y9O|;$@s+n-DuwB&Zc@NQ -L-Rvx$t}P!+vZSTatZf>|w6Zw1+)$w!BOx4@tK -1h#L%|WwDH#ek_V;DkPc?0lndy&-BQKC)ntP=@q=82Y{E%=z$)1q;_@137MrAj-fbRzyrDwhmu+9-0_ -qymooPZ_2f>D(96F=-F1Sr?m@eyq={PFtUg?L9W>c)1JECfsG4AsB+&Rwo -jeJhIj3t7;ps;q%B4_Uc18q`)yVcxR53H7fn4LhFTTYxV|)WsrHkI~Q}_)_pzC(I;%xyw5F -WW$Rt}yyF!6mCk)osO$6^^9BP0+x#l)g>}yS0W(6WRS>2(!DI_e0ig_CS0G*J;;2lm33eG(cO(;hpKh ->uw^`MXseVHtLvVLFO|D31zn!WWp*wJlTyzdo)5WIssx0Vm2=7a~I#-s2>g`{^$2`r8B225%yb{pd{F -kSYw`w%Q?eOhz%X)LotzHx5!1|xs1>?@p>by{9bE@RLsqC|Dn0-K05ib@}!xhd9ffK*?EZZoc_EhN=O?gD}=ZtKX%9h}1mXo>4 -*Hl)EL9=I|G=H3^Qq>a;ooSeKfjrQ3^R&c2a-MtN(W|hTvIhGCEoFjL7CN3{K&-lvrr5%F|wwUe}Bx_ -Jfw_a8Q`Wh;DvMVYpPIxO7+hQ^fRyP-BjC^ -xal{nti8T>w+w^8_*DKxB4*n$Z+_u|sk0u5m^n55J2o*X|38FQbFM&9Cs^#|K}`uO9wRzQW6VEtfH<^_KA^0P7&j_ -j(ycrs_@)-=QSqy;9?s^m+uo_(WaCpx-TbBpy`gix_YvN$ENO#*&M5j`eYJd>xPq&2ZVsbBOqbYFAO2 -B=}xBIh?-CvR2nm%Dw(Iy~C1jHJ69g=^`mCtmC7BI+@6UlmvtCBT&~oaz8wDu0Yg$r7ay$oKnt~3zM3 -5h4*&zLA9)sSgT7c@g^=9jtf)h6?>6-3tcTYvDG{Jj3L#F(5h68t^peFqRH1B@a@Y-RHr0~rmoeY8_g -s6;%1h|?nt7zE%QX}jz@6=_OhFP*BC4;~T7j*_s=~zpl>(O7!6S%y86@PmoAbZfeMJ8vN^1ukI1>4?BNnvESeAzxn?U!~YGrGl%!X -yO|!oe>l%~Vb$M*2ixht6YU4-?xDG>yb;j=E!zg=O`Dab+ExueRBKZ$@PBLVf9zF@fA-4Fl6SL%!%aN -5+Wu$odRI367w5qa3zXmojWde7MCti|${Hm|f4@cg{|V!qhC44F=B^tqZhlYW1?#lVIj5jR9;;SKF1j -$6ZvO|rebMGR@nv7Ns=pkcz5EVezx(Rh#l^|%m(Hcv -c6+MUtm7Q;)woN?Z&nYj^o7*HG%&}K`*<+}Kr4H2ku`qx|QRZ(`iGW+%Vv0Zhz2??BipCdL(vqp=?K?V -8AQLilBeRNmZ7k_3#c<*c+jb}Y74f4j`~qi|8Tr(qlG;if}`y3JHH*MeWvpuP -K(Fnklejx>QSvuXuoIubQ{uV0ljZh`z-Q6+AVCyEyozsiHW=m!;5M6og8Dc9eQ^%KQyQBbSZuIs}mA= -W>5sYcKVpHUt4`9Mhsr8JBtJ3ck4yq*kc!k{Kp - -Z`Bl*BJjsB?=nc8;=Ot#CdkU*ZLBtdqP6@-6x5k8%)@af{j-SOW+>ssHX=caZ*Xs_6My*d|Y -R9`DMi?69bOeB|R|v(q^wwxk1K;0C?=o?GM)j_(wXtvE?uno?XYPyWE=jrBk&`Rh*p`+YvE5nTYwoui -sO(gsvf~qbOoVRjb%@PYy6$!pt{CPH;p*h@hH<5g-`^is4zCf}AN{MR-`P!a49|g+BENkSeH=K#ptp3 -nK?(k8d*#H>(n1ViG_1*z&Ojwpi{x#^fjDW)F@GNWRbA(1Ni^LsmNrcogs-N_Kv?(L;M}X*T>vfqJb; -#qn)2{<^vO?#jgpc8-8A6wyd@x>%fFN`04dtKDVLk#UeF;bHo6&pDYs -|P}B#iOlIB;v<Ln2bHL7AqzyPdv6^pa!p@pTXc9cr1dPp|G!X60|XQR000O8B@~!Wyd7{y`Y!+gRmT7T9{>O -VaA|NaUv_0~WN&gWWNCABY-wUIWMOn+VqtS-E^vA6eQR^u$hF{i{R+e`7f6Mo=be;xmA#6snd`cKt?k -LoEscwU$fkr52yg&U5|h3Eeb1xc50LUqvPtblC1VljKHYu#^m+B^(~q;G!=r58EXw-oINS8gqd(%CgU -1JtvuDkE+m=_?eKvYF&c68U^DmCzKYz$RT#M}Ow!d!b?0vKB?}}Dr-!_|iQS@a~Pod^}A+nb*o}ImZe ->Uy!`>d!J*|RsVKfHVK=kGtfdG{V)Lb-!Sj~=}}dz*dvhi|fSwXVcU)I9@%F9!$9wpnGf*>clwS}~hp -nWpWtOB{?c(O;_ -<-By45Yq{pXWM`+UkI%~v+d8|Si!}~tlC`31Htk$=vgEv30Z>)`ecwXkFW$(Hx1#N!mil@n`dK%>2K- -F2@9S=}#$X{ow%<-NE>jmPF#{Tz$zey^Z$+_~iF<_IO -|rWdCg1#g_Wm#L;Jaw)&mZt(J3cr#n9Yi+0?Ikb&U2iSw!GZnbmWsP|1(g_i@NKfgjl#A?e_CTnJhoM -x_VJBn}MqKr?)^s`A6sz5}IhCOOoQIFuO15-Dt+Bm_gUieti4p-G}!Y#ZW$9Zx;aYNRE2?a|aC`JbUx -%)#>Z!(UL%8E5NHNdhq1T>PBNDTE{O -pyx$-z&SUZrT;l$2Mzfku94x6VSiRpZaMOIJP^*5dcE|_FwL697E*wm8gO1!Rm)^-vaj&2YNX3N)+wT -Se{{ltiP5xoB+hWM9eS>a46_F50e^!6C -|O0lAn$0V-&I?!BvY~_;5GV<#N_;YPWb?nf-etoWMe1w7FkFXq}3$P7iEjCp@qAE86Sm61`@f1i|)C+ -n!)@#A1p!lkIC)OZYfV;vP!0F7IrAzcovdF)HK%oqcY}9Yp<(#M%q#5;nJRM#h6RLUg8mN2%Fz3|0Z5@RK#{TGxGSp)BtdgS -tOMCt3uA0+iG`FTrpKLU7|)#mVDK;KX27mc9imB>I#!b6)gW+gT^g4>NR2egpu!I`HE`@8l)!N(N&sr -0fc5LZE6B|LL`jBm?6ZV2T%;~8E8;wn-mq>3-;AO)%H>i;(M8C{1%clkcs{q4lNV{(g3?8yOtRae+Sn -^8-hV2^(ELwIu^NRPokW@)d!mEC?i3&$vD^~$=@yo*&wB$&!BFE8!OWljZsBQLifS=)sC=k%|B1zIEd -W;2Q&?0}06(HPNlsydd7S+qvRVK_fm1;5<~O)T?nHhopwj{-w*gww>U>sIsG0&NzZCNV_yDXp3lYGE5XeuDhdngZlFy!MkqZduj~QdaeNr~GOLm1kIfM8dW0*bI#6dBa=6jX@ru7nw}HSKY{5in}I5_rH2NrzQvu#xt+1S8KwjmgN9vM)bIVc--gdsmMGaT -^XUjs$!(042?owLks2DQlk7N!Uy{&FW#(%Oee^m2_Q{#Z*1rUwkfs;oL+^2vEh+bv0#0OCaf3ZW3U~f -QtHR#66l8-3(Z#C|0BK7j}wevqg=$ywLQUQ;wGh6<5<0akxUD``e*x2#~M{6zin073>9d_saMs3NLh6{GSJS;V6pmbbF^NO1$bI83}D@?Hx=3)+B78M)-YH-?yrj;MJxb;QO9)w=$BGr$s( -}y8Ewoug;^7gPp}7pw4M+O(1&gnMkj%KQdtgL3+||@6q#}WUUtg%AOmZXMg3a|aK|s1?bZq5hO5S_=KGSC7T=^Wowi+DS?heH!s#u28aPzX*m^BfV#~tF7l)N;sP{R06Nz&Td}T+ -xkYEh?xFAu3$q#tD}vV+da{7D;H&Y`K`HFC{A?+f*m-gy;U^NoWa8s5<;Jczt4rWAW|EKfh^fXgDvD; -*=%7IdRJ|zLh3mT^_?KHb9Q4=6$c!FDM!Nx)(4YcVAA!cah5>F?qAlk(dI%HHAV8}^txG==v6hwJZ`V -Thza#&BY{kp)7f@D|V0b>IVh(&|$Z=4ud!g3mMu!*q_f*c9jtst0V-9XV@3v{?6k` -y{uU>BF`A!NbBHF3-fQFnUGgk}2ZV^U+vM}J&SHK8nagqVq8@?rtc -KEbO~7|$8N?-Ea~_n%C%u3w?WCsHpPYZ -KXt}qjf)=U7D#AiuT+U!-D4=SqYu#SfH3y!Ov*tONKW=&{6<2NH5JEi8%i*S=;`5Y;`4hQII|4%6nv|+13swUOqjH{?xF)56uCijM -<1P4r(b3(VJ_6}-CGA;u8016VS@T5WWZYKUDpwO?kXK#%YlWUV^0 -`Uq5rmTw;|~pc=ndcRK6bNPr7XMq#NhilWgSLO0NAVb*x58Rc~oIusVb9athDdvf -7R8BH{dT~WPfgt$m>(Z*p~VlhL$}DR@mYR?V7TKyFUJ#M -%13GLg9vz)-O|1FDM8^kzR3fwXx3k00$}J<(6RYu-i-{x6z29R16&kg=Abja5zj*Adw5niWzFzorjxQ -_lh*mN-A|%Y)SE3ZMvSt5^ZYh4HNiDM3Hwy#PUzvT9;b4h(1p#MV~15|>5t1z36@G<0*hY=jF1x -be5+%}>~Xyp6u^d_Tk>&ZJ2!Q6N5Ni~f{C?YfJX>0vjC3JcS>Mz=DB-WvFr^VC?^#@-r -a0X(~a!R7W>d*u|xMaiL=>!4%b-WylkO1__i5?1KK)(zAEhvXiv7J$+o)^;#xfra$QS6BNOi21OEWtZ;<8w$q&}& -t~kP;&dG}eJ}o@N;T2*7k?m$BE^Rk7{No(n34+H$K=CxAJ-1_qLda#B8T+b+{&K5-~^oEnPK>4%392} --qswq+Z}m4Li!VD98*z_9`Rh{iusoqZ&&-o&`qm8Dzi3D?$%CRmJ6-wQXY2D*?`#4t7DMN(E2M8Sc+U -7%mmXD`suIy#}0M|d?uTh2oEYT=JYe{!w4?_{jE4VGoQ=96F~1Djt=`vyc7tY5pEztGBsevvJ?T3DS4 -7gG-frok8p$RuMSr$1nWPa*oIp<-3TZ -q{in9!)J-?B5VxP&f?d^)#AW-pvrC&Lk_sIuwzx{&_-hF$8!a~#C|^}KCKFXd4fGfI#;S`|2(?TCWb- -L<#ZhTsNFo0+x~l5KgzN&=B~ziP@2o~wFdiBGDA!bW#BLGnPsK4VO=riD(sI9JJ$wzy7CUPDYlR2XPv -c^-QH;nnJTekB?a5JkX=((XL(6OE`U^2GQ#We>Nbg|c44m(I`|-ygrA$6rH4DL3VokxAqF5wdwUTXuN -Ut&eEuS}=ilcX^nv$|lT0r-vQ)iIK#u$#&a66bBw8BXxd5;=QcK)RMi293H-YlqaGfr2|17-1l+8%~Xsz*<{KMi -R}6A94{_nU#{psY%=Y*QRt2+gq_{jp@twBu6(LmG|W&18nmzwl0g*45}7y3h;Uxo -BT}BdR7&vC*lBY-vfqyHd~0h+(r|5<_~rFp^fW@x{*%n9bP1 -9GP5s<=Pxa#9jlX3Nc-CQlrOFFOFT|f>Yk>k79M%r(R1+C(g%nbaY7316N@~Da_dCy06<|Kl8JGf7+0 -d>#4p0Y6Kh;*2b`TFB4uB54`7nG1Dc970IZ3l**Em;ZrP0~Ap;AS4)wCdwFr0U3dZ+eW!c86HM -tdWpXNs=;Vku^q-+U!%O -s6yA660x$#JnC|0_p*dpl^B6&C4(Y?7?rQ*$`SfJHus$i)v664S^*?Qmuf -2*J{ukqxN$FWBJcC8GtnI&Zq*_$+xk4il_gpsIm-L9cf3c$tHefU#&3WQec|JL3H0djSYaO)>Iu1Z9? -+isUrHV?oqzkJ?S0u^*#@b%W~{*K|@T%Oy`tDrVj}H_q%3(azYX(=0X>pA!A(e$hvSAADAL$2nn+-Y} -71qg?glbSS4(SdoVLnHZ=?B -b8J4+3*46+pB{G~geug{ZR6reA!iB(m>n83=RoTTh(Z-PH$~rQ_GPpR1?a+Q^_1d=Da4i?W*Sb&1*HMyfaRoo7sXzjooU2L7fr-pNn -@X;LZdfqqdStV{og_-1XXVt6X;vSIEjnMC(cb!#2}a^o1zMV$#x~b;-kMeV#|Z05VZkr8BpySBd_0lI6LNThtsz&ILhT3rL0!AC?B-7#4WZDvazYq51Tk|V!T9G(2ZJ -m$e0}N8D$;xWA)qQk~9Otri`*PQO+mT_70nqbmU&N&R(L~{td>Zwopt1w9iNW;DIfa-P)x}<@*m*Fr} -*~seO^2Cb2xh#R9#S+Gf2+b$pQ7sd+j%@g_4lHR|M#Y0)5(oDcsYw#M}kp)%bj%^8?hO-0W&$HqHg;lTj}XnTRE8ATI~g~-x=QAu}rj?MJf(j?Hjo66^R-<^CE=~>}8sfnXn;`uLh6 -rrZ5>GA}FmHe@H^t=7!q`X`!ifv~jT(TE{Yy4~vZQIqnl6>N&ref#@D4WTNoZTVe%{Z%VN?PBuTX;ZZ -7HdL8CsP+n)6nrPMqW9R{@+0e^mMJGGldOOENHt=tgOz-wMTQp=nt~WiKoVeI|A!;YZ(U*VtCR&@qWj -L+Ii85I8kckbX`;v8@5K~hFgPFq*k;I`6ZrMr4{yy!eTc`Q8+gn8L-48BUv-ENwJ6IRc4Ic9A1aaeO(Fe2# -<8vto`2l_@DOUL0(rMV-q~bq#Jr5Jb)TCn21iye%dg=usviVEHFP9#7OcX3Ec@0r9d``Q?f^#m3Uhxb -!k;as8+J%c@V5D2j!L3ry=QQ60@&ClB%Ir5tiGKb%VDPFk)W;GU7zUZ>OsO1xJVVY<#fLsgvap0z7KW -rQQ=2-k^rm=0}&~8j1ilrouN3(bsvH|_>WG_tNlb%K5ZtmK(+6V=UfwaRp-Cct -OSZE*ljw6w-qlxS4T@*Ygj%Rmn#FnGuB(ulkjybCj)-jWOy#di$ULqG?gV8AeM3>T< -fiIi0}7G?P~B6lI2JS}>{BO-4b!Wl$ -#nB9%Rqx9KAVhv8Q_8}>%{CBQ7< -%j}u!8A?JNk$bsbtqq^M|NrC6BUt9rpn#~1$S!nk{7{M(oHkUA0r -_ZOj&9C&?b_k}>^$V+fT=_z{3kBN0dI)CB0tF+qE?%wi{rAwMF7(?(sC=yrGT=ek|nE1KzTgD+RE;Tr -hTO~beM3tSbj6?rdn4RF)O3QXvz5jUN``{KTG=2K!+Jw%XyNGd^6q!uZzl7>dvykcW}D9JvrTyP32Mk -Q!SGhQy)T2#sVKEdUf{!%%Zo3rz{JZ;lSJ^7>n6V=jJ0AoF~=@Bc%G{w0GQo@+U2aMR7oJp)M1c`g6B -C7BylN?iG+44(@x3l0(i02&HXDf?+~aqxL6FiybNF`T9e1G&(V1{6nX1c_U5-{E9qSgTc_2Pr|SnN~2 -*;s48c7bcc-cWb)=%frl%e<`)-7GB>=C({AsT4W7YDhHTRfX|6u@Khj`;iOW#%vJ2|j2^KSQYNY|`J; -QV?ITB(TK;ayivWbVY5EsrFGCr`w$aGT&3?FTH%pNRrQZyK|JQI(XR7ro_gx!Fcm&ae~Oq4QSDEre%_ -L+aap3-djjr=dCkbhai#EDE|B}z7Ne)Pq0z}x-$WWKA_Ia -tq8O?^zZqu-#@*VgtonGhYPY$xubJGnYwB8?_Ne#wavFD~7kRkP1}ifQ@Fl@R>ecH5FPeDf(Eq -c?Rq8^M#eX7Tt#&N37t`iXT1M%j4R!6ELS?TvVP__Fkl{std%4J#~>PQuVQ&;mo@JN+5gLp4$qK=@KO -Dk-L@Ow>)wu*ZxOn)XWc*^r{xkd;aHF0tA_CLNm!h1bnI7&;R%?_m(MYBCpJ_edhx^tC}go8ndsR95~ -n0ONS2JW!Jf)g_9B0=#@P%9T+@_<(4L>74*Vc~|ku&W(37cWQvdGfA -+o5DmN-B5;ERc0m8FKGKsYV=MZ5Z9xLwGQ=&aOQ*W-XJ_1&`*v!Qu2F>e~=Y09a^RwWi+%MrtB)ilej -!yclT%2^qH|pG!-?bRd&tuu-380ru>-$=5{t}Sm3`QU1CCs{cL3#W4yZI0S#rKioN!R1K&Einh?XCNb -?lmO|n>SZ=*{SrpRvSE|f&LEN{o2Z8iTm}0%DTB8DPGbdHr!jo5j$Tgh`NmCZ~Aj|tiH<5g -mgN%~}J;bp+XOT%^Poyd8v*mM^TQo+y7pY?^zt~# -+zT;%K3K8?fd!D6C$*a9!6>X_WDaXgoa*e%&yj7cZrwq*9U7jO2-)|Q;RzEVmE{3V66e-{b|La3lSd6 -jAq$`Og!i*zb+l=bX8)<7f6iqeF}3?w|dsx;R`J^xHGRzA@H_qcjj&19@?o1!9B4Q7Lyse`*#t4fX!t -}B-wq7374_U(%wU!8$=UN0(j7i_2U5B;@VtNj~fT{@va00s*}Z{VL255V_R{g-GHA&m0;Hq?4gKGYX) -;{GNC%~3}_br|L!r@(Y1|_1fA;W4mu#vdTphEcqCyD8Cge)XC%l(D|bG -eh@9EMM!bd`-as)v5$?curG6rdNG>_aP=~SoNlOQxfhGr-OlpxAg9r5SNwTLMoGFrtFyZ8+j*$md)Y6 -%uCkLGs_+zrC?sL^BFQ;dwQD7`%IBx8rMHD2!rt)S?kLmJHjwNZgbyi6q{QvAdzxSa -j2hzbmJvO0hsjo)_sSi$w_21cAviyW_yjy4L|1sf8`IM_I!KXTVtMNJt2#nEWel1bKNIWLe+;r~Lw!U -uH)Zhlq{)PnyHwzoVl6|BH%_N8|?qBbq3VXmWO@RoC%d*CptH^m#I-)8@QS05x%r}w -^jHlP)UZ=uy2V~;QqY+TJ@!S_Zmw-R1{K0R#>~tiiwVofc6eAY8eW2zc5tX+4Fd_B#aUbGi8^f4bmNe -89hR9u(%2@Jf`t%XsM9Y_Dk;_e9Rdgx(J5JQ=AOA1npVgp<=z{Tie=ZbH(v8OE8l6!GpAN2D&1nUNxhgNbUimP_DXh;D2*!IAqMJ3 -u%*VXQGKzguz6Iu?z;d{yGk=!w-xuYlR^^Ed0P?^T}P=y`m3H0GGl51;8GvUlc!eae=}Q)67zjbt+fc --2s~G+oJ9;{+D{r8C75)l^ZrR&E9Cb8w?Huqwh{?M&vC`q2IaPU5}MQtIROvMST$wxL+j3KU}lwZpyX -Xf&Ld@^Kz$%;^3!G69Mqnu-uym{AZALNe+a7(#`x -%p`%f7PQ;R!d^fL~LIf+N{95mI!EfyJ{xnfn{mHAy;tgqv@tiDqrv+nJh*%emNT8VS>g5<}P%H34p;6 -M0$U9R~om`OWWpru_belF%%bcSLLxE`75t76UU%Dvn{C$mDH2DX8m&Z@W+71{+d%_959p#XiCInT>Z1 -`2BThB8aV;)?8C0;58QE-vUN0Hw=SgR7QQhVPbKTHOXD3MLa*@k8Tjc3O4Kgm}>k;~vCvS-O&A;vQv{886HTFh|jKO-t7q+@R~Xn@sS=z;z1})`|D1h5oN7wsL!N=HH}w}6vLX)AB%PG~(T8L-Eez3tvqMZZ?r{2nml8 -PpRz~bG-$Uz>uA+U5u~>0TekN&`X1z0JoIcJ>M&z?e#b}34p|91sCS2au5Qe$Q-k!?z2Zwf%Llw0~OV -w7A_!0%H=&_FJ#B1h*5R%XBj(?2g@OJ2bpzvdR24V%B`M~uf= -iz>mZ6<T$+J%Q6$&f;XO@@`)+&arSj774yl#HVDj!iWyZ25a{It1PZM`!`_Ix5Lew#^6DXoCli|d; -dlT0EM{SX*`5oK48!NEAN_4y8+%jJ)_~r(>9sCmaWLr#kZ)?N%D!4tQ&8-*WA1k4HWM4UkSO`L14^}pb4jWO;rpNS4z#lpG)A -W~m>YkXil`_2qBHY|t2aD3&YHT&YO1)DOZ88RKb^}B6LBd0%sVf9W5(%`%oeDfa9Z-d@^6Ze&mHnQQc -F;(@BjTyO&719+FB!JI@igd%cs;|ys|5WGEeu?{@E?tId=bs;c3@<3rXD7LWMF)K|TQrKU;D2ad -B4)u9t!c031TArwAY{t8B76SkgPMEIAjkrcI)>J*$hmX4v{?oEUxLQS5re_N0KoWTXd4MVb&gi1A(2j -3uu7+u%swLxKBmvHt_e-A-5aNfIV_LSg^umZa6sq>_Wt7Hs48y+y7}9}ZJ#R!V?o}6-j@V(v5Q)o1wQ -J?>!U@<=yWvazx`A{a?igo*}@X)66y6QV{fsOgGGFX^QLO}wDE$91=CFYw5+pXvT@LbNYXfp1esYUzZ3oX -FXxl@+Tw9*=>1hW$Bag>q=)t=--;GJxwzA4YGqhUZK6xVNma12Zr`cw7<{+bsX_EGa)kRiBv+47}+u1Qa~yk-)8^Xckb2BLKqZ2pW4puHjZtCua}3={^2*ypT#{-`vE`e%i+2GWK#km&3ly!S;KTw?f8ZO|E3u?S& -oeP9$?4PM`JFM-x<>`-2~REH#qWe6o!-ZtbR-30qFoYwMS6zuv1a*v1jboAX1+DSt9fb!0qaBAWqR=5 -DHO*dcm>)GZ(lJ*^TuXc@SHo5_zR_=n@e)3KW_8UEkdd9=~9U;!HG>#m~3k_-s9pPSgG$KcXmt07gzg -T4gVAM5m(9f6lPDoPAj$tIJOn=k{R`vDt0F3Qkr17acIAylwA=wwx&cjdSl*fYiE(#u>(s&Wz|^6P|( -kv{{TlxG)3z}jbf9ZpZg|LFIb5j+>HS5N>4=xjMt3ra-8vx5&y%J#i%?9wiU*%^A(vmc~j7tOKD|rSs -{)n{BER!2Z;`(BVX;Z$iTD9O<650BZT(zON;^qBE4gV<(%L3)E4_h4-5Ig<;ohaL+oo+dn#dj$}KN)b -BL59mxI%cUNnTuXvmY>=*}abnaKa=6SoD4AqSYMXS*P{lI42vP^`DGYLLaaob*;mw+nYxm^Q1xAP#k? -cJ_Z5S#(gtyo^gIEJ(8&R9}eOSr}`~`PF~1&w+VSw6QoWj%lN-1Bh^^@&$ThqQ`Q+uk}%}zcA7g@%5Z -vfQ}aTM|`p6QYl1!W03jg46GPhY#0R2*$=x4h&egp{&Mt%lHW05Z_jEQ_^vm2-puvGo4cYYVMcrjTG)wP6~87Rij)x#FINE* -)3-%sV?&kp!ZgQX>}!P3S~+OWtQ;d%TVq78Q^ -WL8wZFhxo$C2?iWAf>7L%r|jhB-CM$bEvansyjOmjO0=m#8F4gcO~t8{Y$Hz7@xx4T}s`ru^eKrZx#) -z6+|q-?j2QEs7D2n(o}TU#3O;TV4OL($wnMPv$9Lz(Fk}mT{m`M4|GSnvRt9kZRT|HHrAVufme-6tLY -JuXdP->>A6tYpoe<&*%(JBEk>Ga-ZB*H2?Y`Kd^rv(1ke*smx|lb7(ds@zzBV}%i3B&QYbF|0Sibqh1 -=@?y?%b9^@F+%T3bvW62Uu`PHbo8H(WfnhJcDgeEqCtTt~c1;R>Sia)JQr@Cw4h8bRt9v~38|MvPb@^LGU+Bxr0%;8O=;w^^+)R^=q)1_^Dse2YQN -Z}IBN>!wl(71bxk;A&wXBGkQ>-*nm=_(#36^3_c!Jc4cm4Z*nhWX>)XJX<{#FZe(S6E^vA6JZq2Kwzc2)SMb_3q)B -GwN7|rw+r5D6Y?=ie$5^lXfNRWXB+d-88cCO;c0Il5fA4va67`y$*v3T~L@>M>i99?!?{i4%p*a2GR3 -t^J^39p3&HD8B_~hi_$wTp?DEC@zwnl_6X5!hCr(cP`s65__H}Q|EjG)C!mB_r3sW62wTPa@e&9=zJn -__M5VlBnDMV+UyQSc0Iq!uv@l^d;AwJG4&MoYPqxj|TOq!ceNUtGL;a}k*jM#On4Ui|Rt`s(seZ?Av2 -dV>$4-HFvNYn79$si&Xs=UR?{@peRM!(~6S=3~sLH?uE(jn{$i7aBT^SqKDE#jF`t_gUN+r*0v;7 -Wel1V)mSMq;rS(&-O*RSKMx+`@0{YK9Tm%&x*tc-Of=VDc>EL{|(%n?iloX9r|voB>ev*RPR+~`T1Y- -PFtij`8E{apN0m5WqC&o@%vO8r_FAND6FNPFPzxnn}Kk>({m3m1z#-pR#cc5?E~#kbGjzPw&szWV0kZ -_qf{8dFwhj~|!&Qbi?6PE_a({SKPuR~OG;evi%h@kx@wbj9m9xrsOO5`^kQSgd}OiJ37Y9z1wJf3LTy -65LqJQp*a&tOEHfxu;OrRWP;HDwE<)nJozL>&v+($^^;|CTO&%8HH|EB;k4w7_NfT=DOZqRtxxNzLP* -OV)TMWTtJ6cX?*qf#cu+Jkjk}Kz)NKoi?EW}dXD@$e^untPRXAZUYF2T#hI!kC<#oYGI5^B=%i_I2Hc -K!2<8mvAjR9Om!eqHvkk{2wM&%>{_Q23cI|c*8@HY=>_67K~ckK8OqT!W-%be|Zohg -UUrn;uy@WSOy;H@zOC;yRWigpz>Q_M2aF-R0?d`{!Bco0`W);(V-`$Ro2Cpbs1)WobEQNs%!!3g`630 -uqiiF&llSQX4QL1vW;3F7FCqW+q}*)nCe|H6LBRfmEUxy`%t`v>EbA>Jql=CX9j2hGNM6HK^FL14@A@M6q&n?+O;ash9--3^{->`wYOVvC#cXCotjGv`4_%w5ZKFPI|&zPG8VhYE6A-qkTc-5SerFWE@ih(sFQI#qe5zg4_(=TJQ728_)CfFQl?(S-=)A&~ -)kq)NQu|sUuC9FfD(UhAaWvEc67Gu$_oaDmPNc2{E)Wm!hM^Rcjm0v^2HO&j_FeGj2K9dAcFN1w!cHc -}WTvlqXz+_K1M%fjC{gc){Z}T~eU756iPQjAplAn9f=nj@YULB)o#w)`I|X;shnKOC!>`x&+1C6-ID%^Lmfayf@zPTk;F18%v5$z;3blEN$Kp)0?1Y&}-|a1sz(q(1=$R-^$~~>kYI%EMAfLdr^yBU15+6jVoZ1FB`(w3t -vopIatXxY9ZQC)OLfSwv!MNrCyxzd=smD?nwYNs%<(jBCyj@gEiP%rVyn;Xj6HN{oGQvsDKsH2~bCD= -3U9~cr--t0E=E=WAu|lx_9YK>{&^fBai0vo&$}zwRO@38|YggSQ)1xyz43eZ~`L$3UoTsZeJW1-ZbD4 -wFU%<)`|qn6a5kuq?eC)gkQAb+@kq+IDRX4QJjLRTX#IjBG -k32i)S`?)pb8L8)NATY9-MP0ErNeqo{RSLS|Kn~+~_vTDI7iW~poGrh%&z4Qxk7z>n0ANAhG8qGJVu9 -3{4sMW}HX;&vy;}jo=-!>YHE(tC&2zj<$pR3*lL`z|=ca0dfNOhG9o-v?ggKzKRJBlDz4<-$G<(?}V)15D=P- -FrXWu=KFKATdpwKKAc43PddP$tY07b71&3enfBEh`&`b0}nw5A&g$tQ$~=B9zxf7ZpF)0MZlqeg8^2P -9K>GWjsa!?PXOv#>Y+m5@GMzbu~Fcg=!r{h87&c#2f_huIRdmV+s~ptFmBG^Y*!eZkVeF8cy*_;Oc?M -L=n3~&KTzeQN`M>AWn$WT7*MFJjROyO`m-Hi#PqZi1kFMyaS2%)$CHE_6VDXmx^TBunH1N$?%DSW<%5 -u*#2bNx-2_J2g1|7R7-k{_4bn&yHSiHwGYn>tM#E9|!19zLo<&%7Uvk|D0Iljx7(A+6>Ks}zn|TJDkx -#OsLd+ZSL|fNOItHuc903CgrZZH&O090eq$1r!qj;7C -gOMF^+o_X?gVO=uKyg0^aI&QuF+`RXA%dNzk)SbEF1TEh*Z_F6yfqEPxzYfWC|5)A== -&;o44oP+R_+=Zco4|k{=9e{5u#LI{}9Q57+#Cr$*P2N5lnLH^iq0brqXr%X4d`*UtG#;EiCAK(5Lk?Q -T-M_Y=o8yf3N<#WDJ^Php2O1r8oe%6vi{%-ren;&wZ?*Xf1QvTE?W%_}GJdgT$(K`gKI7IHj_Cg565sl@0{}~|EeOC5hP} -!W6;fpVLG`}|SS4f#4HaF-VNKES-y$}Q`VhfoO$W0RCt2-%n@gCAvvhuy+Mv_VJUtCfh)L6ahX=~G-0 -+JkIhXzoR=A3IE9Ib;K0Gj8a;|r)?#J8^e?O6o#6yC+!&wI?XqroFTEqJ({TZ;PNpAEnt$yx%c^5{-O -5)-yPW}~e-p&`Gxi&bY=CO?UhIP{;9n8%u+@a$_yL@ESc~o%u2DzNfyn -;Ep*nclB1n^&b_|bB#D5J|=cdY^2)51bVjxe-Hd*5Gn+T4y$b2 ->-!m)rkZTig%rfuOxD!nK;+PRCO?&9G$qX-KuDokLxT;Y!em_wQQ -@u{6iBgs4yCl4?gyD5#4;6fV9Ed0fV(*xu*MI^q3!AXbvdxbEMVc0g$xGU-`Jpc_v2&P18hOv5q+bQn -Q@<0|qeX#{n1e$#nJsX+iFW3qGJk|&tEk3r8B73 -_+TwT{zaE9ewTSS1w2HB6uH)SkP*bPcud<(9Rs#m8BjDpLc8;8rRl0)eIn4=AuKVz^l3^dyPPVF#(Uh -#IPbr(%+!I{Xp;C*TS+EMzuMXENu!eY0aM({9fdd;G({J>3oE^Xsyzx#UFm7m|&JB{j+grb*byOp3b5 -fB8n%e_KU0BkcwQqUH%$~J%6Z{+MgymYsHF#EQDbKh&zk_Q^KKl*9EPYlfd{oh{h-x2^(!ZO3VFhElV -dKw%m$<13P&ffPlf~2j>@m4zA`)TPQWeDX_3^pm%H7;;zzFV7IzLG4ktSxeumNH0KY@4%CB=BSdB~GbM_fK$Hb| -?sE~4my#o%iaP$zC!E}8UOv%^hdqeS>ma^?!6NgWOakp?>8%DwOk9J)q_?trugEAKBN*d}0ES}F$j1{ -(QCgcyVo^gJrKU|;Cu+Y2=KMcb8IH2rAjKifci2%w=P77}2j+8+i2$1JrL+<7e^1$MDcYt;C`#Biq`Z -!`d-6b8-*H8^_)e$-3wJRG`S>%*3i5&jf2h~*UCAkte%X?($=4Mq^R_UEBk=hGLY8L2}{(nAan6d2oe -lf#Ru?bU!EnnIrppKDAGPX+I(>J9iyUx99U{p%X^(QDAXwsx1-5sLfS)?!;LVl7BB^k=Xk$5@cR(6DG -hni?~jj$aMNFWO+}TA~JZ*B0);V%Wn+fCQ%X;#-KTD({30y5lVlF0Bk#BdmgN -vCu&NYYTzy`nNlrWekghKD<$5p4({GSAA -w8UaGn;$H${PBMCkc{+_K!A(jNO>`BxbKTQZ1Z6lgnB)N-Se*rdc3Ju!6V>=%nT1#0ju~ru>mos|`g+ ->K`VPW-o*PBtR%66k8oe8N(H^xM_C$VFc>k09scd=4D8Xoey;Tc)Hx&hg%!U1YH;<<}q?HaeJRL;kSw -o)lVjHBnwliA1tRmak%?8`St)X6Pp yuOidDe8T$9oR+Hzp+pJfQ>`wig-n`wS1jF_BG9hQz1sV@d -AW~8RP$vaaVK={dY>vFHf0b@)6CTb|#@gU`FRFsA$Q|2Ewnnle9uFPCe4_x;1zk4YM)$UC+d7=!&X#S -{b=g0{9H-zj)&-u%vwMvA>k|;_gWbww{AK~z#AnfmUPnOrPV(U_oH00GqxX;3Do6LyEyu3Q(PJF;`wS -r-XX^51^bGTswpG!#`gIv0(&5k`tg<4xsnkC)8T$Rx|9&=7rlxnNPe;mVF~&nr#$o35ZuBMSzyn)XIR -*A_%=Q5)wncXQ@Ug`~VZ3A*?}t;v5U8~}TlAQ|s4aCXg- -6%)YYWjfp_}Oiq1u){va{=V!p~i;+VYa*84m4_PV}Hr71Ie~<3rYvzHL?Ks4MoU~cpsa1l0TJIR<%Y} -UVspTjeQSofac7~rr;RmZd+v1?kfOP+2HuDgoN{dK-Br9CGz5r^zf*7dw^VE4PgxSB}coKNdv(JqJt- -n#G@3Czo1cjl+w=QY8a3|5+UMYiQ*e$o&g!5SU3j+hLs`+3cDhIZsVe0Pv4%maxk{s*a3mtqqy6U9aE -XeqbAtgsfuu;$N*3DG=arY=^T;u5gvmFBHF`1jZ<|-|5!l%%Mp=hH#@>-x-{69ah%6&GNO*n=Y$A;O> -OLyv^TpS_%y{f>ob<t4?A$n+JYtypDl4> -pPd0MKgHC;M;&~dE#w{iCx14}Fb6bVOyaRcJHLTcc=>fpc`UOZ_c -h+Tu-20nni73pItWTVK2y;JCegZ-M(BL#ppRj}b>Va+C`Pg1p=BNeEnwP)N_<@IPnczqGJ|N}2FYkF+8?} -@8RjaR}C*JXvey-^%yAE7rC)Jw{Znq7<3wafi(FnbP69yEd2Uv*sH&9Ch1QY-O00;mj6qrs-lC)GsGX -MZ|$^ZZ#0001RX>c!Jc4cm4Z*nhWX>)XJX<{#IZ)0I}Z*p@kaCz;0Yj@j5vfy|93Pc(&z=VQr<*_rG$ -hjWJnfRW>@!HPZ?2#1;BtQxy5?}yOGBeJ9-+FbUyU_qCJF_=?&f+8%33gY%s_Wg=N5S#O$HA;j^I~xt -Y?}G;pYhGX(ZNyhq+D;Sd~wwT(UVbd^5EggG5qs+@Q=Jmw!y39pZPk5V&CPntf;dzXv(0u%7Pc$=Bg} -$SLM99O{y&TrrZ>1(&X?CK4evpKzl_~<zB -{|_T%dxUcSPYQ10L$U#-ik2^PQR>w|e!u7bP_BP?Rvho2)V`r<>JkJJBG5q&DD5n -O~Rr^ngbbt9oDObpx-TQj0K!^7E`*L2p%|Xj3i!S?0w!fDh}Wsx$huDca8`IJhEN!8i5k1YVD+kDce2 -O}2rOzii3|s~1^4OV;qIhE*#TlV-cl>TxjLupnG7w%%EF!GbW%k>*L_Zm*3H+k<1I=SuzFS=JXMw!PJedZ!cgL#=$DN&L%0mminu#Nf3sr|Gj -)4>rc;$n`D`%)T&ehcuTz$vt)LarIU39^HMcioNicy$*js!!0|j;!oHf3I68Rp?ce)`ShAHRD&dG`G4r$0 -gE@TzIn_38cl>+L#^*F+HGvRcsh@ZccL<}{CfTe;Q?=eW>XabR0_;W0a -XgFi}JPzrdyzyK@N2GZA_I;0SA&5l7Q3THBe{RF+n*eLT#3+2=;04I9LK`EP>51%x+_`)vtVx;9-#i? -DVNdM0|M`SaU_2X{9r^yH4Vmx`zY08?B`^i%&wCKOc@uS17}(;jVfF= -3TMl*&cYECJD9<)s{@DnL>`Ld%>LtmYXX85Bl!4E~2SNUud2hU*5g6~Sk&fp4oi?E<0nYlV32=| -le47OwgP3Frwm}awNgA}s~>SS9}XLzRvVJP)sX{Y641EdRfH(=nb+2A}=ovU)QOap{~H7h34VJ$Tg-E -cH5)R>sOOjKUin=Ckb_~{pa`GThjw+8N>Nrp6K^67(#EQoXlBr&wdp!+YfO9bnSd|)!)08xaO(P$jFpauL@QYTGQMKW}l!zx=ZlUX -+5H|})eBV}W|WCXM3ZzfyTSuYftZ0I{zbP1G)mc;v_v|scYeAFg5pt@E=4-r4i7oWN>{-^umL{UiE9A -y=iQxrQo#E|F}mqg57a_KrahOG`P9qCBY@axRtAPzaK%S{E#0UQ>jBK#RT6oqkR?-Lg4+bR8?cF0(#)=6;<`Z95}-N)3nWOOdH@RdAQuDLk}Q(Es2d`c)J7{Z1-E%~#q@Pk6sR& -VAf}>3`a2B=C6uqYE!ZL;{%{{B1RIE6q83dNd1yQ-W*I_A+R<)+QUW1eZ*NdYPo_EiQ_ZeMGVbnx37p -ZC&_Sl|AWtky5Ts#H_Jnuw;1gT~Tqm^%$QmY-ya3U7B0Grb%ULM%Yi@jnVE8gw=mJ$zKvUCtQn&yMJuRyypTrt37SGI0h(N|vspgRv$_u&0 -+?-pp+WmEp1wGSu9Pbf{{ep$z+>XYmzUu(TO_k>czM|eEN84yJrtoHHUum^BDS?_5o2C#Up$Mw6O5}7 -Pe}KHwfxs__792+NEZz@t7aMy4P>EO%TXesUNQBg#?ALY!W&qQRXsLf-DWg$z@q@AR@O^{Dxqxv)Tjv -lxq;Q&)HpUE+gKpBJ1TX~EY&u0WyR6RX!Y6L)Xt(2vep?0M=+1KqW`-T-yZyhnakg4F+i0{~q_K1g^$>O%&|qNEH=wL%q -fSxoQVgmf?7PS*Af_P`)KlzOw?(vp<;5nmelY7bNqs#@VM(HqF M+=X@-W}s+Pdo08gEZ1F!RkG!^ -m}Vf|lXl*-97n-_;vRz8AsiJbXr*heDkgBNAh}JpHX0ddGID!OM8oa0K~G{TX4adu#t65b%nw%=YSY% -M?RsNoj-6&TxuT!BzJ8|+JJG~6i5Q^Wjw;H)Es}}Fzc}BZF*I1@H?Rg$i7Y?x5@Zb|!XVhdTCLY)K)e -C%4cVyXL%6+73s)b@ePf%R+~&(A!bYlwB8 -3K|3MjqMq;$xKK<26EAeNH=bDOhns-Pi_>LC>g7JXhe&)UI|VJZq=kRslWQYqbPoS{R~JT{p<$QyJJf -%e*F$UdIeO04*|kKzxEd5B20wLcI>TIxwe6U&$g3o&gyX0)0hS-_4glPzFTi4(i_PbNq>retyltyj1X -*ET1UZKSGTwnUv8%>#L1Hg!4#j!K+ktqTK?t8P+Ri?EO0ua6p-*)Ul+Yo(GfJTGghXJwUCZ8uPcKy=kKiNhxe+796h>_Wk^vi+o)mn)UvHdWN?pEiz6Y)tv1#XC1 -4s1BMsTDQ9*VL*CElGxX2nHUR@)FGv=}G_t@y`SWkpOrx*!r{Cdb9t3DZqu?ID0)CO)#LLXE(0pF&;G -Xiuv0?MU%3har^6RD3np&AQlR<{O9#1*BVp$Xikuo~1QH^81#iZ>f9=*lzKcp27lg$@8zjDDU0+!h*-i`iswO{Q=FK*U0HIngOeIDlyJgHtq(!1 -=JLGX(A;;wR&>>(C6>(~52$pgv(}}m#Nyq31;2uHgt{`o8>7iRoe*B0#+^x*6s5s3){ft6jy8#;rk-y -xl*zR%_z$S|`x>_1C#g8uLfL48{O>ug&Ghd7+Wad0S8d)U&HLp61Wv;>DR3x|Jg -<>4_K4h^vWWg*N#cd98EJY-SuWaP>yw1l=Zm@ABsHF$nF869-#f^9<(^+@;zg&vUaI$6~iUXWEF=FdS -A>t*4vrucijEN{{B5`#QhHNtqa#o{d7L*chKHrNSjY-WA@q00t*qj<84n@Fb2bA&1z -6&mx0l&>}gMyi*gLOvH<-F0IcFgRc_X%tk)$lP92=_u|4l)l`n9vQSiZ_7NdQ7jYx$b&W|5n5Z}Ka?w -&>i;Q1+3bfI=cBD>dKvx^d|SZuN7F#|l>dTcpIqzhNN>9&B6jR4dZfo$Qy!lT&Z?|`4gtC1Th(RG1$D -iq{wa0Sf$TC)LI8=Iye_7U5jZVR0LhV+L1SO0c^C&X3&d5jJWmzS-ltEiZi;aZ9w>S~&|4A%o%0#({r -s3>wtlG-YF_PjY%EDT4Z9i3ru`na6|@8%^hW=66ZY%&k+Fsy@YQmWJp&Yn!&3;JIw>ILS#L1B+@5`nbq{Dj6dK -PlT*P&lZa#NjY(T=rtiq0zGqL;iH{pWRvO`q;o%_NwxlsgcF}T6Hk1OL -J9Z6AW<|hJomwEhDdTZd{z%H^tnse(YQuXy#P8PIf5=Ilc8kiGaa6T)H-2-FAVNcF>Hk2 -?9v@4Y|+M|qEw-N)n~*Lt1roxV&^wBndz2%;baDGSd9^vEV^Sgln{HUI&A1iFC`8w2~LhFupo#`VRl5 -~K8DqeX`{2TKX}3>lx6Ew!akr=7?d+4BCo!EeDe7hW42>_|MllPOc$N7EbIfvWz|;+KtjH}N6tfk3p5pI?1t8$sv)J4!QE%V%BnI%Q*ZPKilLhwX|FSN-@+3-w@ogWW`e`AyJx -?D$0gWKs>%Ar|AZEZ`H(;?DoRqWNqo@g`sxfHh9@+zfWTsJ!Kd_e6JcsgV~a=4wu!Wa=3qkS8rw_2gp -A6n0XkPpHnU5n%Q2!V-TTsT|pJmhM1cySKDdngv_!)Yv`KM3w43*M>If3u|Y&afX_zq6ylOG@Df=uuo -}jYJJa?G$EBG#bT8n%Y(fnjdl7Nz3k7)%waDw;NQvq&nhH2kfKmTZIUpajZd)doE`itrdM_S*Dd6p99 -ITDEUu}KI&!-YAjJt#*Y~PZF*x3+75z5Sq9O=_`xW|Ex69At7P39s6-D}d2|*)t#R;WaDsn6!mpo>Lb -n^nY@DJY?eY>;rIJHC!YQ^4t{8@XLkmL9)*Hz!>+l_2%JA9C+z8^=?T5mE ->IMhU`)t+E-zW`4C>A7s@tx$vNPqOSL3(?YpX~raL$QD#%GI~Rd;ZYl8@Rwn#5XH60jm@Vb#3~d8M~y -9a!N6b#zFW6RXsIlCW}l5mm9b9a{&H!l-Tp(Y<;UjupT$@}?}3Z=<+9kfI=IulHFS+@f@aDz0 -QNy+*dCTJq|r*DNv-IR$}9(fS_c$Q$m2kJm0JP2iqW-DP{~^?>f>+IeAW(-s8#T=XhmzmI-N_C8Ifa7 -QC}oLA^roY#}~*I^ZrR!D`A^>k%-ce;bFuX7I4FiBiE2*7%jpo9AYh(9Ug*Lv1szhS^NBkiwDxmF|!b -l}#=TUHz1vRx~OF_O4X24+@vBNf4|_^>;*YU|W=yp4;Fac`apnSqa8*CdwO;%S}T82 -fpgQ;t{zSB)eh~-ms+#z94)Eh>}^veo?R`Wjr=ppuJX|%M`=^mgeY0t6AGPFRN-I0jp(~0VcBx69WhL -+kahqn@)QZlu6yC0RX_u6*)BSNZRWfYNpS*J-v>ar>KE7phXj`X~lNadWfBE8xI)EX6of8Ez+6_`g;`P{{ZgShwAX41R0vi%hjvDEjDs|7enom1QFCOk_E`>3fI -f-hAAfueTikNb>=T{uN{H4OMvj}O#g~D1!uh$;)8K`Up5|yd5M6nqVH7Yyn^|u#9+i#k^afpTN9R;A?9mWm0hp+u9H!@M}vFT!~BCm!>C*AB#eaYD2pg -+C$=(WrTQ{U -5qKE?Z5MyyIbb_4Y&`+>F`xCIb{X*hY&Ggy3fkAORLw*eR(^w~}NEhatyyR1PDH*A^Vf4=(R`CYjo)( -h(ZtHP`_Sv609rvMLxm#`_eAc(DU33s1w3btEfm>j{Q010*c7kMOLH!w#!JM`W>ujMAjfZl_hnCT;U* -8eb!qCa?@Yy&!STuwQ)@WOu|_ppx{Ta!6PYyN%A5QFv!N_WD+)9vJU)Kh4Ctu_!J5Tid`^cP}}~hw2xQJVDUY`uNfJV@_r8qB)M)ytt-+*ft*-1x>HDdCJJ8+azL(VR(TgJ>9Jh4rgrk|2Sl5 -|W-5Z2a%LJ>^(03r~E09OMil0X4GXuScEmqvOWQlut8>FWGrk?U{8&j&N4Je=XDer>hMuqpnbYqn7;|ubE*%#f9`eu;jx+539>+&+^u~T?23DsZA!HG_xJ-Uj|9 --SPX{2@{^2GWh#<`}TV&X={05Ry9Q83j3k$djdF@iXW^kLd^WS%1b2J~l^% -s!Uu2HJ!8KxO5$l?#VU;>xV8hG^y50Oz4Mx_av{j$10ek$`;vMK5ECY70R71h90yA3q16>7qctO`H>g -bV||pnre7MSL0NEkRb}(TAj^rC=c`qg=1G%5%WL#trdcZRO8ZytDhvoSSp|nc)(=~#oJ^x_gp*sy`7( -hAGS)JwlsPLcHz;qCXop!aV6gft+wawvV;KpskrYof3OJmEWmYTzmUu(6w>bUnVTcKiG_W#;;p|7y^* -5Ap3{#GMb$S?m_2Nr-_wdpA&xaQuj}G63^5z8IgzzSOCoevQ7muLYn*!dB;KL`QuMV)44m>4hldwmMbOyc -ql-^QF3|oQAe<1d|6HQqyx68x`LW1RDyPlU;=7!SVq2q`-(!YM8}*lgOc+Y?He)PYEsnl-?Sm^#ys#_ -~M+|U@G}NK91a1p*m>_y6b2q`$q{XCimm@s?IXV9I!SP@I^glis-#`89*;oG&AKjb0dGqf0Lg&aM2>; -<^H`Gglq+lO4Q)aYQ3Fc^bVO>s0Lrc(pL~d`e$@ -xt?S|+P$ngAUL!h84boxDX -W2I$a{+W8MgquxL$lC0S20OPiD+Wc2W{!dBHz(IspCHa*xsHUP1PCQa4j^;=?T!2;Zt;i&c -ixoCeMLgA42zLe0)>i@slSdPRP#SF%5ct%Z-ZsgUY7wu62lS@Jicn66nMEMpN-H|ISUT$T%9t -VU8N8TcYK?iouQfiK+1>!L0jY<%NT+KLAKckZJLH=6?)u-wq;8c|b9km^)BbsaG^02B*`&tv!!DcTpP -F*QYNDHA%Puxe(#ciHkp&(w81+M^i7KE7ScalW?J~w1LjmKP(-cs>YaFLaP9DF6S-p--_F!Zl`|R^m% -)6#i$W4h~GGstPIwnnxIXNwnCfEv+HX)vGfY<{uLY@R_Uf9qcYrARy1Hws%uW1L) -O5lTe!5JDcB^>#HFqmDT@-g*|M7J_%mJ1Lxlceni8j5XUy>qHKLRoUvO#nNnJS~nhj}IT77$nV -Uc}T8)Eu*2F7d#A()}Yxp^XurmbevX)1!O3%K}{(z1m{rF1(UYDCD0T%0-Afi0-j}0nGSWV)0Hf5GN8qk;2NbQ(KvN};%Pf{!-D%3z+_k6Ln6g)3c1KU1p*b>V-%@&0kv_5^EWUI1>Y$ --#2#pC8q;vK8UD$=Ym_0!t~$j&~Cmw^hT)F4A-&}$P!(=D`D@Rb4h3Gf+2V9r~H>!@L2o62gl67pP^e -OcU|gBHLUTH6eewpb)#IvB|9@y#A?Dc21vw>_$C)ex#-14-cLJp;J_Kz> -L*N%!Le#fz%p+{9Q*3QI_eabl)fKMkqyj|7WwvNLPHl49@eYyy~()2#fkTP(bmt}5w1BzQ-Y~D_y{7w -4jFW$ZV^B0pZK6{r`E4scp9*G{^AdPTzKB_4 -*pqp0mv&ptCld9#}y-)+fA_p7fO$jG36R+Y4ppvV$3LQ_euC(1~Goc2;G9DcUqJ^(Jp9kK4i`P>G{^BHO-khCqdDsCnM{LR6S2m -3N5m1)2O;T+O`=VCGtt4&Lq+<|W5(8TOm}18OEXg`W#*iaP9Rv%-WJK3SFzEiXUmH96VvapB{iYid~A -|WQ!*SnDS$RtvVGcTIWd8MKHDslj*ZpG8%iBadvsn)%<~#JC;Xpj)WnWjOXkTE;mZ}yJg}4e{gZxT$_ -~D6_V-R=B;nPzQbk!TeA*XIB}RZS4r|4I=pjLt};XbI=~~_$UVU`I01Zmt -A*Dzl$c-V5uC&KyH02i^&!mI6O>DVPqBb1cMTe+NJ8H=UM8`?Hg~3(W6^0yW#Rk)V(t2off_;JrWR0Y2Kp;CL`tsT~CYxnTz2PBo+KjfxYlfyv0TfD|9<#=T>s3$ii3<;>hq7F`vcWREl#QXRNGxqN2 -BYTx!DN7AvFnUn)1}%|s*lnD%d}tD^Nx?2%=kF$km1Gz|m&cfxs?ITPU8Snbi{n+cDnV6Yb-pE;KmGJ -m@cM_Ze<0Q4R9zV%sj>_7zO_0B83FJhJ%!N2s&7_kH3D@-gQEa)41KsQQC&eE00Ik8RY_NizWzC#V&? -3++AyqQGH~~5XhnwGSL}_|#z^tO{)CBC?=dVMsYJSKnBTa`mULChrpTKu>f-mm&TgJyfO>WRX;N>WVH -cLmBRNxaOn2iQ1BLnSzRtlDX^%LesI9h$}?;~Tn?2kJ7kb{P0| -pVYrq_6u}RE-Ph?R&MAz`&amQhE(x56JIMPvC8RQ&}JL{)};--tkNF9H<>;#-DgCTx$~Y}plisK&(!p -H`N4SF20}30w9J4y4nfMkzoZ0U5!ny)?RFgSuUyryG5;534eOJYIyZVs`T!I90Q)BPBCbK|@B-0%+0$ -iwx`#b_i>k%%8=Z2*_l!dJW4s2|i7@kr0( -Ik|DjX8Q!BYc1VJDfq+@mwb13|imV?1{5h58`x8ftVki1)n|mY-gSiBi{NOC)CO -AcK-9Di;o{g=RbdW@yY1RKhixv{^&`sRlqj&nZg~X(OtOGTu*+c9}Dt?K>tuQhs6x;1wF7mQJltPx51 -obC-4Mw8Zm}OOeav?-Ua0_zOU(~JS@5g;aK2k -aivWemjWJ}7rZZwQu91X#;n`tmWxZ*D->zrmX$0i)0W#=v;ME(#@n~7 -aem{3I#fp>*FPC_GLR8{ov?UM4X{49ebBUTq|k}XEJk~wo$(i-Lw!KKIUTE9+6{`ZCUAW$+X75PU>gb -nYNNgMLsmSnw~P1RLyR<-OW%iknH~&-Nl$Cx!=3Dh$I+t)#qAepO2A;b4sTrYS3Tsv`yl@b7SDzov(t -&b#O}&Fr2cm?TEco`}@8qc7alwKw`>%TXUB!Mcu>jS^ZB5v^P3)C5_>U?4{ -C|Y!=Z}i;6qfgX2ye)Pd_I`-P5k~C&eGBQWQ?H@on*-uKw$KT&e%jwr8aqq+=R_{r{(PZz&!zonbXNO -eaxc?l>2(N#U7T+jfy2onZZk5T7A{{0S}21nCjft?GY4-(bZ6Mefm|OdCSs|kh5;f4Z&LBd0*gu$s#X -^wI+?KQ7_e9&}K55|8COoM@%6jW)}l!o9N4u`tWU+Ea^NTI&}$=D9&`^B~-je)^yRq1sX);u7g0J;hh -8Rbp!M}#l(2x6Y%Nv{nA;ll)N={gP5iAtQc3q>21IP_LzUX>lQp}oj=nY4GEIq2Jo!N=1?u&P_$9IA3 -Px19n$%+llm8Sbp*3w86(tMiJ3<3S+0HZBQyEv}f4#2U$>D8;Anfms}mEs!g!&Gp2M8j5$-hhr*8rmv|1Pj*Ra>QR!+h+{+qj{$0vk@dV`}?;h_M`kJGCc -fqVJQSpFf}<4j?L{->C#Bid;zPcn;)wZ1(j%b&}uSqvL6d4Az|#T{9IjiGKSC;a!h0gbXsuYv*Qq?-2 -x5N_4YQe>QjZ;2Dg!6h)uOB`9bqzpe5nbA+(5{;sotc_B*sY;=n}`SGZ`bKmfKjUGH9bdAS+Ae;p6(- -?CaYO2wnqR@d)cWexSZu@1RB`Ap5E_qY0uunFd -y3j>~w%2?XpA%<`o^o;QyaN{JK@C?(5gk^c(W3}xzVI3H7)iSb2;;sZG3dGFWR*776E -y-4ITFN}7V=9oqi&35`b5#JQFOFc^!G=zt<#eGPO!JGUFM`ibz6kE~r_Ub52TpJ~Ot42u^kR&nRFO!YSYH^?MV!3}Oi==shh`*kg8$+HYw3(Zc)0eNF{qTJ -9@~L~E9TP($T0A;`b9;R8$>>e}@s306Rrn^t#FJ;3_;K_V0)Vx8bpG=QtB?MKy%L+4HW+gvEPr;??<7 -~3X*{G;W!4Qix=NoOF5{-eQFl_n$9y$_dDI*4dU7~<-_1PzdSQ!&>Jw!*v{uQk(R-hst=AZONs^|vMX -5FC^~}NJGuwC7Zx9jq?4POCP>G -^W-~Tq-d>8kw$*)SucCS5Kx}B82DoPsdo?mOGcbU`%_}s8gOULRU_~Sj~Y=I<3oI19h<@#p8iQt6~VE -wKp}f3?J96(UVLuon!ew9J`mN+f$;4r7D}IZ?0*WydxWmfoxT_0zK}I`1X=2xhSX4o$f@s);enBbNFz -iBCq)Caq>p$?_Z&XI;kYARB^|sL{4mTZj(Da2dd(_I-N^t=nW|raUe^`l)iPsCWbc5P#1AE_}A$nBWCP%Q@0D2YL3w9z)IC1App_lpRvdM4ETNC}E^RjVWV$o9nIXA_z4NQrwwYM%8QR`aK~(Ep%+uo5&Jw`kDDf2ts7 ->r1PGHfw#&h3Y6=1t>!c5W+4)T8M$*723nGP;+*r{kq#qzl(iwZ%`B+ODN_`D_tExtS3-~5;Wo&z*%j -n-8j*LzD4TXUy&y^YsU;Tc0sm61834N$B$_80RcW>3kSa2I&Ued^+nrz0pO9vEerUmWHaVlU~C2{zx` -Nb*iup(-v10nPQ=pKHMB|g>h|EB+K%;pV})FiB%M6Z68QNcqaa{p`+e~>^x*fv`~UP9%!tPMfO}cPX{$%ci&QCRK1pMUudJ)9nHK -pKF1nqS((&z$Q+XS3y75jzU7&lf@xdoHAPVfO4Yp{d4M<6UWv^nplVE7uI*Ac-7g|;wG|J2rCU*1Z!Q9a+e*YXq{aU6qU~_NGAepaG3zV8M;npt -h+zwi9J2khMqi?AR&%9Lt|xsfS~sq}Ix3YO9VZ=5fMzUrQEoXr_a+g@9EDf{$bV~YI*$Gk7l6Ezl_u%L(0@*t>9u>`J8_rf4UWVW49UKAC -dY%Hj<`zxm4i)Cx$*w{^~3Y*d`6B{$(m8&u6A+{O%XlYbZNxb&yhO#-gbB<~KPA>(y(n~YVU)FFod7g -fxoCE`%VJ($cR+!6613{tmS_cqaUeY!j(F!tu?C%I+&IGO4lQvd(s8_~Xv<5{?R$bQ3u>?l4#mAEVg# -SCec4k-09qoK7`GJnU)tp|OL9qy->t9}mo1%u6YqSN2&{HKFm>XFgZWDHo3#O`QNO%*LII{I_H9SR`- -%(^+BMs%q%}>w%lb-j=)a3b{C^^4xb-tEXh&*7v0it7G?TPWlryrkEaIr~bY)PU0L0NdHl1=oFf>SI= -6bD444ai4`1L!}=XF1+?CdYl!KH%u{qBz2ki5Q-m5i&*})9mIH19;8e8!@34_b@lMd&v#UQ|i)2pOpt -6C($WyrF)om$*ck$D{X68S0Hd2v|It~jIjDXNcKFB$rg>z-FTzkpj3QzA6OT^37>g2Iy_{0}kv>@~bIXq`^~ivOU9H-U{cbF--7!*c1Fr&}J&t_+9ke8kf*kYvI!LQpJn$Mj&^NpeNX7 -%Mh-zmjP7@7hBbla5J%+O+C2_wp9ZRKdEFJ2IbJl!(Hla!zGsVO4k36qk{0Ir%EmEu>Y{3Cif2-MGnD -b#E{s&*{DT6!(+qX>j_L4H9S1_}-D{5!tm&eR!|d6C#b-qsQT?xsjE4r>6CtfbHlRWR}x4Jy8bA`l_( -ZvB`SOTq>Q0Dzi`Kt>>lD5{Iy0?|@8!LgBZhX=6$cF&^(nQ`K{X5^~XYL&um&pc`OPDp3!0NB?Vq810 -O8S-wl6P^Sbv6K1wbd0SNWV^fCjMVY%zMfZM=fsX9V9wZC+guMnVbZrM0PI_#r{HB11_52lw1F#AV3_ -a5WKmy-d4`QDe!x?&n5Jp`}zatAPvYOp?Ul}xG_@3o4$u!X}-otkwXBHH*=$2$di$Yo -_9Bnc`}<9%suef-nTFIM)2QDc -D63&B4Za~TCBpHv-hIR;;=|W=EJHB&e?~fgTs@HL%+B$SeV7^;PmA3{OCVFUY?#`;7gb{c>46|;2;g9 -WI12vT=J{{99S{uEKOv=#FR~wluMRmEMzgf%9BZ{b{QQ0UM6>83Ts#)Xb?tH>EjAqJ!CKy*5AW=DHfb -9b1_NzLi)6CvRH~7#}zo^o!U}6V@1{7tUDTK99 -{2~uCnT7=)vK40;=P^J*VGAZx)XH>iK?3;#g%UMrDsrQud;Y&j|6clg%=dlRJ&^>;0Gn_&$wi4e4r*q -teChv_i44>`mZ+@3+5axTKRpS4Iy}EPIz^6wCioyX2@(&IY$~qCdmyEV6xztm6_ek1RCwb7gAXX)+m> -oi$|Nn2XxNe8FH?~l6QJ?6Eck*5fUgA*iVPxH;c}U-aqeB1C!&-Lv^a~AyplzjMF6*&FkXgvxF9%Vb_o>V69^~=28eu(c -qs}w18>1|zjqr%#;2A0V1GW^gda{M{&mgwOymoCLGwUlFaX97tzy^nye24cEZ_uCTovGNaK7Zr=0q?$ -C6axHTxbrO5y=bJQzY-G|JhkNNt1}ZJv-8`D+VL?0V?sg$<+5K7Z}n?KXBYOTje}tlqr4JA~e;Q6&YNv^f)n(W{4cMA=)URfZJCv361k -xWf(p>1_-qMHXOeWucvL*GC~3<)e)G;2PM*hnEl_BJgk!7;+BLC%LNtqF(pg6;O>dB3u+uUdUAf{>kz -{Es}9&Ta_x?(RB8>ARk%Laf39w$*%y2Ut3I*4|1&;leS`?Z1PW941`SX^ErqnNK63}RPY=8QcehnSDd -LxmEgp<(T-J^p@qx+_hBkG#j$hBH1xtc!K~wy$iW*omR4U3bJ309Mne|26zXjQmwN5o66dBJ -gl|T!?7JuoLdM~kk&5OPizY@;^}g%imdhkYQz-LRJ(N<&_vR(0KTC@y3>|>(m4OIPdi$qkUCs7EO8ef -gQ8rf;J^@%`a2-hbiY)6IaBMX6w@;?AV+h?6U;GD9=g`jc?c#Ott6&`_VJ^BIm84m=L>Pi`&R2&T_;o_p&U_-6Sx -{pqW0!;F3L1UcSMCGhy?13-T=f@&6Yr+$k2h;btPbO{PyJN{o%!>pJYG^;Wh4teEQ6bVmW^PJQfkC1e -FuM$Y;+hXwRi6^N8bje_kxo9oQG#Z7h2k4>@L-gHKh3aRvmFhJl-8<#MRZO_sTupvv{ETueYB;L=y%& -ZGqj_(281kOH&Tep<*=eg_t+R``rLVT9GJgG<766|QYCph$p8JO(5jsq2+os>Qgi!4=^AOgf_93EbR* -Q_OP?&H|9v5aBOo8xjj5N_Yv0?{FV52aussHVcF)e1^;=p9*A|R~{)BzSeKNI`}BSLu)y}g_&ds`lU% -|p)>~pSQb;;%D}?p^ascU#R@C0Tl`yK8CDa4jJ$&iDkdCZ(mcE)p;;h$#bBuQ#PnWCRE@VAnQ7ruXrkVH3X}>#m)w*A -%VQZ5s}0G<+@1RQ;g3BC!qDgsH7q^mWv;$)mrqe)jQoD_Gm}ewK&RqQ&n -AH4S@>6$`CIrOT)u9vM=S{;2pVWwW;1Owlqgv$h5`C~E7)qbTZ=dY8&invv5Cb~d3ko!FVd<(7SO4eT}sbqQILQj?Aw -a`IvQ=Yjr(L?oqp>lEje)a85-54>!WmqSUpERe=r=3E5IfO^x&<&W60`eGckZ&9sm(p?wJ7|AeuV=6m -s6fiGxGZ()3#uDp2d9!vW4WqYlMLHj?zh8wmgU-vSF7Y*jZ}wc`&!$S78!LjXF@#%)8}eSM<+TmZg+| -sD*KA}mb(&W8(T|Mr-#$(csSLxx?m3?eY=&5cObpU`XipMX;H#hyUg&5bPoPE -mn36{M46IlXMfBglFskElU72v^*_c$i*J4HjEnn@L~cc&N6e@?PktmJnzi`F5S<1k{U7Zxjyrr0Pz5mO(u05L -Pyibfu(k7~~u)m9Y3?1jkfb8r+XVf}R1U#_33b6++2=~M`MhnJR+lmKtnbWg= -w%#Zh>vlp|q10%5n*r5sx+YBD3|2(FrCd&(u6L>nd1oQlRRAR+*%lmOJj-@|NOP&%IAv0$;{y -p{%Fuo&7{H)%{}nZSE5Nv1CEM0AAMAj}w4C8A*sf%MK$j{2Z-LmV_Cj -^rYg7NrxYuFjKpV~Xn5W?yh)+dGdWfZjIRL}+Z98{s9*+V4(PQ@Ss|-kk^i+J>zvN+whLKSv{J_2wLnW>Ps#GAu;dsXNLTGBgu-yz0UB=~f -_~b?>7}_++K8Ftq2pwlDDMLCCF1@@BWY^1g(dX|pv`moZg!(W*7D5dXG_jt8`Sn)5-ju;%~JWWS -wa%<&RCLcg;sGK|c{4x#eCKKe+Io?|pS=UpeuGV<$UR&WR%6?t3`7aic5=vI -pW#7#k|x|mBbh`A~_O0&$4cHYLjQ3lwV4Kmq -WJKX->om=4q4}nQX^OT$`Z-CkGdJNhE*~^Tr$-_@|L -#Vc1>mnOIdiL2mPQY_|8it2fV|6p?j#JaB@A)Dq8HG#kZn_WWI9{WPr*HM*U2aI0yV2Xo3k4u5hSmc6 -6q{b{Z{!nSEQ_^O#&)IKbDv7#yGeHHg5cG7goSzozIU^Qc5efGqqxo5P13H$`-R -a9vjgMgw-Tb@}<7#YF*IQQc`c}RO0&D>5D12Hpjt72)L=OzdGz2rmu|ye5IK+A)ns{#gF6fBG`H-ZyP -VxK&<}K<#G*nBbz($a_5;;|NLG2A6qD{_GHQiYnqV}UqX1jA-TrRSq!y+wP{1;1Yr@|OgeD0X&TPjVp -T)Ehr6F4@eVT@Qm;q4zMxl58+qHq(_Sgwbh}pFxQF7k(jUv@8+p%GDGM%crYky2c`!TaD~YSB77~?r^ -xGVDldsP6JHPIMgk2T)P!nLMC>C6~b=?~2wu$Q8!c`X#u`a0ELo|PyL>tnPhGe?PbPq&#sBcAmgk6nk -i(?ZW;k`x2*VFuZ-udBBU6QoG9UXsvilJ+j3*Z -VbkM)lt$j@8y>kSH@2naiD#U1>uk+fSigld*7OKk-7cBpR9sh^lNVc?IJh-iI%-E%MvQ@6aWAK2mmD%m -`=90h-L!@001Kq0015U003}la4%nWWo~3|axY|Qb98KJVlQoBa%*LBb1rasg;#BF+cpsXu3y0>C}gdU -khUvU7%%j;QgHil3!CubioZ$4f8_W9=Hr)yjUTyk`Dlw47zf! -hLj;IT|RawP?FB5SH1n9^j;OC?V#DwYjhGBRfiEhPqu?PFb01BP6 -Ocg2!qq2!w6PEitY_P_$(D(f@r)-h>RW%UDFfM3P3Fx#4G&!I8A3iMnQkKm}WGe_b4lq5w#tEwo-l-# -CZ4W??vOnR3j;4xBgT~r(vX*H7BBq8wO3nC=2(_CmnMaf38dv-=3ED$0c0e*mIqXappm1aq_Aa76a(3 -_Wkt0nvqxGr=!%iN|H?|^55{o8-E{TO -(&$H>-#w+n=#o=$Oarww&NJ`W6ZY$5H!k$yzgM24Pc*j*}VhAKIB~&F&%*HPV9o;4`918z5hPDE*O%d -uK{LE43esk0bVhLi#`ORB8J$Q8-Tg>0R7MT7-KgC#7MJhF~)d+yvORtHX)+osKU=I#1M_5NVzcb5eva -~zqK`IvS>s(`Qoxkv40w_Y+in8*&)EzUXTwdbj?b>;K0I*kq=4%2^J-nle?2&JK;SXF>xYw0r&wWn#w -@HTjoeFlG9-nsX=_9i*&-=BcdHyM6P)w$~6tCEpc@0XtePp<`WyGR)>)+rVYF5%iUHwrA{>ZUutpJ -&Bl#wpDMNcgu3bC9|p5-?TikL&|hq#s#DRpSvEbxRwHya9>nqgtCu8qp=k;%aRUPr3n|_WWBwh!u -hT!TjJVeNzn{H)&H?pUoNc%mvsVNo>bVC>sFy%*FEM#OizYGGT&vkCU)+Pw -c*YvA|;B(JhM9(nC?1XyYI8V4O#VSTY7Z^#ZIQuOI`alXJ6Rq~LISBD$YH^tMFR(l~DIg;_t$H@_L`i -7iE2^mh8W=;yP<=ZiMH*?`-6?hk7_t^H%ew@*-^va#6m-qdpM6T)NnEnTd4Eu#^fdj!A!(W4N->^q|W!ahG`JyvvLI!Gl0TU?w3Z{5PonxjHw3!!@PW8#?*dk7!Uq4Y#qbh$ -}oCosTLkWXb|rQSHQb4w{N4YgLS&a;W(iB;3=K0?-AWjUf)H8pkWcPC>n%tcnzaSlz^cK{XRSY_49|D -0xwpxziuE3dnE}9RkgpGBrMFtK(d>UGgsEyxqalu7Myli+1T*&9Hy62u)RV0B9QIo9c&<8WEwJM&T1y -`l1d=cqN`r+@@WE%g04M-2~6kh2o6(uE14U0COE*fP;h6=p(nFr=3m^Pk2g-6&y|!9O&xO`AYa234CL --8ZPa#GPTar%dSX3@??v8_u5htU$!bGp_6N%i+zg|dG|)yr3!Ha41_(yc7KdFmj0ZcXWmzcDRwU;PZL -r2;J2+0iduSu@&Qlt^55abY9)rt2#la?+eBe|(!5;rfia?LB{Y+{TUn>r=2&{m6B8x6;PxUDc|sVy_cjY}rqe6T7lPQ_GRWic4-tu4FawcRv90n=|CD`G0Js&59*=@qnP$c1Zm?`FM*odZHnujlf~V!;uF5X2njm^Q2qxP*li=iv1+VX#tFj -1=%ZuhVsaWv5To!54WMwgiPREP|FAkng509tg=3^5iMH)PPb$D`g@b#OMS4YSA5ZY~QZf+jT7de}=qM -^<~c@Z=K{v~S?0G9+8WhKX2B(v+}lGVZM>FavDv2nayEXt~>gCx&`xzS;sz{6-~ygdwd#yj|*$&gT(j -JE^!alxvL2FwRz#9-s1D(68QUo4wt#o{=~<_I@f78#I)#d+4SD#`1O4e&T8I`&66ybJ?5;g0mB&I -#1~o4WRJhsWg&mh%galkv;4DS8yg(dSb}+$)lHtAPe0Ds0*NvN@5H+Rn=PB57og-GbG_pkW^y`d##zC)G6olHIZbX11tUBVI2XJs0R%C9@_zzl*Qg-7vUhO-#?k#K!_7*&g55vny -E2AuiC9C)@G&)1%{qSBLS@bYlZ&&8lEePJayTU(mBCj*DatbRPgAW_eQAYV}`cbq#H&RaI6|n<|6djR -1aN0r!E3KP|J0rJ4=0I+*j`xWa9~Ps`#W&t}a^$W6oMizaAF7$QjnV8+`D*uh}8jOA$!JPV6~`(P#@F -Oz)i8~II9u~~UpWdC64_nd;Oka$yE7v*iC$CQ*Wmh*E~d51YDZjwApS5r;{P4Xo}vSqw0LEQ=#%X64c -u>bmiZ%w3YnJ$5~;~4fG?3TUYG?c@J!ytV9-8b>U;qzDV^ziAcX9tJhSPx$xO`lJXj;7BfcZ6p+%(UR -rCs@|7in!@f3P7(B_6l$>)f*0E7&|0s6%wiyyI>V^fgsR0__kcIi)EhQ1-BUpiE~(=tE9MODKv*Q1;G -%M#f%}t246n;3a4LlsRB?KfVsQ9Vz5KI(MJ?O$N&QIi-W@{H8^-1@5B>$Q!(17fP56bF9QDa{{1iEz- -|ry^z{g^{p86`{QO}0;@L4YixkC2f{BpGhp>(CU*pm1JZVrOhQp1({t1tla}Wo2*yf2eS*_^xa{uT%U^gO|0i>f>3y=0tExc%qCtv-Ct;x#-&Nlc -zUkLq|>|m^#(|6599HChCujJp^tdZ^I5{c$|ox1v~_gw9&P)s6rcf{8FFJ9;|Yt}>q -^VxX0fSIw#P)q#p^>N?vUL8ID_jtJo{p>`AZ1 -Dh45QAfJSJ5r0gP)#@2+C`yBWp5>JHYoLwj#e2?_M?QmD|7noDast63q&?}ZZy>>jkG`+fdO?j)P?m6K}8+LU^pa`6zp_`;cuO%vz!xMK72hD8KmV72AGi*d@%mzNR9RBV@m@wgqNum&)}N2o -OrAv=&Xj2?mH&gUYzvnG-|>m#Y9fIxEcxkygdL~^n=lEzUeko@v{f(iOEQ~iRg3V>R20Xjr*#gY`jI-;n1>Jx{Fx~D(62O}8@ikSXqZpq1-TXN#tl0q)Ep_5bu{k#r-S -|&NF-pX%O%R@eAMdV;Lz(a7yIRKq@r`u;V@CACtgWu@0v>WQShH6jn)sl-!TK75_10KLLH^=~wf~adOr1PP`-CVcz8?Zg9_F)5S5+uqMG?j|}RBrHx_ -*Yr^sB+=X4R429W%wH@sBuyhwJ!-5$|_5uSj;$$0u-lhJU7=KNycQE)M__M`)eT)09TylSER`BZr#1x -N&-vL>F2UGYR?rP32deLuLaFyIJI*?~qC77&ugR(tD=QrJ?z`xK}v<`q7@g#&9!vTL@mDj8YgwZX|`* -UDkFs-k_KFXRax~*x-GOsNNJIGCF{@j#VYQ32Nn2%s?NuUT0M+3{Lf$1bE-xWq56az_`qNln7WsoI!u -ftac20^cGP_SFM3M92S^I{A2=fwPTV!wrj&}%>>o0ZEvEy4zng=R@{7t{+j1Fp=GSlEQ20K-x8(N&MYaIcG6Bly)ue5`UX;57VypHJQ -(2?mpV}`k%tNb~^2P+;YZy4aap&@wT~ePwlonRpCs#r*=KwHl@yaIPcT=7Yh8 -ly}EoIC8OcJF}UZJKe+`pBS%9@3HNc?YqA*Z(qz?nRQ&Z>w4{5Jk^3?I)FQT;hk*nMMybPO^+y1>*US -r7gLjD=IH1=oW7X8oF1MW%R?YCBqF|lb9nId)iV=>_Ojb<^bY?$0(p6Ge9SL_%X1t)!iUcfUQCbopSN -6q;pvb2qrWAie{7HbFh2W2d-^bHfuaxKa94gOd@z*8zz{tV6wHB-_sDyrT~bH<@bW0rd~j=S~|NW -Dm*+TIA^dj%o>=m-V4+Mj_c)l1fvY;jW%bLC(_qc5?df0g#j|oI2;TtJ>^k70#hk?6xd6x15jSD%Vc& -Z^^=J6mtJ)YfXbg=kFU+gJ@RS*@hGY~&ZFx>%$}f -tIcs7k;mgI2_Ur@#Ng820jWT&axE;wmAk(C=?vSMb+k>KK7!Lod+#!W3@Q!yE)pJ-ky;+kzylW8e{v&@|!#*y -vw-`n#x^U}^zIwlblmEbqgHh!Kn9fzu5H4-k@{+>w1eG}WEW1OVM$9t}_L21cQA0VpZ77kwL5zH_M|9 -f>Q*8Sw+Zuy<`)Int(Uj_tlC5>{(37U<~^2pIRMUe|&W!}uczkN@an70=o*4hLg&Kv&VAJy*j8pg2e# -so#JYx(c%svW~+I*c|@MUNV1$on|?#l*VYE`CkVSs|idSpxzTVtrFu>Fl@kry)t53Q|Yu%I73eMrXr -4A^lov$LPHrC2rEC4|s_CE&pEFuXUb~>7=OoT7*iE!ke^Qf)bEOgt8j0`Ee{l#KD%gdUXDv9oH>Ie^* -C|Av`sm|+5n5&b?AapRl?%AR80H{;t_#H_P)S2E;Tfq-ktf1)t@hHcDUk~UQ4s@*xbBL$`l3zp-^qga -)Vqzn4BMFGOAsS9pgw@k#Ft_)Xz>MFO5Rdb4u7bH&u!8bL5j+nua-K)GxYw@^2Bx!xta=WtQ|omGJ*7 -yqi2fee3sAPAa0n(b5mUvH@aAU@D5bs;R^o7}ZM@w>ijzqA3Xmv%ng}K#(C*MW%tg;tlYs8Y#D4Z@M|wF(J5eZi^)Vb)79@agpmgqJE%E6Kf00Y?D%fSzAoqK0r)KY -lP&Kjqn4cmI2K&Z9oFuhZs63gfhJXA`H1TxK%;@)OyWb1fxL?K)*WdG>Lmn9&Kmf`1<<=-+iI~;(@NEw-n6%=ag|uxCm)r_BwVP0rpOITRf15+GdIH%y3yy!q%>YGw$)@>)WKdtZf -N!Y|3L(mqDR`K1*16jHSjHhYtkq18po0%TVLLW^iU_CB?6hgYpCVDutuy!!D}%vOkY%`0xRPI6i#9;j -hY6`v;-X9XaRnvP6v^?8l16{P2Oq1#~-uZm4tDb#_@Wd_$nctFZz#1x^~ux1x_Rp%QTV5b5a90X7jY& -AEMt5v7!jn3fog00MG$WqW*)Ybd`iX}IzNi1z?}Isg};W`o|gqIk?miE#Ydw#A}~X`;IG@lgrZb&g4Ae?O(Ku -H;banAetLb@XWtV@n5cr<4erJ!1n2Z_XksTg;ly2Fh4-`9$p;L9xdT;6T6;lSQ=8q!_pvU`2}P0L%cJ -~1cv7ev&H-|kH7Opg!>>_hLIWNK5uWEmo_{eIxGd}TFq5i1bd##=>CG5hE+QdUmBci(Zd=RspC1a|na -z-q&lT35^S@x$_{%-#Wv;SN!n1l>pg2pPmsKRQ#DCa7Iy^Z1rZv0_doXxOx=!rFOI=^+?DWXE*Ko8lM -PMgJL7N@DhL^qWe$@c4SlR5FOJKSj<%by_B;=XtQg?7zjyMo2rlv6ocveL>lE?lS4o;=Ds7Y)zXW>rsu-U_%Rm? -eGZ(EL53=T(bx;;$6YKyCMu>R|kmrEwps9y!(&;9Z)O!%nPe;B-U0Qlc^6OAUT224Pl(6&yNdzm}#1V -YzAn7+br10Vgm*=vet(jO3GV+*9OTcnkTc@kI5!sWmE%rhC&F7x2?O6+}%*50okGxig)stAc#F35U*! -Ini%cR1UE1KPR(d?x#DeN1BlUzQuw?~&by5- -6rf-Z~|gCta%L{9pbfW7#s(VAljLyJ7)v$(nI@=jz#J5SFFD-_f}_2ZZY(=jn;e5$Z9v!u`c#Ajy7w2 -o~);I_-7ZkXD`EWnmG)c6wMe-P!0f})BO!8*Zig}yU-iH3{dSsefWDB>;+nc2*gb9?F8Ej-oAYs)K?h -HuCx@Ur>)QFCV)hy#H0`Os4Nke$%5;*OejlK+6xom4@e^E+9brMZM9cXS*4->Dtfk+>g#zyd -BN6#bBQt}=L8tjIZrN*BF7RL`sX@WOLL0aI`Ue*R;kAK9Q(6|mZ6%SRaFjApC*Gp*6DGnuZ1W;&&LS< -+b8@(FH^5JEZJJ_y3HT3LWF>eICJ&*QN4-rT9%*GVDSFUg6!Xv=)#mo4_+;Z#yz1A;w~wX!J38_@j3U -|Cs^e|70%-7B*;Aw1k0M=#ViXmA1tW?#mb{jJnsvVc#ZhLK%)loSBPOF8HrJ((J?N&Mqsa@pCMbS)1YFE@TTARlRo_SUft -t!Z1gdkE)2*p&cF^NZqvHt=omsIa=V@o1IcLUO`WkxHmb>6x~Lhwi9JaIMxraAwWPIc#OLtbJaNzzoNX;LPOP-VQDV9rwsr`sRLoW#MsN0?M< -+C|?fqsNCrED4&(7I6ZOP@c;EO$rOfrrCrB0I(Pbig!^3;*sbbb67l+6lV4u&pCcbKjG2C-)32ft5jj -1`281BwXbR=p*0NlYB(yF$GqnpufG{LZ8U&r@~#-T~fl+VI=Z4mkX3TR|JF1{VVxFFezff#-jER0s6G -KU0bZ-&8SaHgPS&HmGO{-*L_=oBAz^5y8?6Vu&gWy`^sUc6!tCyhlD+Cj!yt;G{J*o%D(`K!54r~AL88&_we>Z)1tV%-Qk1X{N8AqB?>cM)f -YcqhALTefh#rsbpx%Tkc^sO9(8*1v7N!T@kfMVBCB8w;pJv+^^o&ssi1kzqHOjpA=@k6pq5<%u?)7Mi -#`ta#HjW#c`jtRS}a6!;u?wI=Pe3|8`{?j*_7?R!SW>P^R#@3I`wErGZqLK!v?8Qx1l?9zOavI0)4o~ -*q#^3M1IG~koEwZQfN7S`{hOp@7s!Ikjx6IJwfDX=a!TP%xT-DklzAl2%;<(OBphZjz7Ry#a7|SB)+- -()w=ih&PCaTDZ_9c?W!n|HT#dJ%2SYVN!{}KN~&K~?G0gEip^U5?(C$?E5MLtC=k0F4_G|^$;3lMQ8B -U)RHL@ME`%9mXjDH66)&?Q^65ZvpoflaELP6TnhXe0%Nhnni5c@)MXf2(vkA&Db7O9-h5p$)F`r1P6eAcllW~Ht^5jo>4ARS(6F-g+>v51Bd1g)qJtW6iSN!Ntx65-h9I`Zu+#P{vb_VtiC~)VyGJM6P>Qe^h>;J(J%2Y -(G@oUs9^#TLw_<=K~jI)C4yR)aG|XrQWt-*^L9s5VT5jKGDZ_i742waX_y^txSC72ITeT6Xz?%3bU~t -fDylZqITWd`@-33wc#G=~+o1Ecap{1_S|y>{h}Pw@nlVw1D{9yAC-tjErnX+}`w)WB?~_z0b7Q6&Z%@ -uQ`I)%m-F^&Yzud90-d>vYvn{cG?_qGJjuTgourY}bE_vCAOKfs?nZjEktNt?Vjat836<&UEKL{2HFCVq6|oL{e#IVmryAApoyiZ{~SJ=FVPsCU%R+CD4AuC*IFV -;`)^lU8wQXNlZ{lv})xW|Gr|v4};Rz7C#z^@k1-k7;PIJ&dYgE3o7p{F;$F4P67T?nnwlowWPvLM#xv -skP+krMp5kO?lQkZt4t~!v43sP2}QEhug!luk+G#BK7n#`&o14zv -1)yqSzGJC*Z`Z%6)nt -5fkmTa_Y40fSq8(UoyN>GgD-=GSMAAi|%vF#2^>nN^C6mMHQ<+lOIC)r++imeyec+$h|-mX)g~EM{dhf&q{E-H -O$X?({s9l;uPimqE7DYQhxcY&c=CV@MSkmF1o3CrzQp3N>V?`YR-XdI{?_+fq?BX}{))oAag1ZM@L&{ -sY_E7iNkWO2XZ)ZK+=hKv|4WxsYPL1SrR94_XR#&@SbG9=9kx_E(7&qS}abeTRnK_4 -&M{?4_VbFtjOYaG0i=KeMkRpsA^c{NviSxbb7fO+Msb+B*BOB^(7 -w_KdHsN8%Zvcq$45j`<@u?l0xr4p+=~v~ZtmDEDW|zs_V3Lci*A#w-h96j}4zf57lhUBVo!kKc9Eq6f -k5!-Z~kIJriesYbw7`JK76`enC6rXS&cq-_AH@(|&7OSyq&ZN}DoMbFjKq-H6WO;0fOLhbUQNXas0+z -CrCxW>|0_imSk`qp8;&qC861EEkYK%7UsAIUeb`r12taZr#NoJOF+s_TR^m+yt;6Y+}=v;QSvPX*eD1#WofYy}IiK~OqXclT7 -W%=BKYddXY4wT(3uJ5exB#QPz!(uD3T2TatSHSzf!dIs!Ebo{*)X(shk6VtB2CoV=Y83YEfO!J6 -=91JkNP9c1MWzKCXM=;H9YglO*s--@#&oP$K2O`cX;PNjY*F5iW=ykyu_|x3DkR28X-%C^qQ7)yDN|IR5Ai<@!&ZR_>Ti -9dfX32}LLBq@R*%Ocgd$JUrWGpW%_;MJ5^v~)3=M3#TY~s3uKk}ohl!PP)o3Fib;|2Am%J7YPk%PQi6 -{Dea*1F$S%{P66TKsO{JxdDtJ5p(=bjBOlU(*+zviD4bMq6-Pf^nI&d*WO+s+Ru(%a6DOw!wxADX0Ac -2tu4MaEBtENjXRNhW-0Ggf0*e^a5JC;oLlT_G)qwl5gDgIh|xqsP`l(TpP6GLGG5#f{OZ*EX$0d>u2b -LZ=mCMnyEJd8f|-#Ws#DML6NtcXbYw7$<2ORS$8BDS24^_ -xGXMw$E1*(B?(z*f#Oypi`mQVEl&em=|*4Z%G&CoVFypTfV2{m1Q;`@)T -tRX_IX&O>~95z(g{GHwT!%OP}!}WA**^-J8olNV653?VpjXd6xv-;S6I|fsh3z_nSTrqG|<`@z^huC- -va1N0^&Tzi?_6D;qF*k>`Da=!CE*fJwrr*M+rCU?#UBk_mSK{yh~A8$hGxRCPPJ@M}RYRb9}q8I+9R0 -vTUZE%xbcQs4^KwMafI;YW-Dzk=Kj~pw`e>T1xG6QCC8s@Phtw2rHFC{82iK=~hv7>t&?E{{m1; -0|XQR000O8B@~!Wj@^V3s0#o94k`cuAOHXWaA|NaUv_0~WN&gWWNCABY-wUIa%FRGb#h~6b1rasty+7 -J+qe<`-=Bhwaj<;#s+&t+FuHA%G${h4$swB*XbnT5E!yU;EC~|5yUyXhduN6Zk$QN&cQt~n9y7z?Jbx -rLW*6UIuyv8jd^=|cwYm5+J{gTiWA?fzkCoi+6pLO@*$uHtL>Ng1s#cdCHZ9XK*1Z#$mi%RdRJu1>9{bA@(9yDC=4X_Ws@LHy^Iw#OgsYo~P{f# -}A)By?gcL^T$uu_z>tuo2uBeB-tF)p%O{LS&Ox@ce1coS+U*1%8&L#%d_w+1ElAQ0sK-1A^M2tZ7p~wY;-xD%{~Sj -e{+KK!nbDR9&WQ8S2_AL55OtA&fHF~r~RFXKQI4RQspi_t>yO(F9rv|Tiv;TX}RGIP41ca!PV391iZ^ -(dG#@W9-rv70K20y|n0$U3PN&xA37m8~7++2PrRgfi~1p6t|gCCC!Letk}?yRwR>oqn5{83COM-_^N|IcQ&enPf7c@ca~!vm>~9!XVRo -TuyD5HRmvd5SDDze`9))YJrs@9SQxz6GVXv`|0$qS_|q|!h?Je3Fy+f0L&_YcmalsaVGM{lb*2%0HOo -qD74ID=xuK@X^0kj#)pvLQeYm>=FbN&>h!Hbs(SR6-x$lP69T$RO0n7@99`>Z -36UnS(P6MKCTg37LdETiwaxfYad$?{(;)uw2|5flcXwKxRtr2g;!dJ1<741p2els{Or%jojSPkqPEtd -+yt;Sn*6}l3zYu_v%(pi;hCv(@7Ft-fd@kOhHPtwsHgW_GllGTFYr1m%P!a+-BOnJ= -wt;u9FFw(9M^NDo=3((0!mM_+_5vx4g~4EE&;;IJlwv64 -i;OA;8FP<+VQLfE#w_sF4yL@5&l*NyT#y*bpXN!1QWHeq0gfC`Wiv2L)9Agn{a80*WV)p*7LwP6v##( -%h+)5->m7*;P2|&*7@{7QBn9HSgp>pemD7+g28AIlqsv+2Sii#c;ll5Uvr`9&Kk%zXdyTU& -|ITu^L2WH(xA5@bO27!iz-``>;6|3G%23D{RIVr1#92u0`yaccrY7mFDFzlr-A?!wD-Q{RvJ2S-C9SB -AeF6ia-9p|s!81^9N8;mxG)ru37A!bgXwvtl*V<2c(t_K@kx)>o)ua_0O~dRJ7U1NLs2;d%M&DrdNu$ -)qDxhz1qfSM%4P5tmI|35n%?BJsvtpJ7G-of?T{U%fF@&!JFh(@W8WG53r4%3cPz9# ->y0M}3L=)x-c{^EyI;D|2Mt974O8I{))k4rNF1W;FKq*opoQx0wy1Q+#{ZXHtJ>ch9FzvZV1*6y;Bo` -m&ak)rk%I{$q!IBBOMiU2IwDAngU|n!WeY)vw`U+}=UjAo{7sgGt?O`2dlq7)E!U1loo!dc==gXAbGm -b>siA9Zo`%5H>|td9xvtoA_FD#5k)dn^jsgGucw}iI>U^RAqk(YF2+P9477#AtHMg~o8e)Y#76(`iA_ -LS%=J$7S{EpWIjXez!ACt(*v<>Psguv0lIq8Qd@u1J@RE!h2Y-*zhQ42HgWoRO_`2&uNQ_~R1Nc<)EJ -p^4R0H6mP7A;rJm%b&5Q0D$r2QXH!rPqtGNEZ5zhP`;c#NG*=0)TQil{^h0a5PmY5b-)4E5-Ux)EKmH -XHZqg6VR*SUC5=s^y~@}bc)2@A@Q54Dtd~F6HB{EZP2RUhFtm#DNe=eu#G06&uJD -!sM!`iVfH?`_eFL4G`S}*4aR(a7;U3E}oyXE<{MC`VblK#t|&#q!B8_=!V5CDCm)cXBM?H;JxEh{D(jzR8hVI4+`pPz^p_q8H@4By%*ozeRSA$V|R-bIC@ -pGPA%)iG#mcgSAEf1E*EuZnLXPqctcuGqz2yANqe3FtZ-bqr^|co=5E#W_rJ1Q*f8Oa=*b(R1Wdfw@}w-(^cFlqGfJ~p6d`ncRbDi4Y6p?dcW-kzY@?N -#@UL?FPOpKa`O#EHQyg9W`#tl<5^FzR{|f)`IL7Gi{;$J*?$w;*U@A`ccT)`;%C+miRV!(m-%>fM>Au -YS7w@(vmIeh9#!j&;5{iYEWjOBS5YmcEz>T?1}2Smzv!sJk5 -jPfPtE82X~C+Aet%3{(9qXq@xSQyGtQkpV@eEJLWe9 -~4kw^=(wv(-F_RI5>qBdEWZ}-%%@=#LgJF(~dp|7tHJNR>t-9U4^DzW(mcf!dKkDG$6~%2$AIjCtb~F -9)Pjm2VzT+eOYiYcm>>`y;{xH`pQPQ0BHstP8hBKqnMdrL)5CUJfUdQ$*t$i9}cCaVy0uwihMc)B(|3 -iybyatgPM&SPdP)h>@6aWAK2mmD%m`+dL&l9>60090#0015U003}la4%nWWo~3|axY|Qb98KJVlQ)Ja -%pgMb1rastvhRz+cuKl^($a$r%1&T<;NzMn~I#BB;#6LIkw9)&U(-GsVEYX=%Gk10ggtgtNZQO-2g~{ -q%`AfXqPRLK%>#`ZZt=1`puL@d7NaMb5_aq^m}|V7!5}3=e#(S$!05=|MQqVd-C-86#n^^{g!0mfn9} -Pk|Ka%uabyog2zneOl~=Qdyv~aV^{fF?!%I^mwA=Np-kWz{NN=EVZBV2$*Ph$+-*wEcRZ5_>xy&sYVq -^s>#NH^-bof_G5h(=>+5%mpWa`;d3S{mVccL{<~x?;EZG%#DcMg4$;IN$K;NeMW&`^%x4AICN^X7$Sy -qv(?+#+1UC6DBiXNp)8_TNeIGD*3fS8|b8WyFPzC8-hd?=CN|@#upAQdQ41at -v_#qU6?^fx7!Te0jhgF%Ki)hPtp_uNHsLTZj!xTt+9*SLX`*g^5VV119kiXfBy%?|>)FK9IB=X>(gMW -qtR+KpqTIA(L8Eq3}OH~3kAHM$%Ug9q2!!rRt<)MI|`y_k*Y&d%{0O*gVQ>GxV4->Rxd``PDAn`Xsg&p(wZJFGH2yD1;9$yki0g+eymZvPmf9JzcEVA4Dh -L=NDB^MFydp=x;so=OJ_QUK5*qOcbti~RgH8UiB0Xz>t5t70Op%^jPOmxGNwb9^2uqaGZ&}_ItVy%-> -fOaJrXZu8M;Ta48*#+5077bo5-d$ZUUoBo=F5g{(OqHC}36Szv-v5jq1>Y0|dH>_bC)587K7ZqXWS`{ -c;G6M}fAPkHtDoO3-d-=SFMoae>f)LJ0EVL@77Fk*BF*L?zsuz=1VvbS=cF=?0#8uw=~>KS4k~JT%l% -y*SExMeDvQSFwVExLYUXmOM~v%Na1S^E#6Z0fAJzY#>k&m*N&#aKW*|Var0)e@0|C~qQV9bm~&44fZ@0^Y5``rcaeQ6%_XxGP -}LtPf;mr0hOCB@}oSytKnCAvzm^5BH>Vvg%u%)oVmW*M~Z^^H5ISsw;9H|`(@F&O9EyF- -Bh5fX&Zb6-VizFJWb=e``Vg;e$e?TCQE5OpJe1()cXI9nyi!i>FrbG7&ov~~#y)1W!?a}l89B)3`QBD -wR%$a&}am+&_9P^bC=(9;)yS+?Q3$lQiy5@zHo0WaT2*W!H${^^Zd1DA?#=q%I^K+_JNea&Xe8L4@RS -Z3%T?JZ@}qiqga$aeSaZUN?vEg?nLhbcI#EOh;Wl3F`3&&g>COX9#%=!Y1Z``)HXVDH4}F|BN&Pkyc_ -!_6){2m1ng46(3-e4K$~XKI_6EohtBXSDF5q3aBC70}oSoS_QGkoY<<^V|uJ?wU2e77*)nIgk4Y*-l=y -n|h@#%{$>p5r%3S1A^MYqKQ!t8I7u~@YA=d?PDUAJRV-ms9Bd^66ii`X=SC?gpS>)mk{pfKtDkTgc70 -)0}^1YW~lB#4K(PC#9q8$?$3n68TT*j=EyQK;ePN~7T<11?!S8P2x6t5BcM_%59B^D9LZTwfAoS@6iI -FD6=@+!%yJCrtXNFwOK(fI%h-Jtt&O)r8J{84a4AW%KumO!FX9(+$*2~Tl@mhw*WujR;VzNK!cl;(SI -;NyU2vC#_J9!A}LQNxJ6$Kb1kw3TBl$Ze9q-+v@oobSakCLX~`zjcE(5DYgUX)NHXO44|#{dbSq1Dh| -GDxSCYVC&0I2m$p@!65Al*g~b5BB2PEVqm}7)C7&UJEexV-zL%4$b`&uka`$`(Tq`I71xeg1wccy1lp -u3RoOrMuE7x&YMp?+F+uNyCKG|g7IoN-+b2rdO?B&*H?Gs*tk8r23$~*cA-jXh2u_Ug1eelPGM&&+po -A-9L92#WCCYeV5`kqNcD)U=8;bV+9+n}{_H|yyo08MM80P6oR#Y-*WFJdypwsy|+e%rS&u07mK1i}@m -F|L=&;D;03MvT9&{^k|nCVT-Mk&uWa@!;Q2uJ{=?FKUB-xG)v~L*fu*D(f*KyYOz=S@hed&suh*y}zSVpFaDK(}eT=6=qYYIZoy}en9l+x0d^1-h;&0iq4 -P}4gyCC8!O_`W7|;|MnWVQ*gyjit?U7p7P-qi_bjPdi5I<#7h{aK;g^3zg77JW{eai8D{?%!US+o$I&&T)ene60l;N7 -xs{LlM8?-b}R!nLYQ@ -{B;PO9*O&DO}sM^E)9zlqRYg;Y~lBzodz^o3=cIL+pBZm8Qq1JV5RppNBq_HAr;gTB8|mVsI=aut=wa -+#)Pdl9hf^G>lbhla^~f(fK2YpiEMm_!8X%CF%N%=H+ujxeU -=b{T8N`n$dMEo=rsmtQ?y>%iWIBBl3Z2Y>&Ot{KQj3(k3cHK*CfB2>?vo!+c88tm$1wj3-}9V{83-A; -=U1*M8|2n02WAxQytn@wB*OfV4|#f0#uNW77j!<@HY_4)&1i`$%X -a#&`I@PILrwV7_-y*5c6X!HDP^sI!p@@CqS)-nGqS07V18=tVue1S@!)ui -BYZQmcf0laXEfg;9i3Nd;^{RJjF_;R6Pi{l?0!*49C`$h+CmJpsXm4im~y!gsUo9c2>9a$WD((*O|Nwm#F-;?did2fP#50G~GT}b -eQ5DS?8Cf|Kc;hFA2^3~W0Lm*h2`hDG9{`a*y1&6VI-7gWqc3n|&SNT0DmT@RU#F^H>!2T8uQ45_GSL -(e!wisl9)e|x9q&g1-C?vct)_En>F-$94bC2YdW^~So9RYffm4&FyUW-ms&}?Zmy2Wvn8YitlYWCD^- -MwU;_su)+Oi=L`41#{x8QklHhy&JR%l|){5$9TnSivecFDK6lp>Xala{4Nnv_zKJs3BU` -+mwX4(XNK1Fd<`~_O2caRYoG%I$?ad6z>s^Xxmv>;fq<9Cr~Wxof|q7p%vTjK?gCjvu{)hE+Kf{H`~z -6#J&ajLHJ~PqP2t{=50i4d3T&fbNLC@S%B6%EC42*PhJ9i@_5kB=AADu9ZdcLtwvK=TRrr(-$kOUPJN -84Db81c^tUh#FvTLkdjhfw#&`+PX@?PB}MS;8~koW^-N*yvDHKKUonMsmWU5Wj3q}9;gbU{48ehR1PN -VEKpdb!W7b9EDW1$Zu(#f`sc!a3~OaHBch?Q4Z?N2Y&^{5Zc>1ycLf*$LSk2(tB{>J7S>_>rJ^jc)v#rRt{a}(-D`G7zed=i;X{MmPG -;GGWKyuE!^|<|#C -dWG4s*=W$V#HIG_yt9V?R!%^5~r56>C~y?gpvWI3EOiI+%b@cg;7+MSS?s{9`(8hPcaTW-@mHxJ4!YaZx^wXTh&3Qq?MbOk3=gld;ds$I_6np%eN#_!m5T)!Fou)w12+|R^ -0G9MeJAlBa%@}RuCFSOSOS-3C6BO0iaq1_IIle+Bu@r3mX5z(b3NOb)VbH`&5 -3yHa9vl9(RaC6MMX#(Rt@k)m*NZBM`x+%&WqGO5K#`r`w9DAa?qpdQx?YyF@3&wzZfH7zIIXO>V=#C- -nLA!yYrDE3jIol5Cy(p0Oxsq!ekieVM*cA*0^dQK4#?$X=;;c6U_!nlpE*Mgd1#-+TFuc6DVGsmpKtC -*3!v0-WA+{@&PiRrhD2ZTwn2rv3GJ-1=Q_y5h|0PO`gBYln0+#P9LjAG6PvzgE;mL(ulvEmEA+6?*lz -LbvVJzFu>kJnE6Mb4x%pBz=cUAvIy!@Ft9EVeO{!7Cayp4Xe9i`}&d}*ou6b=_7X8{U-Ec|mTetYRXCUx%&zbJsF>q(ChES)RsiTNi@6Q -Rh@BTUk96F4q{&t|kcYkel!}bcW8U6g3JGx1fn^K#PXijK~D{T;Y#FbCGosGx( -PR≻!$nii0_X+_4bP_gCkmYWY|A$BPt@i0J~sWGI{X|h_H1?KffZ$VjqV1^&aK;YkszjXJL`VQ4^0 -U8JRTqPrcTQ66$JIzWX_O@E3NyIMRF4#J!9>yk|#`M;N(e^hZN0VB+-48!wsZV>Y7RB=-EW@1(@LZkg -x@*+!pSpuGL~Tp3&D%L;@4qPLb0IPxShKUSQVJ5@1Im0mGghst#+3DdTOIBLrG2AX*L5(_-8Fi%s+YqQmV#721i~?R;;1uf-P6{GJN8%7=TaqrfDj7D%-qJclwYgdwauC9gjc_ -V*&pY2e`wj=MoK;!LOTU^@2AP**9IJJ6t{NPD&8c+JNqQjvts;=b>^{-`uezD648Loi46uvFpVc_iqB=m3LGeT<6cr`PawkEt6@{ -XbAk0|XQR000O8B@~!WZl!l8tFiz90BQjM8vpqr05+q%M3uHr7f(r|~L`c92aotkIFauZ#B%Lf~GHkW2-mCp;uUu-cUhOT -nm0v2j%W5_#RzSrlRHIGttdnXiF)R==-{(0qy9sFT?fb|3dH;FQ%$zyrIlrFsoaa2xbDndy`mV -iO_)}Ge+0SVIoXr3JF9Cl!lU~VTUe0*us{MwA?_9Oif8U0}^$ic)+i>@f3-7u6{`()`3xBw_utB)L@V -@&CEAI3Z{`i44Yj4QT&MeZ)c=G(6H=KU*s>bBsohJ`8{u$meOIzb5`hLCfJ^Gd#UxfDuU4Ll&h{6^&K -0@Ok)!|>&->=d4lKbxQV|o9m?QR#tEHqe{SAO*VUCFpE#%RbgWHL+#eEeFA`_=XEu+c;fD;PF1jD<1K -^yHff8z>S>zcBzloy`;wVN>tai~d`0GBC4gLk!Gs+~3o{-3G>)!7z_~#xMo{!x-!zyke}nuwVZe{sw; -SW**)@XxAHreKlVWQ^+u@Z)jL^H-9(7WESgvpALUVFNcGAoi}J;%o{VYJcCwd;yZBR8yYq=+yi0SSLi -dd1m3LSyX7^kUH1S0{%4Mc16tl)-+`O=k9+w4|NDRPZ<*ZF++zj;*x532E@OXFat(-$EF-u=E}L5wtf -An*MOF2yz$5%fCvNfq%pCEJTrI)vpMJr~kO#9NF6?xZ>A9F_4H(osrpw95)dTi-2m^F{Bnmaj)vV91h -AIc#+#ySN;#|hPm?$|kM=;EfKY&qkhJzK1aw1e^kX>wXBver{pu8)`R@Gt&V$XD+e<4&Eat+v3|LS5W -Luwq58hgpTP>cPDBgQ=*@h=64#iUSG)qv5b3IoKO59|%ztHv -%0GmLtYc%jz%|Lh_=#0RU(oq=2%Du#{V%9=OjGrL)1}rt9#`n)YCpWUiF_SCtl-vtt#$o<5hk$s^UJ} -V-7|GQqL!}JUd$DGyzGQ6&#?aclSWzE2IugJ7prW^+jdHI&>^R3g5%#Z#K1o84o7{%cuAX97U%&!2)& -THRS{txx@(#-|&>HcL>BT~KvCvg~_93IaKfrjgszq8=&?g_c2P&e)w~r5>>-0Yk<-1AGC5o3&#T>P6g -_2V*+Yao8gnGvaKE28j+whfQl3cx5RNYv}?&_^sbwnE&t2b~1AjsY?2?=r)G@_;k26ckh@4tSoMmx{~ -)~n{RKp2q1S1J$s{4dk7>~q6-x=Cz|)^&=Nc^suP$DnXq$dz!v{suteSSp3XigXVzQpiO>pO>VMqBP} -b7v5J)_WnvNZf`oYXqDVvN1N-Fd)2&L$R%FQ1dIU#pa+X`t9cbjw!OiA!K&uXMu0?`V5o$A8vWti7`f -A5Iv2Z;5r78d6#$ey?9|e`6U{xRndEeOLux7NWDrj*5SLx``J{@X0yS?2R?-=&D6+W&>*2N89mw#gdD -At_Sj8U9>nI!|N+PtHv6=!V;VwdLRwVYPS>F=R%*8yChqRtD6Gkk7xY7s@F#1~DIO -J@OCpkF=dhQu|b4+tq{F0x+4Y-eFMLz&-diGK2-mN<3m`uPSV}s)h5la)CS1&m!! -3D=nskHUy$=8uvL01F{(KE|*t)=44)d34lB>$m)kUzWkg}B@5h++sD)c&L@e9$^5tg>n4ItBVEA?zyl -hv@E&BymTOtDos}=f-@zfRWdm0Kek_wX(~asK<`UE~``m+`VoEotMo$MW*3v5whewGmK@uIBPO*4iqYuz+^F -Ou379R2TjR=iUqr%j~zh%N>OONQ5k{N{VwNws+0C0q{i0|;p*WH0I5!+6_n%mWS*7w5P(s#V?liX5F$ -lll%K#4`;mIdIxiILg|NF_Tf)d%=)at>hl48M1ZG9yCB(|E1Q28B5v_Jp{rDyO>egqFG*o~MBmpy}Te;*cwq}Xsyi$y?x;h-M75@KbV1Ljev$_NXRDOT@zPv|d>98bu --GOge{2~zO%0A?iLmne70lwd+`NXUnT;3-Hrd^}<5FoiImFT~%(ddWc;yVSt?R}LbskM_grPl-sSWTN -irp-sj=H028QDJ6e@DWgk -19BIEINaqk+$mpFq$aRvrcj!AeB|kUTztfhe1!g-?)QjX@EEg`C;s8JZL17e+Y(l2Lt`LntJzsp0~IA -y=>4kBuR_3+OVb?1ZJy=Jk+YQQ^%dxw>O6l#f)BLD#NsatiWCQ3^T%Yi>nSY;md1K{nN?xy9dGd?#V|}&wmx`7=&dia@xW| -!FkE=~>!ArSUrX~R&xOgbR9p1(z2pTfu~%EK-J}M-YNWJe1&hVC1B@5t3uq4Z;o1oZjWTDykYDB+;71 -WZWI@6utFWZ%0g0u8Lb8Eg`J47iD^_+7`N6e->q=IxS|{bmReouaSppU;aCt1s@4nXBz -`r(rOB0MhhY>?Ktwg{1m0QA-EsVy)FJC0yJ8KD*q`6UAdv^UQ(i>)YvO-&SiwT#h-Hf%nmUzw;@|h+_i}n!-d?w -Uf@Q(xL`qa7DlJh=rHhnwc5s4)WaHhYrUhFk1Df}h`42h^KynFqnRV#E{i{(`?w2W7H2si=u6y<1*&c=}Fm{d>e$LKv(?vbml!6W?V#os -`Wa<1snG3e1TZlB>hJ&MpCLAy?1yN>Zu+OEUJ5oJ_BCtRcyktzwcBqe!J0Jzw-=>e}#EJqq-gnY8-Mx -g$Qv>6Q3RL&#*cnj%+HmIdo7a0XSbQp7?{d4p-Ol} -@r4RvoCC;zFqBXZs%Mr?~oeJR5AvAqzqfR%vVVQfWAa80&+z9K6pMgQ1!4l5ZaX=qWcV{Mbm`20<$XjY`L=&^&cTG&FB;6+SP~=KwsDc!Bn -g6bair>(76NCc!Mf55(1)B!68zTwDWr=9JHI7M8Hw+~l&bAJnn4L14I6ZU@nX9}kOwcpfM1d7QM7!g>j2G)OJ^!e8y-_~(Ebk0+pdUq@8~l$n -NNm*WrBJF$$NP_ug4LTq4iycU><a@jSQCM%JdPg7SgwSwV?vv;lIZ+5uQp#)*x&44(_D^cZse$P`yTHUc>l73F0iA9% -i1>`?6|&YdfBE|Ou0Gsx3zi-SvS827vkV=ic@~1p2SLREuJ|#Wo>O(sq$Y -CuXLq$3eUjeHtptGE7{W~rb7ag4qMmgbV9N->#6(W4*F;V;}aP(^%2js@yc -o3i*wS5gM#l}8{pL76M6#EIsM;kNb$T^`;jwtDJ6a&%X!%7xia2%bRjB?cB8rZY~ke=|8t~o%?Zt|D% -q#5gBWPoc7u0(O?wXOlB$VK>BNT_)K08_R@T{<<n-uvh&18K7mn_9{U^7T<{d0@93D+X%SOm?L=@Qd5Dbkf@GKVz4{S?qy)WqkK@}U-W -q3N=^TP>^Y7N+=!QjT&Z+D&18TYcn{IVhEP`@H1G6vYKsO4UJ5m#Vj%Pa$gYe%ytrFLSX1NXtiHkvC| -c8$gtDfdttz0aW*W=DErQ6lnv7kc)Mrxpj>u4V$h)lLr1(TcDw(?<>@fVSsPw0&qvyKyl<;=lJjx*TAZ}6hpLnfIY!#> -bM9b^K^Eq>9=NUB(oN92x?iW0|y8QIZ?LC+-Qfq>tP}J-*+gqCfm$C57?D -*Z$eAk5^ywN93grc`GO?x(C8KFpreIQCtP_Nrv*#9Aaf?TBVh+k5|GP?OUJqFSUCJyfMgq-kvdMQ^`y -(vRo{Qju$eZK^`LtrJ)y!j&ARYjllU;o#*FYT#@-U^3;gtTNmCjQa3-c64HjkK69VWlcq64E$L+Z~0m -AVF%H2k;@*S_!3Kx?e}TyghbCM3$0*5^gRMoZKR$8zr#yS^41Z3d~*D&%;{2f(KcAfK(ZF*RN?aT*j^ -X{~7qKg5b%0|29pe%`>3e4gcVUchb&>9NXuM1jV#ykuY&nI27#qMs%x}v+ -esTPranOd`Ml?5BjwM=o)z+1#Yqwq29|F?Soy*gW+q^r!|#eyeG$HML3rm!HEH_b$yNiJOjA~kXiWs? -sSrW?viS3(4TFB!a@VRn&;AYtdIjhs-Xxk)7k9kGq$8CsHXD^bK#Prm8dpNs1LI-1is<$$z_fgU+K^*31XzL7GfLL -lQqy+XyHdV8i)d(ybs&?|(v?F{ -$1j8IR&SG%nZg#>PF&qL5Km`YaHkkmdCT44{dvgT-in^07j(hZgN)^B~~_2Ku}(kTq8YqOj5|e=SXZPVVuNR*adhl6F@LAps&-xvCwnBVmo9Syp7mc)>rmv};^mYCF@Ot`D3k -x8!i`g|W3E$>j419w`vCE3_)JPh$R6&{n{@aO(y9NM*F-tEzGt5jlX6c(am%2buB~S`>LYAGaG>Dc|H -E#)|z|{Orsx25s|%2L%^cv!!Ky -(z1lKtXDCiU0a+}$fNaHOx(?vh=~S%ikR5Mk0IMFsmXG!g$gux1A~9n060~$?We@*0fUn9YK8%4+JI4 -$X6#4i`arnhT24ZA=%H<|pyxsG2-i|zKv^g(COq7uzeL@An@9?|mVR7)NEW}Oik~l%eExcoWb#*mQqB -c;8gM~Pa6vTP#as!*nE19W9))+-r}5WN0Ejxd;O}U>lN#`1u3iL-KSdLbT<|fv2MD!>CYDo-S7TyQJ^oQpDHK(;IEV`TvFxkKiqZhl1m5n5Kn^Ht#M#3oYH&LsFE#$(@Kv?+Bc<64bZp$tNeNDA=q1OVaaaC5i+A3`}OS7cSthB -j6sk>tDLO{Bz*LON6fJuSQ_Cz!mb-F+$LhuijR6j`HOaNG3SU(DbPri{JF0unA-`e*3qy3jC;+S -NCpW^xrEE;&Orc=OC5>NG?j!}f;8O~n#^)2A_Gut+HC_;s2c-7DIsi^Ty29G+LoRazYH*PLSvF4+HAMRCV_lyL6 -8ykPS;R5t$JXU{hbx$>Az|QB3OS9jREHA4H(Ir)O-zE{%}TGrz_;8xzr-vs<|APYSpeQwfo;gbB@}>Z -v01Ln#P_Q8T%23`JKmLEcj7##q-xUd=skrn|OZ2rkp_bau_i4JCBdVk+W2w4^B>vqXTrdh!|#TqhuRL -SMRj_iBWTzD8xm{x@6RV7G>21E%LcaO=>YfCNl$VmLayF5yD(o=uI^nUWn-{r6`I`sTDw>){peAB)ybzuFnI%OFU2 -x_a$37fWpwr!df0}hgKT+`+4Qd6I*V}K(CS52xsuhs)xRKFu>DSRy~cuJ)I-aNK^gpAi -pYf8%+Ea^1|)8p^EJ`$<>R3Ya)1r&y_zUSQS)i2!=O1w=Ixe3Aqz$75>!Js4{$!oOXE=cKk(af|oYo2 -V@IvLZ8;VC>qr04k6&Sx$K?|KkgE)70aJQJ%TUvi_)mR-O5rZc52jEOhWX$cc_6YMIB%wcH5-z1X+OTu6$KMS4Vcj-^F -580uVkVNw3FCGN$G{mxrbG?4VWsVHLCNKruJc>dyT1f$!Q7G1YZmu~EV)i2(Z-@F==#agGu+Y0@vO -iy4Z&laZ&;~q5x4%*t=!Rt6k5>NZGAM?XuT>u`P#?@!ADl+=bil)AW|`OLk-x+}fBOl0zg<<2ub_(7m --07q1UTj-H;OZmdIZu{^$c!Qd3^z9iT}(k=!vrE*9-$KMfaq2MeLHr=yyZ*4C>{xz-;`un4?(s7UVQPz157T`wH1Ji|MWU$Y|AyY+MIU^=R(^j7| -@ZA#<38$NI18uF1a2RST0+Se4!w@fXsTMSp6eO+0ip)nThhGPCrMK_vjX;^*&pP`l4k2m%Zmc!DSB(-Y8*xeI8_rr%>Tf?4&#G3)b@!#BJ*sevG`y55&m^3dw(>8f?EJTNl2dGjn3BTXoP`2h?`m>9EQ5IKmN_Zui^R_y@q(syx`+2Y_OVdQX-X8}YxB@PYRdSV`mWe= -OB4c4+{gxijDrm68ODDpjAVui2Ua#}$3Lbr8pZzar>Bk>oQ%ZmACDlV+uP|S~xlz>nj`fsN;HcD|@r2 -!_{wcOr0+}^MPDC=r#nhuF$A3zLC$84*@9tGVaMOG)*u&9g&UwSo~I%;ezOl5t={oz#w*# -Wu3PP=jHikG6J$dsgj3POcKZ%8qd;L)x*fDl>aCz#c}3>OOb(hs5lSmsQh<|PJ~?lZkz~b`XRNtOC>w -fa56}ZrwPiD@+v=!Ie8F;TNmq?Z{}KjI2462>B$d9;JoMzp5j_6A@TrfW-uk>i)Wt`r%=a9@-lTVlU! -Y>xeZX)jMM5ye`=PDkSqP=+B|U+*J(60)%iVgInE6A!~V+kpu~QO+N=dE`O3eGq0nv -M(4e0Em}eOq_UfVVv?0pTSqjkbDu;e1=YWOWrnv{NB8r5uT%F}rPHenD$%;b=^VYY8|b8i8TuBZp~io -i+y3&ZukNv|xULO7t9{LEaa>ra -O3M0)ACyD^ae1>e&)5M1d7(Np)ocxa3)M{3M0^SFB3l<5nR8pYL!Dir&tB9NJ&@@EW|7Xntu@z4MB=I -D$@^-YDpszucf1sQN6`c3W+p%d7QCF5P+$C?{uYHYyuTgHY=OY-#y_k#4LmN|#y#3|N03II#*k6qR>R -v35Y#EAw@FSc6^7gQnu>vwWjmUyV0M(vEpt4m1{789$c_{jIj22@Qr!gr}emqX^-APye@oMSpl(sAPrT|{X&-S|L&UIL2Lgh!h)zXR-q`BVK@?peZOxUou5aIt2d?I~Z@&Yk{`^>_A -NdDxm4C4%`;Yu|xF|6Pd8AcyOP3l4&|$iA9a_J4BBCIyZd^xRMW2*pjyxoqY0#V~R158Z;_Fc8K|C+x -G+_k&s?l9iEyW(n3GxPJJx0;B$e#q)|Gkivk++4S>etUPz_e94&Z^Os*_~N`R32KR}ABoUVNl?Q4 -ei^|AIfTl+eyeL1zSL)uq`_O)C4s?xsxUHe*Dj>CizKgS3_7t19Vq^*ARckvAq1XYdWgXHwVFr53eQF -<4h&LNJfj9b@1-YGuvJM@Ealv5wk+-8-|A**;RBS0b74Ij9P3~m%zv0UQ+T2+yp>G1tqHXStxTgflAu -<9F5Z0J*%L1tV+$!%2>xOE3w*f;-`vTXl4eD9it19#HDntsgIK9JnMI4(iL)VQ!HgaAoQy=NW0y9Ca6<0VXAajALFtiBLty791XAAm9NJe)F}qxf^H@E -p!RU?Es7-IIHZ}Fe(mKc)x--PzBbOsR`lSk|UYh!$dTdv6R#znH`Dr#q&n1`B^M{m{$0IFIAGng1@vK -HVmFMi?x>XwIq;48wPcFJoo^d=O54@^OytMTUU98C^YQ)h5v4s}EI$x}>!4& -p(qS4(M2(pFKk@fF0Vm1&_fTt4;dmu%rW7Ek)ct)4^MrJMtby-__bwwoP-wV@~Jt0|U0MlDZc{rDyil~dCIpGn(;Q8nZ>H;Ae -0K7%n{iW>+!>B<0QF7^8SzAX^b0s#9LLfRoWJZj{GqkRJ>r$aGDVB;~fW3b^HvHWqYXH^|P-j5-|=`~ -pc4E3ML!&o$D1Pc95WJbSMK+tE&`AnT1040=Jwx9ssf_@ykHbbz@W&3w@W)&N)AeTQ&$-EWK;H8vDo| -HSK+GD{}yk9MCK^y%^l*iwfYEMgzo#NMK2sFRr0c^H)}qOA6`U -@3ET@;O*e?J>#KNlTS$k0~$4T;1yd2hEM$Ti~@}gzV~;866R>ZnJVG=IUyq09`FQK-UmJ7X{GxQ6b%0 -vN6K7G1_b7YJiRr8Mw6yRC5p|14!p_EA=9-=uxs8$Rg==sClpbesH+cA;i-2luspN(PR-|h@^evC)zN -6qJPpnB(6D+lAF;)tL;Nm>oiTZhvjP4VSRJ=SHQ$Gonm5i!&mg&fcedrzj6+3A0Sh{%vBZCUoSbJ>A$ -CHq=ROt({Yh&S%*{8M8+2C0&bP7i%^vV20=n4GCYNG&YEu5Z5vjHL0GjfkbmnDE%8PY;3H&qA -$ycNivJWa9Y61X844)=$m1rVJN2z9;h_H|h&+VN^7;sKr(U%1oVo|Q3~@b+l5s!x+X@Yge>G(Ak^8E( -10r=E{1<-+ZTWp_-YhCbInMHx;-JdUwTIiR3tD$r*g-sWRIq?&o#kk(ZXlje5G!zpf|%xRt-VOLRG}- -49^qBw2^YNJEvOL`W1L#~&BMRwu_j5APJ=Oycms0P@NI3fazeq8*fieZabby -2O4IaMZ8sxm=f5|i2Pyb3<-tyMS5rPNI<>IEICULciX<9w0NnCAbwD!TXFcTVg -BO`OrB-5XuQI6vcCxA<8Rc!fpB~7LwyBa*TwE_1U=t8;@t@%C}uC@%c23Ge+SRo5g_P&PPa`~KiW|AC ->BrK6LX{H(4$pFkOrOB>=Hm0@GOm`SVmDbeGBG-bNm0HP)u7r7k>Kbrd-10N~DfuiGLD7br2r8e2b*D -8gGB+s?wpW^)gQo;bpntiN8Je%6N1zz~)~%CfLR3|L9>`vEe5tnCry`|DbHs#Ez*3w_hL|u3W(cz1X% -jyk+M{G5SS$@W;e7F;iQD0akV?l~%{xX9{jOS3cO;6AH~rdT=d<@CoBGo`$Wv-SCcCE0vK#1c<0K&UF -5J)CPGA-~v`7;gaC*^>@RsKAlPV*xlt3O#>8KKr>z+Y=9%R!NOrj&j@-Z(J&$qua`51-p4yaz~qUlTSWI%@!! -bghoj6UHA*Cp$0P3n6lM+boWBJqv -<6ImIA!Z=LRQd&y}V^$)z&lk_d)AYV)PAx`YNgzkmu=&3Eft*(NMV!aurL!BH=>fri0I?$JJ1FJ^4(M -z_dR2Jl^H|C^sl~!~-;d4RlwxN;XMX0CdTxZSrFsk2m)EBD>aryPjK__7l3>bkfowBC -fD#$%|6Ci1ml!I48mKp&Bqh&$O3m1D>e|$3L!U0kMSiT~tdK|E8v@&?fhj+tXD}p -Jw=65#2Ibt?u5O4w7zbzA^&xxIHABuI@<87TJ -}naCoSoyLIIpm3t;E5@X%asl>)y2HG=!s6A&sq3x-SdgNLg6(nIfvcW92l?hg1q&*z}PqcpagIHQkki@H|d8Gp!J&1h2!GJ>*QJUJzoE>e+#?f@(xxtYqC&7q7ag1DQ-F6rvpB&0k&7nQ -5l3D3&OZ6j3H0yd8U#_F;Biy5DY&wzCDcs*~m{m!M5Nr5;8&S$dE-48g#{xpz~TK!?=}isAGBLdMH72 -;5`l+tlUml3wqqZf`_|4l}{EQ!y~`=7npr?z#E -M;mQVy&GP#F59cNifI5HMd~z;jH(baE3+Ls+#Oy}Xr7rD3O|SIEXwT@!0H={Ma=-dc%#ztW0}kdJF=q -UJGHo)fAvNICMN{NluI(jv3t;?@a1dLZog3zG*Mlxne~5NgFa^pIR_70=_znDcltCL(rCl8;9&Sm=S5 -CoVhiVlL!!14fT$F~^+GVVv09Zpl**^rfLI*=9IGqas3jhw#jMCbz8#6#1rYD8dLgrh6bEH@X5V?Cem+%6Yn1@ -^ZU48A|2H=BUste^*Hf9}GSz}V{$4inqX -WPlem=xTZX?@2)>uL<+43=EBTFe8p@9BD+>*z8N~DEb2Zu8fx1Q@7Qu#4uBol#=Ou$<(ax_+QcW?r({YG$%q|zd_$WdARN6@gTj#oNKZ;rH|DDw -Sua_WPUWt9(=@`v(|}wH;)Plqe~LSemDZmMi@oFr>H2xF5-+(y3lH)|p#EP4AE2*zL$j&2LPo$h%!nG -C4e2$j^r_J1G#CAJ_D_X$JaSwJI{#LBK19gFZd`tB1SB*$M_pv*_8R6&IZ7_oO}cDi*p>nF4}?F!(a; -iEATOf>9~fLNxq75!-7xLPlb%jMWg$b3ccz#QPwUCBMOU$6X3ArSwW&Tkrv*K??f0AvR7D=^zj`z5hG$;hbJ1%$$`d3zKxIs8Qbo=*oX$&grpuh^PyKVvRdSU7N!x9 -frt_J61GQAGQ>$%Fje|^Umdu6b8*~r8_KF-!ChwNHwuL!U5!gk6Z*65|&Z*@ML9a&8aTG -K+2?}5)4eaX7028Vvi=kU?IbEHRrsfe{<=t#TR|OJ0!nOVwb);$=_sANIOE*;ag(}j_{Y(?r(rrK&h( -ROQg7#}zIWwCanS!N>H7lm3!i#ckFCM#!O0~ej`W&5{c$}fGg>8n}tn#mt%H)YG| -ZPjY)!ZeFA)lu6EiZ&)Z3*)3}=RTjJj^8#KZ3g)H&>+0$;ir{Ac1oU{uJzrCoir+zHUl(XjuyLmaR8u -`T<{p9xm4jU+8u3KEk`z|&5v)VlCYE8dqm;Hgn8R2sJtQP4sLIjv*|!r0os;H+bC}DTihWDKZ8evY{G -wl^n^#mm7mOYbO>fsr{a{k{)(HROH=2!F1^VjCX8D$+D6G->(ZR5^U+?A{JMI6ai=o!T<22(!xFqWjJ -!^DKO2b8#kIZ12`-2pRp<>c!*1@ugT7&5M)IDLvAEA8R`;L>BnT|H|1{!N6!Kj?z@50DOwB@laZ!8AW -9&y9QSOO|DGUWk3rCkI?LZS*_2U0b6x5XwaEvGFfh<1433NW2A5kx5;Vm6uBaD1}52c(wF*4|gY?z2Q -=7?pPLN+x-*#epL^d}Ng3+8s&j5?JV@xrx#L?tUIl`KnA$+UX0F_FptA&|YiUNRx2B#=@ta2^6v<@EN -7w5v0f>yUENHQ*p6ok2u!-4cpmEj~jl1lpe@pm9h*V_{D7Ip+Q}B%mCll2I=+8W;=;u(bFuP|u<53s~ -wL?Xbe#|6Yo7ZhQ|Ni{k-YHWNSQf_GtHZ4VP)IY_tFP<#p4{2i#y1#yoDZvza(Z|yfchk%AMv<%&Ne$um$5BI2swl@C4Khx{2rq3WOZslmOwF;>p?4H2@T?`mz6!7#a!BO -(kgo8D!06?;jxH^-q7QEH1b?4B+*VPn-tfQzUNW)6TvK1!rn-Um_e-unI5nFb~N%UV>*{+=O4OTVuD7yI;}ed5 -Q>*EPf>^)2{|Tr5zd3Z!r)Sd3-ST>~)}7-^#p-@`F(5AulQDgp`inNuf#*!X=b@mP?iSAmu38@~!B_I -!CI@2R#C05~FtWf^&s#5E{BN=^B)q(Sl^d4K|Q>{-&zU^;Y#OJZ+ed*B_#LLJj2UpKEpUY2rhWsYt!e -yg5rA(P~r;=rCu6rGBxSoc_Bm>I$Zew5Xbv+*oNcUU4qNs_pvul54iwT~*{t -se>vsa+bpUd2WY9wI1lU70AEW#hy%6C448ITnZv!}Q8FnFnQ9g{f0dT+Oc5TXrm+e$G^@wSKJa}UMj9*W^Th{<>yW&r{#yt)(=bl2_`jx-jBy#lO&6{cri(GNHpud}0qG#N#WBc*)(w?-j-H^ -2--T|vbnJf=&g2fg6{=v5X|xc(6;A^1!Jfru=*3=rd9g$-hYp3!Av$NjBLZlq=&g1aqttM$gwHVa{m76@Q6Mw%-ES9mwxJ--F -gLgNFo+OtYA*pyd6f!+Sxq;Po83=OrJ5zMd&fgqh>sv3D}zqf;O~!TXBSI!QNr}6-b -n6sozr(U&8HMFrfLy>lZVIf;h$92SMW&K)^eE^(A-{&SBH>^-7s$`MFSt+uZ@^ZKRvhy>yt -Z`Os!zd4$Y;`AJAec*o4Uo2Bcui&`eb+!-grQ(rPp+fY@g#2kQ05#r4X*s%5@^yz_r{DYyzf9% -W@QnakY5WkQ|2?UCXawQnaIuqmBAR+zjw-6u`W=J%~puOIm{;&|J7ap*|hY8Kh%vL-vq6NGD)_q>#_o -kkTIkp@e&V!GL1MN%)j93UG;$rl(+yJTU|`E_hMka_epN5T6ce8z`}7izx{nPbkwU_v -^ZX`zh(SHO&I)*9oxSYOq>O;z68;fN(ssrcF1*VJVCQZg6I3V|BeU4!8OBuVTfDJAEUxuR?7Esh=ZVw -To%N#kvIdEG^M0OqCPLgy9R!?!r6CFTTYV;FrpqgX*?VRf<~qAWC@hGZdIs0&JEpO251%NnLDB4S$0c -G(+JBu^wftRdZY1Yd=*(T -1Sw>^|8`M3IUD;Bahc>fkCcq!WvOo_IeydCosW_-Atw!yzlHTq=1KV51%Gk)8|!y6!&IS9mT87o!A3^CF-#p+s(lbg{TkeAUQg0Z1NU-J9Y=W=H*MX-^ -aff*Aj5cSz0~iQ)Rf{7-gQ)XDdj*wP!+!r9j1!^A*w0I{~8^xia&m(DlY3_>r-H4RP>)w#XY2c**{XW -`v-?9+M|a`o*4ayinbU{D%$_G?6N~*a;+_RN=Ubd<7o!ELCy%{$l=2&y=N^1wX0swFnGxf-r)rh&kjM -%PeI@v6Ta7}4dK&`d1T8F%p?d>8BD(;*7|~W9M_37f4jVlEk4QZGv9p0t*RZM|8&qRHm@Js$N#bOnp@a|1>?^wvqx;s -qjxkpqQYMNc1G&4R8~8{_v0@kJpEfJN>OAL8i2P%`Ru4>kHd-c3?QjqOqBD61zu8yJN_ZQGI`P48Bf5 -xz(*FGq89raX#%}U>XbmeR@Q1|DWzUwfP8qXM@?w6fu9^O`be(Ucsv3$*XwhWfB!6bJ;!Zg)Et_z6|a -yJ-c)H3WZ*eSor*z5oWjH`O{sHJH7i!tMOAu*6*)>b3~#`Zs8msf*T^sw6jos?q@8ib7gCL}?Fk -cF3h74$nR4E*STksNU2=7pRfyWR9I)EJ(K#$U#%acjSIFl0xC^%LY3FJavJcFtuCv8EkZ5NJNU)koes -q%%&Vb`uxyN7e|4`S{Q<{`iYS8spn^XgGgtxspHrNC$JLz{uHy{~Uj;bYH#=vhr`S*B2~;Rb0*Denq^SMi?|_a$r;*xo)+zXf>#U;(3+}q6IlnR3mR)D -XuAFL87!apU3jI{7q)$t!v7E#xP+aBUZTveY%vb<&P!5oALYp@}DQaaeS4!@?R#u@!nHqQF$o&jXR~v -obpGL-?*Qm+))0DPb}YK)W1Xcom2iYey77X?hdFM*92JgM2)m{jgpQXT#O%et5?uH;o8&zNDKL -hFP40v>0%*oX}Xvp{2P>HZl9+zI0d1bTuU69(Uvy5kT=iH -5Yj4@vx}6!(1c_9>In^WX$`cg2K%Y`c%@V2+@?7z`SaM?t8ue<61}V=P=hY4K^I*Hx2r{Siq4>$pWf&;YD&1y;RN~R!o`?#jvI)m#$8GzvC0_e#iPUyS{Xl=u20L -(Cd@S2hgq2>n)CYk0+dNkJl@?`ZTejouB0^PYwf0AkG|vqb!O< -{xBt}eta=4)xwk`-I3z`kXr{m0~T_V@I629(RtCO`HJ))bFx2dF5WI_H=9Qpj4ZPxsGbyl*jlCsrLPLmugcoW3Kn9`Lh-j! -_#iEK%-qQ_(>Z6wqg^kvo4!3@|?@YIMW$C!*iN9H&v@mvdboRnTn$aAafXvtWEsEfd|n>Zrd?EEyCBtfU0RdXUymH0@fHTS&zzAeL%wJ0e_9T1w>7HZ{#XXugA&f=LrQN5I4gqR#aM@z6UNnUTWB -h12dm+r6bH}Gt=eHc$oUY%R_q>xI*<6kHRG6Eq`|!RuvAW0n0^J5PWi<9aU&v=@>8z6Vyp2!SK5S$mU -TyleDxti575U*FDhNpviE9rEF8I4D5XZ(a|k5lIto*(2WA&40x$u)ptSYC -Bk&MVcuI$(LnwwJGw@TJ*Y=@iLbF3I$ot)lx5zX9kuE%#bS60ZGWz&F`!co+=6k%}j1B2Zo_`Q3{?{_ -_WZ(9e=`p}AT?*|Nen+Zb#(v}FSjw~7;fZQBb$Fs$Wf6KN>8gNXNt2J^R$1y=WOSmcX#?UuVrX4xG=C -=@l0y~7qNc*8*6K@5YcEx`R;$9c{zwzo@;p!vAjrtC4;VdA{;$5)&p|jY3S-I9KZ5u-3#A_34T&28g> -jYc)^{@KxzdTTzxp_-RE(<^8#~7dqvY6AOE6`wcG?Lj_b_!Jnn@gAQ&@=E-S1MN{%KJE>o`RZpzD3G( -I#-R>-3bEV9BVqDW(jU4Tx|`%n{)$%8|JEYeABP*W_}%d60e?wJ$S6rA#v;Ol)@z8kBrks`lfxlavZF -A6UR?z3a7vBcT<{sq{ev=wDUouV*V^IPa>^whbVRt|L;4A#7`Od?v==0d8$p#dZ!8u -Q7B08~w{Q-*2JLDU*D?`zJh-SyKE<+QhVU#0mYpljhHkkyoMe7fz=z$$>Q@y>YJN;ikKtK&lz -hN3q1=IX(w&$gAY{|EwowQP~NE&N$})92eV-)d^S#I&-)Rg{~L$6VUhvz}4QWo}{%FXJRzDJR*Snzl( -^5-=ev0n(X@9ESe-Q691?;3z2{q$hT(>OZUpIKxcx$Xwh{+KIo=H&g!8uwGCOBAIhQiit0~psMtYAo< -DfK^_j|`lq4lxoWq59tCeM&ewmtN*G1X|31m(pZPsCz|;Wm2cfu;)qmZptg(QH370!{8*UDCjt@Kex1 -`2_;eP2zgK|4rnb3cNplkT;2Qu)@7zlx|q7?3?_aH$1WsTkZw6ex74YR3R{`LM0^?1s>leFpp?yzF|1QDE^#pux6Cb8|gjZr_7x_7lEP1&hDIF_anlsMY2*j8vnWC)orCqjki7SJ*d2`8C580*Wc!I`yh1umdycm!>)?3k_sR^|e(mVm|6=ej<;gs`H>w#*HP>fL_j-Glgpmu3w&0 -5uKo9>iM*RsIL!mZIq@pXT6;rf;tS=8==zg*@jl1odd%1~B2&Et -Uy1oIkg%;q<-VZe%tv}5qSu$-f1WC=tke}w0p{v$lMrhbHH)}MepuJ{q2A3c8MkMQ6x#el5ZS617{zv -QD56wX_m!bRGR6J3bY(r#)|)c`0jIZ4f`+6@&{ybZ!EzE*Y>V&qGVc5(BgyR?QE49`g2BIU+}tCpDSrb~@o%#WxEstLQ141m?`wM=Krw68m@CSX1lI0FDJ2&|&-FGg -!%n+aaO_AY0`-Fr-si0su6%-6nK_OB>E~Nt75ET?46#xmKPP=XE>}ItWozG_sAN$!yzdQC1{Ng+4>kO -XaUkRCSbq5#^As^C}9PxuaK?*3KXdHp3h&*&5T%%#lL-L?6j@iGNug%`g6 -~6HdhMBg?thQ4zNN8kA*9p5tvLq7{i;%E3SBE9rIjS%{tPP*v3gmlvP4 -04RV3rGij&mv*^o=x`u3|r__H#*7hXjBDxj=rnNGxWWXJVD=X5~A;=BuL-ONh5u)Bm#Y}CO@X{HDoP) -`$;W*uOrLodp)V9Z=Sg5dowAg?=7TMZ^B+w+{iT;yB7_Uq<{wTx;Zj}26tdEjRw)&NiK#kh?{t%mj<8 -2;9qI*X$*c$gU@2{T^jri2H&8;=P`I7l)A#}ze1@CxOUMX-rhx?q(O8lCm|Zd>sQE6Lwb|ZR7QB3fN~ -ePj|NewC3Q52Klw~NG>BY=RM8;XcS$)75)9ru7KW20b)53xicOI2(iIH0Z?O%`{kn!E0!+3WEj7CNIRV9Gc+9pos>TVlW|Na5)D5MuRIc_&E)( -#^8rCmCNcbJA1^}$Y~A>y&NvxO-=`F$E4wksdSHMq>&cmT7uSj}}wpuuR -uuKGtGpIV?^+rbCOF?XXnnF?+Qbr^8aE$NWZ%sc={p>M_62VyYY#w;t0(V>T{ylrGhKe}9|SdtF{c6z -H~a_y+NUwB)A?op>MXMFHM$R49jlLxgH~7i*sY1{({;);Vdgq9O$d}eEY&UYC_Ur -+&A)81evyxtDNlS-dXb_u-sizwtJYO+65l5+g{kG+F@8E2Tb7Sk?Czmui}rHc+#mR}r}?`bONoTqmdIge`h1>Kmb4=Oh-Ttmq(xQg!5(n{IM-Xt#8{-eSEg -CXd~AFK*y|PnG=xiA3i@g?kFCMH}G(@v_um>f(Xo!b>pVq!#B!0-9IMt~;tO%vSDdGD)5b7m&sAWNI|&+h+ua2=)@}AlO2%iC{fw2wQsA5%&05y1VG^qWjNu|C#P(bT6a(CAwdtdpX_9>0UwiiUJ -)Ls+hJ+TdtG_2hn)ejX?r7GhncYT72c4JC*s7)S6BK{7!Wf&EEQH?63wThYBa-J8?BDczgW-IwmZ -boZgV58d^2*VA1`cU{%Gk;-Tl{jMk2LU7#hrQ^I%Fqlg{XR1Cq8LE~`&vWj2{tfCTO|wbTy;GQyJW@)NE0b#0?E0}kjg -<{w;Ji4w@F|mQJae6&e+a9zp46G%)^)*80DgM~7vGz+W-H1gmO`fa}ob-DXOTi=7D#a)w!(Ig3+0uuRd8Ku+4LFuVSMTiX~35OD9>SgPpqyn$VR6T{JAj4g}{7|7!(9boO$c#TMgQ(~n$^)BE_KOt@a!2P3Umrs`6SuIIN2<0@sbs`w&s{$-nIYV&cEi|rj5HU`0F3;1-+b5zV1-oUzobU0x}Er%2Cpn% -1$BX1}Lh_HmT&|F?QK3?qcij528e0vslVTgFyZq4jGJPiQ`qi?u%ckS9L57Zx_7`4`EH;IR&g@GtRh74Jjc@8iV#a -OHj77=IiPZuLzzNh!iD8f^tX&M23}4?#uNA$=PntTi|qT!BYtIqVkZb88oxp?4PB(^?cnog9_wLv!j; -shVhh497oQ4lmc(>Me-!Wz5J*1J?qVpm3M<-e^hx!H+n?e@5K3!(|_X_(uU9^hezoV6;>XlpE>u~uW?&*l8 -7%z$TX6X=|sqswsT(a|IM)7$4fp#8;5I*v}%XhO0icDwj5yQJAaN)sv;p@XOvHBbdn=1^2WFl91lR5x -CXCqQ&N)3M9;_^P$ -hG;)t^F^0h8WmR>AdVHmVa2ITIZ~wgY1!)S(Z)k=&j8OFxup#U_%Vk7iaLgW{WQaCK9qUK(QfXOwSjoby88NqTDoQ1N -OnVN_onw5;dS7A9hwra|9k`}$vuO=a5eVqASb5c(=?YgTM$ymPiC6<2UG^@o+{2f(s4bmsRwhp$HZh~ -EJE?K{s`C{o|>!bUV(8`mpO!^(&2@u%HofB(~xVF;&}vXk&eOhGGYC!f~-W1FHMy%rDeS0}QIdobF3a#o}G8YwVr! -ab+v<4UhJ6n71z1khjDG=9D%-Zb=I~*mr2tf_x+8YIw3J+NtF|y`2|$Gb46%9E5qqhbVN=1*=aVftn# -N+5_L#w*oJ$7DXZ=(?Fcx1%(psYk0K1CqAz*ox_JHh?G}o$e%`i?)?I>th|K&15UR85Q&DB3kd6$VBvAPlB@7DQd5&at2XVMaystsqN|EopqE-G~EV1%nj`YNKO;q -ca~wIT;n5WLy&^ULT*EiO9|ZaErFckq_SKyA=@)OD=2i;R5JqhCHm#y3@pJdS#;f!Y?(flJJ`%B0_2m -OEyErnUD0jNWBCL^!+tfU4IW-Tf_Fiz=QT1RMJJTIv|koaBKyAjsoN?2OQ0Xo9p%asgRR`L?IdSBan| -s)I-M8dT(mOanTOp@5-$bxRt=8kH7=iIKzGWiu?=^S8p=e8)A~jcZ(Ro`e-wDxUob*J{!sc2it^3wxVTAZh+{P>E%%T5)Wr!r_OXVh!H -axNgBRT3O=wR4xwA});$MdH?kv@zaH+W(Ly?^brxBm4*ZEP;HaXaH?qIHgkKf*=_2q4A`=}?QT=h{;NM*_qkJtK9 -&l`^`o7lfsK?zjHE~^Ds-|UaRa)+Fed+dgJxq_KCu*g^OVIF1jO$~giUu#Dp+}4>+9-W -f;CEVV0&5^wJrSd`o6j;aQ*0qtc$`sZ9eUS8OY7R5|M^mdFxJ++MPk(DP#;sQv&@ODvet(7M@XjgCQ( -J>RXWh#NmxanA3!si#f(S!I6rbdwUd$z*V_kjTO)h$eKv#hqs_stoSm>F?!$6E$GHfe&hQF{x1txm4F -eOKu2(lOvGICc1}20-3dz7kbK*N!asl2~U6&0^j4yDDH5E(no!mRhcXC^1!v*8Jv);Rv -O;R*W&@ojZUVC|MCkZx0z@ -93hY*cJdEV*9A_C(BojqQnRw_$tYpkjNXmCE+S+p_Hm*I%?f@n9R3?TPi*Z`bz3oSSS<^p|W;^tvtE6 -FotSRP`mDs~ewq9%nV_v|8w@qrpTGy;f1Blr^=nm@C)QlAYIy=V-M-}s(N4KA8*{Vei51u -XtmO%jTwRtYlmNH3Jh4|$Bk(D}z%5&yu*y~^CMZ@XcB!mRAY3h0Cwd9169`bd)rrO`s}pzqb*mG1=YN -`Wm#{j~_{wqnr>t(X6LRVONxKvIw{3R<{k^a|Au)#A?gWbB)^;bRR@$8ycaz--Q$&)z4^s?J{Px!kPo -N$C8x2paxL$|hi573yVt4|QUrmN5TK=x|E7c88AfKv+Cw9Db`-UfAL_!#z5Vj^1!xOLxBMeXEwonH(weR1&$?ya^B4Ky}53UKxm}3gJn+;DGqy`&! -dGV2w#NXYfM`)%X9=r|t1(#|Rv8$P)cs~jA!-5Fb?^P3fV55np5PU$;_!SdtO)!<l=zxX7`DK6(*3q3iXBXAy=Ygr1(+@$uHB*qWj2-w6(_jrwKQ4uqZs%M3CBB~!u -OfwH*Bq3$8x19?mM||9EzRCr0HWJO&>kwsqkxZxMl8eu0VP$Ju3FS7xWji3}=}IQcN)`K5Ym*q$O#>|GemDs&@qRma*+~6WN@v{Q4qrVv#M0?a4mFuxjN8e>9;q -3_dpYB4Na&`lWN!zjRQe^FyV_c*^nfPtU|-L1{vpipWRY?zJ?x~QN?;P(+N|#+ -U#oAQdvG4MKB(9#Eo=oAVgXpTZqhALSU2fAuBq)FDUg?8TO$gkJ}(<*{e1+w4cok;UDz8cmY(OqEXtx -yV%LsleuutMzH^O%pZ1-kH$1gxG?mw=*wlJFODEa+%`c?TSVr>=5>YJ1K9e=pyPdgsq09_jSRF5L1JA_W*t8A>FOO17sYAZ9AU0r@tanyXc-WgTqbY -Rn~VY@D*1Ek)XwlGWPSTPeCKfe0sD~Dq7`9y<4TW9BRKVN$G3H#8ZUn##&7th~!U)G7K+3i`s3x4u4By2fj-I(DwPChYB9gQ{t^q-sjCmqXdKy}GhVq$Mev0 -@TVTI78Vq5=C0>ZFsDqq-tvLfuw2zxe)GD^d480K)JgFN=`x5w7r_D$-hWeHEk2BCIm0pE)+O;)RnyE -e%6${AXH6w7OJLYh#_7}^6SAE&L8*L{GD2Ru}-NRAVO`>kyM%BmDO-886)&U$FE6xq3yC>NO<)XnkJC -NO1diPcBqo>B{|(jB3)4eB_1NhOVv`ud&!S_iSY6W>nMA9vejfSPqQ|+m(McfAJQu%3B|`wJ@N}qvo+ -RUm7QsfEqO_=;O|@VtozwmvQ#AOZ7=U_YmsEn@#ty0gC8@45@kxuncnCOgsacn_g&*sZ9Gu -&dpgBh*F201ryr$_)9ZY5s4Ax@d)*lEl?cQN$9_rh=Un*OXcP&N5LQXbbrV4UVPcwqF!E=JqAu3MCUF -NlK=Jtg_^GGPR%0TXuKu6ghEj^V}`eOU1g&B9u|8dgp`+$7*D1$h!*N(%0?@798yxeio&&6)*YRu(Yu -!?0Z0==Ix0UDs&%)ZLrtu^@qH1N;7yc7X7UdtfhN%UzjdqILzWjqgk#F84bWiZ7nF>lY+BHb5r;s!;$KcqCmR#zcnZ6CRaIr15Nqy2RTU@|t6NotIMzE>`tPaakCF?}Hf=Z}nix!*s>(3h^*e0ummJZ`imG!$(fF}OR -#fd$6jeWBE>fOi&48lHPbjKh6pAX*KhV4x`A(7B0#sD7Ze*zzUBOpG6V970)Kj7eg?b8{oaE3#JtaC? -?S9dz3AC^16b3Tw&qw<8-CQK8rB*^M^{q3s+!<3*@;SZO?x5adnk`P^N}*I37Ia{~Ug{W}2Nqlvilqk -%-jq~IVjW8G{CG$H#%qd7sj}Q@>Rew+OsJH!vP!9#Qd|b_&9khsYZuwb!_k7B@i7CDCVK{Pae-_zAtzBN -c+h^HwQ(rBCoNya**}ltk@Hr7vle=3)^fU>tGkArycJYA+l`@1KC;0t`bXaZoAcEB&bFER;?Aa{B~WW4LI)PQigvKedk -ql=c@L-&uE~mHaCkcxksh(r)$wk#T7UsYOc^aZ!s3T_WN(S*?T@ -HaAcv$a|Eh5_%;(xU{ht?u6TTrw}upqE(PI5_s8>FUg|&h>ebv%=jHLDC7kwmT>n -rWtD$-(`O^cS2A@fkTY52zsRp)ed@+)Hl8D{R6l)Ksh_Pwf{#}-w3Ndq82RdK3+84EN$i*T -ZzS_3}K!}eYTgZZfWickuY?1%uwxTsG@gi>1r*9@u*C4Lprg<=Qmr$xE!V@oIiHz^y28u&QOK5plJ9u -3g-%o6NW1f7nb+w2Y%gmvfkD!wZ3a)0Yf6`fNYmv6J2U1qg6@>L -cyotgH)>+qybXbx2n$Vz38ZS|wi&>-b48)ZW0BxQ;6ja1e3fNSE4_`yyH&WDN5e}3#Se#@yUpOiT=N}pZ{N+!QAxA?H;)@?6egg1g!cR1Q9>PynfdgX9P}`CGPpuC)_t1RSYADrGcY^o@5xzrhm+f -Z^)>h6vfnOK>Y!qLuS_A~I)ghbl@C@Mu9N= -Y}&R{mhgSQKS_-mD9?)^+$KP%%=!3;QqhgmC$?#!H+rzsO5g&q?;QgvP8tm+a*sOaNq)D4$U=aj~hIf~cmWVjPovggy- -W?rRKJ^j%3GZ!dq?kPky7K^F~q*|=XbJUX53AmyLW2vSNWC>z|X9fkUY(5E -%6a@5iMhB(5=HNz==T;dFGB_Cee+%-wK)DHRCVO9IyAo?k)kV8z*@ewQSOLtxY}2RKbIrz9d||z>ng5Mw*8yx!z{fUD-2-TAzt}s% -P#`|GQ#cW$Bu<^a6ts`Zp?-4Z`H$12P3UMdG0x_3)IkM(Yc;11h;jWIC2fxnx?vp~^qqB7U|~|uyJYQ4#Nu)_GgBgj@0no=zJY}${x{ -@CTWPYR|8Sw__HjmCT0FLC-WW}562oww*d0|g-|fSFW&88mz(P}vDsY`pf~PXqv%IQGy?IP5PO{a&zK -Px;PMLGP{XNM`;Vxk`%`x_8EP;&2F}i5N&wP(5dHWA>lrKHF+GPOL3f;7o7V_C)u&n47Sy!9)j}3=IKtX{N!t1vQ*}KDU03F6g2~=PWMuaPEs1TtsMm -ED9W`^2y&E3M=w_p=?V&CV9w=hao(b92<2<<<7sQ)x-U^N5orH}Q=>248FVd -Y#$3uadwNV|@44y>=gJwvhP*H^6S=-lLOQmn_8}IPzLy)i(h*+Pevf19C7dI0uj`|!O7gB_Q!78wad; -7~?QNIrHz+mO-j5N66J1EON0qF;66f~`{t>mNY#`Flp=MFz(oR)f7v_HGQR>P~(B+git -n|rko0|^-+vY9Igib0(VRT@Hj08OsQ+X;yd0Wk;UIoud!cC?Z!3Yv=GGj@&$(#(~#+zUy9@8KLWkLp -;1sNzOt3cRvDcFtQNZY#ngVqS=(W0MlDBoS`{BpbtX8IQ7_(s~!+fN&;el%|>@vt^@-s!ljV5Y7hM;B -qch+VT#5FOsQJex_HqH=;@(ZiXCV1RT|BI65J(R{*e6DT9q%*hD+kThim*S_jF*CeZXeQ< -A%-Cm54pdcmWejE2jsGaUg63KJ1Cok0PG$FS=#x8LW&dW|gGl#}_X}7or?L-omy2A@%X&BDInM8uPiRo=K4H0w>-7lkK7)L%cy^yb{_H79s`id`4aQ^ -T8RYoHM?QnxLq3Dt|0Bl;n$9bSkl%Mi-aubbIzm3(d4Lei{=^~V&0_E^*(ld{-&QtjYggnuNuT6sUfL -SpXH_6O=QZIpslxTvVI^OjM&7_(Y^C1LVqrJ3@;GvuPxqaq7vC&|#Kxij81Xzwm|2=sk670`;cm;L); -8o98|S*1tB7Gb=l)V3$?)NV$>NaE>h|=6eUBJtly8HB)+qEj^L)04y#3%dBfj(RSpV!|Z)>Oeh1T}=e -H#0IO}`&4Uj4qG<>B!|zy0)7Oi%mzow7B+8I?x^5B57{t%r43Zt=MCm9uC9L@x2Yn3n#NsVYp#t^UC0 -z%cW;4$N1qu%Oikn*hA!^93qV6sGNl`}sCF0PAqJdN|th%IQ76Eau8-c^Nm+uc=mgI;}l6fxLK!C6va -0uKx>HxlY5pJTNN|dvg5VA>3QN$NU@*aCf-Hhx>ucCag7x&gnP3OOX9P -bJ+#vAvrg#MX2x1AW1d9kZ6BH60Avj6!6TxMIM%2l4BnTkrPcVYuL4st0nFP56PZF#rc#q%^!Eu702+ -9fS*VC|e1osj2BN$9Dj=(~&gy2PjcL+WuI73iQa0lUUBnTiFNHBunAp$Ew9>E%dw+Idq{83*c%5aI7= -B9EjYHec4!6x?o3KQFM(8LHi>8~Hf&lX`4<-ab>NO?(rMz_lx`Hu -IgdGc!?_tbLn3*a4DfDX*ZX;MGn_10mB!#k)yW$c<_bhTzhoV^*n?{gL?zkf9IZe(N&lwa>$~%j~r;s -0TOrYnfutQ2^VWzY!6cTPqyab9@=_28);HcoG;G^K6Mg5tlSZoOvDNI6!c%*!gKGH>+NDJv84T?7hX&^r0A`Xj5u-Yt%2_lWbmK5#6x(5Lm2q8VbrQd6ZeEuiwk7;vu?yu!|6}tmzF))Vm9L*W46X7q}jyt5Y= --?T3Y5*rOj(Rv^q~OZ+*S`4SX6lGWa&Wqe;_dciz>!Ma#QewZ5l~v2DBdejPe?>U{5g{$09u>mJbK{= -lBSdOy&oZ@-}a0|o}0LI#C~g%2JwG$L}?@Td_ZqeqR788bFEZru0>Crq3)IsT!9DN_^8Nz;;3Qm3b-X -Jls0uw+|pGiS}7^Y9~c=grSyp_!KO*(ug&OXgHFYCoNLZ7T7Gg}B5_lqFINK>b(*pIC{f(#hQ@TB}8b -GYUEyvidS#52yANLx1Wpl5Y(4N+Z~i8hp?uM-oqlh!8dTkEZ@DfJ!@1xOAm3A%u<8cc2e3ik`(NdJeP -b(~#S6dIB|x!YxUpnJ&U66D8U7lpuOUsRu$ogFetE+D-=b0Y>^w5LC|;DO9Ef{}kbqK=D%8!*V#Zs`{ -eUN$IDE)|o;v69l$Wo<_>eCenvL`rAyAEBvzPFU=i8O0gUHLpO#DSOsrnh|-!yv>GXgEQ&i-u3stjG`dUFDm5kfq^nA_dOkgF!B;oew^>!*p_I-T -xn3-8AE|^hMX8}J{X6)gIvoLSIux9ga;u4g#A@;HCz(QtZxb~-MJ~mu;8zupPQjGs_rD?KxBSM=v;2aAVEsR^=mLlO?1stK7FJJX2F&uTJNITcndN_i`zs#aTqEiS9mN`YqG{EB -sP5r$kZS33BR6x|Qt^Wtu7Yp|j{mlf{^06cVqw3OC%`9s^YMbNl!qgv5iWvvl!pt%6^Gs(x-iT}Zo-& -6O0hZ{ptoRezl%>Og8e(uk8q?ga)mF^ECAG*Uzb2QyCWecEtlxQ0kF-~Lr1#PjS?^k+-Q07m6Mk=|glGSi}!VIQz{!(8qhi> -AJvHoKIkx6BWQ0em6E5$}y(?w~{qThjX-BisX+}$GDinODvq}ET++*!<+z?JukG&*P4($eVB3;!A_E2 -i~gULL->@bGX?T)hHtR3!y8_K6Q8f)huKIqv^j6Yc-9?-q%5oPhwCCkN`q(1JV&{^ArH?OL{*Nb~eCp| -ER;+yXxmBy5e__qq7uT)d@Y2g0UwQSlO|QT4&&_YX_4byn+qS>+?tAa=*tu(WVbPxAy&vq`f8gMUA07 -Jmlfy@jetPV)&%gNc_*W;sKKaeJ-<>*r=KHhfe)!Q<@>A*0zx;Z>?80vsFa3V`O8M14u2o#W!T)8&MD -2=)+fq#Ychmpho&UdGF;u(%|A_L(*-s7R9*VLBRnIubSdkl+s-7QLJug!|FIPSPL-qWG>KSJnE -6-b1&oC5TPfAa0zZhaxbY^iW8Ht&*Vyp?)l*|mckIgn)MovjJPqjv5BxPFCg-4teXLv%kHDszaWu`eg -Gs~7G+@yCY85Tt;CQLIA%A6g?#fEVMbX+dUStN`_N8_XwW9QsOxfF|$IF_88tk-+b&dQpVl~qL!!^*)30<0}yOXT1LYeJgQY_Vioj42 -t$v;5KJvX`;BlZY34+uHPe`xWzH~~XPc+mtO--npy(Z&fd}{{5uwI}3}ZqT1xlpw(E -L&XbW??~m=h9>NtVoX3N50u_HD855JDIYr7{^ucgBL`vWU!_LU_50+Bm~zw#-S%m}X282;JnLZMIrf- -YnaiNMt42veHtfN+A><;g@N%*6c}sR46t3Rnjt*h_RZDSrWGxZQ01WQ-`$dPF2fnn%PQ4mSQzd%}g{K -Gn14Ukoz(3mDWAF3k|1*?o-5Es=GYfQ?BsYS;Tl!ic(2adgMk+_lfm>2_-0$(SHx4{oTEat(NNYTJouOH0d~CHSlTP1RdNoZ8Ew20pS(v!U{`jh)Risdc9$8 -O`Zg);agqozE0v8JQ^(u#=8`d)a`h}0Lqq#}+<)dT5Vm#Vs -wK-LMI{eiRTNc82zwi2gf!Vk}kaoQc%Oqa)9rn4OZIm1d4t`o4*YDcRPE*1-F_WhIKv&)AD -G(*ul^Jz8_#*pQC_-Tn(Y)b0Oz=eqshzPE1wj{bG~dv>Yne@Nv&v8#z?b*<`uq+0 -yN_t%~Nq@dc<$Gv;-E$ACm)&F=k|8GN0?&n`r&(*`N39t0qqRZhC!2)lJXSqa}Y_Q%0L=rK -`o5y7Or{rEY)wjJo}wm{~WTKjhV3uFpMcVsAWJyZ@=DOziAaRsE}%vDUg6GX&D;1Z#2}n?Y}CDV`)rNwQ}fS*Vcflt}<_ut>{hvCtr?q<>Wxmylu|oN0-nK{?GV$DKw -YGt3r>9h#Yuotb71wOZ1`X;8H?b|(wT&Q6(@A*V1VvocHe9dZErp(IMUSL~a5kZV+CqAkrlm}Hg_3F$ --z+n^l3wuhY$Q>?(u|%XDV@(`NH;Ta@$g<4Xqlto$$;fkpj>#H4ZPMB%F$vs7)!a{X0W=R`^^sCl3rkaXeSy|r4bYnA; -1sRFqv!|M~5RwYsift|%P#(2=Ya_D5%u{UBrkO3#7IQW#{Ckgx3_>>{E#=|rh=*h(#$=^rgl5_(+)qR -^B*^H@6wuB-#I6|Cdvo1rYueZh68;j|$AT8AHfeSyXpIJ4>^$X0p{Wq3n-e24Xljx!xUN*~P6;dS$%q ->g8qL@PD8rHAQFyLTbi@+IiGmMlw#q)xjdAa5*^g)UewPDybMJ)Nhc{87%`3T9;t8siY?PjgyFO60s4 ->Zy6GqU~D%?Y!dxs<@T11U>@QkC96Wq@-k%p9_RB-GfQh^`po=uf_frM&X7K$W}9i@^?Gh1(Bo40f^X -=Za4>#7|d8bz!j_y_G=JDM;NnXx3~hDW6uSb_%Rg;!2?qCOv=>hGTlWt_eWHGa|Hc!vaROyF)5T!wkR2TVvo!19}aOWSUWs3f!f9tOM+z -%;rOZGsnKSslAo2@kJRpoBQ~kti4ZE8IL+WRTXr%M8)QpLB8i%@$52|T-b6=yBx9Co8EnR`Ewj=t5*a -nmtOSeMUG8y+tt!9R1WO907I7>_@<|+-B-Ki!N2PWKSkve&wQg!-jQL62B4Zm@^N{<0{wnMp;=XG%Di -7bA!(#1KbF*_5e~-TrxBp!K_b>3%h#ySvzu97UnDUN~ZWLb9%6I5`v38Fm8u2L@=IGGF!mJDQuzLAkP -rlce{TitJ?v&%=ZjjUUmEEvk;0_t!-d1++CBKKr@1gR0v>a!&>>eZEm`#vHkVr6*AetbIz(mlWAb_A1fiFQlU8S6+r*}qB{ypJE;37ChaGc-( -!8-&S37#a#CCDO}NHB(AI6)Xee}bL_T?qULS`joQ@FCC7 -mCkP|xPtciwA^vHTz_%{>@?W|9T7>+q?;3V9uKIf_!>qVKym8sY)?6VPDekhCA&kq{s*5J^oLis$OP8 -kF{m;7B=Kp8I*XIA9>tDZaweQHI+NG5*C4N8|@gV{D@mbP*v-Moi3Aaxv#xBu!6L;k-qit|52S&pUKSy -d!jnzl-jer%|9>R8DicV=fk;sh*BT>}D8RgFDiHs0MdjvsDbGc3)JB`-)oJH`e0*PA%>SYH>eai@U1^ -cZ|*DMP$1Cu>-;XXSh6MDp)Y`F_Mf@4l7qv!A8#y2|%c&uhe -YvC8|<7c}faRemr4XCyEQER~&AHDBGjbz?(@3}JC`aV#Yzh1qO2siJao=|7jPSh0e={PN4}-FM$*g@u -Le%P+rVH*VZua?{Nff$60TZ$9ktL%BZ8uz%L9!{YTYKVOmSQ!#7S+_?yFo*$|>%nw~5@BQ?yrX1!n^D6p+kqnJBCz-Lzd6;iX`DbYi^nTXNt`C$?vlc>&p>8DXBtw&q4S@hm(>H@0Z^zB!3*ET7h>;z -k>X6QJ5Sled#^ziU@z`(BXZO!xfSKcgSCQr~Em09>$^~+<;%j;j7=#+hzC*{1;X%K2&k&GSa~NjnNY$ -C_qITrBCmkI}SFzch#Z8L_!kEM}PeF1x?ONazr`aujk+2c=(~i6k-XAOJDKIvpxDq0mOUx$A{Oq+jK~ -T1(5sCA^mwdMHe~%!vB+XV-A&99L_Bi;SY0ueeCY?3gM0LRK6vv%DM0s<&Pv>k~hK&I}*nwZ;`&hP4Z -^?Me-$ivx+u_Ij6L_!NdY>RG=l$S|Epj=Q0g}mcX09K+uMR&wXWHzZIYN?Aen=MM -bfgm>Bl(!w*;C@ny@Fu~%Pxm2KIwMez6+UwpyNojd2|^DL-aHd7zEdAm1i;*qRJ__n0oENA!m-AU6kS -q@cE(r(Ukc9+HzCrr=z_4oK~^pNxXxe1(KOPY7^+}N>WcP9<+`5N8hr$^2h$@$iJKHt%4_k^+WEQhb# -y>%?odv__)&*A)+D_1r%!Nrd-Hor|9?(5x#Gp!7)4p72)%V3bo31wsw02z9Nh5dwdu>vTi!-yo<9gdpPT{kF(&tob~#Uv;LoOHt}Q5LO -wnl)_0h7F>AH*em|w -r<@j`m!B6cCcf`o7ut(oNX=R?1K+JU%#@Xr9rv+b> -l$5Yb=YL|~U*)W9eh7EQmGSsB~Bl;-5G(3nlr{B{&SfZ`9N_)!#}(ke@#_;V=!Vv4_-;{TK47g79ADgHTCd=fsQsVQfXuz~X$Hq*T7F -!euWB*bvz9gGj8_!BAq!xaA+iocEGf2NAh8nI}07q!{8Y#H;XX4{(`CeANo5sWu}kntW_jE{Ph@foWa -U;Y;3ZysR$=y$64MvC8?;t!|zQz-syiocZNuc!ELQ~X^Ne?P^iJeQxO_~$5onLB`{JSZBSBf7@@kdkqsT6-E#a~46S5o|!DE=0TzlY -)U9j^fXt_)94MOB8=M#Xq5nU-gQYF11r==%A26Aws{;hT -qq@gI~LL9f!DmLk2}gM1+M!h6V?RgvEF5+^JIszac}~D=CCUkT?BD&_h^Qy#KujFl2~P_K%DT4UY__< -ikTlf(M1fcR_#-9on^({Uf4GA(0`WVWAWscy;UI?>{iU63NJ@NaY%Qck{dAyLFRN@N3uB*nSA&Q~HsS -5y6r1t(&xHPW}|2vmBsfJjD+VLFCZL_`91lX(9Ow9R1oE3CRd|`ti-0Hfb_!fC%6(0<<+EerOncL*U= -EN$X)UYQyhC4irB=I3#LBWMp_`d`l$IqWN8S-Ra}w(`qq;j;2#q(8M{vK8ko&a;& -w$|gsQ9Rea2d-eg}Wj`dkzZiuG7>XA$y>#BEsC7nuz$m-F@qMX*7+85{5uADl(WDsnS2>fnEWD^|bms -BFHmz5b<))o}r8MJtC|!|M*Y@85z{j!`lS^&|qTMNLJ~O@*xH@HE7&uWPE5 -;a1iktW9sy!Yp8GIzEL4mju9$vq#q`{$^C)A(4dH_-V*;%`eDR~5#hc1Rr6M*Pel_E(yy8~i>!J@RrB -V&FsIy*8+?iciNe1}p3A8LYLw-2S#ULZu5LL+k>^H_9xddN`Q{;R+2iHe1KFaKaJIq{%C;;FXPcj$&m -K5HG6nT>L%-xK_KYMm%%=O(Pe09`d+s^5di83ycI{fWe*JnOE4=;o+d>|E@4fegtnhi^%j`LlH#U>3u -y^lX_Q@xo2-)E5neW({GiTV@vu9apX({{p=bzbc7tRaW;P>BuXVMRyVxjxfX(2?*m8c7y~)qf_+6%oPXl5!&FHgeuwB-L;`gTbCW;?P@h4F -H85I99iocrTzeVv6QvAws?mu$Mf8><^t#V3BxesXBvZYwMY9X|sEt_}f-n~0aA-6QPY}veJ+xy!1Hfn -Sa@mY&@ojY{s)S-K0U&Fl(>Ahv!_MJLW*v7tXy8CzcXRX@Z*SUM^`rR8-fJO})-qWgWhtAy_)bD(c>| -iu@zOTDp@6(y$+zef@g%{HcAl?QplY75P$>*7Q#K`?qS^sl9*q?*90Ii1NSB-`~&QzpcNZuN7TbLv7nuTB*x1FxDSR -IIRq|DeE<=FbI#05^W^?5ROZDNCYv~+0Wj_rEKZ&Qh}$O>wm@dSC%S(FSbxLYtyC;3Kf9Q;yTu=SC4u -YVStrNN|=(Mo~DPGg%{#z+;H{{8!%8jZ%kfB*j7Wty7H>0nC=%HhwHAL<$d^Bo;Kc5F{~lvShKjN5#|gbBgD>7wVmzx -?vc$7vqTckkZKfBf-BPU9*6;)^e!pyJKu6bBkSZAdBXYs#y@ggT#W_kPe?R!xfF8%4JpLk(mp}U+9A3n^#`syozC)J -O@9nYsuo#J1A{k3=pO$w0ABksg=mo8kmP)>YzjnZ`e@y8$hx8Hud`1$9bzx)07-+xDWT}3#e^9gEiy$ -FY;i2G;pCwU5axdHeq02&lPohShO6*`n>1*+4c0O9Ngs&hA}-2s0E|Kj4}B~*{?h$r$u!=62R1peTU6 -DLlHIyim$w0H-OXcN?i#r@c^V*=1NP#?IX-q3as=cA8468NJIsr_@*!;Kp^xcZ{^Yvf)5e`>?`{~7!* -U%t#~7!v&7r%#`b;9~&r|M=sN`TOs`&#BHi$;_e+qx?}H2M-<;0Nf88I3U`}@#DwEGiX2`0DeO|K^+0 -NZNGAEKEZkLC!F^@$a(hiET1SbJM4s2OZ}8fkT`J9v~X_a(*At&~Yc{?c -U>j=}FEjDk@g}8T_fQcLVTOK&cA_{z^MRI{?4LearcfsOQLd;9@D+GNp#yCkdUl}eo;}-9f1U^Y!6((}0N;bJt -J9&-0$v9neRpUJe|c7azRos)Kc78N(12@F3FqTw8lu1Bd^q7W^ea_+1`Tq1?uI^z`qU28C$%LS+Pow6 -t#mD@3IBHO+PV3k#(0eLH`NE)FUA9i#fj+G*I~)-=+3{KqT`?P54uPFZiF@+EU0vXmbi33N4@k<3Vk_1^m%ZZe0 -+<-*_a5ze+T0AR5+MCH%9`bN)~%(ct1d?wr(~(I-WIUD=*NgVLTsgVLVSCv|>bBy*)Y{%B_yUr5e!18 -7j7Ivq8&5rr09+jIKzx90ZaZ#*2tUztrb%pAafFZ+pq`G-V9Jkc=WN1{R1o+IV<9CA$Rllputjn7J-) -QMzlb|{1~fqCQD}i1##%)#gCE9Q$PBpN%k9gz&F{({R%>OujuSKtlYfV)Bq`hN8HnAf1+#8`!~4cD% -PefYaX!`Auz_~yAmd=t@7y*)ogebVyu5WZykAigLil-s9;@|?sl?zBC~zy0!vpg}ETbdzO_+VH3TUhq -HRvlMs(FWi9>@J4$8-b$UIk5|jb7=J+{_`i73K)#b`c!y}%GLLAWwt)5w8eWuXSSi!63^b$;;*TX04M -|~qeqy+w0T=qDekvKG*9SH8Kl%)eVUQyL8#iv`uf6sfhg_t9x=!k9C)clE=SQAT;6?Ta_>Kic1GR;>i -H3j5?HPU2TH8Rr+A@%@$O`69W|;WnX(8N6G(1W)EF>D{5e>Mi%NUc7)!hF8f8qtf|HRjMpykm=ALW}i -Z4&g{4jl?Di0eA~Hs6!?052pO-X|JFdnOvtCn@cD4fRQ@EW!MlEE9i%Xjn=#EG8QAiH{bT#lcOYPYO} -V7;l%>-2VfAh5v(sf;s{R;J0YeA~y}y>8OjA>(?vz>7r-(2TMZvZhIg8zTBSQQnlyxG7ZnkH2j13XzB -D2?nsenz$Ii18lQ&~to~7qzaO!iuNJ6t8h@9M8Z|01BO~KO;EMK$HZXtwd_jYnziw40xT8%~pJUZ@eY -y7yw~T@ITp+jSYFC}|5Aa9b4;?xb^}t_wi{y@qELE4IJZgc6K(mTCIG^k|m;DfAh^ZqThimR1+=08)F0dD#${RM=>A3h4y^- -B^$5!gXSCSX1d$6B4ezS+w(GN3%A05$BrEal6A%?_;>BvwRcidQbuB8Vkz~bq8?s+@kKsziIHAyiISgn(e+oXtScp9KI>Y#>!K-*9QXi%U!EdcP8k~aF*k5^COJMv95K1(tN#^=}Oh4SrBOyggFw2fc>{r6*3-?y!QSg~RS&&$iZ -xP19?zHs5f-yeMNL7tYDCd!@Wm4cT*1KI`X1a6?CIxWyaU>pYDV~j>yfj$EBNVq{pLfwIu8ZILL>bEG -PKdb*iWNN!>va+(id*qQvZUE1?xHti5(+Umu-FF|KHEWir2aFktZbzX5_yT`L=Zm=k?r0BaBWMrR+dI -Z=_1pvVXZ9!cZ)jWKf8wRJ3l=Q+4DB>BGLp}oJ6F^LXaN3$1`Xol#*Gv1r~}ZT0BBI=y_kzZz6Rd|Pu -#&npiRwNkf{)!`jUV6`T6zUvSrKTm_z&({K1<5@DlXRa06b@IooVD(SAciL%GRh;@!G+6ZHUp#Hmh4O -}wSF4do6#LVp0hLVt|9Q}i2z6PDXK?w5HuttB=F(GhYQ|X -zka>IA7za)$20IoJ3#*fcgUvTAIREh2WSIm6G#_*FyVfK(#dPyyt#?${l&d|_qv$0=Hq?4_#7V-f#ylsBg4c;!`0@q^GBgzLna#7~jy>fWH+!L_0vcM4f<7Pz -UIf)$$OYkuK^8^?~u6=*1U?=r=uY6L&ZMYF<_Iu$s4l8|VTLp)EZ2*khdfEHO^2FW{yC;-H^FUxW+%g -ESJtmT5yMsed5H4{F!H-5&W$#cLfj*yaZmyJH`OuuB?xcT)X;Tz+K?4p8wL -=vlM)ZF$i=h`hN5u=<6^Zsp&x3ZriqvKl|*nf}fQ(3;^AVZXR+I-oZ1<`T_NsFKe~he+73p{_1g2EyJ -i~o4V=*ux8B~5g&9RJZJ;H;4So>phdx*uGxRTnLa&Qn>xL*2j)^`NZDq0 -Z13VJ!h`P@o04Qyzb%pQ#gnwf;w$OVw2;knbV?;2rC70Pq&>`}XY<{VvJ??G^kE{Lv1GAJ_klxC{K%` -cLX7-1;BTfUy(u3;I9s0mdVYohW0>IZ^hg2SvY&dcZsSeDt;G$7oI=)-{OczZ-XfKX|t;KCg}6)qN5C -6}<(@88m{|iH~lOjNqcW!noSW~ -$o?;|)!aJkxi5${-0sjd&K?LuD7N%jq(F+b95Hjg5CKaBc(Y{SO3GsxV{n2Jx4_BZ96&pgBV&@ZGlHt -2$}rf`2T=Mz8S{EOcNE_LAmT3dN~dOkpNyBXA`%h8{a%=tU@wpRfNV~y=r`C|@1bI=T$FQh8-d(3l@FXU*Hi8AMb+@!v+UiRRR(t01(%C?l%q`Ihbov+3ZB7g -PXhw6JCP$n3^emQr7zif{cdd#J=4sgmZoX7tpt((T2k=A{c{R3)##QG4{8T-@y^Qt`A24f1%UlT~qja -Bc%K>b4o1}+$X-d~w6bYRd2Lnp7~519OuwC;)ZHo=d_rL{J!@qiz(MuoLbtP_s^NJKrLb279>+iq?*JgQr -V%tgm2gLacGg`OixnEbQ7ps@ -6YbGKa&Fuxiz+ShPjV_aUEyZs3A4!2Q#8DPr9a>s8RJz9#FoUy#=q&?c}xg0;e2bC|mfaH;!ftlg^lA -8qU5hab+M{y$Y&AHci-b32p?`W}?UCD&K{!zZG}Isx?4n`Qm_dR3diI+IggC(Ds>z$N&R@|{R<@=DeA -uguTT4k7ca*ICqScPOV@tr;EL^G~tHg0;Fl!ePF=)~LE}>i>|x)9Flj{`u!)u{H#G9C#@6YGvOb@IYC -hKY|}Ftlz%zaAljQi62$GR%8DU8GG*Bxfzc=_EdjS-Fd~wcT{?=1jy!7lz& -TEl>1`Zq;Xfm1RfR6d|=VwltGG%{2KmeaUeY(&CFI~D+=q{AG56T>Ol)tjK5#>>ROvZ&YDcq;TTXo8R -UAuN2OYL6F12NWPT?T7QBxmsn6DA0{YtuDXuN!3?SN2v?^4RxW_Xqw|{>Yo;kDsuX2)%JcM1;`40*4t -hW{7e}f1s?9C_JF(kQIKQaiStEEo~a{ayH3G_^=yu{#(td+Mukc?3X1cC-1`=4|Mcn$ByNw3#_lvxa? -jpK)EY?sO%9@?le~YLFM@frS$^M&wpXkCmXlA+9*1HqygCu?AWoF{$$=Ff8;}bjp+Yt!b6dP-+c2;zIyd)p({q;2%VF%ruY~07WpF|W&8y -%fnG%hN83}@C4mEY3~LUD+r2SMzq$e>*x*^fT!DP|uq;ZwCMULS^A#lK$kcUij9;_b&q4*RA -@uTCa*WxxuG2RldCi-0GWM^|!n3cua!o_E-MIce}<~@ucyvO>KU}kD)KT@WPfCUwrX0^-;fW*s$RrFT -M0qm40W_rcLK5jm%eHeO0(q7~Q&c>mt^yS+nc)*IyU)sf=N$XKK@5sN-Wjt*EF7de&={#wp^zOK69f8 --rippgBm)*U~v^Wx<4B -q&e{R-)RJz3G+wHUols}TqS_!N-GI3thHiJ4&1^2$oG}`5kkh -fNOQ2~E=g%%E{?eu=6;y>Vcyw?=ADpXAX5Qv^jo+vhk?BK_ER%N8tSX`nxxZ#9szSUlppE|W00~3_5D -Y~g}eoM53(L)O~|^KZ){rS5NTk}F_iE?{f!?#UaWJY4?{Ve+Pju-%N-!*laSpZw`1ObxzjxJ5RpgBcb -spea(V8#=Y%|nJtA0FLtTPjs>|X>iZ%C`b%o|r@Br --=M7DfJKDLthU*MO}^_JzA70`f1eVw|idXZ!H`m_J6LPJ&b?&-ph!;Rf)fA*DfKeDf@BIZ$suneV{*8 -OMtqiOVP{Mf2V1T=Zc{8KYS6F+3#Wf8q5{oz3Tk~MBGYrcCu(qaUuu6m?f~7T2Iiy -k8S@V)Z8ikcLZ`MB{JKLN-C2fvzc6wSy_JDRaOGdx!smbQ_gzT>ADN`+(*_lb!u2VD9`z2(jcbnOxoi -RNjBPGe4ZH+ZsvQsiM2DIzZEuh`NhV_lc{#J`ETbw|0o2dm#@hE1td8*BlVx1$ulZ(YX!$!H76QeCDG -gH#c)6Cg!PqlZrI0TLm8E&3wPBW(AcR;&@?1+q+nbXadc1BxD$W$DqFrZyhLRz-D-N63;ue~dc&a$|| -AF}1JNQATrsK>Affl@N>Z13EedG90=*$faZ*Z{FaKukrzQzKH0N-V`_QKCde8zI;fkpcojKn2SZH6n{ -*!7X4=!6>VgC1oj{FWUCB=lHLGdQR@2_nRNz%$+;WeV%#Gyys5(5B&MxgQx%S=r;X7e6{KSnzV1*^nb -<^b24)>v$6&c8{g0;h|E?Vu;X0pZZAc~=O=ghC$Qtqn*-MrNZD@Bop59Go(xtSDzC|z4E7;Xcvi -@uoo5mhvmF#V{ogHJ%c`A>1HXqHW@dx=+yqquQtNCXB7XOGJ;)l5tH;H0#Sey~bGLlcrO8Kt5AX|p*! -meQy{w#bnToJwzHdj&=t7lXn7z%g53^)sG_3L_v9%zP}31+G(wGb6VQ=t(G>s}cgbt?*=_>jJ`#oF24z -Z)`9ET#Na)EqPzAtOT_NucQt8P>rN)s^fAh0nj6f6=225-m -Ya2En>l8#wWIB1yU(7p{iD^<`_TZr32(!D@kx9RU%*#!Hy*>YcoAE^AS#wYS -Qyp`xJn3yE)78}GC@sZdk4tms_6b<5%XerzKnRb?4WgjV}kr{G;93pe%NI6F4%c=6W@^^BcoG&ZnALV -knTD~f4T*pfCFj+(dWNuN$M9 -%6hR3HiC_2<9#MR$39{Gd<^G`^DT!OZyn^|wZHdCS=*bhI)Z?VAL6VHeISWNlH5HfP;AB%1w>$V@DKgECw4tpud*%CO;(s5d=u&Ib$064fzAvNRE@_U@d -)|Rj>}83&!vT{3ZShujacv1N0Ij#gn33tnq8wL58wpm=aD>Gt_FeL0wb{&=I;rKRBi@>DH#b>1a~SER -WO0W~b?5ds<<&9b@x-F1}=|>=wJt?za1F>!?H2C91|O_p;mK4!FO@=QcCeSmU%6Ng=spIvL8Q`pntIj -_pJMq+vs+E -H&SUVme4G|Zpl6xOM}|rRB+yBZUSvb6DiQK^nN;vme4u0l$O!?w47GZZ|DhniZ*x_9mgj7XwPM3Y(6V -z8`)Q^vuDsAJk4hV@!L$rEuZc4p_G^L`FyK5Ct|Xt>?Gr!cayZy^Qp2*zAjJ8bFx|3Dr_Hi3{%5m&!n -Ycit438g=&DRQm?CO^?^F0&Z`(C!&JBj?t^(y1)Je*_z-I0D4d4#&{DV6Khjs~Yjr;j8udVZqt4UM=v -5y1!#xw`+0}Nvt+wZFr|5;Kndh)-T;uk|<6RMp#ScU!sSF;V!`OrDDYloLW>5NcKf)(^B&`&O#0jxf4 -h<)TPlTsEKQVQKxz2tN{TQ#q@o_F(8Ed@FdH`ANG5#8TgKqI!vyJYg!&x4?ht2crca|0NgFHcW6aB?) -Vud&>7RhBY$E(J@Fiy|V3-pW8;do!08fz8DdXis~r^q@|LEDNBqLWA#SBh&ychO52F-(jVv&5gpZt;z -1BX9A{u|U2izmiGeH69CN!U4;n-rx+>0T -2KMUm&uVy`}x9w+fa$nit#UZfv+gjA6h!H(c4ORj!BY>$tNn%VoO}E-$_wC%!8@ata%;#4T|(uHMD>s -PXtFkTf!gOdtiMge)O7q@E-MNdXCLkn6{qA5;dLg1R6^Q)vdxqxrPR>wbmjoH`ow{GGw_*_|ww*esS5 -{~Cb!-c%a&1p*utSjd1Z7zEjn10%fZ+2>Li__uhOZyhfdRdHPKuvZFPpu(t~ui&e0=uuE%Y@o}d -f#o%$|asHf{9JyXxpCA!|{bb{xVG?Q&|O`gg3dx`?j=5^7RQGIkIO2BrQ=yww-con8%4@~nKuFzrzX5 -k>r#vB}hxp)^A;&d#+nK%nea1NGY8UFYCN|QBNlQmhBHQE1z{R2=-0|XQR000O8B@~!Wwgsenv%&xX0 -FVIy8vp)xduG7+fZEII;tF3jZwY4OmVnQGbi-bLZN)(qnKG1-WOxWJ -`VX@!u|35xt-n;v~=bn4Ed+vS3_pTPqf*@Gn&oBg`Uf}<{!vFrS3;qUP^9Im(5)G@KV ->3%Eun6eBcpR`2&wW`k3N+aDl5*ebn{vqb}c!yIqewHh;n7tgLi*ypA^?Tzw{LKKEAQ@5$ndwnWM@whmA-mCCZwn>LBIX{m}5avy;od1CGfFQhZBd=4)hriFx&*z2 -zlX*6w1_DAZba*H{N186o*D!er&&b9IV-+&7GZ*FaPOe;9Sq|?ECIB1ZE_mL2seB6-KL#1Sh{OOZHiq -Xe$~X1UVa1|rLc3&L8Q55uwgkRWVr+PYN^m$_|nSaI9$k+mZ(V!a{{+ -99W8axCv)khBFOQ_qO&+XJMHzA^}#ZIwd}N;a_?*I~X7C66f}`t}Em#y}2a_7$Ab+hwA-^JUT`lQL*u -+vu9x#M-fAJ5D*g!tI(R&6H+Iv!#1vas=A-21zs+v3j7B(AUqWLe-JtTz}r@!SI4yIy6HNB(gQs0BJ7 -BB0k?p+s_$>Odt=8F(q#&eR&i@sW_MZY$SgPmUl^!^=BYk$dE+&j6bh|?4v73;TW*k3b#oj`=ojcz#~ -Am(JO|rr%c)@Wp#JpK*vHqI3>I$A$}Vg;X -XTOVZ*eSrt^Rx@Z#6N-eK<_7gTWG78*^T3RnXcUk+K}4*zv}#qKH~BuL?bkla5uPDuPqpo@7s^V$r@*9UPz -{hiX<)oipKGC-qb-2fKY!pMr@_|HLvl`^P$g}Vf^scDRs=qUiwh$F2R;CAzA!>BIq5_0=jm#D^Y0Cnm%3sU}(9RfW#|N{x5HYnB;Nc5rr^_bD>N~(OY@Xo=$6rge&Cuyli4fv?i -QyQ}>zvO!zOC0VAQ9r5_5(3b;^5*qp}hxbEE08@d<~^$$FQXqAfve2F0+hAZbS -0J+v1g{EQn%?j<7aq5*7nr9r(bhd}F9_-Rxn4G9dYf -i!L^<{KJ$DtC;cqL?n9$>#2Ob799jKIRW2r*(^D?MXpk(pSVSZA()0epeWzC;esVFU-r$zs4j(t^wss -q0*z2e5)mVYU~-WG?}xy4=NCDlT+0Tj=Vjq{Ohqj41i?KA@rF0LB#s`HD3%Do9t-WusB{v{rtjn}MWZ1tDDEmL4__^kpdRtG$BJw4BpH(nR*Ijh+<*AK4CzWn!GXeX_St$~e`HoR -(q2L)~nu=dUP{L1ricq?+$8Q4n{@UOH7|ph#!)4|u533hmbMd<0*1b4lfLs6ZdcK{r@T%rv5N8UpT1C -~+At@p-(&iIaULItN}{0;vI@#P(o#zS~Pv&m>^>QFk0>6g&QplPJX~ZZCsJH>4lw=J0qPQt}!CTAKl4 -U4Wd8l%!M~e+yQz+_NJXkua8p&q7!>+Jfdr9ur_W`o};p5Gk{z!Hm#xDU1TNBsvk3#9wZNw&?_DE(n0 -m4+2%n4MwuCpFw14yI>GVsyH{MFEReQoqB;jY(;toe2xw|%LB=O6&2#x8YVBxo~)lcO@cZ|Zfvwy^fV -fVn(|$f+}LK1N+8YklQ|Ql5F}*awSLmcC0u{rQHgAlLv7+O8vwAw={IA6{tLrU*m??H^BSU{L<%g=PL -@ac2m&zESMkt?)H0gWL%^XDTryeoHCBfcIpYVAbFw;){yJGL04OsqPq^r47pPOK^BVNAAXfWfL37z~h -Z8fz5T?ymd~HD*P>ORo4!dy_gH72G@N}TlE1Io(;+%S!)DzGa8_$QH##VFivX7sjA9 -Z4U_P9oqbz^r-@U7m@)&XRX3pQ5Y;^Sy(ff;kKVQn>sDkOrs0J635!u+Lcq@Q+dn!B~O0#~wST_(!ii>^+Pz1up0%BbUJ&aI|vo|c2j-{+vYAettv92kn(U%X -B5RfOBrCjY#2$Qp1R0WO|M_IB0WFC-QrLrczrt<({cLvG+0_!TE`sy-(f%0U0{Gn4`0BF(l;Wet -Ix2C#|=0*$OWHhuUP(-wWve_LU|!Q!c9Kfxt2bJ6e4$yczh`g76|)&p{@T`EXh6Z^xJ}#O|vLtU0-Wg -#&S6_vSIOo~6G|pB#llMyfy`OTNmaSszSyK`wf4G7@D>)To(y&DClk`_@gONoeA0f>`rQOv1ZExg3>N -j|MT_>S+>#O>%kbI^^qNs{^u7;U+|CYxGv8fvN6D3E=mZaCU44Bp$wzC2ox;rqz!`YW6sj^Y4My_vAkx1v5K -=t*D{lcH(1uN8=yOX8ieny%dQmH{Rm3sZ0^^mp6CS~iq5?m*I{EW -RQCc@hs|b*>nfchv>ly_iP)eq;VIr0uBXiWK?=-GBP;>+M4+dGDXfi6TfMWGkccWOsD;1}=fIzuFNar -pgW&}rV_I*)uH|h4{Saiq?qZ}>$K%{(7~SUV<1Rmd_vm9V7xXW;ATw^ROa(zHPd^YKeu2nCVcpG?K*# -`AzYaAjA98w>0bF!26bP1g0&d+(pTsJ!;#EHCL{=09x+|a{jKnL85wA2PUKPkkm|UNyb^>n($rKQ4Yr -u12=@4w0UV~MkfE%3yXcTIA`XSUWr*_Ic$7C&*Qdv432&i4I?nQIJvTNmtB+8z~W$AK#m%;wQ{B?Fw3 -l1lz6Xm^JkR+8WThg{}g#|E#?mdk%RScPv*dl!VF-}X1T{oj-6f#sheRFtXu|}^!Oa@5AK>z@WLt#G3 -J1YPRnT3o93=SfP--~47r&G`bpl8wr!;?UfBQv_H3$QKKN>_qDfs#`(Owl%a8pUD)Ge}?t3CtjY8H_B -jqX}jXx4GHk=7?UjNO1PiPTz%Eko&s02u8mG8LMgqXtb9iFjGx^P&M37m8!$l -h|M`^2qFXmpXudu}Gyzzhw9dDdEuK+lPwr}gnGW$m1y*g^lw+le+W_buGm1{wd-FJo-kF9YPGfcVy-o -@vfZW*pI#R3Dk))>EamXo&YgcjtkYE7p`kay*x`4w;g2f3SR+%^&JkO2k@J`2(JBeB#uTe)3_^(HTox34AT9iG2o$<3;h5V7YxJm_2Zz -&Zt#=iQqM6R2<|2yIT`5b^5q=Y)A7~wwO^ce9I8i*ehg=I1T^W7HwXF{$YQ$OXH3&#hO!8#at@6?ZXg -O#uGrL>_0?zYdU==tv0l$xKT?W?JqHhUdAs)E*$m7#%tlB%dO(%tK_k53vGgM;#|4A4w0A4S751P -1yG3Lz5Wv?;)^quffIjDX0~z8Eyv2hs7Y%qeXNpz2huj(~#pHGzF0sJ%yv37dfqr@=HmO%m;CX3E#~A -2D%KarDC+=ZIHFi2K5?DkjPKUekCvl*%l0YVH~pSZd?t>!_ef`4b>-f4kvwbNV2bK@Cw)&J;a%PQs)R -p=DX+7%dr35)0|#0^kac*N;k@U#;($0=adO@c{}48z1CpFy8Q-|pnW!0UbM3`U>@2E?C_Ccz@Z1h%lu -(zx(8Ly`Wj^Fo|^xRIst1LiM2RDPyk^+&aIJC2h5ob-BNy)GK79OIN8_x;8pw3fCYOMv!%#Lxr)hFW( -i{kuI)4rFc5?vvJYS@20+=t$m2-DnvrAUI!0l+0$^!lJhdLTJ;k~M6`ocVl@otGl1vCK1bh$(zO -j|(*vTfiHWF})+yrb+!bfhPI^_}km~FlpYBB_oqihxp0Xj|U1`zEZJ@S+cJ7NzHPP -*N<2;2LmhU8YJ9{?RAiJ8Lv(!eKqhsNncmP$N$ukM$+nh!A?hR&T3bI}3O;V(5Kt$>G*=$vSK%gh-=~ -emZYKpN*23gKyt~>^KGKy@9f;cSH>|B0~*4PuhjNS`Nr+b4*ticUp?4g>LcQpEE2;@9vFD6Hd$qDmQw -m{=KtE7D~b~>?i6)!qkDs}s;(AtW`C{pME7=@=<9nVy_?XtNw(TNt;iN?xfJw;C3NY#sQgJdt-CidLL -C}Qnipg&An2CguuyU1x%GB7iU2_&YN$y08S*;Za>5^jgqS<4m$>doni_-;7QLWf2>pckc#Sus`>=ZAK -rm$rm%(T@N)=o4ac!cs*xVfsjV{YfNNux`?zXPi2rxtrSp;?n7m~P+ -_6}6k(wj#$Cd9GGgQvf4M2*H{zOVOq)@W?;A5`nQT@@`-|0?iBb+%e??^`>kOp+z(-g(tl+n`*AD0f*5f*^uw#9 -Y7aOCy^B70EWV;|FcK^JD~Qtf_FK{McG!+-eeu0$JGXwh-7pkO-a$QIF1I?`*=E&Fh?C8Y)%oZ`qaI$ -Hfrj(~*{OEq9n|Vkyc_uVfPxod0vddqph_Cy171v*nQnGuAd1s50~$$(rNec-P7pfD2{Gr(=AsYsbz-Std9rdX5HKm*yc*>5Hy4M+@;Lo -F%!*PxJA6SUJ$q~7}_im6iIIJx$~K^8uTq0lXCIRi*FNwsnibU^?*zoM11$58~Gpi^&tVVsb5!ECKRFesNAuG5It|zLrV!)e13m6lqWSkK{mjdTVjG2*liG&rPCMjpW-5@ -Goo0Bt@~Hr%QbHRme(;&fvTDdnQm=1hM89_y)4q2&A!~;ReW_fVstJN8TTXw5OHol|uQ_M>^GsvR1g^ -YP2woff28TH>%vrH@wzy;B7M;e}-r>-6FC5c2?JR`m_ySVQR_UmSA}?1L;JJm>4kc3nEe67T;-d1Dxn -HkR4Pit;vofsY5}iz`%W(=s)4Tm`JX?qyD_3#W^jnx)e{|&Vu2O-ylb3*oXvUYp6^kCU`uaX@L6CX!i -_X>eRmgRm9vtf-QESi>YLBOQvr2kto7VCZBk2S~^QMn&igA7TJ7=6oCTVRawBHw)9$m=%`}#d2*C%@x -`;~j51O42EbDn9$f1AW?thX}&*mAP52Sp`YyalTSc0zB#$6>ruMJIx~m87JER+)nb*(crCU}8BQmqCW-JmE0gDo -QqXb43`;3XBIl%xF5ULQ02AsiDOjIG+WD5NSknZtpmNomK&n~Ss`cLe%oEBFrJU_z%?@lTnxRZH+LT+ -gs8hK@i>50hv|fw)oFB@B{wAQV-L7r7M_<9>>%L8kBKCQ^TR>ey4AZuIqpMi14t)hgr>Ku>U!BvwJfm -$-5!Zc_rZ0ht)CZvwDZ|jqwdhP`h87*DOo1k^!nTKNy{TeoB;ZI-ivSBzy%Aa&s2BKQwsZWXRb1CSP| -v|oHVb_-P|uF%%!HhxE{f~E%3Nxd$X?w75&gEC#gGN6^`oIOMobNM*-Ll(m-Wx|36au`;fVgG1fSOv{pg@!i -4!w!EFxv>Gn*(E5QEN3#wCGa~gTju5+j7&GtzfC}4%s^wGr|^&YpuI+pVE@Z|fb2dx5$)Dfx&);{2Cb -so>(ta)Jzl3!1v3_mOgpQ^?91$t8Fsqd&CNFdWMg;SfCb6W;~?o)Mp0PH9zPK+?3VAa4m9DlL()D-(y -cOLo6!<|0tUIZ6qm(M*#2BA^CPo3YAWfuk6etiVIrPM;n}jtQe2oYU(Hd#rbkL>jt|? -XzJ4&W}zh|@`l@vw%F<;U2KcgT8kcG=cwBU{{s6Zg1^%@|&OaN(5o9|vCASNiFFV;VgEe^bjldUC -k#BY})#dhxIgUs7-Ji$it3Tnb^w>`iN8}z_G`Of4`aR(rR8}Sh|5{A+J5}nb|LlOcLvBqK)+JkNvF!S -F+Nqw|TLN@GgIK*pCgkEJc%R(^3C4exB9QIckj{R$p0h5^FXjvn$0mz2qoi%KB>>)$V)J_{9AZ?*urg -TJb@N(W(`e`Rxcz^Fk=m1#;KD0C!Npjg-Zoity$>+M^z^$c-Y@)x%jTgtC{}Ycx3;{t%HYVJ<=90ceY -%`ri0YQE>&;;<_A3%}zILJq9P$S%uuxW2Ya9tKektP_P3EZ#!LUozVvrN$Yj=8ViZ!pUiTQHLKW()~@fb8%^yf#m|l4CRk%u -=hcu!%LSLvuHCUt?~HhU1^_FcGpblY3}hX*hlbF;h~Pj)W_OQS}Cj2Y8upC+H)^+<6IKtIpv(a!N?z$FwdhqvV%Fz -Qn%Tp45%7lU*$_btPg}>iej%C;F4DPY=>*B5mv&|X*sPXP@+Jf|tC-@EAF)0v$p;cfCXa4= -}qzY87O<+t?JAF=_&|>|Sjcb^Oq -Zarb-%`B0|CXZe*G`{R2e()kCv(n5&bV7UeMTLMT)@?0Es3WQuSI`1xi1O*)m~ziFgF|TeGHb)_&y`w -<+N5GkFOTQCUTqxP^CIZV(6KLwmH)o!-x(`L5e&n8{KHP$V3m2P11YVU_riEb2)DDnYRYaM}U6kYQ5I -VXthDlf=pjyhNNmE%HDgJlCa%y{Ov8i{=O8rsNf7Z$}cr36U8<8;u_iH>0Rc?*$#EylnouKO1A{ey8}5})sxV%lzgYUOOD(&X6-qspvqND&;$sYx93#Qmz)) -3=-E!CQtja5wO6o%a&G|CG&2{X2RHF^Hxv$<417&BY%XtJ)kw%ip?Jda*n9)0^F*<#i3zOLE-z>0y@# -RSxSbnT^;!@AKJToXz%i&y^BK&=IjMzVpJK|Cf1UB&=)P&_K&*^2AG1C6z;3tfh}`^U^_O -$-645xT7zFi$3KTv?A40Dy4PiI%Y1`|)L8Fk+qgu3?}or=7B{bjanK#X8?~ -dxaFPkrxI`Koa%O$UaQ3K82{UatLHuGKD8@S3>4wK8buc{e=JQH(NftqBr=%2u -1UVH+3ZNnjD%{!48(vvtb;p`bK(F}c-hQnOvXfZ>*9N>`Fg&99m(4C3i0eR_&ZWJ?6`qQm>0K9L}pYy --knL#Gf3SYq!bL!Bws2|b+D5_Y0Hj)!2=9DzCsmn0Qq}p!cf}NRB(`wiGLFf6w-2TCcR4Ub{vX$gOtA -kun(xqg`#E$!qkOPFnxND!u@;q<#+MkWyX7lS<-p;vJ%~k$MODcPV~=bs-4FWweeyfyXuK7Wj{9hgdEBG9Ue*YG%AnCL`!u3 -0WDup%Va`$@7t7NT7jSrqD%MS;v!fBJzR#>5a;{Rli0hK82L18Y$_z?V?=cni7Oq -z^UDzR0iy;v+v&;OEUv`FgJ1F>RznZ)_fn?dS?iG@0V^J{FERW6!h#=u93sAz& -6v#fat}LI5q%*Hz6QtH=}QL#QF~4X3*0PYwu=uGOmg3P;teD*GoTU6WNiFW&Q=kNO2}*nSu0umi__;^ -_;bAzi8D^6lfx7Q%0)>%DHql^F-<386F_!gn4tfS>!z??N!H^hQN1&iEW?ol`m~lc -A0n7@XY|*D`*hei>YZXPg4X?wC<;}-gsR~KcA-TY&5i(7<1p~8xmtloQFC<IxBz#l}k-cLzrB -qaS|Jk{0B712k|mX4!_&L6&rOR(6x=Y*25YfI2%8G8)W{~yhP>T3)Gc<{WcsWe+4?7wdw?JOdF2t{w5 -@xr)ALM*R>+Qn2?o-RPspHTx^WA8;*f2?-qz12C`ch)At8soHpHNgw1*yb?s!r638#d|C*Hk;@ybP^N -)_+%tH%#=vO?ngokQ*XgLo($wGv!L ->BQdk9di%ptJ_Q;H>mci2opqGvDmNY?cU@o>4r8qN9;t4u>+kqWy&CRO*C+tDz9JCuZ@JL9BRU7L^>- -Im75J5Lk0B;v2GUVMjuq5X2jgBt5yPS0^U{J6_@nIx()ggv98#@j=S(|UOItki* -(>e%($B>*7@yvA?AS9gTz%_W3lO1lj%c2YjjC$oak-_TA<&~HOzxUm{<)36$|`c+^EdX*J&F|=JcHtV -6MOqyoRcV=Veaj@kraPuQ3_RaEysZTF4fo{em+FWIwIL-P$dNWA2|B4Po1s(GNuo@b?V^@jX6|3z&mw -D@+X?n967TW*wup&>zp?;m6}o)PIp)V~f#`@5S>f0HjG55h=osYNTM_nryP?Q037J&sFp6D7&%(P|I- -K_m4Xuq!>FAC8OU*S7fblJ?`g`{Xn%NS^tK2`t+^*#2gO(&lqvT{Y(~^jPQzN8GnJfe44r0s`o;8S0V -cBU8RjS!!3gy=U`CO@Ek%X!}Zp`Ub;13 -uErx0NTuoUGOg@tCkltU)QX#ro(ePSSm~6UtBF@nA8un^EAbckH;a``14)shw}pqA>m!p88XkTFX*n@ -vYi!c4`UTB$%S9eQRSLy|U+AF6B@*UKNiQzP37t}n3)jXM}K-kT~WB!EP -_B+)Y^ibu!Ao&i5JyGV*++>^azUaS&DS7wLY)XFrXY~1ETON*j9`$#OdKsct`$L~AB8QG0C=vwK%Ui5 --dO1*dLJvD=znwO*BW1t`e)uAyB`NFM_3-xF^nzVt-qz922Q;KJNwPt3a}D7gqH(VBm5S(@wR)?m4WP7fL)6Xt2~y6CS2JJDZU0)H4xp5 -}s3)-WzI0HO$(II|O8#M0V50f!rHW3=K6ggTrKYI2I2vR)lZ3@)X-SHXO76h@)QN{tDW;3Ti-m2tTV| -#n1jZ`YhmVY;+0*@Gw8y$!Ns_sKll`J`E%OJehSO1FDeLvK_lf(ElFD-hrG=@{X9C6O+k4di|VB*ZcW -bP%jj3cniC>8-_uv%h>p(Al_WSVjkl$!0;Tww{Sdm7j6M#cpqorhA8csF+s%}t(`Bn_+`!! -hNLSow1d6;RcGr-d8r5Lx(U$)el%FF5oI_J)^T`bYlUYH0fvCWh{!<~!Of`gbU%1i?Z`TOv%~P+%&@^9 -dWf7h$#sb=gQaN&a53dH#-fkjUK1itW6)5fp#hUAxz>f|lxW3S+7A$wYE7)*S7FvqUUlcgSpwqKOjQo -U+pzsPP%zBTw^k52y$3o)x)`m_mwXB(Nnt4yy@iE4D8kb6Pq=a|4>cMNO&g*n;dcO{*UEJ9=;`lYzqP -5sOyH?cdsU-U+Hr&QK7drU#ihwr7Z72)zaZY(a>h=pJLvq*ZiVnovCHky4NTXj!IJ>Hlws!eM=2_#+gfj~3ix7ZWPmQ682QD$<^Y}Tsc5!b* -vxZ0z|Qq(l8(yOOyF|%sLchLHS9(#NfIP_cI%?&6<`aGF>7RxTTSUl(0MqE>=WNehHPon`?d`?C|Da) -INJnXaIBH6|@h4=|;$^~l**40yN6Ef)+`#onQU8K+od@1iJ9+A|x;)N%)tTm~4OauYkjb1pvhgL`--u -2*%{DGoj&~r#4x+G3JB6*Iet^M{|$O^Rd^eHs|y?wl_l* -nt;$2ePLlkte626K5pP8MWbm>BRT^InpKgN5psRw)U -9rWUa_sd%fAC!bY)t?i2~}%>|&0eb~R&J_etiz<>LXHCNsqSkpfT;$Z#wCPTl_95!KcJ!CP8!6D16V5nacJJdMp -*D1sK_%jP?Ce8KBv-8HFzrGgc95>nCw~haFpN3Beg^IKbc|}~V=jH;=;JL6`aTlP>xL<~!$dzyVSdGu -w%y>fu-$>~EU1MC%MauEPpe6|U7OM=C<|{VLp!^t!c5!`t!{5-Zm-s7Fr8#}vMI`ww6i94Fuf5s!96X -?c%vDbck844p`+?B$dUrHID#iiqR(JA_7I1M)iLxls5S=G8coq9=-0v~$%FegP^;)W$LFeq-JFByJ}> -UAgH(rQj;3=TgA2#a4yr{aynGmlPj}wI06C*QV>79j%jM0SCN|5F%qmdzE77PD$!wLwAllFQB_pht8% -=l^P&@5j(Z=_&`z&$L32%I@$>mKbw`%T-k=P;fv_dqzH!i%bt;+#qUAAZ>YV)ddA41?a-SGHTv3WUqf3VJFn`GBEbmhu@Ex*rPZ+NCDteBW -{y9Ec+?eTtAc2(;x8+H6mrV~VaVA`ha4-(jya5A`ibfK}`l7r~0%aTYhI;Hjg|Ao|N32Qi?-7b%*EN9 -B6u@SJv9W97C%2YvM8#8w48{Sn(~(;qJe#m$O`3xN0*%R%DzuEhh0LC>cWyD~zY)(BO$xA^H)X53Oc; -jcaH?~sf=C_#5Cd7*~oml?$!%WX38x7Rv#JKltp*G3naxn;>hTJ(Vhb2_HhmR)X$e`tynokP#463)1n -CK-3)Ua#-rS&%0h!1G>s_f;_(0}(m!pp^ru)CfG#7TV7yIQj)Q--$JC>}97|)4(>Z+8-~b3qL}6{5BK -XZOZUa0TU#H+<$f=cNGGT$V@`DxFH!kr!J<~A;9v-i6ImysT)FJr~Wh@^%3)!cb1_;*ESz<#Vc#NL}e -(~H2cOH0@gSZ4>hVzdf*_dSIwjC@a7A<^eaORPfTo1W4W^Fx`Q}pc+OGJpl=>bPT7ZOB1? -c0HaD1A`y`AWb=aN27oW}cc{0D-hP0|j>q;A0yBs-KL67kxK%S$Xh9YOOBxx6(ven+6Z35cVe9e -nqA=w52EiKFpR|668Qi-cf)u}Ag5Il>x7D_VT&oCHKbG^PeM1CC|=lMukb_JDlE$Yw*i)X%Y{CafpQR -^JIE<=%pYodIs+9MSnoHX35NvvHCppv9+{00y`EfTpO3Vn_(4{4>U%!BW;P0f$10V}1fag5PSxG$RkG-9` -;$2LS)S3|Xi`RmpR#o~+QphM<2*%n?bCB|*c_hj1o;Bew9ap}))bI1{*Gsu)oWW7xfiz)2lfpN6r08rPTFKwrw-pr^rF-FOhjDcM}g@VuSmLw2^Wu^gu(W{5T4vMs -3T_EkQ2Zmmfl_CCW_JOTO>lH8){0~(3;&rl1b1{GTPFMkV+M%2mo*nSl3FYBI;jat+Vrqx}eB9qpY#IcAPy&8<5qRmqA65vS -6o0z#C#JS{Rb{$`=*&yWKL2N4)q&s-Azj?CH%aQ4ybTEYH%9K`?CO&XI8vbc477af;{#g!9mv4+w4#W -`4SXuW){u(F&SOmMhOaSm5Pf4nEj;kG}N;Bd?PbGRi*rgT@F!!4mDd*U1pordVtJ; ->prD1p-(_b?`>J=CAcE$`3d`s%|gR)BObo_nr8mpieWbGhs3*Sk5Fy9&76m5}io&gORQ?#JeucPHom? -%hc?*Z{P}I$|PP^7%A27|SJ!BK&(7oW^A7FTPwqEtfme4X<~2Gu6@m2?o-DZ~6{k`R-I&UjgR;Z7 -YVo!CQaw6}`BRQc?Pn!%{Wf3iBlCE>3k=BEPNJF3Ae7^K>Pi87M5*^tZ!0+HD!e`H>duhy44z+ZDzc`%UyDky*olsiKQmEzj;WI6Kz+1 -LO@Vpya=ssg=ua=$V+W0`CyGor5yFVG7`vCPehX$eM(Kk}hLCG%Rg8wGOEPq+oI7ClqTXMF@jsCEUOX ->XD}?cz^Xvjg8Rpt7y0vP4uI+T7d}Dxo -QcS)Hn45ttQ+DWX6e{BH;l4W>J*SKmYmgF3H*Zw3n3HtC*c9E$xUHYcMr+VRmktj^{3blBpNe-%>Q4s -=jpAyBk;M`t1DalnLyMoeGd9J?__rVP8$S)l4I%bcQLyqOB?AN?f68^tNf -+4zH0~Qo`B~QH3O4XYqL3B&jEyy;)3vIgT8jJAYdZYdJoj9h`8dd!RPT_$?-6zpyv@PKAQ>4Kp)$`Ni -T<2iar2g!G`Z6hy6KUR;`?85<@#u*hZXKgB$y@v8CHw1tOQx6n$HW`&R3scFOY1aOhp-V8~!>5Z9Qe= -D#N_kxYW}xws}{s<^(!gduj)d-8U~db~GC+hRmjsMTojY=An;H^}A=ea`vd@IX_wfY;iolof+knG-O< -Sl_h;+9|VoQS8lFQ%;9I1mM$iAP%AOoizLdz$*XeLGnn6l=I0B>LXi%^<&T`3Vi_0bcy -%FdTT?9!T`s4}pU~cQ-?2o+dJ{pNh5R?njfJ3%lT!^F|HoA&}SsjWOuZdmd??|+TsJhC(zhAH*QMPtw?#+4-v -Dlt0uUad@L-dr);WC3hxn4X!4d;I5pciRG9&l8_TL0TVoNxaVFAmt$B -s0|Z{Xi)4qsn`Ob3v7N9ruXzYN%Vb0n)DwSjz~4~SS!%$XSOCd5q+M$;u*oHbQT4kM^p3`=uJGbBeIw}d-+t+e=uVx@`9JUobpFo8@x+TdQ@g! -v4LFA2pfHzNJ#W%bX$*1BM{3EH>vi=RB2maBg+Ad=R%dprn7En<5)N_|mH!vOL?!<9Pd*Y5(ZjhuOk2VOb!q+L+0k|F35jN5I?vt*J|3v47sT+^uA#Pw}d` -<5v}s%3y#Pcf30v3}p4kJRmTdf9Jiw?L;tJDFMr -Mp=w;?#9Y249s_wcpT=v_I?jolb#7XHn!w^HS2;8;n#WTzY=gelv<7rVQqDC=3Sl$2`ozLN|fUT0&IT -kPKDqhr3T5PUqL&B=#4Q7z#Bryz_g8XOHE3xz#EIoqV?X>|f^kUW$ywvOYMn;aO=2t0K)9d@X-PnBTZ -cC&kYEDC^fSq{H#6n!3E&f$N3y=E%ZeIM6C9*RZp7l?E4M-(TOb?h-FTIOeOu%SB*ewioi?x4G<(tr* -Q%aW&4v6bF0@ZuY){tTnv`cV$IM+{JopS1DkxcKwac>LD -*b5;DQq_SsdJhluCYO(p^&z3Ti)T1fLPb9Ghowl`Dkyx{bX?lL{cc8_li8a~mn0mOKo_<>T>Y|Xn5Th8A}KMrUlRk7k18u9kFOPJCQQeJu`ZQ-M -gOs%2tjAkzA;555!45n{sVuNv)d!o#8XS2^;k}E~-JYMT_->J`#n713IdHoqW$o}LO1SLIjR~%q~3g`jXy~(A32z8U562 -2(`!6;s(j{uU`4i%Z{4%Xw@c3+69X^0=0O9vEl^wB4?3Bp>2!mn3JD;7VvEv65Lse*@{#ibUP!@I>#Z -i}&S7OcuAY=NE*9F7fZO=q=Mn*F39WIU0^KZ24WX -?V+}3thms}q6x1d086sxSdcVCrsis~f~Ql=&8U=Y(RZ`0z(@#d04D3pX##m4Z~X9wbg^c*iS2L>sPg2 -BHSE|Cs3MTqY|f3IhVH0#sp`x_Y7t@y>s~>;Ygkn^dWs59UtZlZ2TPW3r?sJ%gqHp?`XnXOe1TbAji3VO7^%4YLlw0z_dqq7=+@mx&>~V -UNw6naV>Uz(4;}0~uDikcEY&^@7%uKZ`NK;?;34ar -CK(px}Vce|0bNbAB!)-qjmX!03O=EZ|2#$%o&C%9ZfD7|kGOmZ>i?0<6CvRpl>M(}6W&I8(0$%3#-@g -M#hZku07<<9pFl&$;&VAH -OMC)56H&E8){0mwiEFkpc0}Kwf!pB#wjA6lTf*EYrBz$$`|QIIASn4(jgyTHOlD&IemK*9`)Be-30`UT|mj)^1fY)`&F3FW;iML4hzc|5)QI!8TDcG7s*!W-`-;lb0zlAWlV`3MSsp?>BD^)yWj1n#U` -)RoO^%MrS5Pj!R?vk-b{mgYBTd{saHSLas!n%3)|u?=s+WoE7DW12b{Ua+1 -%2e*L@&Mhpc{!bGueSFSdMWaK3as5RKq!z%&+VA_B;GC4^^s#jFaFon7K{-evh^w+2Je58U^E3mveZS -lP%HJ>*Da}`_e)Z9>JWQ5)6Cr#lud&c-YA=F2skuDKYH$RVo`NMtyAiwo$CJ%gifar+Pw$^c^wTXg%M -LpI{KS`o$+YI*6E$%VlBilfr;omVE`54pVA=7f1Y-d+i(qVgXmEx6qc$zdw%uoPx^RK -|M3)v1o%H*4ynFo2^PWl1!`d>bV9av$Fsz2o_yo~To-dTfO5Wh%;_bkCXJ@i|^^-cQT|MLA0Sf$yYH} -Vf~ku#`rW;1mXO?FzW5O0-5DPuqTL|Iu;;(JhsBhyUm^9^!&EA{Q+H&%zOPquJB>Gz=4pF*wp$t%2YV -GDf$clk6=VPuI(nJkxo!(f3vV`+QX0Te97HVDZcWU7u&n19oq=n*ZKH_MUHMeOrg??A;jG;)2$^jrLn -&xFex(VBZji}m4;g~Vy-@Aq-(^ZUoI6}f0t9lPi|tDzaD=B?kb8sCBUXg5FeaVdW|!*SqIw8g~_1OzJ -z#wvpu`V=_Tp2W*HIW6!ems1?&pLQXLa9cb7livZOOlRCg#Q;)|A)pSpfxE6m$9s;Nf`t6yf8a{?CizGiG7Qei` -k|BDR}gfZk>hp#Y4F5*w|~uO-3O6X7(Mp%+0vpIJMa~!X|)1nh8_#bR9R?rJQ$AirG&Rv_H<3@PZB}o -m|IBY-(MS;#YHuzrd4?u31axpvxZlPG-i<39BGV`wA$&Q5qnY6F~9v8O6T|+MWs{S&gyXzI>qg84%UN -?kd&?(!Z`rGQ8~uB&?s!E<_zg-(15x5K3mCgV*%iKxVcvr0;PXm*muBvR@eoFE+G|1?=?6Uo+!a&uMm -sF>FS&9DbcAeolhjv2Lo)XO}tVXv>`zbpr9a3h^o=#Zh<}J_Z(!!$(@7;QftBO{Jdkg0MAys6T$z1J7 -WxlPEJ5CC~d`^4=ie^}Y1ojVP10C5{t4#{{X>FR}UGTu`9c<;b%QY%{6Rj^_`KB*LE7r4~px2bg!2Sa -TO1lpvCgeHO@XLMepL?2dN@D9WQ&%{oMz71iPM*atXnI0v3po!wfFb-RJnV9+$d%=@NIEX@zfg2<%fE-RKfUvafj$x5$xDk3x{Y1Bp|TWcoF{OfOPqHmx -$(G^k(oC(=hXsVSOR-jY2B=mjsvl$VTLkX1WDA6 -+xUqYZks3d*sAD#xvC31XbYquqtl6w)hq@Ken2StR`Qub}yJ7}{F4PUEYS#idM}GC(N;fZQamZ>7)O%Y1)f6b;J2Rk%US#)bvs!_+gFnZ#(qI0gfwDf$D0xnW^DLO -gqPsDT$ae6Cmnn%fOIQ~$S%=^3Bk$0a%H|7#CN{nP7E`Y7Dmk~pu3q-|fbbv??NhGXVK+|IcN$xdPF2 -h3!NkQG!jC=BeTW2VUS!+i;@|9w0NSB|T1E&tk%F;?~*TUsWU2hl07*I0U|92t5{_Ux#XaTny{Ey<7V --i2{X@+=&a^yd^1}NUR1{9E-8fhJkF__gT -tsxhG}@9)fyiHEtf9VDifc3$Sa=dIk%{t1@qa9r;E -+}wuajUO%auR4?$3uN{RTh0=V<};r3dJ=b@yM{o%E=A8IG|F;=6x_BXa@svR$pGD`aiZU|rSdaufi(8J3lim!AZZLnvOfC}PJA2vAwS$Rt~jSLz`y2L%LqY(A`-8=k&f -+Y*E&t{lRXoY`V{Wl@b4|mI^S8W`Uu)c^9<=fRT4P{s&k8<;+HFZk%vs-l^x#Nm8EicWtYEZn_>&Ej7 -fENJ4g6th45EcuY1MMfdHK^osC;Y*crpV6jB@ -Rv_tcmucewG4wk`bOV2@~PMPR~&xtMyexMZ^W+lH_iD-mp;PV-E32A(4+uO9+hy@-m9Daq>B{K^M%z0 ->3t@rNA1ca{27lwBk)JmdcA6m-_u3*iO+A)2T5dyj-M9R(@-zc%~&?vV_o(83 -$5bcc0RfPiHvNom={rQxu3(K;(a%u`({Voc)F8(p%0PXvvQmLd+6(iz58@64klc@RSI<}!&X -^Wtrdjs_Hq7&uU18*YSGsUNiZ_6GE7_-9VvLHnl7aP>PS=ygXkW6$qI2mhU1!km8v((<@l}OjBU&*yPuCZ=o`&w -^EziZZkx-zhn{*3&;Q^+@}s}A#FeWb&Wp=RteTBm|4TK-{a6iXY1h4mP$=#+9G1E4>+yf5hyISBLeC- -n_mXFmnkrRo_v!=ixU2u( -oB8rz>T#PBO~V}q_tid9s#}oU@Rcmqyumh9S^y_k -HvB*Kz6CDIqHBDX>vCNXP!!ZfF-cTVuuwEv+0|WK5*5=*1B69Lgmu|fEHCInFSzoCU9GIwO3Q9b`qUUjLG$i$~$FzKb;AYHSEc4`_Xb -;1kEG64GE-m}2J%bs@3d$!+OKEhUEeJq1%*?4jIeJ#9%uuj}`xMUt(l1Wut#zO6r(8@;{v|MplAN>3P -tylb|lh&3s>gzGIQHqLRnI}!%IEHJgZ)id5AwUeQwd!qmT7oWjKcv;xWO_DeV)qOCqWLcB4JdfIH*1n -luQ_4&z%T;2&C*+&fwWJ3Et*s}L%%g#$JJFKnt@U6*CN+nle)lUwoCNR{O9g-R{GXJ@l9qZh%p$ZST>$ -n?I!zmvEvT74#602#Mq2RfYz;wYds@2^`ucJjl-J;29m8$6h*d+7v>In(c%(p+;IEw%jg?4lPbf7PF( -6q_Wl1`wcaC>Dmb(a}4DX{8Fp7L7yGd!NOH^o_RyXeK<%$><%?^pZsJuO8`Bj#k9+o?;%97(>IpgW$N -70mx1@0!XjV+JQgiTEg%Scnl=-Dm#N&gAUi>X^{K|zQ9TFhy?TV&_My&JuM*!&NlKz;!SDixR@}%9y& -St&Y)IZ$Gf%eC&30UEGnCod(PWOd)+STivOU@##TPi+Z%YUkm>Xn}u*XhXG)< -C4+Jy4ANaQ`oxpbM#`;8PjX@qZ}8Lj*u=Ub;r;8cq6Il5DW5rzWNl+NvH}lY7oSBkum9i;2VZzzmEDTyL>cg}|ov0Ct8(Q$U*oq!hz$nMW@+te -Nh-nf2RsxMp^_s`c19de5OPU5;0^W~`;=(_rZe%xMGW#A{l)FuUNgeU?TvKXH_P;@8>mi=rU6LT(k&y -C~Ofj;6{(3|8aiPG}Gc0#OAlky~8SFa70w0pb7_nIj5e?mWQ;{Be2{T|O4li -l~k?p&~a!n7iqPTIrscn@c|d?Iw1^2&BO1li;L1A5zM+SsFtb&oNnv)q)^R_|@T4v(Aqt@rSS*_ax)Z ->x7REAnmNVHMoCRpqvN4|4$X@}NE*cs#Pc#nUpAA@1f-c$fHUX&^l!*@~wpar&3TTb7=WgfeIWIPL$6 -p84!2)z9Vpq>_-*DVU+&mg$Qd$&}h^RkI$CP1@AHt?1i9&rzyc^>~KzBPeWe3tF>u&97Fw_5yCiHNCb -=iEqwu4_`&N+BZeJwjQT@s0J*VTQJ716iOd|R-Rt5&qt33G4(dRZxDKggHsoTe&Oh+M86n3p^5&@=r5 -o@tC-k;zO8zCO7mIWS^-PYt?i(P#H?6Jc5-ufC#`O`_QO-Fb8qP0L0a*U)JL>~wAL0kmrkM`1b!ZlPL -et(!`VUB7CF+C5>DpqAaB+|#HEO<>>ssn2e!Bsa>fn{*W*!F@CCw!vSL(neRZ(qW7<8XVz>6v{(+Ido -b?a%MY(G?vHq!d=^s5W59!;1^le2y0sXKObOQP{qu+7#Yl3>w9>VUM8HE0{W~_s-n}e^^KX1^pvG86z -1)`+W#+Obm99YQ?EemfmBwX0R5T)=OLt=y{7!of$L=it>BlAcRsu-db)-WVPSjLcf!V-pL3waDF5N>5 -ik}!)QMnT7rG9hK9!*Z&S$Z))!O^9JQ<o2!*QMwf>t^Vs|p?r$7x9DxRc`ex)Dw@9N$YqGsE%SBz( -khoOOf-hNEsxc#GlqjYW8g;V2mhTN#e~HH1wJZ$*3q!|^6Vp`78Uoe<0n$8(}W0mG?r=lKjrQ_w;N!_ -jcGpuW>-^f~EHr?uvh49Bg*f|B7Wh=<3iX822p*D@SeRYC>BamSrd#&F!hCKNHe3Gr-(Z$Uhh;l~lzGQ1h_i3}GIk7sx* -;?WH6Ks=n`sOA#<87@bhFgytH-&Qa>BQ7wU8ms?;;W3CeF&uA{5%x1Y3GrPFNAr8a^92PG5jUOJs7@=+Uz -f*%N2HpqVkYA-#ONOw8;Si7$o -(#JOE^Sa$s*>kq)PBHF`pUCCkA{9n9n5U6AwPOF`roGlLS7Q%%?x|NdccU=HtzLwBVD%e9kRr(+&9C$ -b7zKK1T3SGoPc(rwn{1FrPik9TO0Ej$)qAE_cjC;HhMu_b+!$N#Gg6Jj<6m>CWw60rdm$<05`Aw?wL| -WJ2r%&UNz6`<(_!^tMCku??#AB(=&zrW5NbxIL0HXpbbYDp>gCe(4C(y9ssn_jMHk{584&l2w3^*;sy9szhijw=B7W2i?(o5hA-5qRPr>| -1EtKhr*g6$Oc{c6|^mdLdobc5irp?~*FyY=G7ll#UmH)yehl?`hkQ=@O3WhJI)UnJS|L(#?dTr}1ix2 -Rx4BQCK~O`a+dJDMu8G#)DKW -Dk>sOCr1TMz2>TOCNOmha9godFSgUBzDh|QIg_Yi`yp5H%FeY>M0k(B8V>f6BaNJznV|OF)T$;plUw3 -1)qb`j0F0GqYkUJS}SupY&upMW&db_{Yg=?;!*QziX|4t=*{y2`4TM_~;(Kb2(m -gc^T2ujfqH%HOcdCF@=&TM{&A=K4%Ae);l-UB7ppQ7La~j&)cAo9*dX?yB^t#3Dgf`nz>yK{yyvdJl= -7soQI{r7$`lGvfw)IC3^JwdjUgo~yd**S%xs8t9km~@or|4^joqGm{Ou$b7T2Pe;UcWFeI{^DiaGzlA -57AvDWNwi@>$2@RrY_rn^tqnbFC=9A%^rBmQ+*KXcIulwwC;OxN089PS?Y<=+!7AyYjWi2wvo|xv`aU -il{V)YywQ}RWLq{ryt%4poq0X19wvMBDsoioWNEdjO%=>DD~D)D2xr|o?J$ -tTT$SY;omvZ69v#9f25zR4#Ql|FR$JFR8QrB0@TbnJlba!Dt!lWIHOmBJx=htM56HEH3(nddMu+HM!a -Hfkt`KFn^xv+bZ;94wwSso{1nJdWAjF0Z+(U0%8$=4au^>apmLZiWsYR3EQsC%4-ZZ6Oz?^mp -Qgz`v-F7~3nrUb_8CAnf9+A%{*n{$#etW}r%Zs{C)PalkHtzt@(*1bua+++&IIIlg22bhub22kBs%}p -Q%d}7jJ*h9~;Ps9_o^`g7BCbENmB72cu80fj{RV?JN81^^nhVbcfG3*`|crOk73Ud?`bbPyB(1{o4xN -aw5^MD<@0BxAG9~T=WyT>kj2o^m6-0Mr5>nDa?%S*)_1mY2ky^E2{l-YA!cCVwZ>503DbiJ2WWrKAb9 -!nKkAEAvOKd_X3(C<)Gvg@e=lCzM`U#cnn=x2|6=}DKcK3V)jVU(JG54l6eeI87uF`CiXJ!&vL2R((E -bfog|S1&&ph-?mq4Pt{Hrie>?4v1+;VRpp@A1}B@e>3isNP>i@1?+#9!XTqsj8WI4)2 -^2Kf>)sZR+S0nZ---#+fiXbay}$E$xUoQ4Cu>h43pOo496eFhr2^2q9wF0v2PBkL}A-kaT8ENqcFUP3V9ih@BFv!`y(54NgJFZ-+r4@5?)&1=Pl}Z59dVW@dAd!pQNik`-Yun62YT3L*zurW)&{Ob8 -LJ5@C)8TMMNg+gjli$&zN|0)laDXr(-RtH$myIcC&JTuTrW|YlS3$Qw1%Dq&J`ssSd+c9swWNabk^81 -`laMMn{xP9wcsD}M^B#*anU@_qHwbl#G%Ts|H7H^U+3#BJKkJDXGdc0_2yh<9YmXh(FzoXnww@My*f^ -K|?)mndVUiLOUhX+2w4eOmYL%W}W5u(;p-LDuHIhlULJ5(*=JvSc20Q+V4vYuEA_u~Inzck*bcVT-7h(Q0k(XBw_r|BjhlvJ4hRL7k(L1g~m -Ghu&MoY`4{W;bif<-uA7w#`B)%@CLt&o+|4PgVAU&?oZ1|Uo6g3tv4%@P)f*7acfIy>P#u`bffz&Wfm -Wm?EtmU^suT;t&l6t0SU)!?^El2i$mx=4~b#yv(tO@zE00kP)M51qZy)mqs5_D>AL?xI+xdEM$ZRnl6 -~gzbbk)zrckVj&gQRB+_z5*8$6k1whFBieQx$isc2JFpejHNy9iPzP+*?U_9Y(n*Hl7Cx*KjuX;V~I0 -N<_mOQTv7vsKnS2*QeG+jVGE;i+)?MIccJ --50x0=MIu~hfML;7i3&R&ywPm=_AAWC-Yb6(b;|WNdBc9I0Rz~eo};uGPY4JiEo#KNpU`Id(37h^5}_ -zgk$&>mENWL@C1q%Sf(zM64!FEs95DmMBz;MU1`v;jy&jcvaeHg*ytB7WYp{jQ3=S(oi(0&K<4C -Nd*%OJ&0cTK{nd~1hqJ|5IjDel`(?a2Vw=~3PU;1Yd;VkZ*quCaKn5Ja~uvL1B9jSo@W%8#uvACsmCx -sE7MBo<7Yf?s#vRV5!Ny{6^IOQN_QWS+3cK^_zjLSw#BRjCzvV9Re*2i4vg^h416Xno6h%2~%I;8Bg1 -({9|?&Nw-DJE69%DdPhtcjAS$@S6CJavW|kraU;%9R$tU0ct$9s;zlViN@Csscidsb%v|fdqnHR{S$p -HepP){xWV}Vy*s$R$_vr8=S3Jtro-B(`FPB^Qb}#A9Z<*C;Q_G>kas?(SA6-`)5D7>+0zce?$K&%?#K -9I*yLo^EqJKZ9ZkWrjI^<>+FX#Tw8;k)8~kzCk!}AQl$x}1igi;Ve#@^w59|X)<#DM|sJWvNdu!HMJU -@n8tKG1JEsFf=zAET2JY&qh>({&GS9?+C+Vh>*!hOBB@cdJM+` -AiTzGaGx2EROrAa;W7bj%&Q&4JNK}*=Dq-ot+5>h0v+GR2t@4)GrHLPKfNCoDgA5Z=|vooja -4LDDBl$kFHwQ`s)E2E#m{O72vwbH{}i(zsGoRASLE&(630?rE7Wyt~eEe&@tGYKL;yd0g4Qd_6tObO? -Jz3v;lNRzX8$Juz%w66={)FMOJjqGBvW5vJ3UBe -CS{b@VV%%OvoR1%AMv$D>*mqk&d2Iq&c_m#zi@nQ59ed&ZoTY$?EJ00p -N|cVy6k+cj-HPV>EP#MO^#B8zpQmRAGa-ykl^cV&7-t6iYh#}lRT;N -Nodh3{4#E9m(G7Z>1Yu@|HWE_W~-(s9p}HWMX})Z=3u^fS%1BBxNXZg>2Mn`PnhsRIW<&uSGnVS7;WQ -YO4`N{VTmI^xUivXwwTK9&jiq|WAUV>0nz2JeJ0Mc8BTv37VFqN%AgL6sKoniU*ur0cd9^14M1x^^cQrtC@QMbAzO<5F4GWT)A2dL8u)6`GY0Lo8G#3Lz)2IQWY5)HiAhO;sUcmqn_yqjC7PmYd>}r -6hB98ov28do+ivsFInomy#h}P5aNZ0Vo3=my+%3+h`ziohMO$W+Uy%-?+`-@jHK&0;ABHz^;AX*jq4; -Ubdf3b@JqBb>12E7{~a(nSA3=nN>cM!UZ0iyHsx)>m0rgTu;c32=vm?(L?B`oEz`B9+AjiSeO7yCva -dbZw)=|5wpWJB)8_f2XLP9Xu->EUv2GS(gf4iB^~3m#Nkh>`H}mRvdeEatFjVLjhz2@q~{)WJRlNHRJ -(py_@f$u-o}X4n_>S}@lWGT0-EchqvZwK>J!M^HGMu-U|~0FQB;122kJ^2K5bEP1Y9?D*6ckEUj|whM -}#KPxIL>4kuhr8m!V3_316#j=b>$C;V1Vh!u{7QCrb4%hQ|FTQK7I`O(VNH{g!>XmN(T3|{XFv;i;E+PoF7 -%jrcX-u6JnJLv@PL(@d26D^wiKk$2o -Z;EVRqQ_0`!*>5dpp!YO74n%+Qo%p8IuUZ6T@h-Dbv{gJP(j$)r=vQeripr@Ho`&!0sXU8k$(aP4CS* -T)K(5xAs8)_Mf%N#Go>(CH)b&{cjt|nXgYLZz}enIiN0$wT2LNjq1ea16hYFjm)Mp0SM%T~v$l7C(qi -)KKe0hOOC?yp0OTRu!Mmp1gDjb;f!yy&CNT}v&$C%2leQ70{unUyx`ft65HTu09}IqsNm!FQmrzeKXM -e_2g&x$Z_+n){i?p49=we>v2HA0}z0)v#$j#4tlNJ4B5e8SGEdd#Vn#l*1H7=aLk>zaF?v@S4dKWWaZ -?f3CGv;WpJNik%)e4@2?4d}VYJ-|QbRZT5!_cHU(#<&$tscq`+d%c*y}(|v_qzvI1sBI?`gEuL0C(Z$ -g8AL(oqJGstAu@iMR_lsAlv-ziOSEn-D)#Fu)oi4_!2hz``@4BJ&>M*ok9lComej=yg^o&|%+nUC!Fk -s!2K1q3z>XVx331!a{21%dP?o3yGutVXZgFAK`M%gXO*xL;_hC&4a`Q2b?SjVk9?G_;qRH1(o>5dp`BJ@1o%OI-bK}kG -n%koAo4LMPQ;rvkbokJV72eHP#qNX7Umm8d3HW9b^HaR8mp5OgqN&%qH)v}--^Pztir4*Rs`?fWJf2t -pqgSq|IExwD4ry?=YZ}+er28<~!QI<9tmRO{;c%v{sm$P&+MS20&3eV%ecVvHG0vT9Y8oX?%}g2B)Vv -{SYF=iV8bw7t)f9j*d#4-I*36*Vn$427W(Yk!R}`(@GYY2xScerUDi@%7sBM3Wq9V?dssv8S71lNnJc -hk8dcI=`))MCFFf*;MM*e|57%!=M;%SbU*srv&Vh>T*lzj9M9^g}>!bffEuy0f=_9TH=NCjBD)pB5*i -79>heZp2JwvLu8oP^rcpAJXanu>1~6|v-^uj^3~&mQ0r9Z2J6;VZR|cR?cJ8=K)jb!N~f7hiK&xtGI$4@rl~1J1 -Gg(y=3DD#;%#2h^HIHoWg}SuPp@mXZ6kMW95?ecdM% -CKg)i#lt!d_IuOkp$PDBiim)KPU}*ttlmG^u5}sPrmWy3s?cHR&Ml9MIZ6RMXSGO)A?(u8NA#a6QwA6 -4W#8pc%}mrFteh0%!{)Wz?l&jC8kaBswppBqdXg)M-g0we=`vCY+Z%*<6UTV#|*gP$9HmW>)NqaAv1H=Co&G_mdK*mg)EDWhx+RHyWb@KifhM(uJaqvpFPqrPmX#mLP -O@V|#8j7HiWPhaOWbpe{7t~_IbH=MXSM{E0Cg*Pp0YT3l2kIv>35y;UX8vODbn^f^Y_v&G&kSN1V2y9 -!1a0(XPI`>OBp4!&DL91;aMS=A_5nrSBp^l2u;+=}9aoiF%M5;VimW7oy-^?njbXNAwHk6WazDzi#dQ --`UUJ6%A!PHGZQZ)$KQ<;v9E2rRfjnP!aSJUjs}X}wRY&t8P<*hbL#FQI&+!Bch93!+;T-_u -p66z{93%x%#mumoQ63pRiE~6`H70$jX^En;b(KdZ(H!Z5uLR1Ro0~IEPVl#xiPEP9@M|(bs6SmO-kT_ -V;zCNDOw(az+L#thSK15y&j!~4kw!T*j3_i;_S2wXWts_x6CI?hO@4cIcCXNr4<$UtwBw{)M3XlO%jN -jlCoHcK1VyDLu*7f^*R;WOWF_Dsdf6_Di8Nyr6RA{K*@0ApwVoG9ZQhni> -ZCbT!c5;HDK+0UX&cLuY!=$ -EN$+2ZOy17^dne1S}(2d^h67$u;e*MwAP8Bd_Kky(a81Nw@G%zok_OaI-!;R?)u_c;WfyW8k -lg@fUk52mb+^iHUQrOu%ohZg0l9QL8!aYN%3)+w~AP|u~w0TEcwLVD5osNuApzf-Fsq9^LHptMVbsjM -_m-Ea|leA3@;#_A4tscu9M)lE1ihV^9?z64G6cNb}m`#EbovZoqLdk(ptDNOKUv4pR(9r~tpsQQ@XfN -U#N{aS7AQIPVB=!ZeqkHolXqfH$IHHTN1N02>Icq^Obbe|(9Au5||&*&b~%XJJ)F9_7p+rGt3i29mwZ -dMm9U*h-l4QpMQ;7=@xH8XsK$?Nc719cC8$vYv4-xI$tj1Z6njt#vasuTR#mGU8L;Vmwj71M40-$UH~ -L1Ng%FtkqF?PhpXR%n@SkM<*N@g3`WYB6LJ6r>f0T|}K>FXsVL*iiajlW?ZyHZV#zE}vVk#%nPixrQF%RR5VG*G$YgqGBcL=yaw1pO7q{#;$NL!ttuk -pNPEg{omp`yEF2VP4Si0g%20uQyO9f -3K*-yVk^mEqJ2f4V-&w(i+%VR%+w|t)pslKZR0H!R)B3_Gq$t;xT=t&gS2Q$G|CJ>PrV4NI_+4{DBl7 -Uu(8M42!yXGza@9^*?x`hy=nIH+I9V+~{l`bqCaPxy*J%xb+hDlR^z5<_{Qow;vMdgVj{O(@nueRch= -s1m%N#T-D+(UZyq6*5R(;Uzp0w!c=CcEpv+sPN-{HPc=n{%Nt!D49+UY6 -V}{CWe^o~f*Nh7v_3Zm(4A)FkZ|3Dv_aOT(@Ieb5+80NrAZ`;q%qilX4PK+;|bzeA?wt2&5{(Am4yVJ -TvBbUFPzus@sbmx7$)@#5!eg+q{{CTj>(XzqOc?69gsQDNw&Bbx*6Dle+fJLrz16^l?*gwbdYO<9X4s -(K7D@XDO-p{>zSo0my!qny4*lO%0;Wv1HAsJ3hF!;HaNSH(b!6R7pW&&`ilyW1ZX!xDl~bh$%O8A1Io -YkNcmwB2_;-vkd0c;Hsnctyq5&aO4PkD4Spoy4};38N$nMZMZ}*X82Pc(5Y3eT~=E2Wru}P=ioK?Y(VvkcRV>Q}Ng|?pB9fx^9U4I3u>s$ -wgcLclYp`e-xXKWYrwx4ZZvU~e3-Qsxft_QT`0u?%=($R<-n#_Fzt*hZ7qEpGpY66uv(Nc>(xtVE5^2 -ZmrX>H?L3s7pmq*B~>P@6pNM{rq6&}!^YFtE_>t^F1)$UkD8c6^}aoLJ{DlU%k8>C+({o2$|K2w#@au -AnDHBDAq*QM9eZtC*|3sqJH%M;yi#63%F=K=payMn?*^N;6i^ -E=@^gn7>l%z8qoa-Idp^8=9M0MT5Idn9leB?q#Dz6&tO!|J4pI;v|ZnX9gy%CyxtE%;r&t5KV^Jkfui -DZr2mxh{sqh^5~B{u3kSnn!<*2-i%&`Cc^V>&F+JBj -$ndMmq;t$;5;73~M!tKjHxzXc1u2m5i*S1>Yux^&U#}fYbT7WtO)41q(ZKcBkD0HTf{#Q4?y^LtmYDj --*$Qw$In#)>7QT0gHOK_LDW!+>#F}Hkdon+FG5n6n%1?!iwK)8Q;KA*0TaYxW|#1dqiIy-2mikkVCdW -@SJ?q$Q4DGnJq}X^^c0;JM;rvjlUNxsNBqq>!5~nF#L81Psi!}h_)uwOYmOBZ$n@gr=#aIn9E0K-9Lc -}>lB)g#jrhr>}pr*`=YROt~8zEu>LHG5z`NIZUhHZ$+oZMiA%1g-{^g~g6SqvY{Y2WShSXhFG=5T9cN -Hd@Bj+638Yln&Z}&#!o?(}zmGxvy{clR`#{TJV5Kms(|6V94?VyylkucqPkPeqyBbGEqiwdMs@?QPZm -8y=7BubFi@ju+Qn>K_V}gh_kEh9OKMQNWX43?IWy=6RH(1*q78ZYvvnO~>(!#_OdmQB$ysiSIknMh`m -BWvrHFJUE8Z@?pV%U@T>ZX&8WsGpkO^!>wXWWGLN_#bHokicgZ=gmB3jK=e5t`MueY)h6THD7OMfyST -ezK8$1N7H!Vl`PEVgFnRgPg5No)$mBK1Z_oskI&v@eZ5A!o9Srm#DfN#$yAD+3n!6&sniRgWCI#A<|v -VtdZ=_7VvoCH+r5_4BPCFVyHGk)V810;^r1nvZyc}fB_otNSk)*ZYCP^}Td^i7f)Zfh>4lbE|jXg*T_s4KqQn{w`bBj0C7TOi6_ -7f3x!$=(=o>&R&P&r?J;A^R$ke}&zE&V!M6zP?)c3+$4-Xfrn%<rl2|H(sA~i)Uq!;q@Z&+S`p>4LKJnL+i)d{te81PmO3L)qLLjGAf9zSoSui=)lm`!6 -o?rEUHf-Ru=R%9GlMEMIks+I{j%zQ*>J$@gv4`U()KeK=e8h&7Al`j=-K2z*e(*PG46W -@wSn~==RlsMn!?n4sZF|>2E8=H6c2!RgSF$hBxFxl1Z;ClU=tD#4fyU+pv2Cx++`sxxdE4F~MFkZ-ao -fQ+o!V;m>e=D8)Nly1HlMXNxK*cyKSM9djT7#^UX(7^H3tf7nTuYm>jykK=Ompq@z|$u?kiDjPYsvT{ -jvDcvBhd_vx8z62We}jxIrPd)M%>!dCM!$tnRP2y^D7Ko9OK!bFJ?wp$aV%Q8w%p%|or7o#sJ!mezJa -TNBo9X2vL`9S-jPd+pw^G`o8aG*l&5n)~6DLyw(p_);1)r>S(88U&NL(jNIXdlO_vL#9wPJuIXZemsK -3Ctp%jzJs4I6g&4jCK{Lh=UwOKcq+>uGV6ty2jS(!^3}>fnh`=09Iu$s+M1hW^dg4_;rV5hNS<2TL3{ -XR_b)8W0Df{@)?lU!(D*EFV?oOVV|w)wvpb9DJ%-?1eF%3rq^Q|>k?*`wR`R^*W-7&Kr8`jqG&eIw#4 -oq!JI!9OuJameQU>^&KXCc{wl83~*hU~_#7Q(ir- -GX>_@q+!jZrQOApxsfMT-f+<523s1WI1bTPeJtkaD9(KG*zTaP-BQYyr(#H -i6Xq+Q;;?{U5N`zTi7}?4zSSo1l4ujs?nt;G%Hh&S=j>qJ{u>AP4IHQEEK!v*0Y!8>`K;zLu->f38_= -uS8s#A?)_+86;I3wu&^{*S0xg(|LV(^#IU}uSn9ChaDVxMKc)6;UEr2bExJpgTsX!F5_?=hxc*#1cy5~Y~=7G4o`8|%AwmZ1|vDV -jzc|%3prfL;RX($;P5RD-{bHEhXRKk9QyKp8^qyg4pTV1g~KWirC;cfuI}D`6P0N69glM`Xnc;lD;ez -moA)F0kBsU$-1Ya;;*V}Yh_BXkcv^#Hq}83JYEG5W^yO*>bK$QP;2e@krjk*3w2}TK_ZV^=(G!g$?>X -c~q9dtf22oRAE&NR&OW%o5p#5O~iMPY#s+UwBsUEDn6^?pHy@@^}iVepq{_UnbNXW0iJ`Hy85D -qb=_mk_oY0{nDZS#V#>s(|WqPb7;F*xl(yj{!)HYK2mz%EA50OOD2>$7%C5bBbDj!QzEhgevJOMC?UEDKr%_ZoZZ7`ap0F`Btr4%ZgW+|firCEw;$E%E{LhOU|98<2NpA8 -F5mK>9VU}-tU)CuKcS(rcOjd@~zm=~m9fq7v*m>$!R**Rv5DKCfSGu2ecF`!F<#Z>BW0lf@)#ReCTOb -c_RmlRXa*%l6S%$N_R$21rZ<6t;VCv$W6@bvPQ`}q3#2LvjDg8PJohV|_i-hV(ub|9Tz`lY(nC=>#k24KOuSIq#GuusHUW!5Ev?ODK-R8Nhog8mp%`vta&iC(EKqR=iw4sDux;1ugH;tUXt|Q+S488pmgUfrB|43wZ9`h(oQiXTlElEfAQxOFaxJAEazd`7POkLK>5)>! -w2sI@>>XgDbuo2Gsit+p*|U(gvwMG!b@X>Jq%c$7D5lg}1Z`D92}Vep%lnt*UIdV}R_ZAhvc!d=uDs` -3-k3k&ugm-0;6nFQ$S0HckI50jC|yFShhytM!5`h}7Vl_>R40jkJ+&aO7kZ2ZIYi3GLVI{2r|Olcfwa -JSy5=e6cl|%vpUY`WuRQL0D(|{~qCDitWf0#)r2x#Mr;#L$O=pf$eu@7?{j+GU22 -w_A9>+P0xv=M?Uc9{iW61a`_IC-CX5cku3zJ$yY%1H -*B4_j9>qRgLfz&b>l^RVe^;MBO2#PLOF5VJ(4$iR&iOu{_7NLx?2TmvcOlI|N#AZp>SLmAsWvQ4-eoj -$<1mG=^_HBwn?<&c^WpAt?v_%n<^OICp1ocYmp3+&zFhYcDc)gp? -n5M@r@Y&fJ5zyNbI9OXXc)ZlzQncSmt|b_a8pN%Y`uNuE`5_Z?FGxcj2yY-etfyN`2sIvx8aDwm+Vfq -iikeaA_&UMh)&KPB{ZSBX*&7_QWu>oi}Nej82yV4Y6aStY;+7;_1iH&_ms-(t!E%i;eUXu9sDXdI(Fi -sqluCASF*M3+W_SZ3m6XNg -*#+6~1A-gN;3tO|#GARS+^Uv)n|C}7~um1f}`|&Rn{#;$IVOQN`-tMmMt8K5d-Q9iYW$T -V#`Py~XipsnGQdPa)wxQ;)ch_#b=idA7f8fDQ4?XpOSte&fxz-hO9KUH#sD``ByM_(;>yV;_F>@h6`i|Lnx)Uwrx1$>y)W`S#Rz-~S-A{ -AfRY=BKl*KmYRUZ|B9O%m0rn$a)X|UqOHT-s$Hu9tMKj!^QnT -H+K!VU1f>Cc5~m|&0X8gy|J77o^I}YySaC`b#=ei&5fV82=JI?XT%S{FR^^%tml-ljj25HApZT%uNIK-4v&b-|q>QDULuP}_H;ZbJMiV -tinR?>-^C~aDt9)%a2z2gumEX0lJk-+@B)ZDVN+5iEe0fHB6-Z|>!;>=RmV>+oLS04%-twZ1DX%JrR0 -PDjf`S6M+`G(ZTy8X8CePuQnH%B3?>Eulo|V7$U2L -!Q!HqAW2Qij{^kL$1Y~v#?0|@-e3v9T=Vu4OiwAD|3txF%Qz9RvZX2x?4PxAtz6nZz@>=DOff`qww2~ -3TmbW8qEVpNHWhqtz;q8&(RIar51x}MPczGWj?LgW#Od;v)Lt>l$!IPd3hFNQDH8NA%(CXgqK*%y+?p ->AX4w)&UWQO!^{Syk#UvMQi|0WKCGy8cvm_uGMIskg=S@LNuEJjk}suT`HiMJ1Lt?8II2N50bEGensI -z}-2JC1GXlf15?D__{!5nR00zB*RRJ;#9}WFC9I?^@!@?Z!EGjHEK%WcNQ0C;D4J -PIAI7_K1Zed|@oS}Hxa4B&&K5+60mIe_EO(n%k48>+CzOx*IX-Q#m4(&AP3P>?(sig!634Pivn_epoz -f6~GSo-CK<^t^6Qge>U#rrC=b@mr+50BFWeWd!capaoUW%SH5&@Ok4!`Wm`=G0M1J=1^q(BaA)-U{TF -ZY5kEKWaF%v8bqIIpx2hmvwh9{oFfEdf_kAA`5nCsWQf}3}%MHe5GND(Y)f?KQ3<}uo7pM9H?k64jYM -CDN&XfmXz>MXhX;_So@X&RB}w&gCDG~XRBww82#{lwlR9BO&gZ4`Z-P!*F(2 -l9oY+g}mliHD78$and2fDRVX1k(`MSi>#=M1>4Xz%3ROb>RCn0(MBqY&~gv?Sj1=RT&zZlDOJI5jjIR -{Vek1YNLzyl+l?*5|!#tq)DAQ9$3(l0Ln^6)2$1YeU^vqzH~Ea1)AFz;hIz8=Ik(U(AoQRXKjeo#AEs -4odkRFKfIL9Kz!{!PAha-(;)S4MDuU($cSAL(xfnCC$?6UA88c1o9#ghaq|QYt6 -Zi-hLMq0Zh|XGgqoqXkP>yoe$X@=Elg`CX|!NMjwmTAJb6&(r?|xO<$_-BaDZh43?R&N6){eSL -`UEH6i#T|kSuV+c9_BZD%3H{ve~CNiZzQRW2`WhShT5(A0S6xlkUIlQTFU8qqO=}#i_6eKb;kVHaXM$ -QUv?b{sM)Tb`U7);yc19g!T#VluCKDnNdHW>EL+c{5+2HNKB2m0}z>5~{h`rPA}A)|c3c`VYG^&9kOq{-Q5Qr&0FAY=j1vPz=UC_fUBHY4?qUh -ZS&)0YROcWs5@hxU{s%bLzfR`kMtsJ4#`ll+BZCw3$Y9wmr0Yz}`nmxKOKAh;08N_N8^AYPDyM!m@cw -F-azbGa%nKx;nE@~t`jgOmpbbcmOkbdf52Z(Nuonr2HU^LFn%AopgnSCm*)Dm(13VN8^~QOX`N6vZcq -kO;8#;^U4?LlOJSn{?p9BD(0Iy_nUNHgx(eWjx6OGOQI9|ljvUtw1zkLZ -3?aHV+_uQK1P0-1^nXj&XV$201L!&cuc3IaTK5#Z0-a76b$_xL_$&n@9}MwH+waC)Jg9@t>c{#4D}Bp -ier98`rhRH)erb9Bq7k$JzcybodVJY62&WiM#@LNZrHwfS)dyU9P1m;`8!_Xv)*8LdVH{*kfYlfjxe~ -NFYqqB$62J@Dqv0yBz;WuO_%NHI~>1UHi`h*C<4X`%p;7yOm2K!J_X})bC2V)$%FTQW_MWv=neB&|2)UM+ -bq@ZhR+Gff=7PFwT}WJE{qi@AI3wLQ43qmU38Oq~(0KV-@kT=gr^C`@ez_Vem1R4Xf{WI9OgYgFA -vwx=J9m?i?hzE08YoF$zCPoS0j9z4}R+PD9o^Hf5QAT7wGU9`CY9FMfFVGU;Se65wSJz47fRBF@jGvK -iWPq%ijT4|#|6wrKniGL{6G%T+Xyl0#9v_K!!3Ci8 -Lo>hYiN04B-veW$XRB%%-_gbVS+x$Twz4&Z0OeSDstFE(o -{Jq`;Et(;sRRXJWW}y!HBs5iOsnA_*HCqufcBax>B`ap=Hq`gDJygD8;V5#$%Sb=%zxG*^*N8L_+RilL!7MTK{CZ?dX5Z?>_pIJLwA -<^BZJLj6`oNg+~=ypMaHUEH5j%68>*LY_sM-DEJ8QrE{c4&x6($|&_RFg__pT$KuMryDTE3{5)X{?Pu -Lpk{fLQ*#y>$Sty|MWvW!PLahxZbjE@$#pZjXg8N5RbBY&eU~wnS%4a99Z+o^#%HWR^lto%fhsT0M0; -(Jb38C^gZ@tRoC_49I@-xt(!K4s?_en>d#o1Bw+H%$G4%oyY7VgTYAR-1VvHKt -jr4P})BCSx{427%^jMh)U!pi)7eTjZ^i?(!mt+H67nQ1d#rhk8v2CN>6F7Ld1`wtq#b*{~$D5Xvc~lmU#~&1VSom`had`jQ+NJqt}arWH`f6O>108Cb_` -VIz#q48ReuxVWJqK$!*5i@6{6B|F3Djbc{B1 -EMKZ^U0<8Bpqr*d}&Pcw`A&*pG0&;Mp#b`keqLU899p=bSYkFAN<)r-e3=XGAo;W{2}< ->3`PAGG&|J4PSl?#Fq3w(|0x=Kec*{SNc+PkDH_H=~6_v;XWbsMjA0SN8h*k5}!#^6P!`6$|fubI|{6 -z5kuR|KE9_+wcE4OJt1W@|K$ioj$h01f9KZ1zx~Pe@~rc@bPU7uKimx-O``3x}3u85WoJ(6Hh98$$xD -pgDD)oc9ro}9KH_mk34bei2>xhCxj<%?LGh1k5g=JSM%S%Ma1KK`4B}AEA>pv2jX{CK;~X|}SjXX89PZ+92Zt|l_&kT(Io!(O77jOaxQWC2II -QKcio-Gvi#W{dmj8SXGda|An8INahcO(6a~Q;-KZitW_c`8f4t+ej%I8hozk$O#4tH_*5{KJ4+`?fkh -vgg^Ih@B~3WxC=hI1Iip`1g)VaIO_wsI(N*v#Q^4x2b^;INLvT^w%bu$IGe4vpRN&*m_L!xRopR5#9g`>lnaO0FDd?8KSR@!hi^%8~6tS91y|c#{--JPj(*}$ -pAPC7V&w2#{;y&6FopiwgUVbo>0I~0US1v`Nse}#PLRe-wcBK_lGzDR}N19Ac2WH{sl&u@Tl2ly^Lwf!Itz_u936Y9_ -b@V0ANTe1NT9>MCM1o%lT&=KMs2N*w+kOIIFegjW)IJ67kZKDX;0RGtkBSy1!MFJdz`#1qt0(=;rrZ5 -@V3=ntgc!bJ`2f#bWK)(RK65wCQuyShwqIj+cf849_St9f`;sAGF5B&xBTL44GL%D!Q0$el!$_2at;6 -oEwKAQphB}3bxp8fzwB(t`g0p6F);vn3?afBC=8J&YB5|RkdamX_T;5>Mm0nY}Q1J5bIjR2RzBLHp&_ -})a8Pb0wmNvypE0DqgrXoc|9WI|3ue1wmsfNTtLwg8M*LElBlDBK2%j(G6j4)87w&;jr&fG=rS{>@Vf -xmnBTJRjhzT2|*B0I$^npF#X2fD3diem20cG*}OSe>lQ4-WLGt(pXxAzfK390sr3sTJ+4nOpkV$U?{? -PK^sif>CArvz$ZBV7C@2XJN`NnBK)*vA0bt-vmUbe*hh_t~;(=!n-Z`K3<9z_{SOEP3{wo32Enw|J_|$EX7x-@n*qR0W7Ad1JFq`pS5Wv!GRu=B3*_h4w5 -TMBYNe=WKJeweXEx@nf*$#L!z$LlR7Qo8^-kt|-0lWy{T?STe6~K@4VJ!*xaeyNVcpCxEC;|Qh{|tbO -jf7mpv;glh@;U&FSjxvQz%xs6u7vsn9Bv|HBH%Fqi%qPaMu48BjJ9%sJ66Fw3~>;qt!DY?0miO@c?0} -M0?aIju?ILpp`4ZLu@>e`c(#LoBS4vz(ai&3wUyC)1KzDt!RU<8uM*Z*IIaPvR?T -iLvgaKtv|KN4WgHb#>z05hI~dg9y;Q2sQm*D*f8AK*zre%nsSYw&0R-v#h8zoI?P9`aFw&9AMxJj8;Ja!(Rm2K^%mSzR2qau;eAqO8{SbiKRtoeVOr31wh| -d814_SXgBZ;#78*&4VXV+&eQ`O`X;ms@MwS*c(MU6132vf<4G;RFAuQ#Gy~js5bu8jdIId%!0HeVaCr -l(LmA@lK_5Y!T7aI7guDfK5WqQ&Y_6UM@NXR70`SvDmd|m3*M7k2FcRQ_57-!K0663`m}9Y?0FQpgc= -98Ft4}~*1J9QO{Ots*1Hy+shkghD{Qw)kg#H2?VeLs+*8`4l>q*8}2-BL`*wF*@J_TJ1xE!GM6qAcK0 -gV41<}C0>*a^=UfRi5xiTi=eKLCv!NB9iKcL59*U=D%!p#Yz3fp;0;TLJd}kJjro{=Xo52coqS1gkw35FrDKF3pkEv1gbcW@Oh3SJjii`XE~00=5fC};t1n -8j!?&O+$(M3I6~a}i}ghK8TUtcmg5Lzpa(yH^M -6RIn5=WH(mE^0e@Vd>;j1CngC)rux&X#h66(l7b`IQ%JJJ_ysUdZGJ1kj+k-#V)%D2Cf?Ms2K0ZtY1Kxy7YC=yReZXlDs)>3Tx_^55vuqsg>s)5zSpb4g)gA+cC2tfR`y -;a@q~v}qH0`st_1?%lgdU0ogd^wUpCXJ;qjD!XzT862(X@+WsUmirUM!R5=3Q0Ecx?8S2bi_4dh(Kd=T7naGZs-;9kBQ-NKQ^#zyL<%VRnGcUHWZPs5k5Y?Yse#Nq+&UVcR0f$8(}FEaNUjNf -=9KmW)hb9q7JPIW}0|cm!f>Kyt}1K -J)OHBo=|XJ3ctFb;$FLG%h~ie_AzB?11F-n>Ez`@ROO19T$(3*U|V#MDfy`JslTmFvbV^wruVYX)vWf -W+AX(j8BcAA7{Zde_A&dOypJk$AZbl!F6kz-ODEf3k-I7+~JXx6E@NG^2m5R*L0J6dDg%qmJ=B~?(lf -Sqkw0yhzpjIMtpM5YjZHa-G9aW*NEbo_V$+u<>EU*))_ol4Duc<5_kTPD?CyhZ~iD4o -sdQ;lulRP*)VL_FcKRZOXB0>$)rh>h)Sg*I-QQvZsyFH>lT0ra<3{ -q}gAbC29(ssu-n^M?*|LRf+qRAN?@J&kzxLW|bS``At+&XB`(7gJeiq4Vts;5%-FL~MLx;!*AACTL9z -9Av`sgEa;=~E^<(FTQv)>&jAO0eeufP79@mmJS -NdI?8UkB-rLHbiJ>92wGDUkjaJevvW{|f1!f%JPJ{ZUAN9MXRU>A!{aEs*{!q;GRcA9oF`e^i97ma=z(l3PcWsv@_kbWzqe-+Zd1 -L+S!dMI<_7m)rtNZ;y6KN5174mlJ;4u63hwm}a2A&0Laht^<`{4z!)zs(d$+ftFVZxqS-mqqgXQPGh; -0@9Cy^phd|EJ&XV>6bzJDoFnjq<;$1?|}4sA^j0Z{{^JCyQG(M3WP!W2uL3V>92wGBO(0_kbWMdUkd3 -rK>DX3{T@hv!X(WzHX{uCpDx}AHjUE{rdqbA9l4 -12^goN~G;k1s?LzGZSo -g@FOu+Wf@>62)LSQ;TpiRn|-7^=eX(2#-CdDZkIumnh-HCdH@V_KRfEo%T~&_BFizrOzd{*iht0mIYj -5Aq+-B|;XG0mD-@>AJMEbWQr;E)gJn_z0T+lyr5PCS9FAb4KBRo~%sYnWp*QB -Y_fyz?{(?$%O%GqP`1eI#6yTUVma#ng)x=zDu>A3komzp>wHO@okdm|4(TItj(M|jrwxF8=dnJicfHN -+~Wr%eV%a)zs}9~YnC<1X)`gTT}&z{`n=sj1HJtgI=j8Oed(p4S1InuWRR)Xws=QZdSmA||l}A<^ra5Gfr^{| -2RfQU|$&^ZVtkaN}9$rnZZvdGB<~i-BBDv`sCNq=)eBglx$Rm$DLLPneQS$iXkCUxiw^CW*)mLAo^57 -e9yg_A!kL#W$kAS@K637bs_wOf%4scdlW+&OaT(j~I7T_ -i7q`{?g3^K4ucyy)=b42;WKR8p^i7v0_PqI-%2i#x~|@f|W#Y#>X;56MRH3-Yq~9lXC=UDCq~F#}fgM -tIrQj)e5rLHZO(p9bk~h4f1y{a+ycqmcd;NPh^@JKuAE$|--!DgRgH6vCa2Mh=w5H(_OP+%Z_Q|&(_X4tUd!{UO26xRlTdqC9C;lm+raM0km*tl2{Ib=jk+(6&BV2BVH5HKh -*YFJF1pKr_{?x9r1jEIxV{bL}_wS58u288z;5$7kD`}%l#`d_P14Dj$8Fk+ye+!sCKf(D0q%e;rg;cu -XiC+6Qb+${uLenWkId}3jIMGcE^kAzT2G7#KQer#mu@S(ABaj|GP4ay%88yg)P8x>327YRSy^BWaKon -(!Ikcp^-bLUTQs!^Fs9E^_}`v)`q5ZWBbrcsnvoM*4%CmliXa(O&?ssD}NKcg7N`r?-Vu)%`|BT?}|6 -M@(G`1rugLa(_*bKYnI9A*l7Y(S#;zw77D^Y#CK?VWpY)K!+p8yOdCs&1bDX0w0nsiLyz|b -clO|2-dH?4Kk+%m`Ksz$Go>MibE`|g## -5|SHlg26FxUxC?1X-c!#=h%6pNiobJ4Xy3klyU~^X`}dp2V88|-Z|Dg;g0@wsMG_B)#C#(1z=tA -Dwuv;{EYf(B$P+t6@{fyLxOlNxb>(+Aq})aSh7B90*Q-~rna1!rYA@l3!2rGNIr|D8cmeG^hWCdK9Ws -;0>^b`ly~qJrpqu@N$KJn-#O)P{-6PU^mq?3`M4E0_3|mF+RSfmt6^VF9B&qte+i -7`W=gsH|dVsuiKP2+devuBJ>HdR3dC+{P$o+~Tb)U$^D3{fO5JUSSw -N-V6fBTD32%Q;kbPHvg}?vPZo~qEVBp4$ZLaQ4G}%R5qa_}k;jjSJOYN#9eq}riMIOuVNjp3N%c1b^| -{gdpiZmBE$_bt8~T;cQyzHWfe5wd+0c)igyKN%k?T+#77MbD93B2>g}gZ;T71LW$Q$Wx4F<+D--Iwj@pG3xgTc|~#@HmasduSO`X9wmXHC$y>KI!d{SgrnW%92+9zXvJexSej1Ir8af#((j^sC*I -O|SP6|Hx=rG@^}o6~jEmz(`R0`Ltr_p>+J|SP+BNXE0cO#wOkOf$sZzBKLqn_dk5C>i>3gnNP~2U+uk --f7P`d;vsa-;;>l2fIp~6wxAz7xpHhfDSWZDDBF}xN7)nIC9}ns?HmUQ$Yx)cZtIu -Gt`ixC#u+CiO$58swGyIFjS!ELpc8208Pe&{k#_BOGW%;O9Qusn^S(2d`hPROmXHUw$OF<0JDu!Ms6o -X5jJ3IQ^t~h9uqCO7#XKR!0Rt$C5m1~y_{Tkm-Y1XV+gvKb@(2rf@h|GY2n8#w_HGHj&%XkleOU%G{C -#$8b%4{ji6hnbxSgaV<&l)7>&wN`YWAm-zOi`XhS$%e5jJr3KPe1m;%73d?t?I)IJJDC@hBj!oSg`%r -d-59WCcX;a#@H|}O4cfdm6@$%>8REcPz<5^{5Q2p(^J~Xl!5JKVp0bg->-v==@TcDhxL?0`-%((cZ|{ -4i7_goU+uk-f2Ah}x}l3BG(k7|0Ns`+*m!q*jQ<5A^8en%w(_oGSfdzLj8+V)3+OW#ybgw04u)x97|> -oO^j8dh<0P}sg9ZZwo7Bn`V>H`VzWie|@L|Le%*Bfri{I}T;vzfUJgH1ie*XDqDS9J8Hji&1>&Gev)r -Gee!&{C%W0UfRwUv28+RDtd7@3h8D^ru($z;Xwl42OA7)C1wMre%j=i>715A>@n82MMZ&IZd%FTEszK -)~Rs3J!~fb4zx=EnBi%$R@?GPB9pLRt(rAtIxS=ljaVIk=N5=aapJ@>452tG!}9abSLEpC*|Kd)2iZ72O4d30yxgVF3mgn{91MR|Im#K>P9`M -5uFOnvC13!wicGf80h -mWjy{KsO5-2shxZ*jc7zYIWXTc}dlAb_nlwp<4CdO(4j+R%9JTaufP2AOJjG4h04PM-S`G<6|oTUDER;becrWbm|VG}`G#+Jn -LgVXW0s@O(^MC3MF0Br>wlxM&Yvv(jT$v--nVbx)INRse5ZEQ@WJc#%43f`Cf&MqlUH7OMP7UDHJLGE -hM|Z29(uumFThV&9ON)yz@8$9_(Im$Iyp}Eyb1jmWygZy*J6y}!59O5#wN|qcm(oqn14k_M^Ad>kw?Z -NKPv0fHSce>a^=c^>agg0l97=isuRNVhaY~}#0cBAZ8P!!?a&I3tXx@sfDhRt&mpdZ7w7{zZS-0B;MV -6QA^QB$>iNWhbE+adEnBvnF>BT=QwL#fN0%ilD@)?z7-Qg{{i8d`>R0>8!JVt*;)M&v%I_-IA7;*+DcRZC=cZ4eF5||HyU?>|Pf1QrHv6u5r -I95tpcmkTHgJSup$35;M(**^=nC}+@DQ77BpANA{)vf<q`HB@QrjkS44E@L^6Ir -6(%xlm^&3V|cVMc#Dbm$=-shZ99OcQD)eU<@j<5&F74{h3+4_dkM7yo3{R>0C;-1pHdG -iR}!))~V-FM$L7}y``hN>S1LqbA=bm`K?$ku`d3k?12HG9ru=td8)KfF$Ciu@33qX*~!I>B|Z!Akp8y --s#mSXiv`-Me+`))G&!=Toby^s}xz{;~VYBwvIc<*jIJ!Cl2hAC%vs@@8ZJAH^Qqb8I~kJIbD7|CcXc -E`^1K#s|Lj)?4O0_FDI;L~YwM>LW)f?OXJ<37%lzqpJNI6TcDvVEFAW^Qh-IUihn9&FHyY+*aWVrkd-bkR-9`!DE+7S%5!|LVW9ZT?jm7F+YQ{X2NWYw*G -LM4)90#PWG6blf8!zw!RA=c#h4-)?&vrr!ajD#eA!2H}oUBmC1QU^6s`pyl?9k>@ -ygVb(N#58Y7e_ukfq?b&F|d@bj7f`F}iFgZmzC$BSu{D)RL<)BSswYcw){5kNW5qA8R_t8 -qU#ki;guyuJ2km%Q*dV=d?S8|PTZImS50G0stf#~K{3|K3ix=OzaC_tbLc?Vd_v -Me2PzKh$|KBwyq?9hJ~}U`2zq!Zh}cRG;5DF){IRjrZf!=5rf1x1AAl|A)sVr(FBXQjy`uL^|#b_SmQ -e(^I(rJ&~tB5!w5Lp`|h!!1}w}Z@;~T=5~Wsr%SPC8gpJyd;6{0rN66PI-v2nS7X}&8UynkhWm6zXuN -Tz-`BxD8MRRQe65{Y?x*KOc6~1rv(>DBx{~#OuQuGLYnHnE>Goa|TR(SV{;N9Asm(1`yZH_mre{jOkv -8$tVm~`CQuITWdcAe9)8odCOPDcZMm#hSJCQ%&AF=EBB5XCWEO83&@tD!8SOp5VVu -9X}v%j*mBW%p9i%`1~o6XHN$ErrnMO`@Z)60k=HTAEM6~t;f%*Ju9uWU%i^zs<Oi5nH@ -|mk$Nt5MECmiUg;lq50S@Mr$d0eApU$kWc~ZixS+nBZbg(vZ&XGaCjhZU`1!}^pUQfGW&+z0Wks(S;o87@)8#+P1)4e`%# -mJE(Q^$-MGr-+@g$C*->;;4RI=!X>r{71PiFzpVNRNr$#(1Z{G^%%SzBVq&&|u`T=vwbPbp6m?aA*%0 -{%@WTWBOh6il}K)8@KXEU7Y?3y$RFfa@HT+=Z|Kshg|a5=A-NRPfRvx(ximBbLYmRi{$&n=ir7G_JHF -aUy|t?(yyYf>UV0}^PTZT-hEl+%}rtty})ltruQ+Ayw`F0NWoRFCe#LPq01g#rcxYWyh -;sO`m}J^irq3zQCmu^qD3*eX=nQ4GbfXy6)3DzxeTb{kQoUdPvOg?z6aickI)RdPc=t-ZDKFdUe@KL# -ESfbd6uwKh~c-d2+%VZ@dvtZ-{stI&5BT?;C^;_5ypvdkp%wg)dywiSp#pC2Qr{e`4%Wqei7pm@pxQe -V96Rs0RaQ*PqInul8P($D!BcaZct_EMKnw*X!SA*N=~nKN=GgW9qK-rjwGAU2u1V?6O=Ah@FfBu8W$VeGDaGD8;3!Cg_UIg~fnkK21I_43^JT= -^ILb^lpgeR{9U!h^};K63!u?MzCVr9VAkgYtZpSY5ooZL@kIbCBUzSvF9f1{kL4tu40K -dpcN{_oS{p+^7YlTQk~pueVmxvXEnzFRr8_lVe|`l?I1pD*gQ=4*b=e^+d9gSE~2w#Lsji0#;KYPrZD -wRHL#=!d(H01vPWoChuJ1$G;o37s1^Zk+0=T93l$|CA|H67ur$;%&|ipP`{&zkbrNVMBTJ(MJt!w(e* -9LwpXovG#)d5|=Mup63bX3RM}#{$YQ{j~_pP>rs=(=VNo|Ej;tgGp5IkUhr84dtht4#LM(lh}#vz+-j -^{wti?0%UzSe9}O8Y#MlPzRkd|R_{Cm>8=G8QT)e27Yn%01M{SL<|K-tPW8h`WmdU(%^GvN6+eppH_7 -rb&ZL>b>SpSPGf!D_1=$`FMLIW~JkAwQt>eZ|5eS$Z;b{YPv)IhN_*gp8Ybm>y$@09MvBu}t@a4ggy{&mr!Mc3J#Kp=2NuQ4b;Ki|BrpZS%~=j)W4o4cW)puq6c`Y`ycI=$C@KK-=Kn>SNuy{y+bqVjh -hJtQ|qUJEq`>2@%9A5@IS*K>}UORcu&^I2q?7|zBsR;RFK&wd-snTSvKXjt>W2iL{N9(*usp=&lLa>s -%Rr-C`~>K}gLhA-$`g>6EQpw)iAqiFpCnLa2O8}@c`C-O(~S8@e%l}OE%W+`3tTFJ?w9r|D=f;My4@b7<$*Qb2CZ8mBCvGQiAa@#__>ftn+hLK#x-WC) -%rWsG_lVF}gO|ulXe?f|d8vu}NB1s^xdFS9{ZqeS>=r#a?jNwel(8(ct(-hkZ1$5J>Mu!V{qvUp$R4& -HIfa)`Jn@9tQ|vUnJha6t%f~%r?*E*Z@v!W8=S|LEY0uxVVS|a)?EN^{ZDKC?fjxE8!ee~7TmJdH<-f -friEH5}Ss#Byp1`%S%j)~bxX;H<^zdJFc*bw7{mK&=8MIFP(%S9LC&SI}to@7g$ -#C;4YqdPl3F+yHDbFX549`eOPEBtUF>FX`tMuOe6H^k>8>J-m9x^C>P~V}AdJjrzm5`p&c=&x0;VB8J -NqrO3?SJ)b6LDYT$cVQ8`s?uU=%GV~rJMi%S;eb04W6fGrYH6uHY922Nawk}G9+>EFkL0FPuC$y!;_K -|`z5BAz3G1Y!3;f>|D)L@ad={Kcrt(6L?onlN*z9EVB(O7@L@^qdh^d4+eGwDNKQ|TXdB(6f|IW;-lX -EyqnlhuYjl$`(E2>OiQUh(UE6hS7Z=y*(T95Ua31{g`K^1-{}boSy=%OiyxYA+-V*OwZ=^5EhisF;EY -4k%yFGV*Zb@!w?j3nyc@6TS@;c`A$m^e%kvB1KX5QkwHF?|f_UD!4mFDpSkDsEnxwUh%mQ2f^nV*}#I -DcvWn*2@q+w+U^_vatUFUdcfUz+dn-{G(A5A%on8~7vrQT|weM}Jp;5C3!i{{A$7hCjU)1T{K ->|g3%`aOX=0<{BSf$%_sKx7~)5F6+i=o;t|crMUCkQT@YWCbP$rUhmOas!J4O9N{ -Hn*!SdMS=Z+BY~2@*+6N)Q*cK??Sim^@PY;fkp)o&u>~Cq))ee7C@lypj4I41oK`rqFt>1V;nKoQg^D -G%hNp`j(!3eoEbm0`OmD7tv3IH0?$>_r5#6&=ug7+ehRW%#mu6MfTsGk -q0BG5;L@9RGjge*sWS0|XQR000O8B@~!Ww@z`2JU;*cA?W}B8vp_nn1 -jsW*-+>SGH`khqlNs)syCqt6mq?rL2?FkF*JzcAC%+Sv;@gx1XA-l;4Z$`Z_PK<wcvKu`ATx~g}BU^AH4>Gdq#4ay2Sa+lRq4ax_j;IJw?z>CXyT -}`q^q0v05uWediY3Q`sY;OL3Xz%NEzTx22-qcw-#a=!IJ2?o8+3YbiVGo&ui_hHc7EZV#n26cL$4zdw(+E?y4Kn-}3=N>1^hqy<@NB>-+mqc0l37 -~c!hrHW2~V2=&+=!_p3%R@STINfE)#GW62W!WF6t6qO>>g4Y5hp@6qu5V$ST>xyaw4r!kj>&#MkQF=S -3ka2DjN`6FjTt&xXOX;-+~zHfuGGF%b~AzKw=@k$}{eyiJ&Sz119NaPdrQ8$&ChAmCK>wT|+PcB^N~t)o1Z_T`lH -KG#Kw(SVaUJ;zaR%Jd3k(8Vz>4vRMJ(kw~hL)l`}Td!0T41s_OiMd6}^!GuK{=n2q*>M9^n9S$_0O=g -1mXrN)?3K)DO9AJ3D^YB@?>xe-Q8hJ@FSmUhS;CT}U&jSw)@lzoZ1V65`d67=C=;JU5!@(Mad$nt#4A -Zl1pv3s2`TYI{=6fG4@uPS|ap>e`QQi`tR3GV|kI3v|61ABF0jQ-@G8m15k8V5oxr7D#)_FrCZbPVgK -u|y9bUsJEsXh+8h1Me(w{0_q{NQBJ1!(_tuxNpNGxNhF++4=V@E_zgF#uwEuHYUoMU46P6ymrOv7bE1 -XJHtlDicxbZbRN#s#s_$dMbNp0Wf;>(Vh)L(kwxsclhH1+nq-P;QHn^pF>LxNaLa+6@&!wMhAozD{gP -t!P&5dFHU!_^wqgqtbZnthf(MgqeG(uV#W3MV_=Idqlr(TiNSiZ%NQIWDJ&N^S(7&_cyKkPmxy3kt$k -g!Rx=u0ioiu6(x -~Cs5p{x3j(OJCm+BAmMQ+Ea{VD_=c;HeF>wrNhjy=SGF=1oi -Gd@^?(Zp$9pI&B1Z(JY4VcUj$#i*FPx>Rfui1mY_e?Xk9^=6b{NRSxZj7r>OS3}Yz|J`Z-*uwt|&n6O -^5_%_ypn_pi+yN%M2*0!Sx1CH*+ -yzl!}YYMNj00Lij#5HGuAy_VobfGArKYSJ%s4vRlnLPdG;%-ADcnmhA5amoE-dKg$_T+6Ur0ydsmSqr -Zk|pLIdUL+pmtbG{xCT8A0KJMF%u}LG;4^dDARF^r8Ti+Y31VKb*XiPRe1>fE|2;&Y!GlZGs{>FLN*_ ->cupRX%FIZUTwYJdHv^CL;m{dXFH$868N;rnliM(q{V&u*zmd&bYyskYeHQEe-)3x7K~od+*FHV%EYr -^WYXE)kPEDvX9&kPC{Y_XlN(q~sK;$wW^GYT25Sw~L5HIpDu>J~{&R*Kw2OIx?zk(U#UnC?YyQGCM_<}>NO;nGjMr)&r%UH?7W2jIhf_yes?@~SKd -v**Q*-Rv9Qa{5e^xJgd?5H)!`#stO!T2PelIb9)_(3!66NbN|FO6$|<$kCqe`CWfLg?C^oyc&ug#aDIqpXP(Y&k}XGqwbT`V)@w&-jD%@GCwWA9Fgk -;?IVkw${{Smuh3RF6*<2E>_Jjc4J+PscZj%`YCv%f0BmBHaT?;Q4ePdjAyeX=Oc$Z5b8I$9+R_k}CdY -b3q&Nw9yx;C*@@K5qovNERIi=&Ir!i*fgUf`SC*JN}z@qW?mu17bx`&Y}oGjXIcY5{~$vp~gndNKIfr -KQf_5+F*c@Gy=tas1Nz5Zlog&ML?Z#L`#!Q!T!OOL;kL-3f;yF(40Hx*tf7c1XvP9y0S)8r2wOb8dQ^ -&(~}!1l6l&K9Z4|ptFfb9f++*6`7?@56;nXF?!;>IY`V3*)nvd=VjXF3y3qlU$fEF%+HtL#7|X;^1x9 -FF+kC~x#F_ARb!l|?VZ0W-?ObWtmOfEvK(Wxc$Vz_OO%nnrsG*T<6#T;eOr+ms+F)GL;_51Y7*aXp93 -p*3rg@#gYp5vkCC0PI3qf_bA@KCFN$@Fxq^PxsAz7;g7NY<+s{vVE;%5pm*#Oa1H6UU6tWAM$f}A3jp -^iPQ&Pd4Kb&tu^klsb1X29RoUB-bRWm`Xzw$cXouo9y~z&mO5F^T8ZJTmYb67Z+2jj}6t&pImh_es{L -j*SSlejbf$jlEX&Y;5%Ef+V_V=OsdezY*Eq)? -?KIsTvT_Yc2M-o5#7xc7GdBuQYkDJL1JYjf88ibsrdEUFTN=E^LaqCX*R0L0`bg@+Vjg#6jGi_4%$7v -%(_G-g?f+X5+tWX4_V%5hYo_y;I@ZCG87PJ_S0QyvHET#>fu79#)PG_CLRG9-x_g&zDvuDkLB(;C)-n7{}}W_@F~B5!h7KyjcVxf7~FL5=+o0b2%1iqidz -Lcz4z6ohFto3}%$vL`UoHLxDVe6d64{V-gHe)@bjWCqDd)o89QWoBKi&%BC?=1e( -7st&)|e)Z -;2pJ203zOJ`kIkmH3q2%K?Mq0aopDEQRSs(?L3Oe3gL$n^n(>3EBN0wx?SkI}u@YKGc%d$skS;XpRL! -646IRc%qir4$zV-={~1!{7=y0hRB|baIPgsmQL=$sB3LmtAtxL4@jc<|dsJN}ZYI0UY@~iOrU5j5p3CV7wonf -#u=+u1TR(>B%=EJ~XSi!VXRlxTlRX}wlv}iS%$LgIk%C6=mieJrD*$sY7Y~6*##~fNu8~akE87$V*1D -zxWy!Uy78%U>ovg9qz8$S17(+h*qGEIsKUY4gSVo(z>3ZY~DuC9M-EJJsdqyl<1;xJ6)EPzrnN&Z&=B -oMYy@6uwC31H0cP;cO_GzPnCRV}aNnjF6tw{Ozx80~44I9YM!w1pD^kum3jZ;ijNp?69Ki+?TN{#OcP -YQIMquf^bofMWDr0R>|H=$j)@Q8SR=R2r*^of90cPU(j6PN%?j%s|ntX=#d)DTBM1>)B!uH2@kOHYJt -y=9QIPlJ#|S4EqCEpEtXL+w|H)qg6+n;g?rMdhJnTBpZ*PHx~rB(cL~;Rcp70rdf+Jp35-zH*)M^8rn -`|ZG6=oLW{-MSz4xGNDwFDiL7Z}OM@w-o`J?2?4h2qQ&cwnN?-ttMPxSjzTS=3GkEA -g1zAQn@B#^ip=>NxN!eD@&$FJ&DQDL+Q4IDlJ&EPPrn!9!vdXve^pRXJ@&uRfCq!h{=%Qi!BbePwwMz -M^d7lohbo>P0UQzz2IZDL|I-sj?|5wsVkck5P5`6U-}tIrc6AX_B`|5}_CaJqyf5Z9?J07@wil0{?XL -nVd4P(Bf1?%a0FgA=f6!teP$g^=n#9;Hx1E2(qxDsagCwRCYDCB%hHXqv-%if+Ad^3*8w8lcLe>9Wmq -Jm4EIFA#8|kUTj8Pf00n#Ffi5PBoSCc`_!^39!ml^i_az$gtvGKDM`j|1zaFjv@ZAeuoSNuz$LI2wCw -i5KXlATIZ#EkLMY#ayir8qaO47@gHZQXO{z3n`{;nV%hGhuSOJ|mX#9b#$ohC&!I -;odkZTM+Tu@Xzf}JdCbXoA=44vQ^}FEX2`wTGR5Tl4F9- -Z=gx4J(3!_@OF4^sYqJL2XEAmb%RMC9j_%mh)Z=?ziY+5!BAywH8^I_-TenAyGsf=f3k3rvkvGbHv_Y>s;7}IV)f@((r%Pr0Z>B8S}bsaB&d0SY3y$oD -AgnrP)b@2GtJ0D;7O{02r^h3I;awNxL9U^g9vJr5qrc{LuH13Ck8H0T*GVxQKmHmQ|~MTVVQIIG`}aq -0BfT(6>^FI#NBq~iP&FiYqVlu>T?O0_zz$agVbzNDNX1 -4(V!SP@f(4YF6d-y=J5 -1s8+U_PuC`Zlrd}PxgIcY5yZ98$j7K#p=5{fK%Xp6%mqF|+IC4Bgi%urtpzEH0OO!capD3fabC_E)JS --||HeJfBl`3qTfBW&25Ihcq8R$lQ%SqPr?CJnL4{(6lqNZ*@p~n8FUBC+aZLtwb> -{PNaR97zjyq!^*~=fR5_EOg6?Ix8m?CJC`k3*jL$=}MgG#pjQ+uJG9y9Bg6x1Rf?|1oy1pH3 -DFjrwB8UM2afm{iQWLeou)GLHL?%K%qus`Nafn7|lKG0NPVz(8KoT;>R(b9W)*P>DtW1{=3T@Gfe1G5 -{G(7ZdhA=TEY^fqC9Oht;uhxNvfktvvuPFNUNsNVVr4<(PX@G;amx)lI2JC6U$P#m{PPe>ZMc14>rYI -8h5o~s+2{luGS)`mgtO-Ozllubu$1R*#u#*66yY)1`4)vSaU?=BmLrvRSSIjE0JLk{2PtM@4|*;VTCvi>8U?Hg*<)mI#Q*mSYyOrBm&bSon200(FK^h0h --x@cXq1JKKpDK>{Ne-4-rA}mo}5VMv92iv9&yN3JTj;<_$6IHhTr{pX7Qq&Dzn6OaXZf8#a*LVz!K$n -y<|@3RQB}uR>vydrxmIXFtGbc8g7U>-U;@3R&Ht^jUhBk03o{3L{0 -LQb>JjJLiF->kYf+rc<=50-go=oByZoGzBO9V>Pa5f#&4*|GbGb*7`%94;xiy9n?e((K$leux5Z{MRF -7i!Y~jah#kAK;vs!c+R+16}9_xiHs2-*j(`cGqF0P~S1d$?JQ+b_n`zc7kbr$whwXn{ey$EOw|>Do;)yyGjYYpn2tvS -6*YHqEZ^K}Z50>A&39DU~!&5g9>B*xr`ppf*$gYabUf2>ZEi)?6=nSnDzTtxEaeWO%NIj;7Mn -uZa?Y>le_a&?ZpGOYSUG8w>3|2DBNtDTt0j8ERDtt^FM)LB}~?LIKA@>=ki34sdZwm$A0M$TXjWdrQ?bZAOmY -OLTfp$m>10_xy5kBTj*Oa+%}Q3BK`z=&u?k+A1T+SERFfd&CW=uP>C12`k=#)F}HIh7iQ7|*LTFPQVn -EgICNoGs!|o2mdl5s?EN$TF>f1E+~5!_djtl_2T-2(|+~(kKlNM8LOrHP&j0>@LRA#TAl-)A}Zfj)&R -+)X;G~XI&!8YU*h~W?9r=$PLOk9Jo+qBm_VkinMlkaAZgG4I!7!#evY)VlxMh3`?K;W6gP2a-V{?_9- -lG)utqmkPLm2r;0d8$#UL^EIg&TT>~%FVIwR4ie8H7t&xCjzNB_ABnAIvDfpEY>7o#)unAi(b_5`{)6 -f~}%^PtibvCa>{|EhPr#0x|=Nd%=5vI6Hiq01t<|WB9)Ctma@@~mT!+59>$iP1P*agjCX`3)K9c4jW7&>xkbgYDw;qwZ!igwFFzqN`i=8SDd9cNzj~3@Tjv25#lE> -srC=gPW~r3aS|;&h{ixK>fRVJ`dqQ;2TUJj!1?sMaA)ATwaB&TCaZl -lh-8_Ool(IQ-U7(bB(*!CJBXi*f>(X}eg9PYuA=eM4#{O!r -;1!YfT;9UqbR9e_}05O_J=s{|ClFh?t`?_*-61t9!6Xq1d~ly*KaP93Ox4=Ijk31n^|ycRq -YfCn52${SY6N440d4n#GL69qAxIhaGP<}+%-?p<0pQTQhceFYO3 -H%>#}3WaHFkb45!(&S|BVA6>pU)72l!VQLXPYe)*%pt016iD_?YgySX!lijcuAAUad`;#m3CZL*`=fiw>e<%q82nd#QI*R0dp(92f*M@4k)BAhKr8uPL1c -{fNLS`x&P{<00lD=SD*$rjFiG;lEP106kby2$v=Bl#Cq2d8XfQwjWR=|K#njB>TfGfa)Q(mOJ# -AtFTEv_qIfSVZ>!AMV$m2fjQ1U;q-{P9OnPJaARilk|ck@&zwA}xcGFX7hKRw%^_z(${wOjw6poYTt5&;oT?$dFD<8+*otVdUM^?wlp2(mPd2CZMmwfV#qE>4dqSf`YS8sP}U -3DR>D*Uj`Cqc^aGdpeR;8(oSKM(-V^~iM+(yp1i~j=cUkFX^ia6FgNJ>6JYho$ZUyXPAKe{ulb&Xq4o -5t;a4P}xt8Vz650?yN2dsVkxJE9P6lA0mW&JVZO7_}m_8I&wUcFsI?i0H(~(vCf*@`siM*z;i7UU71x -9no(_{Jy!7p~I*RL74dbA|}f!HMxr{^2IN)0^|jmo0!=JYV~G2`saK?v}%X;{%Pl31&*F^cB+=s&M-G ---N0@YC&I2-j@xoF270czkm7-}`%K$>E##`^lTbZxWI2%ybuo(Ky}ud1vdtl8cwoINrLzpUH)K_yX+q -Eq9a6|LK6mbd?nw^aq2Dpbod@kJ0(`JpS^0`ek>o6Y)$U59~zp3nfoLR|q*zeX9FDXHby -GeECc(RO9TnMw+}-9S91dvI^93d*Rs!loATP8zu -pzk3-dzVnK6l$d-jWAkyZ&hJ*Y%-kou@L?q0v{K}v+DTo*sp_&Z72slonD>R^-g{qkukF!j^9B0iWoo -7ysIy}D&hk@A_w?FtPsXvtR&OdLu?vxiD$Z^TZ6vfcV{&lLnsWub6dnS+Q%{s{1S5LtR4Au8f2Rbs=% -mp2pvNpoHH{p|NGz3zSg@ssTrUIH*{Tu%0W0jzYo+^b<1Ztj8i0B -eSr5D;~&nO0ahIRDIDml8XY?Xc9Dr0qq#Ld-vk)kkhhP)EQ2XIWeo;2AUye^n9Z7};-Uhcm*3*EEWVE -6#W7pC%@#U6*cmTM?cyoGSuo#)7S&<@lu~*G;Z;=y(W`i8z`fq(A=o9|%E5t7H&Xs(Q+c5*<0hpAgUo -w9j(!JCcu*8uA{jO|zb%`V_Ys|k&ztj*V&E9G-_<9z8R_PeUKW`IXNa!=c6gz?S20T;-XF2Z8rphH@4 -z&oEJW5)*d4Y~rNz_kHwebD*zQwsM4|4tRtU9_7a?aU5ioRBN<5Mqz2OUYJL}g`*OFSB>mGFQlzzg7l8!n#6hUGRMwZi=nP3w -7nIj2TmKWWuYKZMr@Sc;@oLU}T$<4@1~Mb1+#`67nJ!*LQG!=;(ms@6Xw)i;1j|K>y0F<;MC}=d@us{ -DHJH)WzS28@F&zuMbGHNuRcCCYnF%a6b -PQL~z4bs>V9EqcJ1Uq<*P)H-^_6f8^Zgbi4cA0jUemlSE5Vv!C_)-!8#Nta|^rp7vcU -@%XYy@}f}lItjmj%$Y2A3>t56Zqc(e|5{AWLZwDgXDVN2qM8a4};8W!~@@;mvx9{)o -fe6#BDNJ=#0Ji6k^L$(AU=3KOx|KzG8BH4PyuSeWyxE5TM4_12Kqkb&Bx?(>?rDAL)FQ4Zt`?4ZaHak -Y%<0)PiTkWLLY|I@W*zcMU-$NcOK&}IR&=C;@;iG($oBO|#zpL*$H9z<=yWA6lFvZ-Kxe#=6clpTs+a -i<(^9W*#h|2vQ2r1ED|O~R3Sz?HS%Q`#wCGao@ -aQLC^mhM{%b5YJ?{>zIbv~Ef&rF!5AtLzE{k&#MU4W|2&CnZlbmrga9LfMUUw6Dx-s78Q-BkJ`=5>At -1Ptvoz7zpLqu?G`(UW1)1FEXUm#`lR{j1tp7&`;78IDPw)`qS>WA>HFhkd?QF;#?@)dx^ZYGJu~#mNG -N>!bkdd}*jC7Fg9DkWz-eo13b%Us{Uo85!WGh-)YJEA5y(RTAuDYX{eR9MX;DhHA8JV;=gw@`ZBZM+? -%l+QW}=zL>eY7m^tjZ$s)vv`-6IBmYWu64t9qrI|MTf%C?l~^6zQ38$z2B-1XTUBQm@7o-v1S@qS6X4KYzLGpX -pM;N;wftJ5t`Q+aDv+hxVsFqVVV1Z8bb*qXba|w(=_*cH~8BPCkw)PPLGgVVV2U@*1;()`x+*BPA8Io%21wF)SRPn2kK&(?%aH&$VLUgw&nz_oSruy<;>_ -BTIa-vs#j!Jtx;F;tPlb{Y}>=BC!7xb|B6|qwD?yIv6H+YJghV<&;+PaJ0&m!qh&F$Qnq?Yj(VpCO{a -Y?z4;z84ENylL5kURX=DyT{|IpR$#CZVFB8Vnm6ozbI>aUORd7!7f2)*t2RVSb#ac5f41ze0DYz8JL}>h;>O>X77Ow;nxqhYN6!WuBX1nEM038w}W=Kx1pQ&`E5SWrg<7y_4PLX+CEF`pVIRA>pxRC9DphwB`~}ir<%<{Wd*AsQ9-BOEH0< -nLqZ3GXsb@YuCi${ce63=is~L+h?ZVQK+H$_ELIP%>vVo&t`yzNjt~O%$Wrl$4mjh*p^iDFU%-}`-^q -PF&D8x=GxSb@>4!1Gw0R3f&B={V##jgaGX^E>TRUaH*DGzm3|@|cSC-fT(n^NZbk(k(d%y)bZl9_p!< ->5l)OV^Z9_>YHGr~_am<%vuSNG~xF>;E?!d{K5D=VBRl9YZq0XB-NaFg -!?=!QpOq1Szbow!=d`AV0q5KllR*s2aarC-`EYKN_R=jX{J$@Aqv%&yBS(`bQhSM>VcZ-ftu<;bh@|q -`}@u_L+`l7od;LJk64rg!}*L12Gcw5fuP -G(LAkoe%7U|X7C4e4!gD6bKAMzBZ^jwJng#8AS+b0OsTKkp`?GzHBf_Q_;aM$OR~cWA)>b{r?E$fJL! -h?Gt%yQIIWyaE!}z&PIF#I{u=xe+TN(i#8QWUk3n>w_On1@X*UO(@%kT6rKFm*{DC5605qem>vqyP1)gr^_(c8;_(Pg|YX>Iirfg-Ji*It_N<(!n9pGAA>+B=~8Mw1hdM_B78A -_EvOOtEvnM)nrk-#V=Eri6#`Tc+lN9JHEzBTLu4Is;lXjkv(aF(#t#VLhlbXOOr1Fwv*FG|-*LEUM9S#g_#BavgrIn9+=RwxFb-kq3pJ-9Mvr=Ra%t&M9`2?uWxj4leusbF9vzsPhBkuYy@Z8dSZ9Mww248+@*0tH`4oX1-@lNm}=mvXB&7MK99VqJR&wCnt -{^>M${v4IvyJcPuqzda!$rLZG!Z;LWQu)&)QY0Va%-rE**S_i7&C!uUwU0Jmez{Bkb>!J3+ICIp$A34 -?%3E8z^xrbtb~!yzGBj;{MbaUB{&x5I``zcKumI4TYq~&6b#dU?Ia%f(+CO`Rl -mTOtp@aeFpRC -X>Y5+l82SG>#&+A?27Vt@fo&tLG?8S>`!3@)t$s<~60iweQ(DdD+#`mpovlf;*9e*E=v% -I0B@)Td6p>kc{f}tJ$LYE?izlBdnPae0khf9p2^IV(?&L=mCdI;Dmmeg*rp?4~I4Q@Mu?Pu1+j2N#RW -zkm-gu$mnt6f#E6GN?*X|kssHAVJz<05z5zjoQ26(i+(S4jsg*DOjjv&+J38>EDXZud -|BEh}kVMtRL*d&_dq%`lIp39ZB -$Jqsru78K%wE>K+pQGAOFPVS(tAYQNZ`MFhGG6%ULJe~;WoSh<1YTQ1h4)6J|#puqhiD5Uq35WOHKI(?WRh{lcT(hKTuZJZ_ -GMN%iUXjc#W-i67S9y1@`Ga~GnvC655#x01*%2s%x#&Qp3S5%X%_&mpb-aIUX;o~nLfJIh -hgK(AL06XSLK;JlGKq#S`BXFI$~>g*%!OE*Qlw|{a5O2q&BaB#B!jZ> -rlMjbDl!=uCf6O5oSR|qn8Y!Z3!bmgh29aj{E)nFDJtao$_qsEo`IZBR24=V`BnB;#3GCh)TZyC~#$tUzWBMtkw^h^1b#f} -QoGbw#0uJqEc)dAhP&CF9$%V~B3tp$?{joFBILjgjiu -Q>%Z(o!Zfu^jGM86_Cq}9jPa#tw(0`htwzN7Ym|j9Iu>D6Z@uORF_@Qhgm~e#8fOnaK)1X`TyTl%#cG -MV<`xrb{i_mnm(LqI{8V>{RmR1SwkPkU;a!dKxF*SNRX%_^II_Si!rwoA;l2e{V-f@l5{Gpl&DKt*y(uc(7E$t7DkAVrn+isS-ty+GaAt~yyW@h!4^A3N%0%54bEY=Z#p1^+iS@k|K|gV3t(%1m%+y3!aDF -&>M*`DINu^OO)NBR+OpO5e_U!#T8EL}#pTu#FhsU1-jH2aZJs>zb -VIuQ?L6N~wzyZ+-;){|lb7H6p(~KfSk!wzg5t_ItEcx6SWh2$85gQadz(YXwZ9_-m%NrPI%9=rTIo6V -9_!i2t%SB#HiG?$ig(QtJ9f^P?F~MP`7W0-kU29NVWRHMWa-lV?d#zn-#YM_2pM%WIa@rUf?Fc22#4a -G4Kh>$8!oW=y^$MO2yQONk<7MF{|NHxQTPMeRA|Di+w&X8BC6>aYf{`0Bwfp*loFZDGQ4qZz2LB=Y)) -CEcFD%zaaCVI_00a3|gvs`-@90ZIrlyS!8p)ktmZiY%$Zhm$hi|CXuT;V3u3L%VxaZ`>u^*6yb4~g&9 -TVzb#2x|!pdpI>8iAtn8CiT}x?HTT{V~G)lZms8K!21-Opvo05W~08!>p+16C{gz)_-B2U{$5dZl01WavNotP{ -B+Kqd7tnelwNU|P*=YcQP2bVloIFy51xPh&vk625oCNYjB`_ -|a$_-8S_8sT*qzbm|g`3*n3=-!iDguNd>jqtP9wBmxkYgJE4r9MV=Q=d)U(|)17sB`ba<)1n5jZ4x=H -^p2`rLJ3>d_fIfYsE7@Yj{gxQq4rj?Yu}IIlkIv$W3$#sH?AZaV(MO4{rmL3?rBEwoKaf!|3G*x@b~d -pUYj3C@Zr53cBSv%uh|wo*yaLo{hhDQXmf+;$)3kA*%VSsOc=<(uAgwfohRo8k#c8AQX+RgoRK%i?GH -&jx;p5hSk=+)9=mTj##;P)RlHBOE$&V^Zjj;=1$~;Mbji~H>3$5gZJa$ZFP?h5%QME{I=69Em%bs#po -IqOf!43zjt)<4ew&cDlIrP!#e*}$)_V6w#U(3bq;|X&@W-|#YJl7P|8s%Gd$YJZr)Ifm6K-+KJ9LQ1B -1K-?3J}d*QY_3zpXG|sfeG~An>sTSq11o{#lW3_X;ab1FED7IoQb;jGoqlyy~ilN?o?%)9=yu=p=eVo -t2g%)nqu$ihPE7+`?UQB4A*`Q1*oq?zMPhdMy(NcWHBJobkNbU8mxPbX^J_uaMxLY2e_2a!>(Jy*WOB -g)Dv$CMMd|9UvSY9s$g7C!w8};UL(Q48>FCH$7xL!}IuVA}eo@E|h-Irpya@=b0^J8_a1w(~dDHBA;- -sb3yKY8SW9^=+a@pH-MNTIa;dr&?4H -nXRlE}dvd_3l9$r}Izo=4|d%n37KOzkpQk}hVg71y1u=DlVq@?XWyP!}9)XP}UG{0nAoI_LMk}4T;)7 -?|$Twtg{wvGjHT+piHKn!r4Q*sN;b=!9a$a~8*_LOe9#xL3&_*+d`AXm--lvjOfjA#6@czAD*IUQM%W -6nR;9dj;S-Ak8Jb#KLjt}|G5;LVmH2M>UHhwI5hMF7Pp(Q43hF#_Qv4~b)G%NV3H9JP;zv7!f3f)xZx -$$gbyFGN;RI}lWixmJd@&h!WJTsEahO!$mk%PK!zfn%4C?Scbu^>LV&6J8GCi+s_4SZG2`aC&q7{xKr -L0&fq{k>IV(L8n7;b$?!T`iFCCgG8L%Pa}=VCITwpPFIB(=vel$=tNYxZaR%$s$mcnbSW{Vi|~bAbs_ -nvOjmxW&t!(5>) -5_dU&J6Sv-0HQ3AYEmXY(r>crI=co0HMRBK1VJiOKMbJ1n5yV?=vn0gpXa-JaYl4LFoHr^_qBOw&>e3 -3r4JYJ3rz39#r$r>&2Oik!A&+);+w6USPw8;!`6rx7J)bURez!0qB-47#!8huAFPoeN{h;c2wHeDq -aG-vs4Xfa29S4!DHDXxC$oL!M>R(4C1#-dxC9Jg!!*|TTzPG2R@Rl;hhzPr7Rly9p^RmA!xvvaLRdf7 -xabo|Jyy?u8mSm}DnBo#U>sT%a2G|Zv0$wqRy#U0rzO9^nV8M^8vlym?sF2xn8ORgxOSA6VvQI;aBy{ -MLPpwJ|pw+opFD6cX3$6UB(dM_=Y8*(nec;PI#Lv@hXSs9ULqAYYzd^2CGL%<^iMo&(vwD4gdRWcDE) -tk*c#Vc;m&X(5*sy>IJd(sp^0%SQE(lS&b?XZv#rGO2h{Hk+PQGylHdAf7VsOI4rB039Fkp|eb(1D($ -=UUedQm6tQ>2ykVjMtN`s!?_l84*Z~$m?SEc$eKnKrH7(2mAbRdUx=`TRBE+tdBCqE_bfS=i5<|51GS -a^%Nbzso&VPiVIDvb5$&w8;yjv0gum!T^A)L-I}GP%>6r=O}$nMCjII7GCn4`L4~17+D_759vttl@JB -PAP9@K()xN?N_Xha_@76q{Zke0X+16!O0(4%wHt}2>R4OUfE&rMCQq}Kb1Br1cU -!r(ohoZR7Ox#-<6lrk0e;jJZpE`wvylVD-gRmBx8w@WT$DganjtZ+nYVD>l3@(yDRJJQY0j^p-7gbWGi*^+jn -LFkN`=^b|1Gr>!vn|$6zoR%nJkVv)+>)^OGQq7bCVR=Djblq_f}IXK#~qlZA_`g4u5!HtY|EJ^1yUU0 -iW?wkfWXn4Kr{;@ZnN`zl$*fmeh{>_X3T&e=Eb-kzMEpSZnHi-(P(9{u~RTU1x7^u -k&u1MtsTRf_k%L&OA1c_)R#AI9u~9hf+X}<^B~kV`-MG!+;7_X_{mOn{!5(@A_~t-#VNGgmVzU1a5LT4MtS_{wTlPit%FmXd1 -@0M450C?HEYJ=0wby+)0i5f;BL{FVw~TpbAZLRTSyy>C+(bb2lZu<0jeSX~yR~>HUT|@F1z@ca>Y`v4{^Cf7%6 -eP)}gb?P_Gy^h_IB3AxES0)F -C}Kzzq3D+!mNTG^Q=FMsBpJf{xtxRb(i*YITh0QHt-H+cvUJ4OuxtEEi&?K)+q^Q`ygY7g1QNqXyc!_ -yYHmV5-rn43b)RPYY_`G0^;S{QWttgt{EEFgb}Mk79){zi_U4bu!GBRpSSW=o7lk;#@5-Y=0TIu)-jnBrh{DCrphXtq}&*J%KdP@0SZVcOe -t2?^eW@9 -@4rBbspwwP4UN%!n{C3cA_Jnfr$(T5Fi{ExjBjb(k>2W|AD_;u+XQ_6l^8OXo)x^DXb)lq8$*`3cEZG -@@o(=w&gytoMt20FiDBH0My1^+NFK4rFlEqFJXX7i=coY1G)u-thE(Hd#=Pj)b+ -WS|^pRT+u0f*;u-X+hvowEN35b>6(!-(Pmsy8e>0bt(3Lo!NLA_-dQt`T|{6^L^oMuFTTBH8F)(!cvx -OJ991;avB=s_>oP}`WusUk*;tu}+ohU?qNK;ul?oZ&Ku6)o0tozeyh+4csHK{&9-Uhm_Z-v3?( -6GTUQb6x|G&&VGpI;1?E;^bg8Y$cVOw*L}J8dPwliWW_zkXzQ>^=*Muvi@sU)JX0&338Dos}zx0y5dn -{6R(z)-2gJwUOS}N)+m@nOAt10o~l%w -<~RePQ$U?%_wDlv^ZRfouyT?JMk{!#IX!lTjWLP#P9RK?FnFD8<8*H!7DKN<{0d6f8IR#!EL6NM~+2i -=I`zDq)1V|OvOq^gOrsDj^sXqWKD=fR|0Y=Plc$O8X%(4r3iRKW2?gH99O23$~~6}G5?-z8*x)&L7iH -JoQfz;=YCp{jX_$ZlAS97laMZmWBYU_*ivx&nfd{{Rfdv(Q(1CP%aW6~hxEKUrj63NBEWdFvz$YH+00 -4t6ET?IjDq^Y)8q(`B<&0VDVzmSIEDt`Lrt95!#j$*?Cl5a5l~{G^aV8igC?LAZeVw3sC{ZJ^XZt{lA -9%%gUPM)m7=>Cx;$Bvy`tS*?~vYfiJ7U_EnT_#$k!j9pF6~P3)p&Fb`t@CQE4dd-H;4_0R ->eDAoe^)R(gf*_?^kQJb>g@oxOe~8XCk>5I$O6ry5p4Abinr*D+90syMj@dL(X%T^;v$QJG40*%?TdMb}G^M(lK$ol|6)(xjF3DUnjJt$U7 -om3rBY@tT#^w3qRD^+aEmj748%LA&4~82FZr2;oQ5fW_LK4y~{5na3YHkB}sI5Q7yg+MVkQvrw4=UaM -p5E5&>u=t`s5|tA=KHKx@7Lblqw@XYyZ`)d1S|||Pi|(jKk$>$%^X)$vT5+8rW4 -W)uxE}nn!GjfsZS1jUq+W*=3z3u^19M-KPvm9XeJI`3dhL@4<_@+{#LQbYEx@4t -PFYOZjrgX8H7d28h?<{TpeH97nb_kU2uz#q3?K4@#V&;FiV11-QS1k;BBdnq58>>k7h0Ru9{i1Y#YUF -Ztxfp7a0I8pAA`^@b-Wh5d9=VVS7A_lFsfmT&mV7JXxt}m`rzVdxQrR=)RaKay9+e*q!1-*WSF(p>C; -l-W3KY4%h&Gh2U*XQH_7WSAVp*6!_KK{z+H|%I@;{3W}ATg{LZ|p*PqckafY>IT%f*IsCmWD48aw=BT -zUi`!9D!n9MP}cKd2ZzErqnq%$Sj)%I%N=1O2->8pm9_R>28|nS8hGVZqO>-7^3iI9Fs)~BySOE>J&@ -<-Fl2w6M=uwnHC+~Sdyfbr)%lQRa%Rvuxf{0s%Bx-ywt&(;9luf3!~~-ui`&hjq@s1=Vh}H1WUHD>W5 -0IMXUh-qIr&9@FVQGDQP1!K6yu6M_A)fW~zJgv!=?*u?{R1->-m?=2jX?22^@lIHhSrfSCf`{T2`m%+ -6Zt2B(y9%G|9reK*&^1}KgZVW}&`Jdg*#z6LVXI+p^t3b7)D*aCtHUUYX5M}%k8*cv77A`l+1RFG=)2 -f$@l;qxnLcL0)V;DC%VI_!+N<_+=K!W)wbZs@7fez!{jsL!K<(bPtj>EF&uNl9zA -$PcI^0vuS(4JF&*@L2vSz<$z0wzuJBY%ya6n;{yBCh_GRE8sLblSmxDUce -deBGEUFKGJj{LvTd|21!0AnPB2{4p^a*w&b!pq~6X(+TOrX_U>z-2aHZw2*0aIlb*pNHLFh-hv*)i7ES6(Po_vsIji?L~9%)=RHE=W<3cy$D` -PxER>V^OQ%J!vq!WKrli|)wl3O4+2`Jj+q7Zt~o*r_UI4=UKWIMQ`W|_XT0#_DqHw`uVuzc~6n4zP4(7ZsXIkU#lRd{CUtUgj@OlYt6<>RlQsG~DSsS!Zqk}1v+hz*~5VSP%e9pos;t -O;Yw?O+n*~#54U?{wN*cd-X)3ODpeETs?4}@5G_(#CUs)A7^cYqrm$iu!{`%6%8DzxAEcvDrD>?6UX?^i)#8K;^eZkH -Y662jTf(}~*v(fn8{2nfv2jo%iduStpoae}6`VR%hZu;0IxQ0lrYjR7Fk`FWnDCdZ3Wm3qWM2^#&I>W -s{kxJiF~(Y3X>{!CyPtF0Z&4N%|(T@kg%+Auqs+qvDtB7kFPdcjxj8&D`inrDe>xLTN*=PzZ^ -CWm7qeMu=NddN$&_IQ>|xhO5-JFs@l$ISNN&yv)!-|1C9?zlL@AQYz1ymLUtM*PFj}Yj-fQ$r9@9W7^ -w~zDxy;DQ1L!FzaWjgJogqNxFrFXwawksBJ;P<(A-#}*fFvZ>IheRl4jn*g|LN?WIYQ(P%vKHn4lrCD -F!09!Gq<({s*$Xj!BrK>;rM6HqfrjvzjwuiqNKX(}n1HDLAWkT55X&69DmwE3pXIymGx|d{0pC-JETb -m5N-NO~e^dh>^+akkAfY?zTkL5ts~PvMBt3g2}!Fuv|57l5!8IUDu#6<>^AYztXHUr~c1o!c>>MZBky1ck5N6(qR%H(+!FbVn;P=B -^Ld*`yR37E%%)iQ-H1gN+|@|WS=6_N97^A=u){r-zCI~soR9N}XcgILiX8y*gZ%zk$0zBqg=kIGtt(x -}c*;)Br;FO+9QIu2*%t%?MCg0_%Mq}Ha#4v(H6G5d>w+dnG7U*iI;aaza#L9snReo|;{a7fI7lFQ5m>#!ro=+Xfg7Kv -#kRC8J?SNv>4lld2UEs@)U=e&L5m2aqbU$)EWHmLM5DZ8LFvX>xTxfwZCk=5$3sA}kfDH#WjZ9JccZ> -xtIHqTs`V1*ioOIX^AO1B+YX`!0!{VW(MmeO5*(DcjglTX2Xy3h$B1~OAPibcvM8UK2K;`wYprxCi;I -=zt~9gliu&csp@vJ4!;$mx)`{3bn8ATs3bQV*VKW5*?CXBT0bu`<7TSXrpX~umeCXqY*lE(e!Gb2cDTdN9XccKCdNkp*~n;T_&&gT6Zu4W7Rck%s}+KY!6O -upAEaJ;mee?6o$y+Z_EZ@L@b+Lm1R^54-d*8+2im7jFNPOeU!f;(nUE7E^RC-Pdwjtzg%Egt;EbvmLv??bnYk184iZnfG+|)EB!VPRheUc7nH+_JA1P9xfz3_4 -izMUVfwjB-~tO*z8lXira$f@aP${pS#aK--Rt=D%MCc-s0upRc#|7CtJi?r>CbDE4+ocnuJ>!UfO8jz -P72uE&RT8Gh_gr!LYQ(VLp)rhw3Sn32Q`mkuXy&;8C~?+vm^|3DC~Y{o^sA^*~FatPtBjz$BzSy4?hZ -lTh~o<{KuAkdzr$_1)uM_GtIqQh#ky{X52d*g(KQVl1bWa(4_u!dgsCD2j4OA(Vo)QK-|cXisz5GY7z -nN>*l(PfV=PBOb`{d|#yUsmv`bm7N%fh9hs_W`n-mw!q4=4EqfFTEiFa;bCv^d^j9d4Y5qL#PWLMOts -$HxXF;&ZSS_%U`6cJD(z^_n4SPqg@QihzO2yq8r9G_XhR2@o2bJ+#&k`#K`1jD>T-j98a(TRlsnof<-`uZ1x#-NjeBfxNmLhYA!cj-6nP!OMgrdjxYRMo?za$qh -)~K5L@}qKKhRtB{3=7S*#Ia75Y{2T7Icx+^V=!%X*ghZ-~D{I+y@E(%v%Zfwr2<=9|Y_0Rc&MW(bJ0$ -DClywm)`8Di<4nyZmXr2eNf`QW+OE?*-$h)&3R={-Pcmj@;0X$jQ4#yhY}yxDLoJ{m3*F)*JB4E`XjS -d!L_doInb|DrW~HVd4JIee&T(S$-ym5@fPGDh(QZYO!uAB(NYyDu2JTRVT2tst9+SJWy#er%6j-lQm? -0qz^d0<;8utCFV#D|kRK)9-17Ao6;6m~_Qv%VEXOYaQJRq5nxb0I^rwi8P7)cfE4`vxo;(Iu>ZG8nl4 -+OKE=proSnG{&FqSZ%IsUYm}a&TuIcXE!?0+!b|Lttb|IMPc~f6^EN#&8MqB&Vd$SV5)_eW -4jC&upajQY)`{mdgD%=63)|fuEmz3ks<1vMQM-m#+S2JDot=_fXyUdoRkXr -10FEAgk@TjY`*0w|D%kv>1e*uFegV)Kc>==TTiZRVM}NkhQMdF$Osm@-y#(<(l)jFxh(B=X1)0D$%LC -D}}23lpe-A+RpFrXP^ByeWSyw?v>-$C&V!(iN9O~)9Le*hxApC`6^i85kd{nY(oKs9_o3zd?HUqDVIO -Tj(NCTMf4?*+9kurmp;mg3M!2&^Fe6e^7@}R3rZ`MO|x#M0qN=%n(i0bY7P;^!K`yT( -5$?fsU6Qh9%6bU2x)XvS4ShePNt-wFwUCQzQpkGrTN54!gzZ%Rf&HBw}BwhE&F@u_%B4stl@B1os(Qu -hq&o>+#0w_E1mbhS}RbyWKV=C4ruwXO17uHEP#br{gsARZm#yc^iwPkq+rR{tL6Ieo43&aYy^w7T+s6 -@J7+9OUrqxOQ<^`*IZC6f}xuZ(3SiNLhIK= ->gk;2Y$SFMoy}hc|4N5X@$*70^Uy!O^L;Kqg{Aq(ctC;2fgXPOg3Uu71$k>{eS0+MX9cU}azh`bVD{t -OksmoI5tbaafe7`#UJA2I#yqxrZ3~j5AYFS)BKVcVa=rTe^5&U1QY-O00;mj6qrseh+@Ljt -^fc4Tmb+Z0001RX>c!Jc4cm4Z*nhWX>)XJX<{#TGcqn^cxCLpeSA|@wlIA1)t;8L36Mg80u_n_78MO3 -H55{5N>z%1KthEUe1uLW;tZB^07nX~r(t?}jN*v*j&q%RWzhTL=*&1XD)=#&G}yF)S`e`gsMYD!T~E~ -_wGFiNJZtT9k`~nG-sg|^_x|(pquF0;f3LmvT5GSpPuZP&83V&GM)*?{hB?fr|D4Q!|1S=InNwfQWL` -{r`>MmbWp7`#%Kx*ixm&7#@zd(N?#;dXuAl$>7hLZD+LT+(|2+3+KhG_`!;^dOFE(zvE+Zp7Pb=fT@s ->^Vw%s*9@%Nt#F3g_`?sf88^KH~s=HE=+WAm4QyD;dr)52cy@G(xo%Zs}T5iHE!Z{@MDF)Hf>bUuV)w&qoe5wmw7=)2eJPZ9V9#JC?LWn-K0bR -Z9dO13u%!$=4tm2H1H`MV@_k3y(btZ=l?JVZC_t8SJ2K?x*vzXj@z_@1NR??wFY5djhDmZGR%hSsyE) -n-Ni7o^R>RuhQA}1!$G~y>r^nNla91bE%VFo!G*7@-dcS(_-S9E&&*12FaAJz)tff|0stS*RL6jpw@h -~>+$}%e!~g%^|INSEQn%MX`%5RIWRK5o8$0i<}9tYSzypeAq={f9>}On~uQVY ->axFe}dn7^O{414t`C+QXFpisjy{M?Ys>Q;DjC^$HvD1HTqj~@}xO?DMCj -2i1En-oP6j%EjRN*067DjT%FO?0pxTCrfMjP==-P|2X%a>NwQEMnX%$aFvy;iwrJIO!FPlF}S3ub1MX -Qk~>t^CO|+IfL@MQfxhKn$SJl=idlz54i^Iir+s8$`ES?#hM=Chg$5dj+kX%#J?FJR*)N@F#)|#;Rnf -s*+3@2mBus76QYZl28XbrdE)AB(G_>ZY7Amc+~Wn7{y9G#7_H|>xglarJj -JPJXCY){4-Jwn;$c{;!j9DP-Yj<5nOdvqnG>=t}jvBe~qWLd9k8iVx$%ILPc*u8> -Jq5*wJr!JnV0PK8bv{o7{=fuI_wSZ@>gKmILq;Y8$X>@(Ro{v_?2OJD=~&=R5Mx->E>ckiTEGITv49wm!j;JP`TWP}T=u$QKHcQ}c(v9KnK -HvMY)wMH(gD^KHjWkIT0Y9!s|*PpNfCD6vph|qAsbl05l*gmo6Qrn%)_&>psgQR?ktfKChj@abf|v?2 -6AP7U$(CSqrd|_E2%2)g9OZ&JK4V&7)+^QAfrs?98)n;Z0Detha~#opfgI9#oXNhw>V5_0Pf4r8zk@r -x|kkjWWVH04`8m>4n6(J~w%+j1Hs7<;|4lEd;PYpK{s_i5p2TAX3bjmq)W1AsdwWoto$;AE=2=n)t;4 -P3%<@H7dn-vLcw^g!gedFKSwPWh!G9W#GXGziz%WFfoQ8reU8I~tblQs3YVR5GOry4AP-Ek@&V2-whfj)9#nz(_aH-tRKW_(tTfQ|Hcn{;8!-FZuuL*L9Z63x45Y{7?~ -#%AymV1fLJwqH4y6J)#0th@*)FYYE-|+r|J-hD`ksrp?94(;4>=G#6T!zNn({@Ju$Ynhxe1m-DVT7{q -9s6s^i>5Z{1;k6r`u^APKW@OXsGVM)iB61Xz1sSTaW0K1(&H?IPxwci -^dh!e-w;m+PSw@)4Dq+Di&KSs*O@V1b*jT>8O^z566BP?~Kp#6`naFveEqZx0R`+4%4^$_FJ^G&+KcI2YLTO*`WsmhIGApltp>A|dqTn9OISq;li%<41z3OAC -0tW;DRHug?Pnb4G0#q#=hnD7P4zrxDlZScgl<*A@6bu&Olw90H7L$Z;lH3WIo*E{3V}Iy6CJHPpkJ@f -*KZOT(hdDMevT+lXqKz|?TIY!^kWtk-v0yep7y5t`C5rdsLlHr2iq3bt)?Nm`w=vQMA(7zx -NdoRRFGzYAsP^lg^Btxvq@gCooA2|`1dL&xG_Y%b5*+I-mekf6Dkto81+>nqB3Bfav&~zehXfcE^pD) -DSza^$({+wW -3Z4jgNQUIFffeV3an98frHN_T(Y>pP{`He_G4qnzfPh1q`V*YKC9P5_Kd@@RdjX6T*x3PB#mxfoumo! -N0AMRXTc;#C57&xJPV|8EEx}pfpL}M9P-*E0B@G_{Iv}3q3?uX-m3)Cv3~Z>h7}y) -Dq}67bt#Z7@jS<4IR@tgxE8kO9VC8_?Xkh-=Paw0qLER#={Le$st#Y_XPm!*-X`tB77O1rxBh{TCz>; -mb*mCgfo2qufOKzTy9FUg`OatbGa1-#igZhur-*7JeKAVf9l3h96Yv_dqsEJj|47PH5<%G~|bnxct?n -IY_!n5;>7>1kRN0-#jf(mh6(Dqs|9w0 -dgN0Mn8DlVvi_b0SEw;Fmf%x3lk-kNInun1xFMgG+Qo{t;2F-Z%xi;ah=_|dr^Jf0Vokg7jS>8gf$H1 -IM^`aSK`QqZ1QsbbVK(v>M2V@&dun+Yl_;X1;w*0}aJ6%pSWZQo=xV2>N)>JLb1_%v4j6;Fn$CJ~wvG -mblo)LwT%AVw^O&onfdX_qqycmc19VUT6`f%wp<7mlpB1CMM)?$m<3U)2h%Dsq$o)b($3pC8jE#~Qpo -KcEFsLX3kUvw|!CaAyr2@heiCE+&0}K(>Fa{xl{89_jJY;AVl_tninB{W6g3J8R(7@v=`TU8_oG^ -O%V+K3RU1!OixPKV&1$s=O)40uU+}Qxb@`0_W6=yfmylEdQ%n2#xYpAD>;|8sx^3pFtKxMzR4*DjO78 -$`mKoqE|ZCTw=z`?pEikgq2D+iI@-%=XO>I=UNW+z|Px)%o#+F!srwl9R -~hJDYJ6LRlx5pu5$EnQF#HL%CQDY;bHBFF~$xpd5F!kjIZL-4;jKT=yW$W(HvQ -dwNMYs;neYg-dUA{VBX@$&b>u7^EEnNcOF6E9`U+qwHqnRpLQ~zdB&9EHLFkB$weK|2~=y4Da%pO47mC~v_)_$gOU7oqW2^FB+xW;s$Nq6Hhu38{E?nX71|56~v>M=fPAo5Sv@CiCr!zc2j^} -suFnTZ@u$iaWRHj1$SC8gVsy`c;Z?J`^t&MEeHg(hR&r;JWl$8|`z4FdG^8)a@nq{|9kGkEoK%lgnQ% -Gzk?mZA0ddx`!I!f#?NL3_stgsoff(MQlEz?jJ>WF^+>ijizC@PTK1j`Ohdx7rfBDXJX0X6q=W@RC+L -vR4ilTb-&h)$arEEHRSP28`A$sTo*0ZW8RB!UaTt3y1)b+$s^U1Gv3x{=e+uuFqg(Jf48!eFG^U2!|z -5rqlwPn^+ci90R;tX2W5>2IscOhP!mvpTJ*G#%>)=D<%2Zx@lb%fRK)3yOsnx>?haspA+Kx>YGBvX>1 -`1<=e-SLM-^GBg*B(nB%a7<T}!ODZa{S_l84bKZkDmQj*&t6Ib_2%T -3()9q^$|kt}Tw&l#vua*4qrF-W{6)>67?+qWMkoC`!B>?c4QI)ZrT3z7_^O?j -;+b>~c4`+mTTJJs`vtZllf>&u^dQ8kFv5wlv&OuYf$GT;#g*1hAkgZC7W#opKVh4Y?)@;m!9OYli30 -aX1tT)p)El{4&%vBRe_7;fw69l9>!IT!L6_rxnKuAngNX6A!Cs|8CimWF63g}sG8lPaubHDQ2l{_W#; -J-4d+)#E-R|iNRc(!FVrev1;G27sUoC|1st9%u@sZDhXG%sfL#wWxKWPw;huAy<f1JWb|5fO+O4bc4iRYCzHmJME0aXP?13c-JBVWdMjG`LTGJWu!m8@p1Y-yyT%-UQCz!l=!FpqjL0oSP=saF>zq$m0 -WILjkhX!!ge6SI*kcnsWmm0fffKN)5?qH?%{13&7-o7RS^yPHqqDitn{?rWMsz09^`8=hs_(o$b@JS~ -eZCkBUPwma=yl%-Yj?>lOK_0|*ev%aJLYBP#qRBGu>nmzwcdNp -@lmN)xs()E4ahCKxVx!C^dA1DxA#mF_V2MOcpQkKiW28KkAzv|_B)$YGJNCBo8{T)hU@U?nm_u;O}f# -ZAdXyn#|cpoN*uB1bcZ`JW6rG4f1Y04b@O;DUi`klz1*u$q;r39GlKUM8$cCFX+yZ>1%wg=4ut6*|5F -o?j=HnE6aEc^}rM&Se%hS($P#ses->w(|P${jAV22r%-vgF0@^L6*yW7Q4x(#!9kr2-IcjB@H)Gy5@G -EN)YvCamDg@BvhmTX9eB0_CR;9&$yzy@0*j|-CVK)%XHC0Gx#9FI<5wRFmpJYF|>bC$Y3V*FKDOAKofYmx&!RvYO5gj`V{{v$t -2r#-mQav9$Fgm)DfWE=T9Jvq&ff_GF*F77Ka3)})P=`Fx%iIYd1sB%~`4-eMfSWM*$y42oPex{;IBK3F?jmVfBDKNy3aLaLkxdbILv{Yx$QlBYrzYILA_x_EbAnv -CQ`Iz13AQlJs~ce7GWi~(1@;ah(&|s%efTO*}x=H*@J4MEDq02kD^B9&SF>(He3&nFVUb_vH+n7ECw| -qjr;^70y;AE6|%U^9I*N}3M0XE_PLJgxD?oATVz8Zy?lk+>&L#3PFYbzS4RQg$)~u3MsS{d#Iyh$$;BL)O*KO2B|rx@XBLj^>(Fsrdk=1dML-HI`6*;OVRBIr@} -<(JRiwH1hss38uirHI=|SzJle-ru`T#n)M)Tp~QG$ufB-c`DI|J5+HH`!Y4IF;wH%$#En?GD10$B@f -Sz4dMCdna=|1-tSd+z(5AZOW~LT;Ag2q>xv^+Uy45VhI -cU#;JD6HXE6lFjU{-c3N`3@7N(;I%on}|_?i-P}jKv}^*lNaVd1xaIKLQS7)c(1XKtw+2LCzDHE^&3Q -xH>Mb?vV|6h#@S>Q6&-=>FZWqPa@2)l#3MLuNKC#66Zr9z%u0Zh_=l>idv=AfvdIrQ8yMWOLUFB%QlTAVy -1YzYaN~xFv|XtC%Z}Xf7PHc16J*^-0(3$iYROmf#<0ypw9MVy+$p>w1DF>Mg;&baxpP{y7AEhj2_kDh -B=Us-+6dIKy+va&zUM3uF~{r$90}S1F7GG%8CVDVE>_0O*f0VOSxqQU8#aqO`_4>NX83Zy?#|#r*OOG -cK?JR4vcwx?_k3vgI%pBHKBmy;ataYEQE7mf%?`bM-KmdQ=k!a@VW#Qm}}N2Mk{SSyXK=xJ}#t -EkQiH7MfFrfnWv;c|MuNlt}kAk}X?iOK(-Or9h -(XJWFB8G$c$1uGjv?lL5i#E6KIwbOw~+ebiVhiHD9Gm4qAmv+)Y4~h*!iMR$t -59f-99E%0!ykdg{sXg_4^XJl({c>$xZaso`xmk3w=&tCd_Uxd6-6*$d95Dy;HtBuz(z+oLUB@R>r?Lq -TF)-Qx>f#$f_>B-%!Dj#_?mJ0sfKCxIRa? -!5zeL5YM^kL2v$jX6I7+Y=WtGm_+1({Rd`Gl40b?J44uW_$J_Ducc<|8r8fNi`*A!oedzHxbwb_L`CSWjf=8+IOqe=x -!89|`tc!d=%GDl>{9JZX*5`f$e+g9OuV9TY>I=mAU#VY{R6r=3|T^KfXDtc~hnnV~}IxKbrSPao`IH~u3rR -n3r`8GEb4_%?2A+}I-F!nM`sLZx2`7e;T-3}mc<2{XREPmeQaDn^5=%yLHy2;C7O%vMB6W*TL>QVz!r -unR+6lnk(1)Sw!ror!qKXA0HJtq@uAAZ6Zr$m`&Wb6~gfyKizb8lOxvxb>l1Va>0Vmh -G{HiuYJWR}Tsu@n9=wlRh9=6;!GVhIcr3FO^(zsU2$N->I!p7%oprxx5L_e5y9VOPg>rc^t#8UbS~oQ -~=V0U>MfAg1fig+riHg3ZJ?fd5T;=y5yfIZyrT`pha2@jMPdc3*&{OETApKkbOGJ6%?#7b7TDKpu8uw -kbhC5rLs8E!Yf*3xuR8oZ+IXhm9o&mYak~Y5Ge&7v!(tH@My&zBSnzZH33l(&30DhSz)Se(z3kl)hpd -AR`|CRByk{NUsasPZWL!|STRRh!vged`vhr=Sr{7P98ktw;o=ZybbPz*y3pKhp>=<=N~55~!UINzKkn -CIFP5<6GhnY?!8yi2F9hTlHa>y^4{CK`Fr!ecvA@U&1dBP0aGV|LW1&O#7IGEzZnfmkR<@XxEmqW7FV -ghI6b8B>>JQ_oM07P2!%DN1`*M`~vX%R0k}M6d$;hns`aIH?Xxm{wY45Wu%89j9Nd8hfCq;l*E-pq+2 -2xugT~R*ALmICyz^wF-yBRHxjy#Mf!E4bBZF3&Gas}E~k(abX$tIQoa^bW0z2OE*AT0dOXhflHa>)1{ -13qy9-3*jDLM%J63vlKVVJL6sd-kw%ePvY0qkw3La86P@(&VQB$a@6ieA1$z!i^Pn8FgHSPkGNr<^z2 -at_C9A%+?L%nt-Q0OCi^z^v|UsByVsl?+vGaUO9YfqRf30ffKACNVYHFj(TxGQS8c6G?h40Fd5I7_-y -jBnVv{7qY@(Lz$du#0b3lJOB-A;g)>Sq`QAV_X}yW+DjWm6g=~bv630ujJCIJ+FzOCnFon;jW8q7T13 -%tJHhqS|-1W&!VnwGsN?atT`p9jVbfxa)F@TIhsk4+MtByyjA+=}1BG_HsWI85Nfpj$a{8N-W=O>wS; -C0%t(easxH(^z?A -l?%TO6DH_n1=SR3{@W;X*`1vKIUyr6W00>*04b`q_`+fwQxF3Jy)ynpD(t8AtnaV?3SSdwbAw>mZ;cf -)ZmbpElfRUdh-LXL|J0&jN0P*}H>5h$JSzB!B#)ptzK+J3@<1h>-2 -=G$I>)qgF_G -Ry~?~i6Xts%VMaSinb(pmN$N=gyokZ(%IJPv|0oQPb1U=Ol8{Q9kbx=6{yZ%`6Q=Dj3jG-RU)i>qe1qD)k<&-^L35%|EwlrQ&qK3RAY)|GfJzO}rV-6Il -zG@gDNc@J);2m^%l$T38bIzh*y#a8d9aVW*{eb-^Nx=gAGEFvfVdMMqE@e2M{#VH8x=7{PV{P7_AxFan0_or~IRNW1)aW(r+sQ3=sDIDpFlXni39GF*mGc -$|7rRg||MR~9W|Kdy$D2{S&l2&fIkjsxlv!UcIiTRE2c2({tDJZ|MQ3Xv}$mR@X!e$T_~(!3|BWtR%0 -HCDwot+DFT)EZ0cAkPDm!&Kfa6(T7U{-Z@Epo^v@qe?W1065{gg!7FhY?W9x -52e|i#E7xmBlpe2Yi{?uhlBs57XqYyroR)eV=PeIXYnq|_fzVQ;5I0uy9`Y)zW~m**<&O5PrH2_1L%^ -e#qK2p=T5WOTErI!SG@Igap(R#`T|{GZwOH=@h@y9g<{s8ISXw#HN`-XzK0teGqgVOh0BwwmMFVg3R3 -9WYV<4A2bUl`XL~uAi1%?G_3S_SVHtTA$Z`zA~xr)Aac|RG~m4 -iWV9obqlB({~P;BO_5)kZQ0i(HB}^Jv7|hPj7jN2LyP55k8$NUlRHxq}gl9TVR}(tymlda$7Z~!_p2M|?vgCf`?%hH+J1juPL4Zt3iy~#O(5I^Fuc53u3QDV>UDw -j%2sOn`Q_$MyX33csAyfO?gbrOoFF!)&RE09C-nXBu!$XcR?fD2+&K~}O4A^!|U>)W+JN^OWGTkY}$5 -nq#ht&9H=RcgodJ`mnml+oEtj|l(L_><(&yMn{5fY~5N#mQywMH|*hiksOse?sdZHhV-jAf)iWsk_>cE(BMVg8IYXf>J`A_wCpK&rC -FWH#L$C(qVho5|-z&7QX1_KMNTDa{RFDZdQ$mrUKgsLU~oq*xQ1%D?LkpH2_P4*UQIy(OE{<9Ey1e@j -c5kunCk$*;c3A+q&-z1K%`A7ZMTpi=z3mJT5vuc7OS9?>4{5U_3IGHhox9!k3iEi}3cKJ~si`-Wmo}%HslgA?mP#}^b$#oZO1&XQ~XE|Kvtrk-K^{~WK5w-le% -YNCgQnal6r$B0!{vC%7vHJE%1LS-!lfjIrwpmg3YDeAbQl4m%e7C#3~Bz>CEr(j9h`7rr?qbDV=E$ekQIXI -t>vPXN_X;urFkt|k|IQnjvC*b$usZMH`$KysBkD0Uj)l18e1C!%)ph5XE?XMDP>@_iecLvpl64BYOs( -Q@dmN-)YpAEU1f7mpb#G(vYXEHyVnl9zn41&&-8T?ndAY^%vcb`^eO!LT=??A7!1O@wN-{Z{;#A`joe -PBxHj6+)y`yx~XY!_af94dmtWSfsODblYNlML;i!}aJahbKtQYKp)A2MOF^60*Zp3B0hT#SN(8Xii)0h3c3o}?b^>l^Y)br@s8PAKL-kSMjzqJHUd{0-G- -VzQwvbZ4$GFkyRo?Xt|t*3gPvIYYQOVY?ZFxuF#u4OZFE47lugx4Jo@x$Jv~;=bAc6mD-n>4q(A(|1U -k_ET%&rCYek!tTusH(uKAr(9|-Id+nAsbq0C%G4R;Pdy3#aJygRJ00_=$?<&H5+-^_u!=(}tLP=qV*d -RIBrf$!6dJO5FK6`W+4jQ{-w73P-z0^0q1)<#nL(q$vrvpU*$C@F7#iZI#7yW#R#VA33k5Bx801`<^` -N{^7`nud841!3Ao3YuXpkR+dN8MPI8i=|c~d1 -oi?>>I5CLhYJqZrlCRqqgb=6QwYx~>;Z4}7j+7`gfyH3$U3Eq`u+5DD+aPv2OT*}y%*2FTm*2BE((mg -35h-~w9t|qubVhQ$g!Wi1vTpr7{#sTg4M*b2iHt(&DT)md#EbqziG^@Z?)7n6SX;+rGq0uFd+|MGW5t6Q{ -U3gk~1Rc_Wli-6h4KZLuY2n8lEvp{ST5E-?dB7ZU5CpgXIi8>+-PLPRfw^|$for1O-=?0OMxL6;dO8= -a2GwmvL=m%>?F%NZ{;sYON`Wz6iO96tZWdsvKq}&N!0^Ls^tHtU>?r1CAbO|aV<)66 -Zq;FT?jUR7#G5nE=VowP{^8ZadyR;vjmRQ)dZ&gpyVU$^R;`1eX{O*l^=n!XC(`uK7UDM7(kWJgN{k)mW>fWlOA8qS?hlv{NQDr4W&zCZlm#c1} -aXmQ+mWQWJ1R)BwTCMher=u!F_4&lS3Alg%DWS97xAE$?8%Cu5vP`5>{P^|-X=Kx3bgaXHH~KpNq5>j -u?hP$J1jVN(Z#RurcpE-DnZqoou-CUA*(apR4dFhWOn2F*ksq!1h_v?l~fPx=)~Rd~GO# -=zl`ffq*x!oz{kdUwplqEfl;fj9?a%%w>NElqe}5Ewle;Y2uURmxZ%3OEJurWdIq>ojF_X>+g{Xz43J -0yeFM3P}GSH47M5ys@7cCyBit?bBq^V9O~VIxn60Gqo14U6Bm#GE_D=(yyR;<^<2c1<0eS;9k2;*rKa(*N-C04o -q7k-o&W5FmD2eY>V(t{xMT}(Zo6Ou&LMAO^p?%qF6=s{?!vEh;x23^GrJNxvw5gn5t=u9Nx7nuo6gJD -;1PhniePTOQ|$#cTNb))XsT?f{}shod|9Hbn`}FV8mMk*xy^pYag5J`j)qF#s1hzr*lw&+FSN+FQ#uOMsm+D!rkc&S=6y7HC#0}e^vYMrLFl``u%yUF{PE*P{cL00P(U2{VhCFT$8Kp;bNA-$Ha@k}H? -D-X)4eJ&umfwX1qOTmjV^m{fpgr3@OSWf%+MbFia1>U`Q3TJRp($@I;LZFP;3NKkbf6DL1yPN+l7eJr -YI{s(;V~_rqaGkT2DV)zEm-35`oDVw@agaLxG5XYE0+=mt6DIPFDHGU!UncLc1zhl4RD_d*j&6wVGw$ -PP-9j2@#OfYYMvRS3G-yjIl=J#lbTZ~kd^%LQ)~+w@)P%`v?If70~&P2rHl(|B^4tqF^4;rMK(YQsyV -3&6Zv&bUjc&Xu2FcKmP}+QNu -mSgPPR$O>KwLjLK9%~wlN^Bp#eLW<^*;Ggth8(7184>Ld){l{1)L;iy<*f-MNyeroV)GzYR -f-`7dPy2u#=6XCvwZMD7|;hgaKunegts0LVXue9bI{3UkPRJ)!Ib|AT<$>~H%_cH9<-`UQd-Um9YbQK -Sb~M2jdY71`~V?V3_gqZNch?0sdgCQaIT|=Gn0MP?{xI=8F;H^@g1r>3&clW4&MF}Gcsd7OMNX>Ewj? -1P^nJLl$K}b$8Qyv8yy3?Cj01xoG;1}M)q=<(2@(a;tIN7Dl-cg6mF7mVTcIJ>gchqocHx*f^t3Tg(qG;N$@v{s*ig7 -^BhmH#bauziwTVTV3e3B&7`5r!Nf4B6zXkCR|~H88a2(P#h=09gNZu)LJT+tOmLPI~JvC1hL-bR$VH0 -L9%SX@nPO#4Si8(kYDqJ~%-pIw|{yJ^uk35=$mh8e*k1q)IH_HS{Ay`2|@+=%SV)mtfEAO0{VwgG{yHd#AUmNMv{@Bmg^_vfsZH|nF3^FGQQr -BsS=WnA0-J%>PJ@)6761l7FnEZH2Lf-2nQD_;+hW%miliPTtt@O7wGD_Q7W3!3mZZUUL{ahNE+`99KhX`Fd?BG&+rW4=#L=PemKhT;N1@(Yp$;uR=F2zrtXJzGW)Qjh2^nMPjCGL(Q?!V -HLvGG+2LCMzk4E-f!>Dkyg`*4-BmlUESj9PFVJn$W<^(LM}s6&L)WtV0aA(*B*SaVkhgER|}1;o=W=9 -;IxpB&LjXy?HP4FEH~j30?;)d-d|CBC#6O{Pib5>$JiIq@iy|Rn)#_@X4zkddX?SVmx~p>j`u9}DNsm -X1f-Ws(7%ETGdHiXcut-^+!k+e4OxzaO9RGoZbB)D&rSVpNce=$hQ!rY5VFOJ9{HDQEI)y`)tcs?Ng~ -3B|44m$>`=4bQjcdpuy3ZP~&4zTDhw+#1Rb18pRa)R3H|6qH^XckoEBIh^2#k)D+6P -T7ySvmrxDZ7fq7mZg~F8IFn`K7}Sc1@ok+_wKqD(VG}F+6eGVph0+N`@s@GJ2^{ARr~J5PU ->Y-qYfG`Me|)fI04W}OR$YmRf~86eS71m`qmvOOS<+@Y0_zVxmC6ZapUf>P%1#9*+M&mhmXBR=63UHO+qjuzf%XqTOmrLXt~=+cZO4XbW2332_-w8pWLrD0X(j3q+cz$Zdi -FUfD0$Mm;95zwu~2d{`l?V052%&+Jy(2_|l6|kj`faVI!ml(&CgTGy{poTBXum?|C3u)`fVour)4okknUt^jVE@p~;nd>>BO)Xj9Q8=^*~`gx%QnNNv>Z;Og*!MbxfwTdLp@91Di8k<$Lc#t4~T%AkzsFeO|rTD5YAC6wfgV9XhUAz4+_ -0P6|6=H#KU-biJQcxg7G4Z@k)lBOLBIMjfZ|?;i5&3yGU;@_6#%`^marf1j3vmz)xErkPPsL32*y`DX ->|AvgI(S{BnQQ1>P4CARl9{zYETOa1f)m=p9xH?lP+%bdR`{=rE4 -e-p;1>vHx`iA}wg-;EfIsZgMsu0r&T{^x`YKe5Ph6p-VaNZI=Geo-dT*~?9px|^B?n{J&3f4#A*O=JB -mw7|37qy#M0cRk$(o4Rg&yB%qjqogDf(58|XfJME2k0$Qx_LXAw$2yACZTjdsfsxjCS5EwfM+U`-t4> -z0``W|>!o@0rfb+4au3us(}VWY)o*)zRRv|ATk13E!X}Q0rQU$vY`R(p4bdYAiO(Z`yi+fITtM-!=AJ -j61_xV6$`Y@qtq@F@mK$oIIZ|Qm-=MWg*kE94H%zS+HrN@peej!`4vo7Wc3NnX;T>p{<3#mIA!byo*! -g=oMWQ~t5zHQ2~Bl -o+WgVW`BMw5_+)qgKt+;IR~^oQB(g5xng8+QiL<_Q>f77E8eewL};&SRV4DAVTL -{$?B$W98yw(vQb}>QTCFfD^(U1n4rv)BM6CH=7Tu;gaXvmn`kM@z(~kY6NLxAZZdQN_Y=r4iSm8gRVk -I6gz(04?j`Mxqt%~_M6Bn;2qN~!6DnEx^@)*0Y~PhcY>x(ZPZEq|p7@^-F%Ma`^2bP2-_QsWHF~(@2` -7G(MBRTPL8A7pOp+*%b~{;Wsr}SoKT~@_&pV$*X_+ekxxptb%8v(?U9){|FPVilWNvbFQQ~T<1@hI0@ -3#mYm+*FSDivRkDeEC4a_wSDr4+qFvH__CZK%uT>%C;BYJ|$s%iL2zNXKhWoXtzZcr;4xUxlK3d-#CHr|j%lEkL=#gm263Z?)xk7y2FZ -1neDyBsGId0Fj~eLd=w<2=Cx0N^!mowk*>5P7>x<;O%-uRRQ8bBOmb{8 -hkNyxw-Y_Drz{#iT=dBij40r(+ic{YZzn3Zrzipkk2gLlZN@i-3BvEGf_cyngSq(&vlBtJ~#Q`%fz+0TZO1GGG3_LJEamx&w43ta?@)qi>sem8?Pa1C#Ic -+)PdAEq~~+`oW&sT2lT|e3?*?XP7KTF!%8tUbLmHIjaz+ic33Eo;z0e-Ea`SlH*wh>Ro)D{0t5T68Rp -@bwwLMECk|lC@*}w{JT_v>y7-p57k%>9$Ste>$}Q_X4eW3djI4d@f3{^kar+fp7Hn4UYo>#;g;Wh!`~ -zFm>9-PF)VbTg|9%EH(661(vCNXsj=$)f$gdJ7`pC>tOg}J83C -U9AWSD}+xI1QcDLdN+7J|K|#E|!FMVf;^Sc52tX6Q`|S5k5CJ2sdJQO5sa-EgZsdX5ot%PK7Xvy2`eV0aiI#F7Db0oB(ui1qLcNtfdOh3e9k{fS -zr`fRD#>k9kKm1Jol^JDf~o%EH|3Ad7I<0Yc|3oW`fwTZ4*aUqrfKc{%JRvsb7uOzKKX)1yO%g1LoL#; -HAug79gvyMH_``zo~<3o>a){Brr9G@(t~oS}g(wSiVeXFsz9Z*rFu)h=4cUBK2}jf&N&^p!1hs6a|fdgKheZwB3fP -Cy?{bip1z=2lv{e%&q5p;rDJ_625;TTR=@LKALZn8qy)p5Y2DN5XCZo=)P+)lOzKra<@9&MB$GJ(V-a -`x=M=5+G@{xunYrGzqe&HtQK2G0b4?%A_w{u$5~O7Ko#w8}YD{{fyUFFj>QG$H#cD5Ul}cPDDf0hRL% -hp(Mkca5DQ5<;8gn-~;U3snE9t*}OsI2c^}6s2TEjLN&c4oxZal2b?Oz6Pc~Ip`z)6vh@}z9{EBaGFl -vw>iKR`t)qtRj`Q3sExTdJ=fwhAFC_{nJg?&G -fnd+?bWr{7tsDp*c7LT=JCC;{B!4Pui^J*V6)5!M!B^9wgdQPhrG#){Z_JUC-Cykpq-B^Syu4ddsJI~ -bj>tOAKlAh5zf_XclFqN9Q}OikvpJd*&000o2BNA(MuU7(qSFdBhpK_{inrwSPMOo5@zf~&4{)q`0Rb -i;obH}w3?wJ8F7x#{TDJMXxAJD{0a)m6$ -<6vkP2i?tfTX{6_9ddzhS32#G%5^|k&lZ7hrumnF&!4DzT0w3kF@?-j4R>qmi -;Jd9dfTc3EBpf9*bq -5*lzW5wNo~Tt9vDvEnvlKjyJ*IHSjkX{;UFV^3N2k?xpmzTb>egb>kU}oCO|g8)F6!wE;DV6~HlBUxk -91=}oWTv7C>ZBRe9y?c7YDQhBiE#uwu09k;3wKmEjC8*`}^Hmkscp8}F^2M?{_mO{n^fO88O7!k@tqB!tlRi3o+WaIw3?oSxm=o>&dQ?>TDep;U?p$h7JEz)Q69RAeE9}tbj2y;ZG4!7zFkh5z$-Cb -8&rZX73Q39(nGVJm}*kXlaT8;(6(+MZ@5B$0(L-YTYyNT9a(sKi=&0lhbhx>GwL?=qU1@lLoUes{fsw -B^M6eJG?X~`ScS(NWF~DH5ZtaRBQ~TXp>^Yn|JyR~weie1=+opKnv~JU|B<|Z1pAGbKIErVm0g*VRN0 -j&EJDvG9=yPmBDDz}Q-|LZ#1r50MnLXXUBfcH@q6iz94gl5)#lbVlwGRbbg8tVOyPI;MQSbe2leEvwS6%ONbKNJhnAxj$=6;dj3pCe)k-mmGcW0pNXM}1ISzb#XU8@J^Pag!yu77eM7xQ6UXsil4j1WGNzrD#R(>Qsh6gwS -`5L8~>r&j&;C#58&+G^&X^?xPV6(=_@TQM;ucm27GYQq;)lO;A%1Wr?m-%KvoEKx@6iA -^71Z0^Gy&U9-H`H4-B7@vimIu|n)5Kgk!+1I))=$u>6u4@8H55v}E@nj-%eh6P(5FszlL`7w8>xRCa? -TYYkm+ClsZvKr!!Pj-IjBCzpIp -TILS6guUE=xDJ0p5QDTrvy1U9m3^+iRYSCokURS-x5Hvd7~&_8=s)5PMFf7#miA^5SR?$rd9pYbYHu$ -2St2dSin)xIE6P?N*Kg0s!oJ)~X~baHQrHG?Bf=nw~`X0k4>y;s{Y@|v>*bTbBAIP53~UZoeFq5guJP -HtvFO@}(N_zW4H2(3TEJ^mL*Qnf&z&mZ|74Y^7gX}Cup>{qW3qC~`^(l5($NQYmW$*6MZc^1w1oAmPM -5NSD-o*$`*9#>z-SdFB|zo3SG>x?{kJHu2Y?$llRp2v;!sgcq_dkb0dBz@1rD!FH_l-zkMiH#oVvEO^ -n10N|V&a+=d`hcmP&c|qH5nAg0J6_WRYyAOhU^Wet~e;oWxKLO%)YGaA6VX3aML=VL -_EY%Cm1|dcZKb|Z+bn7rIh0@{Ij$(R*`p+cPUKK`YMi@L;h17d3$+Y4?lxN&gf;0}U27&4-+hcWaR;)&5vu+!P_mj{0fFb0I;^{vsp*u -s&1wf9;KwDGbLf#FENhPWFBLpuuwwK>Qeo`Z}_=bssbdY`Prdiy_wkzQ6u`0YJZLTD3u6nm2p0j?fDg+QdDLCASyeJ7XqEHJ;YknvWR!s+F=Lq!VKk{ -^kNiiVQDOG)3L=F_CTyy4qz_<20oTqKv->k~mb{QYaH1&dI)0AyKUwFzJ2pWTHj;e%95f|s7GNFodAT -MM~e_+_^b@N}KpXwv5l+{$Uc6%!6%A<73B9wZoEm<)H&urm=pP&$cz*U##2A+$t{D~7oJ_#>4O_1OVn -NS795AS}1ojgJqYSBm5JY=R0mJ9vhhNsoXggv!pY2$(}3-RXObI69p+oY5*+Y*fzkKjL%lE3kCRl^?za}l;@ft -6$eOlrp=`=pB&ZWS%dI#SNz4{{m1a7&aF&*DqN9|j}7QP8>;cb5%ws84_s{db&A3(5qRny>;ytQC8H4 -UbAwy4)r8#9)C_?JXuYW_m`l#kRy*D6sjw~c6(UOpu?2?M|=NZ;Z)AvPvcYs^oeG4eF&T>iI~L*^9iq -ZfE9`3}x-J1^sT7#jcL{ixvm^p-sqWR=Ry0e6*HeB02PF1%L>m5|&1lI%%WK+zu2r5CDqOc5^VcbSC? -2Hv(GA3d&!Qb){C1H|%|?c>Nt??B539Rr*{mWnMGVyryTO^UwPc=hNG0 -2eDfesHyCL@l`9Jf4DzT;AyM$SDe+OHI<_J`eUR3l*)<10T8ew^U&7C3(N43f=P1rq1LSM)H1r`4>i5 -Jj4Ih%n*JlH7`-_FoWwR|D}Fr^|HhD#0MBgeisH2go6ANAQk`$pdxw -qu7!0<4_Zgh9Xa>^_V)MZUjLi#4IhwN?$wZSu{*$c$kGof=ZE8iJwXh}p~E;DFS&TA@Uw*)jK)2r|2K -)j8vYzh|K1-MtOp;*!OEk9b;U5r^yoh4hla_kJydkJ0gt_mq-h`CtY^uq)HRd8QrAlUKwTU8J$19mZ_ -%Ak9;3lrB2hPw2-KZP9-!`QvX#1X$UW4ZOYWv_4p~dx1;j($h2-{q*g~hW%}Jazs+cUGZYh~V-DPAZb -=@SFx~oVwb=MFpb=MJ=x*G^X-Hjyv7`lGaL*31UP%gAAqS26ZwJZvO? -re3@kOrEA*e4mUwLA`i{Ngk$Nw3Q+P_5KFEJE-?b^xjLoPoejJQSZ~}^-=FZ^e%fWdDpV&vE)t3`P7T -oEJ;4~qSZ6WrCz+7N3s%4#`7tXN)u4lCWF65FDf#~IqJo4>5|W>7pV+6L%n!rOWLTHp!ZGc?WX;wUV0 -Dn&(zyP`%k^SwExr_r~Rj1`pkwvy{K9wJE#|rj>x^#iQ)*7AM0mzHF8m`b&nm>Oeqn3ic -VFR3xv4wGApIiSYmI83Xwm`Bx^T!(3m7PDK8$#a<2X)*VzF$)}~En3W4HD;m1#Az|NsxeN7X@?eblNw -X(FzwW0W~ecx4pXfbGnU3|TjrQouk~K1^*$+2d$sdt_$RG4qr9L`$JaBPbe89gdGa|JAYd3E9=Q3&6q -?kmvm7wyZT(t`2uE|1AN5WVj!cF!xYZvHvLt08yNzr!iz9nYo|7P!7;G! -(L|7W>-T};h;u8Nl=1qG3tun4H2D2jsSg-{j+xw-5rmI}I1t}CWpwen3%%dW3hXk{v>p_X~C%*{Xg`P>Sf&m-MTA>7!~6x!FQwtT)h)Vhd^y{uT?msqOK*%Db}c2%l#@#TDndP`$Bmo_C$uq;H+ -Syc44-LlsB2+&-(N&Hrd-~Hm(Dt-@&-womyi(FfOE25uaui^eBx-YCUdRhm+X0vNgZR9+E$A=VycNGe -;zy#hE#LFE?&BSMGTH~~MtLX^w=3{(;28UrMyvuyQWxwfsS4(B-ZRgVSE{@HM#TT0nmd~ofJo1b$B3% -chYopAQitjp$v>y5D!a1F0Em -rOh5Q){x&De!x=(*sD^VI5{yVYCs*U>1^bWSaXPelMSyQGPFYk^w{Jx_BhwK`2R7vgbHnY!Q#=H^`|1 -(m9w&=4H%QP|`qSYoCkFqF8q+>WFB?RZ>i<8k?qP2einZL(?%BTQCDgRf_q!DGY-LmRqL7apM4CdEiz -z7zWh7va*W{5{*Xs{A#&UM#NB<(EHii*hKp&~^UJzQ%`4`<$f8x8&8BcK{O_{Fu{gAzl}Yo0mU~HwOi -#vrC$)cYanB;dVsAygU?%H-au!?jytPRTr*RhTBHK6)Y%s6A-QSAmYCKXE#8JGEB(7Im-}{e>2_CKL6 -%Cb>Ww83PE_Gzq|~|g3^umhszIXv@F$O`CD!Z0q*55+paa`Pt)}>$6!C>1No1se2wi*dmQAv`L?`Slq -T3mq!=ir*oYL^heA#fgA~c?f=HZG)dfRv&Qcc)!r7=U=!bKzx}Yb{6V(M>fWbz{2Axp1tf&x;FIK&Ec -dRwBt?)}PD}*pkGIX~Tp-C1AF|@vTiv-wF7R>@0L_LcIU+h!N$AUE5T_stmPF6p;4KAjF30TDdn^C}l -Z5U;;h8f&RcpyM-BSxqTH#rmYc5C(tNfd5!(HP3(DBpDF86)T`+RH#&= -*{zw9(gzotGqE;5LyuP~N7RGtp*lhgr9;m;hpDMsxEjRJ~P4}u56 -2d+CV`DZ}qm}HPW(I@*e3$g=qb;*6rT%Zb^o&`$YQ_j`h~dhSw}Dl$Pf|DL<4lO1PEJM{%w;siy3~mJ -v>c2MmLxvcUoME@m!5YD1ef*eBeM6km`cRegCMx?aD|Ms}?AiOW>)v&OofPXvWSxxk!3qu>gjNfki_s#o|fXR29}|bv{k4M#%FdbKy -FvzTD-V9g0zs^zIVLqaV*O&_n(8i>8%8SuTsDW`&j3fi}bhSu=9C5LHkk(l&GJ -3?a1GLhBbn%Z+yoN3^)y6h5xHvv&l$>_br2HMgbEdI9*0`=sFrqd=P(NcUxk6Q#zl}KunDsB*^UnUYbjV&w0mKWYj3%?Y(&^5uPDsOdL -RJ1!3L%Z9e=~b0#4DBU`RF#q~q~0~Wrosu$Z%svO;v*h9uAxrzSZ$(Cg~#&REpRF<$!T@{r0E#DeyWx -{xjE6m({j^t(&*sBW$r1$Ata%rN$BM3(zb$iq{6bN**>F7H-U7K@v79taG{(EOY&S0ZRlqags&MFn-F -L9Cvr@s-sZKEU|4RNZUiiHaTGjV+H!Qoj-tq`o@K*i#2~VTk|80Q`V8^j@S*$wZ^J|`TE9j7mZ`k872 -2p2lRug5rV@w31IAxHg#;e0uIM9F-@1CLufjDdpHe$(#TN&Xw2GokJJ1e^=Wx_X%?)fEL{)*Wf0{_u) -vux>zCV-iJS&>xGniJ=okpre@y3qmwLJx3Puc2NEg&{G_Ow)2bg}PUHfzRM+y4d(aK{Z!g*@*pFGeoQ -4p@GcwIZ=7gmkRvkvjgS=oPm~lMMZ(OD6)p1Lah7kU*0K>pjN0{aRh%-&^#Y^jBD)I<4b41aA#U@QMzE;u0BsP8F6&8fsImnEWugoZ%0%74wF_74am};?iijCnb76a0{g+UJjpErPi|F2$IW848Kmj({5RJvBYT -1$UWWj%7J@_jVoR#qHogDOLd>Mmpk~$6TDD@9mX%QG{FIi>qF|u#F@?(%Cy$4)a*UJb{ -!S&=kM!7Y+1ry=K|<-2M_6B_kmCbi;lC=d{Yiu~|u^ca7&(Qznx&=AQpHQrn(;02)tnKNt;;48vp(t1kFD#YvCloXs7&X -AjbY5jBi?zmgtoI2;=ek??N*@)OBTt(roU7kNoVH9jXPry&Vq?yyI@;cW`0!#!Os -r8-d#{+ZC*DvY=UL%}+}N$uN9Pm$FZ&IKYBozhfsQleO^w_O@627*b7H0Pq2Yh%+?MMX$6mh={n158xI^Ug&@kph;`C3!{B&R*t8;x1eqk4H2EYBUFpUeZiDrSR;7yD{~ -mPKA`Q3voAkr63X>gAg;^Iiz}TtF|!yMnCowrCNH9rV7=>~KPzM=L!-HupCdQgYy!B@f`^23E9{vIkU_;eJw -4`5o-VPD-PJB7ozD8(Ogfr`8yypWbI3!F~==QT0jiR*6)zy&wZ*qg&-6aj-cP5826lB%UXwrnb)Gy@^ -3aZHk0ruV=c79mbz<)ExyfLGp7I2QYmHetOURNNOdTlG+d40C{CnP3Dkqi)XRhLY>%f<2timtA{|5So -;K7S)P-NvMS29r8ymq7!d=1~B8y_D0r_zCw$_ek91ltOn+X4os$$@u)?#vsxxGa^b}UmB1BCROVs>{d -Tf768w?Wy5f0nXT)t!_jsp?TS9F&a|DW$glkV2ACSWCE-39}>XhD=tFD -VQfT@TpQ`xySrb~&NU^B0f*NE|5x{zuiosv3r8G8PUL8fW%#)apdR}ftf_5UKEVig%5HdH!07G-fVk8 -VYllOT=bE$)rM4O&Wu?RvvWupBRc3?l_icrD@Ik7koFGdRP>u&?wR^q8?V}uZ5k+&{^&b7#@m(o+y3 -#^_dXUMf7~{7kGH-?*Y-<~JxBMoOOI7JSoSQ_dU)goJE#lboQt;_KbF57Awa2ifTq?16w?SGmAc?%0q -7w+KpHzhZR!DXx&u&^)+ygGRlL!9EzKF5Jj7a;J)le&xr!A@E2jF8T~)crn~!$Nz0X3{(U5CP-7GET7 -13G}3x`~bkF^%PtE`;2e|XTs$^}PKu-AviG|cICZVO9Gd|z%>nOqzyT40?~%8>tnSiaV_{{I|EzVvO? -eia!(&f`0UF??cadpF8mR0-BhGqequ>TYoNe*g=Iy9MnrNH4PZl;E2UdBuRRxnjkDfQfC44@ikz)LUC -pD*J`Sv60H>pj*AwCDsbxtXN8AA(k3g`nGtDPqnBgsn-P>pJM@2-PF(S9!LBd8=uyMXFEv?K^2xzYP> -e%9wf5pHU867hEA4z+)!caf)ucT)My^p2Wgz -Y}*|5CEPr`o+rfY+?7gN;~|Khn(-Q)w~7>8#%76xI{-R}H;FAg$MfIZbR*ez49FkJo{ll^FY2Mu}Yro -BJHQ{)^=#-Tc -QGLrGN;l6nBa8nB_CeamzO-XWDLeX`#<5t?*3cx-mmXv4oe -W*fi%Oh;T|!snOZg60ZZgO#MTLRJh`h8bnf~-Ug2pbzN4xyJCuTb1;SQNk%oCQtoM?^c+s9Ny002q#> -_Vu2Vg)R2$hVg%_kTl`jw-;?6^n)p2}em9HXBiI2iF^7IOTZC8Ymh6>UZ> -in?&4M9w$t`)v{K>6auhh>?Nnch4-8LLnZ);~RwhA0Bi{HKCcN2b}Jx9MOL0_p0HZ+ArKgscidB?h2u -$YlUy*yX)8Ks!2;WgS;-)kgbNnRswd#@25!)r7~e1+kvexilsGxFRj`HVm=W@+r`J!!{*Y8wa2&%tN3 -t)9=wvsCsOZ52KvBro44JTbU*Du2s%ttx+6_>6EZd`2sgL)?}ZHo^K5H~ShrX%8>%hGx!)+O(98mFm|}1ywG%GE5{r1W9nkdUvpFNcQ1dzcC9I2AppCYs{M=|QcQUczQ+4Z`<&#A#G -~>IB(C<6Vh2jG8xaeKQTZ4Vo2)JvCN5-W5hm{oe8q)PUEnD$a@7Uh#l=K*K?mV5f>;o}XbR(sgoN!Aw -JbI(Xou!pUg;{6oveOxfbbjaQv5!6sRWylhZ)>S03Me1Ra6(Ar-82texKDcBuT0*g2fWi+M*pbx0LDm -9hIUw&=v|0sLd-Ju;T~PVv@f6jPMpAljJQrz-l?SgW1O!UFGMN9ik+%B%OB&KhYkiDv?SfRlQ|$jd?8 -!RTtcVljvL9Oer3kHeME7DaK79SFdR0jBncE8FO`pB@XqW-U`pVD>izQ7a`z+fPfwNU2vrQwBlJhOZd -a9^ephUx~dDV-G&9PF8tUDjDtBQ1V ->}7;lgetV`9GAT#S}n;hJI=aZ(D2NJ;gS`(b=u+a|=^g77){NNlzFoRG(G9}PQd<)i!;jEy%Q5l!qzN -1Ml~QlQZmE1{Pkag;qymxRag3zh6~+NpS)e#9hAb*do~9w!gsae75~oP>Tb7ejCi)8)1RUsJpdS*k^= -R&4#IF31&rCc#4CXM!ZBm>uC~5{lMwpHON7?dwj80BQFX0)A7Q6iNQ2HSjN;v4mG!;%dsj#Ok^Ck@lE -rOpv5fcn3xX?O)_3DF(~_#W#e9XmHUM$v0G9iXCbIdXl+t(=Ej}RLgfuHGD(JEPO+bvTtY)L0pOG@EU -XBGqsh@i_wyVZ|Is$Jm~3Vkpwvs?0rLPK?;0B-z&Z$p$6gl5#SQ+eM2dx9Y7S$p>OR|*g1zng>y*ohs -YZ)wbz954!1$hHK8-mf4YJ%9>PKNSd9?zf|nEr(II?)C{jtTAyK;$_a)cR0=&)OJ&`2!AQ&K$no7pf{ -h?c8uXIQ&W+ml{68<6F*S2j#XX!#K@dtjQaN#EkuUS*kPL3niD!w9-N`Bm+zeu52F0zilNN^PXBAY~X -Gzpcg_>1ry{vshEvcCvK6cyhR-Wbu{6iHoBt;+}ukz7X3RYV(HM$2#2aT$RzlFO(NfP~jbX&jOcH4DX -Mm?peNW%>TzhBz+TuSH0pq^HW5cSW#Jd>d?yR*J7};1x~A2;Y*6V`(8bUiB2wN2{e$Ogqq^s1i1bc@d -znNo(+YL%55a()v}j+@zwjXNAiq2Sb}Q&7>4_(Ln+Jv<%*|10A)eP?(-Ogq)Yd%SMJI?T8l42z)e9eymvrf5>}3(9RCG-9mS9`EGW3-Rx`Sm2*Xpy(v;*2mIEZjzZ8r2y8M23H_d8m)`z`5X4{ -@Rp|B)(k~FE1GgkVTwo)v@ExAe5r9Zfsf?IOqAbE>Aym@APz+`0xcf5OIY#o<&t->uX?Y9cYxU?$X_9 -4uUxtcq>_>@epxZhftXPc#{&QoTGY>Qo3V%((9B0gU*IjDueA`VQ3A?vzvpeGwssRI#5p2t`_9SG)SuW^3D&D -t0LS8=PxWyZesHlx2sxaeUP%@TS+V+DwYzhT}4#hsM_b-fN5^VL1|5`ADN_;I&k0Njs-l8j^?Qs`7k$ -SX3Cpk)$@ynE&{gX>yh1UMG^kUw^A(pa?$$JB7C^}Eule$Jhp_}?N;94_sYmCZ_D0(Rv%C?V-dElx+p -$DKAqOg8nZ;&C{U~*i#c6-c58{WI;45wNfXzqi-MrMe0KmWyc+oG-fTQ)aS~6Q#d@)oYSVM*vxYgTjF -U}^Xwd3U7`_KUKHr8DC&aT(ce29SJoR*iBNkZI)i7%xRNTVT%-F7ITJt!GZoo8jijxR2m1!$XmW3xR# -&ZOJ{$g-IWcZ!4*?7@}{afY_FMo)bEmo#||0CN*TZW{f<|2n#C9hIzX|;H_ -plNqbyE3g4Gr93Ht#eZ>&t)pnQl^UUN`G`VFT5y8!eP_-uBGRd`YMCqBv|3u2Unf!Cm@x@RC+GNVk*t -7+w*~aiuy{)*f{Kup{5LZmffZcd8JlY!(jQ#z7%zyib9w>el+;;#*Y?1vG{oeKiNfQm@y-aM+%P_23v -O1c-Ekd8mO?%uukN -cF2vm7^FK%6Qp+IX|H0(l6M(@10W!{rme%BH-nH?`JR@rkfc2_}bQA!2NSZF0D^_07lZCxzG7ofN*$Y -OzII`_pB`sYWM*UBqPYp*U;0vi-NT;?@=LC&Ez@s$cxw}>>?9;v3IZzcntdXqS?*b -rWUIPW{3+OQ)Y-?uCX;SX~pS9EwGZb_3|3AQB|cSva`H{Ond7|@eKPKl2qM~NAY(1$oLax757^XdG0q -lr#VclXy#Kw!?-miMG;I@`wqQWma)PkK}-~dzpX6R;cjtJZ*$7UqLL5b`?(HcaY~B#%2MX(j69{)4%b -ftPVId~r8J?GV5#;gu^cYshEV~oh9;&`C#@-f8L!7{)0|?ho3MOoXHCAN-gVr`m)>2Ivl*4FcOto -4Vc*zO($It_+M|7_}oHK=O8alP!0&Il{XUJEKCK72UeHqkSAzU0$}XvSIECy*WpI%CkK4T-aEo+{RWn -iO=~Fd^uyVXRL{O29k^vGPv!dQcGLTtmOcrdB_ynpee>GGp#~EcX^*Y;N$O9@on{@g0g23tsBqhAA;W -!Fu5>F_IW<^|s-GE(1#;2N>VK3Z){CbqePTcs$rMe+aea~B;?= -s#F7g&M@fBFT8G^hLh=%zS? -4eFULKx*3QK?o;*wuh`aHo6qjKA@i|!<)Py@>8H?w9{~NOF}=u#duZP*hXy{ji&CDATJquU$KHl! -62n#%020dz#0kjg$~!x77cd@+NWM#NDzleFdh|~r#i_n4t*f4H&Ui9NJ6O-YKoeFXl`Ym;{^5$kYIj; -O@MJ&_sk_AgzuBn6nuS3$~|w(-+I=5m{vYb%qBOt#9Ui8p-sVfRTr{$u&n!ib>^3QM7qn1Sv&faXd9e -pb`n#~Y0UZpuQPFt&$*jn#fznn5F@AVk=GDzf!6xVRP=Qv6)_1F-eRBL_&T3>Yhl)4>-lK`&e)~bppC -ZrD6yDwWkq+Ra7h>{4;TI;PHZZWPZg`zk(@4K%E<7xeku+I -@xHbJW(3cF-%r)c=fek591t5-`=x&WmZI^W1nyQhE{P*)jy6GOa@;+y#-}mIv!rd;iTcArWs_}l` -t9T5vDcCcA2_<1#Xbnuq;Ihkrd6zzW1essKA1_^=t-3HEhYtee1^@QZg4{w7Nc0`?pfLCrg|xMAy5t?F`a5jFx2M%ea+FD1gVkUUXBmZA_@47yu_K7}lmWXJIUAcBEX0LAUbeETCd@X2;dKL!wV{uIzH9E{H%ogJ0k`sSle%prw7_N31bNR`%F!o^TDHtvqO*W&>|cG1 -S&QRl2dVhw+-}HbKK0=W$}SEGvMX{l>niZ^RB0qG?GBnakgzi1&?(+DM&lQ`xjVv@FcSp(H`Qb-t5&X -NmL*?a}JRx5SF$v2>;fhM{!EQct~bc3_4FaCTzGA^A~G`Ie?dqXu{^Yn6XtasFqjrL8J@*L}Jq|1*aQ -YkrbbUPX)AnEY<}g)s4ru3~Mtse8bTo~(qCsi|eG*76tIL`3Jk2+&2=xzbB{J&F`ZW%JZR)p?qFzPx! ->HbXs%OHo>P?ZDn7t*G&I2qAj5`78Lv;AmN<3K$CwE6JmUG;Sj%oD!Tn3yi3FwAIv_?EuTCn*TL|@>l -nK<#g031{1>Kt4LUKPknA?*wcucx+Bzsq={=B)Zt(WI0pPsFpBR)MN#n2wQcHtz&hp8^ax2Y+X$TlBg -4}+AT(z$*?R}E?c-z*_6-n#oG(ZHLAT~%r5B(@l|2GGSQE1C_Xrfw%7>`rT>=BMZMy`X-=s3M!=?h*BM{4;) -Y~Hvn}lJZ&@>0rxhs>K?Xhix_KTZxrYtZxrbHxp}lx -Ay;+^-0_|Kwnk0GXn6~^A)*%k#7=>2BVKPhTcs}3_VO`D$_ny;E#Hj!0+cdIQ$T}kFNI6Ra -xLUV>9d_bJXWR;5kDRxWT#J;rch0(#f#J#e0d4^goMgK|8DSPgs2gE1SIvx!a>ipP@P4!ElwAOs{pKi ->0zgdAK**kJYA(O|bRM_4B*kS={yWvKu|wqm838v#WQyWF*Aa~W9QSh6Tw|;$jSV_e=u07j!Z-@a -6mlu7pztPzG76_D{7Ru^6=NP0{3(o}Fp)wUg-0noMPUPlrqtcuyvf)}y1q=IhJxF5#@bNmMZurKXbO) -|Fi==Y;av*5DV(D4D}|2LgcAin3Zp4ZqmV`+m%`%|R#MnR;X?|CDEvU-SA39vgR$lm?x)b5f-i*#3b7 -QXQ^=;Ugu+V{wo*7q;R1ykT87zm*U|CGhb -oAGsC9`z;V@yNi&RhyJ=#P@I32ZzY#`-aTyXyhWkBwrHqPz)gG>c;4Yz&JKPe#)3IC>UIDSX&Kf*e6t -qeR+a={dvnIvvh&IzxO?x=~yYx4RBYPtTfxw0dS_nasda2~!=@P|(vK@YM)dEm%`=9#62xusHg&Pb0; -~5oV*=@CIV2ekfNA3lk|CipMdI==3Hke8kg!l#Yft^rs`7vgxd$kVU^n;uLU<5haeID{wYhJWCO9Gep -{1L`@D|CDCt=fHIwUKA)Z>6AV4YX0n-dmq{r=`CI{^78c@DMNAUqOJ$GB>9Xi~Q{sdIAL)|mcZP`9$z -^J&G^2ozcny`CB}zqHHvOgBa!3&SQ%sbgQi7U6PjkdQQqCs067HZ2*y%+{MtX`gSwy);z)KhDCCZXS$ -qJwP3EIHRR7#^GoHeWu^P;Ee1noh=JxIX}8&3B8Olpu*nF2>h&kRvJdV!0+PRXwu&_?;v}SK!vRL -+~_9$U`5YM`wvX2Q6J^xHr_n&)cqk?j3Ft{m!Hm3dEc{rDky;HV$q8IlH7E+$%I=oP9sQgn}v2Su8I%9Ntv6Rl3w(zEND?C4`W!T(pDVBFSWwLIdVeFy3zUEF)hg-W1rA@KAqRm`B6 -F-&>4$HEub@|D5lUkMzjsR=%>;Dg0^^}`xUJa&OGT)L!7H?U5%ov>68=Po-b%`D)XVg_#>N^_y))`MX -C(B@0D@`)@;GedGs41*G=6LB5f_An}8i#2U?(@c?A6h(jD$|g!M^d3Hk3KVK+#B8rzfk@*fk=y~J}b` -3c$V!UBeGUOGpJRxH_FXrVYp6BcvpJsTt24$6}_I%muMv+^uVNUc%maU9V?C(O59LvKiBXA8?NUEm1* -&R`hL4x{+#!cM8>d9>)gYoAE?DmW^5DflQjC}k_hI7y<%&`1zWq%(d^gwN%IDwn}eUhL>Do-g#fvvz(;3)aAI!9neMqrK*j$}F>(!|iA!Nq(!SWJ -vpaVcGgrQHM$T8K -VAl)AhzAy_6;?Q(RIxfDgEU30Qyw7?f{5U?4y8A`gp8G8pyANdm?&eX6(`Kg+1kk)I{#k~4Mk&3L196 -_b@I9>f{tbCLmhkq_yS4rvh2R1S_#&MvNQO`0}q-lC=2z14lK+qAvEUHc9lJ9X~zKvzw-?mawu_Uhf| -!M>gk_3Q8DJz$`Z?;yXy{sDnO!9zkqwP8cUBO-?l9}yKja#YOdF|lLE#f_g3pD=OK!;_~>otF4W()1b -0x|Er-QqyLqXJlq&&(Y@?jC1GZ&VTf=1q&DDvH#x>%^iPzY=3vg-T60ydYHTY6*TZyH^pMRKh-_{+2> -zk_vdhre@b4>|1|sm7aVui>8$^52~gGk-Rn_D0#vns4)^$1D*^x2zdxcMe{JZ`{?0z`o=KMJu6uv4^w -!c{|B2X}kL533Vk#(n{E4OJWtQbdE1q1r>ZzxndG@*ISFd^D#h2Fpk3Qc1$&Q`7N=kR{+52hPzWoP2`~2V+hYlY(dhGa#FTeWwlH*M6(IUVY={t(xC&^Z#;3(72+%r;gx%n*RUk^8f7}apUp-EBNnB!=PreM(je -@PV)70cGuW~)J?u#VR!wc-StYl>s5BwPuX2RZFh}rNtNqjyKAft+C+jUUa}ajQ|84JQZtjY=EWJ345? -&8(env8I{ldGX}TGPsLYfseTIlgkn)U5$}xn^Fr?1a#b#w2v&A#%UIN2n2x8Jq-O#Mu1U7*zSj>#qpA -+vREPjl{AC&Ghjp^yqCH75ofj8KlIl3?x2Y08)$Vg`#gS=^MgTxyD*om%gY_PX?LaZxwHyS~r+at3cp -@Xs9>|8qBC}T&9mb5)1+K%AQqy(G8bg*QD_fVT(dFu97!66&(_x%X$ixNWQi$=Iq)bgxHYG -}?^sv^cLi*dK(d&|uH7WY63`#AsvmV_rRtzIdM^GJ2q%&hdGLNFOrV~E4s@Kdh>h$wdGiPd21VVSj=j -aRuyJ(hUNG5WUjoIm`Go%zsjEE!R8;+znonGH?TrDj#h!}%TlPyWF#+ZYmd-qJw>0Os+Gj#@HS*k%ZB -P&^_$x2ajV0@4HEorRkCC0OQI!_mKCSLNaj&eliW>Z6uAWEDjco`W{^_qD_~<BgJXPxaDb(knW67D4lbVs8u1idpb>5WZ)EvW;T5J3me7(?|b8XLOv_^hK|}g@g?=*AMT>PYyOix?;hXn!Mn%z?tAz67d-DCKmVb+@k{OEPxsT -Z%6@g@kJQV*%lGc^Uk$1of6^|VQ=DV)-T8NUNaOi&ekD|EyWV1VT|ZrNSZ!Rk-F1C@+e9>8-u6f>I}~ -|$dMAvm8-K8VeT}(${HPig>2y%pzfSXnifsRIs -p}aDb;uNQY@fn+Bn3cfh(4GAVf~-bqRKcdJ@Jh_6)aiQ6Aa7#f!lF}#BUGM%Y}D(idsIrh;gpb+ -Y8aNKkE8B5T_;1DNhvdRddeN1m6?;3t_wHl(<7-nH4v9rSWZsr%uE@=_^et4*jbbSV#3LYu)QDD#(|# -3WF;HZb;HP78J(0tM6r#IV`2X`NXbmc7-PC2b?AJ9ZhTfkYO*eTR+64QD^p}kN49=4V8BeNy##o2tq&b(~e9DlAc*vglsVDWZ>giczRZjayK$^+~~+r$~Yua6= -%@Xe-u#`H)2#mSZtJtXkSaal#k*+!|Xm7l$DxEW*Ix|FhZA*cu9gv?n2spQDq8M5f@{yM_DZ}K6|I1MA!<&NXvXvcPAn>m&BAq9I1S4OqaMdZ#^Aas@tm+sO%`p7#= -NYbvLvBBB5Q{~5?oRor$no6AcD2Nvt?6@Y -UQjn+3{JncFbOv+Iy@{F9bDnhJ+Xu{WPGAPn|Ja#i^67t7XQ{? -|=DH<8ax<+x^careu4aaPN4-Q{O^|K~nA;CVOs`5^f|Oui47?_=dWE6XKY4KZ@K~Z{_Y(fShkK)k6t8LY_%|c=-*hzYq?Fy2;O9J1d>nZ(v!P#8~P6a_7XU<&>ed?|QSc!)wD3LX?R6gpFAPoWJ3cM5J4YR+icH42x{Na-)q`80(S6!udnq -3{8PO%ygzSV!R*3i%Wa6q-2I_DShMpQ)o`1`a3Fz!U+l`6h5S|nZhOt>nNM4oI=fMEwfTMNntOA%@j6KSVv(wg=7k`6ma~z`cgyFu)p< -Q#qPuv`@$-R<~-4OiR$`C;uYmR*DQ>Ae6RgWxc_fD{^)%shkA#jd?@+Bm+r&|*eLl;?^e>i9UAASJJ{ -dXAHVgNgE!U9s7`+z^5nyp(#LjcJfN;sGHiP}7++59i-K|}^Xax@q_fL^o$CJ_(mOnkV!YLdh9fPR7^ -~!C%(YY+p4g>x6?L?Zoh6UI4beh!iWZ*1O6ioJjao1Cm{CEm -p1ZzbtBI=HS+w!MxO6)``l%e-l_Kf+zOTWWL6D%~zqW?m-W&pYf^jr -=JoHPU?^(jPpWl5%*Td|xBQV>_H0+!Op7ipN1|@+A1uefo8g{@}sGWzvJ|0{&T)FWpo5oLdgVDT!ymu -jcTLvvgO5c!B?tnq>!T4pspM?r)Eq5=9AW(g{A@JAZPZ&4Vu;JWM2{fIn_0-&x%HiZmvL3(f8K!hx+u -9Xw1amV;exHE+Byz+Xxr?yJ8zyrKKs2Sr*0dVV=9m{(JFF$X~SA9{8C!RngB`6VL#Va|V_u&cU8L?b= -%xBR7QE}{kh0m3RpBfVIs;iMET;0xTOXy&$5KBQCz>eoM -&UYWi#o}&D&g26OUy-#`IxP#qy|%Qg(5kx2qzNBw=>mzkW;HN*8(mxHOsbTPX_tO7L#%*s&}=KAugQG>J`}I+ZO-9>!+QoXOJ -C(pW}D2Gi^HLVqk=xR9+khO)OF9m3vU6vRw3BiZuV;p~~LF!rKe%eF5LWbfohu@@FkXWLe1v$7{gvLm -m~W_@;Y_Rwz529$9Yx|g#-pK%s^h_fkQa29@ovyrDb8+(?s910UIa5niz&SsqBZ2D!+7B61R%w{uNwQ -3c6{`u$Gnl)?KOE0~|)~#E|Hg4P~>UZB=0ZZ_wvw@? -Bsa~dvA3iKtl{^uA$$Ov%*V3%d=6X9SFvKgg`MC>6@ALuQ2y?e-<$Feq5PvL|0K#klk(^CR%{vNe~I$ -HOZiJE|1rvc(Jp^4%CDvT4^w^vd@lelk8{sVQfZv4Q<4Hj^EEnDkF288KXQALAjEe+uP)l=44M`L|O36L$GoOBT!8QJd|?R -x(d&wtnm|Nq!}ZV!YMEj1S0WeC*?l&v}XQRqrvrWk2Ib&)VhJP<}tkKZ^2Cr~J8;e+A{=K>6RN{5vWC -KFUvJt~yQmFH!zVTmFX#!bpOUN)VnP2pb8)UV?C*AXK*E?AHODT^q|;)f~>Quj1^+7S3)R<+l8tD1Sf -7A4>VhQT`c}e=g-;O8M7N{?{n~2b6y|((8lc!8rwcMTyK -WrLsCwoU8SBZr6to+3dv4f2OaAT|u~ZCZC3DWf*3FG`^NiJ@UJqoboEqZ2yo)=7{EHXuGcGA1fIIwmrvYn=oX-@C7XKQtyHIx;3AX4nHA+sX+L|6refqnHFgToj>jEio7gWc~ -^G1A=0R#W9i5F@gwDg2I2oKQUr}7AQm$jE=*GwQk*-64>Gs{ag~YUXfJ5Xo`Pe*f4=YXIp%@+F9-2(m -OIbB8Ip;tg9fR%P?6yLIcCX20E&py+adY5@VtwWh`S9>52;X9UAWCq-r`^jsUNsB5X4YQHcRw?oC`&s -#YTiL!cNF9ZG^!8y_}!khf10N4NW;C^CE~$+E9+czA7mV&c%SF+nX|o&D%CJQ2{NB5KP|3`deNK`k6y -wTKT7C2@^rwejE&37EE7tCnLD!(&2&NY)s$hc6u?+*<|2gb^R3?4kibLPXQ^!9L+ZQFWsw`62ibB#2R -wg97VC+rcN+M1=*`i)PVvkC=MVoR{QPtMfz8ks(p?_t_Q)dLaGU -M%dTt0?ni|Pg>%-XxOCs6k7Z$O>`^lytJvZWO&f+gfHbX9*pL^~(_Tq~#vbAg1vi0lNvkeC-sqN0LbzI>Ve`pXqz8~pa$Z|wKqe -`l+%bGC)C|oTa#4KmW_C3A -4ys-9XM@`3$?K^hs+ts~g%Lho#I&|;TvuE#~Uaj2K54NEDj@^3n?oDZ1xp(#Q^zvk#yZ7zm)upLdD@x -F^MT-YIck9{5t69@N56BNRnm&EK+}xV?p*#=X*Rn;&_U-z5HFI-o+Qiwp`Gab8M<1IseI4QZF=|c^z!n=heA|-Ur$dDPtR_ig -1*jlz~|Sko8(!_Q!^HfNjOJ2H0Bsk*`+~xyeQFCnjgY;5RZr?n!D=RdpML=I$Z36vs~(b$MIL(BET1~ -P_*sZwJVs4fY0K3HEGg>G>cfzsZ_XzRVy!`UZ3DoawzjEcu5C8h -tzkZ~?=fclF|9pwgXRlqmc7?{J7f+u)y=C9NeHN8U?PCGUWS8LQox5l!#~tDI_CR&_3G7w&fr -zcd(7K@^5n^(ess`vr?0>M`bio`^If}k@gINukyC%lzxwJcOi=N&XU}pPe{;kW4V?Pf@2pm9InjFl*s -){(C@n3`8#;8T50mN%ui&&}(kn8+1@+og4!Blc3Bs#4U63{-Bg3bI}pDQQycUJjKPBk_ -X2)|m%#tC&pzWHee@A0{P>3-ekkz1bmd~XeAmZVQpMLs@mz0# -)_AVgAiG-v~UZegy8gK6maM|MuH&#XV?J0@*y`Ofq-vmtTIVCb_#sFs(Ol-sHdj`s>v%zx?u}@4x -^4ER}Tw>4?s!sl5#%99AIjpT(c-DU@Xkz+VZVK?$f6B>;bg4&_=2^=VN8;cN?3=eA(~9O19vzh}>$RXeIyis+ytoIBXcN?i#rgR0<07DKpgwR$y`k+O&*z_iF7QVkQv2tqhugPrb -NhqtZ_)D_#8Vp{_-F91s;c7D4GH=8_xJAwIYt2fUwrWe-@bi2r#k0kGmAD1{-Zt)95^5XaNoawzi2Bb -Po5OlpaD7n@`iSTIs$H6|HZlP6z8FbIQKokx!0%I$By&BE -mh-~;3q%Tn)f(GCVo`bKT2Xz75agDk^bLNZ)xCYO`Z{Q0#04=~9{6`(Xa+&jpuQ=Bp<2>jv=YtP&?z5 -k0*voleqM_Fg&bxoi`HIt=*VNR!^k?uVU2hA(UkOTGDB-WP6SM=!OTrn>ho9s;{7d3LXrMaq`<(NEL_ -_A+oLALwo^q6P@0~W+#697E{rYvt@^T*^pY9|J1)zcI;SO4W3*-nmHbe*b4xXcqAUBYI=v^AK353QF{ -v*GYXc&5e^AN%{kZ2f0a+7^h!awym=N_L(ZQ@?>r#^!#`XBO7{Sil~Unh#3gRiIy$Q5Kmp#yCkat66a -yHL((7dYb1b3U4Az!na}zLsbha)k4MFC-egsVzLToAW-q{yhGqi&ypR*>e!p!wR%B=$3})fUGwrU*JF -D(Jvq$^o;!xf05cKX!wrvD54>fXxRKSzn9||3NJK<|BV|rIQ27i0%%ZzLPtY&(hwcDZr$QXKU&K-E{N -tY%n9YsWoZQx5C6dVgzq^YdyexM(D04io=IkcmG*o?3Nx!)&JnN4RU+#51m9hw -I}JMZbU=Z4<+47$Kr```<6X9BK%E()U9CsjaPmJ%l!=(4o)*8qgm -!CR@NCda`(N7=QP%ApR!Nu#sq3Z;@i%gbhPgxdZ9EmhVh5KP~<-_Ft8WuLJ4TEz#F&$cZC+{e&~CQYoIsL -SD|miv2%$(|A=TPUKGeTF9_mq6Aks-^RuLrR%L|o<+F$KrK#cEG&7v%B}Z_J@nL@E>mz~&dmE#_Y-2Q -rKk0iR|Afy9;0?TR22Q{m?E!czbpjo4Zy%%o1&xsZJxfFQ4x-^hqTz#uL<6-2v}e%picG^AnTD01A#E -ssViwVm62TWGM+zEnKqm#-*%*U9ZCL)HGth^@jzHM7X%m0zt+zPrA|=?@$=%w?@4x@fkNhKvmzoCiPZ -kpm)E3?+8vZG_XXvE$#t^<%AHr8>hw^7KwfxESFm53l9w!=>5Dg271|0QmjA_Rk)<3|XWI@P3$#nr}d -HnIm`P*;5E$F!yIuu%v*Lw7QzPn&BFCiMX6Ahw06AjQwN_$>MI_V{SD1Sa%%bzA1RuB!#h=xLvqs2P0 -EtJqnVRkmg`xOoAf8ejke^5|RFW>ccbO^-)s2!(iixr%ftCDlRw`sx99il+VcjPh8JZ -To+3F~F*}T#QzaU32pfa?=TQ{a{wVt2&)JtVESq%9hSzkrt{z1jX#cxv^<`lKp$ie;~dy^s0*|Qv}w_vsUGax^BeWr^TBN|!w!7$UW6wgAmEubYu1Q)5R@&qWuBj(j~yI&j~+evgA -YE)$+i}_01vbc`v4l0P@fhA$dm#by7h~-)A=WbTI!!A8w36GTMNVawx?(EZ$ID4tA6|KIMw$(&p)hQy -_y#k6kJ`kY879yWXW$2Km0IHPfr(or*Wl_CD4F&0Xl&j=%`N%<{;1yL+;T>qpe^*0^>+LgN=l`11$|4 -ME;F4;L)F*|3PMIyX&&Ev(G;E*kiYWXF@`P2x!v^4SoCe<@4sv6ZL>TLz&xA=m5UJUzzj8*Z^m=2ec8 -ihx+XueYXAB1LJ4*C+FYLwjlo`OY0XeUVH-WG&(w(FIccZ)B|V${zHcjfz#q&TQu`1zBqb&BQ -KLo)+1jvSgTNoW2G4N~ywMJzfAAc(DdY#XHrfH&0NMoLLI)G>w+T)``}Xa%RPV3s-MiPyB%hD#z2c8@ -?d>0huLu|~0w1bdPPPT!Di-a5>YJ0i2^l~i1s*GTl=(#HQScP{|GoF#0Fe>zgL`Fu2(5=+gMgIm}1Nm0u5bXf%5_J -MOK^;IR+uK9923*t;>I3~b(TgwQpf{cG5qBH@_Ofa(!}hWb+&~v(2yNksC!XM>vqV2_e*iZnAP@8mbP -*2755`0Yz#VkG{PN3~V_fIp;P7X0x8bkY|HSVC(4gqWhUfslp@XRJ7UKlS6#Ci*=JW;rs2jzGfL{l44 -_N}w(S}yzW&S_U_d597%Rh8P{XVunEjVM2eae(6{Q2jf7xHb-cO@VlWC^m4d-MUoUGa~QUAy+bfV;ro -e*8;)&kD#T`XJDu%=bfoK-Zx^vZn*Q-MV!vf8m7}ggh&47y)!EbMvs9a1WVL{0F2nUw3qL{IB3{!{5G -Nw6|gGZJWE*3BtN{>qLIgh4i2e_(HazJ3)(rJK3kN{Y81d1ApK`?Mui%_1^```0H-8D07~Q{|WB<5q -E*V{ro5C3ETV+Xh7cy`vv+Ba)AB_eJ6N~F(-JBdQj$fQ4hF>&WEmr9-}dZ@M{pwe>d&|f5`6L9+mp@fsGv~t3BDi-qhzu>vX!YWba3i&c|!mcVZMquzjBL)|NZ*!|Ub;+r=@i-LuaIq2=mu>#r6t0raJx+S_V -*rNF6#ho|x!_;HoH*uUzr4ozkzeo0*V`3(ddZR{NzXj^hMCsuw`MVAP(0!CR=O$ -h4Asf--$VG_;)ZT4FG<8wuxKd9 -ZMEUmbKGc8b0X#wf_4B1u{B={jn8#cp&jC*Vne)V-B)@6g1sb4yYM4niJ})cU^bmtWr(T;B(b`Y(MVRQS8#E5e*6=EfCy#Jo8CEAUMSAD3MI!sKD1tl@U@IOJ -g6`iD(sHk*@Pdg-Njv_*{fVV{F;-~t}teC*X!;Wvc83iGOO$#dH;%l-wl3HV3gE6mqL*m!`$UPr@sYc -Kz3TaP~aXeR0ZG{rxFaRJ75;0bgOcyZ184gc)vSm7tY{Pbpdetm;on}DCmBKyhmWE^k^d8BfuP&j?PZ -u?ipXK078`R)BI_P#st>5qIy$9Mlz_*mepD`Lbop#P|+4DY`(>m8c)^=Bo7+KeT=}|Hu?3-UU$P@s;_*_#p`+z -kdBDP`el7K=k$S%fPopb{3yJd9t9pvAO2@b))p-%Da^W9`8Nh{R4mEKguTi<0tqMF>f3d6(#0hfy10R -a|GX^4-_AXA_K}CvLX-EPt>HRr_Ur=&LJBKA9iER|3_o0uHY5%e&wuLv&!J(!5saB2@^Q#0{%7Xmu>z -6@LiEZt!0B|IDOMHvZ`7s?6~N25dX<8*{mkLCmGYuYvYq??*r#KrbL4Z~-r%x1l -qE=dNA5o@DptqY&+X`SRsS>({T3SH|3^XW%e%=1lJC>B&cr9xZTF=KU1^5Yj<)cjKACt+H26&j0N1qR!1K+~bsZ)iI8SMgTaexQP953u;_*7uG6Adr@iL!0w*Pp|(pOZj;q}S_(Z -os>$%Df`#3%my1(8JPg%7Dw_J{_@K&fAGpHuT+ta`q##d8=rdZwb$ -zCowwh9`wGFxdh^XU#dAvI^y;gxMy*@7Zs$Aiyd&yU>BCUZ)TY0(&kuiEX=y3uS#J@Hb0mM)&<-&+hP -=K@W01ISrT3sh$-aK^f&jHm$&a*LIgmwg6mG3)_e6oSB%93ou8S>Z(<425NF;>7>#hb=TYX~p+S}`UE?vQ_!`^KUuVdGq- -G1!aOBp4WrW9)^oAI5zccly(~6E+NND&P&hg#%+4*o*H!J4e8~7#MSmAUsfilO|0Pes1V6@ZsFv^?Ymo5HX&F?GC#g;|7eK7V3tJGUCp1zKQ -tq;)^c|dl2u4z^{h7guK+Z#gCM37Iy!_88(|6#1?~p)Gr9V1)m(=A5i*I99tHJ@Sn~d7yQH+sxVcQZ` -&0HvIkucIYnKL8#hky6nYwUd1m)3{JkZ^#rvOYb4T*eK7JkfiihHT^FvPqZ@>XB;41=6=(91OguEDMqwn6kcW<4%I2O6S9p+Af -Im&_EB`9fJ<)FrM6?0`8jk{Rw2`jFtu!63*!+L8D4C~@z2B0#2IkC|rOQal>6ei@L!XtCm15{OBP$~?DJP@<+yUJ+8A+ -L`DY_g(yiT8!nw2@E`+)x5-9uV5)o6kZdSi~*S>zs}`AGRFXO3=$QJ-py>5Qm>Yrt -4nGUsN^*6F)zjHzKWusOnz?kP#>IlAs4!CsAIt}WcF@zR66> -fjpeWh0vIgS`}fhQx-&hDAg~jUGO6qI~h6`@ioVoiLP*vv)J^`@Fk)_wx4i)_TW!&+vZ5d$;$O-ZkDX -10ERg>ws|sXAgX9;P!$02mU(n_P~}t5k8ZAbUurGEI#XfcKUqjbJ<7j+s4<=cckwu-$LJKd|&b1>ATP -OJKu}G|MI=*+hkD7L7GAR2l)(oV$chN4h-_~3-L?zEA%_#ciFG?;E2I7gU1g}9b7p0#lgo0R}FUYAL+ -ly|A7Ble|^BS0q+Ow3D5@q8dx2u3UUkT8}xF}>p>p}eH!#x(CMHbf+~VsgIfjn4jvdhDmWoHF*qyO82 -otfuHXZ~SAwg8-G{UrGIU7!kSjw}A&-TaLRN>o8nQPO=Ef$XIm7!UqH>G(rvnlO_4FI!S3LMZD)qwv| -3Gcv*ubfQ#=ygYt%EJWn+e{&;1j{;f-eXE8tgQrIYFH^WX6z;Av=e7hxmmAhYSrF5i&YtLdcYm86jyQ -b3$@M@KEbW}6%w%$SBncfS%ANPLK`x|eo_r`%=53Cy4)+g8JMV}o$`+aWvwDk4&jq;86o$8 -z6o9A2Ld&2hz-?BkR27NcElV5i~FTX*4dcPHZTm1I={o>bh@btmK{t^CD{O9=}^8d|W70^5|fM|{moD -!H5xH#~Mz&8W81b!BHCh%h5&w(t+BPcoO!=RHv7lJwjcMbL+UJs^WdRXw-;C$lsir_DUPX)Ib(qYK|Y -wzlRsw~6saiXDOp=se~gjlGk&&T_|&-*@~I1$lkqSIs((;4c~K%l9yi3=Fv7dkPfXs9Q5By=p%%*c?P -8Jap>T8_-&M}}!-Y0lD!W%t1!`wtrTFK6e6_dL&a-Pd*9=bU$Y-dHtKB`U0p3aEYRfMPlYI9Z_mz{Mu -LLkED1L;CYhE?RV}Zqq*l8y&irdDaXvBg`aVqR52INplbIcbM=^ta!lRAB_e@oq=IZC0TLo7$y -L&gM$%|nMBk;G=uR4_^U}Q#zrg#57!fCs@We#%wkQ$hVy`$Lj)RJa$r*AX@OWPewO^f9T2Iw; -b*^5ow*YSkfv+F+UHymtM|U^lJ#cnQ0!F@SzTy;WG%zLgnZ>oGmpTm$T0~>kMHf?i?@2YxM^41pX#p$%}XeuZDFW@HjC~ED^93);DS&MeSx2^#J!C&QM4HGga+kD|!E^*2P -Z!Z#x{4kKPn?FmK4T4muWhre*P(-3tZmj_D<9OK$#U5y7GNK<6VRoRZaW_;W{E;kEo#Iu(0C7dNG7TZ -wNnk$P)?9H{l;f;au^d2o#B;&|BcxDzqB~Q7x) -N=Rm!qFv1pgvBXJ$DHW&Tt)S!p4&quILxz)PKy#lwB9XK&9Zp}OiPWKzrqDF{8l6X%0=fcPLN|irZ_o -}}1WMd!AGF);_nbG_73OodyQOlgtd&RQ+0LYTP9-R=(jcw!REeroHL5|KQQ>BXpIqGyc6J=nBn@Zb^> -~l9-5$+y*mic5?eu!dzL2W}h^-Lg)ekUz*5)MRy8dEnj-eJ9+jz!UuqgnVknM@Sj{l%9h$8 -f%@gI;?nmkKNN5J+nIJP -|wj8G{m87PqO!dC{P#sanRgP}f-|0v**8CmD6!Q6GCqI2rGRlNqy$T6)9*-dzq=w|uGCOGhX?KTQKFlb?nM%Yg86$x#eSuoG=$TefRUJIPMAQ|&anz$@T|;NMcdmY4I*ypmUelLI`+Yk3{7=ZC@7 -jXcDg`6+&upXV3(CEm)f!^F4^IPU?{M}XBQB4B1miD*C^1DInW{Vd@E>LkFO3dqv|dj_DN5BUASKpt> -V04x*%4{L#m&7x9Nfj0vpC~8HWs27J}7Bz~HXcni$S#e%mgvsQ}RGA_DvOrdY`s-j~AC?WWQHE5ra$! -Cv>13GDX*wMeCj+LmUuWw)y&UFrp)S&;dM(VRp#IMv3|-Y#UDZ`x)m8t~`WH}30|XQR000O8B@~!Wrh -HB4;JyF=0E7Vm8vpnYkpvME0-1zY0`dr;0*bPS -0~kP)@XGnt+WX98c-VWt@86FfnRE7g@3q%nuf6s@We+SD%z_|T;7`{Dp+VsPJi`C}uN(dbjafBF_#l1 -Dl?|rAmMia_^V0>+`BhInUiHY6&WcBV_OquH=T9DURt10N{OQk}-n*tdpM2`k$F9%L&TtuZbUrS>{Br -75(fD7Qye9ezJb(4ONc2PYd@*{MJsYBbfaf2c{V@7#miOvt8;h?q@~<|YAF<~>KdqR9^LS{;aAZ&-g|M0jaKY$-Q2Zc#6-ctm@ia)}@lSKmX>?=+1=BbGnia#z5U+^ltnr9Lw; -mdN9@YiYZtTqX&Gm?R95*~#PI8O<}=>Nl<43rauf2DkX^7YDNixqg*ZZkTBW4BzG$0-Q2udjOa5#sxQem`THU9|L=dHb}_ULo&oZyKRn%D7B0;#3r}@UzhAC7Dg!KKVm&yCR?}94+SO!&unu6EKp?%67a>TLW94 -2kj9TvY-aoO*e)uT>gjs5^?C1+%EqHte;v!`s`9<#@zuxT6hs@sM -b6TfN6jzZPT6EukcVH{8#} -U4V{!)^_>+2@#SW^xL?<00(l}{S4!b_I$<;dr>uYu9mQV)72Q%~%{j;x(j`$o=PPU?yQyh3jsc -4;ahW8tTWYWXIQ(P_-8Y;)WztD0tGf#aItKc20NcpHgmFuu?h4(Xe_l49jXe)={0Invg>0gs!Ms&y5| --525R~s8XqAlOt$Im|pX>&x(I2J?NFQ9dqd?GaAMGJr=dOvxv$WIo)>oc;Sd?`IFJtWPNX3lEa%yDbReTY~Efb8T%iE;Au-=-)+FAg>TEtv!DIm%NXE=_}!NpWgE7+ -W4kU)@h(G)<{(7xb3EUdYB^#O8e^%AQ-II<9N*EJi!B0|;lzF`bD!B)-68fEp+wk&*`>6+HNUmn#YkJ -|vaUGVTjIMj>Qkw+$bWpY|~n4o@H9VfsVEI`h(#v~XWX$z1|GT99!Ca90PoUkH&ke75pt692Z1iY(#s -iOCDTukMBElq>=Jh+zBqZ2~y!678O%5MT{q}U3#>yE$e14)E+R$V`##aM4kT)8vk$UIjykS3(?Kv!-b -WsoM{eCT4~_QH1E@!CF|P~QQmak;?h4?ttus&p3E#K@HHcx)fSN*P?U#5E1G1=AQQ(NX}U5y$>MfZG> -mbiJmmTPR4bE?$l9*teIh?;Vhpw9yYCbK!QJ!TCTA=g$(?aaSmc?Il#jk&Uh -hx}m-QnMBAe*`oI=#tAC`VkMraM02bxz_P4?=~I2=Q|vegFsO8HDzJq_IfUWpV^cUEhb5ozNYh?Zc&Z -Ncz}j%r#7^SFE3Es{~ZauT)QuRmMwXCyfnZYhwhIJ=u#5Pqo2%+!rqs+>DGV({KJvCjGGvfpu*UWRx1 -RSjAiE?#wu`iS=S#0n&=JdvzZ|{MlTwUc@E`V`EF8F@{c1v6+`S-;1DYr4h`oMpKOJS(v?y_l?SAf2F -thYGs62pNa7|@%Ri`ZApQIalykz!f2MD*ebo@ahNER4m$H}obqn$W$PVUlSv&=xgfUj`bP -m{y57{LK@G7m72M3I>yb$uA<0j%J1nC&?*+4F&^E_QO3iVNM$7W%B=2^nO*8BsE@8))cQfN^DUkz$S9 -)vu+A^&PU>WD)DP;lfB`MEKAeh8WO`^gv{y`8!zRV*`;nDcTUS3%k3`&bm9uuWm?@#Co5A9X=F@+_d8 -slkhR}n!;`Oj{bv2t8tD6yWu -EC;BAumG#gz-2xOi0DvwE097goM6$7;0c2^Pz#x!Rac)fS%|yKIpdKJ>n~|OYpQA(1^S~wlDl5e?wM- -tD-Pu3SF$uxJa&xo2vbR~+gDIz4>x1mB-t}g5({Jiozq7Sa7ou!cuXQ2WRUA$X#xNbr+1;nK;b53xFOkwdP9oYx1((y57R0Z>_nT;ZgfA -$s}p!X|ADh}S+?*jz>oF{!2xVLOPuMv)ejoibQfn*r@ih<4vVM9?CW=9a>y7NbpQERtQ -a3yI6$KVkE(AiEf~3tMT^9S<0hAR_CXM$MZOWobQdW|Rxw-p=?}BhsDN^)3wX_p#&fo#&@zSF>6H$~2 -X|ZlbSU!Jo&k;?K{GXO)W!F4$tshZV~1jSD6+26;bciDwW}gbhCh`_^KU-TSMKU97Y4?8x0&0jOm-z+ -$LOG6Bp`a$CG)EV<<7q_VPFGWi}LTx5>|x?lFq@J^q&j&ma%{8bq7NH!Gf2 -C4MOwV0N71ItoU01s`@zV(2c93Kt^%?4W2r -Lr7GJvq9Yv+kRC=60)%3?NLIhGF^y4n_gBrQ{_&8tI4zi>eT@+h%S6;2KV;>*=yjMFPSb&`WH(L2nn! -LkwCU^>ESv%1fcsR?8gNr(b%310VNa0xvmnu?(HHGCn3Cb2uqo*S6s7e{C3EEPDC;MvlR?ySU+9n`a_ -G!=0t*ct3SJep9vsJk!V~UyA_3{3EsR`u=#G^gh?Xz~^KnHlM%g~DJi&b6WNnXC_9O9wcbGO)th^ru= -E8Q6mQAs#ENL?nSs{w7ixp!`Vr}gP6oZv8|5~P3HR?#epb|QimqYBmndJ?TW`IxijerrLMRa#C0ctpX -J&%D7_+kf>Hm5)ssKteA7-V0MfSQwsnkOa%!%@W$p*ZNwJihuf={@iUq|Otzp;_R}@LGw`1EFlb{SE)omy#T7LtoOwdN>7hyWEe(UoiLAWR`wJD=yQfeo4EL- -+G%$81{zJb+k!=xToLrO45WqDFsOLI*i4cSvpiO-pm`*>M7i!F-6Lw>*)#y=#oz6`N?Ba@rjgCpr9qZ -16|IMD6}Sj*4F-e$?$m4m4B0KMKu&%k5^00o@B;)vKO7*N%l>xsGEV5LpEl%Y7Y9EX0V -^K{`6bEE|i{hyS8Qfjz?owK{ABy#ZP&9DT-8TcHuNPTBtnZ@Hn^7y|Vk(x(z*1H$wHag#vA!k0*;@n} -4Tu>qO9kqm5hmxk$_bLE!E(qF&|MHqXSQ(OTnG$jdw}dIwmxwKKzI?rK>39+{!s(tA8CxA>!mpUK>pr -Ru|8`k=o)NPr`f2QoghsPsZ`IfxHBwnozt(bOY!S%*ynca^G0R8SierJZ_jT7#KkH>DWfxxnZ@WV38bN>IsA&1HHgnm5HMM2GHqYvG%w(SS)tA<}{jc7TqXEBvE -!ZFUpV`x^?zXl+^>>^i}AcoPPjibl@<$a!oXCGt8MblpaB%4HO+&U{v_*Gh7N$yJkjdHlzpb^uyfv#K -dlZ`VbNZ2ml}k6dpwx6}S+6xrj~pkN`?!yATD26`|Qi%c4)_CV(PG?&_{7#Y@vQSU -(YC3;-V!@vu7Dw^LOka&NwTET_5LUaG2nsVa2+4-0q`k+#`G-*&LUf -lH$fKlu3V>_{~5rav;g>H6L_3mJK`tN*hrKl68v#K@W;iuf$(f6*RcHL1fxS|0^}ef%WOoJ2N5f9c7k -JN^^C4$1jxF=?Q|3HCwjdjfk7YTz{v>b?VU>(?Im!TnTA5CXY1WmabU8x6<7fM8(M0fFuAy3qUHd&dD`FV -!K#xk+rLs!72bN)WbGhyrfxotZhYk3mfm`Zx-t}jcbkz6v#Jyh5O1#Cn#%WOwzh3Co%AKLz%Mq -YeP^tgarI1Ke6F+qP7!6hDu-Y2qo8tI+@qq1WX9nqgSj?sq{fzM}f?aL|Z{ZY1;z&nwEcYIn(9J1z9< -G8xic#&`vf2!+@FoaE4#>wlMa3d3nfSPfmm7!|^^#(~NW?kUZ+DVdlV*dFOq%;XuD9I^fx#PmC$b=I;46u)SGZ^V1k1y({ -d90LBAGvdoguR-7Kxc=k%?;cn$af640zB@QEVYd!u6Q+%%LIy5ASYv6>GrrnF5XJ2fhU9Xw&6#N*Qm# -b$m;|yy1qOR>qH?VF3H87?g~!5>N9{9#SpF8QWpW-!DOCTK53Oq>p+7-#Je~pPEIcnQoonhm&FZfjcEw0d9bdQ7w&`Mhk7_Dhtg@{fDroWAi) -2Ha`+15?q)eWhP0H04slD`E+p@}nOa0qWV;LP(&7{(v$IXBQn>U;pFM%Lt5g)nbLe-25`y;;cqM=^z$ -yG>2Nqp?J%iFP)>I&THSgg@J2Qwm7-s?ffoa>IM*NYnn}5SblI%Kahi=fj99lIffhamukr~x)?~!s<< -rdmCnIS3Zqd&WYqwB^JrceLQ&*sqz)o7sPPMv@gl|divMxInLK~O7ljg?k#5#A=PVJMu0usQTdcA_7P -vT>zqS3y5KN~-!uuAp_(>r;&teUlzv(eFc)wkv5x8||Po!=IR?5`;_L(YF?)sE^7XV8*AjThS(7oOcS -IiluO$cB5Qj9oqptH%DuV&|N5aq%jkX`^9o@aDU-GwE@MKK?~E1U+ojn2;CC?z3X4tO=UEjpRsDmmLV -p=1mf})5YvcmJM@DQafNK7rt8!(ES~i*M%GiHWj3NC4h<)=zK&UUfi$|D+DjOSGa5%>!WYMJA8^82wv -@uR!czL+F81z&+UURTH1aZI%}U5i|1i~v!u?D721GG_Pp>?RdWw<;llT(mI}H=t<8{q5iS-~DOO5EI; -}v}y1EdKhrw;nV7y=tDO0cZ4*cdGK1NhNKl0J1cgM<*YLCRo=+)S^A-{m;@zjra)N6mVi32s+JoA@_( -@m=27Jqyd^P#~n%#QfBk5>^*M_0=HGGfZ~E8$x*MXh#AvC$B?< -94(&SlHUSt<*I-@`$YB9o6JE3mKy|QaUU(aKh-6ahVjTcFH3a=PjG)>C1jBkGMiJ{We1xrM?HHm(@0r{q8GLZM4{Jn=DuK+9URNY8+PS~ -6@flO%Y)C+@<8d8=_#8k%A@>Z?9x5XQ~|fSFIvgEoJ7ZmvJPz={4n7uZ6}$kVnmawCx}e)4otS$=OBI -T#>EWD;9ZDTa<>?ED+`x)g8J{iSyXF~#G3*BGox9gv@hW97N1`MSxMC~oq!P&{N~*OB%E7}9WgJ!iT(<*gBqc>*l{HFC@dB0xPKHwtSuvwv+$U&@K{ --XbcIuK7j7>ezVIece{Dp9u{Bkt5feNXX6YbuH{0FA7vySRf%t81B7vwKXlE*!7tPYlUJ^sN$>ekQ%? -oD8dW+orrA0RHC#9hDbypR0s4ckB7doa`z3zPFMtpJ4J*P}i-9m5#;^N}S?WT8467*g60%Xg~QAzKNc -fIPv1}>~KuayS@uyf(LAlYSwudj%;o-U$#O-e*?_u+^X!=T3{O0C4NpvK7>T<=3z^?U$7xKzfo%6|MDSLM+rz1cht4n^EjaX -!*KfROL*HgMf{<MapnGF*U)wS6P`JSek-PPiDZ -CY>D(sncbRgZ8{WHx29ly66xgb0%C0o#D=zuwcjFlt#4CLPk-)dCEvCa=Y|hpVSk#n4E=#onmU1oZev(8?gK*as9K-$&ZSRXu~Wd<^BW( -D6Z9o{=*Pa*CQLt~#8xz$%elngt?~TqVSi1*-L-!DkJwD$4+*0cG18(I3Uk=;0^y%X^uo75X(Zf3&0~ -XRcJ;C1Pk1Pf1kZSk5Z23S4$ejj=sBoXrgA#t`jJ$g-4Wu^Cyuq=_tc$TC>Vhb&brOPZ0TiDeN(8N9J -Ukj;KUSG>iAV(2K_Yzm-RX)~xdK)unq2%Wg-;pu!FdmxK$%@%>k1B(m?bHl#T-f++s2nV5|4e+qT-vn --S0W~PG(^POF&AUJ+DJa|*nQEecM^Uj*N28~^J4iHrnIKRf98nJ- -I?P%vc~Y<-FQwUu2KmWv7d++3w*txU-I;FQ1}bwUR$xJd}AGl=%5b)dhC{sOcxVNiSr&pJ&Ig219eYR*W~pa&kfJxy9X_lff`gX}H -`9rqqow=zE`$!SYLHD96d;?P`7pQRP2l8n)o_sDq=;;yzegtL`0aZ}9AXIYFQDI3-@mM19CH96F+h;L -nI?eu9zUu=Cv}JR9$FGM#clgr5L{OVP|OX4??vC~i_I)-o@Iibqs*22A)U$N>d_*ZIdvwfmWu|Aje$t -^e|?7p-cPo9BOaSOL&?{h{N_%zZ(`NSh;&Tt8@wpBAsZ#qnr1H)Y+%Nd(}N`O_NEs3Rf%|;EgTkfT$< -sl1zhm$9!>z8?0hc_)6Gfgzlx{lu=K=U@&43-JaZFyKvQo`MLcs%?=jps0+DHUm@qeVNeZVVHc2n`$E -i8m1#?+e*i?r8k^qPR%9!+t*O{b^X+|k1;zcAv{RJSLi@pbTf3(?Y{mlr?X5?8ukeSziA+5Et(-8l%8{&U7~t`A)K0Ph(?#9!^t()Cz6u0RHELJSx|XzaAKC%i2U)_c -H_}Xy`C3471q!krCQsXUIosD-7t^8gCO|(3kji`+1l3XMGd2?%B|#(~{w|Zv=`#lqACQ)`*kyfda0e7 -R`z@wTWh5;V)PP{B?l}A}!N}7Q{POY!Ex7^&N$W~1Y;FgN)&{8mDi*s4M%)>+V$T}xC0s(7YBZd_lO+ -g|JM*YFBd$b0@G08Y&&p<4h!bZ)#eQ|kc@PpUq*Z&maRO$!dU9gFU!+yQh~j&jS~=5zX{Eqz4ZLV@qC -uY1{>2>(kP$B04|?#A2Fmtm+5Yg%^MaO2XF}3)^h@{_3vK)-AfI -|>Jf`_y?P{78K!SkZlcG|A|RRk_zQT|Jg^)jY>#B$0*}~>O#c~wE04Mv9@-KJU&X^?Fg%a$NJ(sT+t6 -%Z#jKOdnI(v93{+S@Y7>OwA6t~6sLwGq(Kp@UJzVh#cV0)S^o&A%-6XzT%Rj!thGPGgKf#=32CHW?6<{G2B`pBhFhRR6K-M5H3 -NZJ6^>6qtK+fP$FIkD=NA#EYi%`(4Ui4_d#A1^DSrnG)Hsp20x)a{bZSHMLuazq{veooUHgxsTHk+WY -LoPtF-+@fpC-h^~slyf*^ehc}wh)AtwI~I;_Xo4dZ?P@XA?Z6cE7=4O_kLv%b~zooEQWG%TQ)tP -h(jn*#vtGu|v(qQcPaN3k#ljk(QzVVa6c;`R^fZ#aBn=HfSG>cCwjEvXJJDd(V7TiWD&S@y&ieT0-r+ -nFaGPYmcM{o*u4L}Ac%)KDvVV61L!E%9Ebk_W9agxVb~CwSA;zgwZF<{x`*eI3@8iYev#8{wX|%+SEtQ-(4a{XE)beYl)AzwrxlI6Z1ahpkCuTK=x# -eu4o;`ea;|6O3t~+-EH#yYHjI*=RCdQ^`|C?x|+4BwGCYRata%H9XVqZLb2s$8a37-QNFWybG;H|u6OGP;kMP~9uo2m{P8wN- -cIv#^<;7`cKcUd<9e#~SIF9US8?+-SLQzY_VehNQ5!YgAKjm)>UZ-~sv*$B%9j`n`(;LUP;y}zE^U0u -K04(sg})w3TYB(4(MEGZkEJ)PmWKlFHgNA5)g8Ipp#xf?#>Fhw^wBl$!1;`fO!)oy&3rN1fP3T)fdV^ckw -9x7gjgJTfz*gc=Fu^9`5VcnE|cX9KRN=OK^~bm;L+%gE)c1=J4subC5!(&&1(qhvgqx@HK!j~lnd=?W -|I(^W($z0?s)hwTt}a%mgr_Q*pEQ&XzgLT%_cNey%#lOo!VO%NacY`_Kz>tSLMi$N6RF(#>C|OOZvIge1toqv9rWlWtJH)}wDJtapXc~A*+m|SKlt~24GEPW# -+Tuy1_z61#$q8V~z#bRz0tL8?r*AK*vV)L0+c7pgV#xckr{sj+So48?dl8Jd6;wjQP6Ck19>~5+0Zkg -A0U#r(O--!;P_i5LNEAKaX#g$E7_qs*Hr2I~aGyyra;K5VVdro=>9^Y1@Da+Don}VN^+q0O745xZN?u -3%tEnc#T?}Uct1ELsS_uT07=2T{*^9YcQ+?T~p5JY_Q@k9aJTMMuguB4@~9lZ_c^Zv_Z56y=fFDxOk- -6o?@8S?GOjQIhcQ_hDK_y_EX42pXozg6lno0RnGbo(-I#+TY42&O3Z>U5{H%xn9yt_FdnrM1@ZZB@P5 -kLMQkO~E$pHpI<4^8gO7OA(J#?HjSk2Gv9+JGCqcLxZ3eK;Db$(AOcLKdFk!Br@Ny+XXlBrCZJIcDb- -@VG%q7OZdxKEd$~#{q9@lychS*->LyJgErZKf}wzWU$3HssmpH`ZO&IrU>bp#8&z{(QqqbvmT2|5NtO5Vc9$C35z17Uosldj&H5KR*P5KOl7pss`V(C -yR+J&HvDO_cUKa%JmODM!Em!lYXU_+RM6II}ITu1sZHIdHTrdYMh|Z{0Fw%&}q -J5O`?S=lTe`1v|9l`S;gJrJatIIuwtv~f*`dLDVJneo{ed+%i%OrYLG|H#+h*8(>)J5lF(&4}Esd%rEGGaUgXH{fI4r^gAP?^Sp4Q4{`}3s@1S -ETMY+LGuyLt>}_Jzv}O*v^XwX3s{L-uoo{^f!ND`52kQT -@mlKc0Xy8igJ}3i+*fUt`k=d7FS9pcjuxJu)u$iCoMBe<{gsFgt2Aj&F;>HN73c7Xhg8XuQu7r%%A%6 -j|M*ixYc}vL&Kgbw=V{w@GFbk;sKvgF!tSEaIp6Sm^ -d-x2Ia)Tlbc6d6F)B3#A)Y{dlttC;gNPuz7o`7F%E{$J#@q;ApaX!Ob=-PC>#pMPxNYU7%7c<%jxyVS -x(xke|71e6~aD%6?G_Y=l_e#_Tso7BLvd{_+gI -$D6#GuEXJxniSO@11I|l)|<0oO?hCTc>?Nc4KuOEt1^^ij;&xh%j;nm>Fu9^* -S?vhqnV7@rh8$7tb6Cu)zrtSIa7fwz`YJx8J2v8w@?K|&X6Uo^h^}k-Adm&G0yx}%5Ho(NpxXhx0`k( -&4#(|*nzays_YIz3{kOhtAQP!2kr8MW&S^x&m!<>WN3DxSaKdD$1KqkwCN*{wR|U=E-NW(_8KTxQYLMSSH}JS=CLUbLgIEoHi@%pMMa*hD#7#&e)kXvZ_RCbt`clsNg_$GIl&|4 -{wr=?n0X?N#86p#rc|zh?taJwEQ=jWY34z>YOG(0X{&_oC~T{`ry(Kg0Sf;_{-uao4F>sphHgK^!O9afmZuTGlA&MQ>9+r-+p7%a;U&^K72S -qIc-a)jX3V*Lz|=hjxDG{=tARWAj2!g?#~Hl!1=ew{X7tS_^#;zu1eE*Q@wT>AA^re36q^**~+f;j+b -5Fx~s7Mpe*nVJKVu2W+6G(2VklB>_orQ*3}CJI17#R9*VHp*?>>iTK3F0-G6DKL~*Mq|I{JSpUf`AIjwH>eDW8hTsc0TBnf7>~e<2SR%o4UT=q&9-7~JA2tK);2N5* -SWBa(t{|3-);h`V)COiGzyS&0^Fx>0^h18yZIE=p-|J;ADl$uM>F*A*t8p4+ -G&XMW5~opF%VjEaLuIYrF}i>?j>N-7!Cd+PuQymoryax{4ySfasOjkmt!XS*9=+ut&KaIJ(lY79gNX@ -Tb%0Ia_nc}dz^z!^V~=mVPvE=l^!5J49y?#3J{t_zEpZU(P9N&-v=DU|ZfoA}w=E@b_Jm -Y~i9-AjVUl{9JxVrR^?3sSz9`gtnoY`x@H4iaX1iD$X5_ilt{&`{!{+eRTvD0~Y3hM*)V7pxY3`eNt} -u85-Lw;Nt_k$cE}-`x^U!Pv1v5cLoAm&*NHL-8{Er2pw=@^MXT;hF%ANT#nQqUY3nXQ-2^t}#F1;;WY -6~5Ec7&H~fZ|8WagR#7Uu}0n4`R0ghT*BbacY0Ras|6Tt`+ag1IvABR|#aSG3G$6|f7B&-Dm>*f#P|m{e7gulC*Qw_akTb#` -8<|i1`JqEX%PuK4?xE&fH=*qpw?P4h5(zo_9hIjwWWQMmmnc)r8hpyE?#^*iUpUm;*@VbLPqz~=o9Pe -7-c-KJ28#v3GvNwt4-Lf|^_t8BGmY00#Lh?O7m*^3v`BgvP?n%^A1Fx~6cwSPwao;toQ$Q>*)!0(Cld+g%7m8Xap}k_rnqEszn!$vzBFJ{Q*80OTNnv>4Ylbhxz7h5# -sVj8Tp*f+fv;GgAB1cObfHHz>5wBgeSzD%6B;w>gac6!p7o;!0+A4vSh2?i;EH>}r!eeM+wSxJ@v -id*Qtc$o%X~oSvR^_?<1_a=D^eB3)760o+Iq&pLz?ID-BSR$ZYUE}~1j;*2G>0o0g69gwu{ukhx!9>* -Kt)K^p4W@~`-1tQte|I&4Tvu;(t9y67^c-r}pNs#CElrQt%Xj@?tYv)1UnzOi`7Y?VTP%|_zx+^}fv4 ->L;SclQe`PNjNN-^{!=Crq6+2&m~@5Umj0gX<+lw(roc}ZNe#as8}Y`tB{0h*afT6#NIn3NUjm;C{9Q -k!jrU)`oj?k-83+y%_3oL!8{{C-B!H+IK2C};zFWtTA>08txAOyPERUUz{X%`e&AucBvd*Hlu=h6F6W -z!MMn$u6k@w@Z7x1wdPCabtQ}pdekk1(cPSP+@}M{1SEdx|Sr3w;7GMhxRFDbs33r=Do7M4vO?)kz%R(yeW8nQkh$@OdgaOF;IpVI1NRy%q{V02}H_1^`Z$l>qd -6xgYMA6+^kuLmhOrfp8^r8L#JQJAc^nLZ8u;9&KK<#~44Gy|mti1_cdaKW;h_x@KppU+iEm -hx|5lpKN6xb}9wffNl+gX3bdO!KRj2!oyTY)T7b|`2R8e~_aeM(y96DExmYmpL4x2#vP*`|wM-w@l(x -UG-MdRxFv7Yz4Dd?q|^oQikzY0m}-jp1sAk@dw#1~k1Khi04!(l;1mObhdy6LrTQUSMyP#Y;a`9)WRX -!?=l8u2M5wj?x4N!~xZC6ARdg*MF7}}P?E?p99(YZs`H}#mSLFCd~V($ -vZUX3QIXDrVRhu&2UfeiXOaiw{3(Q09~WD=A^;>yg);+k3$hS+J!;I@ -#Q%&AJdAZfL3w@LD~SvSjcwa~viZ>%Fm9J!1}D5_=2Ql;5Qd1^D#tH6T>6o#x>wc;BG_d2*VR|M@oRC -7a4fD>9$L?d;CN0Kd2PU8D(f1{|96^2JE%W}~Ytp3$Xv@Vd=qzOH -y%h^otcdy<01@v?RI7Tlr*5R2`J@>qmYAvH-R;Ov{SL?fT8Y9i -f2Nv&H98kk-at7O%57NI3{OYQqE~8kD)eQ*3_F1@8C&ruS^WBziw3E!vND$9F37SS!%$Q`_R4h}yQ}E -1p-0N#{}Ec`|4r`?U`NKe8bycHMcj_G=^Q{%wrMGz=8=ZQ~M%y1sni&XxyfCEwl6&K@UU5hEdcJ0e${ -R(0f!%eLXR6W%kFs5XYDatik$Z~Ozixl6WpBX9gQLxIBq(uwx -tF>F(L=IQU4G4i&#KkgcFIA(ka1GG~%QCi4kqQrOQDy`g72xc$jYq|wQK0Rys|9}gXX{Cft3Uv|sLeY -}!uItNSwA9kQgK%0ar&k))DNmVwxG;fiC>+v{3PlTJ<0~zeRe?>jdjG$0&CcrflJTuC&}akK -4vvX*->2F-_#x1&jVuPd7H=+ZDb2wlY`CxJ!nFRI|a{8VNMb`=rU&&G68s7!r5nzqs6y#flpS~rOWCa -y?SMIvMywJ!&PQ@yFtikoqQvPrg-bBN@Zf*i3QYk<#ObXUS1745pN*b|AK@{Z?WR~iCFtXMoI7hFfw4 -=qzqIzKSF^d5Se2sGk;Z_D+Y4io5aWqYy>4Q95;H8elRIH+`c`BI3C2-B6X~paGH5%*x_d#ZeAeCk!i -fc)jzqR`hrduWF&Ps?b6P+6Nj0NB5HGgvZPK+C3&Zg;Srwx(7tDv_|-`+U73TAe&rFV$0wMS2k>DF4) -T*Mm+tsW4fFo-$razAz79p1m%L0is9zcS{4vnyuWR-biwke}LiUHJbLxCH-LblwizPorn&ivUqrlDm> -Ux{|?2=j^`5Gv=OiG?QhW(r5*6}jWN$!3nqdMTWRmVa|$0J^s-s*MRYI?gG@aFAN?P~LP$Vt6zx+C%& -_JlH*pE87^%$)s>vsM+ixDr&z>)dKz3KB85&7)}?=ZT#4tJEi?kp{vWtXECv>D< -FxN=EfFV~!9mXQ}_yqX~UougRv7uBc&qEi9lCs#A)Ce+O2yG@eyqKZBI4Amxj`-9xv5wz2e%?UFQtjv -47q=Q|+!iF@i8f_hz51{(TXStI!j4>Uk=58pbZDtz`Epo)+gnk((Z)M};ZS|uz+xhra4HxPbGr4XN*D -MT*=_Own6f>8WL-nc?=uDz}v0tHN+`f2$yX5bhAS{?Gll=kmjlcOkkjb0=1W}+d$)GU-sXGotGM5oaA -CR%l4{!o_yvLhs&_9XnfP{VQS`uv--MDFh{%v9na{_qFgNy)q!1-`#u9n7(bX%Ee3eVi -(job**aOQ>Xl>`3nKsPhEQTB(}-N(6WqZMb_iTCGtpc4+Xzuk@Zu(i==LAgiWa9}g%a(=hWis~h?!k$ -7sa;J&Dx<%KQ7w(hP4jmnG+<7;j17wY$)gVyuB~Y_8K#V)oNe2XF&K)G@K+oh{Re12iUzJg%X~07(#!92dUgqWt`p$&AYTwzRiSl^_OS`CeQZ`**|l3u`OVrCFWDL -((N!ipJ90RI-Qq%@eUQnBSJSWB;=S|~&2xd?c`w^t^SV5SA5E+j?Wj%tESX=Q=SkX>Vn<~Yr!S^G+`@ -eY+XG~qw>bN`PX!^kn8V|lL`&4xX24_MmdgY@0{PoPyt53sbl4e}4m)w%r7`Rc@nIWB`qoc~d70_9S* -*9qY|O1KxOk@-ON8?K+fS-X&y=?t5955`%3UuEL`t<*k>MQmd5YY|1vVg#2obHiZ)6!xl?P -{I&3qS5mrO3lQ%QTV;nkfZKAKDg->;tMCO~6>*b2$3>GL>yv>COEX9n2WG7xVl>If^EWI100lA`8j*K -p4pCI@EDvoVp?v*sO0?+-7-@6GlxvQgAYo8GJtoZ)Dt^t2tyz$*h`_{9I_p)a~Ewqr=I1S!oJ^ce`bT -0Dq)E##|&D{FABX6Lxcnk=Yh(5)+!QS}G@%$*f$rThw>B|s|qhQM50K0k*M>z&Rje?RzhweDFSQt3sa ->+GY7o5vG4P2&SI_Jj9kAWWUJ|qZ@2vAiw1=BsX4d|;A%y6F$=Jj}Ho0Q=+Jl!~{fpnRs -ph|PTL;=J3CD$v<4m;P-%XOYjYPjKuS&aoeJ=Y97jaO_!lbdsEsnPM~kI7F$3fn)3CAjN$P9J`2d?3< -zOkuZ|w7~A750*;*tQBii+nl^}Dk*FVd4kY|`I=j$m6diAL;CxGhM=xthG9I(Ds>q)?k3@z8d{P+;FE -(YgO#F7*|KGY^Q<2+ymbrd`))_9f)X%cbNzIC&7g8&}Ds)K~_6WAJ_;&Y+-x+7{H4c96T&8R_t=*`6gyaYPO^7eKa0+ -w=J+hy4lZmS;bnsY&}3E8@rO(XF@{)Xvx`uu-_&{Jm=W$tev;nDfaOD_)wp=*u+o|nvM! -s>niJny3QU52U7avnlsq!lEXE{F9|{u`3O(#1;wa}PrSU1Io{V4gT&etk46NEy~Lt_jnP>=8n?@|U(^ -);CMgc(a;>taIFb~HUz*bHsVV+dQXJY%wOeb7|05|5@95C3tttL6WgrgiBigW<;twDWcqVp2^sWoDH1 -Zq#WmjHFdS{r8M9V-x5x)guIvY)3zL5xkrq_rM+bdU44;r`V0R@3RA1d9G8;x96P@64-sR=e#7 -iO2CiPUcTD3a9%6NSu^l5nrHw7@27{u@(*|Gl-})&LF$vJg|Y(hc{qNgaA|21xbP_9&x3yv@6f -<9D@PK?LTJ6tynvPkv*29qa)fO#p+jGF36eszg_CdcoaWk#ZiCzHyrf~ccJ7{a%h`ioN+?3y1Ui73qM -$?I|4sPe9H@=`6gU)RSR352w5R$24$1o0LN~%pBpL)L@eC{^)gYysP*yl{Iggd=*rx6NQgESHhIH&55l`<9@r68xH$Cizwx2+= -#HPxXJR35R;+!KOAjE1IhCBmH=%kGZ%0v}Dw6ZN@L3>lJIkbCZ)B>eu$^7{%>*vpF?K!@1qvg%8y9%K -DIpn2tOiybi?QqCK`tKntkB`7*s{+=SL+x4h{x}~WwKNKQ&>ldC -xwLkdF{)zvEUk?E_GE43Snr)r;4|cyMzqs**rwl8g?ogg$JFfo1eY&IRX9Mr|KE-W+MezvtQ@H+T!ni -8Q{r&+1Xv#~yfR}m^p%uc0a?9~KTvdpckh>oCW%vyO75euMEVU# -B%l{p@?LD!9c!P&Ui{JMMLO%nDd@$wlKWe9g#GuR_}*{C;RR-WGC6{d`~keu5cuOxJn{R@rJZ?sYrHc -*xS%sjw#Ga2o#g&5_)#+HYDpl5@%^%k?wryicbRD6YF%F*dDzS?EIW?~!qUg&3Sj)!H}?w0g;P*hRyQ --E*s1mwcT7puqo9ep)U!EDZiLKB*hloTy7|RUf18V;?8kZJ37Yadb{EwBdr=Am5d~Puueb^2gH<4UM= -y1LWBN2+VZ-kWo^he0K+RD!0u}1ght(1}A(OpPAH}aec_WXT!b`h6bxX_T@X~Hy?H0urUfL(s+qE=r_ -_03kGW@(}7k$>a%c45UT3=rw4xTLhFWHvmU#ed?CM=bZa9#J*_sy22BdkS<4~*5~dfyTzB+X@e!QO~cRgX=xJKp{0=Bq_t5%$B`N9$2Cjr9(Cn*$=#$Bm!Lm~a%~ -BIM_aj~1bsP_>q>CnN|{h1q@wS%yIIMLxzMsrzS4$Dt8q_D%am55p9A*pU?UDDT((&Xbt}V`S+80x2t -A!+eREb+N2D6j+XhK6GLJG$TooHBiK~v=)r}VD3dG~6#8qEsEl8CzjeH<}K)z902E5yqGWEhggXkG^*$Qz$y5sGi4pbVvMXtc_?LD=VIpihz2ZFxYiZ<(h-SOV -zZ0GpYhq_Mx2YyIV>~|JJxlaA5A+NG(Cj7f<=CW!)OMmM__Ep{kx}*AW_662A>HQxfsBqU<`@Q7e5KN -V-J3LxCZWUPI)h3e}2S_IM;B`W*r8PU^Eg9S5(4H@&51Yegy>&}$AU|hbwlhW5(z2*auJd(@AymbDwY -nJoZ$LGv_B$m=GJRwNx*=>j3=`>VLnw`)yFLJ2xCnDAWzdl+-{^V_og+!69GS6$_n|VpbO+tGkJ)#IS -E@^Qj11c4iWzN?|Nb)W_Ou>qM{$Y%>@X)v@AIOp3uE!jD6Z&6G)IR{2D6E;Yuvh^CG&)qlGzQDz7Ej6 -v;?Jn<(d-we7Z8W1izDx%fSPWD@*V*-AvuK2*EsWov&OQ-iUWY8W@w|t$VUuvmm+QD_N|42RH0{qJWc -2o5D-m#L(*)L81)P#x<89hKaR!`)3KGCiC6RV(1x@;Y)!x|M=WrEwoGOIm^O{@M{%Avv7-MOY1 -=m+trddV-iW6kht1CAiS@p=l70|Mf+JxLesc`)_xO7Wx<}5&cHpS6Kfy7qZT$G=j<1Xs9R28U@?<$v$ ->UvH$y2ow{F>Kd7`gb%A!vbz(Tgwiv)=MSJ?&zH5^GQKNLKn$m$B1yYYe{<2Ef2xOCOtA3;v4rP*#rI -Yi;x8uct#N8Xj~nqVQ`z;By~+Zm(v+d5XJ&WO|o9R&FeV>O;?6g6Ccv{K^$WWwK8F!dM2|Avvp+K!(9 -Z&oxtf(}6UbcW{xXXlZBA$%y>O%P*XO&E_=7PZW_!484MUqP81)$Ruc7(f?Dy=vkZ=CCCsErQR_}i|~ -3%9Iixm>kj8*20U&8eWQX=naI1qcq>NvNeeT{K?l$lhaH$){b;VOA13n1t$;vPcn%y#wvmnObbMr6<* -+4#L}L?AGec403IqHs&sYCM#W(To93~s1K(_?HccSy_(R1mhe+{t4`~QWkk!`lAV$v<@${uxzYq0?8Y -H#y%?28PDZZBiXTIMc~chot(WFz}-+HNLg)4jd8!3GIGgu(^D%JAYqxk3b3GeAciw1fL-qklHBtYd_e -h_v}O?gdwcI})NEdqUR}Ry@zc{7hbvM4H+6W_dCk3z7=`q}$Hf0P{KvPB2b3MnF|&>Q}t>-@Hb$9{ -dmmpKRgzXN2CoWD(c{*T@NWKM20aeaWtPZX!n@I19EWTJ%wqoF&<1M&hk6PlEBU{8|C0R0or17nGFBKM_h#5++<^&82Lk9OP -P`f27~9AE#-;86`i$>@#>T|(2B+lumdiC~&=a-l!v-f}ORgnD%=Kn?tcT8`?*zN%HN`K2=L$L*aO&@cLRk4%YQ@ydDb@!t -2!{2hhx$WW!lJ)lZ9I*+K)mTc>B(VvCI7?!Z;uAD&V1m?`4PnXvXBwEGG(JH>QWO8j`SE7-;fO(^kKq -L62GF%1VgYbDycx+B2oDbKWYe=izi7N{e!6vi5uYEJi|XWQ;`7s-G(Q2OJ%n!`!nYgaD8}I=_$kI6z_ ->1q>x6!>8N%ti+m7+9XMBQing{>8`B}x5F83oEL9cozv8nj}+nCVCuPou;Y3y2y_l_9%o3=d6znhBUc -`W6n3qO>5!Fde1caQug-aia0Zuv61tT)weR~}xG2Jmmt``N!|{T~VZq(+TQ>}7a~YLhKs-YEBO_ZM#S -kNZS{H8HIZ%H3VtqfC*TkJ#b87~XF%-mirB;runDwkOyqN4zGz1%Lb5?|Jrnj{Tlxzh~I*Y4+RK;+Z} -p$x{LpJ?m?~7vk3%$PxkgpA3)~^}dTAH!%Sj%!GK+H#H?-0%69FtWxMU -JUDaw8FL^01XgAYJDy^4Bi`oJ#^ZkFHbIv=A2-WUy_jmdHckuOj&h0tRdCvXz95w1C=|RsG4T|Shm+l -}TJR)5p%q>o>RFo69$kiF5|@j!u2U^)+3V>q -M93JcobDjk>>V){f3?POSC(*?Y!>Kh{OZ^g3I`f5%-$c!(#?dhiQz~cF9zen(bLnT%3AZCaJ-t%KM5{2g{5V7yMR)S6uLSb$18Op|!#R?!auo>hO#|^CuI -Zc-q?pB|NPi3XR>9I?LziXEwb>nQE=R8K28)tzJ&`^@|NmzC)>Z-@G7E&2oQjako^@!Wd`8FthuuboV -Zk`bKJUGQU4aO5+>pz&}QWal6$6DSK+>=$84pPng}dGIujQqZ?#(>&)&20nLw6i!Dw=_ommj=;T4gC* -o;fb+;N-H-`@5DDuck6OBB)4@6eguDC_0U`lWPjz20nbxKX|`9RNsi8Ww;d^vHBI02WbqcphK06MgS|BNPjB;atSdp{pDFT0UO{*B~w -AkEaa5qFlV7U#9@EIaLN(y{84uMPJEh~w1-G#vGYH&N@umzP+36KD*5v}X7|RJS|*mrv&{&XN?LZ{NZY0Sp&Z~`^Q_p@h=p+zlW&soJq~*Fx -qMknfqbiTfjn%)HMpm{=SHNvOQX}>pK@J8zIDv|-m7mN`_*r?I>y|tf<)EgZpflDh2K{-xjLb`xa|SW -H`^h8)R5lCc?m>Cp*r&HEbRqXsw4DR@rp&>%wL(AQorOEKDHXS*IPsqDBGX&7LVnty~V@eQ#|;#5oLO{I^Rj|4s!FWdisw}uSNJcsAV9M1MRPUd}dVF91dQ9V9``BSUD-g -LcETq!Q&DmH;cEAs?mRAvYyR>=@Zf@0!Gs4_-aq$&vlu_{9alCAU;$Q&g~APbZ*ffOkI0!dcBuMqlSm -9GU-rYIF&t+2`m0;gAzlsbV^s+GM0C%GuwD!fW#m1hM`VpBE=oWJjNzrd*;DXRrebxBz!aFUW@7kC|? -dkXvn;d2B|Et!%ja5{^qqzb%|@FaoLt71y5z-i@G=_7DG*U=y)Y<3D8v#?nJo0o*mC~s`MZK2Zd)3!vzqgi+i7D0` -$87pj>SBka;HVMM!tguOd%@ASpmas{NO&?*iOW35sri-xotFW=cMlWn06*dL1=`L*C!p07pFk!P)*p$ -J>PuMJ4>1}{u`Q2mOa{5YdO9V?rSdL%mZIWPlN?69OY?Zq_9}ek<(->XPN9N|$I%WUH){*&)jlLuEgI -Sm*tYK-ZF-O4sSk4g6(}2J8>PThXMs0rZI)?vm{FJ_nxMP{_H)u(v_Zr>AHQj>8?snZ^Rd<2pY-{r_n -ufbRTi-g}&Zy}YoWJT5)sVmH`xe8JH_?e_xVxdK>~`%;e?^;~XZmB>->C9suf*NyRePNKJqCIrzT$+s -C$W|mQPyMTJrtAhL2^Rgnhp=I*zuU^oS -O|x3=W>C9NoVD)@70+UE|7v>Far4F@q`5wUleKg6_4WKwG;P+I$o>_S42W3y?xbv^PdL(8*|+ho)+pN -x8)^H!ngTQlsANXjo{o6N3Vo-nJA)PH$it)^h!`DoL`=+t!g33}%F&Ik;EOe*sXRx|Wv;a0cbYQ0tUG -rYXZqc`k0sJ!(G-_mde1p9mZRDZ2*R2^TD+1@$KboYgHccc4c>Y4`e1WxLj!|Iz#6|GHAP@Mr)r&fOc -lV^R~Iagq6N{vqCr|Lo7>>iZvR`?>0Gc3KLjI*zc^judlh=Hjj)0!+MP9CU7l+OI+y4Ml2t4l@7Fju5 --d2WL8Ej{SbwDK6e{O3Rg@BM}5s2xyDpQ9VV?zyf5BKubvrGV6D -k2PsjA%eF4L~JhNM&r!@Inp0o`>X9DKoo2iVvOI4Mk4YVUaaEX -#U%7lF)LD^`QN{bUrC*qT<*MDdGbLo+ao(*+vMKY5EDda -t&Wo}p#o}S_nX%YG`YVqLvE?`pVa~us%LGnRGz_*m+L~fd7J4~{%o_ln~S%q$*}s>PU0e3{kS+3(cN$gZQ ->&4iv4J-&Sa>h5nx42nxT@`8Y@~X;xb}I%Va}kUy -jUhIxAY{7%Jc8rkk8SDq3>H?rKF#uA%Z-T84=Wpj&J~>2w5?R(q`OIeMBG4KeIQ#IKwUE$#Bqev~Jg5 -5?_1*3!_#)qc*5nb~m8pC8(bctjM7*e_JI;T_nSnqN=Q(?kg2&xfYF`cq*$AxV(to7&0)fTNdUeQu0^d3~S6pKgXDq2c}!pD -jhyEC_y147$|5>MIc0lq9qorE980FBnTH?7Amc#Psia^KpAxBxsM>H%|dB% -RaT1z+F9y@@8k+He;=z)0GuNF)aSfFHF3CjRKKrSkmJc>&Y*nPajOOf}QKS#6G)=9y~Z$EnFJ)e`FQq -@=qikSLWGx=4W;Dj&H>mGX6?GcdpUT904#wVDJQ?3AGpka$EG6)TgU2r^eGt{^HOVWq)YqWE}5@C+g< --SB^^Gbqcjb8?HP2eJwvg4=b<$^{-^aZhgH=5X|UOZDl^Cn!03q8h@fI{Yo}+A4Kv5Py=#6KbkB+iXh -t!DN{F0~*vkS{18#l-%eshJ%CNfNU}`8$VigaAhEMru|8;5$fkbYxCEc?%JA(2^B44R`~hvBTWr&dfw -(eMNJh^s9qLhj-$ifw4`sT@)#<6==e-OxI87nP|0<>s&A@r+~=Rr@B?+b5vKBsi(F|`N;rFCBx^)!l} -h?8Rt#CSpH3!NbB`+byodI(+OoyUPu;ptxSKtC3QGP^^{npj@U^rp3E>%bT(ssk!SgmXs*&_Sp|Ll+k -MbocOybKj-TP=&3aHuYev8(o;A5LwXLA3z>T?>TI{PKojsa~~caS~e=K7yGomu64p_?<_t4ihWPjUCv -zV78I!(Dow7j)nqwR-wz7?3*Y;O%k#jP012G4l*nH}P{E$iI=4Tl&%T;GGx;6S=Zwnd&HMn%eP>%HVdVy>QQUOK0jso2w59k@$Olh(Rsx3xJkj1WT -1wJ4aEX6HrRly@#9U^xNBV -9%J0-AxjNIHKeuY29&%hFw;$!T|IW}bg6#9qpAkfJ+m9d`+3p01`4XCk^1x2v;Xx;!+D}KH)LYYvwg!<(!HcR -A6j~76FY;6aF8Bs#kt7&N&eO4|jIO{|SbwCax>?u)g8EKmr=h2t?O#iVz4rsNtBf@@qKoqmWt|{Wp*P -n?wI)THIe~sSzFh@8MAyu+BRK`%8_grY5^KG~CtXd&Wgxb0={oqve>_N1nHdRL<6D_rhrJ*fSdRPY?|-ivJe~>N)7W?4I~%*6w9@x=fpVU(OCdtaZ$J0kSDe -RT!TfI(LEBD;nzwd5rGnc44tE$@)z>L!U&tg&B9e8HBHlr~1qLaZEt|VmuwI{jnTjcWlS)snm)nA!~7 -zZRPBi4Ge{8hKm1GtNx-*o?w>HgGO6Zq7hNW1*SKvTu%{plh(-8sn4x=o#9TH`b%)2nw2QvI4z>n^31 -U-IL3X>_h&jMKTUuZK-dW`o}73`fKGCf5Y{0*V>R&1*qoYw8XDmPDZGPjtgPpdQ|XNPE=_w4P=D4c~9 -CLAkZMSBtHXz#f01cL2K)C+Y4mgW>)?YE;?;L2Nl`x;o_yPOWS*RMPUB8fAnNBrqr4{UJ@7EExG$X8F -+(*Cs<%C0c?tp^3HS7eWm8*V4p_-n0B8zwBObs#w+|n>pzziyoP)Gh=ducA(XK0dEglKW^RimyMFN8>2fbJhm -aXIc`cT$< -*CCAUz&#=|sl6WS+q9r7sE`FN~_wVJpiBRe?>HS0iAMaxgTS;iI3?cQ=@a|evvEPplQVx(Bquht`DQK -$lpw|ncq=T=DmH*OGZ-UchKbCE7=)pS`!eHuI?Qd; -tE~e-9(qx_VIUZcCGG2=&B29SH>JitOMrJ=&;Jj_4MsC$JJ6BnQg5J|LSR;)4R;nH_=O#JVPjZtQZ`T -f7F{4kuCA)Vg2dah9G2(YqaKK7-&t|XIL9XV+Hr#SGY7ebB4RAM{oE$lBesw2qTy^0RrEpKjDGdJwDa;uwQkZqA;}j0lU7139X}BR$C(~u;yW- -(;PtKlryfsDfm!~KUrA? -%2(jvPx;XyLOts{c(w7@{iX9-VqAPs+KEEL1v)xG)fm%2^g;qNaQL&OUD3ae^IU(S*zuh5rcf3jnJIUBoPp)W^_A-c -9meK`+TdPVxzN*{eWA>E|DoQH(1a(k=COBEgI%Mt6hYT&$kNR;n$<)zALdX=F%ErO;X;T2P&_50Ie$i -dSUh5&0#nh_Sf*CJ1(keXhiuhtfG`I{XVF1f;$FDo<_JQE>~5h>vXnDdqn;jcqS6+F@Q{sxWc3_Hwve -MNn$r;GAeZ*XN?g?!pF)_cdaD8?uiA*5n}JJ -;)cX%8n+#Ko@?Qy`QA}wC;7vmRBD9X@;vRmdo{vl`Schl?v?*2X)pl;dKx2)9`!Rc?(F>dyQd(&~3-HGaYw!r6r=y=H!8{!TeQi -G|dCVUDpM)Dp9~s>C-5nOuPm`Pgs!lpbvAYsk^z}GA6g1YY>0b&hRo4;%`p2weZ#GM!6a--emo=;bjA -+r1c6N7@#KYK_>1lnBCQMa>`V3LAN5ol=AhmI8twb1XP_e{I-@f2?dLVJ?-#G#V8RFL-j7!+*MqgWlE -!Ch&g$Y&S`XW3u3}hc@00W?|svvf#%RkUb&_{^a@UCRPV=Es`rYKqu{|*LubJE%Y#q#oDH`%K#jUEQd -|zC2ckVsaXtJ88_Lm%UiK!L^87;4P@~+vdUeLey -Rwa5au%~aNGgsMK9Q9rjAW!NhBq6}MUFY34d_PwYyu@^N4;|ZV5sJ{G&+sBrOr}Lb@xq+VQZ|(eca;y-r|0P*2ZXyC*M+a-cU -J!D+#)}w&I9dbN!9xnp+0Y`P$5COF1b?ZVBefVqecU#qB}nFNwlHV#O3;XLvbNUw_3G&n~M!hFXC)!V -^khn9j7TA%L#k6rlF%4V7OJLH9umopi{MyE<9H0=7u=A0%8ap+&->Vz;L%TQaph4~b3LWw@t{AMK8e_ -Ln<7hqRrZX*#*n^NP09^PJe}F;wp2I}LLTm3R4x-JYp@w`Zfa+cS`#^el=o?;K9ez?hjaMTV-IX?v+@ -Zz=}*fqYBhjNVYu6hPMtm&MHUF5xyr@dp$;rC03JXI4}BK^~0Jwu%xsMG72R+TE~|nQKbkeuxg6nrXu -bV^Yt(X2Z^8i~9?{0OqN%y8E6g7n??ZKPpx?-7O9CsS#@4%Qt-dEuo)|L0^~d?zc_s8?|`jwp4yOP5EAT;QoR{Y_l5#P -FD>M2p#(gjs$bZ9AG*&y2BU=9W{-n~6$5J#8L6bfA=8kg+WdrLaYwfc$DpowerXI*a?qhUN5rnPoL6Z -}InRU&QDRHBF@|4$(GLox73N6lvqhw3F7SX%b^?cvRbnqE$j3C}r1*{o4ygf#JIpd_!t4EVh?O+sEam -R1V*i`V)n8NheZtyuC~qs=fp98q;4rR)|!joTNHoB}HCDYtDN-Vd~L*^Oy+QwW{^2Qfb#}kCo?c!=Er -c*0!Y1i7hFy9Yu}74oaG(rqF1qJhOCJenssxdZ8d@9&JyNcyICCrtMFiSvrmTHiv%Z$xL@&=gn~?xJ6 -3TP+1OQ6g($^_6(?x=Tf*ggSM|=|EK!<0W2oGQIU318^m_6bsZ -Q|yt4S@MK4@zIqPShBtlUX_|7uc8t4H5WtaEyh=bKn(+HPV6n<~yUW5zV~l9{$X#2(hsj`y&P?e1auo -3u@=w=#KCUQ=~c>|$B@E*5gcT=f~s|3$8KGT59PXQ=e2_FR1vCEvU{uHidW2UldiIiicam$*rkNLJ%FzsY5M6}#5J4anh`?V%yJ*#ds6QzPl?T}ZQjkSc|Mz2A2#!7^v>S+Kfo2mJ#A0m-8m0kKs!iP=UwRG) -D<~a_YWp_Gc`h@;mO1tUNl4)M`LL4&9|aarOO8^2GfQ{87+p1^aTKNiR+cTVliZ|#n -$yCoEFQYvA){U&uaw7|#s*abosI7^c -v~f`nD3Uky@v1)cV#~KNU9fb=2w_g<-l*Fm0%$vkGQ@(uXomEa_sXsckkZG2ih_XgET5C`}bV4s&57# -2ZVVU|#d6{!%YOkBz%8!N$rTSmFCpTVI#^Qr3nOd>xeUOIb-DBop+mHi^d3ho0P`q9Y@aU_kQ;z9U8I -)4e-YpsVdvl`}D(F{SKrURTjF$T@0zoXD_2+lLFJ8!z4|yF@0<22s6d8jJyPNF{p^3qJ%QU9}}ZtA}374L_R94Y9Xm%uGa~pwjkGdbMh=c!pz#FZHn%;x@%~7OH< -GB*M(JW-9zU3#)Km{TL)C+>p4-2r8Ccl%?+65LZ{m6l=MEt{6tcQcP+~2nI)x7JD -#{9nSTORwI`b3r6wWI6ygeoSg?qtgp*0sXvf+fI`Qf+a)j(RqLTo=Wv0P;VyU{9geEe;>#O_cZc6+zO -F1=R&$HAQ8ACc5Bf0c8*^>#1Ehi-3&V@;Q}TxW_>p1NJ?zw`$5WP$aODd8>a!TMF!++!H!6Mp$2Gg>@ -sGDm=ObX@@vo<7PvNhzt7gF^~P&^?+xD|w>~r7pVDSnX3gkz>wQ-El0M@-Y{jy~Fy>0CnHsE|M(J -5E%)QWfCu&;BR}SK8ppOswUNt9%@!^Z|0Q5LdNJn#1nqFt9`V&d#E(l|sNOG-%#6uPXtTj_K;Vc{|l$M!m3UvG; -o5x>GlR{c|yXYPB$iEsjbf6%OIX^e|hZ#d#q=-CC*as(Tbz){s;AiU?n-T{`w>{w=@rv@edxW*wlj;5 -h*%*+HoZh8O$n>vw@84A)X!ft?T5UX}vuzI1qWw>VZ|Kie$bV+2qW2@z{S6*8%i^tqi~~xy7irK$7qU -q6qBWP^Y_=m*dUZfuMc|FVjOp&MI=br31+%NP*S=I*OikFA8XQuwAPm)_b`GcDd3V?6fiy(IU`#4;kl -Gv4-2t`x%zC}feN>tIBjuC9j3MUd~a(FR+ -{Nky_UcIw?t-Ifk{27X_N{!b+>9x2$eX||EZJJB3U0_D){+OPl>};i*pa+!AHGEu4J3w4U3ow8ZPgNd -O*1`>38IhBHXjzP3x7z1^$K*aFFI9etp^B$R+zGBdrp9{7VBN(p!lNFTcm0GmWw{1J?|%8N!;liP^X~ -66-Cw&u6mM}nTIB6_h5>E(o)5YPWRY?lQb+j;Y0V)OX>}Pi1XK8Ui*D6rrqqiSg8VTBepdJB7jLIg>y -IYG{rjycqyGYvtAsQ%eu;ubIwd_fS<(Niwbn76UEis-UKONt&zHP&FI@AZ6O%WqZpw#I!$L -%Weu8#Ns&bqBUqm@f18fN9_AE?pN?7RxsRiJJBY}8(n|NlF-Zl6%Ew6l6UT%Vhzq -PjI;4};h1PuZ0E#8<61r9Y=F@0*F??H1s%|pJEXMHgZk_=c^Jjj?l;fGy-l@*~%rQmZF=t=2=-+{qPT -kM%9aK~IukPcHE(MK_rZADTW7Zie?&Cra-%>(bmpt7|NjONwT^sXnP;IbJ -~{!3Nv&V=>6*!YDfMNdWLIa}AF4PvosajV}5yA{5%4INsCHJ0&$A9!y>BHZ+Qo0nV>LKzrO?Yc~_($#hllT5+Dm_%d?{6 -AS?h7V&qq2F5Sig>?^=nh*GXK7={wPXOd`;VTJ$ukT`N&5g-#ut=W!qQrC@JG{A2V&|uk3-%gAES#^7 -lWr;ii0+F@!e4inB2Mx|NRk1SxCKN_gg3E55H^l7<3dScVyj+yNlf$Xs)1CMMERgZc3!Ugt~31a^f#p ->DWmF|U+y)`}nM@AwRUK#$XY`Wf}0{I?4lg0I=cBglWBCT_ge++QnaPlzU%cJQ)c=SMHzDo0PyXcAWAt!UKaPS6->9W~5q6sc -%5?WB#?n%St$2Q2RWYSa(WBzbDcT_cs><$E7N{7pXT`0G#|uXtJG6vt@Mto -^Xw`M%g+46|+!oUG{WIi=i~PtS!0xc*8$!@ -fR~ROwA -{I*A8a2j0F-Cl%aY#x1lQAL-}K#x68j4D1SoB6XFj1W+~*O^W78I=hLnPody)Uo(s78)NjO=r%P;kQd -RI95DBTR;r0BW)4w8EmCu6Q5v7dF^LhU}myfdYtnOL#fN#BWdXm`vG*#TyjTx%wn3iFyC3(Bb_&(Yl8 -Pr2|A;lBnyy>8NR`Dye2cP9?4X$zuX!-IM=4O2M-RN!Dy#4qBe(nO466i7FtCVLDqGtX;Fm!D$9Xnm# -VyLvW+2foA^Xg7~KX$)AZ#xl%p)!hl^X_yu1kzTWEtZ+wQv$3t7OoFDSsb{@tg$3(2j|2SB2F67z1Ce -Q3a?lmixekv71^hpkDJ;!D4pB8%D6uFivgv(en4o+kdp& -V7ubc@=b4PjnFxslW7t8^ssWDzll-H%or*EFO|_W-3o -^z(7jSwd&AkDP7aN!=Vw@nj3Unq5lEJSk8qMXm#)RL|>tY|AzVEF^nrz2~%5R6_tQLzaw;CBH0J{g@} -W68YR^%&X|4JmB#gfBe*8Ty;kjAj_|%VQ4ndD{lX<@CpD^T7w#o?k2<&vs5MYq|lH -NvT_Z)hV3WB(KPpeDC->5-AGa-iNf6Qs)CqaZ>pj67x3BIA>lAzq$mM(?aPWw~J+?;j;LB7Y_dZpo!b -{G;GnFqGzLj(-J^#-bFFGezUWlEMWU`{>q;Ijqok>&l~n?6p5E|U;flBN8qy`W0r_%@-mpKp>953WiM -WUSV3|1LNF+K+!qyR7l36WVj4YN>%PZ*XqFj2Y;(cV+e -i^NVr+TmnE!|@FNKuB@7rKU@r-;k#M?%1rn~1@L>tJNVr$Rw1_>A=VX}mo66Q;Ir-Z8|+$7;P3F{?nlu#cdV6=ooButXF{@B#am=m~f7gs(_gC*cLkp?AH1_!Y$lt;hO=ZDmu4Qxu3? -$X;^ko$yPl=9G&Yr)xvhh_STS?5Ld0leMtlzZQM^X(Kb(bdI1^N+vKjdE^`p5m*r$W?|)iO(z^VSO!9|CD;^vPcy{?Fy^HW{Z8vAH;XayKI05*{nL+3{E8 -4IwCwfJ-`0rJ%YPwx!%mK5qkE!8@gkxO4EBT(BiSB}loE(<|csMapt`%$l5r^R$sH3*pBGo{cP)#lyA -;)UM*vqmq#8<;ho`IqgcSnDa;_D3|AsgY)9JEToz9l!dT`Je_Uxdz3f7ixI-f%SJJm)*__Uh#2e$n=A -8IP%i=$snv2yxGeUOsBhWxjc?@7l&>rE-R2|rG|-tT^T*+J5t1(9(xbZi?%CfFO{|{%91br%gYmS -MHF*6hj~6_r=xzNExl`hhTdY?3KsI3=-|}zylup79mb>4|7Xh2R2@~)7PpM=JXVjQNI=Gq^GIarz(NV66)LYgC_dCT|094XD&(%eOhNSeD!sy4mmo(d@xwl47n)_(+Hw$w=X)ciF{#txZ!fe#yljZ@^ocgUWmud2l=A~ME(tM}J-`|D#q -BNh7W>uQENplvj`wl)Xq45Ug#SOfV(^|bW7KcA0a{BTSWhStN2uY^1mY1HHw^Cx3*}O$4<|8a$mznVGYnR2_z*ZkKIG?`e9G)%_uNI$1U!$kd(ZZu#S;sD3Jhs$Zpz`p$+L(o(k -&vbM3HfKm=jFuIP3LinXbi|9~z3d3gPI9-ms98PDFqflayOM%N#>NP= -Lw!C7SkHt)vFlCh#bITbn33Hr8hr&}B@<)Eio%#NBe*OW0or3hiA)#U6oedF@UAlIQ>fR%|XRqFU`u6 -K@958TD%-|tIW3L((clGcQ@d+bGB_@r&=Gx>jV^hYBzivXRX=0k$GHJ3kJ!48{*7Z}fr%j(RbJh*B=i -GSH+<72`TwG$m-BIdv-La%>>792iTfSl?`~UrCyy7p``*)?=m483-p#Z}_`?{``L7pBC2mKP~?M1-~ovwBWzH1n64-e(CSB5}<4S^ZSK=ttH^U`uB6`r@wCa -^ELUp{o*9cbYE`%rRi-=cUv3&=(YD(zUuCZ%Bo-edUf?0_u86u_pHD7zTe#c+Xo)p@X*7LY<%>0zu)x -O<4-*Kho_$2{LCN!^z5Ji^4BfTJ^#XsFTK2V+xAypeeG{McGm9Ny=U+1`}Q9=_{N)u4j(yMckK9EZ@= -^IdnevMdFq1?KRR9i@h6|2Is4h?O2ZePbLYSOs`2Y@{{HQEP0cMAzW?FkkC)W{a);1yga3;HeKqC%=dQi^UR1ztIV -pf00LHa`v1cJ-ap`VRm*9x+^13u6{wm0{k!`wwK|jhYuFS^m;ul5$IWvCX-I(<-aOlRgMV!e^vggyUV -);1|o*4sw!l3LPB|V`D*x%9h#gyyBy&WNp?1AUpK~YtU&aKF^Ie?6%NctHi -3&EGSSQu}2*&Is?ix(O5Ib&D2m)e|8A7@tT%tNyBT=t^ET;W4=5kI&?7#(|nyUpR~*u6Dfxk#APX0(e -^ZgiCr8$$;dl@7gJj*Dzgh_TRV%q_{Y8B6lD5Q5$az6RMkzmDf~aR=Z+zIGKaSKHeDEM<07AQ6Me3D9 -4>I0qPVgIIwWhK@k~4JE9!z_u_4mPLidwy{Pq*&&@J1%*yqsXZsxX3WWV+8oBA@vc%w{KCTGcw6xuL$ -$zd%0X*6q1fQD&{0yn*jDV+{I|wqb1W__&f%GctU!q2x4TLpNaSf7G95CF-%KAeBK(p7aZ$7P%-xOO3I%JJ2!|<{NE`?arlF{d{~2QIuq1$pNFeRBg1v%7wDnwzxztB@ASP(N>o -N8YO0I$Bwb-Gt4udDgAEtH6wnL{`|sQpPzfx`chH_ls0xA^)IFKZa^k2orgY%I-1gXrG<;_MYj1xvb~ -#^S6J$tx8$0n5%#==S5&TcetZqLtDbeu3u9fALRr`8hPv?DQ2PgoVy$>oAJhqaTRsy0ZvtNIW7c)@W1 -U9%CFl$R%#hTH8AgTLBm0D~K6wV#C#f^**OKk+FN%8sjN1R5+-q2`-__2^tof3Ku4~a`oe$TQ9bK>)J4@s@-zn -VG-~0`U(HxEKK*GKzMGzP%fmM_2>f&+e(aImIte?3C9@Vb5?zXMgilxl~Izda!U^H`WPb6V2b#BN@va#n|}M0_wv2SeP!7>5O5_m>0>6Gc -o5wJ{ui<8hh18*LAP$X4mxz6ZtBj|pBfjHWn63e+7eTD+D1$f5#Yv1^HMuoR3UJ3{pD$p4-H_Bhnnclc-d3cgt7r-8Rl!ai{VIqlK6oC-e{kDkLuAVa?jwE+s4I=9l=+irJ+wK>*I_@{p*4 -H*PZpzbzve5Xi<3w9h7rfIztv{bRKmucGS^IN0gf|q!VccpGae)R&IFT;6&ZPw@UiIfDY^)n4i=5;B~ -Y!>S#FXXc+5uAJRzme`W~ke=x8Ak&&HPBxpyDx}2A(cVf(n@3xP9+s06Y3*q5J9)yE8@HbQP=ZLBmeS -@BtE8z$EgSNLP+T)(6Ybg7*9koHXRH4pPwYEXJm=G3|)RV=0)2lJMzI$D_+Aj9U1rgbiKK+jt_5voZe -K1))q@|s;!k+yQ&wZiw!F55kf%bp}{@H#BRF19WHay(Y-`NHE8;Nof!Mdh(zAvOvU*D-NpjPYitlsoT -g69ZkI38-}eWfg$Jy15gCU$nT4VT~zXF#~l%^&1gS^uO -w)?arMyS!%=aUAf|`eV_K{Z#p?evYxfJ=a>kdR`OC1}EL_KUkOV-yUsa@1HKOhqp7PZug-#K+n3&G@$ --=W?dY-$5`N%1Jxlpw&;zqMQ@Zx)aPv8E;#%WL^_{BIybhP&bk08%bBhHvuJ}*zR-X4%=4D7dX2y54> -R@_zNn9V>r-d=MY%=%D6jRt_379V##->+g(Y{qrJ_cLvt -Kb*zav!kN*z1Y?vtFh+4Uhzm+NS`olQ?HljVlnP-KxXys4uCs%j*@*`yJCs&D0d3g@b&2|2nB{_LgN}!NJ^7KijpyXiZm{~5 -+*(CAlEUl=dR5MMnOuycesjY`vbTga|{7aur&vs_cHf5)ChkmVT7vbRkCY@j)0hJUMI}y`+epXwKo$? -NS6vs`pgu(10Z4Ttj%%ye;xwcK&FtJ;OpB#tNWhYV2W=8_Fb*t7K_#|LfaRHA$&r+6avy-%u6%;vpfz -schv!8!@soA#BwP=yekqrS-5f~CM-C1-)A)?GFnpM1{us9E8nCvo3N^W!6C%KAqiGrorNeeE~hRCs4wM^ka$40~a5T8RsM -ehIq1ay|~Z7ulRw5H$Ig2uS%R-K3&Yi1mh?BA1QLCDRPebR(H~R+W?7d`jAzKDBFR0j)@FfB&Cc$TE -eJWxW*>+=Kq*2WBx;su1t81keav7VKJF)Z__Q=PBWGQu1w?A1D?cBZMkn%6Iqf+Pn^)pC3gsi28*&_l -v`{&lo#e4kw~4}$BmCt}%@?^d&98NLi~KQ`C`ymyX*T=M@4x!f&fkuD{PggL;xLD~*?2tvZB;u)%2F4 -I`$}!imz^qzU_bk#cyvGO>vI2oKkMs1zyJLH^ZThE)j3kjq17jU3F(Xjoqeah9J>v{TpT6MbdsTqmylnpJApm_z -uZyC+WXj^1MpIyQO=Dbgz_jNcSF{SoobZKPLHkQpWeRwBIWEJ0jiRlkU+$LKd3LeC6IYAAaihulE0sh -W~fd|3}0B|N0{}Xujt4_lbKP|0?+J{Y7;66YjA3hZB9UqSSpXK{s`TPI947BAH5}uK;UcwI~JR#xR64pt0NWudW?v=1s!q+6+CgBzdH%WNEglpT-ua -t0^giZ+yBwQe2wuGq?CQFzkVXTA^5;6&c11=vEv@l`cD4`-@y@V$utdsD7gxe(CEa3(T%Oxz3aE^qj5 -++NSAYrV8MhT-OjF3>zw0W_BEvo2W8zodEte3D(!fg_6mT-g0E~CF%n#&|CkT6@qR0(4xjF2!u!i$$= -{1VnmxLLygu5nk)_{-M~{1awFqwoFMCM;7`Z@f93ac_f`Db{QTul3$Mx -R6Dbd==~pekQgy(8>8Gs~jgX&~e{~WbnDMWHE9LKPN%zoQKsgI6z16+x38SrwzC-JR^AA%2HVx0hd17Kw|+BDzF_yOEFNbpZ^dW?{j9gv>S=mR?Q -0H4NZ2EGOGIKFJ)Zv%#2h5Q8`2KWL#JMb3)kKvma1wVjehY5bh0sb&d#B~wy`K!@KlYhXl;poSS4&V- -a^}uTZ$D%-eOJM<i9&jm!LK}cD16(&s<`Lk@MD!uBr?VaJk48 -NJer7b+nzKICLD!9nzZsc-MIJWx$sK{&~EhvjwpKb&xsije -yr(C*-plaPxJ-55WTxC)jy{h>PB4H{&aS|7?Qz?7;1Sx8rjHF9%$OuMBu4pgtAl892dvQiVJ>1FkcHK -J3>6zHO3a39uR8Yp`ztjG8ETumav`#`p~O_XF-X3x3`PykM632>6@@`PUu!2$(!c&?Go-lJHOPp2_Iv -;b%Qyq*d5=1Dq}KIe-h(krw#L1H3C;&|e1lV!EJ7@SMa64$Khv7QnCZJ&CZ!DU2=8LS6zd2i%h-=Gm-zHOkk^3a(-F3}j>GR}GIllWTL9m^0eK4i1RyQ!5&eWYj6H -LsD67u``rjn$KHyS(SQo`ZA&Hv)#x`Q2#LHNYXcBHma)S036-*p~smVH5lx0{p57IP4n%LyI9J3 -JW-@Sn!Yp_-e86{~F-B+ZoG)pY?!49Kt>pFsKx1hrJ$fRjIJA1gt9+{1bf534Y+`0AQmF`AzWxR^B1v -+5~7@0{+o<6#zb3CS70Jls0wMu%5PxLPYzr_)Upz{dd&+l0IZel_5RO``oL`1oVO{z<^V$7TCQ5 -Z`Lp*8@KN1mXo=3+Q?h;i+v0-0`IFUkezCx%o!ecLRLp4?=Fw0^YR+^FP=x1B`r5TfbLfW{k4FeS7iH7_-l|e`~>_B^>+u_Sm2d_2X}}z;SgZgodWL$IAy1xlL`3fPQm9 -Uz_GQ0&vAecyoq$d{{}$IAyM9}fZyPI4ffvx7918l5DY(paTf6jm|BN95paS%j-l+LzDEP@I40^sE#O -`6pbo-*8DR4}Vr&!kF3SJAqTba5=D#QK0$TWgAM<1QA$SDeX5e*z>idERb`rEtLAJ0bc;b{Odjv;*fc -_NrNq~DkL?1?e0LOeJ+M;oQOYofoUIzH^N3u+QB<`n_foFnWN}M3wnYbFf5u`g7WKVFsv?n-M+7rA(; -so!PIKk&7PVlhA>CFCli4*j%7dV~0A0=^uSrR8$AaR1LBu?-diPL%PLlP%Q=TV7If^^oD>X -H%zF604j(z}ru)ft?`#aR9z*ckYlW-s0YOXs7b407T>?HgLw3_Qb(sA8Un%R0<$8Pe84|&dvjMl@5OW -zytSN=wf7{Mk_p3G*?p3Mpi3z^I15*bxqj(_EB!-fs)>8GD&+qZ9LwY9bEz4zW@mo8mma%-!cdxoKrO -kwPvL*-%2uz$&tquh8@{pwU#W*K9#s!D!+AfRs{tq2Gx=&a -%bNZ(#eql!Zs_H&^h**Oi@ptj)h0`!Kkvr%A?u%;W3LEh=~B@+T6Ca3=p;@A(Pg%;|I9gfr8xmOtUlF7~foS?^yy0Y#v{& -*zU%SI$I3)4`{c{(Qqt=-^w4Pc3IUeE#@?@EP#+SE-yw$g=)(e)-+}mw~MO-PyUS`a}NmgJ);Wnzb`OGwDx&^KZ+zeX6RyG+$j&J#^>XS@YRS^@*J?%_4f+*Ae}ds(Q -Y;c?;vE7~}F4{rjsCLH$+cFF*DZpXMh>eg+{Yl2Iy`lfGji;Wv2jU=|k_#}X0}*!c0|naN~g>FMcQcG -IR!V>jGz1H19Y8`;e_-^^CzO=61{En>IcdMjJJcrkN09K8KlzI-`*%r$}i>CW-&g%v5RVv&Wdy)BL1U -t(g9I8xcGtH!cFm#4FbS1n{)H`v*}d#13uCvIc0J5+Y{Zk3JPr?LrqRW|w!m5n>1vU!J9miD&FrkqsS -w9_gp#W(8{mCgNJWx4e#TX;@ot5&UI)z#JP-h1z54?g%Hd+4Eu*v5?;*``gK*dPAz2cExMwrpW9z4Q` -q%U*l!HTKq?E$r^ERrXS&%3go{b$0OJL3a4?VRr1;G4}S`Z?lspPqGg`{E&Th_5^$D8D2eR@G)HAm;^^1F%+V~t( -n|#7|L->IRpMdb!A$%6XgH~f9!Y@VmH3{xo6`qZ+# -~^*V%~hwyhI{DTPpGQz*@6P|Tu*{lcZ>;Sf&#i80>!;YflH?nl5M&88Kk#?p|`xR4f-^kQ^pJ(cG2bg -;7v`=^=!e4{%nFzlS;mZ(y9l}3}@Gl_z4us#2@QCx?4-oz=!Z&)uUkwUVK%o#6ehmtL0ENAv@G&SfMy -l+akt+Lkn#!7PS6TDDD!cHU%6>Sedc*fd_~8gY0pX`3d@jP@f$*yl{vm{a3gKTw_}vJ96yZNWc#ltby -_7%{!uLk_0SG??;jc#c>kxhp!rzYYYZ3k_gx`tqCw;KpPKPu8r2{dW=f_<|9wtvVO81PcG)u+=khi3nCQLNVznVM@9z1Y ->bWhJpHD#F6%xMTue2us|F7CSdtxRTQWoW-iy`y`~A2C8uh#5G*IA}732mOqU^a&aB`*!Ua4R?5ml^% -x7NB9XQ3Y?ZPzjxQJJ%u~xF=n6*BKK}x`%aOpWe%el5PtpyQ` -Yqv8J3Lsy@){1=pH?~hlPdp$)p&_J&XT9zt?3R=93u6JvPwLMT(RY$89uvlzOr!h_fe91lXU)$_w@5C%8eP-Vk|w6 -b2k1hsmkuPWbhF9pK7UMnL~tjaF477PiN&mp2`EUd?xt%;CnN^@>${}GF>NBsa#B)STC4l~`4df3Q#u -C)UIR33K2c9Mx5hs|jl4`v3HJ+1CHJ%mD6Sc-)t%&n0+t#Y*?H>xw5$m!C~J)Q(icB#MC6z(6Xclg<4 -p9;+!^-QCZ?sNU+yf*59pgw5YsKA$F_0yp%2ldo5r?rW*L|Nvf4PSYVFDvL-~Yy3?yp*HRHLJ?R@Qy< -;vNFHsiUU9;ayIx#`oV^YO?E+hp(9N*y=(H+u%rJFWzloTOMA)u04P;1=>05dn&u(6ES8e1AO3t -2iPNzJi;D*^ilTMV~?>XpL~*!6<&DZ1wI~p<&{_XSmB-8r`aPIZ*0L>Vej6(?8uQLd~9&$lhf>zPd;I -1&YWQ$kB6N*caDAY^;djs@ZERcu^)f@k=@&@vgcqv_JdD58$W>YjTJlU<@#K7bW73E-Gh$qDHf@|$VR -F=*fjM3yIp;Y-K&1Uo>R}F|8DdNj}9>#GkQBZ+x1r?{51%litrf-KNsO|NBCbO{G$l}Ji;GD_||^zKj -W1Dj8p!vj#D%}?!9{T8bGioSM=U1dT@MvJiRa3%h;<|bgu!!`bTu`+z;if=fK#(gNF`|kBl%}6&_Fbp -$82e3cryN{o~`}<5-`8!(!w6hQvq0L+9}DetiZEj*SluiR~vXjKl>;MA&dBk{!u}?pn>u9>l++M^t(s!GN;&}S{;74aF2Mpjww$i}ZI9i1BmtRNAr#c@$ -$iv?~ame7-;#>wm}ZpIJO6e(A`6RR8|{NvQOZO28q(!NF)*_%oKI?w_6rKuf`|4QLYoSN;4Y-LPNipX -5s2BNcz+?|=XM+30s({pzc)KKt^^FF!}$^U3-1=g$J3{`T8%zrwuq%m*KQ@ZA3W``tR7E^geoaq%)u( -UJ~bp&&W@Bl4rXrjEJGkRd|`0g|jb|H81*bLY;Ta1DOId%ySId-q@-t?t~pQ~mt&&sFrN>bvj0OAA!$ ->C>lG%)eD~M;cW0vmYvo(txyneEj(F-|gD9Yvsg=6BC)pC%Q7ygNZ90#0%wXi2MlGuCUNmk-p@2@#4j -aEiEnIGinBZIsZK&@1v-LNkrq?Yp)$b{DCjd{~K?-p>E&4T?K#Ywr$%u-)GOBRX_XeGqtX+PCa()823 -kEFh(HzGYIqh=bn3R`PQvlmt)9gsi>%!YPZ|X>(;Hy#<-ezqw6ejJ$m#=tgf!UY1F7uB)e#{*&IuB|5 -5(`{`bGD7|Yx{Xwab1km0&7zW73|t*!OS`RLK3>ih4%&-q0DaNY^8udi26ojS$MlqT)Nn1@4@xo^Mz` -s)^yyB|PP`TqOw)o;G}=I`&k^Un59KmGJH;<`Zokj~$rzKsSC>nQ9$%0I?a6qolS{CkZPYnvAB1JB+MdG7su?dkhx_}{Z<&syZ;K$M9}O2h8myE*?M)0Iz4aF -VsBTbx5Ttygx5_KpO#EQ}0rnTk9d&rrKf-@gQmMl0W6g!Gj0+N4y_6aDdm96DLk^oYFvT0F^hYCzMCT+sj|7s_mqzPB@~fNe5Lm{& -iK2+oh@_YE^am8>;%pv#R=CQ`1|hD}8>Jb07Y9?AUQ{OiavZjN#Xzy`=o$X&`<{<|J2259I~%PB`WLM -<0E}Kf+1oByZxE$^oT?_$K*N9zT9gRn70JYU*)SO*yKn*B(;U!~;mfUR522Gz|Hhst$ZbRo8u>suwR_ --1v|1kG9_X5&zn!<%RbBGxdb(0hO28AF1l(6RMi_4&+a1KptH4rmBuY8j9aj)uxN8ntx1H6LxsFCVmn -B&CShJme(dGCJsbdsH8L?AFfCX@j~T@cx*2nBzKZIoDyl6__q50+B?_isH! -ZF7t#!_S!TBz8LSv?QVb18r6c1joy*& -z|GV$L6ZJE#CK&9rI3n>R5{@5!_(9%$c9pCx9wN)9Cdd<05)Ba}{#)ekzlhw~Byt-V-gEU?WhU0@^B) -|2#wK01%hBgvI~|=?iyP^8fDQf1=kn{WyDnPoc^UL0C*e4dd*nJChsA=dBS#;W4mKpb%PAzas?Q4|D&E&{XbwX -^F}24)!rNVS6!TV^Lo@PPsHlww$`7;2_D^yeQF8U2M~XcoEWuZ})rlZJe -7TA#sS^%)FSpRq|jcbLokEu4Pz4F95WR?7r~o#8kl>4?R`*fy)5Y%1ACY&zcQA -}n4EKJf7(Dts#MS4dgN{w=`?}+wtxdXIF8R-W{=`s~ISm+y*9KlZ}PfB*jdFM}6$qOZ^mZ -P0G9VEeK6$<7$(ZWG6}aT|W)q?LIIvMe`I9#aezis50!@Sw`k?2JK%P -;63?C&qZ@i^%pL`mOvA7%<>6Xn?-?^XIo<2*=SLmY;t5Q9jwbT=tg_l-+at$_`hbH+l4Vjf-K0i{Vj~ -ql(E%vLMsJz%Vg}`sblKSAAyu@2kFFj^Dy_^}kE*yz|Z>IXOA6Kr8x)4wRIX7z|$dIulPgqEq2HR;2O -nzFT}p=H~xWsc%Ph{3?F2}h7Bh6B9>XOV1X1C7Peq$4@Y}EVPKOsmvlg%6+;9&)7JPc`?P -rR;=O7+xUN8c{9 -f}7e_@M0+ZdzD)#t^k3umH#=gyrMX{_@*OMkCky{;cWetgcjapS&FJ8Jk)TU#r4+;N8t8#YWHdE^m!; -)y3@>C&Z!9`bwW1p~eSKVfl@!+-&MiX7q#S!3VALGo4|^nWX_tSLMlV-z|u2KtOmT3&P;R*6<1s#8e1D$pab3TPB7RRj)j -R#*=u84Utcvwc0QP>{@IB!@Xs4(4wP+=O^^>>-74RnJb6(0-QoH}Wo4z5m6d(7WXTelGiT1p5hF%OR# -ukTcg-t}EP(;N04KD8BOD7g2>dW|kB>%Is7H`T@*FV|yaP*wq42-^h&?*n`VS|o?pEjK=6?LZ0}uQRo -%h^xkD2JS#c<`7SIYG1(+wZ+8Md}#aX>Hh+nO)A0Y~%!9YG($^&Ow>%{|DUeP>yJL${EBm8F{5vuD4J -o(>r@M2d@x4IjV&{Wsotqok#!ndjjF80-Xt&3nnkh_8`*=;VkDfz2yh#8kXrZONmTTyn|vn>TM>L=JH --^dp;0WQlq+&p{V8=YoO)qrU?O4wS^iMCskTx8Vb?b51ypNU~*h!yb_%>;ZCxJ%)F-zM(YHZtH0O!qB -g{%dfxw`e@z5GW7ZR=btwi*dOYKsvibJdV0DH9Xiy=)|xeI4E^jid(QvRjUHfsc%Il4`61Ru56}U0g6 -m>~mG+ntC&&prz$Sa+A^zvO@Cbh3&lNA-4ci-*geaI5B&SQK4wA -=oO#d4%!X<-uzd6PX%&`4+4j+_hUb>b@(GM4)%8I)~&L9`En!AR)?A3wzYZUCLSX*wtt{Dv#xXJ& -VLW>E%bZ+qBn-|#y0Kogjro(ZO#W5?*|+7B3sx_uvpqPK3#W?^8O3@p+)t}$iMpUGMj(3hsD-BZT}A5 -@Em-wJvn%WEuxn|4+<>Mu4|l&ooSbTZ~e#SQtk1C_@4NO$Mofx$QH+!UV6#cUG@NdMc$zwJy3aEa~^3 -o^n2@{YA0IiKVZOj62D;okOTY?zLPyB=Vb5UgRSqv2OeYdv9;JS%_&S@LouIk+7124ZhLaxmb`my5wF -|21^Wy}WL@RxXN?h>l~?%He?8B%Gx++6icb<-&!mjUGx70oEIUn@Ta*yI1JGsZs?y;+TyvRNFaE}S@ah7`&=h%s3>(A{(`OaZ*e@|C;c -JZ|nD^l;%`3IffhUJSqrlS&G4{U3&R(FkkW7Ovl$;imKQ{(+XYV)}bo7>Kax&PVckyEby;VF^A!y?J= -I6XFM!SodV>qU`~Z-~6}wV|aw8o>H*UAlC+L36vQs?(>iXBu;!RD1im+NJ+dyY#-s=d~K!PSO~d&oEr -0Gg{+~V-r4g`ef8X>GKV6Yq@WKBl5?uL=yIy^}lRq{eM>*?$dHd=1UK3kCcVqsab$+8Z_n_L%=eR -IEQ~Hhcx#+J@6Q>sYrxPNLUw5e2+XFj2XU?4TrAwElLIbfA`2+qDyN)lyRujt-r|=s8Gwy9Z-7loaL% -)-nHvJuH^7Powv_3h2=Ab#6FHExeJ$Wwc5=XNqHs>L3@(%iCBR+Hbee}vUACFYJXf=+7$%9$nd+$T|J -rC>&{_E&p-zfPa?X)Kzm1wI{RL{mTbJdYv1fSXdyzb)CGJh9*M?5e@A -R%uTrp$DjGS4sW=-<;UZH`y346hyzD}#ji-Cx;p>O@g -2Q{j@PF^T1k>-LS42&d+PIZR>f-cQ=uMa&m%IMVaW|W_Zt=)t+-t4*PfWI8!GiRaD_5qXi{$&n=ir7G -_JHGC{!G(1q+dl{b)#F`UhVc5&?UT)NX%Yy<&_iN=Z=c26yJMfu)H6ExLdf)3=+% -`e4JB@`(KCKw|5$(F!iDKiKKW!Sy&>Xp=&*UUy>AdY*bD3tuQBM~2Jb(u6OrW6BWn@uKQVT3adFPPdG -oT_heeAP8M}ww#rI+Vkp=bxS!8W*&*{scC|K0f~1#KgoI;3z36nKEX~n3rQ>Vr25<$)*lmQBh% -P7dH1{&pERH_TEPJBitu5xTe1EEtRcyn?ldqnI}ebx86pAYD@R%?EK)aQI;<4mK6t?_dWVmtPmS -}rn3EuFpw`r+*(zys_8=Rpg5f!)StLg((?yBGO7)}t``UtV6GUQ<((YIAP*3=I<|OpvRtx=L=p{dPl} -t^3*j5br~7ti9mA#7&zv)%cuTp(DfCKkU!kxpOCRJ!c$uCGal2w -zc@}H8tRG&(^428qM|pX9#x`)Ts;w)+FZLST*yMu;53W1QwaxmhqqfG_|44M$82IU@pO#gtR+(Bcwvn -2X?J1t)+Gc&$vHllX0HO*JxUXrI<@-jE%QvD+4X*Qx8*#aGsC}sJNLg^_t4#z}2f)Z?3Ja{ -Z?(%muuIqeRSQrb*=19eSQ5gy~dQMo_fkWukZPd-|rt>U0uB^5C|B4S|0|VRj1$ao=-n*@7}%CS%1)L -G^zZZKo7}{k=LN+Aj3Xz?t@Cu_!(aj>es9WXTjKHXQ5bPUMf|ujC5kDlwWXRViKcTFJ?w9r*J5e6Sy{ZS$+R3@A=qi=;k`?1-&9L;j^hHaV~i_zI)%keXY)Alyt36>Za4z*`2<2rhQ -LWcV5KvoqSz=QBmE@w>|NVYn}Lo67z`fTf0DCbG|u%Z(Hl^<5x;}#CNUz#upRgSSP+|t&984DDypQ|K -Pqe%6!XOS6^&;ett&wn5-F5McG+7`Ek(&c{%;_$4<=1PS5X^ojEpdO8%7b(|V1alHET&Kf8C~HPKPo= -{cF>GxF_kUB*RU(>o?Q{-6FaDk^qbUO~S3Rm=`v?ONwNJu^RJY(ZY;v>EPWeI_qsYJskjF)k%9voJF& -V?suL%ZuKZZz|GL`3cUU8HE{HQCa+ri%!oUoKrYuaz2Ul`~f=o#o6NDib0CI*TE^8=NE^?~hy1A#*UzSyx*uMt%pQ(axRzOJEed)=P819gpchw -7T@n(LzKWAw~KJvT+q9J>`$8jJNR)q0%fQDw^tvk?p_m9)3+wECb=f -1Caq?4?L@Oz&9%qPeqHGA=I`#0^7r)j^(Xq1{VD!5|7f#|i~W`UwxX9`$FJl6fBY{{O9KQH0000803{ -TdPQKvO&$A@}0LYsF02}}S0B~t=FJE?LZe(wAFJx(RbZlv2FL!8VWo#~RdF?&@bKAJFzx%J?otq(*NW -3JMUOS%p`kchM^J`*z>?GILaT!X2Y{nAFAt@_L+yDLT2LJ*jNXfptzP@?o+{F?FEP%ygv0qs1dZULUZ -<0-u^lHyrRy@XznO_emPBz4Q1}l7~?2butlYDW+bPdDXS> -PS@3SmU`#etXjo|@LpxhbQ)I)yn_#-@M35$t%_v4tTOm^RS2;VX@#)Ph45YnrDYY*=VFR&(u~*bEkqS#c~$m}{66&F9KJnx -dGPiidUf>r@c7`(;n4f($HT+dQR@c@3X!A01lZS;9OfUWYlx%(F~~{{BqFK!o)1rvm8&KE{) -4G2HRm&jf#&MtP9|z-m48u0$2l%Ls=#gei)rk@$=)mqVJ3X;KViw|GVhW33hNKx+RT -03n4n03#=W9(7Njl5?!5-Gmi}-30?|Eqkc!S>wB}Z>gqtmm)S4V$_mi#>Tcf=eZ0;DjX$JGo*6~Zh70 -#-?N9r&N(+jx6;pVkg|-ah;?nJ50XP!j4@DfS${P2jhk_lIZE`MX#AO4D{o(@7tr+qejP11)Jb%_@I@ -$V;=zs{!nJot?5;@gI~AO5b}xBQueGvG??H=kza7m=L=5y+=mP9q2v(WDLV9uyb(s;z#)1W>hp5g}`7 -C76QIZMBtBnnDNLr-h}cEKze@Ei;wdYD8Wd;qR5WnuQlD1ocR3+rkrrVAhDEgPZt@|Yz&O4nu?hh!Fo -(?MHG*dKmx%h$2I`e1=blF2)NWmm~1-we!7lc9zK8fgKxmpaKkvyMLG@qDRgHma6cWr{V_WI%bSDOuT -Ng|!(40&6T0~B_~^yS%fsmW=&y(V015wDALyk4x)8AYrJnDHpRyzksNleu0}HPb+jH~n&W_@v(b*wXC -JhvSK7{;X@K8b+ -C-{^65*PS|3t@>5;p%$+n;mEzS!;Oo!|}=4;fsUwL+>B>9cbYB$@w7=E_E8do*$hY|8kw*rseY=51$_ -#|Ili5T=*Z#hr3^0{Ov>WA-#ME6Qzp2gl+5SwX4S80;&^yeet)iFCTsVj}PaM27?dfqab`Z_>BSK^e= -CJJUNEyV}JK6UQK@E$DgcUS3a@*tPD$$6FdFJXS%Aghy)GXTjIrd8hhEEml;daT|lp920284fQ_BWJT -6P`4aj(~l?K`PlbBQkV{HS+OR6XeN->`qiw3`jurH$c2748>4$b}jpZ4z{q{!DAUOb%=sG)}&I&OqR4 -`dM#K!LlKy$xKb8kYdGuG4NZT;?bf1_s=^1BF-syKnTtXt%C}jJ4H?FwgQpSJSnCXL~n8@77CF1A@&6 -U^;K`ciqpumc)YVTmO7={_1)7vv<*=0 -||KcC(uFkW#qpLmrgDsY;boQ_=aiMBn_H@~70QdiX#20Y_LhljDc_hIBr%vPXT%b~fxUXlG=9&cqJuY -{bfp9`X#&iv(l1WfcSv|>mEG{5n6d?dnfQrYC)6CZP-HW}}G?}-Bms?9u}+@ -OMljZ%e+$Cq8R9$jbI4U|(Hq~<9<;exR_%GY0iO@Cid0YL3|narmomL#lccqDmKRn$yG=>?~Ur{1%tz -Z--a1bv|OsH8pUK=4G58TGj624@ZUW_cYy{q1*tO`jG^BmGAp@@NIY%p_Oo{wvTu;WGeFW^4Xt(5@N< -K1Tp50i^(_Cr)_~=|p(T5@dc*l!IINZ9346giatt4cIVFGW==$aGfpZ(}+6*CHR9~hVXbx3I}YR)=&A -G-(Qf#dTIX%LIg=@DU983{#Hz`>Bl%-H-7^qiB{G=?oc2VO;*#ul9|+iy`&_jVN)BykO2JYa1qeo@Npq`;p|Z;ESiInc2$L%p|kbeDOV1e|PBff*dvhzq+0RrxPvI5OlgMr>0aHre@ -ey{XB)GOj6~wl`elpg$(rvh+}y0REVQj_3r2`lpFIn{Z6NKSDc%Rknu@x;G4kb-)1Yr1f0XIAlEAMc| -!LfbrTW0Wa$!yPjlG-pE5Ugco^n33%GX`f6G;Nv~}yY3bMx$`P7#M(RJ*Q*o^Zn$m{~_)sIqX;O4Qgr -gziX6W%yI|xX82JTZf$p@FWvEXa8Y2Ilu-PZV2#iYa{q@Z;6po*_r?W0V~ldt4t`exG%7Q)F_Mc{Lrj -Zq;a09^{cxVhar5wK30n3LUZSZ;OimDSmW!3Nvh9*bmR7*=jn(c#HQT7Xefa~PT%tk1S!rC4$7Y7=v>|cT}Gn*BzZlSPU=E5i -8dnC=-CR1$b6o^Pe0244?XqQcjL#eQGuUA -SUq=iqtNzavK@ZUnFHoj@daV$pV#JX*s}cif0qZW6)yfO_PdaDYNqW#bkm13NCgh`t)gCHTl}z2$P7h -lVi5XQ~GvM#BF+c1CuBvqDcUjB?lXJ9vs&%y6fDL%Ui~}P29bMkYG>~7;RKui*cM@Nh-qH#-LE=s;%T -w<)SjCRN7Fn1X)`aA$mFNDUoe)Gf_ONM4{S8Cm8NIdr<3=3tYg*J)6t!dZ#cBQQV@9Weq~Y)e_?kKwd -;xBuyu1d&*(ZqG&Gsv9B!ZB$9B$;XGTRv8v4rWPyk)8JLh(`Ykq<4Io4eIK?Yvz#T>>)j(8dg~)dB`e{9JAe{j!X(k3LzR>gR%diXlQNoS+hjyw=e@>{@^`E4 -IVyy4|N*iyHDLh(QKo;okm69h1-TR=@D08Ot%;tzO(iZ -G>RJQeOOyb9lnFwg6g#2nFdzkM*4*=){=0r2<=VK846{P(Kbd$>iLx0{6WP*C&IDWciD1`kPL$C#q+D -I09LzD_8CWenzwQqe6-Ky31=KH;-;BSM>Vpi7!44TyC<~zr5D*l|uLEGEi}*%R1XsQ$A+-cdCC1v!QIMAaz7g_ -x58s@>$E*`)Gx2k2r%F~@h5!A66|MyTU?%vNY4BqTU=(IQ(ROP4^~Yl`cI{3lxl@c+P#+EU^cxA-BTY -)s+{YNP0B$BvXv{>PQ}Th5_$J7kt}L4{a75hLkRS}?q$ujM1gRRW{@LM+le3q`@}cfoD@3o -2T+O0km2y&cQ({$(*w!qKcWV&&z#u2G8AV@U%{SfKU1ZcH{;gou$S}b0uScgK7QA|W@b>VfQz+b)MDX -F5G~h<#yf|;`Z(k&`1Npl>bYs{UNEcs~(xGPg>6%-O!)(eG*igzIKo -r|@F-c|#uyok~T344P3xxHL*ldko456E%NVrH+bjP8f$QJ$?eWr#wt*!{mz5CHGbyx$THW}ZDwPLp%Q -W+T07dQsl^T5Y&0;qt@5#zn^<6tl_eXQuLl@RyqLJbFZ86hBCurqW}Hbe$7i(w~;wD*sr(k`8aq!;ku -`BBI3(i4brYrQ`Ax=U5D+|;9nKhn{mrd!h0C+VHEnSyEqXA0R81_r_#z_`_m1}ouK>pJk=s9~A7P5*& -W0bZCjYCEu`5#AMu5H5Ivjh^3AeJ45FP~YLJQ*+-+&3AJ>-s$vjyWXp$Ansi)XRwi8Cur_1b(jV4h>; -8-s8=IJ$N)h@fxxFu0{LH)Hece$asu*FRW<|jFlYv9NzfgP4a3osbZJ}Qq)DBTO_*-Lt!?Ij6*if>&D -lkkRk&pp<*?>RP^P}*Wqe-~HVcTsJ)+=Q|IjT>hae$3U)!~qs_U>a&InfK@!N)Ignu -)--@~`*f#8nq8${mOO#aJBp?x0R4&a{&SjlI$7ywnbh*Ie1_B-IWe2@YQ*)6{J1p;LE=WxZuGwr49UB -;Stp2XHs3zbCJAIL~{pjj(8`9&l6!Nf)l&|Z)B1kc*vSJO2I0#puN)Ksq&hRLZzheR0$mMp?$BhO%FI -!e#Dn3_UxlAewt(yy+R@kp6ntWU)7>#$}gf(^ny-<-%>G>KE+<{@|?to8A+0fj!RkY|;ixszR*K_m7! -c-m@MX;jvT!h|1SprGYiL9~kWw5h%3ipjtT7R;Y%Fg*hT&HTc4U{$n -7(O~ae|zxy_2C(QIsftC?2ukd1AiOw-CJ5san5aRD>cnsbF-p`Ps>?)VL`IppL^beY4~7Dl9(NEh^7< -LKh3uTJ7U29L8N?+X^$os7_0REnCH3dDrZ20qoZ -95mONV_4K>R9)O4rMr{4XXo1fa~&?w6Q?OqPaJs+)0baM{ccg1-lDMxV!*DvBZ -8Ytgs$6X;kU_q-tpHI3V|@7VW`$mb&Olp^4_5X8d04e!7zn*1kS!68_wghAf#vt{BP^bJD60Gr#RCql -MIIY_6M&8p-$N-fHB^Ve5tqF*GV~jxN{Ud>`gv}&~4(KKseAsx7Z-ug)8*mI90tH4WfDs -nGx1iMzNg$&hNJGXq(m)~i9~h^hbjtIiLp^k<^8vB3=+Ev5`neWBGW#W -YITc~3`{&3?l;~0_e0BzjpwyyzFJo@OjzkNCYJk(^RT@HpPQqPbVypV^gpN7ACG -zfQ$853%?++z3vPxc-K(C>Y8p1%EPM46|6@0zwhe$3=dx@L_Gd`Q?6Jl|V68vghZ<@=8xZIf872Ndh5 -SfUtAD>jthYerAY4Swcz%q9_jX>13oYmIX1H3$_PZeP#R#5J#t>U|_ogZyQ<;lGugMh8)Bip6L}G8sF -xwbyQh)Y{>tzh+}SZNRTv-XbP$qrJQU>8g)(g$WkS$y>tg?!;JU!7`qjQmP$h -oLi_?JsdLOi_4Xs`ccA72gVK$^#pSD0)*Gs*{ztbzp{a -4zzL;de{o3_k(8L3l1zi{`vy+Pvrkwj>_LfdRAi2{Uz$FDd{$X;!z)RpBncNcQ~cbpjRGD-~On?C+P*j6Ti_sUZxY6QIb97;X0T$(<;gJq?q(tmNx|SB@1F@1#8Eu#KK6KEsKee`=%U=qZoHv7H -b9VI-_zCm0w6Gg_R4O0zZS%4{~PxlE5w$TEOcvGq|Sr&yzD-a6#`!qw9Pe~I4IiI -{R6UGN<2Cm2Nlza+N{KaweOX$`F#By8#(b=uR`p|3C^|mUOgG->sfmVl5KB9BW$4+#HIC8C+Avo%!v1 -b`O_v1n^Ck=*Ica*zy5>x4R1_1T*MpJcB~W|&P)i0~#&Ue@I1vSYkDMwwuE__um2V&>e0o<{Qbuxz+V -=uyw`=L5-@itW@*lbw0{aoWG3abvW2zfb5kmWWgKhFLzsux~ZgTLbz692(Tn)ciKMX?sbb2N}u&YN4Sfy-r3(E(}FsJx5*c%ao*)h{9FGIzTX< -4b><%&bc;0Z>*rjM39F-;6%HPxc>&BLGebhk(BT-#DwNv7ByL9zTOmR(RpUge9)7-uT}@DJCV -wkq$ucTjMQP=+jpA>Hxo#6AwtLdE6I>_O%I!KflC*~*(>x8Epx&@U}VG?VKe3|PUhuioa}nzC1svOuL -aH^sIu2_UXrPX*Z}B9?O=%JBX@S`2?+e>uI`Abf9FX8Xizf;&T_-Xh3wE}r|q~2vwzr;Qd{ov-=Gf{a!8=)M<6;)mK8e2FsGBy -sW-|k_BhI!G&QTV>KO8?8_Qk7C_67u8bvj}LrX>Dxl7T%17m%LePQPXM~oJe2tBTm?+j -T6qQ2Mjy%(sWy3*790tk2$}Slow@+>^@*onQ@B$HDh3YhF2P_Z^Vs9?4;>nsV`{+l`Fd30t_QXo2CTD -Vsfx1H-2*jshq~?5Slux5!=vv(Wjg_tFvJl}@pat5EaP)FqhsJIPh -^Hvbf<}N&fKFHV~31Mph(~H|s$d-{4}!Ea*h -edBuv;+Ub}o+hl!-&K779_vChnmz`#Sh*!zdi`bv=g78?MX)+n9+Ebp6Fv`;az^!X^a&%54b2ZeHUZ! -ajrCuKH%de-jC8O>p?gm?hlfNiNxAkL%|B-o&-h;`VsP=jY&>I?;#kp&H!wuU2 -7#J&mpHzw_z^^O0hJs7mDW+kZpiQqhryY)mmRxK3XmPLAK%#$7K^G7LfMdvW6u%o4r???P| -BcYZlJ4qHjd|f1&Mx%J2YMT;XGN)>TOElAm~S?sN&3vZ?j~|k-V^>V-)GxqI9#;IWzlmfz5Kxl$~hpAY)BAEO1`0k&;*b!k|rKVSqeegLS8JkVt~=sSFB^9 -y+?DM6gVW4|eZoatR%2_91P5PsdF3pI8PsNdIv?VC?ow;$^;I9W~&Zs={IU3}zq0_v<4lQK=0U1wuTM -=PCUM`F9AjQIYuWIXRp&iqm)1R=Y;I!u&s9%imBkNV&NiDgO#bJ+1r1L>k;C6_KnZ# -f}{+LSp)LMYcBx>U!Uab>mI38yXrW!H>wZVOyL8%7T!L8S$CKkk*BnH{#utHIQC_grhMyt+R7(L;j-j -Euu$3HEsGM<(Xn>{)7D_E_S6B+STqW8%hu=6Eb4SS`2l`suj)D6&?#ts5f?W+VU&(u)%@B0(P)>KrnF -Dd+YU46O+4oVf---GZ(Mt$D?0B_;hA>`#%nd@-A!lFDCSS$!@1U~$=XBYBPM7@)PM7U^Z%J#N -D?<>!V}9`6VUY1l~El*&Cb6ka^@Nj~~y;;rI!NNZL#CXWPaU{>x9nc;wwR&m;l38Ez~>a_8Dq&44&wV -kO#rZO2Z2a>KGx|k43a|{t@dl{G6d|5H;V8Z~HHU*xdF*^PN9HY#$bV^qP%A_&aTq1PV4oa{^1FmH-H -E@gqECfYENdH+AgDQDQ=}}-CB>)-X0nA#u6f4~%Ur>c|t$KwQT>!m^I=C|AoFX9FTxV0tlToVz((Z(f -Lj9y@_eE!FiRn;jR^U7+|JjgcO@ph9Io8QSQcA}`sYcjU7*OnUR+gacuO&4ai^-U7XqCh3`Diicdc|< -cj~^Aaa&`o6)STl*#M)?Sa2NYXvC@YRtZ{Bu~JqfSLjBnYoK3C( -MwAu_=+K~txEigfnb|Kr$s1_b&+Q3$jC}+e4Uh<99Vz$y3@M -&lL#ICfNVco*%pMDq}9ltuETv@Ui7sy_4av-WeJ8P&tZhh+wR@f)2uTsn!vM}daQ8^T_q>Xr^XLhMFgnnJPq!SZZ;wZvq-33h -@@^^DW8yvXp6r=-_I3ID@dDe?lS>S#e6mG{RoJI;aVB^1lh>Etfrw?QQhf2Q)ADWHSRm)8!w_zpYhG| -P8+RVoN=hd=<_Vtkqa;Poo;@CH+WUP)&JQpm5VO8=|&pgXy+?`&dG71`VlTRS>H`K|^IlW-VIwz -sV)oFNZ(hkpMjCqqZajjH?RwB9od!uEBPX -`-2) -&odNIQQ={gWs3PRh0JU#?|Z1l^A-SUWr-|-=#F@hy=;IY4I^m2ghkUte8+0v^$w;}46c^juYGYXj1Fx -~cwak@yW^yNL+*19w>_F&?7h)#g@B-n{|Wu;DeK| -Re29B6w~YemHlwX1cdBG(+TXOVHWb|TwWNk{%$i&1wbmbC!X327y+Hdfnu70A#}Jkm>E7u`VH4Jnm7# -RPYDP@k(K5+b^7SrUyhf}L@lc7|n@RJJdo!GfeSjDn){{_re1fA{Lu(VtlnTEw3+l>h4Y%D;i)(;`VT -y6w3@{uCHNopg}<0`#Sk_hcylF)!!Ud1qDXXsPjBP=g#(O3(+FD(4D}(6}y(R5@ZKLo}8~*o$P5lbw{ -`+voN03UqpHrf2c-x|XKB9NSUdQdMdf*wX=wYM?u0-a-aV96Uclvn$^@Q-h_Fb+7`IG9V}nr1cSGGg6 -Za!o+g&w)*-U91;4>=WzwdSkS@OX7 -l6^s!Q7It0HYtfT#m6FstNT+CO8Tcu)wZb+w90K@PItx4-|6E;`C5F6V{>q!Brbn{s|L^x*CLZD*qIB1VGJsnnFXE|JFfJaWXzcqTH&c5cSJ>@+iQmzlF-DS22fANYgJ3J{tmiPGH2$A?`HXv~V*f8rLX4G8#I^ -*~Awf}33+=AONX0A{2L@6qD|LD%n&Wn>brw4D3p1(ef-X8pL&PPgZsRV_UdGqxSi!gQ+rgTH-YyBirb -fPV7E|CQ(5XHRfkaUxMe$RylJXtYab>bzJkN!H#Fr&9pa(t);-S_gzJNX)e)|1@69mBpDBcWI>eF>tx -K#mqVuWf#fU)1V1-oiK6gt`LW>&tlTK<57eP)h>@6aWAK2mmD%m`)?_XZ*te000sJ001cf003}la4%n -WWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mUtei%X>?y-E^v7zkHJm@F$_fS`HE4_5CpyP2R$J12Pm6(yN0 -Y&#SYc}Jubb?j69>~7~@B;vyr0oD^tZf`i{@Twk|k9ElbU#qVY2FVA3b7eSpPiNN$))=+cf9!dWW+a- -E)*mQ{Vz%UGur<1X$7d3k!qg8G)emRx?WeOTIAO9IZmDwS%OnlA)aSVwNRd?WOm6nf@}gG#1N7yaiYac~8Wy_KJIwl^N+HG={s2%*0|XQR000O8B@~!WuZk~a&H(@b -%L4!aB>(^baA|NaUv_0~WN&gWWNCABY-wUIUt(cnYjAIJbT4gbb7L-Wd3{sCZrd;nz3VH81cjX~F}9w -D0y(Tf1_T(=p-E4}AjmSEXj3FZqPO_(C)rW!rr2~5P4YcGKFL#9yjy^@l`@ArXsKR&iWxR#Q&`!ibLw -y;$X7GC{qXS?_D6(o9UZNKovrDQa0p*)Ybrs?nj(O9i12l@T5osjg3biORIqy3?jJYzPy2_*T}*~PHk -nNBh5Xf6M;>bHK$%MYR#huBNG-fa-(&06$jI%BfM86WA_A;Wk?%ZXoC~cvhb4T^q>xACwX-MgZR;dva -|lVTMXCF^_GrSunEhakk?ZalgcSi0IN`$khKAu;VneX$>ucw%8;}*&Z@crRD5i?eu<_bJ1OggvXgd>&xe9~%-gPm#4Rf3IX88W#oe~#2%q$sb -9Ct+k?pFiVgugtty9AsHvq_3pxGm%qeOL%2s>dWJ-CdeP1uIlm0sbLOfN9ad=Bc-Y7#c%yD7EkW~9K} -Uhcx}Z2DW*e6cq*A&L?|O+c8j?+FqTviP56kr4{`aeAKW2uK -)(LQkKG-CuySl2n-d#PX=J7X=&8k}G<@TBB+Rfwtz+X;IPfpE?YJaHn?R9IC7c+DAS!e37l!+X> -FUTt5+5mxiPR%1;5s2XWI<0&kT_C=WGSw0JD>me7CRa)>MstY7YKmo3$sKy4u0xbf2}?Mjm9#2EXdKO -}We3mHWD?io!C2`jf5evSLuF0%@}vi9I=K>%+4X1Ap>h`Q?nhE`I;lv&H+5Z{NOo_u=LD=G=U!J9}b3 -uk5}xuW9Vdx~}SH_3@3Nx(T5QTT%;@a+3Lox5de-J^`-_(^oHRx`XQhu-6XCnu{SYZ^oJCojuSd0mw|Tk?+1cuV&%LI?JFd29}7+`BAq?AqL3+YG{# -#DP-lbJDzO}D8UiWyAGSD=Fp!73|I&~A@{2Jm2TW*SC=Y>3Rw3`iY3-{*TfBZU{zbbB9&Y6e*Bc4(GX -RadNO^`$iyz;v*F0QsHG*1rmJDb~-LRaOez8h}JFaX0IOz$GOE{v1QKmf-;>Z*#C-XdRuUrKv~|3j}V -2%*(+5Z?e2-2m`P6Kf?Z0w+$hon*IZDH_-ENh|~48-IzeflTA~v=4P{Q+PNugxoxk{pMLwz(O$Wqr?11eW1;#}rtsxYQAzrJI?{?)ea> -QY@&I$YO{mOXm&KG>li6mb%a=<}iwXSpx37EMO;%&e~M>V_OPu4HgcR4JxHpeP9`7?Ry8YpnZ0JS8GG -o0;?T2#0%TAvLpEEJ1z#!e+mSg+)Xo5QO}W{UI_?eZ<^Nt{yd4q!|1G0u0m}BA(omd1O3{8S@U=vnfq -pnhSk&dB+wuEr=lyi|#Dhln>jnQ-k)^>?)Xz5?=t#6{spoto;m%8;vIO?7+e%_km$B_2YGh!A#Y)vhS -e{&m8g!b_{t4y9heS>ZUS@qh)TuQS2$r?A;|Z6)8TRW!j#d)5&UmowE$2`W6f{QIo(M8lw+#sMdnVciX8DmpG;PJ5($)tS;`8EY1!H~ZC-M`vC9q^$7D -W>lYxPbsI|`<7?i{od94ygBmP$9qSN}z65Iva3U(|fp-%T4;ZU1B)o1sT-BTAN{qesV^|3i%>U%MN@{ -NA-jCdtkHn=~aA7WD^slzZ6MO<0oWE6R?p-trzq=rka;Nh6DAJ+32+uP)`@b`KkTf+H##pvY!G{FeRa9 -a|JN-x-OwnW7{NxGYbQ!J|SK-iMhIIU``IZA}?>6a|+nzg4#I-*mD}c(4xpW3HCfzcv)thm0JL_UBuv -mJOa|0x`A8-f(r`4vtAkIh`{?nyAEU*4OmuSh<)JDgrmjR8?k^eB?0GBtzfk|WoM{ALb~?mc19(hmanu7Ig)x_xSjTN}TW==q{^pi% -V^IJ8q>r^SD{8c9|xvC{ZQpi_MIo2cA68{`qfpcK7( -Dtm?FjKox()wRbz~Jl!sGooCTzSvzzEzQG=Ybz3$ey#KuKUraEtQBOM -WW^0Ov(HSY+9D*A_MxOC%^gj@vzO%{7*0TybdW^lD_sBa?Y#;~A -M?Gu+Mv*`@WaNT(WK`02Xu59n5MZzDzpWN#M~@9EVr{PZ6Yr%;@q{$SAG+bytV@ ->8t1$tJhc8;$Vm=N8KBb>CwAmTs1+hO<@!SrFE27tZTufOQn)}5Lk0|E!d7*eOM^p$lAM%u&PHlv6>g -afBwZ6IVOhRY&YR^Y=raVCyxu$W?asURK#kP?c0mxBQWDo2x>r9iE02SOWEH@ -!%3$#f01s9K#IGqY#(WO*n3y5C#-!u5SbiocE1%&>swbv_2WV0RJizai6^-XKYYU2Rk7YHlH!)mfE_k -E4x*QDE#gBaFZONQWdFc&>&f*L~0s=7K*RVeYSCeV5WI5{eO@gY#i5n9MqOica1D<^0K{q}pgX%ooelQ -sEZ<$Qf*u!nibWSTu>?2K5r_b|Co%HM%G1PFmRx$E!aa4A;yCiahk>_<5jgE)Bv`s)!#RwV_mj(Ou?{ -u|bN_fC*f7TXXvK+i(AKxV##MWb%Sf3sJsAH{=vF%ws2GMkT0@3bir*bCJJzXJdQLEf->tEhI;Q7MSa -*y3u&PR}hIpOo`wkZjOYX#LkcocxI0h;#A`}5qE@)o31FvLONezx+A8O0yrYUM>_&+rZw=sml+ZgfO! -&1m^)?p{`I?L<_+uIpDymFkx66{6>@2n0rD@6|z{F#{-t0c5E3CcT;) -dcxsZrrtdDC>Z;i6r>gUA6x5MFv)R80fVkY7DV4_q%6dz9birI;!w*&dc6 -L?sURkE;Tr0jF}a1v@5loqpd_oS%La|Zo-}#t|gNEgiSN5Gt?wkuTro=4Q3mWe+c>!0Pb(S1j54*0Jb -~b0{}4?0U#c0O^4xG-7<)PQtWZu=IbP=gpg~JO0a=vbFRJPm%8fq6oREeO5j>cC7d@dw(E!Yf(5j9dG+oFSF#YuyTex}mpT`!0_y5TjY -QqINT0+W`plw`m6iFW`;KP^-pfu-`?U#H%nHz8}%c`;GPe6_8!=mm=_&6{tpog~*Jj!t@$(ejEs_oYH -D+(__m#K=7?7@fSOFAs&h3$HVjolndQI!kRGk+Y|m21mYf~jIX74J7y7*h^bz)3L`CSkWt#{sjsnJnS -gvk4{qh?veN8m8par$oavI{bbY52fu+2ut`r(w8*`?~rB!Pi>OfFw -roa0x0w3r|qOvzV^kcdh4^4&xTEsoUSF`7Llgg>gW#WB9)4v}*te+5YX!!TO63_PP0airX`N2HgHKowG=r>GT&Gu0t1qLo^offFY_Cao2v(Ulgx)F -{M49UIHlics6wd!*!xjDGif6g!+)=)`celn6|Amh$iVM%W`yv*$5rJxszmnKBibJkU{m)J-}Zfxel@G -m-zmY6`eK!F0(ZxTkxH5^qN2$7NX33>;!%?qQ>$!@#X7h=I1BBOj4egC@AgQ)CPRX_?^sw$W2k=Q1(I -^QZR!K$Q(9%7J&h64gxv&MzK=3$jt5h$k|5#CXQ{{3XR)N{Nv{-CAgCnS|`-kM|fc%gc*V)$IcdU(8% -V_+@i@MN)9|_z-)|99)M?vRbN=g9frNGKpKTc?vxQz*IVo_=o_GGE -ruvybAm~{!~Q8n>T^oJp?w>)*XS}Y2gV;?mI^r6v@wE1CgEQdb22{R@hMbuqXC^F*<%UFfjW0@{aNr% -t^ELI`RINo1o4^&inb`Yd|(eV5}hZvwFrWp~0xVNb9@lJ$;^4nO=I=a+B7!w2d)MZL6tEh-MfJV@?k=Z -{&4D2Qw$v%~Wf-;5&&kDvV<3-9pKr>~OV2a;KZ@{%i20?MubA9`Q|1l~LKc*}%bRO(AnmP%Fm*ze1gs -i^SgeETj`34;kXkpIkUK#F=rqEvCqB=XB+%X9nSkCA~$$!PIWE4jR)2YF` -(-gSb^vN^Wd-^@T&&|8j*}T^R>1r -~Tr#fOstoZEYL3@jef3A#4|C;Zy_alixPHyj5-Twsv#JL0b`t9QTm#_Zx9P*g}Bm9$74L;`(t!U;h-= -dydki6ThxN(~?QUnZ7@7&z+o*=4odQHTOW>h1KYpseB>E^HnN*L;km}JIB&UkxVmOFwB+n-+@0e_$P^ -#3Ap3WR4ewiaSD7InqGYVrKti$A>n%ge>9H}C%Z{KI?9Te-Bb{esERGm}I$n7O$~!d#7W+}Y)v3l~!? -I%M@@@)5JSR6QOBi4$1@#UICDF(h*jEb^Y0bo1F)XWS2!9H_#?@CpNAJhG3Mk -CrTJdX8{-Lw8Y4H;ld;08w$}!IUObw#%fF6+F9^Hu5=Ol2)eHDgL|Q`JRga)wB$2)-+pOw*?_1T>z3S -rUz!M&-cbG5EE@w{T{mRk_Pmrh?HLrY -V-P>CI8Z$3yd((7mtvV@hadq-!MRN(Ea-Py^{Sv>Apk4m)VNi??lK|%?3>?ES>&w6i~Z_(xoKvd#t`9 -BXKV&`pOI>jBK6D>W2t|(~*osL{2{ZTa=b?fBY~d`S`=z=P&;F4`n0^dI67ePzw1;NW)n06T}8M9WRk -&^q#iHr8pA7m%>{R2BrN}T3s>Ff&Hkl5H9y^bSyRLdqCVgK(}@UFEIst60q>-q7nMVscpo)W9*8o5Ux -P?`FJ;a*G`7(UBE}wOBTogh%^S|L6<-r`S!*PAoqHIxl(?&hC-s7~PwGDmu3kd~XVH!77(dOue<5$DcsQizWpX9SCl1uj?9xWPBSNpC*i)y7^*w@4QX=$az@&#wdU3T%HQ{!Ye -(=_2(tT>{S~aSm0}KSz|E)ztW*sD3@2k@T*9o{*eaj65DiD1%Bw+S6R>Z(D!P{M- -!ycKvILo@%b95^Irgp}V^f1*(9}Hr9le*!Ow)9#*UHAOcFXkMV^7hvA<*&MEIMHejfFI0Jl0>af8(WYaj$WsYNe&+&{LUtUmGXG;CL@Dcupe6F`sa^!dP1k;^5GO*(i9(djeVD -NJQ=GfUIO}yjivFCTglgA702R?%9y&1;w1IGn6MD>D*o}c*oM9=46qv;-2ZnRh1*(Nt_?D`Pr*W?p|@ -BWHG{BrDZos~j7)7mSIPrF#w{^X{@@VN -u9$(6FpJh=o5MDR0M2)MbWjJhG)BOI>B3xOZ&ASY6GS_*fF-B`h7JcsZ#L`YYKKv&tE -dWOafLVowf%4_ZIb88oHZ=fI%j=EU9^%yO@(@_kE|#QhTK#|}#`*q=Gn+DIiOr}11Ca0ctqW(`D>d^r -7L9Ga*A{-`Z^?MYTepeu%?ze!PRwEF0Psd6!d1;y<}`E*bXsZ8lFIshN5#CX#mD|P|rLaqvoMm0Gp_Q -peB6MkX*#d4KbhPwl`YPbp+`x6}6ufa7zk&jW;+~8o%8E#7UC9+n=u90E5H5@@%`<(2xtiu;@EW;t^< -or#Qh4BNRIc))nubU|XMh~A#6F-{_xFy`hHo>EfizIb9Kk<3qUUzit*sS-!jj7_rneGAMp&y~0$+Uhh@4JL|NmpB+3X0XM&!(!b}w -L=YLbxERXU6bGzRLTS0><+YsxHy$e5bY`{NyqQ`a)sB!Y|)i(WMb6j@x$Be>KLT|Xa4p?$>ZF-A~8?l -QHu3{GgIiRMY9J|=PD%XwtAI*0}llT&*PX76SlY8D|?glF#8Mn`-9j5Hj{ufY70|XQR000O8B@~!W@~ -Phu=^g+8RA~SJDgXcgaA|NaUv_0~WN&gWWNCABY-wUIUt(cnYjAIJbT4yxb7OCAW@%?GaCzN5{de0ol -E3?}z)Hy@l}L2rxW1fQx6iSi*4HHVv)nX$wpXDj$YM;9T7vY)_IiK&%?tn%AVJ&NcJGJPdu=2V7z}{< -o&nrvqh}))WwSWF+-7AlAHBvWYyGu8+sjsWd3?Djn7=n*8!ujNu+s%+$9KgdOW8P^7dK(f+1sp4XJHX -%X#kzZoU?a_dj}uJ2SIULurQsmy`vAOCx>r-IXyZV<3nh-*6a0lqlgQ^icEp@1R#>me67guw$~VZD$s}kG!r~u1wp|Ja|txYCjl1wIShn-O`?~)f2*=Dks%;SWo;gWm9*30WKcRv;8<7Ifo5 -r`8K&aL@-f{jG;sr?`c3tV#R8STyFn&$%c!F(g41z&O-EX}@}B|N==m6-84n}~4ECwkp|{NF&XX0-+Q -$$3%cDYM(rTeTTSV`C$X9<-Z4A#>dOfZy_{EW&BRWy8tw$zd42Zcf-Qg|rktlNT7>B(pAjc0-id{RRi*?3SOBJx$NU<;1B)RdY?W -u1dAMYVpmP!pq+w35E78r&2ZV7U-~sk!J3FkG7Cl0sw~D4^oXmQ_TsFY7(d+GtAjxic?ho9n)*g@+@k -kK_LcUUs5%e!hy%&#zr5y?pVf*zz8d#Xi@ZrO#Mo-C`@{Tnp@;NY4lj2swCmy$fy -@3$fF3P``>zn=bd^kMSmm&14aumr6MK$B>GiHkCW*Qysu3Z9BG=ha(1*UKcE0$Wti*VKH{tf(K>D3bU -Of}D%2%t6s;sXdR=8OUedY#K&a_#A{`bQNB5+$|DmlSz<^RT3Az7kESVasW(S^_oa1&{%%)n_vcYQ$P -(D8Uf430siBAAV;K}44{QqcL)XOkD}@~WOhpsgs{cJtJ>ehpx<=sAQTf(z)CFr0qP`S@7ZL$_tU}qgK ->asHDCE+U{Z#)XLd&mgyznI$=o6<=QqDMb|4rl(ko)iJh -w9njkuXqWnQ%a8e&JCu4F&&wJpeG)K4@wqngs$>AmNFryMvSP#?32Eh~j -(_W_{*c&lYm!x*si6NMG+x_pG&uHRbXM85~IS>a$)0KkSlQc^;L%~sfJ$gabrB$`rv?XLE+$UeRraj0 -N8=&d!PdMKw@G$AM~qlvBT2620FrdcVo6S|%W7efIY7)B6K91G^W!i{y^MW}*G3tYNm` -IY^i5ECm#<^#)n5AV7rV -Cfz(c0N*;VV*n6NYTF# -TI19*mS4}ZjMLLvMiOZnR5m+`@gHk{~*b|A{BD98;WuV5&7jvgqI03Y#C@*Ai?IW>ybYPl7bKC_!hijAb>P;fdG7YsO)>f1 -B`#=8Uz~qwMTL9gPdz{ZH=kZc&lGGc$Oyy5ZFkbUdMTsI)T)$8$ddl-gw!`qSEuLG-|Wie!kM_&h8V9eUA3YCErLZ)yztBy&_(ZN -(!AP(vgu)0%IhZkzfh-fBz(Kip(Ay)|MW7AE*xZm<#(7^U!g($zp&kD?wNOeAeZo(K-zQKFe=z)8Z`s -e14xby=RQ>{eN8Hw#eC;WR4?=4E1oFNt{b7#u6%u^$}Eh%tbA)Q(x~9v|=Tp6>PrsJMIo+cU{UPu@u? -`lTUoJ6cu?fz81sm*zuH%}m9+bl{E}Y%;qA%p`-5MPPJZrL6km00S>^7 -@-8Vt^BwZ7Qb%c4oi>G;*-(l!MV*yW}&Vr}29(&pX()=_ntF!Hmi+au4=)2Ii(RHJ#LoAvLWB^nLXMG -)Xi*@@bt!09VJvln#1E_qvPQy`07y$1To -VHhGCT$u$U6yzG?+L*pJDK_M7tGjS{`~Dg91{fFWUjp=OaNg{{;q3ogNB7?i#(j)Z2iJqwztXIzAJ7vrTxC8a$W}Z -x2#%*Rt+V4%S_kAE$H=+Z>4_4)T!sbbA_`Z$N0Fj=jY0yhE8;MxFcJOo4a)%^kZp-CEE55r1OjZILLg -$k*Y`*=s^@vU@&}}%9*Phw(J3)@IUoh9uo-G`t-gnB!}e$K?X||ldedj0pFHu%e*<(2o& -(Q(#s{dpuWT_^ELRecQq{f(T|u3g;UT*05L0Y00|9*v-aFxhpwNUU(3()7iUrWx<$~2gTGf5L;!z9>8HLI%l=86 -1m<$0*DAjz)kfERgsyZ;<`87`!sF=Jk&$p>ZXR1Hr=_xLumRC_hYDYrk#s+fq8eT97Vw1Vas#Fl=_n&==x=FF`T098q+3( -a6hGO82;3-h4eYuwh(CHH;jx&E{c}P^LsuFLg#U;l5QcqXHLe_u$i_(~iZRGanmT`UQDwIz7#3XAF-YIvG=C~YL~DyP^!qQ8vbJ7THlA|?mcrv;~(*Lg9zsZCBKLV&z7* -!n5DaLw$=PE+ioxA{`mt8GZF&NCAh9lR~nSsbgzviU8-PsiVME&a_0&56X!td(BGQRc5VO8@Y%A^q5G*j9B+RfC~p9sp;415=ofmR$1Un)1; -Ss>-tp7)9Dfdf%_SSAfD?VkqPo9#}DH^NZv>Ins|SLJvYp$H3*-(W0)*%eOXc@kb)>0K3@nZ@};5xOT -Ijh>39!edXF-%8{RDcYf-xe~ygP@4h0dNR5|%=bhAKH$_F44YtJ3VMoO6#$9T7&>Ci&~K(@;sWg9_#b -k=msDDUo@cmP0j&dh7BVb(d^A4%gi}IF3+li^l7%zsO2n2VU`*@b;RhY{`0MyKq@y&pZ{-VOiax -GOI;1Nl2MA=x{rMN^L8mGW_ab4jhQ6%SO+bHuwADulFJ=jM*lF3M#J}}USWgIwOufa@mK>Yu6)?@xtF -+gafEU0}=qG1d^jl$Z84ukH6T;1tByBthc@YxZ=#l1^Ojur(Wbn|9l0Y7$ypg;fDFSH)(|9_#6Qnq{e -X{b_z=m*|_J$y+rhYDYD6OuT+;#ge+arGa -mDBPz8Bi9s+tCaFzAZ>FV6`79dbxS|Wbbtpr{%QB*VBeE!2OqtupIHJS&C)+66h55RfA6 -*i$4YA{{0`sjAB;~4y|y?r8ooLF;BJd?bw~Td4}0%^**`e`YomE=RWHf5<0ES11*^N6XFNanbf8}FTW --EkqMcrLUb=z6`}OlG{UZZ47_P9Rw-~%#Rnc4DPGe>TwXucW6dGUEvKC8? -^c?@J;H%TO>WExE!goRIjaSztjXpvgZ2uBGW=*t7pdT|lORb`+mLE}8L$ -*tUhtW3)RpSeyMZ};eRSf{gG(K458Y?Cx3?gtIBp$yb2nj%0b7A3Vi85MO$;lfqyQ9+g4-s3x?p3+St -MWx@1ZJL+(D7yn9dT^F3!T3P*_qvnKgS+%#GP -6{>FuG+I2fECay)inf26RT@|f^&p|CyHWoFV%9M)ZOf=61(>z`8kwV;1gHnt*1x3jEgIJ_?IjOWfhiL -hq>8{8MYz=ov$pT}tp@jNoX)ZvK?gtHhY>p(1F?FT5L}kgf{7*e!=l|np+J*%%^2Ak=Sn7ykcl1{-;j -lbNtRvVc9ttic41V*sY-^eqj2?{It&+mI>M-^tW=0uW!W-p8a0^8z>y;B16Ea`aXw?JmO_xGl9?}DC! -?H`oQVZIyhAcwgxCCA0~E|^9%99wbYsGtt3pla5atGave%ZGpbe*U8);RUDM8^8m$HZxv7!8hz&V*SP -f1H@NK;j6M?+&4vb9mj+6DWrIuh3~)F13H5erZ~Zu|b>&S^HwTAiI$yKYce-SUVfL2j#?K4LxUgBKcl -!(hNq%LKH6Q~|LIRllqs)HaH=3wObHkHN!r*@k_qC#bYL(m>N%9$-!lq>vUUB6uuHo>xbLn-!61ftl1 -yY&7d3n+~uEf8YY=s^O~v-3J7Z-xdW*7EhPrQAq<8jZArx-AK`bvzMyG;!se{^D>o35-8C}5~rlno#p -{mXm0eCS|=_>x_@9!%&eII9wxUDY&EB5t$Bqz5t3C`Xsy2|PYroGyl+Ce55DTwO{Q&2xEp}&W4qfKXy -dW!^co8-}0V@hi4?Bju`NlbT!XuRRk -s0vK?hT+HQUPd=F=>zGbu`VyOb*9+vO@|Q7$CUZX3gaXtY+l#aJCk8FnZNAd0FE4VzoHFeTXBtUq~cW -MPWls*#hove#y2B3b9 -qzMJG`{QNCJHzc4WY200}0A%M6(z$eWmg`4p36hgse>Q*+}j% -V4UZM%9uda5cz%BK{9NFG4E|?i3?BgCRpi9Z{>ILWi)W93(Lxmila@h;pRR=ZZlWy~Gyo{81C)`+GwD -0ve83%#3M{6R*b)u7$UQa7ma0v5QS^tS(}QhE*Rr@SMB!NE;Aup#!_zyqyIN6wB5>g+r0H**BEFAoLC -y?x5vX{>MCD!Rz-X9Wmf< -+je=U&nH0kAIr&Od#^#=hz3!qySK7mu^mT(9WfRgi-03E%4F0 -@Dm7dHQRyWaLJG3nC19qp%uOl7IA_MvZf&b|s9s|Et`mQ$%}bo0%-~W-TuHTvwdD;`Ma32!kVp^TWn~ -o#{Dfx&9zYxp}QEfb{+I@$&)nlK|R%AFkWQkCu-=c6Ti8GI?bl9C>EoQU~44GbhFei;yk_`eG|Mge{XG$wt@|vm62&2%raIP=M)*OLgFS)M|7PR^S3sqU}xw) -Fju+{40iP@WVf%kCR^ZJAEpIQ@XNvbt)5zRD;YDaC?>&U#t-`J)2C17>G!7m_BgE|+>_LMG7{nJ9+Z;~i>IG_1S>Gfbz) -(xG)jh~wC_zY&2^p)GIS!+RNX5XAsj_4Y9kAAwi1%&@?my&3PXAB{milHAY3RG@#PisPA&ywE#F(6~e -x#up1!O(W+(C{prW5mj|lEbu%=Yyvf7u2;9gU80137BeuV}pm;io*q%uhy9HiHBj|h?iT! -mV005(ad%Bolm1mfIfXR+V27vh0>#YV6v}jF|5*r`yo=AfEp-C{T_f(8zm9DQhULl|>GTO5NZIB6LHt -}4O38q26hZf)TwhfN!vvHXMIede?$5O4Z4T~wO4eKej(`)c7fyeiF0fEF9BfRyv0}$q~DtbNJ*uF5+a -&&-BpA-c$tJ26e#a7frc*zqQ%>OLN&BtFAC`tokcCR%m5p -EI>g6R>iB`K({2&=>nJzJNo -PUgAb>Z)7_IF4@im&UKoIiERdEp=4+Jwonf{lp2kUB+yNO>^o-)^2hW-U-Zyqgh+%g -GiDZ)R`ci`Bd{CHbB&;x@R18$&!|6uFh*I7iA8+Mgb!9QKZ@qY;PQZ8$?LcY>e|GcacuOPIxFQ!*HKh -RCq*p7|gPW%8B@_0SIQSoI)2V`dFbzey8d$U6gs�T5_$T7GC6d9)BCC?vG?K?-Eh$lq6^)U^+uC94 -m-vja+^ZYsnWuxAGRCA;AA7c?u6Ry_byLEhhE}psXWw1X0OnTwp`@ypx2H&l#Ul@f6WT~X%_&d-j_# -qwHryxo)!5ybj9~Zu}NZboNnGLSPd1iW)?&@g*=*#8p+`D?GEWSsqBu8yGSxyR*8ZoP%tIxeWTB|O2n -Tgw8E5qyi#v(k&MHo;$490u|&zVJ%=>y8>xZ^TbR8}9Zbk-DLth^y6DZ?p`fQnbYB#(!SsD2H2K>F3g&;cqy`%1W`JO4K$WsT?io0DAwm`{4OQZ+o#)Zuk -e0jJ*c_^RRw><&eNRieflwM5-82LLKn9aC)`oYf+;e26OU|ycKwC5d`?gvuCe19^5vyzxON_C7>vxaJ)yU9Q-<|f(tIv -=(FP(G+`($cUmi5H-CJ**Ac6$JL6w#k^94<=4E|DwXB|1f+Gd8W -7YkhSeSV)DsV>T|Z0&*4>q4Ad%@b-Q%9{u|2)B)}pPr*{o@k#O -1P<&U;95$O9KQH0000803{TdPDDZfmJ(TOIWJ9p>)zuePU@$QoyT@I>880VCDAfBGO0sSaopY -g?swh*;*FG?wCCRQ({5vl1O@|OFqjz(W;VCK{j;$dRdI2d&Xd97c4PC8f%rUM+!pEVs*1YLd(rOB&Te -!Z7iIKnSypi}PUg`MbNKyVGxd8gO@4%W2lIJE^~$J7%B1+5Oa~jA@ZwEUT&HE3=2;Y_WfWZ{MKZpPW< -{J;$+RCumqn69QGOXsuHs^rz>_MEqBy&a7D-X&8NkTLRh(vNHjCmYngE7aJgTk$UYTE3H*t|*jcF8@W -j;w`031#8$?`hMs<=uC296Un->t5oZ0B66b$ZfXG)>|;V3;9XC~>agMmK47l`kuR0X?gVbb=83SavdB -P7y0rB$}t!DYqzKWJs`uWtsE=2BP1OuJdVniGLI7@?trjr{z^Ynx@#ocv->25+6>I4C-O${+bt2nat- -5BgM|}C>YrGc^I&{1&(_a$sm^8%bTnG8fyTIx`Q|?m&+mp1Yq2#+!X#RbASdo{3DrE{FIuy%;)p`26| -0+WYZLTTkg?ZUqFF)oPSQJmrO=cmRHaV#tUbRF=L95cjZ+Ky-qPLE$4;`3*RfbhYy<3n -znI{f_j;OKQfdU5dj;MF15Jq2ih3KnIg0mi$Z4*4lGe*hR9JijKRvlPgWr7^g|mwq!n>pML+ -J0p+0i+m4=`SyokB}E>`)B{_5|ym95N`J5_{^P2>yP1j$d&+34<4h2gd;K9IKnfaqce*An?)Xa#<~lW -HgG>YowHDQKVS~PcvG(8ylTY=PZe*5fw+uyeZNuK_Ul^3M5`!$5j*;ldJS|QVy{A#>Qy$8I}@M2eA85 -=ReMp&nf==4|peUBK*L+ox%5moetE9m%tYasDMv3AN_T?vy(hRUfT6|X%DMSfrDWss`ei*;MX3o;^A< -6XLoz|aWwpH@6qnw&MP>7KD&L{FbSe)_}$`j~qloPa`kC+k>3Cx%ccVutW9&jIid+F&4 -)5)OU8q=2bTMQ_>U)uFY*fYV-Ug1XJew5@V8A!ijpWNDSyY12VNv7-m -xBV(V<-Xtp5z&TfE}qEl(*OOH2W06w7*NUX?{~8nE{^yDta>5iHbNafpMMW6+nc6OmM#=up3f!#4RG> ->_^>$N;p52>4z%zYUDRnqx2%`4j&F5^lLDAJpaUE?y2|HM+65TUdGfqSfX2> -mug5v;ILCn6nDAEJlWM2|+}Wje1?T)=S|$&Yda$TqPG>Ngvse3 -9Vfs3!yZO@jveR1$6B?=9Rx1!pR-@eRTl3w5}&(q3173#gN~$B299*PTuj`fL()WJ}y-VU@;{Dk(Oe9 -iKk``TXebhfwwLa5qqCo@BG?3U}T`kxvrX$w34f&-2Nra^vjq`RUmUsa}J+51huUT_lsdn3fx_PTr1S -?>Tx-$Rb}UqR7B`6FAZ=okX*2Nn?W&5{MtLNglm-EB^Xr2RaYj>e240|Y|QE)UA#Pcj{qJ&URfRIX;CDX(2+}Ev(pV2=vNoNyg8(vho% ->W)!A~6yBXlUabT7Y(1TO__~d6@dKiRGtgj18BAq5`HTO2oe|fFz?FQ?W!ej`*#`B-fboqzD@|rNCa* -<3>^qa!IJ4t{}YZM;^s}f1N)m|LcEj|ubo2EdRRbJd~ygYh&stZ5y3!_qTnY%5ZG^A^N7pet|yGm!vd -|C2n;|jnUqvO+)S3;HJ&T+@60wsuq=Xo|GDl)4GC5}5kH&vm*R#nbH+&t$t&N~)js!F*4u_O`X-v9JM -cjrrR#AqcBhT9;F45Q>r1^YZ~K35=M0Y7>F>R4Bwt*$iT -u--@cX5Hv5NcCm_Egtm<|Fazu3n60!ncE*B)l?QNXDee(u%fWsFfoUe0~YlQRkqXYd-*h_!IAE!uI2q -+}HQu~owhQZ=$we=(6CH+V^L$J8J()y9RkXozp(&=pk#zKi+70FU)iU6i>GSva{Y}E1EhQ@Ea?%*0op -gs?4w^DnCO{4=NYu);t$0CRT>_(;NQPA`kS$~X94kB5B8$=w5AQ#0-${p~MIXXOkLD+N_adm}~9r7ym -y-a^6Y3~}v`;I$0on<=3w=@2;M8-(J>B}1U;c&&5m%#2}!p67J)wICtb&jU4G2Xpm?MBl`}L=yg6#xa0lkb39)rG-UatisyrGY3h7*^zxYY#hrY(i&A0DifthTOT -zl&k~?-uODe*Gz+9-{&J(*J3mYN=U_oGCT=0=yuof?{6fi9=od?a_-Uq -7sjGOsRAeNjJi`psyuglF5>+AQ$JabcNkOg;#!szg@hS3PY!YGWr4@Z_f@7UT8cbyHrdIEx*ZNkG^>O -?(FE|P$6KIWP^-R^zi-RbKSI6lo3q+S|(_*G3vak5rJ6CoKt$@C8i?# -X3Xcdf04Ql7va=gTL=`m<*%_`tgzJ3U(oM4zZLjI?Vp9KlSfH@yNjF}i);~)sGVR}%6`D#WIa=hqy>IO6c@DS%o4Q=iBV{)HCgEvgnp^@O&$__yS+DCy3f -n%Kvht#o-gi2k=XnNOC+ri#`q8Eolcv61q4hkAdB>{IGENryfvU=88XTMf!B4tgGgPEVs%4Qy<%c~+= -VSCB>Wap>jVN}@UJn%alefo=JV=j-{5nXtA -t)2{~Nke}H|FqkHEpEiT2QhYw+v*BWC+LNZBpq^~*nm6qO^()uG97~yrdlmg*m9uufuAaCTM9JL13__ -~-wad-OEgzOA17Bumsnx1?yI)=sSnztU?=X%e01V+lBOgq(b-g|hi4_79eDDzrz?s{?r*rk8a6rgA$w -tTl)(m^PJbdng-UfhDL)hGMdqYlj0&M0{R?}a;<7H{Y?gGHkbt6wJ+~V_{IDNAb)G%g2kfWa@1 -qw+rf~_2$v9Kx21lLBNPsU<=St==Lxd8A2r2F*#{Vv1U9`<_M!+{pQ?DUW1D;Qp0BjE$R0s$*5wCG+cu8RN|BEzGN=H@B|(F~@+(DTwu1thJao0!a -lb9hB_TEb8#C9K&An$1NhFqQlgrXNb^xh_$LsqoOTd%n!*nDZogf6=26;C>253_qP^&=#VvK`@fav@u -OVS1w@b%E6LsgQPMmbq)p;$`C{a1Rr0eGmt}}SEyTqbQRqs1{%1Ls^Nw$ZJ7x!fU@okJ+WD|DkrlU@n -U>{^U`%FcKGP&GoVqx?!z8@|A_0|De~~~6IEpR_{rYm;qJ#C)6ZR68Lw_-9BxIZ)ag{;Ze2(?U)-Y53 -ldegEGDoSmX#7K_wk6*-2E1}>L7vnGTB0;b_BJNjMPtnqZj|trK*>fbne+_*BhKppnVoYdXg1W#ThoU(%SOcv_qbf$h8+Lhm-R+9Wr_T^zQ| -bvL>xzj-z1gRM`!BI)PD2)C;et(zd3q&s@^O*J$NP9v0X%7MIDf(`%(|zk>0QB-PrF?( -f=2jcTmc&Ta!l$;<@pL>gcwWNBad2h7v55@AT|y`U(g-@`}EE10l ->U)ZExFDGIsDe!#Udui*n-{S|?B;ov@wC@5hhCe=E#Ks5lVgakMi@KnN_lgE -hfCv|ueWjEL`86s#=#{cA?D%t>&I$OWt_;E_Xs**>8|NrLUat#YPU?UrbC{D@d?+)dX -@IglPd_D!RD-RVwgJC2d-kYFk(QeW{_uKH-I`#H?@j$ku#SKZ0tNXYLlt&UyVGE+jg*YYpc!SbK$+tB_a$gH?G?EnqvQPMIQg8 -+kv_X@Ppnagm)moE%L6TTQRqA$PLru!bp}NXZGeQ&QH7$YoJ*Az8s*7r$2|X02230n#vZ+i1VB7Nqe? -9a(-+)dMkBPFk4D`xnO}k?8($~n{+$@|AMt5*lBYhfBkrM@{B(5o;`HSB7h8viJyG7iJHxlpzxda4*i -pJ8&5TIGgb4KC3&GH36&Zrwvv! -k;{O(yIq!GSAC|M#5+UD%Q^dmQkMMO&&NrgY3E51lHAMpsEzB0k8-u5bQSVS6or=Pa|fj9(_Hhw`4`5 -v#yd1exO)S;{}@9#z}RPB$?u$ruG_J3|3Jl`OEt+fFI9qRn06(retTlia#erkkDH)@iP8B*&BF?mO_V -#ZkcqA8xXt)B#R(b&wfuA2w)6#T#ZQ{si7BauR%W~^ePtjMRuhd;q!yUR}(T|mOKvdyl9MnljYBql}ScPpE^V@qFgIH!64^?MT@Y}k-<(d%>GZtV#Aw_2|wCR|HFiomtQ -tygaiBsKU-VOcX(R)+mUv9hd*zQY>rmBVqdg^J{Fo;sG>Bta2`!ut3(&0=5F)J>DU+tGhbLy+Z$prTr -AN#!!Ohi7x^woPGN$X=5Ggw;c-HwA6vcD<4ac0sx{c)zYGyA>c3-w+tU7H=8f1jsg?|qZ|yZd1^-V<# -*2o#5WiK+`bnrmUUOJM1z|za -4Y^i$D_KyRuXr7LOkqd~+k3CUe<`jQz!sxp;@_FvL!ec5saWs -1F}=kIXcRfRm|NsPrH7=^DjJt#}Whlr`zlG?9m#H#CqBJb?4!CzwQnn{<<^V!T&nZ0|WE}^2guV{q^B -@-*qg5s^0JhAO@8)(c;IeY!pvqgVd|aVUlBNdFX?Ps@9i;Et@D-I; -qQ;mAOhG1mt~ccWi -#0pf?RhG*=PKtdm`$duG)ecJnQcN;C$s8r1GLg{!}1pwi!zF|k6n*z!IZ -r{AFFw)vJ&<3s{4`BW2`VK1I6H{8A7{(1+Gc8UcOZ_p9fa$85@Ud`Dlx8S^^&=la=tpCUr;oiwSS4n=6y#lL -%+9k2ULvQFDz2!9H{BhrP5^V8KvFr9N@y(t_$4k$1S -+QoOHo*sB)nx*%Bfiqle8D`|?8sO}W7s)JAk%gX_NO)YPvhh{X9=dClutGpY&BF&IcVmWru$S#HHpY& -is}e*&}y1tj3dE`c3yUczcfIY5ZLwg@bqP~#3>ESgzxi0HrUDx06;r-a8}(&*lRQUeZ*(ctRJEElwK~JoIf;IVe0|Ftq*e -2IH%Gak#nNaFwUJtw@n>3DFHajRm!5E;PMQtzY8qE@C%{#vq88!&nlC3oVla@NvL1^1XHd$j3yIRHu? --Q_S5cHu6LJlGDlYD`c%dE1$Wk`ws#u)yRZ+fgxE5tv1obuaq-5Jal&Van_Rh1{G=_9HK?!f);HR|GK}`TYa>t&eQhnA*fH^nhvmn)2d^& -tabXXck~df;8tv{7xReEw~wpx1B}Q}vE|b?qq;Uwdl!#DK7FQ)Zt4HMm$ -3h1?yuZ5N@FZsAj6lj4Iz3=q@vI7O?cu9-eyugD|nITQ>b`;$lXT8=WPhN4`)>$Lsj^ -iI6iRQ(YKmyTw3-!?ydH_hnputXtRc#xC+TZYvA^Lsu4tHl!*w$!m -K8$dF&>#a-Eo5yyqfxij%oX~2qrzsMh0s9lHTILoF+dD5Q+l54f&mjHO=LT-4;b1TiBZ~D#(HlE1C49 -ZL~Ri*K9v}!lwF%iurRiS<|+amdGb*fbfi4M`+>E2U3P>RLqVh^ogJI(8n-9aG1#^~r&IKd(_v`vav! -Z7c9z4-rBGxkJD95IUSeO#*7M8D5`D>V0rYuqz_@>|R=*CrXHaPKqc8SL*>HSMA7w%!=4{f2#wDz!*R -Mfa$BT-@m_C{&UDE;WI$p3Pm&Xw1;rFD-WixcnXQAu}tt(%A4Qa-ac?<*B%`UlsV0+$PYE0 -1XyHS|8zawMT;$?ycb|S6u{H)ATb0GRm&A_`PQ&~I)IcUJG3dr$;c2#wme)+E^P`6gyo$qvXf;&I+9p -N?_h{cIe4!*NcG;88W%|f&N&p2fDUT0$}Lrn#}#VQUE6-M>(~)vwpi5qd2@rUCOyS{G$-12216AL2xD -CJI?cLFV~s#O0mPK@Sm>f^Ke~qIHtQmGA1{f+E`WdXgzwB&g5%*KYkDuzE#Nwn~U9DHT@v|H!9nYz~{_x|gPBBeBLU+a?# -W;jyao_!zM(p%e9R*9xaUvN)t7Gq4|O~v$9+dv};8XsvucK8vk)w|Rq3cXVW3MlFb-l9#bG8ER-Dj<3 -|Xt?%seU{J8($+f}XcJS%6TlMOtT$qOHICR7zYp!j<}PXJEG>l%@9ws3e%;M>&8;Y|qU*e@f=3!eJI= -wCIkOV11y6E01^`>3=X2iRmRXg~@w`er%#o3@`!!qoCm+lSp*1fg{XV -ee#R*O)~x6O>ug6eAaVc=#3)AMa*Pa1jmszbJ5B@r2vIl*8MsTrF#U?$mT+SW$hbB^_iP^7>mBdGahGBfO7tkiSHKo>LDX-UDE!qjLoLE=#dGUO8B-RqlsHYQIGvZ6XKsmOsW7+o^=Jm)GY+$fQCd{cJ`^+b@T! ->fj0Q)n3@P`sq++PuUf-x|zbm_ZgU@&&N~pX5=&JIvq=WZpBBB2pZ?um_^TU~X)+(EsV!p>Xa@7 -rVLBUBC{hh@<7LItr`P@N$5Apq0l^L6}>yuecUJgo&kH1qdK=Qk!g|K2=2N)Gj#-m89t8UQw~2*rClYl@-{*8EMTfyveyOF@h{^5R{kAs-wd -w?ih7seX1akb`80)uTmIUW=0BU -Of3QOpNNnNfh3DYHd(bkh7xf~-<_Qp|ogmHM2%qb^K82Q~Wuc7l)E403w1sX}Q~V1DD8Z4E9!FR(ZsE -EOodR<~W%W?us{`5C-ac(x&>vx}LCSrz*_1DT7Uv0yAPs=AA;dfvAhv6wIhdG_TW>_ -#BcgKu^z++)W);_aPVu -Q``-W852%Jr<$0ga=k@T;0&BWjme{d4;@OfiAy9h5^`FEfTlq%s~N*bj2&R)(OfkGdW%BQJkROwwqxX -}Tk%@JfEJ-e$r&{}AN%$qRkvs;aVY2>b5JPol?^^@IUC80ShH@@e~8fB=`?8bn4!<$nXaUjS^lMT -+9Q=OZ2#gW^c=h!@M8X5h@nKehx1Qc8b -di*m+WamhSs>_Hl8J<`UVND()K|$Ev@kGhs2$H+`*EWe&_Wa-v6ANA$oE`gglwjg{CwB#BUuT%;zV~l+RBM1L5^g6refF -UqwKiZGO=3&AO%IQ;gCb>(i=JJlsw2bsNk(dA|XWjqm%!|NS|a?lDmsNf%1>c~k@Lg(d+gJ -b{j}Qs4%+-5X;%pVMa2z`L!CQRe2_IP&IIWMiM2VQBVrqV_AJdOwl`&+AFZfjB5@ZmzZ@Rv5X=9 -7ug}$4<)qYa*}EVdNPL&7`<6*)5Vdta$T<_o=G>M#q~#)^KbVllj2j$R_+P7K_eEP=3)^{ScYp3#UV* -7hRM-%`X4^+C6U^kEjs$(ns_B7+%L&(&sMSzd$Mi4IXirL^qvyI>5_a3Cgl+}fBmpMqzrnXT|4d&3bK -^jgMu~L7`C|&$ac9<&v0~TuP@743c$6N81AlBLv5C=RmS@40!nTgDb8@e_cUY%EN6vs`r-hzXTy|2 -*PfBO2PE0|O}W0cwWZnA!`+oF*|lePtZk3BaT2=zq}E5Kt(9y%#Ymw>^zq|1Q`JXTO}8Sh-J6zZY}Z% -)`?!Znf)-qB#x($aNatqD`>?I6?|r0%e|Cd(Z*}|OlSh_>ID1` -rwRph}Xi*BM2r*CN_9SvyFwVey><=dZbexONfT8C}y&&?cbNh49cCyLDr3W69&`8mj;KZ^w+FZGD}=U -k88vuVd)-F>o)}+Mw+J_Bk`ZBOd)xJUD67zl#}dQv^y+-hROSbgl0J(eExsMgaS(ufSMxBrhWF$ZA>% -$eper>{3kwwGh7_47Yc8cAnOw0hD0N$02$lJrvb2SOBH+9R)GtQ*wI)YqZarE8vtC6!;=>Ray8b35B^ -sgDe6%67H3Bv$d9FM3L4A=(86y2`CDwlq_?6Yk;Gmon>@2El7S&s(ntZLaCxbG%xZA4so}~d3Zp*4ja -hEDam8*T^Ow741%pI57H_Dj_&A`L8A#(*L<6_h(Ewwq7nB3snc8A-?>OI=V|HNof(Sjr2b~fk@)J-Rs -I0{e4NbEEHje0@u1iS0M#b?oOgDI{#5;%84BoE4!Bf-j>$KBoIN+bP=C44Vje3Jvc<5zS)|a(H)kB8LTE%@JqXltMT{WaUNK+r8<&;HYP(*bMDr6sh+ECTl{DZleRK)%ZzRzxFfBvO=Kq&;o -hAo;2jVa$0&YWQFuAMhwX;QJEh#`KP|?VutU7gJ7c&b#EB_zNcu>xd};Er4`-FwHIdppiq12r)~TfH< -W(B7J?0XXb`IX}x{A#^7r=Y8kQSy*hY|scmG2E%AYj{x@#b0V~wno3-vt^L~w2p3t9wHfQ*?58dOsUDMhctc%dF~R(gMV{wFxH;V -8>7LXEGzLP-Rt0derdI)4k#2Cm$^oq!jy?G-WEc(Fi0B?2O~7*6mFs`1UYRg5e*I&hkpIu2{v}*#pJ> -W1F6dmBe3F_h$#IJ^g4GVh`224D@;U#3?hg%M73F4R;?oWyC2}7utQaH+<*-(?xXeIaFtVo1!eYjq1>wBS~~T1pFG~%{eE@5nOpDs@Ae+VglUjYp4-g0+EG(16!_j~l4O;F_l(bp7o+@-`BKpcX^eq6i!enNh0yZz`u`3a-ot*E=rL(7l -SEy9l6xzZi2uB%GQPAhWi>fK>E>z`!UC{QS+q*}22g -_}1XVr%xP96gk{SUR+@(I`pH!(NtreEA6eUs10uxQXrmaxckwUl<}# -Obsys`s^UtUeOqba-&MIC}DlC9nl&MLJLQ820Z(SwE*h2JrD^MR;&}y?=o*424d!C@h$u|1n;bMKlqi -I;SMKq=$A)hy5A(bECaS;5g-nar9MgnUWoa7P;3s3T+J!W`FWKs!1?P#6&QNcUHmP9hBI`KWcXst%~d -2b&miI0RmRlVlY`bl8Z&}-9el`gRMqU~BF3Jm6e8IjzTQo|*#`z_gh@AzSO#F#I0jQ>tfAVs3GWV5PK -yZ*y$;tD2ppJ$4w3G@33D7nc)AYo^M?TDiGmI_$89828RJc_3vhyj% -Y5ip?pI=(?Uhz`7m(QD8R1P*4kVb7?_?5Vu1(|7O5li?u33S1(-&I3h*$*|yP;h+w1>g@>G8qY(fLT;tn3BaHv=ts4$)r4@iLuPm^Hv+G4;%=_bpTZhG!Z!At@|O -q2QEMpR)W$9?_CF5ki8+jp*0Oj;ElE%I$I|Dg@WKal>-2yl7BJGO;HHa+WeLdC+J -FoLc~6mSh***mlXZML-D8k0pw|Ow6NN7f7e6409O -kr4g5L%RBUT-j8#p?YbbZjqo5!jk}z1l|t&G{CLuUQWW%3Tk#b*#m64P{y;V=-S+aQi~JA2lAty~BiN -oXm0pEDNR=I0dQTo+^#(Pf5duUfilEY0pJl!P1qd$vj-ZK=C=_6+nmx(LM2XSuLL})X0UrAJ&#&3X2fbgj4juG -a2TKe<^3wScBh7mRof;;chf>u61-j@CdzADdblMIArQ|iDQcd52vpI;QcPEbrO;Hqt8pQjU?K9}+JO-m1YL--;gs&_Y}Q8!;)VgNe?M&Z6PYlSfY?nARO0Xo?fa@N -eiKou1ZM7__=?d2^6&rZH01Xq&b6b>HkE*L1z_$zLr?(x}BVV2i)FpM(QwptVVkt1%;RDYtiEH22J5x -;KsPmHYQfjG%Zgl3>q$$Frq3(3jO%x3RX0O|?>Wpi5~NR@Qt;$djne5ZEs#t;oOwGv_Q0iKIBt-V3R(4^@LKV{{wx1&{u -?s5m}zavnkGsc#1jDR8f@aB47d2x#avt=;NfqV=f#v%x^3fy7JQinT!J{`4S_Ykrj;&8h_Z2hJ)RQNS -tEEQEVAk8Ez6~eYw>ErkHV3vtnW6ihp;PxTq@Fc3{Keix9-r96+A8n5@a(z$y3+(JC;0Y@rw!4p+^`Y -OM@MlXh0L#8MEno5X>3NjXMi*n-8>jlqnzN_$4EF}LxlNseVA=JsSyp_SUzoIpDQ^539L-K4qVC)Hk> -$bvDb0xHO(mq&-kFV6jCqNun5EqZO9MSD7J5W!VQw!5FTGk3e -o`9prX=mJq~}z|I2fVdYafg_O+Jt|#YjNk!{N$T9(}Z!P^}d!mvO`Ew#BZBB9ObZxNbkpHcVRz -BkOql&Wwn_;#Rz26>C+S)%qK=;iH=zt|D7M-vreSF_jD}x_j{?w&kt(zvN;LJ#bcYv -Cy1%CjF&CDWy|8(9hfTBl?Grm}IDJ$Yf56^-;cF#d9KP_u-90}J=yrIw)9>^?t{MV<@?mdp_hVn$`!K -{`Z9_3^A@ns45!M-#VH2^7A&6sF21d%g+qkaHo#FQD8<8@KIl$3fjt)3t$U0rAht6C^T;E+jcQS2%6SX;8E|Z!?WUH<;()Opu-HBP`ntjioJJMTTC5qL;}FDU_l|6{V5QxDGJHh8{;5YKF}bC|ALjTkS{~41fIwFk9mv--u|Q -O-g4#M}7PH+2L7Z1^hIgn&C&Ojvg$n-E{*auW?`RFwAVok6Po5G0k@vj(yF_^yqX;+Ed_I3*Cf4)~Q0 -%X#%ZYPqk+Fp0bZt4>Wp=LXQHg`USzosFzT7uEHIuCLYQbUaF89yc$zxfdnvOOlLBNPi -B1U8AGM@YM%e{fI8MIJ}M0`Yspf1BKUls0f&xY+~?p)6i=*uF -Rz`7^X$_)6^~DTb}CM;)bb#9AbQtb;iAdn+CWymm+WoMiL;u0kd^q!3imCmB{Qeuync=%&Q@|VwM^qSL*(a9< -@vz@4$<v#CIQN;Om56MpqSC^dOUoUOgrN2+qezYz$$T$?2} -QIkAMKqfDuV&SzaU~48u{nm>7tZpVCDc@%=z_V3EMMvgpm@qh>@@)V9*__7yCMh0c@D30@l>x)lM79p -twt_A#^N<4F{EV?>5$XAKmtF`C*8Fz8|qSDMlvVNQD#ck@SVh2gIO3Qxfnm~UmO{I1FAom?t-qrp>Z> -7NQ>9NF=t1r$5fQwactr#hGph{IIaNm12s)rXNP4z+>Vp?Zsg?9=Tr9=WKf2=yslJ?=^o^SXFw9#`<) -Dc(A9Dn-c?K$390>Tq%oV2IYgc{fuNo!RL(s&xZ)LvmfLJdBkeV`*a3)Q>K)K(+Xh71 -UJeQc?^uwY6>75ia)~-A;7m+;Dfx>-gO##C#{YbY3G^#-AMH0w2dJ38!5=wVTc@B#NDYIvCwCFb+f~` -UH8}@$-88o}fL|erc44;W3J+@vT(v(k@Ht^HaERFp>qX2Z@touz%j_(Frx4zQ*Bl46!DFtPx$ffsDcW-0;9)s -$+OdOT+-y8G5)b%jO5KfI~dcyQ;hMjEvByz==%+RzZrM_{Q*n*Vf$n_JpI{db{`??nE!b>Ky_(Av{81 -QK#A(3V+CYDI#^QW^&@{&p;m8lybc5U;rAn5U~HGD6GV^aRW`~O5|^lN)N>3r^gQ`e)m7~{GX4Rm4!z -2mXK8G%;*!)qm4jN6WCX@WT#uEh$Mt+C=NS(eh3N|bvqnRKwCJRvk5#p_Zp>?*;Ly?YIJs0ouh^N2RYWIwiTbp~ZZf*$CK -6@336n^x(YNNnCPTKoYseVU2*6xG>U2e*v>J--5H-yRenp4z6TWm|v~M&{`e-u-EFz*GKTC)h#>(=*$ -B#umC~A6=rtVD5DC*R#AyBPO5!A;zmbsd@#z5dML@{WG2hbXGl>ZYuf3{b)_C)Yu!A}(0O`u7Zw^mJuMaPNl56y;`*_I$TA-ClPV*)AGOt4xs3B5btuX1TA! -r``Ue(UT?%C916K!-e2WVDLpxGjsp&mpzB2f8>@$}_$oX&Az1m2i7E)w;03<2pKE_S0=R3R9%gXU95t -zBVffhB}zh5KiR&ri=@a6shy_dngl#jFfjH7qNJp}_aG`i@h!kaz(qbb+~6Vp9K#d{Lx0={7-HObT(f -mMR)YP(LpA?r%{yEfWH}qM`3H5DW?@2C>*s_O|p74+^l6IZ)PT^lLWlHx7i^?^{g}2#?wC>7oUJ@$b7 -^ZPmw6eYdf`mR}x%J`Q<859ShCW0_{WA+?q&hW(ccr?IsU^rtGJA<+gkefBTWsJX5f8CBWLs+{TAr -Kui&53O4`pR3Q6)TWpBIiq2z*!LsCwra}sk+1`JHTaJgUe?0GDTS&FKE!tdtWwB+};ePhJC;{<{Gp`a -4dm+SEpoZ9CN2iV-K{Dg6tKYc;q+2l#TxZr^`V#(BfkH$LMv<(_vI83aTe2?x$zkL -i&tAj=B}23`_c1ysnU~Pix7R6j?$=F(!T0>Sp3v^j;x+K5_^Z3Enf@bq;W(BNZiW_vfs<)e16;UeB$@ -WIoaFq2tj<>uW5yiz{(|Y&-Xu5bz}nRD-c_!uZbq0SoDDI7ENW5*y_$5rW6bCB;9UpqB_QDyJ -G*{7qhKF98ho`9H7%!q-=L=3L^!d>VXR$`mvS!+QlKaF90aCVYagCoVws&gB2=YbXC-{{xdROUgdn2x -*+F&o}C$4O_Efw!a^Z&gq*sf(k=pEJbRy`yS*+6~}|~fO4x%yeOng*0=^0L_G#JPOS$ER7YaxIaJZC- -W!3HVY-a-jn(w#&(RVj#&QB$V~WZdpE0zk7OFubCq|QE(V|3HqKBzZ@ZI&`so?+j=WzA7uQlGm@tgg= -?(nG*;xp#&TgTIt#qK<$@HtT0gW5UeM)}u{``w2~?ezlHZ|t!393Ko`!9OoeyR(uej;NN%69?) -TilvDVmj13lBMb;H=lX<5Ywp%=Zm#u!DAL@sx|-D&gVZpRC!Xk9l%dJSVTBR}b4>=}4A{|Wz*H(yx6w -nCz1I@A+U#n!$QG{evsF*-q8Z_ZfZ#kw)Blma*m%0Ezy9H}l&XbefZFtDunbT6`d`g62J0{l7)g)NYs -Ro19{?EZuz_{-keV&n&Ru -W6=KXHmC{Rra#lj1J~=t+yz{Ia<>VgDl?3WU|%z1Rhn^gp88$9{nN1L7xD-f=pd}_B)iuKe{yPL;gNp -*MNz{24uZ=xJGE1Qk8%InE{2xvTvU;C_Alk*xfVIu+wZhuEZEwcCG@;O65Uxlo2OMwwa`=n;fP#OG~o -KaQ-=QV=XL>&&JK#zf=2Q8qJx@&p56LNzeY3=w^94a7K0V_Bgt4=AXMC?e+raMfGWwQ`S+GFENv7ggdr(bhJW#Zn%C;7@#6Wtl)*vamPgSk}i_iZV>(G=j4`8e)0SV8Qhd0#R@v6Pbf-CZ -DsbyB+v8zWJ(R{NZOR1cz)-OqBp -^7l7p=c@l~86&~s9*4A{@j{b|4Oa1P@zV0=vJ5a9BmTT{1F_vDI6Sd(v~j#^=oHk%oyuKFY@QNvrc{? -IT90bNo|=|;$0JHZ)9r=Ho)78w@cAabxk;iMOhM@3kt1Ds#4B8%;|UAO>qq9WNX6R4xyxtdc{#Ym@(zGiccX?l5U<#iDRw@SmAQ@I`80tCDwlU95%Z|&aGDLMG?-41aC|4qhcD=HVsB)v@e5|DCYuoMx8 -q4AOC9hV>O>{dXXcj)kK$mxQY1pAN#q*l60?NyE!ah)8k>&W~e$6o{fvt>Hhq2Z{kjJs?WO+AL1@dQQ -ksm@_Si67`MdTK#HTeC`|Xl&dirw5J -8M)0LMsv#d+Yw}H%17iyQuq90keasA@+a2A%6{HD*6S3_7EqpW$sU8r@U2-7*-3;Vg*QEG|Rh}WAGG% -CQ_3_+j#+Mcpc&!6&2#0lx~7tNdaHE5WZz$QVMBj>*zxF!WGKfg#%sMvvxm -Fl!xqnP;@dLX@ykjVB(a+J8XLm)KkNhs6hD5)Y93`!wn=6$j?O}4=HzJ$*Tp-!EtRe7#C~mpnYfL(sft&2<~{sgP0L;Gi#C_5+ly8}rVIxSdFGijCM0caei?FquDivx(7?w<~3~9R648=8SfmM_{@sM9q>^}Euj|TGb?5WKC`d -J$D8}m9ezJvju<*7&x3Xm6#LD=!xpI@GfPy1QjFhAp=Vh{wW+6 -9#7N#~sZ&p0_&M(!?e$MrMi_J~*WyNM60Yf)N$Y3z{bS#!@JA{M-<4S-{xhsJ> -S|!i=L&)Evv%EfVX -4~to#t7G1b0k=gC}wVTTpBHS)P|`6$Mfi!l{r#JfPl>|40pH(oqN;%y=kXG+HyZem(?ohd!*fKLp?0q -*qD*c%;dgnOv!Zn-p(%n6X8F5`k&^$-J=lpgLysyjU2vpEymvau=nJn(ej4hthN6=h*1Bs=Z2DK@_o` -yr`H6mjZ!Ue7%ZlJUblbj^u4WRT}r}`GVS0+PF}wau4e=*0=d;NBe@o&B0*a*2-*A0KFCvjYS@>mqzI -Uo4yIGje&n2@sK?hFIwj6-b#_SC#MIT}JnQcE=@1&}XixQhD$c3Cc?Cc2iKk>cL}e-l{`5%eNT@(9GF7Te -}yp?k*-5!Uc^ojUsM;vAT9Xq}RqJPS)W9ekGZ*dl6^Ti3>9~qnXmz<2cr?O`+%P{0EX??qC^o^pV?4mQ!iHq7R_YJL7APgS=sLF%#| -3w_g@R+(4hr^OI0f$$$|NP_Vmydf~fAblTP3sY?;XiCI!7Wr>d)t7gi*hD6BBDGld4GzD}E<-99Q_5Q -{iyTd~2p>6FQ?ZtuvuC-)YA_l*H_B-iy-TwxUQ<=}eo(_}+*#~UR?GUj3E8XMC@@>am}5nu@Drs)k#h -bnNlB$8F6{H2ckr5v;Dv9#^=(fresm0JHvQz7l+uVU(zgSdsGm;o|5dlfn{J95yyZwTdvBGRnQ+#*zK -TthdQ7zaY!5pug=#-O6H}X}*7nk|RlSA?)!*W!Q+p=aPC71xP`uH=Xg9?k)kT{^IOye12~a0hJfG`O) -z#I0X8?+o)D5tJL#|}SKXIi}9UM@Cm)zvVC+DPEYc~@2ri${L3}b)OX?Qx340WkoJzQWYGI9_toz&=4 -Q#H8+hKQ%HCCK^M8SBU!ieA#0PgS>W$^E$+5%`Kh*tmBb_KbYM;yGU^7r)q;Gs!4F3KP~>cu1HXp>Xi -#s?e@5A&H<4c4HrKI>sp}=GmuOH&Ohc?9bz3;>eczsEjX@hWKJe>6LLrTDe+7VP(?a$-mpNBTsKeFLF -8Tt43&4Elp(l=*NQIKd5L;b4hWvEXV@{wt&oEc0w4nfWqk@HTZo_9%c=s#Rtz4bOr;Kk4lg^FroP$U@ -1&~wLg!q$J029_o8@Ui*si2f`Qw)G0zjceqCTGy|(mvs_(32VQd`QG0NEV0WWYU3>O2EZ+Li2%hVcI$ -k@g33XrYGS>T6)fJ5P>X)s$=cyeX1`G&$OlnqaJTPzu+q8XvAevF0<_jJ8`71UOv5wby-VRLWdb8unb -yucM3@0jH28|F11S57Z$GVz*sT7oN!SLE}woQum&bfjFM%p<(CRA^&-juP*+E(=O;XTpOQiyRpKc%Eo -hT-(iR^A5!=adfhflNIj+x8Yqtu;(pf5Rv<};ds^Mdl18Yd(5`qAIKs~Csb=d{Q(G*C6Miy*5Ah>kv+2(t(@V-55QXfzVkL)64c2 -6)YuZjbyC%t@>c-5PA)z_aI%TsxCpm%*+(YIkL-hGr~_>5lx9{A`K+DZb?JF^k`=U}>mGtJ-9_E|M7q -YQk!LJ0U1O+UBbZte;a%B$h=3koY(uuB(}_Y6v>Wl4*v2l87&YIm*`tcxUOy6tnZ*2F;tz^V!6)%f9FG45EPItL&h#c1D4x;j!{6Ci<1I#c@FN -jKULHAVD3ELztCBz#Z2GGe53ey2-h8h}2T|l!(JFw;^+ookb#x=H$q^o0_+0a5Ei+oK@vZqp6xkkbXi -!~}1A_h})thr5Ig9kN$Evr5f1WJv}LF{({JPj&v+4Nw9nfXi!Lo1MNYsxZFWjR}^;~&t;Ax`#W-uW3%NRyIN_p*dMUsD(-@Y%V=?RTc(qE?(Qp -`@L_7S7Zz>JRKS7j7WkN>)>y7)>{&fV_k1b>ti4Jz)*IBhqq;a?GWt!|?H)U!?6|cfd5KbOjIkQ6lPK -v3+e=liLJ6oE%Zi^o6ehV7+6f+x(dEMh8W}<=H@$*4r6C!^PwaEIZp^yeR99&T8m|j@@wEge)1pJ{3B -`T{gs~vqn?shfK7&!oDGURhP0Zw+_9;Oe3~U;9uJ!n|Ey;o4x&340xI!_Zc*;bpXS)g2wp^^e&9dDUx -@(_ig=TNf^D7yTy6zoFD(5&@;GH!ID?rERY39@ox{sr#PDnRJTsKcxxsz&Cx -t%sX*j6`uENf!aTB0go=>e5?y*HL~h@uU}$iIR-M76pIT}{c9I%{8~fKOblCaCr0gGPTQZk+HGhbDO6 -ZMrveq(x_G>8sZ3j~%8sTW@K37a=}jZTG?hF&ibZtg#ET9%~vFF&@IDoCRt}u<2*GcAbQLh2m=XA0*kCAQM8H_BSc1SAn-!Yo*NQHV%dJiytMyOmh2>6i`Rr7!~Ec^yUK&t -z%eSLN8<+J0TTjt6u{`{x28WEcLjAa(hDJhnXPv}a;s3p(Vdja;8lR$a5Iqxb@>>eME_%kgRP{f7;QU -*IEna;sot)9-)Yw-{2Q6vf2;!*Ip76Jo?s`M~@XLahji(7^T&U6_fwt)12_cECdL;(~Esol-_ZW8F$b -l2GnExS?xMTM9zO6%#V{q>t9(I!LEd6LvJoo^rld>jopboA8V!AE|629{=(cA0tAX-U9#(_*e#<77&G -f^3ncFB$WZ&db^2_|Y(PSU+^SAFxi`>0GTw-Z|?t--gH3K*_D%!fTq{4gQ>|X{72^7Yjpde3_|)9ui% -ExehG(bgFGL=1#^6u%dbOVX&|s%2LXRU`%^L}(gn6=ULIxVlSSmGzNnCg)66LIfH+P7DairKd2>LF3wa -!~yGg=Egw7GbjG9v_D0o`&z*k(Nv$?oS^^Gom$)A{&tIFp9q4=Qj+aD>ZKsI_^*wcFG)YWMNdb9ZZj^ -eLd3{WxB2TH8zlS$JZX7&Yxt7!^xv;daa?wu!Ih+7YHwQ;oN*fTb$YHi#q+UIMN$oa8)uRIWv>vIktm -%5&U#q*mYd2V%yLnW}P~lV56z!x;6so(pCWvR3L$&oasBkdbh>BXAQ8b(Xv-(E;n=6b}c2Z9sQ= -g_(iGkrd#Ox8R86dy9)edLabb=EbZC{9O@D7vpM|S-j?*aVx5}5qz_SXT+xh?~imlb(+S7q&NI`wSGU -m1%0@yDP19H&(UjOr?xV}d>Mx3xDe$|Z&O->nq3XaVC}@M!KG=T(JH -ZRr27uoR9XYxL#X8oM$rOE#=hn9K^ZCxU#k02R4v@`^aj%4H#*K;aa^JQsC+`*w#FAJg1Oj?s!_I;xZ -jc9(CWV94Wu)U*y=)y>Pd4||Hr@B-5pO=NDydzlX#niGx?OVxLn?VBrgEJnHBFcl9u*O#HWwHp6XQ^W -i^a6=)i;MmZN%3drDF0yad2=D@t2n=sNqIe268xp`sSSa%4>`G!-S7~7lqRhmM}9Aa3;B>k%C=k4EqfNnnDdd6FK;qtemFDXc1N&=S79p -*-u-8Gqg6}@MSw#`dn2mjpO-dtq#P>_=qPMI?ZCf{W=4jFT-Oo2Lr#Y0HFj#X8fnDY1$&%K;w2sCYjeAEXBq(g11}%O^-+KwFwzbW+1T^7`ebeU__0 -&28{4vF&ZkY8V3@lyc_LaQt~IXJAJSD_>#x-MsS58mM|V<acxP -l84{Fu;Bd)5LNFYc4dvcHA_l%k_0tf$=4+1VlgLOmv?yDNP@9%1)ATJo#jR)?xP=!-2Rt3_=U@AdB<~ -iHh|<9iTOuuKAJ)1_d>Nr533JCB^%3XtI&RJG%Id!Kk+L%Wb{jCF2HOT;Sx>-eKCGmqdLtvXX9ZZ0Mg -vbxiRxx~ksE{@~tE?==%$#PnE;t*zx@#h)BsyPjS(D0UA#tANoBf -)kRUJWd1yeYy*YQe*&_K*6BDKNRMjvS8T5cfLq6Z6Dq77MOLebR2ssnBTM%BG64nu0r9sX{TRkQq -NyTo5SJG&ZFJ$(aQwm8x-Vdmll)dHQ$LSocZmQoGwl(`CVTLq!lVL!xua8@hDBP2Y*=zmTWV>!Wz}tpd~u}u+`@v^G{;fHN(HM4I(Vvd -gl}3;7{kaJ>%@va5wZgi>F#SfXBYhF%`MPt7VQqcY-|KA1;B@rFXDlsTq(6;ae -TrEZbt&GEJ9x=S5p3#ju(PZUM4lOxqD;Kq1?j-n$MtBUtcb8d3{tnZ`&{s-uWvI%#sv}+zeTSra+4}&CmiJ40tF4nUYQt5sDP}u!eIkOgYOa6tCvs9)i+2;H)1VYSqm?XW*>U*M^`KsQ!o6~ -<;Hf4-Vf^Iy3AooXCpCMkPaGjveU%s4O9rV8Ajr$6v8BZ&u}Z9j~0?jYl3b-&ia#74T!iNMuh`v?_ff -u?i*}nWJGI?1&g)WAer~%g^{8XwnMeMmV&`FXmvF7=FLb{6;#$tBy3&YTdSXj6IV^Z8WJ#)H -P-liV~6YK-MhY<2LHMRG-!;Wu{m=Ee3RC`5hE(&~>r?lhhyQF3j}n|Ni=HMHgKsRIP+_*Ra^1pXu|0D -MqORbt+b|L%*c;=Xw1PZW8M447N(k3ly~yafh+86iQLhC-}ur{^CR ->YsZg+$GCB6hG)l#qlaHOi0Gpje`V}u9<`n(b-t;>rzwk9Md1cjM&=NDGtt|JF&}qxja)j&ZVLE9SJ} -!c#J>ojD;e7WIt&%Hlj7`mQY8M6zt0~y`wLJ@0|XQR000O8B@~!WbsBC3B@_SvK|ufjApigXaA|NaUv -_0~WN&gWXmo9CHEd~OFJEbBVRU79ZEP-ZdF@+mbL6&>{;pra%*N#zucRf1uh3;L;cHc@Y$xZJiYt<=1 -4(c-o6(HIp>}m=`@bLXGy%+;v}-$;e2J>I2WT`J-47Z-li+s!`p&tz=^loMUfkR`i@W=EKRCSJtd|di -xS{%~(=OgEHjDM@)OlDfnsqB~mWx63e7QL}8T<4?m)`S!wOGB8O`TGI-mF)ffv<**R$uUef4<&q{z8H -$CpF)Q{Fe95YiBZr2oZJPchzzGlz^N36^i(6K(lVZlUY_q6jvo-GG#n -b;3lgoz3sP`mE0d6(+&7%O0H<;dry|W&X!KOjGxuUGGY_F>o+gHqW#HtnP?r288oT=m-0_ptH05J2KP -l0a8o&J12PZG}=zf8*d_oMRR2OnxD91wSYCYu~y((Yp30&Y4xVauHa4~ui7@UKUWI`(wl1$hy&^x= -W<(S=QDAySF>x|8-BFej#{^PDVI0|MifHtx@JCalBGkfVh^Eq*%3N@m&qiV97o#2)0t6PBkYEW3C%NT -R;4l-kj3I1TYJ#7ou$g799wM7-;VhyigEK2~aEiioFKCF;nn7T)%5YNhB6U;CL9f(vwVu?2Vd>n&Mmm -RKsc(!={W)=b%OTCa*%MMfA&#**4H-BTt0cmL} -qQyXoyVDX_^&dL9I&Y$q2E`uEC5D%RHkwBg8U`SVo9tzCkr3#4?Lm=10WQqi4Q$FbgrcS!gCV3u#arV -;SL-C8_0Ld1f}oGDd?kvoU6j5l8QA8Ox3E*xl?c8SQLYY9=L16XMuGQ|gtOJt50t;+T2Q3Bw#1o)8DU -a*JW^!PMMhm=lJ%MJ%Tn%Yhi_i4ftrg(W9ga=Y|$f+e@GuN?)HBB}G)}oAaU!(7g=IT$BlQPv*LN5}2l#niA -6_52+IrbR3op2W!d9zFJcJlr~7pl!i$4E?TDHs3(n$OiD7D?Nt!R_>~#IXq}dr3+Ty=J+z0H_8_as@?gHUO|N@R>)$#jr-B~4suvJ2S@oXRs(S$PR@^j7IrbCLj4%MNV%t5T?pa_sIH2WEt`%mbwkHS9Rc?iI5;nP(S5ZJ#g>N||Q)I@kl4MHTt0K*n)m% -}pYBXc+&BvTpmed-QKbdJ7H?%qB*z!jwT|PY*_%72szwf5Rsr1h8)4K4zxwa?GF*`*pw*vKmak6N|`c -2R8Zx;sj*3hHQX^c6e{>}QXUZ`gm_0+-}`6#sY=;G4@hHp1JpLS2*?w&z{11#9eI -2q-jsoA?jI^;roT!r*t5N3r=VY5m%<0w5M@>hdzh>DO6Ke1ocTC`SfG6+7WAMgZT)Fr9u?9cCXUSlX;M)Rqm&(va0li)*3&WwzME -;EDn|K_=sx_yYf+ZX0eqOk`;5p+fsIe&;^G6ws(OAeMeUu{g#?1J1mil_@k~31!nO+)BmD8DCl08c?j -AyJAn4G^|FILk_{nqf***eazXD25woWCrF+x5fX47cKB#qY#kPg18|YswHfmF$TmXNufNa(K9(o;Zhp -8Y4NP8lqbCo8gIZq*`THuU~TZ;#>}LzgUWCKY8&uy}W9FOwX$8AA-~1r`cpSN`A#xZ^XX%)#X8lvjfi -6wNxTQTy#z&6@5MQ(w%SCpD#AUR53QQ3%JziQ8sdz%f%q>&Nou_emZlyb?+#KvsgiFbH2G>E`}-mn_Z -)O|4wzI^1eK&y)eji>xWhQ1s|GQ*{9;mjo51HrH^mKQoIr+YwuIqv -T@atk#3`<$5J94yLkych2wcp!jr(zW9f6rI26*AMrb>Fj!Tphgb16su|f?()pLo;j~yJ -Ko_~G@g=B)>Gj#XMP~J1J*bFgE)|=d%^!^xN>mipzXFhG~aAQKfpfnOj&obBeI3Ux^GDgw$1EJuh#t? -UoL3XA(r}gW3w0@`jwO#gYHnW84Fv1r>auxX59~>wE{<@Nwrv?Mt_vRr9|*QUsKUNjLL;9x+uNBmFq{ -=e+L-$%u#=D9ReQETrwsCm9ekar>>11F0*}0gW-0{bo@rFm*v5+faQprELDSDCKQ0 -^9+joeLWeeVOggMDW`k^cWi&cwwLd@tS8Z8;@+=6Kgzad2uvL98C`M9&9dXXQdIx1)M>cu1^IcQN($M -%lJ>oCRs^78pnM?{~pCTb-_tuMN2@hHutiVe66`^K%G3zY3()W7w4xwgCajoj^+XMH@Q?I*NXh8$W)OTw>E0AVfJtIhlh(Q;?{BK@+0VM4*f+9JHkh#6*LNfEw~X0F*(;RVDP*FkuMQVVHnYON160G-Rm2uMil -8wNSJHzwtp~Qiy>=QKKSI>3mg*=1Ms7(GvNpB?_qpct#Nhjv`cQ%uZA@P_UpmY6C?D_(DJkqeSEp1Bl -F3Qp_iouV7~Zgc*QkVMrB)1&aVbi_}E2*hM9QSOPUkODyFwV+bh56c&stGg$3`!WULUOHCu!7`ayPGs -1^q${0-Qf~Et*N5=a1Um3PnpT*%1rK~iw{{p28ERz_;6oY$ -pg|DM4*f+928b^1PMoA@(@dq12`VTKMvqHfa6I63WER`2Vfk4@ftFO6bDiq;BcVA2^EfY!Ueel2zZAn -sxi|we6QV>SZb)6e6Qhq4c}|{Ui$#D_Cruk6*X`jPz&6y$?Y0$*W`8`qEDDm1${ycM!P@_3~CCVI>Bh -bpiXLHDZpxm28M-Lvjh~n7@9eC$2zNdNR=3rv~Y;ku#$kQ5nOeHX{#Gp(ZFTGuSQhW6jilAh45>DUjz -IaY&wmn%xi#HgE(mjqz19k1R*Gz36>^=6zv}kmT^OXGytR_KpFtj0FVYqG(e(3I5Y@^hWu&ZPXk99IM -R?K4HkYw`)Pwcv_Wh%f(ArvG~`>0<x-AC -xD}vt9C)Vo51cSaI^^8PX*S6NPN(cSP>`#rH)uJBEk5AK^S2oIJ)xy6#Y2t5`a)}^y3&18?>lN2ewWD -I7JhKQUi8V(ZaaSi$TYVYU$=wK^Sy?1e$=34GO$20E>3+E><>nI1jr7Cr^jds$=L5M>>w-yBe}JSeSW -FZf%M-5h@KTU5tu4d_7OisiXmD0?I*KMLo3wB&|Wg^3g5u&=8;@Ktq6rkQzcCG@=UhV#?%?P&Ar@V%R -7Gg-}F7Q3Kkc62rt8vN3677?DxCTFjC%s=#{QPz7SOi%N}Q)Y&H~>~6?Afi8l&2zb$v7aeTE8R)gZOE -8EDz$&Okpr!L*8fINmK^3$F)Doa2pcbIj0huo3pbe;kr;AA_hLAe^ByB*m1kXVPF9ojp^nj=B|E@osInE1bwf;Ll*-D%7e((9*c|ULd*QLu -k500auiSnyW)rP*%mfMf|6SdwwJ>;pkoe8X)A#E)j8@;rb#N{naMPNU2=IOUyL -EE^TnT?DMGY9%npBjD%gOI3EyFk_fJXaJ}x2KNwq#IuR6?_K9nA9XFR(}jt3fSr#jI;JIR3!HQ9iW*w -1(hk@u4*1mn9R2X#`T}y#zw13BMvic;S4#xVvA9-WhK3pB`k!@aKnm(czLyEmYV-NJ;mCttS -`(R3L4FE>xh-S^_1G_+Vh)JswD&27HEQ6H&A2OflMCfeyAkN+(PogAyKG}9$#U5;13iev|On4GTMAs8-$KBXR*4nV&a@ ->ZTH@6DqAAYi-+pI<32nF7vei#Hru%oWxiEi#?$Jgr4ceZn9^3)uvYdh8Nd^7NV*t}m1x6{d^lDU}d- -9PL9;dHJF(}}TR<1~DwE@Er(X0dXV3I`e{r~CiuY4-woe2K4&-MWpD#!in0k2G~Jh>gSQDrj;$4EGnW -UcG<+{`|dvzV6?=n!B$13Z}gJ1Z-K6#37sST=?fKQ;U0AQgCX0+x~IPCcy{e>e=?*ZYui-&e7F-_`)AtK4jA*i^_ZY5*#vK=C{031F!44n8azqGnl<8(=?fGZOLaie_W|=C -HI%0pse_mXV5*#7HXm6IM1p&%4$8;>4&o+tBNS*$JbFA#jvkx$f7Dvl6Sl|zI`qVUdB2CUvpNJd_)^4w;X)X1OOh^^*hfhUiUBI{Fh_GF7NjUKfM6~#0Ln`0dY -0hGI9DX5Y6!loIaFq2B;wbNLq9CCR?QZ2-bbWYXliY#($YJO?$6)}6U(U`>>EE+2pAiauSAU7NeciUN+ -aBw-$GYu_ZhNBJp6a%zy6u^6d#2l->$c~*?S*c8q1#^SwwJo?jc$9R+m3YGk#0NIZO6LpM7N#jwo~19 -s@u+V+nH+H+f{A!*V$E%v2B*+zeR9lbIG3Lswt4Ys!5t>ygj!{u-Z2J3=9KL7>KqqVpYuxWU3^aB_)r -M>sge|SX^>E>~=U?CH1ug!GS!+z@Ig6AFwMhUs72RR(X@oprtPJSrc=B$dWYWizt;46kkg*3=3jK8r4 -AD%L;Z>Gr0?dUN!MG!_COC?V85a5>>$QHCsotm!rKab_kRUD8t>Y>kD$R$?86I9pI2Xn!_DXA|I64cU -dGU@2{Qw0B3(ha31;~X8Sw6FJGFI7rVeS@LxFS-p+tM!mStgDIoP=mQ>L+<%igN1Ojlj5p3Mi7EddF@ -Q1eqLL$qv$#hvvR5$EX#C==t^UrC@4=<%Tv`tOurepXKKtd -1?9PFd9GSsY`(e|YRpRo<)vzQqgviVkCy#>`YXt+fnbSVuO}X(*g>!rb*ezXMKzn{B$ -=+GTh6As8^}(uJ(7~;t89y)TwJT?EFs$}_ifez18gT9I|> -5Bs6q%^|zIvL6(AmC%~u(P$6I;R>Y`?Tls3a>~mgY;_Lepj}SQ)0CECECJvEh+X|%94SIUL#$oG<$*Q -rq6_q^AAXo)(Xt9I9L{xiAjDelGCH&_{@oZA`gg-Ij|gd -iNrWde@w%2NQ;caIXat+Ss2YHLRzxhEJHhU$JW_{OCv{n$D144fMwCe+}T)odbgs9Zs6mihyH+(R&sE*j7$;x9oMrU^h{BZ<+LpJN<$U&Gu@JzbNhfq(Lw?W8VVxzMI199P9lzbVH$WzV` -b!Z>o+9F77*BK${0AKi_T-#BY%thz8Ft$1jnU%hm$w)LK(77E#V_yPW< -^sg*^@VA%!ll!pKexBxlpXT&HkE~H!Lc_ahkF7`}!KrV%jX&_CC7T2STIl4p^M#6|czNiSsNI&f-|Yz ->wL&&p*SsYFrSEab7NdPQWnY1ZPVkpr3%*gAt&Z>lGRCw((ysF3vyls>rj74_IF6jc&6yX_bRv!Q&ee -yU}cxWOD$KvQ-I)Lu1Pvtw)BY6j418v!d@9fK4Nu(NbC7!126Tvs_baC1Aq}FZqz2MX6j4>CWq@it4) -5Yw00|dmUr_CCKv_w(-q@gl)3uS{T+?buxNH3q;2+kvZ=O>vyQ>1OefoyD`vfh0%q6Z=$;Q3|56c8j3 -^iQBrYs0c)UOV!wABWx_tGG31~|QRo6JZxwV%kfevy>&LRker&<}T!AbgH?@`%0{Al^98vIiJpkpPbj -;{FD(7W>o6LA+>`U74qIInn1S;qM}iV -)!Cs32|Ox@P}mDsN%mhFcKFB!y;t5LM=DW(`G4ROlgvFR%4tJ;K(&;&t(DvC~DIB7|r-kuxcQnz1{sM -yWNfrq10dkfb|wSBoVk=QtUVqZQP!Bm#n)~C;)4G^qRfT%O$}39lSY-Zi;n_-j@G@f$8Zzu=+B6ih`n -@N^}NnXXwarAWpz^#O7drjKnd6>dNCNrKT)ea>RHfT|fg6dYU;ojnG#gRRM>$;LJbvuEC% -Z0$W-)*88v*&*jw;?3LYo(gwKXzjKNC6{luu#&>;0iRL)XfQGg!Z)uRu;;G)wA*D>QjWhKP~!0g9xUQ -|*1n!!3F!}cae*aGd1tLuY4v8~ElZV=AOGSO?2Ei -~;7F7l3(-fPB{h`6qYXiJ80(r1GNO~CC&7Y4yJz3-5d<(q&_Efgn -I~mYe0U2|^%ZeBqC?SrUR{0Vnc=(QEZ;EyoEd@>9Or3eo2A?Ago6koJ$w9-y*nfMZX -^$?B29ouZn=upm=Ma3xkh|ELn6#VBR^H52-%7k1sh4p3vnSGT&?is{^)~1j!79>-gx -n|rB_TO;=7j0zD)-eH2Ry|b~)hButf)GKzR+B0hN@7&Rgp7qK;%~`XKgtxnQM1gR?0m^~hHO_uGQ)5* -5f0MMxJkEw)57kh>))QaxHRyNnE(RH_Fn9N45_iZFi@BsXAtV)k~`D9HmWX5{ -5#?y)s6i6PsyAzy***l;|<=r&4HOmvNz*sO*9(+_8;ax(e@6fg`29XuO%FeA+!k$MuutY;>7K+TUv1_ -!xOfxT|hlPAw#A3EaSrVTSvid;=*Y=7VfKqM|<6I(X7*#Rq~$>nCG6InFwoGa$Ci -d*=yJEMVX2b;Jg%3Yl`x_OeZ_RN!{(9pfuUN!%R9wN$Jrmd~|YjcILBUHzw3{-VljydX8!SE$_gBmi4 -9HNjCnmc;xeqrXZD9B@AHp9VBO;O!;1s|GGB63X+=U_Br23unS%!-l -it!nH%9zN-Y^V=wm7^=3M3#^Ra2vm!-%0Mn=NIM3=NYxtJkC@~;;i)I}!%DgH1 -1DnA_o>p|I>Zq*y14j~^!(rF=DAqXQ0{*S8sTc?iYgloVWf&!(sBXougS&F+-zU{4B^uA8L~QdC=0Bi -BF5ABf=+agYMTXyA!0;b@RKO8W0IRSc9Z@jmyU33fS^`sh(2{uz5YDT+IL2Qzel{ggZ=9eU;w-aWBv{ -*neSN6pAk}v1b|DPU&dvgPR(;+EPlIW@7r^_sEI*tM3bMl2PGhmLtO`+Lz>L9RE2S^BW -HF{)wNoi0z*MlFe5=jwkjZt(?&*5?+u$52xO-Pwu4#<%)hbSC}VdTSVYVlfgMzekemvD(K>dLYzKpB* -ZE8oxM5ixnf~N+Cv~eH+DU9v*^p3JA_((Qbxn@;--6#26iP;^Llc(#w2``R>xo=#9|d2G^%i^kFWkJ{g7V8MJ$Bjq^5yQw-Tgb -v9LQmT*?iLkjVHCqkRKqY`OhCKgiPQ62o~Mas~@YYM;frHoo}5Ol*oglOmWS;Gj;kYC^!!ENt%FS&Ly -8G_HvhMsblJ8Smr~|vi5Mb47(3v8E*-f*P=A4MyGEmiJq;ZD%(N6i6e}^uQ*x_EN|M1E5E*N8@Gfpk- -P}WboBCA`|LFf6X~luP$j?_63}9Qgd6kP?6)~*^!2g7}DfLCin0b1tkhb+B!LNdU4fRB77@*9}z$rgECqiYI -mgawBq#2G3m1JIOm`c<>UI>!YZ0kq7~7ew7RZ%T@(#)xPDN=vfC1`$n+i1OJ!#D#}m)r~w+1dX6@E?5 -hwsT!p~$h(nqsxq1JNF;FrkjRr=VPyl^v6$b6Q;cpYs60(X&I2FI=-Rxbv}c{(2Y|`d&_ -2lq(?Wb4==~`lvR}~v0J)0fM)379v_}ONL2gF;LK7p-I!rd@(b1|Ng@U_&cXIQ*N|_F8&ONk|I}SgxT -51hPQH`I7Nf}9UKdBy0o&W#InRh0|hhzqp08Cd{Q0#7qpt1_>Naukse5+{5CwZAHl57H61gOo0l_od9 -WDf$85x=%yZv_H7Usa>M{iplAAqr)TgUon+h*royGy4C>GWzOo(09>_$&Bqtpjfh{Kw2eI>$E~~4~~= -v=7B}+H^!X-%NklTfSyCs@u -BT|FY->E)s_Rt)U`3%i85myU1-P^)MB%MW89Ql+5mf4_EMlA|QQy}SOb}Bc-vT+Rq`ex0O>os+-Xz&h;+27=0Fb` -II2d}kpo@u$74TG&+Yj(=D!eaY-@8o^HlJ(t)Y%T4tkqjaqW7&GVi7x)r -uOPhzPvL8V29;@3Mn)QiE|o_5**?`u@-H*J9IMEv4v6BM%|hb3#z(X8Bi)(c-7>)LWp==I(=? -bWdfzW)LJYlHSYQIr&RL#xilopa`19r6S`e!RD#$f08}=JCB9Q7WjheXq%9_25K4uww}wZwWC!g=uQg -pz!S?(h!w>ZA^Xist)}H1tPH`EKU^=veS4L3{bZdD{j=r$ynd5bnW4AU{t-@puK$|0IREW!9gWZ#Y*ak#cBq*E{oqLj&$V=0aJJLRrwS-V12?QV^bNN`rEy -)xBJlxmsK!yZ+jNXD(f4-E?z;CJ0CSj&vTDUF2(XKGrH}w5!mB>mD0m+d(Uk9Y -u(b^Wj)?^xS7`W#A;l-z73GEkI2{#E!CLPy2td1*Rr$)9d=bZ?|Sa&Q>-F<_gs_BhAm$ifH2dQ)GCV< -V0QBm!W#?;PyEL%O$q5{ERK=RdZC;mKjnHs}2`17ZvBAMpVii1`<5d^) -p2?BKHZ}T4!KxqtpuI`IJFDJi<`#L%`N?0OS~JBg(#M4LG?UcV;iN*<_e)8%5=!u^7O<%)s#8k~ImSN -lp@YtqinoS*WP0ASc!cb&Pjz0rRTYP}8CtMcZk>j6Yd^G)%i^HGWf*TI -!tJ;#*kw7LH{2aN3tGIpnT5l%X|u$eNo4m=-YPZuU4T>uV>+ -`=R2$-2*<^@Nfq7!cfR$h)qdtC%e(+da^E-hHZ&1Gu(p3JYI9J)u3=qK^rB|5-*aXhaohrPR$@$J%#Q -`tMt-9@48082R^Okn2Aj+t^JR5vfT^Q3%jkvLA5mYY7D>TvG76C5N9w}7h9&}Rh4I!UhX!IfT}$=mQ; -dp`R+VMAfqGw`T)i$TUSd5c0yHDJ> -zbDU>USdTUGG11AtFCPs84Sma!B<7y2CV*8s2m!w-6Jb++XMTxSr!-h28X39XZRCni;^xF1RWprU4t3ebzpNf)vR(gVC+5-i%`KQzM0a>Xy3V>q6wrtP4eUA*(uH#0RrCv3$I -9PAI%%UHfvQOgeporsb@h$T?KkKuy@!#A#v?lc_Nh)65P`EBK4~ppLDqBc14}NneWSpe5)B8;mT{&J= -!k9M5}hQVh>_Icq%1V|r@dD{j7B|KK?Xk2Eak`flIrM&UROkv-Iv^9zvIt#FCdL70axTSn_WbUK>r`? -{v_}M-Tq~>ZsEy4q42`#TeRxip86bYD!k#mKq?bR_b$HS@EZ=?DDOf6ARFI4XDJpWacbx$028Ru$4@W -|8eX87Jdp8HpYAN2OoLhsx9POu`*YoM%3zxTB#=vW?jINiwOyo!^ly=EAVfqqrg$BU=wsQHCTuzusez -`w(de~#!LOzGF5iNNn?|#=5JP6LE94U_ixKxpiO*>4JePMPrdWAJVDMG}RqG@E*dkAyJ2)ZvYFSYxX1IPtZMQ5KJtPh+FMwy -->X+SJ?OD0UF0Poed&QJ${b&VrBc+d=-jMcUFh)HO}%{!OQL-f20t5G3&Lno21BJ6 -iCbcY5Yqn5ol%PaZtTCiK5xt+p4xhBfmi6Mcp-BapI!xL$bm#e`!;1`>Qnp}ne%Ef;|MG>R)T5k8W4ByF^g)|d}8ar6Sl2pIr@o#aX -gp@jpUXK55*5ksad<+CbNaCka#mE#8~9Bz&mWLv+@Pfy1Dy!aQK^VuidONe%yD$tNjgdM6Uy6;0Nu(t -cj3Rb!ptDQ$tW6a0@J25aU9+-ka2YZ4qJksnv+cCDm(dUD@}!O}9S?TCitcr!O`{u$--}ilYv|IF-nO -0gwSsgljeUb)-Gqq#e97u!TV(}&ciBn|JRHsUD|Xb2CH-GDGTvoq)OwIZ?U-R+_;#Be)0MGAcqwE&ib -AZ4$+(Hr->s tTWB6@3X*F$*POByRRP`UG^m`DPi!%{9gm=q -K`kk8{-O`SpYrd^$IT_>I@>lQsts9gCuHpq#9siQX)l`~!mi!}o5fF_&YTRSJu0Nx -Jo?eg>&QpAuF0h_>w!O~AJXeq9$zO6w%O;57CRFqaDN;fov9X^k_^Y$Ep7Qu7~42Gvn}5x=)Ix}NjZ$ -A2UqC5A#cq(tP%|RRj00UVV$lu7A$^4r*4O7LVlc9wIxJ=6}Tu`>6e>tB -@vOFt&0rG9()%J>!bbrRi(C2G*H1M`QpT@=dK1DsH=z^y~Cl;y!&WZtSI2=iCn$Ko(THQQoYI+*all4 -wZi=ZEO&e*;iU0|XQR000O8B@~!W#71fszZ?JnBr5>`A^-pYaA|NaUv_0~WN&gWXmo9CHEd~OFJE+TY -h`X}dS!AhaCz-rdvn`1w*Nn$0%c}uxwTZMyW2-vXD5m6X=eM#HtyZ*bv?c`2}!IeQYA<`YMbwV&jAP$ -B*B+Ny<&1YjVu8NzpSY%elTLrJ4pyjPXl5y0{_HCE#Gyi6#_LTi`n$|h{ivUEchWby)gNe%}tBGoSK -1YL7S|s81+IYbZF`CCbJypdm18*Bk|WS^EnMZ|K7i+L0K)^nK&VopVD`y@yD~D&dW-N{w?(`7IO;4LU -VGF{8?5ZpmP^SH-pYABaBO5JKj7BSr|}rCM$e*@x%A8@as4H>!fHHI8>IofX|N}Nq*p8_FrPJJ8yx&dBzchHb -M8jZ-?w{LUAIO_zp*S>@DfJ!;m62Xj-N@p*io3YSiRS<%=VDurivt(370%FM8v_J&LJILto5wCSPN(6M65 -gOQ5EVNj|Gg=P+-A_TGgesX6$0Ab`0K#LVwEzF1#P$g=heRwgT~OOtVQ~oIH1MOzloQ}g0xk7yr0S7- -3e@f>sBNfN1wp+FKzso&v2dtsD@JlZ1^5JkM+`_Q4MkwaE-&ZNcVUhqj3YoiWg!}oGR!P%d8L0xG(st -H03KXk9jaOtnt&x~t0VFs90;JFXu`Cn)K)d(-f>+yn5bXX}m^rI>UO#)e$jJpP@vN=xFZG2gir+%X*OVv# -j}CF(l~Hai}UO`iE#ne~e}~G&n=BUc?~duu9n -1HRsM*vRcV^hnS0c=2N@N=g86P!~(8Q7nREsV%3aH1~r!6$-s2Y|uGHwJOWBrcT-?$wxheki{$44hk) -J*XAO`$N<;3FH}7PW}KJ1ov&D4s-XM{1BKn#33i-$#H5KW5LF(fKm#HkI(#`5c(o*75NGFVciONR22Q -CkRVdca-Ip7hwjq>X_?-H#_BUOZ_%h3gkS&y3N73B4ni_@pcc2glm(WA-&jSlmBC@oa4c*{jt&jZLUy -8HfL4|V$#|q}ti$Z@`u4KpzM~icA@K(!&n?uS+Ll1_6qdm1b-M9#^^Wj$%CX%hetvN+4 -i6@6UL`BGNDO41)vLNKzuX>rpiBU427TzzKV>2erZcyCd95Xb(U541bqtlp?eGfO*%2%A%^2~3}S|3K -Nxzz=D@LrJknbjN6lzqyLZqP=-r=2GA#Hj`TYKUsu9!$P7Vgg?@qruJ|^FuC|rd<;A?=MLjaRp+k>>& -Gbr`s_#Dd}Y8h_)8X6yMt#-w33^an(2G#p&={=PWEs^{ -lt@xSNz?-Tw-BLU(gD)5@0OH!Z9Z~oSn*572!ze`$wm*4!OEvnr)q*K -KKiEo(lPw4TdvUbLn4Le_jKX}y%+oVKNPDr=reT4(Z`^R~3k6Ky({!~~*U;SFW(`|C -G9tdI())lQS2|w5QD{M^qocLAxv+mjll~ezr1`i{G7aAzziQ|jFIEo>_DWKz+dfs^zRQ~c({_?SajKfU -ub1DLGKBjNf2%P+c5zoED=nyib1T(>(|UGcz*`uSHgY4-N~997D=0jGV|vCm8TQ-G) -ofYUL0`>PO*_(V1iUuJ0K+%~E642qNte1KM)D+8 ->iwA^`&ekVz?^ZALBx#8HS60UHwu0nZm1%LNAIGc&~5bV4XD3=IF+D4BH>!|^LsTxs}xd3=SQF_%Tfx -n91=0OkcCm~V|EY*+7}6_&`^1agMYFVx>oPBP^4n5YquS~?vwk2NzL1 -oBq||8b6zOxP%i1g^vWY>tfx6c=!A5*FP6&oEnqOCVF4qZI=>j)2L2fiDP^gl$Rz8~}K(31E~!f0pg1 -$l(lfwv^;=G{)qJted*-Gn$(0`j#%(HM-1e2ouK6J57c~Lk*uBP>N0D4)%Qj`A@$tTYZFkI7t)bJOo)r6=;n~xxCXvAA^jY!qic)Xh%Y%VrtUwdus|&c7Vw_iKNta+uz<1GDMc4pM -#2qS5VTue(Sd86&lPzsD5Mic%S=APDPChCti()wMl|{ce1`=`SD=%SZaT2Oo|BLrL#0wNGo&rHwgg#2 -dKq^h1!{F=nM#b82b}p>Wf|bwt$uLe}lu-e)hA$QAYu4S>0XVp$V?sR)TOl~`Y!?C}90Sq`MT|gkPYp -}gAsJPc>XJow^x%ToFzc~!?VQI82e`b?|B*?hG0qR;^>}EKL2+dnowr-If*!^j63TYF@Q}y0$ori02DsS{yho<(_=0!ndkR86{f1$R!>ecICbXP7v{vc()#*PH -R_Iid^_JR=Rc-YMmBUjfJJ)9as#b{}XDkijOI3)PIf;aZjn1808W;gQsl(>G -&)C4%=2C7jJ@CvmIwxj7P6%IW;vXR^GY{C#-R#wrney9el#3n&T%+=24e-U3SD7}QspB%E8fRg!j}QS -kIZ_zwN#^HgxySdF_p_C;<+jK#djCBH+7}R -BzHug1PM~vu>m7@9EPPv!-m&yfpmzej6KL!N%0Y5Pf1m(;jYlx=L;5c4z$G-mZ_!pm0Pn%J25h@@a;< -G`ugr{Dfin+FW38_BJZ-L5_2&KPRlV$Kqv~_l1QB+E=zRpeK~2wV;(~7yp-kNnXpsb%5;Qk1nj&GncVkO`yZ$Djpx@=Tc&51u12HCROb -L-ag?_Fw7s4YpnuVEzU0j}^?N#j{z+uz%_Z^lxeroHCfq(uJYC0;Y}0{Cw@2#aEH|J25j|~c85JFu6+BfWD{*=q9`k$e?DO -O@HcJ&QHF>y_4|>r(K>eD_>+je^k?|mS)T31{dM@3`z~-~9lF^KKO4?!3y8kFSLz1%QNL?Ok+DKl8Sh{j`nI*_5+tf)!ui;zM$XYD+f&{_D_d|5&_#B~O7c`@h|wOSH7AYF$ -f${hSAL{aLnU?71%4;(eCqK3t2mZhjL!VRe)HZ&5QFy!x@xJU7tW7^$S1N!E99No}1Fav1m?>{ph9EV -!E?q?5zLlq&Oo{N=pu$A$*Lo96#V6 -qoZr4LN{z+_bp^?}J|0+Yr-T(RA0H-eM2gXQr_?Iwg3-Q!2~IY_0O{ODzF^7|7<*$oSJOf$eV6~(@Ebx1a8|nnjPh~{b6yr -%9*rzdn6{=zeLi!A8lVEY3A0Jdu3#}Pw$PCEAj_pmc422m}xd-as^{Mvgg&668~9sWXC*~sx5cGB!KM!YSo-yu%+rHj4|>}Gy^X9Ntz^~ud{k6>Z=lzA+Sl(Hb@T -ls5`;r5$$9VKHvXdWc$8X$8ue#)y6j{D^M}tsYsACe_vGV69$5&p1tHopNtSPndHb;Kj&XkI)>Jb3oc -f1WUh&;v{MGMMNl85R^I~C3Glk!Y{-F-HcQnVne9*r-4(x^M$|I}iGLx;|7f6-de^1?BU__WZ~oQLnu -xwqlP<^zBnPAtv6E`3`&?TJ$x4aVP{H(QEps;|fw%46j7EEe)3I|CmW2>6EAy8*vpG!r@^7kJg%l=GG -)xR;~G5CHgzp`7O^t>k()pWLDMVf} -c*f7VsrC7~O5s_}oBbaI5j%=gvFMHS@;5qlGj2opI_POY#jBQ#gHOr+1CJJCp7{2wd^x>0O)I_uKR|swBH{}8;+ZQA%%>0ltY$t9;*WJ&547J~&x%9q#CjN4tDU!=gVl^D> -}Zu`-(aFs9RFXQI -zqYiEKUzWinGbF(V)31)4@vpgG4kbfzi|C;Ug;l`AIw`yOybddVu^zB1_j*1HF54JaYAA;u|t8Ft}FI -*CGJEa74a)l@#nDet>#Q2FeYpe2W<4i`V#*8HN7L3>^z7D;J -1F=-dS#IFO$CC<&0#@+E4M5sQA)yx^K<$GkF{Gc(Ncjo3~A+JpN$#{5oL_>oI1k;47dv8H^RhyyIpl9Ldm*R7XpD*BZHRufv7Fh7VqS72czZRbB?Ptr$!e1-XZTPJq*>*PuE_++qBdF2~s>n^HFPgJG=chU&J#1G_ZkY~8zTsp#hZT -oschn#;#!)jqi3Pu6fcK&b<(J62>rlVvqovMp|_aJ(3&hp`kIzJOmC>PqMAZ9Pl4g~2z@BsN?`x0W*S -bshnt>z?KX^bf?mhrNCG_Pwlqg8{|ob+5t7H)-4t(tmINU8r5x?|2EU#d>_n-9c5VuBu<}&boGIm3-K -FB+5)f>6HS$DcIy-B>}6mN(`bEpImjk(k?b_T({QGG>-zqxH2TsO0u@38N^Z>flAe;;sxM*o%JdE+ -+<9n$h+{as#cNfUsT-{mELC$D(+|_jo*c}duZII+fBsPz}uFJs>JXWdVU_+?b#74&A2{AOaOn+q -5O>|z9+b*h-24sw9Y-Y**Q=P+4G!(4Vm3#)d_t)F?VNpzqB^ziQmt;SOHE?lO`FO#=e(KYJm$E{_B#L -GB|a6q4)H1O`ZXe?^^1WUb&VVR{6c(o@$>ga-L7AJ28M%$Ux|tqetv1_cKhN}ulu@TH`?KwWkC6+MSO -}I7vttiH!tE-?ag2FO}PJ}i+exN90VjE-JV!{a%Z+MK=^gB&1V4#>SY?K4N`(j5NreE7eBY0Sr3ivy@VF@qa(LirJ%$ -?GC9e)0EZ@c7UIDcfO|8Q9eRhWMVl;8oEtvru^(Wrj0gJaqKn*+Kl)PL2%H$IJ%9vqhmGNAECqEa@)6 -yPThiOpG67XZb4h$CU4&v4+(D%)IH-Nq|+{AAG8AzHc6x6p?CcS78?{CQy-Ot1`c};IWxw0$aM{eN1mESh}+>JoQ-kK(Vk&RqL~{O&$M6&P?o~q=%9oN;bl+H9 -$$N32!!o65dnlWxDg+v){yLKFEHt4rVo7ul^nw2irFL_91U_m`0oFW?mXAO@AK(gPP38d;IICl}k-4T -S4Z7S+Fk!9<0`2gedn$=bhGLhMQ~zU88ph~12-SpYqAJf9E<|omZHJjKdp-#$D2C$!INX_mgI^8NdJ{5_$tg8ma -_@vw;zh1YrZk`=F!^0R;neixYh2>qiKHHued$MD7>|2o;UCG>MHz!n%RVE=*@5DVg4ftYV1k7Wl9HO2 -`qmo+c!Jc4cm4Z*nhabZu-kY-wUIUv+e8Y;!Jfd6iaeZ`(Ey{_bCKP*GIM6gA0;VKbHiTUul7(5* -mI?1LK!v~;%F$fQ70vE8EoeRrg6OMYoHA&4yA-NWO(Jjbcg3&`_n;~Il`4suaz<3LQTt{R7V_)eje57 -J7lQfQPcbcuN-9U4*D!C=Z5Ze63@n7`F!Q{gQwwbEMFS^j{k)F!iXwb669a=G(r&a8(6pr;kB7FCAMA -ZEp@3Kyu{Eq#EnP~ucHmCLU^p@`L5D#w-!ADxjXoHpzBbzokz`!=t%!h8#6qdRi-3B0R>n`*PLptOT -lS*jVZI_%UT{@A?y`QqZ7UZc?{0Xx@CRl)=bq!7()?qIS8H%D5k^pX-{T?Vfe%usQ5NhB>STO$x^4Ry -OWAvBiv{BS!uzx;_~DxC#XR2{smr<+m%>kO^flsqfuq)4W3))Y~d!7by{-vr4WiyJUP!fNUT!eR+pc_ -&$ea2bX$cIQmVvywFovW?QPz+x_xv{aZHrj214pe;m=8}smGvt8-sD@s2;h$?;-eGHL{o+SWJpk7y$y -kRM=m{fSpI_Km}8A@&H(?I>9tP`rhIA5i^+D?Ys)INcK5fozC##OpGG*PrYJ)LdtTs?gLeA3Kp_9+BO -o7r<|ZG%@AKmM}C>Nwl{A8+{))}r}_$8A>)kAO{t!Sf*YaHlGjoEs54P=nIH;rCQ;O~XxCROA`#cUxS -_!nIM1qUa@kh0tArt+9|)rnS*Eok*e`4!qt!3Z#-w3g=1d9@my)E{NHvL@H?=S0hrrY6GsREAoORg;o -!Q!wJ$JXF)t5NgNQY22m7fecf|2aJx~`xHgFnsUKx1RBhx;Dp7e1-tN4T_q06ugyg(IVq0as=7P`2aF -isDf#0;GkQ_weOB_wLW&)ucM9Gj|pQEoyYccl1JGj0EF9=A#Z+I@i!*VXE0}G+Jo9X=Ig3&|+-j$82a -MZ68V*hLt@&HD18WkMYJde3Q({SkPIO)~+2OplCv-V066wd{!GZZDqs+5LeP_4NLpV|)b*7nz};3tK%m3 -|(>8#VUw`Idm#&!sI=vM1V@`V-iYo=0f}c@Q#C_Ry7J=U=W-?bvx;vg1X1#R1TD# -_+oW=K@a=@anH5$*69S!=+_I@I4HKb=gN8OWLsiws5X0XzQWxR+I!LV9V?xNsVS{`=HQKZ5GlNdd!?5 -Nnf=MLpNYijI_OQ18@;6dlZ9YPrwblvqIXYrbd4#90YW^E-N@o;c(>sQDmQ|tm?HA!>#kaR#xdVl!Vy -w96NYa+XJ_|I{?)1AK4I*x%hYPzhk2g*3w0bt`&7YVav;i|+Pw8Jf~TI{W}hendd|r13T^QrE0HfJ8>NI4tHY)xEpuTcl6ud?*GDd=W4%s2#V+AHh7-G`us-&mkE9Ph~(@;Q -v{e`@;qy5DqoBlE7_<0i1&=b{jYbpL)JYwd8ng(Kz8OBV6b@vYzXLa@Nm}C@WJ-coAk4GxaDKbNbf|g -3$B=wY_7xc!-o(obFkbCEMzjkFn*tx@v2anMpEB$xJE_9iE;4eStjieS -ri?xw`kg?boj?Mg)LBAP@)y0?0*{u6w`zwkV4-3xE5q7p*sGR`k4ip2lSn{#O5f-V36eD38+Qd9O?&K -Mlg);;0BSFU}u5YRcqA7A4C^kIvq|>iwzrE=@x9xBBZpANAD#9w%iSANVUT^L$nC@wXMU!n{+Mp275@ -ME!qLRuzWc`gt!4H?il3LGLyyR=v;v`s&rI(-)7Q*VRVJjTcA3f#zwGMoGanpV!EqLF&ruYN-N0&9cx -h;`@WTodebPC@6ET=~E5rJ^kick4p3!&Q!I9x9rw=;AaO(cpFDacn~H^v}NUzM>Dw=Y=q+HLHn4fZa)!HJ=!o&}snRa|HQT(ULO_&u2s!*6kzN -4LYHKyTPiMot~@3EA9%7HL`*2YI+w^C3=?9Sj6fC6O>`M&ilriK#Zc+b9K4N@vwSS9LGb;vh^HJ8EuA -zv#VA>ju(AZxO|z(#X6By)>hIyfk`oY@Et{zhRzoYiv(>IrIFM2^5=6X133gzXdS` -Ri^>W6vNTU{tCece|6;@MWl9>7ALuES!b>kQ-EXnCi`cBpjC50_;-INFqV#MwJvCaGTGdQblCn?E~r* -43spd)+O4hK|q-epmzAR((|qFvCy&H5wf;NN&=l}{e|h=ShqEUy)Q+>T7Bb?0?x}^dX1&oP-HvA8PuJ^EZX2l!|J1O4aG-f_X}k638?{&aBMnpqcQrzL -$!Z>a2Jw15lkXI#~KOn9rYS?RGRT@x@_XAj`HolhogU)PbdDP>c7v4j -y#RFtq>FVE6r8RB$3so#KZO^UEUf5Cc&g6WT3TlJ*L6K`>qCtH8LX2{X&Tz%iaHznTF= -GZL_L(;z{3Xc0kwTqMcq!C-X_Ba|v~KPoOH-k;8raiQDA$p&d06e17EzY#Ag8DH%1$@CR -iyn&dbUeRNyb-6dg~tYEK8FxE%WUvWOJhjV4MG<1yL)H8K!&(V_Vy(gtNoJFv9CS{g42`+BI5M>3m1=+*RHww^|+ZJ;Ne;RsDF^NRPsVO;y|l_2;{XaG?)ysx -9<3`y&`g)tVP2UffpQyR3`%yu7En9p2Um(`2BJ3w*B$Ozv%=mE4QoX{sZkr4CCL|Fm0-wT^y8-L_VnO -4I6ODG+nsQ*(1A&)D3PMiCpSJl?5YZE1Ua+NO&%JqW!lwvM1WrY#RcwFOMmUPVlHr{cJ6aeMW(rTe;` -xoq2m`{Np`2lUGxFE2@?M32)b4r<=MA~b&oRdas&sFoT6TuEwzYRKPlNlvvr%2e_Ll3NNVDYCZQi75kfvYZ_U -iUXVd`e}@nCqT{fO##zOJ;lP6HiL6vn~h -6l*c>2Ur1@-vF_a8BHM^LO&$hjIKM?QJSo&X@yPW;4W+O{)|4yr+YS=F3uW0Y#?d;suC@bz)hN1pz+vKW{q)<&$4ZLbcXgF4thGf^ -8(AuV*EVOA|J2=>5OZN5AR9&Q3%Iq1zI-BC&?%#s$ZG8J^%2szYRVz%hD!cl<&py|B(=O}V>?!eNZ24 -B{OP)Hy_&SdE%4k17)uLQSS9TbYZA)?Gp;h6P-Nq8K-`mtyrF%yD^)+qF5YhuIb<0k${B$VX%N1FWF -*zs31*Jj9VU-#V6b=o#`&w%%O7v1`rRdY*)4^Z50l}1Omap`B#rodlc$8S|+E5B+os0HI7_LATMsWHr -SU9zp159DsrC@}7e-WVSgnHR-6H15drzie>52B-AD=y`FR-s%`-VjP)PXGw_1us|Ma#KNO&KX&%ym!_ -qyxp&x(z@t{nCa1kYXNU|)o3~GbwRjA(6LWke-(!bJo64bm{>1z}EOlc9_g@Lx#|MlpR7HY*&j%zga@ -alhy&9~otb9;OH;&${R&6eK`rqk&+cNM-p0`iL04(j7?-YSCXKW{JEGWpHYU0~Sn_rKBDhVV{JldD~v -RQQ&78yi2qy{K6+eWfBvzJrwt|IK49r`%6BYR)#=sD-u2(l246tk~1PRkb~ZDF0TA@Ym_`li7iZ3)-A@e5_>c2 -l^O#h{aPp6#Y^>jBVfwWRDJDYEElPe&C^n(Pr*v8Su$<7d@?=W11my!h)!I|#Bc-_zfRm?bX@_h^oCr -z3x#sqpe>pMK2MPGvvEel3|VbDdGRhbT_{t2+03H=PcO?55bGb83@N>@({Rvi-hNfN)P^e!5406~Qt~ -%gsKj_1fDf!eAdhER>78M+JjuPmhA=W)H!h9tV5WC0x(LJv~`OVI1W9X38R3mf0S4TBPaTG1NAG4~5= -2J%D5{%d5d2{BRF`vF%{>jbW7?JdKea>1KyXT7;A3lo -c0)?J@_Jg&U-sJh_jB~2ym4$vfm>5WObscvQIvW4egJy+YuUR0Rdk=i*3v*(X@@v1r6)1CF6)vG#R*+ -Y^?YAbTLn<(D1qF0{%9*Qcz?;qe3D_NKOD2hExVdCvER!RB*bCaa??A=GzY%>3DPk-N?e`$|Zljdo_Pb$)UR(aqevI&Y?Wx&~>>$}=PRl*& -cDv7`x?8(7a?9qc@}qU(bESgItlGeR(C;xk)T#deWeZq!q-N$)sl-2^JO7_;zpD;;8Ft`s%kf(6HIjWoTk!%R|Y^-n=IAQz?SAi^Ro^8d9klEaWq>0{Z{ -|o;^JttQT;5FsHkF08t_2@K39O2st)nh)~)5a0e-50%y&zz&67>6VN4rDi$$p{Vwxy-L5GA5=w%CPD8 -pbGw!P4Qb1&53gjwRnYDbxtnHsz{EvF)GkRMy*#}?U?RDO~TxfLl_ -eb@2i_5$qQXMZcFUc#%`C9-l4bY-Ct+fEr-j(W37%T0}qB~7g|9)Hl7Bsq^I82txt{OUB)kO_6wD;BX -FL_OL|DpZ?Y`)R&@wDhq%`f1KXl<~U)!z-SZo8f^8ejiDseiXL(K^x|l2U=t(>IPQ!Um|6AUvsn4Yhu -sBg|HzzPzOg>)&tc--5=-u>L6|Sc7h(pcYL1^M~rEp~$Zqou!KMtCuy*sx7|~L;{(np2n_5EZ*Zb -yIgV(bUW2Aq{(b-fUb7C{ofL;7FD4}uzT9~0#9$lc{ -m`Q`0PXB&e|88mYQFXdlR41#=&-e9DLlFewO;kAnHA!%4ejA#o@K=RevGSTk|GcbzwiIQy&}*_vNA)q&Wzo?n#J&F6BofDb6&EZJ1Jf;^yPx7mlbnXhyTESIbx4=7o?*rI3+dPv#Y3FD%b3%0Z5I{vl_cvt20Noo@S -w@PUTnak)2$YrYEd&<>@HQ=(5L!w#pmtsP5}jzMZRs%YM+`SMkubbdM=d7c7+ZiUu|KYK27r -Hy*O3o=-Kn$wXW!yPQ{|ZxS$+PZIHoki?%wM0FUFSqVr= -d&WxwBl+5YMoaQ3*`<5X7hTvd`4+Rxsxb8A8jtr@I>3GI(+!{7c`(d%SI(~OtTAKgdd!uArzX;cim%eG=T(nm$h01++w5n-nNT1e&vKq9*vl^PeM&_?W -^Vit?HF^9#LweM?R&L5r2Rf65^Y!fRILrhY}P?WS*RijK%+;&sy1JH8xVM9Q2 -Fdk;*~|ZiM{*B&+F)bT0+TM-$X(9btT%2CQ&5NkGWQUL4Ke3Aa0NTB(>^QLNsa=msu28MC&pxqD{5%J -`SQ>TR##-tKYIrefLb1(0y2i{#E^_;?q<0qMlV|RiOr0ZKP>ns^fsJfbw##HaZ|PM}wANh!5@8r%8N| -LiN4PhZHfPY8HYjUZ3H9O`FXz^!6gUcZ<|7Y0T>>{4h36NJvyAhrv?YHVySb^@}=t)PINllb5~T+2@b%d!NolGO-mBgZ=a+AKZ{ENEYt!U#Xqr51nmp_EPTzn2Zda4X!%^Rq8`tHAlb)*h0VSzY(h>6 -ZTeZ1+#J@oHNeOf~KAQ2j|OtLdQ8Lp8KoNUgw}YB)GD#o8I8MEvpm^_$)0hDHabqo&-;rnyGp+{Ff_S -UX!z+vawbL+{$zqS*cJvr@NKD+j2$nIHqj+1Wd#`JdjjG-k3+n;9}tY@EFX&Cv)dJ8kC1sp?s61uoAo -PHP1@K0HQU^(+`@mM%Y@oSs#j^E4Qt&UP9Moc6^r3C56gI|*RZD#<-)7EHlHI}1h@3p?h(bjKVZfwgn -s%-Oll3>Y0vdZz5FrtI;S`SVj<`t4Tf&tS>meLKtg97@H|udni^d82Ys`fI`N~-Z>S}3)` -i};6&w!w2D-><=x4Qi9|YsR*_53uGqs{Owe%%))&cA2dRzTy3dYx-pMh`CCqV-pdSkOAJV}>n0&1|5Z -We;e(Xl~oHu3$dGN}?E+A8}KFrc@#4Yy+foOPhNFJy5z^?}NxrKx^624_VS2d$7s5<2UE%Q{nE!44TV -vw`2Ky<#4F`O367m;jgE7}14C1ilT8Oh2;FDwz65V_>o*E#o-KTjXHq16j~08`b*GRwC5 -a8M&!Ju}TjEGos&_VUSIi>rHrV7(O&R>z8k+heIQfm+wFPRLj+yGHliX(v;I$HvwW}nhS;mjS4S5jTY -5MJ&H*EZP+~=gG_C5?@5Lxknqy?GS+e*h%ks+1v!$?Sr=^PxUS?F@HB~%0t0KN+{+*>P{4#QUh3-OW> -oLysHjT4J#EX}&C&ECb9HMK8O`uOtGJ9qQ;T9~I+eJ$QBvl>P9*k2%*e4sRtLktqEVgbd>d5<{zY15P -1Z;Zp$v&sk(F6|e_Fj_`yVQ_>4zzG2;HH3gbO=PU%*v3)3Rdf-9K_**5Y8SAF&)f| -Q^SLWLV>e1D1B6lHK00n472@WGnVXSmgYwC9_)!G`@)Z@CPOa;rTO5E*pdBXGVVV{C@@)SBWU5M+!&9zw?bBZ9KA1+{H#Q6f@{t#Vm>FFq -kRVt(i#z?4+Bcj_e2^WlVT<1h#ugs+W5@V_0{ORR*t0-s3MDV%_zPfR*3t1%3xoh4-sRBNrgV}g8RFb(^A38{g_n|Gu&l{_PfsJ -BD+!4Ny(-OZ5l~1m66oA6ghGPfrx|woR+ -f3Iw+GCABMKm9hSvy?bq-heplMF5lF%8Z%OXW*r#swx9LFhFCpkCVVz7fSA~8Qe4W?yy@pvlk -09wa$2ZXF+EjaDDWIRSFof!5a(#-xT+s^yR`&%E)GBl*fy?AW`$uN#=n}YzhZxxw8%!(|)$eBY0zK@i -bFWSbXnD!g;MyzQ~Y}Q5?;)s9ZzW(HQSn;BKGg(HadI{XF9}-Dva~c7}6?%{oB+xHEj-KI(09t@Oo7E -Sjc)SFAKuY|-6__c5WjbvV5 -YS^Fgb0&X#>opC@NWcSwfZy<1#$pD>0KcZ4nnDbRK=58|fSTAFM8iCjhejf=?XfcQeZ7QZZ3gglN9f? -QdVDUE&d+4*LSKY%^M}FQB6(HDu~o~FMbi9ZCW1G#2t*4Dc6vx8;`*Rp;@L0d4>TsCPIVj*0)Y_rU8I?8H!?4$) -`t+BFtGy1a;IKa#bqGYPr9VLpVs%Cs;@q}Bhmdv3YoM`M=d8GJ&dv+oK@NtHQhCMtGy&YKr3;45Y~Ww -SbR8W6PKsmL`-^RVjZXfh(^WJ4f9cquF;HQ~{F{FLMfS_E^;Z$+H1+&dta?T#{_1TuBxR#`f0c{WXaW -TF8sv7b%>e(k(`%y>f9>?zv~nT1HNw59*64r3&zbx!L$rt?UwG?zK;4`Jk(gES2)SApUiIB)b}QhrUT -}~HfvXGYv%`70utbT*S(Je4-M7AY@?HIbAh35VNaQxO-@(ylYJgq7K|40wIF-^=FT?5)t`PspkzC4dCa|1R^xC$k5I2~_S=dF~l@fZmj)XIVs@$=@v5j|y?~a(rMKE -E44to?)Z1LTJq*$URauL7`be0)RRGs4NFqu<9;Ib3oQTQAfC7iqt=Fm#%LSvP`pzVa|*;^cIOmXn=mX -`)ISKg|Hq+E-gKp)|@w_&Udw%7_A8N9Xh34T*`t|pGpu*H1a5vrM4Z^hmkB}y!^hV6G^F*iMbCs%6>* -gLtBB0BL-uB15ddB@^16YO2M^z_9$m)Nl5X{jz(k$?37qGTV9j&$s%%Zo5@Z+vN=S(DiYhBW70c#FNA -xnA+k9%-X~@6zv7V^@YFSon8oQlZpxPfXu=L_nKN?BL$vz{CrEf;!GDhm4k|d6R%}JHqf2BI`sNr;L= -gyl5-ND|~iHxXy?zx=6{u(V$D=iivdC*s3GjC}osn+9hxXO19NzElxb_TcQD-np|Ol4w2 -Ipf-`PWNN;FoWwK?Vp>j@z7RDOCzJ>1i1IHGDHDeu2Zt)GAl-4+~GVZb^p4U}uw^31EONa797Ak8?c@ -xKd2Uha$b%&!R?DlpTa)lqm8y$e?Oluyq`oO89DD!P3tSLdi!UCOlMU$b -dYUye<|Ok%b=vRsvI$)#oJJu_h8tekX0Ouwo2dE8T!Bu99TKra|g=}p=-EZ6d?k_%{6%?4UN?XH}71|&`2i^g0hr1h~w;coHs~da=wfLzdz$BEB00IDV&O9(f1rqB{0I -N*j&A*a4JK|6*G4AeK3zb1krF}{oZz0z#s)x0}DFqfJOZD&<9*OWkxEH>-%-&XMFN!7V-BTpVzn@?>A -wxJqOJ1kXZyqt>42$BSZ9kM+rQj;_92}RhN$?bk+g0#*8I&<^WT;)R`+pyRA -Dl5fk#0HN3o+3q81wa!PBWdt1w4?DV?o-&=0Fp+RqS~Tpw8f%&2~_)y$~&2hK+{-TFX4qpNzCL}`e3b -2IbwyESUl5^j{)qeB|-EBt4pg&&{@^ErUl!h7V|D0|hl@eb>IuD&{2B`BBwzx`mL`fRM5u^nOPuvxQ%Z8hZqSX+5hOUVdVAkJBs&Cv2p%*_PW_7g#?;)U~-p ->3I9=qp638_3SpnYMGQ8Krhb&0WklUR%FXhaO3?WL8i3xylx_3M<~D&V^T8(iym63Cv3>f;XKP?#l|l ->5gsY=9&M5g*(#VL;u!|IN@^Kg6jT|8dv7+h($|VO|BIQRGkteS5TO@YSI&|WNsHJMyqt$m{MR6$*Z%aPpM`6UEB ->HV{>ri-#&Fe>3s2n3CLYxGq5GSTz8HcA~?A_xk$#h}5{^^apYcU0a!NyX3djIN@5oQ=ZS+>)d>rbsK -sTNL9OG}8b&nL?ghCuMi?wD#KZcL{?*^7!%|4%Em!tKfptq69V+EoNQ4OT^A=Z@k6)u(7l=}9=Hs#31 -%YYlqsbb -ndVY95B+6ZgIN|jlg@uRtovUlP(-sJ)YHj%yiCj9Dh<+&F8PguH#2rYl&OB)Qe_wF{zlE4w+h2Tt`mv -7#GeAjG3LIIq0p!y=MnJP%LyA);!UAq+1-VDa2*Nkid2sYX{@V&Im4KFXA^&g~MqvJt-eSimhuosgFQN1X|}*CnXj#(9Q55dBbF|6y>H9!bG8J&F+Q^pro<h807UFx`06{37sb^;R_nnc3Y;L5CO+!BjpB{&0Kj@dcA!Nh& -4>n_{sl%92!5=z|nX&)TuFvSok5GSP4gT0^#8}85JB^sJ{D~iFz&*pCIF}jsJ%195g=zXHUi|_Iopr! -ctP{YgYSY!9Y$2HW^^@IS90mN;>8}~QpUhO%jT@!>nH@RIgP-NL5$E7POBW3eF<a9 -ME5>5mVLP0%#M`cV10{aBc<8*^d!dM0r3K!WCkD*ZZ5Fup+ -HFZp}QIau0LB7t3|A9n!9_l)_P;;QB7Rm?8vrvd#VV!SK#J6vu7C;3SY6(&xFP{4}^vf@_p&8+P$dixjphU-VqY26Z!q9AtE%C4s@irc9mOMoNy$!h)7^zJJjlf -2*dWA`Yp8&GS(mN*`8o@8ZpmMzVgTTK>Z~hRpV~$~J8tMKI0PfdLfoM20g0Z7BTO@XPd}d2vY=5|vN5?1r4>IU~fwM -q`P9C1TV(GwG1D_tfA*pwOXhV&DY};ta0K)N~!o&AfV52|XW6gzLGbd8lte8{0d@o@XBN#)@QLJ@Q>Y3-tFirX;6J{!@BxxJj4xjc`SKG_5uQfUPI$l*8?MJR}f-Mm7i0cj;}Flx+(w)q|wP>qt -Q4SnVzzoxc4TnW=C3hz!xQ=(}c`DhP6WH+pb_&*upxd8^bRXcqxd`Nuv|{4Grl5(^SV&sOXr85;F%W$Tg3z217$X9Wwk7@BzU`1g -CmZ-_$=wHr%|~AOA^DS}Xwyd|gI2m+xHo*WrcZINrf)?r8iMTBy(giS_-kn~Uj^N=84 -gU!EA;V+9Ck)R3CqD1q0NiJ=$-o&;xSBVg0iQBF0G!!*Qv%NHf2M8)45w~+45x1S45w}}Ki>m9U@*En -;cC7II}?`9_h4tj;`x3B_?+Qj6Q=F)QH -vYhS=er-C!6-EWR7CITY*=o1ow7hi!RZah}~M*Qs_Yk?B!GXB}|IKgKl9!*yiZMR;qz#reyLO?Le9wC -V0I48qP2dm9a3wgoG;$Pg!I4+To&eqp_cDH1g8EHnwm-iHgf^PEO5NC>04en;wk=$HYGH=`lAD8Y9JA -|g6r=QI&s)x&9 -+zz%pOX_wG-364Dwun>K6Ye!C=_1VbkCRHknv;HNwt59Z2LIJ%NJtS8mkD3})koyN6b=1m`4v$AhO%> -(^4jcApUUjm}LOHgf@UO1y(wWSnn+;DpalsvZ%2X9b1~X)W~dfPe-g#*33+1;?s@lqC%&atOL0c@9ZO -%Ru!2Da*LlQ)8gL@J0MG+|VWckl;BcTtIEaLP`^fz|Cs-7aV24J39)h)=yq0iCejTP8h-KCs)QIIp(% -;xayHomb|Wd*1B3sO*oPWqz1q@^!4qN@OqPlzEhYLHZOg*NEKFuBV<7Vu9KdmeML7 -%}0OCa?#uwz6EU?@w7Uh54k*9!$WylF-ehe!16ZeVwJKp5&49;yt~WXZ9nczE3{2%GRcqMZsf>%#a2W -JIe1+wTG^iztUyO_BK+*xnS1tUMSqdZR|eUHSMyU6(UQG(H&uT5TtS3OuzpIn7wj -iQaazYR#0|s`U1{29pNGcmEj7S#%UqK6^I#VjTbT4p+^VWgZ7=C|W| -^+8vABU6+;tAla3l*P1z}SYoXT`@l#jC~WJ?^Ywe;Y1@Ooo74rX3jMT3|01a!SatgwDEP#1xS5qoBOi -KvFi|@%QiwQK%p92{UB6BA5{(Xf?p5JdCN)F+oM6s6@WNjB4~EY2<|?uL{md_!jEMiO4sDky-n3#8n{ -~%h7FrSD^%#DG=h=kW7ra+ -utZ=EXF96`miiVChTe=Lj4rIR%>=GQ++d33^ljrbG6LW+gJT-nEA0*>!;c*xfauWu{?qvcG@S_qyE;* -~-Q`9$HJU(@~*AQ4HLX2abk^b3zKRneQYA -)fSh*~5jWp9Nb=C!6fzf-SC@unT1_P~8ME;Kd@sgA$85m|QFboC?GOfhKH&jH+Z4X3!VExA4X91{Qnd -F9!gND$v`wNQ~x>u_IU{X}jk4>DJw%V?rR;H1nKqk}HIXp$_pdh6W>d4nF5%qaQP%_#b@QMdtZ~VXaP -c3p#UxjqM#^3RQ^1hTNCXnG-xlEn|V005KJaV<6^?7!pH=0zqv|7%^%&4JCBu1XC?X0znLkz8zADV@8 -arZ=OI(%-I2t>4SA# -rKFWpC{5QXI43D)N#825410S#RbZ#gh;*K7YvwLOO`iAOq?Vi%6_qRXS8#fKw27|LbrL2wwD -_;*0Ta6+05-V#dEQAZ_Ay-)WnD*#Q7{{*LF(I}wkcHQ=`%@AXP9W -L*6_=<$pA8@+Kc7zvC;<~4ZO1j -0+)f0Ys0wI7R!ryzJQaD4hDlP5U0FHgeh}I9a7``cpfBA;V$TOXV*dVpvAGiuzD$cb7IeTvgnh(M1hP -o`UsE4n^q`o;D`wv8=vW+n}DjAbSN4|h-TiQ$*;?3X>GDZZ;F*#K&)&Ns)mAJu$>$`B*r-gK-}7~Lux -*ELpcg_OmL1JBGo9iV}}C^gV+t;O;afDnq>kMl4FNlD!1b_V@8U2%!D!FHJu|0VQL&Bc~w(LE_NiU6a -g71v6Yeq-CS(>x>sy_7cihpSJO+1TSC@4*5aBm3SPQqiiX2z<6cj^n#XjT5c(xN7qCbl{y-gKA*9(?W -kVrHgYuzb(Sa!fz;VpkE%=gBEWZYYgS~j2mI(5V<`%;9SD_2ZK{6=4h~-WhEVYnO6c9Zk==B!xwX<0f -%f-;A!qf2y&ha4(e#&bm*W>(@)!4?nzEpL@L~C!8W9lC*d`7xT6AS64n>b5OMT?iYTOPGQsSi^!107e -I#38aDhJ>)*kB8Q$w|s$OK)t`6+wa81=@+A@$W*iLFiQ*`;lMF_+;;3KLl9t{l0g(H)wD)s_C$lZ&S; -V6B`cE?5W+!fcAxeJ8BNO}_HJ?Ru}ebkW@jG*+vWWHSiHr)$}@+6;j}X$hOXz9CzuPT=~%$YX~H;JA3 -_5!RSe?a@N;JU=9P3pU_Q@)go-W8SLGwP+yl#RpqkhKPigJ2Pe7=yOdOg}5i-BXuGC<9zT%MKNIFESW -n5-~bT2(Z$;?Bv-96kmwp;~qxM3mJoNPG6=2OQVE9f2Gut6+R06BGJNMJmGjx=};4)N%Pz|hWYLQpcE -9fWX!aT-=5rPVx?NOFyFgsE@D!61xrg>3Efw~#$}A8X!;7`wZc+52cZ^zt$b1M5{JGs)MsmxJM0K?n# -bRUbB~2Lw^r3OMUR>9wU1K|4>{C>YN@1cVeqO}?h$BMF^#!JH?J07V7Ib4R%ET_Nbzv15rSA$$lW_UZ -D{9AI2=r<164vT=X;aGeH}UO6N+>MWB`h>feFj`>En^P+vmsOlXm!t=s#JlCZ*TXZWJ_q*1m8=k!89D -rZMrgCZT}iV55t{CLQOM$vodQ -7QfH1Sr@qL>wt-US>8g6OLrpzi*JJxz5F)l1PE~x^hm(vRZyD)zTJo6Wb+Qqm*yS(Qm_Yt2}PtCEQNf -QG{p&&Mo@%Q6mY+`n}jkE*6Ny-yNk|+`kWmcPzjkqYu6_;R}Uq^^(D>3Ue}DRPDJ9H)ez;1AsIN~v@i -+2-c?m6J*-2K??4Ja8?$3cMr=XQ%mo&CBxEH;q6ZnK6>Z);+}}#Dr9c)*64B9`Pf%DEgar~(2dY8@FF --6#O33_+lMhQ?GRRML@yZM_k~4(Y0~1G>)DuWoc1B1P*X~+H4A5r08w%`Da56Va(#x~B7@P3Rv -kc~g6{_0t*dwn|j3@qSv2s2I$n}leh-F%AKM+`c5F -!emK+{#LeEe6oBiGYk`k&0Ij~Pjel#{CF_k_8yJkyg4&qHpphSsj1*MhU8xe7B! -jKF9^0qT2~+Ux_K_qGtdfLgm@UckBs+?ZCb%Nzu!0^D3W~f2*PG%p6#pj4Psf*qkt2fX>X`%Zr$W%V)R+;N@JFJib -@OZ*Zll-GnG4JsJDf14xJ5D<9GT6!Ta8}fL>vKZc1%8%DwCiwks|?|b)b~`XrO$vc_`p?HbV>~XU@hsA&dF -l$`UFt|vah;4!@GqUl>hS_vtF%Swp-2xwfQzky|1P$ -Wawyvh}YxhO4>&{#<61kQGi}nAy!>*a)*QHm4nf|sVJ$D)~R!nIs*JiH#y8!WHAPZocDDY#3%p@q2_b -29nGk6HF%yTya%H;hC!$c-7MHt)49}*po>TuwIkm6I}V;}-tTBHwIXPuiABcM22aLQo17cpcwz4A3?I -Nz6`ipEF-{D+wFp+HuR!Z#G$wcAGu@D?!*8P6a%3A*}ReXoaPe;8MJ2I%P12;2BQuoE|fr(+#G -`OHqbKrW~V?*$xfhD&&?^W~^U67s4<-phH-sSm!=%X$}G99nCR;d0E8vRi5O+Ld%0(f{I0S0R-Rt9#b -{E@tP2r*`$ujjn@~#2vxwTLuK9_HM(@p2=n?au-+bdtmPqIu2L0|}`lPfS1s -2!oreARw_A|TML1B;gQJRH&#D)<73p+MX?5qyqEP?2Hj5rR?{Mhw1o!|9FQkiqmBrar;x8Lfc9bO&%j -a7xoe=BR?p1?rG6@^LH3Var|ie65CRmsYO5d<9E^eOSJ>AEgBsTXbU`VcR)kINd_`2udL}pTTt5+?O{ -*@^n$K%A#0v$nXsT=o4Ls4CZJ*#-igcpv=Y#z|#bWQ8hw5Ld7`O@j-sgAK1dhunJBm93!jW{Nd0ce2o -fD#SZOaA{%BQ;LtqWO05tg8)RXlXr9P&#Ghb*vQFUHR|sy%Dq}T7wmsyS{Zk=x@E^)DDq0`3+bBUH}eVDl)H1OR+zL+@auOn1HeER)+3S35^*Nl+&jO%yt$DFfyTP! -eA~ymcN|qnVPu|{L~!!c#714a<)U!>!79ODjk|VtiVs@g?rQ{n -O(_sf@pqF*qQ29sE&a~n#4#f~hZ6x~MOqpoI)@XUz>33(i9l^}NEK>}-&q1WAT_~uazYD!xf#?dKA$p -d<^Z-Y9uFBda{xyTY{amc1Bl^gC@1L=Sj?o55n|+NusEUbh{0lx9TH|mr}0PrRA9Ifu1(%eB}LlE8Os -vl8S68gIOdwfjP*&etlUJ2;Q4iAqpsajw&&%%gS&RKF6JcG$9V_;>MO&CFok|-c{Hi -SvU_5`!xOB^+UMSOXy0?urxT6C5W{Rrz?;UVJ@x+T9`53sc@9s?mZx(Ln)|IVlsU$ySz5D?H1ZjE`U`u{9&EA -H9V#>aa6RFb_{o9r~EtscSJr23*(A}cg#d?U7DwJ43M$AS|8^M6!1wTxIr@M-56Ml){V~lX^py+G^ri -3E91&tCR76c*-`9uYt^(t;7goB1SR4H!LRp9;4r-IQcdTQgYt0C!w=0m{%!OJ -r{37h6LxQ{qcTDNg2s=0i1QABy(^rzxOu=Tx2BUzGf-U5y7H$x<&|Vbuk)Ja?!WqPMDVjRj1r$kL*w%OCSyuVkq(Uao=lphN2KPVWWdBDvpB*oJC@bVopNJoItFax_!b? -;dE@%f9ErEZTc7xZoJH2~F~K==XUt&pnCb}mC#AJ7=Mqid=$H_avc6;&NCb~2qr_-}Wj-(*AS7IhGaF -LLj)lYgmS3}j_Q}_7aSUIIW1%sF>G;PiHl;8iBo8F=`V5}i;kf=f>srL48>#5J>+~FLJAozsg+tS)@gw5uv_z)j{(2dSq7NPqgqa0BW8 -IWWm4u3ePx*N6aM7(3`P)XlC;J!F7kj;k<3VA^cd;A+t!A3!O*$QwvSA~6 -ufeyE8;+JUo#WQntipy2E;?Ne^a<^f?+a8?q%8y(lnYx0LDolZhC|iGk$I))>K{j^wwlg3oGV-D~5=mUo1jz2&+##`rieB^;m%bomss!^IdyTeA>cl_AJ5ggV#cC+ZA#5?-3qM2HEv8 -d!2a8U^wrKgeToy9xxIEGQ*JHGwqLACBWV>Kld?|AUBy1P_tY;axVE)!iqP4e5XX5qN&3?+mu4x~JsR -os=5t3x2fuwgjG*VNGo>vQi$BKN!{2_$sp0MiD+Xx6=)mPddSwHcdx^L6<#fo2_;t$#))_x$k@q($C$ -#@1-&eMj;}5AVgEhrq^3S}<&81HZ`B7+hNTA|rL!?C>{(k$w4vA9Kb1g)d=P;IL|dMed6Tpc&bGv89F -vc;gIVTAwN&;Da1rI`T9__@yIH$m7<0DXfo#+b_2Xfpzcx>(L|S%&GljxDJ!zr7|6!ufLkx`%~{ft1| -t&entQ4)vME{8U+gK4)ptg9rv4hPhJ8xXz0u%017s2=msZ%jT(uYqe%rjZ0XJb8#gc$MOLs$3+n@R)W -WFU+y0VV&RT6E*sGTAm4QwB4Qz^br-N1o$AB66ftTs1g -+caHBR{k|HSz<`(^h^aGfKf)`I(zo3f9W+l-iiK6N2h9@`LQBMt&IcsgWPG+sbcBJRA8z52mkL*m14H -MS2w`m-m|xiu?F9^$P`2>fUeEAL^}ug9i9%qm*A@hApO0j`F3a4;DrZ=qw3pz+nr}mmX@+xNRj}>$#* -LlLqoZ`SjtL+8FESK94GXz2zmdyvX$Hyvpl;`ZsjtZ{Xn9=RJluZ2Vf+zvX|TK+EQ@zdn2P=+Pz%7tv -kSauE5d(Wf`hdsokTi!|$9J@4K0qNJC2>oC`{$zMc8xXzzGQ$^c?e|x+tip{s*d~L2SbvOHEz`mvYiy;HC7F48>zL2U)qKJe-1Jj|NEpM6^k>+$1{UX+JH?{*a?J -+;f}`DKl1*9k0@Z}7q^fMA+B9wd_OZ(R3D55QaHB6PJT-qc -ZCB*~7f?$B1QY-O00;mj6qrt5)^6wxL;wJ@&;bA=0001RX>c!Jc4cm4Z*nhabZu-kY-wUIXmo9CHE>~ -ab7gWaaCz;0YjfK;vgr5x3XWWRBcHXDWHPh6;}hqeB$Legp2?$P@1x4cm8p~G~ak^NRMVYg3ZoVqBYnH}8v)rr%rP<{&P5`QCbgVuaUxo#fW#5MRbrZtHvW(@J -#}nvk8Kz~`-{FG*KE)!Ouvb@M9!>y7FzT?F#PQ!23zmQVW42=Xfhfi%ahSYL*qi~3gW!sVQJl`|2a_l -)!}@2g|0W<0P#l=@0O2hG+Ukm>1Q@_6Rjorm -#L@sK$9B_<`cxICaOZPQLl>@psYX@eEi*gTq~{xQGIJJBoIWd -vgjgWlMME@EUzV#;dGgj=pmK^Jq*6*1z9viF-5$>4+6WmNZIP*Vu&yfcm?eHL4ZO;A)cV*qSV9B6zC? -Do7_99QT+tct?P|Jz?v6BqdI=#Da>n3vd4rCtJ()#ni{_mV>#73t$ykjj{-UL8qofOMy0A(XIkISp?> -v1t0X21do=b(l{(KA_F?w;d?*COc}2~HDj`ZmjZMG%jH@1xu!!@gBX)QWy>Lv`KmN283eP&U_VK4tNUHm8*jQMC7C3 -csH2t9N=Evs5!#~=+*8t~bLh}(vzb_sKJ)v4Uw{#!B5LLzb*#BqhOH4b0E1WP#&e3{AJGnd=Zv{M$}U3GHw!-1)J -4-BomFaU@R+Slez@cfJ=gwYE5a1Njk9s>j_C(G9GiA%n82KAh5*RX1<$7!xgGOeytuI1rHYqAP1{F+_ -cFGg00blHNox$98#FTN{rUXnQ`d+sjakEH|)s9&jQ4vCZQ1Dm0&m%J{w#zV6p74un!N;9aR8-z&A=PB -PPqXc4;9VQ%P9$NUJJyXrQG*y0k`d@QXD_a^+zZ7bt8T!M?|)K+VzUCd^}eG(rK-b9gA8#vzW)Smj~C -_X?7H59^AFNt@Se*v!$aY4S6W3{Zn0sTGxbX)mS -SKjMNd%CTX=*%8QMsJKO3*(d97wV7r0HgX7>!Qua6$N!h40)zpyhtgcc0Q?;B8myTiqsZ@21&hM?QLP -bs=EI5r9~%0UP*n&|#B>s5}nfvp1#f!Kpq!@4@Z-12QRu{&qEPdB*~-^%RVIvbJ(a?VBJPl8`8-U3JwybhVe47s?1qcDk{7FQ(WX+Wt!r;VBLlUyE+cqgQ#)!jRMlx3ftG -m=NPEX6xLP0u&Yw#9IvYJXujH-9TUuq!p%}p5)oe+9tgtI+K<$h-R0}{itOhW$vM2~T8wj$nS?GA-Ba ->9@_Bg(QS0#r^6DaZw&JXHVQFk5EV~`FC;BCMBy1#FQs#1s*J9g1c3}BeBbZDQ(eH_?hb=&R0d$q~b@ -PGw{%cQK|wm{?EXyu+tgZs|yhXWhRsnI!4YbD`nJsTj&49;mS!7`ra+0U?WVM1WfoF(hU749{-sAuUs -%&%bw-ESM1pecYfG}z~Xm8tHxgB!ZgZrj`22i#aVo}z_5uzpC^QH(7XH?u+ehy`U>z7o@8SkSgX>js -#9T~KFsleR_uUX3ck$_7pH+PxZ7MV?KjmsjuAq$)UV(4?rYHfh>!+zeZhT+Rl#I$kANLAr!kQ6we5 -e`6R>;;E}W{DcJ>Ra7H~*l>AgY9*#2LL16VQ|PW#a=q1c%#z3u%L(LACCWPBNVlf{2ilbzK^6F^11pS ->A`v&SVo5UMK1U@o06)@W1`VJSun~9xBNI^+!ulzlfz%EFzholhKwnU&P$VNeb(qw~7AOhShW3~FvM9 -+7D8X|ZN*ba1%yc6gHYY)hgW!0|quQo1iw=0bssZ7UBxBBjK{~TAj}oMvYzpgk9lU)17KewHfE=wpNy -xW#*zT8;D~uqC(OHQ8WWyB6mFKaEMd?a7L>xn}(u_Z<+<^ph8vH+ysZaPDG(2&4X^^D~Ja;$;e(t~nX -elw?CXNa}JBpyzW)P^f|nc|i-0v5H -b!fo+WYl1mfP#WFUZGIR-<~4UU*gXOXc -k6YWu{qHc9fZfB;1I8iXUc~EScrmav=(3$#S0lKo86Yu@$93^L^cCTUY8)+ulk)J1_A@{xVxY?kZHV{i951bXCaH9m=mps7VxdL~s4vNp9vL=&t;xsd?RvjmR>qGYYR#-+>2(W~ -z2Maqn_LrSKtPUSv1g%BT3ltzB;tWkSF}Tm<>rvy_kxLO)fI!MexOxZuB!uuxDEt;9Ee%8>^F97G+Qb -;M$jIX>VC4X+B`1J22odt(Rua0zw -7N5H5Kv%tszwdW8KRk2(ig2&%p~eevkyi+`NH{^u!4U#RAU$qYDpc~wh7Vu}@boM1#vqz -(>iuy6F9rj&;%$q*&ee2Sh;1u!~PBwR~m(q>_2jxeWQfphx607J7F)Xxu1&xw8hGz!2Tq9^3RfAOQ5< -2jpW&>|fGF{5P_Js`-c2m%Xt~i0HDiBJz7qlW}`0wy0 -Oi%^7W@{ep3ttWbde|QBTZ_mt%vYIg9K|X}eiaE?b=yA#amWGV0S)Nj#RX1QUKVJ?9uCC72IM*;`Iw- -9to*pSBBf~`ivVYDzBglPt8S#z4CN562^=cuI^%-!Lwxe^{QTEObsm0e2TNK{<4vV^2%yB+)l;+XKGt -qY2?BpVwD{aq(GbW=SMtPjV|i2)(CsL&wZcv97Z-Fk1ZHtVXxjj2kdl8@#I7ZPL1;hK=_ET%8#{*0iP -{s8C@z*#y(Iwecv~G810h^J)?R(Rz*h7KJ*}uUz^vt1ngO_l>ni81c%Qvg8Gf3Gc;Zk$t3TAnOYHIhx -uoXo20r%^c_0Uatn7*<3p_u=t&rR}h(<3F{S#Jf6Vx8TVAKeI?YM~Lv=t|Ke(Gx9vh7qBv4w6es|qMb -I`oDVN0p(g5q8Ol@-8cnGXTeUfVMpQMT5faSO^nr9+zlbiwgrJnM-&m+<1&`1-UlxRMQPScXf4NU -l{TvZY_Hmwz;+gxL8p-rJV|{66f3!_t#OAPTZp0LA`XYH2VP{E05!0C4SV&sIUiZ@;%^~A3oqa3jJ>! -o9?{|>0rlZT-KZONvHg#9FGUz>q|)=#PTwUC&y7;NIo%-psWiZI<=sDViXkHLtRchFr&aQe1^LBm0a2 -AJgfSngay08?5ZxQWs!4KFA#KinJvr1gw4Xqdc;q9*-RSly#YgSQrpHLMxl1u5yf01SrsE}lpv?n5pY -yN!jV~6q0*B4s+?VD98s{$NLE%eC?ixV9<0ukbw;W-6?M%iZVv~4eDtV@lX;lO$)iV68IiXUi95J?oI -iOIJo)asKRN6B*)j)%=XCRwmB2w4NtS~;j2xl -YFuWn|2oyQeJotPku%|m8>C@ef^l6WgLd9YdE->lUd_G25VKMGQSnm2_CHR5K9_B1gk~PVDAc$v^7{k -2!ZW-NRXt$3*+k3KOcsWbLPrh(*_I_GYfXB34g*g)tvl8uMTxR;y`0?Q(MnpdT)8i+Hhqai3N-eehO` -oPLEqo(d_%q04kGE)Hv7Vt$W{3t7GadkbGOAX+>?fTS%QWDNgA|5BqvovqS9lY8lA{l#Ui7_sI#Kt06 -otPXJ$^d+`kUT$K{|=@aO%NxniW08nnuM9suY{`5-2W^Aqkt*CG9Bo-O=>=Xf@1Z)X#zRV21wm_|H#z -4_yNS`p!3Bd&nRah}BbXg37cSevWo*|2k(eyrzE|=wKmX#w+%2Et034SyznCIQh;9R4t9$ui{9 -VL<;mEp{Xfhvaz&GUpi9cZUJq4zLBKD~E?wEKno4=tN+Mrd`aCGKc>SuGX2uVqiV;(2sIp$)2;-O4pK -#b*97%gP}-^J7*WY90<`ew`|0f8R1Z|D}%+k;>BF3o^{d*>^^|vUfFbYQVlT*U~QBVBRdz6DwP>wEAR -6KZmmEy==tx?q&p?ysFWE;o==u!MYT-ErWLPcizv>Rj~%awyX%1De);#r4%5ZV@07>xWGEK?Iu+vn|u7ba|it=P1}DNNr;bc;uR -Z6~cO`^$0q@3Oa)afzqK^wOvJ&{iBn?YLU6!mml_D-`rmi4Cy++x12!fqT3cTR3*P%0@^w#V7f@&?JC~My+UzLHW- -hgbLtfU0aUQx;|ji)nKW%*V!JIglCo4O@;CJe;!M57lixf;m>GGae1;~W1;6M`U?+fr(`Nu;p7_cdnCS>tTA7NI8NNiPhZ1CJ{evDI)P^ef8*C{iu5`M=oq*q6|GO5`h*l!WSp6j*myha=~zFgH@ -Ja7h@|3O80-HUDP?2=zF=w6b>4#$Rw6y-sEtwET^Ntm~yTBR0n-D@C_^su@iO(*vO^CgQwMx>0Tp#_Ypj)j%*QaRvD5;;wV|vJn`<^b#eUI*>~Pny -Maz^tIpokZG!9Sl3KaNbmq5lG}OGpJ}Pgi{qLeNqyJUL25u@Bdi`r*C8kS(gIQJve<%jQ9~_xDe33|6yUjpiDg?KP%uOv -1P0Kl^K5sQA$cDX~*~(Pgtu6Z&BZXYE{|3g2p-Yt~{T;KObM4#1Na3N&*A}kIUSUE}@o#{*XIi^ya^b -LA4KAd-D}_Nv?;hf<8R%_>z-&5-Q_?I)^%U(^jqmirwyM~i&zYI6Z5sA2f=f`8-Vs7t9I)Q5j2@UVfo -^f&c-JNme-lKX@%kEDJfu;N%}R;c@!YO@i8bww$Eik-UESCXvFhyYjsz!#$JWAAmCAKj0+ijoBw6$qJ -6HEmCff^Mg-Iea4)gpQ)U>!GmI6k;a_xZ?@ij!bnl)?U+zTlg{~JhhGAKZo$>5o_aFvMAs321kZsh)H -l^Ml4wwPjsJPC!k=d9Cf^d`^dE)U6Fd4L+Vy+z64&>p|xFmrl+?EarSl_r1p>=?~q6;JM~UB9Vkb*+l -_HvzS8c_O8vwd;}#?A|QZ-lr-dsp!$X9@am-A$=Sy=}#en(4rqhsdke-z+ -&SenehS!+6yv(akt#^X!HV5scmRZshIUfj{)_MDuMdj{nYZ*c-tbFCK|I>PF~Dd$hOUiDE~1H!COvI7$Ve45&!fBmK_}%h$mq4}V_kSGC`+* -t!>-;AJH|8y9s>3JF(SXs{sFYI3ON#`^YMmVU_DJ+OWD2xqE9TdNRTDXM+N*$*5+-1hvrMEfv`a?A^h -mn!FFJmDh`$lY#?}HX41m4=wzsM -OUvjW|o4XZdTl^^*l`;=$-yfNMI%-&WK({vDBM@n)G39fSk#vXsD;RDIbPF5)RHov2N-+Gt-pv@cD=JuiH@EK8y(eWlV<$ -Ff^2622IK1bAMys{+_biUuu@CfycT~|NXUlxTxhm`+*Uc4z1y87ub)*zfVvh6}AKI-5jYp4;1@U7*nn?EyOrAjVo14OGS+b7n+nhCKpV-k_k>IH9NZ7IW -hGd2@AqTzqs?$*L^|zVS`Nto+_JK)hDDQ5rAUu@|SCjm^>AIA~kh`zCy^Qm>Ja6F6|Hrs9f~1G>KDK; -D#cKsUA=$jepi74znpK(0zaLc8CQ(yAaN?DH-$NRb>Ud}364Qp|QhG+DnO=PhPWp!MLbL-(7ou5D=qy$Ycafl-%s(i`rRXhaaA~f78-j|DkzIToA`J;J^7Kmt(eM1N&yo=-DfYX8Ac}jv -C7o3#YA`q5GpRl9v^K9{st&%uxk1s#T=B$kI;-ewY?VnA9XCO#CKM0-)x#KxM;P6ap -F3$s!pkP_7%MrbteuhCDJaC_<+13k}x$KW9%48>f%(c^i+yd$CfGQmh+~rxFFj|g~UzJ`0((O!$) -<>(Y{thD-dju2oaf|XT)No!SIVIwT=qBSK+2)Be*`b|TNlu8DAn-HGO_EXX#S}xaU(MNaipMXW0zaEy -6C+UMaaGKd?yF+japt@(#!4f;Q5&1kN##`9j8^W5E^JpLRit3K@WVX4X{Riyg;=`}&A``Q_W)J3gs}h -WDo!E?2G2~fA3rOoz&fRluiQDh+?}%o=IVuad_=A*;)griJWdW$=Y-IGoSsZzP~5b16Xr1pnMcxY=i0 -1<^{E+@u&_oUcwE$~?;FyA_eG7xHK{%UYnzDTiW1`Baj>)dVi08|5nQ!VDmMowM9ZdEO1520=LS>Sb6 -WM{3eG&uN$TuKJM89Rk9t{9Vd-A$x8Z_rlTBinfiwJb-mdne2?9%UOGFfPmye9{zuJ3(NKtxaT%G2$E -9C43Pu9D*y!|q|+O~iqhHTZtpg<8ndTvDL=uLX68pRVARM&M_-)^+y_h1Par^`jcdk;%04rNxtwyX|8 -)1;#LXN2zrslLsYcsqQxFM=(LRYU9c+lq|3_)Y98zGv2}Ae0mRqH!~h^xo~ZZb?$L6&W6@-R)g%5zG3 -tb%=zUkm`$;sR*a+#cPWbqnZ_`T0aN}4HPTTw!@vsgje)SU5%e#1_b1tkQvC82texJF6^7mza~+IHh! -#++O3jq62`3n?$@x(FVWSBF5if=Lt9&ftS-7XqE;sA77bOsyM+O2x749lu1Rk2&GIJie$h#vyt3}-k! -$Jc`?=+aA&#wCSGf$iWJOu<>(R?Rp3N}rj(P$3PHpX*Q3j7i+;ms;6p!v|hU-WiWsb$e4QE-7up@7_` -l2hT&~Dr)JuEI=_V$)|(mOJ@d!^>3&R{WE(hx5|7~Un_IV -wv&!Ef2T$#}vq_l5Khu5Zfw|UklAxjaqV$<0Ua~nY -0)jp*c6F=*F`&pQO6y#(Fo)gnl3Wx(qT}E-`Mvn_;F_&hSsoQY!%i$I(QAz+f8qPMFuR_@cc8Jl0<7$ -SkK|DF&R8MtG~ysdFV;=Fj7s)xaVHT=wB*@V>NaMm4?OF%s0HLDVl{Kvgyo6@eY;v&_1D|sxULbpv=Y -9|Zh4iv8Yiyh+9u?|!_SwrIG;o<35&OkJ8*T*TLhw*mK|pPF%D98Sble%YunMfTCT+crl(eE>$!yQ?) -YFJjsAUby%$U~gnz~p);nRqX{=blppR;1xrx*iTEm&Wk5|`ZQ0{qLzzIy0rgVKDx)iH))8H1k9E|#Fi7qJg4iGP(+->t+L0Mc-!2!1@{?9^a}#1EouMb26_@mvK+W{N%BS|r6}@?6P|+vTRUH8U&vA>7k8C?Axvp|??AvW11MXCqK -WyCaK-bA#w?sdewv3Xe05X04a}C@yH0}D>Yx1wCI(rskjsh~(pVuL$Ae%3zzeSp5)fUR$@glKU;H)QR -`#KAD0`aVt`I#Nzr!pPt%LtSw`vBL;pCe9QkW%$BxK;mrI2_j4K9vaOUf%otBELN-^08QE*80?WEC8t -_Q-jTYpq)i$B_WAwavkgb8CI^k0h1rvCOg&3-e^{d$OTzfIHflJBH-jl7(bD&O0`sDxP$QhW1l9;GGa$9yjdV%d#2hla3=xUIIgp>_ZhQ$&vCmC4x -%`O*+IO{>a|Hg2&64;xgX!cPg88XKYQ|>Lr1CfM1{ZQHfniqbd^*lMK2v{&=xo=&+0jLTrX6~zcQs5f1K$+9o8>u2;y#qQ5nywE5p)6L(0c8mb7}BU$alsC(q4C&T^fwSVT#2Z6@) -WN{?VuPp>P<~MZqGx-*45d)O%IV#G~0GqDTd9GPLq{8UqY*F)M$bD*}lsTvlkrGY~>{Vr&&+{F9~>lR -d@_+nwyLPfHG5u1fr0h4R;3&B)YD^uW7TDd|C48_3pp8=QM`BD{hGR?E -OvheInr!iSgB$Z8ft+pa5T(*mQ~gbRHxiMbWkyo?3YY=?mOBz -rc$7p!8c+GN^5AhMu|6t`A#&mZt~nZQUfDJ=o5#5!QK78omdR|4sXQB3}o+^<^)^(c+hYDr6G8`Ah$X>NL=$OKCT6;3XTEf!h9h9|R?T&XX?k1jHN2F^K4ia3SXk= -JW}eyZ-mrFvY&f=(7>~fcV6}mUCRYjv8fSGhMkMcQq18NnMwQR)aD|7ip{DiAw}l@ccaf{^B!fklE}J -}?qmPr&_)o1vIO@eA?FlEf=9-H{G*^?ZL9{K+ZLquuWx*evL?ycU7whXuf(}={w#M`Wd+gx(d%;IWfv -X&oqzq7<4R?sa -+_0SEzMP7H_9-=HH=tqj(v1Di4AjAo@7(y!iw(R!;wrtT8c`_kUsYoF>X_>~_|9dqJjKG -%N9@!CApy5s0K6lAwE3~Z?SYT9<6$dC=&s|!yOKu*h<5eq%N>^zg=6_d1s#78_Us*?5SvNFwClOOH)t -V}bSw>w)!kMNzY<3BsP?eEAxb|&$)40625Twn!1tbnQHYl8GkK4*O7npISciXMpTi*!YsJ+dF;QFQ -Y9MTEDuzq*f75BNS&}4g^H_Nr(x9Z%eB?Tg#xvvZL+#&?&cJLSH=HPQ%K+DM$xj_-(YBj}y4)^KZE^a -UG4x?Nju*sa}G1nXg(nXLGh86vRjKUvZegES0#UqjTg-&=3f_HFac#pH*v -{B)j$CeB&sia&wD7`7T5_bDCkY^DIh}H2c$OyX;EHq@z|+)#6J?Vn$zbSeX2B}UuZvCg=3AmDg~y6yA -a*ueMM17sD>VudH;e*fAxAtIlKaj^ILt?TaXKO;{(drR3&*6Rcn1a~cxJs5zCLZPl^1Di>{aUH=z1OT -+*Qd^-d1$zG?nZd06u1`A6yL%=sI6}$e%DG?mvU9MOMbZ5=DqchpoKbE>9>-fTB -d1F5mkE1D%G_3>@Iu3KV*!C7AFDQ;xioU^B^uCQh-i%4=IIasZ%Kg3_2!ina*~h&+`Pl<8n`@$e2xQ? -E0Kw^1gVr|7G(nLV&h++s-)mk_3#@W+;tY)A*`s_RJo*MW|+7$8c>4Li%VGzX_yt;6u@u+=!s?suiPL -MlxFt2E2)z(m_-O&W93hikvDPDd)B)vUvmG_dIVAXN>c37Eiuv)#%>j*_`m!l{39YGe3^+#)EHjEm=o -}NY*7?JNJ>D-@?*AJ!3nmR;dyl;}^UB&JnQ7A*gv8ox|uFL1V-Xi>fLCx$LU$TnVQ9e4jC@%RYII{gBE{gy$7L3Hd-NPG@MuF1?`nc;mZ8qhEGLrYQd_2V< -#az?_2ZcDyeo`^2)9oX70lkFdme|E00LGbV-I4D8H49AAaf+gvX3dcJk09)JQj%$aj)px+9f_2f}a=E -=0NRvv9{6_e855dg~qCz3{z}eRU&#Md%ydWLcDDzMhlMAf}nDz_&4rkfvBOHcbmG8FiHpP!Qo=CJN?F -ZkzgqJQjTupD07HrNFbjAa1k4U;NdPS -?gB#U$5+LE7FSLhC!Y?x83uA9WZrhx>X&#l&>AW^g6O99CTuqT$H_4}%W$nz+8K%jyxH8N!M)y!W!^B -2|@xNdL9-d*Uk4m&tbDG$iY$jd{(=~@t1@jxJ;8c*lG7Y -B7BJn}pGv&dPGl^MkIKOuwD78xVnW7EZ33sV6;p#bJw&8Y*D#uapPxAI))A{`vbQw*+CU+pU{jc=~Q{ -V{zMrZr{^B>~LhZWoEZXnpOvHx68LiJ(w*3#VACS+C3G;x^ApJ4|n-z!d4x4E9%XvN&3Ta)4Uy7AFWHx+BSx5gU}wB4Th#_Mc}wWhzb%vij%$9Lc9?VEOutkXyB^!ok-4V3`q;wx9lNDGA^%=tn7JHtRvp9 -7caKnxMSM_I(ewXRqO3f9x*DGdpx{2s4^*A+P^j%=~koMku>cQEz~38#z$5W8wi%~f7f2u*760;1Zy& -mcIU2rJfBSjQww$7W6;wJ=_icZvAKcZlV&!7hxU@q1f4I48Z}oO%3!x}!0EAu!r#mZC%W29H;?8WCx) -!{RJ^ZxJHxJdnyITccJR+}Hm -JXS$a{~wMM+(ufl{2y-P+tPefORAc7I=NtNL%Wx9d|decJZ5_;&{Xw63~42yq9d=n8JHHlFS5L=%8et -*w#&EuUVIO~%%0i4$*4|Kb@^-zCd&XUvP!;6=K|e6e8>WNC1fts*q6T4k-NH=y8`u4_~`M+bX(?d=Bw9D6g$E;E2vd%=@YpPLkEhY4;kbNK2tYxNo{c -rv`clE8ruO$vD-7TNDQ^LZWkd7i_Q!3x&p`d%KoCw_T>s3^YcfzUXB}xjXgLTS~fz+9_^oI}UjSh`&+ -&^o|cj-FuzWqOmKy#;vdSPzJ58Zo8`Ld3lWv5EC-prv7NCfmu;Yy1nvk*sP-M?6#7sn_M?Cxh|cTZZp -g7vh^!${WessFX1>>rDs?TXVHod7l`ca_)Yb7~rc%zDqkdv~e=(prl?ehBu?yG0jS@Zfvm>DK%2-wh>C7($ctu~MDv6_{83UB`0OW#xPFc&zyNs59}!B}m?7n&MsZc->IY -db{F%w-;#6Mo-t4SKy?6J>Wgowr>psYS8N~DAk*KuQ<`(jsMDQtB(h3yLHbaCIm~j$$HAM+8#&xRKDa -XfZuZLnTcXwr_nCa+hDT2k$YRgK)q(FeYSRBfo?24w+;GDma}-4QVd_}utk%1CtFH&9P@@x^Xz8^JA6 -4j8(boTx{PP^C&?z)KP|J8n49Enm;PA|2NQ-jukhH3h@eEo0i*ba{!my&$&v@_PTYSxL*wqyy;sr=jglGKzA#}u?DRrg{2rP}T%9OpNubnjrJ1AMe%| -s29<}F-ECu4=V`aI7As(N~$9|9sm}dn7{q(4r-ek!Q(+9zy`Hmxsr_&{@f_QdCoQQyY&maCMA9_G3s? -{ae(KZqwU@kwWWSfMjPf5-H-v&Nj|vc_Bb>Q@7;3rekbw99wa%<{z*EY8_lRIPt^*3G6< -5L9@*_xyWjodsS1r%)kX28&Ssq3)FcqxHpZp-7bkxUUVWQUOPkifRe1P1W@H_ -2Izv`xf+JVZI2|N>_3KLCLLN9)#l|Iv6Ixg(ly4GneCS1|nLCO!aAUAV&Ib!%_%d!lbY55G*4qeH6nTnUQP(FDxe3}M1+wo=T_}4VrxE)EP!eb2n*CrDJZaSH#n>xvTk9Ru-4W>io+ -q!UU;MO%k$d;tFFc$d8m06SagjbO<=Ie_kb_ISmIoOdn-@XKaQ?!4ZG|JPwt6Uc>+xXZjcrlujjA0Nx -V6@`g_XD5?558|+X_Jn!3lAXL-mO^fLLp#Y;{3%XS>T&e(VAL_3{}V!3wdycQ2EwcJu0NmG0yY-Le(i -(Sf2xoGzOKa-Ty`anYQ?&Z}JA*pf**Bz)EA{$dLB-3w02Y(et -?8<_TL0VJ^DovVAnDQBe=0n4J`l1;)TuphcN7b9LXcogsq9Xv!9x$QGV#`8c3;|4^!DGkO>LMBwesA; -<$j(-AZVpg0 -mebr`-8)~PdNtd0as?2&{iR2HIhaIkRRywP=b6BK@C*fgZ=u39mXns36oy=sfBT8x49jp$>=w*` -Pxq3$l;k4Br@HVtTn8~(~P%b)_5nL-yf;K13?^Cg`Uo?--hgPt7nU<0e`;JMZVj(-dpPyC?{(3TbkTp -@8ISqYvXd=e5sOzI&C{Y=HM~m+ub428H4PB3psoh6`KeQo`YbL*1Tju(MqH@F2kh*0zNH!1 ->s(c+22it$;*l8sCnyI1SGM1pO%&(D2E&=}>;chC+aMSo58&UotXF{7~6-)*w}*jqQh*uu`~ZCi}8$r -9h(Y65CQpx$x*X{Wwckv}MIm&9Tj|IIe#+3%(NPy0Mt}ZYh){%X#_(Pm_TK>)(#1tD))lj%x)mZ{?wKDVN?PUhr -|KCPmj?pNJd~dL}|kkz)l{+LLAl{WvMru$(Y8r&)|tSHg6-Qtdl5eSsz{rDRj6FblshTX%NBqVOKNM3 -=f64}hb(;(yKK`0IlQ59&jS7oid4d7vEw5UdD8KZ*-pgAAod!A;Co6wb|g$3qMUd3cVY-PIcn5W&HaD -+5%`>oh>n!uvd8IRgP`QVum(;~6W5*9XD%{y}i#j+j$F7~c;yZtD1c(asnTI$}(^z>0aA8d)N+<@JIc -4LGL;;i<;i5eBo_c`dSS5lnhS2Ll8y0S9$`v`-_58Vkz1qu`fcH7+~Aen@tG3g3$}d~%M*b~z*G-R0r --hYBpci&_lrq1sa<4lW^osCSyzpC*haXyn}-3Hn!jWD^Pk8QC -nG#-KLw$mUnU!_iks>O{aElvlDx0h=e566v+~#Y;|Y<`#lE$Nq~eX*}F5l@=%t@gY(9D0MI;7S0o7LW -l`oV2nb(gXc$$nzneZ@;SP=7qI!5)jC*ktVB -K;OyXqa1-qLP6@=3oZa*!16rJN91u8hfA90Y@V|$rXf=ggdRK&(?k?BDQX1klt-5_TQRsdBC|A&8BN| -6Mb2j+2iy`FV0i~PX$W-0HavM4(SkOZ;GGv75dce<`imZ1OPMqFK;wHrJ0d|@@JcH%WGv_-Uh-}=fQg -WzPJ-Xdv|u%tR~ZYDLqVp*^TxlWJn>s>56RcWyYU9o^NTyrH6DiM48&SxJZ8T4#e)G`$pEffZ`eljfh -}mbc^aYvvis%TJidAb*9lywaD4;Uw{X3N>pQsq4A+~R;wJI-#WsU0yvgC6!8N~mJOTVCfd2&Wp8)<7z -<=_3UwkLP#R+h6@&>N&;i7N>jgt_r2ri&8qRagL#^h`w>|ao{$*AfnQC&F~pjc@Q1^R))=ldoW=zVsRhxT%MNM5hyr${HkB(P -1n~h-M2~u%9W~Lh|>p_`$HSsA;}=Tg5F-n#TiN0` -02y-nG|2}6_05iZwT7tC0%7_Bl2=lz&k6#v4y8g_RIPfIK2m7h}fJgi&dq=4)qBXP*^ -{)qUWRGzt%$S+k^(D$x$nur**CvTeu${EJaFSmxpv}RlPr2|dL50JoEeG_HnBNC!ASyHYbzZH_5aXR~ -rg~b>A2u$Y11V2HxyKU(d1VPM`&ZKeDbGlWHDv8)54B-%WYr1V>+MT$#G9AifS)!S&Ad`I2JdZT$ugU -4{uq}Y4vpxK^L&?CsO$pa|OVqBXx7k3i4{d~vWydtjKrX+&GqfxkW@yg_+@{1($c_h(7p(BZY}nSfgH -3R`iUEiOU7?NVtosyj;_PK;81cZ1rSF}24x6+oowX>rRcP^c`1nGcdE^E0m+TRR`*J$D9S)7T12tem{ -HpSR!NU>JPNTqVDtf@SQcccphyiwK=X;%a;ElG%h@p-lg5{jX{14{yBrBmF#gc34G5qIYkp}kT$zuAq -G+`t1r$5#3d5~s>&x@Vk1R*&k`a48C{VQ0?|S~6j0vqIcJek;2lUr6Php7*olO+5EN; -{t^tlXG<1y(VM}2`Rgx&k>RT7CCEx_2_J+VGDA5H%XH>}lfTgzAB->2F7#>XSP~Wd(J{vc9#(%y3=|i -oa{0@fFg1|fwBm}t%7HRUz?4psSVJ0F}5Q>TbrWN?*BP5R)yheVzxVRv)GOihrA2O&RK^wX{mfyC3H~ -d!6jjpQ^(i(xb##Ev62j__6;(V4yn~U@8;;;Ox^W*H|{8-&MmQM%68cE}ECb|(xSG)+6qG=oybRniPs -H>3`l_jGQB9;I8Ngh3Y;fb;v!^mOcRy@BP -K-}XG=O`1rI?lme>t)o}k5p6)UJzxnPB<7K{N|@UVo+T`Is<2~B{ZKbo7$96EeWAqRCl1fsmx*cZP!% -}oq_zn463;#merRLCN;Jbl3YHDgP<<{*fFcUOh8yE_P<4@;J~kVP -2ZWT^q2Pek)bj>Nh{jRRCPexMs6@2ijaq*oOUWw$y|ofGm&FtXrlC|i^onl>71=1%zTr+9Y}uEaxB#k -nCYq^y)&!v##o`Np5+erd;b^J7B`F?o7d_>^fgULuCN10bA}W^=(mt{;04piDDD8 -=ZMk{PnI8xa_XYNZ~A+*q=bc2Cn5qNXtA_W#yP$!;Q~BeZX}Jh($aBj5Qv)Xn`vd7Baa~L0+P -Jz(1O$;tZVx9FWfE5LBue$3Z8o*y-5rsM3y|Ed{L7HI^?cn#k}RZy<_6WJSLfwh0;(W8z;UQ@Gp;Dir -A3Fq4e*38-o1{qm0O7LOszipu3OiycJ|eGRQF98c -Ysa>FHdxWf2z?0zowOs!!g94LW0>FkoyKhKr{g*_HDr!wPvJQoZxL46kPM@u^Vq?tVB_Nh~5S-gC1A3eBC}PQQOfJWZF-ELqetcmGu(z>$3z!M{89Q;=&`B5M -E11(9Ize!0HO8Wd(xXx^IVzQ49F;<-o*F)D5=4_wGFVuoJVXjaeoO<>MdZooAV;TfR7vqP8= -BSD%fYJW=mx`0b`^&bcU@dKV#C$#vmfWo+xJ3{^F}l*kdMRb%3QNv;(01KOpL`!q?R&IWq2HWjfZqgS -9Y@3-K*vxT62cUMB;mg6Vd>$<%7H@6{#mkSw4$fGF1>A@^+a00M%R7bQ+tGI${dxTppog^ydJ9g;(fs -XCk-MwyE?A>I5Rs{dHo5|VbP10iN1Ci$=2SNp9Uzl&iCitowbs$`0Vc$-u$wt-9@Mg` -MyVEsjK%>b49h`h&BDI|88y4cw(1lU)dE?oo>t2j62aJ@Tf;+t(_MJ%+ibB=wq?4K693morVQ{Lahhc -=B}=oa)LKgcow -J$f(-{C{2cnt`gi=^@-0{ohB|QKs~8Pyx!y<@rolxlrxHU@KWe*eqb^#kF&U`{Lm@@74kUSrp8ac<<9 -tLUi}lBJ~7UtE6A6d;NBcPjr;#TdZ^kZTF2XDwUpF82jyTg*_ruS{0QE2X7y1y*6S)=1q}ZYssjDUw?Den;75;c&_0y8e;%lrnd9%VBm*J$|6Nra-Dde^y -J|n2#)P)Ti0p{2h|(kMBQD$XlrH5SOYBM48D9iDjd6*gdGErtgGUR}hk`{Txo4cR&V?=+QUg-aR?=aT -f{Sx4#Msz1ccP{rl>~Tj!XsY-mvf5DUvJX8v%9KDIq$>_Fvt4Wcdf>eGTZ?MWO}+2q&^pOR{`2Q|?gD -BO|z8cf^fNA;5Pq=&lPf_efm$H8EjV>Az!$T^hEsAX&;pUsip)OtQo>QwWSx$4W?_)^P9|A&m~SkmQx -h0Ea3f2f{rLiRdS+q}Gia)!Z(4A3wGxiL6U8X5F>7|!_hSTAW>!buMYe#ST) -9uJ$pku8<5b!8^SJD{&mFY5f%SU?}J?I;>@;g3_!C7wg@lJA7}e?97*(21utSiX8k4M7LF>hKwe>9I% -^A%i05J?Za=r?=!a&Z`XY4Vh3#?cDbjw1O2u*Y!<;!8gCx8{&y4Ht&6?bF^VhmH!#hrm~$sP=lLf6$5bTnHlWAyXOB*IeonU(O?ns#U5>OKShpQ&88*Yn3O#6?rl_o(q*x{}Bpt -0YQZtM+y25ufM|?dYhtLvw0CGtl((h~x>9esy&8LL41k7^^o`tJdp1xRLN&@409A`zi_gHSx}z%Pk0_ -1Al$gVt=hD{>Teep- -`0mK%vRVD>?7e05G|TL-x1mSS@%dHX2GneNspLUZWu!`(Ahy011JrCSFTEjgy7WYFs91b0Ok81X*>4lST>V5wFnOy$z% -g0~HPnTC$Z~ym_{O$7c{pEYl+J;0ZJR`;@6aWAK2mmD%m`?B0uMegG001EY001Tc003} -la4%nWWo~3|axZ9fZEQ7cX<{#5baH8BFJE72ZfSI1UoLQYeU7mXf@S -O?43EZY-GiJ^89uJTvPeH4W#5Er47sv1@GhC)9r1K-AJXHqf$@J>+!-IIitym8 -1#ZUZbdd|?}6b@jSo;u0|XQR000O8B@~!WXpG-gfdK#jq5}W`BLDyZaA|NaUv_0~WN&gWXmo9CHEd~O -FJE+WX=N{8VqtS-E^v8;Qax|uFbv)GD~NQlaZZ7*0Wx&BTZ(q-RuqC_Qz>zZWRUV*g2VmyN|w_&O^R} -p`1n33Sq?kU+75AG)Ea2l2aaGi65J3`mvaLh{UM>?8yGybp+oH`A{!@4+04-f=dg_lB1e)()A!`JN~z -Wv5qM_8YPzgf3Q{c=i~Eg4Hf@BB5rl%YfgvWeq`n$~9a{K}2dM;|ZJ=kgv|m33j}ud_8|V*?d|Y)TX5 -(;ecsuOSM_G1cE%FC4Q^6W!=#i`JtAR{h-;Nr!`T&xhw15P%+(|7LW7?Zfv$4vPv%#tJZ$E}f=`lHKle!E=B{X-!)B(RdBBS#ztUUd$)yW^ixR)_ -H(OtEcy)aRqRvuLo?w$is=Edp`lD<30e6=POY>#5q}S_G7jh$ZmeNrAeh+x~$sG77_Elb;KL75k&~A# -nE^qQ_Q%B}crmAVGe8iXO^jfQTP)h>@6aWAK2mmD%m`)^BovEe)005c<001Na003}la4%nWWo~3|axZ -9fZEQ7cX<{#5baH8BFJxhKa%p8QaCx0l%Z}SH47~d*h@51=@CPighxBpiWlwu63PG{yM6E0tBAw0t{f -br+JMkh#%M&Hej5rj#7<$mU8+nYVHQ0U#k-_XJxRFuka|NwETC%}cFnZgB7PYgC(KsrKPBdD>(c*>wD -!C!}wv{X+20PUHh`tT6CVRR-8BeVFeZaF&t#^i2LfbE2C#9ljoFSU-)%mh~Dj-FRU2ndr= -oU0Pe!9;>*AY@fuZ@UoT559x-6TVJ4sRc{IcHjd;8i6M^zCo2x)!h3XTp}8qY`mu8_ZUM|o2_&54naQ ->!w!Mc#QdH%pEz#Y6I#C$Bb}`ggE?f>OCMUBS_~5wG6UpY|*Bv+m -DC`IW>cQn8qN6Fi$Vo9pBgaG?@0t(U({dDdG>IP_=snwV;8W|d2tY~d%oY4|UJfAoXH9zA25zu|_wM; -6DAyS}qO^QT40#35p5PtPyG<0FB*TN%7)`b}|G(mye -0kvmP)h>@6aWAK2mmD%m`+PiZq6M7008d>001BW003}la4%nWWo~3|axZ9fZEQ7cX<{#5baH8BFK~G- -aCyB|%Wm5+5WMRv7Cup^Ahg#2I;2H=?8&zvAZTe7FG`aFNhQwTcd3U($xiw}QJyT$?r>%~gj;7%AZ6Q -!-l3F0r_Qfo*J1IqEcfQFvQlQjkOhHBfO)D+Mu?Xxygbkvpd8BJqd>FGT41Uv^BUOUXjvIBXn!;F -q!Qezt?yp#v!amM$K5R`}e&tKxtEX!)GydU<(w3**!z^lQQZIGcLrSPa*maKxB(731tW7(P3f}I#2l& -Mjii$!A&t#!cK&Cpx^z*jHwgd#4dSTyXp{Ht@;iQT={5G&!-d$xq&gCq0gcX@VcjDkuTNue6JH^|Umf -oId$i1hGHVXf*T@&R1D+ug!COD04v@v#7nW+2NaDdUi8Yl7kdTn5EQB_ -m#)>xF)?rUMewc0Ckzaq-dDWzJ}~~c^beyP8#{+BovZKG;5r&30OTQJz&V(9syONR9mBKS)+Q9Qf*_W -X;IU8$NztlIKb4Z(*BK5d_6@}@@S_uthZqyS1raAhK^=}gOM@eEY^t*xi#{WEcbpyYOO!gB{O9KQH0000803{TdP5=M^00IC2000000 -4M+e0B~t=FJE?LZe(wAFKBdaY&C3YVlQTCY;MtBUtcb8c>@4YO9KQH0000803{TdPJplk -5W)cf0G9&*05$*s0B~t=FJE?LZe(wAFKBdaY&C3YVlQTCY;mkojAIOAw8#X4gFeKZ7Pvi%$ec)0-TG6J>5uDHf-_zS5Ihc)Mr;ZAj -0~;tj|61-Oc4%;Z^6^y09qK5aQ&%)-;`?!bR&c?j2M+I-*XUhi&M($c_aDG_Prd;Gw?i8sznbxlhFKy -BIiQ4E*w-o4I|IjX3*Q1xGC1N=YL!b$hPc0>}9CF&1PG}n)`WRKDzOYM`HU -&48a#~)HiZ8i0rg>%~xXdZjGrDx&B&4L-8D*$bFHlPZ1QY-O00;mj6qrsTfcwOi0000U0RR9b0001RX>c!Jc4cm4Z*nhabZu-kY-wUIW -@&76WpZ;bVqtS-E^v8ejzJ2;Fbo9meua(+gg&6qYri2JM-D2ERV=yhuR}~RbZ^?#jueX=fEcUQLWsb} -TZ(~SRZ=y=YhGaE4=YPvpk@xT5hgY&KB;pqB(DljPR*HQeNnLa?x1O-*yx@6aWAK2mmD%m`?M+KNl7Q004mt001 -)p003}la4%nWWo~3|axZ9fZEQ7cX<{#CX>4?5a&s?fZfa#?bYE>{bYWj(Xkl`5WpplZd8Jmta+@#^z4 -H|sIvK-^U@1NHw6Q)v@sJJdbqVcyl38aR;kOHG9(2%E7rd3_VFl8V -OPa#(>qKkS_0Y}h`J8oY4an7ribDlHI!0j2T2arsoaV&PMHz6AP&6Dw9Mu^u9+wME5m<9ElHS*iOzy_5*)GSV}Hyc_?rC~^IP_>|lO@xQPN% -AA{ia(&L81!j!LSo3^a+9B7B>nKAkBY3REQxq$S<^)78qgUn(!k{13DIk`*y73n#a50Aa5{TGFsa)Tp}G%t*6X)AN+8yh2B-GT{NoI1mPck&9K -P7x3|HGp0JZoRdLU}IqTy?#7d?P-{KuQ*FtKj8pGzU0-7H7#v1fk3&<1p(#*hlXV{r^SUPjZVLB$XN# -wkr*4Lu~w$rT>&`z$S0=~4RYbxZ2^L}|=k7OZ}A<@Im$DPe~){KqzChSKp7TXiQ@4?0&AtCnO9KQH0000803{TdPLk1NplkyG06Pu<03-ka0B~t=FJE?LZe(w -AFKBdaY&C3YVlQTCY;$TyfLbdO=#keM -2n(5zsR1sx&DoqbKjt}TE)3E>+~0pP2DK%Bt{me2J_=e%{y)Wxf+D1_aU2@VvpE=5=>+GX@nKx8$BI74=0xwg0bkBNm0-9#p -LbEg`3v8Q2hE$X+LH? -)#{{J_F}w;#@yg(9J`#EvS=UWH9lN9(=rED5%H2f)3BckZaLfcsVkX17cACGe=r-nMm311zYHfpz>%724e@Lc>t?T7z!1hr$$VL?-)#Hc%clTT8;G%vDO%eNxO -*7hQwEB@$hC}1lvPwSh(A5cpJ1QY-O00;mj6qrsIb($*W1^@tDDF6U00001RX>c!Jc4cm4Z*nhabZu- -kY-wUIW@&76WpZ;bZ*X*JZ*F01bYW+6E^vA6Sxb-GHW0q=uV9^n)_~w5Ns~j66exn^*h7;;fHW{@kzN -atM3jXW03&=oiG=H@0VxH0TwUI5iCzFWBa`I{RC$80wHOP1(so?x=IM;^#X1m1DNu>-_;E5FlZOm(FyeBF-diq1Gopo>LA4GktK<*cTFjY -$-ksU*x3UrX>kOY}-$J80ns;pW$#QK!^SfE!qCj?AGZEbK**B(ikEl7&2qaT(mJNuO2AMZJDqeyhsiz -X^GN1P+Zq3(soGg6lKU88+_NYX%5}`aK#Z)28AOaor!MS~NpiC*o7YfibN6WT$BRQN`f^Hgjf+xDsgh -p{35gf_JmPOK)@EQA~V)!1Um!+(1Vi*a816j%UY$cg0b8Dp_b`bXKTpRel$*a47S6&%_9ufIGn{eRFY -RNj| -QEOf`Pm5sCmoH!5um{N?Ju8}u#IDf^BB7?NN|AFbi#^7D1`j -Yx!#)(tpR9w9hmA5Y19Ar2ZMXs3!8%%7Z!rv-V^KBe`;P$JW7s*eg0$cliX2lY^__7S0j&Y#J$i*fcm -QPuPnvXzunRrW0TBq52v#VGhUIVy3SlawXIC7F*{BVys$i=IpscUtYXk -qBx&T|0_Gz7BQpwt0~fl53XryO5m=zCOrnSHQ;&xVASH!8ru~ba0Q&h?7AHX0jN54LBnl4{1H(pGK93 -4c5A3S#8w{zDbNJmj)K%pkRk^zQq1R -etzbYL^50%1VKyWQ1tb8@QX|ZF+k!bQZJ|tE1@HIij5`tFZN{NIB{vO;ev_l -a_FqAT?LlPuZ(wuHk@noPpA6%fkk0JCEtCMq)-+39W@Ns())c4n`>Tg|HpVoD5T9;Y#({+9Wmw4Ry#H -Ukwu)02VnNM~oa?~EI?v}}vyxO+|EAr7sXi57CV^IA%IeTM4f5%YESmI%&(zr-emL{s)ngg+0*?18`- -fR>dtxPjuxS~9zQaEK;Gk5hoQ!_7fpH!(Oo$eohfw;DVMrQSaY*eFqd_oF$Y_vd831qsdqaQSaN>w3Z -fgI*!CQcGA@L -c#y}aUZJrgd`f@BBLr<;>m3{wbrz{X)XY)?y0=w$GP_RRThiMc{v!zBLY&T?Psk3kS3grjy?BH`ZeFaRe0m*ZEN_~LV_D7V~9- -v$FL6Y{^3>``9AHsX>A-X3YP2mOJbOZ0{hsvkMr*uz#oWc=3PDR*ry1t<6OS=9>*H?6XJ%y*k35}yGV -g-KzA5`fSQ9BV_nFH_1HAit=X@urLC_1?xj%q?&6kG9{N -y6Ek%^ca^ZtTK)VW}L@$SB}~he$o8s5TJ=Q1)1JPcPV;&)uGR-I&c`ss<)3<|2aj*FKqg}mF@8rxfEi -pr=KFXOly%IcS$o~IKfQa0|%T2cEmqPYo7j>q8=#z;S5;oYl{8QsFgaF>UWW-<2SA=`HSz=Yc$ebL+Q -{*8fcZ&J+{%iP@lTrD>>C}3%iMt9dXbzJt2-yeYrT-FE2?Ye~Qy89qG1?P-%Dt4tP!1q=}dI4=UGY4q -CBZ$P6a>TG~+ob6H;g>h)BqmHI7`E>86FJ@!wwdvwA^!u5YJ{YPMG(eWgOqjhO}6V2HZ681T*AsmI0Z -XUI4^!SfhcYaPaE-e~cFFyjPI+^BQP)h>@6aWAK2mmD%m`*^!0Z{T5004+)001cf003}la4%nWWo~3| -axZ9fZEQ7cX<{#CX>4?5a&s?pVQy)3X?kUHE^v9RJpFeYH;%viub5Sul@wb_+S}WE=fufNQ@5LUX_FV -H?e;83rDiCJ^?Zfo$X3qxzaPN)xnuTFw78&6LTp;s&Ep$KJ`?h_AD6iKd> -he&dtG*XK&<{ly?A|FW+iR>`R%7Ydg4?&!T*Pn_^dqnZ6cU5SerH5%kmhPBGxnR0lco~7|aF0Nt@C^z -5%tsM>2{tk-avxQaurxYM6fw;Vj2!4-(eTh@nb#54S?ZH0lO7#xIg5P#Y`^y4zwzMz&4d4&2mkLL{N -Fuz&-jD~op>x=qxe^SJ-6#K$>$ -~-Y9<+s`wnth#Qh4vaimg{@0C)qushlfS(i!8a!HvUxT(_yrywPJ}!OvOY0P!%MTp+~VQfy~oGk`+Fa -zt19I03NFZfNxA%ifdm_8Zuf>&{2gaK~z3t(`@C-Wc4bG_8t`ATlo>5kmuf9p=p~|8l`e&e=_-^W*K~mC68p#JR}_ -@Y{=wx?J964?EV3=s&KbQnT67S6?>R&{Wb!uAjhDv2{8XQ$zdNP(15v}G8i-CknxPnFllf_eLzzY8pG -1sSej>lkz=CrR%Q95=vB5M;>EWr}=D;ROgG~i6^Kd9>US;uszxN1#%m!mjkMe_LsT!&*hU;_p<2eX}nB_>kwd3P-PIlQ!ud4AltL-LR~H5a+4+vNu?3AYbc&XhRLcI^?NgS-P?E(gvP6q9H7VI8QKvxa}Ggf|X{Hpu -ZtNgz+ZqmH=VQ)XsD!5Gx!nhYW9N)9gmNvyA$3VGuX9ACvh|ra1itxDnlgmQ#IAe~+U}a9+yalt%%-&qCG2qKt8ar`Lx<)K{&Y7MOQ(a@+*#b;V -_@m^X3L)K)Df!L;VNe0nrx+h$QbU2uNXNv6Ylp0thP&YZ -#riwhbcJ3=Utj!{gxHEGg!^X`&G>2@Hxygo|y4S!gAIPz&@K~g!eyMd4vU(!U7OqR}$kZ92g~M~lq@e -oRWpUvKj2*dp>}29N!;OgC$YuqQZryU*oW8YMdJy~wMdpF3#1svb4$0AnIH2@jj>7tt$`AoHls?x;hh -qe_lcO`po^mqJGGNm7A$YL3>W0KoabeAg0tdHL$Sx3ZL*_GN21Tbns5`wC;dM%QWK5bGZs-k{X^17$c -tjXWcbEKws9P$2K^UjNnclh!6KI+=o<9L6Ev<~^L$RNV^Q2nK-Sn96+*Pd%M?`t9c+Mo#uCkSuT!&l7 -Wa*G#0j-z-1HP^SFGaA3hJR5RLU0a-wbMFfA0@mlPNXq0au=hebl;Xr* -W5zeSOgsG6b2H6Pw6X9bG@&geP@si>@D7%I0%Bxl8EPE@yadVZGGovAdnIDOIAY}P~`Uc8zk)PRJaG1eSVS2V^iEtBGgQ -DVCi70(|05`B8%m(79!40hznOlQ9T3ZSj#iTXO7) -daT8&0$i0P}v>GglxZLrVDu=cHJ*YM7len1;U;mSU{pP~3_I*X|wv?#v+>lt8zvs6Q%JJ&IoA*={-vf -g}5_u6P4N+#ASh=NJu)Bq0OqIe=2s$c8pi`ye$GUe2t*WddF`IXT36484gB?mSS+0t5;+Oz%!89RYrlqca~$scLrlN4V+#eS}8)lo!~d$y4fVYzOxcB -F@eJ+fzzeK^>!e|ymeH4OJA;TO9K|_V(4;5hf0Pr8#tQ%qGIJ9T<%lP44xCyH4nMrf_1?`0xLbB2*`T -UndrSUDSOBMKWAC;GL7DqMXNcxhLUCp7Pu5@Sx7;>4^<~y#6C8$r%0U;(udDO#|iZQ^YE6$&`}$C#6_ -PSSR3SDYIMDMMy;ydX4z=gTn|u7Xn#PvhYPe>P8XJ8Ar*1zM%OlkQhWDa?ww~I$WF*wpae4Kf@2ipmY>dtx@yy&85{{rq)8tcUar4BTRBvrOtdXW+t4XNjdONmCB&u -F&RUi*>IhRBG8?w;<+a%sz{xfF4Uu9bc^yvKnq~Qq0N=6C?^?F~e(Z4%i{Z15FZPj%!Fvn;};4@|HsV -U}4Ist)3zws~x%qQ0_fck38l(*2S;mjOpe9-+=0TueS@jAhS(i0n8Ra7gCr0U07A}SD>x+6mvA5S-p8 -#Lov6p39&L-<2h^foU@{x0rN0pYqVVpwBq0rEt$EM)qSWEp$a5LxHZXC^$cYYyS5%?)k|I$EG-gz4cP -|fMQXB%j=llGO_#dq5%*Wx{>r@5?E7{h5f3wIaWY^$sA@G`XLc(Qi5j*;XMj*;^W0@3yL}6n -No!Trv3utxpm$P*uT&At3S#7XgSY4dDP*arJ;I`MU_#isoGK@*ddGt+V%4^;9v(@(Z#@~ -euTLXcWxAB&g-!w#F)W2+4%clRKJoyhTcY?>bWeDqS7qw8=Ru%PNHFkL-kc@8ndMD*v6pCRnIm)GRQyJua2pI^?{?DNane?OW1 -=ltsUvHdu`zijC~!0VMz{%{$lFTbT3ygQgYO+dKn_I0|5$hY{cqFh3%_7NaMy2 -iu!sBbd=R`;3KqCPZ+U=wf`L#0+JLv^$^4O*<|{7+nA3@m2+Z%7^Y`Dry*Nh$H3wut`J*5cRK&deK0P -&jMx)UMB>ox_G8JeDS80H$1WST!9sCn7aUYkrCXUSkC(J0og}J2=n53<9=n1?G&j`wyjMt7X+=46K?mB|DgPM__O!3_moo}@psl@(ozdU}?VEMv%z+$|xEnyvNGR3X-aa|&J -yX+6Zw;Icz=t^Wisds3SQ#{azz|=74dbf`tTO$h26@Wl#<8+f6R^Ovo1eI)jO)W~2-293DH`(%BcQh -~r?-}-Zxd0?omF0du21=e-^buMa1_40-vRe*6#%FuEW;2Jlbw@aQ`+uCFT(R1RrxcVTvf%Tr13#1!4n -^-hrxN)Z(r@(YWrzE2hbmMM8!Z{Izplu`XNKOz^YEpIa)CrKk^rI&n0~@G<@#!tqJD65>h)18lty;|NI -o^39vKzn*`$Jb!ck19`thkk-9$RLGHmy6B-)sN!!-w~;zy0~c`NcfA=w+c5J9J_5^Lml#1VS -37>r&uNa|{sRwK)&PTEOFK-*AStYWeQ{+jr;hKfFG_=!n-P_^aBAKt!t`{n`})U3+>=jCGs1Ou!m8z*KmepX(|d>%yEG -G&muFO@FV>&Y~D_P9cgr%mJF?0N9lSU(+Xgvh$xV3*89)w9tbY{yDkh|NWK4WV=TboBfc)UMaT79zW` -?XSLm^5ofL))(U$8zO8xrf1itb -;pOp`nBYYZNH6*q7lvFTnlhFkpD}7*_(Md2mPow%zlgL6}KPChzpPH={h?LMz6p;K) -jL7Ifn|m)2!cd)oCX*qD|U;+a}qWq7mkHBh(WScQKHtcBT#Kl|!*K>Nhc7PfU|JEYoU&`%_)o2f=%j( -x4Bm%)5a7s9Ar?m1bFHK*o+c{mh2a6Jkmu9^1lSHf*mP;mgl_|EOEHJ7tQ~4;#B!7fydWuRgd~O8RWhjy>EK -X8A+Nj)gRmEyDy8L}{`{c=Nar@1a#qEEr;R}1RSg5OGh`aaLJgYx7>(Zev@$c1iI!D`r#funLHH_;0J -ENy|qRJ_5#ceU(aaqsviv47?fMs|c;aW0srO|Tl8m<|Y$$0A@9-h}ZX#ASb-4Fuct -S-Qi%8VgC0O96x4-OXlV^)XBIj(0EEJ&EA>#A{hpQ?4dHs?Lw^W$Vv;*>A3ZLIRY5u=<{gm(hEZ|1>93s9H&kjuliJf}r7hJqK^v{9p^QD+x?ZtKxyE?mI$`o;`l3o -{xfu10_V8^VW@e31^wy94um*(uGV_FRz?PFiBNa4x9wLCey72mT6XrD`e@vxf@=r$B=w^^fCUrs}HczH-*xbb5HQN6#LrN|CnjVh%CKGyc+srrmO)Ul&kJ56n$HGxH6 -k@guaHS8;~FuhlOS`+V&L`*im8Rd5`P9zP!)9rc=&MuwuiY7&qRRVQ2T$wr&Iid_gyT -#3HadS7mT&Ts()$#alRDB!WEhd+X=mb;8#dP}UD`4S{ucMsKLBHEQhT_TP3>m|>)60*iPp=+Lp2GLLu -MBe^>jsRM_)^=^(8+Lj^`tC#(8ZwZwMZk-Jak@ljCwpZa+uzy1ASJ)8&uFQLQlrC@$~Y^Rab_~?ltO@=BKjC+q;|Qp3awi#`P~RT)Cs -bX{h$cv3DbRB^(jmD!tVW$aJi`508uc;-I{Jlbbxa1QTbo^~>4!SI2j9vjW$Ojvu}_SwxTE?+f$KV*2 -845&h4TlW+caF@I5gn}o?7hyQNxM0%GbcX@c1>%08+?&00Z-2!h)pv6|QO;6DW)9lmmC5V;e?Ak3W$U -PkV{QnGM$P9a@g@4)%`(Y8HQn@A=2GgVe15ir?1QY-O00;mj6qrt6a{mwY0RRBL1ONak0001RX>c!Jc -4cm4Z*nhabZu-kY-wUIW@&76WpZ;bcW7yJWpi+0V`VOId6kq+Z`&{ohVS|ngo>gz;u+g@Ko3LU?OH57 -49EgQvFTNvEE$sAkNx^lw%kTeJ778(kw`v#Nr~yK>7lN>(T^7E8e~5h>p>iyQKQFt-WSly2kE5I1&mr -Yro~!Gk5(whSd6jASQl{RLOBYD@u+N!c3x=j7Nc!i;YFpeM>;LQ4WhyAov@-Iuw$z|Tm$Fjy^%UwS#r -j9H($2ZuKr$qtA3E9MM~EXQenpTm+r9PaJlAF6l;`l4!%l72U!qX&cE}|3}|uAw?-*3ICSuMNA*q&z^ -4WW4^qQmu>g-xURV?b2;G8ftRy4Gx`;8crpOzM4($UjMUzzO&L7kceYWRB;|1`A#}BXpC7sXGR^=o;A -Y1I{=E5!1b>>iYQFd5E%tRSJz8rSOf;YcW2k9r}mhVx*^3Ow{OmTZ2cKnby$S(TO1?@<^*pYj_h!q@ERKi9JvAK1) -=wF*JVR0iQ+F@QGD0|XQR000O8B@~!Wo;h(^X8`~Jrvd-~EdT%jaA -|NaUv_0~WN&gWXmo9CHEd~OFLZKcWnpAtaCBvIb1z?CX>MtBUtcb8d2Lb6Y63A3zUL{X>A@9jJoO^#p -&(djp$DOdQbKlj)L_h{Nmlgjn{3ot@U)rv{$^)5=PQp0s#Pwc4`49Di8^S=9?(Zvd)fn8gqUd|`mTwc -PbGn}6u0OZTO8Hi8JsXCL=v|6R2yn`lL@#}+>&Jspcpyrggl^a$%EcIN&(xrH_t}b_c-DLikyC(@vPj -S4O`utx75H42Gh)+PityV^QC^6j{Dbi+_wjrn0@L_n-+Z%TkpvjJ)vpQc+8l6_GOkl-BT%@6aWAK2mmD%m`+lR5h+vx006TF001ih003}la4%nWWo~3| -axZ9fZEQ7cX<{#Qa%E*2$U2)D*4{VHg)z5TuoAzCj(*hUX_ySQJiqP5*D?-$$0uaW0@8O -y=Qq*3>O(c+n@VCI2cgph?4M}|RzQH)uj-8E2m;W^xlsy#HCGcX6{M9mpBYV8#9;w;6Bw6)DmYeq54l -+ZKuVDmRpfy_I1!V;ssE-v>s?6-kA>|%GyC3<^i0=Vd+aRLWDRm?)2d`Iv^;eg(=}*apkEkF7e=UWr?Z+GZf|0)_}iW|z3u -OO*Xn*R4g_Ep_}_hsfot0w29P!9vk~0HmdYb7Y8H%Q=q>CT#J5_gNxjn^7-uxYh%P@tW -%f3sE)y?2(BgPy+V!2YTK4XB16Eq>hl-j|6k=R47%AgVDF;)FWym?^Fo#-6NX%SROcZ#DCB!BFJnC_4ujkr-G+=~e>3k(ek-aqzz6tp_ppj)@Z&%Yj?+wjZnQ@8=KZtgA5cpJ -1QY-O00;mj6qrtcX{nb)0ssK;1^@sk0001RX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7VPs)&bY*gLFLPm -dE^v9ZRZWZAFc7`#R}4DY;Q9vy_OPV8&_hEZEfkhuwDverBTGh-vsp_2dq=jTwevyuu+?F;o{#t5%t% -UYO#?+ycfPY&6d;?{SP$aa8P$0#hVKk2d5}&Tok6E%X(}v~^k{{0jMV|-*r?ozV@|t8QK3CS-Ft84Gh -w;a`b*QQF+R^rqn#JpyGUC7>YRTx7UfpIr3K0xF2-7mwLBJ$Xj`eba0kEtu-aG{>=`Ii3bhgqW}xY>Y -ek75^)0UaAXJAgNf!)g$$A6==|CF~E2D96g*7LC8a_89B2qENDy+eqf_js@2(?F>!A|H(p&dy$=S!g! -tnYt*QgV+#jq#}cDGZ*4!wQTBZxII!7&g`eEQH;Th6VT?PUF0R&SBVsA$o&>Xbwnimwo~>axQ|JC}03 -#C$;@P`f?hf^`A}IH6%Gnd*5^bv#!q@meUDpVy`bizxBaihuGu-FJ+O-n?34)KQ4R=a&s?VUukY>bYEXCaCx0p+iu%N5Pj!Y3={;B44FW0F9ICEb&R$^;{u7Bm!gnX4EDS1)g;622OpnTI*95^8dYBNx3f{EDmi&pIFX6`3@=FE)w<$1(`w9a>-Gm4|fmk7E -8`1AnA%r)ZtqPbAstWm?D{-@7u(>j^a?QS?rpggu=~;kE9k~~M8-w0k6&sJjo=(x8Qf!F6DWdbjEFjW -xqmz)o)gveq9Bi?#0!xNd0hD!glowKvTH*K`^@g6(6ubwK5jKfQ -yv}MD(>*7dfP*em)YeyT^9$Ye{^Wtq(0kfyJ)+A2qFeO=r>uQpcvTQb+Wtr%8z1}svyX!S?it|+EHaJ -5{T&M3#+VrCiB>5#H6hvlibYv?FEk>TNo2X6b5K7#s#>6$IF2`Q}H>w~aSMc{gS(Z^4&=?2XG3U^G+2 -!%tUfq!xmT+eR%rgK!99-bTl^q=2x&=?+(&&$aTV_g_NhaSf21%fI12lD1+NiB -bn(s5l3GDQvatuYLY9#zJ)jzDroUxYVFSayH%II3R)eSh%z&ZL=_@sfoPR37GFu!R$--m{7t;4}+4Ba -|*t>${t%w;jU!$hA8zKqiQN{=jE8wn5deg1S$&Tv%e(`_D-PkXe2YfEg)QgaD(^}0ivGZ81E0iBFt45rd;xd2A8y}4A%0D-IJ7eSSwc!Jc4cm4Z*nhabZu-kY-wUIbaG{7Vs&Y3WMy)5F -JfVHWiD`e-5dRH8@Kg${S~Z&pwcE^;uiaeFm-6tq%$xFL2PUVT+g6Sl*HzARF1qTYS;gL?>&-tlcOC3V1wYhTj+BqST@?mw>2!QSzr1|a=f92^e -DLj@O#sm^0@yT@j_9T{_7V<6OlP!wd|w-*%JH!+?B5KZ-b`BA-i$Y9Ta0gK4S?zGv%G#U*<3K&H1UCZU5T;S{YR;=QEuW -KV8g9Qaph@MDlTAvqA*5xr)1$}Fqr_$|`nHzR(}zHyj$T!QmMF -2EO65{wpbICA>33f6#M`7J_%R*gIJjVzXq*aTl0uq`#)*05TZc~JwayeI-t-qA5Y1Y6*r00q{(lEr~3 -fLB=oVPpXR7ZFIvUlHyFySYsgxRn~+H7|v#f%Sr~LB<&l>q90&+ZIQ|ACPv|~L1FVO6jtC-?>1hou-qe#(-w=&K9Ns|27Dx17sQsv;wEom*`2G!Ehj#c#f*z9T6I3S%_m!@dx$pplY^<#ID_D;|sFY -k{x>_{Gd0a7&-t%LN>aBH0~pTzn8>CmWf1vdfoydLzK$F* -OaW=3%TeWGK!(&&rWOa^?9$D5tS>~14s`ui!A-|zD79C~L4OPJAgX}qG#p3=9(rwg#?kMr}i~VbQ9y4 -)?EI<_eDDg;H1EY;h6jJfrg;;{2Yh?o(re`j;Emip?luL#z39X827o$mhp~gkNL;-F{9`^jum7Av`)| -hR}iPYX*G#nW5Z!43~29Gn2kcG1+@;q-Xi5|QDWKn*JdL|LVIpNa3=$Z!%i!;Fg(!eP -8!wCA(}JI3vi>9A$Ot@sUZa>4lDroY7dgz9g-&~GsuCs{k=&`b(nqHKph*p=X$xExyDSWD; -Zn%D~;CX3=xiZd6HwO)y0yV8jWoB$ej+ipEJ>Y#PMXm(-HaGIUc-d6Pz9^iaCv@bsQ9kV##Jido&s9x -X_tP-JA@aXiFk3apDuT-7l25NrH}m<~`E9(+LGmjXX<+_y4;9bb)P9?};L*K6Y9|g}kC*Th@b&uzJ5Q -1ou)bhlr{NH8>)|}!blw?Lk0+4z<=!e&z)t)A-2V4fz!M#WwTE-c-mYuV1|*nPwvUpjBL)0X8dzANcx -dgjQ^2{Wn3*&>c@2*AyBhReRK4o>JFaaZd~X+EYs!k0W8P%}|E?(zpA*0{>lf&E@S3%5E6ICh4Agf@J -AVN_gg3h#Fn4B0Vg2p;^6$(WkK5-8$D{jvaoN(1h1St6ZjBy!nb7}_*zQnB2oOuDvE#9TQ##ARJK~p- -Tk^fHn+d2@q)1Y}uVt5CCn?6J0+zPCO%NjqJp@L?ek8AlKxri67-~frLwQ;8b%*_xd(>Y(&|#ql51w| -@%1g9dKsJFACmJt3D0A$BQniiMrlPF6S!lJ(SL*4Yj&_*@92p_GBH)bIg?ZJ0Utn|1?B-9N?DzX@|8= -IS^^@~w&z?Q`Kz*zu_2m%2s4LZMVbVs;$T$qrQUyM*=}tzS1zT1R#4K1k7|y1x)O`8_(G){J2w -hV$wGn*z!iNRy7rQSpa$NOVN$gf9*~E>V_wfRowZDYq`I>syi>^zwBK4NKh`*DbhEjA|aZz4jgWV}A) -R}8xuwhY2DA9aH8;Iay#rD{b(%NT75QF!a{h542No4t}YUR+^zxa$@Z*$8%JZ{mx|d09;7wUq_F#sJ%snTZ^1g -30ypjyZrhF2QgTAa3yMk$8{;F@pZ0ifrHKhEL4dex$?LNo#@6t;D7r#!z{TmoCjp)~Is6MG9zz6XL(x -nVrHwoU=(uk%4p-xgCXb)6QecTJLf35=YOq)YvNjk(!T&8)*0sW;?lzU)^+@=NR0}zS>=@mN?SVC=7`U_MvMpm*ib)jK*?B+; -T9hm42WgptKW`Iscv2m_=N#H{BX2`?-5y_FU>LTKe5o5+=1Hvov3anE;!QYkO*KS@bIQ3 -vUqC-zJPf_uw4z*OLr567A)945{Q9}YY(dMjePfQWXC6{G!K$&B-;n)C)ni6eQlqBz2$B&9I_S=lXku -~{sjFE0UXX7h0rE9((KjeOvf-dYP`t5DPLw8dUjX=WVm9qwJ3_Hpyy4i&?ZC6WNpBrlS8a*XBOS56Kc@^0x4DaWdlNsHhvCYu(1P5oy{U -Pll)q3j>a8e44Ue4}743dfXkr%+SAV|$)oYtYMN!mbZkBdP{NDBj2B>s%3H12J`pDM%@9O(P<`>I$fq -xP#(g(z3LMFhy$7%vJOb3 -BBSdUY2!lg|o1^GjRfo=*eN;i0rS&D)vA4G_!Cho|*khU-wn>hja~U)+XhjCWd=kXGS-Rgb -9a8qNFXoQ79NZModqg7Y+F%sjs8I!kUc`-sfy;b5R?%rf1b}oJke`=`j^PT@_}u34tGdjo)bWFN?ihk -2^7nl?cw{9VL0g2!buBHU -V0Sbf)7)f+Pp5q^^vFq5W9)%B{7f=`k!z>rR_Q-|&2bQs4CsoMm -NPMGA4;`_h0oixi`eQs3oIOzUV#Sg-cNUfB{I~k{4jnzuNjrjv7t;Z#O60H)2XjFu8mIRJhwQF1ki&{ -1eYjO-p*UIgRFsN_07DaJy0TK06)pb~p6fwXw*X^(RD(4yyjCBpq2lV90VQK1>?S)Nj8%;*~y%_i3-F -3Ae=79~wW7q#1$pOj0agl*?;PAl#gwyZUii;6n;vJ$}1-fF$*+*x -UU&{-Q>I?(WvPaC<$G!+t3nitFq1*9CZK5+xb=GlpyyPr`xG9ZTzRhAH_y6JD2h&Dq!A#gtdatd%i8W -MYRS1GyN0@%V~i`D`92@|Jp(Rj(^NI3!akoBfm{qA0V=3lhDLAhhDL_KJ9Q~{t(jAGBr4*_#aS90|XQR000O8B@~!W2IIcL;8~uWYsBlTx24|!PS+$%N{eD^JZ9(4Sj -MvSR`hYX#WQ}eKKdsAmEiH1=#PHt_<)$DdsW=wroFB~)Jg|-yXtX<%n^}PwL&uyqzf#6yTO*2qcm%uE -3Y5WDtC*2uogmT?Gl0Y+_ENP4Y}Nl}E+MduBIMvV1T0-40T7$CQVcTE8?ZS`zmX>v&*v^tMmV6Ay?{c -q3A)EcOB^P2jlf%^Auso$QW113`(%hQ9o3qIjyr+e#;tyIXT -v6ld{acbW(W`pe8>@AOT%n34+&vC6-);6{MOp0_=xu;3!|{olQ{^&J{9ehwR!@9`nUC753OkZaq%&A9 -;s5$E4-DgSdytN%4O<1c)+y0yEBtAgaTah?c2XcuAD$kyAf-TEX7M=q_ywPJJwf%}rBpNW-7v0+%;Am -bgdg4l{8;%kL5t^@v|SeTe1=SNTX$)?;bRL`HQ3TB?ZSw-Ap>m7m;!>a@vi%}MEnJ~p`N4ky5Zhfhs{ -5>M;dxz`l~9W2QsS8Q|4aiW&rk#*gWg%sD8gag7ZaZeByR*VJN`N)3_E@Q{Dh?}6X;BLz}oX(`+cj%y -+1X-_o6x+cr30&><#n?b$kxdiy*nX)!R<>knNLk;LEv^FEHCZZpf+yN1Aq}*4!D;RSsVev{#fcv?7BX=rVZe|){q^iC!m` -a3w^=8WKcq$vwN|2GwN8T~)ja3OAYt~k93%XqFN$F!`MSthqWZ($EtJl|n3l7Dl8-?M;^H+-tx~3!-n -E(_VYYN|^=qQ4}^7{|hV{7WiA0noBD3U=O%dbqUTzu}tdvl%GM3d=M5_r0@*NZxRsGxxHq#S0k-2)CD -VJ1||uM^uf9kJKzGtGH!D>?+P!m>(guhc-_Ih18K#Cc4Q*TeXbjhxfRl;=8 -4`TvY@og0xR>Qrukku&L;IFVF2(HlC|`LYEh@&})K*zjL2$RU4nei65Uj*1q%(METQ3=XYLzBb8ftby -r_*UCCN7vID@Ty(wt+As>MBiUY`=7(`AJP_INra**=XB?To+YQ;g2#{dL{>ga4K&e+{zEnL#e<4IlGa -8{l(@1kNjAJuhoAhFP+6;DgiA=(wAPThcE8%bTx!GCn)-@Cl8LRIO+x`?7|S4_wnw}o{7EmyUYB~ve& -(&)k#OEE7=_$>jvLWUgquOwY}dfQll1rr&g# -Zx?`UMnTLNS5S|M9w~{H;da5Hh7=E&HK&L{|mK-zkYrySw5XN=mZ#qItM_ukjW7n18z6&GvMeKkN_ad -pn{#EC|WA7fxILUmM`?80AK0f*72;rirAG&U{l0`ITU7-(zPz`3iBYlFA5F<)-ZMXDt)_bs$L{Q!x}zFT~(pW(DH`%^EM~*%KZWH2bB>ugKzt3AhrdTJg7m -cC4!)If%5=eL|+QMOwxTtWN{)Hy=QDjXYp@0~kZKfX1vD$ -d!LEBqnN96aWpbZb>ZOyLn!@O-#qsi^jmqwU~wzy;7Nc!x+?;e)KEI;eBM7F6*fpUNAY{n<#P&NvB<} -V%ObZGcD>27k&rQ&-Urwv$SJqU3ph*PQ{$AO+TJ#Dyti)AmiYC)_ew6J^)wVXA6-#4+d|JJ9kFkqc?N -=mAKQFE3gH6W33DEy4g7h)=$>@DVXo|fKw<*U|l8+Ov44$YeQ42&56ENQTk_1tGKyWyZSA#FtZ%S&Gy -g|>V2H?78j@_7+jFoqK`sY{fgq%tozBtx%>u(_5HXawtiMIpZyC^O9KQH0000803{TdPN995@G}Yk0N -gPE04e|g0B~t=FJE?LZe(wAFKBdaY&C3YVlQ-ZWo2S@X>4R=a&s?bbaG{7E^vA68{2N%$n{-cG0VURm -8IEi9)p#EjW30Pu47~!Acf)zV{s(2rAUD@a_nyN?>%!PXNHFq-lSqb(i7UF5kCKGd~W(Fg*Fn5$QbE~63?UaysMFEI`ydKtM(DeIg#qW?eJ4_Nw}LGxXe|N&!c;>DWcoNF@%TDAQDDU49wU -|PTk(pS{qS{i&%Mi51}f3&jDtBi$JUjx;78}=x~jXMo17G;|$0IkX%5dViAN}$VG{MKjL4Hctnm!?3h -S?^xauAD1T*(8z{$_xB?tUv1f$33E@va!kZMs~OqQCvwLKg&zWzaq#3D6Uj?b0IwKRB?SN; -Pp93C%vgacKL?Ckj88%yXt86GU8_DWf!0JV@el$EU&!i+fLezKwE=MEZ=e**-#^_>yEO% -^G!8L9#7lLfGPqVRN?JE3h#ap45!l8;62t})gQrdH-W!8$neWD5K*oyeQ|owi{uWy-hL#iQYP+a|pB0 -y$=6icE6Frf&tikuBaSb=W*#d<&G(sF)NE5dutSZkvGy9-0UITr>dz1(-$2M1=`t#4;@KYS!DX9O -i5Lknw2lI7xIzO*y!0W#3{^GSQwJ5?k258H(9Pw3DD`)RFUX~WQ;DbuLLREmG%rY{6BITzLMNxKGouu -qAOCclN;)HyZeT|!-ooO_V+%}I&pT}y`JHdsGGFB^Q=!wrZORgwXkAm7q_k)z6J37{VXq8<6Y?6j8)| -Beb4&&;-nC?ah8urB8s>+7U-T(4kRTlq29l%)*2?IWf@J|&Aic_mKi;AEj+!?h1%Osibr^BRVR&ei)IfC -N^3wBLbuc7>^KOfCLECNXZtjlS4fA>p3QLn_*G9*KO{s$xfoo{API4Bom;s_4&w672H9;r-`a5U%ivV -I=PjBhL6yquq|N@{b5x~oPg4oT6RD+x=0Moo~#Z^y#Mv6*emBZBYp<>b9uDZO#O{;4b*ZtRxuUz4f?dosFPKQ~;TD -Q*{9@TGb4TpDV4afhUHLN&^Cmfm-V-jLy*hA2N{Pq0mX7Smc2U#y_u_i-;g`S450j$LLaf@N+{01*k-DW9fukqauY|CXE(t<~Vt|M&A)0TE8%<2kgbjJPO$a3Zt7qlC| -vv^9{xknJvJ>x1T(*{WPwUljO_Anhlt{?1hAc|Ub$q^@!oSVrXC-8(E^>)Adirqqsmh(d#9{kt=scBD+&qi=BXXVf~;`Qug{rQ2iogsj0FM?4{BcCEH~4plc^;9GYe#5Ytd@ -8t%uInPejEsx3s^SQ&5gS-P&P-Im8)P2{z$*(z6q3wy?&>RWRE$!~`Qgq*WB -)F{}&puBszuN0L{ZX5Pk3mcf!cs&oP5UN?L$bG?Bv(p#AGAO)AYJlMykTC~lKnTm!i?6kB2%) -K|T2j9;2x}RVSswby-2V|_?GdT6h%3~KhMn)#K5GD2nb0k8XS-W*XGx#1+3GJ~Y$U%2S`HWtTVOFFawAS7e2d}7>w2=Gb$;7@I`>Xo91c*264;13y -4-Tf2{{m1;0|XQR000O8B@~!W8c*uCUkv~NDmMTCF8}}laA|NaUv_0~WN&gWXmo9CHEd~OFLZKcWny( -{Y-D9}b1!9da%E*-YL4s+CzcUk=Ds0TSD}21wH&ajsXmK4ML-EY=jM&8SYDL@P)}Z0rUCnuMRk9_yE80!nwSb0<)(yQbfd7VOHyjXd7|A-`) -?30#wq;d2tLT;ipABuvRm12Fxnk`dV-;xtf^x>CRC#?@aS)9N5kRs+A>9E*T2*xm2)l-Hq)E%tNJLOW -{#U|xEGyPU2JiMliFI9;^&JXHLD!oK7@)ctMTK`w4Y*tWd^S60pIZXv%jzu(%u!vW449lKgETep*BYJ -H*?tE)p(RLF6Vz}v`*j04(Q2pEKv`(Em}g!DQ)Rnkp5TNQ~)uHqG&c-H(;|gU3YEQurw -vb7T1!{D_)mf%ToFGlH|p0!Hc?DlCCPUI%jEFw5*{epB<3h9;9xc=LM&r-3pX!S=O@rh-Mk%d^S^5?< -8lg|8AK6#`j#wl4udGV3E|LB&#dlQZ$l!>Fc84^lJm}(Ufiph8ADatF9<>)^Hy^Ex-d9__2}Pa%zn|1 -A)7;JjZ7%a^7@o*3#>=Vb|>Q4xTg&#NO_}OXKLz_~M^mF27xTiIZ;^(PB1Ji=MWyq5vxhCMWV?98sP} -iv*|vkF2De6IlBW-<<<|TwnbG=3P9W5%}b64eM7_MVqEEXXSb+9Aim#9r#lACSRg)Tef|ZD-8S~V1jV -KT=g1~8pY+A71R*>&9-F+e-^7r)Zh^vS4a>+*Dc>j`<12JnOF^!=o=KjX_Yzp;@bBu_(zjR>OpF`KY -1=kEXap`BS#Sz=2&ZiC!{XcnkgtP?`r{+Y;7Gfs3}~u9d7G!a#Z`=c{O0tRlk?x+pOHiUA|i(af@rnW30RjsXAj~NIh;s -z$RqK;7w`tS#*b3c$h3SEnlb9*&@7V%@htcF&ml*}K%Y68lW$2ZU737Go-LNz9E%|tOa?j!U~*Oxn1n -GvxZ7YYVxu82#$Hi(JYHZ?fsTbqExbM+%W+Z<;C(;0L9pBCI^uZefJ -IQ~-PIn_VK768(y4&5N7R9$IP!sDCxSdX$rC&&xrN;ys+tsC>*Dy5tXAaNRK@|9`aQz`EVq*8>Ng!<^ --xSgmQ#{HJjoqtWdqp`>u}cxDlN}fa{;l4dYvKDqp|Ed#%1Ih?Z~W9}bez1246*;^8s&in4isdo}A*Z;9C-@%>}qop1cas% -N4l08(SadGSgT&ViWV1;}c|17RTm5_V`O&IU%KKmnLUX=Q`wCtD_@`*%EphMfjo-wlJ7^fU~AyN&e{) -f6@&qTH(zPE*TGJ_-G$89_=9)2F{wEBZK!-4=i_Z3z{L=_LpTgf=v>AK4${1ml%PtYzLTSV3R``(71f -QxWwXIUQiBuCt%50|;9qgGfS&c})=i%G!i?fm}eB<(Vq+A0*BzlEa_L=!f-DGoM7fueW9|Kp~l^*wU+ -?YE}!R_$1sUiG8V?^TriQ5RL*+?o!vmQLgKmQeSbz7tf?Y=t&O%a#2q(Z#kk6kd`Fj*z5EUQ0eETT+c=&f%r07rI8jYY0u*O6F>$G#dljuIh0U5Jz-=tVk_~gP3tF}X~Yc@OdmM(qY7Eq$ASt?XaP`u -{oG*`m2>LxELobKwernhcYKk-!C*klBmecaM-`Jj3LiQ^&>6(biAh$|}^?UZ(ZUGU(|_;N_hRfmK$64 -DM!HO!n$}&)y>G}2QHH8qda;|Dn -h7Aj(movnW$3L-nYthkPdPnsKm10KvwWgQ7cdBXjKu0y+9z5^;P%i#UQx3&>k+t6T6R@c9SrP6lT(v+ -U1x~Kg0iP(8CCG~W`6Uo{*4Vn=o(6CzbmEC9Qx_&D9_v&6BI`uXVSV=AH1Ww559^Gs0nX3i6I -!_iqbUn_iUWO6FII{vPnTdm{fD?kWqUY?{1+$|eRP@8K@n}8l_ -(;x4=dlnvbrMq)#_fANqEjS{MzXYQ~`O6nxE05fgOt$a$yM#l)W$Bh(l9Mmg@Ic@1 -uJ$}VtZyDV*5pu-gPByfm8T<{~G(g=SR}T;)ApGz^S(dv)S$%$En0`*uNBtUK{e6E<5^6urW{TCc!4# -CAh$K?bC-Dl#|41k=bKq&uN>B?2n~~(cFtaIoq@<{hzn=&@P1dLbOE2Rz0frRo4eZ -3^Q;D7C(arxazX!jUYyw+Ji-ezijgAIsUP_9-oc$6}INpC%T1JXbj=A(&+sk!gu47CM_YN2!&WCZrEM -U36?P-{JMiJ~WmYpXA*cvgVgN%t^b(`osUZUdeBBoot+dvUF!Wm`zS@V=1RVO$ILO@d$qj$G-rzc{`$ -{A^Xn#|N54cz`f~f~N>o7QAn`7eP*gZhn-L=;=KZn&Vz$Ch2#l(s7h$wDk?EEPJV4Ts*#r@UN&hn|0S -o0q7?dkagcl0qG~vr8CmN=@l|?b=3FX68sWJc$sW)xsb5!uHEY?LbUX+xcT$HVYrMtpv<}XJ86eu3x0 -1o2b$S5zF7s7e6XU}e&UM>Ro&cd)U>r0*)q1I3f_2|GMXOkdcNf5FsE#gO|xIOs6%1-Qg`}z!JvQQgu -ahBo)e#_l -@Bh<@~Hsg9c=Qkwb#ieW8rRMv2CbhqkFv53>rNncXe|E^>fjJ`!Qb4arxO+ -jmP`D#kEC^iYXZeY_pZ)K5^f<6}OkAGt)JK;1h9gZbQ*9tU}>A%M**(Io`m=vKKD~S4>XkJ1)s#<$*I -HiPwm0%MGI~Xwsns?yi17r9p~0IMHb62sI8ju;^Nw -C{rZJ6(e(yk-UBNo#9=rVKAex=RLJXD0M$&jr-hX=a_RWdBg*PXMqf;yR#G}dkeRoylBT7IniX#7(M8 -M=m`jIw=|R)`5HsD#XeDlEzT)A8}~v%kzouSkS+p17B3d||H7*ad+n%r&h5m>=?aG)ijX_|hUV -kH*65MdZiNAi%Ina7wNxmJ2$^iJv`Ck{9bW6FZb(0x8PR{Zp%KXNdEk-h50y{`AYIx2Ng5v%jBxNMF8 -xfA;c2D&z6(Z{J&53I_V3KF*HRF}fsZRV)YOrPz*zSSn?j?aHd*`(J*f!b<&o-P_*%QqF0+><%+_=v_ -p(e?{JLBdUS--OYv4O!xh6nk7=R=onNQFuMD!SU(|De@u=?Ee}-h^;CLT!GjT^K -ba0A>Rw+gW`JAx<7E3Yz9o{tRawT9GSk;5>239(939$TR#s4ZkFDN=4=t2 -7A9HM2tQ!0xpwc6&&~cFQ%F77jut1{DIUIiJFg%UV_)xHKRV6caH^aRK#};gD+tk9h)jM_l1vQvA(z; -H}PsV5K0|oLLSG2pJw&df?i*!$9%}u*aN}qu%aO6}XC!Xe3dA$nunDF9gfDR~)Kz9gSSibS!r4Z1&nsOF%2Bw5=5~s{~7Tz;0RAJn~o9g7@LD)Uq6(Y4WA;Af7E>Gxgp{<;hmRVT?71cu8b#E4Ftfw3~9_#aX>YR#MrW!Lv)bpK~jM{D1GpWyYb?b?`aDqZmko -IA*E=XkF9K=+q8~ezsar0uriXi*NskF1H&_WfjSI+b|2}4ILlf`){T^M;@d*A;agGr`1pL+I93~;x8p -#UI&nqUg{Bsk9)aa~D)2a6hvL;~)Od{;PlUgToaUi>oap5te1yR+Sp*v0l6mCJl6+rzh<=znsCzd`J}Kk^uRIen(OL?a0rajdF|Z;Cr#!yPP7X)iLzi{plJ@vD= -Ix-PY@ihjaMkY2V4uD*RH<=upLVT>b%#J}r3(=5i;xN`SzQuU@Yp8jVKJrDdK6ZxLo%pPx%O7;kDvwicHz1cU{6+6(q-|oS}O -<1wNDf1SHaTTBnn-`WQ4gzXlUG0m+8(EAaHw~WNOTappIDyl+xrFbB6g@-vPWX?b?>o!1U9lZy{U*!p -kv{iW`xM9Hog23LR4fh9mLcYcYnQo^^H9Rz0d2)+KEi)`N#f{G_;!f -89_SD2u7f&+7|6QO6x;okfh!Zj6-1Iof=01j=BG`TFde;)kY`ZUM$p`kSLTJY7ea_rnrGD10ZqCVOR{ -~pgdcjx&2Z`zclelMAToYRCMr@gg|VcB0}_t5a@R#9y;gpFH|ySX2ou$Ln?kDa`OWz@^@BK_us0bwv^ -hQvWhR9S9A`b7htv@$F-Hf$K6QH;IZ98(8Bwt}JJs4U8R}l3cdas-J$j16vUxI_VZvcH8>^n~^*lLc>y?WA -eRif#p6_*eahHntmt;(8#P85~{_4&3>d&_~VDhY+l_+FHq&6MA${*z7b!ou&5{at -hP^8r5B{lqX@9J5Xja$xqVz_EDG?m6u6d0vZzrcIWn;7pXyDPh}>eg-uYSP<{2Pv2;*bQJzBtKW-gl( -gc!Jc4cm4Z -*nhabZu-kY-wUIbaG{7cVTR6WpZ;bVqtS-E^v9(8QX5#HuPOz!Kn|9SJ&7c_983+io|V$wNBBv>$)JY -X^FPk$dVyZNwXsVzH@kyNZstD1%~Oxyqx=uhx95-w`4wF6{5)4d`|dwmu7;{WuC@`U~@Gek%-^&oTtf -%6bTR0h|OazSVrUA^HxaX>oy)o@T&<-0Yq(#$6=b}f+iw2n+e^rd`Cl;kH~Gxqe;xR4E9GvuAXjaMnj -+uwC8gg#~{}+x$@60PCvezOlSUx;CS}={RD@z$zO75@^)f&PcPn?A^e=rKI7=)^pEMqr>Q^kNcH)%jI -mENzF`@{Ow;583yUo0x6InP_B_KJBthNAWRyuBFoJs|UEx@glcdL<;V*w9wu0E -@2^aJEQO@GkNXnz7)R3ncqk^HVl{#Jt5YTKbkpjgP)e$MV12E5~QjU?$Sb`l(XwQ}e%%>%>WXLGb88} -LuZ+9xtSv1MAG^nq*yEse8#lS)iQixKcPTUW7nr$sisf`yn1%h*bCnl_^iwV5I^I7>9gWpqMTSp%{yp5;bH??SR~E -7~o_C9Fe2~LsBLgU>aLf0p(b^YRN)c!1BfnoAZTEtN@5GwCN&7v&=x{PW2UWrk;-r%6q(Lk^ -!o#_aJG)n7h2<7<(m<}9i$%k^6uN?C@SV|(9mnx6^KjBO%%?)^^(*CdtMmUl(u`d`qBad8a^#6I_RoU -O6Pk-KPB){Ru{$MyX8tUOtRgxs?bX{MykZAwC%c_iP6{y$d3grh`+%ljRJoX`p>82Iz!AKyVjY`vC?SOp8Iy;)92SSkPsNTnN}EN&zt!0eL> -X`0(!K+w;FC^G|QiXOqkKFHa}ka_kYq4eScB7yxe<_b{~mdb=r(h`LtQ3I0b~P_BDt -BhEsvs@>D6(ZL)qUodwByLvz5@WS3%5@Bbnsn1;Mc*HLQFL=Pe?%9kf>UcX?TDAL2gLg;z{E#LxDKpY -ipkl;09LaAa1C{Zh9ItPq`kLvnno0VJ|jT*GvWN5BE~m6B5h+j>e>(Wfc4#a;)2-cv>6SSsL;r2*zMz -*s4Mn+p6Djxazy!>Jf-Vm)vRE42q8cfy8!|OtSR~x$1${rVkoD;5m+Nx%>es;STC6K1V9 -2Khw=aaUFDu6JG0`u2K_iE)>!zuRKWm0Vml}&LdidtoB(^FabGVLk*-4cIn;4Y{wVZ8m)Q^cx60KKVb -!8mYY^3FAkN`GE=uYdJlvxwtUcK>N`PgOq*F)L#$cqsuYrp%pYuU6-`F_-=K`X7E&r-O<+;x-hp;Crc -9frYTpF^dN<+DVOj(u^apNV_p)^sCP&h$}Kugkpz^}%%*J@Yu;r05!PmKCf{rpuyr@BX&qwUCQ2&0O4&adn2$ZyM_J)6} -oG0lao=<>Yp6_{smA=0|XQR000O8B@~!WWr}a9_W=L^g#`crCjbBdaA|NaUv_0~WN&gWXmo9CHEd~OF -LZKcWp`n0Yh`kCFJy0RE^v93RLO4JFc7`#D|nOuLLX4T2SZj0qYV`}a?_$H1X>y;M5qNMWyC1@?=u1hk(cx3)Yc?UPQ?emVm#y0I`##AXG(F*X!_NTu<<1+zoa>|Le2fwrgYdYE* -UGe~zaB~MehJZ&^xA52`wLJ@0|XQR000O8B@~!WzQyt_>I47)#t{GjDF6TfaA|NaUv_0~WN&gWXmo9CHE -d~OFLZKcWp`n0Yh`kCFJ*LcWo0gKdEHoTZ`(Ey{;pras$Zl|5$blIvU)(5I7NUZDKZb+U}OR#ooyo23 -rNb1G4#Lhj-nLVmhw_yz&0U(W%BO1=N{gXjF+m+S&}SkQ!7XkCi1FOhVffn%GyBEe2-WrHbRTCh*({S -w9Fup!hqsZd)|^T(o#xD4Vvf{laK=+ps;&F*Ji}Lsf)(6XY>I*7w9G3ZA@KhS7Jq)dc@usO;y0lmdY+fTlC8kZ<_h4aT1e -y_%p~Mc7#cdytL6)*{K8|8;nSN({88(D+mkZ4ubAPkTkK{6pXzxjxQ -4V=T5RB9E<9%JHLJE#6y`V+n%_#8)GcSq^?pe9CxXuVENTj;~VkwNKgm--3$Lu54A5ZVdlNTvytfSUlKNx;bhD*s;%r|gv{0Kj -}kUm3eT$Lt3k%^QWq|%UR8B_WU733Wn$%ZI)<_89-1}N)dM-h^++g$b%XTc=wuV(k|>iH5ePk{h*pg} -Gp8^zUc`yfN?>;f~#lmjw|nzd;En6NCeRIBnWwP -p?jXy_j9jlk2OiIc41qoLztXL@z@Uxb&OGZ#|;DSRnh+rc>sBc!jp}KR(ZX^qQZ5j;-Lfpo9v&fPE$YwAuBf=gAq~~!NJMxR5Cm -`;vQD4yDT^QbASW9~lXI$Q11X4G$3Os_g)10%PXRhRTmV3NIZKQ}vD6Fa>og!Vk^qSJ05@$kbbF#);& -o>`)rg=Nqd7pp8IJplBf0!CVJ9bvkM^CJgG#W+&Nh3Bbn{yj! -00$HEs=^C&XZ#Evi?=A&+a8g@ULUXHzEB634NU15fhR(-`WMyFAY;d*L7KYN7+mQ8%3?h2(XU#%QSu^ -d1b8)djqz=TOrFDqjF#+!RnVC)jwUxDJ7SYZBlV0I1o0i4+}N=6_Ro~=XNyU<<^NCR;zhQN{G5e-xso -GEKC>JfdsL(CpQ@||ZVN9+#Qi__{5;&H(B3}!6&j~yU9>|X$vk;FZZv>n{|#+%_9gOq5VB0UqzjwZ{s -?hlf6<^D-M~*9!QM|5q4zgXO9KQH0000803{TdPL>UvM`#8B0HqiJ04@Lk0B~t=FJE?LZe(wAFKBdaY -&C3YVlQ-ZWo36^Y-?q5b1!9da%E*-Y;edmz6kP>CLTVICxA(6#%J|2GON^eB5Cvm)~R3%s(6TUACp$J{eBC8aO&G#8e`GHG -bV?@o$n#u+@YG1~DM`71}HknLPwjnH+crvL(Aj6vpfe+shNw_4BMb69{{0IgVamLqr*+3>gciR3@BHXJiW2@I*~RurbM~l;nL;sGwN?!4g$tqwR6bbFShzkSyEGf -G}%cd=;^b?OCogUAM6At|mL+Q?MMCo>!B0O^H(nQ}e-8lokokH$}vA@M})9`{lhWHo%Q&S%Sxd`yxS7 -jFkhGvmeVlmI(sbh;zDU;WvRRt98bcn5W+cPM)M<`?wNW7=|q%J0`4DiWT@i797pj+395wWHp?NqU?Vq%G37v}&B| -_p@~l~~5(aQMdZ)>mPweDLR@=U35LtB)jUgyA)a-AUvAo`DC_8VnyGf8s32x#Z=$H|V{uyZ_cSh={gC -OqJfL00EXrEmX1Vf_XpS#fF!)p8NinRNJNc;S+oOGUH_e`Ca=Bt*@2SK-3_H@z2KjVxx>V4Ae(%8U#5 -E!Y#)(pv}5ayBayhU4ikN;0kY-D?9YmB)RGMidHM#^Rc#LvZtBkhWTCJ4aa_BFJH9hFomLkUXE$V)uz -%g~eWH4ApXt+n)$Rm+?vc{YefOaPAkCK&R)Ccx5V6Gm$an$U8tJJZ08wUlM3mb(}Ql0)9*TiHa=F!nn --(j!XM3ec%jb~JD{V<`0#fyxv#k|DV!bN9SWw$&2PsPsLVug*|3QUbrc;sPnXVjIWnqR2)oC@!{qx=f -Z7i22egEnDY#EVEn|+Dgrw`_+o)dV=;!r&K5X66UuLH2Vbkjx%ip_P=LIB_uzvZf(2>;QVLpbw$b(cv -an`T+(&MZUqA+p0o7&Kn2HF*Lo(mgQgpF5p6~?E|o9Gni6u?RZz*4R&u+0J(N1d+Lao~!jT=k=pNKF3 -`RcQ+%mY~8H~Sx+}F=Hy#=mE;6NiKXaX9Zb9m$9R@7w -7a!v;iZE4rG|8lc|;7`eSQSL5ie*rNgC*mrN=X#NK9rr}<~U*u4^Pvh_a{d)Ov1pRq_b3I>S4C7_CB; -WlwIg{8B={v43-4MRjo~1+;WX*t62+fq|RGdhCnRWE`R3$seg6>CvNWTgOHqmY9RtPw<79Czqm_4j5t21!F_MalOs; -AkvpJ*p8rnHIy9nf**LC`S#4ufyH?+hq7gV{~-)lu${JMfZ_Lug^UiVhc7>hQ-l`3E=&$tQDJq02!CF -B+Gmfj8leCDKOyL?XS%)X20(r$udwL$v$1X)4_rvo-~3&puJKrHM!JVv=Xdmgck=dvGM)6HI?HUU00l -c3mNZx0a%C&*ujEY?#4dEMwb$|}{`|_lZ$EAAfRquIQb21FoEAsU8bVEKflF%GoTuCT|WU -8lK<0I2*G*h@MM)Z^<1u!701Ue8C!@RhHdYVwgYBcwJyHkW=0>CJP759OHUo@S{@wvD5)~9JB$DedPz -xJ2Mv$g+wtD}L(L9Pdy)^@(%jQUZj-PuJk-tQ3Kt6xXsJAJdjwD>;+qs3>hVH-beXqK&M@(H77nipbE -vneS>kuV7)Y=F`tU${(qoLk@V!pYxIO9KQH0000803{TdP7_~k5Xb@m00jvE04e|g0B~t=FJE? -LZe(wAFKBdaY&C3YVlQ-ZWo36^Y-?q5b1!FQZgXg9E^v93Rl#oCFbuutE7R1(uwy820ZIZ6}s%drft*C6SMOO5#;-p=Qz516E1#)4A$EfgWJuwXuH^~Z>|^1HG|dFGW>Pze!}%__ -;>Fi-3@3?R@%q0&XOjy7E$~q9`yZ(`KEnRRKkacPLObr%MdwiQO#=m=(YhN=alnF)^Wtd2G9yV7_TD3cnXv+w -0zxlg>Rth9P>Dew+$OX=KK_Y5k9Hdd#3$I8k4fQ7{*YGeKR+pAl~;6P<-jQS;VWZa!l9 -hn#dXI>rn5h3(~-UV5kAA_u=G`)8T9eOAz&44~fu&JvKw1IjleXmY)?^xemKH6Mf-UD|ns*3IC`**-O -#{=`deGd69@W|0G>!-;E*^CSlIB5-BMEc%+yoZZ9U2|^bO+e)Qsd9E2dE>bqZbEHc(RXSn?0NL3ZC_A -&C&N+tJfwR%4`&F!G8E-N(NYuQEXnLE~1AP>zqOc#AOVF9>-U2JJ;(PBpBMtBUtcb8c}pwG&sESXNKDR7OiztZN -i0cJ$jmLsFDg-pk1tCtD$dN$i;w3@1FK5TFG_{UYH@6aWAK2mmD%m`?LZ)ae=n0083*000>P -003}la4%nWWo~3|axZCQZecHDZ)9a-E^v9}S4(fxKoGwBS1j(qwrZ>tBo2{$C~Xe`!GWsc&{WaZ9w&= -7yVgEb3gW-Buf&hIMI2gD;X|D4d^7XSc<1w`5qyh^iVHww+j5~0u!`4^qZ<4jQ+x|FM>^aW=buk6gy1 -3y4i;9)-7f)Aw9<^&)m6=vT$#|NSvE~^WDi!l0{KPv6Se{MooR}!u -`nRQH0D@Lla1*5@=(XVuf=AmXj5SW;G>jj -h6Ax*{@|B7Y!F%tWqC4%LWMm>e~PVVceV-NvP^aXkk&iqeeLc+v{lQldfwcW7nUS|%1 -`d~}lZGy7P>yn&E6UB5oL8JZ`8CPi`pse$%F49q}73fKF?=tt-yK#N+g%wr{((tD(t!4kPK4R%4zf+7 -^D4Il>JjSLyo-%xm@{6}i+ZCM-E6;Lo_HWj*kmRjrNC_qtWLeurtUM##!tjXKji6h9+ -&7Onp(BfBeL$< -vCA(At@b;@9%4nE7uIAxjT=Y$0`dZ^M^!x(2e!$b42A)>@)?ln_vw6gQ8jOKr|IoZ(4NvzqFua8_AvM -EE-VL=o8I}IPofYByzc+hv-J8STf^NV%f%cxFJUow0!hNIxJV<;8m#zbMu6Jd>kzc!Jc4cm4Z*nhbWNu+EV{dJ6VRSBVd0mV<4#F@H1 -^b+0mC8_{hzij~K;b40aDWiMNS17`wb|UCM2f{{%h`D|3P(B&EFd2ZSh%P)h>@6aWAK2mmD%m`)X!*;e)n007l3000;O003}la4%nWWo~3|axZCQZecHDZ*pZWaCy -~QZExE+68`RA!FoT)Ms3516Yn*s4`|bL+r4ahXwzbGX<*P2m9UW|9Vz8yi~a9Ae3M8@a_rvjUC%%qiy -~*9dF2eHm}P4;L3EvGtUxqMafA!p)7LA?Nm!VxGNoY_5qkn7<`;k9y;u^XX~A%MMR-Nk3@pPeEig@cz -2z-sc#UCTy`m{iua;qgIY$fhthdAoUXf&(GZNE#7+MAQ>3AIUmKwk^$_l<@1a2`h0TMY)$e;`^K9|$! -KKWeE;NRymj;BO?&-X5aVXsGHfpKz67^hjfq-mU8OfS)5fo4ZN1RqTusPckUBi9TD;JepT2;aUsdvU^ -8#s(kNe0eccB>Me6dWktf<*}cxM -eCXLMdQq2qDT*$+u;D430wXx8h!06PJsSQc?rQ(|08?L_0x5Bu2h34#HeBy#)`je1B3+94H47Gly~}_ -}H!RsHs}0hXf#deTvt_URqBUABG|5&?lUf%C!dlkLgXC-KF4#nBlM>ObBKX>?`Js6eUa1trmy!B@Y?R -3*a$A>ZfLZwJDSgGJ!_;H3@H)B6JM^HIfu;A=eoUKOm6|5GxbNt^7JG69~67c|a?IaGob3s702OG9 -hhKj^3Z2)~>@PCBaOo7F@f=CUVt)M)!aq9||WUX}Km00@)zjvqY;>jTatH5)$rY$AYzJfr7ww{U6W=g -*~A+1muE114-qsf>BED!1HzbMp=w>{%r{!H*W?eek@qDco6a_6?~okj&OnUj8lp1>t5}SjO0vPT|~wG -utORkb`iV}Mksi3D!|hA&4acD;(S;X&Cb -~@MqVaB_hMR+h(QLl<~sOqP)d1}Q0*OU;13=FUs9WAaAO%ieiZc!`HP2Pddhg}5`RM-W@i7v|tYgB(uNe;RBDq|1z&Zc|2z!tm4?OJRUhmK^K-83sz32Xo8K!Jj8_EA*VnA?4oqAlZV#v)lI8~|S9k-^YqrKK -MSVtZ6W<2^I>C~vvl%5Jg1(7*!;u&Y*(M)HU%(m32`uvCOdLVtr!;q3J>xVo;a!B^$4?I1!$0Qxx7w6 -OH{*Kmc71GkOPE#Mcke}mc#urOcVie?M^U$j3;S8)GwSOKr6Kx=ouKb?k0&R!0)p(U6e`4Qb{DIErAj -P@>vLqW9TIHVUU^LF7P5;xvHDTmE_#3|o?+l)jMy#b?C`zHtmCTsph)`fa;I+fAoWL7#P3_gI&#uWm{)CY!_aUKR+WJ`-i}u-#avhTdnbXx8wj2&oZ?_8G~(a=2jr-m&bx1L+Ln2C@R{lTd=9R?s -CDstAqSsruL_tROB(vTQjwU><7b`F+*ID!Mh&#M4O+Y#w0Rq}`8Pqc3M$F2QBqM3m1}|1usWF-tR4yi -c}e`kjNu1+Uoyu}^8X|v>ZrCX;_=_C0dzYVt7Gd{N3GwhPh(`RZ9k2 -%6(T1MjL`QF{vE7r{S2y*PdQD!B9D0lV8t&Zm=oXL+6>nrsCFLVp* -``VN39HCX_FmTS48l9^TogFu~XT`iQjikCPwXGM;ACY@GKrfUxBS*L~Su}1qW15@Q?VRE}sgzn>; -X}qBVv!Z@p*ml!>-v3lf)jWpUsK3W`XP;MS7SaLA76;ILcidhZsd_ut*}`@kblmC^y(V`NIBeh^6HVm -#4i^VI1J?{)MZ<-t4*aQ?RvWbiS{rFqgczl?AU9L2N6H&Gv{|^|2lFK(Yn%_FYz;Yigm@9nmhw^RLey -IFsc)*14o<3GP7v((`|rsZ)~c5Yswb)D^#c986^9|z9O4&jJ0H(K9L&Yr9UZWf81%eMhoq*_~i%kX%^nMEg-+JxBY8b7}78( -SUqmXrlft#o_p%A_&1#6B(iYzxvS4iw4S}0v=hE+yDVg7v2O&?Fnq};;j~Y*8ZibUCodzUuWu}{8^SZ -`l5khwLtw(eb7v61z^v5)vun;+TJqUX6>wATf3edvIU}CLiNv*ET?$7kal;=CQ)~IWCSBYO0uwl{IZp -(t#G#zR4d6*&_;1A;7zGC;U_@&ZNIzFiO9W5`;9Eqe(2mkdwtv=X%Itu2d!x}_7=ZvanSU4Evovhg{L -lPsyI<4jX3+zMU4*ep($VVrou-u4~2zFT_Y73=E6#LdZabmwRDyIku6U|DmNLrFOzt`+G8XJcdng^xe -d&PG}LL&dbwudyhOvxL=0VA8eU3zZ`V@jc%D!wGADZ9aQCTdp8s~CUdAhFs*;IU&s3zxUj)v3675a0G -Mo35hF8yItmB*rcE0+qRa-c^sE%4mDpL<{xtjolbC`lQc47H}$naM*BIh_iB{=4vWoZ -73ld~zUMg!#8f_P!QxysOoT@RiiRUrL*|)^sdsH{LCl{^xO{Q0yEqDz$e6&E{a}h#(VbWff| -FcGT3wL~Q(ZG1J-1eGf5H2Cny(jj;IxP)h>@6aWAK2mmD%m`=006_E000~S003}la4%nWWo~ -3|axZCQZecHJWNu+(VRT_GaCwzoThC>=QGK6Z(FzYkBnaDgI}#5F5LXc%BE;LMeA%JN&=buxkO<|!<8 -!>u*S*%HAM#0`ESLB3URADLE_+vb|H->w{>S?t-reuNUGH{j|NZg1|FVzohkg6)@811teOTYy$2H&e- -@W_z-FM&q@E7mr2mAABAMLBJzWL^V*7rZW|L(&#-@NeL-)q?P!Bzj_(R0gG -CTDj&m(s=8J4>p`fZuiKWk5@>)oA)bcHPs}Dfd-G$lA=m`Sv@gd(#UR}F>gsL8 -R{wteuMAphPuX2*kW9}5v&oArL0V_b5-aH4-Shgphr;wT0=t|-U!dPiKSQ%iFZ2Mq+&AV!PnYoe{(Jk -CeK4I4t_W3WY@Dw)58e2Q?2m_H|99v3iFq?+{&IZlf7+AQum8}k4Y$5|0=VvTYsbbrz`6!6bU#67V-U -{FaD~9ea@&q0qr0$H-^CqzTgvj2vj^*Moc;c*|NQR#hxZ?T_07lM{bqfdbg$p;&VT;yH3L4Xj;o%lfv -b_LiK~^XovMD{H`h;9zOR4W*MF)8u12mVu4eAJaBJn(#;wM!ovVYZldFrXH}xDYt~#zVzadapA#ycwm -H7>YtITg`TxEU(^Bb7o!2Aa0H{4W>kMS*^s*YPdSDD|){6^+CGQW}ejg=%Bncv9#W@aHX3x&t1@E8@= -$->VQQ$G7qLHXh%`_8TFAPYN?g&oK;xaYw=v#BqGduCH#2KUUSzObn;lO;J>b0%xfWJykzNAUt(~ibtCOpXt29QHt#@VXUDX4gKMDUy_)o%r68^LBpN0P{{Ab}m3;$X8&%%Ee{5!|5^CY!haV2i|}8B|04Vs -;lBv~Mffkme-ZwR@Lw;s&(%p??0*eXk5W&c?`-UPmb&1nibuwy%6L>6k1FF)Wjv~kN0sqtG9FFFqse$ -Q8ILC8(PTWDj7JmxoABR+|0eu5;lBz0P55uZe-r*q_&4F-gntwMP53wA--Le?{!RGjePDlG<8%Gm_4& -Df;jib$%V+KEt?qh}dX;+nylyf-naocn^OMQ^WHLXQ%ugoslga#KGC!HjPbTw|$^2w8Kbg!=Ci9cY{A -4menaocn^OMQ^WHLXQ%ugoslga#KGC!HjPbTw|$^2w8Kbg!=Ci9cY{A4menaocn^OMQ^WHLXQ%ugosl -ga#KGC!HjPbTw|$^2w8Kbg!=Ci9cY{A4menaof2oS#bmtj_bnWrGdMCO9Q{B?KizCD11KgOK&MMX#uO -Mbj%x30;3OlrTT%{y|vU$1Q|;DZwehD?#NkRUW*1^&n&=6hX>+SPw!|f+?XZVJKlL^rctaLRhLFOXVR -;&P`AqTTy?aNS7jAQwfT6$;kC8NPBg9h1V;BUJ;d$l#sQLqJ*l1rhS-R(UmatCsVIjdWFiPsXUs>!xW -gA61ox;m?K%+%E -PHVoXW$gJeK%+%EPHVoXW$gJe$-a|znzYlTo${W#+xCKXY&T&rVYQ2S*#xHquY{n4 -sDz}1tc0S3s)VKlQ$kn5P{LHgQo=0+r}A(r52x~QDi5dfa4HX{@^C5-r}A(r52x~QDi5dfa4HX{@^C5 --uk!FJ53lm@Di5#n@G1|l^6)ATuk!FJ53lm@Di5#n@G1|l^6)B;pz;VRkD&4hDvzM@2r7@D@(3!Apz; -VRkD&4hDvzM@2r7@D@(3!AsPc#^kErr^*}~s{HNKncH{ZSg@bR1Rt^M%BXK~nH|Lec~)j$8k-)Ke#qW -C?hGa)}AP}V{|c>q_T==6ykjho~8ksl-JMwbJbvx=?&GAGAeNbb2LN2P#VncP6;jGwE6%n3Hv1ertIu -fxr@>qK_I?HIQMZpXMCa7)gU18&E-9dJ9wjVOEP7`Fp%$(uqdfb)#o1Gi_~9=JW@_Q35Kw+C*|xIJ)l -N{#ct?HM-|&9S06WcX}B5;*{OVB7%!0|P_~p9_u21~R9rg#q$p@&cK&I3lt*VqkIvnbWXNvdJbFCgW* -{3@}1ekwq0DDoJ&V5LIGPC5S4qs1k-a@en6SFtG#^Bq&*Q2}3MNbP2d6hYlG*PEzO+aA(F1YvLrqFav -jH+!?qfT`dE5X51OLGvm&{of&rqZqD6u8Mrwq#ueZ$jJp6gXOTK&k-EaT3vhFCsY7z9V+-pFG`6tD7H -Di?jXk<{xypHZ6#y#(tN>UUAW~6XWsOBDs;exjhKHo_L(=?6Skhd`sgF@IB(w6Cj*=S$Qg)k -LR6DQH6f}gdB0GI$)bW&;1)kS3uDQ-$!=jR7c;*wmW#)7;n`XI>?{a&@iV{h%rBPrg1i^wM)IP&S+H+ -e#*&nbTi%jmj9cEC(hIU=5}#X24xfjoBB!F%{Vo_!yW(*bA7JeRTl)ZOAK2OlSo^@%KET=sw)O$mK5#OBxB-yQA_!R0hPyEtx4cQ&BGf9f*BjyWM)r -Cmyxz!OZ-mzy+3St)dLw(i5ngX(uQ$T$jqLSCc)gLm-UzQZvLZ()a%4r0P~^yp9O3mw_Ie}qJF+y%J#X^1$0CGr6*u>yBx+;E0tWh521tbEIgTe8<1D{k5NmN+gUHoj%UEgOppK5}FqIW~x@F -+jM^k&n-a4Y=8(jt#gueLptf=7S6(9PP-Cc7&rH+0l-0v?Dv(5$9J#W84PZ#<&f*+5e94za#tK(SV!h -hS-6-Gwu%DopE>ImV-SyaCgRyc_((p-GQ5(_y{LHcE;U-n~%nc!-E`{96?S@&L9^iSCAW%4dl+`0W#Y -vtTOhLOymi{^6VNX1j{Gc#0kOjNi7lcPULwfV%~{7??lWyk>{O=c_;F`6EW{Zo_8YVoyhY}#Jm%E-ie -rZ;*yhIfSc!?hL@eb76VMJ_W6Krf^8=J=K=%T> -n2r|oLKqi0WK}Xd0>m^Bcbalp&PnlO4`5ZQMWp)#DJ{CC_nglXDrOc)`!}R7knS21|MH0;G%ng~XPre -Vi@WWkR?|dS$Q?Pt1Jn3Si@+xeU3hYT?dxDM1tFrpw%)G1e_A<`QyDFbNR}Ey|eyiAitE?v#lUL=rp< --@my#L*B%f@bbJI5tmjeX<>SvB5aZP;OLe0*Pn_t<#(*5D>K-l=TZscgLW*t!QfFc|>ZZE5`sPh;1jL -G2s+5N&jjX(8D#p*Nn;+v{XBo?Y7l5}woA4J5p1YWD(}ZfTfcjAs(VOk!7O@)4{#5|zQMns^^urX+?vBnxS)>vZ=8f)y98{BeZjWuYjv7t6-tPQ>z8f$}b!+sm@mK!wISYr(uYiu434pe9J*rA -%8RkK4i`!$(-B-mLsJ5;l?YIdk*XVvUb%^vucP|eOd*r9`REMAAQbyl_xW$UbL9dmSN^Vsobud{jVP` -1wIvBNxe-a^3fg^$=)CW9S53$^3W)6Q12;{{abRdmO4xi{{lK_-ny2R5wpy0~Kj+>IrOS4!QuZ>UvgM -eZGBc0@W>b)8Lb$MUVSB4c@ZbynmKi`>~FcPMgaMaB$$4OY!@9e{&XbGRee!Kyi+nuC>XgoALfvJLE+ -4pz1i(FrTtz$@yJ3X?0yByR}t8mxl@IyhJdv0AL&CXCW#g}}MR*JOp5c;h~K+i=1tP1chMJ(+wo=xpeOo#BZcsL8uT6OZv^&lE3Gug -M!c6C*!)Cua_D$?tS0-sw(Oh>3T)lQ&8xMt<_hPaIr2dBb60s$1+5Eu59RILc;VIqxs^EsFbQ{YAp3==~e?#r>&N -As>r}HhL$Tur8b|)T@qZ0M`3LTZBi{HXN`G{qQBbJ>8tU^7Vm(V?bCM75DuRn!QvR>?Z1zq|{=tqL)J -c4t)1Yr4!>m>r~Ef`aRll)n4?NVYoJMeUlEb@rw@k9C<=x0bj1N}%8kv~(83q14hx(8iCIPpDzkR(_W -=kf=M9>j{?m>v`$m@Wi^jgnr|Cemjia;YSdm#O@u>$Q8#ySp^| -na{Rl)v+s(;a~9}H5xz=B|ApmW&JA`c{Xm|j3mxAxDDvHcauyxClnBP-$Lx~z^DS0U!m}{(?^5WHLoE -`3_=-#9WtYR7TUTY=5hUT79M1k0u_$56*v#0a(2sBGngogBJ?$=eyc%#e2`$8%TGx2%!r@izE}4$qO= -l7YZoqFzq9vgZCb6P+-j6%0(m(8mHK89DW|us^cw@WEFT_SlEHhR=yX5}+iAr!?^sqy2ot;ky_r?vL` -5kuhcWFXDc4NqQJH{){Qeq^>36gX}V)@=8Ek#eJ$M;SoaD9djx?F$U2q%k}$9Gf?T_Spdf}0{%QFG*QUWi}*4QILl<5xmCG%o -A;Fr{k<$z!2m*s$8k}sA6ez8Bx0lz$V%K^XSUn~dwl7O*1@Jj~9^1v@C7|R2{REOCH98J}=Sd6@XtdF;)QnAov6DONzz{z%S453cw!(Kc1r{&(R9N9|V5@{wVk(@JGQPfj -kN>p%sBY3jPTEVt-ZyezAuOc4>*g{Hj>m#Ow -!~ju_)gLiKW$~;mo$%+fnV}GRtA1a^jI1ACDUVN;Fna71-rT=*JEYimw9}_4_uP%u?p}@y2mQOFZ0(b -z%L0Os{p^)`2{<_ir_E6Uj%;vewo)6=JzFjEOu6QDflb!OFGD^z%ThA*mK#X;IF_he#NT5Uj=^!ep$b -)3jE^FuLk^0@HgOZg1-U3_%rM5`R`Kh+i+j`st-1NoP1Pi*KuFTJHbwnlbs-ktso~`LAwsQncy_YP5e -e|675p(8}N6*-+{ji{to=&=dTX@vQAtb_`Bfmz~2Rb2Y$(KSsnPrZ(R6p+>-CctpWT)@DJdZM42^!U) -HB<0RIsD1Ng-cUjz7u;2*$01pfg3DflPwPr*NdU)ED=0{;~JSZ6I+XRQhRvR+sd_~muZs3>ol6B&z?=^~iu)lFHxqd -+oqW_=1*T~=hb7!5nOZkrDc@?rt{w&}?p3mTY06&i3wM)&INuU>@SJ0c#4fHPb0XpZ{jDq_Xx$p6pb} -9IeKJ1dygGNO^Rr;yuhy50hSGc>(LNB0Kp*PS?=pA&$GeKWMzYm@LmR$$_CiolhH^JY4zX|>Z{7vvT; -Fk|+4tz*+G{N71zX|>Z{3iGf`1PZb2K*-Y4fsv)8}OUpH{dtHZ@_PY-+t>5L+}saAA)}X{}B8G_=n&hz&`~40RAcXC-6& -Z-k88Y1^)#8DflPwPr*NdUp}llCh$+eKY@P={t5g`@GszBf`0-35<9kF4<+YtoTNiPZt3SnKk~ub*Ks -UUGE3*#|Jh{~`UIW%LY%9gS*}0pL@yx>9_ih?RC)!S=NBYu>{71pxW3EvNXeA&hF!u7BlrN*XoxwY=|@51sexb{+U7E;lFOPl7)Ie-iu&_><=UHFuQur$1tIG8id{yDAf-eby&J}!B;j4nLDtuM&RfVq#zN+w5!I#8X=L- -By@HgO>;OpFgzX|>Z{7vvT;BSJz0e=(x4fvbjKOrENm-LSq@yzp`mGl0^3cnxO^#FPldICKQ{nbwudI -Q~r-a#KipP(}L`CSztel*v|s{S;T%8*v}&N -v%r29v7ZI@vxxmHu%AWjXMz1JVm}M)XA%2ZU_Xo4&jR~d#C{go&yody27a-tr2s$g!|b|&-i1CupF&6 -fVuuUta1lFPV26v?;Q~8c#10qO;Zg->1s?HF%8BK+B6hXFt`@PY1$MQF{VcGbMeJvR{VZZX3+!hR`&k -;srOCK7$jt<&0jCL015OjU8RTYy-+yA=}~qzrgzExBSC7HN^hVuzun<_C)dBy#=O!i=+Y0yrE@%? -Av1E9tS7HTv%ci|v##GI%K`buyOb2PGhS1k$F0pz!QIC3ExYbOmr&Xh-?Gaj^!w1g^yATwmwr6@@zT% -nqjt$5)7>4Mo#W;1g=k_~N8fl4e(QViBZlYT4{eyI!D}S%b0~Ky=XG9Z?fod1Hr%HnYD2=!lQvW|X!! -5h@OM8to$Y{n99YXC&<+~~yOcxto_i3_h9wQJLvDk_2yMc-d5HRp=OI*&Qlgs?Wpf32Epi3G4I1|x05 -`~s(@i*H5Ap`{iWrZmT_N;YPjhjPLq1M}y!?6##+K6t+=VEXD@hp0h1XD538E!Mx+8RSuQigrlNW;a0${@*?c27{My%U|tn^RXHQ;L5OIOd%O-rZcZCK -8YJrKYPflm*ZrHYPJ_IszYq_t$=MG=LPODpBP(yj*{LX@MFr9qdvLMt0XTFV8*B^p=L_0^;$(g)R-RL=8UH!U6B2l!LTiXLmb^sdta8f@ -gzhi95$TKT3g%=u)T0{JIl}|0wkr6~7pI^P@hyoYDXW^{7>Mf`1>S`~oon&g=2y=h)3%N>somEHvEG0 -Jy#uZK!By+F)o{+HgkDH*IKWFzu@2=8{~2Q^Fsm4DIXu^&r+~6A~JxHk_MlVu}lpRq%o;_`_fb`io~K -{-e~J2i!a;+~+ROF6G$pO(y3|VDWa1ROMa0n{dkBJNvqGxw -$+OW_d3KyYpQ3AI%p`bzdKm@Imv%~hYiLR2wux-N8-6Tm(E=@E@RFs4J;j(ySn-I|;B0=1$%gT8Msw` -8gI}sF*QhxFJOh9oW-Qvy&%4Vj+;p2}|x`OZX`0%nc;O2GdFYfbvG)W}Di=|zv$uQ`yNoX|A;@+jim^ -!OR;WX)F6DAsDJTM76lk_U&g*?h1HJqn*hy(e^AUO>>w1^4I0j%UA2S#lx;6|nENwVLJ9VHCd$>!zc}9aoV{bx1L(>MJs-h)`SKOu7hJXg`%J2(WX1Mc8 --92LSsNpSFGl*XK_)5N%Xn!2ix~(g3AAI_}LlzGp`{1S|pzHQ$C>hyPpp0m(0J8OrY*%m5ME(U2?43Cg2xC77ZQAue)s0(9j^7*iRhRqm(?b*YWzY(f -1(q(;&0+v}dZpqs-Fq+$4RJa^Sx;bR}Zn1a}%ViX1}RWzmLu8eEfxr{o{`W}0yJ+=+UWNgFa6SnLZ!y -Q;X(pK=H!>G<*GtY7?qT#OzhhmB&Fwek=`{J0Z>6seNq-{qz)H -|Mf5a<(Gf^@4x&<{U+0OmUp{cfA9ytkRRai+KWAmfK!+Q>qkPUaAMO0z2{eqSgA@xh{*P~g6*YhkCj$?Lns(B5KD=j+D_S(`r|ue8$!@_bAb5cJ-_#6oY`!a{F -HxCfq+(82l@z7IXt1UIdq~%7Oy1FE{ratPx`KYq-hD2l9r*M{{fd#1w~`g=g@sb*(k;SC~vB9&j( -MxLY+tvC2>20Sf0gkNc^Pw9i#on=Kbqbw5H_1ZYtOS0gSq(+~I5$c4tIvU+o%#!j?l|3au58+-emOh9 -PNE0Q7q*5J_R{~oAN5|FDTdbB>&s7Ma;uP3+4t6*+WJtJ)E6*~XWf1U999;WOyR=1$W5fkw39B_tuRO -iv;K6FjLl%iAd-3uDl{)AeYqnseI<;d#qe@t<;Ois&WiFDawBx;Q=v%bKC7nQPDOaq0e6WtAn4@10sn -F79>&LC2rL&RLGiz9sevY+DE}-9>wy4q@+AJ2tCqf07mt^vO&$uOSyII`GEv(nmnR&Tglv5Bt)Z|X80 -j~>(!5C_Q$}58@$!KL>J~87J6-*bR?Pbi%kWIh0v;Wt&7ML+l3KU{okc8jj0C -Ur$f-<@7BVBZ|P=I%lEK5nkgB+}xoIJU=rc=hrXP=H-QA;U(W+EzVO&mC{U=$5_Vu^&K6WPAcSr?Rd` -)j`Rt#%%DLlynIGt7g3As!t1W!4rCr5K}E?-jfWGLA;n&E2Zq~UguklAql?MqktA$>fHP7f3~dd2Qr2 -}?OW}~No@h|iEJ*|a+{SysO4mRPmu*yhEjiuTmn`KOmSgL&4vI#e8ooex@q2k2!cbRax3_>%%p6V#@M -$~8lD(SP%@6c#`LDA*Hd582uaMr=R@5D?-K2`6gX$CYA820(?VoFo;~%26nEV4!O9KQH0000803{TdP -AHI~LKgr402KfL03ZMW0B~t=FJE?LZe(wAFKJ|MVJ~oDV{2h&WnW}rbYU)Vd5e!POD!tS%+HIDSFlx3 -H`23E=i&kYP)h>@6aWAK2mmD%m`(x%+*C4@005K*0{|TW003}la4%nWWo~3|axZCQZecHVbaON|WMOn -+E^v8#y;qYR*Olk{u1|qh&rDO(uF@Q*8BI^-$;^m;nEP`3-sp(#z8Z>Nv?3`xcWwY>;SB*0wm^cggfA -3)Re=$r0~iuP7>We>f&y5MQb*_`+(bdb{{7dg0|i2i+P};^nQQH}_S$Q^zg+fD&p!9svZtSW;i+Zye; -@zp>o33f`0LL-@%Rfb{BqedPrdZitB=3_)RW78^vh+hzx?tGul@aVPrmf{-#+>H>yLluFPHu7xfj2`? -6s#}U%dONm!5d}$>&~r<_AB0{pr7LFZ=#?zVqGhe)k`X|07%WKOTSOl^QJjr^kO(|H#v?zWm~{|LdRr -&$Rh>^#$Mg&Ub$J!=F9%>TA!v{L&A9xaL%n$n>``-7zv#kE#t53c -D(^p?w_AiTnJl6M%zQ0-aSIJ*}?{EJ6cVzyK&EJXnJ2ihd%->D(cgy_UHh*`_-yU*w(^Kwjj-~Ftvq5YkJ!p1w( -^LrJYp-4*vcce@`$ZGVk?jMzC8YK7L>NY$|LDBS0s@wh;2b)3sPIqumw$9(6R+>ThOruRvw9!M`GoX* -!q#!`jJ?9q_%#f_vP_F{_1a*{q(OMXL0G9u_~r;`CwhlPqpLEPjf`&4u$r=-G;5ZO==-Pt97L>N2G -6fwgkB*f`$I7E)<j+IBp%A;fD(XsOASb21;JUUh$*#i%A-f9C){_M<%tk!3J|(k0CA%-9e`JC6DOrV=7zD_zZ^^Bc^3bNmEDmj&^bAt -`&i6Gad64z{`&b?Vi1+uiJjnX}11t|A#QO(X9%6|19}1YwY}~7v?S?Sp{lk1>P|f@AvOMVK{Ua<7k= -^@8Ssrxs{xOyZ1-*Zq@;4icMzTk@op)X_K()yj!`km5x=hAxT(t798dgszQm(t3yv@uO- -y>e+|n$kLw()#1l#(1Um$E9@@m6bc~n* -&QD3mk4^{}Uf{FTqQGPHWz)C3U3-tZUBgl2D04LW7a@{7t$u)vpcL;EDjUd-u0-RhU$aPeJlWPRIz9 -qoPHHKXG3UG3bA=iBZoLpnb^?(2;*BEj=B*4ivhFsqj;N%)Zu15ukTp27Ry@G`(hUAaS!<^(}NdBY%C -;22u{<+_XrMfI(lmyW~_hSJN^jQH;&rJC1w80--7GT|Kl!UnF -gU!a$Pa!f?zG|R9+HC}iaTvMvqxs|Lvg1KR~wNQ{7~F!!_`LQ1V0pa+Hhu%gy4tbP8&|H4ai -m8X~W620lA7hZ8*6$Ay;vyE?XEiAy;vyO()kT3$?ZYuib;9i;n_1g&i+-FA@f)hz;oxBW=GZQFU< -c98DXHwA>sdsSRbI|%uswE~=w+o7s{EZ(9WM0!=6Qzz8etKy0}L9`#eA;7g@ozQ|^eVB-0%#!wuSvo= -ZSH-(@obWpkzW9Mo5dPJ}0zwV{NI%+nj!tj~SH;FVq1s+OEx=XV4rDB5ngtnuB;MBLOrs3-R^;K5r%{ -G_E8f;+QKKw~?vv#LP;W(anX9)Mq6D$1%z1?@2=gQHt(o(!S*Wm|h~Z>Gm>)596uFdYl!u!7$!Y;Xn4 -d`ag6!%?X9T#A3yIZ_&IxcKS004C)J}O;rN1t;m8lZq#)GtkJk%uw -H&#=k2ew&PBBRHeJlbgoC`sQ?_=?-h0_R<|FAaRPdh?LsgKFn7m8)MHM78A;3wff`r67xD; -SiK|=awRzfjyfmc=tur)76F7V2L09*57fR;StG#8HAXJ*%E -Qhp1DHmy048?X!Wh}YD;oqj$s=2MWs?9Wd1MQ(Y!=`ok8I(Utpc3nkuAKkO@Na;vV~W62yl`|w(!a>0 -Z#JB7G4<@;N*&I;gz=pIJqKQ_|YB#POiunUfCzW$rahcD+dHPxguM5<&Xd;S7ZyXyeq)T71_coM+G>! -A{Th&xBw?t40Zy(+1zs5!;N+Tw&$>G%f<@Nu%A^3>(#FWzeY8_RiKibF;=T`AyQ}> -IY`_vDYxmJ|0il+BA|49KyHC~%K*vVhU+O9g=J{RKhr7yx+}%}ie=c_yBX@Uood8!^kh{Ao&dufS;yh -HAXQdoM7JVRG|FM(@QNJqX=sR8%5F~wdLIC+2sWkL9hX5lFGzXN&1+H~bn^=-hZRU09Ck^1}XxBxe+8mYfex90_j8(~<}>=o7|Ej!sP -X`!;Jyjs?wB!8M@c>mh}BITj)cuhXs%{ffky=FQk?FNX^DH3#_9up7@Tn1{AcCheIj|&JL!cR{K2#)p -BlLG8)yQCc)>$SB4?6kWCnY(N21VCo&nkOAs1(CA*RH|SnRJc!13kY`esVD?_xlhjsfYqE80MVZl5Jd -l}h#u*=PcI07=%uE0Ao@!JLZI;Jgn*y{nHQHJulMPcfS`y^FAE5Y_>?`W1nIqN;=r_v4X4iHIa7$k>$L!iJ0nYzodfBy60XCpZ -kfFNvmH->jB?ua>?G@l!ID`w=_6cyhMWk@;fB@IRAwzZTkN_uFWT>vaE5OMW8LDeX1vt4PLv>9W3zwl -vkfFLJt%S=^B^4^Mc(tmR|EM5dF&#H)EkTw`4Wa7g$lWZq1X-?Y`V6;VtLpT6Ge}uHw99fORdCI})k} -j+e=E+s3jX1@bml2iTh})V2%^2dNk9stf_9bDfkAk_5hZwd&ixV -}w5sPNaf3kVvyzC%FJ$n~89f)BsGOF*dp*LMpD8oNF!AZYCR9sxmP*Xedrq{KcuB_L?*voQfdW1pQC5 -cKicxPYLK&&~)4`uOaufS`}h&It(m`0TuZppVZk2nhQ4?4p36kIya%2>SSJLO{^RXOjYgK0XtBKo0G* -%L0NvK4Wl`B9(T1xd2$u3IVX7egUwL0Rga&K>@IjApx+DVF9p@5dpA|l>%TNs|3J4RttcAtPueFSStY -bu}%Q&W4!>_2lFhcTdSL5F3&FGyW;w-Np6e$C*k(CJhyJ=a9M_>w(V@RCp2l_PQ*`LBi;Hm``V<}d>*8D7T%Htjd9 -I67acc-`#1vC(ZirWNQ*2VKM!X?j&8Dq2viUox?CD!TM*)J*965f;`r)x7jDP|Sjl<3CIDoT;axhameaMcnSoSWik3s)_Xy16Niw -s6%FIh&i}XkE@GMb74?I9ivpNs+U;DUR0VY*OTGZi=IIIhzzYo15ZBUCt&&&gQ1LQJ1qxk+ZoeZq(&$ -QsiuIiW_w~n-n>lo8m@Y&L&09=BBt&m$ONcv$-j5)a7hatZUk!rcMRe+N#axAyD32<^na^={b4he8_MUv#!y8@hCksY~pRDhE!(jvEx3vhBp -KIGO(0Zy)o4Y(Rf2)I5MNnsA|S+MpNle*Ao|ab2?(Lt=b{r#m-_sKfRK^;TvUVk8=s#N0DX)JfIdzOfIh|rKp$rWKp$rXKp* -D>Kp*D?Kpz(bKpz(cKp&R`KpztVppQub(8rVj=;N{g=!1=F18XLKw_HHb$M2+V#nQ>&^$Q64_}zejpp -V}T3JCi6owTD^Ncp>A0d}9GhFdS$!0e6B59lkp1y&6=4Wr>wKn=I2Q^O^68eKaDrr}mNG)nhdE>vt(c -B`jmpW7QPvimYMBk3Z^rffa;Ic>Ir^uIiGn}*UvGV%6GgMxIw9x*7`#O>7vx!u|dJE^7VCZ4tW?DkTv -$ZfxtTA{YwJj7ORXHc}d?m3lvjtfoOvD^O3CD_}E-2tnex@#J4qp^nl_IATPr|F*4bUT=3?wZ`~rRLT -mwR87fu6Nun-8OEnr`N%v<~#eh-q}AXumkv}g&E*B3vVLx~`2CJ6-qAT^spzx^6E$mr -dyuZd*HKLhc;gd*`4i3Ogj-Irxr+Zu7bVNXc6DZjYl*%T!*Tu?WtB5SNl_yKwbKH);8G_+Ehfm)*JSot9klVQXf-{C$ffhq8Yv7;Wv#K=oJrdvk+eK@NPh9{(El9nl+rX8ctetk%y1k7jRY -EZR47?oFd)0UFLje=6q-7Hr~vf@66oBnwj&Rne&~Q^PQRVotg8US?=E1ja_8UcV^CaW?j3HXXboo)^* -QuzBB7O`MB^iE8KTEmzFt~mN}P}RZh+>HJJC=kU4j5FL!P)cWy85vsE&8ZZCIkFL!P)cWy6tZZCIkFL -!P)cb+YGo-KEdDR+)3Pi>o-JExO7r;|IUlRKxAH{2ec4clhsjG2z@y>m?V0A>UgJ?>T)mos67c$ -lZ#8yzOM|{6g;hLhib6dD}Yp+{IM6+ms@A8|vn696WdX7UjF&qfl)K(qx6l4o*ZGcapZ)f(^Bvtt>V~w -Xy?0)9?xpM8OV_!DZelx_UFR0MZh2AHxrJ`(e#^OquG_4t>ryG*hOJ`Vh7+^v`gEPScb&O+Teiw~-Tv -iW*FEYwQ|>xb?mAQMx+cEsn)t43zPqmZ?mE-yy5_sz -eqkYvQ}kyt3RmX~S -LX}2O095BT;ZCy!ZmS)+uFV8xOa95uENc_DRP^1D%=#7!X<(VmnbW`?tNT+F1prl6kQu86ou25+mfYl -b-r+Wu@t3~v#ZaAtIvho!MAXk*V2WoC40RW*WI~rTA;mOC?{Z2SF -{ZS^nPZbM}kQI#$sUb@~`*^&2=R4K%wP3bE$Yel7-pjT!#z$@L%yfSm|<64d~bLw -&v>`E*_zcaD!&LycOZqumJH8iE0hE_VmES+JNt}!ZIV^lihE#364(lth$~7$&<~7`zTqDHoaE+0|J5&94E}s|ZcIr-TJ*eD<2^EIm?o6$t|L -O#d*+P?kXB)8Q-~l)L!l?T26UyG!-rPd)K>)<~plY*InbLhgOAc!lFLsKcYU@vP6BD1AF((Aw^bIby0 -zsQS1Vgx=5ZSkwx!~LSq-9M6ufeA&On5H;P@VH+rxSjJe8-A$RJDT@zgw`CoJsyz3(Wi>{fDViz1ov -EQjMab2gn$o*mxxnE2o|16gdsEb@hOs6SbI=$hPq7KlQq73M?q8w;k -5iE4W8ASzE^4`X4pFO -NBlD=`t-j>~jJn9bSIbr8mOE;%F7m(VD__gyf9fK)A85-B5JxSSPN|DrMQ*tRWa=V!RoiQ*-RG)%+n; -dKUK|VlM=f%%+ICZA>LULVUbXF(t4!@B_R@CQ=cw&B+iiRM?fB2`M9z11{Cjm`+x3b%Zu(7Kbec}89e4g?UE~a=*#7Zi -lx>qQ0FM_hrc?ggfxzpNl=L3UoPNzlS83c_rzR|Q}W`s)gUE`F*Y=;G%Jk{-1NbI`Bq#^;!XeszT`#Z5D4q(4h8r8)J@Eh2h+Ofa$t2))uT>f61r9$OhVTqg$g9pw4z`Zx -}LgGU>f@LnKuE5?hMMCRsJ<^!&=K=T~|MhWw*!rc)E -QmwSPY2(Rjq2iQpA2?aP|WUCUK`uVV1ECE-~4Ls|caTJcTO0!*KsP!tsOiP|9cFT8qO36clrh7<)Aeqy8mpE;%kIy|KW8zyU&#tA1^wMt`;hO -270+&lTK5@_gxlAxhav&KCps$`ofSRf7S;UF;8C@ -QRI*Nz&hsX3#%0Q6F;z&dHTW{MN7y8joyWIiu}1BSkOFuVS^%nq)J42Z&Kvt9Z}w!6?u6_l=oIeUfvP -qy-ksqcSL#bP~_zuQQo^0d3i^a_oyN-?}+k#OOcm%OnK`eHvXK}GN!!s92mtfqkG1jVvX(LBttZ>~E@+uh-eZcqyc5cMT#=V|LV2H6=OEf-%*v1NnuRu}J&j4j!Zyr?eT5AKx>%3EE$KRC8*Qr_y~{n&N -cq`cL|`{QHFCgrUz-k%^_HYsm)@%|9mvPpTXi}&ZqmQBiAUA*rhmQBiAUA#X{wro<~>f-%@vSo|%Ru} -Kjlr3A7x4L+LtZdn$yw%0~lV!^m<*hE>A1+(AC~tM~zS~^3C~tM~Zd=N_i1Jn!?{=oFizsh(@qWOgMB -aV+lKO8ymRlm@K7C33w?AmMM6P}MlKO9d)@+IV`}8IC-)c)tkC!d6Ddyv!Tvmkn1jgyP1w(aF5Ws7% -De>Q*@%#1B{&d(f)QJJy6J@ls%CH33~w7z?Zb0S$K)#bXqF{3h -Ll~kAO51B19R!McaZimdM%&8J}xo(rpx`--Km+NNiM`ccxsLOThRq7(DL|v}iEwe77O4Q~0gJ#Q|@>Z -AYCM(xPl()KEe==>EQ{L)w-OicOgL%(?x_UxgZr97Z3wckd%XJ5b)J2f@gu2|WmvZAYcH69rC~tMSZcCB6i1JpK>()QjM -U=OO%x)23T|{|n$n19BjLL%Y){xn4z8P_@`}Bl{%x?e9s4OUN4VjlX*tev-)x|Gywr@#!tBYUac;Axp -Ru{j-3BM)ftuB6vLw-xjTSMk0&iO4VZ}s0x9Q9jL-s-=XI_;P8R{!k}{4FcWTm83N^Hvv8-s->I2Ay> -g<*okP9~)d&l(+hCw@qhVM0um8lgo&D58M$80*N*yQ=(jy^3kl$+s2pQ}-(3r@o_z-?2{-zhl25e#ZetRP;ebRJ8cM%Fj8hn4z3JrHG$8r -ih<Wa<{8Vu}m7h3SrM^xx891dDjY%leQ)_lb@)z$Gp~*+Fp~NslCwBlgs7s%!n)B>c-eYgh7-27AAlL79 -u2?9JCPAuqKBrM0hkgY#}CmOpaLCe$;n%9`&8sqrNkL)OU6t^_|6|zO#JPcUF)1PG-j@-?otY+-o8A` -HqFu=ROOm&;1rsp9d_YJ`Y+*eIBx~{iyHkJnB2MM}24hsPF7P>N|@^eP{Wo@2np2oy_)4+3&>ktJ;rS -2z^f3@5Cgm+Ls5&crxy}ZESr%R6b=zf!SKM%eN3JpR%IhoUJJ*iuR*K(Rq|8vPX#`Us@CoVE0kqSv=} -H%SU}@^@#8E>lZ4f45v=n>(QW%S%$+rk6Gr{tWo+WM})pW-E9**q!^t@$I(+SJGn%tfabrIC`o^3Ihcb -w8*2F~#@(Gb&*Q`*VEi9RMOLKf10q-g0k+Dqt`0=1ve6;&Cb`_PGpk-TR -O|P&H^BVil=iO*2uvfx!gmS^%4v&{Q&9?3ITe)C79%IWY_TdKC$+=Uhr&$my{G+&l0wn`1e1JImlX93 -YMJYMPx}ldg|pHKrz{1kaLOQ@|0%$23{)4mnMm^|ws;OP -S-_)ccs6e|4NdNhdqz+Wbl~hkfb`4(qU`K{OU9G^bZmo;%ztDrj-?iNKY2rSYhO3K0q;z-rMn$%ZSQo -YM72}F*PcH6@txu_oY_7I0vYCatsOs_gF1=J2CHR2T^*^Plq3!~kYOaf#xaVyBPif0gTp&SW&&`GFXL -wmHX09H5@?ZRg5}Q=6i&&Y46xpP5+?NKW{lh;fX$PV|x|o~#)9aXfY$rVKYqY$Ot(@K77e}}dgi!q@0qtHQN7f`#5L%U3K``z_K`)K8dugQIOC#-G8fo{^NV}It+PyT=?yZq -_FO9T&X{6mtBW>T1AnWnCf~8m1)?n$igEa`c_=N(jPTHX)DC1cLK^f002+DXtK~Tnv3OYTiA<`MIC#z`E^mS|6eI^u~me{B-d6c -@q)o1sd=#2lSExTx1p}@3gUcT9~Z>={sASyBm77~$Z)CA#7k%(R6=pJ5q3Awik`R-Btn?03PFUcH4WP -ue6dkUP{J3Rlmtut;teH17hh~v5~{CSQsN@T2t&6|KmH3v=vOUQf(6^-N~&J>VC~4=mHLft?MPh|MD? -VCRu9!-SXVz9gStOf;H7~D7t!4ngDr)Tz>dOLVAQ8H5t=9r^(FSOA$K+uHswwOgQOA8y*bTrutO;UJi^wokb2V3tl -p7E<_6zf{9K@iYENzIIz5FbO$kk*qK(3Cm)k{0Ap4w^k)=sOZc3Qo()9R_6R&VXJ9-*C9PwljNX{Xgw -JFVW@Y4y@htCx0Ky|mNnr5(3ZR9$2@_O6S342I5FpYvyK2k*Mb=9S~fZGIWYX!!50JX-%#S{Ujsa8W> -vDB$kO6ZJo#NuQza0@rFi*djF1q9v{>-BoU)NSt8O*}df}6=guH6xrF4aT?pL598ELl&XvD9&K?7=NT -yo=J_x=AR%ARJ=E)ag8?V{&|to)f?&N31;Kio3WD*r6a>?4D+qSmQGlkfPf1WhWW<9;Fjf-kaAdwd)Z -fT_elXm~d_NjK6#yJ-q!NHa%n?zv5`yLjVGiXNceHRx&sOS$RG"G7wyMoZVJfk2qF3&0mZOd~CLenCB<`m1>o>veWmK -PL+cI8C{p;>uJL67`N+6@iexe}g<5dMgAFnA0`gmPI(8o^|EWP7h4T3&?t{~{+7Yc$teyJenL --KBE(PK0rEutPZvFMR^PB9ZjYa*7tX-zB|J!&GBzG+P?T0LrFu|)PpLdu?-=hyf4NbsaZkMv@SIWAgR -u~JSeD^7&b%8J!;T3K;8vsPBDnA6HyMm;JkR?TT;#iSUmtXMgxm9<=YcfuMpdsNo4)uXavl8shYOtI0 -*iU~FvN4hn1an@(Md%jPXxh=Hf3=!$~zyAY8!Jq%YkS2&hE(e~Wj@&&u`kM<1-7Dp8i}$+7&ZUX{iJo -|e=(HkC@;EiF2s1oRol(>PI;#kCJWiccgxL(I&MRsIT~ -O2kx~M1vx}*r>!lxz_LGh<16(Rj_YD!TFbXgG+5U1V~gu$@8W6KpmUt=p2L0@D2ilDEt0Y%W)*q|clY -ivjn^fflD2>KcuQ3QRBtyBbkjjd7yeT}VF1bvOIQ3QRBtyKhljjdAzeT}VG1bvNd5EN5i8x>Jsn-o!B -Zz!U^HY=jOwkV>$wko2&-c&?=ZBs;jZC6Bn?NCI0?Nmg4?NUU2?N&s6jVhwP_9*gx&`($Ex)TNBZj;* -FtH|Z^x=3kVJ*ost7tX3%KvwIjA#RMe+oXaHD{_rQw@JkuQREtnZj%Z*rpPYXs*A7}tkz}Zsjg}(f;` -n#H4Wsct}eMwIPQ7qLVdH>M2q&Mjgs3TsxG3jXp7?;=q^(3KUNS#@-qcNB3IPABjLSWpop8s?yF+=a^L1zP)kT!II^B+! -cZc#;XWQ}e?oi%uDf05pC~x(wZbzuPi1Oa2$jdvUybmby^3EvlLyEk-Gs^p2MPA++<*iME+wQ3@qP&k -Q^776o?~{tWymQK1-Ll*6sV<_t)qlF}p5ks!d22B5wtK3JC~pno-F8oP5#_DHyW8$5?&g%Y2JLRUr?{ -I_-rDxM?Vjo)%3IyI+wLjuB0qL_T>ZD(?x`+ZD(?x`+OUvE>m-LvBd$2aL!zBlv -W#1Op-@%P=cqL9MRJ1E?_g>{ira?x><3JO2}`oXyt<|@};d2m*QUgg#m#}7_mFjx6!xzp2Pf1p8K65GqS5!%)R7hrnJ&wLBh;?1B!x5XIH9qVlTPbm1@&ituVVvzYEJ1X1APF6alFWa -pcA9nS%EU#_Trr_gEw`yG`pMmPyR+I;AM+Yj(HF5WC;a?$%ZvyWhkTRxGePQLs?8z;Pps$l^uvoP*YrGDYY|NfA4}`vSfV0AKjky)-xv^MdZsie -0Eg-F;Sg0|#azarDNX;CJH0D-mJ;V}?xm6lZVS&cnDkG?%uesI76a{_FtshiW0ZCS&!Vt^cW^KALy?A -c(K}A7db6d76N`SOE#aPSS7OlOQLp--d%>lEB=ib!HhVhuWH{VbMeeFsy!2C+By%=bkU#Vt}btm( -y)EqG2G`~vYC~O2Uze?){2A<}3tWyMi?NC3D0jT-C8vkND#QDAY$ry;5->Z_x#sKpN9vYE^t36Mnh`C -qd{6RG)>>n_HNNX0xuI3NxM_>zqd7X{JJrd`2P6&5MoY$EN+#hj%Of`V51m<-pihCo@pVgoV+X>8{Ri -}=zt@(3WRk17L{3TT>#<=Du)ZCF~nZK-66=PlVm-RKU8{+(B?T};4YoTAg4t7FZ7*fN<*w?~{N*-GrE -{tfU!x-4Yi21FcuZ69uWsHR_ys32qTN^HH*H#^4VhcOf(PCS}g`MiuF*dfaOPg+NX}BN43!|Dcz|ph|Z>bSs%xvMUa0rMd4NdPJtaiO1P!jJ&Ed)K6j>Q(#I@|))ZQOSV&)9rmh=LWR25zw%!HYN2i@Bk8Mn!}z@cW-^iooAvy&7TLkvBue~M$kI&@E?0yt7zbA -`FX*OcC}Z9zL!J+c6FfD8gopgAXf-gpfT?pT4lANcM-)M&gIc+GhV9^9MNsMBDn(G~;A%xw=^8~;=~ -_k9*E&Ve*Wh|Z(AVGwMbOvaMn%xq;3h@T*Weq9psyhn6wkaJdPfoTHMCC=^fk0!5%eX)a|w4|nI1Z*2 ->Kd2qzL*NI;;r#8hTd|^fjcOfX8;oC}G0gR;Gv46Y%(sA@u}2BX{V8BIs-Aq$22RNNt(Nc?_v7^UT~K -wdE%DrMAqobBENHIca)GZMkWOq7!bgGCjCO5$$TLBIs#E&6{VDjHr3@ERqp5Ii5u_qISizNJcg*f}Td -UDT1Cxb||7rWWKd8 -pTGkFKqcv|#>YCJrfcTkO|ML(!!z%zOW&nco^X;8t_PKLCK@~o2~t%p46WJC>>=bVh_8}gKsA+3iz<7 -8;NBKkqCqCDSZcu*1aHLSq|&o&uW)8ok|!`jU7T$5pKW_YT}usR2xX)>%8na?^P!HNr%f3mPFHM7k?G-u=I*})de2*c@?cO&@%3T$szxY_)Pxzj~h_K(lm~gac;(=N~SfF%bIv_W>im2> -Sf@wWcOS(C5EzwX%gi|FF-B5BmJW_Wgf&+kR>({NHz3?p$>oLzlH<*6U;FvUbe|#=O(mNeo@q?%BYUk -2Q*pq05<};|4bQo5ml+E#7(5K6Bm4}sd+IJxiDg^ -8s`o?HnaOJg$eXIyX}C1(C6&iM+}VlLPnnn^f|ZxvVqX&%*J&FLZ5T1E*c1Z&Y#|EAoMwRz^E*NK4(@ -N*(T8EHxv5|gg$3B84F9G&za)~4TL`DcG<^5pWjTHI)tMT9-ALG4NgLRt~2J4_E8AN98%inq^Tw;^f^ -Cbl$|Do;|5}`+|~_>5OrOgRD`)#GS90Y2MGv -kI5Y%kkX5KRy`c%*n -CT5o#l}o;gk-A3ygkn;sqbdbdRQOKp0(CV$%L#@)HA~vH+yCnV`f4$jTkc%qG`mKnGj7Q#>|9h8Zl-j -MAL{dG9h(TrzmK&j_Cv;6H-TXih@e(curAJX&uce3M&1*OcktA&{rMFDGK_k<2Xe@Uv(6xDCnz>;S>d -Z)e)ScpszZ9Qxx=7M{kOPzUtUbQ5Uaq;oI@Il?Ij7aorzA&AmZuf7p3SkzHw&#K?n~&UB1Ci0MqnZFa -%6#v>16I@2-oAa$&!2#tYeTjMsn;A-s1gXsE?8lek*aa0k9^j0Y1L|mM@qiisVQh -T23Qs0j4wB4h*qqc+GRNF!BtLXg_4b&?bgy5Vdu&B;uU~yBHsHM1e^OB!XiO3IqVHEKe(2nU-i+#Aqvx`e(4_9%kB1~h=Is4w -kTRMeM7ZWZ;VR#{PBYLylBrB+!{Uuu;V^`+riMSZEkR@9doY(;%(FR`M&)RrsiOKrKLzBCl9s4q41iu -yXO$Ys-$KJkP11~%Orm^Ai~^hJ8j(Yj*Y>))%_#Cpy6y@8#^u_k?qUNdPVnDo(6?yn8({&V_I=`{_#X -56@gq>p~{;JyBL>udA^de6hP=c;|^;>)bk%i3~TeL;Wy;gfm|UFwm=x4ozrWO~7*F@~g%?)B*67ah?H -x^lrl{W$|pL4{s(yncv#Rl40{i`N*jRC>X`~KRHn8_W&9`+jYPl;mwPnd)?Dz{7e@?X!vBI3ZFMP_6HC~BoV -W{AO);B_o3YA$DVq(a*_bWIYSY-uK|urSm#APoE@)uGVwD)w3)qk>x^XK33H*DW? -o&UhYoBC)imlJa#S4x(VXzt6a^K(Aj@Fx3TH)ZwMzeJ3dR_+3QLW4Er;Dg9iFJKKh^1$!9hs1i#yGmI@j^6iCCSYl#dcowP12I3r8gk6Gjg6+#` -*w7%|FruSR+6QH6b$S3%^8E|aiNZdN)bDT!Cl9YtaA)Ug*q1W-gGReyk!}NdE1T!MRy#-scB9y80w9j -WH6E&IniJ&H*&JUXl~?$gYn$RNe3gkkrNM(y7TfuV$KT)i8(K!pvl-vD5x^_5(>JEy@Y}?V<#bu@WxI -;7~_5RmB$qYZ9Zv8Q03!4RTA|0qsL!W6twvA&y)lezVd{UpuZ|4G -G$N-jJZY=YOOmDDOo>g7Tg*1m}M}{(_>QyyqPY+I!_`B|&>H8PbIu48pnHlg}s$I(yNOps(j266p~1J -e#SGCW9iM{gpfxgTc>Rgd@W&3YvVzqM*vxEo$JqRl*nye$fzEq9H+<&l?hS`LtRu27+HQB*)7cgyX0T -!8yN%1Vuh?2u}Jn4g`b1PgoT6WJ!!)G6)7|91_NWpRg#X$&x01%Ala87w@jz`kKPFLi3hETgJ;^82EX -Mg1TO`2nX<46!i7#<4-CoiTo#27VAe~Jopv86T`tT8A4ZS5Hx2b#p;$Z;ziMn1ruW -sM%kz5xc0@3CTgSyZBQb|zEvuY9;&VBY3B|$OIy`&`Q<@x88^mKa|%6_c$o39MY -`B`1l%u59QJnmr0$rL)BEGape!ZJ>#u#A%_EaPMf%Q%_BGESzjjFTxW<4g(5WTu3LGE>4rnJHl*4<%XlJ&V~W$9u^My -^WTI@~OEO<0z?4g9m_;+Tb8)kJpq+Z`(u*)4JEq8L{XD6$*>)I}+-9#UjCqN$6TxOzm9-6p6mYUAovi -tHvmby0?^*C?{v1Jy-cT)j?_-L8pz -UPwwoR*xC~x%;?u3`RD9HQzY9*mbzrI$9J@+VUR?=mV(5dI4Qd!G4$}P;X_;&X`MNaB1%%}Kv_W?yt> -Mcy4_;&XpMNaB1Oqlp~_q&Rm)LWPz@$K%Tik#G2nBws5?&FGFEpK5i!?(LnDsr{Fl~97?io669O7N^A -FTsQoJg>-0Frfr5D)JIcD8UIuUV;fFIHkx-FrftBQ{*Mc$Zd3mBIhSsjNC>C6nS|wavL2|sWmk=y87ioCoTxsC2s#l`r|Y5)uD+zmp1fTb<+yrMkv+_?F2XYCv -+9vs{3LaeZb5CqjhpsJ*cz(NQts*Zj40T@By4-dl -P>a#!9`#}xT}pJ+^NgtaE=o-uoew};3@P`h>+&IGiy`G6bzMHBY%!$Vqpr(`lr4mm-|kV@<+kRni%{? -OsOxe^KWD9sLRQ!1j()C-C_!~y?&#;bi1kj@?T&t~izsh(UGC`Tx`^^t*X53Wu8V@auO3tq>hIOvN`l -m{8o{6zA5#)!fAxqGFM5m-ezHeN$i04|7KkyzPqZdri16FvTDf!TK|@k^By?RwJ!nYkj)bm@?9fJC<3x_kb(VBzpZi}yzNtmZFeMVUF2S=o%*Xv$oaE&;eXMcHkx%Bc -0;?m$km-r%cWX7{=GU~dpK=f}72S>lqrnU`voy7$T&{;Gz1udLyklx%VIRj+bK -D`#2d-Ya)o#n(kkT;(cr-sdEdNB&une^%_iF^`wH%I-&07x`cGH9BX6tG)3YlQX|Pc3u%&)=?#4AmQ8 -NZwPAoUvD}a$ho=g`nMHfm!9=|6=9d2_3tRcE-Q_d7Ch?@D8d#z>klfz7Ch@!n%vxW{b5 -Def@l4^im(OG`iG5!#4bG#465(OESp5mkCo5mkCg5%o2pi29mTM14&uqP{LGqQ0c3kt2ql-mqK|^ -tEAyBIs*Fzar>s!+;{_Yr~)-=xf7}BIs+wup;Pd!-yj2OV0hR5%jfTl_KbC!)is)*M>EUpsx*U6+vGc -)+vI%Hmp|!eQl6rPM%R;8x>Jsn-o!B>Zvp8YqKKiYl|Z4YpWva>rF+}*EU7e*LFqJ*A7M0*G@&$*Dgi -W*KS4B*Qg@uYmXx8OL|m!PJL+;ms4Nb#O2hNHgP%irA=H;eQ6VyQ(xM|<h_7a(|VZ0Z|v(kh -N%4wi{D*u(*GIY^5UX;<2jVzgIk~Dv+!gAyA{Pyy5q4iQo&f -9BXLoN?gxw9#sw%NYeQwR9BJ7qYYvXH#-PbM;E5dGh!{-%Y_q8>u6s#$q-K-S=3(9AYZdQb2kXNcIv4 -VVV*C9pFmmC*dBb>pyUB3(Cyz@KM`C)1J{P~lLaOU7{b+lL!zHr>!1^YU$UI(kd=iXVX2)pGSP&bB^- -*e~QR)pR1HfR;aQtySesuYX|>*0(wg3CPmrXuWaxKArKR&~!zn%}~))noedSjIiS;<6(6!&UDnfc*P1sJ!5{XUyRduch*}C3RnLrQ?Zr6r++lMU^mR_PjPd6A4cZc6`SijLZEi5`Jbz-jqM)zYH7e -c)^`&(K*}3_n<_&|szPWHw5&Ypv^-&m)o?Whz$Fk|U^%^u`TzYQnDMhfawc0vhe0px*gd)U=m(|QMPC -av3LoKY8{^o+Vl^Cy{9oGtgb<(q2HJ-w__1qaXBCL^~k!(hd5O3_&<_7Dd=XProfN|{kP3jM^HhTVuH -ls+C&Yn<@jYO#)S6w5-8>cnMMWS?ejn*h6O6S*TgpNe%?0R*TNR-ZPHFrT@mrf``yfLI&Mxu0P2oj~U@2R$tD4pA{l@5v0g*P?+MWS@!U2_*gl1u6dkSJZ4(1;I-(wWs7h9glryGw&6ZjgOkn;j%d=cm --Bktm(Hs6AmMN@s^P;^PL{E7hrUgX}l7Ipqe~llv4Qgd9>&fJEus8wNpNhcviAqIB-Oeiss@^DDGsBT -+g(c~DW%*ZgKRTqH^tmYeUwvDNF$8^UF-)Vje9vR9i2LSJuaClZO$xdHWXNR-a+Q~N@q)H+&jkUgQ2N -1}A*J+);dN@v$;6Ng0U>d#7KBsL95~Z`tHE2Sj -bZ))&Jdh}z+oVoCW0piM1&Px66>8>4lrF5)ij73+!Y)nLAW^z7s&xa2(uKD*pw1bRXyA!N>D)n8B@(3 -z!{!a)4|i(Zfkf%7?2B3>oY{BDNCWyBFfxRFoiuL<`#Pne780eiZ)$1>iBcPrVs-S~h&pquj-K0L?m| -{;v*rV^N_t_1K|B^-BR;H?p53Wh#zN_Z?J5myls&Ur%^a(xXGhhRv0QrgEp3;(Oo3>;fd$jEm(+-`Vt -Q_)c@5atR#ghtOwaArG*XvcG;P1IYI?zht5`Ozhh)?U?bk|`A=XVV?9hshh0`<3^$oFddghFN7gkQso ->#YwmDBT+1|ftr28$)svqReH#}ewMLn}}$ulw2p63Hq9jvsT*{C5T)>+St -X<&_2*0bBShmS?pv!iOASYti=&S6CeA;-;cAtc$TpN<9AbK5l3!usmDDQ%Ikyn240elk{9&+k*eh{e? -lriYKE)eF1KYrti$Rp*Cg)w7qh^~0j-nT?~0V1grRXIM}@_lCADSWZ2^O@9lEsTX!?_=Ba?3u9VUv5< -PLYVHd9nmeZ5Ld?sXJFVR&tc#voqX9KmMbGuClfatj`Qt{s$Q -nK6WhMrj|O35&qHnVa>5nSe_gNk5ZYc?xF$Upw3BDl;GLy9(_y1EET*r9@n>^$VUht9#I5~ -*tJ>_EMotpB3Q%$^INcp0|ykrA`Wg)ghpvpD;37Q=1yN$1P^w3N|BubT4gbZFyBz*g^zKr`J)#UdEsL -aYhk&$8WG%pzNA||SQnuI*mqJ9`lS0*9~_3-e^^lv-@-YqL>Puz7*H)@7;0gsBqcHoLw$4kgd#YUfkT -SWCmm9o#4yy14gh8thMJM%@@j=L(S|^8Dbb}X0IAKhM{KOF?VrT!@N8k%9 -xQMhBf-PC_*1+$ov*_J`yTr7>1f1Ijsl*)>bu03`5OoJd|M=YIdhe9>Y+x?`Q*nVW`=&TBCTP>4k@0Q -Nqri2maJ|2bIoFnm2_98&WZ2q-t*EQAO}z8_febvS>aX-Jt#IrZ7@9cR(vRMylp?3P;9~ssj?9WgMwG -pxzQAReFkCjWF_YP)!gcRdWZm`e3AL?p>|>7^#{&vO*DBoRj7*v^bjK%P>+kcR>Y(k*c|i=C`1)DXri -bshVG|^${ag^CQO -IhFdQ|1`J5u;eoXs?;iv^UV6H|8wBCA85!$i0HFCpn)a;70ih@%9xPOgWEXJeeS8i8iC%07@2AjUQps -_6mn`Vaf_gieG)Wc%1>6^=1qcPYtGo-Z)gH1ET<}S2SYcw#&VAISR4d*%7WZE_kHf`Oi2(6T6$1-lkY -aD%xgM%8aaueQn#uXtAa9~gox+w>=ZR1GNyZRa&Njj!Vk&z?~>3G!Ygnlwcl4hpfRRn!qRY2Nwde*M`9$&3^!*ONivDf3?oUi6XrFbuLPmvD2yb{ZGTGz1yGqQwA&+4aRu*n8e7;KuG) -L;~YO*SOLVAK3MHFpd)&2P|}g~6uzQ8hsfHq9SUJHuep{6Vc*7;Li95(b;*k7&Sw!6w^Z$6(XEX8ke@ -Hreni?>S#7!(h|=QEeqK*kpq?3^vW5(E5nMCL6SIuxV1iO9q>?Dd1q!u(o~}Y+6{QQ6LAKc4&qHgH1L -H#9))n-EI;KSHmt;8)50;Wy%=mVlkzhRHvRFPy{Z+AHq}g9O$;~vao+}wws_ -v^3H5&%Z~A7r1`!x<`ewP-9E>;p@xUtW7-7Kaj|axJ-+>XQKOQnUO$<3LObsZ4)-G#c;#N^tITFlIKd -mIl=;`N_1PML;f|3MJGdHC`=B^;1*Irj*SD{onRvvtQ=JRvPQnCZe8e~V61ucAj**>$y`;IHKEAQ)~P ->;XZ@w+q1TuM2|1phBi|4tGsIWnGKyrU$j=8KI=f@;3ltR%?oi!Dlm)V|oIB*^TG-AaPQz8F;!KEJXgvYfT+qOvY)`g_U>s@<@X5; -KfeXB-idskg_J1iQLDp(M!i_GKmEtG`;VB)s2k>5k^e0p8a4M#k>8N(uS3ul6emzw?zOzPRVaSA$Bz? -|e0&1iv$^1ivHcD{h4F)jB1iR)4it3Ep76l2HG?TB!u@wp~f6LtkxDg145`54QvO>ZB69+qe?Efz}=L -(!Ww|qbL5A)++Ryzt*~gzVX-E5}_yimDWUbD!-O+n9I4p)+T0>aGtX?2>DOUqOZ_hTeVC;3wb*L6k8kOPX1*PrsxOb(--G^++xLY2j@$d7zZ3SpjLf_X^moEO6Z#vs&n(EyGfOhnExL7I -j+@^@x9-cc=9%c&eR>f52>^Y+nD@deAE;*0h -(q2i17KB)MTy$>qBWbX?qzP-ZUSCSdAR%9wxbOmp(Fu#YcV9nIj&=stini{%-xBJbzpeuO0-~L{M%=} -)H%=})^-|YcyAiL-j)=XuFK4HzwduC)tW;xjHL1kSs^L+)G`M#3Od>`~TXubix#G2_hpqE%P{RT|Cxj -ks!6Wzs{>3gEPSTlW3%)GfhWZ$z%X5O|{c=oMgY2|2hUi8cn3+? -vVP$PH)l^eLd(~8vfvSDaoXor@v}glkOwXyAdC!u}yk|wG@7ZFYYTgsGcxtBaiA0ABj4_X=X8N9($m4 -=$%;a%FGtwt@&}`nbMP}X;`m+HwX7kj{yk|yc-ZLjN?+GtzBZn5F7<(VQsEq(Hr^iJAnAGDU0LOz9@knUz2sVJ%N9X6Ea8#-(#?KjZHng+H*7i${W4qdEi -U^~nX*>A|nMwHRT+IOLgweLa~Yu`m&tiB7fku}qI$;8F#yJU2+=3O$nSo1EKxLETp;$qFa(8b#Opg)^ -K!2BSWL%;+fmqS2a)#VT}<^t?}(4Wl{WReRo_en0md;@a1Enq=nppg)^Kz+@oi5FRk-&n5wKcJ%FgLVq?1kh7z2?}Pqq5+Ik3zPV32`uYuBcJz&0y3*0t-@ -~*Z*O~9Kqi^qH6KUQPGlN{m8&iW^$GgjpzG=$4?C9HfK@({^(3l?NI?$LO(WXutAApqtGxy~-eS6pWovxHn{7t@4X+mC5NHPdg$sEzB;Vw#Za&|*xdX4>`_>?qo2 -=49skx@6}2pg$WIU_7X1=KJ73ZChM&EW_M~_2;hL#8{GRH%sYanERytGxx!N+BU9~_Rri0|7qI*j9=B -v+z0=8#@?5anfo4*Xe%F)Xe-733|l%;BO!6mLyzj)tKQWcgKDnYR8jA0g8{eO%Uucq%hqdZa|jratEo -*QVDb8w=S`r>;kxrCP{s1~y5TbSwaLtVQ1m5xUq)u`%UOBMeH`?#_Z6%>=Dw25+y_HFuJ;ujbUd#26& -!RtX77v1%zZG_6ZXE8%-je4owfHh$;^Ec=$QN3Wad5^syfqxgN|p^nHC&$JfqIE;Gm;1{(^&!XSCy1^ -huy<81#46Fb+DNvn=Xq4+RGujXe|`bi8QqOMBWw!9mAM_P%CMdnlq-PkSh$c29dKqE1hHD59*VJro>t -wD!P3M{5rpbhP%sK}Ty39CWnyz(GfA4?5^*?u&cdgA6*_`_kU_z(GfA4;*x~_P`NEYY!YzwDu5pdfNj ->6shEB9F_ckM?`n#C8d7m0Nb2R8|{ -m$me5+}HOrKVf`HZ>jyl9X_{=Q&&T1EkThYHVs~V1FFqJm;Dv4(FV6Rj(xty%ly#-HE+7RjSp8!!sA1 -F>!$AqJMH*seVyQf@gPcrqsMuuGBo4!!ce~GU(!DCBrWEt=c;Mz|u&mzB3132AzI6{4!XZni_-*vbZn -Op%nW?GGO9NoI@r<{)=*@=8L+d);(}kWXRQ=w&aCQ*te3*kp13{_xT+5xc@3@cpaG`V7*O8<_K7obMR -x>35dfV!%nFf0J)!xviEkBntM5xe5r+2g-RhcxVyIl<9IvYBaH^>=k(!#-JuHf$W6X>!NjtH -T@iUQTxO_j0P>$LSb&s0a|t#bWcL%WZ>w|L}Rm0F+8TQS$;^xKuRx}!QU -VkuLz?svP%qrSJxtbzO9uH=2(z1nlJziWJ~p>7>$!LBS*kgO{zF~#}b@>Pmh7uPDn-U!RrDN2CWD@uVj -C~COMkp@Nli-Mqte^U^ak1zYpkfNeT1!*i{tPenMOKf;cZ1gg?MyP;lqK#e#*9hOOCW^d_HH}86M>TI -`J*s&l?@`Scb2Lj;^G4CLnm5Xx)f}^X|55;E_WmaYVOH;dRuE?N{ix|akW}_tKna%iL2Gu)Hkc$+dLZ@%2C1pU@`lpvtnrv#zee -kBOP4k+QoMkUC!9#X}Mq$+Y-WF{c$DuofAs%J13QJHG>ko!I%=rK&G^ooQgND -gkxDs800P$4mNt99aeI#nruf?cA0}!f>*hqgiGp_a88^M&VJHXkn@!Km2l~o5~dP_l1~PRzZkn{!T%NW&U0OW< -~TV2z4q_5CZ5}L2$E)f)G5X3PSB{C%K_CBBK?u=*pdd8B| -4l*AhlJ2o93rIut{~{+aRosiKT;6%@q~h)k0%ubeLSTg=;LVxK_Aa32>N(dLD0u@3POkT#|nbKd0s*2 -Y`&l%*vE?sf_=QCAo$jo1z^^~D++=>exe}g<5dMgAFnA0`gmPI(8o^|1bzHWLD0v~6$E|!LP5~SFBJr -R{7ONvkAG1R>_dAMRT2#3-xLG``F|7y1Cd^Dl?DU(p9*>zNZQLl(q0CV_A-#Pmw}|c3?%JkAZafHNqZ -Sc+RH%FUIvo(GLW>Ffuu_qh(vt7kKd}&UN+R|WkZc#Hq_{4LycZG)aYeHjb1j?=w(BVUN+R|WkZc#Hq -_{4L%nhs6>=E=uYzDg|64&Yq5n@o(8t|_5|~yvD&Veeep_L}iG~nOCeGF>V&ZI_A|}pOC<>anH!z{73 -3OT!lDhqS6(OnHzfTboo&5(CA<@}?ND&g9{qHJ5qI1Cf7P3tP=C_b-8Zf_wMCX8XJu0k1zBe$b2&umQ -cN9Ti{reR`U;PIaL0|oc6+vJ9M-)L{{YMp1U&j?uUndn&Ut@}>uW?1x*I7l-SO0lM&{zLOMbKBjR#7B -S?)A&5N)_@a_xj&c1bq#tIbhn$y@5eR(AR*PD^?ue)3bZ4HtlP*BHGs)MbOuPnmJY*-y2XfN5babzOYzS -Ku`s4q3x4)vu5+o8UWDWbmAmOIp!+H!~bQiJW#zIG_0eaYD$Rp!$NNWD!DE>{!-smWm~&GfJe2=i#B2 -m2K@aF+@QGiauVRX~_NGd-yO9dl=<2i5YC9-JQ3HXO5NriV`{%7N5-V!q7uu(qs7D^3rqo-k8pT2E%K -kaCq!kqe2kCszk4|8J@g!Vp+tHSJ=X+7?w%BfN{SmZ#b2UjVAN(a@8=2WSA(VQw(FPc- -O>P0b8W_nP)C}zn_52_c%6q)J4jf$Ys!A**w(n0mTx!ZKO!jzWjA(b8GvrG@Ev%_ST=^+i0km{WtQa^ -}kEYm|8KVc5b^pLtpKY^vf65i<{jkd6YcUsR`s<41}dPp5Aa?R62>MyW-cX~)2Dpv1K52?Q>yeBItX> -}n5C4E8>C9UqaprqAL6qL03iGq?=KT&u|7nHQRj)Ia_*HKW?>N*OSN3O6?_Sag?kbwWS)-o)T{k2NI# -5PL5QJ;$yvcJ|khJ607wPIp*>|N7SDBbXDg*CBvw`k*nfq}cjYRp&>dv{ok84F_X4y!R^J?!1#&5A;G -zWb&IH&_jOcbmGl(t3xeudmNekhx!Ghkx&v*@;PYS#0HVzpU-ATTDBd>lQOk_BuP$>3*3#jI}OHm$+Wd -8K$C`3ow#4toh5y~ST;jUQe@C)}oRiqgFNuBqOH!}5WQlr^w3fJTiSJE1UM@+;*T1B@#QSx9y-yaMv| -g8DE%F~XZai#YMEKAdNd(pNn5g^r$GrcDd3Zv2)WDSRn1Kz#;|4YfPZ-!DJZWH?@RWfa!Z8Cg!qW!kg -yRNw3C|c<5S}%#Bs^zeMR;CeBr3mPps4(!fuhe#28uo>3>1A%8YudlGEnq+*+9|fdj?XUoBsd4zN9;D -B)xX;U*VcemZPyX@+&YPa1hjTALf6g7*IC~*>1nyGoJ&0D;cv{iX&GLy+ -&{se{(J^M?q;c+MXt5aT(2gg}hv{80iip7X~D#CXon5Qy=dKkk -At#&dp_K#b@72?8;m^Ct -JT-LUN%Pdui6_ldLnodzPYs=T(mXYE;z{$=(1|C_Q$r`7G*8t|JZYY)op{nbRXg#dd8&5eN%K_gFQw8 -tFzy7FjwY~lG%@dRyK70{KI{KoWBsL`$#|O|4Q$}=X5PE2x@&3RKI1P5GaIqj@O|#q#aWEXcSh}fEbu1-yT06euh!l*KNNYO>vH4os`A3$Rpn*izRC}69@w?yt-tHbzx ->FF?+di=%g)lhuZVmq7m@$GMdDAPMW9~_uRKI|EwH;ODxXqC<;SD&l&!sM{BoaYP!9YQDhK?FioI)oY -Lo;2@0L;E`=Y@2dG9^kyH@!31*lvmerl8fb)pRPbD8>lE(5#G(gf}cqFlM;66`<+PmiSs%-uH -s=$y@1^Q+GU3zq1Am1wE_g|Iy`B7zo`wIR6%iguX-wmh^RT;Q1kiWyg^9}=X!|Kx0bDIYV#Hnuc5P>+ -=Z5}2Nr@GA}1meene@dV~ -I}HP~>@cv(+pllw-d6`U78jDKJ2KX1UhiK2vmKe%_z`uC;YDk_TnRbCWjf&2VbcN7 -i%ehzptQPlYT9DQ*|>Au!~jyUkVvG>FMy=(l7%kG-@n&R$S;5p*lf8IFvR(ahuKW=gE*RiwZLX87&0lg9-fz02s0@q?W$KS_0Rc2BbAQS#bAQS#OTT>q -0W>OGe~Azf`l6xlaYRGk-_^9?hqG{nyXGtVq4YKz!p91 -^!mFZ7fpL+X+lIcGG#9vhVC;p<^*UF>)3a@-$;P3j!F`_!KJ8FEdD{A~yiv#LGoD|;o#er39oLcXB+kk$U`b?4-^;Y6Z|~aDUqah}_tRbT`mej@sU^1b)fZd(O -Kn>=UJBXL-_>^4JU-iiM`SC1=(CldYTY&eIVyjbVk_(Mxx41^+3x#BbYJEzd2Qtnr8c0h*{1M@ARAEE -Z0m0sY#Vsq)>rFn>#G*l|D98J&CfTxf6CptFAMNF&sy)kJiya#$>&X}Rp9%oDDs}8iu}B+0w;E>z|>p -qzxkK$3w+=Hn_}rcKhLY7uOd}Lf1Ip_{y0?a`xSKGmw5aQUGv70I?z}3z|WaFpfJ{ve;U5K=1tpm1a< -4CH;!HI{$HgVTD;+ke*^pm{C{rf{(nd}MWLG>(M@sarpI(s61wRL-IRuIdP+BWf>Is%_HlR38$#*`m) -tjIUi-a*%kCR9Zvr>e-Z%K&hD-2Yz9n!|8~P^dTRa}ue-q#2NxXIBOW!p~yw3VXzN?}8m_Lr!fs^@l- -1@l?P&?~=C5`U$$K7s)=syCUeE)`!o~nOGNYBq-6Vj9NH-z*|{4F8<9`o-B={K1FKuEv4{2d|v*76?- ->GzfYL`c7>{AWUXdjFn~p4ZErW9Li+f8Pe>o19|-B=^Cv?3`1~6 -oeSH2*NFSenC!~+he-P5g=P!hmilcA}oj3|d(21jP{+u`phtG+laPpiu3dhcgqj2V&I0^^OiKB4ZoHz -GGv)uxD}P;QDi3iYOlqfl^)I0 -_Y~h@(()iZ}{2r--9abc#3%Ri}ufPnm7uDr-`FbcbYf~Wv7XwP<5I(3 -Pq=hqfmc}I0^-*h@((}iZ}`-sEDIbgNir`MW~3QP=$&(3T3E>qfm#6I0}WRh@()6iZ}|TsEDIbi;6f3 -#i)p*P-==e3bm$)qfl&$I11IKh@(($iZ}}Orii1)+XZ<YRk=n<92XwJBmJl$#=ULcJ+sC%oN^*a>e -o`^rvdX((&{?|ryd1cnU?5g2wRL}1vG5P@MILIj4*2N4){97JH)W)Oj)CKVAFN>UMlp&}I#7z$DmfuS -B15g5u*5rLr^6%iPUQ4xWm78MZ~N>LGkp%N7hvQUVMXbg3zh{jNcif9Z~sEEc;goTjP=bmES* -Soo9EAc@#8Id}MI43lQ^ZlIK1Cdb;#0&?s69m-h0;^RQK&pc9EAhP#8EhnOdN%y$iz`NhfExWL&(HYI -Dt$Yh2zJ>Q8;@{9EF3EhPOdN$H$HY-MZ%iD8!^Xr>IB85Ag=5CVQ8;5v9EAhM#8Eh1OdN%y#l%rK -S4{u6J&`X} -Ci?@zn|)1P<)jz94R?0y>C!0RXWfYDFvsXPI>#vj_!s8)G$c#S`kXPKP1M1Xh@8MAJo!#2E -V4I@eF=S8>|Uy7fDrNUWDg|n6lXDt=ZS}L5iR5)v?aMn`ctfj(PONFzM3TGn~ -&PFPnjZ`=rsc<$@;cTSB*+_-6kqT!c70yN~oQ+gC8>w(MQsHc*!r4fLvy}>GD;3UGDx9rUI9sW3wo>7 -2rNY@tg|n3kXDb!XRw|sWR5)9yaJEw6Y^B24DuvSwl)`BSO5rpErEr>oQaH^(DV%1Y6i(y+5Wc&nv`s -Tm+NK#OZPN^twrK{Q``ukr+NBvN?a~aCc4;D|U7AQ~mnKr$rHPbwX(FXvn#kA2Or%sx6DifwL`tDs-;PkYH1RsTAD!jLqp?b3G*)Sh#wv}`Sfw!QaDYe6i!nqh0|0@;WU*}I8CJ#PE#p`(^N{~G? -h{~%}^|R -5)v?aMn`ctfj(PONFzR3TG`9&RU(}G_}+@YpHYAQs=Ct&RMH7oTgT1I87~e&|2!CwbVfyse?9B2W_Md -+DIL=kveFj&TyJWs-cZkLmR1vHc}03q#D{tHMEgxXrs<>nnr4(jnqV2sfo5y6Kw;UsI!#RZ#?KeEM?P -H%BHQ9OwtnrJIE(N=1rt<*$Ysfo5q6SV`SiQ0kEMD0LnqIRG(Q9DqYs2wOx)DD -y;Y6nUawF9Mz+JVwU?LeL6v;(D#+JRC=?LaA`cA%6|J5VP%ZKU*38!3I%MoJ&Gk-vebvTFU$wD1$!TMyvf5awtTt9EtBsY)YGb9c+ -E}TqHdZRDjg`u3W2Lg%SgEWwRw}EFmC9;krLx*ssjN0pDyvPD%4!p(vf4zctTs_9t4);3Y7?ch+C-_W -Hc=|8O_a)N6Q#1+M5(McQ7WrVl*(!orLx*YsjN0tDyvPE%4$=kvf5OstTt6Dt4)>4YEz}M+El5mHdQL -CO_j=OQ>C)nRH>{sRVu4ZmC9;UrLx*osjSv0mDL)hvRb25R%?{XYK>A^tx+ngH35~?SxV~n6?7j~Laa -4Ph_yxuvDPRd)*2cjBy1wnlrKJo+gf%y2!g}^WR_?n>PUn|i%OH2KlhVIjSNIxB;FYZJ7X@;Oaq@Rux)Q9xbtP6p~^ -yvgaeMtXnmc9{OCT2L;Ow4fbnV8{VG%>@$X<~+h)x-=3uZbBx)G-COi5U)d6EhtACT2JoPRwv{oS5NY -IWfb*b7F>r>BI~N*NGVpwiDAB+@()P39^!-;4d*p!C+#Jg2Tid1&fI}3Levc%^oI9kBne5F$2J7;xL2 -J#195e6ZdbUqtfUsYIGJgI*S^eMUBp)MrTo@v#8No)aWc~bQU!_iyECpjn1M*XHl!OsMYambrylM#Jv -I55+_)z6Rgz<*6IXnb%M1z!CIYQEhZR$<51EUOeUr;xJ*o6u$hRy8Td>@-wccQaWn&ai -8z{pzeF6(z+fVdX5cXKB#=dN*vr6VVg`WA#9;=T$$PL;_HU%463HyeBAG>5B(o@sbQZ-ri{elgIZIak -GLY`mI?-aCXt7STSSMPn6D`(>7VAWdb)v;O(PACaSSMO6R~{MIQ=Egb&cQ_IV4`y{(K(pt987c$CYXc -#jaD)oj4Eb0I91GWu&S8h;8iih!K~tW0^BO5Z=wSReihRf3@fHDI95zwu&kKA;8`(!!L(xff@{U}1>1 -`03%(W87mO?BDEL#%Q81{Oqu@|6N5P_Ej)F(U90ik#ISMY7H%}NnGJ;XX3;?H!!wgmxKNxsb+`mRg#p -oXux1*?kb3tkn|H`4(Fw~FZtb`{eX{3@m|7*T`CQE;ewjyfw={jQeo)48NE*jU~?k?WBWoGc~ -@SXs=3Tq?R5m|0#3bl?h|XoXI+LMK|G6RpsRR_H`4bfOhH(F&btg-*0WCt9Hst4wgCxOPzzI&cQO2gTFvJ!AeXp{>D<$7hN!-FS=kvUv$BUzUYDxebEIY`l1U)^sRKj&; -=v0XS0B2Vh81AAlc4eE@b8^#Qn -1)CXWjQ6GR8MSTEP6!if(QQQZm?1M`7!BF-=E&HJH`@mU={(s)OlYvb|-2^TbbrYCW)J@<~Q8$4_Mco -7r6?GFBRMbu2Pf<64Jw@FF?i5i4%qi}JQuaY5`(P;hpq72m$UbOA9|Yd1R+qUyyq1Okf~qo5h`22M*E -^M!cV82D?^t)uD=gGq^IqH83?lDcOWifEea#^D-XYgr^WMSNUGvHxb=SPtw|3XOs&`GG|C)U0e_uZI- -l5s#wg0>Yn1s`tD|ZNt5L_lOMsS6|1i@7TQv}xtGzhK}Xc4?iV20oZfjNTr2rLl%k-!qc`vg`9J|J+2 -;6nmy1RoLDAo!TT7QrVj7&-BLN}vGJ|obH=W_y`c)lReiRViKop`-Hh#&h*Bff&!#BLsRcK5mNCA5jYbEu7souVh_!&3k)lQ&@ -kb9cJE$+zcy!glb^q`Mge0|6HH%64bNw^L>JPj(&bbkXLEDyVeu)=UIY!T7G^?P*2Lw4+!ch`S~S5Jt -2QSNl;J6pN|mKlkw-H1oc$>`4~Yx5r3W`sHfrQO@ew7es)u>fg$DRLj*yfo)gpu>gU4*L7<)x)DI<}z -YampvQWQqr~7mt($Dwkiy@>x5(FWANDzedF+qJuKffTT59#Mu1oa{P{DvS1DL11J>3{O4`jGzTZG!rc -{!IB0`+3{MI_YAabg}okhwfS*#Gj876c`9%ol>#)w&L!Z&ZSuAQmk_+*0~hxT#9ur#X6S~olA+%r9|g -a66pUVltjNkIztkjA&JhABoLuQr-ok(wY#QsBJp+xO_ORerh(2#HM{)R-FMeCyV5}0Q%$Qh)OO9MRP! -m-d@_MVHkwFA6UhYn&S)a}Z*uFdX_}ZoR~t=}!1|*xnkFXD)kcq*#(S50cTEqLfkjSZ^A^D7S&#*?Ak$fp> -2*Y=lOfaV2><2q-8H>{$h_jwO_S?Yd#-aL*Ex}gR_(ar%k(RBx=-uu$@Tg^*X#RS=U1-tE7$pz2Zpj- -&luJbF``BmurDs+AoI=>3NurG9)6*|odoo0njvqG=h3!QC+&bC5lTM?LgN}UL$PJ~i#U(3M -uwbb-3HN8ts?^4sd)buU`^e#2MOHJ=m)4SC4E;YR?P47z6yVCToG`%ZL?@H6V()6x0y(>-cO4Ga2^sY -3${r9moP3sFrP3uYDZ9sBw2eJ2k?H~!P0%`w4R!eN -nBFFWor!-vq^9p@^a6D-<)7euWZ-%vUI7$bN+kL)llzGL(OXGKPw;P|i^K6)G6=43h4exBh6OFY40%R -~-1}SA_LFdf@LE>$~*8uNmw6^uTWz>pS(pZyD=*^}ydV)_3cHe_*Wd*8{&}tnb(Z|HxS1vj_f(vA$~$ -{4--!kNuvpVUK;wSlwg)!dTN||H@d~W8V=LL;U{07{u?7j6wXqXAI)^17i@sKYhiV1*3kAPWN#L@xSp -`Lx}&(7=-xW8G{i22V)T8zcAJh$y*06e7|+@BH{hG{A)t`Y4neT^t0%%e?t(|+WQMZt)HwQReeKt(;=cpPKSsZIUOQut(;=cpPKSsZIUOQuDB^ev=v}xkgye^vU`%VHtd -GgRmU_-U?wo-^W*$2?ld1kY)-%x!`AoqJ7KAHVUt3xxIY8=t&LSRcRf8OHkfZNEB5SP9q(!ut5_9y&=F#P -8)AVKsc`1HvGFbCi?dQ;knkKEUihc~1Qa^Z)q70$~upwL^sU@!Q#WLm0&G+$>>z{KjvnKVc;>UZnnnw -ZM3hzcUA(QNO@?V07XsVSW5YmtGJC@jLc4SDdA(erZqlaesV|VUq8bh~vfkyhw~;vhVKbIOX3FJ9oS} -?cb5$9ixYV??~~Eox`vFJB-uP6AS(w*7=U>m;F03ryZwm_;=*aU%43g4)3sD8^bSEM;~ay0Jm&3_lPi -G)rhS>y>Gt^4&B%IQ?m6{mv+AhiF;ob_`CZ*?xXwiz^$w`UrO)TM+OM4Ox9&AB9&wdN-rueA* -t>7Iugd?ed(G>=xTzYBZ~RMs{Lke3p0Eh8SA_MW^7iXPgu!XcrK5KUgq7<1CBphac>BXc!Yp8K34@jD -!NY|0L+M_9ko**brdFgRqnbcGuOOPyn92x|em;9{`V7#&+73}%O8FA0M -Kvr88i34|&2{A^bmMjcIo0N0wIJmmkEOq&hQh$V)gB5!XSh*_X&d#&O9d!4$5vEzeO -PIHjeWLA%wF>2^6wou-h1&_-ZUUt1|iio4t?2hSFIK?qLaF#17byY+blW7zFv$al$NMCk -TTWpQ1RzhGcY#G6OawqtnL-gBYKlAq--CnmC0Uk~7>+2=SSD!XU(Ft`P=VdS=tbU_&xGL*p!LNJeLVA -`A|vFWn^)!_H#o&||_N5OXI9gFws?7hz{HU3#!gAVgyBN5UWyb596^NSvc6f#5je0TU$0(K(udKy)0< -&k_can7`{{uqPRvr^yL+Bcp{Egh3`{*#6l1 -pN0(`$1jTW*c!@BG(G`jxXpW;r$}$igM^`D6Ky(~kedc1gk!34<8j;=czmTB2 -zS3iOO_(yRp)dPYk$y25e7(GukY)aV)Ap`?a$h11&$G)zL7p3yS@K?vY74d+m(XS6~AgrkP8KDdWL09 -Pnk;LPD@l`tsQGrfI{G7wH5PH$hoM<9f7ow^1p_KfacCk#S(msTZEvuCt^g)j)=#u{O;p}$U4v%Hzxy -9TLupN1q5%}4h?5C#j5+w1&62+t#0RKUT+(Ib8^2+t$x5ICARdPHMHhS9lCUkaxaM~`T#g7Q40$HXyj -3%_>_qVkyd0|ykhZqoJwPAHC^&<+A>^NgNQ#NepnX!9Up5S^zq0Kj3z>Ft-4kZ@da^qist6?(c461U* -s;^;ZI6hil$hIcr@IC}n$Fc=zN-X;tp_mX-W4l!;mJt7S9>Lo2);Edwv6(u6?OUT+Wv64` -BTCk%~uX1?~evly0d@Y(x3IM%nh?_l(NLu)BG)i`=X=>o?ZM{j7!0OuMlEK1ORMI63Kmt^|x99<00>{>~v_w1j~}lw;oM!zs$~3=L9njBTGS_!Pw*j#G}$a9bb)@7$*#!HLT8X&Q -y$NagqxjfQZha(sqHc6eFE_$*C%P~~SlM*)N~Khryp_~{{n=V+*aNoTt$js{M@5Q*@!+&v>2|;85>pYlD`xQ1EAbk>o_E_%pu9pM#%*FCV1&1zuh;zD#2%yuD(4o -d$GxeZ}}H2_sN6XzM<0Nug}e_!@2Xpm5L@uZy8{(AJN{7$_bznxQEY$_I^RNT7lOLgPhR=|Ksh@iiKk -p@`7r@B_m70B+CGvqK@FF>isPl+bvQh6*SqG+w0j8k7?n-=HB43JQ&HklX+zg{I4Ml%7ykXzKw57wQU -)Z_#)Tm4(JPDFdOl(D*h5391W?@9^iqC0L%P-i8uG<2y8gK#`&G5~){EW@x-ZgD4al+ImQ-3#Ep}t0a -s-v7zxAWfGJd8n4q%777lH@6i|vC5NWV*Z4~z1%D*UK;5CO$FwR>I`37MS!{@IE -gBZRzMi`hu%g=5S2+N&k&j^D|ef5Yi$kf*l34^`gvrWPvQ{SE<39e>h7Z#PFvX!r<`IL23;cdOHXC4}!&T@H%0zX?#IE1V3-*&`HAJ@Y138gcX1hNAd6=P0v -o{o23h@1oko9IYvap!Z#}?mI>@*xHGdz7@w->u7Q!aGkcdXI5s%@oG>_ccH$giFi);rnI#ZHck&=%5W -15W34`=oS>)Eh7`n1_fj|h}nKy(%@Xk^m;jabW+$XGp&r$5asM~r&0}PmPJM)yAV8-ptQ|Q2q+nIkt7 -=-COaRpBYE)c2Vbl}!IN)#~hb}p89={;a!Ut(IPcTYP&l3nyy7-tdM@73uAmrE;Vj{SB)0Gdm -2^=CwfdU_Ix_am+fv}|c=^bHx6t@o&_rb{9xlXeL705fmo1^cBS#SME!r;jKQChfw=eM&#!#G%eI~ -zm~u>5v5xGj*7tE-e(2IG8hoxs4%28Q1D>|w$%*&fnkgP*tah?od|-p->FguywnS!$rg5I&{;0z+?Sl -ZHhw^tMkf5e8|vNpm+Cdpn!NQZV**o^e}X#9aNrPY?&!O-k<^J*AucN!+HNT_6w@(X+Jb1BZ{ju>u^v$tLoXpW$2yDU0 -9FZ4o!8P6{lsJ~sfq?>i!Rgv2jR{~3ZeQRJLI@X#PhbpA7Kl$^3{Ec4$_$Lb>AKf95W|bKO#)|dy7rF -tk6;aMUnD|-HMo6|_AFoxPS-xrBZ4G0l0?Sm#OXG8cuH0gbuFZi=?S7|l?-*EdHtpva~+`dk0MDPtK_oz$3H=O)P13vhMlZP~rfNwZ?LL(mdhST+@#6K_& -Cr^ogU>r_1i8E*%J|po5jKc}5?qD2F*Wb~m5S+v5(h@C7z&f0~qy+?6hm#jHFN1YBc}Xivv<{b;ZD1W -v-jXH=*5TwGNk3p6PVZi(VHCW>4x|W!dALibWC}13caPA(4c_7IQCfF_cR0PfNc;x#aQ7%h5zNEgS$@ -Pmio2&Mfx$f7J#~e!K8Cv|C{AD=?#|ID1m@xHIifdshts={DD%NQ+`UAk0rPNsjlL9|!QD$l;TA*4{0 -3)mdz}Uha0Yj;)0P9A!O;uas(>@NyGY|KID^v-R{GHz+?b_(99V^8%?kyU=&=}k}M -`IKigWLD`5g~{h=V=KA&fxBn8^jXazulz`!XQu^mtGJExwd?Vus%@R_csZHTwCEk2!UE#Ck#?;{V-vW -YU>{egD^chOBjro8}}a*2ywc9o-oL@CkF|GT-$t47)*Ja+!&bhHXjhyr`qmw>KJtY?j4~o1@~`z^A%y -B(%d_Gj6j(5?#=SI!q(y*ZB$F}|90QJB@BL&`TP=L5X85y34`&HPPdle|Lwlxr+^r~nS8GF?` -3*0I7EG3I*T$0d6yhzNFaS1XslJl~3KrTIaXM-N*j)!}qEE%{M=M^Vk39uYdT{cfbGbfiK9HZyFr<)t -7(#ul;{U?muJqpNad=)cvP%|7qQSX6`?8_n!qdgPTR|il|``wJf5hMbx&48W&OPB5Gbl?Te{>G4~s_F -Q)dz)V`S77gPIUYF|w4i>ZAHwJ)LeB^+34UqbCmsC@~wFQN7&)V_q;ms0yuYF|q2OPP7pzLeURQu|VB -UrOyuseOjpXQ+LK+GnVJhEs#uXQ+LK+GnVJhT3PTeU{p1seP8(XQ_RbbC=p@seP8(XQ_P|wJ)RgWz@c -m+LuxLGHPGOgA289Z+!f#U;Wj815ir?1QY-O00;mj6qru)nInLL3IG6`Bme*)0001RX>c!Jc4cm4Z*n -heZ)0m_X>4ULUtei%X>?y-E^v9pT5XTpI1c{qUm>KJi!+zF-NhcT7;K8|URz**-J;hQ?1ye)D7G?D$F -@>Qo=pDzk(6Z1d7Jb)hc$|su|!cM^^hXzK4G)V87ovNo0}`v+U4wL97&SVXp~f{xLwLhWa}-Pv9}esO -Qq|XY)Y{f@T0Memv_=Ay=6$paDmB^I?^#@Fj=3xhvprCctP-(eMO -&!l0cY6OD?oUMhP*_9T&WD9O!N;bygn_BwWwN?dkq-ognqv1E=DoLI{e@=q1IYZ8`L9ldeR4q`%@r35 -B-d-hHmN9&gIO7G0oK9$1+!tbP*^3GV*diNI_6ycpg6cibDI0@;6;Uzn)@0+D5edS9_B5A*H-G&#wrn -9hx4@+`VsGJ%vP3mb!e6ACnVs}YXPQilN^pbPo@K5hJYRE=iwHK-u4ulK@*y!!vOG(uC+ -ylHX4Ea;GOHZD-N-_)rB*ewE5Qt}1#>V0xsHf>004f24=dH)tXQMKL)yj)jr-lgflirG1Z6leI4{69Z -eF*Qm22<=D{El_o70-UB7jKM7=SJc^Ga)_!QBAXf)y19goD>H1?p%IC!{7?e9%5e*6^yLebKoNti)%4 -aNzKwaT|Hp117=EJg(VFRiz>0669iLJ<5R-zObcxLt*grycWR7sHR)`k*s$@2WQ@gwQ!7RcSH=^a06# -&gD(x1yixWKQadL0%NMPsb&DJ35>G9jep`LeaG7J1HOy;d5+;=-t^wIX-#N#e(sZBt -mKDia1&_m{!FZFqBgfy!ZE!*v6%CP|*KKb5|9IDY%;?az!iC5YS1=;cmmgZ9BV*)d_YDqD!-iCmImD{ -i>8I_(IiY~;1f-PmYyMds=#vf(^9=HAo?8aTQ~=H_9m8)5SXJac~&N0J4C!7lyW8<;3Tn -81S(wDX4W@&Q~?wH99oSRYSgIE;JfB4va~dF{+uL<^8*qj?IMM@8sZOs|8_c1WG<|9w;sN@z^A!{mBhRo_4ie`S4_W#Ee1Q&KoGLCd`dr03n|F -ixt0deNlpY{5%t;{4COu+cTwgc9lE{u^uWPy)4>BK?RfT@yu-~(wpoeB-8KaP3avzO&X7w=OkP?8`AG -?vRRiRZt4Kw83tkK7sNzM~Ri=~Ze1!&(Kcv$8J}M8x8}k_ro(~=a<$({#KG^LMr0<>bkm&A$!O%T8hG -W;wIfi$eJ%Z#>06E(o%yED4>Dt-;5N-dR9?^xqG~#*KBX|>JM(otQ6ezk+jbO43xAQqr>h|50KN91cv -~V%|d$n+QLu_H8f@yh|Ts)|cli*SG$=|QI7A2x6Rf{j8uwEI6IgpLWM%p}2ji{DWSZG&%79SkUa18EE -{FQX;LIUiTSr>!mZ$Qy#c@PJm7l)%XK9}rz8CXz`UP~})$x;A2ahyUzBQ1ho++pm|TM9HGi(iT8c8u_ -{$NM>ZHpSJ4ZVhrRyW$p(vDt#=g=$Iz*1cXv+&gL?r^Wr6N>|LPLf}IcjFmo}7LdcxsYYC)uzgI_U*; -(5fk+8SV=YR_t$?anF5_LJ9YX%So6N>1(qZkohBBmvoD3XyB*P2T(9E<8!q8~apM0nW@#K%3^}E9n2% -qbL#8JXM-Sy>16*|w6QhS^q5&Pc?XzmFB{04Al+BIg=hXogxBKHWQeNse -m^bN2bA@~jefZ>SL{MRAF&HYG+CaL$?_cj!dyDfr@iw}26rsQktnA0k#XmqT89>pS&Kq0W#Q8xB!Gf9 -C~_nUO?`?X$~m?H&WbTRjR2A~ZUmf17wt@C_vEncTL=MZSnjMf$vQ=x-3AARJLUxZIaG3F*$hfQ{O!o -uKiP<=c20PujP(VMtNXC534`g*E^Apj{y+nNN7HiIDb|}0AA6`i^QBv~9v|#-xLThs5^S{fZM&Z+3<| -C*3CJy#uk7x?)3N=x!wBm=jIU6iLjIyvOCgloVdYILK|avN6^Kv~(%5K9lc9uUgkY}G?Bbq4?% -4c;J-c7}r(fmzWyg8+rvWvZ9}MT`N7CT|Px^TG1hN77wH1sOVv+#o29cXDFv`ab1D{Gysi9D}#zs5iy3;X8UB%uu6@rItMLotd#LeusPKIZVs~*1xg9El%nwNU5^N$0>Qemab^+}yEUTdYspdaA -N5Z>UQtO4Yg`{@z?bcl%(vAUe4TLx9if>kkGVquccCKB_14Dtk2xE^jDMu0RjAi3y9;jNF7V4GaQKjR`Uodq%RU14l+fZk0ZQe6 -M(*=Mwaj&Sk>8KLB;3E7F?DH&=p4PhM?cGSoO!VU5I;p%hPsuB(HpRoCy{op&~mf>0VJK@`>QAnUhpM -ej3o{G>4cu9vy@tBIcz3Cw=fhWBNv(cx~U~$L??jUV(4XOnkKH#jxE4&7{%7v_?-TK1nrAxJ1gMed=* -x)x>Jn(A=ziIf=fP#ciWZic!ViC}pRY1}~HGBz(y`7e2fn!V_+ahwKm?VoOfK=|_wxeU7d(gOp*7@IR -U6SMh^VUf74fY+-A2INNCL2f*n|MI>Z8jc$jrd!Q>_mBFE1Rz%ig>`xL!xXbNNngK;kQ}Zr#-#`-Y3ano{)eaIe^2(79B2>W)3to#$HNUJ+!JO%?CX|&4zy$64BBDr6^)@yH -Urqf4H!PZDuXzNP#iwC9uM}I2;^1enxmaN&S`8A<&(a?J`vi8U44KZj15Ctl7w@J{=Y}^Urc!Jc4cm4Z*nheZ)0m_X>4ULY-w(5Y;R+0W@&6?E^v93R?BY -NFc7@!D;6q(NT{nOIR>zc7HEI~c^n#`M}f9hHW5m6NUDzizDrV)t(TqXVw&O(XJ=#5g=q -@B*h*!9EwvPt!PNf`f_mQY0-LeaL6F<Mb=x?@~mHiIW=?B9C$xVL}&iWh>Dm6-+5eS -QjsEZh62I0%B3U|PciFJB!n;kJ9lw=OyiLpuX(wL)5IBrwQn9aNf^YhXqed<9!2x2Vh>WDbJRqMJAgT ->N6O0AT^<-EA(lEYJd7#vfca1GBO8F`M5pK?ECqexnR?BKcNvg^@;)&zz{F!u&~=O*Zy1YJb}ihNzb= -B&kaNR$*GQf}{?2%P>w>LTZfSHUQsOxHWM9{97rhxk02^o8d34!2I8!G@ -{K8N^D$P10FED2ywPPMo2J^>H)SGO4vk+~w=5^!#U}N}ifEndil23BFDVz$4o)5q5a_4qJ8pKi!n(#T?4EfdaZ4jj5YhE(pRojY+deBZ&#qMieGY3NC|Kg>>39Pl0& -WCH6jIK~fCsjFkWnDH!@0p0GowdAWmxM^ ->jCT-H}(XyC!#-g!jn+LC-j=-Qu$-yli@DoEi;?xRHv)gJU+qBy%2>L+7^cSN$~#vJioIHU9q)5+(zd -Pr0;NjMXdl=$#t*MM>FiVx31{+!pwEJYm$@gP`5&Rt0)vm7oxM+(LG{&n7FzmxlX-IQ9O1fv^RC5tqp -8-9n%R#4NnfYZxVdx+UTLpC${rn1I>1#{!CbslooWkhXN;d{zyyp)*Kzet!M{Dda`+SNAnuRNm=2LsM -jW-qJ9aib;d4|lR{1fojKaw*?YuyNuGOkOh){2I_ch5$)v{r0Z>Z=1QY-O00;mj6qrsSCcJ)g0{{RR3 -;+Nn0001RX>c!Jc4cm4Z*nheZ)0m_X>4ULZEIv{a%^v7Yi4O|WiD`erB>f-+b|G*_g`_igxV~4?Q0>0 -ZL~00w?X?b7{e&BylAndRFc=`zu%o?D{*XR3)4#^=kB{--+^gFg(pyR_R@aLQc5gCFVs)Ve>pOye -j9gWp+IWyC%!LSUl+l!?51L#b+fuJFTs-zrDSMiVQD~{JS)&=H$&~dXDgc5BIFX@J6k6!DlC<2m$OtE -?}P}VMz&u>E#IEYsFR^K{zy0JU84+OID+bwCVs$*esj~EAtAulU*QnGIA*UrG#`2W)yr*aD$ppu6Sm$ -nVFdwX5c~A%2=}S?-;%1F#a20D~c4UNoQgcTRk_J!nO<(ylFpUX1bjy_ge!}Ss)eQSoqdY|8IccvdHO -Mi{buH_T`N@5?CDoMXz{}{+&4p206GY=LEKm4-0yKf&KpN -6QkF1iusx}6u!O6%mmFmrR|il7o(()=0$F}=4 -DZc_J( -etuwo4b4^DRGe=Us=`ocI_?Yjpqi?Xm)76DJcR4&Kvx_n{G^eL%&2iP?pfjA4@q3QU*bZG>hFS+oj>Z -M+HyH)u{p#q%Q($el`@BuH2CBDCJcJbD|Fru`h)gF;#1=|bYXH|p5&;1eQe=9)YX&}Lp{gp!>bnlym1 -lC`8QW*u4*4+OKda(b%SHVG8$}TCFEvk>rh75W3xEqY@d*$toh`QhBb_0 -Lm8t03!eZ0B~t=FJE?LZe(wAFKlmPYi4O|WiN1PWNdF^Yi4O|WiD`erC953FqmMFA(sK?;U2Hj-=?DQLQ#>Ef{lYzV@aqG -Xs8p7ZC#7ge*%1!be-I*m)*Rw`Za+%1&6XpGBkaI4vp+r`YO^PK4SO^pmrS%R5L#4->mu#(GCki -Us%I|<+669FLfQmX{KfdRw_aK^zo!@6B?Fi!GwB{lG4J=0!>v$HcN!)Zr1`$iQ48QLFz&Ngxnd`U$H9 -s+#YI35|1XA_2EPvCeot4L3;c#dYa&P1oTstks}hmrydS;4SWmHU>NYUy0ZgD|xenj&NZ@y&R?;%kG> -o`@C_orG4T@C~F~KSuSY;0jSM&s|o>H5KlOs#5-3i5QIy%AqBsYSe(|#UKqqwnRjK`;)LP^wInn3AXK -0QOBoIx8Yq22)(j~j*%8$kZM%(Fm9NTCeA5j`nZ@1W0}mF!@-r4N^5Zce9aajPrb8*XWH6`p9692#h7 -m>ebO%R3`x~&VDyNi46z-#{rz&pydX&+06tX|;?Reo7c0a@i>G_y!LZqEsw**@1(Xd6jIx5;WFg3(YV -xuw=8)HoRTyNl?C2vJydX7++1O`{l?YYwC@gx-n4NmJsvW7N4%?la5=~kYCk&H7u_ds2cQ-E|Jyi?gDMr5^5nvr&WEi**Wz&5lhSN9xh3>kgH&28xjP9^@s{ -8x&^&NmzO_XKTNlGl|wQpS$_1Ip$ -^&CM;QM{(bwBpyQOT*=i0W>(D@x2ja*SU&F|v0AKB&1c5%%G)a|}faPL0#WjuWDMWLQHvmWrKH^{oVu -gjv(gS~YkRl+HBq4KS+tHozKTjBQ2a?sU*(`wxS2Y*4r+E@BC+5vCZ&|Ubhs}A_NZ?~a=b=iH*3bErT -O^S`Fh{Fjlwk30Lg!jZtp9SCIS1LFj>yzyW;!0abk?SYGkg!LuP(UFrp*7 -3X=gKV+{5OYbuAL5)24lJ1H{JA;baCXj8Wf0(B`TTS|(i}Y%ot!=KToSL7z|?Gpsbn^5@g4Muz5OX=8aKqW%coZqe23<~?C5R6_O%~0e8IfFqk`F@h9S>w=% -kN5=zmZpzG$E%SATwB$I&<7!3kAG_^W4K)Yst?*N3_)TOchs*8>xyMFlM<=*56zY>r+s1!c)hLT4z;4 -*B`R#r5@pC=-QtN<|`JZk#|t%5$}HVaD?tt=W&a{HgxUn}20&I3^aG? -a4>N3__tKKP@idia7MP`R&1`qnH7RN6H24j5$+$EcM|hL7Z1sa%ZJP5#S=td&G#kBl{gvmH*l@6pleP -RcN^)gHXw7{Hz&D>1dYi!=IpIg#TTA;|E(jxJi2wF&z{d~&0*a3x{$1Y*Y*eWl1(ON!hu(-90Xck#vj<@uETgVB%6pDu2~`;Yf`w>N(qH*^Jr0gxT3-+ue;przJ0Lkj^-P -cmo@oHQWgHnk(o(hhM332lG1?=AJknPG46g&E-svH`nNy2cRC951aVn5q-4(4ctB=+E`@>G5wSHUEdS -D?%r&Lzp7m-!ai$N$WUs!t6=`SMo{FeQDsxJA;d+*5ukYMMU0({lwo(Y#d;@`@N1IUqt(>?anfa+j|1 -VcLG~C5JZ4B=dI=slOJ{lc-7SD9oVw6hE*X8)hMYjbf;!4w6k;twGtse`fBOYSSX)#PUs9<=?2c|iKt -G#0=+t=bal|KhP%ec9b@C|-R14{h0M0yfm3%l_#aS90|XQR000O8B@~!WyM^$*2?YQEf)xM&CIA2caA -|NaUv_0~WN&gWY;R+0W@&6?FLQBhX>?_5Z)0m_X>4UKaCz-mOK;pZ5WeeI5DE-St*YA1E$G_lE2qRon -*c#k6arV8^%ADUHA#8B|Gq$tb}$hR1j#ndlwKKb;WW~KmgA-B@kAAY6^5^^WB`2mH -Ue%zTKiCzDUenpKD{lq2EV%LZTL6CE*6#4YW2d2S%e9t&Ut;M+U9{viYsL(UjU_`%L;#xsCO0nub4Ff -BsLFrN4!nok9+5G7VIon?^%zDmf3>UBc&+C%}x;Es)Af2=?q&MiS}bO>%c=ZH#$QrX{W@wJ|ow3TC{%O08$-ur`+p7?bu+$=rxfz!{rHlqAZynl~3C*H9RvtSZO -|`67Ct+os7D2O6IF0?mG?5A8RJT5p+*aai2|5xfwF3n<`QXZFyreYm#xRea=;pnQzX9UH9_aV~@hec^_DV|&sBQuZHuS$<6`Wt)i|(?PNcQ*J-NQ}XksaGh%24wc5RB-wE0mdT3KkU0 -j4r;&!Z@QH!0UQ<|rf0dP>mJj%d*|cdV0%coRWSNLDGpN@JB%+RMjoAeo|$eu>Yky=3xrpD3^4G%vRa -xsAi*nCR%lNG2ym98XN_W#J6IzpMelM0^y0*_SOAtHd6*1|llHYp`AmUVuD~H#$a_8k@ILOh`Dp9A|oFoN3W;F*Z_7XHh`u032zczr?|%=)g}pC_!F;7PY7 -NuEdW!{=77VK5%A?WP!M0X<-wc)scYr>uT63XC -3@s#N8Ma@nW&Rikpov0NLg$Pu`ATXy+r{Ey3We)}rP`b8=9!WTtCZ_hY<|9FOiaMf$a8;xvBG#N;IH< -GK^16quoj$2?Q!Q=$yX>%EYo&`nxBQ&a9{aS|hmDFs_?D?B1ER7fsPRI_DZ-WBK3YS4z(RCQZwF?Bq^ -3m4w#pwj6f90rfWD7;W+i)i!F9l@B6ALytSz5wS55f60NFr9O9&#)C9tO&d9iUVvSgSmI3lgLASds%{ -bSA&!84oybgi@43E>Mj$bOlFN|w9MQycdz~Cncdpw?)|;Q3Nm(6!hbGQe5@9xouG*$+pb0CGPR -+24dVD+Y$*AX6X*QicCe=%zMRg>^i%j$2s}?@A;$I_ct~#_ojyq`Z$s|ivPa)r%%5x>e -o*Eq$BM$(>-=aPax}UxMO*II(T_Oro52xgTLQ1+@cii7orVBKLZ*y`Wuuef{ih75@TIO -9KQH0000803{TdPLU%C**yaQ05}Q&04D$d0B~t=FJE?LZe(wAFKlmPYi4O|WiNAiZER_7Yiw_0Yi4O| -WiD`el~!AC(=Zf%&#yRS8YH5GjmJp^fy4w7FeE1NfKcS5C#zLAF1AC-zsJW;+~(3wv#Qo{&gDDbxww^ -*TgdaOF^$4J2fp1&Wq=i0ipF5>pQETdm%85>zQri2NImPdk}tB{d|(EpwYa30PVGtH)&=iBd4;$%0 -|pvrMm&xN^Ug?b0%65H58LmlJLdF1kQ -1S^bVzhpmQM8Xyt?g>~iZbZ>(RtXDambvE4lqaaS$WA!SWzlE!tLDdJ7F9WV92<+EX##D+!r3-u3I=f -x$jB-*)!Aqdb5G&kd1D!#J`enp6*laiW57<#9hyGh(_V9&Ur8A&tKPlfobsp*P+{4^F^13ppRC732xdQ$Op -Ci>+A99$kre5r|K<`2Qw*wgVniqIua3&dU0C*(C;U!9#TSK0Nbn`T2C_mFN%Dr471KkMImzZz0#`M@?jL5;)&zI`=${yUY_D?(?2pQVhh-5rtx4{!AYS5B_gL??H6`9|}t&*(qAs;t6 -MVmNoTZlpPJOz`-HF5euHIaEo&Nh@Im|=1nD!*czvchJaO}YMqmZ<#Og~3xEo%w{eJO@_Qc1jlX=kHX -5Ekch|=N+-X|>15ir?1QY-O00;mj6qruu>Q|wG0ssJw1^@sb0001RX>c!Jc4cm4Z*nhfb7yd2V{0#8U -ukY>bYEXCaCx0nOK;RL5Wf3YjJAi(Rv|51Kr4DcPys@~st+Vi8z-6Fx^?Wx4v -=JPk7XM6y)ZiHG+p|^_{Z`i`<7CO-t^IxbMZHktb9j|Y^ZAfSZqV2S?kj(uFcvoX*T?h>+hb%_dT1u> -UT#C2Y*uIm<7^@{Gg3~*DvFb3}xUzBjH_l<~Xd^V-^6_LcW#FFCXq5b5uro-gECJqGu>PM=Fi>-mA)~ -X%5p!#ids8 -$x~DO?}A#tj+wk&of+NhrvFU%q<%5abUo`vm%x9Npr?a0IpT2(^r?U69)PhS{xy8^mGq*;QL$AEM%Hc9B&@hyQ5zLy^rtFJE?La&u{KZZ2?nD@!dZ&dkqKuvO47&`~heQ83fw0sv4;0|XQR000O8B@~!W;;RoyV*vmFAOrv -aApigXaA|NaUv_0~WN&gWZF6UEVPk7AWq4y{aCB*JZgVbhd9{+ePQx%1hW9+hQ5MoFM51g+EU0B|m$E -QKu5*%F7{~IZEpN}sy)FnUB)r)2|DVfuY%ZC#uvMDzx7CTGcA{3vc$z&#Kr4>pC2E75IV>`Otwk6;Ae -42;3UD=$f$xDy2{_7yH$qk5+ZuGrC|eXoysiA?%M#7Amom9%qA#t>6`td12Dy%9z?*# --uQ5KX6W_0W<(uot$B3Eq%#ZUB-sG#n%iD>ihU*WrtunFI4^ZQGM5g;rWCM;1M_o%>qXoR|?j)KG -~u%lbyZY&&{6piN9sAk@6aWAK2mmD%m`+?QZwEgc0029V0018V003}la4%nWWo~3|axZOjXK-O-Yc -FPDY;0m-V{0yOdF@?obK5wQ{+?ffRVrsGBda9YNgQ32tvGQuuFH$pac*WRo0BOKvbmN>ElJtdUEP1b? -gj_~1V~Y~a+8@|RV9|lMg#qz(dY)iW~0$~>&<3kZ*s*J%b2s1ReBkPESN85e9ptvO9S{BP1!uTSO8U{ -(RlCx?nZISl2xL$v?F}9<_?-N@$A;`IUUK>wgy|? -7-WB4~untn@EfuESC%Q$3yN8D;X;IoA5EdU -e}y9rJB(PpzKyl54gvJ~Gotvk-@CulCc#7on-2@ti}&SJG#jdY}TB$J11@;QwG(Bn@mNLVt9ZWwgR$? -9a)X8N6}mp~OA#@vY{C2_@DLW?mqd1P@y1Z>(Up^my{LAR`*(v-v{Br#M&C#i@T$7oXBnq%* -H2yoEq*_N|KaK$TARUdG37<{dEE$e>b~F-F5YTD!3Vx72Ya&!?G_E=0VKZs9DhqYI#e#=E&>3X8qSmg -hWk_^`I+uxKixMP3n514f0h%_O^LZ4nt^X_>9s -do3YiML%#+<|c7GTu!Gve!HB_+VuO=GW|4t_0_!(uTHc(cyI5) -gR@^xjz-5HJ{-L{esy+aR!H}VW3e$kaSu4!4eg72r>}mt@9l|uhsPi7d;8+v(JyEAy(bSIyg7RN>dX5 -x5asok)6Ykv_s1WO&+t~S2e^?vnOyS86-_83n7&|^K)cgsFs3^xvFq-gIGi{-fraR -V*LIl7KNZ^OCriQh!>3~(%Fc?N7A5>w4iZB|J<`LDvHu7i?K&;$45TS0rQB?}o`yujRX~dQZXET1`O; -$`)!xnLrMw4iUV)i@F+AK;hd3+N9Va#`9FOUOKA`wO@PSfU4x7(!2U>cRoAL-ziW@8Cv>VicxKWh$*U -l=Ohgi~v2kg-R}zq5vAxAIRTy#zF8-1C#X6!PVWLPE2|ESTUGpaTee=7oMW%bQ>}V`Ic%9$iBL=vI$S -mnk}C(lKbTM|pp?E0~=w!!(%lpM~f-9`<~a!wqdlAcd0zW{mv_MwO;cNXT+i(`-z<5c@_#MiynhoTb4 -o+IA);*oLTE>LT)&8YoINVN`H$-e!*H_~YW8uE{u_&>I=004U0_* -WQxP#%e=fcadMI`2FnqEqaegqgLBNi<$+Cs#u&4n+>GGo=2_ZVYIxs>`46!rdll* -Q92?ZuxFaBB434K6Pnl7%WBFUWjSSC)0*0+~u!#`F`5jf{7;MpkPl9QHdZv0XCgYVrP~y#CwEIGzh4Yh=wHhF&!8v -sy@Rh(W6K_1@9iyS>0wKQqm5Q`=-eFA`4IY?{0Xqk1n!Trwd)@v%IHTUJoR=hN%c -yc3!2|+^b%ajXKo=H*QJ%?}4SGhdD4J>+;$o>BqEFcbq{`)#H2dn!#E8Ptme{*l-wYtqSkpLEoLlwU1 -NMeB$#jWmlwv`;({BMsFne$rR6;Sk3DQgUK(PwJ`7| -5psfoqz~f*Rq${a<_<5WO^jMlJuzSJe(zN~zX45zhe1Mu}Z9!=&Fit3_)^b#hE~Drw@6Dglm}+APTAo -}+OLQT)Dw?C1jeok82*98VJX$7DW1V?Z@H;fuA=8n$x5#-l(Le*X5kwX^+5J6k{AU>>9ig`U_sWXEs3Ak`)sAI4x8W(E&@fMf-p&K#Vj -&K$%C8hot9Bg{{K55Ez3~0VFVnL8J5Hzrt9T3YNeWPs5G`;ixB6JXe-{-T|jI1`7cgCebp -UI3^jy01z6@cxcHF_rN0$F92jf0jPAN-GBUeueaMPK{W_#a0IH_9BI0#!IS7}bA{nlgC`C;Cr9a3c{u -naMA9A6hJxscX~E4H405CE@&VNZ-$qRz(qc*;b&xxW@l00K3_&0sobV)RMy*Ynm_)#7ZNnU`fhhu*<1 -B7A1I8A*^S~Col*x4y-H^wR`(`jH<58fsm$k;w)+^(x=>|g~li3l)RtKM3S&v+ma*$|-Vc75OKifapd%FLu -%^s5e_jh~lB68&GMcjmHK(8m2qjWtXie(bEG;Ib=Q|_8{y%8}}MM~o2?9DU8gFIcnRW-vORwp_g{&4FCvlbrQiR -qI(U7Wy?E;-4v4SVT!6+#2ZAEC3SWu>T~ZAC#ssk%nygsjU1^{{WXEDix22orqbr=uqQxSZfxp4dBCtT -9o(V24-f*e*xwpr>w9u$Y6w}h%Jfek)HkP{du4&N}<2Hy8(a!~ay^L-|RVz{xLmM8lx62qcWFEx;3VD -L2$U&G%$(re7(g`M$O*rrJIvu8P`~y%^74CE184dAp#J#7h9oOF;QDye5kbr+KP)b& -IYxaT)VMYc{GlrXol`s@vfSphHAbmP*@X(d7(%xJsqTzUkenOoD6OUKM@3Y)q|zsBxYVTF5k7d5}esn+ULQwjPl;rm^-Ch)Yw`pHnxb|KZ+k)! -6B>h~pxzWPl` -ONUbz7AaFzLj`#AoK3fS(CfKnkiYz`qNPEM`m3;lAc!aXbA+}>@Pe`SRDB1;Gp|JKHkEM;i|kMxOUW5 -Sze!M0e>16B&!yzL@1qwCV{!NRggnJ9+TDnf?4XOv*VkvgKpJ%55DD`$b*nae#BTRVRfJ@91~UV1 -sm2I(cl7TM;JH$!+<`iL~@dpRr)MIp@tdkjnCRTfT-4Cuw5gGxAH&4TCNHdwR@S^z}Z2?k@yLTu3*?43)XibI`+P&rF#M+8-Iaa7QC5KuGJin<_#hS07UT -8h$Kpt48Z3m8K`8GT==`CaVPES_Ai^2&0JF5y49e$fVhpHG%4AL<9^G*gkT7PzKm9Dq|dLsGHq7kE(c -8y&C`qu0w39T(O>3^V<$P(E`q@JO8o;F$dz>yCR}@xe3P1%(t18f!~4d8uA6FQtCDitqNo{58kyzgYK -nI&IZp)^#yMs020K>fy&6J2}j!uYR_a+iYF9iOOmm96MSYBB40AuuwPaNxQDkE2aJL>ZDp$YoBdHNo9GLobr|>B?@*sagGUNj2q;A7k -Pe=*`nWb(HB?dpAcEf&><*A?8Bi1x}O5SX3JUj(>Pwog_- -vOSzM&Ee(uF*D7rM2$1fne)vw;JC5?-$;ucZ7GpCcMX6fOr4*3-7Z5x;qg1v4b+4kA69;ug34&Wl--N -j(65Wy_p)nH*l8Al6S^gmRC5xZ`;h*;rzY?=L3av@9Euu-m4At%Xjxidhhp(^mB#uUjJ@LKdF!O@x76 -L^7}>FbH!05_E$1>S>WkbEwItTaa9WsYPZneLJJSvEu2)fuvgwO_wcZc`u(c<`?V3;u9IT4(7Eluxt4 -8ro;O-J-Hw+1^}A`A-`!lx94#Dgp@D8S^n2S;!^`ichJJrLY8ZSsHT3tkqlW+ZermW+Q}Z;qB|oU{&=v$m^Kf@XhfX!bWnb8izg`}an3&yD6&9nJlFqPf2{H -1{_}^T{S??%x~DCvG&K>1fuDEKATl*czG#o1*!A6EqL*jplPVng@p6tQ|j=8P2EMvz$*i1+@2UBis4( --jMd5xiNiSx~^2*Dfo@nJb%Fb2!Wh;N962T^B%#(eU>|aSY*d{M7FrrS&D3(Am~0Toj)wHlTu{u9kCx -&Yk#wSIf0;mX9Ry3?fi`qtX#Mdg@Tl46Q5yZQK#Q -h-nIh@6eh(DB5b)ly!xc -f}JD>Y|_# -~+={9Foa%&w6S5V6WEv+>4@g!ZNpm`&kK{n4TrFh>cupvUL4{Ajq<3V%BPKdAhc>%*e_4oJNadoT_l9 -60)IG`1q6*FBdqu3Kr7Aqy)F(2smYw(8RB{*1=RSTQ|i*<6J9ro@JdfvMY2b@fkbsq)l-bpYis#p+;#3OYH=1T!z@g|D>vW%Q6*$5B -pk`{b}(sChjoQtN??1Ml_-!=y20dJx!QQl4VunEdd`6{haeZ#h=-O -d?NK9_b`!)$W-fR%7UrMF!L-WJ4{3lndIC`rDg2<>dUCv~>n0ST3Od93cpP4tAEMr{I%D4$9Q -lS8yu#nkYQF=SOqn&lq$m^&Ex6HYU*wYL_iIPZPGY-0XW3aM|!Ah~ZvSgC9x(CK6^f6BhrT9_FFQpRc ->}CF}mSJignc-v!nQ^T~RyI4lEm|9qIjo(V2bow-A6}BiW~QsX%+8l%P{?~`Prh2h7#R)bF^CmJ{=pK -YsrgsoC$=@z&tmYC$o`VqaP%%LkgA>pQuW=zF6&*%G5cAd+;&zUIok~L7q}Q+o0h5A?XeY;gk&jCYh- -}ScvmET6K%{0hgoy92we-j=nW7dPtp;t!>2>%Yb1(_Mpl2AKR?}O)~h9k_S+`R*V|x|MwGas_>`bpw{ -cHMssT{Ys>7h7b>&Pijnqr_&@^Z%!;gFwMviM)s!r@p1t5D-d=xqF#*@OniQ4R7qNvzt<9=ZeMdZVAk -5Xc8XM~V0=eY5=+ez1EN3e;Pf8fmT&^u9Q>B?eNeS3xaY82^LHc`C=%iYc{dqInGi2Ut=1N`a+$Zc2} -5{<(KjR?n5GgP$Oz3uCj-K(Z?RZS>|s%S`0pWja`lnWo^sFve-$W9>!HvsL&JWOf8& -QuDD>uhG_vaxNYhyz^fKj|U -%1I!XUSn=BH!rfp5^S_vx=?1g45_E!cXJ1hxvDjD_8MkLQd_VBKutBZ1 -=z{RyO?{~BdWgclN7q-r>rfY+Jtio#w_1_A|yRl`69lJ_*#Q!#0HWv03|BVRBYyBL| -W$)xcP>Ezp7v3u3)T=kF4k44+h#oSZ)v9nqs8*-m*$!y}%>{s}CFI7;avU2pxd)!fWJne=bm)F1Zw_A -UI$7V&l_Qb42d&`(TsbuDO)~Slw(@JKJM}4Z8J*#BqdeEhcTk*7k#;r0^Sg*q}MtIg{?;S(ItmE#rND -uv>tQOa~i+Y@;AN<_SxlTMrvu~}U?s4EgYNZYSe34;OZ$~q_#@?>O?AAS}mb1hvzXsp*bs)COdUp`eH -ZAxdynwiM$;(M#ty;airsghs|j(2URyWnu!FZ^(N+SY2{Yw=Rc{ADwbVtS^Hz;0=WDa;kU -s#7;+w`-39(1{rrtz)&59`%dj2_D$h7iN_Z>WaSSEr*bLX|l0sT3Gk3*${0-4|q6Urd*GYaVXBU3tdo -Jfi!)$j`%qATM%Xi{*c%>PMn11K1!Ki>hecjke1oKKN5=8X_75tsPX@UB8X@6D4ZAg;aA}X)0Az385s -_6PKqA03t!DJXT)M3hF(2_X?O8*$Ib>%>rAQ$eDC$2xhl{DGDV)h8?n0!Qo{8YiBl%EnD~F)b&v+7YcahY>>EqRQ7=C!pqaZ=ZKT&d@y2 -9hM=#;m(IYX;-km2YV4*`M$~CJ=9;(yTS^qNCl|ZPjvSO`rvy4&A%_u(>g%E!8iD>$60q-L+OOB-}5i -`Yi$PtL(b+^n_c6Z>qP~nLB~~fn5j`-+mr?AwAI)uE$Xc|XAbr8it3|1QDPiDq4(p|Hpr%hI}~;K&)a -rYrMg;MNxf>Wci}Acb6n)?exA3Wu{)=pxxBn%b*Z+b?C#Pib@V~SV5?ZRH}SZWrO7&QvcE|OZn~fSWY -d1!bo2P>-MaHI2ur&&KO$cJmKHtKP=&=2+Ct&-0OS7vP)h>@6aWAK2mmD%m`;BT0T+k?008I$001HY0 -03}la4%nWWo~3|axZXUV{2h&X>MmPUteKjZ*_EEUoLQYbyC5K+%OEi=PN{(y``DirI#%f+V1Y5u$01- -UP>{ZM45;>wvpw9{C#aF)B3VG*yu%1dV1Ck{Fo`gLZJ)95=`11Af`P=DvZ)gj~&dF9gDPZ(2kT_mby~!~QZt(^MVMNhnLf= -g67Eo%65*d{OTD)TceGbk3^?gkOENmPMn -Nn2e^jXA*4~N5rWRB-P8GG=n*N3V>Q%#jAcMtuspx41N_~fiMBb+2ola%Kso4qc}GdL?u=a^owbl>OC -ys_{;g~IE}mBRn*$QgNM(hzSfSYEGOva)M)VGrT{c=!HYIv(IQv~UamWjB8TP)h>@6aWAK2mmD%m`-I -I5kwRL001%q001EX003}la4%nWWo~3|axZXUV{2h&X>MmPUtei%X>?y-E^v8GkWFjDFbsz8`4ytQY!J -fOeTRMYFetlp>@tRN6QvQ@R*>aF|NYz~jq8heAIYyiw(vbrgq|Eij$N`29JLrCc924c0y-clijTnkBw -k0`=CGg3YWP8k#G%^4bMsV#4c%1scKEo}G;lzi;QsS{_jTAU4a3BQS!eG&f#ArIl;x8BdKPHej}8@~L -$%~$Q}x0gjOmjmL1TdY$f976kzGChx6W3Q$samrp`PoaX~x!DChB{w`a?3;a&`&H8y$-@s~L(BxR;>RHfjtwNS93Rw3 -j=x+H8|EhmbO9KQH0000803{TdPG*YQH!u!lCyp%6-8OQDn^Cib{1Doc(u-qe)-_l_iINlL4Wq?z~Ld~ -V>=$wU~8C6K$H(SkJ{xkx?CuBQNeB47$*1V7}@n+ZF)?h34d&lIBZPHkY@GU5`IQXjwU;E>+!xfG&}8~oR+Z*VxkPTbf3cVDZNrNtlgdJoP&plA;ul)VBuktOh -V&C5hlL~8jrTSYd~zy0?Zsn`UjR8Ipu8b0Y!O7ASjSf^J5uQG63M5?OF_e~&_HX$S@WO!za<-%`YFg9 -iQfgWZPBm<$EJPG15VOVswR1MVI27dkCsy|Rm0|XQR000O8B@~!WYmXe2asdDUhy?%uBme*aaA|NaUv_0~ -WN&gWaA9L>VP|P>XD?rKbaHiLbairNb1ras-IG0UgD?<=cYehwSwNzw>R72mKT;`DlqFGD%YievGB&l -3Ncs0Q5ZVNkqAVTa#rS;B`Q`k24%B~#Q6GpKcj7N|fVw50telG91qlO%o;;oZLh#$Wt=2q55Ar-7E)7I3JD=Y;!?RJ5Z08yn5 -e0?$Qa17GM0evoKZC)>(()3axWWUF;rG+@_RyLsEOe;EG -2RS|{!9(Co}2|INWook5otEVrf9bxoq~#vSPaHD#E$8At{k2rcr}7wQ;6@DcEojxVVe;{lb$fvwu`Yd -(RxyW_Sbq<$$YX8TU(#~Q$8tTNNCJ2-q9L!PI8a^?Rum1pYZhSmgvVoL*RNN-Tk+dhW(f}(vY|XAB`T -zw2?;0Ursu4(9k2^Nh8}t!8cG#0|XQR000O8B@~!WBJ^Gp^a%g}Dj)y=AOHXWaA|NaUv_0~WN&gWaA9 -L>VP|P>XD@AGa%*LBb1rasr5W39+&1=ozJgI6EWxVav|FGUWCBdG(}htdcJ0(y>|h|s6314e5ml11<8 -{(+-*b48NJ(QmTR(Ut^4xiNZhA>R-jsrD%Zd{CE!wOiRhiRT(1NseK{=5(lt{{Vg0QW6SvFY?KPMV2C -YO|plGU@9Yz)k>P`_m~vrZHa=#q~T>P0in(%3OX|wtf4#uR^7X>Pfe9cV7{~ -O;$F-&-==Jm^p@5I<4JShWT1L|ZACbPSGxL=(?%-3>iwLGwvr+yLV_6A7cxWP^vkL)o!Ze=!`rD;}Ga6${Ro)P#949xqCf2KT$_2M7kX4|r+#XIEBOTp^V)~dcOIjeWHmLIYmw -fjCHfX%?vDeZw_YXgGhRVD=SxQCZn)zTH`j7M{g9|Y=mS%YUPNU~F)r+DYSRbqkTl6MKFeYSDQ%X~%Nt(hFnk!A?j!oon0Ea2zO# -e$qEV5EiFoZnD2#02ZBf`_@jC2VelU-FbL~A)_+E3EgHgYI|+TTm&AOPiq16S*w;%W1Dq`F+5A1~jYt -l%6&1$Pn#r8R?cdu@;(>&VD9wc!ru2-|PlvWT`nB`@#^`n#+Z?YeU#+JGh -wB5SGsWjsC5>jS1LM)htU@D1}wFyDBmQwM!KfIq&0a5r)0X)%nHo>4)^)`!n})FB -S_px3BuqKE3IlUUyF~x~IQ-xDE{58+g25p8vKwPfwA9%TK{zN-ArMflodBQwl;*(~5LFE|({NV3cy}t -S~rGFJ5m2V{l{+KSJ3;L3823fs{6mALFWsN;{T_W-5}#n8b#B)!=Vd(`vD -MSMzVxMo!^^vT)seDy&K9R^W?RS2g-gwgEW*^2xv%Ww7XGt|eFvSBC3^5ZEg;HvZ0sACv*;wut|L^F# -#!mnQwm)@aMMTf@N9+^%qVC_`uBVK*sKAWimB4?E6G{r)jLc+jeKh!_M`XslHWV)E0I)xrk=jk$nGk5yAj&-2e?&qQE%*v{u?s#|*iT2+r4T0 -^g9UzFl$S5)Any6Xbz%A!DVvbMh#=?RIGf8R>sNQwJUjw9NmQ>QNF1%%GmKWYK{nISJ@Rn-}{l;6q?v -}k(iB*D$A{1IE&^%Nkvqp(+>@4}c)2uZ#2fK9hfH1I@XN_xmMPOrGnyTT+XqM1ZZ6G@BKN{qjdl$X*czTw;q_(_yzZ)z5og+m9^B!x40i7&cVL*qAV^Gl(tW_t7+{WmbFWc`0|wtR+8(2^0YQg -q^{~SgtFw|4e~)#{5TN%=AVf{X5+)Xa=^VPo5Z72w;Jsb1Hyce-g#bP9>EeLsb^SYO(b)3o;MnL95%SQAU-jLU^{^UF+(u5ZZ_?Y0Ac4aLuBqCa|`A{jT6O?X*G#Aq& -_Vg??rpgnV2}JiFRhxuhC=4%{Wu&CvP=3@QcO9&4|qvy!bh{vFBc`!K7j5Njt>KB_9JH -h4C8m~`(BMIha7nGGF!2}}n!89Lif3_=+`m38-&bM~#fw+dIGelBYaR=ALukxE5xX=P)K+J6CrA&O*` -qoCz^xKJ=q$><7P(Kf+5^5TK{7NIqo7zl@bO@5P!OyW%H9vnIt&L5nD=vF00jC@qkD{= -}7-QnjL~1kagQMUHk~m#;O!3fxPfo+;Q&i%;IQ`TE<#FKbC?9@I7&Ikxj%aUvG>hpuFJ2OC^iTOaSs|iRf}~YY -7|LrrZk-sO)8d?Inlp|3L;go5BVY8~?-YZc%d_YAe6=v_l?~hv7ZcwnY;9o<*@=}4tbiTr -K@hAAFtqGis-(}8=bAY-*;kCgZLNv=Y-sDd`daN>LjbYm70Ir#QkPw4t@6aWAK2mmD%m`)W^p8Vwo003MP00 -1Qb003}la4%nWWo~3|axZXUV{2h&X>MmPa%FLKX>w(4Wo~qHE^v93SL>6THW2^LU!iax0%O8lI_XU2( -(8rzNb8ATwS9Ti<1jiS`;=ltC2@}?`QN*e01KNmslOPsyT5&EcR4|e8!FI-W(2{1TH*|4bWL(WQdH(C -;Yi*PBnjUM#5VdRD)1WqhK4ObZwVKa<<1HEDLf4j&Qs0yYJOSsglJBPJ{%7E@pv9r3UhtN8IuMZEa0S -If=b380B^%MTC-h|5lK)=B&L}NoegI@lq8!{mYgIBqPv1|iSV^xSt&_k-UF1siIoQP66a}v7^hpB<7`3hl->*rbb$%cDPr -})Rj~IuLzGECPCt4I|0h*C5xerjE?XGD~egJGpA!U$DEYJ|46O^;R@v)eo_u-D+5)qa>%jk72t-y$qg -=76(MJC)~{ugAs<{L$`H}Ncq-%n=&8fjX^Cun=gF-{Op>GxB#y -IoXk1dT()7l9+SG{WAx_&vjk>ALUR?njO;E@S{6$VZ%z5pHe7W#0@Jm#j{a`&CoQSqMuKnhYgtHM8oO -t(fDeF&UF?%lj9JJHKhp@qEtA&D)nIsS(n0hoZ+ik)PEB%Ky2u_OVBmAsZuxxR^DHe__wJ4p#eI$V?PYn;7!IV*av2QL~V5 -q_b3{Fuu`fok&VK5 -(swQ-OKeeQ$LHo-r@3I&n6VMlsGcp2VZrx=LbpKpo$1bM_fI7c -I;yrjW3f%s1;!ArWpo(pW6cJf_L!g9&(w?;ysE0(f;_Il8{;=6VOX`^woL0%#k~S_=T;SYdC! -E5Kf3jcbuVmazG7f>R{$2G*RCYeG&Xg@N`DmU@K|4BY{dAu18UTf(ykI3xtns1PMVCr?kG*+zwWaGSg -3x%bPJs@ZC^+B211eq8v-jQhj8xT!DIkd%p -6wB9B}WbI&6D?QGuD?V53rT!|qfrOh)7lmKW$!zvcu`APQO;-U6zSddW>x5E58(TWET>)@DGM?ntH=H -g$MwcIpfC4!~ixWu<|s7O;yh2Xlyxsu;6rD}DR;>emYsmy~Q^eO3jQB%UDICa~R2Of0K{&_?oy{fqhm -w;DO$sI?BPMw;k-_+U3yK9d6tsusF7z!sPKJvLQI)KZ8bRPN`~NBpaMhCV<2`Z!eOf;*%tFAnTnk}zX -yXmsYkhn}wjc;1Qa5rFTs-r}uShokaZ7j(^eGZ>_-m%T9My=DFNC>{K#_Vz46ht?|0m -Y!SlXUFV4><&-bo$k;OR3I9+drLklfH^!U-GcWoPCRV%yQB$9n%ffL?K35)gG}JQXxIRuAz!gp`+!>Z --X?gR!w8;+e!mA!~-GIS}G5!mr7anrj==vtv&)*r)ncsfb{?XsAY23Cd&D@35bz?0%U$#o5mhg`*tQF_uVr)Yqx5JDs(YDx&V@r& -X?G-1o@6aWAK2mmD%m`?JDM$>N?004q)001 -KZ003}la4%nWWo~3|axZXUV{2h&X>MmPb8uy2X=Z6;&vesH(`o0%@oFgwmRM7ymY^)Far(F4`v5=y1ZCMxueaT5Cb2~V4-XIT3-1BXhtYS7Tt-)UAtLxWT -c<@-L{z0t3os)nu#XO3z-~T)zvbZOs>|=x)zg3lrL9R-9+h -BR>isz6aGGmX8BEyh>fCEotF)CD6<9;Jup2o{VTnzszT}qIZWAkP>TZ|Ihi0zX`{!L4M3kyn(a!+QMA -dM#bgPnW<@Hc>T$yq(mfQxM$uPdo@QI~b(Pi>bk1q(}M^;gT -a7)z6QwLIFh<`v`JxED_Fu&w3aYJBp21Xn87@*a8ax1n>XJ?fBy4HVnFGEKToA-M|CGO1eztUKmX!y@ -L&{G(;r3F#0s6y@Exo|Q>R%2Jr>oBp3lS;EEhbUOombvSE{)^1N?j|U_DDoECG#?6KWwv*`&B=hCvKw -z^B(jp^y+88&GPhQ{e!)5t@Tr7kliCPY0aC=n@GXBmy74<8RK -vChl9F@lXKj0c0Alv$=twg51sfG4$>i(6phw9Xbo>>itju&&6F)V}SGpE}K@=o-qwxo-_mqo*HEK0X~ -Jpn(An4-g-;oJ%<1Q$T1)BPH{?TCau!J>x-~prv08<5A=^P{zG|Z^1o`-a%K<)mDxTQ06MlGO=oGl6m --9ZvaiZowW|ACA+2x8sp3y>Uqoa;p9pEv851>XuXb|uCOFslweLcIb3F^u_$1XEHSX?QYazzExS1q5FXdphng$v`u3M -@!kHWhRF7cH}sZvCG^|y>%bphq@V|(S%`W?h=Vx;wE1>x**l8-d4>ydfH1cuwrIfi9(5A0Cxum5Bo4w -pOm)Tjd^nX)u!nVhv5&J?xg9HKAO%&V^p~&?W)V^&@62l-D1ESAJ}t&6nP?Q?7~I0x{Pg+$SP51VxqL -9_D1-dyOJJ7ZuGWj=xvkKFR@1*y~!H$K1%nG{Yk0k#)!t@FkLR#fvmW49fKGeHvE -Y}icfXnUAll1qz2$#qsc7TqPNHvf_qQrLufoi*U`f_puyXyd@zEth};tkTRT8zI=)QdqET|GRbUd_Hs -}x1)m-{Vg7{IM73*#(u#jWSfg(268c0M9|MEKIBRJ#bryQ>kYd31FON{)Mb^9U}+DKy}s}2wfN}J9Q4 -r=OeheTFmGTFbb~vUqM$V(T_bg5(Cm|NjbW^`+`^X00!LdV^2SFzNqUl46RcalYWH29^uOAmX4@Of*js2TNH5T+#{aDPEVq}#XW#vNA3FU1El12_82)yS1VD@x=uhl%QrdseJt9{ -xb6x7KCQY$r42e$lmSS*ar4zEg?^EXr(&L$CA{tu4=Ej0Y&ag@JsID<9N(S6|959`%c1Y(k< -&+EbLJp>@%PbxznAgl5r!B*poQV%G#V6y@1T|1HYua07UCyd9o{>U)dmOQ$F;;PNwvmh)=aZey20Y4U -T|u|gbT4*03XU#nxSq3L0{&_SyfaeyS|I_qb*8oMKP~lNN6XR -EGZiPWvXE1%~PbIW*aGBAY8GQ58IV8AwyntTyT+~7m*iYSP%XVD>;as*(~u4SOT8@X)wa3-@p0x^RM5 -%iSF>r`Cs3D{q37CUcY-2hhlB*pyM$Z;Q>Xk2Q8%rPv|j7$fWb?CA}&HY$?$#>oz!}2J>2=eduZP(t+ -Xh_B*SWA3y0X&~dAKw|-8mAx4SxAiMX03Q6AH(%cn}urWh1!t4=;HM{#9s|iLig5HB4DAGfj^?KZJPa -Zg&#{-WW^yLEw?ef**#yxxNWFI-r$ItSS^V>P#0gYAz{qowp)T0ltv`BnrGTF(dPFE7&7-aFuO3d~^u -Pca7>#!I)8!hkQRX4&}(pquR>1zceqKJVM?;uMyVc)`0I;1a{kZ@`4UQC{_JeYId=F<7c4d0p3x>rG#fEdHl*fZ!v`s)DxWcf|8f -AB`?tbNNPfi?`Ad;kD``8iKVFt@xv-@0BSsG$Q<4^6AhkFsM+z4jx -{8vv^(YN}iwsg4yTH5!r-@3lzvQn6d#(7*tH7YA7bnO6b@}W`{K_6wtST$%sz2Nm`n*s0*Z7E9tDQv% -y8kFryY}8bG|utleRA2wmSCoL)4S}h&hFA;wSX_8N$&t4{=3P=rn~384J9GaiQ{`WL9i>R=A5VnPN(!PN0>0W2SD -x!*fPBq{J2`-$)q%(eM2&;o~!u*Lhejkt~(@b@1f%RXBX-5Pnr!Glz9>(xWgX##?M{w>HFmU5h+1KJh -?5K^cD?JaxY&zPG|91x||L}Xal009FXlMLLxMDv}cyj^G1gT1JHE9Ns2jU#=?5#XIH62J%%KJ)o-R*o -;kCNhCk?F3+yJ*{A2h87ATDZ((>=2cl^))ksb=bykEF?NcY19=ruTZoV{)hEjb!&@zY4IrxZ8_{@9@B -8J3(rzhPD-+W*cdQ3Bn!I_c9Fh;~$L*M%rS!Z_ceu~Y%StNbIY1k5gK=VH3FNvabFkeT+^i~}Y7Z0EP9%RgEq^GFPp3S7>-gl)6ijR_s2wW&mx) -~}YzcN+PxGcu>#ZBt{H!k+(~S+a#MmSBau|KldLJg0qVg-a&B<@l0vsH4Ql@!nPRE~($vqv9aX+5gdG -=g#+~Mc(i{u4%!$)UUbMTz$7|@oQ8_CN^| -VW6dg2)d=#l^#)!G8BywL7pbj~6|M+d4aADGSeN=Dcb4DQC9jEN2=+eA-R>uHf^v4_JuWGB8LgvT2(F -F8erv{9*PK&lax>14sH=~7!t7q0-Eb@+(k%`n7`DZ^$XL<#<~w}({016zE9^HB%K18fgW{o<0smEVeG -b;Fn7z?kF(5)C%hy)(3Fq$9t3OxT0xPX7@T_TcTYoIVwr+Fsc>?o1g^hl#Rx(!7J9MNgN&R-&9^G)5X -e@KLPv;RnhGd*`@>bv;6#xj{x|8|Hxuu7P)^t4jdu+r=s3%L?$)pZGUu8rNh2DZnA~nUEZ7`bhu`GZW -e@O~J}>kkin@gU6KVa^}cipjA3^vP({bR_3~gQ_wXjp(o=^T(1%pd1)Vm3<<~g-TYY#_S|2ZSta;Ljt -X@+%ETOS>KJH-h6$9^+y@FRVp_;5JjOo!u99PckyYj+W}JSs4NqUX? -g7|*s-$y(gC2mzC(J_sGDIGdmJSGGXGbR4glGP=A>LH=HR%(_v5vmko -muP`f#ToJe;Eswm$)yBkp4?yLywE{mvPG1Pv-8T(d}B|i4S>!nR7BzytZTF`(G$XZaX^C35i&2!55Mk -rVE8+86jB9~aI)lOC`~1 -&{%#-Nle2}cW_xosE0>jWJA6W$T2qmcU53B8ItJp^hiKj-bKuUtdwataN#Y{jS;ZANw9_F -l*7Ea@HMq_>ayl9MOZ4FHR -s*R?{;MdVv;PN52=@AWY9R|osMkZ(kOhhr(pjsJ95r;3;80;b^n%~*P(<*0mnLdo|8}bAO{o$IF2PkE -$4RRA=Yb4)oyBztJ>uKr6bcmCqErbTTTVut(s0h*(EW~f=8T4Q%j0*Vx`XQCA==x5MVr)zX>UhAn`ra -??y0}UPVg37JtSJwMQQA%A3oy3q28aFaEiE9@dW3vzi3Q>6XyyFs!t0RYpM0)is_X!0SaiLfFQqIe_bi2ex!ti*%#RoqKvF-C?dlw9WmlGqeI0p=_0DFl{HUL65AH%5+Jzjepxy4p~(ML=Vxi~umT6_gtBO*`HoZ~QQWw(T_sw5H;UBI0Q+J -6Bw6gkfmJmuRQW@2-d=ep+g%-zc2cjic03xbb_nKzY;ku$7GG(u2~{MP)zi3MidvxmS#L`LhC=9TkDjtmxI|euKnbXapN>!a90uPe$%N19)ii(`O}J7Ib=JPr*My9eL>7 -0DK9UJj31NHH#Iu#E+np!!GW--)JE&PVH&K;a&?j`x-C(YXpx&*V8y!H2qzM2b#kIm>7H4Th?%{YOc6 -epSAcFF1pmwml~-pQ9kCi}lLJ00y|M|6y!Ydji|tJ}Scwk|%XF9zJZ1ddNx;D^)Za#N>47wwJc=@C_f -AH#6d^2hOEBzRXM~y7OALXM%9w=n%@77QD0w_Jy+0Deq=e|9+vB`(+f+82}+Pk7-60VXc|%QSO9+CLk -%p_Hu=R5I?fwi3QcaE@{KIH?qj}EVMLB=imU*<*KfJ!b^UFx8X9qQ3r3$U1n?bjk|=)&pnZ93_MVhiA -J`JC0FR<177GEp?eDJ$XBMldH@zMJl@}_+tf)C{qE~GIl6{0`S9E+etYfaEOcBk -=>l;{x08=|pz#0{x?9Y9Fc^o>{se<{oLH)V*VcvYp79xc!M7s#te9|^LFJlpS3-2+(54l&A9TTC34t2 -()QS7Ds}tH7pCw$Musqt{vekv!bCd91=%{^ogkM>FJB6a8S02r=7@x2{+P@i5pY#(I9QI!OK}R}z%m+ -H>y&ZF1x5w@I@L-(2g@*-6RKe45ST0&tGv%$e5ji^=l}f1(nZT}ju1};}4D^XZa_6dY6rO=MMMGNO&l -J9~TcE+uz(phVbQp8&uP(9uMcPx -RQ}ouhtGrcCsvXZ6Bxe5)%as*orYJJwT(9Qt!l`0m4w)?qS%a`khylvvV%E9nb~7`pdbQbZ3VzEKS8D -?^(4_m2%^F;(fK-p4L=DJfrBcE#*#Gwx_CMlxk^*uuH23ISkq4*}6z;RZ%R$oRAZ_$2}0<8^W{GUYf( -!!*pKzTB^IzPNmznfKs4H+^-9zl%_8`2agsW>$0K(#@ -1qE|Ju&j9TEh5|33*&JR!X$u=hen42<7FfSW5Csj>+?5c091=WaCP8wTjvFChv<9W0(nbxUYP8#(N7S)DW1d!P1;(`D|x0ynl(bK2n~lZk7_LfTI}Vj+3Fj5tqJImoXR+)#U|ZKSJ9iQ -PnPuu?>wI)`)9d(z(Om3z(%@i)K!#r*kG4ocw8~UKeXE8w3_Ai`7V=p9F~fxXp6=L6un#1hnhHC-=6C -!V4xH5Q%uDym#M=#beAA4qStS~jM8OQ&YhGlb!~UFUGFjAFX$fG#8aGEYl?I^{lX-^*{@U!buA1 -_6X>Q~bqUej=GUjH6=TBxBArLbJE4F?nT1cU4EzAJq7HX{VrDBsnJD#m{w4+8UyYZRrS309;zsBAsoS -k8uBn9Bp5rP*rh)l`}(A->byv&eDzw5Sb9g_u)qP>8&UFP%hC!x&57{)>$SdS6L~y(keORDh@6aWAK2mmD%m`-6mt(}Jg008g>001 -5U003}la4%nWWo~3|axZXUV{2h&X>MmPb#!TLb1rasjZ{r<+b|5h`&Y2efZ9kZ1RHiK(8IdsP#`FZb= -ajV48@`oZMI}ca+++|e=j9lNk397h8@`y$w$6NWdz?>(n2L`1X@MMYp7+3%A$Zy2{hnV2o6nSL0949O -Up}I=DphlexR{Zt7HTp*>nP2iQsm5cNKjY+#v?z{QB$c=596ss$er(yFNEnV6fFzI&HR;uhIre-Ly42 -1c8pr+OniFx`CpoI@cL23Xn~!jRU^0y6zkn{r3cfTuWcr1X?4NqX1PpUuZH!7)<(PY~8mIQ(dbyuca6 -o+jp2GMah*`vZU=lSQuR51}-QO^JP*`nMv=@3idEgbMh8g!HWRJ8_fJqex3kbqn>`c9si9ALN&LuTlh -Tv#Da%G>Qcc0TxPpPmY$^(2nkuOAJJq7VTbmzVI9EJG!1Jkfp)iGWg}}&s_WP_D+=pOQA}XbIaqO;1B -F1~jwBSas?eY+(S}@)(yfB1k9-T#yDL$n?RCZ)xusBCHmDri6%k&X+4g1mE9!9(i`bPOTyRrj`&y=b^ -a$p-wm9g1>)A2BBuHE?41QR?(NCH^RvUO!w#^l<~GjC9?GI -^xsL!Dv#>27h!oGQ-6C&%wWB_Jny9;_GL>H8XAA8mT=0Zr`8L!>m_-EOB3nG!=%|yHqFN$Xi8H5u$2A -MQe~7g+vMSZZTvZml?@u@`{Hg5o(Sus;a5@5VdwXOY0Lm@^03ZMW0B~t=FJE?LZe(wAFK}UFYhh<;Zf7rcWpZytnKebKAmvNy{`dXP0YDKXrL~a6A-Ip76FG&VI6cLUAS~FTOk -e@#y62$PmnVO%+9@af1UTmqnRYg}Mj6S)oK+ES8z9q)22HrCAvcW~x|-$z-;wR!UALB3&#CRf%X?7TK -zj6a9NAlJq7e#)e|4(!2sd9#_QZz(B-BmPuYJ?NSO!tD?y21tkZXU^po&wTg*mX-OXEvoueu`@vu^nM -7FzW)8%;w~SONy`k`oX6Vm%avsI^jfLag*_ir?=U|-|*JpMkVXKb)}dLwgT -b_u8@&F5@(C83^N$P~Mjh{S%JMP<4Fn_=!ZQA~e_2#l_1Zg8|?x545|nJ0uCWYSp=?X+ZEkziel)1y= -I%{SxvG1JHxw_OVznJRU!g`|(+-f&TCfuGB}ST4!nO`~-{9WmAj1_Kte1?_)~vXwkis!%OWzlC6WYc0 -ubghN{3Kn}&K#F{9tid9A$pV1L5tmtd;EYZmi@Bm9vE7p)BgHI+`QF%3)_@&HdK}R5Z$dAIwwY-NUYq -+d3P(x9Wxx2s`j?QnSq|cj%B8wK&BoZZ{_C+aPi^9b!zX;ZY7Fzkomq2^aMmzr^+#Yt&ei79kwy@@3g -xMD@X6^0<;-Of`>Z(W@1aNqB1bKwxysV-;uCX`0v$4Oy)JahtQwCVbypqYF&9f%8_EE!w^;dHU+=JOe -RI7-Bd99?I4p*AUO&yUD`P?Y6-URB{FwwDR5-*lm@Ev%^Ho&y;3_4IvAf(F8P~K}-=0C@O1&3aUjJk* -_pFn+LpMe9z%lAuFERp~2Ya+|l6xG1v8S7%0Le+N9=iuR-wgJItZxfVBfE(aWid=4#Ts;d4dG#4!NY2 -lI;^h4dxU`%=y6vj@ca)V|5kSz-!vL8dg(f068p2XP*aK3&ou7v -X~#1*mke3+2@hznmQfU5q#lSrl`GnJl6ukp8LDC{;`Q!i&9O{re`Bx6ay#exVGEvXNa`TpJ|@$HTGUVZ(|KmPfzZ@+7S?qFZSGUls=RB0@93Q0>G{^rK}RHDEkq~RyD3z`4zI><` -6#(vLk?<-I2GK}VIN1**c#g5W3LWhtoucE(C(MS9}M!A|M5!wnQFEN$iM+&y$poxuFJZm&Jn!EX7NBk -;LE~z9g5+KcWz@oNhv?q{|&;z~g)TiJArEPW(z#9N*7=v!EB-o?&E8;>{{z1JND!p;2d$wEXM9A5UdV -(7XB+FH$d#q;Q9~yMGS1H&*?O5_2$P>jtM%g$4*PxKjNm$@X*XdSF?-8ESXmC$taiJD98pHm!P^B(Gw -fF~hY~ImKm*^Z9+-g?QH41rdt(MnwxM*3dR4mKTIT{V>)WsE4>l%D%^|BOEQYurI*7Q1>Q_GO0 -Qx&Ou%?%$g>dh{@C#>%%+GZguZl&@Aw~}F(gyOLA7M+d{rwiIXuH>SCNf8}tRf%=bh46C+z+go=Y<cZ9Xhs$E=Hx9eQX{FFyliof_Rg~H;5`8`lpi;@bzdf&v%)zpqwXy -m1@Yc(hUW}I1{P{XSHEpQdUjAi(Y}-jLH#F=G20P*>2`7*W#|U0caSfH{6>O2vF(PkaBQnPzWnD=3vq -RdmfRDn@fC^SiaTv*QzE)bmd%;H?+myt)8noJXN=>$*yLrQ3{+qQ1@VEcw^fmK*cs?F|cexw92;TG=u -Qt^>JZKE3uZ=$$1i*O_8eCrmeHg6&m2yr8+`$F+JlsOQgA4md2A^Zs^U>rYynN%V8T^y%(2pLb5AlPF -A2=F6P&9tPqX&~)gW%D~a;vxXNxo+ZySzTMK|1ceh;72um3$v{0Rf)zo|p((1sY6eLWRk2$7W&#=nBwXJEE+EBt*cv#nV;|@QLpalb -BYsMCf`i5mRs&Omqd*P<7aJnffvGJrS)r1vyI=`B!D)Srgd77pwE3uaB;-R{Bc&hxIQ87R3GKMs&obw6L$z$1vDXFcYP)fs>Z8B`53p6d7@PW-ls -bF~|Ro)Esx!R*em*7tl-DI&O#dUJMrAu|dW65G~hbmPB4$*hb?A)=NC98AzBMI+zs4{qyu61`~kY-Qu -vD&Ez5)v!GxxCpk*q8>9 -S-a1&f5!O~0yC^94g7fj^bEfS7S26fWC-yOe?!ItFpx -gtuQ!{HUnNa=%hbI7p?JzM<*_CW2h$jB$C%6%HKzdPik@}WK*oa?Jv>72M#ELaX+*O{8lItn37t-ac_ -Wd!;oUrga}HcybMnM2{X`7j8*xfA<4Kj^A)bhdL-N@gR&NA8{f8a)4K^sEEEZDS7Ah&NHZnlvRA!b-n -bGi!n;E`;G#k;VHL&sfE(O>iUP^HbbP>^kBXHdCC{W%vWd)Ya@1!0Q%xM@EeBs-@IkM#>C=BDIw6CxFF!KC!dDrz%0zrfN73)aJ_cQamYot(VTfK&IZpSFA+zPVb -k8{g`C0sXQ`WOfh56kV%%MELAujkkddM$Gl=O!&7dX{<_itAQ5cb6-&T5M9H6Bm3%4mR>_C(>UA3LlXQ;sX}W#V(R!L}KkjAQ2ECa)+)Dhl+Dxx#= -Fhh6qf98H%PR;cw(4x6<5xQLAbl!q6W!1BBfLb#mCGix)jOG3Z+Jdp*@pLUC3A%}eY?+siZv -yACs1%B&&xFgjYwi(7*atR!o6tGr4x!!0KR3WjiSY{*fs)25;EdK#JYTYa*u3@%O)nlAXCM)9@w3ECD -Hh-)$3HYVn1nxQ+GWn=T&s;uRti##$K#YNM>Q415E7rA4_%>gxm#MV=K{fpanO9KQH0000803{TdPEG*>pj7|>08{_~03HAU0B~t=FJE?LZ -e(wAFK}gWH8D3YUtei%X>?y-E^v8MQc?;pN-QWyEh<(h$yZ1!&CE$r2&gQ{$j?(KNKDR7OiwLVC@s#+ -OIHYR4Nx#OG*`&T&(ALAQc_al;);(i18U67&x?;&uvJhu&@wP)h>@6aWAK2mmD%m`=xVxPWE -{006BQ001EX003}la4%nWWo~3|axZXYa5XVEFJEbHUvP47V`X!5E^v9>SW$1=HV}T-uOM6$k~>FPI}8 -K7c|g)QYtS|=vIfQGdID|HF&jzLNXm{EB0OH -Xw76X(^H@<`QJb*@{b%r7Y8AMJ1=Rgbm5Z@yG99{tz8sp1nJXj*niy9iN|!KtyiBT<}Z}6)XnY4O@pi -%L^TTRU#XDgdC9D-t`(6?+wXq7>0Luo_E1ikysy_nxfE7wbYbM7cz@hGy!c?_IkaZw~!(wSBaPrp5{V -o^S2$f0|~FD?5`*lagi{u92Ck*3l-*6FP-dHfe}|E$3L8`thCg!&^)QWHp=s!5r>&9j4I$Ymps=4k_i -o8cHIF{f^ZG!Wxgh{fCMV!QOU-d7fj{*7MjD7^oxvZF2Ei==182^PGZPDPW<e!rHkJ-lL?YApl!8q@}?hnB!7SjHZNBgy_OxMV7V6-zAEOU9A_l3~HGBE_`k*_En+IWrZ -(AR-L-G}&v(WL1jQi^-9qNKt16=wQ`#UIV$?sKXM*%1Vc&kD`%qh{ -kZvE*TiVy!t`u@$K@y18T!dlsbtNlZ0uMYx)PdIM!r$c-t4d!t@O{2}W$;K0U&VI9S4uz-4vu_3dK%_ -Ud?hAl|jc$m`gFT?Sm$B&03LTHUr!x|LPGO*=}1JV)Ut(Icz4VuINHeYNEm?4TEpg7c%BxVu{iQ+MwZR -r(h>^=t81^BPHQo3Bu}At`p*Eoq*AxQG8NRkt|H9o-YIGPyRUk@@4wXLHYYj?ZlyPOH#j51=6M4RSY} -`X`UmaYEck_@m9oP%zACAYjqX{y>rpA^@S+1*zN_k-g8;{0F|mW_i<`>)*hQ9%Y_?HGj^jTo!i6EnIg -7b(4kG*Q{z<+<6_h&;GlbC(TY%RmIqR3Dou3|8$#m4{de? -DoYZF(=Ly#y`ln@wQewxz+D>YKuo -$5V57-L0)Iwe-VO)-`{eqve95KgcFcEHO0sV+y>ebc>rG;bO~BBtX6)1XXId+1k$QnrcZt*FL$h!!X< -}8GtjX7BPlYxGw}t7j(x_Kbj3v>L*m~%B>m4EZhGdr*QfyD4$sWsGpNTv_+&$1s9v+l=*sPy!_E3)sk -XbgbXDRJI?&mv;@y*?2)W;xmPPk$QDwjy?@n7;z)cDEY*6=iF;$l}02Qvvs)FGY`3CP@5=aCUOD`#&U -{xQ6PTH_;)QR^ -JC4G7`v1M-nC<1eXV8^K`IopEt89>SxAvCWA!6MlN09ur(DUp%8M~#%ga9jxs3dF+x1BIny9!t9Q;=toFWG_H4|nNeG0qI(camt0CQ-eKmEi)XL_;EF*PXyPUert~0T=xj7`yR -gXNcP1Np`y$elL(4SQEQ?K^dJdlEzed`PHT#4|_v+SZ8egk>x*HmnDj1l~ZgfVgJ7d1uvAzot?1j?`9 -O<@oZ=({%Iota5fdJ0BO@puT9@%mxU4hAKgohMjqG4~m!;-bD^n%ZCX#E(HM5~ -~S_9G*)W$=z54RmS-=U!#y}}9$yod~9QA9=~;ztn@IEsAhk!7>@H&9Ch1QY-O00;mj6qrt_^9=w%1ON -bw3IG5b0001RX>c!Jc4cm4Z*nhiWpFhyH!os!X>4RJaCxm(!H(ND5WVXwSOAkqy+==hL{ -azf5xp#H3SS$)PjK+E)?S7QjQGV~ueh-iQYFvJ5jrR1>_i9`0tQo|p#=3bR-5D#A$$0W+=(B@69KAZf -k+s_77f-{uQ#}d2umPJwgFlADw$3bcdv!bIN$JQxZEngG@AKw8m$6F8gU3jjRanGKjQTUt`Apzg7A*{UyT>Bj@jsic<#y-yCdUZjr?k~PNTH*ps0#lmpHHD9 -(AHSAqLeZ)Q(2<8|hY&D-+(M@`tHrLOPUSqJ6@AYfoViyh&Kk(M38&7ugOq$!?Lz%=3Su_3U=d>4Y|! -hHgsuvHZSUiOeWBj5*piY#UdP(jV#%MrpRnuFI#*HJAsgqTlM$Ep*bfw3Utlsx#6uwx`;eIzok1UIRNhMENJuT{V@sn~Mhk^;IuQH90di#QNyy%k>`pKPp%9~ld_7 -T?{L$(VHlKGDRO}}{O#Ja?V=a^j^~cJDfe7$kv-*f{)=`G)&F0TnZ{AK;d|C)U(GW`#scdlcd?MGs8% ->Fj@swruNuB1d<=LtZ@>s^W1JswicpnLs;pF6#tHZ)DYkz~WsLrSG5bUPp&Kpf9y~LSOrt99wuG&T9X -JVt>(NZXvfEvOwl!_f%lyplXm{U|YrpKKeW6i*;mCH?ZcO;MTGfctzX*xF&ufvJGeTcNiDmsk!i2uGs-E -6auw61eq1kJ&ZZ~aSW@YrWtV-mSQTG_zP;VzPO>NHU3t4r@UjhKx-K1{sqywmX#+zbkG)_20)?Zm0mr -Br*!{1-=IC#k3%r;MMt%m{NGFPn7LNzj9)h+z`4D?Jwh?--hf!EFSy2JVR3*U!m(@(-o*_a{c2JrUYA -CNe-y2EG!V>;x;5UdU9IBuSD^Z<$rF1;FL4X2$oleI@2d(6#SP(&ALa_Vf{CFVhC+B22cTRXuoLR~Fe -t~TWAh5&XPJJFbcm^_8I9>+tVJ&ck2=ad?vBq84G=Z_EDI*@!mrBS#p@@7Z{sT};0|XQR000O8B@~!W -AOZwdbp-$b{T2WK8vpW;~NPilXy1&+iB&rB-ivZV8 -o)ENFhm@x3F|TD~c*kSk&pSyZB6q%zpOy0{|Wo_SZ2^(eX}Pm%Qv{)FXkTcp^bB^P4CQb-!%o=GtSc*uT9c_3U -}(;b2^!96QE+xu4?0zi+|Goir5eH2I*<_T1r3`!hC^ZPTj6FW_2M*Fh0?%4Sj{C}6g

N-wJ-QsNERtvU9qf56U#+zPGahRd+*UemJVx-sI4m*9$@z!T0KJ(=K+^T2$%;`S9ZxlXc7(hbkD>0~ltd`WV -2f9Ceg3=_sC&Yv^lhju2@{Le~gZl-4w0?)kwpY7vHrbs=Yuh-yX^{(yU1G6c3G858RK$#5e&|44SQz4 -fsiC@+doDq0ik^4Agyo8wGG8f#$tt@}Yc{$|Rvjg=Uhm-h{3RDgO?y)^;AAB^om6qg^77*^^rh|b7+) -*DDa7JTswp6;u{=4^MB>bqX#}kCl$cc$(PWgfL7w#pLJZf~MA&MnAh6pwQl^J4~U+ap0l>Pgz??WDQH -rqk0{u|zY)J8|lW#C(%1(H^vHR)RKdI{7Ki^MzsSvDPK?qC2P%rAJ1n~>^8kYzKnA4PpQoz>nVpyNaX -l%TjTeLST4x;s(z=pY(r79X)B5<)*fgA~aO=Aa}_AuXq?xAAlsQ0?x6DSV>Kz~G4?OmQP)OV)JDiPs5 -mEtdw2jmB6xj@nhWd0oVuONNzzadq8GP+-Im$87Ygs}oKSqUI04s{wRQu>#q`aOsF)!6bQN<%*|;T7R -523+zrs1sn9$z(au=>6LO`@jW+ZN=Q~cTYX{8ewVYUuFNaQ -gdJ>HvqzdltLO5$AT=IZ#17x$e#Z8^QzJxi -*xAASqp1Od6L=e7-!(eA!xGCx`t5y1$&f3-muN=G)AJq9V>D=u6%y+Ie9r8`|Qf_G>_O(T$N%GKDF71 -N}`?n~)p!4?lXm-^+Q+FUWdV|vc5Ob;fP@?yl*h++m#)BF5>RW$LwSS#vYO7$K>JOvew8J&rX5wp{c<=q~kV3ptYr~;LCQRzS4nCWcSlZa#BqLg58PE!K4wmnd&LQ -@})Y@=^3UA35@W%j$ZwighoVV+CfWHuxP6{vrm~hWY=71*4Fha8|u0>q9PA7i>P)h>@6aWAK2mmD%m` -)9`R?vzD0006I0015U003}la4%nWWo~3|axZXYa5XVEFJo_PZ*pvJXD)DgeOF;`+cpsW?q6|mFhpKlB -~3qU@Rk8y;2|xF6S!98R*Tiz!sW&LOSokTe^lz -<&I!&UqD0#-7wYd{RUfALBY0&B$b8AaD)&BGLduOPYEwA2#MYnWiF -UZxDUoQ_%VF(5TG6{6B3aaMThTM+YXp@4zH~(2j}OT%_e5f(OBu#c?j8@PsZ1y>3sAKopt69GUvvC=K -obfW0;RyU?uvJut)STXB$u&*h+Jpvxu|LN}G956;ao@Xu3W411|Q#+5z0_it -i=^KO^^n%w9Xhh}%A-%<`RR3H*d6^%-}=84j&iQ#_TXv6X+ix75$48wByQ{-IhndQ ->SnMSxw7tLtBryFU}neq}1$#X13}jjvYXi*5&80VeXO4o(okI( -3zb&b)UY;U??Psg^7F^7buyP(<(jyV2kXnNT`Tz^#!hKPUNc5S#hA{8G8To8CaDQ^>0rIvpbw~Wlv9q -~HE}i0A2(`zjNLFz1(mx#Y_R_`X;C-_D5|n0BA{Fiuh%wLg<5q!K!jO~WPO0JQTpGoq>_U4*Z4pjVJF -3|FHqhr&&{z1VNuk>oWk;j=TA)P!d)LwWuB)?7pP0U)aCdAioa$d-8GN9mB{FxZMIs}JtAuN7IZr5Vj -p4|ww6{#9X_wE@k>yrN8KyJv%KiR@2)Kd-%zia!XcW&^8TTB+{Ic>(jN6|AG(;1Lf}68F`=ca3{v%73 -83(u-uL@VEG#d~p_b`sC&$+S^)2lFDit*iB_37FKia(4a`Si(Nr{^W=wmWh`l8$WQJf|rM#3V>dK`#e -*@TMYMx-doD_RpHdcmHyPf_pd`){w^Kd^9bgls`^y#5T{^8WPnK!G+pZ%=i<;-o0we=EnGju_@0Sh!Sa -`P&yp4VSaLU?y+0sCHR)RdporOPFwDW%kI7ykQg8A*&fPST -N`H$WcW$J-KB2fue({5FML;tTtHXt`)m*-Dm~3Pc~no%t>&!wcHuH)gX=YLR30|XQR000O8B@~!WNIu7c@&Et;cLD$a8~^|SaA|NaUv_0~WN&gWaAj~cF*h$ -`Z*6d4bS`jtt&qV=13?Ui@ADL4JnXh?7ilj=s7DbGDyS!sGIcWDsoTslGwaf~ce8_4N+|`+B?%<|m;6 -%7TSdA?@Tjz4RJaCz-mZExe -a5&rI9G4P>~jgxhI2eelN$Op$!Ho`f!VJo){(uE*PRLqMksw9=fINX2l3`NP3lk9Gbekh6t0W6W6XI? -n38V-jS70*+6-Z7S|A5_YfR{+3`!EiVn3^;9R5U -P2~#lr)F3^FP9Q1a4?o>-9z33k6cXtB?m(`r{~p4W#}wJoJcm{QHzWXF=nC_%B>^9N-QA5b02#zXWuJ~BCqq9We2C>jq2 -gOp_uM*2B8)#S3&Vg?E4#^`@5%4BkboSPG(mM5GJ?c$Pvl$k3_K!C -drZp6q}txCuhYdBO@j?lqE_-|t{1%7f$&I}M{`3_pGN@Yl&tAAbA`ggZtkD9;nih4G1zVhpCY;q`L8@ -iZzyj#L}@JBzkra?h3GC=>GCG08B59%PJ4r!Hg?0YrxW8_NggnkXs`K;TFqwmRko#Yl}6qgv&G&g&h5 -DUs>tSTZC@(G8SHc#No!ilicw#G1I0NGPe^F^e+XSi0fZFicsTlYQ|7G+V|OMWylfm6kjqBo_}Qd6gd -JX%6Ll&n-6sF~&0)p;D+5$?U>jq&%ZvW)v-}ZO+xswMdj)B;QsVw-jxet8q!QAMo-NLvKJFj+z+lkCK -`*$jbtiWNvK@Xk>WaQIL0aL(^sG(#W2r#sC6MY50<79^{-DL{|C4FONAr;G3omRB%c+`%uw;{;Um^4qR?~GD%x>q?HLPyetL4T=Q7$d*Vz~$wS8L? -x-}sBrLkVyV{9o|}HrLbn+_1F~NV3kBtGjjZ@j8U-<^0me#S7np&4cO1+^^Z9va|U#xN+ffdNcj#8`> -pet<5nj>8ESoEFsq^{?Ec-xv*epvDtDFu5r;t?bl%o@G02%E=dZ&=0u%Z|6s%q_B`3o4p`!@%RGwiZ<}5C%@;sCk8y{;1ZF-U2L=5}Xg -~4pXq{TUw~{N>y!O`)9BbpaFg#2L4ASS&qWWMbrmZ7#2qeJ7)z!Jm}l9(jxheZDGwVv%Kz -1=CVe0UkN4X?TsaWR3A#R0m94#e1}O=uL|rLJMIlQ>3ur*fS({3he;TfJ!!%dpNJx#(+%|!+I?ge~D_ -FIIm!^rc)JeJCac!--V}Gs`KAlI{I_ASmT_tqg~wocA3Ze{Ud*Lt(Zt&Y7(F;&%I;UZT&a$W+x^;>+w -8V@V>VEXT)sKzX#jRC|2T2AE$*OYyJD6_=0|F0J}2x)ha8=a=s;;Q;o@HW~(m(E;U#54%8Rq|2pxh7J -u*2pZZBh%6IOib?Pq|^61-S&Q`{+O7a$)Z@s*?c^+@dc9_KCm~*hximduJdtu+HI=KfMw!rp@*db!m$ -%=$(CNHq0o2rWv(7ck^VTF3Px{YkdhoKDXqRb)l5AcXH7ZkM~Z2U@u1F)Ankxxe@ -2LF0x(lG#-KsMzF%U?EwKDoib84SuK>FS*x`JwY-e*;#xlk^UQ0OgKf~tt1OcV6;}Z0zC&eY>t@DI!?hYAr6l~1VVjHOk;KfZ!c10nE`8>hJ!Dn9 -m8m)j<~YNH9mT0zQvER&z3N2H*A8`h;2eJc!;bv*gzq*Q;MNzuUKkp4V|ecL`$*4cESwEQ^S$HM_W|= -o1O4ZY0_5sv;**Mm=V9)F2RkAW#sHG?kR`%y6N#gF-X*0Y6K`4{4+s44 -y%0;m=J?Eu0)g(h4h?f>KFec!Jc4cm4Z*nhiWpFhyH!pW`VQ_F|a&so}b -JJJf;Bc-ko^vhE(Ie;nQ$d79eE@)?C2qg0BvcRPBsnEH(ui%}WZHoYMS;iQ-bwTgpqiDp`DXm$S-nDZ -J^Uqoa?!EXj%yMY(1L;o#nuk(HZEaw>#0_}$@y62eMsrMw~SVnI)5_EPA&as|T) -CcPrEV`eK0BG&}z#Kp!sv{$r(MFrHeKHz*%32_8gd);X+tH#F@mNT&1hYtqQx+-98@jwE?h@X2x_v?V -a1m`W_uaEYURWF{ud<#)|4bre~x%$L%(=YB-=R8%i22d%{vQ|06)B{PW8e$}d1Os8no-8O$Un1YxtO4AT*$vD(B|0?GxVSTz6~dX^fwD^shj4YN~adC-mNisgwd1K_!LCLuOy52;ogw@i>+F-XlJtrLRDE(Kv=q_M}&L0c2QVH(<nJJ49e8d|AV&B;wB4D%HG7+@~)6RWE9n@A> -Ka>$Y*N!J2hDF^)~Z?G7*~tWP+MZWvWm4`fRQO}m{-^^Gk?-nh?;q*F#g7U%Vt*iM++b=a*N^!&# -W=b@lZ$ukWp@TaZ)(~tAyk=#oTlJ5bY*$)qqZ0O0<)dNgC4Fl0){5@=gEpW&+0hJc&FD(<_aF7WY9y> -P*1JPBBfH{4v-^x9}GsR=v%^RT+kFS!uv{5!`{@fI!@_O{;2X(i=F&7tn&D`GN -W>3{d2Qhd;E(BRNaOf7~H~~r{l{@-g3Z6^I0U&A(X#s_Z=Uc3oxm4)%99V#-8y4vECuz(VNN=rOdG1f -t_K>9Qm^+>lZ4_pOGm?^zp*E0#PGrayPF;9g0f{bcX{a^+fA!bv^K%l9?oQlc%&QNSm4F*lP#Fro;gH -SPk+OuO_65-0QoH{_2^#FAup8k~m<8=biND=5(Ci~Fs@kL|8I2NQ`f#lHW^p{94FsQ%_jPbhHcIKqPVd0kHJ%v0!bq??me&UF -@)9z-q8y}`DXyok1t~O=II8=r#b|yqaot`e9=w0NU!{=kBJS5Xy+|Dh`dW-SuOjy&gAx*5&;9{WO9K -QH0000803{TdPA{ayR7P_E0EVRj03`qb0B~t=FJE?LZe(wAFK}yTUvg!0Z*_8GWpgiIUukY>bYEXCaC -y|d>v|ih3PthUA2Y?K=Bs-bO$U|ooNlCQFmbfL^o(#l{Kt -_CSPv%lH=5{vAvUUgfwYTegSHf!cpefcEYZWhPCKR7%*JUA_8*TrR-t;@FAu4iTT^z`MyapLFT;Hhs^ -wONrZo6BleEVD(mECF)8DXO}hXSdbns;c4rib0RFX6;)awA+h$wJv9yX1&WcSLM2F7I~JvyDIgAU@Te -rVFis_|FAA@%JyK>WLL%e5+PJ;_;Pav|5-!3wuFC+jSM84P9ILEd6Pl&Y}=Mu)8^EoS(VVBYU(zFo^Oh}T5XpA%nj>+hLv5Eu)Z*owuJ#yHMGU9U>^CwLGKh{HR -okpUE=D&7q`v&ng?Gu>l<0%cGqso8~wf=ALQlbCBGSGMLo~9HNFD~{sm0sNZxr%wYhUvo^X6<&hYStT?+;nA_98xoYM) -A=klT4G<=i#dfn@my=0W-Oy*nMcXX5n{vW`9~{VYn56#NxZkQqf7?_yrT)HlzioD_(lv&8;55vi(uF* -@E!H*ckZa#=3iocYtpO{WrF*%$zT9rAr5h6AK(ltQ0Ra}UL;CluSuO!p5lMWLs@*KB3;nyiDXJx4)Ve -Jlm~y?Y{S?caU;>-+!{&BftlVO3%5^Zts&4Uo=%4il(baX|wABZCKpP?R(Otl8<6mJg2b=Zo$w3A`@) -lnmlpkj0YLmUBM=#dvX3cGmveO-GbDe#je+Kiufj+8>YFTY|76km06)i*Z@c#tUd+`C*r6qvc$16BLr -iZ9ic9Ok*%k5<@)heI7FY7rTTG`9$L+4!%5A&PmJs`HU+OC(dA!9hht1+THP5uZ@$qI24F&d6NoWhG8 -p5m;9^Kj980GwgijR!>N=%y9Dy}1S|HwH9Cx-f>*xvc7IYWUrom+xLo-hOj>`ufc~nAf}Yw%oJOH5}Y -EY`dPhakg4F7sbVL2SDLOW`BPAA_@0TaOlf}c+`NzHEv4NPViTK%~VeJt);QIfW4b8V(>q(hWSk~14> -^49WPq{c;X(*42s#Tgq18dn{{;oryf@q&JA88vXV59dATfhNHt{v%h?r>+4iQ*P45Bxd@{k+olJU{FY -ytq%&Vr>g~_$M)$a4hjL5zCRjgL9E^Y67rp<^c6FFCt$#7ti(Y46o5^8}^3`X~8iwC?~RPe>Uny-z$H1G)D{dUAlzAh>_KyS7+ -9uL}z;h`fIzeQdE?@hdEGa2dpa6~=eQ9b?ZXNvgmt{MPzv4tZFmlp3ZUBCq#)20UepO*{bIN-JRK;NF -0>zk^@0V?gF9miL%n$6Sa%6K8n+85=f%LVD9kUd0^rS5}`ly)CCk0#f|EQA50n8 -3BNF6geB(8-U#AQF&*gY1nw#=B?&Shn6xRt?O&I~JT(3J%_Icyc>0N}~As80OM4&A@TO$`b>kFNxs-E -G{QNC+5raE9IBmE*}tXBUkg=-#+?|xq+cztNba5j0_C^`wg;kw^u+miCZP!w}$_=+macjB9r5Q$n6d* -v5-hnmOETCVzUT2fuDk|bJxeg0bo@|Ji$Z&4d2Tc9POo(Rl*HbXB{Gvf9t-Ywn7ZM?OxXJi)A&J=Jx> -nRe4#=b_P5U2;`Vxpam`WPe04>CvtZ9^$=bo!S$`oMGn+(ly6saYy@xUg#oFr=GAPIBb~i2cP% -s=X996F(heuUzVL^Wq4Yq1@~Ego_|JA>vTN8+=V;lrP@SKKJ*vbp$M+1F{faY5(uSzq^w#U+Hq9&0$T8Cwly` -H~c`jsd7G1Hh$>O{Tm)G$g!>C@&_%jj326-?Tur2LG0C&azLLVy+RHf@EHD^V?Q3cNON#+txN2>r7Pp -6stKk5;<+xeuZtNlyxG6Y_0w#ZbG(1_#zYqC0m!Eh;IPBJ(bByLeBpdMgO?Y(Xf#>&$L)rs-|QBMR#9 -)5pv|tz8D2~w3y%~I;9u9xEe?@jISSVqT1ofugY~vX+W7!Q`3B_8C49VXQPgb~PHLr3ghl~#Ijc6b8h -lq4SzX=&-Ar^f#%^vv9%Vr`7};#Q1}1xBKf`r>{Z{tm<%0Kd*3|QALoH_TO-l!`sCQX|WZi9ZOw!?WR --2X}xh8xKg4|7jNo>TX?Uim5ZOR;W0$AT>jVhPr&J%ovg(Lwm1UVdwh4daTYhYQMR*3Ig>JnJB&FpH3 -ZMhk6O*gn*c-J6;lk|=Znj7oMNp?6d*0)uC=m|@3t(f5qsLKz>pS1A5LH0>D9OQ%iZ*aK}C;WXu -=6NUTXltO>rDffOh*$v|*!Fos{Z^`xDxtJMboq9eO*-dDhC=-(FTV9Wqe8)A7MZOe~9whSL2pRAvD*d -~1uu~{^@kb?^zDHGNCT)3{FF*8=dBVzI3V_DP}_4{hw)F?I-OH${pn2*>cW_-7A4tAj)4E -m%kzOM(-{#~mhDq0nxWi(k8zU9m--$l6`0#8F70hqt(Dn5xe=0XYiIM@J2fOx~PFv -xq&|qHXoZg=?edRf%|yM7~odYi7E^NAukC4od^6(PW7{9*7Y2|?T{31%1Ces9PgRD+jVu<79_|nK((jzRNpXwa73v-nQ^=Fw$Dq%3|juqfz)^9{NV+3aa*kC5l4pV4w)caS2smPr|#+dqFNSkhMt -Fn_2Asexe@IdI@;u!-KQ5VQIqVVXiMUX=H&|6mwL9NOP0S!J$18gNn*t>S=<3uc8%P4xm=7o0wq2Lu3 -fZAPFn}U41Pu*<;a|m+;AhhIE;oLN#;+{umShte0N;oNn0*~r_dJEq -}-@Ram7jQ)<#OMJd~VUT}bZP20%@(hq3w1wW3K-b2E->9@?p-Px@&kOMPUMTH7EPIYZy#D^(r`Z5RS$ -`UI<$fOQL1k@pCrW?jiDZiP>L)!<4IQx@Ey&d@h%NB@~v8 -Ex2*!P1)9i4Ld#*z-$r^oGr=%O_ztN`nas#mo>RbuzJ~XS`%Opft#&LRo$Ncb@KJo|MB__k|}T1IeYT -?`GGR4@appe!>z*KpB)%>75;vF5b&$;m#0>l -_<>2bmS7(+<}?ozh&0)XG=_s-D>1Gc!rlVaJ0sdQg2eWYDkIz`%4Ap)jz{uw+o|k29B%;Uby~LWc;ax -@zfW0J+HaG`9Rw_v9EILyio6Fi6wa5Gjd$H$obQfC5dIjFFL@|7g$5XXm1tBn8&LmAgoNWh|+-ua5-J -Tf@3PG>Ho=AXXm3fOMfYFHr20L^A=QY6VANnAr5OfF21%r(3t0J64;VoSn;J3%%vXeyYkqoj9c@8v7B -%&@CO9WYQ3Q~;cs*IrSzEm8af@El4^bJ!C4Gau3N%W+RPm8Mv&r$D(a9b1@*b35Ur>&UHJjF6zkd5P@E=0BhF8Q)8@8ZpFSHr$p)*{4 -DVTbGJ)+!m$&vx-~5aw5QTy+Hw?~@pIG^QmkCC+RETW)^jJ);vw)Xsc|HF9-~T;(#ukF*j-d(7Z_)k? -{MK~3*J^{#gD8_#Y`3V(a^A9oz!hLUUo&4-_4Wf@2ddW&DKt5Z08v1Zw7RtJSI&j(fbq;31tN0*dPnq -V^{HPx!}u}>5)0=KMXRAI^DS0)6#pK*LIr=&NcIgH!8zL^y$34r+jHb;mIV;>!|ZUJ9Zn9zuLNBV)uu -4dKbaqY(jKB&p?fmxjbbX`;%FQ^cnl9ZUnCJVZ1xdG30z>q(Ramy{JiKAB0D0U`3MZUi4z}O-t -sDZ5O40nYd-9HJ!evKk|j=PXU*)#f;#+tmt&ZFT8_liHx(o8<58DCq4E0f4nJvgq0qe3?$dD=JoqdD3 -x+p0%-%oIVF)_-5_)+2DF6HrvHSa8md8T*eJ_;X9;TTldj`UdLcjQm1ZdeN^hG2OC)tYB^(9`k9!kMZ -!aL7I+!TLnyxW3|mo7|{zXGfljCRYK{pKW#Ryw^l;fJ4hKm2@@)RJ_DFWir#H$WSB{Orwxt4p*{X%En -%U0WM@;((@Qa?lYnU$wF!ylT&Xb3<;S!U0gO9I_Dj9J7TqiGx86S+nXSaamG)`D&g;-uNt((gnG -HD`)JC>v@LmsWK#oSD&UmR*R4o`=ZjVf$zzLv -jl0aE@YhM(e*-1YaIkwpcV<>;HA`oWmR-mg+YGM?_j**1pR^nnM$>^2ZJCU!~z0_+V?C7jSplqV)qjn -3Z1-h79zCl%#@MTI>j`LY)YT7hKaCzO56yI-FVaM?#M{exR7^7WyfRC$T`W_VV{u3qbvWF!I0r29xIR -A@otMPT;ALen%r-=;ZO)*ca-S4bC1=@aC8(VDW#vSYu0;&jtjMN2;Y6rg -3sF5`dRlzbxy=L0f!aB?NC&uaPv*dGE@FphFhH}5*18~-ij13eW;f@GJF1mM4-!^l3+q+@CpB*|SYi~ -5>=1G-1_hrqhq=&Q1rliY`y1JhZmJEChdfvVH-GZhO3eRdo7fsyPv^Swhb$W|t80wYQ!N?88cnC8bYJ2?mgwy(Sxnav -M?DID__$8fqXO%6*Lz2)zeU*fix1_Df`{B}`77-l9eS5lIrraZ=*$c_T&#C&2$8cAYqE!((_@T%?(QP -}yIc#c`W%9YA4hby9USg>>Jmr@K?klQLmB_=JUp=am5E& -`(AiRCXL8nM^uzHXIzgrVFYM?K^ad*4lCm-hjEilu4{rFqq7~<~D^WXz5}O}~j@5sQN1FL949??*;n(a7Fc*$+NdHy01lmN76!*)`I>eg-ZM?(TvJDs6{eHT -}Xnnp2xUpUNwExa6PGYvSitUanTw>Kx{_&CO6ZL&*Bsb=#`v!_dy9s~Qj8aFU`sEMP9Xgo_op1xL_h`CezUZ|A!(p+izUv0 -$4-VhJhY&WXIZ`I$>(h>93#V#WQj0XJSy+FQcSO2M=+C8Y;y -&kCm>Py~G&b|eI6$AUCsMV=%beozVGAsa;TOU-IWx(sB*Is?)NXHU*~t)#C$+(cCLU3#J)`652WRbiT -r5qsG6bgHn?oPdUUmLhiD+Xo}+71(sz4U6EZj!7W~mmU)4ZOZ{)*f_FrDx_Jn21Hmj+_4y*+_keCtF! -8k2nI|NmGtGTKn?kHs@nmRniZj7No -rK|(g$MJ5Sc5yGPbE_rJF!78g+OIV0+F$b%Q)7Pw>#N6MU18l2jnNadV(7LI-q{?D@4fx7ywXZS4usV -|d5Tr>{~`L`XwYa0XszvZk%$S&WWOX7^4EVxsI3b#Q`LqS2y~6Rt31;_b><$2R6V$k30U=kUh}HTSHo -(y@{Ej&t%2hx8}J>mux&>>!BCmWHFb&#>VX+2mwgd0t$MXW}ZL4&84{<^{o!Sr;%(48zh=qVadlC#Y7>kU0S##H#zk!F+9dJ8QwcWW(|upX1mHQE)eC?fSy`6D -hKAGK^>NKLjI0CHoQe>Sb!ZvVJf_`e~l`XG(N~mhYlb#tB@BrlrnIt*O!jbAexiXeLp3~|L(B5r -f(nSLa8V^y&G1{Gz5KVDyP&+!`vRAjGi75>BM+Sv0LPo|sz0>568Wp%RiR8fy3xiM|zb%bp0C7gjKiw -%+wq;p|;x^xzz!VDJrrBF!pP-S@wTRE?vcg9+lwwU$0Yye0dz^rz(-b*?s@@s{s}2iQ1KrNfa3JSNPf -7g1jj&8O9Ox39LCbUU15dT!oiP^xH4iv$!>kB%bHbDlSebIYIYFKU4;*=$oiN+eVabJ|k^Fg%%z?Do% -qo))ka^ya;5t4y+t%(*ALIS+1V6zEU>4E;AMus>Pwv*^$7@VgREY>mjw7&b8?q3XZUQ_j(aOEBC}%Ki -GiXDecgW25Z9$$45d%KTjdbBSJRw{lR8i^EzXdaHg$}MT&Gum;FysVMKx~gEuUmGhE7;%mkSDC5T-lAWZE5t<@rU?oAgkdtmfI$R=_&HC_ow;h1@4 -Wx@OD*si-;+{PyJ2^m6+77C>hahJesq@IzZC@%*fqO{!^7aHp9(#zJKW8{M-EMrWN>@5znaJw`e2Xp8 -Uld68-Tq_YGJFk`e$Qn2+YMjOesbEq0XS5dGz+^kPFL1`PYA$MZI<+1kxcF} -t!cT5i0z-g25BXNCw(D}~k4r;4 -Uo7nq@NmKw0LqSCiYT5f9XdRdEnbqm>ojkxxejq5{8gj2hvpg9!6V?^~I$+w5h}Av*GQ68EO43}IcAG{s+?0_a4K?(FA}84dC@4jBqU>op`5LYtBt* -?3q$G`wKBRbIXmz#u!hixST5OlZv2k1}!lhiC#RZxxT<(KBUQ>#iKe4Hbb0NHx`3**5#tay?4ADF03u -Hxo#t4+CE|BtVu8zswC1MhO$WFrZvT9btM;#d*8?yC`H!LL+y=0zbwwu9J*@u1(Gzu}-4(FaCl8^A0o -z%3b6AaEk^wVoP5hRudDY`F2q_omY`c=hOmxJVql719V387?g#}Q4N6P*;!{-#)UK-^ae*E1$u+hL@L -lbkZ0o2Ms&?p9gdJfVj+GNqKeU71w$j_)ApMyj7_$A)VUEux9N^H~6`ix&)^O8ZM%uUSGCq -lC$?tnZHSdRDE}4KQXGmG~SlRI1_;ZxKZdNU)_&CI^In3H7TN -E7>EKEM2E@_ch=#2G4xEQ$o=baDk(#hvRT9^R*C?v0N`)u1Q7kU#g4UJY_2pJ3ffwq%~!61Q9wVOm1h -0;fShS_<(yg1L}Fb3HfsLNcC9IQxl7sN7k^mY+&+|Rhb?&jKUh+3bMArU7jsvcHcr$ER}*nz%`)da}Sn0&)0y>hyXU_Xfrug)?F@`nt -7c;Sv|W$HUK;`WOV1qOU_64WP8x~zeNF_zR?=%f%OJV;NGz#G~v{m-j)Hwt|ep(1h%0`${mbsbn@!iR6BDBD8fWb2oR>%#iDdq#6_$bun+x5JkYC*(tv3`3&hmyp1x$1(9h1TdgXt -P7^)w>}cTKQX_qH&)GsaO^15%vz)fzzQ9a?Lb8{n%?cf>GzJrFK1vmDH=RT;~$MJR^rhK;7-8feRPw? -!ZcjN*dLv{vwA}3@qWSS|uQ?wm>DKh?*#gZ+0sIcT*Oe-UNL@);r_BX_$||HA7V^EhX^c`X3FQ|%m!^t4SIwPQ8td-Kr_*e)EKqiulfkLQyvW3dfe_3)>D3||%mqYDoq)} -n<=iJMmc%iFMr`<}l*a8Q$nH%0?=(jOYM$FO027vdaH(Ok&yF`+peIkV;WSvYDH;~=7*Tl0bcDNQO3mjV?g1?ySr&R<(^Z=SDlfl-BNNLCo8y-&e2bd2ku?^kwC31d$+B1Oq -n~%!5|vq*;Vu9iO0Mo(}K8wd!-9ihoGTT#%NS!0O!9Yebcbj({hCLiQnC$-TCujUk$@pRTsZkfYI2T9h&5&NdPxp%TRDc -@r+3Ps;IIs>kX`aYuzE3tpgcM5OFU+yGFH`Fen~jm_F!uKIowK!i;?n!^R3b_7O1N14-9wgnHje_V!^*=cIFuc6A}jT%A2RA9wslxB}2PF -b&AFE+98r0Oj6>Sy02_0S->CCl?bNy5pQ{u>Wz!eU395q9z|5q-K$wWPU!~7A`i<%r0!@g5-kP_8=5m -%Iu^y`p}s8=G`>QUl*%{!$1=llIbESZwd;ssNz)N6pd}oPtNmXkFSW=JW0I+1tE6AAF|>Sbq*UI9NUy -bH!nLN_wIVXJuufjvVq8f@PniM$1uD3eiKEIrJ+#Z3RcH*F%Gs)Bpdg^17y -l13aM2{@tH%8qSIWif=6Z!qJ7A>te3tO``$tt6C$)*y=;an($?TWZ467YokaXIl67$*|gpS;pBcBa%A -YFI)as=J(3H5HG`;fgb%O_q6hO=&bAn1JI5%a%M4j6fvCHiuvFj|ls^GnFf -zU*28Qr(p$%zHtf1CKR;bJ9|Win{_a~vX1;Gl{nu6uX=4ZYUQc4h#x%)Q9#eRp%|B;rX08B-Tfbb+9H -GNj!d{XZJZ5DBX;BHVqQ{5QKjFchF;enQhaY#j&bT4CHBoQL6|aTSNLfQc5T;nHS4lDAK&GE+^fV{L= -JBo98E#kGy{ChU)D#qSedK`AlU$vF6plOX~#bvl;|TUm}b%`qzP+D&L)4&sZZ7MwBHeuIv(m{JfucCn -%+1xALg`HZfs7Hwj{b4s!?z$t0gwWATl5|_h;NBmwQ)?6K&qlB9&>fZk(RDjGK -)BN@Hqh+c8E}L+FcZ{1;jA~ZiDt+FD4EL(C-#4jd~+dEV~A`lI(!@uqt9MFp`RpxgVEFFk@iUvyWfE% -sN^*IYKpj@4_tHG~;jyH%t3zyZ$er|=;#E?p%j~Donsz)Sa8gCGJq*u&2Cl$O0|$`mUQpZ}>sN__tANbj2`TJpXVI2DtpkOsZxxQ@P*5Y`4V6)E(6Rk#rwrFjUcku!mS$~I8X -C7@79L~y#OKw|8JMCzV#5bDX|r5s&Df83m{aeyjJXuxE6tkhpk{BMF(@2|8}ft&pGB2zQ_H_4mggab}R+iKu4YPN2jxUGVzB4qv2gJ157}qoG)!eY`Hm>;LW*KGhf6TL+ -KHcqFtB@nZWnvFUB9or1MBTsaz%@nS(Lv$_VZ*t$AYI6|rQEny9lwV)cUIg?v}n{@uyN{H&l07ueNL) -`+Zjy)gSdPiU0nmhE=kv0IcXst#`DI7(5xlG6KyuEGgd6{Fb|MK5b^L#K02lkr|rb(~st?BG-K&hMzY -%UjA6o~Zw!*}~K1XG8xUuMZDPRuA87>rHi2#CQ%)QO-l5K7H334Cc04qY7HKa%Y+0@~L8pu_xiS%Y%GCPS%Pcm6vyC|2Z2RSd<=sAjwJG?tF}%$ep$h!6*BG^b>^)_*KWCMtEjL; -=9PPnz{4U?J|4Lp4fqN^t*>NJtapd{1{c%J*b&?ajjai>J_&qqX*yb)T*Emrf`eYjo+Fp&2D+ccLz>@ -h_h1-MNmve5GK1>73IUnUf;*eHTEICI9;A@6Vw8U$h1?`d_;On1K1$u0VH&adP;-$82$=ziPIcl=v4< -m(n`K>82B>-Nz#Q+5@gb{N5?w*iA=OV{wH{YBv`&4So7ED&#i+8|HSp{662r=dc46^{8AAcC!zB*!@{&gpIyZ -(qNW{Bv{4~hZl9V$78vqiCNvw;mw~mAFPqJJ;cgGQbYd8*6#JMVn9GTjM>=!u#ep;@tidBnd)-~D+n= -N|YX+~p80YPbXO;&tjj{F4`fJ1{XWdOY@>PyKU5smkPM!8XS(dl2`{pIzm3DzWj_Vn3bUIgGQcm2LtS -DLVZv+pr~%>%1gw3AN4%3Od5qkKu#9gLD3HWc~Uh<8O?O4Nf6KFgJ5jN+d0Re;S2mJ!>8Y#^3i)S0V$TiV{>N&CK!0N#X4t -)y@-6`RKFk5+VMg(wlH){{W^60|1<_%KEB1y*S{WL|3JZB=hua$H`yr3#@^a8x)?Bx#Cw55sq9{0*9g -D+E<$m$ivYl71wM$BV72-KNow6dBfG;GAV#_YJn17@W0LkZLNveu}Tr+!nS=ML`(Xt(UaWryNF;`)|U -1eB*eZ9w9Y_|C&SA&As6l=Om8G@EOpu+JMdU%quPqV=>(1F1?dq5-KlUROou|p@m3FmO1xN|WyJ$Ka5 -FT8kaVZ{^VYuVg$tSkU&y`F6Awpf&tXgPvO#UEPP?92==Oz)?Gx&FN*cSq;XY8GdA-!~W=NxV5W7(tGre`D -sa3Dk5{7|d9y2N7A6iY+X{y802*=N3CuDCgOCg;a_HaotPyXoJeG>*m&v+YsQ6FWTGEWDY2^qtE~8cQ -jTCpqQ5%bi(ZQ2mtKXbf<%QGw`*85#>$o;0BYW)3tgwxW(Ye_24{G=^bIJ!|&i-gXtPp<(jg@ix<9}> -m{WD!m+Zk3}}yRX9SAVdzUvW8)(ZBgD^T|F6dUj(C|WBK+L?_#BlhiandPRZ7ivoP$j!ZH&|?z4n3kS -V`GkXR(NjLjoSS`7=yaW-%ehB_xjymGFtQS@t@zEhKqF5UUnRhXj?v^+)#F6l(qIDO-}+Zwo6qUOk>6C}xldD-6nXRP8Eh6(fAr!-EX6k{;l5#dmF&aL_dHB#qNl0meq}s^uVDs&0D)>`RFXKP -^4sSb%v`mtVvMF7fHWpASy8S?@Mi&d;=1@;xhn=1t(N-MQMO*^K>EJbUo^)mML&0=E*Fh4GUntDe=oq -ULw4skOKZjsx1U2jHvM@3;q~sI_Zj>`NK~to)o9&b_k7`rEpN)nvZvK03rV&AM3cMggyeV8k@7dmCga -cf6g?CKM+sQKORem4Rt^r-nK_z57uhqEhaIP{oLpBeYP?kRR^jreAME7|9X$z~RwklbyyTUmcAZW>~MIcm -x5@Jn*q1>7Y9?{QNtsA62iljw&B+lXsNm+v_Axx&%JF2_M+8aeeP*uW_|Kn%Y_S-|28&e5eioK9o%HJ -v62*qCV}{@H9z-nkAf(V$dxE5r+(?Fu}1bR27DTUROG-R=&a-twdFxtH4IX8qCFYcEw7T8T@>)7-ACF -G|glE%uDTskI&sQ{YVNjFfQG7NU<>&yl9%f-uXuM*Q1^k~p|_^R2IPk1^aP#Wz<%(`->WnNro(sHL ->^afb=#2hWU2gps%jl#JNV7FXba%LShdS=*D?Zo@oc@ZFGMg10!6YD{`*F3AwWa`nh$FfgepqF`s>_R -M(bZt#u;2@Xx&K#M3!6K)Vg}dLMGcJWY>xi-pmb~HI>CyNlz7&_%amHLk!B;yc8dHiIO@M=GP|U3>Xf -}`Xhc31?FJP!`qm0>rAap6tF#9*4-%JFY#^;uGz&tx1X#;N6Un?PA75?!0^XFy-a_Vx6iHGUDXUG#RO -U?h(^+K_p(_vZ~9?2IGEvPm&AcPF2l0%DYv=lbSOtHb7>u`A8dT~&Q3kH$$X{t~lpNV~wBi`A?j!B}- -BodK@+?L1=ua__~&=d>4_nkr?a%y(HMqKnWia}m?>O|HRr+{Sc=8)CG$1g4~+rvB7~=WvZ`jKy)ZrBam*fwe|Lg84$n7)k$%ljp|sBZI@HE>ncT)y&Sa -3L@*K1$YjILL6J@~=fuyev1z;kyXPP|udBwVG$Hw9(~#m?zdtV9S+QcGcjH$D_8?vWZ$}E30*0BK80i`u798`0bOsg -U(S!qPhiILP&dIm<9)p?j9b1D>Uz}#Yd-VH&S~7qyv{RetiNI8@FBe4SlV<1rhf2eYgAv-Z@pcDn`Uj -WR#yFmpxidsWKEGv-g~ID5elCMA?ecNF8?RPsFoGJ^i&iJ%;=uPUS#B?;BD-iBydyOsni}9F;8~Hn8= -fU#h(okXQfVMNr9$T&$kly|v!gFdFY0Vt@!J`!c9>HG`X8Xkx?S$uB|GD@^TVm8a|Ws -UG5owx8GlDEDIj{ZMkoOH9%*(AveSGJmGf}q*S33B7MmXV+#xL3PiaQ;PBuOu)$z73hkSHUPpJ<{tn` -u7EGP`xY-@c{ -yw5aH(%Mi{sx9Mx;WhKIEr={hWNTxm9{96TAW2z57Z2@upoKEJchgNw>>;p{M`gV-eI%#`d|VD@T#pT -G`imXYsp}3_Z~9HBI};FP>=FZx<2od1iVBa~IZ~nX+-6dW>NeLR7h|uvnM5#Haxv{eXXK9}col?Ptjo -6_N{T92r9S?vGL&CUj$Ox&NOS$Zys^QztIps=M(EY-5)LnszN}3IC%oo69Jg_=FhfldOA`WLBO@|9<^ -_jh8R{w-<{4%YN7QmEnZ@wp>QxzI0o7<{5%>-?Kuro2HzFdXI-K3nHin*)n>D5pFDin!r)dLkmB2%%P^JHu4*2Z^+R-|Yc~& -9*O%U0l3#6ZmPas|YIdv-kJ(?=v$S7+`6W4CQ07alKwN!*H2{*oE@$}MoL_B9J{m2_w{X}g$pLG^qPF -kXm?6o^$bDNKe>NN}n&#m}vCcOiHW5_RV+?u3{zaHO$U({ThaU-uiduBnrc+$mb@8h^aMOjs!vFp&$B -MlyKCTZ@Qt6-K6~=;4TdoSqcfsmIkXwuD@@jLuMPIL$0+OxSONX%@eE)rV(cZ0r_EQ?o;Y~wv)-%+fk -kx2e1Sv`KJhx{{?3Pccep9o6*JQ>}uV=P<)h5o6AANsNX|@s>Y+|&}p8Vf1-ajsj`kLi336ta|-5Cvj -!M?w0>SIy4n=W7^i4_agM89y2o@&getdo5g*tSLW8}mX+{{chMepc1u2uVbrym$ETay7D<{PD-X1th) -@u{~~7Z{il_8gzqONQxO6V=^_Zd&d5RhaZOz5jF%h7@uBVqFWc$k9FtK9pC_T8;rO!Gw(~9TA4dM31D -79twhR}YlDr)M7F-598=qkb?rUsfu`?6f5BiF(C!QiJb@T^$feuR_d^0J)O^5I6r|S-O|Nk8=ZB%N^} -JjG$`TtSj)+nITy)-Cmaxhvza1MK2y|U()~q6x6=_I~8W#9wvNnVKHi#G32-@5@*QOB;{@u7fQAd*@2 -P4{>V+zk3=pN*6s>wKWAqVhu -#L&JJ{Wt=sF4aG&ZA-H*JXR{o-*b2#Mw-(n0T)Wp)5ExVe}Yna77GmJi;KFMT76yA)dCkGmB#+ZYJ~@k8e|vSYN^$u+=?a9mRb&JU-xJ_{)nx@dR}dHQ!R_NsyCo}QF -S`EJoh!JIVI6jRhcNPb -}MwYR8~4ImrzRyF3n-EcvzL2ZnGcpade4dD%zwuBuBtBDY8p_)H8t4ZF9eB_|95 -|Dpms`-)Mz^mDTfWr@`~kVqP^Km($P!`83Mn+Bul0<5)v#6=jSy)Lgqdy)4it(DPefki=mpBj4~v5Yf -UR$&E`kh-0L*W)v8jGbG^n=$9z`O$V;U$B8y{IXDl_@tkJ8hx*5u`{)+MvBQzJmdx$vuUyEKR7fCn2C -QL69Au=un+C&~V~V3*IF0baa2g!wm6WatHPgvW2dj2z&36B+v{n0P^no~9iS+jVn -Et4ygL@lY^m&~YwS~*u+aUqZDD!S)?x_`C7q2fCEjhHw3M5U`xpn?Z}m!kt0{$ -m>@hX$-{olMWJ4*L2)dgW6uwJu5GX}H9(R=U9MUQMim0dyLuvp{3? -fLwA_|ISTR74;#!ii6`Hewqy*k@LdwV~a13|M~Zi;FK;fBvE;$xz$zS#{lX -EO^^6{eshig3?1aovbitDG%Z7AJ4+dzI74|Yt~i`@sboP?C_ltGWG!w4&CV1+A~`CWOdQsB#+PLM-Ea -fVnf9Sxl<`+_33y$sAUrdSgiBHH*d>@uJ_p_18Y@cq^B5wb-ZNAh)-BNJASQF)y?OcW#pLZbr>C#qyi -1X}m#>+$4GtSLq~oaAM1X&9>t$76AG-V$o~R9yYs)_aSK?KqPNRn;clKyyilx#l*_%Ad@06wyO1zaML -_{c}v7vOia9)WM3G*1baU@xYXdhkU5N@;GVD<$HK}S8x%{6K$SBZNg{|7;v!>-&3$Z--QitDh~`HlK- -bIQFiJ(SvX6G)7@xV -SrL1%wR66DIFGmsmIr3q$7v&5oo91@lTfCB*Pgmva8tdL%H1Er_wt}Hyz$-1L6^OeF7U5?amP=91+v8t6Nv=rXxto3HfwY|Dvx1^bj~DBztmnYNg=vZLN6~s;TB -&yGNt?2TT(7&jjk>^e~qfQH`lJeHGK6$cZQ9Na}f5K2euB;GE?ob{B_pD4tlao>&E-KWe ->Rr;0oYEF>i-qJ~h*GPEZjk~CQ+^(lQUgI%JYz*|T8!#3Uw1|n>s&gc*#|ka-SxpHOGp4B_aRrQE -~z-N?I)1yKO*R-qwEbMFHl>xF90uAll*;p-XC+6b`f&=;@tg)!m3g3d&4GL(Y{u)8CXBP(qG?aS8%Cg -&aVYuoAta{Vr8Ave`8+}_Nd?``36&4KQVHe^U*m8`#gMzb9=aH9x9l_k%@VBw%K(_W=S$fbLfwa{8a< -B(n%bl!efS*GuUFrB}t)+LCI1bVC)^*B(-gvYn*voR<%g2GfGlx(#pzW^;$0?bf?{w(;YE+zaW$|gm8 -D*rpY%ze7LR^XSs}cG1tRKhgufQQF-tw^})ZDJE=7Ds_{E28|iSXGWD|$4YN!E>KXlJJhebQSennHY&t9kq$#Q4-JtcX6K^oC-mY9Wc}Dj)JN`nPh&T8%URrU5)dZy3HyevOiQTBct$rjdV+L8W87zv8Ga|oH -5ys}wN2ObAAI1FcxZb|A{`8NR*vFjyQ>@EL_C0T3~pbHYXW!-FS@g0ck6=*5aT6?G-M)zD*)Y!;D!vU -QBSbyCkV19KmDv3h#a@cuiP|2w;#BvKu5$@n;(YGS+cLxHAeS3xqlw`ajZqIjEVC7YipSB^bm9m$(98LWc@lCF?sxT -B`H2o?~XIuKJGs9QDiqn+rVzB4`>JT|nD(7=Emtguybnuegzx9SHGVlh)oGoO*2IbO#=q)4>u{UTlg` -j@Ii{m4QQF%g+>6R*%m{UOUT82=<2s;wZcDQvJ=Y~#AYiNPa`CJ -gw(J4dz)enzq~GlY9d*MOck4$D2BA0{WLElJ@R?R_?_g?D6)==uMq}+Sgl0>N_Ed -7;xub0^DpbYt=rs49MN(``3~H>!{e^Rehq&|+a_ygR5`txOVrRU4IH#h2Vx(h*9q4F;-t?$v;=K!~k2 -vJtlk#Y;(p2vnKW4#dSCfmKX5s`6p`F3*VW;FD6cM#QQ$l7=>x);d9zd7%7wHL|4-W|LW+gcnJD*{3d -vk%Q_2@Z9yt-hGi-O`a7EOcyNQP99g!9LbaL=NLpV2c1W$#?5)!98k`XS(e&b#A$>(U4uKZb8Uzj&5x|cKf_PnF^IqN2Y#RQEdSt&+hlUZ*#h8lX3fE88f(N#T^({x?#PRz ->S@xour6Ex%oG(t-f+?zYOgFmCtP{%BH$}2kH$b-3Ty6kf^x7?cEx_JFtJuzRB}YRvn&khU={_J` -N)F=0FJ=z~(#ebtI^*s@@#ux__;)ZH1jbYb=gEp_bg#MVfRu;QZ?yA>|1rE2pXU2?6yC-zC9VBbN+^;RQCj;O>oBnl3d*sVfdeSzjmRs%dtac|8mPug+6jFatipp%xx`f+empzHH#jITvG+c0pw;22kt8^$ikJ0 -G(*+2RMOx+AGI=zI&up{Fr(d?ls7U3jkL2M84ND;VsM%XIvF>oeED4Nlu*e#Iai@hEMT7QwX*VQVVQ& -eWJ$GpJ)2L^is#c-c_-L$9cac`1{J0)FztY|QDA$bK6CU(JE(X;a8`HOE~eD(Tt^8Dr7cVkBpai?nZd -8EK=w!9_C0duBUUVvAS8nTjKEb(6Ds^5g^1!ChaWnRHzS$H2uq5Jswg#O9nn#Q{0RqWR0mkZxH{djn% -q^72VGjSmtH|B1Xu|h~NZ%FvWH;NP9ElR9sLnSj|H-kR>OS=D%i%KrKG^Q?n)1btOXOWUe21mRIxt=w -ZD(H+sPyqi+ObV57Y{_ANHSAvO<7iv~H&LU+W}uJ@P(s(Sy1oQx%lzfd>Sd^B5m^a7GAVd0tDbf$+ziLBu;u)ln2&sJJR&lJRshzENZBLeu+ms>jw1MxV`At0cqM>4H1dtk2RsE`vYfzut~)#p30>mMbWK{FHmdF9KPP0!a+ZIiHSs6m1((F)!rz$ -bz-1NU(&m_O$VR++nQQ0@I*y!0`kodpWAy2|R?B|*%qvH*{VPhlrVcXMd`qQkjvm90zapLg%nUu$C;F -$2rAwzIJtUqCov+-@85_vi7Rfkc7u73)CK~!EEVjj7(j@T^IMo#JpP&MS^;6EV~$hvTf%f%;{3jG^7*5t~B2@ -ui0pGTjIch|R6QHXo)KOc=r~5a7}J1+UeGyJL%z015mjiBoR<*Ci#(z(zh_+MYqHqE(DNLJm4mnsueF -Hv&rCkL+FGbujdK2UVz?9@hpcHe5habX!FA(Ig^b-K<#y+51o?gRlT -qYWiX#6S^lfqO>JKiX;Wm75=IwGH6_rpx*UmE{!3xo3pyT+nQ5Qf`P&w%W>Q~zApUvbi5eqdml4wxV9u*Z%Oz^gwmX23E*ZB+ua7P*{wEiK~@h -{ZmJzTVy9jTE4SDmVp0x1SD_LHDUqnD7*nFMc8Z;5t9G!bhm1wEFETE$2*Cp-r9Jt4^fkzBHGW!>0wq0SgrB@ -3k78FkQMk=k!`l0lN*Yp^;n30d5N?omYfipMknav%bac2{Clfge?;YrwPE@)oL(hb^p0oLUL^Ng|YI7 -MfmR5gx(vB0v!N~_B-`uJ`}pU1sG`fojh=zK~RV?Cd0aQ(1dB^Jk;Yj`?Qu|X?Itk&gwtbM-R9n0~VC -uC_AG5m0y^m8Bb!5g8%N^(P)t!7d%9QAtVbeAz$Li>^D3cE+Bcj@E{$83#0ep3Qr@&25w+ns04%?eX^ -!`Z6aV_h~~0=B35w6PLWM;ghF+wt9AO_tn>PXSO`AH(Qw%z4tn9c -6S4wM4>Rz;n_qW-*wUXg_O=cp(Yp!h3SJekkKLyR(^KoFPVb6vGq9(}t8{*ayh%?NG6MJ)5{l*^d&fM -u^ZCF5kayS%MPi8?bw8aWeVPlG39Mq3w`H^mc}*sOUU$xzRln(Kvvz;*ii?aP19K6~`&_h@F%o)N?`Y -H4P-^KAI}NY!1fh+j9Tw)cKWZJvG8YT;>}LUBQXs>4xs3lbDwX(U6DS_!~@(ANroPU -p5KzHZnbVMiVG@8zaf;Ubb#oMi^rZ^NHoza-vpeN06J<*yiM75cY(oJZFN~|35cHE(Sf_QB)X1Fq$K5 -`&_Q1I0ar0}4p_1$9dhGqS@9FpSwHFCS~3!DbLI+kF&Sc3O~VGw%@DN)vMEJ)PkK>0?vX#x;rHZV*Y$ -c{ZqPnkQ$mePGVBlyM2@Oh>vD5uz~oBPGADdx(Lrux2GMbw`lSQen$V~_>f3iGkJ7$-9mR<5%^^QF5u -hXQ9-$fkdvs?!#Yj4iZcDx>IRecD=BpGLr6_P|3E)#J>$(Q5n5+|GgC_3oQzhzzf|$b1+W5^zM$L!#8 -&D1k_G1Gl*+Qf!3?+{JVT%?t8wKFSVgx=W4-Wo<^xZc1Ir*uRvI1K2n(?q=4iDv|q~-I7jMdo%6~du! -AIgB+pdFG0SJI@lX(Da09z-oo_-xQ=Ch$YF#N;mzaScXdG^1K&p#cR({hZj;A-iSdMT0?Ta^meEs%C_MiC2%Rj$*{pQ89r*B`34|IkubPx4yr-1$&hnuh2z_c#K%#0Waa3nR@`B${zS^-Ir3DJmmZfIcKRTt+_ijJ$=AHO*aMiIqw3 -*87DhHY@2yf=S^&1gz!LZGzQ^jFjaPt`TyKchAh0m}Y=emw#IyFOe93bU-9Xiil(k8x+@Ve%t4-uUc) -3e@lk7I$?t(YNh_;2ES~WM`kW=K~niU~J*UQRP8G4P*I(_>W2-n(f3hCo+*>K~lTIg&2_Zl%CNJr -6_Mli_0s1ERH(v5~sj&PQ#wg6x&QGJ-^c2xzB$iQ7yxr?ha;m_&yr6&4r@2b{B7~m^5eb$#-kg^I;=ZR=mc{ -7anse?A$nC576%jlyBg~H9{m7#Q-WTs!?ezH>$s`rIz;K~v5r#IG_6pd0cK6zsTidyOutjCLwupaL?< -0X0&rLwfEp~j7EJ=40B^DSKV;!8I+2f3T$JgLLvJSVdh?PQ6Xi6@>WXciXG=1t)PRo3rMSZ7Ea$P&cG -1m(6=&oKl_mWtBF=uku -bsz2cv#*}B@l^hgF^@QLGo$`m%3^U+dvg($5+j9%x+l8nq?271m -c>1iqloxjKtHrDEU|3Lu5Dw08q1u|zryA}b)XV}ZMdd~1s(7hp#|5JhKR4|6VmaQW_EuuW(H0o-G9N3H^?2m|Y&iYINL^qbgNWV$!n*+0C}4v^O -B83@B@fECch3IVKL2{YQ$?uVh!C3My%qC7{La4#{tXoXkem3CW2PRxi8CZIae+ -^$ja{y7?rbH-?YX#aoX4;A!KZa#?ZjjG}uhc?AO})aKtOSa+x^CzzMXt27w!4=~v`p8N?zI -rxD5uk9t`T5^0C+gRhxN~n^45R!G*31&A|o-F-3W@-Db16>D4nZ8Ugp(07q>wC*k)LKO-{?v0Vc%=rJ -Carh1mCotEQJ>|?oi<#2Y@%3Uo5A4A6^m#U=K}Au#@gXO2RW-kme{V$p<7jf7}<{j_L;mvouNqsa{Z=Zn7#}~m)K#8niR -X&$p(hnM?#!rDp+ZOI7u+NZ}A5;>{Y!j@3GtFhH4$E`Zu9s~_}@N%f0;y03-NJyx9{NS(w -@=tb9)Yi1awb-H>Vr`@GfgNz?4mH=D(XP(8Phs8kl+O5u4<3L?Va6n$VzU#qHB~YoLFqV4P9CEc8)mFyO -C(Kb*fK6UWGCpv2Fz-=S{8)+x~EYZT^{)iemd!So@u -z@Z+VwN81Xy&>&2*dpmHnN2}UA!9xeg{=N_gvIrFdJRg`WKfVj$#($c<7`s4yvo;4+I5F$x(8wM=;2ebl-T5Ef( -7HFj8>0Q&TvtMroXgnj`a-O@2hu_S2aciP4)nggGlz)6sa!Ohj5{nY$U^cO}R_vr|WX^}g-9=b4rbnv -Rb+*x0tw5y`Mn%%5=zU-1izK>mx<3s~@5)&`4%U$?1$&Li)f0XLOQy8RdgH#j6o2WrhDiUYkYem49L# --2lixhmi^p-2S%X^Y6%ct4Da4Y>gfK+}Qq?3M7mmfE%FZV$DxIulnXHex2y`VI3+Y2nzLQ5-6h#*fUo -d~*@&RZ;C704x)9Xch89mwrQe`7`;mgGoH>15B8>N{6QmDmo9MqItS0!~me9B(k9Lv_R`h7>>UcnX-D -rL>v#oDHYm2_ScyZGi<^KHSz=jhy}Hm_u6bB#JE0vSF2%`IvJcbmN2pSh1raBZnX%B+57FK~udt4g)o -R%0>0oV1%>&aRn^k1EZL_)3@4v1Xlz9x5E$xsY#+fvA3R)hcqrx!Ndk;F&Z3B!jBGPhY76}X4FN@i(Z{%Nn>zrb2o~f_sqi-WF4I~7HhOv6ag(NYGF+lESW6mPQX!Lz(e{nTLSrvuB!N2|OBhOOsxmd#C!U|E>Xsp;+i;FulGdv=!;fCK(R72IWR -zRgA% -uL5WfU4Q#UG;pJY#BxHA!l2)Gmwb>FqqujvFd=7wtgjN(!Jg0ypj*1JbnZ4w^YSnDJ#N728SK5Iim~c -QuU}5F!>{0$Ghf65ra$8s!c6FL_Db<_ma!s4lIDFJX_RBIg_BI?6EZ|6GWM5?d`x-gg%*NM*z5roD{P -(b)Ob0-4hhe}d#3tWMxO=F_e&QVqdG{dTMyM>c4wz?hgS8C=)wGsSqjwyrpd7{o76e5bSVX>+a@7cQi -~q2NCM{wdevPSh08ayLry(33hct}TW3O_2fUdlYDkdKjhumhWE?1ShBAeZ=NI%#hbpWPQ{xd -opTY*SbQP>w!1gyU6Ctts>)=f=bp*O|)n$k -nmbJ6u>;2sJg^rg?pNJh?gBs!Zg6E5EZ+#D@RH<`eW!G8 -?CAR4A#;F+nM#lusx|@haGlsdVXV=$?yO~bYgzfwezUaZJ^E^T9S{Ej{ofX=E~S;1<-*vG%$5(xfEFG -u3Kb@ZqFAjEl)e9aPW78CHO?=2lK~ -}JU)iQk(rk)GbQItcw#0aVMEAg2L0f_qo`h9Z)}BI*{;`C`fmNCrF1oQleOE~l@OXmSx}0SPu9+RmA0 -aLLc4oeuHx#H`l*p~F~RGV91GbyH=%Mp;waa$=h3CxXQnG{ -)K$sC{6zb#t|DwwIF3pL8oA6rrw%90eznt}8!P3{H*$#UP|-7-Uqv2Z9*#t^qfuLrw5yl0@0aEPvr_L -_SkvR_2#EqAx~$Np3{XSHKK9xj>Kn;$ZF}RH8^ZgXCQN$OV;OXx~W=WN_w-Rn1F~Q8(vS# -Eq$iyr@b{vt=mMW{*N5z3S!603^HKtWDw{P8i -;7Bdh|I%%sDWe@Ce<6jHRwz46Y0X1s$KtLs -Z&O*7cAK_Z5`zdEkM@o`IOzl%f$hih9~4P(K`7}=FHgqq&EXv64GbFIkr+*f}h7DIB7U6cV=s&6UM;T -Zn6+DWiOc-J*PCwNC!2;y<)z3SrbG(o5}*R>0?Uj!D3c&laX7!YxcPGv#k__X+7NnPW&0Qf; -gvi5q#c>7wFkwzPC+UQbz>@eB2hY5o+lTY_mzjBJ`4lN{2J5ezBE4`p34aqJ~lgcc(!GRL?50X#%qm> -V`FBL#=cQ#HPM@tCxU;3X#c!KrPhWMSZr(57+uyBufN(}EUOuPLJ}-VetD;CSwyO^dEovriH|gMU!h= -3fkz#7$!>zbv}G1{n!sH2TFpo(jE>7@2-h#jN|CJwzt0s~RA=Qs>9Y>eA*W!cJFH;b1r}XI*DQ71T$nHYv6l=(S@CY#eWN5p# -dsg;1es;r+tm`I7gLJ^C@*OQ@(80JX*Ox0w3TVA2{0LRaAuE*d!8HqHR|XY{NRDKA$iI&Q9k!CQZ--6 -x%6*YK^5gZINdV}T69qxiEIV{D#VZ=b5iXJOvWHMw58kvBncD*#11TzGw=nx~vQcW62#@ZM$R@%_BZsuF3^7BQz#;oywfQS1 -=E_T+NG@Lnl(31tqun9-g8NsXi2gmDS9t$Fe(24vRqY{s83m~t7ctocC1)2^B<9FeYMyz+7B -reklX#ah9$HZ&D8^iE6!@Pt_(5RHmX#?!!z@yeIdhq?9_!JLLST -QOD^v$cUUc7y)4kAnuF0gVIZnnjY!%{Q7x(Tpf%^}B-;uE6eUz9~`e3X~Lg~&YU4NyO7A0s` -u+w~F+?HB|c`byu#41p;FEVtfV;@&@vK+Kq@_p*wRY|K%ja;4X3FhR*{Qx!tv;8JbGJSdy{OMAT^x~k -v%7|O9&Y7pd-x3Gus`yQJX=%i<{Nh=ro*nN|Ws#TPNjC6qRgp>Yh-(0`m7uE2_Z91YjUN^QI@XTbEUr -P+xm?;6C0dznNSuZdB+Zh&>Q$SWeAdk=)}w60O9V)?8dXyrZkpAEazmulxJZWdd&!z>bh%jw9j2J1Ct -<6EHaej@P6py}wtWRO90cVW&_-X+fu75ByzfN#ewV-boDbF{f!jrCYQrcS`K%IM$V^>Zn8vb7kjyp5G{)~hS|i5 -;5bK%JHlwNy06EWRjS7#ZXdA<7v=Dq8hsOpJ*Q)G2-FW1;Ns(!5<8Q=-bix|9a;inh}ae>)F{R4YM1h -8YPT2drrK=DtCQ-P?0}*b^(AZuP>S1TJ*ON#aYb3Gu^Yr^sbbn#6Ou*$1mj02cYS -N!BRDNgsB`CMbUyqdhMx_T`V7XA-nGv`O8obSw4{CRXvXuZtH(T>m#ksIe;p}QA1*A7SHflFvXot3zN -{CG)iVc5XMul@(3!A$u*<5OS}6Y_eYZ``lCUa&v9>hfex-spAp^zupInb-4GBi>2m1Hg=r(;;XRKyJZxNY-4 -7>e(~<<^QZ5gGUa*kKVSUMI6>m@?EB&P9Fy4$zn|w1C=br?Z2bM`e011*_BD_ISpuitOXsbaXC#7Wab -z#;`CeyH1s>lx`;@AtHe$!iVxRwT*dw|s-W1i66|n1^=7Is+^fy{g6=w3{iiY2}hCOb2|HnLNXPg0jV -*N|gF*hl{S>;Y+&&d%fg`k~$Lzc@0cA#qr2$*Ijb>#d7~|B#FjTPIacl7=uBw^{x|{>s$ ->cK8!#2O2zKV*PW1%f%n|IsyQGs2C+d6cGsbk7bRP-e}|zA2Pq;m}p%M1`w5waDK^mto$i6E$uP6BBq -zVO}XB(*Rduo2->5QB)2-JObF;0-8VPhl~Hz_b*5o_P!BqR*od;!l5;&j2}2+K8!o2(B*hGAD_?W_N% -FcGAN(xoGeYj$IZ;*4`6BLC@q>#N -p)={$4pD2nc9hz)-DQzVjT7@_Bco@>dSo_ -doEoOZ1D7bS-v&xTcf^-S&)#G@?r8uCJ0C>)pTr!XUiGq{43%9B{O!lsMLy5XHx_tDd6~bmsUp;QkvWGfiQg9UsGJFe2FGndI6l7;?r*+=}d*H(v$ubc5_@pui(6^M!=Zo=^rAJR(E@IKj$HjZ)l1sT4&UtY**)e<#Goc;#Yr8Yq4)Bz*q)mv!Ep+bP@69%jJuKh*6Zxm>v!3+r(b=Qz5C0{x7jzZ -p1*$f&DSqpy?gOI119+|ub+QG)TryCG5XD3mX%$k%xB(1N`{yiT+F@o%w00H8Q@Xrd0KMvxJZ*CO7&{ -)JR&dK+GU$j{whd#-J6=mHH{O;bUk4>useLQH^Q5~qTGAP#|0B4Cz%|%XCWZ?r~24%s(AF#Q4T^VUAa -CFfkz3tiSu?$!q~Qn7YymfGfXXzO03aIjS&taeCL@9+g?8zq+Z@^uF8}7l?RFp06 -Mba}f~=(sCUBU?pQG$4rdUP&pwzfRqnIj+b*6A+%GSf7BV0txM@Bab1C3-W_DIYzE}9*hHe7=Y -t$6B#owa~U8wsrAJg*w*Y`{^pd@-ACC3$#KSLpCO*Tt80HIpKrj{E0tF(`ch%<)~aolYH}j`kE^ya4V -GW0&V491>CF~D)Hm^n`SvbCLK>E&_Z4da8v+^y+~Rm982 -jrrrr}**dWWByw-UHrG>e;6c)y6E^Nhkb^%3$JGILe1$(!UyH;~CWy8i)KX-mwRJ;T|Kf=`l+yP|Tpu -h*KplQ%yv}6hrmGodtpTpCU2FsEBKie%>p``1YXFC -C96j9{{v7B8cZo!k5JdkFR#0Kju^eKlC4$tEz(oBa%W%Xz{`!sVgT6CKFS&}sP_z5R)?TUlR`8#}1 -dYAMkleQ=ZXmQ9HO7}U~OV`emhXq7@bCh9TnryqufcPUWP@1`eJ!>FD@#Y$9cCHe7FSt%8AW76rhVi$ -Qx(h#U*2TKQ5`08RKnfxXY86xhfIv+gC|VxzW(F`wvGUY-7|Y^{r$=ly!x|H-?FRkgERZ5^|u-qjDKo%z -~nyz4~IkU6ue!KbDFYKwH*JU>4b`+AJi~h3enP5fu%Iu`eJc<;Ju~Wq#n4b>X+eLv|qoghN-YOQ7{9! -BUK6c<%ZAt)o)%pX -sG60Y{lbV^@8J$-4T|LNH~WLyY0h^SG49rOl-<5Dgbq+*r0e%UbE4JI{<_^7-jMR|p!N?cS)@%X;ECN -61)$%mL6ksF*$oHe#|gIB6Nm(c;yRVNcTyd)2sTGDN{tvwfplb`E#$INR5;>9iSz*T!4UXW&q0X@Fsz -W^~c!w#>lVADjSiD~M?0kiYKs2eCJ=650PTAnJd5JOLy_oDP+_p4?Csb5HtnWIC#G@LFEPoNJn-=OZq>09VvrD -xcceFKN3fW^xQ_{0^A|8C*xSqQ!i^{TXkDG**bJ8Sr@2KnUqoH1PTX~d@;~CV`njDH6n#KIL~#YogcI -gdqOmakrMPnC2$~1w_ESH#eMu>(fksVRZbk3O9MYzNgKh=}G(gBY2Gk6j3Q}lfUe?|1ilD{GW|wu+xK -1;Vl)4=(N=lYk8hvKvl~|eJ7V{5=5G#tm)JdF%!Z!5F(a0ixWP|OtV5k`a1z@ZnBg3G<^7Bz`y|#y|A -#uRw8+<+fonkI8@ -6aWAK2mmD%m`-6N1J+9c001%q001Wd003}la4%nWWo~3|axZXeXJ2w-~!TFDP?d6Wv!2BC~#TiW3S_30(d5lr8_P^bj6s=6-dO;4oMe|(+jQVBt3%XE& -2#w>s1IMrMY{#k!T0j#p`sC7QxegX?R)=+o!A5@8|mG#_A$yVw8PH5U^^&S=hQ-bZJ8s#TGVr&?l04j -g3@6?F>qXWil9~OERH?wq_9LPW=%F9T1GD*r@HkLX!$(jR=PrJvhH$8y}skIP*@6aWAK2mmD%m`*}z6H9Cc008+C001BW003}la4%nWWo~3|axZXlZ)b -94b8|0WUukY>bYEXCaCx;?TW_046n^Jd95oNdDRq-deOWc#QisH79moQ1Rc$3iU~JD813NR0?SH>#hK -n)AY0}m5kl-`te);Bb2IIWgF}hd^(BmPzySRJ@w=`#qoWmD_2hk78;lpG3`f0I>XgZ4X)kp12JA-?|R -+Mv^XCQJ|b7DY@`V3g*37zBrC`%xrTrm2u76il+mGOKoHW4E*&lxi8P*1UDMa~Iqs8|A0<^OywU``02 -#F8-bu!9AQGC>jp3YI_8ge0gh68MKe^pHOiR1`PSWVxU*Q4T1p#opEWs3=IpfMyV-sg$IIk5pK}!~); -F3BH=11-1|Op8LhVwyxoo>ErKLU^>@|$(#if*Mn=@A5TsD&IfZk1(fnkC$KFaReiOC33%46>7j&+La1 -)9+8Ix0*S2%35yp?WvO0@bZqnen3@1j)?WAkUzK*n(6x -py#ied#vLd<#vOfhmPCf9SAppqz#7dD3gskq(Um+jS&A8V)>Ddf`~NQ~TC(#+DRy6@TD*$T;&W0Rv3W -_N7gC7L-YHl~UB=Sfx&tc$o|IMEPKOn1nl1>Ag8D#7NWTEMGww&evkiNEiZL6*&{wyN^`%jO;m@2|Uk -Yfxjz(I8Rfe2)vOX|Ex)QnnZ#Kx+3+Fd{0O!qVjkZVY639F`;Qm<-0}|7YSiZ6KwaJ2KcD+w!&48t(< -2x*2p#{g#cU8Eyi+oLPWhsyd|n>VTj``qr|wcU~oBlKhU%ZHhegqc|PV2iQl)E4}bms?tMDY{E7Ru=V -XaOTAW6lgPqN3Mg`IHhrcmB!^#($5)`PSk`%s*!VS%me1r7M3#gwn@X=l5zQZ}s7GR=((L%z5yoKzLD^sY`H^K5bt9*pb676ls0QVIxC@u=v0I38e -Wx$Zz2QCnEK^PE(sU4J|cbi#neE$HQDaD27sIzMa-}EBKN4OjwPeTiM_c^?H7M6G_Zs*p{d>(TJSkDJ4{p -%g0dh+nFF>0HWf9=p7L2l>!)F7OioeRbp}hFTB&eghhJAs)Fv5O!<^F(_|J)-_nSa3*(^`3+(QB1M{T -R6qn(|2b-8iz}X-JA6Lx=lIMz*2`%d7VIpT@C7lq1}rNOy;5!Egz{eLF~2ZCnkxUW-~kUPIQWxm{6gz -xw{7ZKPM9e3E{cd%3V|<)%W#aZz@ZqzP>MK};p;;A$rL)yS%gxx3?)fHmx^(t(O?Yj?zDI~2QulyA5j -RiuZm@~Vr6&0>7d@&!ZW(CZDklIU4b&*g&FzniY{TGne-hB7rAHR4^t&UzNf(pBppt`+(KDcH=H7Z<1 -ReRZLq+9c$si{9Kl=cO4&RuTG>Erw5NefcIKqLcdYS4^^_%cnhdMU^x365~Cos4h~!rWMWfOQYTWZ=2 -Mfbgs$ADWx^M%lf=&DL3F^_>=4P#K0{O59)!Fn%X#;#qtBG^uBHFP^X$C$@`2kZaz|bx=mhHv;{8J$7 -+Bh)cRDdpZ&HVpZ^OU{smA=0|XQR000O8B@~!Wm&~=erUU>0CJO)n8vpFa -%FRKFJfVGE^v9ZRnKqZL=?W~uXx(3N>VwYTP|n?E8N6MEjf0uovv1^Dstm-GT>i~?Y5EjzyU!Q77!rq -isP~ejvP7izw|HR&5VB}AwWSQQu{J9@B7|2Z{B-3fZkCL7Ku;eem0^H>`DRKx10Yt0_BbRGfGB3`FuRzL@E9w&;`Meze5%4aPD} -qFe`ZjTr(*+R%MAWpAS{gHJB^vTrFF-U_4YlIXN%^sZLhI*r?|nS5FNMMwX3Cs`(V0sW#A6LqXBDHgFYWsJ@;i)dYXXMlaM>_(Gz_7-DhFf!P_UyQPD6P%SFM^{(7@F#llx -;}*H*a-QyUxlSThG2hg!nlwQO{pIVC^=)z%#z)0(+5NtPf*7E_a)BJn&Is6=ScY)ryL6}+SEhv>Ij0Z -Ss7&x0Z_7@5z3Mrp!wC}N6TL*^mP3G>3N)hZ9NbykAZ!JPE%iz>woociDs0H}Brao5q2 -k`ERSY|~K&>LL04?8sW$xYXP=dcrbXxqZ!(qr?Kktjm -eJ>}SjD$fctMVlNJS6c_NThKtT>4V;5r{=v-KWOMur+K0(%a^2)sP4Yyd|l;tL33s)?Rqa%0t}ZXoqe -~K;^lSgrhBKwR@d7;a{$HLWeZw>e}u8#|e!)&q{@g#59khaFL3PvvDX%m6~q%BhN3I9Ll6IEV3}}@Zj -CLhz2WsJYG!ZA+}-}PT{L&EZrinx5pJRm=hFgbcgE#xNGoOS@V -)wZm+$SL_y&|M!h7<){&k1%^^1m2j~9$YmSwvf@{Iq)blTT6Zg2EJy7DrTA -$6y~6e&=kzrZOiu}VMg{L1OWZMljd7#zLDmoG+#^el{7D;;l%&Yn{gcmi&=K1-0ALV-|Z&c>Dz`f -C`1x@n>X0*{(?OKvxqJUgCqcfTi{b=+es+7Hpp-Qh$vkYQQn}-xu(J$sqo!$LDi_*YUXN;NUeXXO5&u -f|2}7=$Y;HW7hE!rT6--D#;~|{JcYU7B_?z57>-4O;OMx=e8NHBIaaDm_r&9tak}0Ab6}N0s>$`&gKB -4@{j13}r8h*h;&x}2WxdfjcW*uuo$%&!X}*x=OJUxY<`-#xljiq!6USM3{`x*~$_D*jnjfV3v1!6T08 -mQ<1QY-O00;mj6qrtU;JJbE0ssJ91poja0001RX>c!Jc4cm4Z*nhia&KpHWpi^cV{dhCbY*fbaCx0n& -2HN`5Wedv2F)RMp%_h1MbQ?^$h1vBmRwR!Q7jgQVo^2`TNFqt*&Mh3Ko3QM-R=AJNp>jNak9JUp*r{z -IrIGtZTbjK9-hEb7phu4g~pX9Py9|096_Y(8>3ch2fbw<9zQyL3}dCuN?SOWSjaDxg=bgY>o2Qqt~P_ -E-o6NqkUW!StE^SJ0;i#|GDMU5CWI|om56y&K%uNN>Y{NH+#1EKF5Pu*B$V1)`zJ3QeDg3fT|$hY&=s*J7 -~wsCKNjyxRVcSIJ*(BvKWFm?Qn+hOt49Man$ru$V^@?Q^;B-tlGEyX=+ -(9~t;`xvzJe@+E3LhKhf}#b -P{fOaEyA_!P2)rY>?Pdsc4B-L8N9a&T>wuQ=0I2dXOM@BRLL(L!HWy}jR0$r_2*x -WfN}JJQ1C%gcYu*6Z9#3(ui<496iHfB*ZB4&HR|wu5&ayzk&c2Om55bc`N9j#%B=Y-H6X>~{LMEeeZU -RrU6*CvY0#&2_u(U21r^*XsBG_W%ykzpCF3v(J?5we$aX?C;+`w{v{^vxBc4{MEr19PS@bO9KQH0000 -803{TdPA}lyx(WjT0AvLK03QGV0B~t=FJE?LZe(wAFK}{iXL4n8b1!pnX>M+1axQRrjg!re+cp%1_j- -zp3<{46kK1My1Wi$nOxpxx$sy?pf+R3B7G)EaMS+rLGC-dpXp%*iMdJs^rawT_wC|E9=_O^)OuA{b;1 -S7tzI#Z^M{x4x39L+}%k_O|oBZUSTM2?A2u*cm^?K95@v0AZzy9VfOti6UQ^T3Ujr0dy!?zdR>-Xzzs -*B;uY`+VR&^%XmtLs{u5*h<-tp?bnx*EV1Tji)}nL(!O#_IF7QP6AJr2ripW!3o=tZiC0DjPs$&4tcXhP<@FK|y+ME);@R*QY5>qgToY@Lj8$sE4hpQmF-9LRu8 -gsZ~An$C6VDA{om^gi~Mw<~%uLBRYaRMBw}mka*;a$U;sN4kISQh_IOe5=DS6PGZTZK-429r@-liaC9 -VSLfj2H4x`10#S`yivw6g@$&DY9F(PJ^hf`c2rz~Rfv2Q+RGNwWd5dm=m^o+(5#MEJK)GF7$ -+P_Bz_EHPD4hb0fy!@lmjFj-p~;yv7iqZNW&T!kr|n|7~EU;Q+KK@C6jA^fkk-UH`h$FJ4-`XYBW%=x6=w;B&1G+4uV2=udhd-~8bce|+|&btrT -bYEXCaCt?{K?;B{3`Ehrr|1F1TX+NaCD;@SjVY6e*B48Ro4~8UO$QaA|NaUv_ -0~WN&gWaCvlZZEP=NZ*pZWaCwzcI|{=v4Bc}IbxI5-2MBcR1xoi|Ql%LDDY7$}+`V$i&xIDMLALdzrz -d$ZDg?NBYc52dn(O4Ew)lRCt^&3@j?nko>Dc#8Kr>3P7=n7B1fw1M!5ayqHt3Yar7GKzto?^#W5~Jfk -_zXwsDv{CWBDin=Hxj0GQ4(SY`s>8K|`cPUQ*GRcs1gxyzE95Lt{OjtvQ) -KRWJTlTMUde|S-f*w*@8!@lJgP)h>@6aWAK2mmD%m`-m;y(8!e0034f000~S003}la4%nWWo~3|axZX -sbZ>2JFK}UUb7gWaaCzNYOOxBU5x(nJV3h+%n_@{jsa<=@%G4gbmsI7F&1EH-MN!}kSA3`dNS=vj{(H -IsJ^&J=39S;1y0uL=?-6=x*VZGWqZ{4?hjuj -|e-%SBVk)8y{%?qh^NrtG^2EuSoXZRfGnNZxeaDZp1 -4~I>#Ro6V%7927mm&vg*Lhs*4>6Gec@D_so?HS_?f+njj81XJMf6lv$Mqpgq^~hKlV@HkD1lfZX8`J( -kZs8YHTV*cG|O2T7i|5=WGp4uB2xTBk=&E|;`@H5h46&YkABjY_#6E*ngPw3$VwsOGGU0nf00bomG}t -YQiKPVR0rnKvrHEsD9F@Rfv9;5ed(5OOOS=azjXs%RTA0^1n_)SE#rO8#6$y;R3`@Yh*J;A6L^pQS)I -8Sx22;g=$^5_fumC-!2><$b(2+Uv5{|vUh5U&(V&9InP8nyV=Z`YCBQHB|Epamkb!mLRl<9PHa(RqKIYkM17~o8=J&Tvf?(AD#5UM -D^jO5%T2wNJ5o1eLl50}pl#2xO5x+~Ho>%H$4;zH@jBeJv)UUtMeSV*LDd=X&UXc>kzM*COSqwPs+EiSXP!ii{>2^hE_0RDB6c0T2cvjWA`J$ -gNk)2gU5P72cnBRy-U=rXL`iDazV1>=tmPSa4o`Br3YB^*k3%k*iN0F6CZbZ-d -35O`~IB~_UM0kXe@wqXpSYkvU4i7%thYlP-aj~HNOpX;Tpeo~PrUomb>M}D^a;q -oiiLIGtvm}p&Xp+VI*0d39CNddCo?v+jdl(~$L?fEHFEj{MmTP~CbVlZ_0*LfrYE0N8Nw5FvU*+@DoG1(gGyT)mp<&&-1^9g)dEgi-r0f!Ukf<=dFAQ?^## -a?etm>lT_VC`WOQCC|@Y6lP>E_%Px!r3lAsk-l=gjK175)5NkX`$4m%WvFB -(CTl$#xSu4YB+|zss{FPsL@OjmtoDlhVUKwh|a{|?bya;%ElL_tn4)I&4f6VxW)$z>98qp_~2%cC~$+ -yLbdj35JO&ItGG^05kB(jeDaq5BuB*rM+St8tm38#;8yUe^FTM~U=S8Xtdxw`A+{e-dtt6iTofTe7oU -2N&qmP3jHBK3AQ(eb+fA{}$ja;z<5ZozsZGQ{yvBypK+Rqbg@Fx6cOquES5ahx$m4>>wrbz(0~bS8Lp3W<+fz`S(=>Z-cno<8J2HJ{VTBr_)tW3;uCQ4z#^Vx`_ -e2MvtLAlKL2m)BelDdJFQ~!D!jKLO5V5ZUrh<+JVAB)u<8kUe+;7NM?q2`0`LZo{@3v)I`u%lV`tLwt -Mb!xb+DIzGZcf(7IEHfwg>T@D!L%q$B=Jd|ynQ2dPwxrc?(yWVR7G`&$5oMIQL3WE;v9=}8YpbK-Kv@ -`)}*SKQt}4)`&eX&klZEfm-%+PT`rf4?egwtC3Pg8DlVgQnK{~@z0Gp*FKj_OuZh=me@9v(^7#kEO8dyXu0R);TNp8!@ZV` -i)sO*}MBS3~-aAm3ya?b3w?=`F{5&f=prt<2cn)4JF91Ua;QU}kqVjpq~G23XaGsrrYJz(j_Og(|acb -X&m$Tm57&Vle3P`S4-6B%jvM?-RT+a3RN*B2<}de+g_k#k&FTG93r3iPt*LIAq;s)6-+=*V~smDpDH$ -QDr5plqy)@uFc_&%6I?$%i{M%w0qyV8MJPvG$vfc$R8VlJ(!qAEY`>0F8{Rr@)}GN()*4BZboS@Ei~) -w+D0Oa+&q&gM3JK$Eo)9=Xhg)Eu-w=HH=&Q|+$29HuC|>4I*Zc0ilxh-?-#oVSOS)>o7Lju4ocC(_Ta -zsp|lORhwcNm+OW^NriWSQKj4i@XE#NeW1*SPq2~{C|J97Ls}=m->2Rx7n~s+r#C-FGVkc;izdzO?df -s($4LpZ|;pdgU0*R=E23gc7&B#9D)b6a$b;bBaNRt)dCbrIPYzLDNHR&)%rTePNF?*@!VxYpSIu>_;q -_|tS2}SKIG>ijhK0XoVbJsMuIx+Q}7;)D5e13HveAm?P!4Ic`x@Cf7QvHmO@c$kTu5+OFLG2B8Z-?0U -(g3!(JqPS=4>!CJ_X>Yv*f#!*j5<^p*(tia+lU6#&b(y^R&tLphkhWYyDK{a$WH`5|nzkH>?_$p>xc@air -~l971&vJBMrQ>#u<5n<1t0DD~e=>YL5Rz!pVxO+wdi$l?P -i8@L0`GiuG5-Nb{l74vfKZPiP1qix!xRpr*GWH{H{&ro3ug5Lf)P=DE&;=h4)_I5bcGq9b3lz8*jNW) -U+nrjkg_mLfH2NCuQm)y$d*cm@AIwp5FQ@&vA)29SzJYaT7zu?#^f^r(rF49k{L~=g>v1>gF#k{wqIh -L_c0YFb^bX{!F44P`Qp^r-}2KcTlJgX8eb3>A&xvs_4HY8uvamM7IptF?g_P!^Vb{M_qezRT*2-MphX -s8|oP8HTu(%*_yY5sw)O-PlY4R{sT};0|XQR000O8B@~!WtpVJBZvg-R{R0318UO$QaA|NaUv_0~WN& -gWaCvlZZEP=eWpi{caCv=`!ES>v42JJKg?9=_2yNg@n9gYcZe^B9>0`#{1}%I-=;9b!t#VUfYNL}19_pgTs&kNsjzQoGns$>vjyF>~ -?63MfOL3FZe#~ZovjOz>}*TYJ~X6jY51m6#eYvV?tUt_9g>@mOO3MRMvPK^%+QA)Ro4g76bo)vK-JR& -XYxM|xqT~J)|-TD -pmXKTt~p1QY-O00;mj6qrup7In>U0ssJk1^@sX0001RX>c!Jc4cm4Z*nhid30}WY%g_mX>4;YaCwbX& -u^PB6u$FUcn5?@z)jPsThY2+d+9FCWoavfz;2N+j%+8|lI4HjvrWLHs453+{NDGyU!SS@Mo5jSLQ`FH -8r1Gv(jbtmyt=x&$t6X%a6n4IH+4g?jPP@H_}vo42q)vejtil51IHIMJ`UAF#*pXTYy*d9l55LA? -*O(7M{ySR84X90qToA7-ugcrJe1EaOo47Eaoi;#$uS1Gm|yok}4TeNdv^GK?KSrP0XH6_uKGBALVDc(}|K%VTy}nk6ExYuLFY4sQ$ -Z_Ms6#U+Iq63AiS`yIMP$cW;jumZ~D~xLI9+_j3yJKjR+XOv)P>#b_KDJBSrx=ix`UqoxMZK@yw*?eE;ck9?KL5E?-N1Ztar -EO{S(2&=y%_40f1tDu=Be?`{Qk~Da(kA7ZRQ_$bw-EdAtN9+_wGdp+zEPviyjC60Z>Z=1QY-O00;mj6 -qrsq6x-5&1ONbj3;+Ne0001RX>c!Jc4cm4Z*nhid30}WY%h0mX>?_BE^v9BR!wi?HW0n*SFjEil(3HC -Y|;W7G{+Vw&~||~=*2b!TB2;m6lsu@6C?0{?+htflI3L4>fns1;mn&iUnz~QNS2kgs}0XGBC4G>j?_x -zy5N}^{oBL)?O -UAq4|p?NM3w&alN1yU2TGLJO4r=&nXEb3h@yv5pxGZx)4^;94nbyNMfRe2`|Z_5;w+9XGa8w%c)4#CGnL9>g+< -y3amxK|Yh);6Qj^D7|ci_j^M&G%m|Pn3i9;rkKc*sWs(M#z)rseEkAEDkKOQ{X@UDX9YSwHyFkV2;Q06R -_`c%IVALkQG(o`PY-ziMS>%`eyuE>=lF_HjfJ3XOEVZl{4PEM%$i43LjSFMo1P#pWDw}CG2k^UNTY$e0sj^o68os#f<8TICAQ0p8khU? -XzLa*428N&`>CFrF)z3a^};1TuDh91uyZdd#Q7iroir(-Bjx{-lu!^!Bg6C4jM*M`|_yN5HMuc*Tc^ -@Egk0EPkW+dR#;%Q2%L)cY7vyP9I3#m^+(PN9hQZ3&%Id%1C8Ulafef0>kVPeV5lLVJeh{16U*bz?Zi -lsv)c4_1m`WejYO6ZKE6E@c0TteE8m(TY_1SywAfEy;CNapfM!#<`t+xVeFqxv5tvoZmQI$!p2f+DkX -W+M3&&+xwrcyx3g5{_^AO_UqmK{YT|C`i2j^@^eMiQX;x1O=_rG7}kwt&m~ND$#NdFUI1KJ553AA45P -DT;d3f5r0+j=39cxZe7DE<{GAWK{r3?JTkDib_0| -XQR000O8B@~!WiIdf4I0gU!>JI<_AOHXWaA|NaUv_0~WN&gWa%FLKWpi|MFJE72ZfSI1UoLQYtyf=f+ -cpq?=cl;350(doj-6sFj5L9Xq$~Bsw5RxE4t6Vqe#i}p9CE+Bdy5e-SO_nyW{aG -9Q|?xu}nn1oIq(7N6#&Vkf#6;MfNj{q5+QUKXCs?5Do1ImxmDGC^&*(SpOY?<;K-$Q0wr&AtAk9k6iP -wCD%s7+u7_2F2r0hRgr%V{m6z{XkfV$Nu5XtYbA`~IfxvtDzlP#2n(rTRc6RK=je{6@H^8YhCj|`q|| -K5CxoCWr>CbNvO+2Y%J0yS6--+iU2+rjSH={2G90egYg*L%P^p&vK`TMEVW!j(LdY#~e0oDn(X@Zh(vpw*A>efEr -{j)wU4IIxI}X|JT-4qS?F#Bhm|;`DO{=0%A~%7ehJQ0P@jIyx6m4{a9>SjWCJh}4))pl6oHf0$yD(}O -MmyL7Ej;?#MHaC?<%Z;-JgI9vn~L2sG#Lx%G|};xmOeWtu`F<1#})nGrH47JUORtiR~ -CJHw+^4BbDagiK;tR7xyYW&%Mxz*8Lk2J;I3+y;y)I|Jr%~Wn9+woKWE#`%FQaAif%Dmf -w1@-8vCMNWvGWkH>cyt672I%tb0p6?hwPXQhSBBfn`w7)bmZbx -EFk6iuCoJ}PGLN0B6QCsR#+T^{xSOGEqG-iY&W;(y#=S+En{D#3IVg-esDEj?E_}D`2bP6Ln9??+NYIS01Jyxp~&ZustRLEdaQx{7WLn!NtdL3xT+0opW?#N6+kQ*Ny8+#J`|iS>W|by8a1{>QCknY -!~yXj2QTX|L1K+`*g@R~z_w4lCPizctaUzK>v!H>=ve2v>$Mndem!r_lU{@FPn#beQ1>{>FR|O -o&|xEi=WL$xrr7i~++3bFriM1Gu%FNZSvuDmhA&q+OKEBBt>{p1Zmrw%%h&I3ZwQL!vYk%$lVtarq>a -P2g;HYPC@d<8K4_h`k}ZXb{0onbHAqHYJn+SRtGso?+5@+3#}wR{zy1 --gx&uDWZduOOYuVjgtJIAaPcoW7vp?hsdi|2l4vENa&fvu4x|wCSP5hD&b&1XFxi&}xZ_PdttH --Iz`jE(Zkr3ibG3V1BNl!_>S}d^6%{XQR;C70xm?<-YsK;;#YY8JFm^8m*3?Vc5*M<}lisFSHyyVZcJ -4Qt{MscxHr_gULj0P2HD2HlGa-s{mSL<6C`%I07j$HTL2c@ea~hTsuT?Cf*3=bm+@KHTn_tI-+k?q@6aWAK2mmD%m`>oWs#pI2006WB001KZ003}la4%nWWo~3|axZdaadl;LbaO9XUv_13 -b7^mGUtcb8d1X(_YQr!Py!$H_a!@Z;Wc83xD75qv$R(8Y7O+)k6N}igqDN_pKfaO`HKVp+m75QArr)>#thJ=)qx?PRZ#xVg -BdSFqY{H*n|;tb8YwrP1q6n>>wk`e{Dbqcxx6Xm5_u_Jzj&#c|3D$|C*gWxF3q_RTmi7z?EEA;Ki<8k -IuVz&lF!LvA8=LSBnId^shTiKeNsl{G4R{oSh;b%VfDYu)RMk;ld*@ohSRvtkK%m9;pf7*BSdFZdF6A -B?f$@VH=*7?S-0P)h>@6aWAK2mmD%m`;ePIlB}B002k?001Wd003}la4%nWWo~3|axZdaadl;LbaO9X -X>N37a&BR4Uv+e8Y;!Jfd1X?;Zrd;nz3VH8?9gOLeCTN~(8I8GLk|OrtvkDlP1o9N$)l*IzUZt6_(;CTcW`)rfZ8?2K9vx-J$#4}r8b+5BK#B3vo9)R8OiFt3T%3>{=PX%-IIGZ4SI;rh9_u)t=T -y1fjiBh38jYhVZa6!u6}~!1mEWx>eQLKg9b;m4LA$M^hr6lOEACWw4eGs_z!aIzbcd233k{ -h7NAuz+}NIt$Ar|Uf&gX!7W$}{ajew0!Tw!p5kn$0uD2T@_0KYKu%Wx2W1zBcA+S1OPrb-oJPf`*I)c -l?Dl?}6}1Q`4jO;DmP?F~&HM$e`ulNa)eBj=~5cu_bwC9%JQ-kh@uenP%w)w20H-d^vSUm}o54QdZMc -z(Z%GoR3<2`1s?~-5ms*nqt?BvQmOh#$&NelfI@Eos9LYZH=o0uOyqNkH-auo4LOf#NOliIZ;K)&!Nk -#BF%%_Wvtzbd`tCTUK;&%UV>(kBXagMSQBxT^pU*VhS}V+ho4avYA_aKzcYR{)XLV$zOoiYW)163ldd -Jl7rAITN??d7u&|exMC>FF>)!=@3!dSK3t*iv`e_}*{luMY#Wg%i>SOk%q-cH#N9X!CW{JC)7JD^p=^ -!n3R+DKu3%R^6!Y?bm0%i#xDCFMorN)urXKwd4W!(}vDlb#MXt7NF15ir?1QY-O00;mk6qrt&IW9zu6 -aWA$Q~&@V0001RX>c!Jc4cm4Z*nhkWpQ<7b98erVPs)&bY*gLE^vA6JZp2?IFjG>D{%G)Npmtc$$Z!? -)hJbti6s(fH2U3*CXd<4cPDI-Co;R -AvbtKH{0XlN21iFngF^hX7G+gNJmH&46y@N*+MmJTZY4{$&XYP704J-s%t}_R1gi?3m7Bb%n3)cjdBt -utR92S)F6Ar{OPPrQ&l0wV*$4q4WnxjuJS!u@WgyoCD=(uBuU6(~nJ*qhH5e?5e9bm;6UC1rOY$PBi! -_z<@1sqgr)!?^dr>ew=Pg`%qb^O@rpQ0-Vw@hslzupcfW2g;FhG8~yL)@1ul3KWE18-Z8(x%R|03@2J -GmBl4a6(W*IQmMKC>2}Srt12;s$^8PY|CLVnZZ06VB4S6baJjyeRVGNmCWWG^$UYj^w0CxZl|RdJ2d) -{1a{X$rG={_RNaglV`t00cuchem)UMl`p=4>^FiZUrO`a+sg)T^W$lYEBSx&#LIla@xottTI<l0Rr6a -+CQvozM*fxXp>ssaDjQ<(WCEpaSzh*-FFXL{5GE24HaC17xA_~I(j3^5@ZX2p)i4{Aq$tFngp4 -Z^#)gsj>dz5k>c^@y*ax028L;5g1(+g0E+^?Fp-tIL;9L340WUT<&IfMJ-xVv=D_Egz5z(re6+Xfc-5jSAx_Euq`6du?kZJh -){y-0@TGACUaw8K}=yDUmH}X3`sR5icUYaq5jai@bV*@3lsy`Gr(+tRGXf%QBFF`(=q$&N&*nc31`bR=fEg*E^Jz -e<@Do7hjeCnpE-bhV(yID5BggP6shV>Dx5u3yNzhJKV#O -9H(NfW^$iabZHF>u}L-J5=s568R?edo7OD-k2HlcT}oKj$kbq)NP3m8JdtOquSt7oTdUS|n})bJDHMERu)M|CbU9$Fi~{%b(TnS3LJt5C(7k*h^5Yj>4bU -^i26kRXwXcKAlY7Z`N5O$5L=L-s(Hurc`qD>q_++W`uSbr~JFj<#nQQyP2bm>%D#&1;!fC%`ToZEPCp -g7Fp#@3)G|DCzei69rFC6l-DKV#ybR=GaUJ!jqERERc+Hq=kxj8P_U>KW=f2lFcc6S9?H}LK1h(Y_m| -rC;?M@+{!d1cy(Fx6j%ftUw~=>F%WL$*rHp768k}a0ZmgdK|qjQISAqV5WG|m6Ul3)SWh-PhsWCnPDG|Bt7( -s2?X(72~pZ~YTWkAmoE*XhW^f-5<(+e3eoBU5lS2Fz5c{oW1>`d*1#LPk_kCz!&Pl}9;C`Ffr}KwW12^!6K~+N+INgI04vH&&iwWfU$}0b+qRg4 -EDobSM~B^H<|tVSkD3WEkZp9oQ?-xkqshRWDu1VLilkPgi`zw;vZjC+`vLHcgoJOV#XfCZkrbn0~Yr+ -M&fi@kswCWGMtb?PBY7DM=)H~#!bLr;1(%}D(#T&V$IT1mXNtV*is*0q(k=EwK_9bc1OS$nqJOA8Z$d -kOIzwn|5FhMl1f#mX=zxazn&e7fovus!Rs`Q281+I)oL1*bjowKx^XWbL1GBT??6v!A5)vR?^HfPRN% -dI2$lkN2djf}Bz2*+ftKy4!&G4b;JlJ*a~q2~Q=4N42e~RGwP08W?um)-rW(QSj(ktQJ~#oMfgGjz7U -X{%fdee6ax1IVXh;>}VapAo7-W2nMMYpCQEAq#^N(~v|B0Bvy>4x}qisqVI+qP*GmBz(rbc;YzI2B)C -ZNY{cV-ytaELn(JMiu}U(vnW`{HvoNgvkugw_|ooH72%@xfg2R-bvl{xyj2gm>DwXwo<(JyBG#Dw#R~ -7oByP0{w&r`4;;xbO&rzt9BVZ!6G~5jh1Ep--?`+K@J2;>g<5QGWkMMjSkI>DrvyxJBArRC|DW|nDFl -AvNOySy?;-YZrpXCpsjEXhh36_)1V#4S_{~55)MtRfrlB%FX)0j6LW7Kv(pryl5IHAC23#<&S9xO*p9 -pzfQniMMG@r|W1eY8&74&=6WUO4t{Js=e&}es=Nx>zcNOF={?=_bk@zG*{zvBaxQm58-@K;k`{?M*D( -g}Lxj|BDSz#1Tf&|=mS*j#q!j3vn{m+q9$EPGyQ^;YDB2elzuNuT!+d{RA=q4x+dV=BE`3;tZ{`1|%& -H3wLkO*eevP@*LZ_f%kk8ubE?0Tp-uoC=g+L~i@a3kd>SHYKht$Jhds&i -Ud2aYcPbQOA%*4AJFM9kVWD#SNtRb_JWkbFD(~(skH&Z_X5z(NVP%Z%^1z-5lzQvWv(Y{vepiI4}x2k -xipkV3{U42{d($TFdIeuDBV9u>ecd%d?mGV -=RSB@^94hm*YM2Jd0fw0-9>ThN+esr-mfA_m%+SVSBIBER+F}y%``e*R!xIlBFn$#cbCG~aY!b4AP2> -M$hGvs0KwsChRF_hIP>;;1J#9ZJs~tF0r%@(f+V&Z;qIlqse*w -Z*w8SIuusEiSAU>)faD`iW=ad&R4l*+cXhbk#LPPF5rRbE!T;e_7&aTT3fb4AH{w%I+rj)qkS!4Dv5v+zH6!@9&wL%TYt#zG8Qaz%80EC& -TYQ9(6IgvTozXsg{5UL2qI=ZsbQHwBeJ;?Ce%tQgz|S{#y_O}adWlNHvz_W^0*%rKjt$hax+p|er90h -#LjX&A^kNFx$XSE~CK@fRTQ6p49#Q>my+*HM)1T=NGb;t-hwd9CfS04^v_Vrx-iPYfzn(}N0kioCvGf%&I)HEj|IT% -D$5GgllB>MS@APc(KByT<5iE3rX$YlWArJYq-Zc@XO}Y`URhm_maJS{B$>1=z-mIPCw;y~%IT_G`V)Y -0I}LvruA%#(YI8peduHQ)@8GuBXA)_>iCn-HMSJ-@RDfP}a$@I?niUq;5OTsEieeBu2*)H*t=#q_hVO -^WSF7)avZ~8aWr!Nla|8RqgL~g?@Jzcac@*Tcc^Jg}%)Utmr}u9T7GAwUH;01Vx@60dtV;qlih(JL^v -aCf$3A#N$B6K-&lyZ4FNn8~(R!P2kxD5ETrV(R7-$MFk6{yR@;S5j!R0{`ew#rYtvhBU(tXu@#E^-05 -4K*W}kzu~hBn*mhXRL=Qt{*G~`{9k$Ti#?~)X;QuqG2CMGCL&Lv7oNJDL5peh5*Jema9`jtlXdHH&)Y -xf-%|Cc^4)XhQ4&UHWpk~pgUEm)OMx!!lKpmklzDxO8#bVgaL#Ym0Oh&Wj_i}-tAoErS*&IEe*kRj9l -fL8-h%73M$H+6P{#)%43$D9Sd4>@HXH^Y~K;mO?lglQixxTtOKf7yuEqTm;VOew<56~QGUMXYQ>`>>6 -`!XP8cuo#_8)Y! -hLy!F+npA%nbkYa~>@&d&LAl$I73t`A$oXQEaA;@8}6OfdHb;T)2!`-;owHi}EkOM(iy;8N@~&p5y*w -#3M7A2x&|VEDmNuSxBy9{atcF8l;8)-v|y}sJ2L8Zz7bis?F~PwQ_C2ONc{{4NdRYtHX?Wvb#3M>Il&1PE9X>tJKwP<3#1$Vl^KRQvg&@aUGg>x^mj!r)<{KBezCDEx$5D? -m6_yrjcOW#RQhE?5?A_r#iyc2^`Y&FDdAY?^OlcWi8Yo6(Y4=#2&AE})>zbXSNrb)`2wIz&7}pI&hde -aZ*9iTMJ}sXcY2a6EuLelYA*^6NZ>(-Q3P^EiFmRg*>@(4NKZG>{MDWB1@GUEEMT4?u_#n3ec6O2K%@ -@%a6V=?8T>-JIxlO=}p;eE9d`@7eIs;qsfnZ4Z5hWA*spgkwmS7Q&qW+D3-fNpo1S`@~tn{SkQZb_c? -nu@})FCsbIU*UP0K4-8p2746N6WiKT3!**MsdbX*?0@D&3nyf>GJBVwYx1#hTtX|?H=Q5SmP8DMG9=? -yh|M#ck*h6*gtK8RgsfRML#tQjS*m2R!e&t5%MX^)=kR~FZ8Fcr+JKT5RC*(hZgS(tkTnh8%7|(zpd0 -WX!or)FtJOu;8uzd!CWy}TfH4Lo+Zx1X;jVSzA(NLMIa@rP4SebcJ5+U(LRr8eDcMyf)S(dAV#IOj`Q -jHjBi5z(^)iRIeM-+{YDV{BgP~y{i1rkPa`|=;Xn)mjxK(y=!f2LWc{eC5y9kA;_*6Y{TQ?MlKoD2yB --4ZqCS@diQ7DTY)7k_&GJmj=neVWb6-PfM=I24a88qxhZ;l2%fFAeK$Eo^A{Pj_g`^nA -8ZGT-DP_igeE|mcuTq<32Fy>Sci(1&NdfG^hm0nJ8XaZ?np|GoHS{+K6F71*cK%6etqA4JUxfqon1&( -Cd+vYm7VQ=&v!bVXV0E>H2z+pv1TBavh(+iPp30kNCSn+svJQU%Nz?VtpU40coTNP;pOR|(}`2HTx&U -B*cf_gANF2+vj@{P{DftRc0tRf{V?dnxlFM%7{lRGqzl}Oz#zie>CxzXJc60h=9=F -Zb&_;TQD8UTptI{8nIxfYnpXVTTHbPY!W5~w_WUh+-s| -!T=Ol7YD1v^HMDXpsOCso|s2H*`f#pd!omd?MEnIvg@B(nlC!pGrI1I~tow=1$tdK_y)Hol1#^t4eB_R%7OsO+NMD -;4v{)ra;{ZMa!p2_w_tv78f;hDR8q1cFOEBQn{@;~8t5#YvBBm#!0h2oZ_A*oaxU+lQCo${Zv<&k(-@qzT{IXY+1Jt73VsR_`= -sQgb`BGJT~~j-njE$klC_N#pAG<7hIxxSX6`oR5c>7vstB@`}EPlcSU2@#t(c84XWHhsRJGC2IpX#+j -fla@9(biLR(iZiad*jwv~BodR0@ahH6AE-%D#$t9&_R;4OuKMV#RIDwaJVcmk4V3Mu#U6OC5Y^w3VjwaC07nh+o!M2lWsUHZZ+nXePX -RnICPgjF@8_cS4B|4i4%OtKM+q3EhJIjiq|(>QX;&tP5+GCLRv?e=5s?((~aQZMPpxG!eotdoN!6dQg -vL-uZKQwI(QQVeRtC*Co`b=7mFo*g(o*D*Ex%aw8y1beb!J86#K`DKVH6@0HAeIP9dxsPr0%9%_jjve -9@z^XlC3oq|)9PVr}gR#Hp^;z%2- -MHbk2erOGXpgh|H>TSC_GBBzUn+9XJ@Av_{<$jg*8Hof(&I4k5@0oq?Gg9?Hlx1Xc^k5f;Uah@n#`;E -C52Q!NkXc0@LF+==CgNFi^o2kfkB&jN$PdCw4Hi|^~twIfWGM^ZkX@_6VUX3w^8?%Hod!Ec5Z-OLO7~ -EGvZIL^r4{L?f1t}Z=S^-DmH|J|7)Qma0lz%mF7}@tjtSgf|~K*7_^Mv0Uwq%p2a?M@xR!YV7}p^``0 -GFKwfS0gt<`j#Ib>Y0vq_}4)#>H$#WlLuD%lHNfD;Hi!ZlGB5b;N6ixWu?kiEA5>c1}pFouibF}#2vF -~5|pZ>wWT}EG?+ei67P)h>@6aWAK2mmG&m`*n6ZD(%_007=6000~S003}la4%nWWo~3|axZdaadl;Lb -aO9Zb#!PhaCzk#`)}Je`gi{oJO_oO)>a;CyCSGDWKDK0+NMRC;d>%HsEalk^@LJ{*#XnDSzNOe#GaKEpS?UccY(N%pm3N~@GsdeQr5`04d77hI90m{vIh{6bS -+D54jPATTR5pHR(3K^C-_=1eLw6OvqbiiUoVFH0dc5z0SF=ASfQ*3S#77C9f+OAE;;3hZC3s4U>C>h) -$)EXkNE_Vh7vi{qz{Spf<%x0+7GvZUHCS28cDRBS+$mIH$e4@lfYi!08Q2WK~0(uvO8>r9L63zZHwOT0w3_<1=E!T$5Zk%B9Rk7B38}RxESH~NdFZ$sQ_z3hzL?v8W6^OJ`{Nb!LwXKyby> -LElMJ0grkqCcDRb(D)SxwK*){Rf?jh`NdjM{)pAV6KyJlI!PwMLmkb2HW)2;QjoE~P5~O6JglMIbL7? -TgAR{v6I_*1H_zcOL>WV6A-?;ae3m|Fm77YF+mu3L3jvJlJ -hG@07<39WYCJ|IS2>>EyXn`0JMHc58yw8%4ehy5UUE3OVeV)0%tU#>fC`Jp9(2H#Pw_At#eTfEdudW9 -REU)ToiLAQ4&>^7?M^NpRlCgre$R$?{fxHVE$h-lbMW&@fSAH#i$*h7nV~9h;0GlY-55{>jHTGI*CaswE2tYBP$7{;)kgYb2JxsXpg -itvK#T9K_y5*7IPBC#l7w^@%A! -9bZyS+QN95EnWtj7-p&qFvwy5_U;dfea3Ifln63s=xoS3$PRl;IP*0l%QH>j}Hz_I@LI}lg1U#r?B6` -z;!z=7k*0yNd@g2_ECWWF<|}kvDCLEJH`gzS`YGx=1Uw(HY@rmG62!%8o}FjD}n(C5Wd1jX)AaNRXUC -UBx+Ke<}g=ry|_axi&g^$$fBf>y}K|iRDg!tcGwBep0%v+LbwqKVjoxA!J35vM{iG`G!e&gbr*2`oWi -6GUQL3W%jt4FrLbF7s)F)i-R}-Dl-b|e?Kq?$wevFWNON}0@=*4WpOX&9TzPk=C@C-pzR*i=F(M=$6u9fwCxo^I9?7QU;h!2cVR_0sOt_sQYWW_@AdyXp)4zd>IwZBu<-5WCpiQ2Apd*tKCkM^9P+18L-rW*$o8WicawK6kjf;hwYGs+lyQbYI{h8x^@DdG- -lhn3{$Bwo1VfnQ#bqo;>Y$!ftT3owSL@~II8_D^hCy7MW+4JnOkrm6W3HLbtj4-HVS13!7&*505zg5d -cHH>_>Q#vCVySkR4?;s3}Ox;>&amftR1!2j@n*!-FRcWYsR3R!& -Nu}fmsgkXka@Bs0O*1T+`e%>yAn822Zvoq(UtWS?+ABW;rJy)%i|8#u#^m7ur?SAdI8yM|Sgw=u7ap1&Ay0M{g`0D1pDs2Y8KD8u*GUBK~&?QL_0zk_Q -ad?mq`zA9$xF^V5SV~oya~P`z-8tS69Gk(t?}a~Z_^lOCCx8nauh+nFGm^D%k{!Bv{>dEyZHu10`Z4E -2Ltf}~cd^{H@i6~(YpbhkIIiJ^25h3-WT#A>vzH+-$%&tuLo+QV=nzK7rs)4s_D}wC=-L|BW6szjME!SM^*NrpvRuVNtO{IPl60#j>D-~cUC57B6s58vKFZa8*m$TnPgKg*+l!3lmU785btQ_s=cqfV2Wwd-Y%L_$ -Ru75c`_;u_kf_JOu4F=?5^jX?dai}ys)}U)cX07UNIFMulNuoK#FLI7nasZL$vh3R4&FK4bsMzej8ig -@?JP1n>V$4#$c7*qQ{{P^QhXkJ7 -9;D9_Ifu-@3q*57XGI>s(931=`_6`x66R&{dmg5Ge>iW31M=sck7q;@uI8-_S=jQAS-r_MB)O0a3%VR -M$7ltdmK}pdx2Qh+9Yfb~ns5w5g+jYD!4zB9)1UQP?%`UPrWI -B>1ljdTDdukJBJFWhl93A(*%~6lKp2Dkoke!)pd$4gVom5y$W;va!5iGv?>-oEjvlk~H&XQgH+)>log -?kK~QdN!P2nbtk2euB34#Oe9`s@W{0UjaXFCXyo8toyOy>B!3Y?9A;0h|D!fcgMI(V>9n!8w?d;8k|P -R^H<_4k|}S;V~yfUN;UL-|pL7z%HR}f>N^5c;AQ4M3lE3n9aXxh!HjQF9!_?^GH|gd{X>FCG$9K3LPV -wwL8x5jqf&{)2&T7hElx|z%Q+h5`HpiY|wZk#Y{8u1;w_5k}fzN2H&Q%ED>6+0eGK{4BOtO8k5O8$D8 -eSs$HXY+zmi=uFsFdBW-iM9Mu1|D4UO}lXlHtK^>>p&{`lE@fQkij8Rv-G$9Jo@2H~NHcfY4-)wcitX -(bJe%9R`>DKdOY3rwEc^+uXZYHeM1QY-O00;mk6qrtevZBu}0RRBe0RR9U0001RX>c! -Jc4cm4Z*nhkWpQ<7b98erV`Xx5b1rasRgkex#4r#&uE{9o9CG2Js -PmAzwn03k6%PN1E}xy}a0$r28Ywp5zVvkeevx61(di>gZWcw^Z9R#d2 -TqNi@vl3rCd}Jazp5q0;!URr{GGPaes#?f&P? -nIR_4*^3gaHIPyj_vWZwB3TLQ?*5i3WrCQ@&V5&D<4bdD46xm$(ZHMcnj7j9ZBBKp|um#jgu42pN|ME -eD(#rPmMQM$Z;ValM?k#N33=*OG7^aFOc&gXOy1%%D$2KsMQ}5cYV}+jx~k@tQFUhwKyEGwzhLD)~;_ -2#_5$MZn=bl?MO-9smFUaA|NaUv_0~WN&gWa%FLKWpi|MFJo -_QaA9;VaCxOvO>f&U487}D5bdGKkQhU983GhLbUXCWbwD@lFbsxb(}_AoQuWcsm;Lrp@@Lw#TQ|diN$ -Qb)BA;{$^EY!SbSczk1;JPIcQL})$;k<`co)!lmlb+vxM#l(AI83Hg@c_ggGAVJRZ4Uqc1BwdO^R3xD -SQpWIjRI}^bd#%KG%M$6)b>qSnDja^iNhH%*7~k?jGe-~dB|$&xKWJEn_79k -2NyQnW{gT&IFG3rSx#t`3sq?Xu6j<{{yh^eH}!&$lbG@S?GHFVhsAV^TlTo+Biu6L;FI>af^T?sk3fw -mwpfA=M4RYKymeH<1(S9nRNOB$r{KXM2oJ_0ZQjSdG*2)a%j1m3`SgAh)S?HM5zyOu)#AGj4N&eNerX --|1sV^N%Y^x8t+unaOUapbMNY^0rKagA?R(CB7Z$Tf*l#V-06wnN*XcHU+kG&k#y|7yCXl~=&aeR8f)NmW8-Ei&v#2~1_zSTk{!x`#UvP!Hh-#p&+qAQhh^R4$L -m%@2AQbeKkPk{s;k}p!I16*m!mBZ?dwu$aC2SlNz#KO~2>W}^fmy)j~@xS865T1?9hrL_q9n?CL+#8>d2synzsX?C~n -Xmfze5(ZnZ*NJ`q~>&m-(K_9|f>pL^Ec($9?lK*#^7-{IG>{Gq6BxsA8X5rsu;*2LX&IurU;3LDGk7% -t=M;;+^ClKzgXF@2w^Z$j3rS)9J0zdtE&%6cM60%+eyxQ@!E^cYz$*F -kT_(IhC39gbd#eM4Cl9}Uiy`!G_$b-93o&n61%&)tGZsEs&4v)xO#adingqp?NapJ-PM2MliBRz;$o) -c-+HM#ofU2SP)R-e``|O1ebw&vc~{+5b=4h_juc%hZl%a?Yx>%2DK52a7 -tM9x&fXZm1@&)LDHTpqv`Rsr`bZ>qd6RFY5vAC-bya|tEku> -cY#~Ys6n0f3#o=CdpaHNr)3wMO)C4WNh1kMIH87_nl4ZNgt453V4j)d`G(d+QrattgK -^+afSRawud2M0IP(u}PekG2EvV5^9CBC$kz-yA#SO~q4un;LVCwde*-d9wp-rqo-K%cBPC+g27M5Y79 -{9oM*;xVu+{uDQN$GwEd))-PlErSR1Oc%hL^lQQO;{fUvECD3ZtHu+IN8God)zc%Ur)^|c -w?#~ZcYF;jo}))(+??~61b82C8LA$ReIdRBb+IH^|43D2qQ$$n--wE}5`3Z(_j%bQ9qKSW`??L}{lX} -ZdjJEQwzE5wnO(pIrU{Nrf>jK;U||HbU(qU#qO3}qzUojLz}3k|uvRt}uu@oer}~1I$F>dH#Rlf6p?F -}|hb}W6tn@vv@@64q!@*{iP_Rknjuh=*c}j(X^}ijg4J8ZC@L*R7JWQyEam?xaNKibf(a#03v#<}r+u -sL2RKC;hC)kHNE~ZG`seHQwPvP2b0_~~vx^Et(s_rTb3MZ8BTJ?eE-{;zxow3{|-^uYHe2TtyAbId`g -QmcY2j(@LgnUZg*WK#dwwai6N*#IJXr`de(3}Ti$;&dH{XrfV;xVs-Il-5?sDm;AgAldcRuJI9R}#)Z -XH3Co2l1jUe}{BYp>Olz0Zr)G_5yrlDS(>{eWT+iuVDDMZ3nTpmbiPeqyU^=aC~#lT;I2ST@t`4OVCy -VA-Md$QL?NQ8Hwd(elg&2s#7R#;JB9~j~s~cJ@&f+8=;=@_J!f)j8hx$|Nmgbk*Yg7a?j9FqBT_K`6+ -^*=yZqOPtyGq4;~>TcFU(B(tX$M5#D@#ef{RO)EaQg6iUiqSF7f(gSQpKXxiFEbP*2 -2zeiJmBK%Vr50}Iyhi}*l*h%abOElbYR-Z+Q=E^Sc(bAEm8ypjVw^$ssiYd3xnFV>ogB3nT0L -|Xsl=tjToi^2LHxmc#%uNI{#bRWT!2`0K1I_t)$?k^R82=rLYjm+5+yigGO@%90T;iP1(5jXwT{A3zF -uzH+Xvq-n!CkMPS@}u)R=M2W)Ue2cdxCg{hPU%VxGc06-9-L2iM{Q#c4ToUqisM@WJJ7+ZEgc4?;3ZW -`l{&TyXX^p@ubb;t(VhyzItt+tL5gh)}ndeYxFsx5oS)F7)0(hm`ZKEc4wWcM0VA!61hlaPRby(3Prx -~mYtFL7KnnK~z0WDNslymX_(#>iDRN~RbH^Li620ws4X08&Hh_P9oCPWdMZ!@v;&w1jXF-F5dN*nvgA -1KD@l=bpDmGZ4NQC?i_*+TiM4`bpakw6qZh#}#khMJ>U1%onJd-=)nwi$p}N7*J6^-rvwOPBdu+ph%7 -jZw_E|Cc7oL_a7@-W}FrPZiY;=m*F5@GA;yd7I~-Do5w)LP~`_t(?hmL)aaq7g+HI5WD7vUso_GUcNLkQl-uiECWt_rTyq;LBMOHK5{E6+6+u0#(1xm-ir~{IcrF9i%zj0AS@E!OmRCN+*rp=eCDeAtIcE_B!bG6k`@#Pks4=lyZQv{H~Fg6Mv= -|t2Smb5&#gJK|({2i)7J{7#cfWR*@GQuupWul0y9Jw+LmXp|p`_Okl!AW#efgR$O+lWSj0Mfbw?@1yz -1tQA2Nd!khMz2AFAeDA!i#(7(0N^sor1QUa_iVH>wB2(AWBr~>b-;^2s0z}6v4#;VU08!;`{)fQr2b* -WjLVYs5yaOeT72j=F~{B^k}^4Ahz2yk7OAjKmx(Xx+Dn5XP_69!m&camwi<{fJK77Ie --m#ST$I%UXtWM#JM^K@@4}=t7}@dBUZjke>10D1tW+ZZio_3=Dtsa2}A4mu$U|23u(>GGHUG<1LU`-< -<_UH)sb^n3;NgAj}jM!@fVAY73(y?$X?@9^t0YuP&{&!cECghX{`-T0gjJE>EvgF(t>mpC6`Sibyvx@ -p9qCxqP=d~b=d>hD!@>68U|bzqA%;1;`g8AF{peG2%8=8Tc!tFMp^MfynOj^KzW|p9sU1$ccw)B!nu~ -f!kL4f@rm_9;0?iWs%?W+3^doAqcDjkLJRZ+_Zr)W@}7cDk#Vp&u$&ow@uOsJ%p+{V2g!Usv8S_eMIb -rjXi~G2e26kAZWe%wcGQ4L7%!3s1nN}lA@+e$95L*WX`P9)LhW#LTKFcTk3nS_L->O{jw&ya-nmXj`I -rnw6l%&l2w$*cxGwUv_Snr5b9v(jmm%T@tXNBlnhaKqgoq`ah2Q~#i%#wkCQs^Cj4ZMHkO}-8DU%9dm -goIRz9)GWU?|-byN*pq>}CS(wqYQ+BZ)*|w358A}4D|;& -di=hAr5wfM@GL-?0l-@XMk9kwobuRYD?jC>%<7)CaCVcJlO6h0l(s?;gDwB~#pi9`kHgS4FjPE*zMbhf2$^@NSA~w{2TbY -Vt3sMZ+S_p!JM?h3A<6wBE54xVEbZsN!V|0@Hp8AMiGh-659zQBP55p=WDxfosUJhM`mIjbeA$dv3OUR4IxIMA!EU!t`LRQ~-!v7uF0xSDP@8C1SXmOuTAXlZ -#wSeog#hj}PnJt5ukA^bqdZqP3zVyutWc)oh{XAD%61CiQ-w -T%>3){Y*@{DiFaq^zd|XEWU}BaQ@B%K9lal(p<+a7@D2@^YgieEzYSyf?T>ynHsB>C(d-3y0Hte!fyM -kBUV$mFIT;0jWRc{gYLrif-S~8D{8g79!DIt~!nT&F7bqGs=8xnp{kEfavF&hbJMv-@wUbNxHd@}v*5Ks^KI2BzBW+Yw{!|ar?-~SpQRKNZq#0+qKl{y6ue98(AUMm!#k?+LdN$==)e+uhB<0BK -^4D}BXrPdIL;hRiqxXE`2-0ASxyq6Gs*KL2)9fSVB1?x1CmeA=LaXbtErP*)9={;Z9Ljgcm_n99*ZAa -2OU)#sF5z!*@AwWAQP)gtURc-=P+D_9bH`Nh2)-Abr-D50`i2n -Xl270o85Zq(yuyX9;=m!iac6t~MoNv_r~QG9S4*21-nD%I`t5)zsCyz89+pJ$!%0!z6$~$FckJ@PQw` -Fwf5Ha4meXvAt*9aYwzi2Px2y)4{1P+jv)d8mrTbiKzK&ooDV&@RKWy<+wR_h$p-NSA2l!#+P>HgHD8f>Gdj -}oG#Fr-}6!D0QQe|kGsSbw}9{@SN`748|vw9lTaAVPG;~-*IedXqhxHFXYSpa*&%Ep5O2J7&#Q4q^UVLaU2B@QZuP^P)H8Q;Cg*WvyfjwAJE-om?<3(Q#?qVvb@n+dd{OAOl -0Aal2ku1fpeZh;IK0G1`1$}Ypi8-hap5tW>cuaWJKQ(tKmcUQg7q3siv(LhZS{A)R%2X#08sx`)1*@J -QUg;uNB{X1}F=!~-9hRHNBTNIn>o#tLIdI62$=6-C#~0sBm!HBucg5$w`SpLrtNe*K{x&b^TFr_oRYs -G<75!qV&#l>-u3o35Lfc4U-JFXp-l=QcyJ`>ecxYAW3j2B~E_E`9+SkWD-`Y%(=p`Qlnh9-G=H*z=7+ -w_NmiM%sYp3N2mZ$NICJoz@n|KUw_PJ3;9j3?O%NjjlMyIxee8^?Z-=J{$&` -tqgSCw3L1OF6sn`VL(X#kYkzdf^0H+}pO{>knaaf)Dc3(5 -1OD=Q3(B;+T?bYQE;_~a|ggj?iFlJJOoPVknB0`Rf}9zVo;Y-$Zl`gyAhgHj$taOneplNOX~_$U -)k{_znslXC^m+yENW%$OwD-SPsVfhhm@zW0yS$Hzs1awc7}GgK4D+V%Cazy8r;JF@E!bssUd3ec?NpY -75?HJYasf!noqC{jEDD^(cp{!swYlS1v4(i@BO`x&&>5Aa2SA?(3z0)@ECbagkGNtY9L?u -=ST)$5)I$Z>e`5g<1V7{>dr(o1|^s&nBx4Xs$oxe{5g(EdF26po4N66&v#>78N5;D*E~YHzG*reh)Jy -Zws}wzh!kJ*wllTx$o14KDDgc5_l`xdf5Qrj6DevRK}wry#S54?4R*6eaCQQs2J`bvv-7E7=3(wms;z -XdQ@K`4D8RU1lx3hRf$-z20YtDo^-5o$nZelzN5iLe(mZCvu-D(!BqjT%@-wxJ_Q9XSjO1|YEQTYVkB -4dUL)+8;r-LqSkT3?8ns~(=&8QdT80OPDKINezO>soLs|q;r{)$XEh_zGeIM4S8Rd@w8XwmA=5IcMUd -1!UpcT@PmTN@6aWAK2mmG&m`=I4Y;ijT004aq001HY003}la4%nW -Wo~3|axZdaadl;LbaO9dcw=R7bZKvHb1rasl~%!W+cprr^DB0ogC&p5OD-MH^pH5t#4~Z5vDNk{LBvW -#Oad$bT2>GF_U?iNMM|_Z)yi4&l!^$h8UGn -Srmn8FCIVg>+3nVPwsKL2rNt+ -5~+d=?J7fh0+?LO2(B?&93Z{huLVdXoVCh;W{xMc5L8&>+f{+SI0Yds(DfkmM|@twjmjTv1B7(6XQff -}N>tKx$Vejj&00khq4$LTTj}i;2TxJ%cM@H;(?Up11te3TbEEQ=}4w`VWtk!&dnmmMzbc)JlGH6)gxZ -!K{8_MulPO2pGS@@6eE?m8m9|arklue;AF^E}jLZy-D%$Fd!&60u7@_m}(7^4w8C88y_NqetsEX(qK0 -;{&L}j_qIcsK}R<2t=@>fK|XPOpG;k$og6OnEXV7+~nq*hHa75$4utO_i -f*XTf^0rx1Tw^SW!m4#4|Z6-S+dd3ySO4n%X%DU7))(bWD#QndZz-T_b15-2`xcF(QwS_#M@oS(y&!B4nO)Zp -){U7)4rf>7bQAp<4aUUS!aaSTOvVz=ENEq#Ugd#n(ry)c2U2(eN(XhKD2(^SElN}C -VC$UOpaK4R{LX?EHO9%#ej(G79L*kK+ZmidDV~X`v)4g$8S_Az9#K*-dEconGmJ#~Z44eDJt*g>0#8| -vr5Let~dAy1D6`^W -OfRKtkZ|%o+&576Vpw*eQIBMb0MZ(C|G4eZf=Av*CSaFXXEr#|S$^G63!m`K-YmSh%++N+NVMInG;5^ -IbJosTMDET5y++DO{Ecf|fgu3gAO`A=5dxqPMm4bkk#lQs|&C8r#6srP18+jJCvq!E9 -xe{`vL_9CIIqII>Hqc}*D?$#eAK)KhHGOu6S4h`>n6&?UO0E>GNf-^Q6=!spv5Igyyswnv163~K9pKO -43sz)Ng7Z4!`UGn}F}MPzLe2e63E`{f%Qjt&xCOfLu-Y;;l5vexUT7wGl6dl?!k55O5xo_%4)3Z{{ZCaT4!L1XmOoQo3K^hT$;sKpR#p| -;{CIY~*b`Y&?a{M9&XG+jv=luc3O)U+rAn(nO%g4;>jdx_17}`iW`ZTzrVl_T8p@3$^tGUkhFeR&ky1 -#9)N{ZBmV#4DTp{V<;kTGn$ga_1CrPvK0-aWhIux(Y%f+NvE=iJ-ZXw5|iq;gDISkC>J;nTSAW -*VG!wb`U(0dB&PVWVWp%@Tef{#p=ScJ6{&#a`d5nhm!np!^d;(0-A&x1NwTPcxHbs$@A>Mny{F?aNp7 -~VOc)JHG3e2eidHM-MlNIh#hhtykOs8%q2^M-%fGXLAx|M=EICRPO3W7bOBDQleReRA^CF({LpLi`Cl4!M -!TOlwym>snz4GqC81cu${LTp9*rcznRY$%C1fs39mYphX6h2f&ZwnvhSLtI_)9K(mMIibd{Aifc!)oB -GL*zZA4uT*CLQn-RC&JR@6bbTu`z7<(b9)+CuSnqt!U@`t5Vii)%4nA(r@JU)xqVVIHR`4DAyk(qJQF -JaxD9s)Pt!FW0i`R3=h$wf4@KT%F4(bUpq?Sf!t0g3kOEX;s@3o}n}+@=>T{x-;JidCR#jrQ~ba+K+8SpKOm -jF{7tV%9eoJiigHqD}Ch*wRP!tPLkP-jWjoFlag+dxqEV=)E~ndctNOofn*M{#F}kx2t8o{QCKqoBMG=#3z -)CA=pt&ke1U}0NW-q(rohSY!C-LCcX>QFkS+)U# -cw!4>n)B9R)L8}sG4Xg+y-#@Y~PG;3{k1~b!10)jTfqDgs(A;y8FRim+X1Y4DNWG<89>bVYTe1xaFLh -dsJ4ob)%+kPr!{EXMO%eJGJ;CTRbZ>USe7oA7*%#OR%!?-0VJhzcIUHo*O%`(w!mBsN`=@O9KQH0000 -8045ZeP8&*d;duc70QCX@0384T0B~t=FJE?LZe(wAFLGsZb!BsOb1!IbZ)hk-+V35Eah&q1ieqm!es< -5@x`*9uuMN(br`&$g+lp@y^q&0xGI?krQ+Hhyxl|V3DDFq{U}}JmJ@>zO6n_9vO9KQH00008045ZePS -ZAumN_N>0ON%K03HAU0B~t=FJE?LZe(wAFLGsZb!BsOb1!XgWMyn~E^vA6J^gdrxRt;AufW-p6XnW`6 -Yp+QZIw37N7wCcl8K$$ndUMQEkZWe6seMw9d~E%Z@>2i5CBPkTszZt<~*|-i3A>ihllt5pgnc4f1s9S -nic0$wQW`h&+y64&hGB+PNo04)pb+H>oV1Oz4Jf*-_FkIMOG_#xy?1eD4HZIYSmn5wW+doQr)QX>?gf -!@LAHRO?j;=^}zt8A$GF$rmPy3CXH^gwKm`Dn|fzwPaX3&UGNN5QC?3}Q>x^u%u)qy^K6+lN;>5Lq>8 -zl_u@KhF0ukQ;$^vhY_QmV$m$wCJU;sR*Uw_JV6((J&e9^;*;!TPT -5YmTJipRKT2}G4%3)4N@ha0ftURw|SFolB$`n%4!W;kPL&^Hd$`ELzi05 -;mvS!{bi{)O;#3mrqPaqzgHSZCWKF5@=1CMn_g}kdGfw0n{rv^^7Z?2nIMq&I3PV63udy?!2MX%+YNr -w>AQ`ts6DrdFJO1=_^Dncu--X6lm>NEZI{iq(zeyhq}Inpt&2KqvMc>6TQ)LcoNSv5)9ky`)AxT!>TL -M}9?JVA0M1%S{Pm}#n&azv3Xmr1TsL!mF~5MtYgi+E-`tpo&|IJmArMCv?EC<91Qc_!ywK}pqK=EJB+ -t^1AHJWcmlxaOQm3zlsJH|5e+kD_7Y*%$eS=R6IH)k3JUD6KsI1{}ybf& -Wi+bHV3Q%dKA;m^8$H_ruJr2ln-?FyKb_lUeSiGJ@hL3p=y2!d -ySJyW-=5B2e)sY1pXVpXe|ZhhpB$=v_}|m7c8*V9fAHUZ{p9J+&dxGV>e_I4bCiF`zGOwja&HQu -M43lea=o|1kAayu9Kt@rm^Ody1KajY80D?(bMnfY7+ydn($ikS!v1tjNVIH48w@)_k-Own(MP5I4-Xp -k~+Qj(5KFwAjvm1KZPQz(FdOY$5jp3w#B#H2~0~}BQvKXP$Cl@?D@L@Y}M!y@4hu%?7XOK#RC@9ou6# -rBLj@#w^9tl2Mt~JQ{)FOEquwAG171{Q}R*Y71va# -Iy^5bd(K{1*jcxkQ0SsMS=2?C}eT~)q;C^&}`w9*RgsBtfE3i1{Me!8g$KgaC~Mv+77@|8kJOMS%W9S -MYS`Lq|(S6ff(GG#P0HU+^!i&D%7o(nh-TnQOnxKV}JW(A4nfD&wyX9)J0M!O;ZVk5h`<||6||zoY?- -n+rI`Sfl1$e4hoXGoTw|>!$7ozTi?IztJ-7GxM_GY%)IdR;H=Ca3=cEAsy}z$;{2{~ZdY}GSD4Hd?l+ -G4wk&jis}=?3kPJ4%zvwb%8jVI|I*i7_qAy8=jbRHw*}k0I3QS$y0qn{Jb~PUNZM>D85iet+(z4cnot -;)&J$5Lf*28pjk28;|N*&SvC#rk$TPAx}rZ==XiL%=EW7M_}=m3gIa33x}gFS=+Jn;Dc0}nsy3jz*Jt -ux*7mZ(+o@Ds?f@kAXBznzd>2}1W~aowFob^R`G6=~bOGq-HxBp7=Et??G -?i<>QH2}u7f%Lt~zz&Re$3DyH@I2@E-!;T5+#ebNrv;-VihJTHwr`=Y=VA|f9LqlI<5Y;fpMM!Ujd3; -Iw)|Wgx2@p;fd^)oY8!Ak7!U9T#cDvfUtZ_>?twgsj2=V?i+Ko{XIwVjN9oyz36+|nP5a*V?tan)H|dD3<jnhMgrrVa6bqfx0ct>~Rf0C+7Zu-!< -B8D>qxWPmnjSM07>T*7S7@I`nE*zLMobmqije;O6w)#G3YNzV+<`q12-E0wJaCXUZf3{-QZZJE;EfQH -XTU`V?$|_zbmyX{p5*Y00}SwPkhzrJ=v%nr6G{SA1@Fk_&S`XGe=nq?hnx7L -w4wucD80y>8q^V*3O0jVrj!{pASStwL%>mXM}n$%}#&84uJPJ35o=kivu=d6B_Yd98?8@ovzuf+N=16OvN1H)#q_!NPDOK -L0Ff}a-)#Hdl;CyImBq_)kfNGd3}m0HtKiiskH*E(wT$ -4pFT?OO}`XmR6@s1OrY+a<1(eh0oKeVM))QKR2Fm6S#BUz$1{hHb81P$LNo*Pe;JmO&AdWJ&E&b1w<_Tz^XOj=~tfs;OFOt`?NeABu9}o^EoqfkG1i+pP@oTu>|>KloI|%WGJ6WkD-r&hZd<%+Ta -e$N7)kt7O^Uy@hH&8@w8>^U|wpIt8n!eq0;bL<(*l^gRnuQffg%? -%5ifklfQ%y+MgJlyfIVEf2duM0nGhoPvW9fV_$-VhXlwC!6#2c5hqrK9co78Kd%)FcK4Vhs)Z6bN7Hl -MqF<6~E0~Gm{#Nw3sQ!<7HoRGyns>{-iBJL#)wjvpxPU&@0(xZ#U@$anl)5lK;Z)Lx631Nuk*p5vl*e -@Q<0HTK5FOQLE$xIp{M{fZy69_^AH;oU}v-QI2|L&Tu!@g5gt&FxL+f_$*DTq^Q>z;l-F8@cK%$tgMM -$&lMVM0R)F^HkQNmu?S~9{?SLSVK&}>W4MUB|9%VREG+@}Z;97f67b&<`><5d%ZwaS@ZS@Evb5m8GYr -e6h+tL3#M*<{z8!~jv9a1>i1ofe-K1+jwYns_N!i7_-Zm5+eE^NHK4l`xlzM~G8r1>)B>~1t<~c`aQG -}xpaZr8yqb@LW0(4Xg2kQ)jrVh;xs<$Yx*GaL(Q13rWj52_Gi&Cd+?T&q->8wRA>^iQ=?6xpJNScBA^ -z`uXPPy!GgFR8o0q18%hYq*GwDtM1=hHG^9Od29Fq<*}!<;*W;cG|)QOn -h7rw)-wNQC2Ah&BNU$RvaLEeIP1(Y^&7`SGd((k5nzvj%T$sUw(ZlaVGc~*mLHAK1eYD*n&G)9%{~Xq -wYA^usqWc)ndw2EU9yo83^>PUbK6rE)GMO?6_rH;h5SP_RZb%Wew9@%b(8 -xBpPy$}6b3UUk?%ZWAtAKH3yh4^?rnpa5|m`bs~Bh{IEhRoslSyhIFf${TH$s@t>>_2bPO~`bVelBl% -I032ir`C4U;RK#x^ts+?yCa*x^V*_zqFZNp-5m#4$%RYqJ~QktqiqugmHZqale1Dj6m130xvifCKx($ -CFcaUIr%`M~=xrl<~_7^M|&1s**Gn7vKQe>Fm(|#}ClnI^6#bEe^BrLST34R+dLQAf4CDdkq_QUbI}* -WwJ3%fr2U??{xxLY(IF+YU8rQFqbg$_@z5_;d_<`y0a7J)p9a-u#nO8u%8~4$zVA+mF$U>y%=T#eB2$ -UmZt&VYQ7j`%KO1!pbsR>WprsK-flL!ipIC+24MyxCh|(cKni3`CR^P&>kPAJjiSUEz@}BlGm21PlGw -^buJHV8)M$yBIf@JP{ZWrVY;2k90UJBZvm(uJIK(R%qK^R%aJ7O2eeL#6YIZS^%90h!e4DaH) -5e5N!XsMcXQPoP+2L4hC?i}Q#b3N>-77hK1B~|Z)2BzzTpD(q{Dj-SXtFiZ-M#m=z7zM7E{qULc;mq^ -$&`5whNMHG^MU;EDhK{V4#JBJCbLPFu&qSVF0*SVl_Tahkq3zb?YBXq -&w!q6;7c0$X;;)ZA(lNwi}rV^3)(i__8`cvA&<>KeW35v@u0k&ZE1;wvwngOOtI^^FCq!8*@E1M|h6b -N-fJtv$%33^DCoUhS9oVEG=y!DoTn00iM^6|uk`BcP1+LZKYU&l#xUi%?7@_p0v{N9?N&Q!E35QsQ_K -KzgBmnkrB?vvOYq*%Sz)kU(Y)lInt36Q`l5chD@em?x=ce~?W;Ph{d&hDg%Ivk&lnVg^?C4<-IW#30y -iW7pxA-3;8jJL!`6|Ijryjk5YC@tX;JTBBZ+3YaMYpt#mG3>!!L8jgo%y2BOZYbO-u{mL3reMbbi^uK -7$;;zoN-$5Bq+7FI2b{CKt||J(?szxL8x!^k^s=llF`6dfz&+EzxwCRx#p(^P -e{NnV#|K4+^N2Xcn&L)XYg=;X1DkRb0)msrOW?T>+7YS?DYYcN>Z79yH0e&TTV!UBd+e)k?X{1XYyy3 -sAFfKQivyj;24h1?;Z5t7XXCgBypmY9TDsv_8YG!p}EivG -2>jghV29|;F)-B(T_A5dHAQ-{`92FuV!lW`%wr8o|0PPz(6iH2m#pmuSmRMD{nD>zz8j~S;}=p;<87y -?oi47a@(z3y)9ABuxd=B>h3+iMY^I7VK&w+aCzB7aP3a;hX=rA0n!iE)C0gj4}d7bs2`-M0-%2%0Mv- -KA-Im{Gaoz92edKqMcqnfTt*EVaiar@SH+0E##D1Yb9r-*Cydtgc)GV$_WO4wl^C}!=*I1;w&A{EqYV!~EyMSH@qUV%e#`)=-OZ-JV)tH#|^Pbt#`$_DVdEXTpXrw;uhi -1BC47(^)D{U9$FZ$`)0b(ibU*&FgzP_c}+J0Nv%!6x*JZrO=wMGclPVrmtBa!fExk^q)HQPq~Jfy?dr -1v~%^FgI0dao}ESvSNf=0GeeBsLyL0B;vIWSRoD+6%_VFot?s*gU*OOC1td9fHFi$!o0v6aNgZO)^6up~6Uy?J{zrsr96>Y>lW6XN3RX8tP&Z|X{uoCed94LMPMsmoF7myc4rUyd%E^ -dB`O*TKP%zA+>p7Q)qI!|%(I?-3GE@rWyR?I8N!e1H#?DE^6D1kNQse2ctIy+GoH)5I&PhPp3R5m43a -zc^6fiDDxi4VW8El>T-dFlO9vG%Wj}}MMzO8EuVVo|Y$r9pthenOg^AWS{@$G5$=raJ*fMZq5E!YSJC -wI5O4pGr7b}Dq4o4A+BCqsHXm?CHvR2npT^dJ*BD)QHy+t>p_A}Xc?HEhtU%i~{vjD=_rkq~vctJ%Hd -cd}RSPPmAAs0M*nmu9P#M&x8kW4tL6QZc3ruNqFCkDkPS{9~&Ecqv}Xpi!txMR_#hGIN+KjFE{ygVRP(2VZX+iYy~G^KA`m$}>A;R3`Brb=j3&BdL -2o_?}viP-;1~(-8x?kJjUZJ;gK)*s}u@_9w`rCD-4#T(JvlPyK)ykO!0kNyN)}kac`dv_{>m?Qy6!cI -(vcu|i3_>ZepUaL`u)+uP}mVkor!?or$6{`E=QzIMa46g^NpsrKdI`uh5Sav^O|VLI}uFNpjxFeWA1o -q$;P)QdDVgC5YJh?z!RC*;8}buScXlcKVa7`!RtafwDQz>%LZ-%)|RnRgBc${HeIzZAghL1GE)(~axD2iqVFiVIG@(K9(<5hjX9BzqaS_rP1qkJ{!$HEk5V9s#?=Vf~I>Xx -=t~GF7&JySW0qnNJD5gr7L{|>|U7U-2J#IKl2*M`SeE0grtI?RS>4hIbx<}z)x{3IYhh!?x>KMOh60$BDz7kvrg=$K9iM8;(YYqb_|?D4nU&2GnPx(f#ZYa# -Z!%A!Jo>`ZJ)b=M;lw{iQ*tCLVT@>XNn%yuGR$&!vUWMTEur(JI&C#3b;&AXyI5?LPB)yd@A(WuJ5gK|OfA0Tn(tJ@*zXmIrq;P;KrB6S#@ -`-;1`nad;&KDWxVx%3AeS{QaCTh-TwL^1v1g!@v!NTR1$B$y3zFC{1!y9d0bI#%K_`{GFw=Mtf3l=mB7Hsu_G;YFp0%yp*o$a2NC7B+Xd8C~iRhoY -nZE;7a4xQiqi<7Qq$*E@_#>If1tT>j1I`&gIH24D2C9`iXeGGG6XJj2z_=F>U==ryENi`AeS)A*D*nb!Wgh3<`o*V`L)~U6OLDGF({1ylrH0 -O4QpjZooDw?1qas}~&?qd?t1z+>e?CVurJm2R?!>NXWY{z+Sk7fyl*G*Rgdaif(vu9cU~fjPziDIwwj -;KE(4z*QgrM=G&XWxg1iz<=v2pqN?%ZQ@IB0?}Z7zE3eT)Cnjc)_Z3eaOZ&ZNDmI+kqKm*_t%SAtIrt -`aIw2qT~c#pkj5>hLS1mZyh@K@zKjx4tpZ{eFtf6vgrS8 -IImEt7=!uL{lNrp&Nks!a_#+$rxwjHSVULMq*utnQ%*@9dkFYg)3g_ -hD!HavieH&@^u>Zbfs{H1Z_nhqx5BHnblAeFslWpm6ga~eJn>Ytp!vcZWGf~~I;Ujp_U2EY4J6ln+x; -fP>}u4JP3YL&<>54U7shLw22m#ODgZdd)SZXb|e_#zx)j^0R$AG4#M2&u -0y{27Kq^u=3njNVc&iC=iPAI8BQ;Dy&BM$rUumJ@N*#x+S&ok+Z7A%9vivVFj>PKxi~gkV}31hSvUdB -wZ`jU0p%uPMDXQ8NW_7fR8@vo)W~MG$C55bLddDko5VkobcoE=eWnDM(`i6yt+z&DpowAOZ4pi@q$x5 -cDRR=zgmqK)s}@;(K@|o`Romns;g;&yTUkb9SL~GE76~byh?pD2BBI5LtkuXD)|`8pCbl=c2H4D{zPZ -MrKvJD=Ddrv=K-r6#y&O2Un2Zj)TlrwUoDu~|E$|hnDPN3L^|Km-(y+#2K1av)a7sEp^;&;v>vz>Y<; -DdfdzqKDj=ZFI(0ox!>Yf54C6~3L-c{Y;eaGkDIy{cEvv`XV6GtL@*)IU7wAU1Kf6kEPOmE-H0{%#>2<#J#hEoAig{Yi~YIKQCKo -lPxdFZWLypmU6chXecP#cKX4MItT;R&cCHD=m4-xwCzDvtfpekFMx2AEf3sTS>|1Ep#Fxpd`xN677iS -`MnDWxP@=y=1|B%Qk3Vq+L>-j|f&nK^PPlX52xmvOC!$vS`>_4{`#1?oPw*z_vdfg#wpidG@BX}4^c&|6_lV0&cc -+T7_?xcE|KF^Cht0}*MFUmEXB?{~^tj|}Td*E-KBR%(m^Yr=34h${V1 -BwBc+R7lPh`nkMx@(9$-DY~(y3n|M6wW}`kD{bdjF9xpilx0REV>XV$aA+I)ay<^v$iI?&@DyPlZ|5% -Xd*chec|!aa3g)%fRG~sSC1sEN7{Hb;6IW -9VnQ%jfzqrmez`JAf&KoN(1q3L%7 -sx0R%lCV4g)Oa-%D)GSfF#V!6X2~t@U5;e~Wj2iq=9%h -^_z=XMW&s#O*s(92JrfZG_~4{bLKpcNG~Gdd4SZFTF9av;?klZ@6R6PB107Pj9ZaATNlon4N)DbZ1Q4 -Sz;av96LDTUnAW(#W)3s?x_MQiBmrAgYvdmoPNph8BbWvejs$|nXT$&!ZEfCL=iTs6T+nze%ShJ#7Gx -;LrS82R<&UK8&4@u5@#8O}C(O`BUj=bVCe$_50j>{v<7qi`G>md203P;9@R0HO(Fw#_sFT!#^~o36JxE&tJhc^F5FWzG~=_+|BLJUc`#82^-TrGzj6)k(@9IJApjOMtv!YE!X? -2|7$8P#H9(^4rtz=(xEN8VY;+d{Q4q#*NDJW~9kyBGjWy4RO4xW6bZ@dieIlY?+RQ%FY`)K!vdc~V^)4934Z^A?Siho2?NYr%yW6_rp&e8& -3dJN#s{o;PoY{;~7t(ML;haCCwogc{4S<~;_?d@kInB0<3jYBQL<-*;}`1?d2@Q+2whi!qpfTc;VxE- -B3W)GXLnUfqsPAADPvtIiyEp?L_X6g`a2pjGmysth?)#&84-%^v{bUQP@Vb$dU-QOY`Q~o`42@<^rwT -pI#ICa-l=vO+|sBz1diNf|RxqwCzM&kQ5$jBC@+!M*jNUyQ@@gmvc)!_t-lM?M-y1oD}qSU3?rr%w08 -^H?O^Nk*xbzqGZ*}+L`z8J%YerdrNJ{HJgAdvDV7z{dQl2C&SEA -6Jh1Lj$}Sd_MdD(Cei+!Z3d@}+36rmBaDtXjh!J%@}JiN4z?mZ=rcc< -6eiplsR|5}7M=HfuPFynwdMX0mMFmZ=1h9nl;j1o+@{rIEJ>T}7A;kCa=sqhxvjRt0ehYTGi> -kO1Le2kRu3zfajwCt2kW@bCFaI0>GbW$Q`!y8)6ZB*S&xD)RkY5qtf*xx49iQ(~OFNsm=|KKjPn!>Qh2(?fz&3@+priaxu6 -`H52hS$z0N6Cp*}>7%7|t$o3L$XG00wjLTZ0hhB$O3b1<0_IqsOvkK-X`?M9YPzNQ*}+-HKi0c++~vTkkQ%SD -GN*7+|Id2u*$g&`o2FTc8r>O#MwLP1jd?Y>n`Qd@z=HP&z@fvU|3}d2Rwd<&J*B`IcZ -5|Hf@qYkO}7_2|+1n4x+6!qyseOXLuWFXl1#l!|$SD?xJl6#$P3F{GeGF=HQ0_Xn!&d6QJF$#$<~V!F0YvGjef*Zp{yMPxEm0F6F3UVt@6fz&9G|DjE^U -o8uEFE``BMCyIMfqN)qHby4(~?)d>}Yy1^$&0kxx8}GYI>s24`lj -({9A}@WHX`2v*{R*yP3xkht3!Cfd%)x^&s6Dx@VEq3DP)h>@6aWAK2mmG&m`)Nr-hpcY006fF001BW0 -03}la4%nWWo~3|axZdaadl;LbaO9oVPk7yXJvCPaCv1?J#XVM4Bh=Jh~6N(4YYI%5Zv6}+ASyy#bRP2 -isU2Zr2h9uIc||$xCs1skL081G$hU-lT_6&_~=QXOCABgNV32_G3;D-yg2qHa~fQx9R^<@B914JvF -mj)m*?%sYo0QpRx>V41EV0H(L>GncSP0HF3rR)``YKy;m5fSQN%eVUxW#IiCPb2)gJ@OqD3*<&qbTfq -cT^#mFzgnMep&jt!ibgxnV0dMjd%iUs^UZ7m{tjSl{d1tUvEyH{)&1ZRO+EM*H4(DOb5AD53Hj|4{T! -KV1qdRXB}@eg#a2KL4)%0Z>Z=1QY-O00;mk6qrsw=7ZQnAOHZAasU7z0001RX>c!Jc4cm4Z*nhkWpQ< -7b98erb7gaLX>V?GE^vA6J!^9tHmwW-SMY^jY()hTyS<@t|#QLDOC>$FHOv`UMm+UUw;rdCGRH4F>w7gcGD8%_-uW -qFlpGgfI+Uyc#*XZSiwXja*JQ&zPqjs0Y{?qi*;_1>x~*J_#88ow#;%~I!ey2tMm1Z`i=&Qp^uX834k ->PlKH%Jn9#Z5y6bo}G_XW@el1v$1+tEp?@rud_uxR!x=vSY`!%*rb)wWA#J2*}wuFI9im2H{4V3#}9u -@s~I+$EeVwVTvzF$o=J~cUCyAzSe*!h4(a*7;G?y!F0^epl97NOI(Gv}ud#YxX_%N^x(Bb1zCHNx=4^ -Iy^!oVZ=GXZi5FddAgUZqW5&*hobYU`F9rA!>tYx|ZOt_ZcpPjuw;AeY%tLIrG -^Ov=rHB~lN7rLJ5;ySC!VkXSb4+~va%%@{zF3Tog&d#@+)EL){fMHW&W@0K}$T7gb$qHy)F1LH$veLR -Sz&^`%Vf1Bh?}1vC6>wL+MQUV)UaCuAb_Aq9Z%QNIv6VVc7gslFwN$)gvhys@>TN$WT2?zfJ2*SWVSp -=Fx&pRTi@aQ1jR6`02jOvZnJq5i1MFdxF)&!VSTq%EYQP$dnXXiQn -HKF3cMU*a_5eMa=eVO8NwvK_po8ppk(@)3nD#sH1k2s_0SXiV1{^Z=q}7Or18MqN!`jwBUXa2Y;Gs>G -A%3MlQP(26vSOo7ukao0_Yx_B_+boRYQWGY&lZ^z?no)XN!|9w698M<23a9rY37MKUa6G8xdwQk;5y) -ST5ZSJe5-D188!`=Q8%U2t9q~EJO;%ZD=v{hUW=oak!1%Zr28Jx?5 -n|a?L|JH);xpdK1wfqYer@cLo -9^v~yGSC6-a3;sKMZY_}Z%s&0dEnB=X#MgMuQx0r3cR -eh4aq?I88Tjdh5YNef;zb?dz5=)On>-XnE=nrQm>uLp|RnZc|5lTC^6%w*pKDFA@+E!*<*e&g0{!o%~ -LHI@`W8MDXICLj=?661OAa@1i8^iaq*Z5oXn&AF|I`F=Ra)NW8~9wjvdwk~XtCt#H~#=PNwm&Bl`ffa -DV(DI5VPhfic-34Fro;xh|IeKeUmM;2M>Db6ci5AoEw}{QMW5| -5Qe}Apj?g;uOpsVYSEY))SWe=8=0dqbSf#(2bN$P(K_<-B3pp@P=hsu+e4+x>$IrBE-D-20fcS~n2Dx -UxH*7EK(YuXDtL6W5;H4BYQPD84RX{2ms)kDoiwqt*(6}eSoo9Rv~Yt>xuIy{9|!iu;8W24fjVqJaVc -sL8#uM5SfU6)A$nQY8*3s0K(L&E0a43T0yF{y_yZj-E1rNV*wjj|H(8YdrIkkO5-Dt&iwoiy68qd3aS -jLPHUd_qC@z>9HyOw=5V`vYr-#SKYH^w3=|Gx#L0Y<-_ENdF)Ok -f#)bAqhz$5l38<6_J$~gfyiU!_#P&z;qo6cFgLmRHn?YnYYI32Kiy1I}-_9|EzyPzyoZ^hLn$}Z$Bms -c{pHDgHg~)WLIqL4Q=nS8Z`Clh1W}ZprmMpl9)8uc|!(_h@=u8k`+_v8~hN8CotK7G4Pln3LHQ`*!q9 -GtWnq*!xxXo#D$~IF2Eihg(8S%5I1ljpFe*lFh{-Q{5A!PZ_ius_k2i*+k;2~L_>cW -NePtlOClj`d74GLY>;9FDudK#+F4=9WcaAl)2>T(u^0B{hn}X&P8u0`82D&N4e9_Cti%XM(xH_T&1eV -3{BiH1Szn)f(&SXOitMtgELp)>!$A+{cfGibWm!N9(1XI|v{DWTigMeXyv9?!@c%!7o>#+eT2E^?}S+JAY!taAl6%@j=cCmh>a`$}S32HXvKByxx-kU -JpR@PvQz;_(Zx9J$r=QH(m+8R#npMFAlU2ag^NdWga@cUJL^^|l?%F;Ix?A2%F)Z6;qEMBA{VKYAeL2 -pLg;rL)+#WwlQ8?60(oNo0$$SEEU1#e#BT0sU%ByrF0~Pt+fhC&|-rmR;?xvk-tJhfOPUU{S0cbmY-4 -ticch1$btYrwcu_U8Wr%;RJNvokGtrJ(4l%6!c-*NQ(=U^m&)XzD*aX+o9Zpollfgt%ayu_y!GAQRiB -fvSS~y_jB+FbjHg^b@>R-$);N9fkMwEz(OfXy4U2rp3(SFE`fe(+KJbv*!#v`G{i#icvQDvs6Q&MY;5~bDF3C=Ocqc9Y+P -79!vd($I;zHENap8xT2cbhciS{2SkwRRu})czY?T-28XFlFtNv+YLX_p>T3%t}}L_GlY)WgU8b#TJG2 -hQoAM(o10L2iTOGA%EUwxpcZ>*bf%dTHE%oUFfdi?p6@cW$pY!9Gi~3L!trvtKM?NtVakM6Z4w&-lG9 -%W9J6-jFAXT|&2~B2@In_B;D8nYkPYG6<}~6Vf_}{@(_Jw!F&{xRq7p!QD`MbQlsTl(ZqIU-=p192 -k%F!YJ*~WR_U%-by5S+#`}~9>{KKMn0o^%CZBsN;7mH*E)x@4MRsp%_%|-CLD(K%VLhqHD~wga5NV;3 -HlIeD}?~B)4b7ek{HSpm~+HEJ0Q}ONwy)6wm~`I -K)`QE1=rBuX67RsOuCisnH5TLgryfDtF+@TGygNO5kHC5~gjo8T^h~1Ho`gR}X(fO_I -Y2hBi+|RQ;R5lwxQ!P889M?+Ma)Xr5A(|MJiFlF61(qPYT`Kqyt@GfAKg>o=r@$21j5W@C;;7Mq(`WXyh$N0L2GEXd)1m9973X+zEkLk|Z8jHi9RSs5)LDO)xO!Q3)4K$`88B$>xz*2-6G -Q0lqlrmVoTvkXIjdFFVV29CYPU!)cWMMrI8M{sC!q)fm -c{BPpqZvzaV?f#RKJw|n}W7DQv&{@(s(mv47-S>)^b7H+z5b?mzy_97C+KV>XF;hjF)?4 -Bf~#oPx6k8_OowFn+Nc=i!jVg9YQjL)Zcf@q2+J!QDz@ZP-(gI=6*~crpKymKZ+%KzyLKKrR$U;Cmc< -zc(sK^1)*^$z1V3PpTS>ya{Dm^h$|ViM5~58)H9u+7of+&%gW^ix=C(1#tpLRUERR$Vfb4>(6$L${CZ -ZZ9zFL_W8iu243dDGFugV)(APfcPYgShM3XMSTktF=aKeVkQtu9N@$1+{7lCrvZbXl+SN7ZV9?%M~3?alq)C(o1T -J^`J^;(Pk0Q*q@Pt!E`=Y9M`OQooz3!S_c8uLmKW-INF49i0vQ3BE2tdZ#rZN|tZbvc%c}v&rf<)xji -*pRDyQrh$$X5&YTXr-q{|0Nr%5qjoQ0RW=x0_&cV5s^JV>vK^q_zdJp{vqB>Md@_@(I)yntk=bUoq+H -`{{Uy=ycMjZN!SN|90NNBh#BA)8a`%B-j?wL@p8VnQ^DkH_=gN31#n=YU_ns@=!D`UZ@?4m;CSOdPx&89xOIyGYrK{i@Bfffyb -K7-{{04kp*gb{+o@WJZD0tzV#oyS-x%&9@@#9Y~dGvP`=k-x^^K&hQR8=@RVwUb4u%|mFupR#W+Sv#R -c-YwtvkJ{@hGBe1?SaT;bc&0;j2}@7&ybU$kgeEjTibiIl82K(_`JGV6EkNRLH#M_g(FfHPgKD? -ZB7qN~r)7QynK7S)0Ue4QnOZrl)K}PjbexMEjzLvD2gV3m}n@vvn%WaXKgiGu4ev63aBZgXdp5yo}=G -I(jfZ9%7F3KE-cb{=fqWNbX`e-1?QApa650hhsKXY!^L=9GDnVhH9ALNNFm=9^KcB~MDxR>pdwc$K`zy9hd^{o4j|Y?6s!BZ9)a9iYUiS^((ujrtR -c56j#A5Lm(h1j?t30W9(i2S=g9fLuZz9n+_TbJQPeLbWlubnyXUZ*oqnVY1Qd5n0}6xYNdJ=mZ)V!h; -b&%BpCF)V*g5{g8gn*3DWK&H7wdK{k<%tkX!I+DQ7iUYd@4$+LBaby$u$;>?!0a;24|m0)L^I08O>f!jZI!V4#*s%xN;+*`&MCpy -hi7XP3YaXZ>+`v*flge<`P`-X=G|b7?>Se~zG~;;&%cZUy08(UwMzFMzl5)UG-csl|>MGRDMZ1o{R{P?6emuR^ps)+Tohz%R$X-WhdAx~sn2A!dirFINF -CL@uKYP4^F$!Qv6oRCY;2?lQ+4M-q6Ny<$WJO9r4Ag2WL!3VcM4933`x(%%C!t{#EM89vHKQyeU6JI! -(Y|74Hh`&~Mk8t+uhN2yR%c|z{0X7jwi6h=V4{ql3@C1PglJyV3C3BjR**1BZE<0n>QRxqjZm8DzgeB -amBxk?`;8QRbxnm!_&amG1(IMAZ6AchbXDkt0!EoP~H!3f=cmA*?J9gPirj4UY0inGGCAv93A51T1u>a -Nt<^*Cs)$EyJ7gC3Wh$)IA%q7(rJO2nBvc%42Fzs*19TlUz0?iQL!Y)v>8gV#1iPJAR_0l -TSeTws43Uf!bvMQ9-QhT)MUD`9r53=!kbmy+lEJ~cXNqhQ{W=2|SuV#9SO3LbIkH(2Alg%rPJq_@$Z> -@APTq5h$x!Pdv1S$R$S}lVIhoDfaVB}FvTImJ^d=wJgT>N!clyquVktSF=yDE*9Ef;@Q?6H74 -{5VtYrTJ$ -%KDdwf04;e)H{(X3cfbT4{~wGd@i$_&+$$%eVe^Ai9P&UhM3T#Rfh$7GR;Eee@=|Xug|66qVzi! -#y4e@`L^Ln|6GKG8=A%CK$2let+vx~Lv;-?S4vC}^i@jvv@zK`H|o64^w`N7%Y_rDSSABgBkko%E+sd -G)L@_o}-uty(qS%Y3y(df1gHZjppBD%GMI6YiO -&#jHyq)0!TEU$qY;`d|OaKG?E0 -pO+om%dwH*J}ls%if*^|e)7P(;CHMf!dvZF_Q}69nR8d{` -1DnbxVw3%z_VO;wcRR<$WK6!q?NwX0_tGf9Y3FDyk -aEh_sakkuKu|lD3yfz!1P|6^jtQ$b4w8A{e<1Bxh~7BfRw_837qS1}w!_Bw6{C@7lYK3*X~Uv~X7tV%7X`6yT5Yb)wK#Fw6cs?vfc*; -7_R#e|Qh}if&QllnBRj(Irn@8FyNjn`3*U{9Sk8$WkN*7U5ZdqB`cT538}MM--x}z<^sQ5GN&w>H<_(Bvk#bU9<&!q7Jx4<0)$1ws}6+rFNSakQ}lcHq(EZEHZq>5e( -rrs%P^0u-A#ceZ@W2FGVEoyUavXgFc9{!+qBmrks^Yy2VK14nSp$NY=@$47i6Bd8!u*c -yh9L=v -K>TB;#O{5j)qDPtSn2?9hsp6ysNY`u{5YCHB|A%~HY+iS<#}!Ah+`8^&!gE%>E4>bg5?xb#fkmH{)Jw -*^LKzZ5gBG_3ZY6m8L|N5bF1yrbq4}^WvAh6NX}B-mBzxg!ANgwymiUo7d}>Xl))Sz&q$1OA*tnmQx$ -0oa-duY%Qs2-A208LHP45R~e5fH>!+GIP%2+kp(E~L)co9@Nz^=u*VBIZrpvM?s$3oBvZg2b`RKkyPI -U)as6nu9}bG4(t#4?Cr`oo)W_%XNeW?_Mk<@U8qfb^e{(7G>PhlAdE9?*2^LYDYh8F9l*zDeK`zVZ&a~Y!!_E}Cir=r{*m3oKqTcEoD(JR -%|KRn7b}4^z;!#%b3W(dZKfI=Zta(motL0j0>6l=x=sK9k*4DIOqiv05 -TC|{B8_T}?@ZlHcyzsq~uJDHWtyGrjzLi#0qG4$Fn2D;A&Z$)+nN)zWOn`Ckty=XSY#9{Ps`AQcVRwb -{vURhfc=zrdv+_$Xop&=d_OS$2XDpz&m9?_qZ~3WMoW6bnJo8d?#uv-8%O_1;n^!P*etKFI?@cSoUA7 -f>lC^!~RR<2^Zea_$W-H^jtnWH$PjK9rd-$w`lk84f2fo8r)&*=Z#zqsK$YXX -f_iCXIgnA&kIuk@R8*c>yEfoVC(*1{S7B=ix`!8SG?Mgsc{rubK0Fm_=m6`|fLqbWw2H? -pyYIQ84&DXWwhcYAY}c%?yQSr>9qJQdUNLrF&T(PmiPgEXdux^3@h9gm>0>Q<=tPka>WB0<*6-nP!1T -x3aqJjM6@7<~XOfihE;tW5O&}#>DYGd7LsQ56x`=hIobl5HL;>`byG`F?IO94#|iA|NQ-DvV?o8tQ20 ->qfc|%M=0WMUyi%bMsv~ot+5JHq3$GC5XNBoX-y1pT69TPc!;sgVlh8G4;sjx^hwD`kfvW?kcIV1G&w -Aa67Y2ZVqJ48nt&SW{7{5r^$4Moxl0U61Hr1pQ4Hmk2WO6csg?sbkT@3EukqAE45-8wl)!PFYHJi!%x -G#sX=%-!tT`OMR%qB_gBe9(Oy@~CPQZk%O|R?B3TDem$xWajtQPzj0WlGtw?LL_CG*Lc3fM}h^M_rgx -Jbv~kq#sN1Yg0@Njh#}6eW)^#^aVV1E{B8s0Scis4d`Uh@Y3SNI)2T2{8wj2a=ix;#f(bL0pq5%@(uM -AunGw3f5rXSZgdLW=V-ziJHd)7%anZaBxYP>2<8~-?ES`mR$eRgYPv}Cd!hP1*OZbR9#D*nHVz -?bIHn+l;$NRrIoOD%>ycOEuFnI9Pt-}IXcS%E~IR+*O9Frc6e&RL%732neID30`^A|5zw&8a~vchiig_ -k*QWa0x5ofGZgnnXh2E!3>we%E1HKGNVJPLR>gMYb4Vt3AUquVT0!Eaj)OJIZ@ZuSSBX)s7-NFq -cEeAqwYL^!sD<8>*nakl)rIyLbcpqnoH&kIBC>Yp#OU2|9`!3Ik{V4c+6=1qH_m0EO3VDmSt;LoHuiF -FRXlEeFJ4hI29jJ~sasyzvJsr3g4D1Vr$!~}nkehkc7a) -;wr=K7lYp}&U3&xzi{NmAiv38bBs;W;sUxE?mpFx`t?riz!Xy@RWqXM3lTOT%#jCM?=XTsf+-hPU2#J -hs|&zy~r3W^-+_i^Y5=tP(oh2+nXVHwHQ*pS2k0ME(lcX}wkz2HSbKj5BUKCzf78dw#EKAm2u{3JCL| -lCmZbM%}nPF?euQKKO7jv+xmQ-(kCC?}HF(tYm(!wvM;?QwLHWt -_3LOeBx}ZH~z)4MbGiXNe8NSB`+<-+?01-SX!w*{2@W7kI7a&58(fo7|r`8OjLwb0xK+hU_sqJJ^QaQ -dVr_+7Q|7CrKFSE&XSOq7AP1dGDU}lG&XKz_pVfGnbAd~Xu<_KQEB|Bmocc;_#KZd`blHWiRz16II!H -()HcI3jO2}KSK$F(<&S-~5ab8vuj6vb~?c`|&ygx*z`?B(GegOpqw{U0+FTyt3W6Y_96J)9149ac~dL -;Mr4ACnFAf#C~$jL9$l1yD-^1QY-O00;mk6qruwi#d691ONb~3jhEj0001RX>c!Jc4cm4Z*nhkWpQ<7 -b98erb98cbV{~6cETGhttT&g?y7l4*ev%|-XJ?7Q#}=)#xpk&3U2D)L|2+RB$y?zBj39 -7Z;h@obH1J37!+T8DM(-dm^{yd=+%?)b_{~&kuzD*?H-}$E(@-w-rFCMZu=|}PNvVXja3d_fuPxSAI{ -Acblueq!Y~Ia$@}U|tasu_F?=9xC?@LQ+?o~#8zrsF$Z*E^C{T~{z@N3DW(w996S+k}g12`m*Gzg_U> -yc9y(bxY0u54c>!G7hLbbl7g3QyK&g@-pMpiU+4apNBIG@vljWCr$8yF?qt=@Y{1O(J#hp;EHY9lwYC -dnU2RhkB|pNF6zN-~H|8%{oNn@Tuj32;@9tx(b(z)!T1#8C)04h$=KLw%`(u>ES-3Q~i&WsiOkSU`3@ -RJ=mMNQyubXzL2svgX9P!43)1Q&=u#E!}dNSybyeP-^1pqppePi;IW7FdN&g1O6~3U-}|R3DMe#^di^ -Z3CCqWqp^?3Cs**--&2=?l8jHIxN(v+cRVITo33NooH)@e(t5)`b%eMeAtyN_2c3ug -3P>uua5pu6~y*zf?x`sp{9@{F1pMH$b=Jo96F~-TqdfHCP&)-LdpE;aGlSlbL0uI>+~`y)gq5qsaDG(zfNLZDr}lmcWS=MW>u1BrK&EYN=1cMt5V16CaEryOdSj8t@>@0mN_<=uTn -M73#D%>U1U)T$Ytefu|!}2p|zDPmU&Sj)_PVp-?9q&q{-AgNpkZkuUi$`d@A$Vm9FY6(!zQqjm(>wE`S2ts>;JGs*-CR0vZ5Z0bN%ak?T?yd -ZebSO8UqnqR=#&T>(0A33Fd80l<_uN9t_>opt;&nN`pvleQPS0v@_epc#R{FL&YeZW)y&L0V-7R#a- -neWY-X7rF?myCuR;%5Zu2unQp6*>zIn*+OTPJ(Ty(Ix7<-^~yi2V9Z`9tUIBZ353K$ZbKXduWre;;vN)Qi`rACdJ1 -mO47;bI7IXpdn5xzQleR!fK%J+gySH;X5DKF$t(B|dgtLJC0Ps10_!*9>tynKBa{_y;XLdT*8+}j~@QI1^aQ1J0@7BQ3ZUtP?L%B0Kta`-k2u0ZN!6$oMln6F%g+H2&X=#>{pIj);fu55oY&$Dp#hUa_ld -*|{Nn6NVkUY36=;s$jy3?biUv9~Apv6p!W{Ga8OLv&cF`jHvsa~O47 -Eut&j#PE -AzMkIHHAv^(Ve8FOAe=7&;D`{qX|Xr{pn!G$On&q6+nD+-wrZ?m+dq)U#xs=(rIT$Wj*11vYZ_*6z1v -{9*5QUS||BAsP|WQGR{>T?Gtw0FoE&q7aNs!xw%mnA9`{!I~*!oYwq99YF;}u)S8xII46&w!X~rGAg6 -0D*PC%j|6OTP)rSiG4NU(&||b+EPP|Zs$4C>N=$X;=hCmrD=>}W$whSu-QU1Ar{^JvG^2t&k__wXTi>^`P)A@!v03g_!zz~ZhBSk?IPz-p4qBzsgw#r+8;K(;mi -UprAD?E)-zZ)>iaxjyi%W8=-bea%b!BJHQZ6V`LYf+mA*rF?2%#km^55C_kj0fgGi%Zo^#wah~_N>|w -N|CleYzO_Ig=pvly7$nk-zQ#iWK3W5gXo6TxwayG-V7ho(CYmTe33O0f-Ute*vJPA -tT~K#uhP{V@Vn;x92P+ogGVul{l|8H0!EuQaz^SKp3aEzxoHB$t0k1Sgaa-s`ehsLv!waa2Q!Smjfx7 -9pzFMcMPMcxxrmu9GZrpi2;v)~RS9b^cV!^?I?=2tU#x4FPx`KrRC@f*waAIY?00!4d5d$|=E84Souw -H?sf~S#7oz?8of`;}j98;q-y+hL$H4eyM;*MCCvm#kmK*BTu`>w3O%%UYhK5fIvV9$cYri~frnOCVRG -@WjE7n*$w;{jedYC$mnkt;sw0$C$&!Amu|Wn|@Nm#gdw+v6y}O`ZMf$Q+mw?p+k#-EG^m6n5tga;>%K -rPf#8kWJCn==~#as}nM6kKR(JZ_)VypD&|pAT0nRe@;f;F0#g1UUtBAn5%(LP=KTwz=J^OthV{f18nK -TZaNtDHt6Ub;nhv!qTdMz7XquA!0=2q?V9e(sHhTRzyc)&qP;^5mrp-}s3cdD`;FZ*VYI3){Z)~IksBqY4mILkPRM@k8d12@YJpj;mcT~{fV4}bE| -P1I1OSX}P8y&ws2t8}8W{HmeHp1Y_|FgMbR!BjJi+KLqsDS_PC|1ORF*TUWi<40H5`W6fIy&uzFoq;f -!$H~-amJL`PB>1t%Qcf&|Pp@?7!%{p0hCiZTG+=i8_yxl%?hGzI*%qA$we5IY?)>WfVg~L;Gfx#MHM8 -)QJYQijJ`H?(TF2=E3p~6lfOY#l>z?mMeX*xBvK&`h5>5)9nIO?rMrI)LkP1n-2t|+}(fj=<%B4&Q@D -$HIoIyy!3&pJ#6o+9yIARn8N0~vd{d_r^ppLDq!RCQK&$72}*ug{6<8hqoD!bD<0d37YQI?{KUxoLwj -Hpqf5m+xmrwhQP$iFh>PLD+VDd%4}t(r5}?yRd{8lJC}rucZLv3jKYyTg0wd!9RM=$#nlsKd&BmAE$UmH&Bq|tIFj#0 -&+0BDA1q&^_x{01}G#z4kfb))P31H_{mhbd*61FV=>x_z&jVP(Rb;TaFZ9^JwpvbTw#B&0SlOu&Q<$e -=`9k}mzDzH{m67Zc;7XnT4HLwIdx=M7Y_v${bCNZl>YA(@gFH3gM -NA27#f}HQ%f|Nti6QK?4S=DV)zsp=|9kw=5-`Cz24d9_s?vLT{z50N`y-@#s3(U42OpTOy%%X0%mti` -=<11_gGq(y_y-|kHVJhAZ*8nQH)%$DGgLXYiAC62M{~FR~auT+ct(SA*mG=G2N9NN -hSt%1}P`V9{9>Xi5SA#xVf?o-AM4z0DwkkoZqb#{j8|K>>f$Fep3uNMxAFT1g_JdERUpNfv0#216iy)#% -^Oe2}ukj>-6s5?6C6Xx`V{-uj&V3KQV}u$Wc|%LNTQE1Y>WAvFqOgo94$RRJ0q2HOV@uH-JewpHe0Q -)z=c)3Zaeg7R#*EglpNl(_rofDavE8&Sk~y~4F`|X^&8f?^JgL`6`IKoPSr^khPbpPmXzxcdK^nsN-f -tj`=kl&SVP;U_-zxwA$Gt~Z>xM%)IEkWz5Z}n3ZEV-`UHi>OFzeXlHv###@pRxaAOiot$a%eEn*^R_E -S}1Q|Lu(sS$qjhyRBZ~`Emhgtkq?5mG9o@;_8!LT`0fKUb9XK!+_YllN!}#bUK~TP^F^q0J>YJ0B?Gy -j$ge{2YZj7s1r@htPW&}jxzR_%~okdY6D@+^2H+BDK&hHa4RrOO55SUVyZEoR|3nkg1nUYJi6zTY?iK -o!jy6q?=VZ1fl|-iN1WI}{n1MwCAg7jWNHgG?+&+Dc6(Ol^r94dia;!qI0iMS)L;1(E~)Y5!$B!uM0g -k_uk;*_+vZ$ms8FHpFAd<7c~!DqJ;nsX@dqY-sSV{nunA1OL(9!5z~s?|9u;b_N~;8&WmU33WI*Q3;0 -&NlvKHnpCK$m5VN+b!!QE3bCW&L}?Sc6r&_60-HJ+tlb&fwEsXvHV!EM~-46n+sbT(20p&&sU$i6=3w -laNX2G>NC9Sl@-0gE<5mq)z}La=zXSk|;MNt#9|AXhDT%yFIm!b~rclzRpuLx><_ -ckIpL1;`2u06X%WMXg8Vg=bimAeenjZWD0^iF)4-uG9-{b_1quB5pie -ai_hwTQ7 -f_(XuOVi+GMh@ryJ;mir+*DKcIf$mLKpNZGfN|Tht -T*5A -`=291?~TduZ`}Xu5uvLr(-CT -)QzXD3LmQ^Fkbd7)j{(92pCfO~T9zQ$91NZ$DZUn)R?=xNLJ1r>9I(?puT?wE^~JE?Blq3WzO -rEf52WVW$sEK6nB3+3P_9-Y)cxM)ljX6_ziA27_TOk)&8762S!HAS0RH%7^{zvCyL|H?>eH$Kog#o*S@OmyqWjWlbg#<&dqPNjt49P_KXkn}Dvj$kE)) -IP(Bj8BX9JVd$jDsxwZ?*{U@6S2$d_eQ@yjaiDxuwiYadu}L1zv$Q^t<{r476Uv_^Xv-qHSVWtEF{K39*ER -6XU~d;`56pi&efJH#0jOp2z$mO22xVK9 -QFbO4DYxlOMf^rkHGBSs>drWVNUuGk9w2@PWc-XH303U292O+0wkGqw`ZFL|D{&5 -31z<=4+YWn=GJVT!D@$8!veaa@DPOKnML#c}F2%s)AWa%9BqSPZg$%SiLWlWbOyyE{tdwcp?{^d*1N6C+wg9T}ROW!#5KagCQr7@A4WqUMemDz5vGFRr)NftY%zDw8Zq -Cn%fh5VH-a2Eq%4xP@h!%yj9S`_A-La!Q-!Iigv>q2n3|#638>DiAz{pa8Q9!+Pk_b)D!k5}m;%a=b -FWwpA#xxM=|01-0S+dp{t=&Q&7@5vu_g7BXMW6~S9YlEG?Dw0M@oMk(@oJC|+-=WubhFl_#j9-f4nGs -E^sb*3Gtj}gVT}exZ-Eob&k{yZEaHL?9>5C|p9IDVXlhkF9lu??k7VQhAy=nZIaXh;$@B+MlIa2$N` -}6g!)P)WR&JJkGVfX|2yl!pA%KM`92I>oS*}Ap@)0rVTT%PL=X^4Ty11HtAIT*ipvF|MjVfBWUu=;PU -@3*;+vE3xcj~7tb8O1rVbCI}we5^SpZ>8Y^yVlWbyc;R8CQA3!rP~m`75VA{oug*U>@vLB-3+7Uxd_d -2MVST^URMN_BKH|-){-+};Q@!Q@8RV#nrjNTg|fDIRQ!+a-+l3W&mTVcaNm_{+x22_l5F_|93Y&f7v1g1I>!Yuj@w2K98S>!N@n -oBqw0|#lLl?#Yo^Gb_HHZNF~8{D~r}Np+X -a%2|dm$%z%|%q(%_-aOez5)c#C}f+O`;zc=_eZbl(M{gSkwZ^mgJn>dS$BfYA5=mjTUlw4ke4A0%$Tg -6s0vdiu5ZD9Ss#VwdpjU9mz4<0qVXjcE=tFHp{|GmwkRhDG$b}oPFAIjfXPoJuX2Wm(0Ja^Q-O$nQLS -(Qh=P?+ia?8xJluDzuR?5E}Rqfj=Noc7>ZLyyg@=g8;I(ly|0Nhi&8uTk36y|L?o)Yy`Y3};DP7~rzX -Erfs6blILlv%K@=3ITRCi-IMsDr6two@l{n_T2e?_kPq -mW2?WwkKw?lY9F-~eSQW!^DkAgTDPPDwab`SM543H4`Y$bn|e>dz?qaWIDkVNjT14C;6&WlKnwWkx?C%rb{cibyCWgw`L7uF!uta8)f+`M#s)ebumjrf#U{wdj$xLPi`k@N>VXqzr_8GI!OPz1!{Na))W)o-<5M3sZ1Q?tcPfNgiYtJEdyyf -@{!6TDMRS-KRzm34O4XcavkIFvG?h8nrY6os5-0^0GMz4INF{Hh@}d((;&4;FI_zS=tEnR)BM@71M1^ -5sRevfYZWer0#*zUi9`mDn!+0yUC;myRKHrk-Zg`bots8TEH+^iq{L^Oa&s0@4QOo7vur5x9S(&N(wv -xF_Abl0Fdww#Zh~E^i8rW+i{9=;Kq^wllIixT1H-D<1Qsyz`mR)Z*0}Iu==)qSbZGZ%P=kMKxoD#4#* -e$m4In*Xf;^3c&98MIdPP?GiEmO1z!s%@+8#tfNr8}T?rUGGB20nfT=YY7aGEmf_s;Y8jvWkO|?dRjv -T@4Tw`u?uiP!;oN)@K;x+TSni6M8vLDR==@_}9j3;hk!L}%98@GP#S+5VR7g3^n>K4@SEo&Rrn;&=TK@j&ZXQUHAZ>5#HtPUnT{ia@P5qEjsnAFCKcL>G1{$V)UkT*=If{u1lEF0H}jFa?Ku_m$ptA -?;0_(lewo;|pU{TQ1c?pU7K1E+dB4GAu!=n5qN2T3_hK|h&Py-CiyI=bnEkKx9R=cQm@NS6OOSlKyXf -=oAT(Onsd<4T-rt?@;;-);-0bTJjV`9^BbkN0bFk>N!PRuOrvWW5&+8uU*}~d=OCD?;NwzXJo_4`m`>=y*OWFm86*oJ%r3qijHDCw!pO1R3BP~c>9XPCFnyqzSwVQQt3wLIW28 -&H^9JGvaqs1FhLh9YslmW^O4?$I#%pp4p%KMC>*CHM_28-JdT#Kqqrh1|n4~Uf-Xupl7m)7pr***KVW -KhSXeqIdKC}aNf&a?1y{FHJFvDNnDr&79Nh@RXGXk;QoXF-@)o%{Tw(5bI*-(~Y-_pI`ys!>Q>YN7r( -!QBZ>$|nB-mEaa0fXdU+qGs2Etl~?(qW=brgQ{`8(tNzs}zMFOORQsYQ7a_2nBCq-0tmpQYoyiyM@+a -oe=_^IWTWm3u6EWnDWKK)x;mk?8a) -d94Nq>J*9xrQHd3&6nU79K0q|t)G+rJlcK3M#8KRp*zVh{n!JWQfqI_Sqk_!(_U-p0)|I4s*i%)=iJpA^sYYuw&Lp2W%JjHlIV{^AXcE>p%KcxF&F4QOe0H -5rX$%WSjI8xuAz&hLk(mv)m<*NcjVmxdQbnw1sQu~j4CIt`IPHO-0+DYNs(duCAiw2eG0Wn`AFq>vh> -Yg)GuebGqWBZti;mjt&;s;~GZNKDd9S@6`D>T3>M?Sby+L>yv2l9Rg^tL+4sQjXOgr1(yfSg*8x7Evp -OD_p;9!LQppgFWvwAFVgIi?-&Z&Tu7FC`u}*tUL4#O2Gi^ZnfZ8)p?+vwC>YKPy{~avn2VA|Q%E*oJI -YhsiudSxSipcn;Gy@}`khf1*@@h9uD)X#r+nnL50gEj^w5yE76hq8Gol^1kx|MSaAA?eOPj6U>wY*fw?!CC9^BcgNX3w2#{CFAw -tz8V3*U6U>VnPT_!UUSd3IHD%EpSs*Lh!yi$&o=ziasMXL%!KQaiA29z5E5NLee1e15?4VH{UY?V4Bl -}R-uZKH}GSx#w-USu>-Wj7wqW~b(-n0)^?(RyfKFT)CnoN5X1=$zVNIXq#r$G53iiCPLT6#;u>6*{ox -u7F+WfbY)8r5HR8&z(R7hu);hpcyXki&R$v*0y$_?gD7xCc8# -Ev9mz_&xm?u|yb3W9xEthdk+*}_f%Pn2Zq*09HQw!Q9}s+|rgzKww`Ck>+%uyXwPY^kw?rR0y#5!}U#;>mKqvK;)>sT5{zs}r)ZoPEr9uv;f20 -%ld0n^QUsXAtH*6AS@u%{_X&&GCI2kZ1<4}B3&7z>#WM}^}rxFi!k$cReLWx<#RPIV@B$y)ZO!C~RQy -0Zt{Y6pcR-9nr0C%?|G9i`HZ>r+9aSO1K`SF2Po!q9sm7CG7o7(|MG^oqZw|+ZulY^ul?mn2^D2J3{9 -+_V&>lGQjzh~$Vo@b^s^Nece$6T+S+p@Qle@6aWAK2mmG&m`;(515G>x005#20018V003}la4%nWWo~3|axZmqY;0*_GcR9XX>MtBUtcb8d6ia -KZ`?Kze%G%UY+y(mtOca)lK}&D)58X0V-auAM}aGic3D%T!owTo*LO&YtG(QyelR@OH`k}3XR}%6v=D -s#GhD-JtC2O=hP4Q_k`imnm4sd?!Q}>+Y(V3+GbEJRj6${N;r#El(SL2V_ -H(I8RN<+hfk4$iwx-JezjVD+}oFAU+neImkbkF<46z@CwJnBXlXSpE1uMVfmI`)FqmiB|% -9Ja@nA*w$#j_+42sR+oP{amwW>0FbY?YJ -EY`^3(ZG8-mDHGCYdvZeD$M`I(D(37~Y2wi>Ge7UF}MVcAit5;5E|pV&L -P$%IjWfPM!=w_o4jhm-0g%atIN0k!JZh&+^4&dA@8qSovOcu=qoSwArK!15U!YjU=+Bsf?us>&nk*0= -mHMWNNr!Yk^f7d(yv2;G1xlc0|QQjYZtR*L8e7G -ElmhX6lSgUzau=iv0^>3KVtBIY$7|hsIESbCb{K2Q?n@VN7#mrj(yNPDDF0g>4o2UDMDs7(~)sxp( -9UBa66sWd^^^i_^neFehp&KkP_E_XGfMz&7k>v^OVr>6*r5(bb3 -z@kKFiwrpCDQ!4aqY^!{H}XSgR5i>LVX-6(2iaijEbdjRDhuo2|PS2-ev!%W{$x@yzE1Bc;n^usrj&L -6dtikWBs0#Hi>1QY-O00;mk6qrsF_X;Na3;+Q7DF6T?0001RX>c!Jc4cm4Z*nhna%^mAVlyvaV{dG1W -n*+{Z*FrgaCxm-ZExH*68`RALD&eSZFhyd98kc3gUh+iHRxNAq$moXvF1u#o3&O_L~37pxc`37kd#D9 -^4jU$en{lia5!(Ad1koly4jTTG$_ld3#=O+xGHPNSKo{Ln=vQPbcFulkG+*Vy{e2?#si-u2XQ;lb>$0Ba^%$Q}2z^%zp5gm;*@qv?^nPkH#?ILLoa=R2Zx*T&sa( -tSoc&xn9*XfTmpN@^*rz#H%CfWj(I*pY*hv&x)XQb8M82N&FX>ZZ(aDf}FSVndGf1}7hf3I|EzcV~>Y -Arw#nbyqZYK|!=$ASZwaC7eskStU)!V0eS6~mBeGd&q?Wij3#BYU4l-##;5-Qz`gPNNsBNv|E|NaX5F -PA*e5f&HhD*7N&sGlExRU*4A3(aLA>S)fQ?>~KdZ+9ViqH9|BbCc&-Rj&Sk!}m)5DQ<2UDNCfeAcp0RVu#Gx#*A+yA~{Ji2d-!S)e@5-O}UT&HVE1Jy;@|A05IWv)q4gOb<4_}eAA*W -2Ls#F38vq*b(-)%(=G37=uUXZ&sOe!X}Fa^YP$HFtnyjyv5<8zFSmuIjAmZxyB$P&gb@j#*I%(#*9Dd!gLmp6C_JIh5ZMcaoWOx17Z52_M&we0(&T3PS`--tfq5ja;k>dOq9h%ooz!=| -C}C1C4!;QWD>*bWFX$VHQP~+$%;rj5pm)|3Fkzzk+*l6-SMp;A9u15I3zdn7S)g(XDjX@$jCHD4|8G#|03T454u>9g%e|ZY#t8)LI;1v`>nd&`cT;xF@@;rI8<` -r;m(kI%DgcNzNUqgUe;3N*}|$`aapSbP#gJ)POTGxZJJz51ehge1>XqOt4Cf<%MG?eB1^flwXaZ8%Pn -Fo#4`6gUf=rCWSOKW<@s0=il53vY(b9%TT-1gRmOFXw%)k!fnNpykX)*CSyLV*!!c_)bjX&kfHfcd&Yu1l-8dEokmc8^J`COxRn9>2bEaeD3HQ3Z-FZmLjES -KvPzT9r%Qi3z5mrD1CU9@GQHzF}$!PXL(sxPFqyoF!r2A-F{P=&`Sy%_|GCOCnf}|n-pG#qO@%rNOM< -nQMV=DnDmIVj2N=fpvsM~0C;6t<)zY2z}K%|wElDDY7L7N{h*`Ys|g6MYkn={|ne6xl(Q&sc9sjNqm_YiDg8 -}w)_SIK50r(KVsnGR>rkk65IZHZT17sfHc(32^=#cVT$2bf^5)3f(8t*7z=`6>Nd_HjF?14G}8LGpQF -k8DaEJ^}+>4BwU4_jvAWsql>ABSt4`JMvLM{QJqc2SIWu=|YShA-6IQIn2s%cdP4-xV+a=V8thBK -p8NqEK^6Au#rgFYz(KryvfPeBJ;2IIqB**V}r-=R#u?Cs|e7z`3ZtE7DskalQwg4n*Z+b+?FVRaqMz< -Qk~TZaFsEjVMp6exraf0*(H7=)e@X#8MG<`Bd=_^T$uJ8=+v5IF|}pJ>h1bMHt|U*)ACe8o|~FIp3LO -rj|I*0y0+^Xz)Y7O&ZM4!t)(G0aV7?Yzw#3}+DA4cD~*2rsg({r3CfcLs*HS$|!knnMu!+w!1xd(CbE -777O@4;$ooF1Nuj -mjNreV2e93=bc0W66?ftiG-dKA`=@0Xpj8`=CM+hl1@L3Nll5KT@9?#9E$)H{@-;F8|7+ot@uG^E{LCs0WyK$sZlD%dx28hMXsy; -yJ|<1T}E*>F;VaOyMIy4&@!oeYsle1i=KAoP^b&*>wZC1!l}s -CLtP4pY8wL_3yyl0yDOZkmlfhRLKW9_B^I8eNW=)IAO0;Ang>#ffr1t)qiP^UyBCDg%HOUHbxlK#EB3aDt|3B;9uQUp;Z_#7fZ_Z$9ij?JYZab-Q)8%&u{eWV+V>+HIY}0PfbsPAjo5e6QZD{~VgcB*?jD1^DtQNw~3tuJ!8;;syL)Gunr})8EIGc7ZEbMg*1%-_}b -LC6FwOp`A3uWGt;=Zc71`*(9ovw<3A)-j{tS-P|or@1kJQv6oTriT!wYyfq&Y02CQ^Ny~~a4nY>4f<9 -)W0j$PnS5hvgu$<_gXA<8sNj<~@88*Lhdm)ra)=qVyKOyQV!f8BG?�`$YGM9ZIdm!v1Kg<~tk6{Ux -@O&tqgIwU@+u`mvL?S0nzuPCB|aY8RF(wOp5ZW_&D*Mr6ypOWAQ`Jozu}wJv=^zq$^A0EtMkHg-$&agBa}A)Q9|OAHDj>bthGY*Z^Pvbg(o5PCIU0KsdHzobqk -8QKOQ_$6BWAiR$(0doeo7iz{DV?oZ@GZmpwl3J4tXQOYYhx7FDu;NA6054u#PZE3YDHgr8Uo!+I{&kU -5%PO9Y#h_0cQsJ*o0x>KToO&Hc=Lq)~A*ZgHx2>orMz^yEh`Y+A`U{Bv0#Hi>1QY-O00;mk6qrsR(*@ -``5dZ)WHUI!20001RX>c!Jc4cm4Z*nhna%^mAVlyveZ*Fd7V{~b6ZZ2?n&0B4A+cpyZu3v$Rrz5JR8R -zBFR6Wm~Ys+n>uIe*1{WhqJ)Np?fcGkoFm5W#>IE$ooID7cg%xE&DZul#p=ct|2^{ -!gOjGw3u2S5{65N3ZU3ZHHHxa2HK5?D7@ty9S=0e?BmqYam!Sq_%L(u&1V&K6v2f+tGIb}5W5IxR*Wm -q3jgY>6IEt(kQOdLNjWT6JzZH1_3D$4kEL(DH3rwaHo^ZtBJF@Zlt@P|DZJhV`eNtoR0pG|iKq(a9{_ -L{+>F*FsjPHY1PQ>a$Z`R=CiSwgWShx=J%5<4&aHu)E*$Fot1a$=^xeX~qHXc`0F*>H{bTdoDptUKVA -VSE@ZOIdBZ?GRxA%lQ0%}#qaeuB(g1|BGgbY8QDS^dE$1*>90T~%T$xJH`ot6N_cse#?@#9umc96!6# -Vp>H;2l>4hPxBMgBTjtdvNP{wNxdOK!+kW^#bzT+u-e&o0B5*nU9ed3S)9E}dx>ow0=T>#Xf;l7-m&M -xQS*~xt7GeiKiSTJPV#c9r}tzbJIm6C}i8FyTlB|-xtr4Q7iJb?`XNXfwxt2LPVGa!>!YssRO2%yL8K -H3x+pR#nx<|2u947SSSqessVj~>B)K9bFCIhb6FI!kcRMEQ<5F|c`9bzrxwc!{H*snN`9c1(dvb&et2WwMz1i&A9pVYHe!a^cJb3U*0{nsQ5?(< -&AjL8wL~MtgW@gO;=s&V{rsCj&wATS`pLIDln3|x5aIL{mgAV!wda|Mv@6!Yv3M>$qa2cUx%Brm63iO -Ip7O*S93nlU}1|$dLSfp86?N}D=K;sKuZ8MBitdoy@lz(?zz34vK!8cQX=Ad1J)Xm9^k(zs -d;*7io1rUTbsV9%b16N_y8nQ@u`T9`oi=V2DazymF|QLImC@nC?q!Ij7wv>9i>KEbqD&u2 -dk*!1th_PXw0LVU?_|D+Btpr!45)XiC8|8$3YbmY1{7)%sSI_$1OzybGRYgQLH>~DX%&WG+}YA+Uqb_) -rvDWMF+K^j<^J^&v!6*B|_VC-*OrWw-{x3j*D8k`TH4(dK^7S>!kZZY`4@~A=o0ig?6@m;f`Xa>~XT0 -rAZ@%KHiFwg*RvlisAN>0HM1|;A;Q$#^HaK7 -v=qf`#XO}lB_ODUAZ=s8;!Ayv|y3llbvZPtoDoW(=Kb=QV->ATEWs2&=m2R;eCIRUKn1D^6Y5)TaB*d -<<;w~w30*umaO8Kp@fb#+DWn9w~p-jb-+FjhCH$*Cc)sQ^E{83G?hXn)>6qw+arCC@sK`v;GA&!(vY( -?3go0kS0JPWOi(jRJ7&kQ}XtS~l^G>3+86jxxE0eUA@8>)WCwktI1NEX0Y@sPY9m8tCOO|ohIS=#9Ty-&@_Rt1j7oHLOGq)rmdQG;hLz`P4G@{sU^zU -9?lIlX2QZS&nx&46Kd~1V1Vsmyi-be&fX@h66v(1D4XLSG!6}v<`gDfnrqm_8+hV@^r{j71Zm|{G9{H -y0Bi~{fsy})(K;3pn`>8uF&7y9%x74xJyXU$9ZpX{5!%#>gU#qU?S_ -DX-Q@^=T`BFucP<(a~)Kx$@(aT=SjleMRcl0yc|+kNFz4{LWdmZA-yXMP1$*R -&r~N}eM|(G==2j_Ahe3y;sTR0@vkF-X5&pdEPjg0yIyz=dPcWi@|qHcKDDT>1Q}CUV*Q^ -@i%B7(Xla3!mek#7uLO})_i$o=Gs(= -9v9mfOIM`C5ZBvd&tG_QtRjqeZ#bcXIzk$#E6ySaI(-DWDBDIm$<`4jz3@R`;TD%@G( -`6Z2^->8E&IkQX1htdR{tl|q@*cIS;scc`QAWHjK? -=P;tJGltYX6GlbF6QC<#ZR-VSMwn%AhA9)(xg-}+?;IbR$WPI^V|>CH`>YhMo#r-K!VQC%*2WYoj8!z -)aVKeHTu!*&}a|$iFxkWMLTnK%xm7d=HsY?{Jzs-o9avOCTWT106GIB{Pj!C#Y%So#H|A3* -v3Dh!`y4g|mLK06*bGW94@>f2g#*m~SMejOUpwK^U4c8*nD>9Fk>HR6&2E2X{cSg+d!MQQsqM%#%Vtn -J#>U#Dkh8xI+?6?hm({6$xohoJGMhm9XR-?O^Y0Uzp2>cc2Xr7_y1;ck(!Nv#d_W|0i0Qe#AmH`Ep;X -=yhPpfWc1kJNjZEg>I9iW=5F7ouBx(*v~3`}%8%I?&sfb1%Pk{vS#f=9nJoy0JdUrfSXtF(}JuC1YT$ -kEr_xVt7P4T>Ut}%6z+CI>K`b@_5&zDt82DH69$`5L4M_EAZwPwHk|)NDmLcqeX~`sxKXmN040d<-Z@;l4MhhFwBj -&e421Qh@1Abq?E1IHbzE1`zXpphrK1>I@Og`#=5AcS9ed40e1{E%TvYU3o6b>+y6&}rzLp>Ixf?sJsWEeTChB!>i;?pqcah}BD$#HirrPZJxzN@ -bpy(tc{lsI({+EsJP@P~xcioY3^BeA#d6ubR}|1KByYn0WnXx*MY9IGQkWZ}0X}&BsBNrn+);>+bAj} -Yp#+|GG=CiZISG_^GDlhqSj`<9_eo_uqN*pNxV=Nv2syu5F0})~G4&c53@PNIB@Wn(fHC= -3Q_%;?(3M>W?uvq6;;D5>*cqJizSHSYO3Yi -}Ouy58ku@x1fCKTXho2Qsw2uXL@g|J`eJi5xM-nP1%KQ`4QVySP**|R?f@5=Xjy6fDz9 -q-|S`@=g2Wa@xcx4`1waC29G&?{J2U~(iT$_{Q0rwUdq<&;6FR695+MFc!}Bfhd<=Y0GVM^b-%BHaC# -1D#{xOsoRlKLd7lL6R!OBkub866nyd!vo-;V=MM}{5~EKQw@xAm5q?6AOOCK41gs}IJDHh(9`jRlM~4NXP^H;QMf3 -{hUghtHt6%y+(`upq{a$;jXCvM?i~g9-mHpBG08mQ<1QY-O00;mk6qru1E_!QACIA2#i2wj40001RX> -c!Jc4cm4Z*nhna%^mAVlyveZ*Fd7V{~b6Zg6jJY%Xwl?LBLA+emWX^(zpmTqGSD^5gFIqJ(?pv$eabv -)77cXDiv;A|YZ(A_f5-29V56CBHrWnkPU>-c7EqQc-QKC19p!rl+T0)7@A#^){K$S6$mRYCcbj?XGUx -B)isi*|loUe;>(X)ihOY{wVA9x~SIXPrcXX*W0YA;Eg^yS|NB{FF&a^aWLv8$#il>kI(VXY0?&3Rd=m ->{(&D@==AVNAg1c`QtjHJuCxI=K1$%{RatA5U)FWWaOvS?Q@8apcyzwqwfm^qcPh(ObD1?7=I%eQb^B -_QRcn=dPv6wb3@7j}S=lM?`P=OCd(}4kaQx5y-|t}{S)TXw>gtX6SO5J*rPUHP>Am_(r*!)R32EqJ?50~CE`uoa%@Gq)?d8<5rVSAq&I+-Sa%(QYiHrQzxn`VN7 -+_$RT)Va28^bRP^q6-1PmuH3`yS69?7F_7LdpOUVdbd-#-z6Gft9HIBN;Tiry1+hR+i)J4*06E&4bkm -<$AlYp077(2gFpPY=E%u=bKtxdT~nI3YnT|4%{2Mgl+)z=;G+;bAtydnI)ETQhs!F1pEY^3s*^Dz&G%#YR2<9(&~IZIXarZR;#QlTWD8b|2trH3=fY^5< -JQBL?10nKuqGO0bh>!<>ZVgw%83K@{;ZLzjs=B2H?jim(Spf^~ -bFT66_cb+7^iD15M5V`*Bik1TOzHhBnHRg8-w`Q{c?R^7*D?uv%y-E6=F$=WNz3{cb~I{7L^7kL_^Z` -zBa8Lc1|;1zRWf>{Y53WrMsV<`nT(Q0$++F`6n9Du;Y)pqs}4^Kp9ZZzdm9EaYmT -$y-)^!}9$kBIXwW4JF%L;6cyGAvsD10# -AX;y>p?7(DOoP*CkA5qo_$b2xbR|fez@0O#vc8CvEmgRS7YQP229yPER-Mbhig?TcvfgK3($fr^o|Oz -sj=f?5pR`)b;Y|>6_yEl$8Kze^NgG?enAgbqNoESxXwA-@N|gn|H7N -^q(*rKJfh$JP!YyM#3QC9UnFg@ZBdmTdA075Ho=z$t2HMKLhrhZKE@Znnluq!a_Y-#1T%*<6X&ErRy{ -~hJ|J&c0Qg=39HbjsM^|sGK>eYS{Bz4gIa{MK&p1LxWwak&n%F`;Qj$d3ZPt|HzdQ~Kee-Q%m-%mWwU -{EUM#)&yvkrQ8klo_)n;v{-xL)Q{k38SmLr2hy3_PJDe?U>t41w0K{4n}2lUA-ff*M$E$Z}H`ZR%6K1 --kZ-G2>E@h44@^bt+CHX|{KD5elmUL1c#Aqu)r -1*ol-Dydf%hoDLT3SY2xAgabf23Z%VK{k9-=`t|{Mp24BVOuaA((@S4^53YP}aJWO -WT_!KWt!VfV66q3dImW&Tg`zL_sv=%}0sF0C8p(RtNI21c)A^2HN0NHL6q@ZHp07nd}H4K39oat)L4M -z9-heURri#)*Rd^AZ-QnL$;aMK;4Mq+l<*JKo56{@FUm>mbe4DBJ~M+?HYB1d>4*touh^v3KlW~v?p8 -m0ro7aW!b?>ZegM%)8+hta@$p<0%2GK@)`q!5Q}Hh@d))97~ryK%Y8U18W@H0MkONym#`|N>OtB&O~gzB>7C9as}VkURv&-CF$(RIDVC4>PGff6Ii -1`AZF}=BC^jHK=AAr`_6k1sMpbr^DBb2x!cIeoCY!`(S5O)fj#jb%f&hh>Iw$oH}kQuYlzPTWRW+s9m -eSQAT%a3n9%s*VbJ%9J{!_*w!*|RBgo`aBtC}dbUKm1p}F;kqh4ax6N7rXnOVjt?Y=|NmfykqQZzP%n -ih1fu39HMDYzqq$zj~3c&{8;cgHBN^~Xr~%wV`ko`Xfe!5NilsV0enFua&JUTWcJF-8M7y|d(rgWpz> -Sz+5wT@qVA;l&-iy^$B%_9B72u81lqEUiog)-n8|JryfXw~+t>%7@chSrI&de+Hz){EEV4JI+aq`R&qgJI%N=EFvzMcJU})4=&ylLR8enUF=Pt -~+x5B)hKJf%&P^aQRiYo%_OZmOSk@uu`S>R?Y>yklz9VatIDrb&{M{WaxgMtxGjRm2q7+z~r~I0PF#@ -Fhw4k-PB-ZplcL#pjDHtw;--b1f~(lAIM(8Gx4daZ;d$vyqHwhB+F5kFv3#2=QSJlQ{2N_+rLq}GGl! -$8lx=G_UvtttUU!iO$Hc`c!ar(Fq$Sm{^a{SDs@YEzsp}B4vH+2AU%s|sPEwB{{1X@W?Pi?IwkTLAA? -EQ5Xr!-*a-1-y78lYa+W;OXOHypkke;qr0Jl~2M^Qn@1OckFzjOvcp#P75#>Q4xne;*#QS9Ai_eIR2% -Q^d`2aW~#yoaB1&QEqykkY;8N%n@W}~0iZnnLai9L+|_I(S)nFS{14+ZI%LJ>U&64JZ46Ri5~+0qv%E -e}EwCb+%wmN_NmnwR-hKQs#!-yN(8=&b3)$) -`rrMIu~y_9bZK}4wJ=P8#0WZC@HN5>;SH=CO|8X&qa`$J9n3^)O~m4S!Y2NWa)GrNC$1bR^yM$FDtXx -g#ereTKIJoHLQXP@U>J<9UcdP?W5fVB59qIN1-tF%H6c+d=mdlq$rIh-mBgNyfk*Kvtu+ -g$CgOAXoz)eDZegX~&5tpjtBNHTMtq5LZVT#`iE*g8O0}v^1a7N4w^8k;^XR@X2+Cbb^jv=l+iwDK-y -r?)j71uV$Tz%dTmV7|GRvsFUkW%coOr$&e^Lb2lW*Q`XB4QQbqo+WV{dJ=-!j=A -bsW=-y$foruyA2sS>$ct3Yd;nPhdFbLJZ6TmA0=88JmOsfWo%lFAv{!=Z&b4fW&=kY=9t6C`zcr)l}hiC7?B3s6CP=gAr6a#Z(vVjV06@tBSzhjr -VZSu3WWu73Y4ck<|Pp=#XW%Vq%&Ggr-ZD|g -4Csag7~BIn!YdF`KvYe!-dJrYvu=4n!4^!?X_8s5ya@r)#shuVeW9Jz4$K=kKWyg?&*}sygJ})0k=Mj -hBD27=BP008Cq$hI_1$pU$#<&U(Lz8X$dv(;JBp6GZ#ewbp^9fNY;(xb7nCIJrm1g(dqF~~j~mdONFyV}jOZeM#Cj3@p3>hqo%jy_uZ^@&5ae3uK7xMqK@#Y_#{v8b{#MR!l7*w3EVtcDv6qF(u|OhO_+Pu6}=M4@%3o;`j3)pH --gBfIDk-TyMKCrGQKyx{8wJe8#a`+%@A2^x}tCIs+L$@BE9^f!Ms+|xPUW}lSt*Llo+nrzAK9G>TyVV -7v8bk!%7A9S(P&*R6Ul$#Mkmw2Gwss?!3))Qbg`Yq@NEMczhD^{YrdXX%3=UojxP#F&NX@*kKg*gE01 -))9AOL1pR0FtDv&jkU{<$nO=P#^%QlXSU@(i~$)%{a8L!SyKqctT%RBaFj7Zs@kF7cp?B|0IyD)4}k8 -AZ#F3eOw5^9`S7B2k!PuTAwmGC7r%3gbf5?+$VuXVMW(Khg72<(^$`*I41q9cNIZhB7b1uTnAnQn?>P -Z>T}yj$P3@U-umpvEp=Gkk2FEjwqh-N9LTvavUY;pvZqj7?w>P1(aioRDkliYg(fddlY(qN9gy>YD?3 -sIfTztAF^ySY5t#XSo%H#fk4$Q6_|k-83bZxxADcH*BLsw90S$XF48htHcY&Itt_2#hJ`8a~j=8*{I~ -aE|LJgjo-GCBr_?omB2V8TI{oSGS1#5l)ByXwY&>4&o!nKW~#d(g3ET0b(y8p@_>E&*hoLB2YVk$7;3 -zZfiC4`O6lRyKBd_ve}G)*E;HbZu*(2K+d88Xjfy+`yX^7FE;N)d6lXm|rFiNIkD1UJocXQ$DI?`mYM -jSIxt6KR23UVyeHEG+^jp#kQ2WKn3Gbt#0yDc&}Vl*DH&7(zF1T7$M1O{1msN_IoC3P=l~ld75<&p_)53Vh%xkDxkEIl`w~tyF`%4D -=@ff(%>t=IfY>jLz4xh!OK>Y~jt&CleutMbU@-&bw|fXSg?7ZwX&AjlSnq20wS_s3-G$T%*-Xh_$nIx -OQi8xdD~Mx6uCa06+@Xx-H1tlazJ+31e74DfVK6;ZG5k(FEVdUoE-DNz|V6D-0bMj~ -SBccEPe9ZqI2dNRm*UUrKOCWvy$xeIJnsNy95R_iiQdR4A<8guBnHWqb8utKg^}0_S1G#gK+KD1IJ7# -2;W!9p(^~87=&W4ZeonF_`H(61#N=qTVHgs`}y3FV7z -3zoj@#FArt4Fb*EWrS{Tf<@()5K&5?^1i<@`;+OK#5Y0Ty?%Fwk){%ICvL4?jx11#K-rFC(m04sK@(sA=f}gUDvsZQT ->wW)<$s<^o(-_MEcl+A&-0RzaAW^?ofOmGDdv>L6_=Am7K_cWGQBo^-WUzA6T3i`(eB~EJ^pscLzk9}AR{f_DaW -MWOR8hC1#r+^8uqz(j)hX~A$Hz*t>c&j+-+De}bK_~rpe{IEBrskrmJ?DPI_RG;zOXXvo<4gQdQ1L8P-&%)}UN*S`4vE^k -2m81sv2%F2PKOewrn47Tuzv)bkl{nFcL=P5Q{_C123QUHSz&K04jjwxwB+BRag?eDZRQ-j)E$#p($j{ -wHtIal%-`s~%~i96U0OBRH14mtmt=!KuO!8W6}QT!pqVgr -j7P>mGUI-c=)}m|Z;t4H4Fo6#g)A1Hm+2_nbJTGb3q%vBB$S(s?k~=`LZ^HqzJ|cTjTmSl9DN#gGby?C&nL?sCGnhGqc3vNcVzAbiwyi+UiS-dEXrYZe-^@rz<*cz -L{>hw7pTu8emBt81`kg6Bh<^JF0#%>wPl07_4Fq~khq` -oAbtfOS;qVGJ@Sxl^oM`9qGhnN7&o{}raqXcN<5nMK60STw1>CF2Q@MO}ppf<{)BQ|#E6Al}oO3J#Ot -qsegs(E);yoS{YL?I^<8XiB_%vKTl|gO{V0`OBd+p$l@fNR#bI*h%-KZL&(QqL4IDKsn7id1w6X4*)4 -;DXJVa`}i2)YM!tg7Ek9ELA@UlC~n=wA%~bz;s?E+E*X>kC;aDKsjs3GOgR^|?^_EpRcV4i0BksCFuQ!;a(;$iKB!N-D7>Ya@sC~8Mf7mp2w??M -{hYWO;E!&b|0SR=?tUPFbqlBkL*{ELpp=G>-?vrbOrE-*V40^OYT^4)8)itJ^_|s~0qOHQO+415ms}m -10#->sjV{-Dl-#$xzeD)J5DAqeQ)CU{=6P`}IWm|)~(OsutNuTOX_H%uEDo2~6BlRhO{o3<<@2$!jwV3jD0p(QHjbn8|&8LwyfIYx#0L -LVt_Rf;zYmFPXXq)|I3@xR*#fkK`$7oEFYLg5gzGHXOA(fzi0)e&Kj`-$hlp?}-Kk^ZFAF1pOV2D^wP -Mg|i@hTST6Jg`C$+8DiizZ3S9fK{(0Zuw(Hkg#MOYp7lhNz)9R^FPsC=&%FDoAZv_0K1PHiY3`p?oF5 -VW!A|&K&nDZN@Lf&mYjG7((PEzRwyOieCQoje1mCu_0|~Ndv#j?Mo1=`+Ky9Z6eJBXB%^L}n+j#?KRO -WP_nbPO8gEHeP<;s+ -k=1I(}*VB>n)Oz+5t>^dKXam_or7d?*UXNU%HN%R%LOlh580L@$k$-h1Hg86W(&=gzOl2tTpe&X3%EQAZ3 -86RB)EU>Cfbc#`?srCc2xe&BxazyY=ygn#Yr71x&)k{)T#*hlRJ?_*Gvxot -4juaV<0IIcMbUM-=(I_QPL{1Vbj__A{L1-a(&k0X*+c%l!Kl>d)++_VG4Sc(En{uRe;p;qO_OoB*4_#yeTj&N()1X|;h$xH -gaGsXis%#0K08$C$BgKTwU0-yID_9Luuu^`c$as2Nof`*JQchlMRap<=COdaqLxD>t6}`243{COAz)m!OM}d;B2O&|N~N%NjtzCZT^J(XqBllkWz#tck$Q)JNBnFHW@^@W6yTK?I`r0Dvl07so|#|nhjvI)!U($@qZ#IKu;#)2jOh@UNF2&&I59;hC?W -u406^r6XwhS^N#Tzx48be^E({g;gX -dY~C-YLiqCj$2q5=43TNaAPzt`GZIq|;ebx)8*k^bn}d-3!|fBs@}&63f#=O0E#_mj$lwFWZ-Yj61a! -{9y!5hVSQUA0b0JE^Pra2SW%j@NiL1igdCxV`6hv!r562jH=V&t|PS_vx}Syb0K5RTujB{Ga>I>tH8N -UK!X7ftzjat$yG>HaM6j+{@fh1fcGn@?kx04q)e`njKhSP~wYs6S4Y8Cr`d+Q6l6Nk^KGg3AqA*!FLNSbT16gp0Hl-AjorjcowypECh1TUFf!{j$!~|Pjc -Blg%pj$|AS8nXd$IGmGj0vfjr?GU-FChvq68F#-#Oz0N?j4%Go+H&{77HPd6&xeg?7%W@7gDz0zB8W# -T<|x{77KiU`DGGlST{LGL!0@>rPVH0gTSDx1o&0bw-B8f>jJu*xDOi)Is2scbS;TjDT~FDCmsCRsK03 -WGn?ZR?Uo`>=5TDV39kdccqqxUxHkG8N4e*Z9svLLc32z*VU=O*u#%4g#Q{YW>51_1a$(NdZ4@%s?bZ -z(cLEo&I8y`N|2LA%q5 -g)5%qJimu^j3Vk+^j1pRjvIL?X3`W=J2LWMjqE|Z7Y_sKRuy=)4 -8qxaXtrlKAkDpoWAN(y{fGJc^MC$$@&5d^XWfz{He>(|&97ktOBm?9G`|ltk -&*<>UU8*Rbgn)0XOQ<8Vn!luyyVHlYZTqFhEvVfPd -{8clC=o+7RtMpuf-i4$$L3E$`?kM5iNG7G2!lLuB<_+d9^heZG9EF^tV8$Y&U+@R= -$uzS27r$dL|6iUJ;ITa&dWv4Ek_kexgLF7;d6}%=c3L8X*H8e~IeFEo~V&ho4{Z)eirAhoJ^K1mxF!z -T@hD@%tUW`OS;t{=G{710J?ediWH$Q1n&mq3C3LLw)>;K0)bS7W4W(zJFs$3z;3NeRqBv;F!$~6LU5k -i@@b;&9`+e3gY)t7r^4hN5*h?TT~OKKMY@i2ZJ3NkXpLW`r?ltS{I<3zoO!eCrYaa_iyb>Dlvx&L-^v -Wy}zY8+qwh(H6F0G`3Oyh%RqYG#Bb_mX>A*3pf2UOqnLUFAr5Yf&*NQX`oi)~TS5bU+8V>#k_8n!TLi -l~#1Fl}=yjpzH=-{@^gw`4h>Ij@&GE$UNMonqpRZchOcYDxK%PG@VCZrW`*0PY0D?h~{4(WHMqE-H<_I3>ZqK -X6n0_Bs_IvYSgK#7tQwJTSI;hM~T1se(;rvo}coRL-jr`E7!4$zs-l_eo{<^$xuO?y!_}PoWP9-sJL7 -CdM+XgklP<5HyKJ!MX%;&`gPg2hA`1a3w(TzP>2Mp-2)SFQF(a%pb?#dGm2jH@%d<$c&B`siYGE$2=) -NJqlwk6@4{qAVW&rs!Q*yxUy2Ox`zdIXqhQiO)#Y&q}&KE11W~e&si8fJJcDMSW|(Qa{f8Pk_di%kFU -S}+7B^_32G$8vDbCI23d%SAYM^6?A(~*eI|&R?m~g3n1+T1A5dfnn|Vcir~v$-Qan@q4mP{-R!NkBp} -iCgq4pskrzh`N<)f2BJ;Pe99*l>9;1k-fk>nQ<(yt1>^83#wjc^xjg?v->CxZi{uuy7?@d?B{|KcQEu>fG*63SiQQ*F0-B<-pJ<>T-}SzP0GOeuD->F)8Io1VX+qsmC*FDVDkZU^Hlb0jmA^Nb{7l8Jat!7G;nqxTR?`XQbuTe&S7Vy~RumCnWfz -nniyrPJR%}6r<$svu<<+Z;3v(!lY5PURew0rE& -Q)&P}=wJ-oJhM=HlO8{_)NE{OZ+r=WoxihCyT5rAERsOrby2ZT}lkO9KQH00008045ZePQBDyr+^3m0 -L&Qx03iSX0B~t=FJE?LZe(wAFLiQkY-wUMFJ*XRWpH$9Z*FrgaCyC0-*4MC5PtVxL8J(51Fko$FN3iR -XkB*=kh+1LY>x^p(KZ)})JV#XF>HVP?v9i!$#Q{zOp( -koQVAA-Ws=!a~?nPjj&@YpT?Qq!CzbF@+eNFP_8^X=rQ=YRsYqi1J%jSdp;Rfw`@;EYnGmitz>Q%t25?;2+#5sWyY~e? -#EjfA?B(w_2y(zRJ=w_N}#H0@p2zIZ5A35UvEs4N+`BwbwE3A?lx?2-+dQir{ob|aD^7U5J);XC#P?vTs)F-3&(!sOaQ1XLT0fEZHVuqYycqG-eh -bFIXP;qPGu+(P_S2%cD4J^JfPLQI9ddDA72Lw<_-wY;m06t$Oif?`C7yD)53Fo?o(lzBAd -~mT2k#F?*c{lZ#SHHz5Z#Jra0oDH=w+({s5O;jI!5&h2o)$N0a5@;gbS`@D&1k+n^r*jgI7&KsD|ALz -HX4Fzv(yrv=Gh&m(>%kyzIq^-!lFrvm#@v$X3EIy~c<%Qb3$oN<@)}Wb8wIl5@i|%7O{IYdXCmqKQLq -_&pP{Yx3|fgfQ^`hw{ximv!=}Hj()T|gDRn-04O;iomI~G -E1-E_;}8rlPXY^Ur2)?ggy-Y|TeG@)OXq)SfBowN+$#xZLJ~KQv0pmA{qX4CKU`C|6vemVQxRi$TH?hePM`dQV!ab~7~s!S-XYbvdGhlbwWfT!?Zn(93iu@ -0@%6uPnG)oM$|gQi0mTiU_b@QI2kecZypvl6gBCgELbZ!}~b*!nw9i@+tvKS%7PW()2F0eWm!_D17xq -(sg(atFIGKBdYF_ni7$ZfsD0YEhSNApVHx7c#=iOs3p~rV^qcM`;8@UHQ2>kOqa_-2VlHdh#c!CCitG -UY>ZGJ$l9Nr2x=T$vU!+@9EBP?meQw(diItj!OkTr^=@SMTB0!7CFqiu$LyhMoSia@!M=ZTU<}0*<$g -10haWghG^yLPzmye*gkDv-p;1iUpn{yjpd}U5%$vmoSv?x1pzDp&1E_M)<)s-cKER>Tf)G_GK?%6PBN -NrsFwL8>ximlvHBBI@MG%c&;pmbTDrURwR!7U;CW+w$z&*}Z258C71!5_>=mI3OV1UZ+U=bG(*mOgDOjhh`}j~3mfJPxcf@@Tz=+mw<&k%owwi%7(%@IaZszZ+!V%Vf%G+v?;zcP! -37RgKx#on=auKz-@F@M8B8UzO*F~9NZlassJ?qpgzhg9Dt<0{Lo-p=3$BFvETF33Ei;}_*Hyl8g@+v< -Wo2Axnj3f;C@bid<+OgLW%1cI*U(cJ>QN+v#<(_O9gG^z9D4@vd+bjmYiN^TJ<-T0@P$Lxq28mIV2y3(E}O2m6M^h-h -{c?lTxZ177nv@M!Sp%!6U;B1db5+JGOiM^k+V&c=?mn%~P;f*ac93j%PJHvw9Q+B@dB^>m4Jgv|qZ#j -zbal1}3#AD}Qf$$3TVDp<>vIYDm+FF`Yq2~N|;R@bijr*^&8VE{`6r7^;?y)K2EXzrLr`HK2;lrwJ@OB=qtz;9fcR? -_bsjAqtZ^&_{@F(vnAiq@v{$DOX$%vajzbg-mAe!Yq6w+zPBqq>CiW>pna(I{aDtKIpJxc5KD+u?*QozBZy0Aqs2fu?fI_1#b7AIE2#Brm_aMVcRt0!#dJo8KRrCI6unG^dE11kUM$0fC -RrB3$J8SG3guUuNNsk@r}X`%@!&|Ju`x0`=7)t5K~_^=4eYywhx)VH%#z3it|h3MP0(jbReuFxLrC|F -X7?W!bk9H+-o{|4h;@O31x=LYh)ylPIfUlO3k2L&A -g>ni{{c`-0|XQR000O8CKQ-XgZ07=EC&DpHx~c^9RL6TaA|NaUv_0~WN&gWb#iQMX<{=kW@%+?WOFWX -d97G&Z`(Ey{_bBvcnBnKj=CoOP`D7VpiQ>`YghE;!;l0rEl~~|SyV+TjW=w+eRm`!k&>Kr!}KK)#e44 -U;oZ@BEp{YH@@wR?UPO)Jg>090e8<$jVsbXi5i6=_dP}!VwosDa&t| -iX;sEVeC7A*hpS($!aIE)w*+e9k~ju2R;5pPD(MvN@+nP7BY_Az4tn8y7nc#XsU0nWnO+?+Qm^pIol1WT1>K#?d4Wk*W6YWiCvT{d@h7AJ$ -3o9yCle{TYOcGjd00=EJ@}&`qK>{#d1tSKNXiTP9ZFBOD){3W1LF-}ZO7i~oOLB5@`gBRC)Bv*C0!tOk$YyW8o<4t0J}~ -3dv*?*mpD}ebZGaj`n9krOx~^&@3%joX4Dca9ka1(ID2u(v8g0D~td}N`t6JRg3;?MFEltT&kuj@nM4 -3`xKK3C5kCzq_BW&J-`PJ1`eO0!H%1}ch5n~b@$#{Mw=K(n)9uK;$s^0fzvl -_KFMWAnM*c3#&4ys~SrShu$Du`4QNk5ouDRIM3pEO5Pt!V|sw{ZzA(10AKJWy(VB%2Iz-?B3L&#fp&c -$h*C|fz+S$_$F+z`P+HdsQmc3^{(CFR7Sfmsq+*G*D9P8gHV4TAIa%RThH_goYb^{K#=$B3$R_i=B&s -QNp6tpx -+!Cqg<3|uVO7e_|o|tcYyv5ozYn9^gpyN#pKVwx-UE*$7VtTLloNAg(1REnq^C -eT_%{m|Lj?3Fb0GfE5F1{05O%FY0Mqymro|_pE4Ce31U(+&X#qVS`Y(oz5Q{!~xL{@gUHjX-NV03N0< -yMsMw6_C!!zy{I)Q_}1RDX^>{yUECa3;)e1@EGhu^lZctYd;HinrL#Aks1z`X6W=8;0D7-1QkJ)mLq- -80XbEc5|1lO=qHA`&_^WKc=RHhS{W4tSpIpxJYHSD|ZC?7l2q1MH08;LQ5+UbE5;zRD}{4;8oH?pR&( -jBfOhdvGFtWDdq>viaikKMa`;{$S8-75w*Ma~KgD|DszI$+xvi0rLcz*YE{({_|z&|JOPZUM#>C9=1;9Oo__f-%`pt&7;W*?}M?v|yVD~7dl8ZOdN4V -{yUd2!f+ca>IlRDJCZsi%D`MdQM0w9pEgPZpY4%RTHaFURE~ctL{bv*2ZD=-4yYVp!&A-~(iRuXmbX6 -)p@9?BOm!Q0gIgCC4O35+FreUgI9o|*WogZuugFu$z?*Ivw9ObmF3KZ>|JKt@{z)zWTVlGhX( -$zq%V?LeCWxbCcoz3%j)F6w2we7zX3!t%zX%)WFS@eH%18d>ikXv!RR)fbqkoR4~U&|23mU)tQqMakuo3)$oei-*hJc+gLsT+MUg5;K}fNhi9@FT;s$wCIvQ@0G -r1#&R@a50{kI%isPj}v%}9+>twlMz~nw6)7MEyu -Fc`>A5cpJ1QY-O00;mk6qrsVR<$X90{{So2><{e0001RX>c!Jc4cm4Z*nhna%^mAVlyvhX>4V1Z*z1m -aCwzg!EW0)5WVXw23Z7_3Y&`}KvB5JrPwauL)%5Wm!d5sN*cx7P^3yyNqp(I?~tNoTXxb^fMJQ8c{B6 -gaM&2#LY_Ch>kZ~Ph_=(l0WYnVy~BL?PU3PY6t|TS<9DTNtnB!uZIUz|Pv{Zn?araye2nX?&fR6{^-%Vzx`s8+#BK0z;#T8Nv&`DE?xAlS-oClU$4F=Nm642)mCeZd8vCxdkaK$=g7ByM((8Tu;PUpbDTCgu4u{-pG;guxo7Rux@2w7DnD6 -R*;4pm={Ie6u9?^<1sIfCxkznpyjuuu-gg?O|L5N9MH5M4Cs)-hL -}Q56!jKi?TyyOY0DK$xZjFu8++6~zd0Zx{AMq*-*2gSeA0;M`@_Ha_Bh*Vv5%f`oBA!Nipn3^yzQkE9 -XBo~)3)Z0PYI1D_xgiYIFtNc@CF{TCK>!Zpz@1ia4rfGfCd(6g)oKq(}!6381R1c{+&;*E)}&W9Cyp-X_p;G8q3?q+BBdv&HoN7K>*Z6l)j=Ohq1VyeD^|1C=qT@g$A#OYA2xBc>81 -|cG|l6Y%b=*x%NXf-cIQ>fv2$4_Fjs!qxj?|IX6~*F?+`(Sh&B^GF_}zm-d_arWSAs>4=?;z2=|cs!P -3F7X1PyGpK3`x24mF#-{N?@lR-g>me=XKaxkLo!?th;%+wMB7k)!m}CHdz+1Yi@42DosC3(LCrTlO+d -U2K50b+Nm%Ckuvmj>*3&Eb4st4Q+re|4Q1VZEHDc!5p@6aWAK2mmG&m`*SfiEe8X007lN001HY003}la4%nWWo~3|axZmqY;0*_GcRy& -Z)|O0ZeeF-axQRrwOe~{8^^W(pPynNBOvM0>(~z3TmcN=s!kImb^^<}#f57uhs&Wj(Q=pF*_Ff;{q8- -FdG0PH`8E|`nViR&ne+Ia$Bed3y%%}D?b@zUc`o$+P&ciRYg3n9t8)H6vCTzYma1rVT^ZN3?W&@!>(V -!r_0^TGt|pT$lFssIj-&ow6{>2><1a>SF6ye4x>AiDU({8_!w*2!&G_!aho3Ke&(F}aptj4j@m?DED_ -bk0LD@*Mli)(qMOlI_5w -y$sCQ`eNGUPDh~lv@JYeyz2e)Tn=S%Cvzw^!2T3clE~DFb~e3MKtz`cNfruto_vAR8u}u0{0^TdqW3d3rp#|tV?YYg(0rq5o7f8yZq;2oh4r6^*JUY43IdkCt(% -RI%~iJt6*HpUNmSde+=#UjaKanCQ5(_L&;#F5J@(9jh0v`5YS?BLqHbtJS8Y^N9^v#NXqCythn)tEF` -_d}4LVKRbOo3WQ-!T$lbm^>%8fzR&`F6utb=eG@kGG9(6OscJJO6Iom(U$+WU6l&H4?Iy2Dq3+_kWv1z|z5|qmxVgq~+T{+nz_mHh`1hwFr{ZaS -PF(5S6<~2hck0>>O4IF4zsvA{`8SH5e`hIB9q}|sWL_hk1Cj~Ce=c4Tnr83d-NZq8w)8(Zx$Zb?=Bp% -eq5=B4JAH0P|)f}L2%n)D*NH?bV1p5&O&cP^^z}5}zR1_tU9I;TKW5m`Pc(7`++YIR-pcI{H0a;ShGuf!E$l;gl%9gsSy -4lMTbg7wNr_phvviTJ7YG2AoD_9}{h}V`zFe+m -5Jaw=R#N;N;Ln8xYP*Uw@U207Nv}v4u@NSKf{5uc|7Rj)H?D{WZ=EFtgLUr -R(mtZ!zbgp#gDeT2aN(XLYpGX@EZpYPMT0D#x-D7+sMj*7=VxHVQK*}+;3oks%5lB38CSD;AYd{Ev5t -iG3`P6Jm`hqIuedSxCwU#==y}=P*u0$U0ta#FFresT87=t;*LzWYHw!qm;oa7U$le0JhIi0A9I{Ar&u -8^HBvBEn?TeAF<@{zoA&%Aiw=$+PZ>RC5PnJl&&xm`k?==+D-R3{w-B)!7nPzxSf7&kvuBKExIQFM#( -)wFgF0@hg`ozGXxa*ZJ@2C+l4%Hs2wJB3H0$dIGSrDALwo^YjGPd$Wh(w4tTf$(Lw!KE}SM%(})zC3zT%BPiy$?$JoxFK&hR$Pg4(m_2>!oalt&i5LqRoA&a6 -h-5ttlT*ZaW1V5l#o)Zg5vH`M;05=Dlv^2;Jt{{S}JTY~5D0QJ>{dCp8|D6oi -o{P?&U*AR{&1R#?7D_=ARO{&b+<>FxEo87eKkb|YsFh3e(yCIHD#*&4h_Rb{b0_xz#pmY}Pw|^?zH!w -C(8^ekyv&v_=gDv!Xs5VB(QNwHHy_YhqrRR$e|}ZhSK!);djEX-pG@9MU4A}+qukZ?*y5$CW^OJWEp) -$}csrpFoZ80FOu0`Efo+@TGo#AwBB=H9#g_}GB}<&L5M%O>TvuwPS&y(K6}E@X*^nUnx?W>CiA`!bUf ->Ku9+tfB`2mAG)JElqipx^&*BkIH=i-nRB{chZ34fkY@e*Mhf~!#AvXDrz5_uSK2yAPS3X*$@DAkZ=H -=5I2n_DEu90l6(j&$;f1L-%pNIOymU?-&gEV4+l)`eqhGWsr(uevL8%oF(2jVx``I-OnqF8XoP`IT!r#$vu$uaMj1 -9wM38uypI=g3xi5{YIr6YL8T2y(t>Ihv<(vO)vC8!i18ryaAj63sm9+iof}Z}^x~RqDBaj}c~7<*S6p -S$a)@HV8|KEbYU<^7a8Tqz*NXK~oFldKRbbx<@uNrP(v -kj+t`V|P$yq}|thmRbKJtH`;)u7$aNNx>;pz`sp2D=m(pcwTmvGeXYM12rJCK}$Qyw9Sa&UFE`I!4MJIg5C88~+QD~~AI&E;lJ$slBXYSzu^2)^qo^3YLU?DD9f(v2I2=(wjp#H1ELf -wN1joKXx3R!ABVh?t)pRg9Qe2S6@Yl%;w*$~e_+a{#fQ5CT>uIi3It5e}^dRw|$Wo}`AU|K&QS`YL0s -=0z4_&TNwkEaHx41s91@|135qseUX_`L|7Dk9+QdH_#3GO$115LSg^}HAhq@WOmP<$-NKnfM;j# -YOZpdgDUh^1L?EG-bN8OCpP2}*Jjb@`KjqiUD4tO-~(%2{}3pt^bm9byzE_gQ-SN`Icvq)Z-}9$gQCQtK${;fp -q!PE}3of5t8$!gZuGkrP?i{D* -$ym)H%UEpXgQiJuPjC6Ih$=+Ajd00Txf-p&Tr-*dustTj$;*rkW>6gi`V%mHl0i`#`iKN{U}eeKJi|X -aW`D9cFdB@WHc^N}taZYtM@Lqddap~_V2E&ziN?ut-B_|WjH=S$hTW@AUIDpT5s8=4ty7$LhO#{v-gw -f*v|VI_wJ1&X?2rkAHho_8aV$Cual$Yor^V5oC6t{O-T=IagR_7mIgNs!$iQYn8XBg(OD!VG$3GIE0(}3gAW -etFdFTGK0z*YWJ`Fk(1auO5!dZV|;lch}5WoDzX0>>=`NxZI(Tq?9djNekUQ!eD&0H)rCTfSJxHpdQ` -h|LS)$0lQ(L3bMS^WhSP*Y?1`kqjGsKJOS#=Ek|J=b=XcVs`XcnZ^CI&2hYg^`jh|hAzBEXK*P|{Gj- -)>1nbDK!-u6D$R*4j_v@MN~h~vR)26%bg)Bo$X2_#DrNy2Tpwls%MVRQCHbTTpI|n=Gn2-Z;Z7jj@R} -~Os|REw6|^t4il#Q^897h46@0j=3sQCpri`i(vIAN@>lz(}u?;1Z)}2#kyjmp|W^bfiU${;R0la-U4S -3TPI|fw=0n7m)@c==48<_o>_e<{f7EWmEjJo}7=)^TfOzHEWGYa6ZZ$D1$yFG&sf_>u0h3|Nn6H3$_+ -pK?=;%@Wf8$3tDjrruxU>gQyOf0uiWI{Jf(Tfc(DrBJ+cZNCjS-+@f4&cd^z438+H%s)L6x>f6THb?1 -+>IJYNjq|pB{H}2(v~79%(H6E=*{FY&dmp-Q#{1O4~F!2OP24b#s%Ta?m%&7qe_WS`ou5qe`KfRXyV) -Odv|Uhyw4J#@B@b7um3@_#!0pi?8*V#;QhfF0tMokfzF;Znx-tnx=>^pi^og -JRxL45wj%nla?U^03;OEkV60jply%`ykuG%omL!$`uY22-gOPjn!ON4IT5sr)io3(ARC`-D*Yuo)a8<|Ea?)UJf|1YW_<#Wr4xeM;dq;lWg -e=AG^%1jK7-ZuI{`-ULy1L#3Jzy+1F3dwO{7p&LyAi0bbAZBTn3gabiC+`77g -_!+OiW<4Lun!R)%7J~fn5)T}K4F?IyU!|lgl9kvaVny@*lhKgJ!2u&VTg<0$pwme2W$A~2Q-)F} -+fFI%uBc6Q&zt4K%M1&H(%@M%&QFSoQBddG86aCT4EV}>hz1{gUJ{bm){fd5_p20eI9nD$s6$OVC@sk -$N`3CRMh!ocbwz_hU_!nG*r;dxC-o1Ns@xkF0YAL^KMvzUPx$t96IB@#v7zVnKg}oi;XPj9L=MSFfB# -+!|xe0gY0Et2vcd-CRZT&?p(u2gaqDSAMEVZQ*@Wl;1UsXtsW>UPS@co)k7x@_!!-S_nEO_pCgX9A_B -1GX_jSteqg{z=ZPKykrjd@zKgQLT6vg}^n8pTi*d&n$PW1Rg`SEpM4;p94`DQi+>fqDgn1a2MKye@z9IDYBL}gKlf&b0j(C -RKdwfZhtWBf9)f`HR%)=~#cNy;>rscx@83*DE4#>?}Kggncx#1sPCi{w3iK72y4-i6^Qw%r6e+Llx=f -486p}u^yZ|6fMlCE)jMn1@4lIG|H-2pvRgh2}$KM(KM5)OseWzHy0sQQ2V;yZcjV5K>lY@9yf=*9*HG -WMY9{#xDdw0IDk&6cAEyPeSRxSbK^8A#<4ZHNovF^HWitSAUQoDTE-H$Hblk`SYvyQ^z@e8Yv>*Yrq+ -;_C0}=%KI6tHn=TH;L)SHSzV4|4P;XUTQwWJ1-07Z#{C|ZFjxLUcQU)2kJq>szQ)wAEM@l=dg2p5ROWahzO~Vk22m -z|PKO`@6Cey?;q$u-_vp)ERZ7g>eY&VEjS|1Lfh`1lY6`I=1;n~l<*`S_T`}MbR+cATt0N_Re#ZCf*_ -aHYls^1HQ(PoUJ=SPBX~Y6!+xr|88Lb%&3IQQIL7htf0Dl(BOe{CMW)hZq7r%^(QvU`}O9KQH000080 -45ZePW0!lo@M=0p;;6cxu)WPba8homUUayl(q%m_gwQ->eV{h~~(f~{6rV;U` -1D<+FdX~X!YR(WH@%Ke^9GNMZ|nTtx*rX>^QR;6N9G`W!#*JhO|U8LM_PhauvBYzNeQp@M0P)~Sjbe_ -u%-soDiFj#X)lgVVY;&~267VKm6i}+t7YI7^hPNjA939q*~uWL4ZF;$!2#MaE_6Nc;T?9ARTRrw@J31 -Gnr`7BEY=9t|tYPR1gIz1PKC?PJJ7r>gY!HKFwxn_lhj#=GocNUJj-+%1Ws`x -n3^sFT>J3me!1ysog%>OFIf)LOVJk(p&euP9~QAUaKdWg3*oG@h1t+iTi>-%JPA2RZ*ytnL`Bvl`%S) -X{Qsf&9@-d+8CwY-`oUp#%I(!=*1e@+nRq!;?t>ZY -j)C^$C*`hLHELq7f{xU5rh;GI~wzxx0I?ti6!7t71*SJ)3Md#m#D!0?dv%o8(d*k0y2%awX$O-1}Ucd -RO{DlNGYo%M(_ZpiXvMW#y8io`bvK4$hRxCbnaa~)VuXwT|RDUIa0{9R}U**SIzUC+H7c7^Q(PwgV}* -R@+9XjyLaCKce_KrP_EHAl>vG8YJ8g+q0VL3Uve67d?q#B-I)tu*-|31Mv?dOo*mg;}uAk#m(OW)b{{ -Zsb99zq?=F+`a!0y-a*OWJq`t0{Cba+G -@P6)yt<=;|6muJ+GxHtfkbl&S9q_?O`GjRdZo3})3ZyT3&peXK{L -#&INzmupC!*m=Z>#4m{n?~_9a_~Y}%&Nc6HqQVxa0*aY$#k&6 -dIm)agZUZO~P&r+wv0Sz#d15tDr($OVe;FH;61`_*}5sP`;p|LHXRL3%XQAbQGN_BxWhuh_Zk}?A1Qi -hxD-DiISm`AynaZt_~u<1u(DA6Llbd<(CGgw9J -oMlB;)i#}lw?j51bS}>^8M*N8cGaq=q7HF0{@mK-VQ?Bf8bluEwD!w=6gy)4qT9s!FeuqO$r10kL@xor-P+qzuh+);-VGhw!;Lj?}rRxTiu=tCdq3S -7V5bpe9vpgHtli>!Ye&D(7+BRa$)CIB%V8O<}}6fxuhwCtw^i~bd{pSo#a>PUOr`~KS2-GRB!&s#QL_ -Y~{dKg?CWyLSK0en;B)ddE9%ZN1+G#Q##+Sg%j&1UyV(4vxiHOlNnDbo|@ds2wwtSLe&MXEvn@=4Z#g -R24tuil?W`Jj$}6euieDgxygix<`|AnwuoJV|QkY8g@j0N4IJV@!RJ&C#HmGcxtDy+b~{)?!&fSZK1b -?n3Q1~d?*Hmo*H~CF~mI_DN_vTonAkHh_6-?cD*%hZ1 -Lo((k0cyJ*a=$NmRYUi2q4Zu$m;=Y6jW!vnQ8kK*w5iRTS9DH_-{yLkUDK+#(g&@^Z`6L!JE57$ji>3 -0dVn2`&_?DppN%Bpk592s<_hkg)92%_aLVgIJ?P^oz707kicmV=64ITk!67KYXRlYDsm(X{vh7| -R*8p`e3yz0tx!df)J=1wb3E_B9GX&($$Q3D>`)imlhaLcqsqc&!`C03x-CjYXGE18}pk44=@OI+pW^ -t5W)2}Y$D%X$szqBFw{POareFl~z(nUmhu`9Lnkwd$wnXKn#<&)uY)|SWzWth!t?t9J#85ilmo*&s{? -GBBtK2=F-wDZ=1KGB4sxX0vi-5WDVfN@(>RyM;eUjH2HJE=GrdNDTKY;eYSR(SQ)QNI>{O+6gS+}iY` -(-ci<^zaHzYxGan1qQJ;A8_|F_L|=Awo~;Bvk~nVTiI{wMgI>_O9KQH00008045ZePRaQACO8`a010F -O03QGV0B~t=FJE?LZe(wAFLiQkY-wUMFLGsbaBpsNWiD`e?L2F98#j{Q^($~xrARu|M3QsKo;KR7Ez4 -`|+LlXF&b#GxkwX$BCmPOh=OKps;ePw|1Hb?na3t5}a`)j_iA>G_jqXOH(Jx?8jM%(l3RO3l#*E -o!bL~IK%4AD|nZ{e#f2IFxSuR -#Kb2L}hUG%icv@gj{Y$*e90`SfSNad>t>+?~q>h;5Q3)p$H8Wx9YDLVfUOG+rb{S&ge=2gBVJwe()k< -0^(X(|+H30pq}Pl;LPDak_wp5*`kQ_Q-&ETvde{d?XNg3xz_$ddh@qH87A>!v<0_gaU+kS%8v-$nuJw -HV>^4@Wp}O+G9Ylqe01{azKM0ggEu}IS-{@wZJw|-gi#tGip511(1SbL2?~6Y0WOBw3uM0XS{0=*9J?eSU61ME_1&Ax8};xOo}SRt+mA2azP?#=-MZ6mf?RD$m9zfnu>2k@gAV!KLGNs937N%Ds){)vnDkrjj== -=zZ4b!jHYBDdA}P+TpuypTknh!>SCM75HF79kq|dnA4D)Z5%^^#$(x_ys^X(%+_#5r2`U`4)H@Cn;=i -Vi^}x*pEd#Lk`7YNr)s9IS^BbB@7^VM=pcV_Rpnh5htD|QcJy=xH_vr*^M3Dt!NHQ(BmUN!fJ<4U!o? -1OIs_GcXe7NEp38Od%Yg3EHq1QUSE8F`uwCJ>1rWB?csu1qeMwCz~(SBU;)JsQcR`HM7#l02sW)M7cr -2I_`saRZ27=cS?VR5lPJbj(`jV`efQJt9Vm)S7Ra1fT%diNRY#Yqg#oo9iw`7PrgH|ECS_F;xEXg68Y -oB%KF$m50Y6|R&sNPwyplVyl|Y+9DKcCM>)H`;VlK;;%AGTFOPHKbs1o&q!8$@ib2AtY#RB<=I1q@ag -aNBTf7Bm-ZU$SVb-D7jx?^=H=1MI6AlplyA^?2N6?n&`=JI%|Dq;!Cjh6z|JRlX$~?y7jZTh%)B`)y`#BY%{Z_CZfeVD20pB3$|LoHR6R7rpG1i!1U4ty2QHC}88?=Ec3@;_#}zIi6w;{#6$5(;Z -`DexAXLTQ$mXsxjLrxKHb!QSl_qes8SdaCXCi=JoCx4cnj%%IH_$b&(LqEKUPC4M3h -#a7ioR7NGYaGjfH2q$HcAwW3L*#9Bs9>!sM##RlBjG7?wNw*iQI_!hQb!8@!=8m!(Tk!3^B9nBX#)a# -IyJqURv&PdkJCjV6zDUk47JJ(>FMK}0&(#Rfuwji)LsGeY!hJVzutXw=~287Ja1dmghEvr?7)+N6;TM -oY$vz46PqkB#P5v7Y@xakfwcmZlxtZP7f9aq*y^bn`D#ATv4y|)aEr+%cYEL;SUxYpbou?@pUowsvcT -))4&e1A87b$N09iam}`tUyPiKWD|*|ID$L%U4%7mlt>A+q)NcKiytZ+vmq8Bk}zB6#qQOKi}h@-+kV@ -FQP=B_W?SiT%M!HG(!DS)#dr|NZ^J8YY4xBwkY8nwP;&!xM9vJZ09ZIb6!^Ny5om!D6Ive5ZdHd+CQ_Jz4?s -<0Ri(5(4L_khD62W2GQhIXadZWat4+izDk-k()e5FVgNt1e?q%9B8sLPp{zWV-l#Wpf-OD8h#odI-~t -oTFpNUTHaTeNt-+kunvIc+}tcHrvQp*_;oLW?>E)zyY#Ot8qN%iC>;kxf7tn| -Fx2)^PKIw>`N(Enf}&q(aV<0z`eB<}>n{eb-MrBlx*pI_NKn|(k6HKt6ayVNc1K!8+%pRyK!Zj>R_KtQYM3bJxMj)g -58gZLP-E4%L`OB|rEVq-L#7;b2H}To9sS9%YJB-e?I$)70`MP -w#1F-5bh*%@%^Q!FT}2reX#zS?8Q0=C`j+NZJ&#&b5?Cls{KD1Crq^P#zYi^|Sqz4?WAqL8(bzDfGm_ -$OGuRbWCgtDubhJ}+1C6+~rYo7IT}$|Sip~qEpR8U_fv=$WXfFjfXI5)9%0)SQhz=_6{jVsNSTP@IP -?`wyL4=G5~piDu61>nl-4SaDo&rQBSg`pQP0H&dMKd4NZJa8mN4IA+w%u#@zrX{U!3e&291kQ^cRc!z -|fvTxoVC)w?O)@evVeKW|?G8 -nwx8g;Kf!L-z&LoIC;M6oD0a+WO6Wm;np79`ILX_P2^0eDj>bXYDHC>_u<7{3VgMU@hHtb*;SLLuLzEXs=kvGa#p&xDX%^;Wt{Z9mV8BT*5D6I;Gc5I_z8Fu+W9EX|Zg0u{x3yg -9W#uBASXGL>H#!->j0SxdmVAspnux`*r9_eVRTA&yoS8!mH?u~zX|CjgIAKy0|Z!K37WkG4N4BduhkF -d)CIChA_$RrV=RZ_`Iq$JNmd6*Q>joE*;SlO7`gVW=0F&Oym5Dnau<74rIjt2p!PvJL>U~lS_zIk)`; -#J?p)A0YeWq8}+m&S0=iKQ+#NmfVohL)#^)?nNqnbwsgBVD3ej*DH`GB^ZbsN|W}fyOsi_6G9`bstXl -Q371dO0Y{FFt!LoX(emHyEW?e)I8NuCIh|85_u#%V2o%@F6g76Wzrf{J5GMIcyBR`iGDe0J|C{Pw9_W -{=eKMRWXC5yNjEwXf?%mlB(dqSkG9YIbgLP87*-Zv$bv?4xs8>P^<&s0&iiU$dj$JclRl!v>?WpiG2D -G&uiNAZDZx@EhQh?9kn2jZ-zD$J?7QR*GwIb*<_@o5GhNZqc65{+i1KKfF6y1* -n4-J^Sodf0Q%v6{vbl?6&vL9vbvq6`_)TNfqG^>C-b3()BMKL9o)n?KGp|y{R>F`VQK$jHcX?#L{ivp -;2FBLuG>L3D(i5JOgqVEaO=03gaRlu4wb#w5p0L~Y -`zo^FRcIT|k+_a$Xa#k1?gE>D`MCvW@tPH8IRd)5nfUU`))SE^6ENuq}8Ys4q1Mmn~o6Zblvr2R$;J7ZKTNa+mvW@7|o;^X`EOwd2sVL6 -ZM$0%jtl(mN(o7Y!=eRp{#uI7@|-&Xdqp5b2l8EQ;@sPKzlc8&`<>MF7W5EfJHs`7y1bQx1BLcpw(6;=c)3OJ@j`$mPXe -znD#E)BN)u>}%$a!Na4$c-b(2Gc%CUqZ3vfgGN3pnrkp(L(?`#*iGn#{OJkjY39R^=HhIpuZ;(!&a}auq&pW)M`<|641z -`3gb)loPe@icg@l4jaMB%Nl}X-r2~iQFpyzer!D-Z+i;xQ8H+Y4o!3vM90X}xYEs(;(B)crG_+v~m&(gD4F?@6g#6rF$~aUB+*#aYQH&hV2yt?k2oy3T!-nX -|sTWNcCco%ydZ+K@5PyibdEy$!G#zapsB&QDd>n(G*$uOk#dI)jtiqD$hIEvM*cX^23s&AS1NI5`IpN -RAE;Ja$yyV4@|wax;$vgLV5BI-96Kmb>E&?lL-lULnC#6G1!#L2WW2u1qEla+8T=Fsbq|AkO8?8(6gKdbY -9zu~IUPh(#z1I@UU8>d6O({qH`3ZO@(Tshq{EGsHZXB`Ul%*mW3jEy=JU1d$fXi5Q2C&Gbc`rVcnWuP -r*d{EL6Blo3CVl`~q1I2`Z7qr^qeT16$g$PX%!_eNJ@ycVgh)5=$tO*ddlQb|2wT$QhW)L5>b?r??{i -79N2ni5<6NvNC<7>+A#m)BrhWtFPdjr?+5oHrma$!f4^^5Wi4!0>qutbK)Xp+7CA;bfwYa9DT@u0bCb -oalgoClipzrkq%RFh?>BE-9;uqVX6FO|3vcFr?I~%L-I$1#`V&aDFD-^@aVi8|Pq_en`unM{%9BVJp% -B{0gIiA21PasY2rF+AKfvD6~rJ4udQkn| -5}TrKiqeWbM2>`c6@m&=_l>!Ua}*N=ydXx{r_W+AiWYG?$I3oRxHpa*yQ+e!-Wku=GJ>Xt}p-Wl)lYbwH)8msd>A?`HG4}n%n+?ENA@7?fU6sS96TkWf8gWVVeB-dtJ -*^Mn0hdn%d>Bp-KWo%{VtoPCXL$-ZL!o1R`M$wn`1~0%U$LbBO^wKx -kP#CEqB(cf@br-a9TGH;7-tGxG6HxQ2ZGQ3DZ`yl;)qmX?F>QjKKLNpZ5GAM -z|0G>o}1I@&rgh+CCPhN>utbMVca;KOudjI}_nyD*uw&k7aj@rT&aoR=x^q($rYkS{*A1N}by?K#`sY -->Jm&Guu5bRy79YgjOT-W^2Qf_wU8xRE0@<|L5mf9NupXNhVKSRY#9* -R&i3wN_st1>#}j-QINMCtt=j+jfbQM{qv~jb;&@j9wmzZO?q*#jf;w{%*J;ak*;mZ(bQ-ouat(GvN;J -#!`$Ya6H(A~U+>Djxz(iv4lbOH%rk~CXgwHS*ehI-ajV$LhY~Od)&0wW!sjG>+P`o3cDd_D|g=QNgEwDM6!1+fI#GD0tx&t -yws@K=9?xG>eSSysdNhn&ZZ=%>@HGf&JDL}Q<6}#IsaE)pD*2rDe-Ad|$?(&0Q_|TkrEVS0#hPk_0$sm*azXW>uBg{1Y;ansu)<{4z_*x!lt+Q# -15r~}zFJVd5E`OqPxK0=CRG#N#CTeEiBzKHm&kV|J9G!b{c#yD#QN^->~sw!8{$3y30$ ->Q(oM>eJxbRPG(IGA7OX?Ke^+WiS75Kpdl=&W*xv(6%iP>sX?S2O%35zo#XyQ$8+k=p{R5Guk3W|Y1L>Xruj0NIa_h#Q-+SA>S9L!isfJ}d}H=gWt=`=8mM{a_>pMeYH_B!^%0CJ; -yKy=|2;IfhoZSgph-gIyDZA1~q&T3(QLPMYMeAS@T`U+d1*6{Z%gYn=g&$MC?NS}p -Z3L98Hat(&++1aMf28CqaJBScPy2nvUmcZzetW;FgXz0k(1j0;bm>$)S($X%oa?i5H@etFAI4v=H9F-chhS_dC2Mx7Fe|Ql9t=0KT{z3zV*i45gi*aSks~J4fN8J)Z>xVLucU7{y14pRk9 -bNUE$K1xZozO%xISe$Il_2Sh!GuW)zeUyAM0NAer-Gx(?W!g$e*NhgnS44M6^xAp^W;>twmAo@r2+SP -uXJtG&eCpX=OHEG8kXo$a>quAMvgXURXb)4|L=wK;$8sKn`DHJ%4W0n>Xe7)EN3`FrvA>`Y%DgeRAty -h5Jl%2}k*d6guzI2pxTJXKpJm`B!?!)U+}ntjBxAErCJqA&_V7~<9S)VpgvdffWRd2p)^`S(^)4u$1< -PgTQTu2qeVxkRPadCAC)+Jg|SpKjiA)yr0yQe|G_orPr7C8cFZ>E2fh`$k0W+}s!GbTSwApaE!EFV=R -~B-goskxQSw%ZR$u#ri%sKMaV0Cc8ld2vm8o>xcq+Ek7Nde2!XIFm**t?TDg%gW7)sP)h>@6aWAK2mm -G&m`(ry0006200000001Wd003}la4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ7`X>MtBUtcb8c>@4YO9 -KQH00008045ZePVO(B=Mn(`0L=mb05Jdn0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FJEDBaAj_1X ->Mg-Wo~w9a&K-faCxPX!D_=W5Jd0#ip3Y%P~3YV2Sb&RL)_rF>7f+k#9K#TYlS46etwmZ65DA?OZO&r -n0+$}f`H`*X`!X6YY?=dURLPeSSkySphAax2kwB7XbnQuQX!z~r6JX#axn|M36rfRp8`tPUzDPu|UGY1ZmyN{;W;5W@6aWAK2mmG&m`((DUlDK&006ow001Ze0 -03}la4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQEEaAj_1X>MgMaCx;_ZIj!!5&q6!fy$GSE~Dew@wb~Q -or`^TZeqt*pWIBR%}^8xNyw1|Lx8$dJMC}pF5U?z3+k%q1;d_= --K~hq4UXU`a(k*R>+@+GV0$#l3d<%qEbxp3TEvx8MM5|99-@TzS+mSok>{&+1pLbH$;_~7mD|nm7TQw -=pczKc5HC6L2a-NBc`XG0_x@enXgABf1C2^wrUHEe)nJB}0^-jD-t8v+6pEK_pEq!VB68cGSTwfsok3RZ0+i$Gq5ZULx$5tG03mSky#W+0 -bYkqU9S8d`Bh9+=!Yx#MmJOj#x4LY~vjhGvrO0jw2z<$+|Z$=XuLw93%Lf)u>k;$O8B*Ukjb#nLN)eqOpyX5=j^7h@$cjS^xWz*7W6upee%?9} -^{3*1NRR=Eerl5}u7)MW5;l|9k0M*PDXKQyA0{}*O+T@Y7eb3~GA>K-&V8^Qs+qR8TJONiw+5yzSep$ -n-l2($qeaF!RGEAgmaguCW2`Wtz8*tOL;6*EGqQ6IGm~s15@a+~I&3t`Gn+m=P%`cAYG`j~0MJ(83T= -G3UX~@ExM!2{RW4~}#MRpo}%&75YLork4K{H%84R7Y|>rZ+`J@7t#{77YU@MvxuE_ucaZ)nL%3d-_E? -(W{HZ_$|(!9-BI{zv`wJq11Iq9YPD2+FRJ|V)AeW;%UJ^}6=1 -_kNSfw^Z%kY;p`FmOg?-Xo -jRqug*gbKSDTO%PSy7NCWtfYqFkSYnxPl6-3#woHIa6i%bf2;ULs0Ay*^nwFEo-F@9sghs>}n*u& -QUj;7R1td!HeRet#z;xN7qV;b#uY~rIK;URW$*-d-0rFTc_ALa9DhD|*$WlPzd|(k%8`zSEq7jS)D#YVMPB#$cS;b_M%mghqbFu@ -d(nc)M>E{Ha5To|nJ}p=dh)puuNVY-0po=9Wz5~QgaCcsFKtbdP5o1%uWc -{JqLF+GU!M-$5H45cz!VPsu#-wcj(8qhHC8Tct%WxwlJlcRa&yVd4K)k(=z1t_188DB=-+zUR%*wLK! -B3!pYifX8v}odjNB_oc-udCb6W*F^oKVMNNU_#1R6uZ0rdCv>?xalUhRJFV6Z=(dNAlkFokc6bx+>4A -$wP;Ay@^A`dB@Bf5ksnQy>X%+fazEDUC$%fipj5{7yXhYJFSq>sWzfBjN$zAJYk -To-Z&%)WGY4&IU>Cf-%V+wm`m)Az7YZ#|F%~k5cTtde(o!=B$Pxrt%WPVdA(I8YGV+)yfDmf=b+HC0* -6BIQ6Gdf7Kod8cwwfN}@09!k`mF9k`g1i!DMa95WU&1ngJXd3!dhxtmD_NnggCv1E2u1Dnl(SQ6dd(j -y1pFx_EkSg3UgYrg1a0*?U1Kj54Iv>4UM+s7+_s4Y+1{a6Ph;ov>oylhj@r!{Xr!vKlda8OeiPX2=*F -Paf7Q9t>229lfs>jtj-bneKUz&Wr@GLyy^Icxm*gukAz!&P=*x!%QsRYa9gw`RW^$I~Nsn|k8t1!)z- -6v}-s={AM!ttw33Z``@n5`*s7I25>&{wLDP7L$3mxl(IhZo*01ZwPyzcA!8F{s%*}ZD@-9ncC&;e)11 -Ha3gXupJ4POQ)O%ZUu!eA4&P{w0AYU|%}|TKpDjfdzT_{AEawAJa%Kh&uj{0-B)G=nOR|B4bu%4aL@B -)~mU!G>e{WbCTelluBJ^!2-r}dKwxRLmBvp=ErCJAqMcYfE8$OYoQXYgrcCdP5@~NIfq$qTDU;Lw{cF -_?RGZ#Xym~D>MKFczeTrp3LXGF8{p~ZFPMDP4nJ*y6ScX_sDTTr=dkq^e*hf_&i -&Ro4=<*j&^gv%LBBOJKh%BXZ1}09wR!Wc1JP0RA^Hr=?1zWP~93pI}2iv-rH=d;B8#076Wi~PmgL_Vk@df`8F7~tEOQ)6C(B_G9TXJ9 -UPG3J!drPSfnyn?L!fs~n5eukishr}4!M(Yle8AKBYKlr%MI3J%0Lfn831_>ux~DmTE-#IJSd44|G-b -#KnzAGqJ%V|$s0$`%llidTu#;j9hM8mDr#qtlP-j15#WA18Dh)aA9t3#90N-ih*QfrK*=zvR8@#^E&6 -Q0~jT)fhf8fpi9Q9hZ(EHWE4(~J(%*G<1*#R#w9xLd1!N4k9-L~|Bt|AcQ@ppLMfAeA1-?d>o=-o@PU -5sfbffs#B8`MU1*(cT6VnC?}6VSk*{qF@9_a+Qz$JP8L8~?v;CqT#|82OC-tB^f<7Ndi-J(1~MQn;&H -L5`dS26-D5jE9Pdv)6d;>|f+fRh&-SLdN~5k0;*v(~y}MTuqMTW2r0eruW^u=ox|NB@c^&7aDjGxXJi~ -2pY!_4T(O~$tsUYQy>)p->Zh5bGq3-~&1QYaZQMUP6gA{zT0;%`rLKWBtNY~zY2tT~{Ig4*)v%syE-QC*Tgakiq3 -{s&M?0|XQR000O8CKQ-Xgi6!-tpxx8YY_kdCjbBdaA|NaUv_0~WN&gWb#iQMX<{=kV{dMBa%o~OZggy -IaBpvHE^v9xSKn{jHV}UIU%{maBz3A{uj`8eVK6c;4VI=w9quHFz@sVx+WrBtzELrTu`kfgj&f~_hA8CiWMAlQ8h83?HaEk>hDDJvk)Cg -YGufGOE3RZh>&Ql3Gy;e3-rl=9tKc~*%$XRDWIOfQgU87Ru~Usx7T#-kHNuoiqrl4M<}NH(+$W-vQN>D -Kj4*4DM@pN)O^LkXf#4ZB<_ItNm9@q<`Lk#G^bJ$O>sY_e*{M`9TEI#M)d#XuFPSFktLx88B~cEDi|ltdW0KFqI^}gnS*6N`eSUS%)Sl`VPr+DmD`Tp5NE{s)6 -f5*1yJ_FoaF8Pcr28!}}|Oa1cCpia^+SNtHG!1y=~xHki&a+B?z+w25Bzk)fYjwx|SO(N+GLFzfTzw{ -K>b*SEL&t)`x=x!6(Fxhm_{QHkZKxyZDMd7#%sM-!1%iNze2PIr604x&9_hrDzi&@O8Eh+Ag*uLZ45q -On2JOFk*7z~b9Ckt}njeDC(w3(4dl269Z1i`ZGV9N$G%sWUjRb)q$vle@kJvK1p`PHPlUC%UanZ#Z>- -M&5zYWLt7gk8ZK#a!c>Q)>uM{Lv7!8of(mZ?ggISgL1s>Dyhf{$UT&b@Dd7AZ&?mRz@I1_dJqJb(1wI -8>ccLoUD8F6v(^e?;F>vfXQtp0InAt^NtClwc`Chd@2LA73u=2K+H$GFUip -L3-oqBC)==d5Z?EetZ%Vx10m>J%oIQZ|Wp9qTCw7UR+8Mgzg8gL#z;ldb=~&fu{ld`-@Ve+4ESen1kF -OEO4t6bd_Fi8(=%0}rC^AyOhAU=eXa`cFZXPDM?2zAKM88L&XUIop$*IxlC>4M}6a6^3o?pCOT+SBr< -jwr%W_B_6-BAgGV^w``Tciy>)xN{_F6gBnHSOek7xRVJuTw~_c>zZj>K=~ma#VWFH}M=h -KHh1&#*P0q%+?E$imJ+Bwy^bT`^;V=HVYEhdG+T -?@@+!}o02!&7+Tu=>ZfTxFv4KIm>dH5Lnmo|FGKIGMEuFc#YZW*oUhwtBEw0u;?=w?!p%>E>iZLvA^r1DDT=L@0PjNqpGvzKV^fHJV@>U_9?`+>=R0(T$ -0!VjLUM4VIV_H?>3Lf`9M490;J2J^bfs>4kc^h#wk8`XIe$I7x|&~KbW$>4=b)H7sZVnQO`3gJyq;e# -F3(+AIz;y{XCuwg=ioijra=q!zxHqf+?v5$Fr9A&35wkr*~A$_L%M{?a`G3IkO%n{jCqEmWBZVPu89W<({o4J8CI?v -V+4S1fzcdP)h>@6aWAK2mmG&m`)=U^q8v?007TD001Ze003}la4%nWWo~3|axZmqY;0*_GcRLrZgg^K -VlQxcZ*XO9b8~DiaCzlBZFAeW(ck$iFwWeF%E^qKTs!x;Ri{2jZZvglKbCUoHItzz5|UU`1PhW@bT`- -E-rWU2f-kb2o9D~ZdfE#~EEfBY-34@XbmYutS8Nv-8#cS1`p0>hWkMEgB_zAu7aNhX*B-kRNg{Tv*zl -aQIL!-LhD9vWoW(1)7bV+?GKridzUQnE?19U8wP%Pq1yf-)&s5-(*SV* -reV^D-61OL(v`uyDh}`#4?yffh|Uk8n8v3Zf`Rf`SA{k@rMIki-#8avCJSJel)k$Qr9d}C5An*h -%OAexsB@c^a&o*4*FoTJ#%-AM)KuJiR1V#M70bs>*r)*OTGr9-3GW6dpDoo66>J-++$=v$odlGC{lC`7O=%4j|(1_c_Fs(&wR0PwjwGMF -m>>#pkP6|X97ecSrKnJtJi|jEK86(uw%7w&dMAYUMvj7i;;FRSo=)NvXJ{TdcePUOYVD64i(^6Ny;74 -JpLu*S;3~X#zaaX>xHu*&mHF)qQqWX1X|h|Fn?B2&w^Yzu8>>M+Fpf?5y&KBaRF8X)?fk#p_b?R&>j0In5w26UG_ZL0*EvF+We^Gqx#;EI)hoil^Q#zK=5=#epZ}`W3#tn -sEv7#lH@=+@GeAwm_O4O0-eM>QiV)EIx=REM;8mef}j&L|hD=BiLlf(R_bZ79bYiH)a|vbCHw<_tm@O -=JDQ>%@%5+Y!{O^&Y#Axmz;VhG&fAZEqmv?6Iu?QhHWP%+H(Os7lvSrRiZ3Lj3Zqrycv -xXnQB5T4Db(ou;=NGL()L{Z($dKFtPv-A#-j2F+Ak;pbHmA_1YR0c1@D;{ -yh(OYXxgdzm9(Or+~jOKnF8V@`#a2tYnZAB*)GW@)Vz_5HUT5C-#0&Hu!nB2|%>znIIbFm*Mchk$CXkgTYy} -6xFZ?4a;df{&;le-rD-Q<5iOz$Rd>xgz>9{aX$769P6fP?}fih)78y!x}_I1u1qP=`5h&5J8|zn$`SLF;(L#PaW2u>h1g6Jb1h^~+uZYtPXGDav(G>? -o=Xa4O^H@A~(RFjUY&B=WbN=AL5yAsle6sp&)B`M59mwToQn!c*VNaz6neTwdrLC0baO5+j87T1@Ma6 -cg!1)?PLn2wcvFn7d%e?+gr&OosNhp1FM$W2XpoIsImDr1EQi&!kMpoRd99^sj9q}b(bVdWAF>|sE@y -{Dog6-5ngR)-CgLt+tOn*pp99D8A>T;uVnce?lk%?%!cIKliIp+pives6;BBYC06OBO`VMAN^{w53$Fml<#On3C|F-M0}_Nq6}iF%Pjugqk&D&z|>CLIL}oNK-XSqk*dc6>AeTisc?4 -xj^=XD$_!9ORFetzKz$G_f>XZZ(mT>#{KD$1oOq|-(ViJB1*i@S$VO_5q1C`H;}lU-9nP6g#el*Wm|Y -5)r)Y}B9EaLWU^OWKYqcNNIx*XUTF_|WZw4)8?_+w`#jvFj90Xku5nm_yiuY%W{VSzTB5ep=d0v#}6v -?X{&BfQ2*Fp3ENfl6Tv*>z;1tOc3lu(~1kRztl8=}wPn+f&eRMSUpQF##tGWekO=mHcQ$Vhkj_DUI?t -pP<9#-xt=dDTKBXb2mK -iBK4H0+o!-3EZiuQ=xh;*qIO&-EXjUM$HC;FjS($M?>L59Iy}b%j55vi;OF=t6-S}U$^@Y3edj>M+9qxX1^ -Y*tgW`e}wkxqK$QDSHr-)jdp%$?(MU9Dw%(OxTnO78|bt37ew--E!IMQ1Vm>&f7t=G$x>g~pv2iYC$= -h8$E)xxZZwfl554Im*jt>Q1ZS$rx7FFh#r%7HideAe-D2scQZ2Yv(|iD{Ip<_^2C_($3s(?6dQo>su0 -d!e;GC?G8{cM#-Z977rNEwcovwCnWDJ`AMm2LcF%lpIQlQl(=t3?8FkFB{WaDnL8+p)$#WOwW3Ch<2sPy{+mNggbKc(+}O=HhfNrKzZFdXLY@?)cHv -!jjz(x<4>9_+?xM3?g<5#8Vy!mMR&sKSJszA9>WI^KD1cqiZ3z!cUI0FJeml*{0PPBE3^s8SdgxRq2&KqLKo&B|A@#$~Y -t^98J@s17YfQ{gz?ova#ka+Y-OO`a{lSsNCvEjr1_K+3>HV%CEg@aZ&aYXOn0f3xzi$RMfK3D)Wk6VR -<6@9&WUC-Y{Xo=70YYRbmZ}Lo>~{QB)=yN`S)_L$FLWF3MyY52j$XkHJ?aG6{ePNPWue!ixD+Lx?9@8 -B7GS+#YZV0}<2ooBzRij~^~1fk%YOQ7FGPuz_qJ5WB79O~>+5Kay1ZFnf8i;YL4v%^_ZdeNwA)e?8e% -TdFwt`p@yT(hh*%+)_0iTpOUlTwrEh#s8xCqaFD)6qfYN{rLZwMy`8p%5`G->5+XXTOZ8vpvR8xX!4F -39%vHk}N&g0_lE!piz -Ycp0q3c|FtjhoJ*y#2=itwyPk=o4aLU1MGZhC9H3w;@fRDOq=4Fjw*5NeC{w+{tELHmG7ylMGd9c%^$ -kDl-8*I5uHlfj9zhij2R^hfv9$LfR)&_@ZH8Vgl(^`>EE5;>$2>YU~yYz>fHtD_ZH9bK44(O>`@*Rg5U#}s;Y1TXE&8g*j?ino-L0Ur}~T -_oVOi!)XoY50)wfg$)2Y>uvKSi>jq2z-&sF0crt4HL?NKrVx|l3ys21Qvi12!Yu?+k1vmr>Y8kNVVd^ -$78`{HNvV$(=^iOJtH~~Me+DDSg(2HbFs?D*gmuJ47#yVPsaVOdT9dbQ>3v*-x};$3PF25Hzzj51yfF -1<6$DO-mThOhJT!s3gUj)$xkhUJq=i;6c-}Hh9F%tpHV|Lm_qxBl$ihxyx^kJtYfd_Bg)N7zK}co6l}ff%xdIvs_q -2m%O(R0*)I@~R1!pZ2SBPDH#inycVRGm4tJIdKVgxb`6i74`)>LO_4&W -vQEXaTj-oLBzwnlm|43hXHdp^Oo^rq>D@Vv{@{}j&x5xKSYnFkxvJj}XA|J}8IPvkOo<@ugXkk@XBr) -@7GSTt3HVKy5;6g6pZAzwJryuc@w@0Z56-&p$zge?g?G8IIc-1UUOa2u3PlSnjsXk}5bPd%?lJx7N5J -iyqbZ}!QTuM#W;2#p5!w+?16KKBko{u1wr$rC=}E<@9gwCulo(3 -~ArH;pQ?{UNyYnBNkSwIE`Bgscmvql&UFE8QAkOz(2CnXV`ly&8-f=8w&6D36l;!VNnPCKp}l(H$9lJ -R?+~sz|I|(zS`23aSFvTy3}?|8M`GWebU#rAyoZ8(;*x>wsg^7adz+SOb3)Uv_(Vjgyw;y7nR$rv35s -NtqGUYtI7PQ+lhZZyFMLtpsfa`wdgMmxPfj#56)P3IoBQFooaz -+$1XEEY`R@zhkvVKa!j7=#HQO_f2KC+0Rec6bUdR{@mVy4Tw|%U&#MI;#~3A9W#<1b<6n-?{9bpSC(B -nG}TxMbcKQ`Hp85oy&q|@N>%)!s1Ko%Ak>H1Lv?cP3Rq|)9#=jU(}7#M%Uxd>X@b2SDa}yk2OKeQW}M -Rqoj_@UPL2C&9;u!*EHA177allQUm2G9ES*3SM_{!iUY(SycqbYUXL1s7N()@Z2#H%*ygmo@*!>wKMK -AXqYvIa{6x4uHv_RD5sekywi;|^=Dz+lg8_&9Wz*4YleXR&Ev)L75Jt25tr?u-oPO_-hTPTTBfMPgp& -3)RwUzv7AZ!(?r|MMOKG5xwtDt>6oiYnq#3mw$3@3DaXBlJ|VEh_me;Hqp(dq@WO?qiErKZ@O=@t`#j -*jZ#APa;F7kmsAjgR%iGo;batD?j(*dl>ib_Yp#3bp>-fUEEf+hWJ$#}79_oEm|{2Sv<1-&?ZBE6F<{ -qqe~7^&xGrb18+DwnNt-ZE$8VK8H6nB7z5smu?blmr($_+ZP|Ily$M8(7w&UW_NK2!~!W2**&Wk>C*) -gtk1@QS4F928gF;iL{}oi9Z`3KwYcyF>qYvt5B>&9rM}(NkWdJJ1DjmFfo<6rsjo9(N(LV3+4m#UYnl -zCt(P$E*`9RX?N%~S3^X%tD=4(q=mdx7q%H^OrD~w@rQIvGUBm#nTN7{4oJQs*c5A8Q?ECw0zFkH -*&zfVXf;=OW^RnQ%W@t^FY*<0qeWZ%?(#UsGFo*N4AkiV9{>Plb^rh_0001RX>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#PWn*=6Wpr|3ZgX& -Na&#_mdF5SgbK^FW{;pqvcxub?MCOjiNjBw+H|x=OGOnH2KFhOHd#MydQIN%$BD8$5MtgPt{rUwU0g# -ksXSeS5PL;}7B+zIy8r_Y?188q=Z!nQ@mCM^a%2p~bMNzHj-?_>~m8WSkJr)m1B;s3J#qEcQh#sOOji#v-rK$;3h0F_~GN>0{O~g7W7pf{nxsU^RCDdF%18TWSQke&WT -7dteOe9NWCdz;x8I{1Nn94Z9I#5?!Z-7oFuA}%qx|4&8Y$iWr#ie>kvO8n|N~@&=>cHB=QSkau<%f&p -ZXt64EIr741g*@7*i6o&DlNs;N@kPEhe5fBKpKl=RS>_Lb)cT9QpC}U`UsrQ6t<=5BlGYyOE+R2ZIFX -p7Ak#^K#n^FkM2-bOpXNu9gWgb=30zUp(+#T7?efMR=I+6>B2Pswk;fx%^v|XPBr7Eh(u{`&ibMAkRTUtvRA -qOEAcLjXeWEeZ5*EK^K0?-SI00wX)5G{%*qP5+6WT4&>}A?$=Y0i1WU1AB=KUff>DFNK -|CP*T$ac^m5)_c=E)RvXjY{%5N|4Eo5rD7;KV>4M_4nH)RBQ{Oro|z_ek}S-kga-n?P6VD*X3j6k9U@ -Ufm}!u4+E;o1Um32x#1(wJ4V;Odf2i#>GaWfM%i3JXJ_XlI&L*L#yS<$zUMhqu=T280dzAf^?=dIzvS -tDHAa55TvIM|Yq0=@N$YPazL#bFt*Bp=i(E!HJm$e#M)$d#517{=sO5yz_*v-pf11z;7pClxq(-wZDL -13~ud&LCawNtom+w@S%_3Ck!9gEcm`Y&^8l1Xx!>E8MQihodK>!NORT$&MBp}LR5{gd4pdA{naV}{$tGgY|4NdhC%Zf8zj -RxOJYgcDuhO7ox>yq0z6ih9|a34%M#3Dg2 -oXFMK3>3|pK8+!P6I>}2(rZ@qKCK*nif?EL_I#bzx3IB)A -;(MTlLN0#4h6xKUQZs2}Ua&KVB8AFOzGRB;6qJk#sE_WiI3bqca|B{5jh|boqDZu`kQ_Qbiau)I3hY --#k&w#fDb(g5Datk&6A@n|d?2ca&1mDDQnM40%yB>#Q8SFb^x^&fOw97AD3h4IItUzCUuQs#;v$)&g^ -5ry)F`>{8TiRCuC*)#17E-_)V4nO1podeN-O!c?lSlIk|n5*RvBRa=$rdD& -0N#b<9-3NXNgi{)q}YOJ^*5Ks_&0yWls7`zhV3ax7xGh}sy@iKa8XhlZN!CGQtU~d)_MPqCL -t%jd&E^g1mHy^IXf1X_Y$2s)i=$qqjzZzKLR~5u&5Uo8#DYyibTVtQzp1(W$_~AAjUtGUGznL)e^7AU -9n2q8U1*FgeJ|r^;wM3k(D3-2J8i74EXF7OuLQeQ^q1I?@-Dnkp<*dY*4x>D7J)C@mzD&@TJ06z&Y5; -*ocy>MsUw{2g_`~?eaPs~P`Z?+;Ievcz|Gj<{USECq>(TM6udzH-?JJLzk6wRkC~qlwK7RZD9REK#3q -M`lzJCH!T=nL;6}>i}!tTw}D`K^`lgU$AeP$0^t?ka_Gy2v$hT}Km=Z)d675m$KUV~2>23_Z=gT7m}= -Wy89)RX7I<1F^fgIz23xB0vVpQO;w7`NT4J%_`-ruynU!yr6kRzE}EpCRg}>UqC>X$|rwDs-%4+$AmU -xV(6HeT)$Tgt{3<6BJ)Y0s|y9M{kemD2f*#Mu#W?{d}FGdIz*%shPua48vNP7LpP -gt3>BqqEf)?0)in3r63$HRjkqw7E;S3gXPv|aLWHl9fYVM@VGh=L$}-a(C)RSapbL!-IuQqMuYzv3?M -XIL`77V`4H%j#Gc#2-oXhkAUhcQsm;*Oz$~w&+aq!hB~0tDTddhHiNL`ltQ|j%wc}k`JKo0H@uRHKxb -Myy72nF*&I7s|YvEIw3wLL4JAb<}_ynEP6?SH@t#;1aT^M{4bI90^Gv^pg(qJa%qBG^kZDOJi|NT*A_ -i}T%ib`0yo2);r2)#)E5Z89FLVy+y^;SdRQ0mH-0M8y7lSZj)G$|RAjd6)>d4B=l&&MBc&TntdE+^Ml -H@7C`=eYi2;9gn661m -_vJjWop;__|twne;8;My|M&Y!Y&vBcEzQB_8u3UtayqCErTYpXIB+!}_IzHhn+vL{lUC5$jw}-6|u_- -2g(7Q^V0ig{5POLet>YP`o6Qouu6Z5OJ31}7bQxw6SEL{N{)Ri$=;?{?LU^@+c{4m3wJ&}11Dshp~_E -K7xpGJjjm~p8GI)6842$P7Q01p7v=opTlUj5uuDU+qdgh7iobW^_@HXWqgwkZ8B%#=k+$VZv -RzAi(|KfmZ{-U3lmhne)LCZv0X>k!?YJE`8rBqx~rVjcxZ`qWC$H}6QS-!Nl~j531CQj9Kre7 -4`&ybBe9P(DDAR;Fldp<L;t(rWe&_U@v-5B=-a`CdEc@U5hi)OQ27R9i$57z7yUv6v -fp!FnPRM~x4B!8E{g(bEim+=ExzoD7-4NDyos0aMZQ;TNTP*bL|F0plF8?sx*u79SDQ&q^>58w&pyh= -MMOreSUM)!IDWN2%`0cMyzHq9K70dIvlFM)S{uM^Ou&lvvm(=Seity}Gmbx&tft=@61+dQqQkFPE-Z_ -X#@w>X#lm)959=iMTGRGep1vpwll!x_}bVV6GGCe_lPFWPfxXVdx#cSqh}!q_&LRQ%Pz8sKyK2lutzv -F$YOW(++;=bF+`)+9m5e&bu+fOfx>#r|jcUn2f&2Mm!E@8yFhE+|vY`vaLQaZ~93pA(*LN?BmU&T{Q_ -!S-~3QrgBBWe!F(jLM-isxHxkf2jYaQQO6HQ^D^%UjE4*o7(v2x@^C;_CG8Y+v~xj84XLj4wY`ao3u@ -s`RKhJSRevxOWuJ=!EK9Jtu|)glJ{~h_Ln4!qT-#$T<#Yg^p+K@;vR6540q)en3!c!5Uho^tWmKLei3 -xK5v`d&H7uVrO8LLr*^zwx(*H7U&eaZJo0JEnv29}g-*apZK;T}=6)HMzK&}x&f$Qr6D1r5pS&UoxY4 -RXxKbrQv!Muqd#``liO|;pm5mz#6dAOK>5mAZYo3h^Pj|48}8NsH(UqED@14}?}DVHkWFs@FlHL@ZIf -@%T(n?|!h{8dJa5mntU7*?Tjc>D(54crB@8Gn->0ij@8;0DUP0~UsE>4Smi?|Z6$!a`i%Ef4Nt5T_AX -mQOrh6B@1|OVx`8&aN*G5eyiW$uvoUv>xP~Q`rOs+OPM^J?MxYsDKskQi0Zr8s|fvdL+VGu2#bX-W7* -uFiOJ%gvrt1^lSUuaF%rVYHr(uiJ4+`IhtHW^nieixdx}o2ZnGSA`~RKgB -dcby|M<^X3zkk9!h1A`n$|k6Bf?UiW{`Rnz5_E7UIK@$~*_&W`wvfpreJfi0KwJ*oWaIsf;u-)9{0A= -s*&|tGUrP?kQls?Xu>Z` --MV8hyFk$tc%_56KQ+KgqnOJmgZYp*8c!Z3gm{-@8l-3`yqO#{s|`+5Xd>J>1kp|4hl$`H|)ZY*kqndU*V>ofaDXfmi(X=hk$7<95w~-_;ea*HZGm`CM -y?^Ng-B8!x)C+U?{(EdGXr4agp6e>wyFO_Lhw*gL{Y=vbv1C%oB9j^r(nB)nLr0|TzPY$iZelxj(Ka;9W~V?^x1x*^K$P-i2}6q<*TSgN9=rL_k2M>&S~H96yy4Z4fgjvBm -IAFRMQ2NPNNAVVP9k|63`V$&kRl%pMJjOpoa-55pcZ0|%A{@eqWtYDyqNmpXcQka;pkOl1zQVbzU}t4FuSoEBN5wA=BuDT$(L!%-)y7eTIiKVb%|}v@!2XR?r;s3?8CPpml@@-HVS_p%-oEJ`= -oe_k(M)K%e&ZwYD^@R}%?X%Dl?JwXKwH4_>RO_BHjqpZEjK{|98(ia7UAv~XjChQwmvWrBn8G^!=B;5 -4{cg1m;g>8SlZ{)eOjr`+lxE9Bq-%Pp#1VBjF+o-4c3=K#b)Wd>DoH(WuR&SWY$t@--JbE$6tE?k-K7^ -xFa3h4DW4Kx6VtiIG&;_xur34>O2}F-ra+e{l+5@RWyyq!IN2m3$gGoLES*d)CQ1E#Ifr>1+S0hUackI(|Y4j>fH>P3Svwu#LJSX}azM(g_Fn)gA -(Ocylvux-tx@}6AI)q(A{6wvoCmH6}Pkc4$Q4#kLQ!svaBQZviMn8QrmU-!o@wU>nRl~CT#_s52d#O_ -Qe4;NZ^^qBpGX$^Jda8;c{s!;pAad~IW2&4{{Fv!;OL8{az1DTEVodY2hs6k2k6yspRX!8h@aQ?d_RM -UFa4&9@TzgMg&EV`E>C7Y=sT1+L*`D}akK?jg^0casZ*a|BETVfI*mUGK`8;h1YojuYAjs?}qNAaXH; -%9Ec#kM04N2^L9ev*R+RAHed3`TCS!>>gE0|ZSMGhL;w>&nRR{CfPJ7PQ*UCXcWC3yudsDhv>G6!6y& -C<-xhq2S*gIE~cPwONXrzdmI6}d6lI~@(`s1etLNtr~cm?jV)kRLPd79&mwo$M4UJ7VI_@sT*BGi>u3dK{(LxlQ -|28LE;+k3xD%v?m!T%Mw=?jB3M-UIpJ$WPY9y8X5E8qF6Knt8 -b6L`RWgD6i*wAx&m~--{@`oqMGK3=S=Jy^xE1a@MV1jm&jh@a2c{x2h!{pbbdf?)cWyMJx@MrWldJgT^EP}mK(XigXaE%`mU$rb -Rx`Tc_wYliC-(2IBpRCS$a~jmyWE|`}7ie=JDI0Ug33gl)+Ig(@IYZ1`VbV&FtD|`WE_gwNC~<43@dg -5=J1uf%d26yf);c?)l-mi`B7?Z5Olgf`0lHCUXI`;cG?PhYQs{;3Nrw>3!A>#s2GxB-HG$|7M&XLmo{ -vnI*4qwmYLk0|^1R9>B+WDERhvQ$rZ%6a&o4(MI3y#%cWH$!MJx1kMdj{^jYQ`jS;w^s-qNmrK-6@6|IV6Ts9)&`H;$j*NJrcq-jjDz2iV&ewAou>{D(%HB7&T7Q;q5~yMFh3@6>M61ha_GTq -*pMHyx3*VD^P&d)?6tu=GJUl9X4Z@q9`q{ZteX!#K3NtkU4_&7~p1*DwlI9!py4)D49*8Dq4_Q4?`e?DPLWi -f~s7;9X?>cImEvK3}gfr`nfN3=^lD}Jg)hKKO!lorpsBwDycBpGLl?cg02OIQ8SQ|0z*U^|Pe*M!)L* -i$DTnKyVFwd0h9uWPED4e46vAXj@AnHV4kp$y)e)TTcO>{M+$Z>wuNH@Y#zdNNcj=8dCem}aM>uG3vB -Vej-YOgSX18P4DO(QiG1dfNzzB+z(He{Vf3S$2i)r2{=?{Sej~n_IfN1hFxM5Y+78MAAF->n3%N -D`nb!+~Z5W@J1Yq6!ovz3&cd<>x1FVNbiYb3%*?)xs_WG`H_L{)o(7Hp1CQ8ywU%^koX$bwMu*PQ^K8!}hLw3Xxm<(vJXO)@$J0*CEU1fdYM5?i1A@)A@t)n@5iLijW3(M2^m5oWki -K&CmoaM68gRa~XQ@iOA_iB&FsvF@Gt-Yx=tSJJ5pw%;F=7#p#fH@cJd6Cl#7=R>$< -zHIgGDpZk3*(NL#laK229NEEWt4p-yg+22L35z8RCgX2w-W->+7gc!|*n~Xo`p!%vxg- -(w3s;8dLH(PZ~VGmL?2^B{*BBbj?mpZM>3&aALRAMs52DD*abO2%h< -v-(YKk4w5*1rsH@*^lVgPCo5xF7`MNj<^;vwV@{r<&!70f!Khc6Z*gZCuOh;`iWm#O<~mPT)@%lv-mN -pGDx);44@uO@L5n8q<#)|6`Y~tL00hkuf}fh2Cl-+}MaT6}Kf42O7q`*m)RRS3;>}zBgxOh@o$Nl@rH -+*wwiMSdo#^uR>h0BuF)|lutm9OI|22$}`TbtJRq&GXpr!i$u{FSV;;3s4P$O_#X$wO~bNz%3O}Ddtw -QZ|M*)G -+gb!UYz@CLlX9lOs*;##$r@`-7w1lw3E$hW=(}>Q -V5pl#8_zKqp!sc6%{c36C=vcoj5!!aV{bTCF-y32G!CB$=-{{^pVGxC+g$mHzO$xl*1wE(>>|WUEqr>0_>nBETF027dY*g|Qx@RIbGWW<18iAJmxd)UfFNs?{);D@pKsBTWXE`R8-MLA*5E -m^1YfuT&OGI}5K?GLLAx5+a9csd3>JR<^!sdhIQf@fJ~A(Q$7~@^zNP?_c<8d;n8bPp-W4xN| -Yg|g^bh)r5RG7htK%eSeZHw-L0(S;=;#py$m_|l^*Ks5vzlmMhd+q%>OZ+f^3(8lIH0%|nHkcQ4qIhJ -)M^E!@p;qP52$UK@_mZ&II{;!Y8dm*k(V5;|ZSz)qf&!5xJ8@%WD5++Y_cbCYH1v)z@SBggV_2n9^ad -M6E7>jlF+gz+r)9UKU8E&gZl+55su%uf{7l?1k>U&_hhjqs~at+|Z=&e%s--~(!Ap3szKBL!oytmr*7 -_i_gx63@XM5+%JTN?=&ski4hoMvj{Z?)#z+<0dGEtD8yOPwqj8ZH~w=};ivilC4rboT=l7#b1>Z4z}F -wU5Lb=+$+Z_tCJX@b(kv7Q>I@6HQ}Jgc7#-`v+hhO@7Ao)H(~mhY`IsOjp?Vr4#n?iN@XbFS^$*za{v -@OUA5A*>}1c9=SHObfmgeGif#<x6B8!o?EM-!vJXg^cfO;MMlycCC0G;|O>ULf8_o$kic>dC~H{!#DT&d>o|>tt<5S4VuY#=lCBaa8*TQmb -WOvhI^iQ?S)A!MoRn6LW-(QPQ{?*7FxPChNNs2pb387G}ExXDwRQ%3gkzxvHl4qdDgVW-b%5n%2@=X4 -MjxdUS5nw1a0H&D`=*0Q|#D9IBcnA2v#dhj;}{CV6f)0-;s>$%jp2pIjrq93hMgmU0MV@;CMLnI*pe- -cvTm1n8mA-+Xnm2c)fMW?Vk52)YJipC+)N;NNYSss|sMZJ8Y_uiaJywm~6!lD_?vA`QmpH@D%<`M-a> -xH*5@L^axg(Gjh>*yYvbxo*uO?)TPjx7}mUM&h)^mg{YaHebYtzM;~zgUC&NuvgOx@hoA7-cJ-COs5^ -k?tIT$CU}{LyLrCWxdHV0c1nR@ev96e9{&=XjI{QStRK~AZe^ga1Vz)lrz+-+X^RqH$)%a6*n@6N$}} -3X{lgBC6Wrh++vNC{t(rqQ^~5&G5Srk0O5eIXg^q5zP<3;jS`Q(KT_4#45%Wn1+`PwxBxkK~U!RJN=x -jR__F^rQW(RAE2>7+WHHmUPGRnc9<AwrEY$0P@gV#51jkyC0DY(Iva^Z=*)B& -k3Z8_F6uA14r~LLuKrA-GQW6}Hd!xSg^WJabtOgAx1e#KCl`G~m*xONGyWMR&^OsF6Z~|Be9SaD9`1= -JLJO6ug$EC?#z;U!XUP#28*d@qHljP+^ -^F!Yxa^ML|o-5y>9!Jq`2d?oQ4^spbX0>Lli!Bxoxbx`nmA2Zi@uc(anuWs&`tCaFVEAnjojSy%^;Eq -XXT=x`Wqd=`sjIpU29M4%-47C3VURm68M8Ptk%=eA}K;u!Noie>?Z^8f@LSts;0hoqd1l>OH|lJ$#qi -MS0q*{9#zQsj2-6ec>?b_$*$lcN30V|syS(W6som>L$%r6%@1&MI{eB>5Lbx))yIV+T`k*&Ir(d*4GW -Xiidki5c&ZiXFU+I;Qu?tN!@1vjgSbMZ`J|xowqK*R)THF!;ym@Zi4zP)h>@6aWAK2mmG&m`u=mP692Bhf^ZP*uCb -QyksJ;S_(R|(XwY73oSpW9B2c)}te1#HswCyjqUisAGkoZ|a-BB&!IsFGALq>(J!2Q=7c5tWkoOzb*x -kjyX(c&3J4^2N!mvseO$kULEf>3Wa!5+18`Z-Dp#kPeY|FnhCZ>SR{K8oS~gT^D<%V?ajl#7%vJG-H@`c%d22oigaAA|c=Nu68ty_DowbBEk1J@GGY22DSDNQ|#6FyLV12xD3WPbeF(n)-}!|Ak*2+H2|(WL-`?HbT(^5`_kP}*BIr#y8}hivuGkMsqDPXv#2V$ZvXgB&w7|;qQ -4-SsSFA3v9$Z)~#Lh1LoRYIF`+sOOy&ea>GNL#o9G#5%#9oIs~Ui`JV*?^E^B`|BNg8<_D&W+5h5vT`gwSh_ -n?EeEvpb0$ys%2@BPl%ly;cH+-jHM7SWu1-XX7u;kIps71re3%0u^PC3o`y|LbH_7%GH|@`JH=%hrjS -zPqIX$!+GZKW|d463;bDEcSPVt30?U};MlKn4=>v*w^ba>_)Z9!c)zZclzBF!F3ykoYgw6JtvSFT^$ -f~y)zVxx87M_Te1=@1VC1DjlblMlynQa9olLi>w~5XzCK1dF#{tC( -zj2Lvi^|K7>bB2!qp}4|!?^5hb+mm)+TEeRSE6btC6Axe?l^Z}meJFRAHAYW_gfAQ3NDIMd}c(;4i}N -l8Da_eG*1y(bmT7;Jm=J)fV~{bvM(tAI<>H9e=rXsn_k#eY=@)h@`v=q6A5?db?&+Rlv#LOG&qZ`kKf -+xz8oDR6g-*Cn-^qeG{_wCn1<@d(2F}hYF~B9nPDJ&7A4iLqgN1ygfzwd#^1Yjt-%T(s+}$ofJ(u>-Ia0f1Q>p*;E -;+Vy^!Fw>9PvFVKL2_x!xGjw8Z0rgzi18LU8!+hJ_k%CQBQ03AsiOne8qfQ{c0_6&Hl}QfBfJ3? -C$-|>nwaP>+?{HiKK6M*=um1eB{vm*E{u2H%~kC#h*I!#b49(1^;@djx-(L{{B+@iI)w`T!v@w{Fhz2 -x4?p~utJ0a5e0IeEBrm!=E7X(??<{wMe*EnbTp%x|F;3yXtLW3tuxH_{t&l`=622BDKa;$wPf@*B5Oy -oO_x6-pg44G+PoT3xY26k+|zD!qyMz_{4)N`@gWAlbolOl_vqLD$(N6TL~Su_E8*!P*nI;WdvoqmmMtBUtcb8c>@4YO9KQH00008045ZePPbW$eOC_v0GLDo05|{u0B~t=F -JE?LZe(wAFLiQkY-wUMFJo_RbaH88FJE(IV|8+6baG*Cb8v5RbT49QZe(e0XLBxadCgmUZ{kQ2|DR9M -m(?mDF&u;>lUePY&M{_!mH@(JvZK`s8EAqp#_jVX3H#}yAO)DzMi(!nR}!AAFP99xPy4YuKK{T)# -sWJ4&9IVUZnmDKWWR$7L_(h7up@EcW`rqA%1U%4`Icg%UhU4B)1oM{VCUEbG8|)sV9UQ5(NDfbeh*%# -KTa|3IEx=5Y|O%zY-WroZbngb&ti!vPv(Wq<&8V|sK$Ua0GVXfzyEa-uB@K#ysYN7J&%EweZ09%0_vJ -vd;1Wv*PqJ#>g-6KXSe&jOEZ=*mao>=k5!_MN#0F)mqI#vi8r1hUaJu3=idIPf}T$Xoz#_{61#$LzMC -;Q+iH3#<)UQEn`_(iKv9!3+PkV*ZY-4kU0b0MtMC0N0w@=t;m16%pQZ@25tCz>mtDgKIwRe9~OE$VIn -z^#T4|Cq|N=U*Y3FUsv$CV^jYhf^SCMz3Fi$0X}Tz6}lN(fNt6l6_ld$);q&}qHRQJ*azZ(ThXg4-!N -@-fWc+00fTTgi1OIhf5mo3#D?dwwP}D%vSI6B4}oA{o0F|+L9{lpanAIR8TrnhSoh#(NZ3VbN^u#h)^f -Ce`G9U9uB;9QVmf(>DaMJRdr^6r8T_CuG6*xj)`(sD_$Rp7F1;M$;CM8k%G3%TZh(Y22yD1OT<=yPZ$ -#LmX#{U(e6?5oBK0*KosV!>uUz!p%jQJkc;!zynF9TG!NIFMq`5GG2dxd?-IOX$7?J2vmH8IwC9jysL -$)8XP#nQLUEli7Uwbu`ch}qsgF6v|nd)P1nhE&c%)HXXB -9u<)eu@ei)1E1 -BA-$SQF~NKy|E)?%QOb+$&!+&NT%|!cHU=NXg@!hQ+8?fnRkonoiIpbvjwh;cFW#o-bnd$C0kJi83GQ -09lwhpMn~6F>p<}AmE*7LK3<^-AX`$-yd`>jcK4MW00w%0GXlFID@eVhYYe@ZUY}u{&GpoJw^t^pvNr -eHB0fm(Fn^O%kUvP?ggJ1r#gWTIWr{K!hp35^RG-4)i*_wS-voHvvi>QE=}9-U*HGKPol^(|Da1BKdl -bfbJxotrV1=(Kj8=dKa{p&%xbiX^r?gKxJ_o$(PW{`+e95cOw`4n$1V`tXsj9doPXsht{8|4M8lXSfm6g>3 -sqWR8MbKD{T#P>XKz5eQMcLpt^0da56!n_K;#FGMVouWX+lf2qcOYVIhN@+&pYR>76+c<`k6F)-8Q*t -$*`dVbI801f6k{iOg5%E`IYp#og1D9ZTd=GJ|Xb}2hGHB4o&#c>-^}QlOIXKk3X_n0N+j*^nQSyI=v+2@5D&{iYk(~zmCiSoRSTZmq2AXga4>TqOl=o>Gm3BIHZg21K(I#w4i1nhGYzvR5@>(bkPF3TfSs85Ewc9uxw7ZP#E^brYLJ6G8 -himhR<9<5KC%IbsYwOn7e(B@Ng{_P~vP5!SE9IdambfO?sKP*eYpkEWG -B5u^kJEfLtbi6$VYI3g2K227e$4neqG}$wD -*@>YogHnA?`^#aQ;a3QaqI>?%LO=63VOS2s6P-jl8KGrFp4hq3?U8CW<2a#Q)gw{zlK?jxuV!ZrJev7 -kU+{fBdQQWnX!pJ+hz-m>}MDZn2mBmh>oXQAF3zY&WFDgj~A=B?wp2C%iaD9}P8aZ;Q6Mmt-$b%^t=Q -R|vB)Xz(n%5O|$GVF0^mVj=1M4bCk=BtdnXbYL+ozAP>chw@i%NN*Xy>D~qz%i}Bp`DMv>Gj}&B}4+W -gW*A36$LyS(Rr5YCaI(L%%nksOXu+V4_$}+!g275>&;)Wngh8C=bfS(UO&A%^J=P+T|WBP6Nq!)GF(~ -m2m3x=qP~*3B?w~OBbmmT(IQ4o|J^MzA6&QSSgW}8JmH6igg2O(K74O%8%#{1=Z0#`$g4z7bg!xsd-m -rPA`F)(pw5tAJ3_=83y*6hkUqdY{uP*Waj~GX;GWZ8pKMr)ry2Z0t$MP)I=7pgz8s>Se+M<)}h6H9;LsRVB!hm@7weTHeXBD1pCYP-W878n -hs{hH0l3QdwuYi{*I3d;sY!BIK0&~RwO3X>>>VUj6?2WfGp6h@sQJjdVqY!)fcXC8N1 -;>f01S(fv2PIEC|1+3EdmWsr#k@b!bb`H(BA8xJg8d5Dwc)OpSmvIV6zV#lTw6`7-vwoQEnl#(tYOBx -41lhz*|_EN*T6rXNHW?_3Xo#te@S$_59VL#+7nE8r;q6q^Z7}rVEi8NE8Lvbb~4InU+HVOEB{Wok(gR -ovpQ=fQdoQ9@X5Ey-iI>Ty(>eRR#IoB!YQFcD)t(tL(=@HEN&AJwI_*{TK*hJJU>C8UQMJ`GsL5MYD3 -jt3@a#~X%_*@H*&PiTDI0pYpRXyOKKLZvcN8j#sp>+f+BhHh6+FJsf9)HIqgYtC#2Vg7pXX5a|}8a-* -X6i=4sn^nSJk)H37DAS%*&PmSCsmUPU8pYTx|S^-7BQg!NTgY27tUI-A~`C&P^-R4iQbI^K!SC=1Za8B_`;gQ{bsY{g!$etm^y{Lcza&FlgyrxPaA<;QuHZ4(Cd?I$5!sA -C}ITq2D(pg4TGAkQy^IIg@%OzE)%OF&wyb>8W=@6f0e#ru=@XYyiv}sKV(#R7vVV;1o$j5wA^?l4p*} -yLh74zZgN!7X4DIt=bL{=#)J;W?z0=vf4e)4xm4uOs-Pvn$Lt;@J>4?eAk!TRbWL2~m%H*|{m;9RIpYiF3?hcNSibplf1|l*`aF7xSttP#lNao62CxNUNOgA6HUq#=yBSgO~3m6mAe55mYzRMO++ -lxB^| -f2#ud_cU`WeKEf#X&5vI6QJ}r-zyFElu7XHExxUS4J&9aE;BR_9(7d%x{GB+w)ABuJVH`HI?dV9Jp`3CxPxI)5MIe -HN%Dru_72`p48>jcBr1$ecQXabt;JqL0x6d0`YUyzsS&XdaQ*S7dn46PSade#LsrGn^~1&0#dTjI!R< -BhKhNKyzAwcj)Qeaslyebp#PLm7;^8i=*CCG-dOW0A$An16r<^bgg`^y~(3!<#Y8^6&M?nTYJ`GbYB) -O%g4(>Gkt1C-wUT2JrdCSn5qNY8DRo?@0^%z_L9U -9SYz?JE5g!!b*`-A@%73Lt@oi*gNx44<^)ZKB?)nKrpR)+TwDo7#Fpj;>NuNl4$jtafflotS=oTitwl -2BnsUkUGp8$HYg}NBo10mjMJ$?H`NTJj=)0dZKptR8vXR4i!OO014dsu{y|e442(n8Y0j3Yl)AjlMYm -)dk%_;i+h?{E;(mnzd~}J__*YV^6IGAkW$KRB^LGi-Cl~Oz(qil_*1=8;P;}toK45ypynzgt>5?$P)h ->@6aWAK2mmG&m`;LoOO106004q70021v003}la4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ8FWn*=6Wp -r|3ZgX&Na&#|jZ+Bm8Wp-t3E^v9RT6=HXwif^2pMpy>SB1vy?(G~_RQLz?T) -F>&g_v!C>kRmDD>Eqr2TWy&6hdMYon7r2Oqe?xfN-R~?DAS5U8__M5xKUYe)UAJ>q=d>uv2#QORYPRmquk>wGl>DvQxR}G?8AGcT0Qf*}Kbjvgqv|m8rI -sW`hgwRELXK_<60(eJbGCjVSA^>T@_+ABw}Kn*&t=$P(J8#AY3VV-_l8q(GMl6Z6 -X`^+?W#dK)>{@D*8%D;H~W>92_b~8LOU5=PI2XfT7A2TS2z!m*?(V)@>Tqx^HEtOs91t(u|)0VjpgE0H=23;R2HK-q0(BGxE;e{~MV?k1DT6VM!J%BZ`(l18X6jX`yT+Tkh4NH)JSav|Pb -yb-Wp3RE1}OVSfCUtWQTbNDhpzqr1=nO|RsQy`dTdes1T$wa{4;@}AXe!KYn@~yyim#;3*&u%a1>8Cn -LpZ+@iRMWSMw=cI=9L$j7%d6Y7*RLm2;5%1^m}kWtIhv#R^Tno9Z9@O=45(pxLIpe!) -y+Mv*x|A1_I=#b4m>g0xwZQ-KoV-&Q@SjRaEg%e4YmK_x9VWcy53l`?5`uu)xa>X8Xjrg}~cu!it&wC -Mi))mc^POm^D5RE6xTZWakpsXCOH=tSBnDXbwPSw~&pRG=jOXODs^@MpBIO%1%(>#9bV*I7yV0HhdBh -@}orZp(iZcm(ol51!DHC*lL94C`W?ErNaGUTruCA7s_5mi&$)TZvY#l+Y%3x~8S4BI!OJf93>8EA45x -!qT8M&-SbVg*if7*1Cm2y#}p59ZNP%p5mr~f7rn_Q*jfm1pc -vwK<0%_)TW_?YHmxHy%IQ7y2>#_q@~dzAiDRCdBZ_gIOuyGvYn361^8(*iW0emZ`9qp33X{XWD~?{+18iF16)w6Un*-{Y*LqI -ApV0qj00c7Cpatex1xrrxv~jpC6$C5gV@sK04l{PQGj$D@~7{w>!~{4&gmpPHKU`_G%}KJ;jC!)UM&&Q_ -&wDdI1M^`opW6n@)CpD}HVd#m_c34a$iPv>k-w1*Zrd)0>;u7oHCL>u6=dEcpD3{vnN#7DO~^mB4>or&D{AxY>+iWD<=nUwJ;i%paIYH<0^PxBg@p}F>A{9c|SSvp$$BVEQ -87=T#eS*p=qZx>W5BuHX;LwX|yZg9e2bee@KEcPvbP`4bLY0PNIzN~TI^S#2HvmK=b@?)hz|NLfejTxi_16&(91qlP6L+NWWscq236cC*8+6%}Nt#%{1D){s%Sj2J~?$f~u&lV -LBcN6LUuj=B<>rv`uqY|aTTh9}}c%fZ67b1{NxBgG(KA@S&?e88Ac{)`5Cj#g*)%FY8>cc2iY1v>uIE -<_XI90ySa2Ek~2GqW>Fgp~LM!Saa0ONb40(a0Yp4-*i<*!gRCAj4u5yj!|a;UKjgnc%b)=Z_3~blt(; -7AH|7bo0K3zx-KHAZ*jSIfYkSRN9CrfooQtt>g&-V;)IejE`^Ev&{T7D1c}-KIT1N}eBcSP -x>I4v_KLFRCWU81DXf^5XM!XEQeh(AOxuIQcw9j^9|1C;Tj+w>{$K7Oms$aym?v)75>BpA(z*om%GPQ -6v?9O8)|TClQg^Al@{!91W}olRv#4s+o0_Nc&~is;Wq%vqwoYh%cKiTW*+kFB=cdB8faU#X+Uh?$kea -kNlHY;A6pP4BM|g2-lqyqS&p@n|U8p^oM+)3`9)lk#1%fuugXkb$>XrEnHp+$I!Nb_^pwtT&<|I%;#8 -1TE?(wz{KxC1?_3{@M;E<9&VTkB-0{D<@9FIWQCCLRy$zS1=M!1PJbAl?i#~X721{R#x*@?ceub-2IIX -!3-&~u4TBv!wtP@fW$fiCReg*R60=igrSj6jA>MBkUPwY5+M7$N!F1U?;0*PpGt$;>muzf)3m=- -TjW0sw($)cRzl(FB98G7iA6AFi7mcL8$Ba?7cmB>>yw7*?r;;F+dWQ$53U{2nJ+T3Cnow%Wb32Do?Sv -jc<-$!>+i5(n}h0vrv39YwzFcezkxW4WbJ9gBI}*jvJiDLO9EcsOiG;OYeLP>BF`|bbVJ-cja1U@UNK -Gx8Qib=oe7i6b%kY1<*;8M -3x@D2r!nOz!lc>C0BPRZ76G`@*Bp%jjqZJ(z9gB)*_j+ZGhv -B!Vr`EW$e8P=_#}R89e4so{GiA1p2EQ5&dZAaWN76Z*!kVargDo`}Yj56C%eja6`kuOxxQ#F~?M@O)@ -(;ZcS+cm!jpsAgS{$%?i>b6*7A?ojBE*w{M2@Dj8LZJ%76Skm0hOAz*Im`3_B0kVUZ@K`>Kwq(65LFL -F&+x9#ifK;M;gZQqP4s8Rs;oS)4P!J)m*yTlbwgRUew!xb$mfV&WKQOPDSZosAnUQ?ALtLDoFF03>d5 -H4Vkv2!mX(!lG$7NAWCO#kMbw?Pom-`1JgtZ)qu`L%|?V4DwB3h -?>ZZ?0G-@(32VP|D?FJE72ZfSI1UoL -QYWsE@zfG`XM?|DUTRS;^3%@6aWAK2mmG&m`<5kOkqPUB>o26yX>S>A{pzkc)jd-(4M_JK!#x|;y7c*au^M}t=Yea+KNAVdIU0>Rci<;y -L*OWi2r{+O*&&RM)--r7y?_?TreRJCOZ;j?&|xj}@ixxieq1#$qJt$~n;SJ|VRa^lPtBK86oC^A3x@( -qtNH^UlNK?rTMvNdPJg~Aw)s2ZQUAoM~KB)-fu$P}3A@d&Y?E&mDqA$W+a0S)XSYH`USL18@!3N}-s5}5P2 -jyKiT1jy4WPa~+76P6!?=&05|xtC!MBCO&tj31>AM1Fwn67Q+|ZlKg%#t)pDB)dI|GvHYAfqjvbU95` -4+6_athlc)i23C5<_~uDkxefDVE>q1o{ib`_v`s|v0ztoAU3K?0j}Hy8 -*H{S5&1UHk&Sx+{JW$`U#Sg53}>x%^zbR^>KD{iF7|+&Dn%qPv$qX)6eIVIlKNmzrI>bfrT?5d^x-PI -EQ+s7t_ld8|sBTHvJ6}Z1HJwevXv^waI5_!yLI}r&rg1%xAxTx?!KL&d;Wh`C$s&O+K7YWo6K`)APyf -V$9Aa7n5J7gmndUu!RUHd1PNcO)(SeoWQ@+o7vSRHs7lQy_ntEv92Ona>s|mXGtR3v4C -|7I3bJ3}9YPB^?xcwQm3f)1Md9f+RbePR@ba0+D4yHMl((tWr=}$64iBo^r=w!3H$}G)}}J3=c=92Lq -MA$|Em}<51{~04z-Y4?Bs+UL-E`0; -T0WQ;Tf;mH8Qe$|ze> -p}b`fx#?EtF1Hy<84E5Zzb|J0J5|hX+$RzIiw}4xcq>;+S8$ot&YXqZu`rJAMlC#A#H8$G`xJ|A;BnO -8I*$UJ=UO<&_Q;A?#BdV28T9GK1}l|j0!_a){L_7Kha<^9{=H)VE$2u#d~~-0t-oMzkAZY1>;kHk1hm -1j-mss3VsGD!*!S#>?8|8b(z*IP&6qmzxwDoHx*cPl1C4; -&XI_~-K#47-qnHd`>=tc(`vzm&t6jF{rJD9+Mt6&8qCzgweGk;$Jto@DF_v~vZs$}~;mw2JZyB=kK*X87hYP^52+X6b7e{~#>`+B|1i_WJZK{Rn0R-*L<71o8WRH(T&g_GaG)Ux2a<94z^#!%8swW1OXI -Shu|gctxQHI&dl+GkBd{*JTP@Lb0pA4vxi}bEeiwo#20jm$3MQf-7ew-|Xq83m5SoAv|?mCBgeBqGpKEaQ(o1Kj|GW*80Cid3^>N^rHor>Tr;dW*eR -2n!PiC579gxesobW4R(^IeIt~rG|o+wTva|sLnOzR)?$VZ8^co1kG^!k6h|xgVv5tmW?g!nMx|%)&*w -eevme&6Ko~U&tHcM1H5&3#H!%=wg&fi0K_M0VbG((6s{g*^&3=C$JK*J+|~t0WF%AIXy!{|7Yv4gWn1 -VoKu^uq(Q6@&GeV-3}S#+!V=9IS^%pUf|k?SrwX_~7w~HTRB5M~%JyafwiE)Mf8#nshE$_K+o6py&TVOn3Y)SBo --P3F+RfI|2jO*RK>HXIwgEtxma?^4prJPs>&2P~o@^XMf_4PJ@5Pn9@;huviKb#%FCc{+T`8QHucy~< -Umvqo5cxn7(ZkqtO?xqbp3*&=W7VrtBZ&7El<%)EWrd$WrSf+D(vfZ;J+X4O(c0606h -W@zkKIF!xdX7^z}3Bme$Cqc(Ifjc%jOp)va#EF43mB#a8t?CE?oeFaR5u2$;&TC)0gHnfNEzs7~dBi3 -jzgw9%pAr0D`L!VbuSqJuOdmUrarn=>W;bpeFS#4DS26uIik#OBJ-PPEJ3)$WJvaK3cxpn{G+ZKl|bp -yef9A#8&4QWJ3We0yA)Fp~DhLz~SZi>`!RuJX+Euno*57yT>B3x(~l4)(Lv1E8=BP(93G@;66Foa*W$ -msJx1QG58dfcKxVfdl7b*Ur^|F=0|O>0hoj+AoY!<1vTt*vU9)WlL5Ie~Bz*SmM`dU`;cPW+oo8d;iy -+6Quf6TyAm)wD)YB<*sY{sq7|S9`2rf!8tZ;DR*4Af_p9--?8LOd4%LX0bq4=JBoljsce(E$zD>jK#0 -XplamW6@_=&(QD+o;m8Ho%}`1N#Z8r7dCco0Q_AMAJV@~*ATR}sA}J;c?wic^aEE%%9{?kV*72v!p{NHf_%JBX4zlS>Z8n_PjIjHd3RQ^3iGPHIqJ)IttyNf*w>P5Q;80Pv@S1Zbc4=p#@p%Kv3< -UOx7tFWd3Ur)3v@>PB~bhYX(zAo!Klj?m7Uu?Cm|`9BC+Dv -`&ImmTV3AGziuw2;i#o8);Zqw*9T=YlPtO96G|qhX;xOd2t=P#bf}ew9(y9!8O47a*NP%D(t?b8&uMqzFCf?ik5@7(fl0<4VhANgF2LxIyS_0+{tTIp_*hLL?~P -zL;H1FPhm1ZkOOY=tgnWK^lCRF6tGe9TngaS(WfjC5H$S&<;X)idQA{p^`&{2&jz^!hX8BxnA(}L3Ud -+hq^<^WE+jsUuRW>M#e4*3-UdyIBj{m=y=zGcQ5BT<1vv>Z3utmJSUj{p@%k*lqaduOMGmF5wUmAGg0 -zR=|wlAhMh1hMvtw??#UHGup9N*1LpXF8^&bw&Wa~hW~;J3biBq>lK2RzCK&^!kCgCIoalV5?+caI+O -Ek};Ccy?UX|tt$RCZ4xxHA~J%OtqjRna*ESSCM3XYH+SxIUdWoB;=N4}(?9*W+Ld -KCyb2;M4#)T@I`H!`~Bj4etlX_bc#?p)!p -KKHQ#5CLFC7ef;OUHb?&iZ-@kT=2JbEn0s8InQ0@vfw<`Xw_bM7(0-kc29rdW%ayuB9XM_!!>YkB4l` -Z#SRyQN%0d4zkWU&oon>+gwV<=SscW{eZMgzQVB9D6vKAI<*xUE#r8w}+6%1L!AsiAel( -V(3#D%Fe)N5<(U9c9Q<4JdNVA$Q1L6>Zz=^PuVg#zANm5FihwhAz6ID$56etfo4A%TczVeB1@4iN6_}ft@chLEfZ}y5%yxXPmR5N4LYX39n;(n&vVrDa+R;!?xvc#TE07HT=GD_*^Ddw*~*MdS^LkppX -cY(s*`-&>n|IqxJPm*?kTKqV5Hu}@nWq{?OI2DL8V=9+grPz-V*LXdP|tSdfU#|bM;m!OPAhOMZ8OIi -?vW2iJf|zaxhOK`(~P}=v8%BW$v%NfEOn`YF9vAMdukGxc_13AOYT?!#haek%9jb0(j7ioqG)6t?Iu6 -AE1skjYIJ7c$TE`liG@ZF7{j%AJXzG653gS*BiPl$PN-{f6n;I1#h41$0s-P!vi}4Y0bG$?7WnYJPo- -{V~-1QVA}xuY5NjJXgmFd4Y>w`@EE85#oafd@g>OCs=wyk4L1kToGe9_x?TqD3%p65tzX*6Z$gN=>zh -#0?K=zb*z#L6@Y_(L7JfUXUW&hX2?5-*eG&f4_&;^MHGd(E&kmbfX)2+ZR#5xpV6*w|FIT7k<0{+U4===fNuMgM3(p+v~-4araz5ws0OhJ=vO|cloj!y -zb2wWcKi9MG{BfaPw0Wtb4RFcYl`_#Ho+gThvL_(V>rk>xHr4Yw$o0C4lc3zXZ42lP%G^#zKdz_8klo -{lL*6k#`J-4hEk;9<=iH42Y_RYyiyu>atgBN9&E<#nIE&eJ*+u7`y -^b*`jvnA(;2{hHUq>9dv3?B#C#YaU4MRKaRbbd%eqh@I~~f(D(Y+|4+18=6K}?M32xI{TywoUhM*E2>(VHH<)7xwj^| -WA~ExFyC}_@TC|B?{;HE7Kff3XK0k6lF2fB!ZKM%kmwTSDVOCcQJ_l*d<#St!&9})mpc| -hmg`g%<}QqvZm2+10wKybm8wk$HuTum0w}`At_GOtwiXnLt|nA6I@(~Samp_A!Sx^T!i0mjt}*xyy=( -iF4OI7ELhl*_%G)I~})yogumg_c -$*VT260h-pkinBMLb~bfA2b#`4V{Q&06PQhBtD^T>B}y!+8l|i-UB;Pfo?7+iF09TV -HLctO=76PCSE9-wPBG&pOqaboi{^O4{n96)Vjf83xBQMQEzGqOaGNY2}UmvLPsU?Rei)zok6{><3bQpbv6Qju#*nQ<3|)a?#9Glz!&b+Xwyg&Z0BSgf$?L|`KsDUb5_Y31m^KT5M(dt$g@v -zu|Ly*<&E5eW-zFe}F!UMAC@9Eod%VdJ#GV -X-*Z6EZ7&3-AkNEG%jR88%-A>U7hsjaMK|I+CRwlvLYx(IQSwW7|j50`_!tA6O>_>2CVeQ_rLSRkD8D -Q$^DfEv=UMPuTKOm^H-vLeckc%tc$?ia{9|Pj8J51N=`JIx0w(=AMko7DU-Gh6R){_8`|@(2q6z`NME -zs0ZJnZ`4~VHtR6@GP7+5 -IHPGKg^rhnybh%RzHPkPeoE_5YaKWGTX}fAs#w+$EPVe1RdL9`6HFG214Z*=;OHcs;p4EDX%BkRumatQvgs#V}^yr`eJQ_3nfd>pwp -kN#>JU7wX7loF}hq_u~R@nxnch<6ngE;je|Lf~p(-apfXf5;Am<1hZ`RZ$MJ8I};@p3X=7Q<+`R`K?# -jW36f5qo56ZAC#1-7R%hXI6E&M`dX*z);!eY2#j+SlGJd82waamW5>4LUKTh@|?=?jjT$!+Hk2gLB*W --o15MVIT7NM>VaA~BnjG(!pN#)SL!mFdvIk2ja{|9te(yq%t?ShanCWr)yX{^{n|4~9|27JpK{u)v9d -%>X=9cxTcY>KIC!m*v2=*MEU`un6j%r0?FNo^0HXlQa5&krZNo?+V6c-C$I6yQ46G7tP%}@|a7*syfX -vWa7mf`6A#gKxj0JlvkZ5c6HXe22LClcIV=_N%43 -acV^yQ7e)@{$gu>tt}krQ&kKF5E%7AgdTPw)(hdfjID&NeR=LiUiZ*l>=GBJBYBCe#t(q6c3b9Xq#Ly -6!M7-g?v1E-%=lvb8yGhQuOfIk>1*SJ!hABO<9;qR!hsB*b-SXN|J45^ye4xxktt32-t&SV+;)vm_xE -&gFz5Oxm_~CE>S2Ixncb>zhR&%0}f-(NBr@7k!?dRG0NQx^c;%VZ|^Af+p+yaWgxB+U{w;flQ^LOGk5 -@s(ifQ@=UK%90eGvbOFLWL*}+dGaLacyx3;x|@esje8E=mv(AWrS-4bFML8MbGNmc+}v6+k&h1_FsCR -_)QkB$+t=HHp=!K5K`dCq@G5`QZe-}lMZiIVqf!crih~bBdLc#0G2RV)Ap()^rDX@k%8C?OO -WluB(P~+z&&8smd$@0{clSqn6lw18LhdyqBsuLOHbd!q=BQYYY`0WN)1#cf3;nyO+)^bj-f;U=@fP1z -aK)-d%iR7LwM^5)>IaDH>-R71zvq+fRf8dnD{vlG;`LdN)~xH8(DKGke&37e3C}(O<@ -8|pD_0ksQz1~+`Ts$?Pd}Tc^E`S;B-Kg@D6|Z=rn<@DN?0u_+Ju)%t{ -5mM9O#H(towpT(5tDNk;FxFo(NhLnam6@Q-wyVc>qravILb3HJ2!cgd{bb+E+bB63jCJTISxN@+8OdbX*QWoHywtP(|w>wL6WkOX0m6 -l^)Au>L$X%{}YT;2=4xorP3pIl#0=gwrYnEiT*A9-2SFA?O4kDn)MLHc}sHo2KD47uw{F$#4 -31Zh>-FX&)xtg9OVeia=SS_+(Qwy5V8w}&-Csw$QYf0C+iGNhKXv_iwc!E|J1;S+Q>`9tLehT_@|=Bv -Xsa%EgrpccNJ3hAH9n2|cLe~inzBy=PCHp6>znU;9vo&`R4QGLL=ZrppUg<@bSS_OR?zG&S;{s0Ri{2 -G-y+Et$?QlELE%R{v5BrwV`o^=%=H(yb;u7{x~4bG`dQmaa$eqxB{fRB!2d7;qp!!hh9MN@(tf7Irh5 ->0tGf)#+~76BeK+M0C1z?dCn95<5i+b5KBG-lRl%>MmbRN5%T4rq&RW6F;<%SsfaL^hj<#EEYy+XP=VtdReddj-q+hg;4T+I*ZY+oZmWX}_cW<`V2Ca -~VxlEJc)>H8$pT~46aoPpX&D^VeW?cABh1PvU$uZ53M2be3Rhl&8Y@wg4q>t&T+t?N0Hlh@k0Uw9de( -Q!Al=q|RaxkFVrUDEB_INGD1ORAQ*g-SLm%R&7*xbt0ZswNNG_IqMC`Mf_ZGkCp<^hoK>>BpalA>C(1 -vOCJ9b(zq0jF^wXcJ1A1j`qsLF&P1^N;Q?o3k9@gxbi`okba)Lf)QF_XWXBs0pss+}yb+#ml8Ff*PHU-+K%qj4VDz|A-`Gehq^xN==Ro-?*^{l?rWAWZx<-ERP2N4^T@31Q -Y-O00;mk6qrr`00002000000000o0001RX>c!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQVqs%zaBp&Sb -1z?CX>MtBUtcb8c>@4YO9KQH00008045ZePO^IqgH8ef0I&rB05Sjo0B~t=FJE?LZe(wAFLiQkY-wUM -FK}UFYhh<)b1!0HV{344a&&VqZDDI=W@&6?E^v8uRNIc)Fc5wBSBzY(1T93Zs!A2wJQNiqq^i5xOOg5 -lhD?e}Vk6sWimLY8>svyAY#t!-oH;XdeC$^+em#b*%((b5fy(6Lk8XufO38+8_XnwrPD-}NoEJ#`T|I -xcun97I%b@40C9PSvBnpG#2>?N||9w6&=B*%5zkN4M&-~nQqhKIKaRfDj+A097C}fSe5wKhBdXH% -y$h1bQM1!}8Zgj&1Q%A?Lx!`BDXS9)4mdMeaK7ii%E*e@m)+We&t)jA<c!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQb8~E8ZDDj{XkTb=b98Q -DZDlWCUukY>bYEXCaCwcA!A`?442JJ{ieK!|O{#jCc0q6ffy4zKA<7zei)iC2aX0$*r0EziY0`3vV*C -F;+i_jbK@i8Nl!WnKA)N(2hJemUz1Mq=;!Q_r249O~4;LYOLYy8=#JbuPu|#AX3GCYuN8<&;Cn+~OOe -I$p8#pNER|c*}M#A#hmUy_&Y&n))-*;6UDTA -d8wU-K|uvYXWzOvHhWZrXa3ywGqk^oNnJXE!(fluWZAH@Wk3tJ%Du=eG -!dN9LeKD|GAt$wKpuhY5Gmw7#Pf_V))lx@Z%)Fr+oz(*GEbv5@Y>Dk4uv`z5kn=knr@f|c(g!{`OO?_ -(ZAfc8Vp&{@7bS}S^2JJh15ir?1QY-O00;mk6qrt;ALDAX2mk;?761T30001RX>c!Jc4cm4Z*nhna%^ -mAVlyvrVPk7yXJvCQb8~E8ZDDj{XkTb=b98QDZDlWCX>D+9Wo>0{bYXO9Z*DGdd97G&ZyUK0{;pp!kP -&F*$m=-nBe&NXN*6{uaxV!R?3BxPCs^?ioiSKIOB+Eai;;mgc3GtazG!{P91DQP8qw -wx`E^IEKAGN#2^XI>di3u{(%vGq%QKTPpwLee>@y%Gg&mQvH&DSb_sm+#Zza5xz3(3$aaN>@weXrT&8 -_;;;yX~{#=#pOFHR3^2PBwSd^OwNC;q>I{ktqd9=%=x@f^OT5|-j~z;{oG_OjoYcQ*ZYV2mAG{2SH)n -UR;96?tgOGetz%TG6nSoeotDr$mq0!j*$p3&Ie9}b(^t<)X{at0^qnq9dB(1^^P(tl2rd9N2DNowt|l -;D@*!Ma3Z28$(~ILu$)&Wn(jFJVp^g&I?$|&xP(YMo+oBbFhv^SvGLURH3IdHTwv-!sdv+P)0`~$>@F -#GXjl6$*-bV$FJikv&1nR&*g$D(e)uHhkI_Ty||lJCkn -anD_A?BT`N~Yg$z1^;MA3c@`)X#qj3em1_Y06)k3fvPJMn6QFbN9jf3fzh^_G{w(9F?X4cv#quoj@jB -Jnn)DJ~#_YR#p2MX>S{P@?`FQz1JjmjyP8l}ULSs)Vj7P(9FEdVWI9a$Mj>)Z&Xjk*M=RxuwiIB1(e-u_duGu}m?&3(407N7Rv9nhmFiuaZS{E?X&_(U6J?wKM>mwqX^V -tq%y@><5m3QgDyncKn4j%-TyK&6&|t8q#yFoT9gvX&WI5Olc2`W(^aEcwAbK6)b1Q0 -&hELFA~)KTsPI9m!UGLKU*xwLRH>K+whE{j+tBPsX}^K&ooJ8Y-5D_Yv42JMczl>8^REUa;57Y&h^g3 -3EtEGEo@fIX$%~=6cXZb -w_2G>mx)p)wL8bPi=FKH>AY^JlMwDEq`C_Xe#vdcR=xlS}{(bYGaQx2cs9`J05Xa8U2=y(yvD8gr$t*(!T -&5hfn{0cK+ey&GF^Qc+jaBIGD!9TQhT9_hoNpYpr;0OU(RhMNcqXxiBp0EUZu1!DHB&^T3qWgMrcuLw -}>>aMIy5jstl|D59eA9j-eX3707atda|?I~sA^GC%5}#gz(NGn7VoIJ~P -<2Tfy?C&QquS>cZ|=P^xC^!uT^pBQrB#b9S9wpnd}x;vWJE4mYt9 -~qAbvbVRalyD!(F)U(quQ%r`OV>Z(6<#Tut(GO77MQcheZ%m#+_A2a?vIj%KV2t`^ACh2f!F<`bGDcw -LHwZEm}mG%+7XY+VJBLia}mu9snW2rr5S0=z~R(z!-lA;_UbFwpu5*72%iZQ(u8BTm))+1gIu593KYU -MIuY$Dm)E?gTQq7Z*@X=G^;+y-}w388S;<@HGqM|M81M-uch~NUG4NpOWzAp-$U<)m{os?Z=lwpU0`QS0^K18C7pR~{D}JSTOZkajkDO{a);bJ!os(1;E`T($5gRLwHh3ekBI0$}FNPC8a>d{-SEvg5KAY|NeMh6&ZU -Hz=_Bt9lxi}8LN?x1YD@c$07d1uEHT@LZgTZMyRh2K+9{!y&*_=}Yf!)!oI`Pn504ATZ`O-BgFsTa~_ -j{}OW`W@E`e~f$IwnqrCopERJy<8kj<*98lw{+Vc>*(Wg8T0g(|^5`SzTiQW;xZN5&uK5>;mIK^|@4@LO0pVF#U^v*wFc__Mjz -;}oP)h>@6aWAK2mmG&m`+l4;lHE-000yO001Na003}la4%nWWo~3|axZmqY;0*_GcR>?X>2cFUukY>b -YEXCaCvP~!EW0y487+o1niIw2>J&*6h(#=7}6k44?7WxO*cYpOC{-K{rgF==-SDAGT$SqM?Ti%TLVz{ -(h~w0*9K2w?16pL3&IdDzL}q%%)yqYi=~Q9>Dyq%9bDt&b7cbgv#T&yvyr0}(=%2^yg8sbBH`nrPH#P -yzU#0Q=R1AOF?@kgkq-f@oK5)ABa5cC_JnXmTOsk7!NGTolWui@vhh4NVQ$9B9u_8kMe+ODcY=Rqb&Y ->L6;NzmhTx@u?Vs1}dK0roq*y<{?biF<)27(I?)C$2nUMr)*S#YJa$Rm0HTmX@P$o8xz;ih1ImZd&xC -4=Z3)ukd%M->X-?MUYE&5*O;>(^0JAp(F_4^?$)s0&b`qZ*r3Nq1CGw=3}0!PnTd9cI?F)0fR(cm~AD -gTxjRd=!OMp{Ck_7sP<)oKo1$O$He0Jdr3t^LSF%e?*NP_Ufte}dgOpv;$*id@IlAg@Nls9%5Y%~NK& -V8#A>q!V(yImL9Z8jqV*V0z1n-5t&?F*zNjCLWE@{GJq^xpN0z{aHqX{sB-+0|XQR000O8CKQ-X*VSN -XF$Vwu9})lnCIA2caA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFJo_RZe?S1X>V>WaCx0qOK%%D5WeeI4D5 -p>!(Hc9w-Atnn>vlr#5Q83Jru=?+NC5W6uBk2QntUoGkokrQVO&>XeBQB&HJ0-%IGcR`Korc;du^XTW -RBfEv=Td<9YZ$ipy3PU$`5s=uoz2!lnK9`ghjM@k_Y3+C2Gfx5j953A8O=X_Fhy%6K#@v~or))A5{D6 -<2Gac+S;M7_CO5QOQ>zY>rzMFPzXSFO9~1<%E`|Gk|k=l*}Ra_B&hgLaanF0{onvo%!cSj#eoPb5nB= -D{vbQ9UOu~L=5|+3}YRk)PY6&HRF2EF`mbw%9mVNwLh{&F7DATI2=j#sq-D$Pl -?jRAi%`d#Riy#WdqUM)9etO0_@kEX}TbtA0+@Gv!z6T?>7QrH{5X8a&!_1H%1wptCSOmG6s1(Aqy~SV -#{^yUO&s81vl}p1+V_49R8=Q--W+)#h%YD}fI36%`6Is~Ql>r^jRCHn{CY_5)al8Ny7780b91 -OaqQvEaqA`p21C7B8t=K0Si{F6(cGj0a{_wECO_{E0Sv$8Nxg$4y-H%tuP5&U6K_nDdslJ!5+8lw7_~ -2s`R<2;qGyF4VIf7Hx^+^VGE7FQ9Nq>^Ziq*QQKI@w@_+s)!1Q%?|3+y%x6-#Ci4tYU^tMcy7Zr*W`< -kaMJGBZ|Kw_|DZ8R{UZy*=Xy6{zRkG#bWyJ@&F!@wtO`3U9f^l4{#B^bpf95x -Z@`9k&T2C-(yzvfrX;>_p9GD^KwW`a;4>^rDXl;8@I)d|d;c#Q*YURh(W!{^9fc=)rFR*|#W=ecZZj -GGF`jm`=!L&dn~bRN{h#B=U&i1oO6wry96q(_vSSii)YA=HBM{LkB=Af@yG -9f_*q+ka*^MrAuHVx3vWNGA-o`t=nxr|_mFS4hHH^1gj^N+VTA9{gctFXZ}6;exOw9}VRFonuv0pdG` -+MvAlKy21NJZWvv@p_x0m;9g#Ne&pb5-GO=!1!6!L{-9J6vz6n!NOXbw0J%Vqr6*qp6XP)#dX9g$JRb;uqebm%FEhffl+d#`&oyfcU+j(;8yPK!{?(w(l -&Pyi_1RY1c)D4?b3^&Z?qS{@1hU?sR@_H3VH)OHcB2}~?R8e+#@o2d$3Bk2E^U~@$O~w#L<8~gTp@I4 -y85Yg3-bJi%HAcE2Fm&f%wRSAdD-liA+a>lJy=u?-Vb!b4{k%X#1)pgqz(61rQIZcWO*%OFr{JH5UPH -~1C8kuI<5kRB*`((5#JRt<*xA+98k<|aMAq0|)kfkd{<3`vYin+=p1*o^og#O9CC>0N+$~x(c&Wcmri -X>ncb`ahX34$%+fnQCRKqR?vWT~bJ)>L3wh|I+A@%0#3Y2n#)xS>}C?VXlBv3uP52eQ;qkqU?ULBJ14vELVBk|aS`@Ot+3Y#ag#Q3gO9KQ -H00008045ZePV_8$F#G@j0Pz6;03iSX0B~t=FJE?LZe(wAFLiQkY-wUMFLiWjY%g(jWp!mPaCvP|%}T -^D5WeRr2KLeg30l0kuvbqjD0>i3r8JXeFwLZ$M#ZN$NxQVDfk62F3H5=;2|9KTyNTF~vLpAPb!fZy_J -RU5ON73DQ#xU~=Z{r1M2x5u*(}%3Z}mYzIy-pD1khE81}u+BWDwBWR4u?Bp3d+}-tebrIAhjJa_#E+L -6@ARWe#fvn&_jTX?ix%VKd{Y&GXP6;PL+UPAS#7Rs>FDx$srlsLOjl&ogMDAx~2!=B0R;d6c@6*oBLDyZaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLGsZb!BsOE^v9JS8Z -?GHW2=I{SWHjYb?-ijNvv6c6o)B>b(c!MT!`x0#{i -}xv(PHJUa$xq7QPO40-3w)!q{h2Y^1i{Ja>Dh;?`<;g2w?g{j*w|0Dz|A -=N~7=h$%EreTDB%hMY^fqoUc4u7>54u#|>GYR?b4M4bYQlgd-+k@b3z(gNAw>c=1&!jMzeN$ExFYp2P -L^m8tOhn(WFl3sI_-B43b?S6*f5RiXxS3_0;ck9#T`@lSx*d-HUBm;A$0gSg&8dK3dKE#Hen -=H^Oa&diqQJESz@`Uk4=-tsoi{#R8%}ANZ~Zh`t@?Fl``AWcXfvzijUrcvKDFM%|!6r7rfhzL5Fx!lX -NCrLs<_6sJTM9NzhA)VVnF-2oQg(dR0k08C`K6EC8e3wNqMAG~Andnl6*-$^&__~U^W|01OcOwju4Pz -UIM1|epQUba&|)LJ|BLH4lvFn>CLL&ew|GOVx~uf#iG3WC*Lw_1oE?@o{&AW$>_ -k!;E17-f>B&PU}P&v{KdOr?(K+T}*12u?2T1Ql?(ads-F3Ba~mfA`tKU>q9K*Lwt$ylYnBcPR{H1DRx -0=D`Nfl+ugxs7lnM+-_lZ!T#rn4PrLOm-O2z!A>jwsb6O$XIHd16*#M_1?sp6pt8iK(ytjm3F|BzxPA -E<|IshU_sE8C5=OR*EDyL!=j-6kA-AoV!d*lkcTWj}{?;|)KNJ>dg}3^u$`deCi?8V -_B{zmtcVaWV|3f0zaNtAG@Z6H;{nuBm)5ax081_Vwz)L2s8cgPEkXpzTc%5RozxC#xEx_pW_M{#X|B7 -MnG-PC#3gyZ~EDaJ(I>Q)V)q9^pfqe8iZ=`7crCgdQiLx8F;=nkE#Vwh7g>txkN9Vcx94kZ656S?TAG -WMYTgDgWzSG=d89@P7xh@I(RfC(vnH845_9UbXCSkq#ej@kf3_pAmJO>-aw9(C*`KP@}Ci?5;t24vPF -S)}Is~47!SMNTbHmTkvDd!`4vGKCAq4CytshoXR!T-$hYj!>_Y$TQMS~YYrUhHtvhZNQIm))VM*?dQY -4B6B~!{#OwD-Fc1C#P)h>@6aWAK2mmG&m`>I^X>l|J000^a001Na003}la4%nWWo~3|axZmqY;0*_Gc -R>?X>2cYWpi+EZgXWWaCxm(OK;;g5WeeI44i`{z!8e((y9m+!Pc#F*fuEAVsA1njVv}2sU;~p#-jhd! --pPzV1WYl#g@n!&dm3qD3jumfgk2=--J#FOy^$<`S)8$3O -QBbgUj}6~NLm<8v*cmRx7_dQBqIzLUbFp75B~=tfC04+7UfEPqV;Rfc-$@n$eHM#_`~FyC@uuNeqp48 -=gFQc>fQmPG-|#mC3c?YCKA-)()_5IgBoy|HbUfDmFzPe~-uW_M%XKI;*-|E@%?h -}Hf@y@8lc}Y6fKs9sO9L7WZ2j(SI?MFy2A;L<5$=Bc{)h3sLIOnCn$qbEx9Ud;PsS*|BZ%DWrqVj5^* -1U$a0WCukX6MC&YG$J`_TW9ozh!n_#*y?5_sh+7;$1yNMRTkgl8oQQz0F;*U;3=%+l@AXsWP58g~g&P -+c|awWS%vnC?^9yuQBtfx08!VREyps@n5Xz{hoO7r(nAVEqzKfs9I`gWT`(T@Ntm@ -rc*LhCa;|m^3F>k_K*64_D^o_jQ33gVJFn=fUrYSf$oa}wXXW6Ie|@R>2Jf=??$nL;!zZ`7gQfj3~k{ -WoJ1`m3U%KYq6UOoh7*E>eixMWC>6<%ChYkQ59j&{5n0f;w(~fk;#DA3W=ElP*&dR?AF0CUNql6eHh~#7~8oiIypkR$q*SFqO3oYs-~WjQ1njMch3#l9e}OX6s{| -3+#nwXkIeID0CDd4Q3XUohyDk%Nj>vdSSBs(Er? -1?tcimerNiXWK4L7kA3b=0!_;L`cu1lrJQ8kPs}W_<7q_AiD>GF!<@!;BU7y(R&jQz!OF%%mMR1&_p$L=6Hg9(u -&%e)jI}z44IaOset7ByhL4kKgU??VdJev1f6-Y3imFam>>Fp(ty{S5=WUwTR{SBlWmW_d)T8pwSip&hC`FnA@OEW`J?0K5$FQqt=^P))Ht;NBk9UL+ExhV1+7 -F_^SMN`kqvM9&&;s<_rCF=6tdGxj{>H@fQ9$g8Zbmv})>HsSV=h0<;!?QGb1>*%g3N>E`zJAZQ!f;ik -cSlD@pcgjN+KINJehnW*8N@MaB#uKE^N79RHD^^_HfvNo+Y}{8d?-aF@*3u`dMDUk)I7m)#Rgvfrx8_ -M!3&PcshX^2Y0fx&21%o%D>>j*TGd5)4;)zi2P6OGXw2Rn1Myvv9FN&?Q)c*|K!J~?#GmnVT-Cg8Dx^ -?~BrU-paaOE3+Uxii6n35Qs$yi2pjiDI282^u<@oqmJ_h*Yn{?ZhG%Gryw{yPUN#Pi;Yq3An>^99Zwk -`#)1qhytTQyx$h1d0tH3v|cNEnz5L>{xMAZnmbScd0pC0NBbBD)9LO(hbw8WKvulxj#KHfau2cm)f=7 -mn&iBXM>B3{R&=Mo*=hIa4C8B`Rmn#_)!l5heJZcBbR00Xd{rUcgM^1rYtvUGLk_@2 -n~DofVnnW(BG7XrMr;*61;)b^SK)2P@rZ%8~t)UZ(U)M9aZ;3Wr#nS+lkYMxDv3Ksa4<;{L2O6e8k!g -axTmKC=VTYyuo7&wx(NJPFCWNKEx>Lu*5Cak)34ZBc+W6Ty*Ug^M6L{9No|`-!|tSK0l^F5T|rK81IN7GD!JLSvJQy8~<-FpfyJ -f;3qXGyJAV(PFSoA+RVvkrle{dhi^}CD|)3^4M%`HKA) -lrHcHr*v0%nydhAbeBljSTVbtsE9VBTHn^RZ-_)Y?RCLRI9Vz7iM)9lTb>#3pzX$!m)~Ep3Ct|Y!%l!_leNuV}rydRHSEL2->0tAH#9pWS)b6j&u -8>muXk6H*hxj^B<#;|I=2KlKdugtpHq( -;9ZCjwv_wbLt-c)DK!Ua$1S)=;i+!V>ov?YWR^?$HU>kkMFy#vVfhcj6Cj?nB~!f^c6&|hOua>bKm*~ -gMBkc71jq>tw!=y#oZus>UD0GopI>@@uTzLI4lHs?u9PArtxEYC)Eb5r*hA!A3UFSA4m^ZJy2d>j?15 -SeVcaIZghtw^kk~R3QGkRM695MN($Jzos9+IBAf{kbNFvMWk|KEYV*c{{r`L=4hxy{wn-}rVuPzt!*O -%9e9s_U(fjU-M=@2}qrUA{jEj)F0UL|!8xD?=PrQ%)0wG~f9biPjpaCb320~FxCPbre58_(M*lhP27s -11qb(#GFBQ8Sera6zo+KL}kH4}?wlXR10e!$q)VD(9 -`j}8T&b|_WHjt;hH*|u10s3$wgn+Z|4XSJpCnnS$(!58{XJ!-Ia8P92&`BU<-vhW*rYKXnDih*>rg9T -k{Q2NB|B*dr!Bh4aet)p(9A$gjt9)c9>{RE>1Zm<1vn**^Us0&!Npy-D2UScrO}?HkBjRW2@MfrCdi8 -D+O~6-8qNnuxEBGBn(Jw}!iWAK1B#B&LCIIx= -H9mV+BVN*75XH_VZ3)B0AP^cT-~>E>r7s#oZ24@EWso+{H)_%6y>&? -tm=l<{|b~7-H8DyE9(G-sCx*`HQ}A28SRgVIy%}cPwSd?U{lE=x}e7KG2lf(U{N=?q?|mc>^8hF#R!P -RtONIPhVWBIMt@}S+@j76ioIh7$i-J^(12}PDdv|9q46>4hxQD5?pD%hKv^C#4;k{$gy% -wNW3T$51UR9Dc0+zgvBCRUXT;PYv62PO_nP3A<(ayEc;9f+Qotg`QMn_PQ0Tsk+qqEsKgWvmxY3pbMj -JhIK~ps`P%}7A>{3^tNG&UAMyFi#r!J1UYsv}x{fd2yqI4v(fW|X4+JE6yi+_@-d=J7ABasy$Bp8ya! -!U+`||Q=^fwl07H4^qVi^d4&Al{JV$+^mAe+HK=n5oVIaDO=96ZuhBPrWZ5N9)F@>e)ziaK~_h>Tv%& -tG7jK$Q#L{zU)1n7^Jc=J@H&+r{OZAFuJ_;_CcjKKex$ECzJ#FZ9(ZB*b4m{btObP0sXG&EwVl#pTuf -Vi6+~^Q-Il`D<{HU2aF`4aAu;{goC=gv0|;Vqj0r&;gImouV;Ns -&r<1Whdd@Hmt2&kbsFG;;RboD`gURsXqCy>9{*1Q~58H+n6a8AGwa+-FB43%HW1P=qFQ8WHVvLCjN`I6< -`F-KWejSUUyEP4!afzhH>W+Fp0Y%^k=rw1~c1_{0XfDY1RT)i}4--JI@BD7!$Of_``RmG;e}oDMMvj( -qWX6T8Cb?i3|akhzz~7&LbDM%5OY={QfqyK%tm|;(~*(0}m$B!&s>M8%lc}7w^jZ7>qkE$ODw|MGlI5 ->K$*?iyD7U$1U|@)SuIGQ9V!_KfHBj{eT;o<%->U=+Dre&IMbG=CCjO1Y``Eu!Vw1_FDn~h}#jte(j1Hj=~ZAvq>L`?tcE&NW8 -5Z)*~6HD2KswQnL4g-hQj`hEz`hI&{e9L?vx0(Q6g5&HaNa0ayaf`F+r1|0?3qoQL>Z2!0%(nPR?o_B -slM^d)bOQ*4qY?83`5Nq%XltO~%QDXw=5^Mk$TYO|`%(Xj&rfrm~pe5;LD4v7g~E$7SVL7o%j=3Mm6L -sb~+!ZCLKc6q75R76+HxyeMs=T7|Y0)Twf5vj|;^CUcZGLvKNaJt7L6ASrD7`hFeqM7+6PEH(G1#(_HfGB(-CIxzIugoC>%@ClIQ5o5S_aq`vC@@YcAP?M2&+ywK((B=9IjSdkHy(mx^ -|j~R3cjE^W?!(u#qG+N_2QXj|DJYxo276-RStm@Nr0w@o>$ewzh#pll~0b^SX1wOkJJYyd9ZD{rthh( -DO61uj>@ib(%e?-%z4$SL)Ir}hBV$1*(qH+WRAmDGH>S&MJSYufZT{MYLn -DFB2`))}+zlfIPk&WM$%E7}QEEObR-(I_DBP1WR$06KRJTeV%qW_o9-=vK|aRa?+=JTXeD_s5x!*enP -1Tv1=+OyTw>@6~^yJ0UA_&pQ^OF%*0hsb5ybA(!muL_jK{Hb#lNYLe{Y9Vu-qtqpNl(l`h6$4UG!X++ -;uM`qG%CHt-TdjV@8bns~p7XIhg{t63o0MSiSmBUes2uOlrP-6`Hjt`=KcNQ&KZ5}7#E8UStVccH6j( -X1W^DuLji#aa+_un?zJZ0`Zc_^6-(pId;?_g1jtb}L3$JL72yc}vw$|DV@x!#)9zjb_2SASvDH=ybKI -+nv_Bn5^zbnGTn)NMAxXlLb!4eYf#ia^mssw@FB%P_4G7agVnYsQL`6msHCKAxuTwLRsEvXlrF9wg5$ -SlL52IwEiqHgU+=<|88N}5?Y-+`a5-Nh5Pk!kGl9SfdQ=ex+QUgRAk*q3!#*fQM>FH@WXXMqNL*;T9Mv}{xR@mBlt7)t3FRN>tR-f6j)xwsZCYO~R0sPLfZjb#Ja9J=^@)r(a2_YiAVBdD= -Y=mK~Xk2#cg%q_cI1C_%+wZ;5a~=jxwU(%VqAcgyL;ti8N_2ugHi!BPt}6l6nPywxN%6p7oGfez+)!h#8&!93s*|(qJGVrMA5ytG_QJC%#dQL ->O0h%&%8UiN&8q2f(P;Y|8cr#Xw#1h>4eONcvKB$}6spg$YTIiyO%G)F{>h -(%~R0G_P{e9ZBtvc)dr&u#_7V2DsHB&Gk=_~TfHm7rQua)!&469E)eO@=DkKIdT_(OFxbAv_q-+85Tn -FKvB2JlUjW$yjWsT2}bg^E{cFC@HDUk}GSzcE7lRm$P<_K3Z3uJ}@qQ)Nsi^6-pI)4a%6KfSC{EcVdn -fC{8EGE~U(VC9_tblb?X=`wHl)+NZ+af)7_%-E?VXq!#$&UdyLHJgkd=qo>Zp24QO+P~oy-kIw!?ApA -cOWdO-f1ek(`KUD+UU_xQZf$JVI^%*4B+QJf?oF$us@v97d8^!p-?g)Rt*HKX+3&QgI~@X(w@SYaU7P -uqr1?G4JIQvx+?dA>2uJYwO>a`qYWIn|HOEKnQpYFs)GHy`EjFg4pb(d(@9_fFv&jTpVT(j>md43D% -Cn7kB@rKY+qkZ(yg$r}zMua%zq-7L=T}#6uDaIgvwZvZuQS2(S`V7ks#J~cn0A=w>$mfZ%a@wzNcNzD -hnGmitR+C$neb^7+t#z!iT)B#v+f8=ix_tm4&*fbV3@H0^RfC?;d;p%0I%pe_bv~Hf;G<)t4_;F6(b(#PlL -veZN8y9m2WDrscP!5w)Ss4rIr$Q_w$iO$=C^tSKy!M-GxcX3aBe-hIgP#nop|@Y&EM*sg-8DbP)h>@6 -aWAK2mmG&m`?N|IJ5o{0049|001BW003}la4%nWWo~3|axZmqY;0*_GcR>?X>2cZb8KHOaCyyJZFAem -k^atKF(*|W$t(%UqV43EQl%K0KB>x>MDxz+^G)6>( -_FHiT(uJUZd!f>@Kcew~dCO6wGFBxAJS+XldsGmFLwaD`{vk!Zor!svk?DKlVBm29^qHm(?bXLTEDN| -lVQd;I~@tnxjVZe5&`KjsFyjUl4X~{P6y8$cK{EhnW#k=>0T@Z-pNNh`)rG=%P&p*xbJj(~{IxR$mwc -I7VTxI#@M=j-m&2O$h%c8(<^U8AD^5`3X6pmLRpF5onI8L*)6wf8QWH(tVI#-i<2qt*^$df{JuIJ(1* -W0_<4M_c$^V#&v{p{g>ax=fXy?=0@I;ZS2-xjP~3zmrVv0Srk#W;&4CNEi;;rBL!gv&%IU9iu`q%bOZ<1U|q>COOuw{R&MxUIVsDG!Ll$HC;2vX2G#9wwivFnm4Q+#=fb;*qgI%?4V`;hMhlPje(HFwvc``LVceS7ob953;}PMkl -#IahxM_<5m!dSg89ida!}$dT_3Gg8fx94lC=;_=*m -Z(+jU`u-UYckfxK|wkuhL``vkq`mBf}0-%B`8$`XyfGG$Y&P3F7zYCmn%*{)6J+_SWt1R&ImvNu)6h) -9kb3*>R*4ot#9yaKNCV(sM(#2#_G6Q=o}Nj|jBa77aT3Ltn90`X`7*l*OXgRcWc)uhAM;b`k}08=9YL -hQ1cD#o9<)Hth_Ht%&4GMq^4I+6?}or5Q2&ts!%xkb1v#+_3P7_xO)Zj15R*)mw<51^H@-N9v-lk;a)6LG6Qfw`@fpwjy7Vr$K!HIx*=w7tw+BK -3vVtW>fsPKkyl;S1f~|jDFAtEJaxwPP7Lw(b@=}9@u0yAO83Bv&v=DHOJqJbIrtlo&It90y7!}eoUJI -Hmb(ma#qY7>!pY|`7mi2%MwE#MIwO$OA*r$MnNRoY_e1{i)FzHj@*3t^oj8uygkJ}DRUaI&mZ2g&y#7 -Pr2jCVD>L_1)F%ehwe(j=RC1Gnw{&QYPQUF1;BINn&6Vl6pA5nv8z;*5p -F-eR?&)-;49%-R-BZZ${_uhzbMhRK(@Y#qTT^?>p_#5BQ8PwO5v}eR)LHLSuP(?2lep8c0*8u}}B&Nn -1DpRzB73xMp2Cp!v$qy|m~n0TTePZF&~^ev=-n(~csIQ@tY -6Qf26H_#s?%OVLJB5GmE!${;nsitZ;BFIeTLKyLQG={EZB3>N*O&nhRZsMc;UfYKx=5D0ESEwLEOuM+21G{St1N-{82c_x`t_w1$j(Odc0uYXRC%R!5pJJ+$~spMgd46F&gqQkOx -Nhmye*KYFO?}bCbk88KtFm%8tG1e)po*<8rs{fBKZ@S38e!AQITnY;;<3jV_pUdYF|XXvXYNT3n*Zz6 -5(4o^){EtI)Jp4JvRKnbY^PdMY|1qRYSol6_NHJRLm<#6tJ(^PNUQ9W6t5Es+3N}9vjxe&cqR_JWaR) -eUT-A?*yU)_OS&#k#<{!vq;7)I6%~iktX9T0&>jGM0$oO2`qHR<0s16@o-o0N1>ol3%gSSId-F3YQY! -U8#TH*p8W=HkA>?G)Mhh&+8x&%_;}W?b$Uzbf<_CeaZg8To?qY^=Hf4o){C?)eOyONHREXPaCo6ZJ4&wrE1>znp8y8E2CB!zWXh);1Ro5 -W1z{QXo_Zbl-Jm)r-YhebbWh7BvA)qBvzg3PdC*NTjOt>_d@=Foc-5htb9 -F**?o*1k~$0T&R$^9gTvf>O#GVmsRJ~pDeJv&7{h`T-V92SJ`7f(C>SO)aazOv()qW434GgzoqhBOzN?Ak^NZhca!{0t!=CW%2Z(F6+9X1YV;nz5=;q@mjwv#U84Mh-^p7zn_ZOC)xw(w?5QH_zC? -xhleHsQ~=+O@%l_|_<*FZcZR+8E>t^U9<9Q&j#et`JQm;uK3yeIm;F -$2>^Fs`-mc$`c9aco@bc)3{*cIT;@ExuaYZ&8#{VwrbaMT3Dve;Jr3el9qwuM!WKYAkrm-s2&#(3PO@ -U|!8rb1gL)d^xlDH^U=+?6eD&+IjIVP7v+Fp=hUvnJ|i!!MJpw9!LxrTnD&V -`{i!9GKM`Mt1d!h2{ZX249bYw?72z8t_659APi#0_7k*fBU;csJDoQ=m-snzUB2NufjN||^EC7~M;xr0G^9lT%!{U*ID{r~fl{hu1 -?oknPRzB&mj%~#9tbi;bZZdsJFgpk5U0gl -g~}>%n5BMXcpo1wjiA5?j2_>7K6sroMF4Z0+m8kZmqY*0fiDkbAJP~JTc-(B?+0;`xpx2u8jF+Gct-N7)78e_L^t(2;AA^C7ezimJh(o15g0FU -kK>UCrE$|EVFjOQ?GY{RV!#;h9Ld|W>&+jB!TTv<15tv-Y=rFE&?J}qhCPyi+t-*MzBP|gNUPuBi0t`Vwc2d@f3RFL8jsQ%Z0&o!SzJd>RN@;HV#w+Ez -t)BB8emgvUcTOJ9|gYtQD-7~P*lwJX)SII5GSK#7n2RI{K|~>g(oQDQ_wvLkC~MU(P*Bz!yu{c{wTe@ -(oeVW$@sDcPYrCMIxVgX?ct`z%bP&=7Fz)`fgV6{pnGQ<_*xM{;eZ7a}J{q&T4Y -jrZdo};;aIVD>$355AP0S1^cz2BYS!~R;><|4tzM+NdI*aY8f)6iyUN?t}8xJa|>I?yM4DcXO%vi5W} -ph;y)ob9&V_2J61mE|aHjCnGDr2NuE0^#$^@ZA3Hroysp|tM0nvu8 -n<1$t83iqm+sD1t9G0_<-+E*no;dujVJ628|d2bKDR0X+5_QR)w-h~^1ZZk5&X7ZW!Ia3UM)@6rA8x7P_U0MVVJ -?kY?sD*GF=X!o>8t3lH0lZ;4#oxSldBKcMatePsoOMX+k%V=z0=mA03kDmMTGkTrPK|Xs*$4|9jRr3P -#FWmg115ac#NSA`$4BE-&?z!R+RCcJuJvvqsTBR-Aexl2(MEHq;f_>TIPACHSU{&{AgV#1+eRXjP51t ->(Rew_%MxN))~Og7s|eqt{L~`*8((EQ;4bwz+!TKFm9LK0b4{AR8fmFYGP1Mm|z~!IWL!*_&^)+q$ep -ZZZrook$fpG$DZWvlKd3@F>c11%RNP`;XJnySMLw>viK}6uhZ=^?ESf>!ZWC>Y5vtsq-LxatERecBaw --4KhsJyz0~wV|aSl^8*UUovP`*WwfOKz$&%ZYte$;b7h?LAdAplSZfaG*Ub%c9bZ!Rx^9@$-ryweugu -h2_ER}T+&b5*KSuYgL8rGOm}d>E*mFc!gj`sNzDA;Ig%3f=28Hn_O&*$ -noDu8cJgyva{gdf1v!5j5H9JDctlyIv$yy+Xl?(``>!AZ33wPlJh<|NTP-%~G8==@ti_decqb)|2lBP -kRvlFFW=A7oK>(dfI(_U*CS|*ITkL7@R!=s=0Je)&p{cyu3Lm0G3%xN$s)X98$eXXi$Z22< -r(2rNixvKx*-04P)h>@6aWAK2mmG&m` -+tv&LDFO0012(001KZ003}la4%nWWo~3|axZmqY;0*_GcR>?X>2caX>Db1b#yLpdDU85bKAxhe%G(qk -wznO27%PLZdx?z#I+UIGfwOo%jqMz1Q+DiAQr_gM6(b5?LFu01-k?&%V|5)>LDhH-E%+Rxgb@ic5Jbz -dee7ev0!r7s?IRJ(yH!_SlI7p7wmp3*jiM)uMN|x{3HxBawk-8GS+LcW~&3+8q?Nt#f)OIS<8|e!OWH -$)+m3N?YRbOx)r6Yq`hWMcY-WlzkT=T7jGA@?tXmn@$LQM{>@K!?>^q2xyMNL%-+j$@wp -VOk*d-D_Pu5L!GI)pU8lM;;QfMW(HPl?nmzEk7he*0T3EOOwEC_Fg`b@*UOCg;GPU}fD9vnshP*y%L8 -S7XYLropESanrf8es_t6Jn|W#4rm%>oa><&6MQO*g}@89NWR&NE8}|AUmvnrrRVn^~6g;*7!H`T4njz -)ICra?^Jlt&*S7bN5WMk~eHcP6b=687Rtwhbz^=w^pgTDC{--^G3N1oPj|DtZ%=~Z!*>izP|k~znO;% -7!Yv!J<$1yH+&h*Yv0TQ|HEMC%`gq)#A3y$EHXT$NSYpH>xq{>b5e=`4z~p`_K}oe+K^R$EJGmHd)+CiD33=Ioej -wr>>0JCQklRZz3fM~{!YDdN$x(~Spi3ELd&0&Tv1?7v-Zc1opd=n3vusAMl-WW+`y1YrC?L1`Fy4tF( -=$d1fC7%9|B*{5mEHpKfS3V6oIbn-Y!vH!@TtQL@;Um=Ju1wh70$?LFac?kv8q1oeHvt^H5%B;A+jn5;L371)UzP%-XYY2>#%>a~R!g5_v2(l`j2g(Hl@1# -C`5PH)JGFxJIItx?-PG_cqUUJH##M*BJp^jsyCB|f;8(K+oKxNAy0o9KD_M){-`zZ0{dWEQ56`}P{`> -2J^#~kkq2^UU8@ZSAf&DY2yLVhK?*e8*l;@Wo_EQU{D)EYRnA)pvlpU4E?Shmkq;tDdB -`aRaL8>XtXv>FAPC80T|D?R@y;WDjdRxLr*&qa@PFvk#Chb8$32(lfXGI~2n_}9z$#uE)mhBvRYeJ~6 -&@^7Z=z>h|A2<<1himHAO{5ga)19mcrLgNx5Sk;J;YXwjY5<)j34go{a+ySiu -In`JvTJy1Y@TCii5PHVikS4y;k{+@t>wY~%;8t$7?B)B94D1G&NMH4yw-z2DCN>oGebZ101b@KEJv@- -AljZ1&lS!4$kR| -kWxv^PS-OHHS(@X}u6^`0Mef)*v$P|&fjb-b81V96cYPgug>(hjmiRt9kkKua}i5T1{!KN#rS8-Kv2E -E%$s8%jp3>A+O=5LB@N>7?PG2CHf036|f<1_l`_vfi?B09EXu`i^ZB9F_J|kA4DeAfG*XULhEA3m?Ii -d+guJ8lod<5;6j2=sY`y5sN|YG-Bs_Zb}H|a}eGlX~d6d$b-o1#5(s)y_NZ*i02pE_`}f_VuXI&B+af -544QN3{?Qx-jp3;Y>&!tpOos@Si^WWfy2@-kyOz^8pnm*uO{o7mFCuT$Rle{|!L9oaa>+G}UB1!u9WA -t`?$g!$hy+>fG(m-lWHHmHr)Z)rNN_5`U-!)Mo@<=xqPu`pcXF{S!%;9vPTwa=%$Y!XhMV7UG(@1$Iu -?SJm1Y(ZH7rS&K!VhLVuLwnu`vBp5Cpbg%RsQD;ROf)qA(Os-$I15Rf4)-vWV2gJRtlF?PP -quZz%8#n@t89M3{)$snb7e4bhGt%el= -=^inAwy-g~xUc&eosHAFGab4%!SqEaot!M_uXV_}iXpFI8BQZQS%mE2hCzB+_s^ndR}0aE0zhjFD^u!Tn*VCN56=m -^vLM6b@mmM2y^TX}jcJuEksWbkB=_)I)@qGptow;v#)$zd}78*d%3l*5HOIbW>qs3vbEoD~>Ve5ScI2 -cO>KB9QwhG6*vKhLUKHGEk|9!R1Dc2$aLt$DV(?`3BsfBL$0F-^utqz!a=4{PrH*A9FF%L$&OtOFMJt -*$u5#V3I&3GCl_af38~^_=9KD;%k>7+KA<0+qjvV?ezN)3(;tNmcy#XSN!tCxhAVm664-@2jNg23m3!;`3XE{d$yC9KT89^*ZU-}{NMQKR0^KHYL}`{;*uPl;&Qa@x -WHF5_<~^arSQl`QE=r6ov*2a6j?ExC9mEP)nvaiKiRd8j1+Gd>Jb3PmVToDCLz?R -@Ko_*ne<~7fK2u;P)h>@6aWAK2mmG&m`=kUZ4nF!0037R0018V003}la4%nWWo~3|axZmqY;0*_GcR> -?X>2cba%?Ved8JwVZ`(K${@s5CQKOKJx=J6wqGw#1J~q8A(Cv29^bWWn=h6~w6Qx8gNhS6E_4f@)$&~ -Fh_b|{{rsmC=Z-(s3=!z{CtJbwfEEY^wjW&+)rPZo+ViA6iRzy~4r9|PRu5CwG^GcMiZIl=VnmiZZ3( -*XSKInqe!Y6L5I5$R{(P-2fwcySf%TC!NVYc+JGJIW$+GW?H( -U|>1FkP!HyXCcGPP1B@iYxi2U{GY)t#lj4Yxc|K<)_K#DGT~?Fygh6%jZniD*tg=3p-oso;n$ -qK(TIxMh|W!3myF`hIF$7f^g=Ehj6_WUm|e#!^#EEZO2XO -U-!6oNu)rC4FT7PpJVq)>JijX9;b%^0Oad?d@_BPB)m$U6crE&cdZiDX^2_@6Pz^pPts!Mk2-=YQnZa -pNpy!6ZA$5^DN*@>7Nv?2-SG$_lm*8DelxyQEY4Rv37nu!W$*gh(rEb}YY!ay`?j|2mKvGr+bDmXTvK -hR{y)BXJHP4$%#P4KY0o=N%s(6{XmQ1CHk~y3#kIoaVd8oPXyP`p%rq=cB< -^zI^$TeL?p2hJ{8pKRH=zy;dSeRi0E_D&XNEV@}~uSMOv#+lJpj0h2*b -Q$QQHKl=RpUBDvTTARf5L{9*SDr0!Hy!>iDZvhhA3sJ0P^u(c25N6R|8g$E%&i{L`ax?KHtZb%{@vwG -dXZLK=(cT`wjeFY*ssL4zQds_uG6g|CsnY@*~Ku(%A^!p=a*_Vv41neniB!LDO8Uq_J*-7GDY_E4w#S -{td%gO|z}f7Z3TEBc&6DFBKqi71(HjrUa6R+1lff7mSG#;2G_UggLti_Mp8)mWF01FP%6m?vPkz!Vx@ -tzw(jtB4N`4u;7aY!}T)JoP1S$+qakhXrwlctL#ucY}h2u -TKE&usIRtjkF`C?tCISN3F>$%UpPNGk^8O=ku6j5Jca4b1VyP{ht={5^QnnO+7B$E9~m1M|Al*hN2x= -+>|1k?k7kebtG0#GcNv(5sFWwQGp@cSj|)G+;;RJaCk3?hkzE_2_V4lY=sjU6?x`i`6RNo0o+72R|!6 -ECc~GnQ6*w7mlzwdnbh|1F&FXxBVW+77c$rOWx(ZlwPD<2w4U<^k&E@$}Z -Ubbn~ec0AeP;Vp}DX4KB7cWK{=K!ZN6GdU(6(TLe0IV}EA*9mGE^=s}`bNn>w`Lo#kPYG92-za(f16u -t?Dmua-p$lCK^mNNGu^GkVSZZCV#V&CLSA{(f#ax3!1 -1~)B~8X$sqHMNCmDiz5f3*vr3Ok_B-b_>Ign?%akAnn3PM+S`)TVoy3YF|rSycgyJ{S>a~eh{0=XpsKqL;7Ui>eoVNKTYsp3^*puo#}q!A#5Dj-;H=-R>R-icY}$ip0TIXPS`sc -dmTZ$M2)l8a6=n9#a;>nVBs#_#f;e`R+G~jwJn8P<=U)IHm*`9W>wJD$=HU=w#U!&XCZYw&XBK**xCu -Plh)+lUu7r0$Dfza -qULQ+@nX~W>Wi>-;leKiQ}`%gDNbsCA5QXAh_Pp;W1rm3rJr##Hy2b*;rnqqm*rUf&8q|I8+M&F?*7bc -vx8wykH7aP9};$Ur?3ulQ%Prur2oq`Kc20H^Yw -IOI{TS!%8>%1^mpTj7vQkkI>F1~B;5>dLHdk|rZ#!(R&==+XPhSQ?l$S!|9{E90Z>Z=1QY-O00;mk6q -rtKr?zmu2LJ#Y6#xJr0001RX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlacVTICE^v9(SX*x!xfOobuVCc|% -c-om4HgTeQ5PwYMT6biLE=Ro7J)#`oRL_~kh3JmV*&l~`yF0JBU#R-Z>^A67xH{O_w#X7(;DjqS*y*Y -vZfJLrweaP?SzVJt+ZardXm06s;Th9x4oNqyMH|qcm;W{8p@)L(Z(CCiU~ay)Oztg{Qk~bW1kTTpQRg -#PF5>f*Q=FSieIO<=Cj=2AnJaYTwu%nmMoOVf8QJ7_boYLD)IKidnfj$6NS{Gb0nZq08n}}!g -wwG7Hd)$dtf!DB#SjKJyl&DL29)lL9MClm%HCO>S!*cE`yw@u|ICF2^J3fffYmclI0exTmlYZcMI{4 -&a-!ouJ?i-h}{Hja8~xW6b@diDd{03{sm!RF@9lfyAsHNY;wpB6EPRJli|!x$V+$oHHfOe3AMesx;cgQ$6%GIm{6sx4F*)z2_8-mq#9+GdXHrs36HEZN+DJlhjmgEYnT5qh2In -o*hW8t=_rBET}m3jmopB5a6lasb=Yip^ZV{gE;&q|l3#||IL1321b&>570;x$R<#fQD$0#b~CvVdddmA^u=bv|fu>BQYnhukxx;|Awtz>v#+s~mgwSy%o|w6#>DNcG0<91PbKP5NYBkIrGc -$LSC&l5=<82Yac;YTA@MBR<2b+8H(o=ZiHbD4aVSiQ@}7>}Qub(-0@s+L|5G2ySSU<5E~mCaU5#yugt -T`mdC(jQIOf%wEmKcd3hAh=0X?5`8?6`C`dig^YnT`@xCz9(hp7uJ%C+pT&wd?NT5oSzep4+4<}{^i1|jQa(mIKW>et!&(HAB|=FU6IE@bpH1P2>D933pwJnKVcNjkf6 -nJjhTZ*^OXS{mCkVsj8^6vtW4sJ^d*D((q%>1!3GZ0+i -iapY)$T%E(n8ve`}O9_B@zvt8jX-!NXm1ZxHf(}Xvu*a13y7TU|00J~&7!M^9Fs -#%J(y3j6X9vFmZf&I*mv<&C&G4}1)M^G7(#}cW<&S6 ->7+!(Mb -j!fdB5H#oJQIp73e_Z6Rd+=*R&XqEz@nb^Mv9?Fadzdgoe3`lABT{kg}eJPTxw*E@8Nc`Jhr&7?Q+<2 -nfN(tV3`>Ld!gBs7II<83N|>ERs0X!aAi6#x_&NjwdGf%$H -?!oD%|8y=#Qs>W1WiMVV#b0i24$U=X!=P;foIFXDle9`_A95=vjPA}P%nKe!bMfNEuIEol-x%@dFMm^=N! -T_0)~N?s^JPdrfJJjtnC2r_OeI%5Fi}>~B?HlV+oHB0h8s+9bZ$cFCN+v%Bw_iZDD^Z -oF+M6elTW(4y=pkj2bkjjq(DvvG)Xw}>nY19C_ER{DZ#KcR)|HoAtDf%wJyBop77{L78S4Fw+}F+1Wm -UrjuIodoMBx^r<8H)g`})`NF~!BgTbiE2D0l%c$%=n*?e%UpgbBHtGO3+~4y)p8&2W!!kd?TRfweWH`TI%^`h)#*N!xWxtigS -nC&W5{rulT70!haIgqim8DYCa(a9g_~wFZ{Zx%^Fki#8bHmJ)hG2IuYUla;8nENC6G^Rf!wL!3jhF9DF6T@0001RX>c!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2 -ZUtei%X>?y-E^vA6TK#U@MiT#DPq7!HpoB_{lU#c)5gV`_r7`L_LFBZ!O9E;|t}NEnQs6Ev>xu?>jRW -ppE>ChZ`#~;0cM;GrAaOqi6 -HQYl9wB~$T&%stCTGnmsBS3HJcN;U}XB!v*XL3z9(ZNjtEJ4O!HU?dAyKv72LmXH}l1cMgDq0<@(Cc@ -~ittQ=d#2Bd^BCPo9s-Jj+SUBu!G`Yc+x>TW#{>Y9Rx1YCn>P`wt$H*@jG#C8#o?tAuOnG>I4&EFdS7 -Cqp7Y^7+~6_+ru&tt>Imvn2_`c_E9Og(03W%Oxpz0@|`LO(e@{DtbM$fKMY~`23X4SSl>j`SHp4eA4U -nejLA=oV~aphs4|WzwsY<@NADvvLz#&E*UWJ%2+gqrLx{QKpz7Z> -5h@$>Nng#V(>>m?!^9UOe~-RNMHc!B%f8)}N%(UL}^2n?5kage6=-B7`^gv(4UECC#ma=W@tc$}@p=- -_XE#r0@~AAariPLEHYjZqo++>6H$b9N({hMWJNwjlX`Rl#7H|tA9s;wt|WKdzKpXYnUTW=5v-qtP_QG4D?{ha4O}B+)`2fP%nC0@(S;Sa<-ay&cix+I87wZG;92wky2D~qqAqa%B0z+ -vH?(CF>OFF%aWe>}S&le6zHe!a@Gg2!Hsg9^bQW(}i0OMgHPQNoNy*LU!^2siu#@|VM=tesiyo?En5a -xhup`=0iXLN&<>iBU0QWKM-tfS}ywE?;7-rBpJbijD<~eFZ+&_n;~qcmu1m582ImY(hHCvg=~iS1>if -Z1p*ZC51iMxWqGLgZ#gMen3W- ->O_s()nmx-LEyqnZ>x6bdvE1i{&xO0C*DAV0_ -zbl=+fnbC5@NWVlvn3;5a-{Wd#Eze5jt4o{Uc6!>N*c8 -zM<)NQhgO!-UVXk_BAO>H=1(wua`&ZZR$O9g<3G``QDiZ)(gcd1A0h0*tC`A)ts@WJMZdJgQ>u*ThsR -!sfb-@J(Pjva78fn_8q96)Q;})wTLp#Dxc|?4ngzKKI_{LVU~woVSXH8$Pt#Py5q*W#y&# -d#kUD6OBLJ|H^@s3bhi}m?aY>xCeSVgBw)7@6e#!?)P)vR_~**R<2=vuogxz8xS)bcnYWEHgubV=y*F -sZLyMu;j1J@Qwz)qYC+djAIZoeuZO&0|Bm(kP?vbzB+6=b9L7BD!nKo<%fL8!*=wl?_1ImhB?I{YZ?} -EI(d^$SNbzDV81cru4D7z|ESrlR_W@CHbCus0wR!9~EDg>+YeoCQXNFti*G-2)>mHHh5oNQ2v!M+MKF -F;QBEyhY5mMj$D7^lgs1mAlTwx{@Z2IA`|#1~#GKv_>YxN;qtl-aKIG4|L{o+WmTSevlZrxH3 -_;613|@2RUOwih8RJoxr}+*o_?ZOUL-ub#A5XRPc^Ov94!RRI-vPSX^-w=%O03By1E`e)@51UAq}6&lswH#BFl0LILj$YaW;q7aDYUi_ov1Et-s!5q1Zcskwnk~zR%`VXF -8YMg92zXJ-ISH~#~T#~uj(teqh-sHfV_I4Y*FZ>I?I+0IXv7Tnc3E&%C#{PoKiyaYx0 -p@o%uz#hK1_&N=Pe(- -s1qP9SN`lU(3khl^qfyZl_hH^#H#YJoKZ13X{Ct*G80SxH(m=yz~+l`}OYRe2U8yXtyinOA!Neax1aa -M$=8d5zumB`6U!5dB#Rcg1#nrf^p+tZbnVtqIF2=3uBXe;YO!YXwlv^Xdgu_wBGYW2iHBbxz2cUQz)Y -D%Tm0a@|Cyx`oQywXuvf#e2m#s46q$4xN|_%LN;KW|vmAH`EQZukSD8h}-X>v -b+-W>}^MN2SMA}bqWh$<@P&cHyds_DawRl)25B;vIm}w~RC~hZ#a0B@~y2hUr8VSbiZw2->VKp*S}oiQDgI1R&V1}kowh~ZL83RSEzEL8ueFzJ)0#bi7wXP#7qn0lJ1pEd?zBnH42Roku6gR2=R -rD8I86^P^TL_0{FZZm;*47?*?DY@*WUlleXUJ*GDwH8njoi8enG$U@x#BdN`CzCA5$l_tj;>wtdFhWa -X9{gR)68vX=r@EgLy;P8vX!u}BQSy7=!XC1Y$ -IYg`QFBTR4JNv{xd#F1DxC_`oLqz -FP;=$B8jRt$4Q<43YLYLt!Cq)54&R$=r@VfX7%)Q#^WTS()?(|GqTKb=VC{10E -C$2>pvMi#|z%fwwjoij7O>;Q^CDBYEK<#)~ZM6|9EgCNL$T9sRk`Kr&!WQicB_w_{ox;}+f%Z9-~1n%AZSbz-L$ne7j;h -t9m3yFKDuL?*HOuLx?42DXUjCO1JLZ#A;fGiTc!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZY++($Y;!Jfd5xM)bF(%OfbaPgYI^V`%2;4N?3o_=ejGZJ_L -3gn8-uZ8E5_gf+&JyDzrBDlNV_Y*IV4^lR{JHf?BwzB@!^5hpAWf}S(5KmwlAO4cq`MgmH&r7w;O(s& -+L8&yWPO5oK**@3YNtu`F!IxNq+t;)c#Oy*w_1?%vlPDZ9mzoI^`LAjn68((Wy#gR>}?g^7`$Gl~S^o --@bnTDEN+ofcezLvHWD!? -#*DQTH-mHE;e?C0C{QBkl%PaeZ{nMJUxMZq!O>$BHT&g!7E;g;W{qw0~db$2V3`PJG`aVY3LTyjYl@3 -bI6b7NP`@R{0D1_2f=4l!V%Dc-cn#R*TxRqh;&Lz*i{XE83YA4 -7gZMgIM7RxUvO&h2l8F#tx(d-h=6CJm4!M;0PwbA>c{<5J>BTzPV`ty&lvqQyM*#8IShbgPB=b!sEfr -c$UmS(3@jpG}p!sq%+flaS?A}aCERg!{hRl^I#d;Y%~x1M&wI!D-fWX0k*l;ttCL2oZ@=NSS#E|x%TN -e5+K*S83)xQ*i?@bOfQX190AdDngXM_UUwk<-dt|7gzLtGRGxh>=e+^#*SU#6T1QD#EgYXYRVYY -0>5&d`Wg9s#X|8=}n2Sh@r0GrR}?QspI1XT)(xA${V8_1T3ZNuFmKn&$iFjR>qyqC;u;qycra1J^hD9 -~;@E(z9#{gTyMwNE0N86RuDi=i9tQ9&W$~f1UH);qgfgnnDJ&!g$4C<-$x4;nca}5k)J5 -ZVCTHPzP~||j7lBgq1`@q;N-v4Fpcpei5C#a^009gTb_04e&Po+s-RBh-Yro$+I@*t6;xbWq50YrRJR -a@PXejWRLZkg@O4gr_HWNFnmPY%kCTkU1rmJJe{IDKtd|Xh&i6?dYZCM8%M(A -tOuM0i_KGo7N)4<1P(#2?Jc(02del2YnRUf_VI+p+uwLSxOt9!fRU%psCv`oP%Peqv+Zm0X$NhWow5v -^|~hNbr`F8Q}t?2;1EuthK#I%6{rC?nIRL~fTIR@gaICHfCmhKBQ^?cLENZos81N+(+2p!063+g&=w5 -F38#0YHofsV5La_l~jzz38)wgaII60_HmJ;~3*l&-+!Lr -{vu7KyILDXB%3vXC>f3oQWr2!HVfe-`_%}1v}-~pIPbjKNpxlUX;rNvxDgi9B7k$3TZmh*S5h(nijaR -+YIo;ZwdVh!PkW0{nOE*(iSPAD>wl3L0@uKY@<0b1lGIUjd#r|LaE$6f6#Y9W6=-=XdsT*`#5oWcOqm -X@=09D{4~*hn=}7mbriSsv6|^{&itw!)~9-d~f-=on}3u>C+>E8sw#jf-Y*5V3IggTfW>y2psSa!MoS -+SDG=OLUWvV=+K=9eVy!Xe}Xvx^Gne2dHl?%qP1E9rHpOZ=WPoMoHAz#C4;_ptTiheH#x!4Mms&&^n<86n}2=~{uZ3*gV?}OU~l3SU@5I_z^?pK%7X9YTm3ZIY0oD^{Pghe!~alA0|X -QR000O8CKQ-XP=7HWL;?T+83h0UBme*aaA|NaUv_0~WN&gWcV%K_Zewp`X>Mn8FKugVVPa)$b1rasy; -Dt(+At8k=T}Urke!NV+dU$2=Kw?p3k^#JRY}YmdRJFf-{gDK*RC}x=C64{(jpsejU@*us@ -Z*4Ml$ENv+}fh~DcBl?jXQt;HB!)b+@fTLIRv-EOOC_pP+AlN7-g1~I -8m)KY0?oP`N22_a9Z&?~pz_9_K@Wg5B&XsvN7xW)}g*8C5L-os+CfCmLqIl!8`cYf)|j$7Dpf#APv?^ -MGaub2?0UXD7X?yh8^PgyqmayOmLy)3^ougfZ)r7g-!6@SB^2DPCVK1EcX7a|C+DcO^J)Z-!IJDHXw= -t5Q(;JgQi0xN&ItuiOzGG09IFsm(X?@6@L-yv4hyr|K$A|=dLoWJJjo$)*!=aTdew-t8iSVMrGPnwD+ -s|0M=u@or17Jf$ktS$Q-J&K+Ojue@nFI#~}hq9)9N)lc}J04p99z96{L!d1S@y`dKUBZuWPL`(}`SsD -?O3t(n$;lsb(I$ix&x%VLLAh@izJam~G-VkYjFe@=xGYQ3wvF#9NBe#vJLmNH=B5*@uo|o4uw(A9EtJ -{boSP}w80>igP)h>@6aWAK2mmG&m`-OnaHqKi005&I001EX003}la4%nWWo~3|axZsfVr6b)Z)9n1XL -B!fWpi|ME^v9ZS4(f(Mi9R1S1b|)qykBhTqLms_+Z5nU_fyS$T?XCv7}b^HZ&=4m$7{5q5UJh7AVl(d -vp6s`b#?dB9|}gVMnk`ayj2OkDZ+vy+%R2q|wa?rF_*rZoPW-s?|d9xhFn})H~MWgmEU9f3AF#_$l%+ -qX80DLUX*Pk&+H+Kq5v)XgojbAVvt9oqwE -M%qNn2NjRn<18QmXDv9rq=dDtnCdBg)y<5i#M`=XC1mcBYQi4OK1$*Yb8^-b1blpL-)A3|B?*Ofk?;z -#&&!l+LvDaiM#M+n3>2bT&YAwkMVa7`7V-Z -H&L`m7Lkx&@Ey6q21FUUh$ABQ?Z*dx3#Ug0xz`xs$KQ%5xOPwHAJ5Ox{jE5&Y>fk=4{JG=b0uk;cTb~ -be9yXrqjyKOR#FyskB{FCyMw)8A?7sN4>CKwJijp_;`hU#Gl-Jal5$Klci#uF+e~V009qCVZ4}SJ6ltuC5!UteWax)$x}Jlrag|RxP=1$)rL+lU^QJN -oobAQ4ne|jc|B!nWUr)QdXBN(S^Rj5)J8PJ5|}DCc%m!1_b#ShRAelBn|*WI3eg84xv1&^g}$3^8}QK -1QLJ|?y4N@fp7{vsNJq)qfR-2$&Z(~+KEmhsZAw&vB;bDHj_NEapY~*cNUw;bg>za;S1N`hs6dD!C6N -$I_+&#rc*or{Js~i(Alr9_l6q1`$6l*goDu8Kw+V+4bd4~Y`0ljFE+=05iC<_RekyImp}3nlf7#{#ZV -DGgel*2)m#;a+|FXx-AW*btHa?AW&x#{0lz-l9Qs`oNqrU<32RIe=U2`t=$`UhH2(al)u3QHfiIBv`- -=_PPTn27_lc!o@V+~q5-%y9`DpFS -Hh}PYPl#_pbc_qF+nVrn?8G~3+2gUtcmmUfOCvcMu3)hBaq!hMV}~_1WYc3dk`$-NMvBr8Q<$`RKgBd -MbENHNy>YS=+gt27JAlMcdl*iJvVw)s?}WZ3VHj88YI#QnM@&%9rwKzz^gNm@=c^GBjdVwjnl^f1gtK -%i(mEY|KK0G_QGjzb6?VKxr_<@#o+=zOEX$kxpB=7eyHxVz;B%okYOMJ4@$X$ZO7qS$JSt5!&);qx=V -^5>lp6i;a=LCaR&&@l-4qDAP^oD|mgclVW__3p<&iB{_}cF1n;KjA6>b|{_^J6Ms#r$%z(GiAkd@}#q -&55HC%-StWSaC-Eq7lwH8H;&pKtS-{=Stj%P>i&6UVSOC7D(uv$33H8&Al3TGr&5Qny3`cGLm;0{Hri -%>aL1Y?i~FR^vfQx1kcSG@CFo_4b1Z?77^Vufhst&VMoKH2 -V;o!L%pO2`O$khyK8K{<1Yi#`wP)h>@6aWAK2mmG&m`>XU{MMxe007ev001fg003}la4%nWWo~3|axZ -sfVr6b)Z)9n1XLB!jUv+b3a$jU+W@&C^WG--drI&4c+cXr0zvowol#+y{Ax_se4hzur1qx%7bueHrL6 -(jhgX09*p)D`_?I`w9^rT%s>>^+8b1X|b_p#io-V$oA)BJKImZjMlHk!?5qaobyiW17}v7&c9Sr%j`n -oOFLuEyWq|Em``%tbm|WHh6^lw~^4#oUN;O5%EFwb%|XCj2hFdfG_M7dJM&oR%YTLXQ -7P^p&G_UW@Qbl<|Bk}m+xGM@G@#O62ybaVgrmb}KTEvu`zCAZ)#SGIn_*-2Ha_5HXz!du_h8+ -RIHHa>Ozr}ym3YMI_W&3V~>{jOq<>Aqrl1d4rESKp`D&5mvqd#kNj>_urw&R*EnnQT{wtLqoWA>MuAr -retPjHJG2YCW_$b#=toFT9w|^)jQ?X?KgRrcTn_%*9yXX+Lw9+SMAloYA>D6hM -o4YYor}a=89!NdIj_)3*JGa&=Y~0F^v%a;c>}_Q~##Z3)Rn^xqHo4pAaEFfhfr;m<2j;Gc^P6(&{v_> -=T)g^|qg+A4%KVbrgT4LENGxocm+jVSgKgUq+d@s}clU?|9)B9}Z6{p-_%e!tUcY@Q3(_PW -ijSJ(Z1YaK=*9E5N;gbzcw7sCAz9)xh{!_o(N7)(N_d}zZp3ZYqtQK&Qul}4e`C{!ASN~2I|6e^8ErO -_~iaR_AyL$#3#p$=iFH}drg<_F9sbBp;QbDQ~5&1S1v=WV{;VSdbf!0a-2m_6nvOy4ZuDc>gFBi|t39 -p4(?7vB`$krDG#<|F2q`5E(b<`>LE=40j&^O$+UJY{~#{EB(T{F?a<^9l1?=2PZ(%yZ`V%xBCC=5yu` -%paLAm_IRpX8yu_=^yng4qh|gFel7knf@I4L*!48KR*8K_=9uFoHA49Z_MAB8FR+;Z`Yi;VE)1MuUEn -JujP{YC-aJV&Aeg$#r&K35A$E<+x0teuzqKk=3v;zB*J8X$u1@jG1&iP0xUpBQ~4`bhMV=p)fbqK`x$i9Qm2B>G77k?14QN1 -~5JABjE^eG>FZ&?iBk1bq_pNzf-jp9Fmp^hwYsL7xPD67)&XCqbVCeH8jA^ik-e&_|(y_`e^jg=%dj`qmM=(jXoNEH2P@t(deVmN28BMAB{d5eF%LBeF%LBeF%LBeF%LB -eF%LBeF%LBeF%LBeF%LBeGK{-^fBmT(8r*UK_7!Y27L_r81ymdW6;N-k3k=UKF0ZU>VL0K_ya^#|Mxa -FzvaT$hySulmT9Kjx4%vQ15ir=0u%!j0000803{TdPMH5nbQb^s02KfL01p5F00000000000HlEc000 -1RX>c!JUukY>bYEXCaCuNm0Rj{Q6aWAK2mmD%m`-N@Pvb`c003_S000jF0000000000005+cL;wH)aA -|NaUteuuX>MO%E^v8JO928D0~7!N00;mj6qru3qg%Na1pojx3jhEa00000000000001_fw%zx0B~t=F -JEbHbY*gGVQep7UukY>bYEXCaCuNm0Rj{Q6aWAK2mmD%m`+Sf-XSFk007_|000^Q0000000000005+c -1qT2CaA|NaUukZ1WpZv|Y%gMUX>4R)Wo~vZaCuNm0Rj{Q6aWAK2mmD%m`V>WaCuNm0Rj{Q6aWAK2mmD%m` -=ssY!O8#002vg000>P0000000000005+c8z}$)aA|NaUukZ1WpZv|Y%gSQcW!KNVPr0Fc~DCM0u%!j0 -000803{TdPCc!JX>N37a&BR4FJ*XRWpH$9Z*Frg -aCuNm0Rj{Q6aWAK2mmD%m`?vr(~s&d005Gt000&M0000000000005+cw_E@KaA|NaUukZ1WpZv|Y%gh -UWMz0RaCuNm0Rj{Q6aWAK2mmD%m`)#5(^qZ^000yl000^Q0000000000005+c)r$ZCaA|NaUukZ1WpZ -v|Y%gqYV_|e@Z*FrgaCuNm0Rj{Q6aWAK2mmD%m`?PpF}N2H002lc000{R0000000000005+cdzJtIaA -|NaUukZ1WpZv|Y%g$Sa5OSCbYW+6E^v8JO928D0~7!N00;mj6qrsy2IMbE3;+NmDgXc)00000000000 -001_fy<@<0B~t=FJEbHbY*gGVQepOd2n)XYGq?|E^v8JO928D0~7!N00;mj6qrsZoE7Oa5dZ)fI{*L} -00000000000001_flRXi0B~t=FJEbHbY*gGVQepQWpi(Ac4aPbc~DCM0u%!j0000803{TdPKD;r=fp1 -n0Ogc!JX>N37a&BR4FL!8VWo#~Rc~DCM0u%!j0000803{TdPR@ -7gG-v<-0E7Sl0384T00000000000HlGf^Z)>GX>c!JX>N37a&BR4FJo+JFJE72ZfSI1UoLQYP)h*<6a -y3h000O8B@~!W@a4dpS_c3C!xsPmBLDyZ0000000000q=8WN003}la4%nJZggdGZeeUMV{Bc!J -X>N37a&BR4FJo+JFJfVHWnW`&ZEaz0WG--dP)h*<6ay3h000O8B@~!W;z+Y?y%_)i1zi9D9{>OV0000 -000000q=8Qh0RV7ma4%nJZggdGZeeUMV{B@0%X>c!JX>N37a&BR4FJo+JFKuCIZeMU=a&u*JE^v8JO928D0~ -7!N00;mj6qrsvlkVAv3jhG3Bme*#00000000000001_fg&ma0B~t=FJEbHbY*gGVQepBY-ulWVRCb2a -xQRrP)h*<6ay3h000O8B@~!W+pKr?eE?y-E^v8JO928D0~7!N00;mj6qrtZx0!e20RRA&1po -ja00000000000001_fvhV>WaCuNm0Rj{Q6aWAK2mmD%m`)kL=AZ5e002}U001Wd0000000000005+c<39laaA|NaUukZ1WpZv| -Y%gPPZEaz0WOFZLZ*FF3XLWL6bZKvHE^v8JO928D0~7!N00;mj6qruxuqb~01^@ux82|tx000000000 -00001_ffh*t0B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WWN&wFY;R#?E^v8JO928D0~7!N00;mj6qrs%F_c -F$1ONcL3;+Ni00000000000001_fm2Wc0B~t=FJEbHbY*gGVQepBZ*6U1Ze(*WW^!d^dSxzfc~DCM0u -%!j0000803{TdPWghuS=<5u0Fed&03HAU00000000000HlG$Q~>~RX>c!JX>N37a&BR4FJo_QZDDR?b -1!INb7(Gbc~DCM0u%!j0000803{TdPJvxS8Px#*073)+03HAU00000000000HlH3R{;QUX>c!JX>N37 -a&BR4FJo_QZDDR?b1!IRY;Z1cc~DCM0u%!j0000803{TdP9#6m=@bc!JX>N37a&BR4FJo_QZDDR?b1!Lbb97;BY%XwlP)h*<6ay3h000O8B@~!Wg?DcI+6n*wwkH -4p9smFU0000000000q=7(h0RV7ma4%nJZggdGZeeUMV{dJ3VQyq|FKlUZbS`jtP)h*<6ay3h000O8B@ -~!W4*TzM92IC005H<001KZ0000000000005+c-iQGJaA|N -aUukZ1WpZv|Y%gPPZEaz0WOFZdZfS0FbYX04E^v8JO928D0~7!N00;mj6qrt22uDzd2LJ&78vpbYEXCaCuNm0 -Rj{Q6aWAK2mmD%m`>FkRK%14000#P001EX0000000000005+cSd{?)aA|NaUukZ1WpZv|Y%gtZWMyn~ -FJobDWNBn!bY(7Zc~DCM0u%!j0000803{TdP9q~7==A~s0Llme044wc00000000000HlE{mjM89X>c! -JX>N37a&BR4FKusRWo&aVW^ZzBVRT<(Z*FvQZ)`4bc~DCM0u%!j0000803{TdPDbJ@7s>$u03-we038 -4T00000000000HlFrngIZCX>c!JX>N37a&BR4FKusRWo&aVX>Md?crI{xP)h*<6ay3h000O8B@~!W^i -}}3kp%z%uMz+N8~^|S0000000000q=9Li0RV7ma4%nJZggdGZeeUMZEs{{Y;!McX>MySaCuNm0Rj{Q6 -aWAK2mmD%m`(ry0006200000001Na0000000000005+cG@=0jaA|NaUukZ1WpZv|Y%gzcWpZJ3X>V?G -FJE72ZfSI1UoLQYP)h*<6ay3h000O8B@~!We^K*hO9lV{^%DR9ApigX0000000000q=9&%0RV7ma4%n -JZggdGZeeUMZ*XODVRUJ4ZgVeVXk}w-E^v8JO928D0~7!N00;mj6qrtuuuJP7~*9RL6T0000000000q=9C}0RV7ma4%nJZggdGZeeUMa%FKZ -Utei%X>?y-E^v8JO928D0~7!N00;mj6qrt??u(Tt4FCX#EC2u@00000000000001_fq}^Z0B~t=FJEb -HbY*gGVQepQWpOWKZ*FsRa&=>LZ*p@kaCuNm0Rj{Q6aWAK2mmD%m`=CJ9(H>W005FT0012T00000000 -00005+c=hguLaA|NaUukZ1WpZv|Y%g+UaW8UZabIR>Y-KKRc~DCM0u%!j0000803{TdPFd}F5g;c30E -Cc!JX>N37a&BR4FLGsZFLGsZUukZ0bYX04E^v8JO928D0~7!N0 -0;mj6qrugT)mY*2><}J9smFw00000000000001_f%^^u0B~t=FJEbHbY*gGVQepQWpOWZWpQ6~WpplZ -c~DCM0u%!j0000803{TdPLSc!JX>N37a&BR4FLGs -ZFLGsZUvzR|V{2t{E^v8JO928D0~7!N00;mj6qrtLDn=dl7ytl4S^xkd00000000000001_fwCL|0B~ -t=FJEbHbY*gGVQepQWpOWZWpQ71ZfS0FbYX04E^v8JO928D0~7!N00;mj6qrr`00002000000000V00 -000000000001_f#@{?0B~t=FJEbHbY*gGVQepTbZKmJFJE72ZfSI1UoLQYP)h*<6ay3h000O8B@~!W< -93tkC<_1pwj=-m9smFU0000000000q=6?k0swGna4%nJZggdGZeeUMb#!TLb1z|VaAaw6b1rasP)h*< -6ay3h000O8B@~!WhmVcyK@0!@XCVLp9RL6T0000000000q=Ab;0swGna4%nJZggdGZeeUMb#!TLb1!3 -WZE#_9E^v8JO928D0~7!N00;mj6qrsJog%or1ONaC3;+Nk00000000000001_fd@_k0B~t=FJEbHbY* -gGVQepTbZKmJFJxtKa%E#-bZKvHE^v8JO928D0~7!N00;mj6qrtg=M^V00ssKQ1ONaZ000000000000 -01_fdf+l0B~t=FJEbHbY*gGVQepTbZKmJFJ*3HZ)9n1XD)DgP)h*<6ay3h000O8B@~!WLO=oM%mDxZ- -U9#tApigX0000000000q=9i&0swGna4%nJZggdGZeeUMb#!TLb1!CTY-MwKb97~GE^v8JO928D0~7!N -00;mj6qrs`wKH691polj3;+Ne00000000000001_fqYj20B~t=FJEbHbY*gGVQepTbZKmJFK29NVq-3 -Fc~DCM0u%!j0000803{TdPP*~=1bX>c!JX>N37a&BR4FLi -WjY;!MYVRL9@b1rasP)h*<6ay3h000O8B@~!W{Yh&&H4Oj&mn{GQ9smFU0000000000q=A=W0swGna4 -%nJZggdGZeeUMb#!TLb1!UfXJ=_{XD)DgP)h*<6ay3h000O8B@~!Wm1T=>NhSaQvVH&n8vpc!JX>N37a&BR4FLiWjY;!MdZ)9a`b1rasP)h*<6ay3h000O8B@~! -WkubPZ_y+(0>=pn39{>OV0000000000q=E340swGna4%nJZggdGZeeUMb#!TLb1!dobYx+4Wn?aJc~D -CM0u%!j0000803{TdPHw<{yS)Pd0JjPN03ZMW00000000000HlE>paKAJX>c!JX>N37a&BR4FLiWjY; -!MgVPk7yXK8L{E^v8JO928D0~7!N00;mj6qrsHqVh_+0000M0RR9e00000000000001_fgq#;0B~t=F -JEbHbY*gGVQepTbZKmJFLPydb#QcVZ)|g4Vs&Y3WG--dP)h*<6ay3h000O8B@~!W5!tnt=LP@(+Y|r* -9{>OV0000000000q=6u%0swGna4%nJZggdGZeeUMb#!TLb1!sdZE#;?X>u-bc~DCM0u%!j0000803{T -dP8$Or4_*QQ0A&OK0384T00000000000HlFLtO5XVX>c!JX>N37a&BR4FLiWjY;!Mkd2nfNXD)DgP)h -*<6ay3h000O8B@~!WH3&C`j1T|-^fdqg82|tP0000000000q=DV80swGna4%nJZggdGZeeUMb#!TLb1 -!viE^v8JO928D0~7!N00;mj6qrsc7of>T6aWAPO8@{J00000000000001_fuO$v0B~t=FJEbHbY*gGV -QepUV{bYEXCaCuNm0Rj{Q6aWAK2mmD%m`)JBSdf$i005s1000{R0000000000005+cA=Cl@ -aA|NaUukZ1WpZv|Y%g|Wb1!0HdSPL5E^v8JO928D0~7!N00;mj6qruy$E*9H4*&q5G5`P=000000000 -00001_f$rD>0B~t=FJEbHbY*gGVQepUV{=}dc~DCM0u%!j0000803{TdPE9@4;ZpVe03H -AU00000000000HlG%=mG$6X>c!JX>N37a&BR4FLq;dFKuOVV|8+AVQemNc~DCM0u%!j0000803{TdPU -nrvePap$0Oub703QGV00000000000HlFb?E(OBX>c!JX>N37a&BR4FLq;dFLQNbc4cyNX>V>WaCuNm0 -Rj{Q6aWAK2mmD%m`?Rsje!{k001r$000*N0000000000005+c^!EY)aA|NaUv_0~WN&gWUtei%X>?y- -E^v8JO928D0~7!N00;mj6qrumUj{Tl5&!_>UjP6W00000000000001_fkOTQ0B~t=FJE?LZe(wAFJW+ -SWNC79E^v8JO928D0~7!N00;mj6qruxZmG*9CjbERr~m*J00000000000001_fwm9>0B~t=FJE?LZe( -wAFJx(RbaHPlaCuNm0Rj{Q6aWAK2mmD%m`*N@iz0qI008Va0RR{P0000000000005+c4mbkeg=WO8M5b1rasP)h*<6ay3h000O8B@~!WFobuJ|K7ytkO0000000000q=CY70 -|0Poa4%nWWo~3|axZXsaA9(DX>MmOaCuNm0Rj{Q6aWAK2mmG&m`)*kyb8|=008tR000*N0000000000 -005+c_gVx1aA|NaUv_0~WN&gWa%FUKd1-EEE^v8JO928D0~7!N00;mk6qrtEzg*Go9smHuegFUx0000 -0000000001_f%{|x0B~t=FJE?LZe(wAFLP;lE^v8JO928D0~7!N00;mj6qrtk0whkX0000k0RR9b000 -00000000001_ffZgg^QY%gD5X>MtBUtcb8c~DCM0u%!j0000803 -{TdPD-13rvd^101pKK03ZMW00000000000HlEjg#-X_X>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eUt?`#E -^v8JO928D0~7!N00;mj6qrtU7M&J|1pom55&!@r00000000000001_fk%e~0B~t=FJE?LZe(wAFJob2 -Xk}w>Zgg^QY%gJCVQ_S1axQRrP)h*<6ay3h000O8B@~!W#$vopG64VpB?ABeApigX0000000000q=68 -P1ORYpa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7PVPj}zE^v8JO928D0~7!N00;mj6qrthmShtW0RRBE0ss -Ia00000000000001_fq{+$0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gPPZE#_9E^v8JO928D0~7!N00 -;mj6qruhwv5__4*&pyH2?r600000000000001_fzyu!0B~t=FJE?LZe(wAFJob2Xk}w>Zgg^QY%gPPZ -gg^QY;0w6E^v8JO928D0~7!N00;mj6qru)(f%6x0{{T!2><{m00000000000001_ft{ZO0B~t=FJE?L -Ze(wAFJob2Xk}w>Zgg^QY%gYMY-M+HVQ_F|axQRrP)h*<6ay3h000O8B@~!WlqGFmuLS@A<_`b>CIA2 -c0000000000q=DR{1ORYpa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7UWp#3Cb98BAb1rasP)h*<6ay3h000 -O8B@~!WxKRxc*$4mtDjNU*B>(^b0000000000q=C<=1ORYpa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7fWp -Zg@Y-xIBE^v8JO928D0~7!N00;mj6qrsFuAyD$0001=0ssIb00000000000001_f$Opa0B~t=FJE?LZ -e(wAFJob2Xk}w>Zgg^QY%h0mVQ_F|axQRrP)h*<6ay3h000O8B@~!W8NawNHvj+tRsaA1D*ylh00000 -00000q=6H(1ORYpa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7PVPj}zb1z?CX>MtBUtcb8c~DCM0u%!j0000 -803{TdPV&hS!4U=k08tPC04)Fj00000000000HlGFv;+WfX>c!Jc4cm4Z*nhVVPj}zV{dMBa&K%eV_{ -=xWpgiPX>4U*V_{=xWiD`eP)h*<6ay3h000O8B@~!WsK-IyX8`~JSOWk6E&u=k0000000000q=E0c1O -RYpa4%nWWo~3|axY_HV`yb#Z*FvQZ)`7PVPj}zb1!mbWNC9>V_{=xWiD`eP)h*<6ay3h000O8B@~!W5 -m;ebHUIzsGynhq9{>OV0000000000q=BNm1ORYpa4%nWWo~3|axY_La&&2CX)j-2X>MtBUtcb8c~DCM -0u%!j0000803{TdP6_W6?=t`Z05t#r03QGV00000000000HlExy#xSoX>c!Jc4cm4Z*nhVWpZ?BW@#^ -9Uu|J&ZeL$6aCuNm0Rj{Q6aWAK2mmD%m`?o{2Bzp%0sv-L1OOfY0000000000005+cg}np-aA|NaUv_ -0~WN&gWV`Xx5X=Z6JV_{=ua&#_mWo=MP0Rj{Q6aWAK2mmD%m`>kP>w}sA007zm000{R000000000000 -5+csT2nQaA|NaUv_0~WN&gWV`Xx5X=Z6JV{dY0E^v8JO928D0~7!N00;mj6qru%&ks}N0ssIP1^@sb0 -0000000000001_fqWGQ0B~t=FJE?LZe(wAFJow7a%5$6FJE72ZfSI1UoLQYP)h*<6ay3h000O8B@~!W -IlqJu?>PVf7J2{x9{>OV0000000000q=B6n2LNzsa4%nWWo~3|axY_OVRB?;bT49QXEkPWWpOTWc~DC -M0u%!j0000803{TdPRr+KW;_D`0Nn-v03iSX00000000000HlG*QU?HVX>c!Jc4cm4Z*nhVXkl_>Wpp -oMX=gQXa&KZ~axQRrP)h*<6ay3h000O8B@~!W;8`d=JqZ8+!z2IzCjbBd0000000000q=7_M2LNzsa4 -%nWWo~3|axY_OVRB?;bT4CQVRB??b98cPVs&(BZ*DGdc~DCM0u%!j0000803{TdPKjA0h;jq~0Lu;l0 -4V?f00000000000HlG&Uk3niX>c!Jc4cm4Z*nhVXkl_>WppoNXkl`5Wprn9Z*_2Ra&KZ~axQRrP)h*< -6ay3h000O8B@~!W;Fn=qzXt#S_7eaABme*a0000000000q=A2A2LNzsa4%nWWo~3|axY_OVRB?;bT4C -QVRCb2bZ~NSVr6nJaCuNm0Rj{Q6aWAK2mmD%m`+^#H%O!f000IK001cf0000000000005+cfNTcZfA3JVRU6}VPj}%Ze=cTc~DCM0u%!j0000803{TdPJD*tWk~`60B -!^T0384T00000000000HlFyat8o#X>c!Jc4cm4Z*nhVXkl_>WppoNZ*6d4bS`jtP)h*<6ay3h000O8B -@~!Wy+WEXXafKMKL-E+A^-pY0000000000q=D~r2LNzsa4%nWWo~3|axY_OVRB?;bT4CYIW#$Na&KZ~ -axQRrP)h*<6ay3h000O8B@~!WLgTaCuNm0Rj{Q6aWAK2mmD%m`)%!#Ly}Q0 -05;9001HY0000000000005+cQilfsaA|NaUv_0~WN&gWV`yP=WMy008PV001BW0000000000005+cyo?6`aA|NaUv_0~WN&gWV`yP=WMyc!Jc4c -m4Z*nhVXkl_>WppoRVlp!^GH`NlVr6nJaCuNm0Rj{Q6aWAK2mmD%m`)8T)3TWo000g)001KZ0000000 -000005+c)e#5)aA|NaUv_0~WN&gWV`yP=WMypj00000000000001_fv+S80B~t=FJE?LZe(wAFJow7a%5$6FKTIXW^!e5E^v8JO928D -0~7!N00;mj6qrs1c_nI26953aOaK5K00000000000001_fdEwq0B~t=FJE?LZe(wAFJow7a%5$6FKTd -OZghAqaCuNm0Rj{Q6aWAK2mmD%m`?C$$;u!L001X4001cf0000000000005+ciD(D_aA|NaUv_0~WN& -gWV`yP=WMyc!Jc4cm4Z*nhVXkl_>WppoWVQyz*d2(rNY-wX{Z)9a`E^v8JO928D0~7!N0 -0;mj6qru_yRRu~2><|)F#rH100000000000001_fjEE&0B~t=FJE?LZe(wAFJow7a%5$6FKl6MXJ>L{ -WovD3WMynFaCuNm0Rj{Q6aWAK2mmD%m`;yotr)!t002=e001Tc0000000000005+c<%tLYaA|NaUv_0 -~WN&gWV`yP=WMyc!Jc4cm4Z*nhVXkl_>WppoWVQy!1X -klq>Z)9a`E^v8JO928D0~7!N00;mj6qru6GQ(uZ3IG6JD*yl|00000000000001_fi|iL0B~t=FJE?L -Ze(wAFJow7a%5$6FKl6MXLNOPYiV<6ZEs{{Y%XwlP)h*<6ay3h000O8B@~!WAWpXZXc~DCM0u%!j0000803{ -TdPBwKIP2B_l096eD044wc00000000000HlE%ya)hrX>c!Jc4cm4Z*nhVXkl_>WppoXVq<7wa&u*LaB -^>AWpXZXc~DCM0u%!j0000803{TdPOZ}ssB!}U0Ne)v044wc00000000000HlFD!3Y3wX>c!Jc4cm4Z -*nhVXkl_>WppoXVqa&L8TaB^>AWpXZXc~DCM0u%!j0000803{TdPHFbx59JI10EuG&0384T00000 -000000HlHP#0UUzX>c!Jc4cm4Z*nhVXkl_>WppoXVq2mo+ta4%nWWo~3|axY_OVRB?;bT -4yaV{>P6Z*_2Ra&KZ~axQRrP)h*<6ay3h000O8B@~!W){$p2AO!#bz77BYApigX0000000000q=CNP2 -mo+ta4%nWWo~3|axY_OVRB?;bT4yiX>)LLZ(?O~E^v8JO928D0~7!N00;mj6qrtRfJZ%W4FCYeFaQ83 -00000000000001_fgR)s0B~t=FJE?LZe(wAFJow7a%5$6FLiEdc4cyNVQge&bY)|7Z*nehc~DCM0u%! -j0000803{TdPW8XMJw*fn0L}^k03iSX00000000000HlG_@dyBLX>c!Jc4cm4Z*nhVXkl_>WppofbY? -hka&KZ~axQRrP)h*<6ay3h000O8B@~!WN5_!Yxc~qF@&Et;9smFU0000000000q=8rV2mo+ta4%nWWo -~3|axY_OVRB?;bT4*ga&u{KZZ2?nP)h*<6ay3h000O8B@~!WlLpr^0{{R30RR91BLDyZ0000000000q -=8KL2mo+ta4%nWWo~3|axY_OVRB?;bT4CUX)j-2X>MtBUtcb8c~DCM0u%!j0000803{TdPWL9XpP&Q) -0M-fs03`qb00000000000HlGC_Xq%RX>c!Jc4cm4Z*nhVXkl_>WppoNY-ulJXkl_>Wprg@bS`jtP)h* -<6ay3h000O8B@~!WZAzfivH$=8?*IS*AOHXW0000000000q=9q%2mo+ta4%nWWo~3|axY_VY;SU5ZDB -88UukY>bYEXCaCuNm0Rj{Q6aWAK2mmD%m`*+wr(cT$007(x000~S0000000000005+cWBmvKaA|NaUv -_0~WN&gWV{dG4a$#*@FJW$TX)bViP)h*<6ay3h000O8B@~!WBk*i@_ua4%nWWo~3|axY_VY;SU5ZDB8AZgXjLZ+B^KGcqo4c~DCM0u%!j0000803{TdP8)AUa)SZ@ -0DA`j03rYY00000000000HlG^3<&^mX>c!Jc4cm4Z*nhVZ)|UJVQpbAX>MtBX<=+>b7d}Yc~DCM0u%! -j0000803{TdP6!(e5l{sH02~zn0384T00000000000HlGH4+#KpX>c!Jc4cm4Z*nhVZ)|UJVQpbAcWG -`jGA?j=P)h*<6ay3h000O8B@~!WqA1qp?ganOV0000000000q=6t62>@_ua4%nWWo~3|ax -Y_VY;SU5ZDB8WX>N37a&0bfc~DCM0u%!j0000803{TdP8*_L`CI`207U`-03QGV00000000000HlFS8 -wmh#X>c!Jc4cm4Z*nhWX>)XJX<{#5UukY>bYEXCaCuNm0Rj{Q6aWAK2mmD%m`-Ne(&;ZN006w90012T -0000000000005+cc!Jc4cm4Z*nhWX>)XJX<{#AVRT_)VRL0JaCuNm0Rj -{Q6aWAK2mmD%m` -Md?crI{xP)h*<6ay3h000O8B@~!WOp>%zMKb^Zbjkn#9{>OV0000000000q=EH~2>@_ua4%nWWo~3|a -xY|Qb98KJVlQlOV_|e}a&sc!Jc4cm4Z*nhWX>)XJX<{#JVQy(=Wpi{caCuNm0Rj{Q6aWAK2mmD%m`=90h-L!@001Kq0015 -U0000000000005+cAkql{aA|NaUv_0~WN&gWWNCABY-wUIZDDe2WpZ;aaCuNm0Rj{Q6aWAK2mmD%m`? -5gg%biL008Wq0018V0000000000005+cU)Tu%aA|NaUv_0~WN&gWWNCABY-wUIZDn*}WMOn+E^v8JO9 -28D0~7!N00;mj6qrtq-GmaT3jhEPDgXc=00000000000001_fu8*d0B~t=FJE?LZe(wAFJx(RbZlv2F -LGsbZ*_8GWpgfYc~DCM0u%!j0000803{TdPEX#?6S@-s0RBJ#03HAU00000000000HlG02?_vkX>c!J -c4cm4Z*nhWX>)XJX<{#PV{&P5baO6nc~DCM0u%!j0000803{TdPHv@lC#$jm003$M02=@R000000000 -00HlF>9SQ(&X>c!Jc4cm4Z*nhWX>)XJX<{#QGcqn^cx6ya0Rj{Q6aWAK2mmD%m`=6@qPy500000000000001_fl8AL0B~t=FJE?LZe(wAFJx(RbZlv2FLiWjY%XwlP)h*<6ay3h0 -00O8B@~!W_Gl<9P8k3IUt0hG9smFU0000000000q=CQE3jlCwa4%nWWo~3|axY|Qb98KJVlQ@Oa&u{K -ZZ2?nP)h*<6ay3h000O8B@~!WEr?>m)UE&k09*k88vpc -!Jc4cm4Z*nhWX>)XJX<{#THZ(3}cx6ya0Rj{Q6aWAK2mmD%m`=Xn)X%de0079F000~S000000000000 -5+cZ(0oiaA|NaUv_0~WN&gWWNCABY-wUIcW7m0Y%XwlP)h*<6ay3h000O8B@~!WBkyPY!vFvP5&-}JD -F6Tf0000000000q=8(34FGUya4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mUtei%X>?y-E^v8JO928D -0~7!N00;mj6qru0iZ5l(0RRBY0{{Re00000000000001_fo6dX0B~t=FJE?LZe(wAFJx(RbZlv2FJEF -|V{344a&#|kX>(&PaCuNm0Rj{Q6aWAK2mmD%m`>tiJZ*p`mb9r-PZ*FF3XD)DgP)h*<6ay3h000O8B@~!WL_!}!Vp#wH)M)_#C;$Ke000000000 -0q=9q64FGUya4%nWWo~3|axY|Qb98KJVlQ7}VPk7>Z*p`mbYXI4X>4UKaCuNm0Rj{Q6aWAK2mmD%m`* -aR9Nk3%004>v001BW0000000000005+c8ygM)aA|NaUv_0~WN&gWXmo9CHEd~OFJE72ZfSI1UoLQYP) -h*<6ay3h000O8B@~!WbsBC3B@_SvK|ufjApigX0000000000q=B9t4ghdza4%nWWo~3|axZ9fZEQ7cX -<{#5X=q_|Wq56DE^v8JO928D0~7!N00;mj6qrsHH}m9P9{>O-e*gd^00000000000001_fdVoP0B~t= -FJE?LZe(wAFKBdaY&C3YVlQ85Zg6#Ub98cLVQnsOc~DCM0u%!j0000803{TdPQ*rP7QY+-03<5`03rY -Y00000000000HlGUQ4RobX>c!Jc4cm4Z*nhabZu-kY-wUIUvzJ4Wo~JDWpXZXc~DCM0u%!j0000803{ -TdPTF~la}ovs0Iv@K03HAU00000000000HlGTZVmu&X>c!Jc4cm4Z*nhabZu-kY-wUIUv+e8Y;!Jfc~ -DCM0u%!j0000803{TdPSy*C?^8$s06sc!Jc4cm4Z*nhabZu-kY --wUIV{dMAbYX6Eb1rasP)h*<6ay3h000O8B@~!WU)FBu4MYF{v(NzmBLDyZ0000000000q=A9G4ghdz -a4%nWWo~3|axZ9fZEQ7cX<{#EbZu-kaA9(DWpXZXc~DCM0u%!j0000803{TdPOt+FBDoL%0FFHX03rY -Y00000000000HlG>0S^FhX>c!Jc4cm4Z*nhabZu-kY-wUIb7gXAVQgu7WpXZXc~DCM0u%!j0000803{ -TdPVdvN52gSB03iVY044wc00000000000HlG)5)S}yX>c!Jc4cm4Z*nhabZu-kY-wUIUvzS5WiMY}X> -MtBUtcb8c~DCM0u%!j0000803{TdPH2qZRe=Ej0HOl`03!eZ00000000000HlGk6Au7zX>c!Jc4cm4Z -*nhabZu-kY-wUIUvzS5WiMZ1VRL0JaCuNm0Rj{Q6aWAK2mmD%m`)^BovEe)005c<001Na0000000000 -005+cbQKQ(aA|NaUv_0~WN&gWXmo9CHEd~OFJE+WX=N{DVRUk7WiD`eP)h*<6ay3h000O8B@~!WOHXd -j9RdIV?*;$>AOHXW0000000000q=8%)4*+m!a4%nWWo~3|axZ9fZEQ7cX<{#5baH8BFK~G-aCuNm0Rj -{Q6aWAK2mmD%m`(ry0006200000001Ze0000000000005+cw;2xraA|NaUv_0~WN&gWXmo9CHEd~OFJ -@_MbY*gLFJE72ZfSI1UoLQYP)h*<6ay3h000O8B@~!WfUpD*!T|sPmjeI*HUIzs0000000000q=Ek#4 -*+m!a4%nWWo~3|axZ9fZEQ7cX<{#CX>4?5a&s?XY;b5{Vr6t`V_|GzbaZlQVs&(7b1rasP)h*<6ay3h -000O8B@~!WB7pnEl>h($9svLVBme*a0000000000q=6M24*+m!a4%nWWo~3|axZ9fZEQ7cX<{#CX>4? -5a&s?YVRL0JaCuNm0Rj{Q6aWAK2mmD%m`?M+KNl7Q004mt001)p0000000000005+c>>LjOaA|NaUv_ -0~WN&gWXmo9CHEd~OFJ@_MbY*gLFKKRSWn*+-ZDn*}Ut?%ta&u*LE^v8JO928D0~7!N00;mj6qrtu(P -W@(0{{R!4gdfo00000000000001_fm0w40B~t=FJE?LZe(wAFKBdaY&C3YVlQTCY;^X>c!Jc4cm4Z*nhabZu-k -Y-wUIW@&76WpZ;bZ*X*JZ*F01bYW+6E^v8JO928D0~7!N00;mj6qrsx!2wY6761TMtBUtcb8c~DCM0u%!j0000803{TdPEw2!DO3Ug -0J8=F04o3h00000000000HlFfMh^gRX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7VPs)&bY*gLFK1?y-E^v8JO928D0~7!N0 -0;mj6qruL)uOES4gdi2H~;`C00000000000001_fgMo~0B~t=FJE?LZe(wAFKBdaY&C3YVlQ-ZWo2S@ -X>4R=a&s?YVRL0JaCuNm0Rj{Q6aWAK2mmD%m`(`lF8JFA004s`001Ze0000000000005+cT3`A4*+m!a4%nWWo~3|axZ9fZEQ7cX<{#Qa%E*=b!lv5WpZ;bWpr|7WiD`eP) -h*<6ay3h000O8B@~!W8c*uCUkv~NDmMTCF8}}l0000000000q=EKw4*+m!a4%nWWo~3|axZ9fZEQ7cX -<{#Qa%E*=b!lv5WpZ;bWpr|7WnXM~ZEP-Zc~DCM0u%!j0000803{TdPOWC#2$==|08$nJ04x9i00000 -000000HlGUfDZt0X>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7cVTR6WpZ;bUtei%X>?y-E^v8JO928D0~7! -N00;mj6qrsSE!sjC2LJ#x9RL6*00000000000001_frW<;0B~t=FJE?LZe(wAFKBdaY&C3YVlQ-ZWo3 -6^Y-?q5b1!0Hb7d}Yc~DCM0u%!j0000803{TdPGyR3srLZ@0EGnr04D$d00000000000HlH9jt>BEX> -c!Jc4cm4Z*nhabZu-kY-wUIbaG{7cVTR6WpZ;bWN&RQaCuNm0Rj{Q6aWAK2mmD%m`=XM@-6BF0071j0 -01cf0000000000005+c9+3|KaA|NaUv_0~WN&gWXmo9CHEd~OFLZKcWp`n0Yh`kCFJ*LcWo0gKc~DCM -0u%!j0000803{TdPL>UvM`#8B0HqiJ04@Lk00000000000HlFWmJa}MX>c!Jc4cm4Z*nhabZu-kY-wU -IbaG{7cVTR6WpZ;bWpr|7WnXM~ZEP-Zc~DCM0u%!j0000803{TdP7_~k5Xb@m00jvE04e|g00000000 -000HlEfoeuzTX>c!Jc4cm4Z*nhabZu-kY-wUIbaG{7cVTR6WpZ;bXJu}4XlX8Rc~DCM0u%!j0000803 -{TdP5?(-n==3a06G8w02}}S00000000000HlEvpbr3WX>c!Jc4cm4Z*nhbWNu+EUtei%X>?y-E^v8JO -928D0~7!N00;mj6qru)NYv>X0{{Ty3;+Nb00000000000001_fq%008I!000^Q0000000000005+c(W4IlaA|NaUv_0~WN&g -WX=H9;FJo_QaA9;VaCuNm0Rj{Q6aWAK2mmD%m`)X!*;e)n007l3000;O0000000000005+cn4}K?aA| -NaUv_0~WN&gWX=H9;FJo_VWiD`eP)h*<6ay3h000O8B@~!W%rG=tL?QqH!=C^E8~^|S0000000000q= -Ce*4*+m!a4%nWWo~3|axZCQZecHJWNu+(VRT_GaCuNm0Rj{Q6aWAK2mmD%m`=B2^s?px007kn0012T0 -000000000005+cLedWaaA|NaUv_0~WN&gWX=H9;FKKRca$#;~WpgfYc~DCM0u%!j0000803{TdPAHI~ -LKgr402KfL03ZMW00000000000HlFq)eiu0X>c!Jc4cm4Z*nhbWNu+EaA9L>VP|DuWMOn+E^v8JO928 -D0~7!N00;mj6qrr|1KdMz5Z)0m_X>4UKaCuNm0Rj{Q6aWAK2mmD%m`))kynb^7 -000;a001Qb0000000000005+cNq7(daA|NaUv_0~WN&gWY;R+0W@&6?FKugNX>x3DV{2w_0Lm8t03!eZ00000000000HlHcdk_F{X>c!Jc4cm4Z*nheZ)0m_X>4 -ULaA{<0Z)0m_X>4UKaCuNm0Rj{Q6aWAK2mmD%m`=Ne@VyBI004p&001Tc0000000000005+cT7(b)aA -|NaUv_0~WN&gWY;R+0W@&6?FLQBhX>?_5Z)0m_X>4UKaCuNm0Rj{Q6aWAK2mmD%m`;%+3E4dZ001}&0 -01Wd0000000000005+cr-={%aA|NaUv_0~WN&gWY;R+0W@&6?FLQZqY-w(5Y;R+0W@&6?E^v8JO928D -0~7!N00;mj6qruu>Q|wG0ssJw1^@sb00000000000001_fhmm;0B~t=FJE?LZe(wAFKu&YaA9L>FJE7 -2ZfSI1UoLQYP)h*<6ay3h000O8B@~!W9n}zr761SM6aWAK9{>OV0000000000q=Dy;5CCv#a4%nWWo~ -3|axZOjXK-O-YcF4RWpZc!Jc4cm4Z*nhfb7yd2V{0#Ecw=R7bZKvHb1rasP)h*<6ay3h000O8B@~!WTr6(~KN|o5J -B|PV9{>OV0000000000q=DR#5CCv#a4%nWWo~3|axZOjXK-O-YcFPDY;0m-V{0yOc~DCM0u%!j00008 -03{TdPJavm7l;7>0O$e$03rYY00000000000HlFftq=fkX>c!Jc4cm4Z*nhiVPk7yXK8L{FJE6_VsCY -HUtcb8c~DCM0u%!j0000803{TdPGuVrL=*u405Spq03iSX00000000000HlE+uMhxmX>c!Jc4cm4Z*n -hiVPk7yXK8L{FJE72ZfSI1UoLQYP)h*<6ay3h000O8B@~!WW{TS5%>e)aVFLgFAOHXW0000000000q= -9p=5CCv#a4%nWWo~3|axZXUV{2h&X>MmPUt@1=aA9;VaCuNm0Rj{Q6aWAK2mmD%m`-bt9F=kb004*u0 -01Na0000000000005+cezFh%aA|NaUv_0~WN&gWaA9L>VP|P>XD?rKbaHiLbairNb1rasP)h*<6ay3h -000O8B@~!WBJ^Gp^a%g}Dj)y=AOHXW0000000000q=7QD5CCv#a4%nWWo~3|axZXUV{2h&X>MmPZDDe -2WpZ;aaCuNm0Rj{Q6aWAK2mmD%m`)W^p8Vwo003MP001Qb0000000000005+cWWEppaA|NaUv_0~WN& -gWaA9L>VP|P>XD@PPadl~OWo>0{baO6nc~DCM0u%!j0000803{TdPV$IG({C660D^1)03!eZ0000000 -0000HlG8#Sj2+X>c!Jc4cm4Z*nhiVPk7yXK8L{FLQ8ZV`*k-WpZ;aaCuNm0Rj{Q6aWAK2mmD%m`-6mt -(}Jg008g>0015U0000000000005+cJl+rhaA|NaUv_0~WN&gWaA9L>VP|P>XD@YhX>4;YaCuNm0Rj{Q -6aWAK2mmD%m`?FCa_fE#007D^001BW0000000000005+c|KJb+aA|NaUv_0~WN&gWaA9L>VP|P>XD@b -Ta&u{KZZ2?nP)h*<6ay3h000O8B@~!WP5}d;RR910Q~&?~9smFU0000000000q=CEc5CCv#a4%nWWo~ -3|axZXYa5XVEFJE72ZfSI1UoLQYP)h*<6ay3h000O8B@~!W$8flSW(NQOtrq|QApigX0000000000q= -8KD5CCv#a4%nWWo~3|axZXYa5XVEFJEbHUvP47V`X!5E^v8JO928D0~7!N00;mj6qrt_^9=w%1ONbw3 -IG5b00000000000001_f${bb0B~t=FJE?LZe(wAFK}gWH8D3YVs&Y3WG--dP)h*<6ay3h000O8B@~!W -AOZwdbp-$b{T2WK8vpc!Jc4cm4Z*nhiWpFhyH!ovvY;S -UGZ)YxWc~DCM0u%!j0000803{TdPDnn-g7N?W0Cxfa02}}S00000000000HlH52N3{pX>c!Jc4cm4Z* -nhiWpFhyH!ovvZE#_9E^v8JO928D0~7!N00;mj6qruMj+S)K2LJ$r761Sq00000000000001_feHx`0 -B~t=FJE?LZe(wAFK}gWH8D3YWo~w2b!lv5E^v8JO928D0~7!N00;mj6qrsC+V+(O2LJ#V7XSbr00000 -000000001_ffW%E0B~t=FJE?LZe(wAFK}gWH8D3YcXDBHaAk6HE^v8JO928D0~7!N00;mj6qrsgq{LK -4a{vH_r2zmX00000000000001_fmaw20B~t=FJE?LZe(wAFK}yTUvg!0Z*_8GWpgiIUukY>bYEXCaCu -Nm0Rj{Q6aWAK2mmD%m`-6N1J+9c001%q001Wd0000000000005+c;ENFeaA|NaUv_0~WN&gWaBF8@a% -FRGb#h~6b1!gtGcjXtZE#_9E^v8JO928D0~7!N00;mj6qrszX%kCq1^@v05&!@o00000000000001_f -pCox0B~t=FJE?LZe(wAFK}{iXL4n8b1z?CX>MtBUtcb8c~DCM0u%!j0000803{TdPM6HJxTXXE0456n -02=@R00000000000HlE$lo0@MX>c!Jc4cm4Z*nhia&KpHWpi^cVqtPFaCuNm0Rj{Q6aWAK2mmD%m`-@ -$xqFa%FRKFJo_YZggdGE^v8JO92 -8D0~7!N00;mj6qrsg;N7|k0{{SI1poja00000000000001_fhU|10B~t=FJE?LZe(wAFK}{iXL4n8b1 -!pnX>M+1axQRrP)h*<6ay3h000O8B@~!Wc*ke+Q~&?~e*gdg9smFU0000000000q=9aq5dd&$a4%nWW -o~3|axZXsbZ>2JFJE72ZfSI1UoLQYP)h*<6ay3h000O8B@~!WOgs63z5oCK{Q&>~8UO$Q0000000000 -q=EjQ5dd&$a4%nWWo~3|axZXsbZ>2JFJo_VWiD`eP)h*<6ay3h000O8B@~!WZ%4f&=m`J-Rww`f8~^| -S0000000000q=EFH5dd&$a4%nWWo~3|axZXsbZ>2JFK}UUb7gWaaCuNm0Rj{Q6aWAK2mmD%m`<$$+<$ -KY008|1000^Q0000000000005+c7ON2eaA|NaUv_0~WN&gWaCvlZZEP=eWpi{caCuNm0Rj{Q6aWAK2m -mD%m`>srbc!Jc4cm -4Z*nhkWpQ<7b98erUtei%X>?y-E^v8JO928D0~7!N00;mj6qrunt*Tf50002A0RR9a0000000000000 -1_ft0!t0B~t=FJE?LZe(wAFLGsZb!BsOb1z?Cc4cyNX>V>{UoLQYP)h*<6ay3h000O8B@~!Wh^aZd6a -oMMNCW@?CjbBd0000000000q=D4C5dd&$a4%nWWo~3|axZdaadl;LbaO9XX>N37a&BR4Uv+e8Y;!Jfc -~DCM0u%!j00008045ZePMkR|M2r*w04!7h03ZMW00000000000HlE}z7YU$X>c!Jc4cm4Z*nhkWpQ<7 -b98erVPs)&bY*gLE^v8JO928D0~7!N00;mk6qrr`5iTeQ1^@tU7ytkp00000000000001_f%no80B~t -=FJE?LZe(wAFLGsZb!BsOb1z|VX)bViP)h*<6ay3h000O8CKQ-XHt20c!Jc4cm4Z*nhkWpQ<7b98erV{dJ6VRSBVc~DCM -0u%!j00008045ZePQ51=I=~YE0RBe+03QGV00000000000HlFa=@9^MX>c!Jc4cm4Z*nhkWpQ<7b98e -rV{dP3X=QURaCuNm0Rj{Q6aWAK2mmG&m`=I4Y;ijT004aq001HY0000000000005+cQ2h}AaA|NaUv_ -0~WN&gWa%FLKWpi|MFJ*XRWpH$9Z*FrgaCuNm0Rj{Q6aWAK2mmG&m`<%dNAF4m008<8000~S0000000 -000005+c%K;JqaA|NaUv_0~WN&gWa%FLKWpi|MFKA_Ka4v9pP)h*<6ay3h000O8CKQ-X8%lHGc>w?b^ -#T9@9RL6T0000000000q=8Qc5&&>%a4%nWWo~3|axZdaadl;LbaO9gZ*OaJE^v8JO928D0~7!N00;mk -6qruaHj0)xCIA5Ag#Z8^00000000000001_fddE<0B~t=FJE?LZe(wAFLGsZb!BsOb1!XgWMyn~E^v8 -JO928D0~7!N00;mk6qrsDJl=t80RRBE0ssIY00000000000001_fp{(w0B~t=FJE?LZe(wAFLGsZb!B -sOb1!gVV{2h&WpgfYc~DCM0u%!j00008045ZePCw>@*h3%y0F-h703ZMW00000000000HlE-FcJW8X> -c!Jc4cm4Z*nhkWpQ<7b98erb7gaLX>V?GE^v8JO928D0~7!N00;mk6qrs*x@LBL1^@sd5C8xq000000 -00000001_fuc|n0B~t=FJE?LZe(wAFLGsZb!BsOb1!prVRUtKUt@1%WpgfYc~DCM0u%!j00008045Ze -PU(v|d36K;0Hq5603rYY00000000000HlFoR}uhlX>c!Jc4cm4Z*nhkWpQ<7b98erb98cbV{~c!Jc4cm4Z*nhkWpQ -<7b98erb#!TLb1rasP)h*<6ay3h000O8CKQ-Xk&FXPJOls$q6z>29{>OV0000000000q=ATm5&&>%a4 -%nWWo~3|axZmqY;0*_GcR9XX>MtBUtcb8c~DCM0u%!j00008045ZeP89bFCi@Hk0QxBa03!eZ000000 -00000HlEdh7tg9X>c!Jc4cm4Z*nhna%^mAVlyvaV{dG1Wn*+{Z*FrgaCuNm0Rj{Q6aWAK2mmG&m`)(m -1?V{u000j*001EX0000000000005+cJ(CguaA|NaUv_0~WN&gWb#iQMX<{=kV{dM5Wn*+{Z*DGdc~DC -M0u%!j00008045ZePOvU|YfB~o02zq@03`qb00000000000HlGnq!IvdX>c!Jc4cm4Z*nhna%^mAVly -veZ*Fd7V{~b6Zg6jJY%XwlP)h*<6ay3h000O8CKQ-Xz0_N$fCvBp%ozXxApigX0000000000q=7@r5& -&>%a4%nWWo~3|axZmqY;0*_GcRR$V`Xr3X>V?GE^v8JO928D0~7!N00;mk6qrtf^}-G;2LJ#!7XSbq0 -0000000000001_fdbSL0B~t=FJE?LZe(wAFLiQkY-wUMFJ@_FY-DpTaCuNm0Rj{Q6aWAK2mmG&m`)^C -wJClB004vu0018V0000000000005+cY1z?E00000000000001_fh6A&0B~t=FJE?LZe(wAFLiQkY-wUMFK} -;fY;9p~VP|D>E^v8JO928D0~7!N00;mk6qru@=-vpN2LJ$P7XSbr00000000000001_fzR?10B~t=FJ -E?LZe(wAFLiQkY-wUMFLGsZb!BsOE^v8JO928D0~7!N00;mk6qruQ`1mF`8vppk00000000000 -001_fv5Ts0B~t=FJE?LZe(wAFLiQkY-wUMFLGsbaBpsNWiD`eP)h*<6ay3h000O8CKQ-X000000ssI2 -00000CjbBd0000000000q=6h3698~&a4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQ7`X>MtBUtcb8c~DC -M0u%!j00008045ZePVO(B=Mn(`0L=mb05Jdn00000000000HlFq783w)X>c!Jc4cm4Z*nhna%^mAVly -veZ*FvQX<{#5VQ_F|Zf9w3WnX1(c4=~NZZ2?nP)h*<6ay3h000O8CKQ-X1b1H%a0~zdx+(wwC;$Ke00 -00000000q=Cd2698~&a4%nWWo~3|axZmqY;0*_GcRLrZgg^KVlQEEaAj_1X>MgMaCuNm0Rj{Q6aWAK2 -mmG&m`;RB)A_9h003(d001Wd0000000000005+cdL$D7aA|NaUv_0~WN&gWb#iQMX<{=kV{dMBa%o~O -ZggyIaBpvHE^v8JO928D0~7!N00;mk6qrsU6!e&@6953uJpceG00000000000001_fov)h0B~t=FJE? -LZe(wAFLiQkY-wUMFJo_RbaH88FK~HpaAj_Db8Iefc~DCM0u%!j00008045ZePNfXg=>H!80A+Rn04@ -Lk00000000000HlFkJ`(_NX>c!Jc4cm4Z*nhna%^mAVlyveZ*FvQX<{#PWn*=6Wpr|3ZgX&Na&#_mc~ -DCM0u%!j00008045ZePN@W-uzd#r0QVRG03-ka00000000000HlGaUK0RtX>c!Jc4cm4Z*nhna%^mAV -lyveZ*FvQX<{#PZ)0n7E^v8JO928D0~7!N00;mk6qrr`00002000000000u00000000000001_foEnD -0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FJE(IV|8+6baG*Cb8v5RbT40DX>MtBUtcb8c~DCM0u%! -j00008045ZePPbW$eOC_v0GLDo05|{u00000000000HlGxW)lE#X>c!Jc4cm4Z*nhna%^mAVlyveZ*F -vQX<{#5b7f<7a%FUKVQzD9Z*p`mVrgzMn8E^v8JO928D0~7!N00;mk6qrteb4!hL4*&pyF8}~J00 -000000000001_foygY0B~t=FJE?LZe(wAFLiQkY-wUMFJo_RbaH88FJE(IV|8+6baG*Cb8v5RbT4dgc -VBE}c4cfXaCuNm0Rj{Q6aWAK2mmG&m`;yfpnOmO003VP|D?FJE72ZfSI1UoLQYP)h*<6ay3h000O8CKQ-XnOIF)NF4wGl63$8BLDy -Z0000000000q=C$a698~&a4%nWWo~3|axZmqY;0*_GcRyqV{2h&WpgicX?QMhc~DCM0u%!j00008045 -ZeP5=M^00IC20000005Sjo00000000000HlFcq!R#eX>c!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQVq -s%zaBp&Sb1z?CX>MtBUtcb8c~DCM0u%!j00008045ZePO^IqgH8ef0I&rB05Sjo00000000000HlGZq -!R#eX>c!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvCQVqs%zaBp&Sb1!XSYh`9>Y-KKRc~DCM0u%!j00008 -045ZePWx@jc!Jc4cm4Z*nhna%^mAVlyvrVPk7yXJvC -Qb8~E8ZDDj{XkTb=b98QDZDlWCUukY>bYEXCaCuNm0Rj{Q6aWAK2mmG&m`VP|D?FLQHjUu|J@V`yJ!Z*z2RVQpnEUu -kV{Y-Md_ZggREX>V>WaCuNm0Rj{Q6aWAK2mmG&m`+l4;lHE-000yO001Na0000000000005+c@UasBa -A|NaUv_0~WN&gWb#iQMX<{=kb#!TLFJE72ZfSI1UoLQYP)h*<6ay3h000O8CKQ-X*VSNXF$Vwu9})ln -CIA2c0000000000q=DA6698~&a4%nWWo~3|axZmqY;0*_GcR>?X>2cJZ*Fd7V{~b6ZZ2?nP)h*<6ay3 -h000O8CKQ-X^elTY`~Uy|@c{q;ApigX0000000000q=8Gj698~&a4%nWWo~3|axZmqY;0*_GcR>?X>2 -cXb!ByBE^v8JO928D0~7!N00;mk6qrsyVUX7W1pokf4gdfn00000000000001_frh*j0B~t=FJE?LZe -(wAFLiQkY-wUMFLiWjY%g+Uadl;LbS`jtP)h*<6ay3h000O8CKQ-X);no&Gz0(u8VUdaBme*a000000 -0000q=Cr6698~&a4%nWWo~3|axZmqY;0*_GcR>?X>2cYWpi+EZgXWWaCuNm0Rj{Q6aWAK2mmG&m`)&1 -M2+te0003y001EX0000000000005+cKE@LOaA|NaUv_0~WN&gWb#iQMX<{=kb#!TLFLGsca(OOrc~DC -M0u%!j00008045ZePV^x-v;GkP0CY0|03ZMW00000000000HlFz*b@M7X>c!Jc4cm4Z*nhna%^mAVly -vwbZKlab8~E8E^v8JO928D0~7!N00;mk6qrs`QqCZA3jhEeCIA2<00000000000001_fvD;e0B~t=FJ -E?LZe(wAFLiQkY-wUMFLiWjY%g?aZDntDbS`jtP)h*<6ay3h000O8CKQ-X!yauB3<&@LR~Y~R9{>OV0 -000000000q=8)a698~&a4%nWWo~3|axZmqY;0*_GcR>?X>2cba%?Vec~DCM0u%!j00008045ZePHv~R -aJ~ls02>tm03ZMW00000000000HlGX{}TXkX>c!Jc4cm4Z*nhna%^mAVlyvwbZKlacVTICE^v8JO928 -D0~7!N00;mk6qrtU&>wL!3jhF9DF6T@00000000000001_fuRQ!0B~t=FJE?LZe(wAFLz~PWo~0{WNB -_^b1z?CX>MtBUtcb8c~DCM0u%!j00008045ZePRFeXiv -c!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZY++($Y;!Jfc~DCM0u%!j00008045ZePEda_A4CEG02u`U03-ka0 -0000000000HlFh8596;X>c!Jc4cm4Z*nhpWnyJ+V{c?>ZfA2ZZEI{{Vr6V|E^v8JO928D0~7!N00;mk -6qrtDIB=)A1pok}82|tw00000000000001_f#4ey0B~t=FJE?LZe(wAFLz~PWo~0{WNB_^b1!sdb98e -qaCuNm0Rj{Q6aWAK2mmG&m`>XU{MMxe007ev001fg0000000000005+c*dY`EaA|NaUv_0~WN&gWcV% -K_Zewp`X>Mn8FL+;db7gX0WMyV)Ze?UHaCuNm1qJ{B001)qGXYg!006}%6aWAK -""" - - -if __name__ == "__main__": - main() diff --git a/data/test.py b/data/test.py deleted file mode 100644 index 3b316dc1e8d1..000000000000 --- a/data/test.py +++ /dev/null @@ -1,2 +0,0 @@ -#%% -print('hello') diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000000..8e1aa990a2c2 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,393 @@ +/** + * ESLint Configuration for VS Code Python Extension + * This file configures linting rules for the TypeScript/JavaScript codebase. + * It uses the new flat config format introduced in ESLint 8.21.0 + */ + +// Import essential ESLint plugins and configurations +import tseslint from '@typescript-eslint/eslint-plugin'; +import tsParser from '@typescript-eslint/parser'; +import noOnlyTests from 'eslint-plugin-no-only-tests'; +import prettier from 'eslint-config-prettier'; +import importPlugin from 'eslint-plugin-import'; +import js from '@eslint/js'; +import noBadGdprCommentPlugin from './.eslintplugin/no-bad-gdpr-comment.js'; // Ensure the path is correct + +export default [ + { + ignores: ['**/node_modules/**', '**/out/**'], + }, + // Base configuration for all files + { + ignores: [ + '**/node_modules/**', + '**/out/**', + 'src/test/analysisEngineTest.ts', + 'src/test/ciConstants.ts', + 'src/test/common.ts', + 'src/test/constants.ts', + 'src/test/core.ts', + 'src/test/extension-version.functional.test.ts', + 'src/test/fixtures.ts', + 'src/test/index.ts', + 'src/test/initialize.ts', + 'src/test/mockClasses.ts', + 'src/test/performanceTest.ts', + 'src/test/proc.ts', + 'src/test/smokeTest.ts', + 'src/test/standardTest.ts', + 'src/test/startupTelemetry.unit.test.ts', + 'src/test/testBootstrap.ts', + 'src/test/testLogger.ts', + 'src/test/testRunner.ts', + 'src/test/textUtils.ts', + 'src/test/unittests.ts', + 'src/test/vscode-mock.ts', + 'src/test/interpreters/mocks.ts', + 'src/test/interpreters/virtualEnvs/condaInheritEnvPrompt.unit.test.ts', + 'src/test/interpreters/pythonPathUpdaterFactory.unit.test.ts', + 'src/test/interpreters/activation/service.unit.test.ts', + 'src/test/interpreters/helpers.unit.test.ts', + 'src/test/interpreters/display.unit.test.ts', + 'src/test/terminals/codeExecution/terminalCodeExec.unit.test.ts', + 'src/test/terminals/codeExecution/codeExecutionManager.unit.test.ts', + 'src/test/terminals/codeExecution/djangoShellCodeExect.unit.test.ts', + 'src/test/activation/activeResource.unit.test.ts', + 'src/test/activation/extensionSurvey.unit.test.ts', + 'src/test/utils/fs.ts', + 'src/test/api.functional.test.ts', + 'src/test/testing/common/debugLauncher.unit.test.ts', + 'src/test/testing/common/services/configSettingService.unit.test.ts', + 'src/test/common/exitCIAfterTestReporter.ts', + 'src/test/common/terminals/activator/index.unit.test.ts', + 'src/test/common/terminals/activator/base.unit.test.ts', + 'src/test/common/terminals/shellDetector.unit.test.ts', + 'src/test/common/terminals/service.unit.test.ts', + 'src/test/common/terminals/helper.unit.test.ts', + 'src/test/common/terminals/activation.unit.test.ts', + 'src/test/common/terminals/shellDetectors/shellDetectors.unit.test.ts', + 'src/test/common/terminals/environmentActivationProviders/terminalActivation.testvirtualenvs.ts', + 'src/test/common/socketStream.test.ts', + 'src/test/common/configSettings.test.ts', + 'src/test/common/experiments/telemetry.unit.test.ts', + 'src/test/common/platform/filesystem.unit.test.ts', + 'src/test/common/platform/errors.unit.test.ts', + 'src/test/common/platform/utils.ts', + 'src/test/common/platform/fs-temp.unit.test.ts', + 'src/test/common/platform/fs-temp.functional.test.ts', + 'src/test/common/platform/filesystem.functional.test.ts', + 'src/test/common/platform/filesystem.test.ts', + 'src/test/common/utils/cacheUtils.unit.test.ts', + 'src/test/common/utils/decorators.unit.test.ts', + 'src/test/common/utils/version.unit.test.ts', + 'src/test/common/configSettings/configSettings.unit.test.ts', + 'src/test/common/serviceRegistry.unit.test.ts', + 'src/test/common/extensions.unit.test.ts', + 'src/test/common/variables/envVarsService.unit.test.ts', + 'src/test/common/helpers.test.ts', + 'src/test/common/application/commands/reloadCommand.unit.test.ts', + 'src/test/common/installer/channelManager.unit.test.ts', + 'src/test/common/installer/pipInstaller.unit.test.ts', + 'src/test/common/installer/pipEnvInstaller.unit.test.ts', + 'src/test/common/socketCallbackHandler.test.ts', + 'src/test/common/process/decoder.test.ts', + 'src/test/common/process/processFactory.unit.test.ts', + 'src/test/common/process/pythonToolService.unit.test.ts', + 'src/test/common/process/proc.observable.test.ts', + 'src/test/common/process/logger.unit.test.ts', + 'src/test/common/process/proc.exec.test.ts', + 'src/test/common/process/pythonProcess.unit.test.ts', + 'src/test/common/process/proc.unit.test.ts', + 'src/test/common/interpreterPathService.unit.test.ts', + 'src/test/debugger/extension/adapter/adapter.test.ts', + 'src/test/debugger/extension/adapter/outdatedDebuggerPrompt.unit.test.ts', + 'src/test/debugger/extension/adapter/factory.unit.test.ts', + 'src/test/debugger/extension/adapter/logging.unit.test.ts', + 'src/test/debugger/extension/hooks/childProcessAttachHandler.unit.test.ts', + 'src/test/debugger/extension/hooks/childProcessAttachService.unit.test.ts', + 'src/test/debugger/utils.ts', + 'src/test/debugger/envVars.test.ts', + 'src/test/telemetry/index.unit.test.ts', + 'src/test/telemetry/envFileTelemetry.unit.test.ts', + 'src/test/application/diagnostics/checks/macPythonInterpreter.unit.test.ts', + 'src/test/application/diagnostics/checks/pythonInterpreter.unit.test.ts', + 'src/test/application/diagnostics/checks/powerShellActivation.unit.test.ts', + 'src/test/application/diagnostics/checks/envPathVariable.unit.test.ts', + 'src/test/application/diagnostics/applicationDiagnostics.unit.test.ts', + 'src/test/application/diagnostics/promptHandler.unit.test.ts', + 'src/test/application/diagnostics/commands/ignore.unit.test.ts', + 'src/test/performance/load.perf.test.ts', + 'src/client/interpreter/configuration/interpreterSelector/commands/base.ts', + 'src/client/interpreter/configuration/interpreterSelector/commands/resetInterpreter.ts', + 'src/client/interpreter/configuration/pythonPathUpdaterServiceFactory.ts', + 'src/client/interpreter/configuration/services/globalUpdaterService.ts', + 'src/client/interpreter/configuration/services/workspaceUpdaterService.ts', + 'src/client/interpreter/configuration/services/workspaceFolderUpdaterService.ts', + 'src/client/interpreter/helpers.ts', + 'src/client/interpreter/virtualEnvs/condaInheritEnvPrompt.ts', + 'src/client/interpreter/display/index.ts', + 'src/client/extension.ts', + 'src/client/startupTelemetry.ts', + 'src/client/terminals/codeExecution/terminalCodeExecution.ts', + 'src/client/terminals/codeExecution/codeExecutionManager.ts', + 'src/client/terminals/codeExecution/djangoContext.ts', + 'src/client/activation/commands.ts', + 'src/client/activation/progress.ts', + 'src/client/activation/extensionSurvey.ts', + 'src/client/activation/common/analysisOptions.ts', + 'src/client/activation/languageClientMiddleware.ts', + 'src/client/testing/serviceRegistry.ts', + 'src/client/testing/main.ts', + 'src/client/testing/configurationFactory.ts', + 'src/client/testing/common/constants.ts', + 'src/client/testing/common/testUtils.ts', + 'src/client/common/helpers.ts', + 'src/client/common/net/browser.ts', + 'src/client/common/net/socket/socketCallbackHandler.ts', + 'src/client/common/net/socket/socketServer.ts', + 'src/client/common/net/socket/SocketStream.ts', + 'src/client/common/contextKey.ts', + 'src/client/common/experiments/telemetry.ts', + 'src/client/common/platform/serviceRegistry.ts', + 'src/client/common/platform/errors.ts', + 'src/client/common/platform/fs-temp.ts', + 'src/client/common/platform/fs-paths.ts', + 'src/client/common/platform/registry.ts', + 'src/client/common/platform/pathUtils.ts', + 'src/client/common/persistentState.ts', + 'src/client/common/terminal/activator/base.ts', + 'src/client/common/terminal/activator/powershellFailedHandler.ts', + 'src/client/common/terminal/activator/index.ts', + 'src/client/common/terminal/helper.ts', + 'src/client/common/terminal/syncTerminalService.ts', + 'src/client/common/terminal/factory.ts', + 'src/client/common/terminal/commandPrompt.ts', + 'src/client/common/terminal/service.ts', + 'src/client/common/terminal/shellDetector.ts', + 'src/client/common/terminal/shellDetectors/userEnvironmentShellDetector.ts', + 'src/client/common/terminal/shellDetectors/vscEnvironmentShellDetector.ts', + 'src/client/common/terminal/shellDetectors/terminalNameShellDetector.ts', + 'src/client/common/terminal/shellDetectors/settingsShellDetector.ts', + 'src/client/common/terminal/shellDetectors/baseShellDetector.ts', + 'src/client/common/utils/decorators.ts', + 'src/client/common/utils/enum.ts', + 'src/client/common/utils/platform.ts', + 'src/client/common/utils/stopWatch.ts', + 'src/client/common/utils/random.ts', + 'src/client/common/utils/sysTypes.ts', + 'src/client/common/utils/misc.ts', + 'src/client/common/utils/cacheUtils.ts', + 'src/client/common/utils/workerPool.ts', + 'src/client/common/extensions.ts', + 'src/client/common/variables/serviceRegistry.ts', + 'src/client/common/variables/environment.ts', + 'src/client/common/variables/types.ts', + 'src/client/common/variables/systemVariables.ts', + 'src/client/common/cancellation.ts', + 'src/client/common/interpreterPathService.ts', + 'src/client/common/application/applicationShell.ts', + 'src/client/common/application/languageService.ts', + 'src/client/common/application/clipboard.ts', + 'src/client/common/application/workspace.ts', + 'src/client/common/application/debugSessionTelemetry.ts', + 'src/client/common/application/documentManager.ts', + 'src/client/common/application/debugService.ts', + 'src/client/common/application/commands/reloadCommand.ts', + 'src/client/common/application/terminalManager.ts', + 'src/client/common/application/applicationEnvironment.ts', + 'src/client/common/errors/errorUtils.ts', + 'src/client/common/installer/serviceRegistry.ts', + 'src/client/common/installer/channelManager.ts', + 'src/client/common/installer/moduleInstaller.ts', + 'src/client/common/installer/types.ts', + 'src/client/common/installer/pipEnvInstaller.ts', + 'src/client/common/installer/productService.ts', + 'src/client/common/installer/pipInstaller.ts', + 'src/client/common/installer/productPath.ts', + 'src/client/common/process/currentProcess.ts', + 'src/client/common/process/processFactory.ts', + 'src/client/common/process/serviceRegistry.ts', + 'src/client/common/process/pythonToolService.ts', + 'src/client/common/process/internal/python.ts', + 'src/client/common/process/internal/scripts/testing_tools.ts', + 'src/client/common/process/types.ts', + 'src/client/common/process/logger.ts', + 'src/client/common/process/pythonProcess.ts', + 'src/client/common/process/pythonEnvironment.ts', + 'src/client/common/process/decoder.ts', + 'src/client/debugger/extension/adapter/remoteLaunchers.ts', + 'src/client/debugger/extension/adapter/outdatedDebuggerPrompt.ts', + 'src/client/debugger/extension/adapter/factory.ts', + 'src/client/debugger/extension/adapter/activator.ts', + 'src/client/debugger/extension/adapter/logging.ts', + 'src/client/debugger/extension/hooks/eventHandlerDispatcher.ts', + 'src/client/debugger/extension/hooks/childProcessAttachService.ts', + 'src/client/debugger/extension/attachQuickPick/wmicProcessParser.ts', + 'src/client/debugger/extension/attachQuickPick/factory.ts', + 'src/client/debugger/extension/attachQuickPick/psProcessParser.ts', + 'src/client/debugger/extension/attachQuickPick/picker.ts', + 'src/client/application/serviceRegistry.ts', + 'src/client/application/diagnostics/base.ts', + 'src/client/application/diagnostics/applicationDiagnostics.ts', + 'src/client/application/diagnostics/filter.ts', + 'src/client/application/diagnostics/promptHandler.ts', + 'src/client/application/diagnostics/commands/base.ts', + 'src/client/application/diagnostics/commands/ignore.ts', + 'src/client/application/diagnostics/commands/factory.ts', + 'src/client/application/diagnostics/commands/execVSCCommand.ts', + 'src/client/application/diagnostics/commands/launchBrowser.ts', + ], + linterOptions: { + reportUnusedDisableDirectives: 'off', + }, + rules: { + ...js.configs.recommended.rules, + 'no-undef': 'off', + }, + }, + // TypeScript-specific configuration + { + files: ['**/*.ts', '**/*.tsx', '**/*.js', 'src', 'pythonExtensionApi/src'], + languageOptions: { + parser: tsParser, + parserOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + globals: { + ...(js.configs.recommended.languageOptions?.globals || {}), + mocha: true, + require: 'readonly', + process: 'readonly', + exports: 'readonly', + module: 'readonly', + __dirname: 'readonly', + __filename: 'readonly', + setTimeout: 'readonly', + setInterval: 'readonly', + clearTimeout: 'readonly', + clearInterval: 'readonly', + }, + }, + plugins: { + '@typescript-eslint': tseslint, + 'no-only-tests': noOnlyTests, + import: importPlugin, + prettier: prettier, + 'no-bad-gdpr-comment': noBadGdprCommentPlugin, // Register your plugin + }, + settings: { + 'import/resolver': { + node: { + extensions: ['.js', '.ts'], + }, + }, + }, + rules: { + 'no-bad-gdpr-comment/no-bad-gdpr-comment': 'warn', // Enable your rule + // Base configurations + ...tseslint.configs.recommended.rules, + ...prettier.rules, + + // TypeScript-specific rules + '@typescript-eslint/ban-ts-comment': [ + 'error', + { + 'ts-ignore': 'allow-with-description', + }, + ], + '@typescript-eslint/ban-types': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-namespace': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-loss-of-precision': 'off', + '@typescript-eslint/no-unused-vars': [ + 'warn', + { + varsIgnorePattern: '^_', + argsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-use-before-define': [ + 'error', + { + functions: false, + }, + ], + + // Import rules + 'import/extensions': 'off', + 'import/namespace': 'off', + 'import/no-extraneous-dependencies': 'off', + 'import/no-unresolved': 'off', + 'import/prefer-default-export': 'off', + + // Testing rules + 'no-only-tests/no-only-tests': [ + 'error', + { + block: ['test', 'suite'], + focus: ['only'], + }, + ], + + // Code style rules + 'linebreak-style': 'off', + 'no-bitwise': 'off', + 'no-console': 'off', + 'no-underscore-dangle': 'off', + 'operator-assignment': 'off', + 'func-names': 'off', + + // Error handling and control flow + 'no-empty': ['error', { allowEmptyCatch: true }], + 'no-async-promise-executor': 'off', + 'no-await-in-loop': 'off', + 'no-unreachable': 'off', + 'no-void': 'off', + + // Duplicates and overrides (TypeScript handles these) + 'no-dupe-class-members': 'off', + 'no-redeclare': 'off', + 'no-undef': 'off', + + // Miscellaneous rules + 'no-control-regex': 'off', + 'no-extend-native': 'off', + 'no-inner-declarations': 'off', + 'no-multi-str': 'off', + 'no-param-reassign': 'off', + 'no-prototype-builtins': 'off', + 'no-empty-function': 'off', + 'no-template-curly-in-string': 'off', + 'no-useless-escape': 'off', + 'no-extra-parentheses': 'off', + 'no-extra-paren': 'off', + '@typescript-eslint/no-extra-parens': 'off', + strict: 'off', + + // Restricted syntax + 'no-restricted-syntax': [ + 'error', + { + selector: 'ForInStatement', + message: + 'for..in loops iterate over the entire prototype chain, which is virtually never what you want. Use Object.{keys,values,entries}, and iterate over the resulting array.', + }, + { + selector: 'LabeledStatement', + message: + 'Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.', + }, + { + selector: 'WithStatement', + message: + '`with` is disallowed in strict mode because it makes code impossible to predict and optimize.', + }, + ], + }, + }, +]; diff --git a/experiments.json b/experiments.json deleted file mode 100644 index bd13dd8d6640..000000000000 --- a/experiments.json +++ /dev/null @@ -1,176 +0,0 @@ -[ - { - "name": "AlwaysDisplayTestExplorer - experiment", - "salt": "AlwaysDisplayTestExplorer", - "min": 80, - "max": 100 - }, - { - "name": "AlwaysDisplayTestExplorer - control", - "salt": "AlwaysDisplayTestExplorer", - "min": 0, - "max": 20 - }, - { - "name": "ShowPlayIcon - start", - "salt": "ShowPlayIcon", - "max": 100, - "min": 0 - }, - { - "name": "ShowExtensionSurveyPrompt - enabled", - "salt": "ShowExtensionSurveyPrompt", - "max": 100, - "min": 60 - }, - { - "name": "ShowExtensionSurveyPrompt - control", - "salt": "ShowExtensionSurveyPrompt", - "min": 0, - "max": 40 - }, - { - "name": "DebugAdapterFactory - control", - "salt": "DebugAdapterFactory", - "min": 0, - "max": 0 - }, - { - "name": "DebugAdapterFactory - experiment", - "salt": "DebugAdapterFactory", - "min": 0, - "max": 100 - }, - { - "name": "PtvsdWheels37 - control", - "salt": "DebugAdapterFactory", - "min": 0, - "max": 0 - }, - { - "name": "PtvsdWheels37 - experiment", - "salt": "DebugAdapterFactory", - "min": 0, - "max": 100 - }, - { - "name": "Reload - control", - "salt": "DebugAdapterFactory", - "min": 0, - "max": 0 - }, - { - "name": "Reload - experiment", - "salt": "DebugAdapterFactory", - "min": 0, - "max": 0 - }, - { - "name": "LS - enabled", - "salt": "LS", - "min": 0, - "max": 4 - }, - { - "name": "LS - control", - "salt": "LS", - "min": 20, - "max": 24 - }, - { - "name": "UseTerminalToGetActivatedEnvVars - experiment", - "salt": "UseTerminalToGetActivatedEnvVars", - "min": 0, - "max": 0 - }, - { - "name": "UseTerminalToGetActivatedEnvVars - control", - "salt": "UseTerminalToGetActivatedEnvVars", - "min": 0, - "max": 100 - }, - { - "name": "AA_testing - control", - "salt": "AA_testing", - "min": 0, - "max": 10 - }, - { - "name": "AA_testing - experiment", - "salt": "AA_testing", - "min": 90, - "max": 100 - }, - { - "name": "WebHostNotebook - experiment", - "salt": "WebHostNotebook", - "max": 0, - "min": 0 - }, - { - "name": "WebHostNotebook - control", - "salt": "WebHostNotebook", - "min": 0, - "max": 100 - }, - { - "name": "LocalZMQKernel - experiment", - "salt": "LocalZMQKernel", - "max": 0, - "min": 0 - }, - { - "name": "LocalZMQKernel - control", - "salt": "LocalZMQKernel", - "min": 0, - "max": 100 - }, - { - "name": "CollectLSRequestTiming - experiment", - "salt": "CollectLSRequestTiming", - "min": 0, - "max": 10 - }, - { - "name": "CollectLSRequestTiming - control", - "salt": "CollectLSRequestTiming", - "min": 10, - "max": 100 - }, - { - "name": "CollectNodeLSRequestTiming - experiment", - "salt": "CollectNodeLSRequestTiming", - "min": 0, - "max": 100 - }, - { - "name": "CollectNodeLSRequestTiming - control", - "salt": "CollectNodeLSRequestTiming", - "min": 0, - "max": 0 - }, - { - "name": "EnableIPyWidgets - experiment", - "salt": "EnableIPyWidgets", - "min": 0, - "max": 100 - }, - { - "name": "EnableIPyWidgets - control", - "salt": "EnableIPyWidgets", - "min": 0, - "max": 0 - }, - { - "name": "DeprecatePythonPath - experiment", - "salt": "DeprecatePythonPath", - "min": 0, - "max": 0 - }, - { - "name": "DeprecatePythonPath - control", - "salt": "DeprecatePythonPath", - "min": 100, - "max": 100 - } -] diff --git a/gulpfile.js b/gulpfile.js index e82176144110..0b919f16572a 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -9,97 +9,57 @@ 'use strict'; const gulp = require('gulp'); -const filter = require('gulp-filter'); -const es = require('event-stream'); -const tsfmt = require('typescript-formatter'); -const tslint = require('tslint'); -const relative = require('relative'); const ts = require('gulp-typescript'); -const cp = require('child_process'); const spawn = require('cross-spawn'); -const colors = require('colors/safe'); const path = require('path'); const del = require('del'); -const sourcemaps = require('gulp-sourcemaps'); -const fs = require('fs-extra'); const fsExtra = require('fs-extra'); const glob = require('glob'); const _ = require('lodash'); const nativeDependencyChecker = require('node-has-native-dependencies'); const flat = require('flat'); -const argv = require('yargs').argv; +const { argv } = require('yargs'); const os = require('os'); -const rmrf = require('rimraf'); +const typescript = require('typescript'); -const isCI = process.env.TRAVIS === 'true' || process.env.TF_BUILD !== undefined; - -const noop = function () {}; -/** - * Hygiene works by creating cascading subsets of all our files and - * passing them through a sequence of checks. Here are the current subsets, - * named according to the checks performed on them. Each subset contains - * the following one, as described in mathematical notation: - * - * all ⊃ indentation ⊃ typescript - */ - -const all = ['src/**/*.ts', 'src/**/*.tsx', 'src/**/*.d.ts', 'src/**/*.js', 'src/**/*.jsx']; - -const tsFilter = ['src/**/*.ts*', '!out/**/*']; +const tsProject = ts.createProject('./tsconfig.json', { typescript }); -const indentationFilter = ['src/**/*.ts*', '!**/typings/**/*']; - -const tslintFilter = [ - 'src/**/*.ts*', - 'test/**/*.ts*', - '!**/node_modules/**', - '!out/**/*', - '!images/**/*', - '!.vscode/**/*', - '!pythonFiles/**/*', - '!resources/**/*', - '!snippets/**/*', - '!syntaxes/**/*', - '!**/typings/**/*', - '!**/*.d.ts' -]; +const isCI = process.env.TRAVIS === 'true' || process.env.TF_BUILD !== undefined; -gulp.task('compile', (done) => { +gulp.task('compileCore', (done) => { let failed = false; - const tsProject = ts.createProject('tsconfig.json'); tsProject .src() .pipe(tsProject()) - .on('error', () => (failed = true)) + .on('error', () => { + failed = true; + }) .js.pipe(gulp.dest('out')) .on('finish', () => (failed ? done(new Error('TypeScript compilation errors')) : done())); }); -gulp.task('precommit', (done) => run({ exitOnError: true, mode: 'staged' }, done)); - -gulp.task('hygiene-watch', () => gulp.watch(tsFilter, gulp.series('hygiene-modified'))); - -gulp.task('hygiene', (done) => run({ mode: 'compile', skipFormatCheck: true, skipIndentationCheck: true }, done)); - -gulp.task( - 'hygiene-modified', - gulp.series('compile', (done) => run({ mode: 'changes' }, done)) -); - -gulp.task('watch', gulp.parallel('hygiene-modified', 'hygiene-watch')); - -// Duplicate to allow duplicate task in tasks.json (one ith problem matching, and one without) -gulp.task('watchProblems', gulp.parallel('hygiene-modified', 'hygiene-watch')); - -gulp.task('hygiene-watch-branch', () => gulp.watch(tsFilter, gulp.series('hygiene-branch'))); +gulp.task('compileApi', (done) => { + spawnAsync('npm', ['run', 'compileApi'], undefined, true) + .then((stdout) => { + if (stdout.includes('error')) { + done(new Error(stdout)); + } else { + done(); + } + }) + .catch((ex) => { + console.log(ex); + done(new Error('TypeScript compilation errors', ex)); + }); +}); -gulp.task('hygiene-all', (done) => run({ mode: 'all' }, done)); +gulp.task('compile', gulp.series('compileCore', 'compileApi')); -gulp.task('hygiene-branch', (done) => run({ mode: 'diffMaster' }, done)); +gulp.task('precommit', (done) => run({ exitOnError: true, mode: 'staged' }, done)); gulp.task('output:clean', () => del(['coverage'])); -gulp.task('clean:cleanExceptTests', () => del(['clean:vsix', 'out/client', 'out/datascience-ui', 'out/server'])); +gulp.task('clean:cleanExceptTests', () => del(['clean:vsix', 'out/client'])); gulp.task('clean:vsix', () => del(['*.vsix'])); gulp.task('clean:out', () => del(['out'])); @@ -112,93 +72,51 @@ gulp.task('checkNativeDependencies', (done) => { done(); }); -gulp.task('check-datascience-dependencies', () => checkDatascienceDependencies()); - const webpackEnv = { NODE_OPTIONS: '--max_old_space_size=9096' }; -async function buildIPyWidgets() { - await spawnAsync('npm', ['run', 'build-ipywidgets'], webpackEnv); -} -async function buildDataScienceUI(forceBundleAnalyzer = false) { - if (forceBundleAnalyzer) { - process.env.VSC_PYTHON_FORCE_ANALYZER = 1; - } - await buildIPyWidgets(); - await spawnAsync( - 'npm', - [ - 'run', - 'webpack', - '--', - '--config', - './build/webpack/webpack.datascience-ui-notebooks.config.js', - '--mode', - 'production' - ], - webpackEnv - ); - await spawnAsync( - 'npm', - [ - 'run', - 'webpack', - '--', - '--config', - './build/webpack/webpack.datascience-ui-viewers.config.js', - '--mode', - 'production' - ], - webpackEnv - ); - if (forceBundleAnalyzer) { - delete process.env.VSC_PYTHON_FORCE_ANALYZER; +async function buildWebPackForDevOrProduction(configFile, configNameForProductionBuilds) { + if (configNameForProductionBuilds) { + await buildWebPack(configNameForProductionBuilds, ['--config', configFile], webpackEnv); + } else { + await spawnAsync('npm', ['run', 'webpack', '--', '--config', configFile, '--mode', 'production'], webpackEnv); } } +gulp.task('webpack', async () => { + // Build node_modules. + await buildWebPackForDevOrProduction('./build/webpack/webpack.extension.dependencies.config.js', 'production'); + await buildWebPackForDevOrProduction('./build/webpack/webpack.extension.config.js', 'extension'); + await buildWebPackForDevOrProduction('./build/webpack/webpack.extension.browser.config.js', 'browser'); +}); -gulp.task('compile-webviews', async () => { - buildDataScienceUI(false); +gulp.task('addExtensionPackDependencies', async () => { + await buildLicense(); + await addExtensionPackDependencies(); }); -gulp.task('webpack', async () => { - // Build node_modules. - await buildWebPack( - 'production', - ['--config', './build/webpack/webpack.extension.dependencies.config.js'], - webpackEnv +async function addExtensionPackDependencies() { + // Update the package.json to add extension pack dependencies at build time so that + // extension dependencies need not be installed during development + const packageJsonContents = await fsExtra.readFile('package.json', 'utf-8'); + const packageJson = JSON.parse(packageJsonContents); + packageJson.extensionPack = [ + 'ms-python.vscode-pylance', + 'ms-python.debugpy', + 'ms-python.vscode-python-envs', + ].concat(packageJson.extensionPack ? packageJson.extensionPack : []); + // Remove potential duplicates. + packageJson.extensionPack = packageJson.extensionPack.filter( + (item, index) => packageJson.extensionPack.indexOf(item) === index, ); - // Build DS stuff (separately as it uses far too much memory and slows down CI). - // Individually is faster on CI. - await buildIPyWidgets(); - await buildWebPack( - 'production', - ['--config', './build/webpack/webpack.datascience-ui-notebooks.config.js'], - webpackEnv - ); - await buildWebPack( - 'production', - ['--config', './build/webpack/webpack.datascience-ui-viewers.config.js'], - webpackEnv - ); - // Run both in parallel, for faster process on CI. - // Yes, console would print output from both, that's ok, we have a faster CI. - // If things fail, we can run locally separately. - if (isCI) { - const buildExtension = buildWebPack( - 'extension', - ['--config', './build/webpack/webpack.extension.config.js'], - webpackEnv - ); - const buildDebugAdapter = buildWebPack( - 'debugAdapter', - ['--config', './build/webpack/webpack.debugadapter.config.js'], - webpackEnv - ); - await Promise.all([buildExtension, buildDebugAdapter]); - } else { - await buildWebPack('extension', ['--config', './build/webpack/webpack.extension.config.js'], webpackEnv); - await buildWebPack('debugAdapter', ['--config', './build/webpack/webpack.debugadapter.config.js'], webpackEnv); - } -}); + await fsExtra.writeFile('package.json', JSON.stringify(packageJson, null, 4), 'utf-8'); +} + +async function buildLicense() { + const headerPath = path.join(__dirname, 'build', 'license-header.txt'); + const licenseHeader = await fsExtra.readFile(headerPath, 'utf-8'); + const license = await fsExtra.readFile('LICENSE', 'utf-8'); + + await fsExtra.writeFile('LICENSE', `${licenseHeader}\n${license}`, 'utf-8'); +} gulp.task('updateBuildNumber', async () => { await updateBuildNumber(argv); @@ -211,14 +129,14 @@ async function updateBuildNumber(args) { const packageJson = JSON.parse(packageJsonContents); // Change version number - const versionParts = packageJson['version'].split('.'); + const versionParts = packageJson.version.split('.'); const buildNumberPortion = versionParts.length > 2 ? versionParts[2].replace(/(\d+)/, args.buildNumber) : args.buildNumber; const newVersion = versionParts.length > 1 ? `${versionParts[0]}.${versionParts[1]}.${buildNumberPortion}` - : packageJson['version']; - packageJson['version'] = newVersion; + : packageJson.version; + packageJson.version = newVersion; // Write back to the package json await fsExtra.writeFile('package.json', JSON.stringify(packageJson, null, 4), 'utf-8'); @@ -228,7 +146,7 @@ async function updateBuildNumber(args) { const changeLogContents = await fsExtra.readFile('CHANGELOG.md', 'utf-8'); const fixedContents = changeLogContents.replace( /##\s*(\d+)\.(\d+)\.(\d+)\s*\(/, - `## $1.$2.${buildNumberPortion} (` + `## $1.$2.${buildNumberPortion} (`, ); // Write back to changelog.md @@ -245,7 +163,7 @@ async function buildWebPack(webpackConfigName, args, env) { const stdOut = await spawnAsync( 'npm', ['run', 'webpack', '--', ...args, ...['--mode', 'production', '--devtool', 'source-map']], - env + env, ); const stdOutLines = stdOut .split(os.EOL) @@ -257,8 +175,8 @@ async function buildWebPack(webpackConfigName, args, env) { .filter( (item) => allowedWarnings.findIndex((allowedWarning) => - item.toLowerCase().startsWith(allowedWarning.toLowerCase()) - ) == -1 + item.toLowerCase().startsWith(allowedWarning.toLowerCase()), + ) === -1, ); const errors = stdOutLines.some((item) => item.startsWith('ERROR in')); if (errors) { @@ -266,7 +184,7 @@ async function buildWebPack(webpackConfigName, args, env) { } if (warnings.length > 0) { throw new Error( - `Warnings in ${webpackConfigName}, Check gulpfile.js to see if the warning should be allowed., \n\n${stdOut}` + `Warnings in ${webpackConfigName}, Check gulpfile.js to see if the warning should be allowed., \n\n${stdOut}`, ); } } @@ -277,214 +195,48 @@ function getAllowedWarningsForWebPack(buildConfig) { 'WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).', 'WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.', 'WARNING in webpack performance recommendations:', - 'WARNING in ./node_modules/vsls/vscode.js', 'WARNING in ./node_modules/encoding/lib/iconv-loader.js', - 'WARNING in ./node_modules/ws/lib/BufferUtil.js', - 'WARNING in ./node_modules/ws/lib/buffer-util.js', - 'WARNING in ./node_modules/ws/lib/Validation.js', - 'WARNING in ./node_modules/ws/lib/validation.js', - 'WARNING in ./node_modules/@jupyterlab/services/node_modules/ws/lib/buffer-util.js', - 'WARNING in ./node_modules/@jupyterlab/services/node_modules/ws/lib/validation.js', 'WARNING in ./node_modules/any-promise/register.js', - 'WARNING in ./node_modules/log4js/lib/appenders/index.js', - 'WARNING in ./node_modules/log4js/lib/clustering.js' + 'WARNING in ./node_modules/diagnostic-channel-publishers/dist/src/azure-coretracing.pub.js', + 'WARNING in ./node_modules/applicationinsights/out/AutoCollection/NativePerformance.js', ]; case 'extension': return [ 'WARNING in ./node_modules/encoding/lib/iconv-loader.js', - 'WARNING in ./node_modules/ws/lib/BufferUtil.js', - 'WARNING in ./node_modules/ws/lib/buffer-util.js', - 'WARNING in ./node_modules/ws/lib/Validation.js', - 'WARNING in ./node_modules/ws/lib/validation.js', - 'WARNING in ./node_modules/any-promise/register.js' + 'WARNING in ./node_modules/any-promise/register.js', + 'remove-files-plugin@1.4.0:', + 'WARNING in ./node_modules/diagnostic-channel-publishers/dist/src/azure-coretracing.pub.js', + 'WARNING in ./node_modules/applicationinsights/out/AutoCollection/NativePerformance.js', ]; case 'debugAdapter': - return ['WARNING in ./node_modules/vscode-uri/lib/index.js']; + return [ + 'WARNING in ./node_modules/vscode-uri/lib/index.js', + 'WARNING in ./node_modules/diagnostic-channel-publishers/dist/src/azure-coretracing.pub.js', + 'WARNING in ./node_modules/applicationinsights/out/AutoCollection/NativePerformance.js', + ]; + case 'browser': + return [ + 'WARNING in asset size limit: The following asset(s) exceed the recommended size limit (244 KiB).', + 'WARNING in entrypoint size limit: The following entrypoint(s) combined asset size exceeds the recommended limit (244 KiB). This can impact web performance.', + 'WARNING in webpack performance recommendations:', + ]; default: throw new Error('Unknown WebPack Configuration'); } } -gulp.task('renameSourceMaps', async () => { - // By default source maps will be disabled in the extension. - // Users will need to use the command `python.enableSourceMapSupport` to enable source maps. - const extensionSourceMap = path.join(__dirname, 'out', 'client', 'extension.js.map'); - const debuggerSourceMap = path.join(__dirname, 'out', 'client', 'debugger', 'debugAdapter', 'main.js.map'); - await fs.rename(extensionSourceMap, `${extensionSourceMap}.disabled`); - await fs.rename(debuggerSourceMap, `${debuggerSourceMap}.disabled`); -}); gulp.task('verifyBundle', async () => { const matches = await glob.sync(path.join(__dirname, '*.vsix')); - if (!matches || matches.length == 0) { + if (!matches || matches.length === 0) { throw new Error('Bundle does not exist'); } else { console.log(`Bundle ${matches[0]} exists.`); } }); -gulp.task('prePublishBundle', gulp.series('webpack', 'renameSourceMaps')); -gulp.task('checkDependencies', gulp.series('checkNativeDependencies', 'check-datascience-dependencies')); -gulp.task('prePublishNonBundle', gulp.series('compile', 'compile-webviews')); - -gulp.task('installPythonRequirements', async () => { - const args = [ - '-m', - 'pip', - '--disable-pip-version-check', - 'install', - '-t', - './pythonFiles/lib/python', - '--no-cache-dir', - '--implementation', - 'py', - '--no-deps', - '--upgrade', - '-r', - './requirements.txt' - ]; - const success = await spawnAsync(process.env.CI_PYTHON_PATH || 'python3', args, undefined, true) - .then(() => true) - .catch((ex) => { - console.error("Failed to install Python Libs using 'python3'", ex); - return false; - }); - if (!success) { - console.info("Failed to install Python Libs using 'python3', attempting to install using 'python'"); - await spawnAsync('python', args).catch((ex) => - console.error("Failed to install Python Libs using 'python'", ex) - ); - } -}); - -// See https://github.com/microsoft/vscode-python/issues/7136 -gulp.task('installNewDebugpy', async () => { - // Install dependencies needed for 'install_debugpy.py' - const depsArgs = [ - '-m', - 'pip', - '--disable-pip-version-check', - 'install', - '-t', - './pythonFiles/lib/temp', - '-r', - './build/debugger-install-requirements.txt' - ]; - const successWithWheelsDeps = await spawnAsync(process.env.CI_PYTHON_PATH || 'python3', depsArgs, undefined, true) - .then(() => true) - .catch((ex) => { - console.error("Failed to install new DEBUGPY wheels using 'python3'", ex); - return false; - }); - if (!successWithWheelsDeps) { - console.info( - "Failed to install dependencies need by 'install_debugpy.py' using 'python3', attempting to install using 'python'" - ); - await spawnAsync('python', depsArgs).catch((ex) => - console.error("Failed to install dependencies need by 'install_debugpy.py' using 'python'", ex) - ); - } - - // Install new DEBUGPY with wheels for python 3.7 - const wheelsArgs = ['./pythonFiles/install_debugpy.py']; - const wheelsEnv = { PYTHONPATH: './pythonFiles/lib/temp' }; - const successWithWheels = await spawnAsync(process.env.CI_PYTHON_PATH || 'python3', wheelsArgs, wheelsEnv, true) - .then(() => true) - .catch((ex) => { - console.error("Failed to install new DEBUGPY wheels using 'python3'", ex); - return false; - }); - if (!successWithWheels) { - console.info("Failed to install new DEBUGPY wheels using 'python3', attempting to install using 'python'"); - await spawnAsync('python', wheelsArgs, wheelsEnv).catch((ex) => - console.error("Failed to install DEBUGPY wheels using 'python'", ex) - ); - } - - rmrf.sync('./pythonFiles/lib/temp'); - - // Install source only version of new DEBUGPY for use with all other python versions. - const args = [ - '-m', - 'pip', - '--disable-pip-version-check', - 'install', - '-t', - './pythonFiles/lib/python/debugpy/no_wheels', - '--no-cache-dir', - '--implementation', - 'py', - '--no-deps', - '--upgrade', - '--pre', - 'debugpy' - ]; - const successWithoutWheels = await spawnAsync(process.env.CI_PYTHON_PATH || 'python3', args, undefined, true) - .then(() => true) - .catch((ex) => { - console.error("Failed to install DEBUGPY using 'python3'", ex); - return false; - }); - if (!successWithoutWheels) { - console.info( - "Failed to install source only version of new DEBUGPY using 'python3', attempting to install using 'python'" - ); - await spawnAsync('python', args).catch((ex) => - console.error("Failed to install source only DEBUGPY using 'python'", ex) - ); - } -}); - -// Install the last stable version of old PTVSD (which includes a middle layer adapter and requires ptvsd_launcher.py) -// until all users have migrated to the new debug adapter + new DEBUGPY (specified in requirements.txt) -// See https://github.com/microsoft/vscode-python/issues/7136 -gulp.task('installOldPtvsd', async () => { - const args = [ - '-m', - 'pip', - '--disable-pip-version-check', - 'install', - '-t', - './pythonFiles/lib/python/old_ptvsd', - '--no-cache-dir', - '--implementation', - 'py', - '--no-deps', - '--upgrade', - 'ptvsd==4.3.2' - ]; - const success = await spawnAsync(process.env.CI_PYTHON_PATH || 'python3', args, undefined, true) - .then(() => true) - .catch((ex) => { - console.error("Failed to install PTVSD using 'python3'", ex); - return false; - }); - if (!success) { - console.info("Failed to install PTVSD using 'python3', attempting to install using 'python'"); - await spawnAsync('python', args).catch((ex) => console.error("Failed to install PTVSD using 'python'", ex)); - } -}); - -gulp.task('installPythonLibs', gulp.series('installPythonRequirements', 'installOldPtvsd', 'installNewDebugpy')); - -function uploadExtension(uploadBlobName) { - const azure = require('gulp-azure-storage'); - const rename = require('gulp-rename'); - return gulp - .src('*python*.vsix') - .pipe(rename(uploadBlobName)) - .pipe( - azure.upload({ - account: process.env.AZURE_STORAGE_ACCOUNT, - key: process.env.AZURE_STORAGE_ACCESS_KEY, - container: process.env.AZURE_STORAGE_CONTAINER - }) - ); -} - -gulp.task('uploadDeveloperExtension', () => uploadExtension('ms-python-insiders.vsix')); -gulp.task('uploadReleaseExtension', () => - uploadExtension(`ms-python-${process.env.TRAVIS_BRANCH || process.env.BUILD_SOURCEBRANCHNAME}.vsix`) -); +gulp.task('prePublishBundle', gulp.series('webpack')); +gulp.task('checkDependencies', gulp.series('checkNativeDependencies')); +gulp.task('prePublishNonBundle', gulp.series('compile')); function spawnAsync(command, args, env, rejectOnStdErr = false) { env = env || {}; @@ -511,208 +263,6 @@ function spawnAsync(command, args, env, rejectOnStdErr = false) { }); } -/** - * Analyzes the dependencies pulled in by WebPack. - * Details on the structure of the stats json file can be found here https://webpack.js.org/api/stats/ - * - * We go through the stats file and check all node modules that are part of the bundle(s). - * If they are in the bundle, they are used, hence they need to be registered in the `package.datascience-ui.dependencies.json` file. - * If not found, this will throw an error with the list of those dependencies. - * If a dependency is no longer use, this will throw an error with the details of the module to be removed from the `package.datascience-ui.dependencies.json` file. - * - */ -async function checkDatascienceDependencies() { - await buildDataScienceUI(true); - - const existingModulesFileName = 'package.datascience-ui.dependencies.json'; - const existingModulesFile = path.join(__dirname, existingModulesFileName); - const existingModulesList = JSON.parse(await fsExtra.readFile(existingModulesFile).then((data) => data.toString())); - const existingModules = new Set(existingModulesList); - const existingModulesCopy = new Set(existingModulesList); - - const newModules = new Set(); - const packageLock = JSON.parse(await fsExtra.readFile('package-lock.json').then((data) => data.toString())); - const modulesInPackageLock = Object.keys(packageLock.dependencies); - - // Right now the script only handles two parts in the dependency name (with one '/'). - // If we have dependencies with more than one '/', then update this code. - if (modulesInPackageLock.some((dependency) => dependency.indexOf('/') !== dependency.lastIndexOf('/'))) { - throwAndLogError("Dependencies detected with more than one '/', please update this script."); - } - - /** - * Processes the output in a webpack stat file. - * - * @param {string} statFile - */ - async function processWebpackStatFile(statFile) { - /** @type{import("webpack").Stats.ToJsonOutput} */ - const json = await fsExtra.readFile(statFile).then((data) => JSON.parse(data.toString())); - json.children.forEach((child) => { - child.chunks.forEach((chunk) => { - processModules(chunk.modules); - (chunk.origins || []).forEach((origin) => processOriginOrReason(origin)); - }); - }); - json.chunks.forEach((chunk) => { - processModules(chunk.modules); - (chunk.origins || []).forEach((origin) => processOriginOrReason(origin)); - }); - } - - /** - * @param {string} name Name of module to find. - * @param {string} moduleName1 Another name of module to find. - * @param {string} moduleName2 Yet another name of module to find. - * @returns - */ - function findModule(name, moduleName1, moduleName2) { - // If the module name contains `?`, then its a webpack loader that can be ignored. - if (name.includes('loader') && (name.includes('?') || name.includes('!'))) { - return; - } - const matchedModules = modulesInPackageLock.filter( - (dependency) => dependency === moduleName2 || dependency === moduleName1 || dependency === name - ); - switch (matchedModules.length) { - case 0: - throwAndLogError( - `Dependency not found in package-lock.json, Dependency = '${name}, ${moduleName1}, ${moduleName2}'` - ); - break; - case 1: - break; - default: { - throwAndLogError(`Exact Dependency not found in package-lock.json, Dependency = '${name}'`); - } - } - - const moduleName = matchedModules[0]; - if (existingModulesCopy.has(moduleName)) { - existingModulesCopy.delete(moduleName); - } - if (existingModules.has(moduleName) || newModules.has(moduleName)) { - return; - } - newModules.add(moduleName); - } - - /** - * Processes webpack stat Modules. - * - * @param modules { Array. } - * @returns - */ - function processModules(modules) { - (modules || []).forEach(processModule); - } - - /** - * Processes a webpack stat Module. - * - * @param module { import("webpack").Stats.FnModules } - * @returns - */ - function processModule(module) { - const name = module.name; - - if (!name.includes('/node_modules')) { - processReasons(module.reasons); - processModules(module.modules); - return; - } - - let nameWithoutNodeModules = name.substring('/node_modules'.length); - // Special case expose-loader. - if (nameWithoutNodeModules.startsWith('/expose-loader')) { - nameWithoutNodeModules = nameWithoutNodeModules.substring( - nameWithoutNodeModules.indexOf('/node_modules') + '/node_modules'.length - ); - } - - let moduleName1 = nameWithoutNodeModules.split('/')[1]; - moduleName1 = moduleName1.endsWith('!.') ? moduleName1.substring(0, moduleName1.length - 2) : moduleName1; - const moduleName2 = `${nameWithoutNodeModules.split('/')[1]}/${nameWithoutNodeModules.split('/')[2]}`; - - findModule(name, moduleName1, moduleName2); - - processModules(module.modules); - processReasons(module.reasons); - } - - /** - * Processes a origin or a reason object from a webpack stat. - * - * @param {*} origin - * @returns - */ - function processOriginOrReason(origin) { - if (!origin || !origin.name) { - return; - } - const name = origin.name; - if (!name.includes('/node_modules')) { - processReasons(origin.reasons); - return; - } - - let nameWithoutNodeModules = name.substring('/node_modules'.length); - // Special case expose-loader. - if (nameWithoutNodeModules.startsWith('/expose-loader')) { - nameWithoutNodeModules = nameWithoutNodeModules.substring( - nameWithoutNodeModules.indexOf('/node_modules') + '/node_modules'.length - ); - } - - let moduleName1 = nameWithoutNodeModules.split('/')[1]; - moduleName1 = moduleName1.endsWith('!.') ? moduleName1.substring(0, moduleName1.length - 2) : moduleName1; - const moduleName2 = `${nameWithoutNodeModules.split('/')[1]}/${nameWithoutNodeModules.split('/')[2]}`; - - findModule(name, moduleName1, moduleName2); - - processReasons(origin.reasons); - } - - /** - * Processes the `reasons` property of a webpack stat module object. - * - * @param {*} reasons - */ - function processReasons(reasons) { - reasons = (reasons || []) - .map((reason) => reason.userRequest) - .filter((item) => typeof item === 'string' && !item.startsWith('.')); - reasons.forEach((item) => processOriginOrReason(item)); - } - - await processWebpackStatFile(path.join(__dirname, 'out', 'datascience-ui', 'notebook', 'notebook.stats.json')); - await processWebpackStatFile(path.join(__dirname, 'out', 'datascience-ui', 'viewers', 'viewers.stats.json')); - - const errorMessages = []; - if (newModules.size > 0) { - errorMessages.push( - `Add the untracked dependencies '${Array.from(newModules.values()).join( - ', ' - )}' to ${existingModulesFileName}` - ); - } - if (existingModulesCopy.size > 0) { - errorMessages.push( - `Remove the unused '${Array.from(existingModulesCopy.values()).join( - ', ' - )}' dependencies from ${existingModulesFileName}` - ); - } - if (errorMessages.length > 0) { - throwAndLogError(errorMessages.join('\n')); - } -} -function throwAndLogError(message) { - if (message.length > 0) { - console.error(colors.red(message)); - throw new Error(message); - } -} function hasNativeDependencies() { let nativeDependencies = nativeDependencyChecker.check(path.join(__dirname, 'node_modules')); if (!Array.isArray(nativeDependencies) || nativeDependencies.length === 0) { @@ -721,15 +271,15 @@ function hasNativeDependencies() { const dependencies = JSON.parse(spawn.sync('npm', ['ls', '--json', '--prod']).stdout.toString()); const jsonProperties = Object.keys(flat.flatten(dependencies)); nativeDependencies = _.flatMap(nativeDependencies, (item) => - path.dirname(item.substring(item.indexOf('node_modules') + 'node_modules'.length)).split(path.sep) + path.dirname(item.substring(item.indexOf('node_modules') + 'node_modules'.length)).split(path.sep), ) .filter((item) => item.length > 0) - .filter((item) => !item.includes('zeromq')) // This is a known native. Allow this one for now + .filter((item) => item !== 'fsevents') .filter( (item) => jsonProperties.findIndex((flattenedDependency) => - flattenedDependency.endsWith(`dependencies.${item}.version`) - ) >= 0 + flattenedDependency.endsWith(`dependencies.${item}.version`), + ) >= 0, ); if (nativeDependencies.length > 0) { console.error('Native dependencies detected', nativeDependencies); @@ -737,443 +287,3 @@ function hasNativeDependencies() { } return false; } - -/** - * @typedef {Object} hygieneOptions - creates a new type named 'SpecialType' - * @property {'changes'|'staged'|'all'|'compile'|'diffMaster'} [mode=] - Mode. - * @property {boolean=} skipIndentationCheck - Skip indentation checks. - * @property {boolean=} skipFormatCheck - Skip format checks. - * @property {boolean=} skipLinter - Skip linter. - */ - -/** - * - * @param {hygieneOptions} options - */ -function getTsProject(options) { - return ts.createProject('tsconfig.json'); -} - -let configuration; -/** - * - * @param {hygieneOptions} options - */ -function getLinter(options) { - configuration = configuration ? configuration : tslint.Configuration.findConfiguration(null, '.'); - const program = tslint.Linter.createProgram('./tsconfig.json'); - const linter = new tslint.Linter({ formatter: 'json' }, program); - return { linter, configuration }; -} -let compilationInProgress = false; -let reRunCompilation = false; -/** - * - * @param {hygieneOptions} options - * @returns {NodeJS.ReadWriteStream} - */ -const hygiene = (options, done) => { - done = done || noop; - if (compilationInProgress) { - reRunCompilation = true; - return done(); - } - const fileListToProcess = options.mode === 'compile' ? undefined : getFileListToProcess(options); - if ( - Array.isArray(fileListToProcess) && - fileListToProcess !== all && - fileListToProcess.filter((item) => item.endsWith('.ts')).length === 0 - ) { - return done(); - } - - const started = new Date().getTime(); - compilationInProgress = true; - options = options || {}; - let errorCount = 0; - - const indentation = es.through(function (file) { - file.contents - .toString('utf8') - .split(/\r\n|\r|\n/) - .forEach((line, i) => { - if (/^\s*$/.test(line) || /^\S+.*$/.test(line)) { - // Empty or whitespace lines are OK. - } else if (/^(\s\s\s\s)+.*/.test(line)) { - // Good indent. - } else if (/^[\t]+.*/.test(line)) { - console.error( - file.relative + - '(' + - (i + 1) + - ',1): Bad whitespace indentation (use 4 spaces instead of tabs or other)' - ); - errorCount++; - } - }); - - this.emit('data', file); - }); - - const formatOptions = { verify: true, tsconfig: true, tslint: true, editorconfig: true, tsfmt: true }; - const formatting = es.map(function (file, cb) { - tsfmt - .processString(file.path, file.contents.toString('utf8'), formatOptions) - .then((result) => { - if (result.error) { - let message = result.message.trim(); - let formattedMessage = ''; - if (message.startsWith(__dirname)) { - message = message.substr(__dirname.length); - message = message.startsWith(path.sep) ? message.substr(1) : message; - const index = message.indexOf('.ts '); - if (index === -1) { - formattedMessage = colors.red(message); - } else { - const file = message.substr(0, index + 3); - const errorMessage = message.substr(index + 4).trim(); - formattedMessage = `${colors.red(file)} ${errorMessage}`; - } - } else { - formattedMessage = colors.red(message); - } - console.error(formattedMessage); - errorCount++; - } - cb(null, file); - }) - .catch(cb); - }); - - let reportedLinterFailures = []; - /** - * Report the linter failures - * @param {any[]} failures - */ - function reportLinterFailures(failures) { - return ( - failures - .map((failure) => { - const name = failure.name || failure.fileName; - const position = failure.startPosition; - const line = position.lineAndCharacter ? position.lineAndCharacter.line : position.line; - const character = position.lineAndCharacter - ? position.lineAndCharacter.character - : position.character; - - // Output in format similar to tslint for the linter to pickup. - const message = `ERROR: (${failure.ruleName}) ${relative(__dirname, name)}[${line + 1}, ${ - character + 1 - }]: ${failure.failure}`; - if (reportedLinterFailures.indexOf(message) === -1) { - console.error(message); - reportedLinterFailures.push(message); - return true; - } else { - return false; - } - }) - .filter((reported) => reported === true).length > 0 - ); - } - - const { linter, configuration } = getLinter(options); - const tsl = es.through(function (file) { - const contents = file.contents.toString('utf8'); - if (isCI) { - // Don't print anything to the console, we'll do that. - console.log('.'); - } - // Yes this is a hack, but tslinter doesn't provide an option to prevent this. - const oldWarn = console.warn; - console.warn = () => {}; - linter.failures = []; - linter.fixes = []; - linter.lint(file.relative, contents, configuration.results); - console.warn = oldWarn; - const result = linter.getResult(); - if (result.failureCount > 0 || result.errorCount > 0) { - const reported = reportLinterFailures(result.failures); - if (result.failureCount && reported) { - errorCount += result.failureCount; - } - if (result.errorCount && reported) { - errorCount += result.errorCount; - } - } - this.emit('data', file); - }); - - const tsFiles = []; - const tscFilesTracker = es.through(function (file) { - tsFiles.push(file.path.replace(/\\/g, '/')); - tsFiles.push(file.path); - this.emit('data', file); - }); - - const tsProject = getTsProject(options); - - const tsc = function () { - function customReporter() { - return { - error: function (error, typescript) { - const fullFilename = error.fullFilename || ''; - const relativeFilename = error.relativeFilename || ''; - if (tsFiles.findIndex((file) => fullFilename === file || relativeFilename === file) === -1) { - return; - } - console.error(`Error: ${error.message}`); - errorCount += 1; - }, - finish: function () { - // forget the summary. - console.log('Finished compilation'); - } - }; - } - const reporter = customReporter(); - return tsProject(reporter); - }; - - const files = options.mode === 'compile' ? tsProject.src() : getFilesToProcess(fileListToProcess); - const dest = options.mode === 'compile' ? './out' : '.'; - let result = files.pipe(filter((f) => f && f.stat && !f.stat.isDirectory())); - - if (!options.skipIndentationCheck) { - result = result.pipe(filter(indentationFilter)).pipe(indentation); - } - - result = result.pipe(filter(tslintFilter)); - - if (!options.skipFormatCheck) { - // result = result - // .pipe(formatting); - } - - if (!options.skipLinter) { - result = result.pipe(tsl); - } - let totalTime = 0; - result = result - .pipe(tscFilesTracker) - .pipe(sourcemaps.init()) - .pipe(tsc()) - .pipe( - sourcemaps.mapSources(function (sourcePath, file) { - let tsFileName = path.basename(file.path).replace(/js$/, 'ts'); - const qualifiedSourcePath = path.dirname(file.path).replace('out/', 'src/').replace('out\\', 'src\\'); - if (!fs.existsSync(path.join(qualifiedSourcePath, tsFileName))) { - const tsxFileName = path.basename(file.path).replace(/js$/, 'tsx'); - if (!fs.existsSync(path.join(qualifiedSourcePath, tsxFileName))) { - console.error(`ERROR: (source-maps) ${file.path}[1,1]: Source file not found`); - } else { - tsFileName = tsxFileName; - } - } - return path.join(path.relative(path.dirname(file.path), qualifiedSourcePath), tsFileName); - }) - ) - .pipe(sourcemaps.write('.', { includeContent: false })) - .pipe(gulp.dest(dest)) - .pipe( - es.through(null, function () { - if (errorCount > 0) { - const errorMessage = `Hygiene failed with errors 👎 . Check 'gulpfile.js' (completed in ${ - new Date().getTime() - started - }ms).`; - console.error(colors.red(errorMessage)); - exitHandler(options); - } else { - console.log( - colors.green( - `Hygiene passed with 0 errors 👍 (completed in ${new Date().getTime() - started}ms).` - ) - ); - } - // Reset error counter. - errorCount = 0; - reportedLinterFailures = []; - compilationInProgress = false; - if (reRunCompilation) { - reRunCompilation = false; - setTimeout(() => { - hygiene(options, done); - }, 10); - } - done(); - this.emit('end'); - }) - ) - .on('error', (ex) => { - exitHandler(options, ex); - done(); - }); - - return result; -}; - -/** - * @typedef {Object} runOptions - * @property {boolean=} exitOnError - Exit on error. - * @property {'changes'|'staged'|'all'} [mode=] - Mode. - * @property {string[]=} files - Optional list of files to be modified. - * @property {boolean=} skipIndentationCheck - Skip indentation checks. - * @property {boolean=} skipFormatCheck - Skip format checks. - * @property {boolean=} skipLinter - Skip linter. - * @property {boolean=} watch - Watch mode. - */ - -/** - * Run the linters. - * @param {runOptions} options - * @param {Error} ex - */ -function exitHandler(options, ex) { - console.error(); - if (ex) { - console.error(ex); - console.error(colors.red(ex)); - } - if (options.exitOnError) { - console.log('exit'); - process.exit(1); - } -} - -/** - * Run the linters. - * @param {runOptions} options - */ -function run(options, done) { - done = done || noop; - options = options ? options : {}; - options.exitOnError = typeof options.exitOnError === 'undefined' ? isCI : options.exitOnError; - process.once('unhandledRejection', (reason, p) => { - console.log('Unhandled Rejection at: Promise', p, 'reason:', reason); - exitHandler(options); - }); - - // Clear screen each time - console.log('\x1Bc'); - const startMessage = `Hygiene starting`; - console.log(colors.blue(startMessage)); - - hygiene(options, done); -} - -function git(args) { - let result = cp.spawnSync('git', args, { encoding: 'utf-8' }); - return result.output.join('\n'); -} - -function getStagedFilesSync() { - const out = git(['diff', '--cached', '--name-only']); - return out.split(/\r?\n/).filter((l) => !!l); -} -function getAddedFilesSync() { - const out = git(['status', '-u', '-s']); - return out - .split(/\r?\n/) - .filter((l) => !!l) - .filter((l) => _.intersection(['A', '?', 'U'], l.substring(0, 2).trim().split('')).length > 0) - .map((l) => path.join(__dirname, l.substring(2).trim())); -} -function getAzureDevOpsVarValue(varName) { - return process.env[varName.replace(/\./g, '_').toUpperCase()]; -} -function getModifiedFilesSync() { - if (isCI) { - const isAzurePR = getAzureDevOpsVarValue('System.PullRequest.SourceBranch') !== undefined; - const isTravisPR = process.env.TRAVIS_PULL_REQUEST !== undefined && process.env.TRAVIS_PULL_REQUEST !== 'true'; - if (!isAzurePR && !isTravisPR) { - return []; - } - const targetBranch = process.env.TRAVIS_BRANCH || getAzureDevOpsVarValue('System.PullRequest.TargetBranch'); - if (targetBranch !== 'master') { - return []; - } - - const repo = process.env.TRAVIS_REPO_SLUG || getAzureDevOpsVarValue('Build.Repository.Name'); - const originOrUpstream = - repo.toUpperCase() === 'MICROSOFT/VSCODE-PYTHON' || - repo.toUpperCase() === 'VSCODE-PYTHON-DATASCIENCE/VSCODE-PYTHON' - ? 'origin' - : 'upstream'; - - // If on CI, get a list of modified files comparing against - // PR branch and master of current (assumed 'origin') repo. - try { - cp.execSync(`git remote set-branches --add ${originOrUpstream} master`, { - encoding: 'utf8', - cwd: __dirname - }); - cp.execSync('git fetch', { encoding: 'utf8', cwd: __dirname }); - } catch (ex) { - return []; - } - const cmd = `git diff --name-only HEAD ${originOrUpstream}/master`; - console.info(cmd); - const out = cp.execSync(cmd, { encoding: 'utf8', cwd: __dirname }); - return out - .split(/\r?\n/) - .filter((l) => !!l) - .filter((l) => l.length > 0) - .map((l) => l.trim().replace(/\//g, path.sep)) - .map((l) => path.join(__dirname, l)); - } else { - const out = cp.execSync('git status -u -s', { encoding: 'utf8' }); - return out - .split(/\r?\n/) - .filter((l) => !!l) - .filter( - (l) => _.intersection(['M', 'A', 'R', 'C', 'U', '?'], l.substring(0, 2).trim().split('')).length > 0 - ) - .map((l) => path.join(__dirname, l.substring(2).trim().replace(/\//g, path.sep))); - } -} - -function getDifferentFromMasterFilesSync() { - const out = git(['diff', '--name-status', 'master']); - return out - .split(/\r?\n/) - .filter((l) => !!l) - .map((l) => path.join(__dirname, l.substring(2).trim())); -} - -/** - * @param {hygieneOptions} options - */ -function getFilesToProcess(fileList) { - const gulpSrcOptions = { base: '.' }; - return gulp.src(fileList, gulpSrcOptions); -} - -/** - * @param {hygieneOptions} options - */ -function getFileListToProcess(options) { - const mode = options ? options.mode : 'all'; - const gulpSrcOptions = { base: '.' }; - - // If we need only modified files, then filter the glob. - if (options && options.mode === 'changes') { - return getModifiedFilesSync().filter((f) => fs.existsSync(f)); - } - - if (options && options.mode === 'staged') { - return getStagedFilesSync().filter((f) => fs.existsSync(f)); - } - - if (options && options.mode === 'diffMaster') { - return getDifferentFromMasterFilesSync().filter((f) => fs.existsSync(f)); - } - - return all; -} - -exports.hygiene = hygiene; - -// this allows us to run hygiene via CLI (e.g. `node gulfile.js`). -if (require.main === module) { - run({ exitOnError: true, mode: 'staged' }, () => {}); -} diff --git a/images/ConfigureDebugger.gif b/images/ConfigureDebugger.gif index 359e1a7493fd..41113d65896d 100644 Binary files a/images/ConfigureDebugger.gif and b/images/ConfigureDebugger.gif differ diff --git a/images/ConfigureTests.gif b/images/ConfigureTests.gif index 6da0100d593b..38ae2db551e1 100644 Binary files a/images/ConfigureTests.gif and b/images/ConfigureTests.gif differ diff --git a/images/InterpreterSelectionZoom.gif b/images/InterpreterSelectionZoom.gif index 576a438a7d3b..dc5db03aad3d 100644 Binary files a/images/InterpreterSelectionZoom.gif and b/images/InterpreterSelectionZoom.gif differ diff --git a/images/OpenOrCreateNotebook.gif b/images/OpenOrCreateNotebook.gif index 98256a97f190..a0957d415d7d 100644 Binary files a/images/OpenOrCreateNotebook.gif and b/images/OpenOrCreateNotebook.gif differ diff --git a/images/addIcon.PNG b/images/addIcon.PNG new file mode 100644 index 000000000000..8027e617e9ec Binary files /dev/null and b/images/addIcon.PNG differ diff --git a/images/codeIcon.PNG b/images/codeIcon.PNG new file mode 100644 index 000000000000..7ad46cee077f Binary files /dev/null and b/images/codeIcon.PNG differ diff --git a/images/dataViewerIcon.PNG b/images/dataViewerIcon.PNG new file mode 100644 index 000000000000..6848c600794d Binary files /dev/null and b/images/dataViewerIcon.PNG differ diff --git a/images/dataviewer.gif b/images/dataviewer.gif new file mode 100644 index 000000000000..ce0c81676c09 Binary files /dev/null and b/images/dataviewer.gif differ diff --git a/images/exportIcon.PNG b/images/exportIcon.PNG new file mode 100644 index 000000000000..e5e588040ee6 Binary files /dev/null and b/images/exportIcon.PNG differ diff --git a/images/kernelchange.gif b/images/kernelchange.gif new file mode 100644 index 000000000000..d2b753b84c09 Binary files /dev/null and b/images/kernelchange.gif differ diff --git a/images/markdownIcon.PNG b/images/markdownIcon.PNG new file mode 100644 index 000000000000..04e5d67749db Binary files /dev/null and b/images/markdownIcon.PNG differ diff --git a/images/playIcon.PNG b/images/playIcon.PNG new file mode 100644 index 000000000000..60ae4a2051df Binary files /dev/null and b/images/playIcon.PNG differ diff --git a/images/plotViewerIcon.PNG b/images/plotViewerIcon.PNG new file mode 100644 index 000000000000..e8ecf0d97b5e Binary files /dev/null and b/images/plotViewerIcon.PNG differ diff --git a/images/plotviewer.gif b/images/plotviewer.gif new file mode 100644 index 000000000000..a3c438b761e0 Binary files /dev/null and b/images/plotviewer.gif differ diff --git a/images/remoteserver.gif b/images/remoteserver.gif new file mode 100644 index 000000000000..f979d557aa6b Binary files /dev/null and b/images/remoteserver.gif differ diff --git a/images/runbyline.gif b/images/runbyline.gif new file mode 100644 index 000000000000..1c0679f9a458 Binary files /dev/null and b/images/runbyline.gif differ diff --git a/images/savetopythonfile.png b/images/savetopythonfile.png new file mode 100644 index 000000000000..e4a7f08d3db0 Binary files /dev/null and b/images/savetopythonfile.png differ diff --git a/images/variableExplorerIcon.PNG b/images/variableExplorerIcon.PNG new file mode 100644 index 000000000000..f8363dda9de4 Binary files /dev/null and b/images/variableExplorerIcon.PNG differ diff --git a/images/variableexplorer.png b/images/variableexplorer.png new file mode 100644 index 000000000000..31197571b796 Binary files /dev/null and b/images/variableexplorer.png differ diff --git a/news/.vscode/settings.json b/news/.vscode/settings.json deleted file mode 100644 index e70c9f336c57..000000000000 --- a/news/.vscode/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "python.jediEnabled": false, - "python.formatting.provider": "black", - "editor.formatOnSave": true, - "python.testing.pytestArgs": ["."], - "python.testing.unittestEnabled": false, - "python.testing.nosetestsEnabled": false, - "python.testing.pytestEnabled": true -} diff --git a/news/1 Enhancements/11052.md b/news/1 Enhancements/11052.md deleted file mode 100644 index a76b026fca44..000000000000 --- a/news/1 Enhancements/11052.md +++ /dev/null @@ -1 +0,0 @@ -Do a one-off transfer of existing values for `python.pythonPath` setting to new Interpreter storage if in DeprecatePythonPath experiment. diff --git a/news/1 Enhancements/11083.md b/news/1 Enhancements/11083.md deleted file mode 100644 index fc2a2474bfdc..000000000000 --- a/news/1 Enhancements/11083.md +++ /dev/null @@ -1 +0,0 @@ -Ensure the language server can query pythonPath when in the Deprecate PythonPath experiment. diff --git a/news/1 Enhancements/README.md b/news/1 Enhancements/README.md deleted file mode 100644 index ecc51777759d..000000000000 --- a/news/1 Enhancements/README.md +++ /dev/null @@ -1 +0,0 @@ -Changes that add new features. diff --git a/news/2 Fixes/10006.md b/news/2 Fixes/10006.md deleted file mode 100644 index bbd18ba9b550..000000000000 --- a/news/2 Fixes/10006.md +++ /dev/null @@ -1 +0,0 @@ -Fix ctrl+enter on markdown cells. Now they render. diff --git a/news/2 Fixes/10356.md b/news/2 Fixes/10356.md deleted file mode 100644 index 4c557190d24c..000000000000 --- a/news/2 Fixes/10356.md +++ /dev/null @@ -1 +0,0 @@ -Cancelling the prompt to restart the kernel should not leave the toolbar buttons disabled. diff --git a/news/2 Fixes/10370.md b/news/2 Fixes/10370.md deleted file mode 100644 index f9fa39724663..000000000000 --- a/news/2 Fixes/10370.md +++ /dev/null @@ -1 +0,0 @@ -Getting environment variables of activated environments should ignore the setting `python.terminal.activateEnvironment`. diff --git a/news/2 Fixes/10464.md b/news/2 Fixes/10464.md deleted file mode 100644 index 97915a54d313..000000000000 --- a/news/2 Fixes/10464.md +++ /dev/null @@ -1 +0,0 @@ -Make spacing of icons on notebook toolbars match spacing on other VS code toolbars. \ No newline at end of file diff --git a/news/2 Fixes/10465.md b/news/2 Fixes/10465.md deleted file mode 100644 index 5b8c805c537d..000000000000 --- a/news/2 Fixes/10465.md +++ /dev/null @@ -1 +0,0 @@ -Make jupyter server status centered in the UI and use the same font as the rest of VS code. \ No newline at end of file diff --git a/news/2 Fixes/10521.md b/news/2 Fixes/10521.md deleted file mode 100644 index b24b95c3a928..000000000000 --- a/news/2 Fixes/10521.md +++ /dev/null @@ -1 +0,0 @@ -Show notebook path when listing remote kernels. \ No newline at end of file diff --git a/news/2 Fixes/10552.md b/news/2 Fixes/10552.md deleted file mode 100644 index 0e41803a83ac..000000000000 --- a/news/2 Fixes/10552.md +++ /dev/null @@ -1 +0,0 @@ -Allow filtering on '0' for the Data Viewer. \ No newline at end of file diff --git a/news/2 Fixes/10587.md b/news/2 Fixes/10587.md deleted file mode 100644 index 2dde39578bf3..000000000000 --- a/news/2 Fixes/10587.md +++ /dev/null @@ -1 +0,0 @@ -Allow interrupting the kernel more than once. diff --git a/news/2 Fixes/10708.md b/news/2 Fixes/10708.md deleted file mode 100644 index 1e716528df35..000000000000 --- a/news/2 Fixes/10708.md +++ /dev/null @@ -1 +0,0 @@ -Make error links in exception tracebacks support multiple cells in the stack and extra spaces. \ No newline at end of file diff --git a/news/2 Fixes/10785.md b/news/2 Fixes/10785.md deleted file mode 100644 index 91d258f93eb1..000000000000 --- a/news/2 Fixes/10785.md +++ /dev/null @@ -1 +0,0 @@ -Add channel property onto returned ZMQ messages. \ No newline at end of file diff --git a/news/2 Fixes/10825.md b/news/2 Fixes/10825.md deleted file mode 100644 index 50279c97644e..000000000000 --- a/news/2 Fixes/10825.md +++ /dev/null @@ -1 +0,0 @@ -Fix problem with shape not being computed for some types in the variable explorer. \ No newline at end of file diff --git a/news/2 Fixes/10884.md b/news/2 Fixes/10884.md deleted file mode 100644 index a4582f1a0b9c..000000000000 --- a/news/2 Fixes/10884.md +++ /dev/null @@ -1 +0,0 @@ -Enable cell related commands when a Python file is already open. diff --git a/news/2 Fixes/10893.md b/news/2 Fixes/10893.md deleted file mode 100644 index 2c5f0d0820be..000000000000 --- a/news/2 Fixes/10893.md +++ /dev/null @@ -1 +0,0 @@ -Performa validation of interpreter only when a Notebook is opened instead of when extension activates. diff --git a/news/2 Fixes/10942.md b/news/2 Fixes/10942.md deleted file mode 100644 index 6107fa4e5525..000000000000 --- a/news/2 Fixes/10942.md +++ /dev/null @@ -1 +0,0 @@ -Fix issue with parsing long conda environment names. diff --git a/news/2 Fixes/10952.md b/news/2 Fixes/10952.md deleted file mode 100644 index ad13a0db7e7b..000000000000 --- a/news/2 Fixes/10952.md +++ /dev/null @@ -1 +0,0 @@ -Scrolling in cells doesn't happen on new line. \ No newline at end of file diff --git a/news/2 Fixes/10971.md b/news/2 Fixes/10971.md deleted file mode 100644 index 41f9018e5807..000000000000 --- a/news/2 Fixes/10971.md +++ /dev/null @@ -1 +0,0 @@ -Fix perf problems after running the interactive window for an extended period of time. \ No newline at end of file diff --git a/news/2 Fixes/11040.md b/news/2 Fixes/11040.md deleted file mode 100644 index 128c8adde13b..000000000000 --- a/news/2 Fixes/11040.md +++ /dev/null @@ -1 +0,0 @@ -Ensure images in workspace folder are supported within markdown cells in a `Notebook`. diff --git a/news/2 Fixes/11060.md b/news/2 Fixes/11060.md deleted file mode 100644 index 8459f2a194ac..000000000000 --- a/news/2 Fixes/11060.md +++ /dev/null @@ -1 +0,0 @@ -Make sure ipywidgets have a white background so they display in dark themes. \ No newline at end of file diff --git a/news/2 Fixes/11065.md b/news/2 Fixes/11065.md deleted file mode 100644 index fda10f86fcb1..000000000000 --- a/news/2 Fixes/11065.md +++ /dev/null @@ -1 +0,0 @@ -Hide progress indicator once `Interactive Window` has loaded. diff --git a/news/2 Fixes/11094.md b/news/2 Fixes/11094.md deleted file mode 100644 index b5cccbd89765..000000000000 --- a/news/2 Fixes/11094.md +++ /dev/null @@ -1 +0,0 @@ -Arrowing down through cells put the cursor in the wrong spot. \ No newline at end of file diff --git a/news/2 Fixes/11151.md b/news/2 Fixes/11151.md deleted file mode 100644 index 154f0f91da08..000000000000 --- a/news/2 Fixes/11151.md +++ /dev/null @@ -1 +0,0 @@ -Fix problem with opening a notebook in jupyter after saving in VS code. \ No newline at end of file diff --git a/news/2 Fixes/11157.md b/news/2 Fixes/11157.md deleted file mode 100644 index cffa03b0eeba..000000000000 --- a/news/2 Fixes/11157.md +++ /dev/null @@ -1 +0,0 @@ -Fix saving to PDF for viewed plots. \ No newline at end of file diff --git a/news/2 Fixes/11160.md b/news/2 Fixes/11160.md deleted file mode 100644 index e7cc66d6be42..000000000000 --- a/news/2 Fixes/11160.md +++ /dev/null @@ -1 +0,0 @@ -Fix CTRL+Z and Z for undo on notebooks. \ No newline at end of file diff --git a/news/2 Fixes/11238.md b/news/2 Fixes/11238.md deleted file mode 100644 index 062b897485f0..000000000000 --- a/news/2 Fixes/11238.md +++ /dev/null @@ -1 +0,0 @@ -Fix scrolling in a notebook whenever resizing or opening. \ No newline at end of file diff --git a/news/2 Fixes/11239.md b/news/2 Fixes/11239.md deleted file mode 100644 index fc4d1cdea102..000000000000 --- a/news/2 Fixes/11239.md +++ /dev/null @@ -1 +0,0 @@ -Show unhandled widget messages in the jupyter output window. \ No newline at end of file diff --git a/news/2 Fixes/11245.md b/news/2 Fixes/11245.md deleted file mode 100644 index e15d31a3a9ce..000000000000 --- a/news/2 Fixes/11245.md +++ /dev/null @@ -1 +0,0 @@ -Warn when using a version of the widget `qgrid` greater than `1.1.1` with the recommendation to downgrade to `1.1.1`. diff --git a/news/2 Fixes/README.md b/news/2 Fixes/README.md deleted file mode 100644 index cc5e1020961d..000000000000 --- a/news/2 Fixes/README.md +++ /dev/null @@ -1 +0,0 @@ -Changes that fix broken behaviour. diff --git a/news/3 Code Health/10447.md b/news/3 Code Health/10447.md deleted file mode 100644 index ae4662950680..000000000000 --- a/news/3 Code Health/10447.md +++ /dev/null @@ -1 +0,0 @@ -Enable the `Selft Cert` tests for Notebooks. diff --git a/news/3 Code Health/10809.md b/news/3 Code Health/10809.md deleted file mode 100644 index 1f74750551b1..000000000000 --- a/news/3 Code Health/10809.md +++ /dev/null @@ -1 +0,0 @@ -Remove deprecated telemetry and old way of searching for `Jupyter`. diff --git a/news/3 Code Health/README.md b/news/3 Code Health/README.md deleted file mode 100644 index 10619f41f3a4..000000000000 --- a/news/3 Code Health/README.md +++ /dev/null @@ -1 +0,0 @@ -Changes that should not be user-facing. diff --git a/news/README.md b/news/README.md deleted file mode 100644 index f26d25030fab..000000000000 --- a/news/README.md +++ /dev/null @@ -1,62 +0,0 @@ -# News - -Our changelog is automatically generated from individual news entry files. -This alleviates the burden of having to go back and try to figure out -what changed in a release. It also helps tie pull requests back to the -issue(s) it addresses. Finally, it avoids merge conflicts between pull requests -which would occur if multiple pull requests tried to edit the changelog. - -If a change does not warrant a news entry, the `skip news` label can be added -to a pull request to signal this fact. - -## Entries - -Each news entry is represented by a Markdown file that contains the -relevant details of what changed. The file name of the news entry is -the issue that corresponds to the change along with an optional nonce in -case a single issue corresponds to multiple changes. The directory -the news entry is saved in specifies what section of the changelog the -change corresponds to. External contributors should also make sure to -thank themselves for taking the time and effort to contribute. - -As an example, a change corresponding to a bug reported in issue #42 -would be saved in the `1 Fixes` directory and named `42.md` -(or `42-nonce_value.md` if there was a need for multiple entries -regarding issue #42) and could contain the following: - -```markdown -[Answer]() -to the Ultimate Question of Life, the Universe, and Everything! -(thanks [Don Jaymanne](https://github.com/donjayamanne/)) -``` - -This would then be made into an entry in the changelog that was in the -`Fixes` section, contained the details as found in the file, and tied -to issue #42. - -## Generating the changelog - -The `announce` script can do 3 possible things: - -1. Validate that the changelog _could_ be successfully generated -2. Generate the changelog entries -3. Generate the changelog entries **and** `git-rm` the news entry files - -The first option is used in CI to make sure any added news entries -will not cause trouble at release time. The second option is for -filling in the changelog for interim releases, e.g. a beta release. -The third option is for final releases that get published to the -[VS Code marketplace](https://marketplace.visualstudio.com/VSCode). - -For options 2 & 3, the changelog is sent to stdout so it can be temporarily -saved to a file: - -```sh -python3 news > entry.txt -``` - -It can also be redirected to an editor buffer, e.g.: - -```sh -python3 news | code-insiders - -``` diff --git a/news/__main__.py b/news/__main__.py deleted file mode 100644 index b496ec1d0c8c..000000000000 --- a/news/__main__.py +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import runpy - -runpy.run_module('announce', run_name='__main__', alter_sys=True) diff --git a/news/announce.py b/news/announce.py deleted file mode 100644 index d4d7dd1cfd66..000000000000 --- a/news/announce.py +++ /dev/null @@ -1,193 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -"""Generate the changelog. - -Usage: announce [--dry_run | --interim | --final] [--update=] [] - -""" -import dataclasses -import datetime -import enum -import json -import operator -import os -import pathlib -import re -import subprocess -import sys - -import docopt - - -FILENAME_RE = re.compile(r"(?P\d+)(?P-\S+)?\.md") - - -@dataclasses.dataclass -class NewsEntry: - """Representation of a news entry.""" - - issue_number: int - description: str - path: pathlib.Path - - -def news_entries(directory): - """Yield news entries in the directory. - - Entries are sorted by issue number. - - """ - entries = [] - for path in directory.iterdir(): - if path.name == "README.md": - continue - match = FILENAME_RE.match(path.name) - if match is None: - raise ValueError(f"{path} has a bad file name") - issue = int(match.group("issue")) - try: - entry = path.read_text("utf-8") - except UnicodeDecodeError as exc: - raise ValueError(f"'{path}' is not encoded as UTF-8") from exc - if "\ufeff" in entry: - raise ValueError(f"'{path}' contains the BOM") - entries.append(NewsEntry(issue, entry, path)) - entries.sort(key=operator.attrgetter("issue_number")) - yield from entries - - -@dataclasses.dataclass -class SectionTitle: - """Create a data object for a section of the changelog.""" - - index: int - title: str - path: pathlib.Path - - -def sections(directory): - """Yield the sections in their appropriate order.""" - found = [] - for path in directory.iterdir(): - if not path.is_dir() or path.name.startswith((".", "_")): - continue - position, sep, title = path.name.partition(" ") - if not sep: - print( - f"directory {path.name!r} is missing a ranking; skipping", - file=sys.stderr, - ) - continue - found.append(SectionTitle(int(position), title, path)) - return sorted(found, key=operator.attrgetter("index")) - - -def gather(directory): - """Gather all the entries together.""" - data = [] - for section in sections(directory): - data.append((section, list(news_entries(section.path)))) - return data - - -def entry_markdown(entry): - """Generate the Markdown for the specified entry.""" - enumerated_item = "1. " - indent = " " * len(enumerated_item) - issue_url = ( - f"https://github.com/Microsoft/vscode-python/issues/{entry.issue_number}" - ) - issue_md = f"([#{entry.issue_number}]({issue_url}))" - entry_lines = entry.description.strip().splitlines() - formatted_lines = [f"{enumerated_item}{entry_lines[0]}"] - formatted_lines.extend(f"{indent}{line}" for line in entry_lines[1:]) - formatted_lines.append(f"{indent}{issue_md}") - return "\n".join(formatted_lines) - - -def changelog_markdown(data): - """Generate the Markdown for the release.""" - changelog = [] - for section, entries in data: - changelog.append(f"### {section.title}") - changelog.append("") - changelog.extend(map(entry_markdown, entries)) - changelog.append("") - return "\n".join(changelog) - - -def git_rm(path): - """Run git-rm on the path.""" - status = subprocess.run( - ["git", "rm", os.fspath(path.resolve())], - shell=False, - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - ) - try: - status.check_returncode() - except Exception: - print(status.stdout, file=sys.stderr) - raise - - -def cleanup(data): - """Remove news entries from git and disk.""" - for section, entries in data: - for entry in entries: - git_rm(entry.path) - - -class RunType(enum.Enum): - """Possible run-time options.""" - - dry_run = 0 - interim = 1 - final = 2 - - -def complete_news(version, entry, previous_news): - """Prepend a news entry to the previous news file.""" - title, _, previous_news = previous_news.partition("\n") - title = title.strip() - previous_news = previous_news.strip() - section_title = (f"## {version} ({datetime.date.today().strftime('%d %B %Y')})" - ).replace("(0", "(") - # TODO: Insert the "Thank you!" section (in monthly releases)? - return f"{title}\n\n{section_title}\n\n{entry.strip()}\n\n\n{previous_news}" - - -def main(run_type, directory, news_file=None): - directory = pathlib.Path(directory) - data = gather(directory) - markdown = changelog_markdown(data) - if news_file: - with open(news_file, "r", encoding="utf-8") as file: - previous_news = file.read() - package_config_path = pathlib.Path(news_file).parent / "package.json" - config = json.loads(package_config_path.read_text()) - new_news = complete_news(config["version"], markdown, previous_news) - if run_type == RunType.dry_run: - print(f"would be written to {news_file}:") - print() - print(new_news) - else: - with open(news_file, "w", encoding="utf-8") as file: - file.write(new_news) - else: - print(markdown) - if run_type == RunType.final: - cleanup(data) - - -if __name__ == "__main__": - arguments = docopt.docopt(__doc__) - for possible_run_type in RunType: - if arguments[f"--{possible_run_type.name}"]: - run_type = possible_run_type - break - else: - run_type = RunType.interim - directory = arguments[""] or pathlib.Path(__file__).parent - main(run_type, directory, arguments["--update"]) diff --git a/news/requirements.in b/news/requirements.in deleted file mode 100644 index ab0e1cc5187e..000000000000 --- a/news/requirements.in +++ /dev/null @@ -1,2 +0,0 @@ -docopt -pytest diff --git a/news/requirements.txt b/news/requirements.txt deleted file mode 100644 index 676ca35073cf..000000000000 --- a/news/requirements.txt +++ /dev/null @@ -1,20 +0,0 @@ -# -# This file is autogenerated by pip-compile -# To update, run: -# -# pip-compile -# -atomicwrites==1.3.0 # via pytest -attrs==19.3.0 # via pytest -colorama==0.4.1 # via pytest -docopt==0.6.2 -importlib-metadata==1.1.0 # via pluggy, pytest -more-itertools==8.0.0 # via pytest, zipp -packaging==19.2 # via pytest -pluggy==0.13.1 # via pytest -py==1.8.0 # via pytest -pyparsing==2.4.5 # via packaging -pytest==5.3.1 -six==1.13.0 # via packaging -wcwidth==0.1.7 # via pytest -zipp==0.6.0 # via importlib-metadata diff --git a/news/test_announce.py b/news/test_announce.py deleted file mode 100644 index acc125a7c360..000000000000 --- a/news/test_announce.py +++ /dev/null @@ -1,208 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import codecs -import datetime -import pathlib - -import docopt -import pytest - -import announce as ann - - -@pytest.fixture -def directory(tmpdir): - """Fixture to create a temp directory wrapped in a pathlib.Path object.""" - return pathlib.Path(tmpdir) - - -def test_news_entry_formatting(directory): - issue = 42 - normal_entry = directory / f"{issue}.md" - nonce_entry = directory / f"{issue}-nonce.md" - body = "Hello, world!" - normal_entry.write_text(body, encoding="utf-8") - nonce_entry.write_text(body, encoding="utf-8") - results = list(ann.news_entries(directory)) - assert len(results) == 2 - for result in results: - assert result.issue_number == issue - assert result.description == body - - -def test_news_entry_sorting(directory): - oldest_entry = directory / "45.md" - newest_entry = directory / "123.md" - oldest_entry.write_text("45", encoding="utf-8") - newest_entry.write_text("123", encoding="utf-8") - results = list(ann.news_entries(directory)) - assert len(results) == 2 - assert results[0].issue_number == 45 - assert results[1].issue_number == 123 - - -def test_only_utf8(directory): - entry = directory / "42.md" - entry.write_text("Hello, world", encoding="utf-16") - with pytest.raises(ValueError): - list(ann.news_entries(directory)) - - -def test_no_bom_allowed(directory): - entry = directory / "42.md" - entry.write_bytes(codecs.BOM_UTF8 + "Hello, world".encode("utf-8")) - with pytest.raises(ValueError): - list(ann.news_entries(directory)) - - -def test_bad_news_entry_file_name(directory): - entry = directory / "bunk.md" - entry.write_text("Hello, world!") - with pytest.raises(ValueError): - list(ann.news_entries(directory)) - - -def test_news_entry_README_skipping(directory): - entry = directory / "README.md" - entry.write_text("Hello, world!") - assert len(list(ann.news_entries(directory))) == 0 - - -def test_sections_sorting(directory): - dir2 = directory / "2 Hello" - dir1 = directory / "1 World" - dir2.mkdir() - dir1.mkdir() - results = list(ann.sections(directory)) - assert [found.title for found in results] == ["World", "Hello"] - - -def test_sections_naming(directory): - (directory / "Hello").mkdir() - assert not ann.sections(directory) - - -def test_gather(directory): - fixes = directory / "2 Fixes" - fixes.mkdir() - fix1 = fixes / "1.md" - fix1.write_text("Fix 1", encoding="utf-8") - fix2 = fixes / "3.md" - fix2.write_text("Fix 2", encoding="utf-8") - enhancements = directory / "1 Enhancements" - enhancements.mkdir() - enhancement1 = enhancements / "2.md" - enhancement1.write_text("Enhancement 1", encoding="utf-8") - enhancement2 = enhancements / "4.md" - enhancement2.write_text("Enhancement 2", encoding="utf-8") - results = ann.gather(directory) - assert len(results) == 2 - section, entries = results[0] - assert section.title == "Enhancements" - assert len(entries) == 2 - assert entries[0].description == "Enhancement 1" - assert entries[1].description == "Enhancement 2" - section, entries = results[1] - assert len(entries) == 2 - assert section.title == "Fixes" - assert entries[0].description == "Fix 1" - assert entries[1].description == "Fix 2" - - -def test_entry_markdown(): - markdown = ann.entry_markdown(ann.NewsEntry(42, "Hello, world!", None)) - assert "42" in markdown - assert "Hello, world!" in markdown - assert "https://github.com/Microsoft/vscode-python/issues/42" in markdown - - -def test_changelog_markdown(): - data = [ - ( - ann.SectionTitle(1, "Enhancements", None), - [ - ann.NewsEntry(2, "Enhancement 1", None), - ann.NewsEntry(4, "Enhancement 2", None), - ], - ), - ( - ann.SectionTitle(1, "Fixes", None), - [ann.NewsEntry(1, "Fix 1", None), ann.NewsEntry(3, "Fix 2", None)], - ), - ] - markdown = ann.changelog_markdown(data) - assert "### Enhancements" in markdown - assert "### Fixes" in markdown - assert "1" in markdown - assert "Fix 1" in markdown - assert "2" in markdown - assert "Enhancement 1" in markdown - assert "https://github.com/Microsoft/vscode-python/issues/2" in markdown - assert "3" in markdown - assert "Fix 2" in markdown - assert "https://github.com/Microsoft/vscode-python/issues/3" in markdown - assert "4" in markdown - assert "Enhancement 2" in markdown - - -def test_cleanup(directory, monkeypatch): - rm_path = None - - def fake_git_rm(path): - nonlocal rm_path - rm_path = path - - monkeypatch.setattr(ann, "git_rm", fake_git_rm) - fixes = directory / "2 Fixes" - fixes.mkdir() - fix1 = fixes / "1.md" - fix1.write_text("Fix 1", encoding="utf-8") - results = ann.gather(directory) - assert len(results) == 1 - ann.cleanup(results) - section, entries = results.pop() - assert len(entries) == 1 - assert rm_path == entries[0].path - - -TITLE = "# Our most excellent changelog" -OLD_NEWS = f"""\ -## 2018.12.0 (31 Dec 2018) - -We did things! - -## 2017.11.16 (16 Nov 2017) - -We started going stuff. -""" -NEW_NEWS = """\ -We fixed all the things! - -### Code Health - -We deleted all the code to fix all the things. ;) -""" - - -def test_complete_news(): - version = "2019.3.0" - # Remove leading `0`. - date = datetime.date.today().strftime("%d %B %Y").lstrip("0") - news = ann.complete_news(version, NEW_NEWS, f"{TITLE}\n\n\n{OLD_NEWS}") - expected = f"{TITLE}\n\n## {version} ({date})\n\n{NEW_NEWS.strip()}\n\n\n{OLD_NEWS.strip()}" - assert news == expected - - -def test_cli(): - for option in ("--" + opt for opt in ["dry_run", "interim", "final"]): - args = docopt.docopt(ann.__doc__, [option]) - assert args[option] - args = docopt.docopt(ann.__doc__, ["./news"]) - assert args[""] == "./news" - args = docopt.docopt(ann.__doc__, ["--dry_run", "./news"]) - assert args["--dry_run"] - assert args[""] == "./news" - args = docopt.docopt(ann.__doc__, ["--update", "CHANGELOG.md", "./news"]) - assert args["--update"] == "CHANGELOG.md" - assert args[""] == "./news" diff --git a/noxfile.py b/noxfile.py new file mode 100644 index 000000000000..3991ee8c025a --- /dev/null +++ b/noxfile.py @@ -0,0 +1,161 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +import pathlib +import nox +import shutil +import sys +import sysconfig +import uuid + +EXT_ROOT = pathlib.Path(__file__).parent + + +def delete_dir(path: pathlib.Path, ignore_errors=None): + attempt = 0 + known = [] + while attempt < 5: + try: + shutil.rmtree(os.fspath(path), ignore_errors=ignore_errors) + return + except PermissionError as pe: + if os.fspath(pe.filename) in known: + break + print(f"Changing permissions on {pe.filename}") + os.chmod(pe.filename, 0o666) + + shutil.rmtree(os.fspath(path)) + + +@nox.session() +def install_python_libs(session: nox.Session): + requirements = [ + ("./python_files/lib/python", "./requirements.txt"), + ( + "./python_files/lib/jedilsp", + "./python_files/jedilsp_requirements/requirements.txt", + ), + ] + for target, file in requirements: + session.install( + "-t", + target, + "--no-cache-dir", + "--implementation", + "py", + "--no-deps", + "--require-hashes", + "--only-binary", + ":all:", + "-r", + file, + ) + + session.install("packaging") + session.install("debugpy") + + # Download get-pip script + session.run( + "python", + "./python_files/download_get_pip.py", + env={"PYTHONPATH": "./python_files/lib/temp"}, + ) + + if pathlib.Path("./python_files/lib/temp").exists(): + shutil.rmtree("./python_files/lib/temp") + + +@nox.session() +def native_build(session: nox.Session): + source_dir = pathlib.Path(pathlib.Path.cwd() / "python-env-tools").resolve() + dest_dir = pathlib.Path(pathlib.Path.cwd() / "python-env-tools").resolve() + + with session.cd(source_dir): + if not pathlib.Path(dest_dir / "bin").exists(): + pathlib.Path(dest_dir / "bin").mkdir() + + if not pathlib.Path(dest_dir / "bin" / ".gitignore").exists(): + pathlib.Path(dest_dir / "bin" / ".gitignore").write_text( + "*\n", encoding="utf-8" + ) + + ext = sysconfig.get_config_var("EXE") or "" + target = os.environ.get("CARGO_TARGET", None) + + session.run("cargo", "fetch", external=True) + if target: + session.run( + "cargo", + "build", + "--frozen", + "--release", + "--target", + target, + external=True, + ) + source = source_dir / "target" / target / "release" / f"pet{ext}" + else: + session.run( + "cargo", + "build", + "--frozen", + "--release", + external=True, + ) + source = source_dir / "target" / "release" / f"pet{ext}" + dest = dest_dir / "bin" / f"pet{ext}" + shutil.copy(source, dest) + + # Remove python-env-tools/bin exclusion from .vscodeignore + vscode_ignore = EXT_ROOT / ".vscodeignore" + remove_patterns = ("python-env-tools/bin/**",) + lines = vscode_ignore.read_text(encoding="utf-8").splitlines() + filtered_lines = [line for line in lines if not line.startswith(remove_patterns)] + vscode_ignore.write_text("\n".join(filtered_lines) + "\n", encoding="utf-8") + + +@nox.session() +def checkout_native(session: nox.Session): + dest = (pathlib.Path.cwd() / "python-env-tools").resolve() + if dest.exists(): + shutil.rmtree(os.fspath(dest)) + + temp_dir = os.getenv("TEMP") or os.getenv("TMP") or "/tmp" + temp_dir = pathlib.Path(temp_dir) / str(uuid.uuid4()) / "python-env-tools" + temp_dir.mkdir(0o766, parents=True) + + session.log(f"Cloning python-environment-tools to {temp_dir}") + try: + with session.cd(temp_dir): + session.run("git", "init", external=True) + session.run( + "git", + "remote", + "add", + "origin", + "https://github.com/microsoft/python-environment-tools", + external=True, + ) + session.run("git", "fetch", "origin", "main", external=True) + session.run( + "git", "checkout", "--force", "-B", "main", "origin/main", external=True + ) + delete_dir(temp_dir / ".git") + delete_dir(temp_dir / ".github") + delete_dir(temp_dir / ".vscode") + (temp_dir / "CODE_OF_CONDUCT.md").unlink() + shutil.move(os.fspath(temp_dir), os.fspath(dest)) + except PermissionError as e: + print(f"Permission error: {e}") + if not dest.exists(): + raise + finally: + delete_dir(temp_dir.parent, ignore_errors=True) + + +@nox.session() +def setup_repo(session: nox.Session): + install_python_libs(session) + checkout_native(session) + native_build(session) diff --git a/package-lock.json b/package-lock.json index aad66a37a822..6de6edae81c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,24380 +1,26357 @@ { "name": "python", - "version": "2020.5.0-dev", - "lockfileVersion": 1, + "version": "2026.5.0-dev", + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/cli": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.4.tgz", - "integrity": "sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==", - "dev": true, - "requires": { - "chokidar": "^2.1.8", - "commander": "^4.0.1", - "convert-source-map": "^1.1.0", - "fs-readdir-recursive": "^1.1.0", - "glob": "^7.0.0", - "lodash": "^4.17.13", - "make-dir": "^2.1.0", - "slash": "^2.0.0", - "source-map": "^0.5.0" - }, - "dependencies": { - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "packages": { + "": { + "name": "python", + "version": "2026.5.0-dev", + "license": "MIT", + "dependencies": { + "@iarna/toml": "^3.0.0", + "@vscode/extension-telemetry": "^0.8.4", + "arch": "^2.1.0", + "fs-extra": "^11.2.0", + "glob": "^7.2.0", + "iconv-lite": "^0.6.3", + "inversify": "^6.0.2", + "jsonc-parser": "^3.0.0", + "lodash": "^4.18.1", + "minimatch": "^5.1.8", + "named-js-regexp": "^1.3.3", + "node-stream-zip": "^1.6.0", + "reflect-metadata": "^0.2.2", + "rxjs": "^6.5.4", + "rxjs-compat": "^6.5.4", + "semver": "^7.5.2", + "stack-trace": "0.0.10", + "sudo-prompt": "^9.2.1", + "tmp": "^0.2.5", + "uint64be": "^3.0.0", + "unicode": "^14.0.0", + "vscode-debugprotocol": "^1.28.0", + "vscode-jsonrpc": "^9.0.0-next.5", + "vscode-languageclient": "^10.0.0-next.12", + "vscode-languageserver-protocol": "^3.17.6-next.10", + "vscode-tas-client": "^0.1.84", + "which": "^2.0.2", + "winreg": "^1.2.4", + "xml2js": "^0.5.0" + }, + "devDependencies": { + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@types/bent": "^7.3.0", + "@types/chai": "^4.1.2", + "@types/chai-arrays": "^2.0.0", + "@types/chai-as-promised": "^7.1.0", + "@types/download": "^8.0.1", + "@types/fs-extra": "^11.0.4", + "@types/glob": "^7.2.0", + "@types/lodash": "^4.14.104", + "@types/mocha": "^9.1.0", + "@types/node": "^22.19.1", + "@types/semver": "^5.5.0", + "@types/shortid": "^0.0.29", + "@types/sinon": "^17.0.3", + "@types/stack-trace": "0.0.29", + "@types/tmp": "^0.0.33", + "@types/vscode": "^1.95.0", + "@types/which": "^2.0.1", + "@types/winreg": "^1.2.30", + "@types/xml2js": "^0.4.2", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vscode/test-electron": "^2.3.8", + "@vscode/vsce": "^2.27.0", + "bent": "^7.3.12", + "chai": "^4.1.2", + "chai-arrays": "^2.0.0", + "chai-as-promised": "^7.1.1", + "copy-webpack-plugin": "^9.1.0", + "cross-env": "^7.0.3", + "cross-spawn": "^6.0.5", + "del": "^6.0.0", + "download": "^8.0.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-no-only-tests": "^3.3.0", + "eslint-plugin-react": "^7.20.3", + "eslint-plugin-react-hooks": "^4.0.0", + "expose-loader": "^3.1.0", + "flat": "^5.0.2", + "get-port": "^5.1.1", + "gulp": "^5.0.0", + "gulp-typescript": "^5.0.0", + "mocha": "^11.1.0", + "mocha-junit-reporter": "^2.0.2", + "mocha-multi-reporters": "^1.1.7", + "node-has-native-dependencies": "^1.0.2", + "node-loader": "^1.0.2", + "node-polyfill-webpack-plugin": "^1.1.4", + "nyc": "^15.0.0", + "prettier": "^2.0.2", + "rewiremock": "^3.13.0", + "shortid": "^2.2.8", + "sinon": "^18.0.0", + "source-map-support": "^0.5.12", + "ts-loader": "^9.2.8", + "ts-mockito": "^2.5.0", + "ts-node": "^10.7.0", + "tsconfig-paths-webpack-plugin": "^3.2.0", + "typemoq": "^2.1.0", + "typescript": "~5.2", + "uuid": "^8.3.2", + "webpack": "^5.105.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-cli": "^4.9.2", + "webpack-fix-default-import-plugin": "^1.0.3", + "webpack-merge": "^5.8.0", + "webpack-node-externals": "^3.0.0", + "webpack-require-from": "^1.8.6", + "worker-loader": "^3.0.8", + "yargs": "^15.3.1" + }, + "engines": { + "vscode": "^1.95.0" + } + }, + "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" } }, - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "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, - "requires": { - "@babel/highlight": "^7.0.0" + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/core": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.4.tgz", - "integrity": "sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/helpers": "^7.5.4", - "@babel/parser": "^7.5.0", - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.0", - "@babel/types": "^7.5.0", - "convert-source-map": "^1.1.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.11", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@babel/generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.0.tgz", - "integrity": "sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA==", - "dev": true, - "requires": { - "@babel/types": "^7.5.0", - "jsesc": "^2.5.1", - "lodash": "^4.17.11", - "source-map": "^0.5.0", - "trim-right": "^1.0.1" - }, + "node_modules/@azure/abort-controller/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@azure/core-auth": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz", + "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==", "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } + "node_modules/@azure/core-auth/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "node_modules/@azure/core-client": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", + "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", "dev": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "@babel/helper-builder-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz", - "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==", + "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, - "requires": { - "@babel/types": "^7.3.0", - "esutils": "^2.0.0" + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "node_modules/@azure/core-client/node_modules/@azure/core-util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dev": true, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", - "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "node_modules/@azure/core-client/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/@azure/core-rest-pipeline": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", + "integrity": "sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", - "dev": true, - "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "node_modules/@azure/core-rest-pipeline/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" } }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "node_modules/@azure/core-rest-pipeline/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 + } } }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" + "node_modules/@azure/core-rest-pipeline/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", - "dev": true, - "requires": { - "@babel/types": "^7.4.4" + "node_modules/@azure/core-rest-pipeline/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@azure/core-tracing": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", + "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" } }, - "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" + "node_modules/@azure/core-tracing/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@azure/core-util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.2.0.tgz", + "integrity": "sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" + "node_modules/@azure/core-util/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@azure/identity": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.2.1.tgz", + "integrity": "sha512-U8hsyC9YPcEIzoaObJlRDvp7KiF0MGS7xcWbyJSVvXRkC/HXo1f0oYeBYmEvVgRfacw7GHf6D6yAoh9JHz6A5Q==", + "dev": true, + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.5.0", + "@azure/core-client": "^1.4.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.3.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^3.11.1", + "@azure/msal-node": "^2.9.2", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^8.0.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=18.0.0" } }, - "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "node_modules/@azure/identity/node_modules/@azure/core-util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.4.4", - "lodash": "^4.17.11" + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "node_modules/@azure/identity/node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, - "requires": { - "@babel/types": "^7.0.0" + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, - "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "node_modules/@azure/identity/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 }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "dev": true, - "requires": { - "lodash": "^4.17.11" - } - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", - "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "node_modules/@azure/logger": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", + "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", - "dev": true, - "requires": { - "@babel/helper-member-expression-to-functions": "^7.0.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" - } + "node_modules/@azure/logger/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "node_modules/@azure/msal-browser": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.14.0.tgz", + "integrity": "sha512-Un85LhOoecJ3HDTS3Uv3UWnXC9/43ZSO+Kc+anSqpZvcEt58SiO/3DuVCAe1A3I5UIBYJNMgTmZPGXQ0MVYrwA==", "dev": true, - "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "dependencies": { + "@azure/msal-common": "14.10.0" + }, + "engines": { + "node": ">=0.8.0" } }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "node_modules/@azure/msal-common": { + "version": "14.10.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.10.0.tgz", + "integrity": "sha512-Zk6DPDz7e1wPgLoLgAp0349Yay9RvcjPM5We/ehuenDNsz/t9QEFI7tRoHpp/e47I4p20XE3FiDlhKwAo3utDA==", "dev": true, - "requires": { - "@babel/types": "^7.4.4" + "engines": { + "node": ">=0.8.0" } }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "node_modules/@azure/msal-node": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.9.2.tgz", + "integrity": "sha512-8tvi6Cos3m+0KmRbPjgkySXi+UQU/QiuVRFnrxIwt5xZlEEFa69O04RTaNESGgImyBBlYbo2mfE8/U8Bbdk1WQ==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "dependencies": { + "@azure/msal-common": "14.12.0", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" } }, - "@babel/helpers": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.4.tgz", - "integrity": "sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow==", + "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { + "version": "14.12.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.12.0.tgz", + "integrity": "sha512-IDDXmzfdwmDkv4SSmMEyAniJf6fDu3FJ7ncOjlxkDuT85uSnLEhZi3fGZpoR7T4XZpOMx9teM9GXBgrfJgyeBw==", "dev": true, - "requires": { - "@babel/template": "^7.4.4", - "@babel/traverse": "^7.5.0", - "@babel/types": "^7.5.0" + "engines": { + "node": ">=0.8.0" } }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", - "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "node_modules/@azure/opentelemetry-instrumentation-azure-sdk": { + "version": "1.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz", + "integrity": "sha512-fsUarKQDvjhmBO4nIfaZkfNSApm1hZBzcvpNbSrXdcUBxu7lRvKsV5DnwszX7cnhLyVOW9yl1uigtRQ1yDANjA==", + "dependencies": { + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/core": "^1.15.2", + "@opentelemetry/instrumentation": "^0.41.2", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" } }, - "@babel/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA==", - "dev": true + "node_modules/@azure/opentelemetry-instrumentation-azure-sdk/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", - "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "node_modules/@babel/compat-data": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", + "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0" + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "node_modules/@babel/core": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", + "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.6", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" } }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz", - "integrity": "sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA==", + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", + "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-validator-option": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, - "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "node_modules/@babel/helper-compilation-targets/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, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "yallist": "^3.0.2" } }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "node_modules/@babel/helper-compilation-targets/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/@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, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "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, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-syntax-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", - "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "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, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "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, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", - "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "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, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", "dev": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.4.4", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.4.4", - "@babel/helper-split-export-declaration": "^7.4.4", - "globals": "^11.1.0" + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "node_modules/@babel/helpers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-destructuring": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz", - "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==", + "node_modules/@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.1" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" } }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "node_modules/@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "license": "MIT", + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", - "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "node_modules/@babel/runtime-corejs3": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.1.tgz", + "integrity": "sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "dependencies": { + "core-js-pure": "^3.30.2" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "node_modules/@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "node_modules/@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "engines": { + "node": ">= 12" } }, - "@babel/plugin-transform-modules-amd": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", - "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "node_modules/@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "dependencies": { + "@cspotcode/source-map-consumer": "0.8.0" + }, + "engines": { + "node": ">=12" } }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz", - "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "engines": { + "node": ">=10.0.0" } }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", - "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "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, - "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "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" } }, - "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "node_modules/@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, - "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "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, - "requires": { - "regexp-tree": "^0.1.6" + "license": "MIT", + "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" } }, - "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "node_modules/@eslint/eslintrc/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==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } + "license": "Python-2.0" }, - "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "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, - "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "@babel/plugin-transform-react-display-name": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", - "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@babel/plugin-transform-react-jsx": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", - "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "requires": { - "@babel/helper-builder-react-jsx": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" - } + "license": "MIT" }, - "@babel/plugin-transform-react-jsx-self": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", - "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", + "node_modules/@eslint/eslintrc/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, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/plugin-transform-react-jsx-source": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz", - "integrity": "sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg==", + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", "dev": true, - "requires": { - "regenerator-transform": "^0.14.0" + "engines": { + "node": ">=10.13.0" } }, - "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "dependencies": { + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "@babel/plugin-transform-runtime": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.0.tgz", - "integrity": "sha512-LmPIZOAgTLl+86gR9KjLXex6P/lRz1fWEjTz6V6QZMmKie51ja3tvzdwORqhHc4RWR8TcZ5pClpRWs0mlaA2ng==", + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "resolve": "^1.8.1", - "semver": "^5.5.1" + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" } }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" - } + "license": "MIT" }, - "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "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, - "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0" - } + "license": "BSD-3-Clause" }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "node_modules/@iarna/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-td6ZUkz2oS3VeleBcN+m//Q6HlCFCPrnI0FZhrt/h4XqLEdOyYp2u21nd8MdsR+WJy5r9PTDaHTDDfhf4H4l6Q==", + "license": "ISC" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.5.4" + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "@babel/polyfill": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz", - "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" + "license": "MIT", + "engines": { + "node": ">=12" }, - "dependencies": { - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", - "dev": true - } + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "@babel/preset-env": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.4.tgz", - "integrity": "sha512-hFnFnouyRNiH1rL8YkX1ANCNAUVC8Djwdqfev8i1415tnAG+7hlA5zhZ0Q/3Q5gkop4HioIPbCEWAalqcbxRoQ==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-dynamic-import": "^7.5.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.5.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.5.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.4.4", - "@babel/plugin-transform-classes": "^7.4.4", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.5.0", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/plugin-transform-duplicate-keys": "^7.5.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.5.0", - "@babel/plugin-transform-modules-systemjs": "^7.5.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.2.0", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.2.0", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.4.4", - "@babel/types": "^7.5.0", - "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", - "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", - "semver": "^5.5.0" - } - }, - "@babel/preset-react": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", - "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", + "node_modules/@isaacs/cliui/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, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "@babel/register": { - "version": "7.9.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.9.0.tgz", - "integrity": "sha512-Tv8Zyi2J2VRR8g7pC5gTeIN8Ihultbmk0ocyNz8H2nEZbmhp1N6q0A1UGsQbDvGP/sNinQKUHf3SqXwqjtFv4Q==", + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "lodash": "^4.17.13", - "make-dir": "^2.1.0", - "pirates": "^4.0.0", - "source-map-support": "^0.5.16" - }, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", "dependencies": { - "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@babel/runtime": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.4.tgz", - "integrity": "sha512-Na84uwyImZZc3FKf4aUF1tysApzwf3p2yuFBIyBfbzT5glzKTdvYI4KVW4kcgjrzoGUjC7w3YyCHcJKaRxsr2Q==", + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "@babel/runtime-corejs2": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.5.4.tgz", - "integrity": "sha512-sHv74OzyZ18d6tjHU0HmlVES3+l+lydkOMTiKsJSTGWcTBpIMfXLEgduahlJrQjknW9RCQAqLIEdLOHjBmq/hg==", + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "requires": { - "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" - }, + "license": "MIT", "dependencies": { - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", - "dev": true - } + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", + "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.4.4", - "@babel/types": "^7.4.4" + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "@babel/traverse": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.0.tgz", - "integrity": "sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg==", + "node_modules/@istanbuljs/nyc-config-typescript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz", + "integrity": "sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w==", "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/generator": "^7.5.0", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.5.0", - "@babel/types": "^7.5.0", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.11" - }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "@istanbuljs/schema": "^0.1.2" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "nyc": ">=15" } }, - "@babel/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.0.tgz", - "integrity": "sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ==", + "node_modules/@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.11", - "to-fast-properties": "^2.0.0" + "engines": { + "node": ">=8" } }, - "@blueprintjs/core": { - "version": "3.22.3", - "resolved": "https://registry.npmjs.org/@blueprintjs/core/-/core-3.22.3.tgz", - "integrity": "sha512-IaxkvJyF+4VCvAjMvyHtJ4qUiQNwgPu4zIxLRo1cBsu30gHjYzwe+xDdssBR7yRnXARguM6bkI523w+yJOerCA==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, - "requires": { - "@blueprintjs/icons": "^3.12.0", - "@types/dom4": "^2.0.1", - "classnames": "^2.2", - "dom4": "^2.1.5", - "normalize.css": "^8.0.1", - "popper.js": "^1.15.0", - "react-lifecycles-compat": "^3.0.4", - "react-popper": "^1.3.7", - "react-transition-group": "^2.9.0", - "resize-observer-polyfill": "^1.5.1", - "tslib": "~1.9.0" - }, "dependencies": { - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - } + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" } }, - "@blueprintjs/icons": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/@blueprintjs/icons/-/icons-3.13.0.tgz", - "integrity": "sha512-fvXGsAJ66SSjeHv3OeXjLEdKdPJ3wVztjhJQCAd51uebhj3FJ16EDDvO7BqBw5FyVkLkU11KAxSoCFZt7TC9GA==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", "dev": true, - "requires": { - "classnames": "^2.2", - "tslib": "~1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - } + "engines": { + "node": ">=6.0.0" } }, - "@blueprintjs/select": { - "version": "3.11.2", - "resolved": "https://registry.npmjs.org/@blueprintjs/select/-/select-3.11.2.tgz", - "integrity": "sha512-fU0Km6QI/ayWhzYeu9N1gTj0+L0XUO4KB3u2LfJXgj648UGY8F4HX2ETdJ+XPdtsu6TesrIL7ghMQhtLcvafBg==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, - "requires": { - "@blueprintjs/core": "^3.20.0", - "classnames": "^2.2", - "tslib": "~1.9.0" - }, - "dependencies": { - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - } + "engines": { + "node": ">=6.0.0" } }, - "@emotion/babel-utils": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/@emotion/babel-utils/-/babel-utils-0.6.10.tgz", - "integrity": "sha512-/fnkM/LTEp3jKe++T0KyTszVGWNKPNOUJfjNKLO17BzQ6QPxgbg3whayom1Qr2oLFH3V92tDymU+dT5q676uow==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, - "requires": { - "@emotion/hash": "^0.6.6", - "@emotion/memoize": "^0.6.6", - "@emotion/serialize": "^0.9.1", - "convert-source-map": "^1.5.1", - "find-root": "^1.1.0", - "source-map": "^0.7.2" - }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "@emotion/hash": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz", - "integrity": "sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ==", - "dev": true - }, - "@emotion/memoize": { - "version": "0.6.6", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz", - "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, - "@emotion/serialize": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.9.1.tgz", - "integrity": "sha512-zTuAFtyPvCctHBEL8KZ5lJuwBanGSutFEncqLn/m9T1a6a93smBStK+bZzcNPgj4QS8Rkw9VTwJGhRIUVO8zsQ==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "requires": { - "@emotion/hash": "^0.6.6", - "@emotion/memoize": "^0.6.6", - "@emotion/unitless": "^0.6.7", - "@emotion/utils": "^0.8.2" + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "@emotion/stylis": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.7.1.tgz", - "integrity": "sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ==", - "dev": true - }, - "@emotion/unitless": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.6.7.tgz", - "integrity": "sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg==", - "dev": true + "node_modules/@microsoft/1ds-core-js": { + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.13.tgz", + "integrity": "sha512-CluYTRWcEk0ObG5EWFNWhs87e2qchJUn0p2D21ZUa3PWojPZfPSBs4//WIE0MYV8Qg1Hdif2ZTwlM7TbYUjfAg==", + "dependencies": { + "@microsoft/applicationinsights-core-js": "2.8.15", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } }, - "@emotion/utils": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz", - "integrity": "sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw==", - "dev": true + "node_modules/@microsoft/1ds-post-js": { + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.13.tgz", + "integrity": "sha512-HgS574fdD19Bo2vPguyznL4eDw7Pcm1cVNpvbvBLWiW3x4e1FCQ3VMXChWnAxCae8Hb0XqlA2sz332ZobBavTA==", + "dependencies": { + "@microsoft/1ds-core-js": "3.2.13", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } }, - "@enonic/fnv-plus": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@enonic/fnv-plus/-/fnv-plus-1.3.0.tgz", - "integrity": "sha512-BCN9uNWH8AmiP7BXBJqEinUY9KXalmRzo+L0cB/mQsmFfzODxwQrbvxCHXUNH2iP+qKkWYtB4vyy8N62PViMFw==", - "dev": true + "node_modules/@microsoft/applicationinsights-channel-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.0.2.tgz", + "integrity": "sha512-jDBNKbCHsJgmpv0CKNhJ/uN9ZphvfGdb93Svk+R4LjO8L3apNNMbDDPxBvXXi0uigRmA1TBcmyBG4IRKjabGhw==", + "dependencies": { + "@microsoft/applicationinsights-common": "3.0.2", + "@microsoft/applicationinsights-core-js": "3.0.2", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" + }, + "peerDependencies": { + "tslib": "*" + } }, - "@gulp-sourcemaps/identity-map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/identity-map/-/identity-map-1.0.2.tgz", - "integrity": "sha512-ciiioYMLdo16ShmfHBXJBOFm3xPC4AuwO4xeRpFeHz7WK9PYsWCmigagG2XyzZpubK4a3qNKoUBDhbzHfa50LQ==", - "dev": true, - "requires": { - "acorn": "^5.0.3", - "css": "^2.2.1", - "normalize-path": "^2.1.1", - "source-map": "^0.6.0", - "through2": "^2.0.3" + "node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-core-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.2.tgz", + "integrity": "sha512-WQhVhzlRlLDrQzn3OShCW/pL3BW5WC57t0oywSknX3q7lMzI3jDg7Ihh0iuIcNTzGCTbDkuqr4d6IjEDWIMtJQ==", + "dependencies": { + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" }, + "peerDependencies": { + "tslib": "*" + } + }, + "node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - }, - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" } }, - "@gulp-sourcemaps/map-sources": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@gulp-sourcemaps/map-sources/-/map-sources-1.0.0.tgz", - "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", - "dev": true, - "requires": { - "normalize-path": "^2.0.1", - "through2": "^2.0.3" - }, + "node_modules/@microsoft/applicationinsights-channel-js/node_modules/@microsoft/dynamicproto-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz", + "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==", "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" } }, - "@icons/material": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", - "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", - "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "node_modules/@microsoft/applicationinsights-common": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.0.2.tgz", + "integrity": "sha512-y+WXWop+OVim954Cu1uyYMnNx6PWO8okHpZIQi/1YSqtqaYdtJVPv4P0AVzwJdohxzVfgzKvqj9nec/VWqE2Zg==", + "dependencies": { + "@microsoft/applicationinsights-core-js": "3.0.2", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" }, + "peerDependencies": { + "tslib": "*" + } + }, + "node_modules/@microsoft/applicationinsights-common/node_modules/@microsoft/applicationinsights-core-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.2.tgz", + "integrity": "sha512-WQhVhzlRlLDrQzn3OShCW/pL3BW5WC57t0oywSknX3q7lMzI3jDg7Ihh0iuIcNTzGCTbDkuqr4d6IjEDWIMtJQ==", "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "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 - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - } + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" + }, + "peerDependencies": { + "tslib": "*" } }, - "@istanbuljs/nyc-config-typescript": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-0.1.3.tgz", - "integrity": "sha512-EzRFg92bRSD1W/zeuNkeGwph0nkWf+pP2l/lYW4/5hav7RjKKBN5kV1Ix7Tvi0CMu3pC4Wi/U7rNisiJMR3ORg==", - "dev": true + "node_modules/@microsoft/applicationinsights-common/node_modules/@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } }, - "@istanbuljs/schema": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", - "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", - "dev": true + "node_modules/@microsoft/applicationinsights-common/node_modules/@microsoft/dynamicproto-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz", + "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } }, - "@jest/types": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-24.9.0.tgz", - "integrity": "sha512-XKK7ze1apu5JWQ5eZjHITP66AX+QsLlbaJRBGYr8pNzwcAE2JVkwnf0yqjHTsDRcjR0mujy/NmZMXw5kl+kGBw==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^1.1.1", - "@types/yargs": "^13.0.0" + "node_modules/@microsoft/applicationinsights-core-js": { + "version": "2.8.15", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.15.tgz", + "integrity": "sha512-yYAs9MyjGr2YijQdUSN9mVgT1ijI1FPMgcffpaPmYbHAVbQmF7bXudrBWHxmLzJlwl5rfep+Zgjli2e67lwUqQ==", + "dependencies": { + "@microsoft/applicationinsights-shims": "2.0.2", + "@microsoft/dynamicproto-js": "^1.1.9" + }, + "peerDependencies": { + "tslib": "*" } }, - "@jupyter-widgets/base": { + "node_modules/@microsoft/applicationinsights-shims": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/base/-/base-2.0.2.tgz", - "integrity": "sha512-nNpD+RGJ0As74XxDSGMeObfXSZ8XPBFHJ1AyugzYxpmxIigB2n3DxTyonASkR/3hXwxl3/nXBxHGlxQGs/+nOA==", - "dev": true, - "requires": { - "@jupyterlab/services": "^4.0.0", - "@phosphor/coreutils": "^1.2.0", - "@phosphor/messaging": "^1.2.1", - "@phosphor/widgets": "^1.3.0", - "@types/backbone": "^1.4.1", - "@types/lodash": "^4.14.134", - "backbone": "1.2.3", - "base64-js": "^1.2.1", - "jquery": "^3.1.1", - "lodash": "^4.17.4" + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz", + "integrity": "sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg==" + }, + "node_modules/@microsoft/applicationinsights-web-basic": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.0.2.tgz", + "integrity": "sha512-6Lq0DE/pZp9RvSV+weGbcxN1NDmfczj6gNPhvZKV2YSQ3RK0LZE3+wjTWLXfuStq8a+nCBdsRpWk8tOKgsoxcg==", + "dependencies": { + "@microsoft/applicationinsights-channel-js": "3.0.2", + "@microsoft/applicationinsights-common": "3.0.2", + "@microsoft/applicationinsights-core-js": "3.0.2", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" + }, + "peerDependencies": { + "tslib": "*" } }, - "@jupyter-widgets/controls": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/controls/-/controls-1.5.3.tgz", - "integrity": "sha512-eigiIdhYeziKslm+pddZSz5RkzbkDB1C1O25K/S1+yzHm5DTR4iPt00vliOn2wokTvZUsmaC2JPL05eaVAf2iA==", - "dev": true, - "requires": { - "@jupyter-widgets/base": "^2.0.2", - "@phosphor/algorithm": "^1.1.0", - "@phosphor/domutils": "^1.1.0", - "@phosphor/messaging": "^1.2.1", - "@phosphor/signaling": "^1.2.0", - "@phosphor/widgets": "^1.3.0", - "d3-format": "^1.3.0", - "jquery": "^3.1.1", - "jquery-ui": "^1.12.1", - "underscore": "^1.8.3" + "node_modules/@microsoft/applicationinsights-web-basic/node_modules/@microsoft/applicationinsights-core-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.2.tgz", + "integrity": "sha512-WQhVhzlRlLDrQzn3OShCW/pL3BW5WC57t0oywSknX3q7lMzI3jDg7Ihh0iuIcNTzGCTbDkuqr4d6IjEDWIMtJQ==", + "dependencies": { + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" + }, + "peerDependencies": { + "tslib": "*" } }, - "@jupyter-widgets/jupyterlab-manager": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/jupyterlab-manager/-/jupyterlab-manager-1.1.0.tgz", - "integrity": "sha512-2dKdzl43nMvmr8A/AtonPb23SWWTQW9KjwCmTjWcWMfMsAcmAg5yLY+KfmQE59RnVA/xEcgdb53y1/ADuNbzhg==", - "dev": true, - "requires": { - "@jupyter-widgets/base": "^2.0.2", - "@jupyter-widgets/controls": "^1.5.3", - "@jupyter-widgets/output": "^2.0.1", - "@jupyterlab/application": "^1.2.0", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/docregistry": "^1.2.0", - "@jupyterlab/logconsole": "^1.0.0", - "@jupyterlab/mainmenu": "^1.2.0", - "@jupyterlab/notebook": "^1.2.0", - "@jupyterlab/outputarea": "^1.2.0", - "@jupyterlab/rendermime": "^1.2.0", - "@jupyterlab/rendermime-interfaces": "^1.5.0", - "@jupyterlab/services": "^4.2.0", - "@phosphor/algorithm": "^1.1.0", - "@phosphor/coreutils": "^1.3.0", - "@phosphor/disposable": "^1.1.1", - "@phosphor/messaging": "^1.2.1", - "@phosphor/properties": "^1.1.0", - "@phosphor/signaling": "^1.2.0", - "@phosphor/widgets": "^1.3.0", - "@types/backbone": "^1.4.1", - "jquery": "^3.1.1", - "semver": "^6.1.1" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - }, - "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "node_modules/@microsoft/applicationinsights-web-basic/node_modules/@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" } }, - "@jupyter-widgets/output": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/output/-/output-2.0.1.tgz", - "integrity": "sha512-8yljIRbn98XNAoLnTOGEiBGKc7SH/ZEueatcJqu8FBMv3FN8hUKc2mgPLfcrlFRDwfe09p51j793oBUYdJUKPg==", - "dev": true, - "requires": { - "@jupyter-widgets/base": "^2.0.2" + "node_modules/@microsoft/applicationinsights-web-basic/node_modules/@microsoft/dynamicproto-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz", + "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" } }, - "@jupyter-widgets/schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/schema/-/schema-0.4.0.tgz", - "integrity": "sha512-0MAZ6hLOCe2dYiUvEAfYvWKD7zV9AdkC4AoIEQiWqAai9Pq06oPNWMMg6x+J0ZaNnZWqR2c16f62ehd57Ql7Zw==" + "node_modules/@microsoft/applicationinsights-web-snippet": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz", + "integrity": "sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ==" }, - "@jupyterlab/application": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/application/-/application-1.2.2.tgz", - "integrity": "sha512-HNHVR6ApLdS542ndCmvD0GBitNuLeQwAP2cc+L7fSu67KG4CiMaPyJfyFuQKcMyZbWb5ngebDf8qMgyUX8+gwQ==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/docregistry": "^1.2.2", - "@jupyterlab/rendermime": "^1.2.2", - "@jupyterlab/rendermime-interfaces": "^1.5.0", - "@jupyterlab/services": "^4.2.0", - "@jupyterlab/ui-components": "^1.2.1", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/application": "^1.7.0", - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0", - "font-awesome": "~4.7.0" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@microsoft/dynamicproto-js": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz", + "integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ==" + }, + "node_modules/@nevware21/ts-async": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.3.0.tgz", + "integrity": "sha512-ZUcgUH12LN/F6nzN0cYd0F/rJaMLmXr0EHVTyYfaYmK55bdwE4338uue4UiVoRqHVqNW4KDUrJc49iGogHKeWA==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.10.0 < 2.x" } }, - "@jupyterlab/apputils": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/apputils/-/apputils-1.2.2.tgz", - "integrity": "sha512-9JFub/RTxL/9w2oyihDrUGk/hJW06PbeE7aIyl4S92ePK6trl3q/N1nPqEoC0N1Kj3KmMt9wFpNHt7BYHyVoQw==", - "dev": true, - "requires": { - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/services": "^4.2.0", - "@jupyterlab/ui-components": "^1.2.1", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/domutils": "^1.1.3", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "@phosphor/virtualdom": "^1.2.0", - "@phosphor/widgets": "^1.9.0", - "@types/react": "~16.8.18", - "react": "~16.8.4", - "react-dom": "~16.8.4", - "sanitize-html": "~1.20.1" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@nevware21/ts-utils": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.10.1.tgz", + "integrity": "sha512-pMny25NnF2/MJwdqC3Iyjm2pGIXNxni4AROpcqDeWa+td9JMUY4bUS9uU9XW+BoBRqTLUL+WURF9SOd/6OQzRg==" + }, + "node_modules/@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", + "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", + "dev": true, + "bin": { + "semver": "bin/semver.js" } }, - "@jupyterlab/attachments": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/attachments/-/attachments-1.2.2.tgz", - "integrity": "sha512-ME7aWyEs4piW6tCQbJ4zfuX6XipX07Wb9vVcW7SuRPlDp7lIUi4nPINkMO2us/lTsuS0/ZjgXjb+VKu4CbTYFQ==", + "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, - "requires": { - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/observables": "^2.4.0", - "@jupyterlab/rendermime": "^1.2.2", - "@jupyterlab/rendermime-interfaces": "^1.5.0", - "@phosphor/disposable": "^1.3.0", - "@phosphor/signaling": "^1.3.0" - }, "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@jupyterlab/cells": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@jupyterlab/cells/-/cells-1.2.3.tgz", - "integrity": "sha512-7ZyXdq/bcQAlPS5ACAGSB/T2NLSnMhMSmItyYq1j77VCKAh2RW5IJEdGuHfUn+6+wBrBIcF3/P4wwzPGVUtCgw==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/attachments": "^1.2.2", - "@jupyterlab/codeeditor": "^1.2.0", - "@jupyterlab/codemirror": "^1.2.2", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/filebrowser": "^1.2.2", - "@jupyterlab/observables": "^2.4.0", - "@jupyterlab/outputarea": "^1.2.3", - "@jupyterlab/rendermime": "^1.2.2", - "@jupyterlab/services": "^4.2.0", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/dragdrop": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/virtualdom": "^1.2.0", - "@phosphor/widgets": "^1.9.0", - "react": "~16.8.4" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "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" } }, - "@jupyterlab/codeeditor": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/codeeditor/-/codeeditor-1.2.0.tgz", - "integrity": "sha512-toejhF/a80X10SZyvEnsnnlS9SxR5W4cz67ju7e/2lsZ8RMwZEDDJAJXyW3mw/EEjt8oVRNP2QpM8L5clE9XyQ==", + "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, - "requires": { - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/observables": "^2.4.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/dragdrop": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0" + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", + "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.15.2.tgz", + "integrity": "sha512-+gBv15ta96WqkHZaPpcDHiaz0utiiHZVfm2YOYSqFGrUaJpPkMoSuLBB58YFQGi6Rsb9EHos84X6X5+9JspmLw==", "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "@opentelemetry/semantic-conventions": "1.15.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.5.0" } }, - "@jupyterlab/codemirror": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/codemirror/-/codemirror-1.2.2.tgz", - "integrity": "sha512-hVPpUa5FnuseJj+ZXIUtjP2nP4fjJB/Fwwc5EdpQHiogwpCR6xibyGdSlkRWmIEzFBp4C0yAB2XbqJt13Ofkkg==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/codeeditor": "^1.2.0", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/observables": "^2.4.0", - "@jupyterlab/statusbar": "^1.2.2", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0", - "codemirror": "~5.47.0", - "react": "~16.8.4" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@opentelemetry/instrumentation": { + "version": "0.41.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz", + "integrity": "sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==", + "dependencies": { + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "1.4.2", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.1", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "@jupyterlab/coreutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.1.0.tgz", - "integrity": "sha512-ZqgzDUyanyvc86gtCrIbc1M6iniKHYmWNWHvWOcnq3KIP3wk3grchsTYPTfQDxcUS6F04baPGp/KohEU2ml40Q==", - "requires": { - "@phosphor/commands": "^1.6.3", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.2.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.2.3", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@jupyterlab/docmanager": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docmanager/-/docmanager-1.2.2.tgz", - "integrity": "sha512-JlA/4rUIumH2sZndTzd2/f8Aevegi4eXvUrvZY6cA3fG9Nir6hHSBznUfaL3iR2YHmnxTM5hUwAK8jnjwmLuig==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/docregistry": "^1.2.2", - "@jupyterlab/services": "^4.2.0", - "@jupyterlab/statusbar": "^1.2.2", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0", - "react": "~16.8.4" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@opentelemetry/resources": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", + "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", + "dependencies": { + "@opentelemetry/core": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.5.0" } }, - "@jupyterlab/docregistry": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/docregistry/-/docregistry-1.2.2.tgz", - "integrity": "sha512-2c3nA+PsTsZ8h5Z80EE38Iz7LJTpxmk57c7aZ0LWw65eAf+c071w9xUdWRg9apmXz4o7NJsMeDm6Dns+7+AZow==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/codeeditor": "^1.2.0", - "@jupyterlab/codemirror": "^1.2.2", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/observables": "^2.4.0", - "@jupyterlab/rendermime": "^1.2.2", - "@jupyterlab/rendermime-interfaces": "^1.5.0", - "@jupyterlab/services": "^4.2.0", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.15.2.tgz", + "integrity": "sha512-BEaxGZbWtvnSPchV98qqqqa96AOcb41pjgvhfzDij10tkBhIu9m0Jd6tZ1tJB5ZHfHbTffqYVYE0AOGobec/EQ==", + "dependencies": { + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.5.0" } }, - "@jupyterlab/filebrowser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/filebrowser/-/filebrowser-1.2.2.tgz", - "integrity": "sha512-xs01yLt6LBCDaCDVowthRQT+oIFuLQ9n3unwMctHZLi1aeo5cJVzBq/OKMBNJcMAOMAn6HSAEvKwfSnWkpKuiw==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/docmanager": "^1.2.2", - "@jupyterlab/docregistry": "^1.2.2", - "@jupyterlab/services": "^4.2.0", - "@jupyterlab/statusbar": "^1.2.2", - "@jupyterlab/ui-components": "^1.2.1", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/domutils": "^1.1.3", - "@phosphor/dragdrop": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0", - "react": "~16.8.4" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", + "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==", + "engines": { + "node": ">=14" } }, - "@jupyterlab/logconsole": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@jupyterlab/logconsole/-/logconsole-1.0.3.tgz", - "integrity": "sha512-W/YCr57UwH11O+6iyWyLILffBeIGDAzCY6B/Yb97+YH4Cgdxovmy0zlTazLLBD+Pju7oDqJht4OQonDc0XchIA==", + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", + "dev": true + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, - "requires": { - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/outputarea": "^1.2.3", - "@jupyterlab/rendermime": "^1.2.2", - "@jupyterlab/services": "^4.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0" - }, "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "type-detect": "4.0.8" } }, - "@jupyterlab/mainmenu": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/mainmenu/-/mainmenu-1.2.2.tgz", - "integrity": "sha512-hNFvNvsjbqzM1GQp3tF/34j7Y9eR1zoGUuZBsAkge3W0Nsri8fUXfPwBTfOFBXhIx4j9aB4vZhCrgU91eNt7MA==", + "node_modules/@sinonjs/fake-timers": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/services": "^4.2.0", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/widgets": "^1.9.0" - }, "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "@sinonjs/commons": "^3.0.0" } }, - "@jupyterlab/notebook": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@jupyterlab/notebook/-/notebook-1.2.3.tgz", - "integrity": "sha512-+LGIgWRTIaCVTFG8v3Ps1v0lb717Q8ojwvKvv1DdH4g/nbd6KiO5LXKbeprhZ55nyHmxJMzD6Zu87YzDSea5aA==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/cells": "^1.2.3", - "@jupyterlab/codeeditor": "^1.2.0", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/docregistry": "^1.2.2", - "@jupyterlab/observables": "^2.4.0", - "@jupyterlab/rendermime": "^1.2.2", - "@jupyterlab/services": "^4.2.0", - "@jupyterlab/statusbar": "^1.2.2", - "@jupyterlab/ui-components": "^1.2.1", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/domutils": "^1.1.3", - "@phosphor/dragdrop": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "@phosphor/virtualdom": "^1.2.0", - "@phosphor/widgets": "^1.9.0", - "react": "~16.8.4" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@sinonjs/samsam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, - "@jupyterlab/observables": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/observables/-/observables-2.4.0.tgz", - "integrity": "sha512-M/fhAnPqd6F4Zwt4IIsvHCkJmwbSw1Tko/hUXgdUQG86lPsJiTOh98sB3qwV1gtzb9oFF+kH21XsHnQZ6Yl6Pw==", - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0" - }, + "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==" - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "type-detect": "4.0.8" } }, - "@jupyterlab/outputarea": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@jupyterlab/outputarea/-/outputarea-1.2.3.tgz", - "integrity": "sha512-7bFq4sUwoQfAS4KlDu8ogKwo2xGelj5YnVIxw4jlVY2+InMptfhltCI4q8qwvxgTAXVW9m+8QGC4ZHgtRdJt7Q==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/observables": "^2.4.0", - "@jupyterlab/rendermime": "^1.2.2", - "@jupyterlab/rendermime-interfaces": "^1.5.0", - "@jupyterlab/services": "^4.2.0", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" } }, - "@jupyterlab/rendermime": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime/-/rendermime-1.2.2.tgz", - "integrity": "sha512-Meptrw869XQ5LUVOTpKUZNzJPcAO1rCc71Ch1jrPM4VRq3wkGvFGN5p82z2qWPOWXIG5IcQbfTnqpWLDVNzqMw==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/codemirror": "^1.2.2", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/observables": "^2.4.0", - "@jupyterlab/rendermime-interfaces": "^1.5.0", - "@jupyterlab/services": "^4.2.0", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0", - "lodash.escape": "^4.0.1", - "marked": "^0.7.0" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", + "dev": true + }, + "node_modules/@types/bent": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@types/bent/-/bent-7.3.3.tgz", + "integrity": "sha512-5NEIhVzHiZ6wMjFBmJ3gwjxwGug6amMoAn93rtDBttwrODxm+bt63u+MJA7H9NGGM4X1m73sJrAxDapktl036Q==", + "dev": true, + "dependencies": { + "@types/node": "*" } }, - "@jupyterlab/rendermime-interfaces": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/rendermime-interfaces/-/rendermime-interfaces-1.5.0.tgz", - "integrity": "sha512-k6DjX/srKl1FA1CZyrAzz1qA2v1arXUIAmbEddZ5L3O+dnvDlOKjkI/NexaRQvmQ62aziSln+wKrr2P1JPNmGg==", + "node_modules/@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "node_modules/@types/chai-arrays": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/chai-arrays/-/chai-arrays-2.0.0.tgz", + "integrity": "sha512-5h5jnAC9C64YnD7WJpA5gBG7CppF/QmoWytOssJ6ysENllW49NBdpsTx6uuIBOpnzAnXThb8jBICgB62wezTLQ==", "dev": true, - "requires": { - "@phosphor/coreutils": "^1.3.1", - "@phosphor/widgets": "^1.9.0" + "dependencies": { + "@types/chai": "*" } }, - "@jupyterlab/services": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-4.2.0.tgz", - "integrity": "sha512-diqiWCYLROwZoeZ46hO4oCINQKr3S789GOA3drw5gDie18/u1nJcvegnY9Oo58xHINnKTs0rKZmFgTe2DvYgQg==", - "requires": { - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/observables": "^2.4.0", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "node-fetch": "^2.6.0", - "ws": "^7.0.0" - }, + "node_modules/@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "dev": true, "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==" - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" - }, - "ws": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.0.tgz", - "integrity": "sha512-+SqNqFbwTm/0DC18KYzIsMTnEWpLwJsiasW/O17la4iDRRIO9uaHbvKiAS3AHgTiuuWerK/brj4O6MYZkei9xg==", - "requires": { - "async-limiter": "^1.0.0" - } - } + "@types/chai": "*" } }, - "@jupyterlab/statusbar": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@jupyterlab/statusbar/-/statusbar-1.2.2.tgz", - "integrity": "sha512-1SIyW3pqoqD1y7g5WvGB2UJASQ6uikE1HtRLj67UEstdTfiZyVPSutTZJrXqkRqsB7jPEU4EfwCLUFXEbZkLZw==", - "dev": true, - "requires": { - "@jupyterlab/apputils": "^1.2.2", - "@jupyterlab/codeeditor": "^1.2.0", - "@jupyterlab/coreutils": "^3.2.0", - "@jupyterlab/services": "^4.2.0", - "@jupyterlab/ui-components": "^1.2.1", - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/messaging": "^1.3.0", - "@phosphor/signaling": "^1.3.0", - "@phosphor/widgets": "^1.9.0", - "react": "~16.8.4", - "typestyle": "^2.0.1" - }, - "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "node_modules/@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "dev": true + }, + "node_modules/@types/decompress": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.5.tgz", + "integrity": "sha512-LdL+kbcKGs9TzvB/K+OBGzPfDoP6gwwTsykYjodlzUJUUYp/43c1p1jE5YTtz3z4Ml90iruvBXbJ6+kDvb3WSQ==", + "dev": true, + "dependencies": { + "@types/node": "*" } }, - "@jupyterlab/ui-components": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jupyterlab/ui-components/-/ui-components-1.2.1.tgz", - "integrity": "sha512-GUtIRwTmFnlJaPUM8SiFw1STmsyMVGjchLKqIoQnn0qYAJvaSUGyRqqoSD5iIpwov6OHCOOyxH6fQ5OAtH1kwA==", + "node_modules/@types/download": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@types/download/-/download-8.0.3.tgz", + "integrity": "sha512-IDwXjU7zCtuFVvI0Plnb02TpXyj3RA4YeOKQvEfsjdJeWxZ9hTl6lxeNsU2bLWn0aeAS7fyMl74w/TbdOlS2KQ==", "dev": true, - "requires": { - "@blueprintjs/core": "^3.9.0", - "@blueprintjs/select": "^3.3.0", - "@jupyterlab/coreutils": "^3.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/messaging": "^1.3.0", - "@phosphor/virtualdom": "^1.2.0", - "@phosphor/widgets": "^1.9.0", - "react": "~16.8.4", - "typestyle": "^2.0.1" - }, "dependencies": { - "@jupyterlab/coreutils": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-3.2.0.tgz", - "integrity": "sha512-LATiUsHuwze/h3JC2EZOBV+kGBoUKO3npqw/Pcgge4bz09xF/oTDrx4G8jl5eew3w1dCUNp9eLduNh8Orrw7xQ==", - "dev": true, - "requires": { - "@phosphor/commands": "^1.7.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.0", - "ajv": "^6.5.5", - "json5": "^2.1.0", - "minimist": "~1.2.0", - "moment": "^2.24.0", - "path-posix": "~1.0.0", - "url-parse": "~1.4.3" - } - }, - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } + "@types/decompress": "*", + "@types/got": "^9", + "@types/node": "*" } }, - "@koa/cors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.0.0.tgz", - "integrity": "sha512-hDp+cXj6vTYSwHRJfiSpnf5dTMv3FmqNKh1or9BPJk4SHOviHnK9GoL9dT0ypt/E+hlkRkZ9edHylcosW3Ghrw==", - "requires": { - "vary": "^1.1.2" + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" } }, - "@loadable/component": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.12.0.tgz", - "integrity": "sha512-eDG7FPZ8tCFA/mqu2IrYV6eS+UxGBo21PwtEV9QpkpYrx25xKRXzJUm36yfQPK3o7jXu43xpPkwiU4mLWcjJlw==", - "requires": { - "@babel/runtime": "^7.7.7", - "hoist-non-react-statics": "^3.3.1" - }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, "dependencies": { - "@babel/runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", - "integrity": "sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==", - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw==", - "requires": { - "react-is": "^16.7.0" - } - } + "@types/eslint": "*", + "@types/estree": "*" } }, - "@mapbox/polylabel": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@mapbox/polylabel/-/polylabel-1.0.2.tgz", - "integrity": "sha1-xXFGGbZa3QgmOOoGAn5psUUA76Y=", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, - "requires": { - "tinyqueue": "^1.1.0" + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" } }, - "@nteract/commutable": { - "version": "7.2.9", - "resolved": "https://registry.npmjs.org/@nteract/commutable/-/commutable-7.2.9.tgz", - "integrity": "sha512-QwNp8LO4vq5j1W1ls2ZMpwS4E1YIk92ZmfZLy7QLbNumLrkxP/Q0SWNyxRGfugAsWco+8ORqFf/tY8ePBUCcxg==", - "requires": { - "immutable": "^4.0.0-rc.12", - "uuid": "^7.0.0" - }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" - } + "@types/minimatch": "*", + "@types/node": "*" } }, - "@nteract/markdown": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nteract/markdown/-/markdown-3.0.1.tgz", - "integrity": "sha512-Dr79niruytzbcDsLLS5NoPIzvVJ3YkJX18O0hmZAmrVn2Ni8L5VW+ZymWsSgRBogDgrYQzhV4L1MmIC/X6rbUg==", + "node_modules/@types/got": { + "version": "9.6.12", + "resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.12.tgz", + "integrity": "sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA==", "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "@nteract/mathjax": "^3.0.1", - "babel-runtime": "^6.26.0", - "react-markdown": "^4.0.0" + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" } }, - "@nteract/mathjax": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@nteract/mathjax/-/mathjax-3.0.1.tgz", - "integrity": "sha512-jL4a2KjY9wzcg7dG3HvufKMXOk+FxWQ6BFH6p3fwJUerbf3SF6H/RlaLxuMgFP+Tv+sHVXo7FHTTTIIsRyuv8g==", + "node_modules/@types/got/node_modules/form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "babel-runtime": "^6.26.0" + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" } }, - "@nteract/messaging": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@nteract/messaging/-/messaging-7.0.4.tgz", - "integrity": "sha512-n0vggzsrRFEtte5SgMVMbgjo19qXa5khDGhvXt4qqmNY3gOSnNSQMpVkXbno6fQXreKOYQ1uO8YIlQTDfOt/Nw==", - "requires": { - "@nteract/types": "^6.0.4", - "@types/uuid": "^7.0.0", - "lodash.clonedeep": "^4.5.0", - "rxjs": "^6.3.3", - "uuid": "^7.0.0" - }, - "dependencies": { - "@types/uuid": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-7.0.2.tgz", - "integrity": "sha512-8Ly3zIPTnT0/8RCU6Kg/G3uTICf9sRwYOpUzSIM3503tLIKcnJPRuinHhXngJUy2MntrEf6dlpOHXJju90Qh5w==" + "node_modules/@types/got/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ] }, - "@nteract/octicons": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@nteract/octicons/-/octicons-0.5.1.tgz", - "integrity": "sha512-7d42YfTbaiL2cF8txcQirDCNTbhmKfSoJSRlFMnEH11D0e0XUk/dxEWRGxxLrbP3SApY84hF/9uP3u1p6jqiAQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "babel-runtime": "^6.26.0" - } + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true }, - "@nteract/plotly": { - "version": "1.48.3", - "resolved": "https://registry.npmjs.org/@nteract/plotly/-/plotly-1.48.3.tgz", - "integrity": "sha512-1Km5MtjyUL9POZjU6LMzH/npFUYIC6vewH0Gd2Ua1FON3qN1KCRoJ8em5Gkp+K57QJRpMET1F4z4N9d3U9HOqA==", + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "@nteract/styled-blueprintjsx": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@nteract/styled-blueprintjsx/-/styled-blueprintjsx-1.1.1.tgz", - "integrity": "sha512-y5HLOPqbjapP7918rpp0o6Y6a8ZGZyINFPUQYoOc7iN8KqIOrNvWnhMISgzGwmXv8T+wDZFycSOnPxDbH7tBUA==", + "node_modules/@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "babel-runtime": "^6.26.0", - "styled-jsx": "^3.1.0" + "dependencies": { + "@types/node": "*" } }, - "@nteract/transform-dataresource": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/@nteract/transform-dataresource/-/transform-dataresource-4.5.2.tgz", - "integrity": "sha512-48m/Xd14+vyNGp11qrnts9APKu8kSqZLaI+VJpgErZieakleESaVbleg4EiTlU6j/p7DvihBSKDTuFXuBOpyUA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.0.0", - "@babel/runtime-corejs2": "^7.0.0", - "@nteract/octicons": "^0.5.1", - "@nteract/styled-blueprintjsx": "^1.1.1", - "@nteract/transform-plotly": "^3.2.5", - "d3-collection": "^1.0.7", - "d3-scale": "^2.1.2", - "d3-shape": "^1.2.2", - "d3-time-format": "^2.0.5", - "lodash": "^4.17.4", - "moment": "^2.18.1", - "numeral": "^2.0.6", - "react-color": "^2.14.1", - "react-hot-loader": "^4.1.2", - "react-table": "^6.8.6", - "react-table-hoc-fixed-columns": "1.0.2", - "semiotic": "^1.15.6", - "styled-jsx": "^3.1.0", - "tv4": "^1.3.0" - }, - "dependencies": { - "@nteract/transform-plotly": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@nteract/transform-plotly/-/transform-plotly-3.2.5.tgz", - "integrity": "sha512-tQi47Ly1b/YLNJWhUV8gKVkweJb6ugfGg4XylG2wnLVDoaM8ObJrHAtY74S+Kg9e88N8ExNPy9ulG2xhhSrMag==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "@nteract/plotly": "^1.0.0", - "babel-runtime": "^6.26.0", - "lodash": "^4.17.4" - } - } - } + "node_modules/@types/lodash": { + "version": "4.14.181", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", + "dev": true }, - "@nteract/transform-geojson": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@nteract/transform-geojson/-/transform-geojson-3.2.5.tgz", - "integrity": "sha512-crP5yFXAFNgE8CQzwcvCbBkbcSdJhn7YruiYreo2gU48fbX8YXOXRMwFsk31jVcMqE9/fYh9zA9sHX38UjKg/w==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "babel-runtime": "^6.26.0", - "leaflet": "^1.0.3" - } + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "@nteract/transform-model-debug": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@nteract/transform-model-debug/-/transform-model-debug-3.2.5.tgz", - "integrity": "sha512-vmtuPfMuClpFo9j9LLX9EqwEkT8B6jrYUSO30YeG2Ct9G1fPlmvmGBtIJSgHv7Km3W4FlVvwglsenFBg/ff6Og==", + "node_modules/@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "babel-runtime": "^6.26.0" + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" } }, - "@nteract/transform-plotly": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@nteract/transform-plotly/-/transform-plotly-6.0.0.tgz", - "integrity": "sha512-RnKPL/UxY0slrXtsP/7ShqZAgXSQjohOVyQcXBXZzqaC3KSd+esJhHYtYzTK2obaLv4YZwjhlLupcVolslN03A==", + "node_modules/@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", + "dev": true + }, + "node_modules/@types/shimmer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.2.tgz", + "integrity": "sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg==" + }, + "node_modules/@types/shortid": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/shortid/-/shortid-0.0.29.tgz", + "integrity": "sha1-gJPuBBam4r8qpjOBCRFLP7/6Dps=", + "dev": true + }, + "node_modules/@types/sinon": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", + "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", "dev": true, - "requires": { - "lodash": "^4.17.4", - "plotly.js-dist": "^1.48.3" + "dependencies": { + "@types/sinonjs__fake-timers": "*" } }, - "@nteract/transform-vdom": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/@nteract/transform-vdom/-/transform-vdom-2.2.5.tgz", - "integrity": "sha512-q6FbWlrSEWUmQpDV1DBPcw5FZpUcQbKOQ2a59vY/qcQ/Qjh1KUCC+gortso+WIE4P36eHZRxKz5ptCu5i47OLg==", + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, + "node_modules/@types/stack-trace": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", + "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", + "dev": true + }, + "node_modules/@types/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha1-EHPEvIJHVK49EM+riKsCN7qWTk0=", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", + "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", + "dev": true + }, + "node_modules/@types/vscode": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.100.0.tgz", + "integrity": "sha512-4uNyvzHoraXEeCamR3+fzcBlh7Afs4Ifjs4epINyUX/jvdk0uzLnwiDY35UKDKnkCHP5Nu3dljl2H8lR6s+rQw==", "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "babel-runtime": "^6.26.0", - "lodash": "^4.17.4" - } + "license": "MIT" }, - "@nteract/transform-vega": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@nteract/transform-vega/-/transform-vega-6.0.3.tgz", - "integrity": "sha512-sUY9EeCguUfP3G6AI4yg0jUOT2r7eB1VvuQGxjGj0fyhWnYIZR3xv80/aq2J6iACSBxazV+rU2Ne4abWYy6nwQ==", + "node_modules/@types/which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", + "dev": true + }, + "node_modules/@types/winreg": { + "version": "1.2.31", + "resolved": "https://registry.npmjs.org/@types/winreg/-/winreg-1.2.31.tgz", + "integrity": "sha512-SDatEMEtQ1cJK3esIdH6colduWBP+42Xw9Guq1sf/N6rM3ZxgljBduvZOwBsxRps/k5+Wwf5HJun6pH8OnD2gg==", + "dev": true + }, + "node_modules/@types/xml2js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.9.tgz", + "integrity": "sha512-CHiCKIihl1pychwR2RNX5mAYmJDACgFVCMT5OArMaO3erzwXVcBqPcusr+Vl8yeeXukxZqtF8mZioqX+mpjjdw==", "dev": true, - "requires": { - "@nteract/vega-embed-v2": "^1.1.0", - "@nteract/vega-embed-v3": "^1.1.1", - "lodash": "^4.17.4", - "vega": "^5.4.0", - "vega-embed": "^4.2.0", - "vega-lite": "^3.3.0" + "dependencies": { + "@types/node": "*" } }, - "@nteract/transforms": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@nteract/transforms/-/transforms-4.4.7.tgz", - "integrity": "sha512-G84BeBfzfdAg3cAV78ES9/yxe2ZNitg7j8MCKKx4iNS9vqeQbO92vyBsBW2D6qlddefU/RB5/HUvvtNUpd0ZRw==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "@nteract/markdown": "^3.0.1", - "@nteract/mathjax": "^3.0.1", - "@nteract/transform-vdom": "^2.2.5", - "ansi-to-react": "^3.3.5", - "babel-runtime": "^6.26.0", - "react-json-tree": "^0.11.0" + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "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": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@nteract/types": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@nteract/types/-/types-6.0.4.tgz", - "integrity": "sha512-Td7+ql+7XukuHzP2b4qiq7xjD7y6hLJAnXfX4aikjYMzUGXNUAfODqeetKEXDRODFIcwr/jcGewIlWKwedqgLQ==", - "requires": { - "@nteract/commutable": "^7.2.9", - "immutable": "^4.0.0-rc.12", - "rxjs": "^6.3.3", - "uuid": "^7.0.0" - }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@nteract/vega-embed-v2": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nteract/vega-embed-v2/-/vega-embed-v2-1.1.0.tgz", - "integrity": "sha512-5sCymGk2qzb1BC8P8MTkD0L9rG/8gPb8jyQ2Fz5aqftblgZ+DooHNcR4oi4T49mhRv0zLjqstBwDxx5JmzNdtw==", + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, - "requires": { - "d3": "3.5.17", - "d3-cloud": "^1.2.5", - "datalib": "^1.9.1", - "json-stable-stringify": "^1.0.1" + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "@nteract/vega-embed-v3": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@nteract/vega-embed-v3/-/vega-embed-v3-1.1.1.tgz", - "integrity": "sha512-tPMGmYI3aJIu4+HI03Rtub6yjCmACuvtVTjrq8+h2/OIgxBIrzaexo/QCdTKgV4bg0Pd88hskwZ8heqdMFDoHw==", + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, - "requires": { - "d3": "3.5.17", - "d3-cloud": "^1.2.5", - "d3-request": "^1.0.6", - "d3-scale-chromatic": "^1.3.3", - "datalib": "^1.9.1", - "json-stable-stringify": "^1.0.1" + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@phosphor/algorithm": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.1.3.tgz", - "integrity": "sha512-+dkdYTBglR+qGnLVQdCvYojNZMGxf+xSl1Jeksha3pm7niQktSFz2aR5gEPu/nI5LM8T8slTpqE4Pjvq8P+IVA==" - }, - "@phosphor/application": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/@phosphor/application/-/application-1.7.3.tgz", - "integrity": "sha512-ohxrW7rv5Tms4PSyPRZT6YArZQQGQNG4MgTeFzkoLJ+7mp/BcbFuvEoaV1/CUKQArofl0DCkKDOTOIkXP+/32A==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, - "requires": { - "@phosphor/commands": "^1.7.2", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/widgets": "^1.9.3" + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@phosphor/collections": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/collections/-/collections-1.2.0.tgz", - "integrity": "sha512-T9/0EjSuY6+ga2LIFRZ0xupciOR3Qnyy8Q95lhGTC0FXZUFwC8fl9e8On6IcwasCszS+1n8dtZUWSIynfgdpzw==", - "requires": { - "@phosphor/algorithm": "^1.2.0" - }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==" + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "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": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true } } }, - "@phosphor/commands": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@phosphor/commands/-/commands-1.7.2.tgz", - "integrity": "sha512-iSyBIWMHsus323BVEARBhuVZNnVel8USo+FIPaAxGcq+icTSSe6+NtSxVQSmZblGN6Qm4iw6I6VtiSx0e6YDgQ==", - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1", - "@phosphor/domutils": "^1.1.4", - "@phosphor/keyboard": "^1.1.3", - "@phosphor/signaling": "^1.3.1" - }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==" - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "requires": { - "@phosphor/algorithm": "^1.2.0" - } + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@phosphor/coreutils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/coreutils/-/coreutils-1.3.1.tgz", - "integrity": "sha512-9OHCn8LYRcPU/sbHm5v7viCA16Uev3gbdkwqoQqlV+EiauDHl70jmeL7XVDXdigl66Dz0LI11C99XOxp+s3zOA==" - }, - "@phosphor/disposable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.2.0.tgz", - "integrity": "sha512-4PoWoffdrLyWOW5Qv7I8//owvZmv57YhaxetAMWeJl13ThXc901RprL0Gxhtue2ZxL2PtUjM1207HndKo2FVjA==", - "requires": { - "@phosphor/algorithm": "^1.1.3", - "@phosphor/signaling": "^1.2.3" + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@phosphor/domutils": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@phosphor/domutils/-/domutils-1.1.4.tgz", - "integrity": "sha512-ivwq5TWjQpKcHKXO8PrMl+/cKqbgxPClPiCKc1gwbMd+6hnW5VLwNG0WBzJTxCzXK43HxX18oH+tOZ3E04wc3w==" - }, - "@phosphor/dragdrop": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@phosphor/dragdrop/-/dragdrop-1.4.1.tgz", - "integrity": "sha512-77paMoubIWk7pdwA2GVFkqba1WP48hTZZvS17N30+KVOeWfSqBL3flPSnW2yC4y6FnOP2PFOCtuPIbQv+pYhCA==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, - "requires": { - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1" - }, "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "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 } } }, - "@phosphor/keyboard": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@phosphor/keyboard/-/keyboard-1.1.3.tgz", - "integrity": "sha512-dzxC/PyHiD6mXaESRy6PZTd9JeK+diwG1pyngkyUf127IXOEzubTIbu52VSdpGBklszu33ws05BAGDa4oBE4mQ==" - }, - "@phosphor/messaging": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@phosphor/messaging/-/messaging-1.3.0.tgz", - "integrity": "sha512-k0JE+BTMKlkM335S2AmmJxoYYNRwOdW5jKBqLgjJdGRvUQkM0+2i60ahM45+J23atGJDv9esKUUBINiKHFhLew==", - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/collections": "^1.2.0" - }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "dev": true, "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==" - } + "balanced-match": "^1.0.0" } }, - "@phosphor/properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@phosphor/properties/-/properties-1.1.3.tgz", - "integrity": "sha512-GiglqzU77s6+tFVt6zPq9uuyu/PLQPFcqZt914ZhJ4cN/7yNI/SLyMzpYZ56IRMXvzK9TUgbRna6URE3XAwFUg==" - }, - "@phosphor/signaling": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.2.3.tgz", - "integrity": "sha512-DMwS0m9OgfY5ljpTsklRQPUQpTyg4obz85FyImRDacUVxUVbas95djIDEbU4s1TMzdHBBO+gfki3V4giXUvXzw==", - "requires": { - "@phosphor/algorithm": "^1.1.3" + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "@phosphor/virtualdom": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/virtualdom/-/virtualdom-1.2.0.tgz", - "integrity": "sha512-L9mKNhK2XtVjzjuHLG2uYuepSz8uPyu6vhF4EgCP0rt0TiLYaZeHwuNu3XeFbul9DMOn49eBpye/tfQVd4Ks+w==", + "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, - "requires": { - "@phosphor/algorithm": "^1.2.0" - }, "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - } + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "@phosphor/widgets": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@phosphor/widgets/-/widgets-1.9.3.tgz", - "integrity": "sha512-61jsxloDrW/+WWQs8wOgsS5waQ/MSsXBuhONt0o6mtdeL93HVz7CYO5krOoot5owammfF6oX1z0sDaUYIYgcPA==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/commands": "^1.7.2", - "@phosphor/coreutils": "^1.3.1", - "@phosphor/disposable": "^1.3.1", - "@phosphor/domutils": "^1.1.4", - "@phosphor/dragdrop": "^1.4.1", - "@phosphor/keyboard": "^1.1.3", - "@phosphor/messaging": "^1.3.0", - "@phosphor/properties": "^1.1.3", - "@phosphor/signaling": "^1.3.1", - "@phosphor/virtualdom": "^1.2.0" - }, - "dependencies": { - "@phosphor/algorithm": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@phosphor/algorithm/-/algorithm-1.2.0.tgz", - "integrity": "sha512-C9+dnjXyU2QAkWCW6QVDGExk4hhwxzAKf5/FIuYlHAI9X5vFv99PYm0EREDxX1PbMuvfFBZhPNu0PvuSDQ7sFA==", - "dev": true - }, - "@phosphor/disposable": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/disposable/-/disposable-1.3.1.tgz", - "integrity": "sha512-0NGzoTXTOizWizK/brKKd5EjJhuuEH4903tLika7q6wl/u0tgneJlTh7R+MBVeih0iNxtuJAfBa3IEY6Qmj+Sw==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0", - "@phosphor/signaling": "^1.3.1" - } - }, - "@phosphor/signaling": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@phosphor/signaling/-/signaling-1.3.1.tgz", - "integrity": "sha512-Eq3wVCPQAhUd9+gUGaYygMr+ov7dhSGblSBXiDzpZlSIfa8OVD4P3cCvYXr/acDTNmZ/gHTcSFO8/n3rDkeXzg==", - "dev": true, - "requires": { - "@phosphor/algorithm": "^1.2.0" - } - } - } - }, - "@sheerun/mutationobserver-shim": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sheerun/mutationobserver-shim/-/mutationobserver-shim-0.3.2.tgz", - "integrity": "sha512-vTCdPp/T/Q3oSqwHmZ5Kpa9oI7iLtGl3RQaA/NyLHikvcrPxACkkKVr/XzkSPJWXHRhKGzVvb0urJsbMlRxi1Q==", - "dev": true - }, - "@sindresorhus/df": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-2.1.0.tgz", - "integrity": "sha1-0gjPJ+BvC7R20U197M19cm6ao4k=", + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, - "requires": { - "execa": "^0.2.2" - }, "dependencies": { - "execa": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.2.2.tgz", - "integrity": "sha1-4urUcsLDGq1vc/GslW7vReEjIMs=", - "dev": true, - "requires": { - "cross-spawn-async": "^2.1.1", - "npm-run-path": "^1.0.0", - "object-assign": "^4.0.1", - "path-key": "^1.0.0", - "strip-eof": "^1.0.0" - } - }, - "npm-run-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-1.0.0.tgz", - "integrity": "sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8=", - "dev": true, - "requires": { - "path-key": "^1.0.0" - } - }, - "path-key": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-1.0.0.tgz", - "integrity": "sha1-XVPVeAGWRsDWiADbThRua9wqx68=", - "dev": true - } + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" } }, - "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", + "node_modules/@typescript-eslint/utils/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 }, - "@sinonjs/commons": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.7.0.tgz", - "integrity": "sha512-qbk9AP+cZUsKdW1GJsBpxPKFmCJ0T8swwzVje3qFd+AkQb74Q/tiuzrdfFg8AD2g5HH/XbE/I8Uc1KYHVYWfhg==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-4.0.1.tgz", - "integrity": "sha512-asIdlLFrla/WZybhm0C8eEzaDNNrzymiTqHMeJl6zPW2881l3uuVRpm0QlRQEjqYWv6CcKMGYME3LbrLJsORBw==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, - "requires": { - "@sinonjs/commons": "^1", - "@sinonjs/samsam": "^4.2.0" + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@sinonjs/samsam": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-4.2.0.tgz", - "integrity": "sha512-yG7QbUz38ZPIegfuSMEcbOo0kkLGmPa8a0Qlz4dk7+cXYALDScWjIZzAm/u2+Frh+bcdZF6wZJZwwuJjY0WAjA==", + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true, - "requires": { - "@sinonjs/commons": "^1.6.0", - "array-from": "^2.1.1", - "lodash.get": "^4.4.2" - } - }, - "@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", - "dev": true - }, - "@stroncium/procfs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@stroncium/procfs/-/procfs-1.1.1.tgz", - "integrity": "sha512-c8A7hTAu1FgWJTfOQNqp0N9K/9amlVktNRQidzeeX4dTJpSNl2Y65s9BSfnMlFFGMGP+rBvrb0WTTv7ad6MJ9A==", - "dev": true + "license": "ISC" }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" + "node_modules/@vscode/extension-telemetry": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-0.8.4.tgz", + "integrity": "sha512-UqM9+KZDDK3MyoHTsg6XNM+XO6pweQxzCpqJz33BoBEYAGsbBviRYcVpJglgay2oReuDD2pOI1Nio3BKNDLhWA==", + "dependencies": { + "@microsoft/1ds-core-js": "^3.2.13", + "@microsoft/1ds-post-js": "^3.2.13", + "@microsoft/applicationinsights-web-basic": "^3.0.2", + "applicationinsights": "^2.7.1" + }, + "engines": { + "vscode": "^1.75.0" } }, - "@testing-library/dom": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-6.11.0.tgz", - "integrity": "sha512-Pkx9LMIGshyNbfmecjt18rrAp/ayMqGH674jYER0SXj0iG9xZc+zWRjk2Pg9JgPBDvwI//xGrI/oOQkAi4YEew==", + "node_modules/@vscode/test-electron": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.8.tgz", + "integrity": "sha512-b4aZZsBKtMGdDljAsOPObnAi7+VWIaYl3ylCz1jTs+oV6BZ4TNHcVNC3xUn0azPeszBmwSBDQYfFESIaUQnrOg==", "dev": true, - "requires": { - "@babel/runtime": "^7.6.2", - "@sheerun/mutationobserver-shim": "^0.3.2", - "@types/testing-library__dom": "^6.0.0", - "aria-query": "3.0.0", - "pretty-format": "^24.9.0", - "wait-for-expect": "^3.0.0" - }, "dependencies": { - "@babel/runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", - "integrity": "sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - } + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=16" } }, - "@testing-library/react": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-9.4.0.tgz", - "integrity": "sha512-XdhDWkI4GktUPsz0AYyeQ8M9qS/JFie06kcSnUVcpgOwFjAu9vhwR83qBl+lw9yZWkbECjL8Hd+n5hH6C0oWqg==", + "node_modules/@vscode/vsce": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.27.0.tgz", + "integrity": "sha512-FFUMBVSyyjjJpWszwqk7d4U3YllY8FdWslbUDMRki1x4ZjA3Z0hmRMfypWrjP9sptbSR9nyPFU4uqjhy2qRB/w==", "dev": true, - "requires": { - "@babel/runtime": "^7.7.6", - "@testing-library/dom": "^6.11.0", - "@types/testing-library__react": "^9.1.2" - }, "dependencies": { - "@babel/runtime": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.3.tgz", - "integrity": "sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - } + "@azure/identity": "^4.1.0", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^6.2.1", + "form-data": "^4.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" + }, + "bin": { + "vsce": "vsce" + }, + "engines": { + "node": ">= 16" + }, + "optionalDependencies": { + "keytar": "^7.7.0" } }, - "@tootallnate/once": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.0.0.tgz", - "integrity": "sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA==", - "dev": true + "node_modules/@vscode/vsce-sign": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.4.tgz", + "integrity": "sha512-0uL32egStKYfy60IqnynAChMTbL0oqpqk0Ew0YHiIb+fayuGZWADuIPHWUcY1GCnAA+VgchOPDMxnc2R3XGWEA==", + "dev": true, + "hasInstallScript": true, + "optionalDependencies": { + "@vscode/vsce-sign-alpine-arm64": "2.0.2", + "@vscode/vsce-sign-alpine-x64": "2.0.2", + "@vscode/vsce-sign-darwin-arm64": "2.0.2", + "@vscode/vsce-sign-darwin-x64": "2.0.2", + "@vscode/vsce-sign-linux-arm": "2.0.2", + "@vscode/vsce-sign-linux-arm64": "2.0.2", + "@vscode/vsce-sign-linux-x64": "2.0.2", + "@vscode/vsce-sign-win32-arm64": "2.0.2", + "@vscode/vsce-sign-win32-x64": "2.0.2" + } + }, + "node_modules/@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz", + "integrity": "sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "alpine" + ] }, - "@types/accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==", + "node_modules/@vscode/vsce-sign-alpine-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz", + "integrity": "sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "@types/node": "*" - } + "optional": true, + "os": [ + "alpine" + ] }, - "@types/ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-r1W316vjsZXn1/csLC4HcCJs6jIHIzksHJd7xx+Dl+PAb0S2Dh9cR8ZsIMEfGmbBtP7JNWlf2KKahSkDP6rg3g==", - "dev": true + "node_modules/@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz", + "integrity": "sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] }, - "@types/anymatch": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", - "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==", - "dev": true + "node_modules/@vscode/vsce-sign-darwin-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz", + "integrity": "sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] }, - "@types/backbone": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.1.tgz", - "integrity": "sha512-KYfGuQy4d2vvYXbn0uHFZ6brFLndatTMomxBlljpbWf4kFpA3BG/6LA3ec+J9iredrX6eAVI7sm9SVAvwiIM6g==", + "node_modules/@vscode/vsce-sign-linux-arm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz", + "integrity": "sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ==", + "cpu": [ + "arm" + ], "dev": true, - "requires": { - "@types/jquery": "*", - "@types/underscore": "*" - } + "optional": true, + "os": [ + "linux" + ] }, - "@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", + "node_modules/@vscode/vsce-sign-linux-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz", + "integrity": "sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA==", + "cpu": [ + "arm64" + ], "dev": true, - "requires": { - "@types/connect": "*", - "@types/node": "*" - } + "optional": true, + "os": [ + "linux" + ] }, - "@types/caseless": { - "version": "0.12.2", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", - "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", - "dev": true + "node_modules/@vscode/vsce-sign-linux-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz", + "integrity": "sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] }, - "@types/chai": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.1.7.tgz", - "integrity": "sha512-2Y8uPt0/jwjhQ6EiluT0XCri1Dbplr0ZxfFXUz+ye13gaqE8u5gL5ppao1JrUYr9cIip5S6MvQzBS7Kke7U9VA==", - "dev": true + "node_modules/@vscode/vsce-sign-win32-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz", + "integrity": "sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] }, - "@types/chai-arrays": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/chai-arrays/-/chai-arrays-1.0.2.tgz", - "integrity": "sha512-/kgYvj5Pwiv/bOlJ6c5GlRF/W6lUGSLrpQGl/7Gg6w7tvBYcf0iF91+wwyuwDYGO2zM0wNpcoPixZVif8I/r6g==", + "node_modules/@vscode/vsce-sign-win32-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz", + "integrity": "sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg==", + "cpu": [ + "x64" + ], "dev": true, - "requires": { - "@types/chai": "*" + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@vscode/vsce/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" } }, - "@types/chai-as-promised": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz", - "integrity": "sha512-MFiW54UOSt+f2bRw8J7LgQeIvE/9b4oGvwU7XW30S9QGAiHGnU/fmiOprsyMkdmH2rl8xSPc0/yrQw8juXU6bQ==", + "node_modules/@vscode/vsce/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "requires": { - "@types/chai": "*" + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" } }, - "@types/cheerio": { - "version": "0.22.12", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.12.tgz", - "integrity": "sha512-aczowyAJNfrkBV+HS8DyAA87OnvkqGrrOmm5s7V6Jbgimzv/1ZoAy91cLJX8GQrUS60KufD7EIzA2LbK8HV4hg==", + "node_modules/@vscode/vsce/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "requires": { - "@types/node": "*" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "@types/clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@types/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-A1HQhQ0hkvqqByJMgg+Wiv9p9XdoYEzuwm11SVo1mX2/4PSdhjcrUlilJQoqLscIheC51t1D5g+EFWCXZ2VTQQ==", + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "@types/clone": { - "version": "0.1.30", - "resolved": "https://registry.npmjs.org/@types/clone/-/clone-0.1.30.tgz", - "integrity": "sha1-5zZWSMG0ITalnH1QQGN7O1yDthQ=", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true }, - "@types/color-name": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", - "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true }, - "@types/concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", - "dev": true, - "requires": { - "@types/node": "*" - } + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true }, - "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" } }, - "@types/cookiejar": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@types/cookiejar/-/cookiejar-2.1.1.tgz", - "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true }, - "@types/cookies": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@types/cookies/-/cookies-0.7.4.tgz", - "integrity": "sha512-oTGtMzZZAVuEjTwCjIh8T8FrC8n/uwy+PG0yTvQcdZ7etoel7C7/3MSd7qrukENTgQtotG7gvBlBojuVs7X5rw==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, - "requires": { - "@types/connect": "*", - "@types/express": "*", - "@types/keygrip": "*", - "@types/node": "*" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "@types/copy-webpack-plugin": { - "version": "4.4.4", - "resolved": "https://registry.npmjs.org/@types/copy-webpack-plugin/-/copy-webpack-plugin-4.4.4.tgz", - "integrity": "sha512-D8NyCMfHFWi638Cn5gi88mELGrISQdzDAcmOk4j70bzm0kLey99Zp5xsFsL44qPi+a22tcB39U5jiJiV2XMd9A==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*", - "@types/webpack": "*" + "dependencies": { + "@xtuc/ieee754": "^1.2.0" } }, - "@types/cors": { - "version": "2.8.6", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.6.tgz", - "integrity": "sha512-invOmosX0DqbpA+cE2yoHGUlF/blyf7nB0OGYBBiH27crcVm5NmFaZkLP4Ta1hGaesckCi5lVLlydNJCxkTOSg==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, - "requires": { - "@types/express": "*" + "dependencies": { + "@xtuc/long": "4.2.2" } }, - "@types/debug": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.5.tgz", - "integrity": "sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true }, - "@types/decompress": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.3.tgz", - "integrity": "sha512-W24e3Ycz1UZPgr1ZEDHlK4XnvOr+CpJH3qNsFeqXwwlW/9END9gxn3oJSsp7gYdiQxrXUHwUUd3xuzVz37MrZQ==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, - "@types/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@types/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-EGlKlgMhnLt/cM4DbUSafFdrkeJoC9Mvnj0PUCU7tFmTjMjNRT957kXCx0wYm3JuEq4o4ZsS5vG+NlkM2DMd2A==", - "dev": true - }, - "@types/del": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/del/-/del-3.0.1.tgz", - "integrity": "sha512-y6qRq6raBuu965clKgx6FHuiPu3oHdtmzMPXi8Uahsjdq1L6DL5fS/aY5/s71YwM7k6K1QIWvem5vNwlnNGIkQ==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, - "requires": { - "@types/glob": "*" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "@types/diff-match-patch": { - "version": "1.0.32", - "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.32.tgz", - "integrity": "sha512-bPYT5ECFiblzsVzyURaNhljBH2Gh1t9LowgUwciMrNAhFewLkHT2H0Mto07Y4/3KCOGZHRQll3CTtQZ0X11D/A==", - "dev": true - }, - "@types/dom4": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/dom4/-/dom4-2.0.1.tgz", - "integrity": "sha512-kSkVAvWmMZiCYtvqjqQEwOmvKwcH+V4uiv3qPQ8pAh1Xl39xggGEo8gHUqV4waYGHezdFw0rKBR8Jt0CrQSDZA==", - "dev": true - }, - "@types/download": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@types/download/-/download-6.2.4.tgz", - "integrity": "sha512-Lo5dy3ai6LNnbL663sgdzqL1eib11u1yKH6w3v3IXEOO4kRfQpMn1qWUTaumcHLACjFp1RcBx9tUXEvJoR3vcA==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, - "requires": { - "@types/decompress": "*", - "@types/got": "^8", - "@types/node": "*" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, - "@types/enzyme": { - "version": "3.10.2", - "resolved": "https://registry.npmjs.org/@types/enzyme/-/enzyme-3.10.2.tgz", - "integrity": "sha512-tAFqfBVAxaxOCCcCpFrv6yFDg/hwL1KtJc7dsOaO+BBdSppTcyRP7jO2ze5va7NDa8iSFfAaZ9NeuybmMulu0w==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, - "requires": { - "@types/cheerio": "*", - "@types/react": "*" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "@types/enzyme-adapter-react-16": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.0.5.tgz", - "integrity": "sha512-K7HLFTkBDN5RyRmU90JuYt8OWEY2iKUn43SDWEoBOXd/PowUWjLZ3Q6qMBiQuZeFYK/TOstaZxsnI0fXoAfLpg==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, - "requires": { - "@types/enzyme": "*" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" } }, - "@types/event-stream": { - "version": "3.3.34", - "resolved": "https://registry.npmjs.org/@types/event-stream/-/event-stream-3.3.34.tgz", - "integrity": "sha512-LLiivgWKii4JeMzFy3trrxqkRrVSdue8WmbXyHuSJLwNrhIQU5MTrc65jhxEPwMyh5HR1xevSdD+k2nnSRKw9g==", + "node_modules/@webpack-cli/configtest": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", "dev": true, - "requires": { - "@types/node": "*" + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" } }, - "@types/events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", - "dev": true - }, - "@types/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.2.tgz", - "integrity": "sha512-5mHFNyavtLoJmnusB8OKJ5bshSzw+qkMIBAobLrIM48HJvunFva9mOa6aBwh64lBFyNwBbs0xiEFuj4eU/NjCA==", + "node_modules/@webpack-cli/info": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "dependencies": { + "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" } }, - "@types/express-serve-static-core": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.0.tgz", - "integrity": "sha512-Xnub7w57uvcBqFdIGoRg1KhNOeEj0vB6ykUM7uFWyxvbdE89GFyqgmUcanAriMr4YOxNFZBAWkfcWIb4WBPt3g==", + "node_modules/@webpack-cli/serve": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", "dev": true, - "requires": { - "@types/node": "*", - "@types/range-parser": "*" + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } } }, - "@types/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha512-mky/O83TXmGY39P1H9YbUpjV6l6voRYlufqfFCvel8l1phuy8HRjdWc1rrPuN53ITBJlbyMSV6z3niOySO5pgQ==", + "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==", "dev": true }, - "@types/form-data": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz", - "integrity": "sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==", - "dev": true, - "requires": { - "@types/node": "*" + "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==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "@types/fs-extra": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz", - "integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==", - "dev": true, - "requires": { - "@types/node": "*" + "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==", + "peerDependencies": { + "acorn": "^8" } }, - "@types/get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha512-TiNg8R1kjDde5Pub9F9vCwZA/BNW9HeXP5b9j7Qucqncy/McfPZ6xze/EyBdXS5FhMIGN6Fx3vg75l5KHy3V1Q==", - "dev": true - }, - "@types/glob": { - "version": "5.0.36", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.36.tgz", - "integrity": "sha512-KEzSKuP2+3oOjYYjujue6Z3Yqis5HKA1BsIC+jZ1v3lrRNdsqyNNtX0rQf6LSuI4DJJ2z5UV//zBZCcvM0xikg==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, - "requires": { - "@types/events": "*", - "@types/minimatch": "*", - "@types/node": "*" + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" } }, - "@types/got": { - "version": "8.3.5", - "resolved": "https://registry.npmjs.org/@types/got/-/got-8.3.5.tgz", - "integrity": "sha512-AaXSrIF99SjjtPVNmCmYb388HML+PKEJb/xmj4SbL2ZO0hHuETZZzyDIKfOqaEoAHZEuX4sC+FRFrHYJoIby6A==", + "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, - "requires": { - "@types/node": "*" + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "dev": true, - "requires": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" + "engines": { + "node": ">=0.4.0" } }, - "@types/html-minifier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-3.5.3.tgz", - "integrity": "sha512-j1P/4PcWVVCPEy5lofcHnQ6BtXz9tHGiFPWzqm7TtGuWZEfCHEP446HlkSNc9fQgNJaJZ6ewPtp2aaFla/Uerg==", - "dev": true, - "requires": { - "@types/clean-css": "*", - "@types/relateurl": "*", - "@types/uglify-js": "*" + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "@types/html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@types/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-in9rViBsTRB4ZApndZ12It68nGzSMHVK30JD7c49iLIHMFeTPbP7I7wevzMv7re2o0k5TlU6Ry/beyrmgWX7Bg==", - "dev": true, - "requires": { - "@types/html-minifier": "*", - "@types/tapable": "*", - "@types/webpack": "*" + "node_modules/agent-base/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 + } } }, - "@types/http-assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@types/http-assert/-/http-assert-1.5.1.tgz", - "integrity": "sha512-PGAK759pxyfXE78NbKxyfRcWYA/KwW17X290cNev/qAsn9eQIxkH4shoNBafH37wewhDG/0p1cHPbK6+SzZjWQ==", - "dev": true - }, - "@types/iconv-lite": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@types/iconv-lite/-/iconv-lite-0.0.1.tgz", - "integrity": "sha1-qjuL2ivlErGuCgV7lC6GnDcKVWk=", + "node_modules/aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "@types/istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==", - "dev": true + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "license": "MIT", + "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" + } }, - "@types/istanbul-lib-report": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz", - "integrity": "sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "@types/istanbul-reports": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz", - "integrity": "sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*", - "@types/istanbul-lib-report": "*" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "@types/jquery": { - "version": "1.10.35", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-1.10.35.tgz", - "integrity": "sha512-SVtqEcudm7yjkTwoRA1gC6CNMhGDdMx4Pg8BPdiqI7bXXdCn1BPmtxgeWYQOgDxrq53/5YTlhq5ULxBEAlWIBg==", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "@types/jsdom": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-11.12.0.tgz", - "integrity": "sha512-XHMNZFQ0Ih3A4/NTWAO15+OsQafPKnQCanN0FYGbsTM/EoI5EoEAvvkF51/DQC2BT5low4tomp7k2RLMlriA5Q==", + "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==", "dev": true, - "requires": { - "@types/events": "*", - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^4.0.0" + "peerDependencies": { + "ajv": "^6.9.1" } }, - "@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", - "dev": true - }, - "@types/keygrip": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/keygrip/-/keygrip-1.0.1.tgz", - "integrity": "sha1-/1QEYtL7TQqIRBzq8n0oewHD2Hg=", - "dev": true + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "@types/koa": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/@types/koa/-/koa-2.11.0.tgz", - "integrity": "sha512-Hgx/1/rVlJvqYBrdeCsS7PDiR2qbxlMt1RnmNWD4Uxi5FF9nwkYqIldo7urjc+dfNpk+2NRGcnAYd4L5xEhCcQ==", + "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, - "requires": { - "@types/accepts": "*", - "@types/cookies": "*", - "@types/http-assert": "*", - "@types/keygrip": "*", - "@types/koa-compose": "*", - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "@types/koa-compose": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@types/koa-compose/-/koa-compose-3.2.5.tgz", - "integrity": "sha512-B8nG/OoE1ORZqCkBVsup/AKcvjdgoHnfi4pZMn5UwAPCbhk/96xyv284eBYW8JlQbQ7zDmnpFr68I/40mFoIBQ==", + "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, - "requires": { - "@types/koa": "*" + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "@types/koa-compress": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@types/koa-compress/-/koa-compress-2.0.9.tgz", - "integrity": "sha512-1Sa9OsbHd2N2N7gLpdIRHe8W99EZbfIR31D7Iisx16XgwZCnWUtGXzXQejhu74Y1pE/wILqBP6VL49ch/MVpZw==", + "node_modules/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true, - "requires": { - "@types/koa": "*", - "@types/node": "*" + "engines": { + "node": ">=0.10.0" } }, - "@types/koa-logger": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/koa-logger/-/koa-logger-3.1.1.tgz", - "integrity": "sha512-wp2HaskkPugfwgXgNnc+idnReuJZSTTYQbkcxXjsMhp1kTc342PxDzTL9FXDgBfEvgt9NX1CCGjkwPKX2dlEKQ==", + "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==", "dev": true, - "requires": { - "@types/koa": "*" + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "@types/koa__cors": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@types/koa__cors/-/koa__cors-2.2.3.tgz", - "integrity": "sha512-RfG2EuSc+nv/E+xbDSLW8KCoeri/3AkqwVPuENfF/DctllRoXhooboO//Sw7yFtkLvj7nG7O1H3JcZmoTQz8nQ==", + "node_modules/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", "dev": true, - "requires": { - "@types/koa": "*" + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "@types/loadable__component": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/@types/loadable__component/-/loadable__component-5.10.0.tgz", - "integrity": "sha512-AaDP1VxV3p7CdPOtOTl3ALgQ6ES4AxJKO9UGj9vJonq/w2yERxwdzFiWNQFh9fEDXEzjxujBlM2RmSJtHV1/pA==", + "node_modules/append-buffer/node_modules/buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", "dev": true, - "requires": { - "@types/react": "*" + "engines": { + "node": ">=0.4.0" } }, - "@types/loader-utils": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/loader-utils/-/loader-utils-1.1.3.tgz", - "integrity": "sha512-euKGFr2oCB3ASBwG39CYJMR3N9T0nanVqXdiH7Zu/Nqddt6SmFRxytq/i2w9LQYNQekEtGBz+pE3qG6fQTNvRg==", + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", "dev": true, - "requires": { - "@types/node": "*", - "@types/webpack": "*" + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/applicationinsights": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-2.7.3.tgz", + "integrity": "sha512-JY8+kTEkjbA+kAVNWDtpfW2lqsrDALfDXuxOs74KLPu2y13fy/9WB52V4LfYVTVcW1/jYOXjTxNS2gPZIDh1iw==", + "dependencies": { + "@azure/core-auth": "^1.5.0", + "@azure/core-rest-pipeline": "1.10.1", + "@azure/core-util": "1.2.0", + "@azure/opentelemetry-instrumentation-azure-sdk": "^1.0.0-beta.5", + "@microsoft/applicationinsights-web-snippet": "^1.0.1", + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/core": "^1.15.2", + "@opentelemetry/sdk-trace-base": "^1.15.2", + "@opentelemetry/semantic-conventions": "^1.15.2", + "cls-hooked": "^4.2.2", + "continuation-local-storage": "^3.2.1", + "diagnostic-channel": "1.1.1", + "diagnostic-channel-publishers": "1.0.7" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "applicationinsights-native-metrics": "*" + }, + "peerDependenciesMeta": { + "applicationinsights-native-metrics": { + "optional": true + } } }, - "@types/lodash": { - "version": "4.14.136", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.136.tgz", - "integrity": "sha512-0GJhzBdvsW2RUccNHOBkabI8HZVdOXmXbXhuKlDEd5Vv12P7oAVGfomGp3Ne21o5D/qu1WmthlNKFaoZJJeErA==", - "dev": true + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "@types/md5": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/@types/md5/-/md5-2.1.33.tgz", - "integrity": "sha512-8+X960EtKLoSblhauxLKy3zzotagjoj3Jt1Tx9oaxUdZEPIBl+mkrUz6PNKpzJgkrKSN9YgkWTA29c0KnLshmA==", + "node_modules/archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", "dev": true, - "requires": { - "@types/node": "*" + "license": "MIT", + "dependencies": { + "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" } }, - "@types/memoize-one": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@types/memoize-one/-/memoize-one-4.1.1.tgz", - "integrity": "sha512-+9djKUUn8hOyktLCfCy4hLaIPgDNovaU36fsnZe9trFHr6ddlbIn2q0SEsnkCkNR+pBWEU440Molz/+Mpyf+gQ==", - "dev": true - }, - "@types/mime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz", - "integrity": "sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==", - "dev": true + "node_modules/archive-type/node_modules/file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "node_modules/arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", "dev": true }, - "@types/nock": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@types/nock/-/nock-10.0.3.tgz", - "integrity": "sha512-OthuN+2FuzfZO3yONJ/QVjKmLEuRagS9TV9lEId+WHL9KhftYG+/2z+pxlr0UgVVXSpVD8woie/3fzQn8ft/Ow==", + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "@types/node": { - "version": "10.14.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.18.tgz", - "integrity": "sha512-ryO3Q3++yZC/+b8j8BdKd/dn9JlzlHBPdm80656xwYUdmPkpTGTjkAdt6BByiNupGPE8w0FhBgvYy/fX9hRNGQ==", - "dev": true + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "@types/node-fetch": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.3.7.tgz", - "integrity": "sha512-+bKtuxhj/TYSSP1r4CZhfmyA0vm/aDRQNo7vbAgf6/cZajn0SAniGGST07yvI4Q+q169WTa2/x9gEHfJrkcALw==", + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">=0.10.0" } }, - "@types/pdfkit": { - "version": "0.7.36", - "resolved": "https://registry.npmjs.org/@types/pdfkit/-/pdfkit-0.7.36.tgz", - "integrity": "sha512-9eRA6MuW+n78yU3HhoIrDxjyAX2++B5MpLDYqHOnaRTquCw+5sYXT+QN8E1eSaxvNUwlRfU3tOm4UzTeGWmBqg==", + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/promisify-node": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/promisify-node/-/promisify-node-0.4.0.tgz", - "integrity": "sha1-3MceY8Cr9oYbrn0S9swzlceDk2s=", - "dev": true + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "@types/prop-types": { - "version": "15.7.1", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.1.tgz", - "integrity": "sha512-CFzn9idOEpHrgdw8JsoTkaDDyRWk1jrzIV8djzcgpq0y9tG4B4lFT+Nxh52DVpDXV+n4+NPNv7M1Dj5uMp6XFg==", - "dev": true + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "@types/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-Jugo5V/1bS0fRhy2z8+cUAHEyWOATaz4rbyLVvcFs7+dXp5HfwpEwzF1Q11bB10ApUqHf+yTauxI0UXQDwGrbA==", - "dev": true + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "@types/range-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", - "integrity": "sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==", - "dev": true + "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" + } }, - "@types/react": { - "version": "16.8.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.23.tgz", - "integrity": "sha512-abkEOIeljniUN9qB5onp++g0EY38h7atnDHxwKUFz1r3VH1+yG1OKi2sNPTyObL40goBmfKFpdii2lEzwLX1cA==", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/react-dom": { - "version": "16.8.4", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.8.4.tgz", - "integrity": "sha512-eIRpEW73DCzPIMaNBDP5pPIpK1KXyZwNgfxiVagb5iGiz6da+9A5hslSX6GAQKdO7SayVCS/Fr2kjqprgAvkfA==", + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dev": true, - "requires": { - "@types/react": "*" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/react-json-tree": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/@types/react-json-tree/-/react-json-tree-0.6.11.tgz", - "integrity": "sha512-HP0Sf0ZHjCi1FHLJxh/pLaxaevEW6ILlV2C5Dn3EZFTkLjWkv+EVf/l/zvtmoU9ZwuO/3TKVeWK/700UDxunTw==", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dev": true, - "requires": { - "@types/react": "*" + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/react-redux": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.5.tgz", - "integrity": "sha512-ZoNGQMDxh5ENY7PzU7MVonxDzS1l/EWiy8nUhDqxFqUZn4ovboCyvk4Djf68x6COb7vhGTKjyjxHxtFdAA5sUA==", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, - "requires": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/react-virtualized": { - "version": "9.21.2", - "resolved": "https://registry.npmjs.org/@types/react-virtualized/-/react-virtualized-9.21.2.tgz", - "integrity": "sha512-Q6geJaDd8FlBw3ilD4ODferTyVtYAmDE3d7+GacfwN0jPt9rD9XkeuPjcHmyIwTrMXuLv1VIJmRxU9WQoQFBJw==", + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, - "requires": { - "@types/prop-types": "*", - "@types/react": "*" + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "@types/redux-logger": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@types/redux-logger/-/redux-logger-3.0.7.tgz", - "integrity": "sha512-oV9qiCuowhVR/ehqUobWWkXJjohontbDGLV88Be/7T4bqMQ3kjXwkFNL7doIIqlbg3X2PC5WPziZ8/j/QHNQ4A==", + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, - "requires": { - "redux": "^3.6.0" - }, "dependencies": { - "redux": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", - "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", - "dev": true, - "requires": { - "lodash": "^4.2.1", - "lodash-es": "^4.2.1", - "loose-envify": "^1.1.0", - "symbol-observable": "^1.0.3" - } - }, - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - } + "object-assign": "^4.1.1", + "util": "0.10.3" } }, - "@types/relateurl": { - "version": "0.2.28", - "resolved": "https://registry.npmjs.org/@types/relateurl/-/relateurl-0.2.28.tgz", - "integrity": "sha1-a9p9uGU/piZD9e5p6facEaOS46Y=", + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, - "@types/request": { - "version": "2.48.1", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.1.tgz", - "integrity": "sha512-ZgEZ1TiD+KGA9LiAAPPJL68Id2UWfeSO62ijSXZjFJArVV+2pKcsVHmrcu+1oiE3q6eDGiFiSolRc4JHoerBBg==", + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, - "requires": { - "@types/caseless": "*", - "@types/form-data": "*", - "@types/node": "*", - "@types/tough-cookie": "*" + "dependencies": { + "inherits": "2.0.1" } }, - "@types/semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", - "dev": true + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } }, - "@types/serve-static": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz", - "integrity": "sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==", + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, - "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "engines": { + "node": ">=0.10.0" } }, - "@types/shortid": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/shortid/-/shortid-0.0.29.tgz", - "integrity": "sha1-gJPuBBam4r8qpjOBCRFLP7/6Dps=", + "node_modules/ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, - "@types/sinon": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.5.1.tgz", - "integrity": "sha512-EZQUP3hSZQyTQRfiLqelC9NMWd1kqLcmQE0dMiklxBkgi84T+cHOhnKpgk4NnOWpGX863yE6+IaGnOXUNFqDnQ==", + "node_modules/async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", "dev": true }, - "@types/socket.io": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@types/socket.io/-/socket.io-2.1.4.tgz", - "integrity": "sha512-cI98INy7tYnweTsUlp8ocveVdAxENUThO0JsLSCs51cjOP2yV5Mqo5QszMDPckyRRA+PO6+wBgKvGvHUCc23TQ==", + "node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" } }, - "@types/source-list-map": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", - "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==", - "dev": true - }, - "@types/stack-trace": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", - "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", - "dev": true + "node_modules/async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "dependencies": { + "stack-chain": "^1.3.7" + }, + "engines": { + "node": "^4.7 || >=6.9 || >=7.3" + } }, - "@types/superagent": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@types/superagent/-/superagent-3.8.7.tgz", - "integrity": "sha512-9KhCkyXv268A2nZ1Wvu7rQWM+BmdYUVkycFeNnYrUL5Zwu7o8wPQ3wBfW59dDP+wuoxw0ww8YKgTNv8j/cgscA==", - "dev": true, - "requires": { - "@types/cookiejar": "*", - "@types/node": "*" + "node_modules/async-listener": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", + "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", + "dependencies": { + "semver": "^5.3.0", + "shimmer": "^1.1.0" + }, + "engines": { + "node": "<=0.11.8 || >0.11.10" } }, - "@types/tapable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz", - "integrity": "sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==", - "dev": true + "node_modules/async-listener/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } }, - "@types/temp": { - "version": "0.8.34", - "resolved": "https://registry.npmjs.org/@types/temp/-/temp-0.8.34.tgz", - "integrity": "sha512-oLa9c5LHXgS6UimpEVp08De7QvZ+Dfu5bMQuWyMhf92Z26Q10ubEMOWy9OEfUdzW7Y/sDWVHmUaLFtmnX/2j0w==", + "node_modules/async-settle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "async-done": "^2.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "@types/testing-library__dom": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/@types/testing-library__dom/-/testing-library__dom-6.11.1.tgz", - "integrity": "sha512-ImChHtQqmjwraRLqBC2sgSQFtczeFvBmBcfhTYZn/3KwXbyD07LQykEQ0xJo7QHc1GbVvf7pRyGaIe6PkCdxEw==", + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, - "requires": { - "pretty-format": "^24.3.0" + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "@types/testing-library__react": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@types/testing-library__react/-/testing-library__react-9.1.2.tgz", - "integrity": "sha512-CYaMqrswQ+cJACy268jsLAw355DZtPZGt3Jwmmotlcu8O/tkoXBI6AeZ84oZBJsIsesozPKzWzmv/0TIU+1E9Q==", + "node_modules/axe-core": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", + "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", "dev": true, - "requires": { - "@types/react-dom": "*", - "@types/testing-library__dom": "*" + "engines": { + "node": ">=4" } }, - "@types/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha1-EHPEvIJHVK49EM+riKsCN7qWTk0=", - "dev": true - }, - "@types/tough-cookie": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.5.tgz", - "integrity": "sha512-SCcK7mvGi3+ZNz833RRjFIxrn4gI1PPR3NtuIS+6vMkvmsGjosqTJwRt5bAEFLRz+wtJMWv8+uOnZf2hi2QXTg==", + "node_modules/axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "@types/uglify-js": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.4.tgz", - "integrity": "sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==", + "node_modules/azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, - "requires": { - "source-map": "^0.6.1" + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" } }, - "@types/underscore": { - "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.9.4.tgz", - "integrity": "sha512-CjHWEMECc2/UxOZh0kpiz3lEyX2Px3rQS9HzD20lxMvx571ivOBQKeLnqEjxUY0BMgp6WJWo/pQLRBwMW5v4WQ==", - "dev": true - }, - "@types/untildify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/untildify/-/untildify-3.0.0.tgz", - "integrity": "sha512-FTktI3Y1h+gP9GTjTvXBP5v8xpH4RU6uS9POoBcGy4XkS2Np6LNtnP1eiNNth4S7P+qw2c/rugkwBasSHFzJEg==", + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", "dev": true }, - "@types/uuid": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.5.tgz", - "integrity": "sha512-MNL15wC3EKyw1VLF+RoVO4hJJdk9t/Hlv3rt1OL65Qvuadm4BYo6g9ZJQqoq7X8NBFSsQXgAujWciovh2lpVjA==", + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, - "@types/vscode": { - "version": "1.43.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.43.0.tgz", - "integrity": "sha512-kIaR9qzd80rJOxePKpCB/mdy00mz8Apt2QA5Y6rdrKFn13QNFNeP3Hzmsf37Bwh/3cS7QjtAeGSK7wSqAU0sYQ==", + "node_modules/babel-runtime/node_modules/core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "deprecated": "core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true, + "hasInstallScript": true + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, - "@types/webpack": { - "version": "4.4.34", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.4.34.tgz", - "integrity": "sha512-GnEBgjHsfO1M7DIQ0dAupSofcmDItE3Zsu3reK8SQpl/6N0rtUQxUmQzVFAS5ou/FGjsYKjXAWfItLZ0kNFTfQ==", + "node_modules/bach": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", "dev": true, - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "source-map": "^0.6.0" + "dependencies": { + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "@types/webpack-bundle-analyzer": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/@types/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz", - "integrity": "sha512-9M9jingj0izx1VfglYYJ+dvd0YCMlFgtrSCeb+C3VIQP8hmTXGJ5qqVeqiBnv0ffMyeKWqyij4K2F4VBcazQNw==", + "node_modules/bach/node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, - "requires": { - "@types/webpack": "*" + "dependencies": { + "once": "^1.4.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "@types/webpack-sources": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.6.tgz", - "integrity": "sha512-FtAWR7wR5ocJ9+nP137DV81tveD/ZgB1sadnJ/axUGM3BUVfRPx8oQNMtv3JNfTeHx3VP7cXiyfR/jmtEsVHsQ==", + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/bare-events": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.3.1.tgz", + "integrity": "sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==", "dev": true, - "requires": { - "@types/node": "*", - "@types/source-list-map": "*", - "source-map": "^0.6.1" - } + "optional": true }, - "@types/winreg": { - "version": "1.2.30", - "resolved": "https://registry.npmjs.org/@types/winreg/-/winreg-1.2.30.tgz", - "integrity": "sha1-kdZxDlNtNFucmwF8V0z2qNpkxRg=", - "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" + } + ] }, - "@types/ws": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-6.0.1.tgz", - "integrity": "sha512-EzH8k1gyZ4xih/MaZTXwT2xOkPiIMSrhQ9b8wrlX88L0T02eYsddatQlwVFlEPyEqV0ChpdpNnE51QPH6NVT4Q==", + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "dev": true, - "requires": { - "@types/events": "*", - "@types/node": "*" + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, - "@types/xml2js": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.4.tgz", - "integrity": "sha512-O6Xgai01b9PB3IGA0lRIp1Ex3JBcxGDhdO0n3NIIpCyDOAjxcIGQFmkvgJpP8anTrthxOUQjBfLdRRi0Zn/TXA==", + "node_modules/bent": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz", + "integrity": "sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==", "dev": true, - "requires": { - "@types/node": "*" + "dependencies": { + "bytesish": "^0.4.1", + "caseless": "~0.12.0", + "is-stream": "^2.0.0" } }, - "@types/yargs": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-13.0.5.tgz", - "integrity": "sha512-CF/+sxTO7FOwbIRL4wMv0ZYLCRfMid2HQpzDRyViH7kSpfoAFiMdGqKIxb1PxWfjtQXQhnQuD33lvRHNwr809Q==", + "node_modules/bent/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, - "requires": { - "@types/yargs-parser": "*" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "@types/yargs-parser": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz", - "integrity": "sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw==", - "dev": true + "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==", + "dev": true, + "engines": { + "node": "*" + } }, - "@types/yauzl": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz", - "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==", + "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==", "dev": true, - "optional": true, - "requires": { - "@types/node": "*" + "engines": { + "node": ">=8" } }, - "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "node_modules/bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "license": "MIT", + "dependencies": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==", - "dev": true + "node_modules/bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", + "dev": true, + "license": "MIT" }, - "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==", + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, - "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==", - "dev": true + "node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==", + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "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, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "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" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "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, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "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, - "requires": { - "@xtuc/ieee754": "^1.2.0" + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "node_modules/browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, - "requires": { - "@xtuc/long": "4.2.2" + "license": "MIT", + "dependencies": { + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, - "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==", - "dev": true + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true, + "license": "MIT" }, - "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "node_modules/browserify-rsa/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==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" }, - "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "node_modules/browserify-sign": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", + "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "license": "ISC", + "dependencies": { + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.6.1", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.9", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "node_modules/browserify-sign/node_modules/bn.js": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" - } + "license": "MIT" }, - "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "node_modules/browserify-sign/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==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "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, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", - "@xtuc/long": "4.2.2" + "dependencies": { + "pako": "~1.0.5" } }, - "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", - "@xtuc/long": "4.2.2" + "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": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "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" + } }, - "@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==", - "dev": true + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } }, - "abab": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", - "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w==", + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", "dev": true }, - "abbrev": { + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/buffer-from": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - } + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true }, - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", + "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": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", "dev": true }, - "acorn-dynamic-import": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz", - "integrity": "sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==" + "node_modules/bytesish": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz", + "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==", + "dev": true }, - "acorn-globals": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", - "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", + "node_modules/cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", "dev": true, - "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" - }, + "license": "MIT", "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - } + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" } }, - "acorn-node": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.7.0.tgz", - "integrity": "sha512-XhahLSsCB6X6CJbe+uNu3Mn9sJBNFxtBN9NLgAOQovfS6Kh0lDUtmlclhjn9CvEK7A7YyRU13PXlNcpSiLI9Yw==", - "requires": { - "acorn": "^6.1.1", - "acorn-dynamic-import": "^4.0.0", - "acorn-walk": "^6.1.1", - "xtend": "^4.0.1" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" - } + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "acorn-walk": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", - "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==" - }, - "address": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", - "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", - "dev": true + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "after": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/after/-/after-0.8.2.tgz", - "integrity": "sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8=", - "dev": true + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, - "requires": { - "es6-promisify": "^5.0.0" + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "aggregate-error": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", - "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" } }, - "airbnb-prop-types": { - "version": "2.13.2", - "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.13.2.tgz", - "integrity": "sha512-2FN6DlHr6JCSxPPi25EnqGaXC4OC3/B3k1lCd6MMYrZ51/Gf/1qDfaR+JElzWa+Tl7cY2aYOlsYJGFeQyVHIeQ==", + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, - "requires": { - "array.prototype.find": "^2.0.4", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.1.0", - "prop-types": "^15.7.2", - "prop-types-exact": "^1.2.0", - "react-is": "^16.8.6" + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ajv": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.1.tgz", - "integrity": "sha512-w1YQaVGNC6t2UCPjEawK/vo/dG8OOrVtUmhBT1uJJYxbl5kU2Tj3v6LGqBcsysN1yhuCStJCCA3GqdvKY8sqXQ==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "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, + "license": "MIT", + "engines": { + "node": ">=6" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, - "ajv-keywords": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz", - "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==", - "dev": true + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "optional": true + "node_modules/caniuse-lite": { + "version": "1.0.30001768", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz", + "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==", + "dev": 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" + } + ] }, - "anser": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.8.tgz", - "integrity": "sha512-tVHucTCKIt9VRrpQKzPtOlwm/3AmyQ7J+QE29ixFnvuE2hm83utEVrN7jJapYkHV6hI0HOHkEX9TOMCzHtwvuA==", + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "node_modules/chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + }, + "engines": { + "node": ">=4" } }, - "ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "node_modules/chai-arrays": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chai-arrays/-/chai-arrays-2.2.0.tgz", + "integrity": "sha512-4awrdGI2EH8owJ9I58PXwG4N56/FiM8bsn4CVSNEgr4GKAM6Kq5JPVApUbhUBjDakbZNuRvV7quRSC38PWq/tg==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "engines": { + "node": ">=0.10" } }, - "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true - }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "node_modules/chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "check-error": "^1.0.2" + }, + "peerDependencies": { + "chai": ">= 2.1.2 < 5" } }, - "ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "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, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "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==", - "requires": { - "color-convert": "^1.9.0" + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true, + "engines": { + "node": "*" } }, - "ansi-to-html": { - "version": "0.6.11", - "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.11.tgz", - "integrity": "sha512-88XZtrcwrfkyn6fGstHnkaF1kl7hGtNCYh4vSmItgEV+6JnQHryDBf7udF4f2RhTRQmYvJvPcTtqgaqrxzc9oA==", + "node_modules/check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true, - "requires": { - "entities": "^1.1.1" + "engines": { + "node": "*" } }, - "ansi-to-react": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ansi-to-react/-/ansi-to-react-3.3.5.tgz", - "integrity": "sha512-uAI8NOh+/5PC1poTnLwhuO7whaxPst1lZCeq+7P7hlP0A6GRXjXu1f5qprTwT3NHtjIWyMcFJAL0Im0HyB2XeQ==", + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "anser": "^1.4.1", - "babel-runtime": "^6.26.0", - "escape-carriage": "^1.2.0" + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "any-promise": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", - "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "node_modules/cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "node_modules/cheerio-select/node_modules/css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, - "requires": { - "buffer-equal": "^1.0.0" - }, "dependencies": { - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true - } + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "append-transform": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", - "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "node_modules/cheerio-select/node_modules/css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "applicationinsights": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-1.0.6.tgz", - "integrity": "sha512-VQT3kBpJVPw5fCO5n+WUeSx0VHjxFtD7znYbILBlVgOS9/cMDuGFmV2Br3ObzFyZUDGNbEfW36fD1y2/vAiCKw==", - "requires": { - "diagnostic-channel": "0.2.0", - "diagnostic-channel-publishers": "0.2.1", - "zone.js": "0.7.6" + "node_modules/cheerio-select/node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, - "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==" - }, - "archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", + "node_modules/cheerio-select/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true, - "requires": { - "file-type": "^4.2.0" - }, - "dependencies": { - "file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } - } + ] }, - "archiver": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/archiver/-/archiver-3.0.0.tgz", - "integrity": "sha512-5QeR6Xc5hSA9X1rbQfcuQ6VZuUXOaEdB65Dhmk9duuRJHYif/ZyJfuyJqsQrj34PFjU5emv5/MmfgA8un06onw==", + "node_modules/cheerio-select/node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, - "requires": { - "archiver-utils": "^2.0.0", - "async": "^2.0.0", - "buffer-crc32": "^0.2.1", - "glob": "^7.0.0", - "readable-stream": "^2.0.0", - "tar-stream": "^1.5.0", - "zip-stream": "^2.0.1" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "archiver-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.0.0.tgz", - "integrity": "sha512-JRBgcVvDX4Mwu2RBF8bBaHcQCSxab7afsxAPYDQ5W+19quIPP5CfKE7Ql+UHs9wYvwsaNR8oDuhtf5iqrKmzww==", + "node_modules/cheerio-select/node_modules/domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, - "requires": { - "glob": "^7.0.0", - "graceful-fs": "^4.1.0", - "lazystream": "^1.0.0", - "lodash.assign": "^4.2.0", - "lodash.defaults": "^4.2.0", - "lodash.difference": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isplainobject": "^4.0.6", - "lodash.toarray": "^4.4.0", - "lodash.union": "^4.6.0", - "normalize-path": "^3.0.0", - "readable-stream": "^2.0.0" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true + "node_modules/cheerio-select/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "arg": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", - "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", - "dev": true + "node_modules/cheerio/node_modules/domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "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" + "node_modules/cheerio/node_modules/domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", - "dev": true - }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", + "node_modules/cheerio/node_modules/domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "node_modules/cheerio/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "node_modules/cheerio/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "node_modules/cheerio/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "array-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", - "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "node_modules/cheerio/node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true }, - "array-filter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-1.0.0.tgz", - "integrity": "sha1-uveeYubvTCpMC4MSMtr/7CUfnYM=", - "dev": true + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": 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" + } }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", - "dev": true + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" } }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "node_modules/cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", "dev": true, - "requires": { - "is-number": "^4.0.0" - }, + "license": "MIT", "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true + "node_modules/cipher-base/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==", + "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" + } + ], + "license": "MIT" }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", "dev": true }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "engines": { + "node": ">=6" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "requires": { - "array-uniq": "^1.0.1" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } }, - "array.prototype.find": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.1.0.tgz", - "integrity": "sha512-Wn41+K1yuO5p7wRZDl7890c3xvv5UBrfVXTVIe28rSQb6LS0fZMDrQB6PAcxQFRFy6vJTLDc3A2+3CjQdzVKRg==", + "node_modules/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.13.0" + "engines": { + "node": ">= 0.10" } }, - "array.prototype.flat": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz", - "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.10.0", - "function-bind": "^1.1.1" + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "arraybuffer.slice": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz", - "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog==", - "dev": true + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + } }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" + "node_modules/cls-hooked": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", + "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", + "dependencies": { + "async-hook-jl": "^1.7.6", + "emitter-listener": "^1.0.1", + "semver": "^5.4.1" + }, + "engines": { + "node": "^4.7 || >=6.9 || >=7.3 || >=8.2.1" } }, - "asn1.js": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", - "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "node_modules/cls-hooked/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/cockatiel": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.3.tgz", + "integrity": "sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==", "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "engines": { + "node": ">=16" } }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "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, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } + "color-name": "1.1.3" } }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "node_modules/colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", "dev": true }, - "ast-transform": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/ast-transform/-/ast-transform-0.0.0.tgz", - "integrity": "sha1-dJRAWIh9goPhidlUYAlHvJj+AGI=", - "requires": { - "escodegen": "~1.2.0", - "esprima": "~1.0.4", - "through": "~2.3.4" - }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dependencies": { - "escodegen": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.2.0.tgz", - "integrity": "sha1-Cd55Z3kcyVi3+Jot220jRRrzJ+E=", - "requires": { - "esprima": "~1.0.4", - "estraverse": "~1.5.0", - "esutils": "~1.0.0", - "source-map": "~0.1.30" - } - }, - "esprima": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.0.4.tgz", - "integrity": "sha1-n1V+CPw7TSbs6d00+Pv0drYlha0=" - }, - "estraverse": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz", - "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E=" - }, - "esutils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz", - "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA=" - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "ast-types": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", - "integrity": "sha1-kC0uDWDQcb3NRtwRXhgJ7RHBOKk=" + "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==", + "dev": true }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", - "requires": { - "lodash": "^4.17.11" - } + "node_modules/compare-module-exports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/compare-module-exports/-/compare-module-exports-2.1.0.tgz", + "integrity": "sha512-3Lc0sTIuX1jmY2K2RrXRJOND6KsRTX2D4v3+eu1PDptsuJZVK4LZc852eZa9I+avj0NrUKlTNgqvccNOH6mbGg==", + "dev": true }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" - }, - "dependencies": { - "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==", - "dev": true - } - } + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "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 }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "async-settle": { + "node_modules/constants-browserify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", - "dev": true, - "requires": { - "async-done": "^1.2.2" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", "dev": true }, - "autoprefixer": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", - "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, - "requires": { - "browserslist": "^2.11.3", - "caniuse-lite": "^1.0.30000805", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^6.0.17", - "postcss-value-parser": "^3.2.3" - }, + "license": "MIT", "dependencies": { - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" } }, - "awesome-typescript-loader": { + "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/awesome-typescript-loader/-/awesome-typescript-loader-5.2.1.tgz", - "integrity": "sha512-slv66OAJB8orL+UUaTI3pKlLorwIvS4ARZzYR9iJJyGsEgOqueMfOMdKySWzZ73vIkEe3fcwFgsKMg4d8zyb1g==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.1.0", - "lodash": "^4.17.5", - "micromatch": "^3.1.9", - "mkdirp": "^0.5.1", - "source-map-support": "^0.5.3", - "webpack-log": "^1.2.0" - } - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" - }, - "azure-devops-node-api": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-7.2.0.tgz", - "integrity": "sha512-pMfGJ6gAQ7LRKTHgiRF+8iaUUeGAI0c8puLaqHLc7B8AR7W6GJLozK9RFeUHFjEGybC9/EB3r67WPd7e46zQ8w==", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "dev": true, - "requires": { - "os": "0.1.1", - "tunnel": "0.0.4", - "typed-rest-client": "1.2.0", - "underscore": "1.8.3" - } - }, - "azure-storage": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.10.3.tgz", - "integrity": "sha512-IGLs5Xj6kO8Ii90KerQrrwuJKexLgSwYC4oLWmc11mzKe7Jt2E5IVg+ZQ8K53YWZACtVTMBNO3iGuA+4ipjJxQ==", - "requires": { - "browserify-mime": "~1.2.9", - "extend": "^3.0.2", - "json-edm-parser": "0.1.2", - "md5.js": "1.3.4", - "readable-stream": "~2.0.0", - "request": "^2.86.0", - "underscore": "~1.8.3", - "uuid": "^3.0.0", - "validator": "~9.4.1", - "xml2js": "0.2.8", - "xmlbuilder": "^9.0.7" - }, - "dependencies": { - "readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "xml2js": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.2.8.tgz", - "integrity": "sha1-m4FpCTFjH/CdGVdUn69U9PmAs8I=", - "requires": { - "sax": "0.5.x" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT" }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - }, + "node_modules/continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" } }, - "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/copy-props": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", "dev": true, - "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "dependencies": { + "each-props": "^3.0.0", + "is-plain-object": "^5.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "node_modules/copy-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "requires": { - "object.assign": "^4.1.0" + "engines": { + "node": ">=0.10.0" } }, - "babel-plugin-emotion": { - "version": "9.2.11", - "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz", - "integrity": "sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ==", + "node_modules/copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", "dev": true, - "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@emotion/babel-utils": "^0.6.4", - "@emotion/hash": "^0.6.2", - "@emotion/memoize": "^0.6.1", - "@emotion/stylis": "^0.7.0", - "babel-plugin-macros": "^2.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "convert-source-map": "^1.5.0", - "find-root": "^1.1.0", - "mkdirp": "^0.5.1", - "source-map": "^0.5.7", - "touch": "^2.0.1" - }, "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" } }, - "babel-plugin-inline-json-import": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/babel-plugin-inline-json-import/-/babel-plugin-inline-json-import-0.3.2.tgz", - "integrity": "sha512-QNNJx08KjmMT25Cw7rAPQ6dlREDPiZGDyApHL8KQ9vrQHbrr4PTi7W8g1tMMZPz0jEMd39nx/eH7xjnDNxq5sA==", + "node_modules/copy-webpack-plugin/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, - "requires": { - "decache": "^4.5.1" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "babel-plugin-macros": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz", - "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==", + "node_modules/core-js-pure": { + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", + "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", "dev": true, - "requires": { - "@babel/runtime": "^7.4.2", - "cosmiconfig": "^5.2.0", - "resolve": "^1.10.0" + "hasInstallScript": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" } }, - "babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "babel-plugin-transform-runtime": { - "version": "6.23.0", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", - "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "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, - "requires": { - "babel-runtime": "^6.22.0" + "license": "MIT", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "babel-polyfill": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", - "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "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, - "requires": { - "babel-runtime": "^6.26.0", - "core-js": "^2.5.0", - "regenerator-runtime": "^0.10.5" - }, "dependencies": { - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", - "dev": true - }, - "regenerator-runtime": { - "version": "0.10.5", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", - "dev": true - } + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "babel-runtime": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", - "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", - "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.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": { - "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" - }, - "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" - } + "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" } }, - "babel-types": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", - "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "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-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, - "requires": { - "babel-runtime": "^6.26.0", - "esutils": "^2.0.2", - "lodash": "^4.17.4", - "to-fast-properties": "^1.0.3" - }, "dependencies": { - "to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", - "dev": true - } + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "node_modules/cross-env/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "backbone": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.2.3.tgz", - "integrity": "sha1-wiz9B/yG676uYdGJKe0RXpmdZbk=", + "node_modules/cross-env/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, - "requires": { - "underscore": ">=1.7.0" + "engines": { + "node": ">=8" } }, - "backo2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", - "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=", - "dev": true - }, - "bail": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz", - "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww==", - "dev": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/cross-env/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, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=", - "dev": true - }, - "base64-arraybuffer": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", - "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=", - "dev": true - }, - "base64-js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", - "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==" - }, - "base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" + "node_modules/cross-env/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" } }, - "better-assert": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/better-assert/-/better-assert-1.0.2.tgz", - "integrity": "sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI=", + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, - "requires": { - "callsite": "1.0.0" + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" } }, - "bfj": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", - "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "requires": { - "bluebird": "^3.5.5", - "check-types": "^8.0.3", - "hoopy": "^0.1.4", - "tryer": "^1.0.1" + "bin": { + "semver": "bin/semver" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/cross-spawn/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "bintrees": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz", - "integrity": "sha1-SfiW1uhYpKSZ34XDj7OZua/4QPg=", - "dev": true + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true, + "engines": { + "node": "*" + } }, - "bl": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", "dev": true, - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - }, + "license": "MIT", "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "blob": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/blob/-/blob-0.0.5.tgz", - "integrity": "sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig==", + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, - "requires": { - "inherits": "~2.0.0" + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "bluebird": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", - "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==", - "dev": true - }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", - "dev": true - }, - "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, - "requires": { - "bytes": "3.1.0", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" - }, "dependencies": { - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "boolbase": { + "node_modules/data-view-byte-offset": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", - "dev": true + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "bootstrap": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", - "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==", - "dev": true + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } }, - "bootstrap-less": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/bootstrap-less/-/bootstrap-less-3.3.8.tgz", - "integrity": "sha1-cfKd1af//t/onxYFu63+CjONrlM=", + "node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "license": "MIT", + "engines": { + "node": ">=0.10" } }, - "brfs": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-2.0.2.tgz", - "integrity": "sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ==", - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^3.0.2", - "through2": "^2.0.0" + "node_modules/decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" }, + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", + "dev": true, + "license": "MIT", "dependencies": { - "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==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "static-module": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-3.0.3.tgz", - "integrity": "sha512-RDaMYaI5o/ym0GkCqL/PlD1Pn216omp8fY81okxZ6f6JQxWW5tptOw9reXoZX85yt/scYvbWIt6uoszeyf+/MQ==", - "requires": { - "acorn-node": "^1.3.0", - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "~1.9.0", - "has": "^1.0.1", - "magic-string": "^0.22.4", - "merge-source-map": "1.0.4", - "object-inspect": "~1.4.0", - "readable-stream": "~2.3.3", - "scope-analyzer": "^2.0.1", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.2", - "through2": "~2.0.3" - } - }, - "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" - } - } - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, - "brotli": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.2.tgz", - "integrity": "sha1-UlqcrU/LqWR119OI9q7LE+7VL0Y=", - "requires": { - "base64-js": "^1.1.2" + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "browser-process-hrtime": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz", - "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw==", - "dev": true - }, - "browser-resolve": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", - "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", - "requires": { - "resolve": "1.1.7" - }, + "node_modules/decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, + "license": "MIT", "dependencies": { - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=" - } + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" + }, + "engines": { + "node": ">=4" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "node_modules/decompress-tar/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "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" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "browserify-mime": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/browserify-mime/-/browserify-mime-1.2.9.tgz", - "integrity": "sha1-rrGvKN5sDXpqLOQK22j/GEIq8x8=" + "node_modules/decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "engines": { + "node": ">=4" + } }, - "browserify-optional": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-optional/-/browserify-optional-1.0.1.tgz", - "integrity": "sha1-HhNyLP3g2F8SFnbCpyztUzoBiGk=", - "requires": { - "ast-transform": "0.0.0", - "ast-types": "^0.7.0", - "browser-resolve": "^1.8.1" + "node_modules/decompress-targz/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "browserify-rsa": { + "node_modules/decompress-unzip": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", - "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "license": "MIT", + "dependencies": { + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" + }, + "engines": { + "node": ">=4" } }, - "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, - "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "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==", + "node_modules/decompress-unzip/node_modules/get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "dev": true, - "requires": { - "pako": "~1.0.5" - }, + "license": "MIT", "dependencies": { - "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==", - "dev": true - } + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "browserslist": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.4.tgz", - "integrity": "sha512-ErJT8qGfRt/VWHSr1HeqZzz50DvxHtr1fVL1m5wf20aGrG8e1ce8fpZ2EjZEfs09DDZYSvtRaDlMpWslBf8Low==", + "node_modules/decompress-unzip/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000981", - "electron-to-chromium": "^1.3.188", - "node-releases": "^1.1.25" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", - "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "node_modules/decompress/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "node_modules/decompress/node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true + "node_modules/decompress/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "node_modules/deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=0.12" + } }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "builtin-status-codes": { + "node_modules/default-require-extensions": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "node_modules/default-require-extensions/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, "dependencies": { - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "engines": { + "node": ">=8" } }, - "cache-content-type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", - "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", - "requires": { - "mime-types": "^2.1.18", - "ylru": "^1.2.0" + "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" } }, - "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", + "node_modules/del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" - }, "dependencies": { - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", - "dev": true - } + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "caching-transform": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", - "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, - "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" - }, "dependencies": { - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, - "requires": { - "callsites": "^2.0.0" + "engines": { + "node": ">=0.10.0" } }, - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "dev": true, - "requires": { - "caller-callsite": "^2.0.0" + "optional": true, + "engines": { + "node": ">=8" } }, - "callsite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", - "integrity": "sha1-KAOY5dZkvXQDi28JBRU+borxvCA=", - "dev": true + "node_modules/diagnostic-channel": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.1.tgz", + "integrity": "sha512-r2HV5qFkUICyoaKlBEpLKHjxMXATUf/l+h8UZPGBHGLy4DDiY2sOLcIctax4eRnTw5wH2jTMExLntGPJ8eOJxw==", + "dependencies": { + "semver": "^7.5.3" + } }, - "callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true + "node_modules/diagnostic-channel-publishers": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.7.tgz", + "integrity": "sha512-SEECbY5AiVt6DfLkhkaHNeshg1CogdLLANA8xlG/TKvS+XUgvIKl7VspJGYiEdL5OUyzMVnr7o0AwB7f+/Mjtg==", + "peerDependencies": { + "diagnostic-channel": "*" + } }, - "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "node_modules/diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", "dev": true, - "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-api": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-2.0.0.tgz", - "integrity": "sha1-sd21pZZrFvSNxJmERNS7xsfZ2DQ=", + "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, - "requires": { - "browserslist": "^2.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - }, "dependencies": { - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" - } - } + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "caniuse-lite": { - "version": "1.0.30000983", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000983.tgz", - "integrity": "sha512-/llD1bZ6qwNkt41AsvjsmwNOoA4ZB+8iqmf5LVyeSXuBODT/hAMFNVOh84NdUzoiYiSKqo5vQ3ZzeYHSi/olDQ==", - "dev": true - }, - "canvas": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.6.0.tgz", - "integrity": "sha512-bEO9f1ThmbknLPxCa8Es7obPlN9W3stB1bo7njlhOFKIdUTldeTqXCh9YclCPAi2pSQs84XA0jq/QEZXSzgyMw==", + "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, - "requires": { - "nan": "^2.14.0", - "node-pre-gyp": "^0.11.0", - "simple-get": "^3.0.3" + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "caw": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/caw/-/caw-2.0.1.tgz", - "integrity": "sha512-Cg8/ZSBEa8ZVY9HspcGUYaK63d/bN7rqS3CYCzEGUxuYv6UlmcjzDUz2fCFFHyTvUW5Pk0I+3hkA3iXlIj6guA==", + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, - "requires": { - "get-proxy": "^2.0.0", - "isurl": "^1.0.0-alpha5", - "tunnel-agent": "^0.6.0", - "url-to-options": "^1.0.1" + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" + "engines": { + "node": ">=0.4", + "npm": ">=1.2" } }, - "chai-arrays": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chai-arrays/-/chai-arrays-2.0.0.tgz", - "integrity": "sha512-jWAvZu1BV8tL3pj0iosBECzzHEg+XB1zSnMjJGX83bGi/1GlGdDO7J/A0sbBBS6KJT0FVqZIzZW9C6WLiMkHpQ==", - "dev": true - }, - "chai-as-promised": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", - "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "node_modules/download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", "dev": true, - "requires": { - "check-error": "^1.0.2" + "license": "MIT", + "dependencies": { + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=10" } }, - "chai-http": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/chai-http/-/chai-http-4.3.0.tgz", - "integrity": "sha512-zFTxlN7HLMv+7+SPXZdkd5wUlK+KxH6Q7bIEMiEx0FK3zuuMqL7cwICAQ0V1+yYRozBburYuxN1qZstgHpFZQg==", + "node_modules/download/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, - "requires": { - "@types/chai": "4", - "@types/superagent": "^3.8.3", - "cookiejar": "^2.1.1", - "is-ip": "^2.0.0", - "methods": "^1.1.2", - "qs": "^6.5.1", - "superagent": "^3.7.0" + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" } }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "node_modules/download/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "character-entities": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.3.tgz", - "integrity": "sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w==", - "dev": true - }, - "character-entities-legacy": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz", - "integrity": "sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww==", - "dev": true - }, - "character-reference-invalid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz", - "integrity": "sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg==", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "charenc": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "check-types": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", - "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", - "dev": true + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", + "dev": true, + "license": "BSD-3-Clause" }, - "cheerio": { - "version": "1.0.0-rc.3", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.3.tgz", - "integrity": "sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==", + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, - "requires": { - "css-select": "~1.2.0", - "dom-serializer": "~0.1.1", - "entities": "~1.1.1", - "htmlparser2": "^3.9.1", - "lodash": "^4.15.0", - "parse5": "^3.0.1" - }, "dependencies": { - "parse5": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz", - "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==", - "dev": true, - "requires": { - "@types/node": "*" - } - } + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "node_modules/each-props": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "dependencies": { + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", - "dev": true - }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "node_modules/each-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "requires": { - "tslib": "^1.9.0" + "engines": { + "node": ">=0.10.0" } }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" }, - "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==", + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, - "requires": { - "inherits": "^2.0.1", + "dependencies": { "safe-buffer": "^5.0.1" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, + "license": "MIT", "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "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/emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "dependencies": { + "shimmer": "^1.2.0" } }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "dev": true, - "requires": { - "source-map": "~0.6.0" + "engines": { + "node": ">= 4" } }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "dev": true, - "requires": { - "restore-cursor": "^2.0.0" + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=" + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true }, - "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, - "clone-response": { + "node_modules/es-shim-unscopables": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" } }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "clsx": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.0.4.tgz", - "integrity": "sha512-1mQ557MIZTrL/140j+JVdRM6e31/OA4vTYxXgqIIZlndyfjHpyawKZia1Im05Vp9BWmImkcNrNtFYQMyFcgJDg==", + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" - }, - "code-point-at": { + "node_modules/es6-object-assign": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", "dev": true }, - "codecov": { - "version": "3.6.5", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.6.5.tgz", - "integrity": "sha512-v48WuDMUug6JXwmmfsMzhCHRnhUf8O3duqXvltaYJKrO1OekZWpB/eH6iIoaxMl8Qli0+u3OxptdsBOYiD7VAQ==", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "requires": { - "argv": "0.0.2", - "ignore-walk": "3.0.3", - "js-yaml": "3.13.1", - "teeny-request": "6.0.1", - "urlgrey": "0.4.4" - }, - "dependencies": { - "ignore-walk": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", - "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" - } - } + "engines": { + "node": ">=6" } }, - "codemirror": { - "version": "5.47.0", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.47.0.tgz", - "integrity": "sha512-kV49Fr+NGFHFc/Imsx6g180hSlkGhuHxTSDDmDHOuyln0MQYFLixDY4+bFkBVeCEiepYfDimAF/e++9jPJk4QA==", - "dev": true - }, - "collapse-white-space": { + "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.5.tgz", - "integrity": "sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ==", - "dev": true + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@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" + } }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "node_modules/eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "color": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", - "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.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==", - "requires": { - "color-name": "1.1.3" + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } }, - "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } }, - "colornames": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", - "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "colors": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "node_modules/eslint-plugin-import/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" + } }, - "colorspace": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", - "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { - "color": "3.0.x", - "text-hex": "1.0.x" + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" } }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { - "delayed-stream": "~1.0.0" + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" + }, + "engines": { + "node": ">=6.0" } }, - "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "commandpost": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/commandpost/-/commandpost-1.4.0.tgz", - "integrity": "sha512-aE2Y4MTFJ870NuB/+2z1cXBhSBBzRydVVjzhFC4gtenEhpnj15yu0qptWGJsO9YGrcPZ3ezX8AWb1VA391MKpQ==", - "dev": true + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true + "node_modules/eslint-plugin-no-only-tests": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz", + "integrity": "sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", + "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + } }, - "compare-module-exports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/compare-module-exports/-/compare-module-exports-2.1.0.tgz", - "integrity": "sha512-3Lc0sTIuX1jmY2K2RrXRJOND6KsRTX2D4v3+eu1PDptsuJZVK4LZc852eZa9I+avj0NrUKlTNgqvccNOH6mbGg==", - "dev": true + "node_modules/eslint-plugin-react-hooks": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz", + "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } }, - "component-bind": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/component-bind/-/component-bind-1.0.0.tgz", - "integrity": "sha1-AMYIq33Nk4l8AAllGx06jh5zu9E=", - "dev": true + "node_modules/eslint-plugin-react/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "component-inherit": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/component-inherit/-/component-inherit-0.0.3.tgz", - "integrity": "sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=", - "dev": true + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "compress-commons": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.2.2.tgz", - "integrity": "sha1-UkqfEJA/OoEzibAiXSfEi7dRiQ8=", + "node_modules/eslint-plugin-react/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, - "requires": { - "buffer-crc32": "^0.2.1", - "crc32-stream": "^2.0.0", - "normalize-path": "^2.0.0", - "readable-stream": "^2.0.0" + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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, + "license": "Apache-2.0", + "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.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - }, - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "compressible": { - "version": "2.0.17", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", - "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", - "requires": { - "mime-db": ">= 1.40.0 < 2" + "node_modules/eslint/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==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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" } }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "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" + } }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "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/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "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==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "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" - } + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "console-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", - "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "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, - "requires": { - "date-now": "^0.1.4" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", - "requires": { - "safe-buffer": "5.1.2" + "node_modules/eslint/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, + "license": "BSD-2-Clause", + "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" } }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } }, - "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", - "requires": { - "safe-buffer": "~5.1.1" + "node_modules/eslint/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, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", - "dev": true + "node_modules/eslint/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", - "dev": true + "node_modules/eslint/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, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "cookiejar": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.2.tgz", - "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==", - "dev": true + "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" + } }, - "cookies": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.8.0.tgz", - "integrity": "sha512-8aPsApQfebXnuI+537McwYsDtjVxGm8gTIzQI3FDW6t5t/DAhERxtnbEPN/8RX+uZthoz4eCOgloXaE5cYyNow==", - "requires": { - "depd": "~2.0.0", - "keygrip": "~1.1.0" - }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, "dependencies": { - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - } + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "node_modules/eslint/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, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - }, + "license": "MIT", "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "copy-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", + "node_modules/eslint/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, - "requires": { - "cacache": "^12.0.3", - "find-cache-dir": "^2.1.0", - "glob-parent": "^3.1.0", - "globby": "^7.1.1", - "is-glob": "^4.0.1", - "loader-utils": "^1.2.3", - "minimatch": "^3.0.4", - "normalize-path": "^3.0.0", - "p-limit": "^2.2.1", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "webpack-log": "^2.0.0" + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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, + "license": "MIT", "dependencies": { - "ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", - "dev": true - }, - "p-limit": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", - "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "webpack-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", - "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", - "dev": true, - "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" - } - } + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "core-js": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", - "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", - "dev": true + "node_modules/eslint/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" + } }, - "core-js-compat": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.1.4.tgz", - "integrity": "sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg==", + "node_modules/eslint/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, - "requires": { - "browserslist": "^4.6.2", - "core-js-pure": "3.1.4", - "semver": "^6.1.1" - }, "dependencies": { - "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==", - "dev": true - } + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "core-js-pure": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.1.4.tgz", - "integrity": "sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "node_modules/eslint/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" + } }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "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, - "requires": { - "object-assign": "^4", - "vary": "^1" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "node_modules/eslint/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, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "cp-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz", - "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==", + "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, - "requires": { - "graceful-fs": "^4.1.2", - "make-dir": "^2.0.0", - "nested-error-stacks": "^2.0.0", - "pify": "^4.0.1", - "safe-buffer": "^5.0.1" + "license": "BSD-2-Clause", + "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" } }, - "cpx-fixed": { + "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/cpx-fixed/-/cpx-fixed-1.6.0.tgz", - "integrity": "sha512-0X6cfGWup886yM/ma/3I2DASv+QSDhlvPoSzHi1DZrYwl7QIFvSKtk60i2kTyRvUbxzrqLwP1At/1TSD2pGCqg==", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "requires": { - "co": "^4.6.0", - "debounce": "^1.1.0", - "debug": "^3.1.0", - "duplexer": "^0.1.1", - "fs-extra": "^6.0.1", - "glob": "^7.1.2", - "glob2base": "0.0.12", - "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "safe-buffer": "^5.1.2", - "shell-quote": "^1.6.1", - "subarg": "^1.0.0" - }, + "license": "BSD-3-Clause", "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "fs-extra": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", - "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - } + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" } }, - "crc": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", - "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "buffer": "^5.1.0" + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "crc32-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-2.0.0.tgz", - "integrity": "sha1-483TtN8xaN10494/u8t7KX/pCPQ=", + "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==", "dev": true, - "requires": { - "crc": "^3.4.4", - "readable-stream": "^2.0.0" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "create-ecdh": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", - "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "engines": { + "node": ">=4.0" } }, - "create-emotion": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.2.12.tgz", - "integrity": "sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA==", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, - "requires": { - "@emotion/hash": "^0.6.2", - "@emotion/memoize": "^0.6.1", - "@emotion/stylis": "^0.7.0", - "@emotion/unitless": "^0.6.2", - "csstype": "^2.5.2", - "stylis": "^3.5.0", - "stylis-rule-sheet": "^0.0.10" + "engines": { + "node": ">=4.0" } }, - "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==", + "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, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "engines": { + "node": ">=0.10.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==", + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "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" + "engines": { + "node": ">=0.8.x" } }, - "create-react-context": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", - "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", + "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, - "requires": { - "gud": "^1.0.0", - "warning": "^4.0.3" + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, - "cross-env": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.3.tgz", - "integrity": "sha512-+KqxF6LCvfhWvADcDPqo64yVIB31gv/jQulX2NGzKS/g3GEVz6/pt4wjHFtFWsHMddebWD/sDthJemzM4MaAag==", + "node_modules/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.0" + "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/execa/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", "dependencies": { - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "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 - }, - "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 - }, - "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" - } - } + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/execa/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, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "cross-spawn-async": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/cross-spawn-async/-/cross-spawn-async-2.2.5.tgz", - "integrity": "sha1-hF/wwINKPe2dFg2sptOQkGuyiMw=", + "node_modules/execa/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, - "requires": { - "lru-cache": "^4.0.0", - "which": "^1.2.8" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "crypt": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + "node_modules/execa/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" + } }, - "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==", + "node_modules/execa/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, - "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" + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==" + "node_modules/execa/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" + } }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" + "optional": true, + "engines": { + "node": ">=6" } }, - "css-color-function": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/css-color-function/-/css-color-function-1.3.3.tgz", - "integrity": "sha1-jtJMLAIFBzM5+voAS8jBQfzLKC4=", + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, - "requires": { - "balanced-match": "0.1.0", - "color": "^0.11.0", - "debug": "^3.1.0", - "rgb": "~0.1.0" - }, "dependencies": { - "balanced-match": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.1.0.tgz", - "integrity": "sha1-tQS9BYabOSWd0MXvw12EMXbczEo=", - "dev": true - }, - "color": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", - "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", - "dev": true, - "requires": { - "clone": "^1.0.2", - "color-convert": "^1.3.0", - "color-string": "^0.3.0" - } - }, - "color-string": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", - "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", - "dev": true, - "requires": { - "color-name": "^1.0.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "css-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.1.tgz", - "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", - "dev": true, - "requires": { - "babel-code-frame": "^6.26.0", - "css-selector-tokenizer": "^0.7.0", - "icss-utils": "^2.1.0", - "loader-utils": "^1.0.2", - "lodash": "^4.17.11", - "postcss": "^6.0.23", - "postcss-modules-extract-imports": "^1.2.0", - "postcss-modules-local-by-default": "^1.2.0", - "postcss-modules-scope": "^1.1.0", - "postcss-modules-values": "^1.3.0", - "postcss-value-parser": "^3.3.0", - "source-list-map": "^2.0.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "node_modules/expose-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-3.1.0.tgz", + "integrity": "sha512-2RExSo0yJiqP+xiUue13jQa2IHE8kLDzTI7b6kn+vUlBVvlzNSiLDzo4e5Pp5J039usvTUnxZ8sUOhv0Kg15NA==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" } }, - "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "node_modules/ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dev": true, - "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", - "domutils": "1.5.1", - "nth-check": "~1.0.1" - }, + "license": "MIT", "dependencies": { - "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", - "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - } + "mime-db": "^1.28.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "css-selector-tokenizer": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz", - "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", + "node_modules/ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, - "requires": { - "cssesc": "^0.1.0", - "fastparse": "^1.1.1", - "regexpu-core": "^1.0.0" - }, + "license": "MIT", "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", - "dev": true - }, - "regexpu-core": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", - "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", - "dev": true, - "requires": { - "regenerate": "^1.2.1", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.4" - } - }, - "regjsgen": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", - "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", - "dev": true - }, - "regjsparser": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", - "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", - "dev": true, - "requires": { - "jsesc": "~0.5.0" - } - } + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "css-unit-converter": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", - "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", - "dev": true - }, - "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", - "dev": true - }, - "cssesc": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", - "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", - "dev": true - }, - "cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "cssstyle": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.3.0.tgz", - "integrity": "sha512-wXsoRfsRfsLVNaVzoKdqvEmK/5PFaEXNspVT22Ots6K/cnJdpoDKuQFw+qlMiXnmaif1OgeC466X1zISgAOcGg==", + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, - "requires": { - "cssom": "~0.3.6" + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "csstype": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.6.tgz", - "integrity": "sha512-RpFbQGUE74iyPgvr46U9t1xoQBM8T4BL8SxrN66Le2xYAPSaDJJKeztV3awugusb3g3G9iL8StmkBBXhcbbXhg==", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true - }, - "d": { + "node_modules/extend-shallow/node_modules/is-extendable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "d3": { - "version": "3.5.17", - "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", - "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=", + "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==", "dev": true }, - "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true }, - "d3-bboxCollide": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/d3-bboxCollide/-/d3-bboxCollide-1.0.4.tgz", - "integrity": "sha512-Sc8FKGGeejlowLW1g/0WBrVcbd++SBRW4N8OuZhVeRAfwlTL96+75JKlFfHweYdYRui1zPabfNXZrNaphBjS+w==", - "dev": true, - "requires": { - "d3-quadtree": "1.0.1" - } - }, - "d3-brush": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.6.tgz", - "integrity": "sha512-lGSiF5SoSqO5/mYGD5FAeGKKS62JdA1EV7HPrU2b5rTX4qEJJtpjaGLJngjnkewQy7UnGstnFd3168wpf5z76w==", - "dev": true, - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, - "requires": { - "d3-array": "1", - "d3-path": "1" + "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" } }, - "d3-cloud": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-cloud/-/d3-cloud-1.2.5.tgz", - "integrity": "sha512-4s2hXZgvs0CoUIw31oBAGrHt9Kt/7P9Ik5HIVzISFiWkD0Ga2VLAuO/emO/z1tYIpE7KG2smB4PhMPfFMJpahw==", + "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, - "requires": { - "d3-dispatch": "^1.0.3" + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", + "node_modules/fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "d3-color": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.8.tgz", - "integrity": "sha512-yeANXzP37PHk0DbSTMNPhnJD+Nn4G//O5E825bR6fAfHH43hobSBpgB9G9oWVl9+XgUaQ4yCnsX1H+l8DoaL9A==", + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "dev": true, - "requires": { - "d3-array": "^1.1.1" - } - }, - "d3-delaunay": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.1.6.tgz", - "integrity": "sha512-VF6bxon2bn1cdXuesInEtVKlE4aUfq5IjE5y0Jl2aZP1yvLsf0QENqQxNhjS4vq95EmYKauA30ofTwvREtPSXA==", + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, - "requires": { - "delaunator": "4" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] }, - "d3-dispatch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.5.tgz", - "integrity": "sha512-vwKx+lAqB1UuCeklr6Jh1bvC4SZgbSqbkGBLClItFBIYH4vqDJCA7qfoy14lXmJdnBOdxndAMxjCbImJYW7e6g==", + "node_modules/fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, - "d3-drag": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.3.tgz", - "integrity": "sha512-8S3HWCAg+ilzjJsNtWW1Mutl74Nmzhb9yU6igspilaJzeZVFktmY6oO9xOh5TDk+BM2KrNFjttZNoJJmDnkjkg==", + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" + "dependencies": { + "reusify": "^1.0.4" } }, - "d3-dsv": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-0.1.14.tgz", - "integrity": "sha1-mDPNYaWj6B4DJjoc54903lah27g=", - "dev": true - }, - "d3-ease": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.5.tgz", - "integrity": "sha512-Ct1O//ly5y5lFM9YTdu+ygq7LleSgSE4oj7vUt9tPLHUi8VCV7QoizGpdWRWAwCO9LdYzIrQDg97+hGVdsSGPQ==", - "dev": true - }, - "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "dependencies": { + "pend": "~1.2.0" } }, - "d3-format": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz", - "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==", - "dev": true - }, - "d3-geo": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.11.6.tgz", - "integrity": "sha512-z0J8InXR9e9wcgNtmVnPTj0TU8nhYT6lD/ak9may2PdKqXIeHUr8UbFLoCtrPYNsjv6YaLvSDQVl578k6nm7GA==", + "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, - "requires": { - "d3-array": "1" + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "d3-glyphedge": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-glyphedge/-/d3-glyphedge-1.2.0.tgz", - "integrity": "sha512-F49fyMXMLYDHvqvxSmuGZrtIWeWLZWxar82WL1CJDBDPk4z6GUGSG4wX7rdv7N7R/YazAyMMnpOL0YQcmTLlOQ==", - "dev": true - }, - "d3-hexbin": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/d3-hexbin/-/d3-hexbin-0.2.2.tgz", - "integrity": "sha1-nFg32s/UcasFM3qeke8Qv8T5iDE=", - "dev": true + "node_modules/file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "d3-hierarchy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", - "integrity": "sha512-L+GHMSZNwTpiq4rt9GEsNcpLa4M96lXMR8M/nMG9p5hBE0jy6C+3hWtyZMenPQdwla249iJy7Nx0uKt3n+u9+w==", - "dev": true + "node_modules/filename-reserved-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "d3-interpolate": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz", - "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==", + "node_modules/filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "dev": true, - "requires": { - "d3-color": "1" + "license": "MIT", + "dependencies": { + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, - "d3-path": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz", - "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==", - "dev": true + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, - "d3-polygon": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.5.tgz", - "integrity": "sha512-RHhh1ZUJZfhgoqzWWuRhzQJvO7LavchhitSTHGu9oj6uuLFzYZVeBzaWTQ2qSO6bz2w55RMoOCf0MsLCDB6e0w==", - "dev": true + "node_modules/filter-obj": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", + "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "d3-quadtree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.1.tgz", - "integrity": "sha1-E74CViTxEEBe1DU2xQaq7Bme1ZE=", - "dev": true + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } }, - "d3-request": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", - "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-dsv": "1", - "xmlhttprequest": "1" + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "dev": true, "dependencies": { - "d3-dsv": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.1.1.tgz", - "integrity": "sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw==", - "dev": true, - "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" } }, - "d3-sankey-circular": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/d3-sankey-circular/-/d3-sankey-circular-0.25.0.tgz", - "integrity": "sha512-maYak22afBAvmybeaopd1cVUNTIroEHhWCmh19gEQ+qgOhBkTav8YeP3Uw4OV/K4OksWaQrhhBOE4Rcxgc2JbQ==", + "node_modules/fined": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, - "requires": { - "d3-array": "^1.2.1", - "d3-collection": "^1.0.4", - "d3-shape": "^1.2.0" + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" } }, - "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "node_modules/fined/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" + "engines": { + "node": ">=0.10.0" } }, - "d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", + "node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", "dev": true, - "requires": { - "d3-color": "1", - "d3-interpolate": "1" + "engines": { + "node": ">= 10.13.0" } }, - "d3-selection": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.0.tgz", - "integrity": "sha512-EYVwBxQGEjLCKF2pJ4+yrErskDnz5v403qvAid96cNdCMr8rmCYfY5RGzWz24mdIbxmDf6/4EAH+K9xperD5jg==", - "dev": true + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } }, - "d3-shape": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.5.tgz", - "integrity": "sha512-VKazVR3phgD+MUCldapHD7P9kcrvPcexeX/PkMJmkUov4JM8IxsSg1DvbYoYich9AtdTsa5nNk2++ImPiDiSxg==", + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { - "d3-path": "1" + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "d3-time": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.11.tgz", - "integrity": "sha512-Z3wpvhPLW4vEScGeIMUckDW7+3hWKOQfAWg/U7PlWBnQmeKQ00gCUsTtWSYulrKNA7ta8hJ+xXc6MHrMuITwEw==", + "node_modules/flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true }, - "d3-time-format": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz", - "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==", + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, - "requires": { - "d3-time": "1" + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, - "d3-timer": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.9.tgz", - "integrity": "sha512-rT34J5HnQUHhcLvhSB9GjCkN0Ddd5Y8nCwDBG2u6wQEeYxT/Lf51fTFFkldeib/sE/J0clIe0pnCfs6g/lRbyg==", - "dev": true - }, - "d3-transition": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.2.0.tgz", - "integrity": "sha512-VJ7cmX/FPIPJYuaL2r1o1EMHLttvoIuZhhuAlRoOxDzogV8iQS6jYulDm3xEU3TqL80IZIhI551/ebmCMrkvhw==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", - "dev": true + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "data-urls": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", - "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, - "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" } }, - "datalib": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/datalib/-/datalib-1.9.2.tgz", - "integrity": "sha512-sV49o/1J3VdtTlJpsvPYT39WfUxyZGTO2rEGhEJt2eNY7LN2Z9K7nq3fOjgYMQtbuL0dVCWvmtxT2hpCgwx9Mg==", + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "requires": { - "d3-dsv": "0.1", - "d3-format": "0.4", - "d3-time": "0.1", - "d3-time-format": "0.2", - "request": "^2.67.0", - "sync-request": "^6.0.0", - "topojson-client": "^3.0.0" + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/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/foreground-child/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": { - "d3-format": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-0.4.2.tgz", - "integrity": "sha1-qnWcHlquX6javJq3gZxQL8a1aHU=", - "dev": true - }, - "d3-time": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-0.1.1.tgz", - "integrity": "sha1-OM4qe7R6QDFhOCPd5GiOWOiSrls=", - "dev": true - }, - "d3-time-format": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-0.2.1.tgz", - "integrity": "sha1-hG45638iZ2aS2GBAxI6fpU/Yvxg=", - "dev": true, - "requires": { - "d3-time": "~0.1.1" - } - } + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "date-format": { + "node_modules/foreground-child/node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", - "integrity": "sha512-eyTcpKOcamdhWJXj56DpQMo1ylSQpcGtGKXcU0Tb97+K56/CF5amAqqqNj0+KvA0iw2ynxtHWFsPDSClCxe48w==" + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "date-now": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", - "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", - "dev": true + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } }, - "debounce": { + "node_modules/fromentries": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.0.tgz", - "integrity": "sha512-mYtLl1xfZLi1m4RtQYlZgJUNQjl4ZxVnHzIR8nLLgi4q1YT8o/WM+MK/f8yfcc9s5Ir5zRaPZyZU6xs1Syoocg==", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz", + "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==", "dev": true }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-extra/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "debug-fabulous": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/debug-fabulous/-/debug-fabulous-1.1.0.tgz", - "integrity": "sha512-GZqvGIgKNlUnHUPQhepnUZFIMoi3dgZKQBzKDeL2g7oJF9SNAji/AAu36dusFUas0O+pae74lNeoIPHqXWDkLg==", + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", "dev": true, - "requires": { - "debug": "3.X", - "memoizee": "0.4.X", - "object-assign": "4.X" + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs-walk": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/fs-walk/-/fs-walk-0.0.1.tgz", + "integrity": "sha1-9/yRw64e6tB8mYvF0N1B8tvr0zU=", + "dev": true, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "async": "*" } }, - "decache": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/decache/-/decache-4.5.1.tgz", - "integrity": "sha512-5J37nATc6FmOTLbcsr9qx7Nm28qQyg1SK4xyEHqM0IBkNhWFp0Sm+vKoWYHD8wq+OUEb9jLyaKFfzzd1A9hcoA==", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "requires": { - "callsite": "^1.0.0" + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, - "requires": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "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, - "requires": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } + "engines": { + "node": ">=6.9.0" } }, - "decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "requires": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", - "dev": true - } + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, - "requires": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } + "engines": { + "node": "*" } }, - "decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "requires": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - }, - "get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "requires": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-assign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/deep-assign/-/deep-assign-1.0.0.tgz", - "integrity": "sha1-sJJ0O+hCfcYh6gBnzex+cN0Z83s=", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, - "requires": { - "is-obj": "^1.0.0" + "engines": { + "node": ">=8.0.0" } }, - "deep-diff": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/deep-diff/-/deep-diff-0.3.8.tgz", - "integrity": "sha1-wB3mPvsO7JeYgB1Ax+Da4ltYLIQ=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, - "requires": { - "type-detect": "^4.0.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "deep-equal": { + "node_modules/get-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", - "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=" - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "deepmerge": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.2.1.tgz", - "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", - "dev": true + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, - "requires": { - "kind-of": "^5.0.2" + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-stream/node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "default-require-extensions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", - "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, - "requires": { - "strip-bom": "^4.0.0" - }, "dependencies": { - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - } + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "dev": true, + "optional": true }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, - "requires": { - "object-keys": "^1.0.12" + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "del": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", - "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, - "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" - }, "dependencies": { - "globby": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", - "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" } }, - "delaunator": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz", - "integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==", + "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==", "dev": true }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "denodeify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/denodeify/-/denodeify-1.2.1.tgz", - "integrity": "sha1-OjYof1A05pnnV3kBBSwubJQlFjE=", - "dev": true + "node_modules/glob-watcher": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", + "dev": true, + "dependencies": { + "async-done": "^2.0.0", + "chokidar": "^3.5.3" + }, + "engines": { + "node": ">= 10.13.0" + } }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } }, - "des.js": { + "node_modules/global-modules": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", - "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } }, - "detect-indent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.0.0.tgz", - "integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==" + "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" + } }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "detect-newline": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-2.1.0.tgz", - "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=", - "dev": true + "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" + } }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", "dev": true, - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" + "dependencies": { + "sparkles": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "dfa": { + "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", - "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "diagnostic-channel": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz", - "integrity": "sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=", - "requires": { - "semver": "^5.3.0" + "node_modules/got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "engines": { + "node": ">=4" } }, - "diagnostic-channel-publishers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.2.1.tgz", - "integrity": "sha1-ji1geottef6IC1SLxYzGvrKIxPM=" + "node_modules/got/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "diagnostics": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", - "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { - "colorspace": "1.1.x", - "enabled": "1.0.x", - "kuler": "1.0.x" + "node_modules/got/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" } }, - "didyoumean": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", - "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=", - "dev": true + "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==" }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "diff-match-patch": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.4.tgz", - "integrity": "sha512-Uv3SW8bmH9nAtHKaKSanOQmj2DnlH65fUpcrMdfdaOxUG02QQ4YGZ8AE7kKOMisF7UqvOlGKVYWRvezdncW9lg==" + "node_modules/gulp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", + "dev": true, + "dependencies": { + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.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==", + "node_modules/gulp-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" } }, - "dir-glob": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", - "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "node_modules/gulp-cli/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, - "requires": { - "path-type": "^3.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=", - "dev": true + "node_modules/gulp-cli/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" + } }, - "dns-packet": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.2.1.tgz", - "integrity": "sha512-JHj2yJeKOqlxzeuYpN1d56GfhzivAxavNwHj9co3qptECel27B1rLY5PifJAvubsInX5pGLDjAHuCfCUc2Zv/w==", - "requires": { - "ip": "^1.1.5" + "node_modules/gulp-cli/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" } }, - "dns-socket": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dns-socket/-/dns-socket-4.2.0.tgz", - "integrity": "sha512-4XuD3z28jht3jvHbiom6fAipgG5LkjYeDLrX5OH8cbl0AtzTyUUAxGckcW8T7z0pLfBBV5qOiuC4wUEohk6FrQ==", - "requires": { - "dns-packet": "^5.1.2" + "node_modules/gulp-cli/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/gulp-cli/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" } }, - "doctrine": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-0.7.2.tgz", - "integrity": "sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM=", + "node_modules/gulp-cli/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, - "requires": { - "esutils": "^1.1.6", - "isarray": "0.0.1" - }, "dependencies": { - "esutils": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.1.6.tgz", - "integrity": "sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "node_modules/gulp-cli/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, - "requires": { - "utila": "~0.4" + "engines": { + "node": ">=10" } }, - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", + "node_modules/gulp-cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "requires": { - "@babel/runtime": "^7.1.2" + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "dom-serializer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", - "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "node_modules/gulp-typescript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", + "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", "dev": true, - "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "dependencies": { + "ansi-colors": "^3.0.5", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.3" + }, + "engines": { + "node": ">= 8" + }, + "peerDependencies": { + "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true + "node_modules/gulp-typescript/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "dom4": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/dom4/-/dom4-2.1.5.tgz", - "integrity": "sha512-gJbnVGq5zaBUY0lUh0LUEVGYrtN75Ks8ZwpwOYvnVFrKy/qzXK4R/1WuLIFExWj/tBxbRAkTzZUGJHXmqsBNjQ==", - "dev": true + "node_modules/gulp-typescript/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true + "node_modules/gulp-typescript/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "node_modules/gulp/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 }, - "domexception": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", - "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "node_modules/gulp/node_modules/fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, - "requires": { - "webidl-conversions": "^4.0.2" + "dependencies": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "node_modules/gulp/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, - "requires": { - "domelementtype": "1" + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" } }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "node_modules/gulp/node_modules/glob-stream": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", "dev": true, - "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dependencies": { + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" } }, - "download": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/download/-/download-7.1.0.tgz", - "integrity": "sha512-xqnBTVd/E+GxJVrX5/eUJiLYjCGPwMpdL+jGhGU57BvtcA7wwhtHVbXBeUk51kOpW3S7Jn3BQbN9Q1R1Km2qDQ==", + "node_modules/gulp/node_modules/lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", "dev": true, - "requires": { - "archive-type": "^4.0.0", - "caw": "^2.0.1", - "content-disposition": "^0.5.2", - "decompress": "^4.2.0", - "ext-name": "^5.0.0", - "file-type": "^8.1.0", - "filenamify": "^2.0.0", - "get-stream": "^3.0.0", - "got": "^8.3.1", - "make-dir": "^1.2.0", - "p-event": "^2.1.0", - "pify": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "engines": { + "node": ">=10.13.0" } }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", - "requires": { - "readable-stream": "^2.0.2" - }, + "node_modules/gulp/node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dev": true, "dependencies": { - "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==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "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" - } - } + "once": "^1.4.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "node_modules/gulp/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "engines": { + "node": ">= 10" + } }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/gulp/node_modules/resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "value-or-function": "^4.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "node_modules/gulp/node_modules/to-through": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" + "dependencies": { + "streamx": "^2.12.5" + }, + "engines": { + "node": ">=10.13.0" } }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "node_modules/gulp/node_modules/value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "dev": true, + "engines": { + "node": ">= 10.13.0" } }, - "editorconfig": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.15.3.tgz", - "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", + "node_modules/gulp/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, - "requires": { - "commander": "^2.19.0", - "lru-cache": "^4.1.5", - "semver": "^5.6.0", - "sigmund": "^1.0.1" + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "ejs": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", - "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.3.189", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.189.tgz", - "integrity": "sha512-C26Kv6/rLNmGDaPR5HORMtTQat9aWBBKjQk9aFtN1Bk6cQBSw8cYdsel/mcrQlNlMMjt1sAKsTYqf77+sK2uTw==", - "dev": true - }, - "elliptic": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz", - "integrity": "sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==", + "node_modules/gulp/node_modules/vinyl-fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "dependencies": { + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "node_modules/gulp/node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dev": true, + "dependencies": { + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + } }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true + "node_modules/gulplog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", + "dev": true, + "dependencies": { + "glogg": "^2.2.0" + }, + "engines": { + "node": ">= 10.13.0" + } }, - "emotion": { - "version": "9.2.12", - "resolved": "https://registry.npmjs.org/emotion/-/emotion-9.2.12.tgz", - "integrity": "sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ==", + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, - "requires": { - "babel-plugin-emotion": "^9.2.11", - "create-emotion": "^9.2.12" + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "enabled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", - "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { - "env-variable": "0.0.x" + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "encodeurl": { + "node_modules/has-bigints": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" } }, - "engine.io": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.4.0.tgz", - "integrity": "sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, - "requires": { - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "0.3.1", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "ws": "^7.1.2" - }, "dependencies": { - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ws": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.3.tgz", - "integrity": "sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==", - "dev": true - } + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "engine.io-client": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.4.0.tgz", - "integrity": "sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA==", + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, - "requires": { - "component-emitter": "1.2.1", - "component-inherit": "0.0.3", - "debug": "~4.1.0", - "engine.io-parser": "~2.2.0", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "ws": "~6.1.0", - "xmlhttprequest-ssl": "~1.5.4", - "yeast": "0.1.2" + "engines": { + "node": ">= 0.4" }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ws": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", - "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", - "dev": true, - "requires": { - "async-limiter": "~1.0.0" - } - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "engine.io-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.2.0.tgz", - "integrity": "sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w==", + "node_modules/has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true, - "requires": { - "after": "0.8.2", - "arraybuffer.slice": "~0.0.7", - "base64-arraybuffer": "0.1.5", - "blob": "0.0.5", - "has-binary2": "~1.0.2" + "license": "MIT", + "engines": { + "node": "*" } }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "entities": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", - "dev": true - }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, - "enzyme": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.10.0.tgz", - "integrity": "sha512-p2yy9Y7t/PFbPoTvrWde7JIYB2ZyGC+NgTNbVEGvZ5/EyoYSr9aG/2rSbVvyNvMHEhw9/dmGUJHWtfQIEiX9pg==", + "node_modules/has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, - "requires": { - "array.prototype.flat": "^1.2.1", - "cheerio": "^1.0.0-rc.2", - "function.prototype.name": "^1.1.0", - "has": "^1.0.3", - "html-element-map": "^1.0.0", - "is-boolean-object": "^1.0.0", - "is-callable": "^1.1.4", - "is-number-object": "^1.0.3", - "is-regex": "^1.0.4", - "is-string": "^1.0.4", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.6.0", - "object-is": "^1.0.1", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4", - "object.values": "^1.0.4", - "raf": "^3.4.0", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.1.2" - }, - "dependencies": { - "object-inspect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", - "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", - "dev": true - } + "license": "MIT", + "dependencies": { + "has-symbol-support-x": "^1.4.1" + }, + "engines": { + "node": "*" } }, - "enzyme-adapter-react-16": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.14.0.tgz", - "integrity": "sha512-7PcOF7pb4hJUvjY7oAuPGpq3BmlCig3kxXGi2kFx0YzJHppqX1K8IIV9skT1IirxXlu8W7bneKi+oQ10QRnhcA==", - "dev": true, - "requires": { - "enzyme-adapter-utils": "^1.12.0", - "has": "^1.0.3", - "object.assign": "^4.1.0", - "object.values": "^1.1.0", - "prop-types": "^15.7.2", - "react-is": "^16.8.6", - "react-test-renderer": "^16.0.0-0", - "semver": "^5.7.0" + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "enzyme-adapter-utils": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.12.0.tgz", - "integrity": "sha512-wkZvE0VxcFx/8ZsBw0iAbk3gR1d9hK447ebnSYBf95+r32ezBq+XDSAvRErkc4LZosgH8J7et7H7/7CtUuQfBA==", + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, - "requires": { - "airbnb-prop-types": "^2.13.2", - "function.prototype.name": "^1.1.0", - "object.assign": "^4.1.0", - "object.fromentries": "^2.0.0", - "prop-types": "^15.7.2", - "semver": "^5.6.0" + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" } }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "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, - "requires": { - "prr": "~1.0.1" + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/hasha": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.1.0.tgz", + "integrity": "sha512-OFPDWmzPN1l7atOV1TgBVmNtBxaIysToK6Ve9DK+vT6pYuklw/nPNT+HJbZi0KDcI6vWB+9tgvZ5YD7fA3CXcA==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - }, "dependencies": { - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - } + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" } }, - "error-inject": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/error-inject/-/error-inject-1.0.0.tgz", - "integrity": "sha1-4rPZG1Su1nLzCdlQ0VSFD6EdTzc=" - }, - "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "node_modules/hasha/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, - "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "engines": { + "node": ">=8" } }, - "es-to-primitive": { + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "bin": { + "he": "bin/he" } }, - "es5-ext": { - "version": "0.10.50", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.50.tgz", - "integrity": "sha512-KMzZTPBkeQV/JcSQhI5/z6d9VWJ3EnQ194USTUwIYZ2ZbpN8+SGXQKt1h68EX44+qt+Fzr8DO17vnxrw7c3agw==", - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "^1.0.0" + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "es6-error": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", - "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "node_modules/http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "es6-map": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", - "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-set": "~0.1.5", - "es6-symbol": "~3.1.1", - "event-emitter": "~0.3.5" + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "es6-promisify": { + "node_modules/https-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" + "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" } }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "escape-carriage": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/escape-carriage/-/escape-carriage-1.3.0.tgz", - "integrity": "sha512-ATWi5MD8QlAGQOeMgI8zTp671BG8aKvAC0M7yenlxU4CRLGO/sKthxVUyjiOFKjHdIo+6dZZUNFgHFeVEaKfGQ==", - "dev": true + "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" + } + ] }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true }, - "escodegen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.9.1.tgz", - "integrity": "sha512-6hTjO1NAWkHnDk3OqQ4YrCuwwmGHL9S3nPlzBOUG/R44rda3wLNrfvQ5fkSGjyhHFKM7ALPKcKGrwvCLe0lC7Q==", - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "eslint-config-prettier": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.9.0.tgz", - "integrity": "sha512-k4E14HBtcLv0uqThaI6I/n1LEqROp8XaPu6SO9Z32u5NlGRC07Enu1Bh2KEFw4FNHbekH8yzbIU9kUGxbiGmCA==", + "node_modules/import-fresh/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, - "requires": { - "get-stdin": "^6.0.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "eslint-plugin-prettier": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", - "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", - "dev": true, - "requires": { - "prettier-linter-helpers": "^1.0.0" + "node_modules/import-in-the-middle": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz", + "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" } }, - "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true, - "requires": { - "estraverse": "^4.1.0" + "engines": { + "node": ">=0.8.19" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "estree-is-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-is-function/-/estree-is-function-1.0.0.tgz", - "integrity": "sha512-nSCWn1jkSq2QAtkaVLJZY2ezwcFO161HVc174zL1KPW3RJ+O6C3eJb8Nx7OXzvhoEv+nLgSR1g71oWUHUDTrJA==" + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "node_modules/ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "dev": true }, - "event-emitter": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", - "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } - }, - "event-stream": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", - "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, - "requires": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==", - "dev": true - }, - "eventsource": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", - "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "requires": { - "original": ">=0.0.5" + "engines": { + "node": ">=10.13.0" } }, - "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==", + "node_modules/into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "license": "MIT", + "dependencies": { + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" + }, + "engines": { + "node": ">=4" } }, - "execa": { + "node_modules/inversify": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.2.tgz", + "integrity": "sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==" + }, + "node_modules/is-absolute": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - }, "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "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, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "expose-loader": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-0.7.5.tgz", - "integrity": "sha512-iPowgKUZkTPX5PznYsmifVj9Bob0w2wTHVkt/eYNPSzyebkUgIedmskf/kcfEIWpiWjg3JRjnW+a17XypySMuw==", - "dev": true - }, - "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", - "dev": true, - "requires": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "~1.0.4", - "cookie": "0.4.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", - "dev": true - }, - "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true - } + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "ext-list": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", - "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", + "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==", "dev": true, - "requires": { - "mime-db": "^1.28.0" + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "ext-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", - "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, - "requires": { - "ext-list": "^2.0.0", - "sort-keys-length": "^1.0.0" + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "engines": { + "node": ">= 0.4" }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "external-editor": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", "dependencies": { - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - } + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, - "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "falafel": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/falafel/-/falafel-2.2.0.tgz", - "integrity": "sha512-9eKUh65oZiESUxlwYhwIKntuTzWiQxlN9osHug0F+eDNekenqFFZGctlEFdhs6jXfwPncZhu8Qsly8P/t3JBxA==", - "requires": { - "acorn": "^7.1.1", - "foreach": "^2.0.5", - "isarray": "0.0.1", - "object-keys": "^1.0.6" - }, "dependencies": { - "acorn": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", - "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==" - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "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, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" - }, - "fast-plist": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/fast-plist/-/fast-plist-0.1.2.tgz", - "integrity": "sha1-pFr/NFGWAG1AbKbNzQX2kFHvNbg=", - "dev": true - }, - "fast-safe-stringify": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", - "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" - }, - "fast-xml-parser": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.16.0.tgz", - "integrity": "sha512-U+bpScacfgnfNfIKlWHDu4u6rtOaCyxhblOLJ8sZPkhsjgGqdZmVPBhdOyvdMGCDt8CsAv+cssOP3NzQptNt2w==", - "dev": true - }, - "fastparse": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", - "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", - "dev": true - }, - "faye-websocket": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", - "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, - "requires": { - "websocket-driver": ">=0.5.1" + "engines": { + "node": ">=0.10.0" } }, - "fbjs": { - "version": "0.8.17", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", - "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "requires": { - "core-js": "^1.0.0", - "isomorphic-fetch": "^2.1.1", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.18" + "engines": { + "node": ">=8" } }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "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, - "requires": { - "pend": "~1.2.0" + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fecha": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", - "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "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==", "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "file-loader": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-5.1.0.tgz", - "integrity": "sha512-u/VkLGskw3Ue59nyOwUwXI/6nuBCo7KBkniB/l7ICwr/7cPNGsL1WCXUp3GB0qgOOKU1TiP49bv4DZF/LJqprg==", + "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, - "requires": { - "loader-utils": "^1.4.0", - "schema-utils": "^2.5.0" - }, "dependencies": { - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", - "dev": 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" - } - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - } - }, - "schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", - "dev": true, - "requires": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" - } - } + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "file-type": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-8.1.0.tgz", - "integrity": "sha512-qyQ0pzAy78gVoJsmYeNgl8uH8yKhr1lVhW7JbzJmnlRi0I4R2eEDEJZVKG8agpDnLpacwNbDhLNG/LMdxHD2YQ==", - "dev": true + "node_modules/is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true, + "license": "MIT" }, - "file-uri-to-path": { + "node_modules/is-negated-glob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", "dev": true, - "optional": true + "engines": { + "node": ">=0.10.0" + } }, - "filemanager-webpack-plugin-fixed": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/filemanager-webpack-plugin-fixed/-/filemanager-webpack-plugin-fixed-2.0.9.tgz", - "integrity": "sha512-iet9rDGF3HjHwObDy2FwzBFtiW59e+/wImVdqYXp5siRI4ESfxJyflOhpr7zrnJ4FcTS+rrIdk5E/Zgh9XtS0Q==", + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, - "requires": { - "archiver": "^3.0.0", - "cpx-fixed": "^1.6.0", - "fs-extra": "^7.0.0", - "make-dir": "^1.1.0", - "mv": "^2.1.1", - "rimraf": "^2.6.2" + "engines": { + "node": ">= 0.4" }, - "dependencies": { - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "filename-reserved-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", - "integrity": "sha1-q/c9+rc10EVECr/qLZHzieu/oik=", - "dev": true - }, - "filenamify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-2.1.0.tgz", - "integrity": "sha512-ICw7NTT6RsDp2rnYKVd8Fu4cr6ITzGy3+u4vUujPkabyaz+03F24NWEX7fs5fp+kBonlaqPH8fAO2NM+SXt/JA==", + "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==", "dev": true, - "requires": { - "filename-reserved-regex": "^2.0.0", - "strip-outer": "^1.0.0", - "trim-repeated": "^1.0.0" + "engines": { + "node": ">=0.12.0" } }, - "filesize": { - "version": "3.5.11", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.5.11.tgz", - "integrity": "sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==", - "dev": true - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", "dev": true, - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" + "engines": { + "node": ">=6" } }, - "find-index": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/find-index/-/find-index-0.1.1.tgz", - "integrity": "sha1-Z101iyyjiS15Whq0cjL4tuLg3eQ=", - "dev": true + "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" + } }, - "find-root": { + "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, - "requires": { - "locate-path": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, "dependencies": { - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==", - "dev": true - } + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "flatted": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", - "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "flatten": { + "node_modules/is-shared-array-buffer": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", - "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", - "dev": true - }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "font-awesome": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", - "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" - }, - "fontkit": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-1.8.0.tgz", - "integrity": "sha512-EFDRCca7khfQWYu1iFhsqeABpi87f03MBdkT93ZE6YhqCdMzb5Eojb6c4dlJikGv5liuhByyzA7ikpIPTSBWbQ==", - "requires": { - "babel-runtime": "^6.11.6", - "brfs": "^1.4.0", - "brotli": "^1.2.0", - "browserify-optional": "^1.0.0", - "clone": "^1.0.1", - "deep-equal": "^1.0.0", - "dfa": "^1.0.0", - "restructure": "^0.5.3", - "tiny-inflate": "^1.0.2", - "unicode-properties": "^1.0.0", - "unicode-trie": "^0.3.0" - }, - "dependencies": { - "brfs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/brfs/-/brfs-1.6.1.tgz", - "integrity": "sha512-OfZpABRQQf+Xsmju8XE9bDjs+uU4vLREGolP7bDgcpsI17QREyZ4Bl+2KLxxx1kCgA0fAIhKQBaBYh+PEcCqYQ==", - "requires": { - "quote-stream": "^1.0.1", - "resolve": "^1.1.5", - "static-module": "^2.2.0", - "through2": "^2.0.0" - } - } + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "foreach": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", - "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=" - }, - "foreground-child": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", - "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" - }, "dependencies": { - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "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 - }, - "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 - }, - "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" - } - } + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "formidable": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", - "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", - "dev": true - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", - "dev": true - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, - "requires": { - "map-cache": "^0.2.2" + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "free-style": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/free-style/-/free-style-3.1.0.tgz", - "integrity": "sha512-vJujYSIyT30iDoaoeigNAxX4yB1RUrh+N2ZMhIElMr3BvCuGXOw7XNJMEEJkDUeamK2Rnb/IKFGKRKlTWIGRWA==", + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", - "dev": true + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "engines": { + "node": ">=10" }, - "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "fromentries": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz", - "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==", + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "fs-constants": { + "node_modules/is-valid-glob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "requires": { - "minipass": "^2.6.0" + "engines": { + "node": ">=0.10.0" } }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "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, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "fs-readdir-recursive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", - "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, - "fs-walk": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/fs-walk/-/fs-walk-0.0.1.tgz", - "integrity": "sha1-9/yRw64e6tB8mYvF0N1B8tvr0zU=", + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, - "requires": { - "async": "*" + "engines": { + "node": ">=0.10.0" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/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/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/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/istanbul-lib-processinfo/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/istanbul-lib-processinfo/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/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/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/istanbul-lib-report/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/istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "fs.realpath": { + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isurl": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" + }, + "engines": { + "node": ">= 4" + } }, - "fsevents": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", - "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1", - "node-pre-gyp": "*" + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "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==", + "dev": true, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.4", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "3.2.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.7", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "bundled": true, - "dev": true, - "optional": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true - }, - "minipass": { - "version": "2.9.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.9.0" - } - }, - "mkdirp": { - "version": "0.5.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.2", - "bundled": true, - "dev": true, + "@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==", + "dev": 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==", + "dev": 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": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/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==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true + }, + "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==", + "dev": 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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "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==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dev": true, + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "dev": true, + "dependencies": { + "jwa": "^1.4.2", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "dev": true, + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" + } + }, + "node_modules/keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==", + "dev": true + }, + "node_modules/language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, + "dependencies": { + "language-subtag-registry": "~0.3.2" + } + }, + "node_modules/last-run": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", + "dev": true, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/liftoff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", + "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", + "dev": true, + "dependencies": { + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, + "dependencies": { + "uc.micro": "^1.0.1" + } + }, + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "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==", + "dev": 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": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "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/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.0" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/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/make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it/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==", + "dev": true + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dev": true, + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "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==", + "dev": 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.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "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/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "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": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.8.tgz", + "integrity": "sha512-7RN35vit8DeBclkofOVmBY0eDAZZQd1HzmukRdSyz95CRh8FT54eqnbj0krQr3mrHR6sfRyYkyhwBWjoV5uqlQ==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true, + "optional": true + }, + "node_modules/mocha": { + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/mocha-junit-reporter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.0.2.tgz", + "integrity": "sha512-vYwWq5hh3v1lG0gdQCBxwNipBfvDiAM1PHroQRNp96+2l72e9wEUTw+mzoK+O0SudgfQ7WvTQZ9Nh3qkAYAjfg==", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "md5": "^2.1.0", + "mkdirp": "~0.5.1", + "strip-ansi": "^6.0.1", + "xml": "^1.0.0" + }, + "peerDependencies": { + "mocha": ">=2.2.5" + } + }, + "node_modules/mocha-multi-reporters": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.5.1.tgz", + "integrity": "sha512-Yb4QJOaGLIcmB0VY7Wif5AjvLMUFAdV57D2TWEva1Y0kU/3LjKpeRVmlMIfuO1SVbauve459kgtIizADqxMWPg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "mocha": ">=3.1.2" + } + }, + "node_modules/mocha-multi-reporters/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { "optional": true - }, - "needle": { - "version": "2.3.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.14.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4.4.2" - } - }, - "nopt": { - "version": "4.0.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "bundled": true, - "dev": true, + } + } + }, + "node_modules/mocha/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==", + "dev": true + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mocha/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { "optional": true + } + } + }, + "node_modules/mocha/node_modules/diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/mocha/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/mocha/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/mocha/node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/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/mocha/node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/mocha/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/mocha/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/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/mocha/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/mocha/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/mocha/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, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/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==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + }, + "node_modules/mrmime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", + "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", + "dev": true, + "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/mute-stdout": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", + "dev": true, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/named-js-regexp": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/named-js-regexp/-/named-js-regexp-1.3.5.tgz", + "integrity": "sha512-XO0DPujDP9IWpkt690iWLreKztb/VB811DGl5N3z7BfhkMJuiVZXOi6YN/fEB9qkvtMVTgSZDW8pzdVt8vj/FA==" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "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==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/nise": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.0.0.tgz", + "integrity": "sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" + } + }, + "node_modules/node-abi": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", + "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", + "dev": true, + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true, + "optional": true + }, + "node_modules/node-has-native-dependencies": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-has-native-dependencies/-/node-has-native-dependencies-1.0.2.tgz", + "integrity": "sha1-MVLsl1O2ZB5NMi0YXdSTBkmto9o=", + "dev": true, + "dependencies": { + "fs-walk": "0.0.1" + }, + "bin": { + "node-has-native-dependencies": "index.js" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "deprecated": "This version of 'buffer' is out-of-date. You must update to v4.9.2 or newer", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/node-loader": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.3.tgz", + "integrity": "sha512-8c9ef5q24F0AjrPxUjdX7qdTlsU1zZCPeqYvSBCH1TJko3QW4qu1uA1C9KbOPdaRQwREDdbSYZgltBAlbV7l5g==", + "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/node-polyfill-webpack-plugin": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-1.1.4.tgz", + "integrity": "sha512-Z0XTKj1wRWO8o/Vjobsw5iOJCN+Sua3EZEUc2Ziy9CyVvmHKu6o+t4gUH9GOE0czyPR94LI6ZCV/PpcM8b5yow==", + "dev": true, + "dependencies": { + "assert": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^4.19.0", + "events": "^3.3.0", + "filter-obj": "^2.0.2", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tty-browserify": "^0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "webpack": ">=5" + } + }, + "node_modules/node-polyfill-webpack-plugin/node_modules/assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "dependencies": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "node_modules/node-polyfill-webpack-plugin/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "npm-packlist": { - "version": "1.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/node-polyfill-webpack-plugin/node_modules/domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/node-polyfill-webpack-plugin/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/node-polyfill-webpack-plugin/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-polyfill-webpack-plugin/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/node-polyfill-webpack-plugin/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/node-polyfill-webpack-plugin/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/node-polyfill-webpack-plugin/node_modules/util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "dev": true, + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true + }, + "node_modules/node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==", + "engines": { + "node": ">=0.12.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/antelle" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/npm-run-path/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/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "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/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "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": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "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/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "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/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-timeout": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "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, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "pbkdf2": "^3.1.5", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", + "dev": true, + "dependencies": { + "semver": "^5.1.0" + } + }, + "node_modules/parse-semver/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "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, + "license": "MIT", + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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==" + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "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/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pbkdf2/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postinstall-build": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", + "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==", + "deprecated": "postinstall-build's behavior is now built into npm! You should migrate off of postinstall-build and use the new `prepare` lifecycle script with npm 5.0.0 or greater.", + "dev": true, + "bin": { + "postinstall-build": "cli.js" + } + }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dev": true, + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/prettier": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.2.tgz", + "integrity": "sha512-5xJQIPT8BraI7ZnaDwSbu5zLrB6vvi8hVV58yHQ+QK64qrY40dULy0HSRlQ2/2IdzeBpjhDkqdcFBnFeDEMVdg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "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==", + "dev": true + }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "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/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "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" }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "process-nextick-args": { - "version": "2.0.1", - "bundled": true, - "dev": true, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": 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/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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==", + "dev": true, + "license": "MIT", + "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/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==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "node_modules/replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/replace-homedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", + "dev": true, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz", + "integrity": "sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==", + "dependencies": { + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/require-in-the-middle/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/resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", + "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-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "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/rewiremock": { + "version": "3.14.6", + "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.14.6.tgz", + "integrity": "sha512-hjpS7iQUTVVh/IHV4GE1ypg4IzlgVc34gxZBarwwVrKfnjlyqHJuQdsia6Ac7m4f4k/zxxA3tX285MOstdysRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-runtime": "^6.26.0", + "compare-module-exports": "^2.1.0", + "node-libs-browser": "^2.1.0", + "path-parse": "^1.0.5", + "wipe-node-cache": "^2.1.2", + "wipe-webpack-cache": "^2.1.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.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-base": "^3.1.2", + "inherits": "^2.0.4" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ripemd160/node_modules/hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ripemd160/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "readable-stream": { - "version": "2.3.7", - "bundled": true, - "dev": true, - "optional": true, - "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" - } - }, - "rimraf": { - "version": "2.7.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "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" }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "semver": { - "version": "5.7.1", - "bundled": true, - "dev": true, - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "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==", + "dev": true + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "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==", + "dev": 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/seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" + } + }, + "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==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", + "dev": true, + "dependencies": { + "sver": "^1.8.3" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sha.js/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/shortid": { + "version": "2.2.17", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.17.tgz", + "integrity": "sha512-GpbM3gLF1UUXZvQw6MCyulHkWbRseNO4cyBEZresZRorwl1+SLu1ZdqgVtuwqz8mB6RpwPkm541mYSqrKyJSaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "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/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sinon": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-18.0.0.tgz", + "integrity": "sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.2.0", + "nise": "^6.0.0", + "supports-color": "^7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/sinon/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/sinon/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/sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "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/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-keys-length/node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparkles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", + "dev": true, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true, + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", + "dev": true, + "dependencies": { + "streamx": "^2.13.2" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "node_modules/streamx": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/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==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "tar": { - "version": "4.4.13", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } + { + "type": "patreon", + "url": "https://www.patreon.com/feross" }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-ansi-cjs": { + "name": "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, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-natural-number": "^4.0.1" + } + }, + "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/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/strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", + "dev": true, + "optionalDependencies": { + "semver": "^6.3.0" + } + }, + "node_modules/sver/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, + "optional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "dev": true, + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-fs/node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/tar-fs/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, + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar-fs/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tas-client": { + "version": "0.2.33", + "resolved": "https://registry.npmjs.org/tas-client/-/tas-client-0.2.33.tgz", + "integrity": "sha512-V+uqV66BOQnWxvI6HjDnE4VkInmYZUQ4dgB7gzaDyFyFSK1i1nF/j7DpS9UbQAgV9NaF1XpcyuavnM1qOeiEIg==" + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "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.17", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.17.tgz", + "integrity": "sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { "optional": true }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, + "esbuild": { "optional": true }, - "yallist": { - "version": "3.1.1", - "bundled": true, - "dev": true, + "uglify-js": { "optional": true } } }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-decoder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "dependencies": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } }, - "function.prototype.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", - "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==", + "node_modules/timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "is-callable": "^1.1.3" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "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, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" } }, - "get-assigned-identifiers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", - "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==" + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" - }, - "get-proxy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/get-proxy/-/get-proxy-2.1.0.tgz", - "integrity": "sha512-zmZIaQTWnNQb4R4fJUEp/FC51eZsc6EkErspy3xtIYStaq8EB/hDIWipxsal+E8rz0qD7f2sL/NA9Xee4RInJw==", + "node_modules/to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, - "requires": { - "npm-conf": "^1.1.0" + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" } }, - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true + "node_modules/to-buffer/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==", + "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" + } + ], + "license": "MIT" }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "node_modules/totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true, + "engines": { + "node": ">=6" } }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "node_modules/trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - }, + "license": "MIT", "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "escape-string-regexp": "^1.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "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, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "engines": { + "node": ">=16" }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-loader": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.8.tgz", + "integrity": "sha512-gxSak7IHUuRtwKf3FIPSW1VpZcqF9+MBrHOvBp9cjHh+525SjtCIJKVGjRKIAfxBwDGDGCFF00rTfzB1quxdSw==", + "dev": true, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" } }, - "glob-watcher": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz", - "integrity": "sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==", + "node_modules/ts-loader/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, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "object.defaults": "^1.1.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "glob2base": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/glob2base/-/glob2base-0.0.12.tgz", - "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", + "node_modules/ts-loader/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, - "requires": { - "find-index": "^0.1.1" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "node_modules/ts-loader/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, - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/ts-loader/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/ts-loader/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, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "engines": { + "node": ">=8" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "node_modules/ts-loader/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, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "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 + "node_modules/ts-mockito": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.5" + } }, - "globby": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", - "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "node_modules/ts-node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true + "@swc/wasm": { + "optional": true } } }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "requires": { - "sparkles": "^1.0.0" + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", + "node_modules/tsconfig-paths-webpack-plugin": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", + "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", "dev": true, - "requires": { - "@sindresorhus/is": "^0.7.0", - "cacheable-request": "^2.1.1", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "into-stream": "^3.1.0", - "is-retry-allowed": "^1.1.0", - "isurl": "^1.0.0-alpha5", - "lowercase-keys": "^1.0.0", - "mimic-response": "^1.0.0", - "p-cancelable": "^0.4.0", - "p-timeout": "^2.0.1", - "pify": "^3.0.0", - "safe-buffer": "^5.1.1", - "timed-out": "^4.0.1", - "url-parse-lax": "^3.0.0", - "url-to-options": "^1.0.1" - }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^3.9.0" + } + }, + "node_modules/tsconfig-paths-webpack-plugin/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" } }, - "graceful-fs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.0.tgz", - "integrity": "sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg==" + "node_modules/tsconfig-paths-webpack-plugin/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" + } }, - "graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", - "dev": true + "node_modules/tsconfig-paths-webpack-plugin/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" + } }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "node_modules/tsconfig-paths-webpack-plugin/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 }, - "gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", - "dev": true + "node_modules/tsconfig-paths-webpack-plugin/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" + } }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "node_modules/tsconfig-paths-webpack-plugin/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, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" - }, "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "gulp-cli": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.2.0.tgz", - "integrity": "sha512-rGs3bVYHdyJpLqR0TUBnlcZ1O5O++Zs4bA0ajm+zr3WFCfiSLjGwoCBqFs18wzN+ZxahT9DkOK5nDf26iDsWjA==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.1.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.0.1", - "yargs": "^7.1.0" - } - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "gulp-azure-storage": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/gulp-azure-storage/-/gulp-azure-storage-0.11.1.tgz", - "integrity": "sha512-csOwItwZV1P9GLsORVQy+CFwjYDdHNrBol89JlHdlhGx0fTgJBc1COTRZbjGRyRjgdUuVguo3YLl4ToJ10/SIQ==", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, - "requires": { - "azure-storage": "^2.10.2", - "delayed-stream": "0.0.6", - "event-stream": "3.3.4", - "mime": "^1.3.4", - "progress": "^1.1.8", - "queue": "^3.0.10", - "streamifier": "^0.1.1", - "vinyl": "^2.2.0", - "vinyl-fs": "^3.0.3", - "yargs": "^15.3.0" - }, "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.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 - }, - "delayed-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.6.tgz", - "integrity": "sha1-omRst+w9XXd0YUZwp6Zd4MFz7bw=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "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 - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.3.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", - "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.1" - } - }, - "yargs-parser": { - "version": "18.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", - "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" } }, - "gulp-chmod": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/gulp-chmod/-/gulp-chmod-2.0.0.tgz", - "integrity": "sha1-AMOQuSigeZslGsz2MaoJ4BzGKZw=", + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, - "requires": { - "deep-assign": "^1.0.0", - "stat-mode": "^0.2.0", - "through2": "^2.0.0" + "engines": { + "node": ">=4" } }, - "gulp-filter": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", - "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=", + "node_modules/tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", "dev": true, - "requires": { - "multimatch": "^2.0.0", - "plugin-error": "^0.1.2", - "streamfilter": "^1.0.5" + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "gulp-gunzip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/gulp-gunzip/-/gulp-gunzip-1.1.0.tgz", - "integrity": "sha512-3INeprGyz5fUtAs75k6wVslGuRZIjKAoQp39xA7Bz350ReqkrfYaLYqjZ67XyIfLytRXdzeX04f+DnBduYhQWw==", + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, - "requires": { - "through2": "~2.0.3", - "vinyl": "~2.0.1" - }, + "optional": true, "dependencies": { - "vinyl": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.0.2.tgz", - "integrity": "sha1-CjcT2NTpIhxY8QyhbAEWyeJe2nw=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "is-stream": "^1.1.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - } + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "gulp-rename": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-1.4.0.tgz", - "integrity": "sha512-swzbIGb/arEoFK89tPY58vg3Ok1bw+d35PfUNwWqdo7KM4jkmuGA78JiDNqR+JeZFaeeHnRg9N7aihX3YPmsyg==", - "dev": true - }, - "gulp-sourcemaps": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-2.6.5.tgz", - "integrity": "sha512-SYLBRzPTew8T5Suh2U8jCSDKY+4NARua4aqjj8HOysBh2tSgT9u4jc1FYirAdPx1akUxxDeK++fqw6Jg0LkQRg==", + "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, - "requires": { - "@gulp-sourcemaps/identity-map": "1.X", - "@gulp-sourcemaps/map-sources": "1.X", - "acorn": "5.X", - "convert-source-map": "1.X", - "css": "2.X", - "debug-fabulous": "1.X", - "detect-newline": "2.X", - "graceful-fs": "4.X", - "source-map": "~0.6.0", - "strip-bom-string": "1.X", - "through2": "2.X" - }, "dependencies": { - "acorn": { - "version": "5.7.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", - "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", - "dev": true - } + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "gulp-typescript": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-4.0.2.tgz", - "integrity": "sha512-Hhbn5Aa2l3T+tnn0KqsG6RRJmcYEsr3byTL2nBpNBeAK8pqug9Od4AwddU4JEI+hRw7mzZyjRbB8DDWR6paGVA==", + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "plugin-error": "^0.1.2", - "source-map": "^0.6.1", - "through2": "^2.0.3", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.0" + "engines": { + "node": ">=4" } }, - "gulp-untar": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/gulp-untar/-/gulp-untar-0.0.8.tgz", - "integrity": "sha512-mqW7v2uvrxd8IoCCwJ04sPYgWjR3Gsi6yfhVWBK3sFMDP7FuoT7GNmxrCMwkk4RWqQohx8DRv+cDq4SRDXATGA==", + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, - "requires": { - "event-stream": "3.3.4", - "streamifier": "~0.1.1", - "tar": "^2.2.1", - "through2": "~2.0.3", - "vinyl": "^1.2.0" + "engines": { + "node": ">=8" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, "dependencies": { - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" - } - }, - "vinyl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", - "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "gulp-vinyl-zip": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.2.tgz", - "integrity": "sha512-wJn09jsb8PyvUeyFF7y7ImEJqJwYy40BqL9GKfJs6UGpaGW9A+N68Q+ajsIpb9AeR6lAdjMbIdDPclIGo1/b7Q==", + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, - "requires": { - "event-stream": "3.3.4", - "queue": "^4.2.1", - "through2": "^2.0.3", - "vinyl": "^2.0.2", - "vinyl-fs": "^3.0.3", - "yauzl": "^2.2.1", - "yazl": "^2.2.1" - }, "dependencies": { - "queue": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/queue/-/queue-4.5.1.tgz", - "integrity": "sha512-AMD7w5hRXcFSb8s9u38acBZ+309u6GsiibP4/0YacJeaurRshogB7v/ZcVPxP5gD5+zIw6ixRHdutiYUJfwKHw==", - "dev": true, - "requires": { - "inherits": "~2.0.0" - } - } + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "node_modules/typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, - "requires": { - "glogg": "^1.0.0" + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", + "node_modules/typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", "dev": true, - "requires": { - "duplexer": "^0.1.1" + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" } }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" + "node_modules/typemoq": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typemoq/-/typemoq-2.1.0.tgz", + "integrity": "sha512-DtRNLb7x8yCTv/KHlwes+NI+aGb4Vl1iPC63Hhtcvk1DpxSAZzKWQv0RQFY0jX2Uqj0SDBNl8Na4e6MV6TNDgw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "circular-json": "^0.3.1", + "lodash": "^4.17.4", + "postinstall-build": "^5.0.1" + }, + "engines": { + "node": ">=6.0.0" } }, - "has-binary2": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-binary2/-/has-binary2-1.0.3.tgz", - "integrity": "sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw==", + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", "dev": true, - "requires": { - "isarray": "2.0.1" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, - "dependencies": { - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true - } + "engines": { + "node": ">=14.17" } }, - "has-cors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-cors/-/has-cors-1.1.0.tgz", - "integrity": "sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=", + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", "dev": true }, - "has-flag": { + "node_modules/uint64be": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "resolved": "https://registry.npmjs.org/uint64be/-/uint64be-3.0.0.tgz", + "integrity": "sha512-mliiCSrsE29aNBI7O9W5gGv6WmA9kBR8PtTt6Apaxns076IRdYrrtFhXHEWMj5CSum3U7cv7/pi4xmi4XsIOqg==" }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", - "dev": true + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", "dev": true, - "requires": { - "has-symbol-support-x": "^1.4.1" + "engines": { + "node": ">=0.10.0" } }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", "dev": true }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/undertaker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "dependencies": { + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/undertaker-registry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "engines": { + "node": ">= 10.13.0" } }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "node_modules/undertaker/node_modules/fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, + "dependencies": { + "fastest-levenshtein": "^1.0.7" } }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "node_modules/undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicode": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/unicode/-/unicode-14.0.0.tgz", + "integrity": "sha512-BjinxTXkbm9Jomp/YBTMGusr4fxIG67fNGShHIRAL16Ur2GJTq2xvLi+sxuiJmInCmwqqev2BCFKyvbfp/yAkg==", + "engines": { + "node": ">= 0.8.x" } }, - "hasha": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.1.0.tgz", - "integrity": "sha512-OFPDWmzPN1l7atOV1TgBVmNtBxaIysToK6Ve9DK+vT6pYuklw/nPNT+HJbZi0KDcI6vWB+9tgvZ5YD7fA3CXcA==", + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, "dependencies": { - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - } + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" } }, - "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": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "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.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "hoist-non-react-statics": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz", - "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==", + "node_modules/uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, - "requires": { - "react-is": "^16.7.0" + "dependencies": { + "punycode": "^2.1.0" } }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, - "requires": { - "parse-passwd": "^1.0.0" + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" } }, - "hoopy": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", - "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "node_modules/url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, - "html-element-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.0.1.tgz", - "integrity": "sha512-BZSfdEm6n706/lBfXKWa4frZRZcT5k1cOusw95ijZsHlI+GdgY0v95h6IzO3iIDf2ROwq570YTwqNPqHcNMozw==", + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, - "requires": { - "array-filter": "^1.0.0" + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "html-encoding-sniffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", - "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "node_modules/url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", "dev": true, - "requires": { - "whatwg-encoding": "^1.0.1" + "license": "MIT", + "engines": { + "node": ">= 4" } }, - "html-escaper": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz", - "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==", + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true }, - "html-minifier": { - "version": "3.5.21", - "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", - "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, - "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" - }, "dependencies": { - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true - } + "inherits": "2.0.3" } }, - "html-to-react": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.3.4.tgz", - "integrity": "sha512-/tWDdb/8Koi/QEP5YUY1653PcDpBnnMblXRhotnTuhFDjI1Fc6Wzox5d4sw73Xk5rM2OdM5np4AYjT/US/Wj7Q==", - "dev": true, - "requires": { - "domhandler": "^2.4.2", - "escape-string-regexp": "^1.0.5", - "htmlparser2": "^3.10.0", - "lodash.camelcase": "^4.3.0", - "ramda": "^0.26" + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "html-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", - "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", + "dev": true + }, + "node_modules/v8flags": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true, - "requires": { - "html-minifier": "^3.2.3", - "loader-utils": "^0.2.16", - "lodash": "^4.17.3", - "pretty-error": "^2.0.2", - "tapable": "^1.0.0", - "toposort": "^1.0.0", - "util.promisify": "1.0.0" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } + "engines": { + "node": ">= 10.13.0" } }, - "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", "dev": true, - "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "engines": { + "node": ">= 0.10" } }, - "http-assert": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.4.1.tgz", - "integrity": "sha512-rdw7q6GTlibqVVbXr0CKelfV5iY8G2HqEUkhSk297BMbSpSL8crXC+9rjKoMcZZEsksX30le6f/4ul4E28gegw==", - "requires": { - "deep-equal": "~1.0.1", - "http-errors": "~1.7.2" + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "http-basic": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/http-basic/-/http-basic-8.1.3.tgz", - "integrity": "sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==", + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", "dev": true, - "requires": { - "caseless": "^0.12.0", - "concat-stream": "^1.6.2", - "http-response-object": "^3.0.1", - "parse-cache-control": "^1.0.1" + "dependencies": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "node_modules/vinyl-contents/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "http-parser-js": { - "version": "0.4.10", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz", - "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=", - "dev": true - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "node_modules/vinyl-contents/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "http-response-object": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/http-response-object/-/http-response-object-3.0.2.tgz", - "integrity": "sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==", + "node_modules/vinyl-contents/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, - "requires": { - "@types/node": "^10.0.3" + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "node_modules/vinyl-contents/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "engines": { + "node": ">= 10" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "node_modules/vinyl-contents/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, - "humanize-number": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/humanize-number/-/humanize-number-0.0.2.tgz", - "integrity": "sha1-EcCvakcWQ2M1iFiASPF5lUFInBg=" - }, - "husky": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz", - "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, - "requires": { - "cosmiconfig": "^5.0.7", - "execa": "^1.0.0", - "find-up": "^3.0.0", - "get-stdin": "^6.0.0", - "is-ci": "^2.0.0", - "pkg-dir": "^3.0.0", - "please-upgrade-node": "^3.1.1", - "read-pkg": "^4.0.1", - "run-node": "^1.0.0", - "slash": "^2.0.0" + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "read-pkg": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", - "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", - "dev": true, - "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" - } - } + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", - "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "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 }, - "icss-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", - "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", - "dev": true, - "requires": { - "postcss": "^6.0.1" + "node_modules/vscode-debugprotocol": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.35.0.tgz", + "integrity": "sha512-+OMm11R1bGYbpIJ5eQIkwoDGFF4GvBz3Ztl6/VM+/RNNb2Gjk2c0Ku+oMmfhlTmTlPCpgHBsH4JqVCbUYhu5bA==", + "deprecated": "This package has been renamed to @vscode/debugprotocol, please update to the new name" + }, + "node_modules/vscode-jsonrpc": { + "version": "9.0.0-next.5", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.5.tgz", + "integrity": "sha512-Sl/8RAJtfF/2x/TPBVRuhzRAcqYR/QDjEjNqMcoKFfqsxfVUPzikupRDQYB77Gkbt1RrW43sSuZ5uLtNAcikQQ==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "10.0.0-next.12", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.0.0-next.12.tgz", + "integrity": "sha512-q7cVYCcYiv+a+fJYCbjMMScOGBnX162IBeUMFg31mvnN7RHKx5/CwKaCz+r+RciJrRXMqS8y8qpEVGgeIPnbxg==", + "dependencies": { + "minimatch": "^9.0.3", + "semver": "^7.6.0", + "vscode-languageserver-protocol": "3.17.6-next.10" }, + "engines": { + "vscode": "^1.91.0" + } + }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "balanced-match": "^1.0.0" } }, - "ieee754": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", - "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", - "dev": true + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.6-next.10", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.10.tgz", + "integrity": "sha512-KOrrWn4NVC5jnFC5N6y/fyNKtx8rVYr67lhL/Z0P4ZBAN27aBsCnLBWAMIkYyJ1K8EZaE5r7gqdxrS9JPB6LIg==", + "dependencies": { + "vscode-jsonrpc": "9.0.0-next.5", + "vscode-languageserver-types": "3.17.6-next.5" + } }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true + "node_modules/vscode-languageserver-types": { + "version": "3.17.6-next.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.5.tgz", + "integrity": "sha512-QFmf3Yl1tCgUQfA77N9Me/LXldJXkIVypQbty2rJ1DNHQkC+iwvm4Z2tXg9czSwlhvv0pD4pbF5mT7WhAglolw==" }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4" + "node_modules/vscode-tas-client": { + "version": "0.1.84", + "resolved": "https://registry.npmjs.org/vscode-tas-client/-/vscode-tas-client-0.1.84.tgz", + "integrity": "sha512-rUTrUopV+70hvx1hW5ebdw1nd6djxubkLvVxjGdyD/r5v/wcVF41LIfiAtbm5qLZDtQdsMH1IaCuDoluoIa88w==", + "dependencies": { + "tas-client": "0.2.33" + }, + "engines": { + "vscode": "^1.85.0" } }, - "image-size": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", - "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=", - "dev": true, - "optional": true - }, - "immutable": { - "version": "4.0.0-rc.12", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0-rc.12.tgz", - "integrity": "sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A==" + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.105.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", + "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } }, - "import-cwd": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", - "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "node_modules/webpack-bundle-analyzer": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", + "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", "dev": true, - "requires": { - "import-from": "^2.1.0" + "dependencies": { + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" } }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "node_modules/webpack-bundle-analyzer/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, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "import-from": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", - "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "node_modules/webpack-bundle-analyzer/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, - "requires": { - "resolve-from": "^3.0.0" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "node_modules/webpack-bundle-analyzer/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, - "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" - }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", - "dev": true - }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "node_modules/webpack-bundle-analyzer/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 }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "node_modules/webpack-bundle-analyzer/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" + } }, - "inquirer": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", - "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" + "node_modules/webpack-bundle-analyzer/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/webpack-cli": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "dev": true, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true } } }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, - "requires": { - "from2": "^2.1.1", - "p-is-promise": "^1.1.0" + "engines": { + "node": ">= 10" } }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "node_modules/webpack-cli/node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true, - "requires": { - "loose-envify": "^1.0.0" + "engines": { + "node": ">= 0.10" } }, - "inversify": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/inversify/-/inversify-4.13.0.tgz", - "integrity": "sha512-O5d8y7gKtyRwrvTLZzYET3kdFjqUy58sGpBYMARF13mzqDobpfBXVOPLH7HmnD2VR6Q+1HzZtslGvsdQfeb0SA==" + "node_modules/webpack-cli/node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "node_modules/webpack-fix-default-import-plugin": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/webpack-fix-default-import-plugin/-/webpack-fix-default-import-plugin-1.0.3.tgz", + "integrity": "sha1-iCuOTRqpPEjLj9r4Rvx52G+C8U8=", "dev": true }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } }, - "ip-regex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", - "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", - "dev": true + "node_modules/webpack-node-externals": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", - "dev": true + "node_modules/webpack-require-from": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/webpack-require-from/-/webpack-require-from-1.8.6.tgz", + "integrity": "sha512-QmRsOkOYPKeNXp4uVc7qxnPrFQPrP4bhOc/gl4QenTFNgXdEbF1U8VC+jM/Sljb0VzJLNgyNiHlVkuHjcmDtBQ==", + "dev": true, + "peerDependencies": { + "tapable": "^2.2.0" + } }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "engines": { + "node": ">=10.13.0" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/webpack/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, - "requires": { - "kind-of": "^3.0.2" + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "is-alphabetical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", - "integrity": "sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA==", + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "is-alphanumerical": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz", - "integrity": "sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA==", + "node_modules/webpack/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, - "requires": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } }, - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, - "requires": { - "binary-extensions": "^1.0.0" + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-boolean-object": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", - "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", + "node_modules/wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "node_modules/winreg": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.4.tgz", + "integrity": "sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs=" }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "node_modules/wipe-node-cache": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/wipe-node-cache/-/wipe-node-cache-2.1.2.tgz", + "integrity": "sha512-m7NXa8qSxBGMtdQilOu53ctMaIBXy93FOP04EC1Uf4bpsE+r+adfLKwIMIvGbABsznaSNxK/ErD4xXDyY5og9w==", "dev": true }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "node_modules/wipe-webpack-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wipe-webpack-cache/-/wipe-webpack-cache-2.1.0.tgz", + "integrity": "sha512-OXzQMGpA7MnQQ8AG+uMl5mWR2ezy6fw1+DMHY+wzYP1qkF1jrek87psLBmhZEj+er4efO/GD4R8jXWFierobaA==", "dev": true, - "requires": { - "ci-info": "^2.0.0" + "dependencies": { + "wipe-node-cache": "^2.1.0" } }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/worker-loader": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", + "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "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" } }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-decimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.3.tgz", - "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", - "dev": true + "node_modules/workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", + "dev": true, + "license": "Apache-2.0" }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, - "requires": { - "number-is-nan": "^1.0.0" + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "is-generator-function": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", - "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "node_modules/wrap-ansi-cjs/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, - "requires": { - "is-extglob": "^2.1.1" + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "is-hexadecimal": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", - "integrity": "sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA==", - "dev": true - }, - "is-ip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-2.0.0.tgz", - "integrity": "sha1-aO6gfooKCpTC0IDdZ0xzGrKkYas=", + "node_modules/wrap-ansi-cjs/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, - "requires": { - "ip-regex": "^2.0.0" + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true + "node_modules/wrap-ansi-cjs/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, + "license": "MIT" }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/wrap-ansi/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, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "is-number-object": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", - "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", - "dev": true - }, - "is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=", - "dev": true - }, - "is-online": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/is-online/-/is-online-8.2.1.tgz", - "integrity": "sha512-853p45I2b//EDV7n1Rbk60f/fy1KQlp1IkTjV/K2EyAD/h8qXrIAxwIbZ8c4K5p5yDsQlTWUrxocgW/aBtNfYQ==", - "requires": { - "got": "^9.6.0", - "p-any": "^2.0.0", - "p-timeout": "^3.0.0", - "public-ip": "^3.0.0" - }, + "node_modules/wrap-ansi/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": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" - }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "requires": { - "p-finally": "^1.0.0" - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "is-path-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "node_modules/wrap-ansi/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 }, - "is-path-in-cwd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", - "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", + "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", "dev": true, - "requires": { - "is-path-inside": "^1.0.0" + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "is-path-inside": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", - "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "requires": { - "path-is-inside": "^1.0.1" + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } } }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "node_modules/xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", "dev": true }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" } }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" } }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "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, - "requires": { - "is-unc-path": "^1.0.0" + "engines": { + "node": ">=0.4" } }, - "is-retry-allowed": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", - "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", - "dev": true - }, - "is-root": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-1.0.0.tgz", - "integrity": "sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=", + "node_modules/y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, - "is-string": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", - "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", - "dev": true + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true + "node_modules/yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "dev": true, + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + }, + "engines": { + "node": ">=8" + } }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true, - "requires": { - "has-symbols": "^1.0.0" + "engines": { + "node": ">=10" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-whitespace-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz", - "integrity": "sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ==", - "dev": true + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "dependencies": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "node_modules/yargs/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } }, - "is-word-character": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.3.tgz", - "integrity": "sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A==", - "dev": true + "node_modules/yargs/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" + } }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "node_modules/yargs/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 }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isexe": { + "node_modules/yargs/node_modules/require-main-filename": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isnumeric": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/isnumeric/-/isnumeric-0.2.0.tgz", - "integrity": "sha1-ojR7o2DeGeM9D/1ZD933dVy/LmQ=", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "node_modules/yargs/node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, - "isomorphic-fetch": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" } }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-lib-coverage": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", - "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==", - "dev": true + "node_modules/yargs/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } }, - "istanbul-lib-hook": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", - "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, - "requires": { - "append-transform": "^2.0.0" + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" } }, - "istanbul-lib-instrument": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.0.tgz", - "integrity": "sha512-Nm4wVHdo7ZXSG30KjZ2Wl5SU/Bw7bDx1PdaiIFzEStdjs0H12mOTncn1GVYuqQSaZxpg87VGBRsVRPGD2cD1AQ==", + "node_modules/yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", - "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" - } - }, - "@babel/core": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.7.tgz", - "integrity": "sha512-jlSjuj/7z138NLZALxVgrx13AOtqip42ATZP7+kYl53GvDV6+4dCek1mVUo8z8c8Xnw/mx2q3d9HWh3griuesQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.7", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.7", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "json5": "^2.1.0", - "lodash": "^4.17.13", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "@babel/generator": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz", - "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4", - "jsesc": "^2.5.1", - "lodash": "^4.17.13", - "source-map": "^0.5.0" - } - }, - "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", - "dev": true, - "requires": { - "@babel/types": "^7.7.4" - } - }, - "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", - "dev": true, - "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/parser": { - "version": "7.7.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz", - "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==", - "dev": true - }, - "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" - } - }, - "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", - "debug": "^4.1.0", - "globals": "^11.1.0", - "lodash": "^4.17.13" - } - }, - "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "lodash": "^4.17.13", - "to-fast-properties": "^2.0.0" - } - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.1" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "buffer-crc32": "~0.2.3" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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" + } + } + }, + "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" + } + }, + "@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "requires": { + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz", - "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==", + "@azure/core-auth": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz", + "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-util": "^1.1.0", + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@azure/core-client": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.9.2.tgz", + "integrity": "sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==", "dev": true, "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-rest-pipeline": "^1.9.1", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "tslib": "^2.6.2" }, "dependencies": { - "cross-spawn": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", - "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", "dev": true, "requires": { - "semver": "^6.0.0" + "tslib": "^2.6.2" } }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "@azure/core-util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dev": true, "requires": { - "aggregate-error": "^3.0.0" + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" } }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", "dev": true + } + } + }, + "@azure/core-rest-pipeline": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.1.tgz", + "integrity": "sha512-Kji9k6TOFRDB5ZMTw8qUf2IJ+CeJtsuMdAHox9eqpTf1cefiNMpzrfnF6sINEBZJsaVaWgQ0o48B6kcUH68niA==", + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.4.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.0.0", + "@azure/logger": "^1.0.0", + "form-data": "^4.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "tslib": "^2.2.0", + "uuid": "^8.3.0" + }, + "dependencies": { + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" }, - "rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", - "dev": true, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "glob": "^7.1.3" + "ms": "2.1.2" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "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, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "requires": { - "shebang-regex": "^3.0.0" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" } }, - "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 - }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": 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" - } + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, + "@azure/core-tracing": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.0.1.tgz", + "integrity": "sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==", "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" + "tslib": "^2.2.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==", - "dev": true - }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, - "istanbul-lib-source-maps": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", - "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", - "dev": true, + "@azure/core-util": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.2.0.tgz", + "integrity": "sha512-ffGIw+Qs8bNKNLxz5UPkz4/VBM/EZY07mPve1ZYFqYUdPwFqRj0RPk0U7LZMOfT7GCck9YjuT1Rfp1PApNl1ng==", "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "@azure/abort-controller": "^1.0.0", + "tslib": "^2.2.0" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } + } + }, + "@azure/identity": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.2.1.tgz", + "integrity": "sha512-U8hsyC9YPcEIzoaObJlRDvp7KiF0MGS7xcWbyJSVvXRkC/HXo1f0oYeBYmEvVgRfacw7GHf6D6yAoh9JHz6A5Q==", + "dev": true, + "requires": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.5.0", + "@azure/core-client": "^1.4.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.3.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^3.11.1", + "@azure/msal-node": "^2.9.2", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^8.0.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0" + }, + "dependencies": { + "@azure/core-util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.9.0.tgz", + "integrity": "sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==", "dev": true, "requires": { - "ms": "^2.1.1" + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "dependencies": { + "@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "dev": true, + "requires": { + "tslib": "^2.6.2" + } + } } + }, + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true } } }, - "istanbul-reports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.0.tgz", - "integrity": "sha512-2osTcC8zcOSUkImzN2EWQta3Vdi4WjjKw99P2yWx5mLnigAM0Rd5uYFn1cf2i/Ois45GkNjaoTqc5CxgMSX80A==", - "dev": true, + "@azure/logger": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", + "integrity": "sha512-ustrPY8MryhloQj7OWGe+HrYx+aoiOxzbXTtgblbV3xwCqpzUK36phH3XNHQKj3EPonyFUuDTfR3qFhTEAuZEg==", "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "tslib": "^2.2.0" + }, + "dependencies": { + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + } } }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", + "@azure/msal-browser": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.14.0.tgz", + "integrity": "sha512-Un85LhOoecJ3HDTS3Uv3UWnXC9/43ZSO+Kc+anSqpZvcEt58SiO/3DuVCAe1A3I5UIBYJNMgTmZPGXQ0MVYrwA==", "dev": true, "requires": { - "has-to-string-tag-x": "^1.2.0", - "is-object": "^1.0.1" + "@azure/msal-common": "14.10.0" } }, - "jest-docblock": { - "version": "21.2.0", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-21.2.0.tgz", - "integrity": "sha512-5IZ7sY9dBAYSV+YjQ0Ovb540Ku7AO9Z5o2Cg789xj167iQuZ2cG+z0f3Uct6WeYLbU6aQiM2pCs7sZ+4dotydw==", + "@azure/msal-common": { + "version": "14.10.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.10.0.tgz", + "integrity": "sha512-Zk6DPDz7e1wPgLoLgAp0349Yay9RvcjPM5We/ehuenDNsz/t9QEFI7tRoHpp/e47I4p20XE3FiDlhKwAo3utDA==", "dev": true }, - "jest-worker": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", - "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "@azure/msal-node": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.9.2.tgz", + "integrity": "sha512-8tvi6Cos3m+0KmRbPjgkySXi+UQU/QiuVRFnrxIwt5xZlEEFa69O04RTaNESGgImyBBlYbo2mfE8/U8Bbdk1WQ==", "dev": true, "requires": { - "merge-stream": "^2.0.0", - "supports-color": "^6.1.0" + "@azure/msal-common": "14.12.0", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" }, "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "@azure/msal-common": { + "version": "14.12.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.12.0.tgz", + "integrity": "sha512-IDDXmzfdwmDkv4SSmMEyAniJf6fDu3FJ7ncOjlxkDuT85uSnLEhZi3fGZpoR7T4XZpOMx9teM9GXBgrfJgyeBw==", + "dev": true } } }, - "jpeg-js": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", - "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==", - "dev": true - }, - "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", - "dev": true - }, - "jquery-ui": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.12.1.tgz", - "integrity": "sha1-vLQEXI3QU5wTS8FIjN0+dop6nlE=", - "dev": true - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", - "dev": true - }, - "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": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "@azure/opentelemetry-instrumentation-azure-sdk": { + "version": "1.0.0-beta.5", + "resolved": "https://registry.npmjs.org/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz", + "integrity": "sha512-fsUarKQDvjhmBO4nIfaZkfNSApm1hZBzcvpNbSrXdcUBxu7lRvKsV5DnwszX7cnhLyVOW9yl1uigtRQ1yDANjA==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "@azure/core-tracing": "^1.0.0", + "@azure/logger": "^1.0.0", + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/core": "^1.15.2", + "@opentelemetry/instrumentation": "^0.41.2", + "tslib": "^2.2.0" }, "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + "tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdom": { - "version": "15.1.1", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.1.1.tgz", - "integrity": "sha512-cQZRBB33arrDAeCrAEWn1U3SvrvC8XysBua9Oqg1yWrsY/gYcusloJC3RZJXuY5eehSCmws8f2YeliCqGSkrtQ==", - "dev": true, - "requires": { - "abab": "^2.0.0", - "acorn": "^6.1.1", - "acorn-globals": "^4.3.2", - "array-equal": "^1.0.0", - "cssom": "^0.3.6", - "cssstyle": "^1.2.2", - "data-urls": "^1.1.0", - "domexception": "^1.0.1", - "escodegen": "^1.11.1", - "html-encoding-sniffer": "^1.0.2", - "nwsapi": "^2.1.4", - "parse5": "5.1.0", - "pn": "^1.1.0", - "request": "^2.88.0", - "request-promise-native": "^1.0.7", - "saxes": "^3.1.9", - "symbol-tree": "^3.2.2", - "tough-cookie": "^3.0.1", - "w3c-hr-time": "^1.0.1", - "w3c-xmlserializer": "^1.1.2", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^7.0.0", - "ws": "^7.0.0", - "xml-name-validator": "^3.0.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "escodegen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", - "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", - "dev": true, - "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" - } - }, - "parse5": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", - "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", - "dev": true - }, - "tough-cookie": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz", - "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==", + "@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + } + }, + "@babel/compat-data": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", + "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", + "dev": true + }, + "@babel/core": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", + "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.6", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.6", + "@babel/types": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ip-regex": "^2.1.0", - "psl": "^1.1.28", - "punycode": "^2.1.1" + "ms": "2.1.2" } - }, - "ws": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.0.tgz", - "integrity": "sha512-Swie2C4fs7CkwlHu1glMePLYJJsWjzhl1vm3ZaLplD0h7OMkZyZ6kLTB/OagiU923bZrPFXuDTeEqaEN4NWG4g==", + } + } + }, + "@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "requires": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", + "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-validator-option": "^7.22.5", + "@nicolo-ribaudo/semver-v6": "^6.3.3", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1" + }, + "dependencies": { + "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": { - "async-limiter": "^1.0.0" + "yallist": "^3.0.2" } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true } } }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "@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 }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, - "json-edm-parser": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/json-edm-parser/-/json-edm-parser-0.1.2.tgz", - "integrity": "sha1-HmCw/vG8CvZ7wNFG393lSGzWFbQ=", + "@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": { - "jsonparse": "~1.2.0" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" } }, - "json-loader": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", - "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", - "dev": true + "@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" + } }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + "@babel/helper-module-transforms": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", + "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5" + } }, - "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==" + "@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" + } }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "@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": { - "jsonify": "~0.0.0" + "@babel/types": "^7.22.5" } }, - "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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true }, - "json-stringify-pretty-compact": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", - "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", + "@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + "@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true }, - "json2csv": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/json2csv/-/json2csv-4.5.2.tgz", - "integrity": "sha512-Te2Knce3VfLKyurH3AolM6Y781ZE+R3jQ+0YQ0HYLiubyicST/19vML24e1dpScaaEQb+1Q1t5IcGXr6esM9Lw==", + "@babel/helpers": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.1.tgz", + "integrity": "sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==", "dev": true, "requires": { - "commander": "^2.15.1", - "jsonparse": "^1.3.1", - "lodash.get": "^4.4.2" - }, - "dependencies": { - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - } + "@babel/template": "^7.27.1", + "@babel/types": "^7.27.1" } }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, - "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", + "@babel/parser": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.2.tgz", + "integrity": "sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==", + "dev": true, "requires": { - "minimist": "^1.2.0" + "@babel/types": "^7.27.1" } }, - "jsonc-parser": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.1.0.tgz", - "integrity": "sha512-n9GrT8rrr2fhvBbANa1g+xFmgGK5X91KFeDwlKQ3+SJfmH5+tKv/M/kahx/TXOMflfWHKGKqKyfHQaLKTNzJ6w==" + "@babel/runtime": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.1.tgz", + "integrity": "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==", + "dev": true }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "@babel/runtime-corejs3": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.27.1.tgz", + "integrity": "sha512-909rVuj3phpjW6y0MCXAZ5iNeORePa6ldJvp2baWGcTjwqbBDDz6xoS5JHJ7lS88NlwLYj07ImL/8IUMtDZzTA==", + "dev": true, "requires": { - "graceful-fs": "^4.1.6" + "core-js-pure": "^3.30.2" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true + "@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + } }, - "jsonparse": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.2.0.tgz", - "integrity": "sha1-XAxWhRBxYOcv50ib3eoLRMK8Z70=" + "@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@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.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } + } }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "@babel/types": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz", + "integrity": "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==", + "dev": true, "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" } }, - "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", - "dev": true - }, - "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "@cspotcode/source-map-consumer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz", + "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==", "dev": true }, - "keygrip": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", - "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "@cspotcode/source-map-support": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz", + "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==", + "dev": true, "requires": { - "tsscmp": "1.0.6" + "@cspotcode/source-map-consumer": "0.8.0" } }, - "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": 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": { - "json-buffer": "3.0.0" + "eslint-visitor-keys": "^3.3.0" } }, - "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==", + "@eslint-community/regexpp": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true }, - "koa": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/koa/-/koa-2.11.0.tgz", - "integrity": "sha512-EpR9dElBTDlaDgyhDMiLkXrPwp6ZqgAIBvhhmxQ9XN4TFgW+gEz6tkcsNI6BnUbUftrKDjVFj4lW2/J2aNBMMA==", - "requires": { - "accepts": "^1.3.5", - "cache-content-type": "^1.0.0", - "content-disposition": "~0.5.2", - "content-type": "^1.0.4", - "cookies": "~0.8.0", - "debug": "~3.1.0", - "delegates": "^1.0.0", - "depd": "^1.1.2", - "destroy": "^1.0.4", - "encodeurl": "^1.0.2", - "error-inject": "^1.0.0", - "escape-html": "^1.0.3", - "fresh": "~0.5.2", - "http-assert": "^1.3.0", - "http-errors": "^1.6.3", - "is-generator-function": "^1.0.7", - "koa-compose": "^4.1.0", - "koa-convert": "^1.2.0", - "on-finished": "^2.3.0", - "only": "~0.0.2", - "parseurl": "^1.3.2", - "statuses": "^1.5.0", - "type-is": "^1.6.16", - "vary": "^1.1.2" + "@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": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "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" + } + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "requires": { - "ms": "2.0.0" + "brace-expansion": "^1.1.7" } }, "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "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 } } }, - "koa-compose": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", - "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==" + "@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true }, - "koa-compress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.0.0.tgz", - "integrity": "sha512-xol+LkNB1mozKJkB5Kj6nYXbJXhkLkZlXl9BsGBPjujVfZ8MsIXwU4GHRTT7TlSfUcl2DU3JtC+j6wOWcovfuQ==", + "@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "dev": true + }, + "@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dev": true, "requires": { - "bytes": "^3.0.0", - "compressible": "^2.0.0", - "koa-is-json": "^1.0.0", - "statuses": "^1.0.0" + "is-negated-glob": "^1.0.0" } }, - "koa-convert": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-1.2.0.tgz", - "integrity": "sha1-2kCHXfSd4FOQmNFwC1CCDOvNIdA=", + "@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "dev": true, "requires": { - "co": "^4.6.0", - "koa-compose": "^3.0.0" + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "dependencies": { - "koa-compose": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-3.2.1.tgz", - "integrity": "sha1-qFzLQLfZhtjlo0Wzoazo6rz1Tec=", + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, "requires": { - "any-promise": "^1.1.0" + "brace-expansion": "^1.1.7" } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, - "koa-is-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", - "integrity": "sha1-JzwH7c3Ljfaiwat9We52SRRR7BQ=" - }, - "koa-logger": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/koa-logger/-/koa-logger-3.2.1.tgz", - "integrity": "sha512-MjlznhLLKy9+kG8nAXKJLM0/ClsQp/Or2vI3a5rbSQmgl8IJBQO0KI5FA70BvW+hqjtxjp49SpH2E7okS6NmHg==", - "requires": { - "bytes": "^3.1.0", - "chalk": "^2.4.2", - "humanize-number": "0.0.2", - "passthrough-counter": "^1.0.0" - } - }, - "kuler": { + "@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", - "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { - "colornames": "^1.1.1" - } + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true }, - "labella": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/labella/-/labella-1.1.4.tgz", - "integrity": "sha1-xsxaNA6N80DrM1YzaD6lm4KMMi0=", + "@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - } + "@iarna/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-td6ZUkz2oS3VeleBcN+m//Q6HlCFCPrnI0FZhrt/h4XqLEdOyYp2u21nd8MdsR+WJy5r9PTDaHTDDfhf4H4l6Q==" }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, "requires": { - "readable-stream": "^2.0.5" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "dependencies": { - "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==", + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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 + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "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" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.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==", + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" } } } }, - "lcid": { + "@istanbuljs/load-nyc-config": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz", + "integrity": "sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg==", "dev": true, "requires": { - "invert-kv": "^1.0.0" + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" } }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "@istanbuljs/nyc-config-typescript": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/nyc-config-typescript/-/nyc-config-typescript-1.0.2.tgz", + "integrity": "sha512-iKGIyMoyJuFnJRSVTZ78POIRvNnwZaWIf8vG4ZS3rQq58MMDrqEX2nnzx0R28V2X8JvmKYiqY9FP2hlJsm8A0w==", "dev": true, "requires": { - "flush-write-stream": "^1.0.2" + "@istanbuljs/schema": "^0.1.2" } }, - "leaflet": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.5.1.tgz", - "integrity": "sha512-ekM9KAeG99tYisNBg0IzEywAlp0hYI5XRipsqRXyRTeuU8jcuntilpp+eFf5gaE0xubc9RuSNIVtByEKwqFV0w==", + "@istanbuljs/schema": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz", + "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==", "dev": true }, - "less": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz", - "integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==", + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "requires": { - "clone": "^2.1.2", - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "mime": "^1.4.1", - "mkdirp": "^0.5.0", - "promise": "^7.1.1", - "request": "^2.83.0", - "source-map": "~0.6.0" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - } + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "less-loader": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-5.0.0.tgz", - "integrity": "sha512-bquCU89mO/yWLaUq0Clk7qCsKhsF/TZpJUzETRvJa9KSVEL9SO3ovCvdEHISBhrC81OwC8QSVX7E0bzElZj9cg==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "loader-utils": "^1.1.0", - "pify": "^4.0.1" - }, - "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - } - } + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true }, - "less-plugin-inline-urls": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/less-plugin-inline-urls/-/less-plugin-inline-urls-1.2.0.tgz", - "integrity": "sha1-XdqwegwlcfGihVz5Kd3J78Hjisw=", + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "line-by-line": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/line-by-line/-/line-by-line-0.1.6.tgz", - "integrity": "sha512-MmwVPfOyp0lWnEZ3fBA8Ah4pMFvxO6WgWovqZNu7Y4J0TNnGcsV4S1LzECHbdgqk1hoHc2mFP1Axc37YUqwafg==" + "@microsoft/1ds-core-js": { + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-3.2.13.tgz", + "integrity": "sha512-CluYTRWcEk0ObG5EWFNWhs87e2qchJUn0p2D21ZUa3PWojPZfPSBs4//WIE0MYV8Qg1Hdif2ZTwlM7TbYUjfAg==", + "requires": { + "@microsoft/applicationinsights-core-js": "2.8.15", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } }, - "linear-layout-vector": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/linear-layout-vector/-/linear-layout-vector-0.0.1.tgz", - "integrity": "sha1-OYEU1zA7bsx/1rJzr3uEAdi6nHA=", - "dev": true + "@microsoft/1ds-post-js": { + "version": "3.2.13", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-3.2.13.tgz", + "integrity": "sha512-HgS574fdD19Bo2vPguyznL4eDw7Pcm1cVNpvbvBLWiW3x4e1FCQ3VMXChWnAxCae8Hb0XqlA2sz332ZobBavTA==", + "requires": { + "@microsoft/1ds-core-js": "3.2.13", + "@microsoft/applicationinsights-shims": "^2.0.2", + "@microsoft/dynamicproto-js": "^1.1.7" + } }, - "linebreak": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.0.2.tgz", - "integrity": "sha512-bJwSRsJeAmaZYnkcwl5sCQNfSDAhBuXxb6L27tb+qkBRtUQSSTUa5bcgCPD6hFEkRNlpWHfK7nFMmcANU7ZP1w==", + "@microsoft/applicationinsights-channel-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.0.2.tgz", + "integrity": "sha512-jDBNKbCHsJgmpv0CKNhJ/uN9ZphvfGdb93Svk+R4LjO8L3apNNMbDDPxBvXXi0uigRmA1TBcmyBG4IRKjabGhw==", "requires": { - "base64-js": "0.0.8", - "brfs": "^2.0.2", - "unicode-trie": "^1.0.0" + "@microsoft/applicationinsights-common": "3.0.2", + "@microsoft/applicationinsights-core-js": "3.0.2", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" }, "dependencies": { - "base64-js": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=" + "@microsoft/applicationinsights-core-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.2.tgz", + "integrity": "sha512-WQhVhzlRlLDrQzn3OShCW/pL3BW5WC57t0oywSknX3q7lMzI3jDg7Ihh0iuIcNTzGCTbDkuqr4d6IjEDWIMtJQ==", + "requires": { + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" + } }, - "unicode-trie": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-1.0.0.tgz", - "integrity": "sha512-v5raLKsobbFbWLMoX9+bChts/VhPPj3XpkNr/HbqkirXR1DPk8eo9IYKyvk0MQZFkaoRsFj2Rmaqgi2rfAZYtA==", + "@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "requires": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } + }, + "@microsoft/dynamicproto-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz", + "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==", "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" } } } }, - "lines-and-columns": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", - "dev": true - }, - "linkify-it": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.1.0.tgz", - "integrity": "sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg==", - "dev": true, - "requires": { - "uc.micro": "^1.0.1" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, + "@microsoft/applicationinsights-common": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.0.2.tgz", + "integrity": "sha512-y+WXWop+OVim954Cu1uyYMnNx6PWO8okHpZIQi/1YSqtqaYdtJVPv4P0AVzwJdohxzVfgzKvqj9nec/VWqE2Zg==", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "@microsoft/applicationinsights-core-js": "3.0.2", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" }, "dependencies": { - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, + "@microsoft/applicationinsights-core-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.2.tgz", + "integrity": "sha512-WQhVhzlRlLDrQzn3OShCW/pL3BW5WC57t0oywSknX3q7lMzI3jDg7Ihh0iuIcNTzGCTbDkuqr4d6IjEDWIMtJQ==", "requires": { - "error-ex": "^1.2.0" + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" } }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "requires": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } + }, + "@microsoft/dynamicproto-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz", + "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==", + "requires": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } } } }, - "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true + "@microsoft/applicationinsights-core-js": { + "version": "2.8.15", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-2.8.15.tgz", + "integrity": "sha512-yYAs9MyjGr2YijQdUSN9mVgT1ijI1FPMgcffpaPmYbHAVbQmF7bXudrBWHxmLzJlwl5rfep+Zgjli2e67lwUqQ==", + "requires": { + "@microsoft/applicationinsights-shims": "2.0.2", + "@microsoft/dynamicproto-js": "^1.1.9" + } }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, + "@microsoft/applicationinsights-shims": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-2.0.2.tgz", + "integrity": "sha512-PoHEgsnmcqruLNHZ/amACqdJ6YYQpED0KSRe6J7gIJTtpZC1FfFU9b1fmDKDKtFoUSrPzEh1qzO3kmRZP0betg==" + }, + "@microsoft/applicationinsights-web-basic": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.0.2.tgz", + "integrity": "sha512-6Lq0DE/pZp9RvSV+weGbcxN1NDmfczj6gNPhvZKV2YSQ3RK0LZE3+wjTWLXfuStq8a+nCBdsRpWk8tOKgsoxcg==", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "@microsoft/applicationinsights-channel-js": "3.0.2", + "@microsoft/applicationinsights-common": "3.0.2", + "@microsoft/applicationinsights-core-js": "3.0.2", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" }, "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, + "@microsoft/applicationinsights-core-js": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.0.2.tgz", + "integrity": "sha512-WQhVhzlRlLDrQzn3OShCW/pL3BW5WC57t0oywSknX3q7lMzI3jDg7Ihh0iuIcNTzGCTbDkuqr4d6IjEDWIMtJQ==", "requires": { - "minimist": "^1.2.0" + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.2", + "@nevware21/ts-async": ">= 0.2.4 < 2.x", + "@nevware21/ts-utils": ">= 0.9.5 < 2.x" + } + }, + "@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "requires": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } + }, + "@microsoft/dynamicproto-js": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.2.tgz", + "integrity": "sha512-MB8trWaFREpmb037k/d0bB7T2BP7Ai24w1e1tbz3ASLB0/lwphsq3Nq8S9I5AsI5vs4zAQT+SB5nC5/dLYTiOg==", + "requires": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" } } } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, + "@microsoft/applicationinsights-web-snippet": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz", + "integrity": "sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ==" + }, + "@microsoft/dynamicproto-js": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-1.1.9.tgz", + "integrity": "sha512-n1VPsljTSkthsAFYdiWfC+DKzK2WwcRp83Y1YAqdX552BstvsDjft9YXppjUzp11BPsapDoO1LDgrDB0XVsfNQ==" + }, + "@nevware21/ts-async": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.3.0.tgz", + "integrity": "sha512-ZUcgUH12LN/F6nzN0cYd0F/rJaMLmXr0EHVTyYfaYmK55bdwE4338uue4UiVoRqHVqNW4KDUrJc49iGogHKeWA==", "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "@nevware21/ts-utils": ">= 0.10.0 < 2.x" } }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + "@nevware21/ts-utils": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.10.1.tgz", + "integrity": "sha512-pMny25NnF2/MJwdqC3Iyjm2pGIXNxni4AROpcqDeWa+td9JMUY4bUS9uU9XW+BoBRqTLUL+WURF9SOd/6OQzRg==" }, - "lodash-es": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", - "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==", + "@nicolo-ribaudo/semver-v6": { + "version": "6.3.3", + "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", + "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", "dev": true }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true + "@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" + } }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "@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 }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", - "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" + } }, - "lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + "@opentelemetry/api": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz", + "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==" }, - "lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=", - "dev": true + "@opentelemetry/core": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.15.2.tgz", + "integrity": "sha512-+gBv15ta96WqkHZaPpcDHiaz0utiiHZVfm2YOYSqFGrUaJpPkMoSuLBB58YFQGi6Rsb9EHos84X6X5+9JspmLw==", + "requires": { + "@opentelemetry/semantic-conventions": "1.15.2" + } }, - "lodash.defaults": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", - "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", - "dev": true + "@opentelemetry/instrumentation": { + "version": "0.41.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz", + "integrity": "sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==", + "requires": { + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "1.4.2", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.1", + "shimmer": "^1.2.1" + } }, - "lodash.difference": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", - "dev": true + "@opentelemetry/resources": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.15.2.tgz", + "integrity": "sha512-xmMRLenT9CXmm5HMbzpZ1hWhaUowQf8UB4jMjFlAxx1QzQcsD3KFNAVX/CAWzFPtllTyTplrA4JrQ7sCH3qmYw==", + "requires": { + "@opentelemetry/core": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" + } }, - "lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=", - "dev": true + "@opentelemetry/sdk-trace-base": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.15.2.tgz", + "integrity": "sha512-BEaxGZbWtvnSPchV98qqqqa96AOcb41pjgvhfzDij10tkBhIu9m0Jd6tZ1tJB5ZHfHbTffqYVYE0AOGobec/EQ==", + "requires": { + "@opentelemetry/core": "1.15.2", + "@opentelemetry/resources": "1.15.2", + "@opentelemetry/semantic-conventions": "1.15.2" + } }, - "lodash.escaperegexp": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", - "dev": true + "@opentelemetry/semantic-conventions": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.15.2.tgz", + "integrity": "sha512-CjbOKwk2s+3xPIMcd5UNYQzsf+v94RczbdNix9/kQh38WiQkM90sUOi3if8eyHFgiBjBjhwXrA7W3ydiSQP9mw==" }, - "lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", - "dev": true + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true }, - "lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", + "@polka/url": { + "version": "1.0.0-next.21", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", "dev": true }, - "lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=", + "@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "@sindresorhus/is": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", + "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", "dev": true }, - "lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", - "dev": true + "@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true + "@sinonjs/fake-timers": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz", + "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^3.0.0" + } }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "@sinonjs/samsam": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz", + "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==", + "dev": true, + "requires": { + "@sinonjs/commons": "^2.0.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + }, + "dependencies": { + "@sinonjs/commons": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + } + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, - "lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, - "lodash.mergewith": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", - "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "@tsconfig/node10": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", + "integrity": "sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==", "dev": true }, - "lodash.some": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", - "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "@tsconfig/node12": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.9.tgz", + "integrity": "sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==", "dev": true }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "@tsconfig/node14": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.1.tgz", + "integrity": "sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", + "@tsconfig/node16": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.2.tgz", + "integrity": "sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==", "dev": true }, - "lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "@types/bent": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/@types/bent/-/bent-7.3.3.tgz", + "integrity": "sha512-5NEIhVzHiZ6wMjFBmJ3gwjxwGug6amMoAn93rtDBttwrODxm+bt63u+MJA7H9NGGM4X1m73sJrAxDapktl036Q==", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" + "@types/node": "*" } }, - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "@types/chai": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.0.tgz", + "integrity": "sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw==", + "dev": true + }, + "@types/chai-arrays": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/chai-arrays/-/chai-arrays-2.0.0.tgz", + "integrity": "sha512-5h5jnAC9C64YnD7WJpA5gBG7CppF/QmoWytOssJ6ysENllW49NBdpsTx6uuIBOpnzAnXThb8jBICgB62wezTLQ==", "dev": true, "requires": { - "lodash._reinterpolate": "^3.0.0" + "@types/chai": "*" } }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", - "dev": true + "@types/chai-as-promised": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/@types/chai-as-promised/-/chai-as-promised-7.1.5.tgz", + "integrity": "sha512-jStwss93SITGBwt/niYrkf2C+/1KTeZCZl1LaeezTlqppAKeoQC7jxyqYuP72sxBGKCIbw7oHgbYssIRzT5FCQ==", + "dev": true, + "requires": { + "@types/chai": "*" + } }, - "lodash.union": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", - "integrity": "sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=", + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", "dev": true }, - "lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true + "@types/decompress": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.5.tgz", + "integrity": "sha512-LdL+kbcKGs9TzvB/K+OBGzPfDoP6gwwTsykYjodlzUJUUYp/43c1p1jE5YTtz3z4Ml90iruvBXbJ6+kDvb3WSQ==", + "dev": true, + "requires": { + "@types/node": "*" + } }, - "log-symbols": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "@types/download": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@types/download/-/download-8.0.3.tgz", + "integrity": "sha512-IDwXjU7zCtuFVvI0Plnb02TpXyj3RA4YeOKQvEfsjdJeWxZ9hTl6lxeNsU2bLWn0aeAS7fyMl74w/TbdOlS2KQ==", "dev": true, "requires": { - "chalk": "^2.0.1" + "@types/decompress": "*", + "@types/got": "^9", + "@types/node": "*" } }, - "log4js": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.1.2.tgz", - "integrity": "sha512-knS4Y30pC1e0n7rfx3VxcLOdBCsEo0o6/C7PVTGxdVK+5b1TYOSGQPn9FDcrhkoQBV29qwmA2mtkznPAQKnxQg==", + "@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, "requires": { - "date-format": "^3.0.0", - "debug": "^4.1.1", - "flatted": "^2.0.1", - "rfdc": "^1.1.4", - "streamroller": "^2.2.3" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - } + "@types/estree": "*", + "@types/json-schema": "*" } }, - "logform": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", - "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", - "ms": "^2.1.1", - "triple-beam": "^1.3.0" + "@types/eslint": "*", + "@types/estree": "*" } }, - "loglevelnext": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", - "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "@types/fs-extra": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", + "integrity": "sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==", "dev": true, "requires": { - "es6-symbol": "^3.1.1", - "object.assign": "^4.1.0" + "@types/jsonfile": "*", + "@types/node": "*" } }, - "lolex": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", - "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0" + "@types/minimatch": "*", + "@types/node": "*" } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "@types/got": { + "version": "9.6.12", + "resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.12.tgz", + "integrity": "sha512-X4pj/HGHbXVLqTpKjA2ahI4rV/nNBc9mGO2I/0CgAra+F2dKgMXnENv2SRpemScBzBAI4vMelIVYViQxlSE6xA==", "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + }, + "dependencies": { + "form-data": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.5.tgz", + "integrity": "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.35", + "safe-buffer": "^5.2.1" + } + }, + "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==", + "dev": true + } } }, - "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true }, - "lru-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", - "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", + "@types/jsonfile": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@types/jsonfile/-/jsonfile-6.1.4.tgz", + "integrity": "sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==", "dev": true, "requires": { - "es5-ext": "~0.10.2" + "@types/node": "*" } }, - "magic-string": { - "version": "0.22.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.5.tgz", - "integrity": "sha512-oreip9rJZkzvA8Qzk9HFs8fZGF/u7H/gtrE8EN6RjKJ9kh2HlC+yQ2QezifqTZfGyiuAV0dRv5a+y/8gBb1m9w==", - "requires": { - "vlq": "^0.2.2" - } + "@types/lodash": { + "version": "4.14.181", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", + "dev": true }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true }, - "make-error": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", - "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "@types/mocha": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.0.tgz", + "integrity": "sha512-QCWHkbMv4Y5U9oW10Uxbr45qMMSzl4OzijsozynUAgx3kEHUdXB00udx2dWDQ7f2TU2a2uuiFaRZjCe3unPpeg==", "dev": true }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "@types/node": { + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", "dev": true, "requires": { - "kind-of": "^6.0.2" + "undici-types": "~6.21.0" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "@types/semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==", "dev": true }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "@types/shimmer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.2.tgz", + "integrity": "sha512-dKkr1bTxbEsFlh2ARpKzcaAmsYixqt9UyCdoEZk8rHyE4iQYcDCyvSjDSf7JUWJHlJiTtbIoQjxKh6ViywqDAg==" + }, + "@types/shortid": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/shortid/-/shortid-0.0.29.tgz", + "integrity": "sha1-gJPuBBam4r8qpjOBCRFLP7/6Dps=", + "dev": true + }, + "@types/sinon": { + "version": "17.0.3", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-17.0.3.tgz", + "integrity": "sha512-j3uovdn8ewky9kRBG19bOwaZbexJu/XjtkHyjvUgt4xfPFz18dcORIMqnYh66Fx3Powhcr85NT5+er3+oViapw==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "@types/sinonjs__fake-timers": "*" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", "dev": true }, - "map-stream": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", - "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", + "@types/stack-trace": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/stack-trace/-/stack-trace-0.0.29.tgz", + "integrity": "sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } + "@types/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha1-EHPEvIJHVK49EM+riKsCN7qWTk0=", + "dev": true }, - "markdown-escapes": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.3.tgz", - "integrity": "sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw==", + "@types/tough-cookie": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", + "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==", "dev": true }, - "markdown-it": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz", - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "entities": "~1.1.1", - "linkify-it": "^2.0.0", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - } + "@types/vscode": { + "version": "1.100.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.100.0.tgz", + "integrity": "sha512-4uNyvzHoraXEeCamR3+fzcBlh7Afs4Ifjs4epINyUX/jvdk0uzLnwiDY35UKDKnkCHP5Nu3dljl2H8lR6s+rQw==", + "dev": true }, - "marked": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", - "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==", + "@types/which": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/which/-/which-2.0.1.tgz", + "integrity": "sha512-Jjakcv8Roqtio6w1gr0D7y6twbhx6gGgFGF5BLwajPpnOIOxFkakFhCq+LmyyeAz7BX6ULrjBOxdKaCDy+4+dQ==", "dev": true }, - "martinez-polygon-clipping": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.1.5.tgz", - "integrity": "sha1-gc4+soZ82RiKILkKzybyP7To7kI=", + "@types/winreg": { + "version": "1.2.31", + "resolved": "https://registry.npmjs.org/@types/winreg/-/winreg-1.2.31.tgz", + "integrity": "sha512-SDatEMEtQ1cJK3esIdH6colduWBP+42Xw9Guq1sf/N6rM3ZxgljBduvZOwBsxRps/k5+Wwf5HJun6pH8OnD2gg==", + "dev": true + }, + "@types/xml2js": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/@types/xml2js/-/xml2js-0.4.9.tgz", + "integrity": "sha512-CHiCKIihl1pychwR2RNX5mAYmJDACgFVCMT5OArMaO3erzwXVcBqPcusr+Vl8yeeXukxZqtF8mZioqX+mpjjdw==", "dev": true, "requires": { - "bintrees": "^1.0.1", - "tinyqueue": "^1.1.0" + "@types/node": "*" } }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", + "@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "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": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "ms": "2.1.2" } } } }, - "material-colors": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", - "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", - "dev": true - }, - "math-expression-evaluator": { - "version": "1.2.22", - "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.22.tgz", - "integrity": "sha512-L0j0tFVZBQQLeEjmWOvDLoRciIY8gQGWahvkztXUal8jH8R5Rlqo9GCvgqvXcy9LQhEWdQCVvzqAbxgYNt4blQ==", - "dev": true - }, - "md5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", - "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, "requires": { - "charenc": "~0.0.1", - "crypt": "~0.0.1", - "is-buffer": "~1.1.1" + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "dependencies": { + "debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } } }, - "md5.js": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", - "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" } }, - "mdast-add-list-metadata": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz", - "integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==", + "@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "requires": { - "unist-util-visit-parents": "1.1.2" + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "dependencies": { + "debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + } } }, - "mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "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.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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" + } + } + } }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" }, "dependencies": { - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true } } }, - "memoize-one": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.1.1.tgz", - "integrity": "sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA==", + "@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + } + }, + "@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "dev": true }, - "memoizee": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.14.tgz", - "integrity": "sha512-/SWFvWegAIYAO4NQMpcX+gcra0yEZu4OntmUdrBaWrJncxOqAziGFlHxc7yjKVK2uu3lpPW27P27wkR82wA8mg==", + "@vscode/extension-telemetry": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-0.8.4.tgz", + "integrity": "sha512-UqM9+KZDDK3MyoHTsg6XNM+XO6pweQxzCpqJz33BoBEYAGsbBviRYcVpJglgay2oReuDD2pOI1Nio3BKNDLhWA==", + "requires": { + "@microsoft/1ds-core-js": "^3.2.13", + "@microsoft/1ds-post-js": "^3.2.13", + "@microsoft/applicationinsights-web-basic": "^3.0.2", + "applicationinsights": "^2.7.1" + } + }, + "@vscode/test-electron": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.8.tgz", + "integrity": "sha512-b4aZZsBKtMGdDljAsOPObnAi7+VWIaYl3ylCz1jTs+oV6BZ4TNHcVNC3xUn0azPeszBmwSBDQYfFESIaUQnrOg==", "dev": true, "requires": { - "d": "1", - "es5-ext": "^0.10.45", - "es6-weak-map": "^2.0.2", - "event-emitter": "^0.3.5", - "is-promise": "^2.1", - "lru-queue": "0.1", - "next-tick": "1", - "timers-ext": "^0.1.5" + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "jszip": "^3.10.1", + "semver": "^7.5.2" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "@vscode/vsce": { + "version": "2.27.0", + "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.27.0.tgz", + "integrity": "sha512-FFUMBVSyyjjJpWszwqk7d4U3YllY8FdWslbUDMRki1x4ZjA3Z0hmRMfypWrjP9sptbSR9nyPFU4uqjhy2qRB/w==", "dev": true, "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "@azure/identity": "^4.1.0", + "@vscode/vsce-sign": "^2.0.0", + "azure-devops-node-api": "^12.5.0", + "chalk": "^2.4.2", + "cheerio": "^1.0.0-rc.9", + "cockatiel": "^3.1.2", + "commander": "^6.2.1", + "form-data": "^4.0.0", + "glob": "^7.0.6", + "hosted-git-info": "^4.0.2", + "jsonc-parser": "^3.2.0", + "keytar": "^7.7.0", + "leven": "^3.1.0", + "markdown-it": "^12.3.2", + "mime": "^1.3.4", + "minimatch": "^3.0.3", + "parse-semver": "^1.1.1", + "read": "^1.0.7", + "semver": "^7.5.2", + "tmp": "^0.2.1", + "typed-rest-client": "^1.8.4", + "url-join": "^4.0.1", + "xml2js": "^0.5.0", + "yauzl": "^2.3.1", + "yazl": "^2.2.2" }, "dependencies": { - "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==", + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", "dev": true }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "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" + "lru-cache": "^6.0.0" } }, - "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==", + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "brace-expansion": "^1.1.7" } } } }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", - "dev": true - }, - "merge-source-map": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.0.4.tgz", - "integrity": "sha1-pd5GU42uhNQRTMXqArR3KmNGcB8=", + "@vscode/vsce-sign": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.4.tgz", + "integrity": "sha512-0uL32egStKYfy60IqnynAChMTbL0oqpqk0Ew0YHiIb+fayuGZWADuIPHWUcY1GCnAA+VgchOPDMxnc2R3XGWEA==", + "dev": true, "requires": { - "source-map": "^0.5.6" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" - } + "@vscode/vsce-sign-alpine-arm64": "2.0.2", + "@vscode/vsce-sign-alpine-x64": "2.0.2", + "@vscode/vsce-sign-darwin-arm64": "2.0.2", + "@vscode/vsce-sign-darwin-x64": "2.0.2", + "@vscode/vsce-sign-linux-arm": "2.0.2", + "@vscode/vsce-sign-linux-arm64": "2.0.2", + "@vscode/vsce-sign-linux-x64": "2.0.2", + "@vscode/vsce-sign-win32-arm64": "2.0.2", + "@vscode/vsce-sign-win32-x64": "2.0.2" } }, - "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==", - "dev": true + "@vscode/vsce-sign-alpine-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz", + "integrity": "sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==", + "dev": true, + "optional": true }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true + "@vscode/vsce-sign-alpine-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz", + "integrity": "sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw==", + "dev": true, + "optional": true }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "@vscode/vsce-sign-darwin-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz", + "integrity": "sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==", "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } + "optional": true }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "@vscode/vsce-sign-darwin-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz", + "integrity": "sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-arm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz", + "integrity": "sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz", + "integrity": "sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-linux-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz", + "integrity": "sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-win32-arm64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz", + "integrity": "sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ==", + "dev": true, + "optional": true + }, + "@vscode/vsce-sign-win32-x64": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz", + "integrity": "sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg==", + "dev": true, + "optional": true + }, + "@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==" + "@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", + "@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, "requires": { - "mime-db": "1.40.0" + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", + "@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, "requires": { - "dom-walk": "^0.1.0" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "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==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true + "@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "@xtuc/long": "4.2.2" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true }, - "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.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 - } + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.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 - } + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, - "minipass-pipeline": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz", - "integrity": "sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA==", + "@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, "requires": { - "minipass": "^3.0.0" - }, - "dependencies": { - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.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 - } + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, "requires": { - "minipass": "^2.9.0" + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" } }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "@webpack-cli/configtest": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.1.1.tgz", + "integrity": "sha512-1FBc1f9G4P/AxMqIgfZgeOTuRnwZMten8E7zap5zgpPInnCrP8D4Q81+4CWIch8i/Nf7nXjP0v6CjjbHOrXhKg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.4.1.tgz", + "integrity": "sha512-PKVGmazEq3oAo46Q63tpMr4HipI3OPfP7LiNOEJg963RMgT0rqheag28NCML0o3GIzA3DmxP1ZIAv9oTX1CUIA==", "dev": true, "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } + "envinfo": "^7.7.3" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "@webpack-cli/serve": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.6.1.tgz", + "integrity": "sha512-gNGTiTrjEVQ0OcVnzsRSqTxaBSr+dmTfm+qJsCDluky8uhdLWep7Gcr62QsAKHTMxjCS/8nEITsmFAhfIx+QSw==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": 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==", + "dev": true + }, + "acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==" + }, + "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==", + "requires": {} + }, + "acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": 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": {} + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "debug": "4" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "requires": { - "is-plain-object": "^2.0.4" + "ms": "2.1.2" } } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "aggregate-error": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz", + "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==", "dev": true, "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, "requires": { - "minimist": "^1.2.5" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } - }, - "mocha": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", - "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", - "dev": true, - "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "2.2.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.4", - "ms": "2.1.1", - "node-environment-flags": "1.0.5", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "mkdirp": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", - "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" } }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true } } }, - "mocha-junit-reporter": { - "version": "1.23.0", - "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-1.23.0.tgz", - "integrity": "sha512-pmpnEO4iDTmLfrT2RKqPsc5relG4crnDSGmXPuGogdda27A7kLujDNJV4EbTbXlVBCZXggN9rQYPEWMkOv4AAA==", + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "requires": {} + }, + "ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "requires": { - "debug": "^2.2.0", - "md5": "^2.1.0", - "mkdirp": "~0.5.1", - "strip-ansi": "^4.0.0", - "xml": "^1.0.0" + "ansi-wrap": "^0.1.0" + } + }, + "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" + } + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", "dev": true - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } } } }, - "mocha-multi-reporters": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.1.7.tgz", - "integrity": "sha1-zH8/TTL0eFIJQdhSq7ZNmYhYfYI=", + "append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "requires": { + "default-require-extensions": "^3.0.0" + } + }, + "applicationinsights": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-2.7.3.tgz", + "integrity": "sha512-JY8+kTEkjbA+kAVNWDtpfW2lqsrDALfDXuxOs74KLPu2y13fy/9WB52V4LfYVTVcW1/jYOXjTxNS2gPZIDh1iw==", + "requires": { + "@azure/core-auth": "^1.5.0", + "@azure/core-rest-pipeline": "1.10.1", + "@azure/core-util": "1.2.0", + "@azure/opentelemetry-instrumentation-azure-sdk": "^1.0.0-beta.5", + "@microsoft/applicationinsights-web-snippet": "^1.0.1", + "@opentelemetry/api": "^1.4.1", + "@opentelemetry/core": "^1.15.2", + "@opentelemetry/sdk-trace-base": "^1.15.2", + "@opentelemetry/semantic-conventions": "^1.15.2", + "cls-hooked": "^4.2.2", + "continuation-local-storage": "^3.2.1", + "diagnostic-channel": "1.1.1", + "diagnostic-channel-publishers": "1.0.7" + } + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==" + }, + "archive-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", + "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", "dev": true, "requires": { - "debug": "^3.1.0", - "lodash": "^4.16.4" + "file-type": "^4.2.0" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } + "file-type": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", + "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "dev": true } } }, - "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", + "dev": true }, - "monaco-editor": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.18.1.tgz", - "integrity": "sha512-fmL+RFZ2Hrezy+X/5ZczQW51LUmvzfcqOurnkCIRFTyjdVjzR7JvENzI6+VKBJzJdPh6EYL4RoWl92b2Hrk9fw==", + "arg": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz", + "integrity": "sha512-ZWc51jO3qegGkVh8Hwpv636EkbesNV5ZNQPCtRa+0qytRYPEs9IYT9qITY9buezqUH5uqyzlWLcufrzU2rffdg==", "dev": true }, - "monaco-editor-textmate": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/monaco-editor-textmate/-/monaco-editor-textmate-2.2.1.tgz", - "integrity": "sha512-RYTNNfvyjK15M0JA8WIi9UduU10eX5724UGNKnaA8MSetehjThGENctUTuKaxPk/k3pq59QzaQ/C06A44iJd3Q==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true }, - "monaco-editor-webpack-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.7.0.tgz", - "integrity": "sha512-oItymcnlL14Sjd7EF7q+CMhucfwR/2BxsqrXIBrWL6LQplFfAfV+grLEQRmVHeGSBZ/Gk9ptzfueXnWcoEcFuA==", + "array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "requires": { - "@types/webpack": "^4.4.19" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" } }, - "monaco-textmate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/monaco-textmate/-/monaco-textmate-3.0.1.tgz", - "integrity": "sha512-ZxxY3OsqUczYP1sGqo97tu+CJmMBwuSW+dL0WEBdDhOZ5G1zntw72hvBc68ZQAirosWvbDKgN1dL5k173QtFww==", + "array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true + }, + "array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "requires": { - "fast-plist": "^0.1.2" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" } }, - "moo": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz", - "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==", + "array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true + }, + "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 }, - "mount-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mount-point/-/mount-point-3.0.0.tgz", - "integrity": "sha1-Zly57evoDREOZY21bDHQrvUaj5c=", + "array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "requires": { - "@sindresorhus/df": "^1.0.1", - "pify": "^2.3.0", - "pinkie-promise": "^2.0.1" - }, - "dependencies": { - "@sindresorhus/df": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/df/-/df-1.0.1.tgz", - "integrity": "sha1-xptm9S9vzdKHyAffIQMF2694UA0=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" } }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "object-assign": "^4.1.1", + "util": "0.10.3" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", "dev": true, "requires": { - "glob": "^7.1.3" + "inherits": "2.0.1" } } } }, - "move-file": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/move-file/-/move-file-1.2.0.tgz", - "integrity": "sha512-USHrRmxzGowUWAGBbJPdFjHzEqtxDU03pLHY0Rfqgtnq+q8FOIs8wvkkf+Udmg77SJKs47y9sI0jJvQeYsmiCA==", + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types-flow": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "dev": true + }, + "async": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", + "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", + "dev": true + }, + "async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, "requires": { - "cp-file": "^6.1.0", - "make-dir": "^3.0.0", - "path-exists": "^3.0.0" + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" + } + }, + "async-hook-jl": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", + "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", + "requires": { + "stack-chain": "^1.3.7" + } + }, + "async-listener": { + "version": "0.6.10", + "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", + "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", + "requires": { + "semver": "^5.3.0", + "shimmer": "^1.1.0" }, "dependencies": { - "make-dir": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", - "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", + "async-settle": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" + "async-done": "^2.0.0" } }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true - }, - "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - }, - "dependencies": { - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "dev": true, - "requires": { - "glob": "^6.0.1" - } - } + "possible-typed-array-names": "^1.0.0" } }, - "named-js-regexp": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/named-js-regexp/-/named-js-regexp-1.3.5.tgz", - "integrity": "sha512-XO0DPujDP9IWpkt690iWLreKztb/VB811DGl5N3z7BfhkMJuiVZXOi6YN/fEB9qkvtMVTgSZDW8pzdVt8vj/FA==" - }, - "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "axe-core": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.1.tgz", + "integrity": "sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==", "dev": true }, - "nanoid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.0.3.tgz", - "integrity": "sha512-NbaoqdhIYmY6FXDRB4eYtDVC9Z9eCbn8TyaiC16LNKtpPv/aqa0tOPD8y6gNE4yUNnaZ7LLhYtXOev/6+cBtfw==", + "axobject-query": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", + "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", "dev": true }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "azure-devops-node-api": { + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz", + "integrity": "sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "tunnel": "0.0.6", + "typed-rest-client": "^1.8.4" } }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", "dev": true }, - "nearley": { - "version": "2.16.0", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.16.0.tgz", - "integrity": "sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==", + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "commander": "^2.19.0", - "moo": "^0.4.3", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6", - "semver": "^5.4.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "core-js": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", + "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } } }, - "needle": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.4.0.tgz", - "integrity": "sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg==", + "bach": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", "dev": true, "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, "requires": { - "ms": "^2.1.1" + "once": "^1.4.0" } - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true } } }, - "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true + "bare-events": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.3.1.tgz", + "integrity": "sha512-sJnSOTVESURZ61XgEleqmP255T6zTYwHPwE4r6SssIh0U9/uDvfpdoJYpVUerJJZH2fueO+CdT8ZT+OC/7aZDA==", + "dev": true, + "optional": true }, - "nested-error-stacks": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz", - "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==", + "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 }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", "dev": true }, - "nise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/nise/-/nise-3.0.0.tgz", - "integrity": "sha512-EObFx5tioBMePHpU/gGczaY2YDqL255iwjmZwswu2CiwEW8xIGrr3E2xij+efIppS1nLQo9NyXSIUySGHUOhHQ==", + "bent": { + "version": "7.3.12", + "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz", + "integrity": "sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/formatio": "^4.0.1", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "lolex": "^5.0.1", - "path-to-regexp": "^1.7.0" + "bytesish": "^0.4.1", + "caseless": "~0.12.0", + "is-stream": "^2.0.0" + }, + "dependencies": { + "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 + } } }, - "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, "requires": { - "lower-case": "^1.1.1" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, - "nocache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", - "integrity": "sha512-0L9FvHG3nfnnmaEQPjT9xhfN4ISk0A8/2j4M37Np4mcDesJjHgEUfgPhdCyZuFI954tjokaIj/A3NdpFNdEh4Q==", + "bn.js": { + "version": "4.12.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.3.tgz", + "integrity": "sha512-fGTi3gxV/23FTYdAoUtLYp6qySe2KE3teyZitipKNRuVYcBkoP/bB3guXN/XVKUe9mxCHXnc9C4ocyz8OmgN0g==", "dev": true }, - "nock": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/nock/-/nock-10.0.6.tgz", - "integrity": "sha512-b47OWj1qf/LqSQYnmokNWM8D88KvUl2y7jT0567NB3ZBAZFz2bWp2PC81Xn7u8F2/vJxzkzNZybnemeFa7AZ2w==", - "dev": true, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "requires": { - "chai": "^4.1.2", - "debug": "^4.1.0", - "deep-equal": "^1.0.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.5", - "mkdirp": "^0.5.0", - "propagate": "^1.0.0", - "qs": "^6.5.1", - "semver": "^5.5.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node-environment-flags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" + "fill-range": "^7.1.1" } }, - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "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": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" + "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-gyp-build": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.2.1.tgz", - "integrity": "sha512-XyCKXsqZfLqHep1hhsMncoXuUNt/cXCjg1+8CLbu69V1TKuPiOeSGbL9n+k/ByKH8UT0p4rdIX8XkTRZV0i7Sw==" - }, - "node-has-native-dependencies": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/node-has-native-dependencies/-/node-has-native-dependencies-1.0.2.tgz", - "integrity": "sha1-MVLsl1O2ZB5NMi0YXdSTBkmto9o=", + "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": { - "fs-walk": "0.0.1" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, - "node-html-parser": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-1.1.16.tgz", - "integrity": "sha512-cfqTZIYDdp5cGh3NvCD5dcEDP7hfyni7WgyFacmDynLlIZaF3GVlRk8yMARhWp/PobWt1KaCV8VKdP5LKWiVbg==", + "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": { - "he": "1.1.1" - }, - "dependencies": { - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true - } + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "browserify-rsa": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.1.tgz", + "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==", "dev": true, "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" + "bn.js": "^5.2.1", + "randombytes": "^2.1.0", + "safe-buffer": "^5.2.1" }, "dependencies": { - "buffer": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", - "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "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==", + "bn.js": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", "dev": true }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "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==", "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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": { - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } } } }, - "node-modules-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", - "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", - "dev": true - }, - "node-pre-gyp": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz", - "integrity": "sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q==", + "browserify-sign": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.5.tgz", + "integrity": "sha512-C2AUdAJg6rlM2W5QMp2Q4KGQMVBwR1lIimTsUnutJ8bMpW5B52pGpR2gEnNBNwijumDo5FojQ0L9JrXA8m4YEw==", "dev": true, "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" + "bn.js": "^5.2.2", + "browserify-rsa": "^4.1.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.6.1", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.9", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" }, - "dependencies": { - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } + "dependencies": { + "bn.js": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.3.tgz", + "integrity": "sha512-EAcmnPkxpntVL+DS7bO1zhcZNvCkxqtkd0ZY53h06GNQ3DEkkGZ/gKgmDv6DdZQGj9BgfSPKtJJ7Dp1GPP8f7w==", + "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "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==", + "dev": true } } }, - "node-preload": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", - "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", + "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": { - "process-on-spawn": "^1.0.0" + "pako": "~1.0.5" } }, - "node-releases": { - "version": "1.1.25", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.25.tgz", - "integrity": "sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ==", + "browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "requires": { - "semver": "^5.3.0" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" } }, - "node-stream-zip": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.8.2.tgz", - "integrity": "sha512-zwP2F/R28Oqtl0gOLItk5QjJ6jEU8XO4kaUMgeqvCyXPgdCZlm8T/5qLMiNy+moJCBCiMQAaX7aVMRhT0t2vkQ==" - }, - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, "requires": { - "abbrev": "1" + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, - "normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", - "dev": true, - "requires": { - "prepend-http": "^2.0.0", - "query-string": "^5.0.1", - "sort-keys": "^2.0.0" - }, - "dependencies": { - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - } - } + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "dev": true }, - "normalize.css": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize.css/-/normalize.css-8.0.1.tgz", - "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", "dev": true }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", - "dev": true, - "requires": { - "once": "^1.3.2" - } + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", "dev": true }, - "npm-conf": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/npm-conf/-/npm-conf-1.1.3.tgz", - "integrity": "sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw==", + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytesish": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz", + "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==", + "dev": true + }, + "cacheable-request": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", + "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", "dev": true, "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" + "clone-response": "1.0.2", + "get-stream": "3.0.0", + "http-cache-semantics": "3.8.1", + "keyv": "3.0.0", + "lowercase-keys": "1.0.0", + "normalize-url": "2.0.1", + "responselike": "1.0.2" }, "dependencies": { - "pify": { + "get-stream": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", + "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", "dev": true } } }, - "npm-packlist": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.6.tgz", - "integrity": "sha512-u65uQdb+qwtGvEJh/DgQgW1Xg7sqeNbmxYyrvlNznaVTjV3E5P6F/EFjM+BVHXl7JJlsdG8A64M0XI8FI/IOlg==", + "caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", "dev": true, "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "requires": { - "path-key": "^2.0.0" + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" } }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", "dev": true, "requires": { - "boolbase": "~1.0.0" + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" } }, - "num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, - "numeral": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", - "integrity": "sha1-StCAk21EPCVhrtnyGX7//iX05QY=", + "caniuse-lite": { + "version": "1.0.30001768", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001768.tgz", + "integrity": "sha512-qY3aDRZC5nWPgHUgIB84WL+nySuo19wk0VJpp/XI9T34lrvkyhRvNVOFJOp2kxClQhiFBu+TaUSudf6oa3vkSA==", "dev": true }, - "nwsapi": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz", - "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw==", + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", "dev": true }, - "nyc": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.0.0.tgz", - "integrity": "sha512-qcLBlNCKMDVuKb7d1fpxjPR8sHeMVX0CHarXAVzrVWoFrigCkYR8xcrjfXSPi5HXM7EU78L6ywO7w1c5rZNCNg==", + "chai": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==", "dev": true, "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.0", - "js-yaml": "^3.13.1", - "make-dir": "^3.0.0", - "node-preload": "^0.2.0", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "uuid": "^3.3.3", - "yargs": "^15.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", - "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.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 - }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "loupe": "^2.3.1", + "pathval": "^1.1.1", + "type-detect": "^4.0.5" + } + }, + "chai-arrays": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chai-arrays/-/chai-arrays-2.2.0.tgz", + "integrity": "sha512-4awrdGI2EH8owJ9I58PXwG4N56/FiM8bsn4CVSNEgr4GKAM6Kq5JPVApUbhUBjDakbZNuRvV7quRSC38PWq/tg==", + "dev": true + }, + "chai-as-promised": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz", + "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==", + "dev": true, + "requires": { + "check-error": "^1.0.2" + } + }, + "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" + } + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true + }, + "cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "requires": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { - "safe-buffer": "~5.1.1" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "find-cache-dir": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", - "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.0", - "pkg-dir": "^4.1.0" + "domelementtype": "^2.2.0" } }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "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==", + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + } + } + }, + "cheerio-select": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", + "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "css-what": "^5.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0", + "domutils": "^2.7.0" + }, + "dependencies": { + "css-select": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "dev": true, "requires": { - "find-up": "^4.0.0" + "boolbase": "^1.0.0", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", + "nth-check": "^2.0.0" } }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "css-what": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", + "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", "dev": true }, - "rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, "requires": { - "glob": "^7.1.3" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "dev": true }, - "string-width": { + "domhandler": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "domelementtype": "^2.2.0" } }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" } }, - "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true - }, - "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "yargs": { - "version": "15.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz", - "integrity": "sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^16.1.0" - } - }, - "yargs-parser": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", - "integrity": "sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg==", + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": 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==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "is-glob": "^4.0.1" } } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true, + "optional": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.7.tgz", + "integrity": "sha512-Mz9QMT5fJe7bKI7MH31UilT5cEK5EHHRCccw/YRFsRY47AuNgaV6HY3rscp0/I4Q+tTW/5zoqpSeRRI54TkDWA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.2" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, - "object-component": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", - "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=", + "cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "cls-hooked": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", + "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", + "requires": { + "async-hook-jl": "^1.7.6", + "emitter-listener": "^1.0.1", + "semver": "^5.4.1" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" } } }, - "object-inspect": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.4.1.tgz", - "integrity": "sha512-wqdhLpfCUbEsoEwl3FXwGyv8ief1k/1aUdIPCqVnupM6e8l63BEJdiF/0swtn04/8p05tG/T0FrpTlfwvljOdw==" + "cockatiel": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.1.3.tgz", + "integrity": "sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ==", + "dev": true }, - "object-is": { + "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": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "colorette": { + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", + "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "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==", + "dev": true + }, + "commondir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz", - "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "compare-module-exports": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/compare-module-exports/-/compare-module-exports-2.1.0.tgz", + "integrity": "sha512-3Lc0sTIuX1jmY2K2RrXRJOND6KsRTX2D4v3+eu1PDptsuJZVK4LZc852eZa9I+avj0NrUKlTNgqvccNOH6mbGg==", "dev": true }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } + "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 }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" - } + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" + "safe-buffer": "5.2.1" }, "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } + "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==", + "dev": true } } }, - "object.entries": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", - "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "object.fromentries": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", - "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", - "dev": true, + "continuation-local-storage": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", + "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", - "function-bind": "^1.1.1", - "has": "^1.0.1" + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" } }, - "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" - } + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "copy-props": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", "dev": true, "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "each-props": "^3.0.0", + "is-plain-object": "^5.0.0" }, "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true } } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", "dev": true, "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" }, "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "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": { - "for-in": "^1.0.1" + "is-glob": "^4.0.3" } } } }, - "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "one-time": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", - "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" + "core-js-pure": { + "version": "3.42.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.42.0.tgz", + "integrity": "sha512-007bM04u91fF4kMgwom2I5cQxAFIy8jVulgr9eozILl/SZE53QOqnW/+vviC+wQWLv+AunBG+8Q0TLoeSsSxRQ==", + "dev": true }, - "onecolor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/onecolor/-/onecolor-3.1.0.tgz", - "integrity": "sha512-YZSypViXzu3ul5LMu/m6XjJ9ol8qAy9S2VjHl5E6UlhUH1KGKWabyEJifn0Jjpw23bYDzC2ucKMPGiH5kfwSGQ==", + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, - "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "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": { - "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - } + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" } }, - "onigasm": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/onigasm/-/onigasm-2.2.2.tgz", - "integrity": "sha512-TQTMk+RmPYx4sGzNAgV0q7At7PABDNHVqZBlC4aRXHg8hpCdemLOF0qq0gUCjwUbc7mhJMBOo3XpTRYwyr45Gw==", + "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": { - "lru-cache": "^4.1.1" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "only": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", - "integrity": "sha1-Kv3oTQPlC5qO3EROMGEKcCle37Q=" - }, - "opener": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", - "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", - "dev": true - }, - "opn": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/opn/-/opn-5.2.0.tgz", - "integrity": "sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==", + "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": { - "is-wsl": "^1.1.0" + "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" } }, - "optionator": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", - "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" - } + "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 }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, "requires": { - "readable-stream": "^2.0.1" + "cross-spawn": "^7.0.1" }, "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "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" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.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==", + "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 + }, + "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": { - "safe-buffer": "~5.1.0" + "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 } } }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, "requires": { - "url-parse": "^1.4.3" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "os": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/os/-/os-0.1.1.tgz", - "integrity": "sha1-IIhF6J4ZOtTZcUdLk5R3NqVtE/M=", - "dev": true - }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", "dev": true }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + } + }, + "damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, "requires": { - "lcid": "^1.0.0" + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" } }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" } }, - "p-any": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-any/-/p-any-2.1.0.tgz", - "integrity": "sha512-JAERcaMBLYKMq+voYw36+x5Dgh47+/o7yuv2oQYuSSUml4YeqJEFznBrY2UeEkoSHqBua6hz518n/PsowTYLLg==", + "data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, "requires": { - "p-cancelable": "^2.0.0", - "p-some": "^4.0.0", - "type-fest": "^0.3.0" - }, - "dependencies": { - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==" - } + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" } }, - "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", - "dev": true - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-event": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", - "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { - "p-timeout": "^2.0.1" + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } } }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "decompress": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "decompress-tar": "^4.0.0", + "decompress-tarbz2": "^4.0.0", + "decompress-targz": "^4.0.0", + "decompress-unzip": "^4.0.1", + "graceful-fs": "^4.1.10", + "make-dir": "^1.0.0", + "pify": "^2.3.0", + "strip-dirs": "^2.0.0" + }, + "dependencies": { + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "mimic-response": "^1.0.0" } }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-some": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-some/-/p-some-4.1.0.tgz", - "integrity": "sha512-MF/HIbq6GeBqTrTIl5OJubzkGU+qfFhAFi0gnTAK6rgEIJIknEiABHOTtQu4e6JiXjIwuMPMUFQzyHh5QjCl1g==", + "decompress-tar": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "dev": true, "requires": { - "aggregate-error": "^3.0.0", - "p-cancelable": "^2.0.0" + "file-type": "^5.2.0", + "is-stream": "^1.1.0", + "tar-stream": "^1.5.2" }, "dependencies": { - "p-cancelable": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz", - "integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==" + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true } } }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "decompress-tarbz2": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "requires": { - "p-finally": "^1.0.0" + "decompress-tar": "^4.1.0", + "file-type": "^6.1.0", + "is-stream": "^1.1.0", + "seek-bzip": "^1.0.5", + "unbzip2-stream": "^1.0.9" + }, + "dependencies": { + "file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "dev": true + } } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "package-hash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", - "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "decompress-targz": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" + "decompress-tar": "^4.1.1", + "file-type": "^5.2.0", + "is-stream": "^1.1.0" + }, + "dependencies": { + "file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "dev": true + } } }, - "pako": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", - "integrity": "sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU=" - }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "decompress-unzip": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", + "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "file-type": "^3.8.0", + "get-stream": "^2.2.0", + "pify": "^2.3.0", + "yauzl": "^2.4.2" }, "dependencies": { - "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==", + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "get-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", + "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "dev": true, "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" + "object-assign": "^4.0.1", + "pinkie-promise": "^2.0.0" } }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true } } }, - "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "no-case": "^2.2.0" + "type-detect": "^4.0.0" } }, - "parse-asn1": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", - "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "optional": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "default-require-extensions": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz", + "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==", "dev": true, "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "strip-bom": "^4.0.0" + }, + "dependencies": { + "strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true + } } }, - "parse-cache-control": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", - "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=", + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true }, - "parse-entities": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", - "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "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": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "del": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", + "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" } }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", - "dev": true - }, - "parse-passwd": { + "detect-file": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true }, - "parse-semver": { + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "dev": true, + "optional": true + }, + "diagnostic-channel": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", - "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", + "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.1.tgz", + "integrity": "sha512-r2HV5qFkUICyoaKlBEpLKHjxMXATUf/l+h8UZPGBHGLy4DDiY2sOLcIctax4eRnTw5wH2jTMExLntGPJ8eOJxw==", + "requires": { + "semver": "^7.5.3" + } + }, + "diagnostic-channel-publishers": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-1.0.7.tgz", + "integrity": "sha512-SEECbY5AiVt6DfLkhkaHNeshg1CogdLLANA8xlG/TKvS+XUgvIKl7VspJGYiEdL5OUyzMVnr7o0AwB7f+/Mjtg==", + "requires": {} + }, + "diff": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.4.tgz", + "integrity": "sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==", + "dev": true + }, + "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": { - "semver": "^5.1.0" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, - "parse5": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", - "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", - "dev": true - }, - "parseqs": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", - "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "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": { - "better-assert": "~1.0.0" + "path-type": "^4.0.0" } }, - "parseuri": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", - "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "requires": { - "better-assert": "~1.0.0" + "esutils": "^2.0.2" } }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "passthrough-counter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/passthrough-counter/-/passthrough-counter-1.0.0.tgz", - "integrity": "sha1-GWfZ5m2lcrXAI8eH2xEqOHqxZvo=" - }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "download": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", + "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", + "dev": true, + "requires": { + "archive-type": "^4.0.0", + "content-disposition": "^0.5.2", + "decompress": "^4.2.1", + "ext-name": "^5.0.0", + "file-type": "^11.1.0", + "filenamify": "^3.0.0", + "get-stream": "^4.1.0", + "got": "^8.3.1", + "make-dir": "^2.1.0", + "p-event": "^2.1.0", + "pify": "^4.0.1" + }, + "dependencies": { + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } }, - "path-is-absolute": { + "dunder-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "dev": true }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", "dev": true }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" - }, - "path-posix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", - "integrity": "sha1-BrJhE/Vr6rBCVFojv6iAA8ysJg8=" - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "path-root-regex": "^0.1.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "each-props": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, "requires": { - "isarray": "0.0.1" + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0" }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true } } }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", "dev": true, "requires": { - "pify": "^3.0.0" - }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "safe-buffer": "^5.0.1" } }, - "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, - "pause-stream": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", - "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", + "elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dev": true, "requires": { - "through": "~2.3" + "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" + } + }, + "emitter-listener": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", + "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", + "requires": { + "shimmer": "^1.2.0" } }, - "pbkdf2": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", - "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "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" + "once": "^1.4.0" } }, - "pdfkit": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.11.0.tgz", - "integrity": "sha512-1s9gaumXkYxcVF1iRtSmLiISF2r4nHtsTgpwXiK8Swe+xwk/1pm8FJjYqN7L3x13NsWnGyUFntWcO8vfqq+wwA==", + "enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", + "dev": true, "requires": { - "crypto-js": "^3.1.9-1", - "fontkit": "^1.8.0", - "linebreak": "^1.0.2", - "png-js": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" } }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", "dev": true }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true }, - "pidusage": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pidusage/-/pidusage-1.2.0.tgz", - "integrity": "sha512-OGo+iSOk44HRJ8q15AyG570UYxcm5u+R99DI8Khu8P3tKGkVu5EZX4ywHglWSTMNNXQ274oeGpYrvFEhDIFGPg==" + "es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "requires": { - "pinkie": "^2.0.0" + "es-errors": "^1.3.0" } }, - "pirates": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", - "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "requires": { - "node-modules-regexp": "^1.0.0" + "hasown": "^2.0.0" } }, - "pixrem": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-4.0.1.tgz", - "integrity": "sha1-LaSh3m7EQjxfw3lOkwuB1EkOxoY=", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "browserslist": "^2.0.0", - "postcss": "^6.0.0", - "reduce-css-calc": "^1.2.7" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", + "dev": true + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "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.1", + "@humanwhocodes/config-array": "^0.13.0", + "@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": { - "browserslist": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", - "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "dev": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "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 + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "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" + } + }, + "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 + }, + "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" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "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": { - "caniuse-lite": "^1.0.30000792", - "electron-to-chromium": "^1.3.30" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "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": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "is-glob": "^4.0.3" } - } - } - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "requires": { - "find-up": "^3.0.0" - } - }, - "playwright-chromium": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/playwright-chromium/-/playwright-chromium-0.13.0.tgz", - "integrity": "sha512-Ex9y563Vn8cnoBgMOcYLGdAVVC1xrBk/aWZ66AmOD77lk6v0x0cthLcbPX9h+tfkcWCFQQz1OWQR6V3+c3KUFA==", - "dev": true, - "requires": { - "playwright-core": "=0.13.0" - } - }, - "playwright-core": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-0.13.0.tgz", - "integrity": "sha512-bH9cOQhmbdXJnHX22PRZ79IdXv5wmLc9tHob2PmkT5qFilopT3INAIJcKkaLN1E/GqIDp0xGdB88Vr5f86g8pQ==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^3.0.0", - "jpeg-js": "^0.3.6", - "mime": "^2.4.4", - "pngjs": "^3.4.0", - "progress": "^2.0.3", - "proxy-from-env": "^1.1.0", - "rimraf": "^3.0.2", - "ws": "^6.1.0" - }, - "dependencies": { - "debug": { + }, + "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" + } + }, + "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 + }, + "js-yaml": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { - "ms": "^2.1.1" + "argparse": "^2.0.1" } }, - "extract-zip": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.0.tgz", - "integrity": "sha512-i42GQ498yibjdvIhivUsRslx608whtGoFIhF26Z7O4MYncBxp8CwalOs1lnHy21A9sIohWO2+uiE4SRtC9JXDg==", + "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": { - "@types/yauzl": "^2.9.1", - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" + "p-locate": "^5.0.0" } }, - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "requires": { - "pump": "^3.0.0" + "brace-expansion": "^1.1.7" } }, - "https-proxy-agent": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz", - "integrity": "sha512-+ML2Rbh6DAuee7d07tYGEKOEi2voWPUGan+ExdPbPW6Z3svq+JCqr0v8WmKPOkz1vOVykPCBSuobe7G8GJUtVg==", + "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": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "yocto-queue": "^0.1.0" } }, - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true + "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" + } }, - "progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "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 }, - "pump": { + "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/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "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": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "has-flag": "^4.0.0" } + }, + "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 } } }, - "please-upgrade-node": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz", - "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", + "eslint-config-prettier": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", + "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "dev": true, + "requires": {} + }, + "eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } } }, - "pleeease-filters": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pleeease-filters/-/pleeease-filters-4.0.0.tgz", - "integrity": "sha1-ZjKy+wVkjSdY2GU4T7zteeHMrsc=", + "eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "requires": { - "onecolor": "^3.0.4", - "postcss": "^6.0.1" + "debug": "^3.2.7" }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "ms": "^2.1.1" } } } }, - "plotly.js-dist": { - "version": "1.51.1", - "resolved": "https://registry.npmjs.org/plotly.js-dist/-/plotly.js-dist-1.51.1.tgz", - "integrity": "sha512-YUIyji1qj42DMjSuKI/yIE9ryXrCfCoF++Db732s9nK4oVFE6T1Gq6+hYE0rkLpezi+3j6W9e5wrLhI2AL6j7A==", - "dev": true + "eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "requires": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } }, - "plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "eslint-plugin-jsx-a11y": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz", + "integrity": "sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==", "dev": true, "requires": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" + "@babel/runtime": "^7.16.3", + "aria-query": "^4.2.2", + "array-includes": "^3.1.4", + "ast-types-flow": "^0.0.7", + "axe-core": "^4.3.5", + "axobject-query": "^2.2.0", + "damerau-levenshtein": "^1.0.7", + "emoji-regex": "^9.2.2", + "has": "^1.0.3", + "jsx-ast-utils": "^3.2.1", + "language-tags": "^1.0.5", + "minimatch": "^3.0.4" }, "dependencies": { - "arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", + "aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", "dev": true, "requires": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" + "@babel/runtime": "^7.10.2", + "@babel/runtime-corejs3": "^7.10.2" } }, - "arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } + } + }, + "eslint-plugin-no-only-tests": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz", + "integrity": "sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==", + "dev": true + }, + "eslint-plugin-react": { + "version": "7.29.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.29.4.tgz", + "integrity": "sha512-CVCXajliVh509PcZYRFyu/BoUEz452+jtQJq2b3Bae4v3xBUWPLCmtmBM+ZinG4MzwmxJgJ2M5rMqhqLVn7MtQ==", + "dev": true, + "requires": { + "array-includes": "^3.1.4", + "array.prototype.flatmap": "^1.2.5", + "doctrine": "^2.1.0", + "estraverse": "^5.3.0", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.5", + "object.fromentries": "^2.0.5", + "object.hasown": "^1.1.0", + "object.values": "^1.1.5", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.3", + "semver": "^6.3.0", + "string.prototype.matchall": "^4.0.6" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, - "extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "requires": { - "kind-of": "^1.1.0" + "brace-expansion": "^1.1.7" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } }, - "kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } }, - "pn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", - "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", - "dev": true + "eslint-plugin-react-hooks": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.4.0.tgz", + "integrity": "sha512-U3RVIfdzJaeKDQKEJbz5p3NW8/L80PCATJAfuojwbaEL+gBjfGdhUcGde+WGUW46Q5sr/NgxevsIiDtNXrvZaQ==", + "dev": true, + "requires": {} }, - "png-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz", - "integrity": "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g==" + "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==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "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 }, - "polygon-offset": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/polygon-offset/-/polygon-offset-0.3.1.tgz", - "integrity": "sha1-aaZWXwsn+na1Jw1cB5sLosjwu6M=", + "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": { - "martinez-polygon-clipping": "^0.1.5" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" } }, - "popper.js": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.0.tgz", - "integrity": "sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw==", - "dev": true - }, - "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, "requires": { - "async": "^2.6.2", - "debug": "^3.1.1", - "mkdirp": "^0.5.1" + "estraverse": "^5.1.0" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true } } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "postcss": { - "version": "7.0.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.27.tgz", - "integrity": "sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ==", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "chalk": "^2.4.2", - "source-map": "^0.6.1", - "supports-color": "^6.1.0" + "estraverse": "^5.2.0" }, "dependencies": { - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true } } }, - "postcss-apply": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/postcss-apply/-/postcss-apply-0.8.0.tgz", - "integrity": "sha1-FOVEu7XLbxweBIhXll15rgZrE0M=", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "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==", + "dev": 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": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { - "babel-runtime": "^6.23.0", - "balanced-match": "^0.4.2", - "postcss": "^6.0.0" + "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" }, "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "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 + }, + "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 + }, + "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 + }, + "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 - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } } } }, - "postcss-attribute-case-insensitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-2.0.0.tgz", - "integrity": "sha1-lNxCLI+QmX8WvTOjZUu77AhJY7Q=", + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true, + "optional": true + }, + "expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "requires": { - "postcss": "^6.0.0", - "postcss-selector-parser": "^2.2.3" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "homedir-polyfill": "^1.0.1" } }, - "postcss-calc": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.2.tgz", - "integrity": "sha512-fiznXjEN5T42Qm7qqMCVJXS3roaj9r4xsSi+meaBVe7CJBl8t/QLOXu02Z2E6oWAMWIvCuF6JrvzFekmVEbOKA==", + "expose-loader": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/expose-loader/-/expose-loader-3.1.0.tgz", + "integrity": "sha512-2RExSo0yJiqP+xiUue13jQa2IHE8kLDzTI7b6kn+vUlBVvlzNSiLDzo4e5Pp5J039usvTUnxZ8sUOhv0Kg15NA==", + "dev": true, + "requires": {} + }, + "ext-list": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", + "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", "dev": true, "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.2", - "postcss-selector-parser": "^2.2.2", - "reduce-css-calc": "^2.0.0" - }, - "dependencies": { - "reduce-css-calc": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.7.tgz", - "integrity": "sha512-fDnlZ+AybAS3C7Q9xDq5y8A2z+lT63zLbynew/lur/IR24OQF5x98tfNwf79mzEdfywZ0a2wpM860FhFfMxZlA==", - "dev": true, - "requires": { - "css-unit-converter": "^1.1.1", - "postcss-value-parser": "^3.3.0" - } - } + "mime-db": "^1.28.0" } }, - "postcss-color-function": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-color-function/-/postcss-color-function-4.1.0.tgz", - "integrity": "sha512-2/fuv6mP5Lt03XbRpVfMdGC8lRP1sykme+H1bR4ARyOmSMB8LPSjcL6EAI1iX6dqUF+jNEvKIVVXhan1w/oFDQ==", + "ext-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", + "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", "dev": true, "requires": { - "css-color-function": "~1.3.3", - "postcss": "^6.0.23", - "postcss-message-helpers": "^2.0.0", - "postcss-value-parser": "^3.3.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "ext-list": "^2.0.0", + "sort-keys-length": "^1.0.0" } }, - "postcss-color-gray": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-4.1.0.tgz", - "integrity": "sha512-L4iLKQLdqChz6ZOgGb6dRxkBNw78JFYcJmBz1orHpZoeLtuhDDGegRtX9gSyfoCIM7rWZ3VNOyiqqvk83BEN+w==", + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "color": "^2.0.1", - "postcss": "^6.0.14", - "postcss-message-helpers": "^2.0.0", - "reduce-function-call": "^1.0.2" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { - "color": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color/-/color-2.0.1.tgz", - "integrity": "sha512-ubUCVVKfT7r2w2D3qtHakj8mbmKms+tThR8gI8zEYCbUBl8/voqFGt3kgBqGwXAopgXybnkuOq+qMYCRrp4cXw==", - "dev": true, - "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "is-plain-object": "^2.0.4" } } } }, - "postcss-color-hex-alpha": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-3.0.0.tgz", - "integrity": "sha1-HlPmyKyyN5Vej9CLfs2xuLgwn5U=", + "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==", + "dev": true + }, + "fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, "requires": { - "color": "^1.0.3", - "postcss": "^6.0.1", - "postcss-message-helpers": "^2.0.0" + "@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": { - "color": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", - "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", - "dev": true, - "requires": { - "color-convert": "^1.8.2", - "color-string": "^1.4.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "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": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "is-glob": "^4.0.1" } } } }, - "postcss-color-hsl": { + "fast-json-stable-stringify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hsl/-/postcss-color-hsl-2.0.0.tgz", - "integrity": "sha1-EnA2ZvoxBDDj8wpFTawThjF9WEQ=", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, "requires": { - "postcss": "^6.0.1", - "postcss-value-parser": "^3.3.0", - "units-css": "^0.4.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "reusify": "^1.0.4" } }, - "postcss-color-hwb": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-hwb/-/postcss-color-hwb-3.0.0.tgz", - "integrity": "sha1-NAKxnvTYSXVAwftQcr6YY8qVVx4=", + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { - "color": "^1.0.3", - "postcss": "^6.0.1", - "postcss-message-helpers": "^2.0.0", - "reduce-function-call": "^1.0.2" - }, - "dependencies": { - "color": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/color/-/color-1.0.3.tgz", - "integrity": "sha1-5I6DLYXxTvaU+0aIEcLVz+cptV0=", - "dev": true, - "requires": { - "color-convert": "^1.8.2", - "color-string": "^1.4.0" - } - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "pend": "~1.2.0" } }, - "postcss-color-rebeccapurple": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-3.1.0.tgz", - "integrity": "sha512-212hJUk9uSsbwO5ECqVjmh/iLsmiVL1xy9ce9TVf+X3cK/ZlUIlaMdoxje/YpsL9cmUH3I7io+/G2LyWx5rg1g==", + "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": { - "postcss": "^6.0.22", - "postcss-values-parser": "^1.5.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "flat-cache": "^3.0.4" } }, - "postcss-color-rgb": { + "file-type": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", + "dev": true + }, + "filename-reserved-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rgb/-/postcss-color-rgb-2.0.0.tgz", - "integrity": "sha1-FFOcinExSUtILg3RzCZf9lFLUmM=", + "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", + "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", + "dev": true + }, + "filenamify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", + "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", "dev": true, "requires": { - "postcss": "^6.0.1", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "filename-reserved-regex": "^2.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" } }, - "postcss-color-rgba-fallback": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz", - "integrity": "sha1-N9XJNToHoJJwkSqCYGu0Kg1wLAQ=", + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { - "postcss": "^6.0.6", - "postcss-value-parser": "^3.3.0", - "rgb-hex": "^2.1.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "to-regex-range": "^5.0.1" } }, - "postcss-cssnext": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-cssnext/-/postcss-cssnext-3.1.0.tgz", - "integrity": "sha512-awPDhI4OKetcHCr560iVCoDuP6e/vn0r6EAqdWPpAavJMvkBSZ6kDpSN4b3mB3Ti57hQMunHHM8Wvx9PeuYXtA==", - "dev": true, - "requires": { - "autoprefixer": "^7.1.1", - "caniuse-api": "^2.0.0", - "chalk": "^2.0.1", - "pixrem": "^4.0.0", - "pleeease-filters": "^4.0.0", - "postcss": "^6.0.5", - "postcss-apply": "^0.8.0", - "postcss-attribute-case-insensitive": "^2.0.0", - "postcss-calc": "^6.0.0", - "postcss-color-function": "^4.0.0", - "postcss-color-gray": "^4.0.0", - "postcss-color-hex-alpha": "^3.0.0", - "postcss-color-hsl": "^2.0.0", - "postcss-color-hwb": "^3.0.0", - "postcss-color-rebeccapurple": "^3.0.0", - "postcss-color-rgb": "^2.0.0", - "postcss-color-rgba-fallback": "^3.0.0", - "postcss-custom-media": "^6.0.0", - "postcss-custom-properties": "^6.1.0", - "postcss-custom-selectors": "^4.0.1", - "postcss-font-family-system-ui": "^3.0.0", - "postcss-font-variant": "^3.0.0", - "postcss-image-set-polyfill": "^0.3.5", - "postcss-initial": "^2.0.0", - "postcss-media-minmax": "^3.0.0", - "postcss-nesting": "^4.0.1", - "postcss-pseudo-class-any-link": "^4.0.0", - "postcss-pseudoelements": "^5.0.0", - "postcss-replace-overflow-wrap": "^2.0.0", - "postcss-selector-matches": "^3.0.1", - "postcss-selector-not": "^3.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "filter-obj": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", + "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", + "dev": true + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" } }, - "postcss-custom-media": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-6.0.0.tgz", - "integrity": "sha1-vlMnhBEOyylQRPtTlaGABushpzc=", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "postcss-custom-properties": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-6.3.1.tgz", - "integrity": "sha512-zoiwn4sCiUFbr4KcgcNZLFkR6gVQom647L+z1p/KBVHZ1OYwT87apnS42atJtx6XlX2yI7N5fjXbFixShQO2QQ==", + "findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "requires": { - "balanced-match": "^1.0.0", - "postcss": "^6.0.18" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" } }, - "postcss-custom-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-4.0.1.tgz", - "integrity": "sha1-eBOC+UxS5yfvXKR3bqKt9JphE4I=", + "fined": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, "requires": { - "postcss": "^6.0.1", - "postcss-selector-matches": "^3.0.0" + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true } } }, - "postcss-font-family-system-ui": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-family-system-ui/-/postcss-font-family-system-ui-3.0.0.tgz", - "integrity": "sha512-58G/hTxMSSKlIRpcPUjlyo6hV2MEzvcVO2m4L/T7Bb2fJTG4DYYfQjQeRvuimKQh1V1sOzCIz99g+H2aFNtlQw==", + "flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "dev": true + }, + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, "requires": { - "postcss": "^6.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "flatted": "^3.1.0", + "rimraf": "^3.0.2" } }, - "postcss-font-variant": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-3.0.0.tgz", - "integrity": "sha1-CMzIj2BQuoLtjvLMdsDGprQfGD4=", + "flatted": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, - "postcss-image-set-polyfill": { + "for-each": { "version": "0.3.5", - "resolved": "https://registry.npmjs.org/postcss-image-set-polyfill/-/postcss-image-set-polyfill-0.3.5.tgz", - "integrity": "sha1-Dxk0E3AM8fgr05Bm7wFtZaShgYE=", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, "requires": { - "postcss": "^6.0.1", - "postcss-media-query-parser": "^0.2.3" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "is-callable": "^1.2.7" } }, - "postcss-import": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-12.0.1.tgz", - "integrity": "sha512-3Gti33dmCjyKBgimqGxL3vcV8w9+bsHwO5UrBawp796+jdardbcFl4RP5w/76BwNL7aGzpKstIfF9I+kdE8pTw==", + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, "requires": { - "postcss": "^7.0.1", - "postcss-value-parser": "^3.2.3", - "read-cache": "^1.0.0", - "resolve": "^1.1.7" + "for-in": "^1.0.1" } }, - "postcss-initial": { + "foreground-child": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-2.0.0.tgz", - "integrity": "sha1-cnFfczbgu3k1HZnuZcSiU6hEG6Q=", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", "dev": true, "requires": { - "lodash.template": "^4.2.4", - "postcss": "^6.0.1" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "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 + }, + "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": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "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 } } }, - "postcss-load-config": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.0.tgz", - "integrity": "sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q==", - "dev": true, - "requires": { - "cosmiconfig": "^5.0.0", - "import-cwd": "^2.0.0" - } - }, - "postcss-loader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", - "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", - "dev": true, + "form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", "requires": { - "loader-utils": "^1.1.0", - "postcss": "^7.0.0", - "postcss-load-config": "^2.0.0", - "schema-utils": "^1.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" } }, - "postcss-media-minmax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-3.0.0.tgz", - "integrity": "sha1-Z1JWA3pD70C8Twdgv9BtTcadSNI=", + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", "dev": true, "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "fromentries": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz", + "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==", "dev": true }, - "postcss-message-helpers": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", - "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "postcss-modules-extract-imports": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", - "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", - "dev": true, + "fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "requires": { - "postcss": "^6.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" } } }, - "postcss-modules-local-by-default": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", - "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" } }, - "postcss-modules-scope": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", - "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "fs-walk": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/fs-walk/-/fs-walk-0.0.1.tgz", + "integrity": "sha1-9/yRw64e6tB8mYvF0N1B8tvr0zU=", "dev": true, "requires": { - "css-selector-tokenizer": "^0.7.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "async": "*" } }, - "postcss-modules-values": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", - "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "requires": { - "icss-replace-symbols": "^1.1.0", - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } - } + "optional": true }, - "postcss-nesting": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-4.2.1.tgz", - "integrity": "sha512-IkyWXICwagCnlaviRexi7qOdwPw3+xVVjgFfGsxmztvRVaNxAlrypOIKqDE5mxY+BVxnId1rnUKBRQoNE2VDaA==", + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, "requires": { - "postcss": "^6.0.11" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" } }, - "postcss-pseudo-class-any-link": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-4.0.0.tgz", - "integrity": "sha1-kVKgYT00UHIFE+iJKFS65C0O5o4=", - "dev": true, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "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-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true + }, + "get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "requires": { - "postcss": "^6.0.1", - "postcss-selector-parser": "^2.2.3" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" } }, - "postcss-pseudoelements": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz", - "integrity": "sha1-7vGU6NUkZFylIKlJ6V5RjoEkAss=", + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "postcss": "^6.0.0" + "pump": "^3.0.0" }, "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } }, - "postcss-replace-overflow-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-2.0.0.tgz", - "integrity": "sha1-eU22+qVPjbEAhUOSqTr0V2i04ls=", + "get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, "requires": { - "postcss": "^6.0.1" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - } + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" } }, - "postcss-selector-matches": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-3.0.1.tgz", - "integrity": "sha1-5WNAEeE5UIgYYbvdWMLQER/8lqs=", + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", "dev": true, + "optional": true + }, + "glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { - "balanced-match": "^0.4.2", - "postcss": "^6.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "brace-expansion": "^1.1.7" } } } }, - "postcss-selector-not": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-3.0.1.tgz", - "integrity": "sha1-Lk2y8JZTNsAefOx9tsYN/3ZzNdk=", + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "requires": { - "balanced-match": "^0.4.2", - "postcss": "^6.0.1" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - }, - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" + "is-extglob": "^2.1.0" } } } }, - "postcss-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", - "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", - "dev": true, - "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "postcss-values-parser": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-1.5.0.tgz", - "integrity": "sha512-3M3p+2gMp0AH3da530TlX8kiO1nxdTnc3C6vr8dMxRLIlh8UYkz0/wcwptSXjhtx2Fr0TySI7a+BHDQ8NL7LaQ==", + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", "dev": true, "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" } }, - "postinstall-build": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", - "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==", - "dev": true - }, - "prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" - }, - "prettier": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.2.tgz", - "integrity": "sha512-5xJQIPT8BraI7ZnaDwSbu5zLrB6vvi8hVV58yHQ+QK64qrY40dULy0HSRlQ2/2IdzeBpjhDkqdcFBnFeDEMVdg==", + "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==", "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" - } - }, - "pretty-error": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", - "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", - "dev": true, - "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" - } - }, - "pretty-format": { - "version": "24.9.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-24.9.0.tgz", - "integrity": "sha512-00ZMZUiHaJrNfk33guavqgvfJS30sLYf0f8+Srklv0AMPodGGHcoHgksZ3OThYnIvOd+8yMCn0YiEOogjlgsnA==", + "glob-watcher": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", "dev": true, - "requires": { - "@jest/types": "^24.9.0", - "ansi-regex": "^4.0.0", - "ansi-styles": "^3.2.0", - "react-is": "^16.8.4" - } - }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true - }, - "private": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", - "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", - "dev": true - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + "requires": { + "async-done": "^2.0.0", + "chokidar": "^3.5.3" + } }, - "process-on-spawn": { + "global-modules": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", - "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "fromentries": "^1.2.0" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, - "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true - }, - "promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "requires": { - "asap": "~2.0.3" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } } }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "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 }, - "prop-types": { - "version": "15.7.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", - "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "requires": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.8.1" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" } }, - "prop-types-exact": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz", - "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==", + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "requires": { - "has": "^1.0.3", - "object.assign": "^4.1.0", - "reflect.ownkeys": "^0.2.0" + "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" } }, - "propagate": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-1.0.0.tgz", - "integrity": "sha1-AMLa7t2iDofjeCs0Stuhzd1q1wk=", - "dev": true + "glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "dev": true, + "requires": { + "sparkles": "^2.1.0" + } }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" }, - "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "got": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", + "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", "dev": true, "requires": { - "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "@sindresorhus/is": "^0.7.0", + "cacheable-request": "^2.1.1", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "into-stream": "^3.1.0", + "is-retry-allowed": "^1.1.0", + "isurl": "^1.0.0-alpha5", + "lowercase-keys": "^1.0.0", + "mimic-response": "^1.0.0", + "p-cancelable": "^0.4.0", + "p-timeout": "^2.0.1", + "pify": "^3.0.0", + "safe-buffer": "^5.1.1", + "timed-out": "^4.0.1", + "url-parse-lax": "^3.0.0", + "url-to-options": "^1.0.1" + }, + "dependencies": { + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } } }, - "proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "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==" }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", "dev": true }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "psl": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.2.0.tgz", - "integrity": "sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA==" - }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "gulp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", "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" + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" + }, + "dependencies": { + "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 + }, + "fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.8", + "streamx": "^2.12.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-stream": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", + "dev": true, + "requires": { + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" + } + }, + "lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "dev": true + }, + "now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true + }, + "resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "dev": true, + "requires": { + "value-or-function": "^4.0.0" + } + }, + "to-through": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "dev": true, + "requires": { + "streamx": "^2.12.5" + } + }, + "value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "dev": true + }, + "vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + } + }, + "vinyl-fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" + } + }, + "vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "dev": true, + "requires": { + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" + } + } } }, - "public-ip": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/public-ip/-/public-ip-3.2.0.tgz", - "integrity": "sha512-DBq4o955zhrhESG4z6GkLN9mtY9NT/JOjEV8pvnYy3bjVQOQF0J5lJNwWLbEWwNstyNFJlY7JxCPFq4bdXSabw==", + "gulp-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", + "dev": true, "requires": { - "dns-socket": "^4.2.0", - "got": "^9.6.0", - "is-ip": "^3.1.0" + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" }, "dependencies": { - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "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": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz", - "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==", - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } + "color-convert": "^2.0.1" } }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "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": { - "pump": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "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": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "color-name": "~1.1.4" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "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 }, - "ip-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-4.1.0.tgz", - "integrity": "sha512-pKnZpbgCTfH/1NLIlOduP/V+WRXzC2MOz3Qo8xmxk8C5GudJLgK5QyLVXOSWy3ParAH7Eemurl3xjv/WXYFvMA==" + "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 }, - "is-ip": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz", - "integrity": "sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==", + "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": { - "ip-regex": "^4.0.0" + "has-flag": "^4.0.0" } }, - "normalize-url": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", - "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } + } + }, + "gulp-typescript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", + "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.5", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.3" + }, + "dependencies": { + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "inherits": "^2.0.4", + "readable-stream": "2 || 3" } } } }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "gulplog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "glogg": "^2.2.0" + } + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "function-bind": "^1.1.1" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=", + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, - "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "requires": { - "decode-uri-component": "^0.2.0", - "object-assign": "^4.1.0", - "strict-uri-encode": "^1.0.0" + "es-define-property": "^1.0.0" } }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "has-symbol-support-x": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", + "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", "dev": true }, - "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==" + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" }, - "queue": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/queue/-/queue-3.1.0.tgz", - "integrity": "sha1-bEnQHwCeIlZ4h4nyv/rGuLmZBYU=", + "has-to-string-tag-x": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", + "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", "dev": true, "requires": { - "inherits": "~2.0.0" + "has-symbol-support-x": "^1.4.1" } }, - "quote-stream": { + "has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/quote-stream/-/quote-stream-1.0.2.tgz", - "integrity": "sha1-hJY/jJwmuULhU/7rU6rnRlK34LI=", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "requires": { - "buffer-equal": "0.0.1", - "minimist": "^1.1.3", - "through2": "^2.0.0" + "has-symbols": "^1.0.3" } }, - "raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "performance-now": "^2.1.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=", - "dev": true - }, - "ramda": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", - "dev": true + "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" + } }, - "randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "hasha": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.1.0.tgz", + "integrity": "sha512-OFPDWmzPN1l7atOV1TgBVmNtBxaIysToK6Ve9DK+vT6pYuklw/nPNT+HJbZi0KDcI6vWB+9tgvZ5YD7fA3CXcA==", "dev": true, "requires": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "dependencies": { + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + } + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" } }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "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": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "parse-passwd": "^1.0.0" } }, - "range-inclusive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/range-inclusive/-/range-inclusive-1.0.2.tgz", - "integrity": "sha1-Rs2KsjevVZKKXDjzpQoXiSDhpQk=", + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, - "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" }, "dependencies": { - "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "ms": "2.1.2" } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true } } }, - "raw-loader": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-0.5.1.tgz", - "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao=", + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - } - }, - "react": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react/-/react-16.8.6.tgz", - "integrity": "sha512-pC0uMkhLaHm11ZSJULfOBqV4tIZkx87ZLvbbQYunNixAAvjnC+snJCg0XQXn9VIsttVsbZP/H/ewzgsd5fxKXw==", - "dev": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" - } - }, - "react-annotation": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/react-annotation/-/react-annotation-2.1.6.tgz", - "integrity": "sha512-r/WT9ylhhTXAbYS/8MJOy/oKgO/G8DQ02fDmeEVPUtPq3VEG1Q7BUGYIJLWgWwNSRmgTLGIo4RIqYbQ9t1f0aA==", - "dev": true, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", "requires": { - "prop-types": "15.6.2", - "viz-annotation": "0.0.3" + "agent-base": "6", + "debug": "4" }, "dependencies": { - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "dev": true, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "ms": "2.1.2" } } } }, - "react-base16-styling": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.5.3.tgz", - "integrity": "sha1-OFjyTpxN2MvT9wLz901YHKKRcmk=", - "dev": true, - "requires": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.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 }, - "react-color": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.17.3.tgz", - "integrity": "sha512-1dtO8LqAVotPIChlmo6kLtFS1FP89ll8/OiA8EcFRDR+ntcK+0ukJgByuIQHRtzvigf26dV5HklnxDIvhON9VQ==", - "dev": true, + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "requires": { - "@icons/material": "^0.2.4", - "lodash": "^4.17.11", - "material-colors": "^1.2.1", - "prop-types": "^15.5.10", - "reactcss": "^1.2.0", - "tinycolor2": "^1.4.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" } }, - "react-data-grid": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-data-grid/-/react-data-grid-6.1.0.tgz", - "integrity": "sha512-N1UtiHvsowEPzhx0VPqQKvGgSza/YNljczbisFDGMjawiGApS2taMv7h+EDXDx49CdaA6ur4eYS0z10x63IUpw==", + "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.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "requires": { - "object-assign": "^4.1.1", - "react-is-deprecated": "^0.1.2", - "shallowequal": "^1.1.0" - } - }, - "react-dev-utils": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-5.0.3.tgz", - "integrity": "sha512-Mvs6ofsc2xTjeZIrMaIfbXfsPVrbdVy/cVqq6SAacnqfMlcBpDuivhWZ1ODGeJ8HgmyWTLH971PYjj/EPCDVAw==", - "dev": true, - "requires": { - "address": "1.0.3", - "babel-code-frame": "6.26.0", - "chalk": "1.1.3", - "cross-spawn": "5.1.0", - "detect-port-alt": "1.1.6", - "escape-string-regexp": "1.0.5", - "filesize": "3.5.11", - "global-modules": "1.0.0", - "gzip-size": "3.0.0", - "inquirer": "3.3.0", - "is-root": "1.0.0", - "opn": "5.2.0", - "react-error-overlay": "^4.0.1", - "recursive-readdir": "2.2.1", - "shell-quote": "1.6.1", - "sockjs-client": "1.1.5", - "strip-ansi": "3.0.1", - "text-table": "0.2.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "dependencies": { - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - } - } - }, - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "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 } } }, - "react-dom": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz", - "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==", + "import-in-the-middle": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz", + "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==", + "requires": { + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.13.6" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, - "react-error-overlay": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-4.0.1.tgz", - "integrity": "sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw==", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "react-hot-loader": { - "version": "4.12.6", - "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.6.tgz", - "integrity": "sha512-tRXWgF5MhQSEXX3EHIplCOWCzSg+ye7ddHeQLt7Z+CaZMeEfeCL2/uSGITIzWXOQYhefnLX8IZtr2cff4xIrww==", - "dev": true, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "fast-levenshtein": "^2.0.6", - "global": "^4.3.0", - "hoist-non-react-statics": "^3.3.0", - "loader-utils": "^1.1.0", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4", - "shallowequal": "^1.0.2", - "source-map": "^0.7.3" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "once": "^1.3.0", + "wrappy": "1" } }, - "react-is": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz", - "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA==" + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "react-is-deprecated": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/react-is-deprecated/-/react-is-deprecated-0.1.2.tgz", - "integrity": "sha1-MBFI+G6kKP6OZz7KejchYLdXnb0=", + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", "dev": true }, - "react-json-tree": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/react-json-tree/-/react-json-tree-0.11.2.tgz", - "integrity": "sha512-aYhUPj1y5jR3ZQ+G3N7aL8FbTyO03iLwnVvvEikLcNFqNTyabdljo9xDftZndUBFyyyL0aK3qGO9+8EilILHUw==", + "internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, "requires": { - "babel-runtime": "^6.6.1", - "prop-types": "^15.5.8", - "react-base16-styling": "^0.5.1" + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" } }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true }, - "react-markdown": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-4.1.0.tgz", - "integrity": "sha512-EOHsEAN+aoP8UVz7vTHx6Z63GJfhrO9KItKlfsiBtVVS9tmSWtUaBTw73+2SObrWiOiE2Cs9qUBL7ORsvVhOrA==", + "into-stream": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", + "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", "dev": true, "requires": { - "html-to-react": "^1.3.4", - "mdast-add-list-metadata": "1.0.1", - "prop-types": "^15.7.2", - "remark-parse": "^5.0.0", - "unified": "^6.1.5", - "unist-util-visit": "^1.3.0", - "xtend": "^4.0.1" + "from2": "^2.1.1", + "p-is-promise": "^1.1.0" } }, - "react-motion": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", - "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", - "dev": true, - "requires": { - "performance-now": "^0.2.0", - "prop-types": "^15.5.8", - "raf": "^3.1.0" - }, - "dependencies": { - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true - } - } + "inversify": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/inversify/-/inversify-6.0.2.tgz", + "integrity": "sha512-i9m8j/7YIv4mDuYXUAcrpKPSaju/CIly9AHK5jvCBeoiM/2KEsuCQTTP+rzSWWpLYWRukdXFSl6ZTk2/uumbiA==" }, - "react-move": { - "version": "2.9.1", - "resolved": "https://registry.npmjs.org/react-move/-/react-move-2.9.1.tgz", - "integrity": "sha512-5qKYsJrKKpSypEaaYyR2HBbBgX65htRqKDa8o5OGDkq2VfklmTCbLawtYFpdmcJRqbz4jCYpzo2Rrsazq9HA8Q==", + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "@babel/runtime": "^7.2.0", - "d3-interpolate": "^1.3.2", - "d3-timer": "^1.0.9", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, - "react-popper": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/react-popper/-/react-popper-1.3.7.tgz", - "integrity": "sha512-nmqYTx7QVjCm3WUZLeuOomna138R1luC4EqkW3hxJUrAe+3eNz3oFCLYdnPwILfn0mX1Ew2c3wctrjlUMYYUww==", + "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": { - "@babel/runtime": "^7.1.2", - "create-react-context": "^0.3.0", - "deep-equal": "^1.1.1", - "popper.js": "^1.14.4", - "prop-types": "^15.6.1", - "typed-styles": "^0.0.7", - "warning": "^4.0.2" - }, - "dependencies": { - "deep-equal": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", - "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", - "dev": true, - "requires": { - "is-arguments": "^1.0.4", - "is-date-object": "^1.0.1", - "is-regex": "^1.0.4", - "object-is": "^1.0.1", - "object-keys": "^1.1.1", - "regexp.prototype.flags": "^1.2.0" - } - } + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "react-redux": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.1.1.tgz", - "integrity": "sha512-QsW0vcmVVdNQzEkrgzh2W3Ksvr8cqpAv5FhEk7tNEft+5pp7rXxAudTz3VOPawRkLIepItpkEIyLcN/VVXzjTg==", + "is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "requires": { - "@babel/runtime": "^7.5.5", - "hoist-non-react-statics": "^3.3.0", - "invariant": "^2.2.4", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^16.9.0" - }, - "dependencies": { - "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, - "react-is": { - "version": "16.11.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.11.0.tgz", - "integrity": "sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw==", - "dev": true - } + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" } }, - "react-svg-pan-zoom": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/react-svg-pan-zoom/-/react-svg-pan-zoom-3.1.0.tgz", - "integrity": "sha512-hmDUarqhNnCwuZumV9Pw7o5inW7lda4sX2U1vDK2B2slrSfNu1jbelOp6aaOEyUF7WzMA1xrpH6NBWvk4UeUTQ==", + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, "requires": { - "prop-types": "^15.7.2", - "transformation-matrix": "^2.0.0" + "has-bigints": "^1.0.1" } }, - "react-svgmt": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/react-svgmt/-/react-svgmt-1.1.8.tgz", - "integrity": "sha512-3xu7iWuHIbqM2hv4eMsAN1mZKz6EnXTPAcE4mMX/NwuYY5uUKJBoKDAmxY+I6KXHx2SpYJtKAqe1a5jEehteZg==", + "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==", "dev": true, "requires": { - "d3-ease": "^1.0.3", - "react-motion": "^0.5.2", - "react-move": "^2.7.0" + "binary-extensions": "^2.0.0" } }, - "react-table": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/react-table/-/react-table-6.10.0.tgz", - "integrity": "sha512-s/mQLI1+mNvlae45MfAZyZ04YIT3jUzWJqx34s0tfwpDdgJkpeK6vyzwMUkKFCpGODBxpjBOekYZzcEmk+2FiQ==", + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, "requires": { - "classnames": "^2.2.5" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "react-table-hoc-fixed-columns": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/react-table-hoc-fixed-columns/-/react-table-hoc-fixed-columns-1.0.2.tgz", - "integrity": "sha512-0i2IEhGgFOibxoA1FOvABmuxcA7kCcw2lB5UPMX3RzS2wah1gvq6U128JNjvnG/P+yKvx54X+lwEEQ7ovjzMcA==", - "dev": true, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "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.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", "requires": { - "classnames": "^2.2.6", - "emotion": "^9.2.3", - "uniqid": "^5.0.3" + "hasown": "^2.0.2" } }, - "react-test-renderer": { - "version": "16.8.6", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.8.6.tgz", - "integrity": "sha512-H2srzU5IWYT6cZXof6AhUcx/wEyJddQ8l7cLM/F7gDXYyPr4oq+vCIxJYXVGhId1J706sqziAjuOEjyNkfgoEw==", + "is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "react-is": "^16.8.6", - "scheduler": "^0.13.6" + "is-typed-array": "^1.1.13" } }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" + "has-tostringtag": "^1.0.0" } }, - "react-virtualized": { - "version": "9.21.1", - "resolved": "https://registry.npmjs.org/react-virtualized/-/react-virtualized-9.21.1.tgz", - "integrity": "sha512-E53vFjRRMCyUTEKuDLuGH1ld/9TFzjf/fFW816PE4HFXWZorESbSTYtiZz1oAjra0MminaUU1EnvUxoGuEFFPA==", + "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 + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": 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": { - "babel-runtime": "^6.26.0", - "clsx": "^1.0.1", - "dom-helpers": "^2.4.0 || ^3.0.0", - "linear-layout-vector": "0.0.1", - "loose-envify": "^1.3.0", - "prop-types": "^15.6.0", - "react-lifecycles-compat": "^3.0.4" + "has-tostringtag": "^1.0.0" } }, - "reactcss": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", - "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "lodash": "^4.0.1" + "is-extglob": "^2.1.1" } }, - "read": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", - "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", + "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": { - "mute-stream": "~0.0.4" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" } }, - "read-cache": { + "is-natural-number": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "dev": true + }, + "is-negated-glob": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", - "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "has-tostringtag": "^1.0.0" } }, - "read-pkg": { + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": 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-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "dependencies": { - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "isobject": "^3.0.1" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "resolve": "^1.1.6" + "is-unc-path": "^1.0.0" } }, - "recursive-readdir": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.1.tgz", - "integrity": "sha1-kO8jHQd4xc4JPJpI105cVCLROpk=", + "is-retry-allowed": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", + "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, "requires": { - "minimatch": "3.0.3" - }, - "dependencies": { - "minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - } + "call-bind": "^1.0.7" } }, - "reduce-css-calc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", - "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "balanced-match": "^0.4.2", - "math-expression-evaluator": "^1.2.14", - "reduce-function-call": "^1.0.1" - }, - "dependencies": { - "balanced-match": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true - } + "has-tostringtag": "^1.0.0" } }, - "reduce-function-call": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", - "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==", + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "balanced-match": "^1.0.0" + "has-symbols": "^1.0.2" } }, - "redux": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.0.4.tgz", - "integrity": "sha512-vKv4WdiJxOWKxK0yRoaK3Y4pxxB0ilzVx6dszU2W8wLxlb2yikRph4iV/ymtdJ6ZxpBLFbyrxklnT5yBbQSl3Q==", + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "requires": { - "loose-envify": "^1.4.0", - "symbol-observable": "^1.2.0" - }, - "dependencies": { - "symbol-observable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", - "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", - "dev": true - } + "which-typed-array": "^1.1.16" } }, - "redux-logger": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz", - "integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8=", + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "deep-diff": "^0.3.5" + "unc-path-regex": "^0.1.2" } }, - "reflect-metadata": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", - "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true }, - "reflect.ownkeys": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz", - "integrity": "sha1-dJrO7H8/34tj+SegSAnpDFwLNGA=", + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", "dev": true }, - "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { - "regenerate": "^1.4.0" + "call-bind": "^1.0.2" } }, - "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, - "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "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": { - "private": "^0.1.6" + "is-docker": "^2.0.0" } }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true + }, + "istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "append-transform": "^2.0.0" } }, - "regexp-tree": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.11.tgz", - "integrity": "sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg==", - "dev": true + "istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "requires": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } + } }, - "regexp.prototype.flags": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", - "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", + "istanbul-lib-coverage": "^3.2.0", + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "dependencies": { - "es-abstract": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz", - "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==", + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "aggregate-error": "^3.0.0" } }, - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "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 }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "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": { - "has": "^1.0.3" + "shebang-regex": "^3.0.0" } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "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 } } }, - "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", - "dev": true, - "requires": { - "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.0.2", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", - "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" - } - }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, - "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", "dev": true, "requires": { - "jsesc": "~0.5.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" }, "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "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" + } } } }, - "regression": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/regression/-/regression-2.0.1.tgz", - "integrity": "sha1-jSnD6CJKEIUMNeM36FqLL6w7DIc=", - "dev": true - }, - "relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", - "dev": true - }, - "relative": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz", - "integrity": "sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8=", + "istanbul-lib-source-maps": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz", + "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==", "dev": true, "requires": { - "isobject": "^2.0.0" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "isarray": "1.0.0" + "ms": "2.1.2" } } } }, - "release-zalgo": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", - "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", + "istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", "dev": true, "requires": { - "es6-error": "^4.0.1" - } - }, - "remark-parse": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", - "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", - "dev": true, - "requires": { - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^1.1.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^1.0.0", - "vfile-location": "^2.0.0", - "xtend": "^4.0.1" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" } }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "isurl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", + "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", "dev": true, "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" + "has-to-string-tag-x": "^1.2.0", + "is-object": "^1.0.1" } }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" } }, - "remove-files-webpack-plugin": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/remove-files-webpack-plugin/-/remove-files-webpack-plugin-1.4.0.tgz", - "integrity": "sha512-qlHn4EHNjWi6LiNV6aWCXROKjQg28sF/VxJ2FK+p5pPUQyLIBGlBAs/TUMxdVeToHSxq2RuA2XGgxcaDeTRnUg==", + "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==", "dev": true, "requires": { - "@types/webpack": "^4.41.6", - "trash": "^6.1.1" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "dependencies": { - "@types/webpack": { - "version": "4.41.7", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.7.tgz", - "integrity": "sha512-OQG9viYwO0V1NaNV7d0n79V+n6mjOV30CwgFPIfTzwmk8DHbt+C4f2aBGdCYbo3yFyYD6sjXfqqOjwkl1j+ulA==", + "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": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" + "has-flag": "^4.0.0" } } } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "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 }, - "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } } } }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", "dev": true }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "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==", + "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==", + "dev": 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": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dev": true, + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "dependencies": { + "jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.3.tgz", + "integrity": "sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g==", + "dev": true, + "requires": { + "jwa": "^1.4.2", + "safe-buffer": "^5.0.1" + } + } + } + }, + "jsx-ast-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz", + "integrity": "sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" + "array-includes": "^3.1.3", + "object.assign": "^4.1.2" } }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" } }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", + "just-extend": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true + }, + "jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "dev": true, "requires": { - "throttleit": "^1.0.0" + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" } }, - "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "dev": true, "requires": { - "lodash": "^4.17.11" + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "keytar": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", + "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", "dev": true, + "optional": true, "requires": { - "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "node-addon-api": "^4.3.0", + "prebuild-install": "^7.0.1" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true + "keyv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", + "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } }, - "requirejs": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", - "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "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==", "dev": true }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" - }, - "resize-observer-polyfill": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", - "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "language-subtag-registry": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.20.tgz", + "integrity": "sha512-KPMwROklF4tEx283Xw0pNKtfTj1gZ4UByp4EsIFWLgBavJltF4TiYPc39k06zSTsLzxTVXXDSpbwaQXaFB4Qeg==", "dev": true }, - "resolve": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz", - "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==", + "language-tags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", + "dev": true, "requires": { - "path-parse": "^1.0.6" + "language-subtag-registry": "~0.3.2" } }, - "resolve-cwd": { + "last-run": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", + "dev": true + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "readable-stream": "^2.0.5" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "flush-write-stream": "^1.0.2" } }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "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": { - "value-or-function": "^3.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, "requires": { - "lowercase-keys": "^1.0.0" + "immediate": "~3.0.5" } }, - "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "liftoff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", + "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", "dev": true, "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } } }, - "restructure": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/restructure/-/restructure-0.5.4.tgz", - "integrity": "sha1-9U591WNZD7NP1r9Vh2EJrsyyjeg=", + "linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "dev": true, "requires": { - "browserify-optional": "^1.0.0" + "uc.micro": "^1.0.1" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true }, - "rewiremock": { - "version": "3.13.7", - "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.13.7.tgz", - "integrity": "sha512-U6iFfdXPiNtIBDcJWmspl/nhVk1EANkXLq2GM78T3ZfegvO5EW0TgNzExLh5iHXFJKQr//SmH9iloK/s4O7UqA==", + "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==", "dev": true, "requires": { - "babel-runtime": "^6.26.0", - "compare-module-exports": "^2.1.0", - "lodash.some": "^4.6.0", - "lodash.template": "^4.4.0", - "node-libs-browser": "^2.1.0", - "path-parse": "^1.0.5", - "wipe-node-cache": "^2.1.0", - "wipe-webpack-cache": "^2.1.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } }, - "rfdc": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.1.4.tgz", - "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==" + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } }, - "rgb": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/rgb/-/rgb-0.1.0.tgz", - "integrity": "sha1-vieykej+/+rBvZlylyG/pA/AN7U=", + "lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + }, + "lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=", "dev": true }, - "rgb-hex": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz", - "integrity": "sha1-x3PF/iJoolV42SU5qCp6XOU77aY=", + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "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 + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "glob": "^7.1.3" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.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 + }, + "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" + } + } } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loupe": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz", + "integrity": "sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==", + "dev": true, + "requires": { + "get-func-name": "^2.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "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==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, - "roughjs-es5": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/roughjs-es5/-/roughjs-es5-0.1.0.tgz", - "integrity": "sha512-NMjzoBgSYk8qEYLSxzxytS20sfdQV7zg119FZjFDjIDwaqodFcf7QwzKbqM64VeAYF61qogaPLk3cs8Gb+TqZA==", + "make-error": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz", + "integrity": "sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==", + "dev": true + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", "dev": true, "requires": { - "babel-runtime": "^6.26.0" + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + } } }, - "rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=", - "dev": true, - "requires": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" }, - "run-async": { + "md5": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", - "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", "dev": true, "requires": { - "is-promise": "^2.1.0" + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" } }, - "run-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz", - "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", - "dev": true - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", "dev": true, "requires": { - "aproba": "^1.1.1" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, - "rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=", + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "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==", "dev": true }, - "rx-lite": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", - "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true }, - "rx-lite-aggregates": { + "micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", - "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "rx-lite": "*" + "braces": "^3.0.3", + "picomatch": "^2.3.1" } }, - "rxjs": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", - "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", + "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": { - "tslib": "^1.9.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, - "rxjs-compat": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.5.4.tgz", - "integrity": "sha512-rkn+lbOHUQOurdd74J/hjmDsG9nFx0z66fvnbs8M95nrtKvNqCKdk7iZqdY51CGmDemTQk+kUPy4s8HVOHtkfA==" + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true }, - "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==" + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": 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==", "requires": { - "ret": "~0.1.10" + "mime-db": "1.52.0" } }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "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 }, - "sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "requires": { - "truncate-utf8-bytes": "^1.0.0" - } + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true }, - "sanitize-html": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-1.20.1.tgz", - "integrity": "sha512-txnH8TQjaQvg2Q0HY06G6CDJLVYCpbnxrdO0WN8gjCKaU5J0KbyGYhZxx5QJg3WLZ1lB7XU9kDkfrCXUozqptA==", - "dev": true, - "requires": { - "chalk": "^2.4.1", - "htmlparser2": "^3.10.0", - "lodash.clonedeep": "^4.5.0", - "lodash.escaperegexp": "^4.1.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.mergewith": "^4.6.1", - "postcss": "^7.0.5", - "srcset": "^1.0.0", - "xtend": "^4.0.1" - } + "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 }, - "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", - "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": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.8.tgz", + "integrity": "sha512-7RN35vit8DeBclkofOVmBY0eDAZZQd1HzmukRdSyz95CRh8FT54eqnbj0krQr3mrHR6sfRyYkyhwBWjoV5uqlQ==", "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "brace-expansion": "^2.0.1" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true + "brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "requires": { + "balanced-match": "^1.0.0" + } } } }, - "sax": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", - "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=" + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true }, - "saxes": { - "version": "3.1.11", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", - "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", - "dev": true, - "requires": { - "xmlchars": "^2.1.1" - } + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true }, - "scheduler": { - "version": "0.13.6", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", - "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "minimist": "^1.2.5" } }, - "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", "dev": true, - "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - } - }, - "scope-analyzer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/scope-analyzer/-/scope-analyzer-2.0.5.tgz", - "integrity": "sha512-+U5H0417mnTEstCD5VwOYO7V4vYuSqwqjFap40ythe67bhMFL5C3UgPwyBv7KDJsqUBIKafOD57xMlh1rN7eaw==", - "requires": { - "array-from": "^2.1.1", - "es6-map": "^0.1.5", - "es6-set": "^0.1.5", - "es6-symbol": "^3.1.1", - "estree-is-function": "^1.0.0", - "get-assigned-identifiers": "^1.1.0" - } + "optional": true }, - "seek-bzip": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.5.tgz", - "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", - "dev": true, - "requires": { - "commander": "~2.8.1" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", + "mocha": { + "version": "11.7.5", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.7.5.tgz", + "integrity": "sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig==", + "dev": true, + "requires": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "requires": { - "graceful-readlink": ">= 1.0.0" + "balanced-match": "^1.0.0" } - } - } - }, - "semiotic": { - "version": "1.19.11", - "resolved": "https://registry.npmjs.org/semiotic/-/semiotic-1.19.11.tgz", - "integrity": "sha512-TIiVTnKFonApiWZTN7AfJ9ltAUOl0wBYK5tFd1NCMFQJcbqDFAGrjfle1VHM2ARovNEbYKnl2a3N6zRwSKfJlg==", - "dev": true, - "requires": { - "@mapbox/polylabel": "1", - "d3-array": "^1.2.0", - "d3-bboxCollide": "^1.0.3", - "d3-brush": "^1.0.6", - "d3-chord": "^1.0.4", - "d3-collection": "^1.0.1", - "d3-contour": "^1.1.1", - "d3-force": "^1.0.2", - "d3-glyphedge": "^1.2.0", - "d3-hexbin": "^0.2.2", - "d3-hierarchy": "^1.1.3", - "d3-interpolate": "^1.1.5", - "d3-polygon": "^1.0.5", - "d3-sankey-circular": "0.25.0", - "d3-scale": "^1.0.3", - "d3-selection": "^1.1.0", - "d3-shape": "^1.2.0", - "d3-voronoi": "^1.0.2", - "json2csv": "^4.5.1", - "labella": "1.1.4", - "memoize-one": "4.0.0", - "object-assign": "4.1.1", - "polygon-offset": "0.3.1", - "promise": "8.0.1", - "prop-types": "15.6.0", - "react-annotation": "^2.1.6", - "regression": "^2.0.1", - "roughjs-es5": "0.1.0", - "semiotic-mark": "0.3.1", - "svg-path-bounding-box": "1.0.4" - }, - "dependencies": { - "d3-scale": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", - "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-color": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "requires": { + "ms": "^2.1.3" } }, - "memoize-one": { + "diff": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", + "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true + }, + "escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-4.0.0.tgz", - "integrity": "sha512-wdpOJ4XBejprGn/xhd1i2XR8Dv1A25FJeIvR7syQhQlz9eXsv+06llcvcmBxlWVGv4C73QBsWA8kxvZozzNwiQ==", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "promise": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.1.tgz", - "integrity": "sha1-5F1osAoXZHttpxG/he1u1HII9FA=", + "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" + } + }, + "foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + } + }, + "glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "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 + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "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" + } + }, + "minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.2" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "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" + } + }, + "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 + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + }, + "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 + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "asap": "~2.0.3" + "has-flag": "^4.0.0" } }, - "prop-types": { - "version": "15.6.0", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz", - "integrity": "sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY=", + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "fbjs": "^0.8.16", - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true } } }, - "semiotic-mark": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/semiotic-mark/-/semiotic-mark-0.3.1.tgz", - "integrity": "sha512-j7CsNannyJi68Yg5DXDZJrw3wEssBTaeGEvGMaTqPuBlM1kPFXYWvS0dpRzsT/Yopn/kRRyooDR+l6zQCwV+EQ==", + "mocha-junit-reporter": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mocha-junit-reporter/-/mocha-junit-reporter-2.0.2.tgz", + "integrity": "sha512-vYwWq5hh3v1lG0gdQCBxwNipBfvDiAM1PHroQRNp96+2l72e9wEUTw+mzoK+O0SudgfQ7WvTQZ9Nh3qkAYAjfg==", + "dev": true, + "requires": { + "debug": "^2.2.0", + "md5": "^2.1.0", + "mkdirp": "~0.5.1", + "strip-ansi": "^6.0.1", + "xml": "^1.0.0" + } + }, + "mocha-multi-reporters": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/mocha-multi-reporters/-/mocha-multi-reporters-1.5.1.tgz", + "integrity": "sha512-Yb4QJOaGLIcmB0VY7Wif5AjvLMUFAdV57D2TWEva1Y0kU/3LjKpeRVmlMIfuO1SVbauve459kgtIizADqxMWPg==", "dev": true, "requires": { - "d3-interpolate": "^1.1.5", - "d3-scale": "^1.0.3", - "d3-selection": "^1.1.0", - "d3-shape": "^1.2.0", - "d3-transition": "^1.0.3", - "prop-types": "^15.6.0", - "roughjs-es5": "0.1.0" + "debug": "^4.1.1", + "lodash": "^4.17.15" }, "dependencies": { - "d3-scale": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", - "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-color": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" + "ms": "2.1.2" } } } }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" }, - "semver-compare": { + "mrmime": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", - "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.0.tgz", + "integrity": "sha512-a70zx7zFfVO7XpnQ2IX1Myh9yY4UYvfld/dikWRnsXxbyvMcfz+u6UfgNAtH+k2QqtJuzVpv6eLTx1G2+WKZbQ==", "dev": true }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", - "dev": true, - "requires": { - "sver-compat": "^1.5.0" - } + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } + "mute-stdout": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", + "dev": true }, - "serialize-javascript": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", - "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } + "named-js-regexp": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/named-js-regexp/-/named-js-regexp-1.3.5.tgz", + "integrity": "sha512-XO0DPujDP9IWpkt690iWLreKztb/VB811DGl5N3z7BfhkMJuiVZXOi6YN/fEB9qkvtMVTgSZDW8pzdVt8vj/FA==" }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } + "optional": true }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "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==", + "dev": true }, - "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" - } + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, - "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "nise": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nise/-/nise-6.0.0.tgz", + "integrity": "sha512-K8ePqo9BFvN31HXwEtTNGzgrPpmvgciDsFz8aztFjt4LqKO/JeFD8tBOeuDiCMXrIl/m1YvfH8auSpxfaD09wg==", "dev": true, "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" } }, - "shallow-copy": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/shallow-copy/-/shallow-copy-0.0.1.tgz", - "integrity": "sha1-QV9CcC1z2BAzApLMXuhurhoRoXA=" - }, - "shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "node-abi": { + "version": "3.45.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz", + "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==", "dev": true, + "optional": true, "requires": { - "shebang-regex": "^1.0.0" + "semver": "^7.3.5" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", "dev": true, - "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" - }, - "dependencies": { - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - } - } + "optional": true }, - "shortid": { - "version": "2.2.14", - "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.14.tgz", - "integrity": "sha512-4UnZgr9gDdA1kaKj/38IiudfC3KHKhDc1zi/HSxd9FQDR0VLwH3/y79tZJLsVYPsJgIjeHjqIWaWVRJUj9qZOQ==", + "node-has-native-dependencies": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/node-has-native-dependencies/-/node-has-native-dependencies-1.0.2.tgz", + "integrity": "sha1-MVLsl1O2ZB5NMi0YXdSTBkmto9o=", "dev": true, "requires": { - "nanoid": "^2.0.0" + "fs-walk": "0.0.1" } }, - "sigmund": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", - "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true - }, - "simple-get": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", - "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", "dev": true, "requires": { - "decompress-response": "^4.2.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" }, "dependencies": { - "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "mimic-response": "^2.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, - "mimic-response": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz", - "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==", + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true } } }, - "simple-html-tokenizer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz", - "integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4=", - "dev": true - }, - "simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "node-loader": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/node-loader/-/node-loader-1.0.3.tgz", + "integrity": "sha512-8c9ef5q24F0AjrPxUjdX7qdTlsU1zZCPeqYvSBCH1TJko3QW4qu1uA1C9KbOPdaRQwREDdbSYZgltBAlbV7l5g==", + "dev": true, "requires": { - "is-arrayish": "^0.3.1" + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" } }, - "sinon": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-8.0.1.tgz", - "integrity": "sha512-vbXMHBszVioyPsuRDLEiPEgvkZnbjfdCFvLYV4jONNJqZNLWTwZ/gYSNh3SuiT1w9MRXUz+S7aX0B4Ar2XI8iw==", + "node-polyfill-webpack-plugin": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/node-polyfill-webpack-plugin/-/node-polyfill-webpack-plugin-1.1.4.tgz", + "integrity": "sha512-Z0XTKj1wRWO8o/Vjobsw5iOJCN+Sua3EZEUc2Ziy9CyVvmHKu6o+t4gUH9GOE0czyPR94LI6ZCV/PpcM8b5yow==", "dev": true, "requires": { - "@sinonjs/commons": "^1.7.0", - "@sinonjs/formatio": "^4.0.1", - "@sinonjs/samsam": "^4.0.1", - "diff": "^4.0.1", - "lolex": "^5.1.2", - "nise": "^3.0.0", - "supports-color": "^7.1.0" + "assert": "^2.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^4.19.0", + "events": "^3.3.0", + "filter-obj": "^2.0.2", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^3.6.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tty-browserify": "^0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.1.2" }, "dependencies": { - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - }, - "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.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "slash": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", - "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", - "dev": true - }, - "slickgrid": { - "version": "2.4.17", - "resolved": "https://registry.npmjs.org/slickgrid/-/slickgrid-2.4.17.tgz", - "integrity": "sha512-saxVD9URoBD2M/Sl+7fLWE125/Cp1j0YhkRMPke4Hwdk31q/lihNv8I2o70cM5GRmoeWJKW7tnhNraDEe89jEg==", - "dev": true, - "requires": { - "jquery": ">=1.8.0", - "jquery-ui": ">=1.8.0" - } - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "domain-browser": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.22.0.tgz", + "integrity": "sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==", "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + }, + "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 + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "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": { - "kind-of": "^6.0.0" + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "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": { - "kind-of": "^6.0.0" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "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 + }, + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" } } } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "process-on-spawn": "^1.0.0" } }, - "socket.io": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", - "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true + }, + "node-stream-zip": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz", + "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-url": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", + "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", "dev": true, "requires": { - "debug": "~4.1.0", - "engine.io": "~3.4.0", - "has-binary2": "~1.0.2", - "socket.io-adapter": "~1.1.0", - "socket.io-client": "2.3.0", - "socket.io-parser": "~3.4.0" - }, - "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } + "prepend-http": "^2.0.0", + "query-string": "^5.0.1", + "sort-keys": "^2.0.0" } }, - "socket.io-adapter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", - "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==", - "dev": true + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "requires": { + "once": "^1.3.2" + } }, - "socket.io-client": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", - "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", - "dev": true, - "requires": { - "backo2": "1.0.2", - "base64-arraybuffer": "0.1.5", - "component-bind": "1.0.0", - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "engine.io-client": "~3.4.0", - "has-binary2": "~1.0.2", - "has-cors": "1.1.0", - "indexof": "0.0.1", - "object-component": "0.0.3", - "parseqs": "0.0.5", - "parseuri": "0.0.5", - "socket.io-parser": "~3.3.0", - "to-array": "0.1.4" - }, - "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", + "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" + }, + "dependencies": { + "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 - }, - "socket.io-parser": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", - "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", - "dev": true, - "requires": { - "component-emitter": "1.2.1", - "debug": "~3.1.0", - "isarray": "2.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - } - } } } }, - "socket.io-parser": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz", - "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==", + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", "dev": true, "requires": { - "component-emitter": "1.2.1", - "debug": "~4.1.0", - "isarray": "2.0.1" + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" }, "dependencies": { - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "aggregate-error": "^3.0.0" } - }, - "isarray": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", - "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=", - "dev": true } } }, - "sockjs-client": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true + }, + "object-is": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", - "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "debug": "^2.6.6", - "eventsource": "0.1.6", - "faye-websocket": "~0.11.0", - "inherits": "^2.0.1", - "json3": "^3.3.2", - "url-parse": "^1.1.8" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, - "sort-keys": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", - "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "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": { - "is-plain-obj": "^1.0.0" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" } }, - "sort-keys-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", - "integrity": "sha1-nLb09OnkgVWmqgZx7dM2/xR5oYg=", + "object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, "requires": { - "sort-keys": "^1.0.0" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "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==" + "object.entries": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", + "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" } }, - "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true + "object.hasown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.0.tgz", + "integrity": "sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + } }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } }, - "spawn-wrap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", - "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", "dev": true, "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "dependencies": { - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-NDGVxTsjqfunkds7CqsOiEnxln4Bo7Nddl3XhS4pXg5OzwkLqJ971ZVAAnB+DDLnF76N+VnDEiBHaVV8I06SUg==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": 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" - } - } + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" } }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "mimic-fn": "^2.1.0" } }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" } }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "dev": true }, - "split": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", - "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", + "optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "requires": { - "through": "2" + "@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" } }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "readable-stream": "^2.0.1" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "srcset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-1.0.0.tgz", - "integrity": "sha1-pWad4StC87HV6D7QPHEEb8SPQe8=", - "dev": true, - "requires": { - "array-uniq": "^1.0.2", - "number-is-nan": "^1.0.0" - } + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } + "p-cancelable": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", + "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", + "dev": true }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "p-event": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", + "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", "dev": true, "requires": { - "figgy-pudding": "^3.5.1" + "p-timeout": "^2.0.1" } }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" - }, - "stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha1-Gsig2Ug4SNFpXkGLbQMaPDzmjjs=", - "dev": true - }, - "stat-mode": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz", - "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=", + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true }, - "state-toggle": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.2.tgz", - "integrity": "sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw==", + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", "dev": true }, - "static-eval": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", - "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { - "escodegen": "^1.8.1" + "p-try": "^2.0.0" } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "p-limit": "^2.2.0" } }, - "static-module": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/static-module/-/static-module-2.2.5.tgz", - "integrity": "sha512-D8vv82E/Kpmz3TXHKG8PPsCPg+RAX6cbCOyvjM6x04qZtQ47EtJFVwRsdov3n5d6/6ynrOY9XB4JkaZwB2xoRQ==", - "requires": { - "concat-stream": "~1.6.0", - "convert-source-map": "^1.5.1", - "duplexer2": "~0.1.4", - "escodegen": "~1.9.0", - "falafel": "^2.1.0", - "has": "^1.0.1", - "magic-string": "^0.22.4", - "merge-source-map": "1.0.4", - "object-inspect": "~1.4.0", - "quote-stream": "~1.0.2", - "readable-stream": "~2.3.3", - "shallow-copy": "~0.0.1", - "static-eval": "^2.0.0", - "through2": "~2.0.3" - }, - "dependencies": { - "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==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "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" - } - }, - "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" - } - } + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" } }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "p-timeout": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", + "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "dev": true, + "requires": { + "p-finally": "^1.0.0" + } }, - "stealthy-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", - "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", "dev": true, "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - }, - "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" } }, - "stream-combiner": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", - "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "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": { - "duplexer": "~0.1.1" + "callsites": "^3.0.0" } }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "parse-asn1": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.9.tgz", + "integrity": "sha512-fIYNuZ/HastSb80baGOuPRo1O9cf4baWw5WsAp7dBuUzeTD/BoaG8sVTdlPFksBE2lF21dN+A1AnrpIjSWqHHg==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "pbkdf2": "^3.1.5", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "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==", + "dev": true + } } }, - "stream-events": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", - "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, "requires": { - "stubs": "^3.0.0" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "parse-semver": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", + "integrity": "sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==", "dev": true, "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "semver": "^5.1.0" }, "dependencies": { - "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==", + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } } } }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", - "dev": true - }, - "streamfilter": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", - "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", "dev": true, "requires": { - "readable-stream": "^2.0.2" + "parse5": "^6.0.1" }, "dependencies": { - "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==", + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } } } }, - "streamifier": { + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "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==" + }, + "path-root": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz", - "integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true }, - "streamroller": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.3.tgz", - "integrity": "sha512-AegmvQsscTRhHVO46PhCDerjIpxi7E+d2GxgUDu+nzw/HuLnUdxHWr6WQ+mVn/4iJgMKKFFdiUwFcFRDvcjCtw==", + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "requires": { - "date-format": "^2.1.0", - "debug": "^4.1.1", - "fs-extra": "^8.1.0" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "dependencies": { - "date-format": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-2.1.0.tgz", - "integrity": "sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA==" - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "requires": { - "ms": "^2.1.1" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true } } }, - "strict-uri-encode": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true }, - "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==" + "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 }, - "string-hash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", - "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", + "pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "pbkdf2": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.5.tgz", + "integrity": "sha512-Q3CG/cYvCO1ye4QKkuH7EXxs3VC/rI1/trd+qX2+PolbaKG0H+bgcZzrTt96mMyRtejk+JMCiLUn3y29W8qmFQ==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "ripemd160": "^2.0.3", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.12", + "to-buffer": "^1.2.1" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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==", "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } } } }, - "string.prototype.trim": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz", - "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.0", - "function-bind": "^1.0.2" - } - }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } - }, - "string_decoder": { + "pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz", - "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true }, - "strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=", + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, - "strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", - "dev": true, - "requires": { - "is-natural-number": "^4.0.1" - } + "picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true }, - "strip-outer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", - "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.2" + "pinkie": "^2.0.0" } }, - "stubs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", - "integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls=", - "dev": true - }, - "style-loader": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", - "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "find-up": "^4.0.0" } }, - "styled-jsx": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-3.2.1.tgz", - "integrity": "sha512-gM/WOrWYRpWReivzQqetEGohUc/TJSvUoZ5T/UJxJZIsVIPlRQLnp7R8Oue4q49sI08EBRQjQl2oBL3sfdrw2g==", + "plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "requires": { - "babel-plugin-syntax-jsx": "6.18.0", - "babel-types": "6.26.0", - "convert-source-map": "1.6.0", - "loader-utils": "1.2.3", - "source-map": "0.7.3", - "string-hash": "1.1.3", - "stylis": "3.5.4", - "stylis-rule-sheet": "0.0.10" - }, - "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" } }, - "stylis": { - "version": "3.5.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz", - "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==", + "possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true }, - "stylis-rule-sheet": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz", - "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==", + "postinstall-build": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.3.tgz", + "integrity": "sha512-vPvPe8TKgp4FLgY3+DfxCE5PIfoXBK2lyLfNCxsRbDsV6vS4oU5RG/IWxrblMn6heagbnMED3MemUQllQ2bQUg==", "dev": true }, - "subarg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", - "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", - "dev": true, - "requires": { - "minimist": "^1.1.0" - } - }, - "sudo-prompt": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-8.2.5.tgz", - "integrity": "sha512-rlBo3HU/1zAJUrkY6jNxDOC9eVYliG6nS4JA8u8KAshITd07tafMc/Br7xQwCSseXwJ2iCcHCE8SNWX3q8Z+kw==" - }, - "superagent": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.3.tgz", - "integrity": "sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==", + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", "dev": true, + "optional": true, "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" }, "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "optional": true, "requires": { - "safe-buffer": "~5.1.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } + "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 }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "dev": true + }, + "prettier": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.0.2.tgz", + "integrity": "sha512-5xJQIPT8BraI7ZnaDwSbu5zLrB6vvi8hVV58yHQ+QK64qrY40dULy0HSRlQ2/2IdzeBpjhDkqdcFBnFeDEMVdg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "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==", + "dev": true + }, + "process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", "dev": true, "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "fromentries": "^1.2.0" } }, - "svg-inline-loader": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.0.tgz", - "integrity": "sha512-rynplY2eXFrdNomL1FvyTFQlP+dx0WqbzHglmNtA9M4IHRC3no2aPAl3ny9lUpJzFzFMZfWRK5YIclNU+FRePA==", + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "dev": true, "requires": { - "loader-utils": "^0.2.11", - "object-assign": "^4.0.1", - "simple-html-tokenizer": "^0.1.1" - }, - "dependencies": { - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, - "loader-utils": { - "version": "0.2.17", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", - "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0", - "object-assign": "^4.0.1" - } - } + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" } }, - "svg-inline-react": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/svg-inline-react/-/svg-inline-react-3.1.0.tgz", - "integrity": "sha512-c39AIRQOUXLMD8fQ2rHmK1GOSO3tVuZk61bAXqIT05uhhm3z4VtQFITQSwyhL0WA2uxoJAIhPd2YV0CYQOolSA==", + "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": { - "prop-types": "^15.5.0" + "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" } }, - "svg-path-bounding-box": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/svg-path-bounding-box/-/svg-path-bounding-box-1.0.4.tgz", - "integrity": "sha1-7XPfODyLR4abZQjwWPV0j4gzwHA=", + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "svgpath": "^2.0.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "svg-to-pdfkit": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/svg-to-pdfkit/-/svg-to-pdfkit-0.1.8.tgz", - "integrity": "sha512-QItiGZBy5TstGy+q8mjQTMGRlDDOARXLxH+sgVm1n/LYeo0zFcQlcCh8m4zi8QxctrxB9Kue/lStc/RD5iLadQ==", + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, "requires": { - "pdfkit": ">=0.8.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" } }, - "svgpath": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/svgpath/-/svgpath-2.2.2.tgz", - "integrity": "sha512-7cXFbkZvPkZpKLC+3QIfyUd3/Un/CvJONjTD3Gz5qLuEa73StPOt8kZjTi9apxO6zwCaza0bPNnmzTyrQ4qQlw==", - "dev": true - }, - "symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true }, - "sync-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/sync-request/-/sync-request-6.1.0.tgz", - "integrity": "sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==", + "qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "dev": true, "requires": { - "http-response-object": "^3.0.1", - "sync-rpc": "^1.2.1", - "then-request": "^6.0.0" + "side-channel": "^1.1.0" } }, - "sync-rpc": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/sync-rpc/-/sync-rpc-1.3.6.tgz", - "integrity": "sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==", + "query-string": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", + "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", "dev": true, "requires": { - "get-port": "^3.1.0" + "decode-uri-component": "^0.2.0", + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", "dev": true }, - "tar": { - "version": "4.4.13", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", - "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.8.6", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "dev": true, - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - }, - "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } + "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 }, - "teeny-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-6.0.1.tgz", - "integrity": "sha512-TAK0c9a00ELOqLrZ49cFxvPVogMUFaWY8dUsQc/0CuQPGF+BOxOQzXfE413BAk2kLomwNplvdtMpeaeGWmoc2g==", - "dev": true, - "requires": { - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^4.0.0", - "node-fetch": "^2.2.0", - "stream-events": "^1.0.5", - "uuid": "^3.3.2" - }, - "dependencies": { - "agent-base": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.0.tgz", - "integrity": "sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "dev": true, - "requires": { - "agent-base": "5", - "debug": "4" - }, - "dependencies": { - "agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "dev": true - } - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - } - } + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true }, - "terser": { - "version": "4.6.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.3.tgz", - "integrity": "sha512-Lw+ieAXmY69d09IIc/yqeBqXpEQIpDGZqT34ui1QWXIUpR2RjbqEkT8X7Lgex19hslSqcWM5iMN2kM11eMsESQ==", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "safe-buffer": "^5.1.0" } }, - "terser-webpack-plugin": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.2.tgz", - "integrity": "sha512-SmvB/6gtEPv+CJ88MH5zDOsZdKXPS/Uzv2//e90+wM1IHFUhsguPKEILgzqrM1nQ4acRXN/SV4Obr55SXC+0oA==", + "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": { - "cacache": "^13.0.1", - "find-cache-dir": "^3.2.0", - "jest-worker": "^24.9.0", - "schema-utils": "^2.6.1", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.4.3", - "webpack-sources": "^1.4.3" - }, - "dependencies": { - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "cacache": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz", - "integrity": "sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w==", - "dev": true, - "requires": { - "chownr": "^1.1.2", - "figgy-pudding": "^3.5.1", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "infer-owner": "^1.0.4", - "lru-cache": "^5.1.1", - "minipass": "^3.0.0", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "p-map": "^3.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^2.7.1", - "ssri": "^7.0.0", - "unique-filename": "^1.1.1" - } - }, - "find-cache-dir": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", - "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.0", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "fs-minipass": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", - "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", - "dev": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "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" - }, - "dependencies": { - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } - }, - "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "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 - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "schema-utils": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.2.tgz", - "integrity": "sha512-sazKNMBX/jwrXRkOI7N6dtiTVYqzSckzol8SGuHt0lE/v3xSW6cUkOqzu6Bq2tW+dlUzq3CWIqHU3ZKauliqdg==", - "dev": true, - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "ssri": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-7.1.0.tgz", - "integrity": "sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "minipass": "^3.1.1" - } - }, - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "optional": true, "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true + } } }, - "text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, - "then-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/then-request/-/then-request-6.0.2.tgz", - "integrity": "sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==", + "read": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", + "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", "dev": true, "requires": { - "@types/concat-stream": "^1.6.0", - "@types/form-data": "0.0.33", - "@types/node": "^8.0.0", - "@types/qs": "^6.2.31", - "caseless": "~0.12.0", - "concat-stream": "^1.6.0", - "form-data": "^2.2.0", - "http-basic": "^8.1.1", - "http-response-object": "^3.0.1", - "promise": "^8.0.0", - "qs": "^6.4.0" - }, - "dependencies": { - "@types/form-data": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/@types/form-data/-/form-data-0.0.33.tgz", - "integrity": "sha1-yayFsqX9GENbjIXZ7LUObWyJP/g=", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "8.10.58", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.58.tgz", - "integrity": "sha512-NNcUk/rAdR7Pie7WiA5NHp345dTkD62qaxqscQXVIjCjog/ZXsrG8Wo7dZMZAzE7PSpA+qR2S3TYTeFCKuBFxQ==", - "dev": true - }, - "promise": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/promise/-/promise-8.0.3.tgz", - "integrity": "sha512-HeRDUL1RJiLhyA0/grn+PTShlBAcLuh/1BJGtrvjwbvRDCTLLMEz9rOGCV+R3vHY4MixIuoMEd9Yq/XvsTPcjw==", - "dev": true, - "requires": { - "asap": "~2.0.6" - } - } + "mute-stream": "~0.0.4" } }, - "throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=" - }, - "through": { + "readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "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": { - "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==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, "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==", + "dev": true, "requires": { "safe-buffer": "~5.1.0" } } } }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "picomatch": "^2.2.1" } }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", - "dev": true + "reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==" }, - "timers-browserify": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", - "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", "dev": true, "requires": { - "setimmediate": "^1.0.4" + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" } }, - "timers-ext": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.7.tgz", - "integrity": "sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==", + "release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=", "dev": true, "requires": { - "es5-ext": "~0.10.46", - "next-tick": "1" + "es6-error": "^4.0.1" } }, - "tiny-inflate": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", - "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + } }, - "tinycolor2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", - "integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=", + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "tinyqueue": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-1.2.3.tgz", - "integrity": "sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA==", + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", + "replace-homedir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-in-the-middle": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.0.tgz", + "integrity": "sha512-3TLx5TGyAY6AOqLBoXmHkNql0HIf2RGbuMgCDT2WO/uGVAPJs6h7Kl+bN6TIZGd9bWhWPwnDnTHGtW8Iu77sdw==", "requires": { - "os-tmpdir": "~1.0.1" + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" + }, + "dependencies": { + "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" + } + } } }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, + "resolve": { + "version": "1.22.4", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz", + "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==", "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "to-array": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", - "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", - "dev": true + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } }, - "to-arraybuffer": { + "resolve-dir": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "requires": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + } }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "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": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "dev": true }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "rewiremock": { + "version": "3.14.6", + "resolved": "https://registry.npmjs.org/rewiremock/-/rewiremock-3.14.6.tgz", + "integrity": "sha512-hjpS7iQUTVVh/IHV4GE1ypg4IzlgVc34gxZBarwwVrKfnjlyqHJuQdsia6Ac7m4f4k/zxxA3tX285MOstdysRQ==", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "compare-module-exports": "^2.1.0", + "node-libs-browser": "^2.1.0", + "path-parse": "^1.0.5", + "wipe-node-cache": "^2.1.2", + "wipe-webpack-cache": "^2.1.0" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.3.tgz", + "integrity": "sha512-5Di9UC0+8h1L6ZD2d7awM7E/T4uA1fJRlx6zk/NvdCCVEoAnFqvHmCuNeIKoCeIixBX/q8uM+6ycDvF8woqosA==", "dev": true, "requires": { - "kind-of": "^3.0.2" + "hash-base": "^3.1.2", + "inherits": "^2.0.4" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "hash-base": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.2.tgz", + "integrity": "sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "inherits": "^2.0.4", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.1" } + }, + "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==", + "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" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "rxjs-compat": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs-compat/-/rxjs-compat-6.6.7.tgz", + "integrity": "sha512-szN4fK+TqBPOFBcBcsR0g2cmTTUF/vaFEOZNuSdfU8/pGFnNmmn2u8SystYXG1QMrjOPBc6XTKHMVfENDf6hHw==" + }, + "safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true } } }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "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==", + "dev": true + }, + "safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "requires": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "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==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "seek-bzip": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", + "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "commander": "^2.8.1" } }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", - "dev": true, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "requires": { - "through2": "^2.0.3" + "lru-cache": "^6.0.0" } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" - }, - "topojson-client": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", - "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", + "semver-greatest-satisfied-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", "dev": true, "requires": { - "commander": "2" + "sver": "^1.8.3" } }, - "toposort": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", - "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", - "dev": true - }, - "touch": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/touch/-/touch-2.0.2.tgz", - "integrity": "sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A==", + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { - "nopt": "~1.0.10" + "randombytes": "^2.1.0" } }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, "requires": { - "punycode": "^2.1.0" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" } }, - "transform-loader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/transform-loader/-/transform-loader-0.2.4.tgz", - "integrity": "sha1-5ch4d7qW1R0/IlNoWHtG4ibRzsk=", + "set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "requires": { - "loader-utils": "^1.0.2" + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" } }, - "transformation-matrix": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/transformation-matrix/-/transformation-matrix-2.0.5.tgz", - "integrity": "sha512-S6L67Z8V3WEyPm2/zDh3I3bO0OQwv88dh7IY2dIOVBfIZJ4WQGdEKOsh7phTgYkvfAmHRxfOPNt1ixN/zR6D/A==", + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", "dev": true }, - "trash": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/trash/-/trash-6.1.1.tgz", - "integrity": "sha512-4i56lCmz2RG6WZN018hf4L75L5HboaFuKkHx3wDG/ihevI99e0OgFyl8w6G4ioqBm62V4EJqCy5xw3vQSNXU8A==", + "sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", "dev": true, "requires": { - "@stroncium/procfs": "^1.0.0", - "globby": "^7.1.1", - "is-path-inside": "^3.0.2", - "make-dir": "^3.0.0", - "move-file": "^1.1.0", - "p-map": "^3.0.0", - "p-try": "^2.2.0", - "uuid": "^3.3.2", - "xdg-trashdir": "^2.1.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" }, "dependencies": { - "is-path-inside": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", - "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", - "dev": true - }, - "make-dir": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.2.tgz", - "integrity": "sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "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==", "dev": true } } }, - "tree-kill": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", - "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==" - }, - "trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", - "dev": true - }, - "trim-repeated": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", - "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "escape-string-regexp": "^1.0.2" + "kind-of": "^6.0.2" } }, - "trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", - "dev": true - }, - "trim-trailing-lines": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz", - "integrity": "sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q==", - "dev": true - }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "trough": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.4.tgz", - "integrity": "sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q==", - "dev": true - }, - "truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=", + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { - "utf8-byte-length": "^1.0.1" + "shebang-regex": "^1.0.0" } }, - "tryer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", - "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, - "ts-loader": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", - "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", - "dev": true, - "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" - } + "shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, - "ts-mockito": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.5.0.tgz", - "integrity": "sha512-b3qUeMfghRq5k5jw3xNJcnU9RKhqKnRn0k9v9QkN+YpuawrFuMIiGwzFZCpdi5MHy26o7YPnK8gag2awURl3nA==", + "shortid": { + "version": "2.2.17", + "resolved": "https://registry.npmjs.org/shortid/-/shortid-2.2.17.tgz", + "integrity": "sha512-GpbM3gLF1UUXZvQw6MCyulHkWbRseNO4cyBEZresZRorwl1+SLu1ZdqgVtuwqz8mB6RpwPkm541mYSqrKyJSaA==", "dev": true, "requires": { - "lodash": "^4.17.5" + "nanoid": "^3.3.8" } }, - "ts-node": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz", - "integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==", + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "requires": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.6", - "yn": "^3.0.0" - }, - "dependencies": { - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - } + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" } }, - "tsconfig-paths": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.8.0.tgz", - "integrity": "sha512-zZEYFo4sjORK8W58ENkRn9s+HmQFkkwydDG7My5s/fnfr2YYCaiyXe/HBUcIgU8epEKOXwiahOO+KZYjiXlWyQ==", + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "requires": { - "@types/json5": "^0.0.29", - "deepmerge": "^2.0.1", - "json5": "^1.0.1", - "minimist": "^1.2.0", - "strip-bom": "^3.0.0" - }, - "dependencies": { - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - } + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" } }, - "tsconfig-paths-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-S/gOOPOkV8rIL4LurZ1vUdYCVgo15iX9ZMJ6wx6w2OgcpT/G4wMyHB6WM+xheSqGMrWKuxFul+aXpCju3wmj/g==", + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", "dev": true, "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "tsconfig-paths": "^3.4.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" } }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" - }, - "tslint": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.20.1.tgz", - "integrity": "sha512-EcMxhzCFt8k+/UP5r8waCf/lzmeSyVlqxqMEDQE7rWYiQky8KpIBz1JAoYXfROHrPZ1XXd43q8yQnULOLiBRQg==", + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "requires": { - "@babel/code-frame": "^7.0.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^4.0.1", - "glob": "^7.1.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.29.0" - }, - "dependencies": { - "diff": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz", - "integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==", - "dev": true - } + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" } }, - "tslint-config-prettier": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz", - "integrity": "sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg==", + "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 }, - "tslint-eslint-rules": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz", - "integrity": "sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w==", + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", "dev": true, - "requires": { - "doctrine": "0.7.2", - "tslib": "1.9.0", - "tsutils": "^3.0.0" - }, - "dependencies": { - "tslib": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.0.tgz", - "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", - "dev": true - }, - "tsutils": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.14.0.tgz", - "integrity": "sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - } - } + "optional": true }, - "tslint-microsoft-contrib": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/tslint-microsoft-contrib/-/tslint-microsoft-contrib-5.2.1.tgz", - "integrity": "sha512-PDYjvpo0gN9IfMULwKk0KpVOPMhU6cNoT9VwCOLeDl/QS8v8W2yspRpFFuUS7/c5EIH/n8ApMi8TxJAz1tfFUA==", + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", "dev": true, + "optional": true, "requires": { - "tsutils": "^2.27.2 <2.29.0" + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" }, "dependencies": { - "tsutils": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.28.0.tgz", - "integrity": "sha512-bh5nAtW0tuhvOJnx1GLRn5ScraRLICGyJV5wJhtRWOLsxW70Kk5tZtpK3O/hW6LDnqKS9mlUMPZj9fEMJ0gxqA==", + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "optional": true, "requires": { - "tslib": "^1.8.1" + "mimic-response": "^3.1.0" } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "optional": true } } }, - "tslint-plugin-prettier": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslint-plugin-prettier/-/tslint-plugin-prettier-2.1.0.tgz", - "integrity": "sha512-nMCpU+QSpXtydcWXeZF+3ljIbG/K8SHVZwB7K/MtuoQQFXxXN6watqTSBpVXCInuPFvmjiWkhxeMoUW4N0zgSg==", + "sinon": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-18.0.0.tgz", + "integrity": "sha512-+dXDXzD1sBO6HlmZDd7mXZCR/y5ECiEiGCBSGuFD/kZ0bDTofPYc6JaeGmPSF+1j1MejGUWkORbYOLDyvqCWpA==", "dev": true, "requires": { - "eslint-plugin-prettier": "^2.2.0", - "lines-and-columns": "^1.1.6", - "tslib": "^1.7.1" + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.2.0", + "nise": "^6.0.0", + "supports-color": "^7" }, "dependencies": { - "eslint-plugin-prettier": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz", - "integrity": "sha512-CStQYJgALoQBw3FsBzH0VOVDRnJ/ZimUlpLm226U8qgqYJfPOY/CPK6wyRInMxh73HSKg5wyRwdS4BVYYHwokA==", + "diff": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.2.tgz", + "integrity": "sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==", + "dev": true + }, + "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": { - "fast-diff": "^1.1.1", - "jest-docblock": "^21.0.0" + "has-flag": "^4.0.0" } } } }, - "tsscmp": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", - "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", + "sirv": { + "version": "1.0.19", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", + "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", "dev": true, "requires": { - "tslib": "^1.8.1" - } - }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, - "tunnel": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.4.tgz", - "integrity": "sha1-LTeFoVjBdMmhbcLARuxfxfF0IhM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tv4": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz", - "integrity": "sha1-0CDIRvrdUMhVq7JeuuzGj8EPeWM=", - "dev": true - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, - "type": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/type/-/type-1.0.1.tgz", - "integrity": "sha512-MAM5dBMJCJNKs9E7JXo4CXRAansRfG0nlJxW7Wf6GZzSOvH31zClSaHdIMWLehe/EGMBkqeC55rrkaOr5Oo7Nw==" - }, - "type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "requires": { - "prelude-ls": "~1.1.2" + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^1.0.0" } }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "is-plain-obj": "^1.0.0" } }, - "typed-react-markdown": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/typed-react-markdown/-/typed-react-markdown-0.1.0.tgz", - "integrity": "sha1-HDra9CvB8NjGoJsKyAhfNt8KNn8=", + "sort-keys-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", + "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", "dev": true, "requires": { - "@types/react": "^0.14.44" + "sort-keys": "^1.0.0" }, "dependencies": { - "@types/react": { - "version": "0.14.57", - "resolved": "https://registry.npmjs.org/@types/react/-/react-0.14.57.tgz", - "integrity": "sha1-GHioZU+v3R04G4RXKStkM0mMW2I=", - "dev": true + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } } } }, - "typed-rest-client": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.2.0.tgz", - "integrity": "sha512-FrUshzZ1yxH8YwGR29PWWnfksLEILbWJydU7zfIRkyH7kAEzB62uMAl2WY6EyolWpLpVHeJGgQm45/MaruaHpw==", + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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==", "dev": true, "requires": { - "tunnel": "0.0.4", - "underscore": "1.8.3" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "typed-styles": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/typed-styles/-/typed-styles-0.0.7.tgz", - "integrity": "sha512-pzP0PWoZUhsECYjABgCGQlRGL1n7tOHsgwYv3oIiEpJwGhFTuty/YNeduxQYzXXa3Ge5BdT6sHYIQYpl4uJ+5Q==", + "sparkles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", "dev": true }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "requires": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "stack-chain": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", + "integrity": "sha512-D8cWtWVdIe/jBA7v5p5Hwl5yOSOrmZPWDPe2KxQ5UAGD+nxbxU0lKXA4h85Ta6+qgdKVL3vUxsbIZjc1kBG7ug==" + }, + "stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + }, + "stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { - "is-typedarray": "^1.0.0" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, - "typemoq": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typemoq/-/typemoq-2.1.0.tgz", - "integrity": "sha512-DtRNLb7x8yCTv/KHlwes+NI+aGb4Vl1iPC63Hhtcvk1DpxSAZzKWQv0RQFY0jX2Uqj0SDBNl8Na4e6MV6TNDgw==", + "stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", "dev": true, "requires": { - "circular-json": "^0.3.1", - "lodash": "^4.17.4", - "postinstall-build": "^5.0.1" + "streamx": "^2.13.2" } }, - "typescript": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", - "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", + "stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", "dev": true }, - "typescript-char": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/typescript-char/-/typescript-char-0.0.0.tgz", - "integrity": "sha1-VY/tpzfHZaYQtzfu+7F3Xum8jas=" - }, - "typescript-formatter": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/typescript-formatter/-/typescript-formatter-7.2.2.tgz", - "integrity": "sha512-V7vfI9XArVhriOTYHPzMU2WUnm5IMdu9X/CPxs8mIMGxmTBFpDABlbkBka64PZJ9/xgQeRpK8KzzAG4MPzxBDQ==", + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "commandpost": "^1.0.0", - "editorconfig": "^0.15.0" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, - "typestyle": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typestyle/-/typestyle-2.1.0.tgz", - "integrity": "sha512-6uCYPdG4xWLeEcl9O0GtNFnNGhami+irKiLsXSuvWHC/aTS7wdj49WeikWAKN+xHN3b1hm+9v0svwwgSBhCsNA==", + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "streamx": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "requires": { - "csstype": "2.6.9", - "free-style": "3.1.0" - }, - "dependencies": { - "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==", - "dev": true - } + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" } }, - "ua-parser-js": { - "version": "0.7.20", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.20.tgz", - "integrity": "sha512-8OaIKfzL5cpx8eCMAhhvTlft8GYF8b2eQr6JkCyVdrgjcytyOmPCXrqXFcUnhonRpLlh5yxEZVohm6mzaowUOw==", - "dev": true - }, - "uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "dev": true }, - "uglify-js": { - "version": "3.4.10", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", - "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "commander": "~2.19.0", - "source-map": "~0.6.1" + "safe-buffer": "~5.2.0" }, "dependencies": { - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "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==", "dev": true } } }, - "uint64be": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uint64be/-/uint64be-1.0.1.tgz", - "integrity": "sha1-H3FUIC8qG4rzU4cd2mUb80zpPpU=" - }, - "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "buffer": "^5.2.1", - "through": "^2.3.8" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", - "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=" - }, - "undertaker": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.2.1.tgz", - "integrity": "sha512-71WxIzDkgYk9ZS+spIB8iZXchFhAdEo2YU8xYqBYJ39DIUIqziK78ftm26eecoIY49X0J2MLhG4hr18Yp6/CMA==", + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true - }, - "unherit": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.2.tgz", - "integrity": "sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w==", + "string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", "dev": true, "requires": { - "inherits": "^2.0.1", - "xtend": "^4.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" } }, - "unicode": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/unicode/-/unicode-10.0.0.tgz", - "integrity": "sha1-5dUcHbk7bHGguHngsMSvfm/faI4=" - }, - "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", - "dev": true - }, - "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" } }, - "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", - "dev": true - }, - "unicode-properties": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.3.1.tgz", - "integrity": "sha512-nIV3Tf3LcUEZttY/2g4ZJtGXhWwSkuLL+rCu0DIAMbjyVPj+8j5gNVz4T/sVbnQybIsd5SFGkPKg/756OY6jlA==", + "string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, "requires": { - "base64-js": "^1.3.0", - "unicode-trie": "^2.0.0" - }, - "dependencies": { - "unicode-trie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", - "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", - "requires": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" - } - } + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" } }, - "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", - "dev": true + "string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + } }, - "unicode-trie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-0.3.1.tgz", - "integrity": "sha1-1nHd3YkQGgi6w3tqUWEBBgIFIIU=", + "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": { - "pako": "^0.2.5", - "tiny-inflate": "^1.0.0" + "ansi-regex": "^5.0.1" } }, - "unified": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", - "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-plain-obj": "^1.1.0", - "trough": "^1.0.0", - "vfile": "^2.0.0", - "x-is-string": "^0.1.0" + "ansi-regex": "^5.0.1" } }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "strip-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "is-natural-number": "^4.0.1" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "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 }, - "uniqid": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/uniqid/-/uniqid-5.0.3.tgz", - "integrity": "sha512-R2qx3X/LYWSdGRaluio4dYrPXAJACTqyUjuyXHoJLBUOIfmMcnYOyY2d6Y4clZcIz5lK6ZaI0Zzmm0cPfsIqzQ==", + "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 }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "strip-outer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", + "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, "requires": { - "unique-slug": "^2.0.0" + "escape-string-regexp": "^1.0.2" } }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "sudo-prompt": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + }, + "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": { - "imurmurhash": "^0.1.4" + "has-flag": "^3.0.0" } }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "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==" + }, + "sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", "dev": true, "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true + } + } + }, + "tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true + }, + "tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "optional": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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, + "optional": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "optional": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + } } }, - "unist-util-is": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", - "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", - "dev": true - }, - "unist-util-remove-position": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz", - "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==", + "tar-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", + "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, "requires": { - "unist-util-visit": "^1.1.0" + "bl": "^1.0.0", + "buffer-alloc": "^1.2.0", + "end-of-stream": "^1.0.0", + "fs-constants": "^1.0.0", + "readable-stream": "^2.3.0", + "to-buffer": "^1.1.1", + "xtend": "^4.0.0" } }, - "unist-util-stringify-position": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", - "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", - "dev": true + "tas-client": { + "version": "0.2.33", + "resolved": "https://registry.npmjs.org/tas-client/-/tas-client-0.2.33.tgz", + "integrity": "sha512-V+uqV66BOQnWxvI6HjDnE4VkInmYZUQ4dgB7gzaDyFyFSK1i1nF/j7DpS9UbQAgV9NaF1XpcyuavnM1qOeiEIg==" }, - "unist-util-visit": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", - "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", "dev": true, "requires": { - "unist-util-visit-parents": "^2.0.0" - }, - "dependencies": { - "unist-util-visit-parents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", - "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", - "dev": true, - "requires": { - "unist-util-is": "^3.0.0" - } - } + "streamx": "^2.12.5" } }, - "unist-util-visit-parents": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz", - "integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q==", - "dev": true - }, - "units-css": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/units-css/-/units-css-0.4.0.tgz", - "integrity": "sha1-1iKGU6UZg9fBb/KPi53Dsf/tOgc=", + "terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "requires": { - "isnumeric": "^0.2.0", - "viewport-dimensions": "^0.2.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" } }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "dev": true - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "terser-webpack-plugin": { + "version": "5.3.17", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.17.tgz", + "integrity": "sha512-YR7PtUp6GMU91BgSJmlaX/rS2lGDbAF7D+Wtq7hRO+MiljNmodYvqslzCFiYVAgW+Qoaaia/QUIP4lGXufjdZw==", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" }, "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" } }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true + }, + "schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } } } }, - "untildify": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-3.0.3.tgz", - "integrity": "sha512-iSk/J8efr8uPT/Z4eSUywnqyrQU7DSdMfdqK4iWEaUVVmcP5JcnpRqmVMwcwcnmI1ATFNgC5V90u09tBynNFKA==" - }, - "upath": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.2.tgz", - "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", - "dev": true - }, - "upper-case": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", - "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", - "dev": true - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", "dev": true, "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true + "minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } } } }, - "url-join": { + "text-decoder": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-1.1.0.tgz", - "integrity": "sha1-dBxsL0WWxIMNZxhGCSDQySIC3Hg=", - "dev": true - }, - "url-loader": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", - "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", "dev": true, "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" - }, - "dependencies": { - "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==", - "dev": true - } - } - }, - "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", - "requires": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "^2.0.0" + "b4a": "^1.6.4" } }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", - "dev": true - }, - "urlgrey": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=" - }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "inherits": "2.0.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - } + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "util.promisify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", - "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, - "utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", - "dev": true - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, - "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "timed-out": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", + "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", "dev": true }, - "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", + "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": { - "homedir-polyfill": "^1.0.1" + "setimmediate": "^1.0.4" } }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==" + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" } }, - "validator": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz", - "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA==" - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "vega": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/vega/-/vega-5.7.3.tgz", - "integrity": "sha512-HCg5qgykM9drXPpjo9eJB9VWa/vHoDr5lXkjdk5iZBZI3fTajvAF/oFw6nM1l5P+eWibNlg9TFXn5vF4438uJw==", - "dev": true, - "requires": { - "vega-crossfilter": "^4.0.1", - "vega-dataflow": "^5.4.1", - "vega-encode": "^4.4.1", - "vega-event-selector": "^2.0.1", - "vega-expression": "^2.6.2", - "vega-force": "^4.0.3", - "vega-functions": "^5.4.1", - "vega-geo": "^4.1.0", - "vega-hierarchy": "^4.0.3", - "vega-loader": "^4.1.2", - "vega-parser": "^5.10.1", - "vega-projection": "^1.3.0", - "vega-regression": "^1.0.1", - "vega-runtime": "^5.0.2", - "vega-scale": "^4.1.3", - "vega-scenegraph": "^4.3.1", - "vega-statistics": "^1.6.1", - "vega-transforms": "^4.4.3", - "vega-typings": "^0.10.2", - "vega-util": "^1.12.0", - "vega-view": "^5.3.1", - "vega-view-transforms": "^4.4.1", - "vega-voronoi": "^4.1.1", - "vega-wordcloud": "^4.0.2" - } - }, - "vega-canvas": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.1.tgz", - "integrity": "sha512-k/S3EPeJ37D7fYDhv4sEg7fNWVpLheQY7flfLyAmJU7aSwCMgw8cZJi0CKHchJeculssfH+41NCqvRB1QtaJnw==", + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", "dev": true }, - "vega-crossfilter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.0.1.tgz", - "integrity": "sha512-wLNS4JzKaOLj8EAzI/v8XBJjUWMRWYSu6EeQF4o9Opq/78u87Ol9Lc5I27UHsww5dNNH/tHubAV4QPIXnGOp5Q==", + "to-buffer": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.2.tgz", + "integrity": "sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==", "dev": true, "requires": { - "d3-array": "^2.0.3", - "vega-dataflow": "^5.1.0", - "vega-util": "^1.8.0" + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" }, "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "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==", "dev": true } } }, - "vega-dataflow": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.4.1.tgz", - "integrity": "sha512-NZASrIGel2ZD+HiJsozMPO7qNB3INLFWQez6KI+gPpKQIhsz7jWzG/TBK57A8NOLJYPc6VBLiygCmdJbr5E+sA==", + "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==", "dev": true, "requires": { - "vega-loader": "^4.0.0", - "vega-util": "^1.11.0" + "is-number": "^7.0.0" } }, - "vega-embed": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/vega-embed/-/vega-embed-4.2.5.tgz", - "integrity": "sha512-3iUv5oU5y/sa7jC+shw79hPmHMpWMhMTGSovtl3+O98hLq7LQgordWKgoxKcqwhSIHMIgj+cInTNPWM4kru7Ug==", + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", "dev": true, "requires": { - "d3-selection": "^1.4.0", - "json-stringify-pretty-compact": "^2.0.0", - "semver": "^6.3.0", - "vega-schema-url-parser": "^1.1.0", - "vega-themes": "^2.3.2", - "vega-tooltip": "^0.18.1" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } + "through2": "^2.0.3" } }, - "vega-encode": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.4.1.tgz", - "integrity": "sha512-PtfH+k7Hie7T0ywrg/nI/rhMnpNr8Rg627XR8pzSrM1CbDoMbfFmQsw33tXUT8k/8u/dPLR1klgAtCHUCh7jjA==", + "totalist": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "dev": true + }, + "trim-repeated": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", + "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", "dev": true, "requires": { - "d3-array": "^2.3.1", - "d3-format": "^1.4.1", - "d3-interpolate": "^1.3.2", - "d3-time-format": "^2.1.3", - "vega-dataflow": "^5.4.0", - "vega-scale": "^4.1.2", - "vega-util": "^1.11.2" - }, - "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", - "dev": true - }, - "d3-format": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.1.tgz", - "integrity": "sha512-TUswGe6hfguUX1CtKxyG2nymO+1lyThbkS1ifLX0Sr+dOQtAD5gkrffpHnx+yHNKUZ0Bmg5T4AjUQwugPDrm0g==", - "dev": true - } + "escape-string-regexp": "^1.0.2" } }, - "vega-event-selector": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-2.0.1.tgz", - "integrity": "sha512-FGU1PefYhW9An6zVs6TE5f/XGYsIispxFErG/p9KThxL22IC90WVZzMQXKN9M8OcARq5OyWjHg3qa9Qp/Z6OJw==", - "dev": true - }, - "vega-expression": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-2.6.2.tgz", - "integrity": "sha512-vh8GVkAL/KtsgcdrdKdEnysZn/InIuRrkF7U+CG1eAmupMucPY/Rpu0nCdYb4CLC/xNRHx/NMFidLztQUjZJQg==", + "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": { - "vega-util": "^1.11.0" - } + "requires": {} }, - "vega-force": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.0.3.tgz", - "integrity": "sha512-4stItN4jD9H1CENaCz4jXRNS1Bi9cozMOUjX2824FeJENi2RZSiAZAaGbscgerZQ/jbNcOHD8PHpC2pWldEvGA==", + "ts-loader": { + "version": "9.2.8", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.8.tgz", + "integrity": "sha512-gxSak7IHUuRtwKf3FIPSW1VpZcqF9+MBrHOvBp9cjHh+525SjtCIJKVGjRKIAfxBwDGDGCFF00rTfzB1quxdSw==", "dev": true, "requires": { - "d3-force": "^2.0.1", - "vega-dataflow": "^5.4.0", - "vega-util": "^1.11.0" + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" }, "dependencies": { - "d3-force": { + "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/d3-force/-/d3-force-2.0.1.tgz", - "integrity": "sha512-zh73/N6+MElRojiUG7vmn+3vltaKon7iD5vB/7r9nUaBeftXMzRo5IWEG63DLBCto4/8vr9i3m9lwr1OTJNiCg==", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "color-name": "~1.1.4" } - } - } - }, - "vega-functions": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.4.1.tgz", - "integrity": "sha512-f/smrE+ujMZgSWiTNVmdSNu3npDZMrHGc+MjjQ2pjJixcQRKTz1SbnmpogFhCgvKa6qBSw7hrZX8/TKGh4nuiA==", - "dev": true, - "requires": { - "d3-array": "^2.3.2", - "d3-color": "^1.4.0", - "d3-format": "^1.4.1", - "d3-geo": "^1.11.6", - "d3-time-format": "^2.1.3", - "vega-dataflow": "^5.4.1", - "vega-expression": "^2.6.2", - "vega-scale": "^4.1.3", - "vega-scenegraph": "^4.3.1", - "vega-selections": "^5.0.1", - "vega-statistics": "^1.6.1", - "vega-util": "^1.12.0" - }, - "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", - "dev": true }, - "d3-color": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.0.tgz", - "integrity": "sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg==", + "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 }, - "d3-format": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.1.tgz", - "integrity": "sha512-TUswGe6hfguUX1CtKxyG2nymO+1lyThbkS1ifLX0Sr+dOQtAD5gkrffpHnx+yHNKUZ0Bmg5T4AjUQwugPDrm0g==", + "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" + } } } }, - "vega-geo": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.1.0.tgz", - "integrity": "sha512-3xo0hpmfVdhbdB0MWAppBu/DGTHn7+4g+psUVBu9LRii4XUNlmi+YmJzO4Ph6tv2zxrfZfIKMXid9+V5MzWn+g==", + "ts-mockito": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ts-mockito/-/ts-mockito-2.6.1.tgz", + "integrity": "sha512-qU9m/oEBQrKq5hwfbJ7MgmVN5Gu6lFnIGWvpxSjrqq6YYEVv+RwVFWySbZMBgazsWqv6ctAyVBpo9TmAxnOEKw==", "dev": true, "requires": { - "d3-array": "^2.3.1", - "d3-contour": "^1.3.2", - "d3-geo": "^1.11.6", - "vega-dataflow": "^5.1.1", - "vega-projection": "^1.3.0", - "vega-util": "^1.11.2" - }, - "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", - "dev": true - } + "lodash": "^4.17.5" } }, - "vega-hierarchy": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.0.3.tgz", - "integrity": "sha512-9wNe+KyKqZW1S4++jCC38HuAhZbqNhfY7gOvwiMLjsp65tMtRETrtvYfHkULClm3UokUIX54etAXREAGW7znbw==", - "dev": true, - "requires": { - "d3-hierarchy": "^1.1.8", - "vega-dataflow": "^5.4.0", - "vega-util": "^1.11.0" + "ts-node": { + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz", + "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "0.7.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.0", + "yn": "3.1.1" } }, - "vega-lite": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-3.4.0.tgz", - "integrity": "sha512-RJg9uBNh5g0hA8xTzAcALUfNx0cEq7E7xx+vxPEGSMgI8z+A5KlE9u4jUx6nKu7Mjg1qZO8WOyWCmBS1kdFWPg==", + "tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "requires": { - "@types/clone": "~0.1.30", - "@types/fast-json-stable-stringify": "^2.0.0", - "clone": "~2.1.2", - "fast-deep-equal": "~2.0.1", - "fast-json-stable-stringify": "~2.0.0", - "json-stringify-pretty-compact": "~2.0.0", - "tslib": "~1.10.0", - "vega-event-selector": "~2.0.0", - "vega-expression": "~2.6.0", - "vega-typings": "0.7.2", - "vega-util": "~1.10.0", - "yargs": "~13.3.0" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "dependencies": { - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "minimist": "^1.2.0" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + } + } + }, + "tsconfig-paths-webpack-plugin": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths-webpack-plugin/-/tsconfig-paths-webpack-plugin-3.5.2.tgz", + "integrity": "sha512-EhnfjHbzm5IYI9YPNVIxx1moxMI4bpHD2e0zTXeDNQcwjjRaGepP7IhTHJkyDBG0CAOoxRfe7jCG630Ou+C6Pw==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.7.0", + "tsconfig-paths": "^3.9.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": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "color-convert": "^2.0.1" } }, - "vega-typings": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-0.7.2.tgz", - "integrity": "sha512-BReB2qRERA/Ke+QoxKDQ7fES25A9Q3qKRm1CJxwvpLGhAl4k5cGDORx6yW+J3rFHMzpJlmdRM+kb489EuphxZQ==", + "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": { - "vega-util": "^1.10.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "vega-util": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.10.0.tgz", - "integrity": "sha512-fTGnTG7FhtTG9tiYDL3k5s8YHqB71Ml5+aC9B7eaBygeB8GKXBrcbTXLOzoCRxT3Jr5cRhr99PMBu0AkqmhBog==", - "dev": true - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "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": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "color-name": "~1.1.4" } }, - "yargs": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", - "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.1" - } + "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 }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "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": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "has-flag": "^4.0.0" } } } }, - "vega-loader": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.1.2.tgz", - "integrity": "sha512-Zuxvl0K3jmLWyns+8ACajtp7oGfV+M7IeSQybq3xf7BvlGca2h8XA3qiBUXzYULkwZ4PstB56XoJ0tur2Rgs6A==", + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", "dev": true, + "optional": true, "requires": { - "d3-dsv": "^1.1.1", - "d3-time-format": "^2.1.3", - "node-fetch": "^2.6.0", - "topojson-client": "^3.0.1", - "vega-util": "^1.11.0" - }, - "dependencies": { - "d3-dsv": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.1.1.tgz", - "integrity": "sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw==", - "dev": true, - "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - } - }, - "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==", - "dev": true - } + "safe-buffer": "^5.0.1" } }, - "vega-parser": { - "version": "5.10.1", - "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-5.10.1.tgz", - "integrity": "sha512-NtjFhuXEGlc6ZOc+LeG7Gecmwal/UPu8WDI5wCjBWDogGgpeuRfQQ1haLz2KMsZhq5e2aUmk7iTuH/CuUoeGEA==", + "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": { - "vega-dataflow": "^5.4.1", - "vega-event-selector": "^2.0.1", - "vega-expression": "^2.6.2", - "vega-functions": "^5.4.1", - "vega-scale": "^4.1.3", - "vega-util": "^1.12.0" + "prelude-ls": "^1.2.1" } }, - "vega-projection": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.3.0.tgz", - "integrity": "sha512-BFOc/XSVVW96WIAAyiUcppCeegniibiKGX0OLbGpQ5WIbeDHsbCXqnkeBpD5wsjvPXaiQRHTZ0PZ8VvCoCQV+g==", + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "requires": { - "d3-geo": "^1.11.6" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" } }, - "vega-regression": { + "typed-array-byte-length": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.0.1.tgz", - "integrity": "sha512-eeQnLccWHAs2rovu2x3G50reF3Die9QoUGy/dMAO6sbDDA7B5s5qW3uq1NNnG93l3Ch84lO71qytxDBTdaQThA==", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, "requires": { - "d3-array": "^2.3.1", - "vega-dataflow": "^5.2.1", - "vega-statistics": "^1.4.0", - "vega-util": "^1.11.0" - }, - "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", - "dev": true - } + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, - "vega-runtime": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-5.0.2.tgz", - "integrity": "sha512-Cuv+RY6kprH+vtNERg6xP4dgcdYGD2ZnxPxJNEtGi7dmtQQTBa1s7jQ0VDXTolsO6lKJ3B7np2GzKJYwevgj1A==", + "typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dev": true, "requires": { - "vega-dataflow": "^5.1.1", - "vega-util": "^1.11.0" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" } }, - "vega-scale": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-4.1.3.tgz", - "integrity": "sha512-hpLrEFntN18e+eRAxa8b8malSbNVQyziKmUMGI1Za8ZB64cYj+A/G87ePE0ExSymfrvc/Xulh4VQZNxkPJll4w==", + "typed-array-length": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", + "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", "dev": true, "requires": { - "d3-array": "^2.3.2", - "d3-interpolate": "^1.3.2", - "d3-scale": "^3.1.0", - "d3-time": "^1.1.0", - "vega-util": "^1.11.0" - }, - "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", - "dev": true - }, - "d3-scale": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.0.tgz", - "integrity": "sha512-1RnLYPmH3f2E96hSsCr3ok066myuAxoH3+pnlJAedeMOp7jeW7A+GZHAyVWWaStfphyPEBiDoLFA9zl+DcnC2Q==", - "dev": true, - "requires": { - "d3-array": "1.2.0 - 2", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", - "dev": true - } + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + } + }, + "typed-rest-client": { + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.11.tgz", + "integrity": "sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==", + "dev": true, + "requires": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "typemoq": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typemoq/-/typemoq-2.1.0.tgz", + "integrity": "sha512-DtRNLb7x8yCTv/KHlwes+NI+aGb4Vl1iPC63Hhtcvk1DpxSAZzKWQv0RQFY0jX2Uqj0SDBNl8Na4e6MV6TNDgw==", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "lodash": "^4.17.4", + "postinstall-build": "^5.0.1" + } + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "uint64be": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/uint64be/-/uint64be-3.0.0.tgz", + "integrity": "sha512-mliiCSrsE29aNBI7O9W5gGv6WmA9kBR8PtTt6Apaxns076IRdYrrtFhXHEWMj5CSum3U7cv7/pi4xmi4XsIOqg==" + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dev": true, + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" } }, - "vega-scenegraph": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.3.1.tgz", - "integrity": "sha512-+hzfFFvvZKgGg7L7+RlRMY/II35/Ty8lw7CiEXRyKA2jxsp3eIWuppiaPgB0IQeVooJh6z4UNcKbNq3SUAvgDA==", + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, + "undertaker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", "dev": true, "requires": { - "d3-path": "^1.0.8", - "d3-shape": "^1.3.5", - "vega-canvas": "^1.2.1", - "vega-loader": "^4.1.2", - "vega-util": "^1.11.2" + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" }, "dependencies": { - "d3-path": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.8.tgz", - "integrity": "sha512-J6EfUNwcMQ+aM5YPOB8ZbgAZu6wc82f/0WFxrxwV6Ll8wBwLaHLKCqQ5Imub02JriCVVdPjgI+6P3a4EWJCxAg==", - "dev": true + "fast-levenshtein": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, + "requires": { + "fastest-levenshtein": "^1.0.7" + } } } }, - "vega-schema-url-parser": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-1.1.0.tgz", - "integrity": "sha512-Tc85J2ofMZZOsxiqDM9sbvfsa+Vdo3GwNLjEEsPOsCDeYqsUHKAlc1IpbbhPLZ6jusyM9Lk0e1izF64GGklFDg==", + "undertaker-registry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "dev": true }, - "vega-selections": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.0.1.tgz", - "integrity": "sha512-cSqsH8Jg2QirQVLRfXfK0Odz+LOMo8iDtL9NANkv6/JehbqXAof0TfhgLu5gmCgzL3z+FUmzj2C4PizQGgkTtw==", + "undici-types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true + }, + "unicode": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/unicode/-/unicode-14.0.0.tgz", + "integrity": "sha512-BjinxTXkbm9Jomp/YBTMGusr4fxIG67fNGShHIRAL16Ur2GJTq2xvLi+sxuiJmInCmwqqev2BCFKyvbfp/yAkg==" + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, "requires": { - "vega-expression": "^2.6.1", - "vega-util": "^1.11.0" + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" } }, - "vega-statistics": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.6.1.tgz", - "integrity": "sha512-EX+IkELoYLnygcUXcFhcdWwzmalHzKLvSVTx9deGMyPOsCZRd0Lwu/SGwrIctoYa5r9DBR0/bGxQAC0t/UoSdA==", + "update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "requires": { - "d3-array": "^2.3.2" - }, - "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", - "dev": true - } + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, - "vega-themes": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/vega-themes/-/vega-themes-2.5.0.tgz", - "integrity": "sha512-mkyYhcRhmMBWLfvCBPTVx0S/OnxeIfVY/TmFfYP5sPdW8X1kMyHtLI34bMhzosPrkhNyHsC8FNHJyU/dOQnX4A==", - "dev": true - }, - "vega-tooltip": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/vega-tooltip/-/vega-tooltip-0.18.1.tgz", - "integrity": "sha512-g/i69QLTVhGeHNT8k646Qr8SFss9kbnt6XmU9ujjqgaW5B/p1FPUrMzFh/88rMF704EHYyBH7Aj3t0ds1cCHbQ==", + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "vega-util": "^1.10.0" + "punycode": "^2.1.0" } }, - "vega-transforms": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.4.3.tgz", - "integrity": "sha512-8GxMm1CecRzNG89zr4JroOfPsWCkb9lWL5owSBsB+AalyJaFjxYwKuCM6L2OsAKID3su3aeQ0oSBQTR3v0nqPA==", + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "dev": true, "requires": { - "d3-array": "^2.3.2", - "vega-dataflow": "^5.4.1", - "vega-statistics": "^1.6.1", - "vega-util": "^1.12.0" + "punycode": "1.3.2", + "querystring": "0.2.0" }, "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true } } }, - "vega-typings": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-0.10.2.tgz", - "integrity": "sha512-W/V6oyoBizlXt0FJnuY5/Y46/dsmfcPTxRaUCtFBf0nyoWBsmO66EYj24xCHJ6pgfHEEbBRLPfrfrvlKiRPaMQ==", + "url-join": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", + "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", + "dev": true + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", "dev": true, "requires": { - "vega-util": "^1.11.0" + "prepend-http": "^2.0.0" } }, - "vega-util": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.12.0.tgz", - "integrity": "sha512-eN1PAQVDyEOcwild2Fk1gbkzkqgDHNujG2/akYRtBzkhtz2EttrVIDwBkWqV/Q+VvEINEksb7TI3Wv7qVQFR5g==", + "url-to-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", + "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", "dev": true }, - "vega-view": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.3.1.tgz", - "integrity": "sha512-pKbpmR1uz9YOsqocx6KWEHD1EwwpOVIfRH6h8g5xQLiUQP37bohfKZ2vL05MQCupXN2dNYdp51iyETbMJMj7nQ==", + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", "dev": true, "requires": { - "d3-array": "^2.3.1", - "d3-timer": "^1.0.9", - "vega-dataflow": "^5.2.1", - "vega-functions": "^5.3.1", - "vega-runtime": "^5.0.1", - "vega-scenegraph": "^4.2.0", - "vega-util": "^1.11.0" + "inherits": "2.0.3" }, "dependencies": { - "d3-array": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.3.3.tgz", - "integrity": "sha512-syv3wp0U5aB6toP2zb2OdBkhTy1MWDsCAaYk6OXJZv+G4u7bSWEmYgxLoFyc88RQUhZYGCebW9a9UD1gFi5+MQ==", + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } }, - "vega-view-transforms": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.4.1.tgz", - "integrity": "sha512-BgjGsHDLHGTN2FgVRcepuvAcKnMUUtXZVemmJHPrY4LI5iJiCS9+HkZPVcVWD1+vheSNXMmZV7Skn7qn7zAcRg==", - "dev": true, - "requires": { - "vega-dataflow": "^5.1.1", - "vega-scenegraph": "^4.3.0", - "vega-util": "^1.11.2" - } - }, - "vega-voronoi": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.1.1.tgz", - "integrity": "sha512-agLmr+UGxJs5KB9D8GeZqxgeWWGoER/eVHPcFFPgVuoNBsrqf2bdoltmIkRnpiRsQnGCibGixhFEDCc9GGNAww==", - "dev": true, - "requires": { - "d3-delaunay": "^5.1.3", - "vega-dataflow": "^5.1.1", - "vega-util": "^1.11.0" - } - }, - "vega-wordcloud": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.0.2.tgz", - "integrity": "sha512-nV9bRKjRGcmcQV5wXvOvWes4T5937t3RF+Rm1d03YVAzZpOcVKk9uBuVSeFYBLX2XcDBVe4HK54qDoOTFftHMw==", - "dev": true, - "requires": { - "vega-canvas": "^1.2.0", - "vega-dataflow": "^5.1.1", - "vega-scale": "^4.0.0", - "vega-statistics": "^1.2.5", - "vega-util": "^1.8.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, - "vfile": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", - "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", - "dev": true, - "requires": { - "is-buffer": "^1.1.4", - "replace-ext": "1.0.0", - "unist-util-stringify-position": "^1.0.0", - "vfile-message": "^1.0.0" - } + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, - "vfile-location": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.5.tgz", - "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==", + "v8-compile-cache-lib": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.0.tgz", + "integrity": "sha512-mpSYqfsFvASnSn5qMiwrr4VKfumbPyONLCOPmsR3A6pTY/r0+tSaVbgPWSAIuzbk3lCTa+FForeTiO+wBQGkjA==", "dev": true }, - "vfile-message": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", - "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", - "dev": true, - "requires": { - "unist-util-stringify-position": "^1.1.1" - } + "v8flags": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", + "dev": true }, - "viewport-dimensions": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/viewport-dimensions/-/viewport-dimensions-0.2.0.tgz", - "integrity": "sha1-3nQHR9tTh/0XJfUXXpG6x2r982w=", + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", "dev": true }, "vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, "requires": { "clone": "^2.1.1", @@ -24383,13 +26360,68 @@ "cloneable-readable": "^1.0.0", "remove-trailing-separator": "^1.0.1", "replace-ext": "^1.0.0" + } + }, + "vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, + "requires": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" }, "dependencies": { - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "requires": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "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" + } + }, + "replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", "dev": true + }, + "vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "requires": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + } } } }, @@ -24416,38 +26448,6 @@ "value-or-function": "^3.0.0", "vinyl": "^2.0.0", "vinyl-sourcemap": "^1.1.0" - }, - "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } } }, "vinyl-sourcemap": { @@ -24456,545 +26456,289 @@ "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", "dev": true, "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "viz-annotation": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/viz-annotation/-/viz-annotation-0.0.3.tgz", - "integrity": "sha512-kkZ+mZHx+zfAZhBuA/PGzA7ZpKUZFjtgBqVcbPfCrOIrHjERcHyrNhxYfx1ZZu9uyZLO0i/qcoMOtY5HpavSlg==", - "dev": true, - "requires": { - "d3-shape": "~1.0.4" - }, - "dependencies": { - "d3-shape": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.0.6.tgz", - "integrity": "sha1-sJ4wXPDHxrmpjJDmtC9i2sS8/Vs=", - "dev": true, - "requires": { - "d3-path": "1" - } - } - } - }, - "vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==" - }, - "vm-browserify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.0.tgz", - "integrity": "sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw==", - "dev": true - }, - "vsce": { - "version": "1.65.0", - "resolved": "https://registry.npmjs.org/vsce/-/vsce-1.65.0.tgz", - "integrity": "sha512-1bGyeoaxjhNVz9fVAqUzGWc1e5CxsxZFpVSnS/anRVyZju0y4DJCPi685WkBsRYU/lfp3AI1smpatuSfb2Lllg==", - "dev": true, - "requires": { - "azure-devops-node-api": "^7.2.0", - "chalk": "^2.4.2", - "cheerio": "^1.0.0-rc.1", - "commander": "^2.8.1", - "denodeify": "^1.2.1", - "didyoumean": "^1.2.1", - "glob": "^7.0.6", - "lodash": "^4.17.10", - "markdown-it": "^8.3.1", - "mime": "^1.3.4", - "minimatch": "^3.0.3", - "osenv": "^0.1.3", - "parse-semver": "^1.1.1", - "read": "^1.0.7", - "semver": "^5.1.0", - "tmp": "0.0.29", - "typed-rest-client": "1.2.0", - "url-join": "^1.1.0", - "yauzl": "^2.3.1", - "yazl": "^2.2.2" - } - }, - "vscode-debugadapter": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter/-/vscode-debugadapter-1.35.0.tgz", - "integrity": "sha512-Au90Iowj6TuD5uDMaTnxOjl/9hQN0Yoky1TV1Cjjr7jPdxTQpALBRW09Y2LzkIXUVICXlAqxWL9zL8BpzI30jg==", - "requires": { - "mkdirp": "^0.5.1", - "vscode-debugprotocol": "1.35.0" - } - }, - "vscode-debugadapter-testsupport": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/vscode-debugadapter-testsupport/-/vscode-debugadapter-testsupport-1.35.0.tgz", - "integrity": "sha512-4emLt6JOk4iKqC2aWNJupOtrK6JwYAZ6KppqvKASN6B1s063VoqI18QhUB1CeoKwNaN1LIG3VPv2xM8HKOjyDA==", - "dev": true, - "requires": { - "vscode-debugprotocol": "1.35.0" - } - }, - "vscode-debugprotocol": { - "version": "1.35.0", - "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.35.0.tgz", - "integrity": "sha512-+OMm11R1bGYbpIJ5eQIkwoDGFF4GvBz3Ztl6/VM+/RNNb2Gjk2c0Ku+oMmfhlTmTlPCpgHBsH4JqVCbUYhu5bA==" - }, - "vscode-extension-telemetry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.1.0.tgz", - "integrity": "sha512-WVCnP+uLxlqB6UD98yQNV47mR5Rf79LFxpuZhSPhEf0Sb4tPZed3a63n003/dchhOwyCTCBuNN4n8XKJkLEI1Q==", - "requires": { - "applicationinsights": "1.0.6" - } - }, - "vscode-jsonrpc": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.1.tgz", - "integrity": "sha512-JvONPptw3GAQGXlVV2utDcHx0BiY34FupW/kI6mZ5x06ER5DdPG/tXWMVHjTNULF5uKPOUUD0SaXg5QaubJL0A==" - }, - "vscode-languageclient": { - "version": "6.2.0-next.2", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.2.0-next.2.tgz", - "integrity": "sha512-RqOrj+OCZmiMcLgmQSx581O+3rHb/AIFpEL+yoBcqFkqfIwMkoowCChEJGwVe/I8FeEphZ4dzlMm0MPW+p/DNA==", - "requires": { - "semver": "^6.3.0", - "vscode-languageserver-protocol": "3.16.0-next.2" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "vscode-languageserver": { - "version": "6.2.0-next.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-6.2.0-next.2.tgz", - "integrity": "sha512-UCXULa/RmT2zxcb6auNezl9ZIPwYHS15+a0XzybrpT2+xA0RbHEYQCsIQkTRYjGv8cm3yS9iPJMmxLilP+y1Xw==", - "requires": { - "vscode-languageserver-protocol": "3.16.0-next.2" - } - }, - "vscode-languageserver-protocol": { - "version": "3.16.0-next.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0-next.2.tgz", - "integrity": "sha512-atmkGT/W6tF0cx4SaWFYtFs2UeSeC28RPiap9myv2YZTaTCFvTBEPNWrU5QRKfkyM0tbgtGo6T3UCQ8tkDpjzA==", - "requires": { - "vscode-jsonrpc": "5.1.0-next.1", - "vscode-languageserver-types": "3.16.0-next.1" - }, - "dependencies": { - "vscode-jsonrpc": { - "version": "5.1.0-next.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.1.0-next.1.tgz", - "integrity": "sha512-mwLDojZkbmpizSJSmp690oa9FB9jig18SIDGZeBCvFc2/LYSRvMm/WwWtMBJuJ1MfFh7rZXfQige4Uje5Z9NzA==" - } - } - }, - "vscode-languageserver-types": { - "version": "3.16.0-next.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0-next.1.tgz", - "integrity": "sha512-tZFUSbyjUcrh+qQf13ALX4QDdOfDX0cVaBFgy7ktJ0VwS7AW/yRKgGPSxVqqP9OCMNPdqP57O5q47w2pEwfaUg==" - }, - "vscode-test": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.2.3.tgz", - "integrity": "sha512-mKRTNso33NaUULiPBFg6zRjyntjcCpIgkrogyPQuKlvoQREQR8jLKN5UD4L5rkTSD+oBhcKtaLR2/g34FexURw==", - "dev": true, - "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.4", - "rimraf": "^2.6.3" + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" }, "dependencies": { - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "glob": "^7.1.3" + "remove-trailing-separator": "^1.0.1" } } } }, - "vsls": { - "version": "0.3.1291", - "resolved": "https://registry.npmjs.org/vsls/-/vsls-0.3.1291.tgz", - "integrity": "sha512-8yJPN9p7k+XYyczOVtQmpun4K1CRDsw/hdnIzT/c40r5bIkpptfsBlHmmLemoIV+CAHvrTLdWKEf5OtRvdcn9A==" + "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 }, - "w3c-hr-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz", - "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", - "dev": true, + "vscode-debugprotocol": { + "version": "1.35.0", + "resolved": "https://registry.npmjs.org/vscode-debugprotocol/-/vscode-debugprotocol-1.35.0.tgz", + "integrity": "sha512-+OMm11R1bGYbpIJ5eQIkwoDGFF4GvBz3Ztl6/VM+/RNNb2Gjk2c0Ku+oMmfhlTmTlPCpgHBsH4JqVCbUYhu5bA==" + }, + "vscode-jsonrpc": { + "version": "9.0.0-next.5", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.0-next.5.tgz", + "integrity": "sha512-Sl/8RAJtfF/2x/TPBVRuhzRAcqYR/QDjEjNqMcoKFfqsxfVUPzikupRDQYB77Gkbt1RrW43sSuZ5uLtNAcikQQ==" + }, + "vscode-languageclient": { + "version": "10.0.0-next.12", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-10.0.0-next.12.tgz", + "integrity": "sha512-q7cVYCcYiv+a+fJYCbjMMScOGBnX162IBeUMFg31mvnN7RHKx5/CwKaCz+r+RciJrRXMqS8y8qpEVGgeIPnbxg==", "requires": { - "browser-process-hrtime": "^0.1.2" + "minimatch": "^9.0.3", + "semver": "^7.6.0", + "vscode-languageserver-protocol": "3.17.6-next.10" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", + "requires": { + "brace-expansion": "^2.0.2" + } + } } }, - "w3c-xmlserializer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", - "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", - "dev": true, + "vscode-languageserver-protocol": { + "version": "3.17.6-next.10", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.10.tgz", + "integrity": "sha512-KOrrWn4NVC5jnFC5N6y/fyNKtx8rVYr67lhL/Z0P4ZBAN27aBsCnLBWAMIkYyJ1K8EZaE5r7gqdxrS9JPB6LIg==", "requires": { - "domexception": "^1.0.1", - "webidl-conversions": "^4.0.2", - "xml-name-validator": "^3.0.0" + "vscode-jsonrpc": "9.0.0-next.5", + "vscode-languageserver-types": "3.17.6-next.5" } }, - "wait-for-expect": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/wait-for-expect/-/wait-for-expect-3.0.1.tgz", - "integrity": "sha512-3Ha7lu+zshEG/CeHdcpmQsZnnZpPj/UsG3DuKO8FskjuDbkx3jE3845H+CuwZjA2YWYDfKMU2KhnCaXMLd3wVw==", - "dev": true + "vscode-languageserver-types": { + "version": "3.17.6-next.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.5.tgz", + "integrity": "sha512-QFmf3Yl1tCgUQfA77N9Me/LXldJXkIVypQbty2rJ1DNHQkC+iwvm4Z2tXg9czSwlhvv0pD4pbF5mT7WhAglolw==" }, - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, + "vscode-tas-client": { + "version": "0.1.84", + "resolved": "https://registry.npmjs.org/vscode-tas-client/-/vscode-tas-client-0.1.84.tgz", + "integrity": "sha512-rUTrUopV+70hvx1hW5ebdw1nd6djxubkLvVxjGdyD/r5v/wcVF41LIfiAtbm5qLZDtQdsMH1IaCuDoluoIa88w==", "requires": { - "loose-envify": "^1.0.0" + "tas-client": "0.2.33" } }, "watchpack": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", - "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, "requires": { - "chokidar": "^2.1.8", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" } }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, "webpack": { - "version": "4.35.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.35.3.tgz", - "integrity": "sha512-xggQPwr9ILlXzz61lHzjvgoqGU08v5+Wnut19Uv3GaTtzN4xBTcwnobodrXE142EL1tOiS5WVEButooGzcQzTA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "acorn": "^6.2.0", - "ajv": "^6.1.0", - "ajv-keywords": "^3.1.0", - "chrome-trace-event": "^1.0.0", - "enhanced-resolve": "^4.1.0", - "eslint-scope": "^4.0.0", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.3.0", - "loader-utils": "^1.1.0", - "memory-fs": "~0.4.1", - "micromatch": "^3.1.8", - "mkdirp": "~0.5.0", - "neo-async": "^2.5.0", - "node-libs-browser": "^2.0.0", - "schema-utils": "^1.0.0", - "tapable": "^1.1.0", - "terser-webpack-plugin": "^1.1.0", - "watchpack": "^1.5.0", - "webpack-sources": "^1.3.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "lru-cache": { - "version": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "pump": { - "version": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "5.105.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", + "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "dependencies": { + "ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" } }, - "terser-webpack-plugin": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz", - "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^2.1.2", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "dependencies": { - "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - } + "fast-deep-equal": "^3.1.3" } }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - } - } - }, - "webpack-bundle-analyzer": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.6.0.tgz", - "integrity": "sha512-orUfvVYEfBMDXgEKAKVvab5iQ2wXneIEorGNsyuOyVYpjYrI7CUOhhXNDd3huMwQ3vNNWWlGP+hzflMFYNzi2g==", - "dev": true, - "requires": { - "acorn": "^6.0.7", - "acorn-walk": "^6.1.1", - "bfj": "^6.1.1", - "chalk": "^2.4.1", - "commander": "^2.18.0", - "ejs": "^2.6.1", - "express": "^4.16.3", - "filesize": "^3.6.1", - "gzip-size": "^5.0.0", - "lodash": "^4.17.15", - "mkdirp": "^0.5.1", - "opener": "^1.5.1", - "ws": "^6.0.0" - }, - "dependencies": { - "acorn": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", - "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==", - "dev": true - }, - "filesize": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", - "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "gzip-size": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", - "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "requires": { - "duplexer": "^0.1.1", - "pify": "^4.0.1" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" } } } }, - "webpack-cli": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.5.tgz", - "integrity": "sha512-w0j/s42c5UhchwTmV/45MLQnTVwRoaUTu9fM5LuyOd/8lFoCNCELDogFoecx5NzRUndO0yD/gF2b02XKMnmAWQ==", + "webpack-bundle-analyzer": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.5.0.tgz", + "integrity": "sha512-GUMZlM3SKwS8Z+CKeIFx7CVoHn3dXFcUAjT/dcZQQmfSZGvitPfMob2ipjai7ovFFqPvTqkEZ/leL4O0YOdAYQ==", "dev": true, "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "chalk": "^4.1.0", + "commander": "^7.2.0", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "opener": "^1.5.2", + "sirv": "^1.0.7", + "ws": "^7.3.1" }, "dependencies": { - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "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": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "color-convert": "^2.0.1" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "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": { - "global-prefix": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "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": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "color-name": "~1.1.4" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "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 }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "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 }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "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": "^3.0.0" + "has-flag": "^4.0.0" } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + } + } + }, + "webpack-cli": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.2.tgz", + "integrity": "sha512-m3/AACnBBzK/kMTcxWHcZFPrw/eQuY4Df1TxvIWfWM2x7mRqBQCqKEd96oCUa9jkapLBaFfRce33eGDb4Pr7YQ==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.1.1", + "@webpack-cli/info": "^1.4.1", + "@webpack-cli/serve": "^1.6.1", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true }, - "yargs-parser": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", - "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "resolve": "^1.9.0" } } } @@ -25005,194 +26749,86 @@ "integrity": "sha1-iCuOTRqpPEjLj9r4Rvx52G+C8U8=", "dev": true }, - "webpack-log": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", - "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", - "dev": true, - "requires": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "loglevelnext": "^1.0.1", - "uuid": "^3.1.0" - } - }, "webpack-merge": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.1.tgz", - "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", "dev": true, "requires": { - "lodash": "^4.17.5" + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" } }, "webpack-node-externals": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-1.7.2.tgz", - "integrity": "sha512-ajerHZ+BJKeCLviLUUmnyd5B4RavLF76uv3cs6KNuO8W+HuQaEs0y0L7o40NQxdPy5w0pcv8Ew7yPUAQG0UdCg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/webpack-node-externals/-/webpack-node-externals-3.0.0.tgz", + "integrity": "sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==", "dev": true }, "webpack-require-from": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/webpack-require-from/-/webpack-require-from-1.8.0.tgz", - "integrity": "sha512-4vaPWQZD3vl3WM2mnjWunyx56uUbPj44ZKlpPUd+Ro2jrOtZQOaB2I5FE222uIChzeFfS7A7rtcWRLraPHE7TA==", - "dev": true - }, - "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", - "dev": true, - "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "websocket-driver": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz", - "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==", - "dev": true, - "requires": { - "http-parser-js": ">=0.4.0 <0.4.11", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - } - }, - "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", - "dev": true - }, - "whatwg-encoding": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", - "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/webpack-require-from/-/webpack-require-from-1.8.6.tgz", + "integrity": "sha512-QmRsOkOYPKeNXp4uVc7qxnPrFQPrP4bhOc/gl4QenTFNgXdEbF1U8VC+jM/Sljb0VzJLNgyNiHlVkuHjcmDtBQ==", "dev": true, - "requires": { - "iconv-lite": "0.4.24" - } + "requires": {} }, - "whatwg-fetch": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", - "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", - "dev": true - }, - "whatwg-mimetype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", - "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true }, - "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "requires": { "isexe": "^2.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "why-is-node-running": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.1.0.tgz", - "integrity": "sha512-oLmJ1uZOaKra+GDmYcUHMnVhi4CnZnlt4IE3J05ZDSEAiejeB5dMoR4a4rGcMWRy1Avx24dGTw8yxJ/+EmwPBQ==", + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, "requires": { - "stackback": "0.0.2" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, "requires": { - "string-width": "^1.0.2 || 2" + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "winreg": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.4.tgz", "integrity": "sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs=" }, - "winston": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", - "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { - "async": "^2.6.1", - "diagnostics": "^1.1.1", - "is-stream": "^1.1.0", - "logform": "^2.1.1", - "one-time": "0.0.4", - "readable-stream": "^3.1.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.3.0" - } - }, - "winston-transport": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", - "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { - "readable-stream": "^2.3.6", - "triple-beam": "^1.2.0" - }, - "dependencies": { - "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==" - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "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" - } - }, - "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" - } - } - } - }, "wipe-node-cache": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wipe-node-cache/-/wipe-node-cache-2.1.0.tgz", - "integrity": "sha512-Vdash0WV9Di/GeYW9FJrAZcPjGK4dO7M/Be/sJybguEgcM7As0uwLyvewZYqdlepoh7Rj4ZJKEdo8uX83PeNIw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/wipe-node-cache/-/wipe-node-cache-2.1.2.tgz", + "integrity": "sha512-m7NXa8qSxBGMtdQilOu53ctMaIBXy93FOP04EC1Uf4bpsE+r+adfLKwIMIvGbABsznaSNxK/ErD4xXDyY5og9w==", "dev": true }, "wipe-webpack-cache": { @@ -25201,38 +26837,96 @@ "integrity": "sha512-OXzQMGpA7MnQQ8AG+uMl5mWR2ezy6fw1+DMHY+wzYP1qkF1jrek87psLBmhZEj+er4efO/GD4R8jXWFierobaA==", "dev": true, "requires": { - "wipe-node-cache": "^2.1.0" + "wipe-node-cache": "^2.1.0" + } + }, + "worker-loader": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", + "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", + "dev": true, + "requires": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" } }, - "wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" + "workerpool": { + "version": "9.3.4", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-9.3.4.tgz", + "integrity": "sha512-TmPRQYYSAnnDiEB0P/Ytip7bFGvqnSU6I2BcuSw7Hx+JSg/DsUi5ebYfc8GYaSdpuvOcEs6dXxPurOYpe9QFwg==", + "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "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" + } + }, + "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 + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.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" + } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "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": { - "ansi-regex": "^2.0.0" + "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 } } }, @@ -25254,54 +26948,11 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", - "requires": { - "async-limiter": "~1.0.0" - } - }, - "wtfnode": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/wtfnode/-/wtfnode-0.8.0.tgz", - "integrity": "sha512-A5jm/0REykxUac1q4Q5kv+hDIiacvqVpwIoXzCQcRL7syeEKucVVOxyLLrt+jIiZoXfla3lnsxUw/cmWXIaGWA==", - "dev": true - }, - "x-is-string": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", - "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", - "dev": true - }, - "xdg-basedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", - "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", - "dev": true, - "requires": { - "os-homedir": "^1.0.0" - } - }, - "xdg-trashdir": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/xdg-trashdir/-/xdg-trashdir-2.1.1.tgz", - "integrity": "sha512-KcVhPaOu2ZurYNHSRTf1+ZHORkTZGCQ+u0JHN17QixRISJq4pXOnjt/lQcehvtHL5QAKhSzKgyjrcNnPdkPBHA==", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, - "requires": { - "@sindresorhus/df": "^2.1.0", - "mount-point": "^3.0.0", - "pify": "^2.2.0", - "user-home": "^2.0.0", - "xdg-basedir": "^2.0.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } + "requires": {} }, "xml": { "version": "1.0.1", @@ -25309,154 +26960,97 @@ "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=", "dev": true }, - "xml-name-validator": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", - "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true - }, "xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", "requires": { "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" - }, - "dependencies": { - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - } + "xmlbuilder": "~11.0.0" } }, "xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=" - }, - "xmlchars": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz", - "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w==", - "dev": true - }, - "xmlhttprequest": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", - "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", - "dev": true - }, - "xmlhttprequest-ssl": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", - "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=", - "dev": true + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", "dev": true, "requires": { - "cliui": "^4.0.0", + "cliui": "^6.0.0", "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^2.0.0", + "string-width": "^4.2.0", "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" }, "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "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": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "color-name": "~1.1.4" } }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } + "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 }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "which-module": { "version": "2.0.0", @@ -25464,10 +27058,21 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -25477,117 +27082,40 @@ } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", - "dev": true, - "requires": { - "camelcase": "^3.0.0" - }, - "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - } - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true }, "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, "dependencies": { - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "camelcase": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.1.tgz", + "integrity": "sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, @@ -25610,78 +27138,17 @@ "buffer-crc32": "~0.2.3" } }, - "yeast": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", - "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=", - "dev": true - }, - "ylru": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.2.1.tgz", - "integrity": "sha512-faQrqNMzcPCHGVC2aaOINk13K+aaBDUPjGWl0teOXywElLjyVAB6Oe2jj62jHYtwsU49jXhScYbvPENK+6zAvQ==" - }, "yn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz", - "integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true }, - "zeromq": { - "version": "6.0.0-beta.6", - "resolved": "https://registry.npmjs.org/zeromq/-/zeromq-6.0.0-beta.6.tgz", - "integrity": "sha512-wLf6M7pBHijl+BRltUL2VoDpgbQcOZetiX8UzycHL8CcYFxYnRrpoG5fi3UX3+Umavz1lk4/dGaQez8qiDgr/Q==", - "requires": { - "node-gyp-build": "^4.1.0" - } - }, - "zip-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-2.0.1.tgz", - "integrity": "sha512-c+eUhhkDpaK87G/py74wvWLtz2kzMPNCCkUApkun50ssE0oQliIQzWpTnwjB+MTKVIf2tGzIgHyqW/Y+W77ecQ==", - "dev": true, - "requires": { - "archiver-utils": "^2.0.0", - "compress-commons": "^1.2.0", - "readable-stream": "^2.0.0" - }, - "dependencies": { - "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==", - "dev": true - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "dev": true, - "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" - } - }, - "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==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "zone.js": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.7.6.tgz", - "integrity": "sha1-+7w50+AmHQmG8boGMG6zrrDSIAk=" + "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 } } } diff --git a/package.datascience-ui.dependencies.json b/package.datascience-ui.dependencies.json deleted file mode 100644 index f964e6c24df9..000000000000 --- a/package.datascience-ui.dependencies.json +++ /dev/null @@ -1,304 +0,0 @@ -[ - "@babel/runtime", - "@babel/runtime-corejs2", - "@blueprintjs/core", - "@blueprintjs/icons", - "@blueprintjs/select", - "@emotion/hash", - "@emotion/memoize", - "@emotion/stylis", - "@emotion/unitless", - "@icons/material", - "@jupyter-widgets/controls", - "@jupyterlab/services", - "@loadable/component", - "@mapbox/polylabel", - "@nteract/markdown", - "@nteract/mathjax", - "@nteract/octicons", - "@nteract/styled-blueprintjsx", - "@nteract/transform-dataresource", - "@nteract/transform-geojson", - "@nteract/transform-model-debug", - "@nteract/transform-plotly", - "@nteract/transform-vdom", - "@nteract/transform-vega", - "@nteract/transforms", - "@nteract/vega-embed-v2", - "@nteract/vega-embed-v3", - "@phosphor/coreutils", - "@phosphor/properties", - "ajv", - "anser", - "ansi-regex", - "ansi-to-html", - "ansi-to-react", - "asn1.js", - "babel-polyfill", - "babel-runtime", - "bail", - "base16", - "base64-js", - "bintrees", - "bn.js", - "bootstrap-less", - "brorand", - "browserify-aes", - "browserify-cipher", - "browserify-des", - "browserify-rsa", - "browserify-sign", - "buffer-xor", - "canvas", - "character-entities-legacy", - "character-reference-invalid", - "cipher-base", - "classnames", - "clsx", - "collapse-white-space", - "core-util-is", - "create-ecdh", - "create-emotion", - "create-hash", - "create-hmac", - "create-react-context", - "crypto-browserify", - "css-loader", - "d3", - "d3-array", - "d3-bboxCollide", - "d3-brush", - "d3-chord", - "d3-cloud", - "d3-collection", - "d3-color", - "d3-contour", - "d3-delaunay", - "d3-dispatch", - "d3-drag", - "d3-dsv", - "d3-ease", - "d3-force", - "d3-format", - "d3-geo", - "d3-glyphedge", - "d3-hexbin", - "d3-hierarchy", - "d3-interpolate", - "d3-path", - "d3-polygon", - "d3-quadtree", - "d3-request", - "d3-sankey-circular", - "d3-scale", - "d3-scale-chromatic", - "d3-selection", - "d3-shape", - "d3-time", - "d3-time-format", - "d3-timer", - "d3-transition", - "d3-voronoi", - "datalib", - "define-properties", - "delaunator", - "des.js", - "diffie-hellman", - "dom-helpers", - "dom4", - "elliptic", - "emotion", - "entities", - "escape-carriage", - "events", - "evp_bytestokey", - "extend", - "fast-deep-equal", - "fast-json-stable-stringify", - "fast-plist", - "function-bind", - "gud", - "has", - "hash-base", - "hash.js", - "hmac-drbg", - "hoist-non-react-statics", - "ieee754", - "inherits", - "invariant", - "is-alphabetical", - "is-alphanumerical", - "is-arguments", - "is-buffer", - "is-date-object", - "is-decimal", - "is-hexadecimal", - "is-online", - "is-plain-obj", - "is-regex", - "is-whitespace-character", - "is-word-character", - "isarray", - "json-schema-traverse", - "json-stable-stringify", - "json-stringify-pretty-compact", - "json2csv", - "json5", - "jsonify", - "labella", - "leaflet", - "linear-layout-vector", - "lodash", - "lodash.curry", - "lodash.flow", - "lru-cache", - "markdown-escapes", - "martinez-polygon-clipping", - "material-colors", - "md5.js", - "mdast-add-list-metadata", - "miller-rabin", - "minimalistic-assert", - "minimalistic-crypto-utils", - "minimist", - "moment", - "monaco-editor", - "monaco-editor-textmate", - "monaco-textmate", - "node-libs-browser", - "numeral", - "object-assign", - "object-is", - "object-keys", - "onigasm", - "parse-asn1", - "parse-entities", - "path-browserify", - "path-posix", - "pbkdf2", - "plotly.js-dist", - "polygon-offset", - "popper.js", - "process", - "prop-types", - "pseudomap", - "public-encrypt", - "public-ip", - "pure-color", - "querystringify", - "randombytes", - "randomfill", - "react", - "react-annotation", - "react-base16-styling", - "react-color", - "react-data-grid", - "react-dom", - "react-hot-loader", - "react-is", - "react-json-tree", - "react-lifecycles-compat", - "react-markdown", - "react-popper", - "react-redux", - "react-svg-pan-zoom", - "react-svgmt", - "react-table", - "react-table-hoc-fixed-columns", - "react-transition-group", - "react-virtualized", - "reactcss", - "redux", - "redux-logger", - "regexp.prototype.flags", - "regression", - "remark-parse", - "repeat-string", - "replace-ext", - "requires-port", - "resize-observer-polyfill", - "ripemd160", - "roughjs-es5", - "rxjs", - "rxjs-compat", - "safe-buffer", - "scheduler", - "semiotic", - "semiotic-mark", - "semver", - "setimmediate", - "sha.js", - "slickgrid", - "state-toggle", - "stream-browserify", - "string-hash", - "string_decoder", - "style-loader", - "styled-jsx", - "stylis-rule-sheet", - "svg-inline-react", - "svg-path-bounding-box", - "svgpath", - "timers-browserify", - "tinycolor2", - "tinyqueue", - "topojson-client", - "transformation-matrix", - "trim", - "trim-trailing-lines", - "trough", - "tslib", - "unherit", - "unified", - "uniqid", - "unist-util-is", - "unist-util-remove-position", - "unist-util-stringify-position", - "unist-util-visit", - "unist-util-visit-parents", - "uri-js", - "url-parse", - "util", - "util-deprecate", - "uuid", - "vega", - "vega-canvas", - "vega-crossfilter", - "vega-dataflow", - "vega-embed", - "vega-encode", - "vega-event-selector", - "vega-expression", - "vega-force", - "vega-functions", - "vega-geo", - "vega-hierarchy", - "vega-lite", - "vega-loader", - "vega-parser", - "vega-projection", - "vega-regression", - "vega-runtime", - "vega-scale", - "vega-scenegraph", - "vega-schema-url-parser", - "vega-selections", - "vega-statistics", - "vega-themes", - "vega-tooltip", - "vega-transforms", - "vega-util", - "vega-view", - "vega-view-transforms", - "vega-voronoi", - "vega-wordcloud", - "vfile", - "vfile-location", - "vfile-message", - "viz-annotation", - "vm-browserify", - "warning", - "x-is-string", - "xtend", - "yallist" -] diff --git a/package.json b/package.json index 72219a305384..2a27cddc0976 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,33 @@ { "name": "python", "displayName": "Python", - "description": "Linting, Debugging (multi-threaded, remote), Intellisense, Jupyter Notebooks, code formatting, refactoring, unit tests, snippets, and more.", - "version": "2020.5.0-dev", - "languageServerVersion": "0.5.30", + "description": "Python language support with extension access points for IntelliSense (Pylance), Debugging (Python Debugger), linting, formatting, refactoring, unit tests, and more.", + "version": "2026.5.0-dev", + "featureFlags": { + "usingNewInterpreterStorage": true + }, + "capabilities": { + "untrustedWorkspaces": { + "supported": false, + "description": "The Python extension is not available in untrusted workspaces. Use Pylance to get partial IntelliSense support for Python files." + }, + "virtualWorkspaces": { + "supported": "limited", + "description": "Only Partial IntelliSense supported." + } + }, "publisher": "ms-python", - "enableProposedApi": false, + "enabledApiProposals": [ + "contribEditorContentMenu", + "quickPickSortByLabel", + "testObserver", + "quickPickItemTooltip", + "terminalDataWriteEvent", + "terminalExecuteCommandEvent", + "codeActionAI", + "notebookReplDocument", + "notebookVariableProvider" + ], "author": { "name": "Microsoft Corporation" }, @@ -18,15 +40,16 @@ "bugs": { "url": "https://github.com/Microsoft/vscode-python/issues" }, - "qna": "https://stackoverflow.com/questions/tagged/visual-studio-code+python", + "qna": "https://github.com/microsoft/vscode-python/discussions/categories/q-a", "icon": "icon.png", "galleryBanner": { "color": "#1e415e", "theme": "dark" }, "engines": { - "vscode": "^1.43.0" + "vscode": "^1.95.0" }, + "enableTelemetry": false, "keywords": [ "python", "django", @@ -36,2814 +59,1438 @@ "categories": [ "Programming Languages", "Debuggers", - "Linters", - "Snippets", - "Formatters", - "Other" + "Other", + "Data Science", + "Machine Learning" ], "activationEvents": [ + "onDebugInitialConfigurations", "onLanguage:python", - "onLanguage:jupyter", "onDebugResolve:python", - "onCommand:python.execInTerminal", - "onCommand:python.sortImports", - "onCommand:python.runtests", - "onCommand:python.debugtests", - "onCommand:python.setInterpreter", - "onCommand:python.setShebangInterpreter", - "onCommand:python.viewTestUI", - "onCommand:python.viewLanguageServerOutput", - "onCommand:python.viewTestOutput", - "onCommand:python.viewOutput", - "onCommand:python.datascience.viewJupyterOutput", - "onCommand:python.selectAndRunTestMethod", - "onCommand:python.selectAndDebugTestMethod", - "onCommand:python.selectAndRunTestFile", - "onCommand:python.runCurrentTestFile", - "onCommand:python.runFailedTests", - "onCommand:python.execSelectionInTerminal", - "onCommand:python.execSelectionInDjangoShell", - "onCommand:python.buildWorkspaceSymbols", - "onCommand:python.startREPL", - "onCommand:python.goToPythonObject", - "onCommand:python.setLinter", - "onCommand:python.enableLinting", - "onCommand:python.createTerminal", - "onCommand:python.discoverTests", - "onCommand:python.configureTests", - "onCommand:python.switchOffInsidersChannel", - "onCommand:python.switchToDailyChannel", - "onCommand:python.switchToWeeklyChannel", - "onCommand:python.clearWorkspaceInterpreter", - "onCommand:python.resetInterpreterSecurityStorage", - "onCommand:python.datascience.createnewnotebook", - "onCommand:python.datascience.showhistorypane", - "onCommand:python.datascience.importnotebook", - "onCommand:python.datascience.importnotebookfile", - "onCommand:python.datascience.opennotebook", - "onCommand:python.datascience.selectjupyteruri", - "onCommand:python.datascience.exportfileasnotebook", - "onCommand:python.datascience.exportfileandoutputasnotebook", - "onCommand:python.datascience.selectJupyterInterpreter", - "onCommand:python.datascience.selectjupytercommandline", - "onCommand:python.enableSourceMapSupport", - "onCustomEditor:NativeEditorProvider.ipynb", - "workspaceContains:**/mspythonconfig.json" + "onCommand:python.copilotSetupTests", + "workspaceContains:mspythonconfig.json", + "workspaceContains:pyproject.toml", + "workspaceContains:Pipfile", + "workspaceContains:setup.py", + "workspaceContains:requirements.txt", + "workspaceContains:pylock.toml", + "workspaceContains:**/pylock.*.toml", + "workspaceContains:manage.py", + "workspaceContains:app.py", + "workspaceContains:.venv", + "workspaceContains:.conda", + "onLanguageModelTool:get_python_environment_details", + "onLanguageModelTool:get_python_executable_details", + "onLanguageModelTool:install_python_packages", + "onLanguageModelTool:configure_python_environment", + "onLanguageModelTool:create_virtual_environment", + "onTerminalShellIntegration:python" ], "main": "./out/client/extension", + "browser": "./dist/extension.browser.js", + "l10n": "./l10n", "contributes": { - "snippets": [ - { - "language": "python", - "path": "./snippets/python.json" + "problemMatchers": [ + { + "name": "python", + "owner": "python", + "source": "python", + "fileLocation": "autoDetect", + "pattern": [ + { + "regexp": "^.*File \\\"([^\\\"]|.*)\\\", line (\\d+).*", + "file": 1, + "line": 2 + }, + { + "regexp": "^\\s*(.*)\\s*$" + }, + { + "regexp": "^\\s*(.*Error.*)$", + "message": 1 + } + ] } ], - "keybindings": [ - { - "command": "python.execSelectionInTerminal", - "key": "shift+enter", - "when": "editorTextFocus && editorLangId == python && !findInputFocussed && !replaceInputFocussed && !python.datascience.ownsSelection" - }, - { - "command": "python.datascience.execSelectionInteractive", - "key": "shift+enter", - "when": "editorTextFocus && editorLangId == python && !findInputFocussed && !replaceInputFocussed && python.datascience.ownsSelection && python.datascience.featureenabled" - }, - { - "command": "python.datascience.runcurrentcelladvance", - "key": "shift+enter", - "when": "editorTextFocus && !editorHasSelection && python.datascience.hascodecells && python.datascience.featureenabled" - }, - { - "command": "python.datascience.runcurrentcell", - "key": "ctrl+enter", - "when": "editorTextFocus && !editorHasSelection && python.datascience.hascodecells && python.datascience.featureenabled" + "walkthroughs": [ + { + "id": "pythonWelcome", + "title": "%walkthrough.pythonWelcome.title%", + "description": "%walkthrough.pythonWelcome.description%", + "when": "workspacePlatform != webworker", + "steps": [ + { + "id": "python.createPythonFolder", + "title": "%walkthrough.step.python.createPythonFolder.title%", + "description": "%walkthrough.step.python.createPythonFolder.description%", + "media": { + "svg": "resources/walkthrough/open-folder.svg", + "altText": "%walkthrough.step.python.createPythonFile.altText%" + }, + "when": "workspaceFolderCount = 0" + }, + { + "id": "python.createPythonFile", + "title": "%walkthrough.step.python.createPythonFile.title%", + "description": "%walkthrough.step.python.createPythonFile.description%", + "media": { + "svg": "resources/walkthrough/open-folder.svg", + "altText": "%walkthrough.step.python.createPythonFile.altText%" + } + }, + { + "id": "python.installPythonWin8", + "title": "%walkthrough.step.python.installPythonWin8.title%", + "description": "%walkthrough.step.python.installPythonWin8.description%", + "media": { + "markdown": "resources/walkthrough/install-python-windows-8.md" + }, + "when": "workspacePlatform == windows && showInstallPythonTile" + }, + { + "id": "python.installPythonMac", + "title": "%walkthrough.step.python.installPythonMac.title%", + "description": "%walkthrough.step.python.installPythonMac.description%", + "media": { + "markdown": "resources/walkthrough/install-python-macos.md" + }, + "when": "workspacePlatform == mac && showInstallPythonTile", + "command": "workbench.action.terminal.new" + }, + { + "id": "python.installPythonLinux", + "title": "%walkthrough.step.python.installPythonLinux.title%", + "description": "%walkthrough.step.python.installPythonLinux.description%", + "media": { + "markdown": "resources/walkthrough/install-python-linux.md" + }, + "when": "workspacePlatform == linux && showInstallPythonTile", + "command": "workbench.action.terminal.new" + }, + { + "id": "python.createEnvironment", + "title": "%walkthrough.step.python.createEnvironment.title%", + "description": "%walkthrough.step.python.createEnvironment.description%", + "media": { + "svg": "resources/walkthrough/create-environment.svg", + "altText": "%walkthrough.step.python.createEnvironment.altText%" + } + }, + { + "id": "python.runAndDebug", + "title": "%walkthrough.step.python.runAndDebug.title%", + "description": "%walkthrough.step.python.runAndDebug.description%", + "media": { + "svg": "resources/walkthrough/rundebug2.svg", + "altText": "%walkthrough.step.python.runAndDebug.altText%" + } + }, + { + "id": "python.learnMoreWithDS", + "title": "%walkthrough.step.python.learnMoreWithDS.title%", + "description": "%walkthrough.step.python.learnMoreWithDS.description%", + "media": { + "altText": "%walkthrough.step.python.learnMoreWithDS.altText%", + "svg": "resources/walkthrough/learnmore.svg" + } + } + ] }, { - "command": "python.datascience.runcurrentcellandaddbelow", - "key": "alt+enter", - "when": "editorTextFocus && !editorHasSelection && python.datascience.hascodecells && python.datascience.featureenabled" + "id": "pythonDataScienceWelcome", + "title": "%walkthrough.pythonDataScienceWelcome.title%", + "description": "%walkthrough.pythonDataScienceWelcome.description%", + "when": "false", + "steps": [ + { + "id": "python.installJupyterExt", + "title": "%walkthrough.step.python.installJupyterExt.title%", + "description": "%walkthrough.step.python.installJupyterExt.description%", + "media": { + "svg": "resources/walkthrough/data-science.svg", + "altText": "%walkthrough.step.python.installJupyterExt.altText%" + } + }, + { + "id": "python.createNewNotebook", + "title": "%walkthrough.step.python.createNewNotebook.title%", + "description": "%walkthrough.step.python.createNewNotebook.description%", + "media": { + "svg": "resources/walkthrough/create-notebook.svg", + "altText": "%walkthrough.step.python.createNewNotebook.altText%" + }, + "completionEvents": [ + "onCommand:jupyter.createnewnotebook", + "onCommand:workbench.action.files.openFolder", + "onCommand:workbench.action.files.openFileFolder" + ] + }, + { + "id": "python.openInteractiveWindow", + "title": "%walkthrough.step.python.openInteractiveWindow.title%", + "description": "%walkthrough.step.python.openInteractiveWindow.description%", + "media": { + "svg": "resources/walkthrough/interactive-window.svg", + "altText": "%walkthrough.step.python.openInteractiveWindow.altText%" + }, + "completionEvents": [ + "onCommand:jupyter.createnewinteractive" + ] + }, + { + "id": "python.dataScienceLearnMore", + "title": "%walkthrough.step.python.dataScienceLearnMore.title%", + "description": "%walkthrough.step.python.dataScienceLearnMore.description%", + "media": { + "svg": "resources/walkthrough/learnmore.svg", + "altText": "%walkthrough.step.python.dataScienceLearnMore.altText%" + } + } + ] } ], - "commands": [ - { - "command": "python.enableSourceMapSupport", - "title": "%python.command.python.enableSourceMapSupport.title%", - "category": "Python" - }, - { - "command": "python.sortImports", - "title": "%python.command.python.sortImports.title%", - "category": "Python Refactor" - }, - { - "command": "python.startREPL", - "title": "%python.command.python.startREPL.title%", - "category": "Python" - }, + "breakpoints": [ { - "command": "python.createTerminal", - "title": "%python.command.python.createTerminal.title%", - "category": "Python" + "language": "html" }, { - "command": "python.buildWorkspaceSymbols", - "title": "%python.command.python.buildWorkspaceSymbols.title%", - "category": "Python" + "language": "jinja" }, { - "command": "python.openTestNodeInEditor", - "title": "Open", - "icon": { - "light": "resources/light/open-file.svg", - "dark": "resources/dark/open-file.svg" - } + "language": "python" }, { - "command": "python.runTestNode", - "title": "Run", - "icon": { - "light": "resources/light/start.svg", - "dark": "resources/dark/start.svg" - } + "language": "django-html" }, { - "command": "python.debugTestNode", - "title": "Debug", - "icon": { - "light": "resources/light/debug.svg", - "dark": "resources/dark/debug.svg" - } - }, + "language": "django-txt" + } + ], + "commands": [ { - "command": "python.runtests", - "title": "%python.command.python.runtests.title%", + "title": "%python.command.python.createNewFile.title%", + "shortTitle": "%python.menu.createNewFile.title%", "category": "Python", - "icon": { - "light": "resources/light/run-tests.svg", - "dark": "resources/dark/run-tests.svg" - } + "command": "python.createNewFile" }, { - "command": "python.debugtests", - "title": "%python.command.python.debugtests.title%", "category": "Python", - "icon": { - "light": "resources/light/debug.svg", - "dark": "resources/dark/debug.svg" - } - }, - { - "command": "python.execInTerminal", - "title": "%python.command.python.execInTerminal.title%", - "category": "Python" + "command": "python.copyTestId", + "title": "%python.command.python.testing.copyTestId.title%" }, { - "command": "python.execInTerminal-icon", - "title": "%python.command.python.execInTerminal.title%", "category": "Python", - "icon": { - "light": "resources/light/run-file.svg", - "dark": "resources/dark/run-file.svg" - } - }, - { - "command": "python.setInterpreter", - "title": "%python.command.python.setInterpreter.title%", - "category": "Python" + "command": "python.analysis.restartLanguageServer", + "title": "%python.command.python.analysis.restartLanguageServer.title%" }, { - "command": "python.switchOffInsidersChannel", - "title": "%python.command.python.switchOffInsidersChannel.title%", - "category": "Python" - }, - { - "command": "python.switchToDailyChannel", - "title": "%python.command.python.switchToDailyChannel.title%", - "category": "Python" - }, - { - "command": "python.switchToWeeklyChannel", - "title": "%python.command.python.switchToWeeklyChannel.title%", - "category": "Python" + "category": "Python", + "command": "python.clearCacheAndReload", + "title": "%python.command.python.clearCacheAndReload.title%" }, { + "category": "Python", "command": "python.clearWorkspaceInterpreter", - "title": "%python.command.python.clearWorkspaceInterpreter.title%", - "category": "Python" - }, - { - "command": "python.resetInterpreterSecurityStorage", - "title": "%python.command.python.resetInterpreterSecurityStorage.title%", - "category": "Python" + "title": "%python.command.python.clearWorkspaceInterpreter.title%" }, { - "command": "python.refactorExtractVariable", - "title": "%python.command.python.refactorExtractVariable.title%", - "category": "Python Refactor" - }, - { - "command": "python.refactorExtractMethod", - "title": "%python.command.python.refactorExtractMethod.title%", - "category": "Python Refactor" - }, - { - "command": "python.viewTestOutput", - "title": "%python.command.python.viewTestOutput.title%", "category": "Python", - "icon": { - "light": "resources/light/repl.svg", - "dark": "resources/dark/repl.svg" - } - }, - { - "command": "python.datascience.viewJupyterOutput", - "title": "%python.command.python.datascience.viewJupyterOutput.title%", - "category": "Python" - }, - { - "command": "python.datascience.selectJupyterInterpreter", - "title": "%python.command.python.datascience.selectJupyterInterpreter.title%", - "category": "Python" + "command": "python.configureTests", + "title": "%python.command.python.configureTests.title%" }, { - "command": "python.viewLanguageServerOutput", - "title": "%python.command.python.viewLanguageServerOutput.title%", "category": "Python", - "enablement": "python.hasLanguageServerOutputChannel" + "command": "python.createTerminal", + "title": "%python.command.python.createTerminal.title%" }, { - "command": "python.viewOutput", - "title": "%python.command.python.viewOutput.title%", "category": "Python", - "icon": { - "light": "resources/light/repl.svg", - "dark": "resources/dark/repl.svg" - } - }, - { - "command": "python.selectAndRunTestMethod", - "title": "%python.command.python.selectAndRunTestMethod.title%", - "category": "Python" - }, - { - "command": "python.selectAndDebugTestMethod", - "title": "%python.command.python.selectAndDebugTestMethod.title%", - "category": "Python" - }, - { - "command": "python.selectAndRunTestFile", - "title": "%python.command.python.selectAndRunTestFile.title%", - "category": "Python" - }, - { - "command": "python.runCurrentTestFile", - "title": "%python.command.python.runCurrentTestFile.title%", - "category": "Python" + "command": "python.createEnvironment", + "title": "%python.command.python.createEnvironment.title%" }, { - "command": "python.runFailedTests", - "title": "%python.command.python.runFailedTests.title%", "category": "Python", - "icon": { - "light": "resources/light/run-failed-tests.svg", - "dark": "resources/dark/run-failed-tests.svg" - } + "command": "python.createEnvironment-button", + "title": "%python.command.python.createEnvironment.title%" }, { - "command": "python.discoverTests", - "title": "%python.command.python.discoverTests.title%", "category": "Python", - "icon": { - "light": "resources/light/refresh.svg", - "dark": "resources/dark/refresh.svg" - } + "command": "python.execInTerminal", + "title": "%python.command.python.execInTerminal.title%" }, { - "command": "python.discoveringTests", - "title": "%python.command.python.discoveringTests.title%", "category": "Python", - "icon": { - "light": "resources/light/discovering-tests.svg", - "dark": "resources/dark/discovering-tests.svg" - } + "command": "python.execInTerminal-icon", + "icon": "$(play)", + "title": "%python.command.python.execInTerminalIcon.title%" }, { - "command": "python.stopTests", - "title": "%python.command.python.stopTests.title%", "category": "Python", - "icon": { - "light": "resources/light/stop.svg", - "dark": "resources/dark/stop.svg" - } + "command": "python.execInDedicatedTerminal", + "icon": "$(play)", + "title": "%python.command.python.execInDedicatedTerminal.title%" }, { - "command": "python.configureTests", - "title": "%python.command.python.configureTests.title%", - "category": "Python" + "category": "Python", + "command": "python.execSelectionInDjangoShell", + "title": "%python.command.python.execSelectionInDjangoShell.title%" }, { + "category": "Python", "command": "python.execSelectionInTerminal", "title": "%python.command.python.execSelectionInTerminal.title%", - "category": "Python" - }, - { - "command": "python.execSelectionInDjangoShell", - "title": "%python.command.python.execSelectionInDjangoShell.title%", - "category": "Python" - }, - { - "command": "python.goToPythonObject", - "title": "%python.command.python.goToPythonObject.title%", - "category": "Python" - }, - { - "command": "python.setLinter", - "title": "%python.command.python.setLinter.title%", - "category": "Python" - }, - { - "command": "python.enableLinting", - "title": "%python.command.python.enableLinting.title%", - "category": "Python" - }, - { - "command": "python.runLinting", - "title": "%python.command.python.runLinting.title%", - "category": "Python" - }, - { - "command": "python.datascience.runcurrentcell", - "title": "%python.command.python.datascience.runcurrentcell.title%", - "category": "Python" - }, - { - "command": "python.datascience.debugcell", - "title": "%python.command.python.datascience.debugcell.title%", - "category": "Python" - }, - { - "command": "python.datascience.debugstepover", - "title": "%python.command.python.datascience.debugstepover.title%", - "category": "Python" - }, - { - "command": "python.datascience.debugstop", - "title": "%python.command.python.datascience.debugstop.title%", - "category": "Python" - }, - { - "command": "python.datascience.debugcontinue", - "title": "%python.command.python.datascience.debugcontinue.title%", - "category": "Python" - }, - { - "command": "python.datascience.runcurrentcelladvance", - "title": "%python.command.python.datascience.runcurrentcelladvance.title%", - "category": "Python" - }, - { - "command": "python.datascience.runcurrentcellandallbelow.palette", - "title": "%python.command.python.datascience.runcurrentcellandallbelow.palette.title%", - "category": "Python" - }, - { - "command": "python.datascience.runallcellsabove.palette", - "title": "%python.command.python.datascience.runallcellsabove.palette.title%", - "category": "Python" - }, - { - "command": "python.datascience.debugcurrentcell.palette", - "title": "%python.command.python.datascience.debugcurrentcell.palette.title%", - "category": "Python" - }, - { - "command": "python.datascience.execSelectionInteractive", - "title": "%python.command.python.datascience.execSelectionInteractive.title%", - "category": "Python" - }, - { - "command": "python.datascience.showhistorypane", - "title": "%python.command.python.datascience.showhistorypane.title%", - "category": "Python" - }, - { - "command": "python.datascience.runFileInteractive", - "title": "%python.command.python.datascience.runFileInteractive.title%", - "category": "Python" - }, - { - "command": "python.datascience.debugFileInteractive", - "title": "%python.command.python.datascience.debugFileInteractive.title%", - "category": "Python" - }, - { - "command": "python.datascience.runallcells", - "title": "%python.command.python.datascience.runallcells.title%", - "category": "Python" - }, - { - "command": "python.datascience.runallcellsabove", - "title": "%python.command.python.datascience.runallcellsabove.title%", - "category": "Python" - }, - { - "command": "python.datascience.runcellandallbelow", - "title": "%python.command.python.datascience.runcellandallbelow.title%", - "category": "Python" - }, - { - "command": "python.datascience.runcell", - "title": "%python.command.python.datascience.runcell.title%", - "category": "Python" - }, - { - "command": "python.datascience.runtoline", - "title": "%python.command.python.datascience.runtoline.title%", - "category": "Python" - }, - { - "command": "python.datascience.runfromline", - "title": "%python.command.python.datascience.runfromline.title%", - "category": "Python" + "shortTitle": "%python.command.python.execSelectionInTerminal.shortTitle%" }, { - "command": "python.datascience.selectjupyteruri", - "title": "%python.command.python.datascience.selectjupyteruri.title%", "category": "Python", - "when": "python.datascience.featureenabled" + "command": "python.execInREPL", + "title": "%python.command.python.execInREPL.title%" }, { - "command": "python.datascience.selectjupytercommandline", - "title": "%python.command.python.datascience.selectjupytercommandline.title%", "category": "Python", - "when": "python.datascience.featureenabled" - }, - { - "command": "python.datascience.importnotebook", - "title": "%python.command.python.datascience.importnotebook.title%", - "category": "Python" - }, - { - "command": "python.datascience.importnotebookfile", - "title": "%python.command.python.datascience.importnotebookfile.title%", - "category": "Python" - }, - { - "command": "python.datascience.opennotebook", - "title": "%python.command.python.datascience.opennotebook.title%", - "category": "Python" - }, - { - "command": "python.datascience.exportoutputasnotebook", - "title": "%python.command.python.datascience.exportoutputasnotebook.title%", - "category": "Python" - }, - { - "command": "python.datascience.exportfileasnotebook", - "title": "%python.command.python.datascience.exportfileasnotebook.title%", - "category": "Python" - }, - { - "command": "python.datascience.exportfileandoutputasnotebook", - "title": "%python.command.python.datascience.exportfileandoutputasnotebook.title%", - "category": "Python" - }, - { - "command": "python.datascience.undocells", - "title": "%python.command.python.datascience.undocells.title%", - "category": "Python" - }, - { - "command": "python.datascience.redocells", - "title": "%python.command.python.datascience.redocells.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.undocells", - "title": "%python.command.python.datascience.undocells.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.redocells", - "title": "%python.command.python.datascience.redocells.title%", - "category": "Python" - }, - { - "command": "python.datascience.removeallcells", - "title": "%python.command.python.datascience.removeallcells.title%", - "category": "Python" - }, - { - "command": "python.datascience.interruptkernel", - "title": "%python.command.python.datascience.interruptkernel.title%", - "category": "Python" - }, - { - "command": "python.datascience.restartkernel", - "title": "%python.command.python.datascience.restartkernel.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.removeallcells", - "title": "%python.command.python.datascience.notebookeditor.removeallcells.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.interruptkernel", - "title": "%python.command.python.datascience.interruptkernel.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.restartkernel", - "title": "%python.command.python.datascience.restartkernel.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.runallcells", - "title": "%python.command.python.datascience.notebookeditor.runallcells.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.runselectedcell", - "title": "%python.command.python.datascience.notebookeditor.runselectedcell.title%", - "category": "Python" - }, - { - "command": "python.datascience.notebookeditor.addcellbelow", - "title": "%python.command.python.datascience.notebookeditor.addcellbelow.title%", - "category": "Python" - }, - { - "command": "python.datascience.expandallcells", - "title": "%python.command.python.datascience.expandallcells.title%", - "category": "Python" + "command": "python.reportIssue", + "title": "%python.command.python.reportIssue.title%" }, { - "command": "python.datascience.collapseallcells", - "title": "%python.command.python.datascience.collapseallcells.title%", - "category": "Python" + "category": "Test", + "command": "testing.reRunFailTests", + "icon": "$(run-errors)", + "title": "%python.command.testing.rerunFailedTests.title%" }, { - "command": "python.datascience.addcellbelow", - "title": "%python.command.python.datascience.addcellbelow.title%", - "category": "Python" + "category": "Python", + "command": "python.setInterpreter", + "title": "%python.command.python.setInterpreter.title%" }, { - "command": "python.datascience.createnewnotebook", - "title": "%python.command.python.datascience.createnewnotebook.title%", - "category": "Python" + "category": "Python", + "command": "python.startREPL", + "title": "%python.command.python.startTerminalREPL.title%" }, { - "command": "python.datascience.scrolltocell", - "title": "%python.command.python.datascience.scrolltocell.title%", - "category": "Python" + "category": "Python", + "command": "python.startNativeREPL", + "title": "%python.command.python.startNativeREPL.title%" }, { - "command": "python.analysis.clearCache", - "title": "%python.command.python.analysis.clearCache.title%", - "category": "Python" + "category": "Python", + "command": "python.viewLanguageServerOutput", + "enablement": "python.hasLanguageServerOutputChannel", + "title": "%python.command.python.viewLanguageServerOutput.title%" }, { - "command": "python.datascience.switchKernel", - "title": "%DataScience.selectKernel%", "category": "Python", - "enablement": "python.datascience.isnativeactive" + "command": "python.viewOutput", + "icon": { + "dark": "resources/dark/repl.svg", + "light": "resources/light/repl.svg" + }, + "title": "%python.command.python.viewOutput.title%" }, { - "command": "python.datascience.gatherquality", - "title": "DataScience.gatherQuality", - "category": "Python" + "category": "Python", + "command": "python.installJupyter", + "title": "%python.command.python.installJupyter.title%" } ], - "menus": { - "editor/context": [ - { - "command": "python.refactorExtractVariable", - "title": "Refactor: Extract Variable", - "group": "Refactor", - "when": "editorHasSelection && editorLangId == python" - }, - { - "command": "python.refactorExtractMethod", - "title": "Refactor: Extract Method", - "group": "Refactor", - "when": "editorHasSelection && editorLangId == python" + "configuration": { + "properties": { + "python.activeStateToolPath": { + "default": "state", + "description": "%python.activeStateToolPath.description%", + "scope": "machine-overridable", + "type": "string" }, - { - "command": "python.sortImports", - "title": "Refactor: Sort Imports", - "group": "Refactor", - "when": "editorLangId == python" + "python.autoComplete.extraPaths": { + "default": [], + "description": "%python.autoComplete.extraPaths.description%", + "scope": "resource", + "type": "array", + "uniqueItems": true }, - { - "command": "python.execSelectionInTerminal", - "group": "Python", - "when": "editorFocus && editorLangId == python" + "python.createEnvironment.contentButton": { + "default": "hide", + "markdownDescription": "%python.createEnvironment.contentButton.description%", + "scope": "machine-overridable", + "type": "string", + "enum": [ + "show", + "hide" + ] }, - { - "command": "python.execSelectionInDjangoShell", - "group": "Python", - "when": "editorHasSelection && editorLangId == python && python.isDjangoProject" + "python.createEnvironment.trigger": { + "default": "prompt", + "markdownDescription": "%python.createEnvironment.trigger.description%", + "scope": "machine-overridable", + "type": "string", + "enum": [ + "off", + "prompt" + ] }, - { - "when": "resourceLangId == python", - "command": "python.execInTerminal", - "group": "Python" + "python.condaPath": { + "default": "", + "description": "%python.condaPath.description%", + "scope": "machine", + "type": "string" }, - { - "when": "resourceLangId == python", - "command": "python.runCurrentTestFile", - "group": "Python" - }, - { - "when": "editorFocus && editorLangId == python && python.datascience.hascodecells && python.datascience.featureenabled", - "command": "python.datascience.runallcells", - "group": "Python2" - }, - { - "when": "editorFocus && editorLangId == python && python.datascience.hascodecells && python.datascience.featureenabled", - "command": "python.datascience.runcurrentcell", - "group": "Python2" - }, - { - "when": "editorFocus && editorLangId == python && python.datascience.hascodecells && python.datascience.featureenabled", - "command": "python.datascience.runcurrentcelladvance", - "group": "Python2" - }, - { - "command": "python.datascience.runFileInteractive", - "group": "Python2", - "when": "editorFocus && editorLangId == python && python.datascience.featureenabled" - }, - { - "command": "python.datascience.runfromline", - "group": "Python2", - "when": "editorFocus && editorLangId == python && python.datascience.ownsSelection && python.datascience.featureenabled" - }, - { - "command": "python.datascience.runtoline", - "group": "Python2", - "when": "editorFocus && editorLangId == python && python.datascience.ownsSelection && python.datascience.featureenabled" - }, - { - "command": "python.datascience.execSelectionInteractive", - "group": "Python2", - "when": "editorFocus && editorLangId == python && python.datascience.featureenabled && python.datascience.ownsSelection" - }, - { - "when": "editorFocus && editorLangId == python && resourceLangId == jupyter && python.datascience.featureenabled", - "command": "python.datascience.importnotebook", - "group": "Python3@1" - }, - { - "when": "editorFocus && editorLangId == python && python.datascience.hascodecells && python.datascience.featureenabled", - "command": "python.datascience.exportfileasnotebook", - "group": "Python3@2" - }, - { - "when": "editorFocus && editorLangId == python && python.datascience.hascodecells && python.datascience.featureenabled", - "command": "python.datascience.exportfileandoutputasnotebook", - "group": "Python3@3" - } - ], - "editor/title": [ - { - "command": "python.execInTerminal-icon", - "title": "%python.command.python.execInTerminal.title%", - "group": "navigation", - "when": "resourceLangId == python && python.showPlayIcon" - } - ], - "explorer/context": [ - { - "when": "resourceLangId == python && !busyTests", - "command": "python.runtests", - "group": "Python" - }, - { - "when": "resourceLangId == python && !busyTests", - "command": "python.debugtests", - "group": "Python" - }, - { - "when": "resourceLangId == python", - "command": "python.execInTerminal", - "group": "Python" - }, - { - "when": "resourceLangId == python && python.datascience.featureenabled", - "command": "python.datascience.runFileInteractive", - "group": "Python2" - }, - { - "when": "resourceLangId == jupyter", - "command": "python.datascience.opennotebook", - "group": "Python" - }, - { - "when": "resourceLangId == jupyter", - "command": "python.datascience.importnotebookfile", - "group": "Python" - } - ], - "commandPalette": [ - { - "command": "python.switchOffInsidersChannel", - "title": "%python.command.python.switchOffInsidersChannel.title%", - "category": "Python", - "when": "config.python.insidersChannel != 'default'" - }, - { - "command": "python.switchToDailyChannel", - "title": "%python.command.python.switchToDailyChannel.title%", - "category": "Python", - "when": "config.python.insidersChannel != 'daily'" - }, - { - "command": "python.switchToWeeklyChannel", - "title": "%python.command.python.switchToWeeklyChannel.title%", - "category": "Python", - "when": "config.python.insidersChannel != 'weekly'" + "python.defaultInterpreterPath": { + "default": "python", + "markdownDescription": "%python.defaultInterpreterPath.description%", + "scope": "machine-overridable", + "type": "string" }, - { - "command": "python.clearWorkspaceInterpreter", - "title": "%python.command.python.clearWorkspaceInterpreter.title%", - "category": "Python" + "python.envFile": { + "default": "${workspaceFolder}/.env", + "description": "%python.envFile.description%", + "scope": "resource", + "type": "string" }, - { - "command": "python.resetInterpreterSecurityStorage", - "title": "%python.command.python.resetInterpreterSecurityStorage.title%", - "category": "Python" + "python.useEnvironmentsExtension": { + "default": false, + "description": "%python.useEnvironmentsExtension.description%", + "scope": "machine-overridable", + "type": "boolean", + "tags": [ + "onExP", + "preview" + ] }, - { - "command": "python.viewOutput", - "title": "%python.command.python.viewOutput.title%", - "category": "Python" + "python.experiments.enabled": { + "default": true, + "description": "%python.experiments.enabled.description%", + "scope": "window", + "type": "boolean" }, - { - "command": "python.runTestNode", - "title": "Run", - "category": "Python", - "when": "config.noExists" + "python.experiments.optInto": { + "default": [], + "markdownDescription": "%python.experiments.optInto.description%", + "items": { + "enum": [ + "All", + "pythonSurveyNotification", + "pythonPromptNewToolsExt", + "pythonTerminalEnvVarActivation", + "pythonDiscoveryUsingWorkers", + "pythonTestAdapter" + ], + "enumDescriptions": [ + "%python.experiments.All.description%", + "%python.experiments.pythonSurveyNotification.description%", + "%python.experiments.pythonPromptNewToolsExt.description%", + "%python.experiments.pythonTerminalEnvVarActivation.description%", + "%python.experiments.pythonDiscoveryUsingWorkers.description%", + "%python.experiments.pythonTestAdapter.description%" + ] + }, + "scope": "window", + "type": "array", + "uniqueItems": true }, - { - "command": "python.discoveringTests", - "category": "Python", - "when": "config.noExists" + "python.experiments.optOutFrom": { + "default": [], + "markdownDescription": "%python.experiments.optOutFrom.description%", + "items": { + "enum": [ + "All", + "pythonSurveyNotification", + "pythonPromptNewToolsExt", + "pythonTerminalEnvVarActivation", + "pythonDiscoveryUsingWorkers", + "pythonTestAdapter" + ], + "enumDescriptions": [ + "%python.experiments.All.description%", + "%python.experiments.pythonSurveyNotification.description%", + "%python.experiments.pythonPromptNewToolsExt.description%", + "%python.experiments.pythonTerminalEnvVarActivation.description%", + "%python.experiments.pythonDiscoveryUsingWorkers.description%", + "%python.experiments.pythonTestAdapter.description%" + ] + }, + "scope": "window", + "type": "array", + "uniqueItems": true }, - { - "command": "python.stopTests", - "category": "Python", - "when": "config.noExists" + "python.globalModuleInstallation": { + "default": false, + "description": "%python.globalModuleInstallation.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.debugTestNode", - "title": "Debug", - "category": "Python", - "when": "config.noExists" + "python.languageServer": { + "default": "Default", + "description": "%python.languageServer.description%", + "enum": [ + "Default", + "Jedi", + "Pylance", + "None" + ], + "enumDescriptions": [ + "%python.languageServer.defaultDescription%", + "%python.languageServer.jediDescription%", + "%python.languageServer.pylanceDescription%", + "%python.languageServer.noneDescription%" + ], + "scope": "window", + "type": "string" }, - { - "command": "python.openTestNodeInEditor", - "title": "Open", - "category": "Python", - "when": "config.noExists" + "python.interpreter.infoVisibility": { + "default": "onPythonRelated", + "description": "%python.interpreter.infoVisibility.description%", + "enum": [ + "never", + "onPythonRelated", + "always" + ], + "enumDescriptions": [ + "%python.interpreter.infoVisibility.never.description%", + "%python.interpreter.infoVisibility.onPythonRelated.description%", + "%python.interpreter.infoVisibility.always.description%" + ], + "scope": "machine", + "type": "string" }, - { - "command": "python.datascience.runcurrentcell", - "title": "%python.command.python.datascience.runcurrentcell.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonornativeactive" + "python.logging.level": { + "default": "error", + "deprecationMessage": "%python.logging.level.deprecation%", + "description": "%python.logging.level.description%", + "enum": [ + "debug", + "error", + "info", + "off", + "warn" + ], + "scope": "machine", + "type": "string" }, - { - "command": "python.datascience.runcurrentcelladvance", - "title": "%python.command.python.datascience.runcurrentcelladvance.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonornativeactive" + "python.missingPackage.severity": { + "default": "Hint", + "description": "%python.missingPackage.severity.description%", + "enum": [ + "Error", + "Hint", + "Information", + "Warning" + ], + "scope": "resource", + "type": "string" }, - { - "command": "python.datascience.runcurrentcellandallbelow.palette", - "title": "%python.command.python.datascience.runcurrentcellandallbelow.palette.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonornativeactive" + "python.locator": { + "default": "js", + "description": "%python.locator.description%", + "enum": [ + "js", + "native" + ], + "tags": [ + "onExP", + "preview" + ], + "scope": "machine", + "type": "string" }, - { - "command": "python.datascience.runallcellsabove.palette", - "title": "%python.command.python.datascience.runallcellsabove.palette.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonornativeactive" + "python.pipenvPath": { + "default": "pipenv", + "description": "%python.pipenvPath.description%", + "scope": "machine-overridable", + "type": "string" }, - { - "command": "python.datascience.debugcurrentcell.palette", - "title": "%python.command.python.datascience.debugcurrentcell.palette.title%", - "category": "Python", - "when": "editorLangId == python && python.datascience.hascodecells && python.datascience.featureenabled" + "python.poetryPath": { + "default": "poetry", + "description": "%python.poetryPath.description%", + "scope": "machine-overridable", + "type": "string" }, - { - "command": "python.datascience.showhistorypane", - "title": "%python.command.python.datascience.showhistorypane.title%", - "category": "Python", - "when": "python.datascience.featureenabled && !python.datascience.isinteractiveactive" + "python.pixiToolPath": { + "default": "pixi", + "description": "%python.pixiToolPath.description%", + "scope": "machine-overridable", + "type": "string" }, - { - "command": "python.datascience.runallcells", - "title": "%python.command.python.datascience.runallcells.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonornativeactive" + "python.terminal.activateEnvInCurrentTerminal": { + "default": false, + "description": "%python.terminal.activateEnvInCurrentTerminal.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.scrolltocell", - "title": "%python.command.python.datascience.scrolltocell.title%", - "category": "Python", - "when": "false" + "python.terminal.activateEnvironment": { + "default": true, + "description": "%python.terminal.activateEnvironment.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.debugcell", - "title": "%python.command.python.datascience.debugcell.title%", - "category": "Python", - "when": "config.noExists" + "python.terminal.executeInFileDir": { + "default": false, + "description": "%python.terminal.executeInFileDir.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.runcell", - "title": "%python.command.python.datascience.runcell.title%", - "category": "Python", - "when": "config.noExists" + "python.terminal.focusAfterLaunch": { + "default": false, + "description": "%python.terminal.focusAfterLaunch.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.runFileInteractive", - "title": "%python.command.python.datascience.runFileInteractive.title%", - "category": "Python", - "when": "editorLangId == python && python.datascience.featureenabled" + "python.terminal.launchArgs": { + "default": [], + "description": "%python.terminal.launchArgs.description%", + "scope": "resource", + "type": "array" }, - { - "command": "python.datascience.debugFileInteractive", - "title": "%python.command.python.datascience.debugFileInteractive.title%", - "category": "Python", - "when": "editorLangId == python && python.datascience.featureenabled" + "python.terminal.shellIntegration.enabled": { + "default": true, + "markdownDescription": "%python.terminal.shellIntegration.enabled.description%", + "scope": "resource", + "type": "boolean", + "tags": [ + "preview" + ] }, - { - "command": "python.datascience.importnotebook", - "title": "%python.command.python.datascience.importnotebook.title%", - "category": "Python" + "python.REPL.enableREPLSmartSend": { + "default": true, + "description": "%python.EnableREPLSmartSend.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.opennotebook", - "title": "%python.command.python.datascience.opennotebook.title%", - "category": "Python" + "python.REPL.sendToNativeREPL": { + "default": false, + "description": "%python.REPL.sendToNativeREPL.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.exportfileasnotebook", - "title": "%python.command.python.datascience.exportfileasnotebook.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonorinteractiveeactive" + "python.REPL.provideVariables": { + "default": true, + "description": "%python.REPL.provideVariables.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.exportfileandoutputasnotebook", - "title": "%python.command.python.datascience.exportfileandoutputasnotebook.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonorinteractiveeactive" + "python.testing.autoTestDiscoverOnSaveEnabled": { + "default": true, + "description": "%python.testing.autoTestDiscoverOnSaveEnabled.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.undocells", - "title": "%python.command.python.datascience.undocells.title%", - "category": "Python", - "when": "python.datascience.haveinteractivecells && python.datascience.featureenabled && python.datascience.ispythonorinteractiveeactive" + "python.testing.autoTestDiscoverOnSavePattern": { + "default": "**/*.py", + "description": "%python.testing.autoTestDiscoverOnSavePattern.description%", + "scope": "resource", + "type": "string" }, - { - "command": "python.datascience.redocells", - "title": "%python.command.python.datascience.redocells.title%", - "category": "Python", - "when": "python.datascience.haveredoablecells && python.datascience.featureenabled && python.datascience.ispythonorinteractiveornativeeactive" + "python.testing.cwd": { + "default": null, + "description": "%python.testing.cwd.description%", + "scope": "resource", + "type": "string" }, - { - "command": "python.datascience.removeallcells", - "title": "%python.command.python.datascience.removeallcells.title%", - "category": "Python", - "when": "python.datascience.haveinteractivecells && python.datascience.featureenabled && python.datascience.ispythonorinteractiveeactive" + "python.testing.debugPort": { + "default": 3000, + "description": "%python.testing.debugPort.description%", + "scope": "resource", + "type": "number" }, - { - "command": "python.datascience.interruptkernel", - "title": "%python.command.python.datascience.interruptkernel.title%", - "category": "Python", - "when": "python.datascience.haveinteractive && python.datascience.featureenabled && python.datascience.ispythonorinteractiveeactive" + "python.testing.promptToConfigure": { + "default": true, + "description": "%python.testing.promptToConfigure.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.restartkernel", - "title": "%python.command.python.datascience.restartkernel.title%", - "category": "Python", - "when": "python.datascience.haveinteractive && python.datascience.featureenabled && python.datascience.ispythonorinteractiveeactive" + "python.testing.pytestArgs": { + "default": [], + "description": "%python.testing.pytestArgs.description%", + "items": { + "type": "string" + }, + "scope": "resource", + "type": "array" }, - { - "command": "python.datascience.notebookeditor.undocells", - "title": "%python.command.python.datascience.undocells.title%", - "category": "Python", - "when": "python.datascience.haveinteractivecells && python.datascience.featureenabled && python.datascience.isnativeactive" + "python.testing.pytestEnabled": { + "default": false, + "description": "%python.testing.pytestEnabled.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.notebookeditor.redocells", - "title": "%python.command.python.datascience.redocells.title%", - "category": "Python", - "when": "python.datascience.havenativeredoablecells && python.datascience.featureenabled && python.datascience.isnativeactive" + "python.testing.pytestPath": { + "default": "pytest", + "description": "%python.testing.pytestPath.description%", + "scope": "machine-overridable", + "type": "string" }, - { - "command": "python.datascience.notebookeditor.removeallcells", - "title": "%python.command.python.datascience.notebookeditor.removeallcells.title%", - "category": "Python", - "when": "python.datascience.havenativecells && python.datascience.featureenabled && python.datascience.isnativeactive" + "python.testing.unittestArgs": { + "default": [ + "-v", + "-s", + ".", + "-p", + "*test*.py" + ], + "description": "%python.testing.unittestArgs.description%", + "items": { + "type": "string" + }, + "scope": "resource", + "type": "array" }, - { - "command": "python.datascience.notebookeditor.interruptkernel", - "title": "%python.command.python.datascience.interruptkernel.title%", - "category": "Python", - "when": "python.datascience.isnativeactive && python.datascience.featureenabled" + "python.testing.unittestEnabled": { + "default": false, + "description": "%python.testing.unittestEnabled.description%", + "scope": "resource", + "type": "boolean" }, - { - "command": "python.datascience.notebookeditor.restartkernel", - "title": "%python.command.python.datascience.restartkernel.title%", - "category": "Python", - "when": "python.datascience.isnativeactive && python.datascience.featureenabled" + "python.venvFolders": { + "default": [], + "description": "%python.venvFolders.description%", + "items": { + "type": "string" + }, + "scope": "machine", + "type": "array", + "uniqueItems": true }, - { - "command": "python.datascience.notebookeditor.runallcells", - "title": "%python.command.python.datascience.notebookeditor.runallcells.title%", - "category": "Python", - "when": "python.datascience.isnativeactive && python.datascience.featureenabled" - }, - { - "command": "python.datascience.notebookeditor.runselectedcell", - "title": "%python.command.python.datascience.notebookeditor.runselectedcell.title%", - "category": "Python", - "when": "python.datascience.isnativeactive && python.datascience.featureenabled && python.datascience.havecellselected" - }, - { - "command": "python.datascience.notebookeditor.addcellbelow", - "title": "%python.command.python.datascience.notebookeditor.addcellbelow.title%", - "category": "Python", - "when": "python.datascience.isnativeactive && python.datascience.featureenabled" - }, - { - "command": "python.datascience.expandallcells", - "title": "%python.command.python.datascience.expandallcells.title%", - "category": "Python", - "when": "python.datascience.isinteractiveactive && python.datascience.featureenabled" - }, - { - "command": "python.datascience.collapseallcells", - "title": "%python.command.python.datascience.collapseallcells.title%", - "category": "Python", - "when": "python.datascience.isinteractiveactive && python.datascience.featureenabled" - }, - { - "command": "python.datascience.exportoutputasnotebook", - "title": "%python.command.python.datascience.exportoutputasnotebook.title%", - "category": "Python", - "when": "python.datascience.isinteractiveactive && python.datascience.featureenabled" - }, - { - "command": "python.datascience.runcellandallbelow", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.runallcellsabove", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.debugcontinue", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.debugstop", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.debugstepover", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.debugcell", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.addcellbelow", - "title": "%python.command.python.datascience.addcellbelow.title%", - "category": "Python", - "when": "python.datascience.hascodecells && python.datascience.featureenabled && python.datascience.ispythonornativeactive" - }, - { - "command": "python.datascience.createnewnotebook", - "title": "%python.command.python.datascience.createnewnotebook.title%", - "category": "Python" - }, - { - "command": "python.datascience.runtoline", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.runfromline", - "category": "Python", - "when": "config.noExists" - }, - { - "command": "python.datascience.execSelectionInteractive", - "category": "Python", - "when": "editorLangId == python && python.datascience.featureenabled" - }, - { - "command": "python.datascience.switchKernel", - "title": "%DataScience.selectKernel%", - "category": "Python", - "when": "python.datascience.isnativeactive" - }, - { - "command": "python.datascience.gatherquality", - "title": "%DataScience.gatherQuality%", - "category": "Python", - "when": "false" - } - ], - "view/title": [ - { - "command": "python.debugtests", - "when": "view == python_tests && !busyTests", - "group": "navigation@3" - }, - { - "command": "python.runtests", - "when": "view == python_tests && !busyTests", - "group": "navigation@1" - }, - { - "command": "python.stopTests", - "when": "view == python_tests && busyTests", - "group": "navigation@1" - }, - { - "command": "python.discoverTests", - "when": "view == python_tests && !busyTests", - "group": "navigation@4" - }, - { - "command": "python.discoveringTests", - "when": "view == python_tests && discoveringTests", - "group": "navigation@4" - }, - { - "command": "python.runFailedTests", - "when": "view == python_tests && hasFailedTests && !busyTests", - "group": "navigation@2" - }, - { - "command": "python.viewTestOutput", - "when": "view == python_tests", - "group": "navigation@5" - } - ], - "view/item/context": [ - { - "command": "python.runtests", - "when": "view == python_tests && viewItem == testWorkspaceFolder && !busyTests", - "group": "inline@0" - }, - { - "command": "python.debugtests", - "when": "view == python_tests && viewItem == testWorkspaceFolder && !busyTests", - "group": "inline@1" - }, - { - "command": "python.discoverTests", - "when": "view == python_tests && viewItem == testWorkspaceFolder && !busyTests", - "group": "inline@2" - }, - { - "command": "python.openTestNodeInEditor", - "when": "view == python_tests && viewItem == function", - "group": "inline@2" - }, - { - "command": "python.debugTestNode", - "when": "view == python_tests && viewItem == function && !busyTests", - "group": "inline@1" - }, - { - "command": "python.runTestNode", - "when": "view == python_tests && viewItem == function && !busyTests", - "group": "inline@0" - }, - { - "command": "python.openTestNodeInEditor", - "when": "view == python_tests && viewItem == file", - "group": "inline@2" - }, - { - "command": "python.debugTestNode", - "when": "view == python_tests && viewItem == file && !busyTests", - "group": "inline@1" - }, - { - "command": "python.runTestNode", - "when": "view == python_tests && viewItem == file && !busyTests", - "group": "inline@0" - }, - { - "command": "python.openTestNodeInEditor", - "when": "view == python_tests && viewItem == suite", - "group": "inline@2" - }, - { - "command": "python.debugTestNode", - "when": "view == python_tests && viewItem == suite && !busyTests", - "group": "inline@1" - }, - { - "command": "python.runTestNode", - "when": "view == python_tests && viewItem == suite && !busyTests", - "group": "inline@0" + "python.venvPath": { + "default": "", + "description": "%python.venvPath.description%", + "scope": "machine", + "type": "string" } - ] - }, - "breakpoints": [ - { - "language": "python" - }, - { - "language": "html" }, - { - "language": "jinja" - } - ], + "title": "Python", + "type": "object" + }, "debuggers": [ { - "type": "python", - "label": "Python", - "languages": [ - "python" - ], - "program": "./out/client/debugger/debugAdapter/main.js", - "runtime": "node", - "variables": { - "pickProcess": "python.pickLocalProcess" - }, - "configurationSnippets": [], "configurationAttributes": { - "launch": { + "attach": { "properties": { - "module": { - "type": "string", - "description": "Name of the module to be debugged.", - "default": "" - }, - "program": { - "type": "string", - "description": "Absolute path to the program.", - "default": "${file}" - }, - "pythonPath": { - "type": "string", - "description": "Path (fully qualified) to python executable. Defaults to the value in settings.json", - "default": "${config:python.pythonPath}" + "connect": { + "label": "Attach by connecting to debugpy over a socket.", + "properties": { + "host": { + "default": "127.0.0.1", + "description": "Hostname or IP address to connect to.", + "type": "string" + }, + "port": { + "description": "Port to connect to.", + "type": "number" + } + }, + "required": [ + "port" + ], + "type": "object" }, - "args": { - "type": "array", - "description": "Command line arguments passed to the program", - "default": [], - "items": { - "type": "string" - } + "debugAdapterPath": { + "description": "Path (fully qualified) to the python debug adapter executable.", + "type": "string" }, - "stopOnEntry": { - "type": "boolean", - "description": "Automatically stop after launch.", - "default": false + "django": { + "default": false, + "description": "Django debugging.", + "type": "boolean" }, - "showReturnValue": { - "type": "boolean", - "description": "Show return value of functions when stepping.", - "default": true + "host": { + "default": "127.0.0.1", + "description": "Hostname or IP address to connect to.", + "type": "string" }, - "console": { + "jinja": { + "default": null, + "description": "Jinja template debugging (e.g. Flask).", "enum": [ - "internalConsole", - "integratedTerminal", - "externalTerminal" - ], - "description": "Where to launch the debug target: internal console, integrated terminal, or external terminal.", - "default": "integratedTerminal" - }, - "cwd": { - "type": "string", - "description": "Absolute path to the working directory of the program being debugged. Default is the root directory of the file (leave empty).", - "default": "${workspaceFolder}" - }, - "env": { - "type": "object", - "description": "Environment variables defined as a key value pair. Property ends up being the Environment Variable and the value of the property ends up being the value of the Env Variable.", - "default": {}, - "additionalProperties": { - "type": "string" - } + false, + null, + true + ] }, - "envFile": { - "type": "string", - "description": "Absolute path to a file containing environment variable definitions.", - "default": "${workspaceFolder}/.env" + "justMyCode": { + "default": true, + "description": "If true, show and debug only user-written code. If false, show and debug all code, including library calls.", + "type": "boolean" }, - "port": { - "type": "number", - "description": "Debug port (default is 0, resulting in the use of a dynamic port).", - "default": 0 + "listen": { + "label": "Attach by listening for incoming socket connection from debugpy", + "properties": { + "host": { + "default": "127.0.0.1", + "description": "Hostname or IP address of the interface to listen on.", + "type": "string" + }, + "port": { + "description": "Port to listen on.", + "type": "number" + } + }, + "required": [ + "port" + ], + "type": "object" }, - "host": { - "type": "string", - "description": "IP address of the of the local debug server (default is localhost).", - "default": "localhost" + "logToFile": { + "default": false, + "description": "Enable logging of debugger events to a log file.", + "type": "boolean" }, "pathMappings": { - "type": "array", - "label": "Path mappings.", + "default": [], "items": { - "type": "object", "label": "Path mapping", - "required": [ - "localRoot", - "remoteRoot" - ], "properties": { "localRoot": { - "type": "string", + "default": "${workspaceFolder}", "label": "Local source root.", - "default": "${workspaceFolder}" + "type": "string" }, "remoteRoot": { - "type": "string", + "default": "", "label": "Remote source root.", - "default": "" + "type": "string" } - } + }, + "required": [ + "localRoot", + "remoteRoot" + ], + "type": "object" }, - "default": [] + "label": "Path mappings.", + "type": "array" }, - "logToFile": { - "type": "boolean", - "description": "Enable logging of debugger events to a log file.", - "default": false + "port": { + "description": "Port to connect to.", + "type": "number" + }, + "processId": { + "anyOf": [ + { + "default": "${command:pickProcess}", + "description": "Use process picker to select a process to attach, or Process ID as integer.", + "enum": [ + "${command:pickProcess}" + ] + }, + { + "description": "ID of the local process to attach to.", + "type": "integer" + } + ] }, "redirectOutput": { - "type": "boolean", + "default": true, "description": "Redirect output.", - "default": true - }, - "justMyCode": { - "type": "boolean", - "description": "Debug only user-written code.", - "default": true - }, - "gevent": { - "type": "boolean", - "description": "Enable debugging of gevent monkey-patched code.", - "default": false - }, - "django": { - "type": "boolean", - "description": "Django debugging.", - "default": false - }, - "jinja": { - "enum": [ - true, - false, - null - ], - "description": "Jinja template debugging (e.g. Flask).", - "default": null - }, - "sudo": { - "type": "boolean", - "description": "Running debug program under elevated permissions (on Unix).", - "default": false + "type": "boolean" }, - "pyramid": { - "type": "boolean", - "description": "Whether debugging Pyramid applications", - "default": false + "showReturnValue": { + "default": true, + "description": "Show return value of functions when stepping.", + "type": "boolean" }, "subProcess": { - "type": "boolean", + "default": false, "description": "Whether to enable Sub Process debugging", - "default": false + "type": "boolean" } } }, - "test": { + "launch": { "properties": { - "pythonPath": { - "type": "string", - "description": "Path (fully qualified) to python executable. Defaults to the value in settings.json", - "default": "${config:python.pythonPath}" - }, - "stopOnEntry": { - "type": "boolean", - "description": "Automatically stop after launch.", - "default": false - }, - "showReturnValue": { - "type": "boolean", - "description": "Show return value of functions when stepping.", - "default": true + "args": { + "default": [], + "description": "Command line arguments passed to the program.", + "items": { + "type": "string" + }, + "type": [ + "array", + "string" + ] }, - "console": { + "autoReload": { + "default": {}, + "description": "Configures automatic reload of code on edit.", + "properties": { + "enable": { + "default": false, + "description": "Automatically reload code on edit.", + "type": "boolean" + }, + "exclude": { + "default": [ + "**/.git/**", + "**/.metadata/**", + "**/__pycache__/**", + "**/node_modules/**", + "**/site-packages/**" + ], + "description": "Glob patterns of paths to exclude from auto reload.", + "items": { + "type": "string" + }, + "type": "array" + }, + "include": { + "default": [ + "**/*.py", + "**/*.pyw" + ], + "description": "Glob patterns of paths to include in auto reload.", + "items": { + "type": "string" + }, + "type": "array" + } + }, + "type": "object" + }, + "console": { + "default": "integratedTerminal", + "description": "Where to launch the debug target: internal console, integrated terminal, or external terminal.", "enum": [ - "internalConsole", + "externalTerminal", "integratedTerminal", - "externalTerminal" - ], - "description": "Where to launch the debug target: internal console, integrated terminal, or external terminal.", - "default": "internalConsole" + "internalConsole" + ] + }, + "consoleTitle": { + "default": "Python Debug Console", + "description": "Display name of the debug console or terminal" }, "cwd": { - "type": "string", + "default": "${workspaceFolder}", "description": "Absolute path to the working directory of the program being debugged. Default is the root directory of the file (leave empty).", - "default": "${workspaceFolder}" + "type": "string" + }, + "debugAdapterPath": { + "description": "Path (fully qualified) to the python debug adapter executable.", + "type": "string" + }, + "django": { + "default": false, + "description": "Django debugging.", + "type": "boolean" }, "env": { - "type": "object", - "description": "Environment variables defined as a key value pair. Property ends up being the Environment Variable and the value of the property ends up being the value of the Env Variable.", - "default": {}, "additionalProperties": { "type": "string" - } + }, + "default": {}, + "description": "Environment variables defined as a key value pair. Property ends up being the Environment Variable and the value of the property ends up being the value of the Env Variable.", + "type": "object" }, "envFile": { - "type": "string", + "default": "${workspaceFolder}/.env", "description": "Absolute path to a file containing environment variable definitions.", - "default": "${workspaceFolder}/.env" + "type": "string" }, - "redirectOutput": { - "type": "boolean", - "description": "Redirect output.", - "default": true + "gevent": { + "default": false, + "description": "Enable debugging of gevent monkey-patched code.", + "type": "boolean" }, - "justMyCode": { - "type": "boolean", - "description": "Debug only user-written code.", - "default": true - } - } - }, - "attach": { - "properties": { - "connect": { - "type": "object", - "label": "Attach by connecting to debugpy over a socket.", - "properties": { - "port": { - "type": "number", - "description": "Port to connect to." - }, - "host": { - "type": "string", - "description": "Hostname or IP address to connect to.", - "default": "127.0.0.1" - } - }, - "required": [ - "port" - ] + "host": { + "default": "localhost", + "description": "IP address of the of the local debug server (default is localhost).", + "type": "string" }, - "listen": { - "type": "object", - "label": "Attach by listening for incoming socket connection from debugpy", - "properties": { - "port": { - "type": "number", - "description": "Port to listen on." - }, - "host": { - "type": "string", - "description": "Hostname or IP address of the interface to listen on.", - "default": "127.0.0.1" - } - }, - "required": [ - "port" + "jinja": { + "default": null, + "description": "Jinja template debugging (e.g. Flask).", + "enum": [ + false, + null, + true ] }, - "port": { - "type": "number", - "description": "Port to connect to." + "justMyCode": { + "default": true, + "description": "Debug only user-written code.", + "type": "boolean" }, - "host": { - "type": "string", - "description": "Hostname or IP address to connect to.", - "default": "127.0.0.1" + "logToFile": { + "default": false, + "description": "Enable logging of debugger events to a log file.", + "type": "boolean" + }, + "module": { + "default": "", + "description": "Name of the module to be debugged.", + "type": "string" }, "pathMappings": { - "type": "array", - "label": "Path mappings.", + "default": [], "items": { - "type": "object", "label": "Path mapping", - "required": [ - "localRoot", - "remoteRoot" - ], "properties": { "localRoot": { - "type": "string", + "default": "${workspaceFolder}", "label": "Local source root.", - "default": "${workspaceFolder}" + "type": "string" }, "remoteRoot": { - "type": "string", + "default": "", "label": "Remote source root.", - "default": "" + "type": "string" } - } + }, + "required": [ + "localRoot", + "remoteRoot" + ], + "type": "object" }, - "default": [] + "label": "Path mappings.", + "type": "array" }, - "logToFile": { - "type": "boolean", - "description": "Enable logging of debugger events to a log file.", - "default": false + "port": { + "default": 0, + "description": "Debug port (default is 0, resulting in the use of a dynamic port).", + "type": "number" }, - "redirectOutput": { - "type": "boolean", - "description": "Redirect output.", - "default": true + "program": { + "default": "${file}", + "description": "Absolute path to the program.", + "type": "string" }, - "justMyCode": { - "type": "boolean", - "description": "Debug only user-written code.", - "default": true + "purpose": { + "default": [], + "description": "Tells extension to use this configuration for test debugging, or when using debug-in-terminal command.", + "items": { + "enum": [ + "debug-test", + "debug-in-terminal" + ], + "enumDescriptions": [ + "Use this configuration while debugging tests using test view or test debug commands.", + "Use this configuration while debugging a file using debug in terminal button in the editor." + ] + }, + "type": "array" }, - "django": { - "type": "boolean", - "description": "Django debugging.", - "default": false + "pyramid": { + "default": false, + "description": "Whether debugging Pyramid applications", + "type": "boolean" }, - "jinja": { - "enum": [ - true, - false, - null - ], - "description": "Jinja template debugging (e.g. Flask).", - "default": null + "python": { + "default": "${command:python.interpreterPath}", + "description": "Absolute path to the Python interpreter executable; overrides workspace configuration if set.", + "type": "string" }, - "subProcess": { - "type": "boolean", - "description": "Whether to enable Sub Process debugging", - "default": false + "pythonArgs": { + "default": [], + "description": "Command-line arguments passed to the Python interpreter. To pass arguments to the debug target, use \"args\".", + "items": { + "type": "string" + }, + "type": "array" + }, + "redirectOutput": { + "default": true, + "description": "Redirect output.", + "type": "boolean" }, "showReturnValue": { - "type": "boolean", + "default": true, "description": "Show return value of functions when stepping.", - "default": true + "type": "boolean" }, - "processId": { - "anyOf": [ - { - "enum": [ - "${command:pickProcess}" - ], - "description": "Use process picker to select a process to attach, or Process ID as integer.", - "default": "${command:pickProcess}" - }, - { - "type": "integer", - "description": "ID of the local process to attach to." - } - ] + "stopOnEntry": { + "default": false, + "description": "Automatically stop after launch.", + "type": "boolean" + }, + "subProcess": { + "default": false, + "description": "Whether to enable Sub Process debugging", + "type": "boolean" + }, + "sudo": { + "default": false, + "description": "Running debug program under elevated permissions (on Unix).", + "type": "boolean" } } } - } + }, + "deprecated": "%python.debugger.deprecatedMessage%", + "configurationSnippets": [], + "label": "Python", + "languages": [ + "python" + ], + "type": "python", + "variables": { + "pickProcess": "python.pickLocalProcess" + }, + "when": "!virtualWorkspace && shellExecutionSupported", + "hiddenWhen": "true" } ], - "configuration": { - "type": "object", - "title": "Python", - "properties": { - "python.diagnostics.sourceMapsEnabled": { - "type": "boolean", - "default": false, - "description": "Enable source map support for meaningful stack traces in error logs.", - "scope": "application" + "grammars": [ + { + "language": "pip-requirements", + "path": "./syntaxes/pip-requirements.tmLanguage.json", + "scopeName": "source.pip-requirements" + } + ], + "jsonValidation": [ + { + "fileMatch": ".condarc", + "url": "./schemas/condarc.json" + }, + { + "fileMatch": "environment.yml", + "url": "./schemas/conda-environment.json" + }, + { + "fileMatch": "meta.yaml", + "url": "./schemas/conda-meta.json" + } + ], + "keybindings": [ + { + "command": "python.execSelectionInTerminal", + "key": "shift+enter", + "when": "editorTextFocus && editorLangId == python && !findInputFocussed && !replaceInputFocussed && !jupyter.ownsSelection && !notebookEditorFocused && !isCompositeNotebook" + }, + { + "command": "python.execInREPL", + "key": "shift+enter", + "when": "config.python.REPL.sendToNativeREPL && editorLangId == python && editorTextFocus && !jupyter.ownsSelection && !notebookEditorFocused && !isCompositeNotebook" + }, + { + "command": "python.execInREPLEnter", + "key": "enter", + "when": "!config.interactiveWindow.executeWithShiftEnter && isCompositeNotebook && activeEditor == 'workbench.editor.repl' && !inlineChatFocused && !notebookCellListFocused" + }, + { + "command": "python.execInInteractiveWindowEnter", + "key": "enter", + "when": "!config.interactiveWindow.executeWithShiftEnter && isCompositeNotebook && activeEditor == 'workbench.editor.interactive' && !inlineChatFocused && !notebookCellListFocused" + } + ], + "languages": [ + { + "aliases": [ + "Jinja" + ], + "extensions": [ + ".j2", + ".jinja2" + ], + "id": "jinja" + }, + { + "aliases": [ + "pip requirements", + "requirements.txt" + ], + "configuration": "./languages/pip-requirements.json", + "filenamePatterns": [ + "**/*requirements*.{txt, in}", + "**/*constraints*.txt", + "**/requirements/*.{txt,in}", + "**/constraints/*.txt" + ], + "filenames": [ + "constraints.txt", + "requirements.in", + "requirements.txt" + ], + "id": "pip-requirements" + }, + { + "filenames": [ + ".condarc" + ], + "id": "yaml" + }, + { + "filenames": [ + ".flake8", + ".pep8", + ".pylintrc", + ".pypirc" + ], + "id": "ini" + }, + { + "filenames": [ + "Pipfile", + "poetry.lock", + "uv.lock" + ], + "id": "toml" + }, + { + "filenames": [ + "Pipfile.lock" + ], + "id": "json" + } + ], + "menus": { + "issue/reporter": [ + { + "command": "python.reportIssue" + } + ], + "testing/item/context": [ + { + "command": "python.copyTestId", + "group": "navigation", + "when": "controllerId == 'python-tests'" + } + ], + "testing/item/gutter": [ + { + "command": "python.copyTestId", + "group": "navigation", + "when": "controllerId == 'python-tests'" + } + ], + "commandPalette": [ + { + "category": "Python", + "command": "python.analysis.restartLanguageServer", + "title": "%python.command.python.analysis.restartLanguageServer.title%", + "when": "!virtualWorkspace && shellExecutionSupported && (editorLangId == python || notebookType == jupyter-notebook)" }, - "python.autoComplete.addBrackets": { - "type": "boolean", - "default": false, - "description": "Automatically add brackets for functions.", - "scope": "resource" + { + "category": "Python", + "command": "python.clearCacheAndReload", + "title": "%python.command.python.clearCacheAndReload.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.autoComplete.extraPaths": { - "type": "array", - "default": [], - "description": "List of paths to libraries and the like that need to be imported by auto complete engine. E.g. when using Google App SDK, the paths are not in system path, hence need to be added into this list.", - "scope": "resource" + { + "category": "Python", + "command": "python.clearWorkspaceInterpreter", + "title": "%python.command.python.clearWorkspaceInterpreter.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.autoComplete.showAdvancedMembers": { - "type": "boolean", - "default": true, - "description": "Controls appearance of methods with double underscores in the completion list.", - "scope": "resource" - }, - "python.autoComplete.typeshedPaths": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "Specifies paths to local typeshed repository clone(s) for the Python language server.", - "scope": "resource" - }, - "python.autoUpdateLanguageServer": { - "type": "boolean", - "default": true, - "description": "Automatically update the language server.", - "scope": "application" - }, - "python.experiments.enabled": { - "type": "boolean", - "default": true, - "description": "Enables/disables A/B tests.", - "scope": "machine" - }, - "python.defaultInterpreterPath": { - "type": "string", - "default": "python", - "description": "Path to Python, you can use a custom version of Python by modifying this setting to include the full path.", - "scope": "machine" - }, - "python.experiments.optInto": { - "type": "array", - "default": [], - "items": { - "enum": [ - "LS - enabled", - "AlwaysDisplayTestExplorer - experiment", - "ShowExtensionSurveyPrompt - enabled", - "DebugAdapterFactory - experiment", - "PtvsdWheels37 - experiment", - "Reload - experiment", - "AA_testing - experiment", - "WebHostNotebook - experiment", - "LocalZMQKernel - experiment", - "UseTerminalToGetActivatedEnvVars - experiment", - "CollectLSRequestTiming - experiment", - "CollectNodeLSRequestTiming - experiment", - "DeprecatePythonPath - experiment", - "All" - ] - }, - "description": "List of experiment to opt into. If empty, user is assigned the default experiment groups. See https://github.com/microsoft/vscode-python/wiki/Experiments for more details.", - "scope": "machine" - }, - "python.experiments.optOutFrom": { - "type": "array", - "default": [], - "items": { - "enum": [ - "LS - enabled", - "AlwaysDisplayTestExplorer - experiment", - "ShowExtensionSurveyPrompt - enabled", - "DebugAdapterFactory - experiment", - "PtvsdWheels37 - experiment", - "Reload - experiment", - "AA_testing - experiment", - "WebHostNotebook - experiment", - "LocalZMQKernel - experiment", - "UseTerminalToGetActivatedEnvVars - experiment", - "CollectLSRequestTiming - experiment", - "CollectNodeLSRequestTiming - experiment", - "DeprecatePythonPath - experiment", - "All" - ] - }, - "description": "List of experiment to opt out of. If empty, user is assigned the default experiment groups. See https://github.com/microsoft/vscode-python/wiki/Experiments for more details.", - "scope": "machine" - }, - "python.dataScience.allowImportFromNotebook": { - "type": "boolean", - "default": true, - "description": "Allows a user to import a jupyter notebook into a python file anytime one is opened.", - "scope": "resource" - }, - "python.dataScience.widgetScriptSources": { - "type": "array", - "default": [], - "items": { - "type": "string", - "enum": [ - "jsdelivr.com", - "unpkg.com" - ], - "enumDescriptions": [ - "Loads widget (javascript) scripts from https://www.jsdelivr.com/", - "Loads widget (javascript) scripts from https://unpkg.com/" - ] - }, - "uniqueItems": true, - "markdownDescription": "Defines the location and order of the sources where scripts files for Widgets are downloaded from (e.g. ipywidgest, bqplot, beakerx, ipyleaflet, etc). Not selecting any of these could result in widgets not rendering or function correctly. See [here](https://aka.ms/PVSCIPyWidgets) for more information. Once updated you will need to restart the Kernel.", - "scope": "machine" - }, - "python.dataScience.askForLargeDataFrames": { - "type": "boolean", - "default": true, - "description": "Warn the user before trying to open really large data frames.", - "scope": "application" - }, - "python.dataScience.askForKernelRestart": { - "type": "boolean", - "default": true, - "description": "Warn the user before restarting a kernel.", - "scope": "application" - }, - "python.dataScience.enabled": { - "type": "boolean", - "default": true, - "description": "Enable the experimental data science features in the python extension.", - "scope": "resource" - }, - "python.dataScience.exportWithOutputEnabled": { - "type": "boolean", - "default": false, - "description": "Enable exporting a python file into a jupyter notebook and run all cells when doing so.", - "scope": "resource" - }, - "python.dataScience.jupyterLaunchTimeout": { - "type": "number", - "default": 60000, - "description": "Amount of time (in ms) to wait for the Jupyter Notebook server to start.", - "scope": "resource" - }, - "python.dataScience.jupyterLaunchRetries": { - "type": "number", - "default": 3, - "description": "Number of times to attempt to connect to the Jupyter Notebook", - "scope": "resource" - }, - "python.dataScience.jupyterServerURI": { - "type": "string", - "default": "local", - "description": "When a Notebook Editor or Interactive Window session is started, create the kernel on the specified Jupyter server. Select 'local' to create a new Jupyter server on this local machine.", - "scope": "resource" - }, - "python.dataScience.jupyterCommandLineArguments": { - "type": "array", - "default": [], - "description": "When a Notebook Editor or Interactive Window Jupyter server is started, these arguments will be passed to it. By default this list is generated by the Python Extension.", - "scope": "resource" - }, - "python.dataScience.notebookFileRoot": { - "type": "string", - "default": "${fileDirname}", - "description": "Set the root directory for loading files for the Python Interactive window.", - "scope": "resource" - }, - "python.dataScience.searchForJupyter": { - "type": "boolean", - "default": true, - "description": "Search all installed Python interpreters for a Jupyter installation when starting the Python Interactive window", - "scope": "resource" - }, - "python.dataScience.changeDirOnImportExport": { - "type": "boolean", - "default": false, - "description": "When importing or exporting a Jupyter Notebook add a directory change command to allow relative path loading to work.", - "scope": "resource" - }, - "python.dataScience.useDefaultConfigForJupyter": { - "type": "boolean", - "default": true, - "description": "When running Jupyter locally, create a default empty Jupyter config for the Python Interactive window", - "scope": "resource" - }, - "python.dataScience.jupyterInterruptTimeout": { - "type": "number", - "default": 10000, - "description": "Amount of time (in ms) to wait for an interrupt before asking to restart the Jupyter kernel.", - "scope": "resource" - }, - "python.dataScience.allowInput": { - "type": "boolean", - "default": true, - "description": "Allow the inputting of python code directly into the Python Interactive window" - }, - "python.dataScience.showCellInputCode": { - "type": "boolean", - "default": true, - "description": "Show cell input code.", - "scope": "resource" - }, - "python.dataScience.collapseCellInputCodeByDefault": { - "type": "boolean", - "default": true, - "description": "Collapse cell input code by default.", - "scope": "resource" - }, - "python.dataScience.maxOutputSize": { - "type": "number", - "default": 400, - "description": "Maximum size (in pixels) of text output in the Python Interactive window before a scrollbar appears. Set to -1 for infinity.", - "scope": "resource" - }, - "python.dataScience.errorBackgroundColor": { - "type": "string", - "default": "#FFFFFF", - "description": "Background color (in hex) for exception messages in the Python Interactive window.", - "scope": "resource", - "deprecationMessage": "No longer necessary as the theme colors are used for error messages" - }, - "python.dataScience.sendSelectionToInteractiveWindow": { - "type": "boolean", - "default": false, - "description": "Determines if selected code in a python file will go to the terminal or the Python Interactive window when hitting shift+enter", - "scope": "resource" - }, - "python.dataScience.showJupyterVariableExplorer": { - "type": "boolean", - "default": true, - "description": "Show the variable explorer in the Python Interactive window.", - "deprecationMessage": "This setting no longer applies. It is ignored.", - "scope": "resource" - }, - "python.dataScience.variableExplorerExclude": { - "type": "string", - "default": "module;function;builtin_function_or_method", - "description": "Types to exclude from showing in the Python Interactive variable explorer", - "scope": "resource" - }, - "python.dataScience.codeRegularExpression": { - "type": "string", - "default": "^(#\\s*%%|#\\s*\\|#\\s*In\\[\\d*?\\]|#\\s*In\\[ \\])", - "description": "Regular expression used to identify code cells. All code until the next match is considered part of this cell. \nDefaults to '^(#\\s*%%|#\\s*\\|#\\s*In\\[\\d*?\\]|#\\s*In\\[ \\])' if left blank", - "scope": "resource" - }, - "python.dataScience.defaultCellMarker": { - "type": "string", - "default": "# %%", - "description": "Cell marker used for delineating a cell in a python file.", - "scope": "resource" - }, - "python.dataScience.markdownRegularExpression": { - "type": "string", - "default": "^(#\\s*%%\\s*\\[markdown\\]|#\\s*\\)", - "description": "Regular expression used to identify markdown cells. All comments after this expression are considered part of the markdown. \nDefaults to '^(#\\s*%%\\s*\\[markdown\\]|#\\s*\\)' if left blank", - "scope": "resource" - }, - "python.dataScience.allowLiveShare": { - "type": "boolean", - "default": true, - "description": "Allow the Python Interactive window to be shared during a Live Share session", - "scope": "resource" - }, - "python.dataScience.ignoreVscodeTheme": { - "type": "boolean", - "default": false, - "description": "Don't use the VS Code theme in the Python Interactive window (requires reload of VS Code). This forces the Python Interactive window to use 'Light +(default light)' and disables matplotlib defaults.", - "scope": "resource" - }, - "python.dataScience.themeMatplotlibPlots": { - "type": "boolean", - "default": false, - "description": "In the Python Interactive window and Notebook Editor theme matplotlib outputs to match the VS Code editor theme.", - "scope": "resource" - }, - "python.dataScience.liveShareConnectionTimeout": { - "type": "number", - "default": 1000, - "description": "Amount of time to wait for guest connections to verify they have the Python extension installed.", - "scope": "application" - }, - "python.dataScience.decorateCells": { - "type": "boolean", - "default": true, - "description": "Draw a highlight behind the currently active cell.", - "scope": "resource" - }, - "python.dataScience.enableCellCodeLens": { - "type": "boolean", - "default": true, - "description": "Enables code lens for 'cells' in a python file.", - "scope": "resource" - }, - "python.dataScience.enableAutoMoveToNextCell": { - "type": "boolean", - "default": true, - "description": "Enables moving to the next cell when clicking on a 'Run Cell' code lens.", - "scope": "resource" - }, - "python.dataScience.autoPreviewNotebooksInInteractivePane": { - "type": "boolean", - "deprecationMessage": "No longer supported. Notebooks open directly in their own editor now.", - "default": false, - "description": "When opening ipynb files, automatically preview the contents in the Python Interactive window.", - "scope": "resource" - }, - "python.dataScience.useNotebookEditor": { - "type": "boolean", - "default": true, - "description": "Automatically open .ipynb files in the Notebook Editor.", - "scope": "resource" - }, - "python.dataScience.allowUnauthorizedRemoteConnection": { - "type": "boolean", - "default": false, - "description": "Allow for connecting the Python Interactive window to a https Jupyter server that does not have valid certificates. This can be a security risk, so only use for known and trusted servers.", - "scope": "resource" - }, - "python.dataScience.enablePlotViewer": { - "type": "boolean", - "default": true, - "description": "Modify plot output so that it can be expanded into a plot viewer window.", - "scope": "resource" - }, - "python.dataScience.enableGather": { - "type": "boolean", - "default": true, - "description": "Python Insiders Only: Enable experimental gather feature for executed cells. For a gathered cell, that cell and only the code it depends on will be exported to a new notebook.", - "scope": "resource" - }, - "python.dataScience.gatherToScript": { - "type": "boolean", - "default": false, - "description": "Python Insiders Only: If experimental gather feature is enabled, gather code to a python script rather than a notebook.", - "scope": "resource" - }, - "python.dataScience.gatherSpecPath": { - "type": "string", - "default": "", - "description": "Python Insiders Only: If experimental gather feature is enabled, this setting specifies a folder that contains additional or replacement spec files used for analysis.", - "scope": "resource" - }, - "python.dataScience.codeLenses": { - "type": "string", - "default": "python.datascience.runcell, python.datascience.runallcellsabove, python.datascience.debugcell", - "description": "Set of commands to put as code lens above a cell. Defaults to 'python.datascience.runcell, python.datascience.runallcellsabove, python.datascience.debugcell'", - "scope": "resource" - }, - "python.dataScience.debugCodeLenses": { - "type": "string", - "default": "python.datascience.debugcontinue, python.datascience.debugstop, python.datascience.debugstepover", - "description": "Set of debug commands to put as code lens above a cell while debugging.", - "scope": "resource" - }, - "python.dataScience.ptvsdDistPath": { - "type": "string", - "default": "", - "description": "Path to ptvsd experimental bits for debugging cells.", - "scope": "resource" - }, - "python.dataScience.stopOnFirstLineWhileDebugging": { - "type": "boolean", - "default": true, - "description": "When debugging a cell, stop on the first line.", - "scope": "resource" - }, - "python.dataScience.remoteDebuggerPort": { - "type": "number", - "default": -1, - "description": "When debugging a cell, open this port on the remote box. If -1 is specified, a random port between 8889 and 9000 will be attempted.", - "scope": "resource" - }, - "python.dataScience.disableJupyterAutoStart": { - "type": "boolean", - "default": false, - "description": "When true, disables Jupyter from being automatically started for you. You must instead run a cell to start Jupyter.", - "scope": "resource" - }, - "python.dataScience.textOutputLimit": { - "type": "number", - "default": 20000, - "description": "Limit the amount of text in Python Interactive cell text output to this value. 0 to allow any amount of characters.", - "scope": "resource" - }, - "python.dataScience.colorizeInputBox": { - "type": "boolean", - "default": true, - "description": "Whether or not to use the theme's peek color as the background for the input box.", - "scope": "resource" - }, - "python.dataScience.stopOnError": { - "type": "boolean", - "default": true, - "description": "Stop running cells if a cell throws an exception.", - "scope": "resource" - }, - "python.dataScience.addGotoCodeLenses": { - "type": "boolean", - "default": true, - "description": "After running a cell, add a 'Goto' code lens on the cell. Note, disabling all code lenses disables this code lens as well.", - "scope": "resource" - }, - "python.dataScience.variableQueries": { - "type": "array", - "description": "Language to query mapping for returning the list of active variables in a Jupyter kernel. Used by the Variable Explorer in both the Interactive Window and Notebooks. Example: \n'[\n{\n \"language\": \"python\",\n \"query\": \"%who_ls\",\n \"parseExpr\": \"'(\\\\w+)'\"\n}\n]'", - "scope": "machine", - "examples": [ - [ - { - "language": "python", - "query": "_rwho_ls = %who_ls\\nprint(_rwho_ls)", - "parseExpr": "'(\\w+)'" - }, - { - "language": "julia", - "query": "whos", - "parseExpr": "'(\\w+)'" - } - ] - ] - }, - "python.disableInstallationCheck": { - "type": "boolean", - "default": false, - "description": "Whether to check if Python is installed (also warn when using the macOS-installed Python).", - "scope": "resource" - }, - "python.envFile": { - "type": "string", - "description": "Absolute path to a file containing environment variable definitions.", - "default": "${workspaceFolder}/.env", - "scope": "resource" - }, - "python.formatting.autopep8Args": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.formatting.autopep8Path": { - "type": "string", - "default": "autopep8", - "description": "Path to autopep8, you can use a custom version of autopep8 by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.formatting.provider": { - "type": "string", - "default": "autopep8", - "description": "Provider for formatting. Possible options include 'autopep8', 'black', and 'yapf'.", - "enum": [ - "autopep8", - "black", - "yapf", - "none" - ], - "scope": "resource" - }, - "python.formatting.blackArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.formatting.blackPath": { - "type": "string", - "default": "black", - "description": "Path to Black, you can use a custom version of Black by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.formatting.yapfArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.formatting.yapfPath": { - "type": "string", - "default": "yapf", - "description": "Path to yapf, you can use a custom version of yapf by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.globalModuleInstallation": { - "type": "boolean", - "default": false, - "description": "Whether to install Python modules globally when not using an environment.", - "scope": "resource" - }, - "python.jediEnabled": { - "type": "boolean", - "default": true, - "description": "Enables Jedi as IntelliSense engine instead of Microsoft Python Analysis Engine.", - "scope": "resource" - }, - "python.jediMemoryLimit": { - "type": "number", - "default": 0, - "description": "Memory limit for the Jedi completion engine in megabytes. Zero (default) means 1024 MB. -1 means unlimited (disable memory limit check)", - "scope": "resource" - }, - "python.jediPath": { - "type": "string", - "default": "", - "description": "Path to directory containing the Jedi library (this path will contain the 'Jedi' sub directory).", - "scope": "resource" - }, - "python.languageServer": { - "type": "string", - "enum": [ - "Jedi", - "Microsoft", - "None" - ], - "default": "Microsoft", - "description": "Defines type of the language server.", - "scope": "resource" - }, - "python.analysis.openFilesOnly": { - "type": "boolean", - "default": true, - "description": "Only show errors and warnings for open files rather than for the entire workspace.", - "scope": "resource" - }, - "python.analysis.diagnosticPublishDelay": { - "type": "integer", - "default": 1000, - "description": "Delay before diagnostic messages are transferred to the problems list (in milliseconds).", - "scope": "resource" - }, - "python.analysis.errors": { - "type": "array", - "default": [], - "items": { - "type": "string" - }, - "description": "List of diagnostics messages to be shown as errors.", - "scope": "resource" - }, - "python.analysis.warnings": { - "type": "array", - "default": [], - "items": { - "type": "string" - }, - "description": "List of diagnostics messages to be shown as warnings.", - "scope": "resource" - }, - "python.analysis.information": { - "type": "array", - "default": [], - "items": { - "type": "string" - }, - "description": "List of diagnostics messages to be shown as information.", - "scope": "resource" - }, - "python.analysis.disabled": { - "type": "array", - "default": [], - "items": { - "type": "string" - }, - "description": "List of suppressed diagnostic messages.", - "scope": "resource" - }, - "python.analysis.typeshedPaths": { - "type": "array", - "default": [], - "items": { - "type": "string" - }, - "description": "Paths to Typeshed stub folders. Default is Typeshed installed with the language server. Change requires restart.", - "scope": "resource" - }, - "python.analysis.cacheFolderPath": { - "type": "string", - "description": "Path to a writable folder where analyzer can cache its data. Change requires restart.", - "scope": "resource" - }, - "python.analysis.memory.keepLibraryAst": { - "type": "boolean", - "default": false, - "description": "Allows code analysis to keep parser trees in memory. Increases memory consumption but may improve performance with large library analysis.", - "scope": "resource" - }, - "python.analysis.memory.keepLibraryLocalVariables": { - "type": "boolean", - "default": false, - "description": "Allows code analysis to keep library function local variables. Allows code navigation in Python libraries function bodies. Increases memory consumption.", - "scope": "resource" - }, - "python.analysis.logLevel": { - "type": "string", - "enum": [ - "Error", - "Warning", - "Information", - "Trace" - ], - "default": "Error", - "description": "Defines type of log messages language server writes into the output window.", - "scope": "resource" - }, - "python.analysis.symbolsHierarchyDepthLimit": { - "type": "integer", - "default": 10, - "description": "Limits depth of the symbol tree in the document outline.", - "scope": "resource" - }, - "python.analysis.cachingLevel": { - "type": "string", - "enum": [ - "Default", - "None", - "System", - "Library" - ], - "default": "Default", - "description": "Defines which types of modules get their analysis cached.", - "scope": "resource" - }, - "python.linting.enabled": { - "type": "boolean", - "default": true, - "description": "Whether to lint Python files.", - "scope": "resource" - }, - "python.linting.flake8Args": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.flake8CategorySeverity.E": { - "type": "string", - "default": "Error", - "description": "Severity of Flake8 message type 'E'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.flake8CategorySeverity.F": { - "type": "string", - "default": "Error", - "description": "Severity of Flake8 message type 'F'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.flake8CategorySeverity.W": { - "type": "string", - "default": "Warning", - "description": "Severity of Flake8 message type 'W'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.flake8Enabled": { - "type": "boolean", - "default": false, - "description": "Whether to lint Python files using flake8", - "scope": "resource" - }, - "python.linting.flake8Path": { - "type": "string", - "default": "flake8", - "description": "Path to flake8, you can use a custom version of flake8 by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.ignorePatterns": { - "type": "array", - "description": "Patterns used to exclude files or folders from being linted.", - "default": [ - ".vscode/*.py", - "**/site-packages/**/*.py" - ], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.lintOnSave": { - "type": "boolean", - "default": true, - "description": "Whether to lint Python files when saved.", - "scope": "resource" - }, - "python.linting.maxNumberOfProblems": { - "type": "number", - "default": 100, - "description": "Controls the maximum number of problems produced by the server.", - "scope": "resource" - }, - "python.linting.banditArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.banditEnabled": { - "type": "boolean", - "default": false, - "description": "Whether to lint Python files using bandit.", - "scope": "resource" - }, - "python.linting.banditPath": { - "type": "string", - "default": "bandit", - "description": "Path to bandit, you can use a custom version of bandit by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.mypyArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [ - "--ignore-missing-imports", - "--follow-imports=silent", - "--show-column-numbers" - ], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.mypyCategorySeverity.error": { - "type": "string", - "default": "Error", - "description": "Severity of Mypy message type 'Error'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.mypyCategorySeverity.note": { - "type": "string", - "default": "Information", - "description": "Severity of Mypy message type 'Note'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.mypyEnabled": { - "type": "boolean", - "default": false, - "description": "Whether to lint Python files using mypy.", - "scope": "resource" - }, - "python.linting.mypyPath": { - "type": "string", - "default": "mypy", - "description": "Path to mypy, you can use a custom version of mypy by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.pycodestyleArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.pycodestyleCategorySeverity.E": { - "type": "string", - "default": "Error", - "description": "Severity of pycodestyle message type 'E'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.pycodestyleCategorySeverity.W": { - "type": "string", - "default": "Warning", - "description": "Severity of pycodestyle message type 'W'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.pycodestyleEnabled": { - "type": "boolean", - "default": false, - "description": "Whether to lint Python files using pycodestyle", - "scope": "resource" - }, - "python.linting.pycodestylePath": { - "type": "string", - "default": "pycodestyle", - "description": "Path to pycodestyle, you can use a custom version of pycodestyle by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.prospectorArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.prospectorEnabled": { - "type": "boolean", - "default": false, - "description": "Whether to lint Python files using prospector.", - "scope": "resource" - }, - "python.linting.prospectorPath": { - "type": "string", - "default": "prospector", - "description": "Path to Prospector, you can use a custom version of prospector by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.pydocstyleArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.pydocstyleEnabled": { - "type": "boolean", - "default": false, - "description": "Whether to lint Python files using pydocstyle", - "scope": "resource" - }, - "python.linting.pydocstylePath": { - "type": "string", - "default": "pydocstyle", - "description": "Path to pydocstyle, you can use a custom version of pydocstyle by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.pylamaArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.pylamaEnabled": { - "type": "boolean", - "default": false, - "description": "Whether to lint Python files using pylama.", - "scope": "resource" - }, - "python.linting.pylamaPath": { - "type": "string", - "default": "pylama", - "description": "Path to pylama, you can use a custom version of pylama by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.pylintArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.linting.pylintCategorySeverity.convention": { - "type": "string", - "default": "Information", - "description": "Severity of Pylint message type 'Convention/C'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.pylintCategorySeverity.error": { - "type": "string", - "default": "Error", - "description": "Severity of Pylint message type 'Error/E'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.pylintCategorySeverity.fatal": { - "type": "string", - "default": "Error", - "description": "Severity of Pylint message type 'Fatal/F'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.pylintCategorySeverity.refactor": { - "type": "string", - "default": "Hint", - "description": "Severity of Pylint message type 'Refactor/R'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.pylintCategorySeverity.warning": { - "type": "string", - "default": "Warning", - "description": "Severity of Pylint message type 'Warning/W'.", - "enum": [ - "Hint", - "Error", - "Information", - "Warning" - ], - "scope": "resource" - }, - "python.linting.pylintEnabled": { - "type": "boolean", - "default": true, - "description": "Whether to lint Python files using pylint.", - "scope": "resource" - }, - "python.linting.pylintPath": { - "type": "string", - "default": "pylint", - "description": "Path to Pylint, you can use a custom version of pylint by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.linting.pylintUseMinimalCheckers": { - "type": "boolean", - "default": true, - "description": "Whether to run Pylint with minimal set of rules.", - "scope": "resource" - }, - "python.pythonPath": { - "type": "string", - "default": "python", - "description": "Path to Python, you can use a custom version of Python by modifying this setting to include the full path.", - "scope": "resource" - }, - "python.condaPath": { - "type": "string", - "default": "", - "description": "Path to the conda executable to use for activation (version 4.4+).", - "scope": "resource" - }, - "python.pipenvPath": { - "type": "string", - "default": "pipenv", - "description": "Path to the pipenv executable to use for activation.", - "scope": "resource" - }, - "python.poetryPath": { - "type": "string", - "default": "poetry", - "description": "Path to the poetry executable.", - "scope": "resource" - }, - "python.sortImports.args": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" - }, - "python.sortImports.path": { - "type": "string", - "description": "Path to isort script, default using inner version", - "default": "", - "scope": "resource" - }, - "python.terminal.activateEnvironment": { - "type": "boolean", - "default": true, - "description": "Activate Python Environment in Terminal created using the Extension.", - "scope": "resource" - }, - "python.terminal.executeInFileDir": { - "type": "boolean", - "default": false, - "description": "When executing a file in the terminal, whether to use execute in the file's directory, instead of the current open folder.", - "scope": "resource" - }, - "python.terminal.launchArgs": { - "type": "array", - "default": [], - "description": "Python launch arguments to use when executing a file in the terminal.", - "scope": "resource" - }, - "python.terminal.activateEnvInCurrentTerminal": { - "type": "boolean", - "default": false, - "description": "Activate Python Environment in the current Terminal on load of the Extension.", - "scope": "resource" - }, - "python.testing.cwd": { - "type": "string", - "default": null, - "description": "Optional working directory for tests.", - "scope": "resource" - }, - "python.testing.debugPort": { - "type": "number", - "default": 3000, - "description": "Port number used for debugging of tests.", - "scope": "resource" + { + "category": "Python", + "command": "python.configureTests", + "title": "%python.command.python.configureTests.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.testing.nosetestArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" + { + "category": "Python", + "command": "python.createEnvironment", + "title": "%python.command.python.createEnvironment.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.testing.nosetestsEnabled": { - "type": "boolean", - "default": false, - "description": "Enable testing using nosetests.", - "scope": "resource" + { + "category": "Python", + "command": "python.createEnvironment-button", + "title": "%python.command.python.createEnvironment.title%", + "when": "false" }, - "python.testing.nosetestPath": { - "type": "string", - "default": "nosetests", - "description": "Path to nosetests, you can use a custom version of nosetests by modifying this setting to include the full path.", - "scope": "resource" + { + "category": "Python", + "command": "python.createTerminal", + "title": "%python.command.python.createTerminal.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.testing.promptToConfigure": { - "type": "boolean", - "default": true, - "description": "Prompt to configure a test framework if potential tests directories are discovered.", - "scope": "resource" + { + "category": "Python", + "command": "python.execInTerminal", + "title": "%python.command.python.execInTerminal.title%", + "when": "!virtualWorkspace && shellExecutionSupported && editorLangId == python" }, - "python.testing.pytestArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [], - "items": { - "type": "string" - }, - "scope": "resource" + { + "category": "Python", + "command": "python.execInTerminal-icon", + "icon": "$(play)", + "title": "%python.command.python.execInTerminalIcon.title%", + "when": "false" }, - "python.testing.pytestEnabled": { - "type": "boolean", - "default": false, - "description": "Enable testing using pytest.", - "scope": "resource" + { + "category": "Python", + "command": "python.execInDedicatedTerminal", + "icon": "$(play)", + "title": "%python.command.python.execInDedicatedTerminal.title%", + "when": "false" }, - "python.testing.pytestPath": { - "type": "string", - "default": "pytest", - "description": "Path to pytest (pytest), you can use a custom version of pytest by modifying this setting to include the full path.", - "scope": "resource" + { + "category": "Python", + "command": "python.execSelectionInDjangoShell", + "title": "%python.command.python.execSelectionInDjangoShell.title%", + "when": "!virtualWorkspace && shellExecutionSupported && editorLangId == python" }, - "python.testing.unittestArgs": { - "type": "array", - "description": "Arguments passed in. Each argument is a separate item in the array.", - "default": [ - "-v", - "-s", - ".", - "-p", - "*test*.py" - ], - "items": { - "type": "string" - }, - "scope": "resource" + { + "category": "Python", + "command": "python.execSelectionInTerminal", + "title": "%python.command.python.execSelectionInTerminal.title%", + "when": "!virtualWorkspace && shellExecutionSupported && editorLangId == python" }, - "python.testing.unittestEnabled": { - "type": "boolean", - "default": false, - "description": "Enable testing using unittest.", - "scope": "resource" + { + "category": "Python", + "command": "python.copyTestId", + "title": "%python.command.python.testing.copyTestId.title%", + "when": "false" }, - "python.testing.autoTestDiscoverOnSaveEnabled": { - "type": "boolean", - "default": true, - "description": "Enable auto run test discovery when saving a test file.", - "scope": "resource" + { + "category": "Python", + "command": "python.execInREPL", + "title": "%python.command.python.execInREPL.title%", + "when": "false" }, - "python.venvFolders": { - "type": "array", - "default": [], - "description": "Folders in your home directory to look into for virtual environments (supports pyenv, direnv and virtualenvwrapper by default).", - "scope": "resource", - "items": { - "type": "string" - } + { + "category": "Python", + "command": "python.reportIssue", + "title": "%python.command.python.reportIssue.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.venvPath": { - "type": "string", - "default": "", - "description": "Path to folder with a list of Virtual Environments (e.g. ~/.pyenv, ~/Envs, ~/.virtualenvs).", - "scope": "resource" + { + "category": "Test", + "command": "testing.reRunFailTests", + "icon": "$(run-errors)", + "title": "%python.command.testing.rerunFailedTests.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.workspaceSymbols.ctagsPath": { - "type": "string", - "default": "ctags", - "description": "Fully qualified path to the ctags executable (else leave as ctags, assuming it is in current path).", - "scope": "resource" + { + "category": "Python", + "command": "python.setInterpreter", + "title": "%python.command.python.setInterpreter.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.workspaceSymbols.enabled": { - "type": "boolean", - "default": false, - "description": "Set to 'true' to enable ctags to provide Workspace Symbols.", - "scope": "resource" + { + "category": "Python", + "command": "python.startREPL", + "title": "%python.command.python.startTerminalREPL.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.workspaceSymbols.exclusionPatterns": { - "type": "array", - "default": [ - "**/site-packages/**" - ], - "items": { - "type": "string" - }, - "description": "Pattern used to exclude files and folders from ctags See http://ctags.sourceforge.net/ctags.html.", - "scope": "resource" + { + "category": "Python", + "command": "python.startNativeREPL", + "title": "%python.command.python.startNativeREPL.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.workspaceSymbols.rebuildOnFileSave": { - "type": "boolean", - "default": true, - "description": "Whether to re-build the tags file on when changes made to python files are saved.", - "scope": "resource" + { + "category": "Python", + "command": "python.viewLanguageServerOutput", + "enablement": "python.hasLanguageServerOutputChannel", + "title": "%python.command.python.viewLanguageServerOutput.title%", + "when": "!virtualWorkspace && shellExecutionSupported" }, - "python.workspaceSymbols.rebuildOnStart": { - "type": "boolean", - "default": true, - "description": "Whether to re-build the tags file on start (defaults to true).", - "scope": "resource" + { + "category": "Python", + "command": "python.viewOutput", + "title": "%python.command.python.viewOutput.title%", + "when": "!virtualWorkspace && shellExecutionSupported" + } + ], + "editor/content": [ + { + "group": "Python", + "command": "python.createEnvironment-button", + "when": "showCreateEnvButton && resourceLangId == pip-requirements && !virtualWorkspace && shellExecutionSupported && !inDiffEditor && !isMergeResultEditor && pythonDepsNotInstalled" }, - "python.workspaceSymbols.tagFilePath": { - "type": "string", - "default": "${workspaceFolder}/.vscode/tags", - "description": "Fully qualified path to tag file (exuberant ctag file), used to provide workspace symbols.", - "scope": "resource" + { + "group": "Python", + "command": "python.createEnvironment-button", + "when": "showCreateEnvButton && resourceFilename == pyproject.toml && pipInstallableToml && !virtualWorkspace && shellExecutionSupported && !inDiffEditor && !isMergeResultEditor && pythonDepsNotInstalled" + } + ], + "editor/context": [ + { + "submenu": "python.run", + "group": "Python", + "when": "editorLangId == python && !virtualWorkspace && shellExecutionSupported && isWorkspaceTrusted && !inChat && notebookType != jupyter-notebook" }, - "python.dataScience.magicCommandsAsComments": { - "type": "boolean", - "default": false, - "description": "Uncomment shell assignments (#!), line magic (#!%) and cell magic (#!%%) when parsing code cells.", - "scope": "resource" + { + "submenu": "python.runFileInteractive", + "group": "Jupyter2", + "when": "editorLangId == python && !virtualWorkspace && shellExecutionSupported && !isJupyterInstalled && isWorkspaceTrusted && !inChat" + } + ], + "python.runFileInteractive": [ + { + "command": "python.installJupyter", + "group": "Jupyter2", + "when": "resourceLangId == python && !virtualWorkspace && shellExecutionSupported" + } + ], + "python.run": [ + { + "command": "python.execInTerminal", + "group": "Python", + "when": "resourceLangId == python && !virtualWorkspace && shellExecutionSupported" }, - "python.dataScience.runMagicCommands": { - "type": "string", - "default": "", - "deprecationMessage": "This setting has been deprecated in favor of 'runStartupCommands'.", - "description": "A series of Python instructions or iPython magic commands separated by '\\n' that will be executed when the interactive window loads.", - "scope": "resource" + { + "command": "python.execSelectionInDjangoShell", + "group": "Python", + "when": "editorHasSelection && editorLangId == python && python.isDjangoProject && !virtualWorkspace && shellExecutionSupported" }, - "python.dataScience.runStartupCommands": { - "type": "string", - "default": "", - "description": "A series of Python instructions or iPython magic commands separated by '\\n' that will be executed when the interactive window loads. For instance, set this to '%load_ext autoreload\\n%autoreload 2' to automatically reload changes made to imported files without having to restart the interactive session.", - "scope": "resource" + { + "command": "python.execSelectionInTerminal", + "group": "Python", + "when": "!config.python.REPL.sendToNativeREPL && editorFocus && editorLangId == python && !virtualWorkspace && shellExecutionSupported" }, - "python.dataScience.debugJustMyCode": { - "type": "boolean", - "default": true, - "description": "When debugging, debug just my code.", - "scope": "resource" + { + "command": "python.execInREPL", + "group": "Python", + "when": "editorFocus && editorLangId == python && !virtualWorkspace && shellExecutionSupported && config.python.REPL.sendToNativeREPL" + } + ], + "editor/title/run": [ + { + "command": "python.execInTerminal-icon", + "group": "navigation@0", + "title": "%python.command.python.execInTerminalIcon.title%", + "when": "resourceLangId == python && !isInDiffEditor && !virtualWorkspace && shellExecutionSupported" }, - "python.insidersChannel": { - "type": "string", - "default": "off", - "description": "Set to \"weekly\" or \"daily\" to automatically download and install the latest Insiders builds of the python extension, which include upcoming features and bug fixes.", - "enum": [ - "off", - "weekly", - "daily" - ], - "scope": "application" + { + "command": "python.execInDedicatedTerminal", + "group": "navigation@0", + "title": "%python.command.python.execInDedicatedTerminal.title%", + "when": "resourceLangId == python && !isInDiffEditor && !virtualWorkspace && shellExecutionSupported" } - } + ], + "explorer/context": [ + { + "command": "python.execInTerminal", + "group": "Python", + "when": "resourceLangId == python && !virtualWorkspace && shellExecutionSupported" + } + ], + "file/newFile": [ + { + "command": "python.createNewFile", + "group": "file", + "when": "!virtualWorkspace" + } + ], + "view/title": [ + { + "command": "testing.reRunFailTests", + "when": "view == workbench.view.testing && hasFailedTests && !virtualWorkspace && shellExecutionSupported", + "group": "navigation@1" + } + ] }, - "languages": [ - { - "id": "pip-requirements", - "aliases": [ - "pip requirements", - "requirements.txt" - ], - "filenames": [ - "requirements.txt", - "constraints.txt", - "requirements.in" - ], - "filenamePatterns": [ - "*-requirements.txt", - "requirements-*.txt", - "constraints-*.txt", - "*-constraints.txt", - "*-requirements.in", - "requirements-*.in" - ], - "configuration": "./languages/pip-requirements.json" - }, - { - "id": "yaml", - "filenames": [ - ".condarc" - ] - }, - { - "id": "toml", - "filenames": [ - "poetry.lock", - "Pipfile" - ] - }, - { - "id": "json", - "filenames": [ - "Pipfile.lock" - ] - }, - { - "id": "ini", - "filenames": [ - ".flake8" - ] - }, + "submenus": [ { - "id": "jinja", - "extensions": [ - ".jinja2", - ".j2" - ], - "aliases": [ - "Jinja" - ] + "id": "python.run", + "label": "%python.editor.context.submenu.runPython%", + "icon": "$(play)" }, { - "id": "jupyter", - "aliases": [ - "Jupyter", - "Notebook" - ], - "extensions": [ - ".ipynb" - ] + "id": "python.runFileInteractive", + "label": "%python.editor.context.submenu.runPythonInteractive%" } ], - "grammars": [ + "viewsWelcome": [ { - "language": "pip-requirements", - "scopeName": "source.pip-requirements", - "path": "./syntaxes/pip-requirements.tmLanguage.json" + "view": "testing", + "contents": "Configure a test framework to see your tests here.\n[Configure Python Tests](command:python.configureTests)", + "when": "!virtualWorkspace && shellExecutionSupported" } ], - "jsonValidation": [ + "yamlValidation": [ { "fileMatch": ".condarc", "url": "./schemas/condarc.json" @@ -2857,351 +1504,310 @@ "url": "./schemas/conda-meta.json" } ], - "yamlValidation": [ + "languageModelTools": [ + { + "name": "get_python_environment_details", + "displayName": "Get Python Environment Info", + "userDescription": "%python.languageModelTools.get_python_environment_details.userDescription%", + "modelDescription": "This tool will retrieve the details of the Python Environment for the specified file or workspace. The details returned include the 1. Type of Python Environment (conda, venv, etc), 2. Version of Python, 3. List of all installed Python packages with their versions. ALWAYS call configure_python_environment before using this tool. IMPORTANT: This tool is only for Python environments (venv, virtualenv, conda, pipenv, poetry, pyenv, pixi, or any other Python environment manager). Do not use this tool for npm packages, system packages, Ruby gems, or any other non-Python dependencies.", + "toolReferenceName": "getPythonEnvironmentInfo", + "tags": [ + "python", + "python environment", + "extension_installed_by_tool", + "enable_other_tool_configure_python_environment" + ], + "icon": "$(snake)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "resourcePath": { + "type": "string", + "description": "The path to the Python file or workspace to get the environment information for." + } + }, + "required": [] + } + }, { - "fileMatch": ".condarc", - "url": "./schemas/condarc.json" + "name": "get_python_executable_details", + "displayName": "Get Python Executable", + "userDescription": "%python.languageModelTools.get_python_executable_details.userDescription%", + "modelDescription": "This tool will retrieve the details of the Python Environment for the specified file or workspace. ALWAYS use this tool before executing any Python command in the terminal. This tool returns the details of how to construct the fully qualified path and or command including details such as arguments required to run Python in a terminal. Note: Instead of executing `python --version` or `python -c 'import sys; print(sys.executable)'`, use this tool to get the Python executable path to replace the `python` command. E.g. instead of using `python -c 'import sys; print(sys.executable)'`, use this tool to build the command `conda run -n -c 'import sys; print(sys.executable)'`. ALWAYS call configure_python_environment before using this tool. IMPORTANT: This tool is only for Python environments (venv, virtualenv, conda, pipenv, poetry, pyenv, pixi, or any other Python environment manager). Do not use this tool for npm packages, system packages, Ruby gems, or any other non-Python dependencies.", + "toolReferenceName": "getPythonExecutableCommand", + "tags": [ + "python", + "python environment", + "extension_installed_by_tool", + "enable_other_tool_configure_python_environment" + ], + "icon": "$(terminal)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "resourcePath": { + "type": "string", + "description": "The path to the Python file or workspace to get the executable information for. If not provided, the current workspace will be used. Where possible pass the path to the file or workspace." + } + }, + "required": [] + } }, { - "fileMatch": "environment.yml", - "url": "./schemas/conda-environment.json" + "name": "install_python_packages", + "displayName": "Install Python Package", + "userDescription": "%python.languageModelTools.install_python_packages.userDescription%", + "modelDescription": "Installs Python packages in the given workspace. Use this tool to install Python packages in the user's chosen Python environment. ALWAYS call configure_python_environment before using this tool. IMPORTANT: This tool should only be used to install Python packages using package managers like pip or conda (works with any Python environment: venv, virtualenv, pipenv, poetry, pyenv, pixi, conda, etc.). Do not use this tool to install npm packages, system packages (apt/brew/yum), Ruby gems, or any other non-Python dependencies.", + "toolReferenceName": "installPythonPackage", + "tags": [ + "python", + "python environment", + "install python package", + "extension_installed_by_tool", + "enable_other_tool_configure_python_environment" + ], + "icon": "$(package)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "packageList": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The list of Python packages to install." + }, + "resourcePath": { + "type": "string", + "description": "The path to the Python file or workspace into which the packages are installed. If not provided, the current workspace will be used. Where possible pass the path to the file or workspace." + } + }, + "required": [ + "packageList" + ] + } }, { - "fileMatch": "meta.yaml", - "url": "./schemas/conda-meta.json" - } - ], - "views": { - "test": [ - { - "id": "python_tests", - "name": "Python", - "when": "testsDiscovered" + "name": "configure_python_environment", + "displayName": "Configure Python Environment", + "modelDescription": "This tool configures a Python environment in the given workspace. ALWAYS Use this tool to set up the user's chosen environment and ALWAYS call this tool before using any other Python related tools or running any Python command in the terminal. IMPORTANT: This tool is only for Python environments (venv, virtualenv, conda, pipenv, poetry, pyenv, pixi, or any other Python environment manager). Do not use this tool for npm packages, system packages, Ruby gems, or any other non-Python dependencies.", + "userDescription": "%python.languageModelTools.configure_python_environment.userDescription%", + "toolReferenceName": "configurePythonEnvironment", + "tags": [ + "python", + "python environment", + "extension_installed_by_tool" + ], + "icon": "$(gear)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "resourcePath": { + "type": "string", + "description": "The path to the Python file or workspace for which a Python Environment needs to be configured." + } + }, + "required": [] } - ] + }, + { + "name": "create_virtual_environment", + "displayName": "Create a Virtual Environment", + "modelDescription": "This tool will create a Virual Environment", + "tags": [], + "canBeReferencedInPrompt": false, + "inputSchema": { + "type": "object", + "properties": { + "packageList": { + "type": "array", + "items": { + "type": "string" + }, + "description": "The list of packages to install." + }, + "resourcePath": { + "type": "string", + "description": "The path to the Python file or workspace for which a Python Environment needs to be configured." + } + }, + "required": [] + }, + "when": "false" + }, + { + "name": "selectEnvironment", + "displayName": "Select a Python Environment", + "modelDescription": "This tool will prompt the user to select an existing Python Environment", + "tags": [], + "canBeReferencedInPrompt": false, + "inputSchema": { + "type": "object", + "properties": { + "resourcePath": { + "type": "string", + "description": "The path to the Python file or workspace for which a Python Environment needs to be configured." + } + }, + "required": [] + }, + "when": "false" + } + ] + }, + "copilot": { + "tests": { + "getSetupConfirmation": "python.copilotSetupTests" } }, "scripts": { "package": "gulp clean && gulp prePublishBundle && vsce package -o ms-python-insiders.vsix", + "prePublish": "gulp clean && gulp prePublishNonBundle", "compile": "tsc -watch -p ./", - "compile-webviews-watch": "npm run build-ipywidgets && cross-env NODE_OPTIONS=--max_old_space_size=9096 webpack --config ./build/webpack/webpack.datascience-ui.config.js --watch", - "build-ipywidgets": "npm run build-ipywidgets-clean && npm run build-ipywidgets-compile && npm run build-ipywidgets-webpack", - "build-ipywidgets-clean": "node ./src/ipywidgets/scripts/clean.js", - "build-ipywidgets-compile": "tsc -p ./src/ipywidgets && rimraf ./out/tsconfig.tsbuildinfo && node ./src/ipywidgets/scripts/copyfiles.js", - "build-ipywidgets-webpack": "cross-env NODE_OPTIONS=--max_old_space_size=9096 webpack --config ./src/ipywidgets/webpack.config.js", + "compileApi": "node ./node_modules/typescript/lib/tsc.js -b ./pythonExtensionApi/tsconfig.json", + "compiled": "deemon npm run compile", + "kill-compiled": "deemon --kill npm run compile", "checkDependencies": "gulp checkDependencies", - "postinstall": "node ./build/ci/postInstall.js", "test": "node ./out/test/standardTest.js && node ./out/test/multiRootTest.js", - "test:unittests": "mocha --opts ./build/.mocha.unittests.js.opts", - "test:unittests:cover": "nyc --no-clean --nycrc-path build/.nycrc mocha --opts ./build/.mocha.unittests.ts.opts", - "test:functional": "mocha --require source-map-support/register --opts ./build/.mocha.functional.opts", - "test:functional:perf": "node --inspect-brk ./node_modules/mocha/bin/_mocha --require source-map-support/register --opts ./build/.mocha.functional.perf.opts", - "test:functional:cover": "npm run test:functional", - "test:cover:report": "nyc --nycrc-path build/.nycrc report --reporter=text --reporter=html --reporter=text-summary --reporter=cobertura", + "test:unittests": "mocha --config ./build/.mocha.unittests.json", + "test:unittests:cover": "nyc --no-clean --nycrc-path ./build/.nycrc mocha --config ./build/.mocha.unittests.json", + "test:functional": "mocha --require source-map-support/register --config ./build/.mocha.functional.json", + "test:functional:perf": "node --inspect-brk ./node_modules/mocha/bin/_mocha --require source-map-support/register --config ./build/.mocha.functional.perf.json", + "test:functional:memleak": "node --inspect-brk ./node_modules/mocha/bin/_mocha --require source-map-support/register --config ./build/.mocha.functional.json", + "test:functional:cover": "nyc --no-clean --nycrc-path ./build/.nycrc mocha --require source-map-support/register --config ./build/.mocha.functional.json", + "test:cover:report": "nyc --nycrc-path ./build/.nycrc report --reporter=text --reporter=html --reporter=text-summary --reporter=cobertura", "testDebugger": "node ./out/test/testBootstrap.js ./out/test/debuggerTest.js", + "testDebugger:cover": "nyc --no-clean --use-spawn-wrap --nycrc-path ./build/.nycrc --require source-map-support/register node ./out/test/debuggerTest.js", "testSingleWorkspace": "node ./out/test/testBootstrap.js ./out/test/standardTest.js", + "testSingleWorkspace:cover": "nyc --no-clean --use-spawn-wrap --nycrc-path ./build/.nycrc --require source-map-support/register node ./out/test/standardTest.js", + "preTestJediLSP": "node ./out/test/languageServers/jedi/lspSetup.js", + "testJediLSP": "node ./out/test/languageServers/jedi/lspSetup.js && cross-env CODE_TESTS_WORKSPACE=src/test VSC_PYTHON_CI_TEST_GREP='Language Server:' node ./out/test/testBootstrap.js ./out/test/standardTest.js && node ./out/test/languageServers/jedi/lspTeardown.js", "testMultiWorkspace": "node ./out/test/testBootstrap.js ./out/test/multiRootTest.js", "testPerformance": "node ./out/test/testBootstrap.js ./out/test/performanceTest.js", - "testSmoke": "node ./out/test/smokeTest.js", + "testSmoke": "cross-env INSTALL_JUPYTER_EXTENSION=true \"node ./out/test/smokeTest.js\"", + "testInsiders": "cross-env VSC_PYTHON_CI_TEST_VSC_CHANNEL=insiders INSTALL_PYLANCE_EXTENSION=true TEST_FILES_SUFFIX=insiders.test CODE_TESTS_WORKSPACE=src/testMultiRootWkspc/smokeTests \"node ./out/test/standardTest.js\"", "lint-staged": "node gulpfile.js", - "lint": "tslint src/**/*.ts -t verbose", - "prettier-fix": "prettier 'src/**/*.ts*' --write && prettier 'build/**/*.js' --write", + "lint": "eslint src build pythonExtensionApi", + "lint-fix": "eslint --fix src build pythonExtensionApi gulpfile.js", + "format-check": "prettier --check 'src/**/*.ts' 'build/**/*.js' '.github/**/*.yml' gulpfile.js", + "format-fix": "prettier --write 'src/**/*.ts' 'build/**/*.js' '.github/**/*.yml' gulpfile.js", + "check-python": "npm run check-python:ruff && npm run check-python:pyright", + "check-python:ruff": "cd python_files && python -m pip install -U ruff && python -m ruff check . && python -m ruff format --check", + "check-python:pyright": "cd python_files && npx --yes pyright@1.1.308 .", "clean": "gulp clean", + "addExtensionPackDependencies": "gulp addExtensionPackDependencies", "updateBuildNumber": "gulp updateBuildNumber", "verifyBundle": "gulp verifyBundle", "webpack": "webpack" }, "dependencies": { - "@jupyter-widgets/schema": "^0.4.0", - "@jupyterlab/coreutils": "^3.1.0", - "@jupyterlab/services": "^4.2.0", - "@koa/cors": "^3.0.0", - "@loadable/component": "^5.12.0", - "@nteract/messaging": "^7.0.0", - "ansi-regex": "^4.1.0", + "@iarna/toml": "^3.0.0", + "@vscode/extension-telemetry": "^0.8.4", "arch": "^2.1.0", - "azure-storage": "^2.10.3", - "detect-indent": "^6.0.0", - "diff-match-patch": "^1.0.0", - "fast-deep-equal": "^2.0.1", - "font-awesome": "^4.7.0", - "fs-extra": "^4.0.3", - "fuzzy": "^0.1.3", - "get-port": "^3.2.0", - "glob": "^7.1.2", - "hash.js": "^1.1.7", - "iconv-lite": "^0.4.21", - "inversify": "^4.11.1", - "is-online": "^8.2.1", - "jsonc-parser": "^2.0.3", - "koa": "^2.11.0", - "koa-compress": "^3.0.0", - "koa-logger": "^3.2.1", - "line-by-line": "^0.1.6", - "lodash": "^4.17.15", - "log4js": "^6.1.2", - "md5": "^2.2.1", - "minimatch": "^3.0.4", + "fs-extra": "^11.2.0", + "glob": "^7.2.0", + "iconv-lite": "^0.6.3", + "inversify": "^6.0.2", + "jsonc-parser": "^3.0.0", + "lodash": "^4.18.1", + "minimatch": "^5.1.8", "named-js-regexp": "^1.3.3", - "node-fetch": "^1.0.0", "node-stream-zip": "^1.6.0", - "onigasm": "^2.2.2", - "pdfkit": "^0.11.0", - "pidusage": "^1.2.0", - "portfinder": "^1.0.25", - "reflect-metadata": "^0.1.12", - "request": "^2.87.0", - "request-progress": "^3.0.0", + "reflect-metadata": "^0.2.2", "rxjs": "^6.5.4", "rxjs-compat": "^6.5.4", - "sanitize-filename": "^1.6.3", - "semver": "^5.5.0", + "semver": "^7.5.2", "stack-trace": "0.0.10", - "string-argv": "^0.3.1", - "strip-ansi": "^5.2.0", - "sudo-prompt": "^8.2.0", - "svg-to-pdfkit": "^0.1.8", - "tmp": "^0.0.29", - "tree-kill": "^1.2.2", - "typescript-char": "^0.0.0", - "uint64be": "^1.0.1", - "unicode": "^10.0.0", - "untildify": "^3.0.2", - "vscode-debugadapter": "^1.28.0", + "sudo-prompt": "^9.2.1", + "tmp": "^0.2.5", + "uint64be": "^3.0.0", + "unicode": "^14.0.0", "vscode-debugprotocol": "^1.28.0", - "vscode-extension-telemetry": "0.1.0", - "vscode-jsonrpc": "^5.0.1", - "vscode-languageclient": "^6.2.0-next.2", - "vscode-languageserver": "^6.2.0-next.2", - "vscode-languageserver-protocol": "^3.16.0-next.2", - "vsls": "^0.3.1291", + "vscode-jsonrpc": "^9.0.0-next.5", + "vscode-languageclient": "^10.0.0-next.12", + "vscode-languageserver-protocol": "^3.17.6-next.10", + "vscode-tas-client": "^0.1.84", + "which": "^2.0.2", "winreg": "^1.2.4", - "winston": "^3.2.1", - "ws": "^6.0.0", - "xml2js": "^0.4.19", - "zeromq": "^6.0.0-beta.6" + "xml2js": "^0.5.0" }, "devDependencies": { - "@babel/cli": "^7.8.4", - "@babel/core": "^7.4.4", - "@babel/plugin-transform-runtime": "^7.4.4", - "@babel/polyfill": "^7.4.4", - "@babel/preset-env": "^7.1.0", - "@babel/preset-react": "^7.0.0", - "@babel/register": "^7.9.0", - "@blueprintjs/select": "^3.11.2", - "@enonic/fnv-plus": "^1.3.0", - "@istanbuljs/nyc-config-typescript": "^0.1.3", - "@jupyter-widgets/base": "^2.0.1", - "@jupyter-widgets/controls": "^1.5.2", - "@jupyter-widgets/jupyterlab-manager": "^1.0.2", - "@jupyter-widgets/output": "^2.0.1", - "@nteract/plotly": "^1.48.3", - "@nteract/transform-dataresource": "^4.3.5", - "@nteract/transform-geojson": "^3.2.3", - "@nteract/transform-model-debug": "^3.2.3", - "@nteract/transform-plotly": "^6.0.0", - "@nteract/transform-vega": "^6.0.3", - "@nteract/transforms": "^4.4.4", - "@phosphor/widgets": "^1.9.3", - "@testing-library/react": "^9.4.0", - "@types/ansi-regex": "^4.0.0", + "@istanbuljs/nyc-config-typescript": "^1.0.2", + "@types/bent": "^7.3.0", "@types/chai": "^4.1.2", - "@types/chai-arrays": "^1.0.2", + "@types/chai-arrays": "^2.0.0", "@types/chai-as-promised": "^7.1.0", - "@types/copy-webpack-plugin": "^4.4.2", - "@types/cors": "^2.8.6", - "@types/debug": "^4.1.5", - "@types/dedent": "^0.7.0", - "@types/del": "^3.0.0", - "@types/diff-match-patch": "^1.0.32", - "@types/download": "^6.2.2", - "@types/enzyme": "^3.1.14", - "@types/enzyme-adapter-react-16": "^1.0.3", - "@types/event-stream": "^3.3.33", - "@types/fs-extra": "^5.0.1", - "@types/get-port": "^3.2.0", - "@types/glob": "^5.0.35", - "@types/html-webpack-plugin": "^3.2.0", - "@types/iconv-lite": "^0.0.1", - "@types/jsdom": "^11.12.0", - "@types/koa": "^2.11.0", - "@types/koa-compress": "^2.0.9", - "@types/koa-logger": "^3.1.1", - "@types/koa__cors": "^2.2.3", - "@types/loadable__component": "^5.10.0", - "@types/loader-utils": "^1.1.3", + "@types/download": "^8.0.1", + "@types/fs-extra": "^11.0.4", + "@types/glob": "^7.2.0", "@types/lodash": "^4.14.104", - "@types/md5": "^2.1.32", - "@types/memoize-one": "^4.1.1", - "@types/mocha": "^5.2.7", - "@types/nock": "^10.0.3", - "@types/node": "^10.14.18", - "@types/node-fetch": "^2.3.4", - "@types/pdfkit": "^0.7.36", - "@types/promisify-node": "^0.4.0", - "@types/react": "^16.4.14", - "@types/react-dom": "^16.0.8", - "@types/react-json-tree": "^0.6.8", - "@types/react-redux": "^7.1.5", - "@types/react-virtualized": "^9.21.2", - "@types/redux-logger": "^3.0.7", - "@types/request": "^2.47.0", + "@types/mocha": "^9.1.0", + "@types/node": "^22.19.1", "@types/semver": "^5.5.0", "@types/shortid": "^0.0.29", - "@types/sinon": "^7.5.1", - "@types/socket.io": "^2.1.4", + "@types/sinon": "^17.0.3", "@types/stack-trace": "0.0.29", - "@types/temp": "^0.8.32", - "@types/tmp": "0.0.33", - "@types/untildify": "^3.0.0", - "@types/uuid": "^3.4.3", - "@types/vscode": "^1.43.0", - "@types/webpack-bundle-analyzer": "^2.13.0", + "@types/tmp": "^0.0.33", + "@types/vscode": "^1.95.0", + "@types/which": "^2.0.1", "@types/winreg": "^1.2.30", - "@types/ws": "^6.0.1", "@types/xml2js": "^0.4.2", - "acorn": "^6.4.1", - "ansi-to-html": "^0.6.7", - "awesome-typescript-loader": "^5.2.1", - "babel-loader": "^8.0.3", - "babel-plugin-inline-json-import": "^0.3.1", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-polyfill": "^6.26.0", - "bootstrap": "^4.3.1", - "bootstrap-less": "^3.3.8", - "brfs": "^2.0.2", - "canvas": "^2.6.0", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vscode/test-electron": "^2.3.8", + "@vscode/vsce": "^2.27.0", + "bent": "^7.3.12", "chai": "^4.1.2", "chai-arrays": "^2.0.0", "chai-as-promised": "^7.1.1", - "chai-http": "^4.3.0", - "codecov": "^3.6.5", - "colors": "^1.2.1", - "copy-webpack-plugin": "^5.1.1", - "cors": "^2.8.5", - "cross-env": "^6.0.3", + "copy-webpack-plugin": "^9.1.0", + "cross-env": "^7.0.3", "cross-spawn": "^6.0.5", - "css-loader": "^1.0.1", - "dedent": "^0.7.0", - "del": "^3.0.0", - "download": "^7.0.0", - "enzyme": "^3.7.0", - "enzyme-adapter-react-16": "^1.6.0", - "eslint-config-prettier": "^6.9.0", - "eslint-plugin-prettier": "^3.1.2", - "event-stream": "3.3.4", - "expose-loader": "^0.7.5", - "express": "^4.17.1", - "extract-zip": "^1.6.7", - "fast-xml-parser": "^3.16.0", - "file-loader": "^5.1.0", - "filemanager-webpack-plugin-fixed": "^2.0.9", - "flat": "^4.0.0", - "gulp": "^4.0.0", - "gulp-azure-storage": "^0.11.1", - "gulp-chmod": "^2.0.0", - "gulp-filter": "^5.1.0", - "gulp-gunzip": "^1.1.0", - "gulp-rename": "^1.4.0", - "gulp-sourcemaps": "^2.6.4", - "gulp-typescript": "^4.0.1", - "gulp-untar": "0.0.8", - "gulp-vinyl-zip": "^2.1.2", - "html-webpack-plugin": "^3.2.0", - "husky": "^1.1.2", - "immutable": "^4.0.0-rc.12", - "jsdom": "^15.0.0", - "json-loader": "^0.5.7", - "less": "^3.9.0", - "less-loader": "^5.0.0", - "less-plugin-inline-urls": "^1.2.0", - "loader-utils": "^1.1.0", - "lolex": "^5.1.2", - "memoize-one": "^5.1.1", - "mocha": "^6.2.3", - "mocha-junit-reporter": "^1.17.0", + "del": "^6.0.0", + "download": "^8.0.0", + "eslint": "^8.57.1", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.3.1", + "eslint-plugin-no-only-tests": "^3.3.0", + "eslint-plugin-react": "^7.20.3", + "eslint-plugin-react-hooks": "^4.0.0", + "expose-loader": "^3.1.0", + "flat": "^5.0.2", + "get-port": "^5.1.1", + "gulp": "^5.0.0", + "gulp-typescript": "^5.0.0", + "mocha": "^11.1.0", + "mocha-junit-reporter": "^2.0.2", "mocha-multi-reporters": "^1.1.7", - "monaco-editor": "0.18.1", - "monaco-editor-textmate": "^2.2.1", - "monaco-editor-webpack-plugin": "^1.7.0", - "monaco-textmate": "^3.0.1", - "nocache": "^2.1.0", - "nock": "^10.0.6", "node-has-native-dependencies": "^1.0.2", - "node-html-parser": "^1.1.13", + "node-loader": "^1.0.2", + "node-polyfill-webpack-plugin": "^1.1.4", "nyc": "^15.0.0", - "playwright-chromium": "^0.13.0", - "postcss": "^7.0.27", - "postcss-cssnext": "^3.1.0", - "postcss-import": "^12.0.1", - "postcss-loader": "^3.0.0", "prettier": "^2.0.2", - "range-inclusive": "^1.0.2", - "raw-loader": "^0.5.1", - "react": "^16.5.2", - "react-data-grid": "^6.0.2-0", - "react-dev-utils": "^5.0.2", - "react-dom": "^16.5.2", - "react-json-tree": "^0.11.0", - "react-redux": "^7.1.1", - "react-svg-pan-zoom": "^3.1.0", - "react-svgmt": "^1.1.8", - "react-virtualized": "^9.21.1", - "redux": "^4.0.4", - "redux-logger": "^3.0.6", - "relative": "^3.0.2", - "remove-files-webpack-plugin": "^1.4.0", - "requirejs": "^2.3.6", "rewiremock": "^3.13.0", - "rimraf": "^3.0.2", - "sass-loader": "^7.1.0", - "serialize-javascript": "^2.1.2", "shortid": "^2.2.8", - "sinon": "^8.0.1", - "slickgrid": "^2.4.17", - "socket.io": "^2.3.0", + "sinon": "^18.0.0", "source-map-support": "^0.5.12", - "style-loader": "^0.23.1", - "styled-jsx": "^3.1.0", - "svg-inline-loader": "^0.8.0", - "svg-inline-react": "^3.1.0", - "terser-webpack-plugin": "^2.3.2", - "transform-loader": "^0.2.4", - "ts-loader": "^5.3.0", + "ts-loader": "^9.2.8", "ts-mockito": "^2.5.0", - "ts-node": "^8.3.0", + "ts-node": "^10.7.0", "tsconfig-paths-webpack-plugin": "^3.2.0", - "tslint": "^5.20.1", - "tslint-config-prettier": "^1.18.0", - "tslint-eslint-rules": "^5.1.0", - "tslint-microsoft-contrib": "^5.0.3", - "tslint-plugin-prettier": "^2.1.0", - "typed-react-markdown": "^0.1.0", "typemoq": "^2.1.0", - "typescript": "^3.8.3", - "typescript-formatter": "^7.1.0", - "unicode-properties": "^1.3.1", - "url-loader": "^1.1.2", - "uuid": "^3.3.2", - "vinyl-fs": "^3.0.3", - "vsce": "^1.59.0", - "vscode-debugadapter-testsupport": "^1.27.0", - "vscode-test": "^1.2.3", - "webpack": "^4.33.0", - "webpack-bundle-analyzer": "^3.6.0", - "webpack-cli": "^3.1.2", + "typescript": "~5.2", + "uuid": "^8.3.2", + "webpack": "^5.105.0", + "webpack-bundle-analyzer": "^4.5.0", + "webpack-cli": "^4.9.2", "webpack-fix-default-import-plugin": "^1.0.3", - "webpack-merge": "^4.1.4", - "webpack-node-externals": "^1.7.2", - "webpack-require-from": "^1.8.0", - "why-is-node-running": "^2.0.3", - "wtfnode": "^0.8.0", - "yargs": "^12.0.2" - }, - "__metadata": { - "id": "f1f59ae4-9318-4f3c-a9b5-81b2eaa5f8a5", - "publisherDisplayName": "Microsoft", - "publisherId": "998b010b-e2af-44a5-a6cd-0b5fd3b9b6f8" + "webpack-merge": "^5.8.0", + "webpack-node-externals": "^3.0.0", + "webpack-require-from": "^1.8.6", + "worker-loader": "^3.0.8", + "yargs": "^15.3.1" } } diff --git a/package.nls.de.json b/package.nls.de.json deleted file mode 100644 index 77ec14b3ee9c..000000000000 --- a/package.nls.de.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "python.command.python.sortImports.title": "Sortieren der Importe", - "python.command.python.startREPL.title": "Starten des REPL", - "python.command.python.createTerminal.title": "Terminal erstellen", - "python.command.python.buildWorkspaceSymbols.title": "Arbeitsplatz-Symbole erstellen", - "python.command.python.runtests.title": "Alle Unittests ausführen", - "python.command.python.debugtests.title": "Alle Unittests debuggen", - "python.command.python.execInTerminal.title": "Python-Datei im Terminal ausführen", - "python.command.python.setInterpreter.title": "Interpreter auswählen", - "python.command.python.refactorExtractVariable.title": "Variable extrahieren", - "python.command.python.refactorExtractMethod.title": "Methode extrahieren", - "python.command.python.viewTestOutput.title": "Unittest-Ausgabe anzeigen", - "python.command.python.selectAndRunTestMethod.title": "Unittest-Methode ausführen ...", - "python.command.python.selectAndDebugTestMethod.title": "Unittest-Debug-Methode ausführen ...", - "python.command.python.selectAndRunTestFile.title": "Unittest-Datei ausführen ...", - "python.command.python.runCurrentTestFile.title": "Ausgewählte Unittest-Datei ausführen", - "python.command.python.runFailedTests.title": "Fehlerhafte Unittests ausführen", - "python.command.python.discoverTests.title": "Unittests durchsuchen", - "python.command.python.execSelectionInTerminal.title": "Selektion/Reihe in Python-Terminal ausführen", - "python.command.python.execSelectionInDjangoShell.title": "Selektion/Reihe in Django-Shell ausführen", - "python.command.python.goToPythonObject.title": "Gehe zu Python-Objekt", - "python.command.python.setLinter.title": "Linter auswählen", - "python.command.python.enableLinting.title": "Linting aktivieren", - "python.command.python.runLinting.title": "Linting ausführen", - "python.snippet.launch.standard.label": "Python: Aktuelle Datei", - "python.snippet.launch.module.label": "Python: Modul", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid-Anwendung", - "python.snippet.launch.attach.label": "Python: Anfügen" -} diff --git a/package.nls.es.json b/package.nls.es.json deleted file mode 100644 index 227e268dbc8d..000000000000 --- a/package.nls.es.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "python.command.python.sortImports.title": "Ordenar importaciones", - "python.command.python.startREPL.title": "Nuevo REPL", - "python.command.python.createTerminal.title": "Nueva terminal", - "python.command.python.buildWorkspaceSymbols.title": "Compilar símbolos del área de trabajo", - "python.command.python.runtests.title": "Ejecutar todas las pruebas unitarias", - "python.command.python.debugtests.title": "Depurar todas las pruebas unitarias", - "python.command.python.execInTerminal.title": "Ejecutar archivo Python en la terminal", - "python.command.python.setInterpreter.title": "Seleccionar intérprete", - "python.command.python.refactorExtractVariable.title": "Extraer variable", - "python.command.python.refactorExtractMethod.title": "Extraer método", - "python.command.python.viewTestOutput.title": "Mostrar resultados de la prueba unitaria", - "python.command.python.selectAndRunTestMethod.title": "Método de ejecución de pruebas unitarias ...", - "python.command.python.selectAndDebugTestMethod.title": "Método de depuración de pruebas unitarias ...", - "python.command.python.selectAndRunTestFile.title": "Ejecutar archivo de prueba unitaria ...", - "python.command.python.runCurrentTestFile.title": "Ejecutar archivo de prueba unitaria actual", - "python.command.python.runFailedTests.title": "Ejecutar pruebas unitarias fallidas", - "python.command.python.discoverTests.title": "Encontrar pruebas unitarias", - "python.command.python.execSelectionInTerminal.title": "Ejecutar línea/selección en la terminal", - "python.command.python.execSelectionInDjangoShell.title": "Ejecutar línea/selección en el intérprete de Django", - "python.command.python.goToPythonObject.title": "Ir al objeto de Python", - "python.command.python.setLinter.title": "Seleccionar Linter", - "python.command.python.enableLinting.title": "Habilitar Linting", - "python.command.python.runLinting.title": "Ejecutar Linting", - "python.snippet.launch.standard.label": "Python: Archivo actual", - "python.snippet.launch.module.label": "Python: Módulo", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid", - "python.snippet.launch.attach.label": "Python: Adjuntar" -} diff --git a/package.nls.fr.json b/package.nls.fr.json deleted file mode 100644 index ad28a94d6e09..000000000000 --- a/package.nls.fr.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "python.command.python.sortImports.title": "Trier les imports", - "python.command.python.startREPL.title": "Démarrer la console interactive", - "python.command.python.createTerminal.title": "Créer un terminal", - "python.command.python.buildWorkspaceSymbols.title": "Construire les symboles de l'espace de travail", - "python.command.python.runtests.title": "Exécuter tous les tests unitaires", - "python.command.python.debugtests.title": "Déboguer tous les tests unitaires", - "python.command.python.execInTerminal.title": "Exécuter le script Python dans un terminal", - "python.command.python.setInterpreter.title": "Sélectionner l'interpreteur", - "python.command.python.refactorExtractVariable.title": "Extraire la variable", - "python.command.python.refactorExtractMethod.title": "Extraire la méthode", - "python.command.python.viewTestOutput.title": "Afficher la sortie des tests unitaires", - "python.command.python.selectAndRunTestMethod.title": "Exécuter la méthode de test unitaire ...", - "python.command.python.selectAndDebugTestMethod.title": "Déboguer la méthode de test unitaire ...", - "python.command.python.selectAndRunTestFile.title": "Exécuter le fichier de test unitaire ...", - "python.command.python.runCurrentTestFile.title": "Exécuter le fichier de test unitaire courant", - "python.command.python.runFailedTests.title": "Exécuter les derniers test unitaires échoués", - "python.command.python.execSelectionInTerminal.title": "Exécuter la ligne/sélection dans un terminal Python", - "python.command.python.execSelectionInDjangoShell.title": "Exécuter la ligne/sélection dans un shell Django", - "python.command.python.goToPythonObject.title": "Se rendre à l'objet Python", - "python.command.python.setLinter.title": "Sélectionner le linter", - "python.command.python.enableLinting.title": "Activer le linting", - "python.command.python.runLinting.title": "Exécuter le linting", - "python.snippet.launch.standard.label": "Python : Fichier actuel", - "python.snippet.launch.module.label": "Python: Module", - "python.snippet.launch.django.label": "Python : Django", - "python.snippet.launch.flask.label": "Python : Flask", - "python.snippet.launch.pyramid.label": "Python : application Pyramid", - "python.snippet.launch.attach.label": "Python: Attacher" -} diff --git a/package.nls.it.json b/package.nls.it.json deleted file mode 100644 index 864c50099f70..000000000000 --- a/package.nls.it.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "python.command.python.sortImports.title": "Ordina gli import", - "python.command.python.startREPL.title": "Apri nuova REPL", - "python.command.python.createTerminal.title": "Apri nuovo terminale", - "python.command.python.buildWorkspaceSymbols.title": "Compila simboli dello spazio di lavoro", - "python.command.python.runtests.title": "Esegui tutti i test", - "python.command.python.debugtests.title": "Esegui debug di tutti i test", - "python.command.python.execInTerminal.title": "Esegui file Python nel terminale", - "python.command.python.setInterpreter.title": "Seleziona interprete", - "python.command.python.refactorExtractVariable.title": "Estrai variable", - "python.command.python.refactorExtractMethod.title": "Estrai metodo", - "python.command.python.viewTestOutput.title": "Mostra output dei test", - "python.command.python.selectAndRunTestMethod.title": "Esegui metodo di test ...", - "python.command.python.selectAndDebugTestMethod.title": "Esegui debug del metodo di test ...", - "python.command.python.selectAndRunTestFile.title": "Esegui file di test ...", - "python.command.python.runCurrentTestFile.title": "Esegui file di test attuale", - "python.command.python.runFailedTests.title": "Esegui test falliti", - "python.command.python.execSelectionInTerminal.title": "Esegui selezione/linea nel terminale di Python", - "python.command.python.execSelectionInDjangoShell.title": "Esegui selezione/linea nella shell Django", - "python.command.python.goToPythonObject.title": "Vai a oggetto Python", - "python.command.python.setLinter.title": "Selezione Linter", - "python.command.python.enableLinting.title": "Attiva Linting", - "python.command.python.runLinting.title": "Esegui Linting", - "python.snippet.launch.standard.label": "Python: File corrente", - "python.snippet.launch.module.label": "Python: Modulo", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Applicazione Pyramid", - "python.snippet.launch.attach.label": "Python: Allega", - "LanguageService.bannerLabelYes": "Sì, prenderò il sondaggio ora" -} diff --git a/package.nls.ja.json b/package.nls.ja.json deleted file mode 100644 index a2db0a823636..000000000000 --- a/package.nls.ja.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "python.command.python.sortImports.title": "import 文を並び替える", - "python.command.python.startREPL.title": "REPL を開始", - "python.command.python.buildWorkspaceSymbols.title": "ワークスペースのシンボルをビルド", - "python.command.python.runtests.title": "すべての単体テストを実行", - "python.command.python.debugtests.title": "すべての単体テストをデバッグ", - "python.command.python.execInTerminal.title": "ターミナルで Python ファイルを実行", - "python.command.python.setInterpreter.title": "インタープリターを選択", - "python.command.python.refactorExtractVariable.title": "変数を抽出", - "python.command.python.refactorExtractMethod.title": "メソッドを抽出", - "python.command.python.viewTestOutput.title": "単体テストの出力を表示", - "python.command.python.selectAndRunTestMethod.title": "単体テストメソッドを実行...", - "python.command.python.selectAndDebugTestMethod.title": "単体テストメソッドをデバッグ...", - "python.command.python.selectAndRunTestFile.title": "単体テストファイルを実行...", - "python.command.python.runCurrentTestFile.title": "現在の単体テストファイルを実行", - "python.command.python.runFailedTests.title": "失敗した単体テストを実行", - "python.command.python.execSelectionInTerminal.title": "Python ターミナルで選択範囲/行を実行", - "python.command.python.execSelectionInDjangoShell.title": "Django シェルで選択範囲/行を実行", - "python.command.python.goToPythonObject.title": "Python オブジェクトに移動", - "python.snippet.launch.standard.label": "Python: Current File", - "python.snippet.launch.module.label": "Python: モジュール", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid アプリケーション", - "python.snippet.launch.attach.label": "Python: アタッチ" -} diff --git a/package.nls.json b/package.nls.json index 4f4fd78183f7..57f2ed95b2c0 100644 --- a/package.nls.json +++ b/package.nls.json @@ -1,479 +1,177 @@ { - "python.command.python.sortImports.title": "Sort Imports", - "python.command.python.startREPL.title": "Start REPL", + "python.command.python.startTerminalREPL.title": "Start Terminal REPL", + "python.languageModelTools.get_python_environment_details.userDescription": "Get information for a Python Environment, such as Type, Version, Packages, and more.", + "python.languageModelTools.install_python_packages.userDescription": "Installs Python packages in a Python Environment.", + "python.languageModelTools.get_python_executable_details.userDescription": "Get executable info for a Python Environment", + "python.languageModelTools.configure_python_environment.userDescription": "Configure a Python Environment for a workspace", + "python.command.python.startNativeREPL.title": "Start Native Python REPL", + "python.command.python.createEnvironment.title": "Create Environment...", + "python.command.python.createNewFile.title": "New Python File", "python.command.python.createTerminal.title": "Create Terminal", - "python.command.python.buildWorkspaceSymbols.title": "Build Workspace Symbols", - "python.command.python.runtests.title": "Run All Tests", - "python.command.python.debugtests.title": "Debug All Tests", "python.command.python.execInTerminal.title": "Run Python File in Terminal", + "python.command.python.execInTerminalIcon.title": "Run Python File", + "python.command.python.execInDedicatedTerminal.title": "Run Python File in Dedicated Terminal", "python.command.python.setInterpreter.title": "Select Interpreter", - "python.command.python.switchOffInsidersChannel.title": "Switch to Default Channel", - "python.command.python.switchToDailyChannel.title": "Switch to Insiders Daily Channel", - "python.command.python.switchToWeeklyChannel.title": "Switch to Insiders Weekly Channel", "python.command.python.clearWorkspaceInterpreter.title": "Clear Workspace Interpreter Setting", - "python.command.python.resetInterpreterSecurityStorage.title": "Reset Stored Info for Untrusted Interpreters", - "python.command.python.refactorExtractVariable.title": "Extract Variable", - "python.command.python.refactorExtractMethod.title": "Extract Method", "python.command.python.viewOutput.title": "Show Output", - "python.command.python.viewTestOutput.title": "Show Test Output", - "python.command.python.datascience.viewJupyterOutput.title": "Show Jupyter Output", + "python.command.python.installJupyter.title": "Install the Jupyter extension", "python.command.python.viewLanguageServerOutput.title": "Show Language Server Output", - "python.command.python.selectAndRunTestMethod.title": "Run Test Method ...", - "python.command.python.selectAndDebugTestMethod.title": "Debug Test Method ...", - "python.command.python.selectAndRunTestFile.title": "Run Test File ...", - "python.command.python.runCurrentTestFile.title": "Run Current Test File", - "python.command.python.runFailedTests.title": "Run Failed Tests", - "python.command.python.discoverTests.title": "Discover Tests", - "python.command.python.discoveringTests.title": "Discovering...", - "python.command.python.stopTests.title": "Stop", "python.command.python.configureTests.title": "Configure Tests", + "python.command.testing.rerunFailedTests.title": "Rerun Failed Tests", "python.command.python.execSelectionInTerminal.title": "Run Selection/Line in Python Terminal", + "python.command.python.execSelectionInTerminal.shortTitle": "Run Selection/Line", + "python.command.python.execInREPL.title": "Run Selection/Line in Native Python REPL", "python.command.python.execSelectionInDjangoShell.title": "Run Selection/Line in Django Shell", - "python.command.python.goToPythonObject.title": "Go to Python Object", - "python.command.python.setLinter.title": "Select Linter", - "python.command.python.enableLinting.title": "Enable Linting", - "python.command.python.runLinting.title": "Run Linting", - "python.command.python.datascience.runFileInteractive.title": "Run Current File in Python Interactive Window", - "python.command.python.datascience.debugFileInteractive.title": "Debug Current File in Python Interactive Window", - "python.command.python.datascience.runallcells.title": "Run All Cells", - "python.command.python.datascience.notebookeditor.runallcells.title": "Run All Notebook Cells", - "python.command.python.datascience.runallcellsabove.title": "Run Above", - "python.command.python.datascience.runcellandallbelow.title": "Run Below", - "python.command.python.datascience.runallcellsabove.palette.title": "Run Cells Above Current Cell", - "python.command.python.datascience.runcurrentcellandallbelow.palette.title": "Run Current Cell and Below", - "python.command.python.datascience.debugcurrentcell.palette.title": "Debug Current Cell", - "python.command.python.datascience.debugcell.title": "Debug Cell", - "python.command.python.datascience.debugstepover.title": "Step Over", - "python.command.python.datascience.debugcontinue.title": "Continue", - "python.command.python.datascience.debugstop.title": "Stop", - "python.command.python.datascience.runtoline.title": "Run To Line in Python Interactive Window", - "python.command.python.datascience.runfromline.title": "Run From Line in Python Interactive Window", - "python.command.python.datascience.runcurrentcell.title": "Run Current Cell", - "python.command.python.datascience.runcurrentcelladvance.title": "Run Current Cell And Advance", - "python.command.python.datascience.execSelectionInteractive.title": "Run Selection/Line in Python Interactive Window", - "python.command.python.datascience.runcell.title": "Run Cell", - "python.command.python.datascience.showhistorypane.title": "Show Python Interactive Window", - "python.command.python.datascience.selectjupyteruri.title": "Specify local or remote Jupyter server for connections", - "python.command.python.datascience.selectjupytercommandline.title": "Specify Jupyter command line arguments", - "python.command.python.datascience.importnotebook.title": "Import Jupyter Notebook", - "python.command.python.datascience.opennotebook.title": "Open in Notebook Editor", - "python.command.python.datascience.importnotebookfile.title": "Convert to Python Script", - "python.command.python.enableSourceMapSupport.title": "Enable Source Map Support For Extension Debugging", - "python.command.python.datascience.exportoutputasnotebook.title": "Export Python Interactive Window as Jupyter Notebook", - "python.command.python.datascience.exportfileasnotebook.title": "Export Current Python File as Jupyter Notebook", - "python.command.python.datascience.exportfileandoutputasnotebook.title": "Export Current Python File and Output as Jupyter Notebook", - "python.command.python.datascience.undocells.title": "Undo Last Python Interactive Action", - "python.command.python.datascience.redocells.title": "Redo Last Python Interactive Action", - "python.command.python.datascience.removeallcells.title": "Delete All Python Interactive Cells", - "python.command.python.datascience.notebookeditor.removeallcells.title": "Delete All Notebook Editor Cells", - "python.command.python.datascience.notebookeditor.runselectedcell.title": "Run Selected Notebook Cell", - "python.command.python.datascience.notebookeditor.addcellbelow.title": "Add Empty Cell to Notebook File", - "python.command.python.datascience.interruptkernel.title": "Interrupt IPython Kernel", - "python.command.python.datascience.restartkernel.title": "Restart IPython Kernel", - "python.command.python.datascience.expandallcells.title": "Expand All Python Interactive Cells", - "python.command.python.datascience.collapseallcells.title": "Collapse All Python Interactive Cells", - "python.command.python.datascience.addcellbelow.title": "Add Empty Cell to File", - "python.command.python.datascience.scrolltocell.title": "Scroll Cell Into View", - "python.command.python.datascience.createnewnotebook.title": "Create New Blank Jupyter Notebook", - "python.command.python.datascience.selectJupyterInterpreter.title": "Select Interpreter to start Jupyter server", - "Datascience.currentlySelectedJupyterInterpreterForPlaceholder": "current: {0}", - "python.command.python.analysis.clearCache.title": "Clear Module Analysis Cache", - "python.snippet.launch.standard.label": "Python: Current File", - "python.snippet.launch.module.label": "Python: Module", - "python.snippet.launch.module.default": "enter-your-module-name", - "python.snippet.launch.attach.label": "Python: Remote Attach", - "python.snippet.launch.attachpid.label": "Python: Attach using Process Id", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid Application", - "LanguageService.bannerMessage": "Can you please take 2 minutes to tell us how the Python Language Server is working for you?", - "LanguageService.bannerLabelYes": "Yes, take survey now", - "LanguageService.bannerLabelNo": "No, thanks", - "LanguageService.lsFailedToStart": "We encountered an issue starting the Language Server. Reverting to the alternative, Jedi. Check the Python output panel for details.", - "LanguageService.lsFailedToDownload": "We encountered an issue downloading the Language Server. Reverting to the alternative, Jedi. Check the Python output panel for details.", - "LanguageService.lsFailedToExtract": "We encountered an issue extracting the Language Server. Reverting to the alternative, Jedi. Check the Python output panel for details.", - "DataScience.unknownMimeTypeFormat": "Mime type {0} is not currently supported.", - "DataScience.historyTitle": "Python Interactive", - "DataScience.dataExplorerTitle": "Data Viewer", - "DataScience.badWebPanelFormatString": "

{0} is not a valid file name

", - "DataScience.sessionDisposed": "Cannot execute code, session has been disposed.", - "DataScience.rawKernelProcessNotStarted": "Raw kernel process was not able to start.", - "DataScience.rawKernelProcessExitBeforeConnect": "Raw kernel process exited before connecting.", - "DataScience.passwordFailure": "Failed to connect to password protected server. Check that password is correct.", - "DataScience.exportDialogTitle": "Export to Jupyter Notebook", - "DataScience.exportDialogFilter": "Jupyter Notebooks", - "DataScience.exportDialogComplete": "Notebook written to {0}", - "DataScience.exportDialogFailed": "Failed to export notebook. {0}", - "DataScience.exportOpenQuestion": "Open in browser", - "DataScience.exportOpenQuestion1": "Open in editor", - "DataScience.collapseInputTooltip": "Collapse input block", - "DataScience.collapseVariableExplorerTooltip": "Hide variables active in jupyter kernel", - "DataScience.collapseVariableExplorerLabel": "Variables", - "DataScience.expandVariableExplorerTooltip": "Show variables active in jupyter kernel", - "DataScience.close": "Close", - "DataScience.variableLoadingValue": "Loading...", - "DataScience.importDialogTitle": "Import Jupyter Notebook", - "DataScience.importDialogFilter": "Jupyter Notebooks", - "DataScience.notebookCheckForImportYes": "Import", - "DataScience.reloadRequired": "Please reload the window for new settings to take effect.", - "DataScience.notebookCheckForImportNo": "Later", - "DataScience.notebookCheckForImportDontAskAgain": "Don't Ask Again", - "DataScience.notebookCheckForImportTitle": "Do you want to import the Jupyter Notebook into Python code?", - "DataScience.jupyterNotSupported": "Jupyter cannot be started. Error attempting to locate jupyter: {0}", - "DataScience.jupyterNotSupportedBecauseOfEnvironment": "Activating {0} to run Jupyter failed with {1}.", - "DataScience.jupyterNbConvertNotSupported": "Importing notebooks requires Jupyter nbconvert to be installed.", - "DataScience.jupyterLaunchNoURL": "Failed to find the URL of the launched Jupyter notebook server", - "DataScience.jupyterLaunchTimedOut": "The Jupyter notebook server failed to launch in time", - "DataScience.jupyterSelfCertFail": "The security certificate used by server {0} was not issued by a trusted certificate authority.\r\nThis may indicate an attempt to steal your information.\r\nDo you want to enable the Allow Unauthorized Remote Connection setting for this workspace to allow you to connect?", - "DataScience.jupyterSelfCertEnable": "Yes, connect anyways", - "DataScience.jupyterSelfCertClose": "No, close the connection", - "DataScience.jupyterServerCrashed": "Jupyter server crashed. Unable to connect. \r\nError code from jupyter: {0}", - "DataScience.rawConnectionDisplayName": "Direct kernel connection", - "DataScience.rawConnectionBrokenError": "Direct kernel connection broken", - "DataScience.pythonInteractiveHelpLink": "Get more help", - "DataScience.markdownHelpInstallingMissingDependencies": "See [https://aka.ms/pyaiinstall](https://aka.ms/pyaiinstall) for help on installing Jupyter and related dependencies.", - "DataScience.importingFormat": "Importing {0}", - "DataScience.startingJupyter": "Starting Jupyter server", - "DataScience.connectingToJupyter": "Connecting to Jupyter server", - "Experiments.inGroup": "User belongs to experiment group '{0}'", - "Interpreters.RefreshingInterpreters": "Refreshing Python Interpreters", - "Interpreters.entireWorkspace": "Entire workspace", - "Interpreters.pythonInterpreterPath": "Python interpreter path: {0}", - "Interpreters.LoadingInterpreters": "Loading Python Interpreters", - "Interpreters.unsafeInterpreterMessage": "We found a Python environment in this workspace. Do you want to select it to start up the features in the Python extension? Only accept if you trust this environment.", - "Interpreters.condaInheritEnvMessage": "We noticed you're using a conda environment. If you are experiencing issues with this environment in the integrated terminal, we recommend that you let the Python extension change \"terminal.integrated.inheritEnv\" to false in your user settings.", - "Logging.CurrentWorkingDirectory": "cwd:", - "Common.bannerLabelYes": "Yes", - "Common.bannerLabelNo": "No", - "Common.doNotShowAgain": "Do not show again", - "Common.reload": "Reload", - "Common.moreInfo": "More Info", - "Common.and": "and", - "Common.ok": "Ok", - "Common.install": "Install", - "Common.learnMore": "Learn more", - "Common.reportThisIssue": "Report this issue", - "OutputChannelNames.languageServer": "Python Language Server", - "OutputChannelNames.python": "Python", - "OutputChannelNames.pythonTest": "Python Test Log", - "OutputChannelNames.jupyter": "Jupyter", - "ExtensionSurveyBanner.bannerMessage": "Can you please take 2 minutes to tell us how the Python extension is working for you?", - "ExtensionSurveyBanner.maybeLater": "Maybe later", - "ExtensionChannels.installingInsidersMessage": "Installing Insiders... ", - "ExtensionChannels.installingStableMessage": "Installing Stable... ", - "ExtensionChannels.installationCompleteMessage": "complete.", - "ExtensionChannels.downloadingInsidersMessage": "Downloading Insiders Extension... ", - "ExtensionChannels.yesWeekly": "Yes, weekly", - "ExtensionChannels.yesDaily": "Yes, daily", - "ExtensionChannels.promptMessage": "We noticed you are using Visual Studio Code Insiders. Would you like to use the Insiders build of the Python extension?", - "ExtensionChannels.reloadToUseInsidersMessage": "Please reload Visual Studio Code to use the insiders build of the Python extension.", - "ExtensionChannels.downloadCompletedOutputMessage": "Insiders build download complete.", - "ExtensionChannels.startingDownloadOutputMessage": "Starting download for Insiders build.", - "Interpreters.environmentPromptMessage": "We noticed a new virtual environment has been created. Do you want to select it for the workspace folder?", - "DataScience.reloadAfterChangingJupyterServerConnection": "Please reload VS Code when changing the Jupyter Server connection.", - "DataScience.restartKernelMessage": "Do you want to restart the IPython kernel? All variables will be lost.", - "DataScience.restartKernelMessageYes": "Yes", - "DataScience.restartKernelMessageNo": "No", - "DataScience.restartingKernelFailed": "Kernel restart failed. Jupyter server is hung. Please reload VS Code.", - "DataScience.interruptingKernelFailed": "Kernel interrupt failed. Jupyter server is hung. Please reload VS Code.", - "DataScienceSurveyBanner.bannerMessage": "Can you please take 2 minutes to tell us how the Python Data Science features are working for you?", - "DataScienceSurveyBanner.bannerLabelYes": "Yes, take survey now", - "DataScienceSurveyBanner.bannerLabelNo": "No, thanks", - "InteractiveShiftEnterBanner.bannerMessage": "Would you like to run code in the 'Python Interactive' window (an IPython console) for 'shift-enter'? Select 'No' to continue to run code in the Python Terminal. This can be changed later in settings.", - "DataScience.restartingKernelStatus": "Restarting IPython Kernel", - "DataScience.executingCode": "Executing Cell", - "DataScience.collapseAll": "Collapse all cell inputs", - "DataScience.expandAll": "Expand all cell inputs", - "DataScience.export": "Export as Jupyter notebook", - "DataScience.restartServer": "Restart IPython kernel", - "DataScience.undo": "Undo", - "DataScience.redo": "Redo", - "DataScience.clearAll": "Remove all cells", - "DataScience.pythonVersionHeader": "Python version:", - "DataScience.pythonRestartHeader": "Restarted kernel:", - "DataScience.pythonNewHeader": "Started new kernel:", - "DataScience.pythonConnectHeader": "Connected to kernel:", - "DataScience.executingCodeFailure": "Executing code failed : {0}", - "DataScience.inputWatermark": "Type code here and press shift-enter to run", - "DataScience.deleteButtonTooltip": "Remove cell", - "DataScience.gotoCodeButtonTooltip": "Go to code", - "DataScience.copyBackToSourceButtonTooltip": "Paste code into file", - "DataScience.copyToClipboardButtonTooltip": "Copy source to clipboard", - "DataScience.plotOpen": "Expand image", - "Linter.enableLinter": "Enable {0}", - "Linter.enablePylint": "You have a pylintrc file in your workspace. Do you want to enable pylint?", - "Linter.replaceWithSelectedLinter": "Multiple linters are enabled in settings. Replace with '{0}'?", - "Installer.noCondaOrPipInstaller": "There is no Conda or Pip installer available in the selected environment.", - "Installer.noPipInstaller": "There is no Pip installer available in the selected environment.", - "Installer.searchForHelp": "Search for help", - "DataScience.libraryNotInstalled": "Data Science library {0} is not installed. Install?", - "DataScience.libraryRequiredToLaunchJupyterNotInstalled": "Data Science library {0} is not installed.", - "DataScience.librariesRequiredToLaunchJupyterNotInstalled": "Data Science libraries {0} are not installed.", - "DataScience.libraryRequiredToLaunchJupyterNotInstalledInterpreter": "Data Science library {1} is not installed in interpreter {0}.", - "DataScience.librariesRequiredToLaunchJupyterNotInstalledInterpreter": "Data Science libraries {1} are not installed in interpreter {0}.", - "DataScience.jupyterInstall": "Install", - "DataScience.jupyterSelectURIPrompt": "Enter the URI of the running Jupyter server", - "DataScience.jupyterSelectURIInvalidURI": "Invalid URI specified", - "DataScience.jupyterSelectPasswordPrompt": "Enter your notebook password", - "DataScience.jupyterNotebookFailure": "Jupyter notebook failed to launch. \r\n{0}", - "DataScience.jupyterNotebookConnectFailed": "Failed to connect to Jupyter notebook. \r\n{0}\r\n{1}", - "DataScience.jupyterNotebookRemoteConnectFailed": "Failed to connect to remote Jupyter notebook.\r\nCheck that the Jupyter Server URI setting has a valid running server specified.\r\n{0}\r\n{1}", - "DataScience.jupyterNotebookRemoteConnectSelfCertsFailed": "Failed to connect to remote Jupyter notebook.\r\nSpecified server is using self signed certs. Enable Allow Unauthorized Remote Connection setting to connect anyways\r\n{0}\r\n{1}", - "DataScience.notebookVersionFormat": "Jupyter Notebook Version: {0}", - "DataScience.jupyterKernelSpecNotFound": "Cannot create a Jupyter kernel spec and none are available for use", - "DataScience.jupyterKernelSpecModuleNotFound": "'Kernelspec' module not installed in the selected interpreter ({0}).\n Please re-install or update 'jupyter'.", - "DataScience.jupyterGetVariablesBadResults": "Failed to fetch variable info from the Jupyter server.", - "DataScience.liveShareConnectFailure": "Cannot connect to host Jupyter session. URI not found.", - "DataScience.liveShareCannotSpawnNotebooks": "Spawning Jupyter notebooks is not supported over a live share connection", - "DataScience.liveShareCannotImportNotebooks": "Importing notebooks is not currently supported over a live share connection", - "DataScience.liveShareHostFormat": "{0} Jupyter Server", - "DataScience.liveShareSyncFailure": "Synchronization failure during live share startup.", - "DataScience.liveShareServiceFailure": "Failure starting '{0}' service during live share connection.", - "DataScience.documentMismatch": "Cannot run cells, duplicate documents for {0} found.", - "DataScience.pythonInteractiveCreateFailed": "Failure to create a 'Python Interactive' window. Try reinstalling the Python extension.", - "diagnostics.warnSourceMaps": "Source map support is enabled in the Python Extension, this will adversely impact performance of the extension.", - "diagnostics.disableSourceMaps": "Disable Source Map Support", - "diagnostics.warnBeforeEnablingSourceMaps": "Enabling source map support in the Python Extension will adversely impact performance of the extension.", - "diagnostics.enableSourceMapsAndReloadVSC": "Enable and reload Window", - "diagnostics.lsNotSupported": "Your operating system does not meet the minimum requirements of the Python Language Server. Reverting to the alternative autocompletion provider, Jedi.", - "diagnostics.invalidPythonPathInDebuggerSettings": "You need to select a Python interpreter before you start debugging.\n\nTip: click on \"Select Python Interpreter\" in the status bar.", - "diagnostics.invalidPythonPathInDebuggerLaunch": "The Python path in your debug configuration is invalid.", - "diagnostics.invalidDebuggerTypeDiagnostic": "Your launch.json file needs to be updated to change the \"pythonExperimental\" debug configurations to use the \"python\" debugger type, otherwise Python debugging may not work. Would you like to automatically update your launch.json file now?", - "diagnostics.consoleTypeDiagnostic": "Your launch.json file needs to be updated to change the console type string from \"none\" to \"internalConsole\", otherwise Python debugging may not work. Would you like to automatically update your launch.json file now?", - "diagnostics.justMyCodeDiagnostic": "Configuration \"debugStdLib\" in launch.json is no longer supported. It's recommended to replace it with \"justMyCode\", which is the exact opposite of using \"debugStdLib\". Would you like to automatically update your launch.json file to do that?", - "diagnostics.yesUpdateLaunch": "Yes, update launch.json", - "diagnostics.bannerLabelNo": "No, I will do it later", - "diagnostics.processId": "Attaching the debugger to a local process is an experimental feature. It will be available to all users soon.", - "diagnostics.invalidTestSettings": "Your settings needs to be updated to change the setting \"python.unitTest.\" to \"python.testing.\", otherwise testing Python code using the extension may not work. Would you like to automatically update your settings now?", - "DataScience.interruptKernel": "Interrupt IPython kernel", - "DataScience.clearAllOutput": "Clear All Output", - "DataScience.exportingFormat": "Exporting {0}", - "DataScience.exportCancel": "Cancel", - "Common.canceled": "Canceled", - "Common.cancel": "Cancel", - "DataScience.importChangeDirectoryComment": "{0} Change working directory from the workspace root to the ipynb file location. Turn this addition off with the DataScience.changeDirOnImportExport setting", - "DataScience.exportChangeDirectoryComment": "# Change directory to VSCode workspace root so that relative path loads work correctly. Turn this addition off with the DataScience.changeDirOnImportExport setting", - "DataScience.interruptKernelStatus": "Interrupting IPython Kernel", - "DataScience.restartKernelAfterInterruptMessage": "Interrupting the kernel timed out. Do you want to restart the kernel instead? All variables will be lost.", - "DataScience.pythonInterruptFailedHeader": "Keyboard interrupt crashed the kernel. Kernel restarted.", - "DataScience.sysInfoURILabel": "Jupyter Server URI: ", - "DataScience.jupyterStartTimedout": "Starting Jupyter has timedout. Please check the 'Jupyter' output panel for further details.", - "DataScience.startingJupyterLogMessage": "Starting Jupyter from {0} with command line {1}", - "DataScience.jupyterCommandLineDefaultLabel": "Default (recommended)", - "DataScience.jupyterCommandLineDefaultDetail": "The Python extension will determine the appropriate command line for Jupyter", - "DataScience.jupyterCommandLineCustomLabel": "Custom", - "DataScience.jupyterCommandLineCustomDetail": "Customize the command line passed to Jupyter on startup", - "DataScience.jupyterCommandLineReloadQuestion": "Please reload the window when changing the Jupyter command line.", - "DataScience.jupyterCommandLineReloadAnswer": "Reload", - "DataScience.jupyterCommandLineQuickPickPlaceholder": "Choose an option", - "DataScience.jupyterCommandLineQuickPickTitle": "Pick command line for Jupyter", - "DataScience.jupyterCommandLinePrompt": "Enter your custom command line for Jupyter", - "Common.loadingPythonExtension": "Python extension loading...", - "debug.selectConfigurationTitle": "Select a debug configuration", - "debug.selectConfigurationPlaceholder": "Debug Configuration", - "debug.launchJsonConfigurationsCompletionLabel": "Python", - "debug.launchJsonConfigurationsCompletionDescription": "Select a Python debug configuration", - "debug.debugFileConfigurationLabel": "Python File", - "debug.debugFileConfigurationDescription": "Debug the currently active Python file", - "debug.debugModuleConfigurationLabel": "Module", - "debug.debugModuleConfigurationDescription": "Debug a Python module by invoking it with '-m'", - "debug.moduleEnterModuleTitle": "Debug Module", - "debug.moduleEnterModulePrompt": "Enter a Python module/package name", - "debug.moduleEnterModuleDefault": "enter-your-module-name", - "debug.moduleEnterModuleInvalidNameError": "Enter a valid module name", - "debug.remoteAttachConfigurationLabel": "Remote Attach", - "debug.remoteAttachConfigurationDescription": "Attach to a remote debug server", - "debug.attachRemoteHostTitle": "Remote Debugging", - "debug.attachRemoteHostPrompt": "Enter the host name", - "debug.attachRemoteHostValidationError": "Enter a valid host name or IP address", - "debug.attachRemotePortTitle": "Remote Debugging", - "debug.attachRemotePortPrompt": "Enter the port number that the debug server is listening on", - "debug.attachRemotePortValidationError": "Enter a valid port number", - "debug.attachPidConfigurationLabel": "Attach using Process ID", - "debug.attachPidConfigurationDescription": "Attach to a local process", - "debug.debugDjangoConfigurationLabel": "Django", - "debug.debugDjangoConfigurationDescription": "Launch and debug a Django web application", - "debug.djangoEnterManagePyPathTitle": "Debug Django", - "debug.djangoEnterManagePyPathPrompt": "Enter the path to manage.py ('${workspaceFolderToken}' points to the root of the current workspace folder)", - "debug.djangoEnterManagePyPathInvalidFilePathError": "Enter a valid Python file path", - "debug.debugFlaskConfigurationLabel": "Flask", - "debug.debugFlaskConfigurationDescription": "Launch and debug a Flask web application", - "debug.flaskEnterAppPathOrNamePathTitle": "Debug Flask", - "debug.flaskEnterAppPathOrNamePathPrompt": "Enter the path to the application, e.g. 'app.py' or 'app'", - "debug.flaskEnterAppPathOrNamePathInvalidNameError": "Enter a valid name", - "debug.debugPyramidConfigurationLabel": "Pyramid", - "debug.debugPyramidConfigurationDescription": "Web Application", - "debug.pyramidEnterDevelopmentIniPathTitle": "Debug Pyramid", - "debug.pyramidEnterDevelopmentIniPathPrompt": "`Enter the path to development.ini ('${workspaceFolderToken}' points to the root of the current workspace folder)`", - "debug.pyramidEnterDevelopmentIniPathInvalidFilePathError": "Enter a valid file path", - "Testing.testErrorDiagnosticMessage": "Error", - "Testing.testFailDiagnosticMessage": "Fail", - "Testing.testSkippedDiagnosticMessage": "Skipped", - "Testing.configureTests": "Configure Test Framework", - "Testing.disableTests": "Disable Tests", - "Common.openOutputPanel": "Show output", - "LanguageService.downloadFailedOutputMessage": "Language server download failed", - "LanguageService.extractionFailedOutputMessage": "Language server extraction failed", - "LanguageService.extractionCompletedOutputMessage": "Language server download complete", - "LanguageService.extractionDoneOutputMessage": "done", - "LanguageService.reloadVSCodeIfSeachPathHasChanged": "Search paths have changed for this Python interpreter. Please reload the extension to ensure that the IntelliSense works correctly", - "AttachProcess.unsupportedOS": "Operating system '{0}' not supported.", - "AttachProcess.attachTitle": "Attach to process", - "AttachProcess.selectProcessPlaceholder": "Select the process to attach to", - "AttachProcess.noProcessSelected": "No process selected", - "AttachProcess.refreshList": "Refresh process list", - "DataScience.variableExplorerNameColumn": "Name", - "DataScience.variableExplorerTypeColumn": "Type", - "DataScience.variableExplorerSizeColumn": "Count", - "DataScience.variableExplorerValueColumn": "Value", - "DataScience.showDataExplorerTooltip": "Show variable in data viewer.", - "DataScience.dataExplorerInvalidVariableFormat": "'{0}' is not an active variable.", - "DataScience.jupyterGetVariablesExecutionError": "Failure during variable extraction:\r\n{0}", - "DataScience.loadingMessage": "loading ...", - "DataScience.fetchingDataViewer": "Fetching data ...", - "DataScience.noRowsInDataViewer": "No rows match current filter", - "DataScience.jupyterServer": "Jupyter Server", - "DataScience.noKernel": "No Kernel", - "DataScience.serverNotStarted": "Not Started", - "DataScience.localJupyterServer": "local", - "DataScience.pandasTooOldForViewingFormat": "Python package 'pandas' is version {0}. Version 0.20 or greater is required for viewing data.", - "DataScience.pandasRequiredForViewing": "Python package 'pandas' is required for viewing data.", - "DataScience.valuesColumn": "values", - "DataScience.liveShareInvalid": "One or more guests in the session do not have the Python [extension](https://marketplace.visualstudio.com/itemdetails?itemName=ms-python.python) installed.\r\nYour Live Share session cannot continue and will be closed.", - "diagnostics.updateSettings": "Yes, update settings", - "Common.noIWillDoItLater": "No, I will do it later", - "Common.notNow": "Not now", - "Common.gotIt": "Got it!", - "Interpreters.selectInterpreterTip": "Tip: you can change the Python interpreter used by the Python extension by clicking on the Python version in the status bar", - "DataScience.noRowsInVariableExplorer": "No variables defined", - "DataScience.tooManyColumnsMessage": "Variables with over a 1000 columns may take a long time to display. Are you sure you wish to continue?", - "DataScience.tooManyColumnsYes": "Yes", - "DataScience.tooManyColumnsNo": "No", - "DataScience.tooManyColumnsDontAskAgain": "Don't Ask Again", - "DataScience.filterRowsButton": "Filter Rows", - "DataScience.filterRowsTooltip": "Allows filtering multiple rows. Use =, >, or < signs to filter numeric values.", - "DataScience.previewHeader": "--- Begin preview of {0} ---", - "DataScience.previewFooter": "--- End preview of {0} ---", - "DataScience.previewStatusMessage": "Generating preview of {0}", - "DataScience.plotViewerTitle": "Plots", - "DataScience.exportPlotTitle": "Save plot image", - "DataScience.pdfFilter": "PDF", - "DataScience.pngFilter": "PNG", - "DataScience.svgFilter": "SVG", - "DataScience.previousPlot": "Previous", - "DataScience.nextPlot": "Next", - "DataScience.panPlot": "Pan", - "DataScience.zoomInPlot": "Zoom in", - "DataScience.zoomOutPlot": "Zoom out", - "DataScience.exportPlot": "Export to different formats", - "DataScience.deletePlot": "Remove", - "DataScience.collapseSingle": "Collapse", - "DataScience.expandSingle": "Expand", - "DataScience.editSection": "Input new cells here.", - "DataScience.restartKernelMessageDontAskAgain": "Yes, and Don't Ask Again", - "DataScience.selectedImageListLabel": "Selected Image", - "DataScience.imageListLabel": "Image", - "DataScience.exportImageFailed": "Error exporting image: {0}", - "downloading.file": "Downloading {0}...", - "downloading.file.progress": "{0}{1} of {2} KB ({3}%)", - "DataScience.jupyterDataRateExceeded": "Cannot view variable because data rate exceeded. Please restart your server with a higher data rate limit. For example, --NotebookApp.iopub_data_rate_limit=10000000000.0", - "DataScience.addCellBelowCommandTitle": "Add cell", - "DataScience.debugCellCommandTitle": "Debug cell", - "DataScience.debugStepOverCommandTitle": "Step over", - "DataScience.debugContinueCommandTitle": "Continue", - "DataScience.debugStopCommandTitle": "Stop", - "DataScience.runCurrentCellAndAddBelow": "Run current and add cell below", - "DataScience.variableExplorerDisabledDuringDebugging": "Please see the Debug Side Bar's VARIABLES section.", - "DataScience.jupyterDebuggerNotInstalledError": "Pip module {0} is required for debugging cells. You will need to install it to debug cells.", - "DataScience.jupyterDebuggerOutputParseError": "Unable to parse {0} output, please log an issue with https://github.com/microsoft/vscode-python", - "DataScience.jupyterDebuggerPortNotAvailableError": "Port {0} cannot be opened for debugging. Please specify a different port in the remoteDebuggerPort setting.", - "DataScience.jupyterDebuggerPortBlockedError": "Port {0} cannot be connected to for debugging. Please let port {0} through your firewall.", - "DataScience.jupyterDebuggerPortNotAvailableSearchError": "Ports in the range {0}-{1} cannot be found for debugging. Please specify a port in the remoteDebuggerPort setting.", - "DataScience.jupyterDebuggerPortBlockedSearchError": "A port cannot be connected to for debugging. Please let ports {0}-{1} through your firewall.", - "DataScience.jupyterDebuggerInstallNew": "Pip module {0} is required for debugging cells. Install {0} and continue to debug cell?", - "DataScience.jupyterDebuggerInstallUpdate": "The version of {0} installed does not support debugging cells. Update {0} to newest version and continue to debug cell?", - "DataScience.jupyterDebuggerInstallYes": "Yes", - "DataScience.jupyterDebuggerInstallNo": "No", - "DataScience.cellStopOnErrorFormatMessage": "{0} cells were canceled due to an error in the previous cell.", - "DataScience.instructionComments": "# To add a new cell, type '{0}'\n# To add a new markdown cell, type '{0} [markdown]'\n", - "DataScience.scrollToCellTitleFormatMessage": "Go to [{0}]", - "DataScience.remoteDebuggerNotSupported": "Debugging while attached to a remote server is not currently supported.", - "DataScience.save": "Save notebook", - "DataScience.invalidNotebookFileError": "{0} is not a valid notebook file. Check the file for correct json.", - "DataScience.nativeEditorTitle": "Notebook Editor", - "DataScience.untitledNotebookFileName": "Untitled", - "DataScience.dirtyNotebookMessage1": "Do you want to save the changes you made to {0}?", - "DataScience.dirtyNotebookMessage2": "Your changes will be lost if you don't save them.", - "DataScience.dirtyNotebookYes": "Save", - "DataScience.dirtyNotebookNo": "Don't Save", - "DataScience.dirtyNotebookCancel": "Cancel", - "DataScience.dirtyNotebookDialogTitle": "Save", - "DataScience.dirtyNotebookDialogFilter": "Jupyter Notebooks", - "DataScience.exportAsPythonFileTooltip": "Convert and save to a python script", - "DataScience.exportAsPythonFileTitle": "Save as Python File", - "DataScience.runCell": "Run cell", - "DataScience.deleteCell": "Delete cell", - "DataScience.moveCellUp": "Move cell up", - "DataScience.moveCellDown": "Move cell down", - "DataScience.moveSelectedCellUp": "Move selected cell up", - "DataScience.insertBelow": "Insert cell below", - "DataScience.insertAbove": "Insert cell above", - "DataScience.addCell": "Add cell", - "DataScience.runAll": "Run all cells", - "DataScience.convertingToPythonFile": "Converting ipynb to python file", - "DataScience.untitledNotebookMessage": "Your changes will be lost if you don't save them.", - "DataScience.untitledNotebookYes": "Save", - "DataScience.untitledNotebookNo": "Cancel", - "DataScience.noInterpreter": "No python selected", - "DataScience.notebookNotFound": "python -m jupyter notebook --version is not running", - "DataScience.findJupyterCommandProgress": "Active interpreter does not support {0}. Searching for the best available interpreter.", - "DataScience.findJupyterCommandProgressCheckInterpreter": "Checking {0}.", - "DataScience.findJupyterCommandProgressSearchCurrentPath": "Searching current path.", - "DataScience.gatheredScriptDescription": "# This file was generated by an experimental feature called 'Gather'.\n#\n# The intent is that it contains only the code required to produce\n# the same results as the cell originally selected for gathering.\n# Please note that the Python analysis is quite conservative, so if\n# it is unsure whether a line of code is necessary for execution, it\n# will err on the side of including it.\n#\n# Please let us know if you are satisfied with what was gathered here:\n# https://aka.ms/gathersurvey\n\n", - "DataScience.gatheredNotebookDescriptionInMarkdown": "## Gathered Notebook\nGathered from ```{0}```\n\n| | |\n|---|---|\n|   |This notebook was generated by an experimental feature called \"Gather\". The intent is that it contains only the code and cells required to produce the same results as the cell originally selected for gathering. Please note that the Python analysis is quite conservative, so if it is unsure whether a line of code is necessary for execution, it will err on the side of including it.|\n\n**Are you satisfied with the code that was gathered?**\n\n[Yes](https://command:python.datascience.gatherquality?yes) [No](https://command:python.datascience.gatherquality?no)", - "DataScience.savePngTitle": "Save Image", - "DataScience.jupyterSelectURIQuickPickTitle": "Pick how to connect to Jupyter", - "DataScience.jupyterSelectURIQuickPickPlaceholder": "Choose an option", - "DataScience.jupyterSelectURILocalLabel": "Default", - "DataScience.jupyterSelectURILocalDetail": "VS Code will automatically start a server for you on the localhost", - "DataScience.jupyterSelectURINewLabel": "Existing", - "DataScience.jupyterSelectURINewDetail": "Specify the URI of an existing server", - "DataScience.jupyterSelectURIMRUDetail": "Last Connection: {0}", - "DataScience.jupyterSelectURIRunningDetailFormat": "Last activity {0}. {1} existing connections.", - "DataScience.jupyterSelectURINotRunningDetail": "Cannot connect at this time. Status unknown.", - "DataScience.fallbackToUseActiveInterpeterAsKernel": "Couldn't find kernel '{0}' that the notebook was created with. Using the current interpreter.", - "DataScience.fallBackToRegisterAndUseActiveInterpeterAsKernel": "Couldn't find kernel '{0}' that the notebook was created with. Registering a new kernel using the current interpreter.", - "DataScience.fallBackToPromptToUseActiveInterpreterOrSelectAKernel": "Couldn't find kernel '{0}' that the notebook was created with.", - "DataScience.selectKernel": "Select a Kernel", - "DataScience.selectDifferentKernel": "Select a different Kernel", - "DataScience.selectDifferentJupyterInterpreter": "Select a different Interpreter", - "DataScience.selectJupyterInterpreter": "Select an Interpreter to start Jupyter", - "products.installingModule": "Installing {0}", - "DataScience.switchingKernelProgress": "Switching kernel to '{0}'", - "DataScience.sessionStartFailedWithKernel": "Failed to start a session for the Kernel '{0}'. \nView Jupyter [log](command:{1}) for further details.", - "DataScience.waitingForJupyterSessionToBeIdle": "Waiting for Jupyter Session to be idle", - "DataScience.gettingListOfKernelsForLocalConnection": "Fetching Kernels", - "DataScience.gettingListOfKernelsForRemoteConnection": "Fetching Kernels", - "DataScience.gettingListOfKernelSpecs": "Fetching Kernel specs", - "DataScience.startingJupyterNotebook": "Starting Jupyter Notebook", - "DataScience.registeringKernel": "Registering Kernel", - "DataScience.trimmedOutput": "Output was trimmed for performance reasons.\nTo see the full output set the setting \"python.dataScience.textOutputLimit\" to 0.", - "DataScience.connectingToJupyterUri": "Connecting to Jupyter server at {0}", - "DataScience.createdNewNotebook": "{0}: Creating new notebook ", - "DataScience.createdNewKernel": "{0}: Kernel started: {1}", - "DataScience.kernelInvalid": "Kernel {0} is not usable. Check the Jupyter output tab for more information.", - "OutdatedDebugger.updateDebuggerMessage": "We noticed you are attaching to ptvsd (Python debugger), which will be deprecated on May 1st, 2020. Please switch to [debugpy](https://aka.ms/migrateToDebugpy).", - "DataScience.nativeDependencyFail": "We cannot launch a jupyter server because your OS is not supported. Select an already running server if you wish to continue. {0}", - "DataScience.selectNewServer": "Pick Running Server", - "DataScience.jupyterSelectURIRemoteLabel": "Existing", - "DataScience.jupyterSelectURIQuickPickTitleRemoteOnly": "Pick an already running jupyter server", - "DataScience.jupyterSelectURIRemoteDetail": "Specify the URI of an existing server", - "DataScience.gatherQuality": "Did gather work as desired?", - "DataScience.loadClassFailedWithNoInternet": "Error loading {0}:{1}. Internet connection required for loading 3rd party widgets.", - "DataScience.useCDNForWidgets": "Widgets require us to download supporting files from a 3rd party website. Click [here](https://aka.ms/PVSCIPyWidgets) for more information.", - "DataScience.loadThirdPartyWidgetScriptsPostEnabled": "Please restart the Kernel when changing the setting 'python.dataScience.widgetScriptSources'.", - "DataScience.enableCDNForWidgetsSetting": "Widgets require us to download supporting files from a 3rd party website. Click here to enable this or click here for more information. (Error loading {0}:{1}).", - "DataScience.widgetScriptNotFoundOnCDNWidgetMightNotWork": "Unable to load a compatible version of the widget '{0}'. Expected behavior may be affected.", - "DataScience.unhandledMessage": "Unhandled kernel message from a widget: {0} : {1}", - "DataScience.qgridWidgetScriptVersionCompatibilityWarning": "Unable to load a compatible version of the widget 'qgrid'. Consider downgrading to version 1.1.1." + "python.command.python.reportIssue.title": "Report Issue...", + "python.command.python.clearCacheAndReload.title": "Clear Cache and Reload Window", + "python.command.python.analysis.restartLanguageServer.title": "Restart Language Server", + "python.command.python.launchTensorBoard.title": "Launch TensorBoard", + "python.command.python.refreshTensorBoard.title": "Refresh TensorBoard", + "python.command.python.testing.copyTestId.title": "Copy Test Id", + "python.createEnvironment.contentButton.description": "Show or hide Create Environment button in the editor for `requirements.txt` or other dependency files.", + "python.createEnvironment.trigger.description": "Detect if environment creation is required for the current project", + "python.menu.createNewFile.title": "Python File", + "python.editor.context.submenu.runPython": "Run Python", + "python.editor.context.submenu.runPythonInteractive": "Run in Interactive window", + "python.activeStateToolPath.description": "Path to the State Tool executable for ActiveState runtimes (version 0.36+).", + "python.autoComplete.extraPaths.description": "List of paths to libraries and the like that need to be imported by auto complete engine. E.g. when using Google App SDK, the paths are not in system path, hence need to be added into this list.", + "python.condaPath.description": "Path to the conda executable to use for activation (version 4.4+).", + "python.debugger.deprecatedMessage": "This configuration will be deprecated soon. Please replace `python` with `debugpy` to use the new Python Debugger extension.", + "python.defaultInterpreterPath.description": "Path to default Python to use when extension loads up for the first time, no longer used once an interpreter is selected for the workspace. See [here](https://aka.ms/AAfekmf) to understand when this is used", + "python.envFile.description": "Absolute path to a file containing environment variable definitions.", + "python.useEnvironmentsExtension.description": "Enables the Python Environments extension. Requires window reload on change.", + "python.experiments.enabled.description": "Enables A/B tests experiments in the Python extension. If enabled, you may get included in proposed enhancements and/or features.", + "python.experiments.optInto.description": "List of experiments to opt into. If empty, user is assigned the default experiment groups. See [here](https://github.com/microsoft/vscode-python/wiki/AB-Experiments) for more details.", + "python.experiments.optOutFrom.description": "List of experiments to opt out of. If empty, user is assigned the default experiment groups. See [here](https://github.com/microsoft/vscode-python/wiki/AB-Experiments) for more details.", + "python.experiments.All.description": "Combined list of all experiments.", + "python.experiments.pythonSurveyNotification.description": "Denotes the Python Survey Notification experiment.", + "python.experiments.pythonPromptNewToolsExt.description": "Denotes the Python Prompt New Tools Extension experiment.", + "python.experiments.pythonTerminalEnvVarActivation.description": "Enables use of environment variables to activate terminals instead of sending activation commands.", + "python.experiments.pythonDiscoveryUsingWorkers.description": "Enables use of worker threads to do heavy computation when discovering interpreters.", + "python.experiments.pythonTestAdapter.description": "Denotes the Python Test Adapter experiment.", + "python.experiments.pythonRecommendTensorboardExt.description": "Denotes the Tensorboard Extension recommendation experiment.", + "python.globalModuleInstallation.description": "Whether to install Python modules globally when not using an environment.", + "python.languageServer.description": "Defines type of the language server.", + "python.languageServer.defaultDescription": "Automatically select a language server: Pylance if installed and available, otherwise fallback to Jedi.", + "python.languageServer.jediDescription": "Use Jedi behind the Language Server Protocol (LSP) as a language server.", + "python.languageServer.pylanceDescription": "Use Pylance as a language server.", + "python.languageServer.noneDescription": "Disable language server capabilities.", + "python.interpreter.infoVisibility.description": "Controls when to display information of selected interpreter in the status bar.", + "python.interpreter.infoVisibility.never.description": "Never display information.", + "python.interpreter.infoVisibility.onPythonRelated.description": "Only display information if Python-related files are opened.", + "python.interpreter.infoVisibility.always.description": "Always display information.", + "python.logging.level.description": "The logging level the extension logs at, defaults to 'error'", + "python.logging.level.deprecation": "This setting is deprecated. Please use command `Developer: Set Log Level...` to set logging level.", + "python.missingPackage.severity.description": "Set severity of missing packages in requirements.txt or pyproject.toml", + "python.locator.description": "[Experimental] Select implementation of environment locators. This is an experimental setting while we test native environment location.", + "python.pipenvPath.description": "Path to the pipenv executable to use for activation.", + "python.poetryPath.description": "Path to the poetry executable.", + "python.pixiToolPath.description": "Path to the pixi executable.", + "python.EnableREPLSmartSend.description": "Toggle Smart Send for the Python REPL. Smart Send enables sending the smallest runnable block of code to the REPL on Shift+Enter and moves the cursor accordingly.", + "python.REPL.sendToNativeREPL.description": "Toggle to send code to Python REPL instead of the terminal on execution. Turning this on will change the behavior for both Smart Send and Run Selection/Line in the Context Menu.", + "python.REPL.provideVariables.description": "Toggle to provide variables for the REPL variable view for the native REPL.", + "python.tensorBoard.logDirectory.description": "Set this setting to your preferred TensorBoard log directory to skip log directory prompt when starting TensorBoard.", + "python.tensorBoard.logDirectory.markdownDeprecationMessage": "Tensorboard support has been moved to the extension [Tensorboard extension](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.tensorboard). Instead use the setting `tensorBoard.logDirectory`.", + "python.tensorBoard.logDirectory.deprecationMessage": "Tensorboard support has been moved to the extension Tensorboard extension. Instead use the setting `tensorBoard.logDirectory`.", + "python.terminal.shellIntegration.enabled.description": "Enable [shell integration](https://code.visualstudio.com/docs/terminal/shell-integration) for the terminals running python. Shell integration enhances the terminal experience by enabling command decorations, run recent command, improving accessibility among other things. Note: PyREPL (available in Python 3.13+) is automatically disabled when shell integration is enabled to avoid cursor indentation issues.", + "python.terminal.activateEnvInCurrentTerminal.description": "Activate Python Environment in the current Terminal on load of the Extension.", + "python.terminal.activateEnvironment.description": "Activate Python Environment in all Terminals created.", + "python.terminal.executeInFileDir.description": "When executing a file in the terminal, whether to use execute in the file's directory, instead of the current open folder.", + "python.terminal.focusAfterLaunch.description": "When launching a python terminal, whether to focus the cursor on the terminal.", + "python.terminal.launchArgs.description": "Python launch arguments to use when executing a file in the terminal.", + "python.testing.autoTestDiscoverOnSaveEnabled.description": "Enable auto run test discovery when saving a test file.", + "python.testing.autoTestDiscoverOnSavePattern.description": "Glob pattern used to determine which files are used by autoTestDiscoverOnSaveEnabled.", + "python.testing.cwd.description": "Optional working directory for tests.", + "python.testing.debugPort.description": "Port number used for debugging of tests.", + "python.testing.promptToConfigure.description": "Prompt to configure a test framework if potential tests directories are discovered.", + "python.testing.pytestArgs.description": "Arguments passed in. Each argument is a separate item in the array.", + "python.testing.pytestEnabled.description": "Enable testing using pytest.", + "python.testing.pytestPath.description": "Path to pytest. You can use a custom version of pytest by modifying this setting to include the full path.", + "python.testing.unittestArgs.description": "Arguments passed in. Each argument is a separate item in the array.", + "python.testing.unittestEnabled.description": "Enable testing using unittest.", + "python.venvFolders.description": "Folders in your home directory to look into for virtual environments (supports pyenv, direnv and virtualenvwrapper by default).", + "python.venvPath.description": "Path to folder with a list of Virtual Environments (e.g. ~/.pyenv, ~/Envs, ~/.virtualenvs).", + "walkthrough.pythonWelcome.title": "Get Started with Python Development", + "walkthrough.pythonWelcome.description": "Your first steps to set up a Python project with all the powerful tools and features that the Python extension has to offer!", + "walkthrough.step.python.createPythonFile.title": "Create a Python file", + "walkthrough.step.python.createPythonFolder.title": "Open a Python project folder", + "walkthrough.step.python.createPythonFile.description": { + "message": "[Open](command:toSide:workbench.action.files.openFile) or [create](command:toSide:workbench.action.files.newUntitledFile?%7B%22languageId%22%3A%22python%22%7D) a Python file - make sure to save it as \".py\".\n[Create Python File](command:toSide:workbench.action.files.newUntitledFile?%7B%22languageId%22%3A%22python%22%7D)", + "comment": [ + "{Locked='](command:toSide:workbench.action.files.newUntitledFile?%7B%22languageId%22%3A%22python%22%7D'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, + "walkthrough.step.python.createPythonFolder.description": { + "message": "[Open](command:workbench.action.files.openFolder) or create a project folder.\n[Open Project Folder](command:workbench.action.files.openFolder)", + "comment": [ + "{Locked='](command:workbench.action.files.openFolder'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, + "walkthrough.step.python.installPythonWin8.title": "Install Python", + "walkthrough.step.python.installPythonWin8.description": "The Python Extension requires Python to be installed. Install Python [from python.org](https://www.python.org/downloads).\n\n[Install Python](https://www.python.org/downloads)\n", + "walkthrough.step.python.installPythonMac.title": "Install Python", + "walkthrough.step.python.installPythonMac.description": { + "message": "The Python Extension requires Python to be installed. Install Python 3 through the terminal.\n[Install Python via Brew](command:python.installPythonOnMac)\n", + "comment": [ + "{Locked='](command:python.installPythonOnMac'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, + "walkthrough.step.python.installPythonLinux.title": "Install Python", + "walkthrough.step.python.installPythonLinux.description": { + "message": "The Python Extension requires Python to be installed. Install Python 3 through the terminal.\n[Install Python via terminal](command:python.installPythonOnLinux)\n", + "comment": [ + "{Locked='](command:python.installPythonOnLinux'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, + "walkthrough.step.python.selectInterpreter.title": "Select a Python Interpreter", + "walkthrough.step.python.createEnvironment.title": "Select or create a Python environment", + "walkthrough.step.python.createEnvironment.description": { + "message": "Create an environment for your Python project or use [Select Python Interpreter](command:python.setInterpreter) to select an existing one.\n[Create Environment](command:python.createEnvironment)\n**Tip**: Run the ``Python: Create Environment`` command in the [Command Palette](command:workbench.action.showCommands).", + "comment": [ + "{Locked='](command:python.createEnvironment'}", + "{Locked='](command:workbench.action.showCommands'}", + "{Locked='](command:python.setInterpreter'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, + "walkthrough.step.python.runAndDebug.title": "Run and debug your Python file", + "walkthrough.step.python.runAndDebug.description": "Open your Python file and click on the play button on the top right of the editor, or press F5 when on the file and select \"Python File\" to run with the debugger. \n \n[Learn more](https://code.visualstudio.com/docs/python/python-tutorial#_run-hello-world)", + "walkthrough.step.python.learnMoreWithDS.title": "Keep exploring!", + "walkthrough.step.python.learnMoreWithDS.description": { + "message": "🎨 Explore all the features the Python extension has to offer by looking for \"Python\" in the [Command Palette](command:workbench.action.showCommands). \n 📈 Learn more about getting started with [data science](command:workbench.action.openWalkthrough?%7B%22category%22%3A%22ms-python.python%23pythonDataScienceWelcome%22%2C%22step%22%3A%22ms-python.python%23python.createNewNotebook%22%7D) in Python. \n ✨ Take a look at our [Release Notes](https://aka.ms/AA8dxtb) to learn more about the latest features. \n \n[Follow along with the Python Tutorial](https://aka.ms/AA8dqti)", + "comment": [ + "{Locked='](command:workbench.action.showCommands'}", + "{Locked='](command:workbench.action.openWalkthrough?%7B%22category%22%3A%22ms-python.python%23pythonDataScienceWelcome%22%2C%22step%22%3A%22ms-python.python%23python.createNewNotebook%22%7D'}", + "Do not translate the 'command:*' part inside of the '(..)'. It is an internal command syntax for VS Code", + "Please make sure there is no space between the right bracket and left parenthesis: ]( this is an internal syntax for links" + ] + }, + "walkthrough.pythonDataScienceWelcome.title": "Get Started with Python for Data Science", + "walkthrough.pythonDataScienceWelcome.description": "Your first steps to getting started with a Data Science project with Python!", + "walkthrough.step.python.installJupyterExt.title": "Install Jupyter extension", + "walkthrough.step.python.installJupyterExt.description": "If you haven't already, install the [Jupyter extension](command:workbench.extensions.search?\"ms-toolsai.jupyter\") to take full advantage of notebooks experiences in VS Code!\n \n[Search Jupyter extension](command:workbench.extensions.search?\"ms-toolsai.jupyter\")", + "walkthrough.step.python.createNewNotebook.title": "Create or open a Jupyter Notebook", + "walkthrough.step.python.createNewNotebook.description": "Right click in the file explorer and create a new file with an .ipynb extension. Or, open the [Command Palette](command:workbench.action.showCommands) and run the command \n``Jupyter: Create New Blank Notebook``.\n[Create new Jupyter Notebook](command:toSide:jupyter.createnewnotebook)\n If you have an existing project, you can also [open a folder](command:workbench.action.files.openFolder) and/or clone a project from GitHub: [clone a Git repository](command:git.clone).", + "walkthrough.step.python.openInteractiveWindow.title": "Open the Python Interactive Window", + "walkthrough.step.python.openInteractiveWindow.description": "The Python Interactive Window is a Python shell where you can execute and view the results of your Python code. You can create cells on a Python file by typing ``#%%``.\n \nTo open the interactive window anytime, open the [Command Palette](command:workbench.action.showCommands) and run the command \n``Jupyter: Create Interactive Window``.\n[Open Interactive Window](command:jupyter.createnewinteractive)", + "walkthrough.step.python.dataScienceLearnMore.title": "Find out more!", + "walkthrough.step.python.dataScienceLearnMore.description": "📒 Take a look into the [Jupyter extension](command:workbench.extensions.search?\"ms-toolsai.jupyter\") features, by looking for \"Jupyter\" in the [Command Palette](command:workbench.action.showCommands). \n 🏃🏻 Find out more features in our [Tutorials](https://aka.ms/AAdjzpd). \n[Learn more](https://aka.ms/AAdar6q)", + "walkthrough.step.python.createPythonFile.altText": "Open a Python file or a folder with a Python project.", + "walkthrough.step.python.selectInterpreter.altText": "Selecting a Python interpreter from the status bar", + "walkthrough.step.python.createEnvironment.altText": "Creating a Python environment from the Command Palette", + "walkthrough.step.python.runAndDebug.altText": "How to run and debug in VS Code with F5 or the play button on the top right.", + "walkthrough.step.python.learnMoreWithDS.altText": "Image representing our documentation page and mailing list resources.", + "walkthrough.step.python.installJupyterExt.altText": "Creating a new Jupyter notebook", + "walkthrough.step.python.createNewNotebook.altText": "Creating a new Jupyter notebook", + "walkthrough.step.python.openInteractiveWindow.altText": "Opening Python interactive window", + "walkthrough.step.python.dataScienceLearnMore.altText": "Image representing our documentation page and mailing list resources." } diff --git a/package.nls.ko-kr.json b/package.nls.ko-kr.json deleted file mode 100644 index 5309a9b07b81..000000000000 --- a/package.nls.ko-kr.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "python.command.python.sortImports.title": "Import문 정렬", - "python.command.python.startREPL.title": "REPL 시작", - "python.command.python.buildWorkspaceSymbols.title": "작업 영역 기호 빌드", - "python.command.python.runtests.title": "모든 단위 테스트 실행", - "python.command.python.debugtests.title": "모든 단위 테스트 디버그", - "python.command.python.execInTerminal.title": "터미널에서 Python 파일 실행", - "python.command.python.setInterpreter.title": "인터프리터 선택", - "python.command.python.refactorExtractVariable.title": "변수 추출", - "python.command.python.refactorExtractMethod.title": "메서드 추출", - "python.command.python.viewTestOutput.title": "단위 테스트 결과 보기", - "python.command.python.selectAndRunTestMethod.title": "단위 테스트 메서드 실행 ...", - "python.command.python.selectAndDebugTestMethod.title": "단위 테스트 메서드 디버그 ...", - "python.command.python.selectAndRunTestFile.title": "단위 테스트 파일 실행 ...", - "python.command.python.runCurrentTestFile.title": "현재 단위 테스트 파일 실행", - "python.command.python.runFailedTests.title": "실패한 단위 테스트 실행", - "python.command.python.execSelectionInTerminal.title": "Python 터미널에서 선택 영역/줄 실행", - "python.command.python.execSelectionInDjangoShell.title": "Django 셸에서 선택 영역/줄 실행", - "python.command.python.goToPythonObject.title": " Python 객체로 이동", - "python.snippet.launch.standard.label": "Python: Current File", - "python.snippet.launch.module.label": "Python: 모듈", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid 응용 프로그램", - "python.snippet.launch.attach.label": "Python: 연결" -} diff --git a/package.nls.nl.json b/package.nls.nl.json deleted file mode 100644 index 9233bf2bbf58..000000000000 --- a/package.nls.nl.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "python.command.python.sortImports.title": "Import sorteren", - "python.command.python.startREPL.title": "REPL starten", - "python.command.python.createTerminal.title": "Terminal aanmaken", - "python.command.python.buildWorkspaceSymbols.title": "Werkruimte-symbolen aanmaken", - "python.command.python.runtests.title": "Alle unittests uitvoeren", - "python.command.python.debugtests.title": "Alle unittests debuggen", - "python.command.python.execInTerminal.title": "Python-bestand in terminal uitvoeren", - "python.command.python.setInterpreter.title": "Interpreter selecteren", - "python.command.python.refactorExtractVariable.title": "Variabelen selecteren", - "python.command.python.refactorExtractMethod.title": "Methode selecteren", - "python.command.python.viewTestOutput.title": "Unittest-resultaat laten zien", - "python.command.python.selectAndRunTestMethod.title": "Unittest-methode uitvoeren ...", - "python.command.python.selectAndDebugTestMethod.title": "Unittest-methode debuggen ...", - "python.command.python.selectAndRunTestFile.title": "Unittest-bestand uitvoeren ...", - "python.command.python.runCurrentTestFile.title": "Huidige unittest-bestand uitvoeren", - "python.command.python.runFailedTests.title": "Gefaalde unittests uitvoeren", - "python.command.python.discoverTests.title": "Unittests doorzoeken", - "python.command.python.execSelectionInTerminal.title": "Selectie/rij in Python-terminal uitvoeren", - "python.command.python.execSelectionInDjangoShell.title": "Selectie/rij in Django-shell uitvoeren", - "python.command.python.goToPythonObject.title": "Naar Python-object gaan", - "python.command.python.setLinter.title": "Linter selecteren", - "python.command.python.enableLinting.title": "Linting activeren", - "python.command.python.runLinting.title": "Linting uitvoeren", - "python.command.python.datascience.runallcells.title": "Alle cellen uitvoeren", - "python.command.python.datascience.runcurrentcell.title": "Huidige cel uitvoeren", - "python.command.python.datascience.runcurrentcelladvance.title": "Huidige cel uitvoeren en doorgaan", - "python.command.python.datascience.runcell.title": "Cel uitvoeren", - "python.command.python.datascience.showhistorypane.title": "Interactief Python-venster laten zien", - "python.command.python.datascience.selectjupyteruri.title": "Jupyter-server-URI specificeren", - "python.command.python.datascience.importnotebook.title": "Jupyter-notebook importeren", - "python.command.python.datascience.importnotebookonfile.title": "Jupyter-notebook importeren", - "python.command.python.enableSourceMapSupport.title": "Bronkaartondersteuning voor extensie-debugging inschakelen", - "python.command.python.datascience.exportoutputasnotebook.title": "Interactief Python-venster als Jupyter-notebook exporteren", - "python.command.python.datascience.exportfileasnotebook.title": "Huidige Python-bestand als Jupyter-notebook exporteren", - "python.command.python.datascience.exportfileandoutputasnotebook.title": "Huidige Python-bestand exporteren en outputten als Jupyter-notebook", - "python.command.python.datascience.undocells.title": "Laatste interactieve Python-actie ongedaan maken", - "python.command.python.datascience.redocells.title": "Laatste interactieve Python-actie opnieuw uitvoeren", - "python.command.python.datascience.removeallcells.title": "Alle interactieve Python-cellen verwijderen", - "python.command.python.datascience.interruptkernel.title": "IPython-kernel onderbreken", - "python.command.python.datascience.restartkernel.title": "IPython-kernel herstarten", - "python.command.python.datascience.expandallcells.title": "Alle interactieve Python-vensters openen", - "python.command.python.datascience.collapseallcells.title": "Alle interactieve Python-vensters sluiten", - "python.snippet.launch.standard.label": "Python: Huidige bestand", - "python.snippet.launch.module.label": "Python: Module", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid-applicatie", - "python.snippet.launch.attach.label": "Python: aankoppelen", - "LanguageService.bannerMessage": "Zou je alsjeblieft 2 minuten kunnen nemen om ons te vertellen hoe de Python-language server voor jou werkt?", - "LanguageService.bannerLabelYes": "Ja, neem nu deel aan het onderzoek", - "LanguageService.bannerLabelNo": "Nee, bedankt", - "LanguageService.lsFailedToStart": "We zijn een probleem tegengekomen bij het starten van de language server. Aan het terugschakelen naar het alternatief, Jedi. Bekijk het weergavepaneel voor details.", - "LanguageService.lsFailedToDownload": "We zijn een probleem tegengekomen bij het downloaden van de language server. Aan het terugschakelen naar het alternatief, Jedi. Bekijk het weergavepaneel voor details.", - "LanguageService.lsFailedToExtract": "We zijn een probleem tegengekomen bij het uitpakken van de language server. Aan het terugschakelen naar het alternatief, Jedi. Bekijk het weergavepaneel voor details.", - "DataScience.unknownMimeTypeFormat": "Mime type {0} wordt momenteel niet ondersteund.", - "DataScience.historyTitle": "Interactieve Python", - "DataScience.badWebPanelFormatString": "

{0} is geen geldige bestandsnaam

", - "DataScience.sessionDisposed": "Kan code niet uitvoeren, de sessie is gesloten.", - "DataScience.exportDialogTitle": "Exporteren naar Jupyter-notebook", - "DataScience.exportDialogFilter": "Jupyter-notebooks", - "DataScience.exportDialogComplete": "Notebook geschreven naar {0}", - "DataScience.exportDialogFailed": "Niet gelukt om te exporteren naar Jupyter-notebook. {0}", - "DataScience.exportOpenQuestion": "In browser openen", - "DataScience.collapseInputTooltip": "Invoerblok sluiten", - "DataScience.importDialogTitle": "Jupyter-notebook importeren", - "DataScience.importDialogFilter": "Jupyter-notebooks", - "DataScience.notebookCheckForImportYes": "Importeer", - "DataScience.notebookCheckForImportNo": "Later", - "DataScience.notebookCheckForImportDontAskAgain": "Niet opnieuw vragen", - "DataScience.notebookCheckForImportTitle": "Wil je het Jupyter-notebook importeren als Python-code?", - "DataScience.jupyterNbConvertNotSupported": "Notebooks importeren vereist Jupyter-nbconvert geinstalleerd.", - "DataScience.jupyterLaunchTimedOut": "Het is niet gelukt de Jupyter-notebook-server op tijd te starten", - "DataScience.jupyterLaunchNoURL": "Het is niet gelukt de URL van de gestarte Jupyter-notebook-server te vinden", - "DataScience.pythonInteractiveHelpLink": "Krijg meer hulp", - "DataScience.importingFormat": "Aan het importeren {0}", - "DataScience.startingJupyter": "Jupyter-server starten", - "DataScience.connectingToJupyter": "Met Jupyter-server verbinden", - "Interpreters.RefreshingInterpreters": "Python-Interpreters verversen", - "Interpreters.LoadingInterpreters": "Python-Interpreters laden", - "DataScience.restartKernelMessage": "Wil je de IPython-kernel herstarten? Alle variabelen zullen verloren gaan.", - "DataScience.restartKernelMessageYes": "Herstarten", - "DataScience.restartKernelMessageNo": "Annuleren", - "DataScienceSurveyBanner.bannerMessage": "Zou je alsjeblieft 2 minuten kunnen nemen om ons te vertellen hoe de Python-data-science-functionaliteiten voor jou werkt?", - "DataScienceSurveyBanner.bannerLabelYes": "Ja, neem nu deel aan het onderzoek", - "DataScienceSurveyBanner.bannerLabelNo": "Nee, bedankt", - "DataScience.restartingKernelStatus": "IPython-Kernel herstarten", - "DataScience.executingCode": "Cel aan het uitvoeren", - "DataScience.collapseAll": "Alle cel-invoeren sluiten", - "DataScience.expandAll": "Alle cel-invoeren openen", - "DataScience.export": "Als Jupyter-Notebook exporteren", - "DataScience.restartServer": "IPython-kernel herstarten", - "DataScience.undo": "Herhaal", - "DataScience.redo": "Opnieuw uitvoeren", - "DataScience.clearAll": "Alle cellen verwijderen", - "DataScience.pythonVersionHeader": "Python versie:", - "DataScience.pythonRestartHeader": "Kernel herstart:", - "Linter.InstalledButNotEnabled": "Linter {0} is geinstalleerd maar niet ingeschakeld.", - "Linter.replaceWithSelectedLinter": "Meerdere linters zijn ingeschakeld in de instellingen. Vervangen met '{0}'?", - "DataScience.jupyterNotebookFailure": "Jupyter-notebook kon niet starten. \r\n{0}", - "DataScience.jupyterNotebookConnectFailed": "Verbinden met Jupiter-notebook is niet gelukt. \r\n{0}\r\n{1}", - "DataScience.notebookVersionFormat": "Jupyter-notebook versie: {0}", - "DataScience.jupyterKernelSpecNotFound": "Kan geen Jupyter-kernel-spec aanmaken en er zijn er geen beschikbaar voor gebruik", - "diagnostics.warnSourceMaps": "Bronkaartondersteuning is ingeschakeld in de Python-extensie, dit zal een ongunstige impact hebben op de uitvoering van de extensie.", - "diagnostics.disableSourceMaps": "Bronkaartondersteuning uitschakelen", - "diagnostics.warnBeforeEnablingSourceMaps": "Bronkaartondersteuning inschakelen in de Python-extensie zal een ongunstige impact hebben op de uitvoering van de extensie.", - "diagnostics.enableSourceMapsAndReloadVSC": "Venster inschakelen en herladen", - "diagnostics.lsNotSupported": "Uw besturingssysteem voldoet niet aan de minimumeisen van de language server. Aan het terugschakelen naar het alternatief, Jedi.", - "DataScience.interruptKernel": "IPython-kernel onderbreken", - "DataScience.exportingFormat": "Aan het exporteren {0}", - "DataScience.exportCancel": "Annuleren", - "Common.canceled": "Geannuleerd", - "DataScience.importChangeDirectoryComment": "{0} De werkmap van de werkruimte root naar de ipynb-bestandslocatie veranderen. Schakel deze toevoeging uit met de instelling DataScience.changeDirOnImportExport", - "DataScience.exportChangeDirectoryComment": "# De map wijzigen naar de VSCode-werktuimte root zodat de relatieve pad-ladingen correct werken. Schakel deze toevoeging uit met de instelling DataScience.changeDirOnImportExport", - "DataScience.interruptKernelStatus": "IPython-kernel onderbreken", - "DataScience.restartKernelAfterInterruptMessage": "Het onderbreken van de kernel duurde te lang. Wil je de kernel in plaats daarvan herstarten? Alle variabelen zullen verloren gaan.", - "DataScience.pythonInterruptFailedHeader": "Toetsenbord-interrupt liet de kernel crashen. Kernel herstart.", - "DataScience.sysInfoURILabel": "Jupyter-server URI: ", - "Common.loadingPythonExtension": "Python-extensie aan het laden...", - "debug.selectConfigurationTitle": "Een debug-configuratie selecteren", - "debug.selectConfigurationPlaceholder": "Debug-configuratie", - "debug.debugFileConfigurationLabel": "Python-bestand", - "debug.debugFileConfigurationDescription": "Python-bestand debuggen", - "debug.debugModuleConfigurationLabel": "Module", - "debug.debugModuleConfigurationDescription": "Python module/package debuggen", - "debug.remoteAttachConfigurationLabel": "Extern aankoppelen", - "debug.remoteAttachConfigurationDescription": "Een externe Python-applicatie debuggen", - "debug.debugDjangoConfigurationLabel": "Django", - "debug.debugDjangoConfigurationDescription": "Web-applicatie", - "debug.debugFlaskConfigurationLabel": "Flask", - "debug.debugFlaskConfigurationDescription": "Web-applicatie", - "debug.debugPyramidConfigurationLabel": "Pyramid", - "debug.debugPyramidConfigurationDescription": "Web-applicatie", - "debug.djangoEnterManagePyPathTitle": "Django debuggen", - "debug.djangoEnterManagePyPathPrompt": "Voer een pad in naar manage.py ('${workspaceFolderToken}' verwijzen naar de root van de huidige werkruimtemap)", - "debug.djangoEnterManagePyPathInvalidFilePathError": "Voer een geldig Python-bestandspad in", - "debug.flaskEnterAppPathOrNamePathTitle": "Flask debuggen", - "debug.flaskEnterAppPathOrNamePathPrompt": "Voer een pad in naar een applicatie, bijvoorbeeld 'app.py' of 'app'", - "debug.flaskEnterAppPathOrNamePathInvalidNameError": "Voer een geldige naam in", - "debug.moduleEnterModuleTitle": "Module debuggen", - "debug.moduleEnterModulePrompt": "Voer Python module/package naam in", - "debug.moduleEnterModuleInvalidNameError": "Voer een geldige naam in", - "debug.pyramidEnterDevelopmentIniPathTitle": "Pyramid debuggen", - "debug.pyramidEnterDevelopmentIniPathPrompt": "`Voer een pad in naar development.ini ('${workspaceFolderToken}' verwijzen naar de root van de huidige werkruimtemap)`", - "debug.pyramidEnterDevelopmentIniPathInvalidFilePathError": "Voer een geldig bestandspad in", - "debug.attachRemotePortTitle": "Extern debuggen", - "debug.attachRemotePortPrompt": "Voer een port-nummer in", - "debug.attachRemotePortValidationError": "Voer een geldig port-nummer in", - "debug.attachRemoteHostTitle": "Extern debuggen", - "debug.attachRemoteHostPrompt": "Voer een hostname of IP-adres in", - "debug.attachRemoteHostValidationError": "Voer een geldige hostname of IP-adres in", - "Testing.testErrorDiagnosticMessage": "Error", - "Testing.testFailDiagnosticMessage": "Mislukt", - "Testing.testSkippedDiagnosticMessage": "Overgeslagen" -} diff --git a/package.nls.pl.json b/package.nls.pl.json deleted file mode 100644 index 029eaa59da8a..000000000000 --- a/package.nls.pl.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "python.command.python.sortImports.title": "Sortuj importy", - "python.command.python.startREPL.title": "Uruchom REPL", - "python.command.python.createTerminal.title": "Otwórz Terminal", - "python.command.python.buildWorkspaceSymbols.title": "Zbuduj symbole dla przestrzeni roboczej", - "python.command.python.runtests.title": "Uruchom wszystkie testy jednostkowe", - "python.command.python.debugtests.title": "Debuguj wszystkie testy jednostkowe", - "python.command.python.execInTerminal.title": "Uruchom plik pythonowy w terminalu", - "python.command.python.setInterpreter.title": "Wybierz wersję interpretera", - "python.command.python.refactorExtractVariable.title": "Wyodrębnij zmienną", - "python.command.python.refactorExtractMethod.title": "Wyodrębnij metodę", - "python.command.python.viewOutput.title": "Pokaż wyniki", - "python.command.python.viewTestOutput.title": "Pokaż wyniki testów jednostkowych", - "python.command.python.selectAndRunTestMethod.title": "Uruchom metodę testów jednostkowych ...", - "python.command.python.selectAndDebugTestMethod.title": "Debuguj metodę testów jednostkowych ...", - "python.command.python.selectAndRunTestFile.title": "Uruchom plik z testami jednostkowymi ...", - "python.command.python.runCurrentTestFile.title": "Uruchom bieżący plik z testami jednostkowymi", - "python.command.python.runFailedTests.title": "Uruchom testy jednostkowe, które się nie powiodły", - "python.command.python.discoverTests.title": "Wyszukaj testy jednostkowe", - "python.command.python.configureTests.title": "Konfiguruj testy jednostkowe", - "python.command.python.execSelectionInTerminal.title": "Uruchom zaznaczony obszar w interpreterze Pythona", - "python.command.python.execSelectionInDjangoShell.title": "Uruchom zaznaczony obszar w powłoce Django", - "python.command.python.goToPythonObject.title": "Idź do obiektu pythonowego", - "python.command.python.setLinter.title": "Wybierz linter", - "python.command.python.enableLinting.title": "Włącz linting", - "python.command.python.runLinting.title": "Uruchom linting", - "python.command.python.datascience.runallcells.title": "Uruchom wszystkie komórki", - "python.command.python.datascience.runcurrentcell.title": "Uruchom bieżącą komórkę", - "python.command.python.datascience.runcurrentcelladvance.title": "Uruchom bieżące komórki i pokaż", - "python.command.python.datascience.execSelectionInteractive.title": "Uruchom zaznaczony obszar w oknie IPythona", - "python.command.python.datascience.runcell.title": "Uruchom komórki", - "python.command.python.datascience.showhistorypane.title": "Pokaż okno IPythona", - "python.command.python.datascience.selectjupyteruri.title": "Podaj identyfikator URI serwera Jupyter", - "python.command.python.datascience.importnotebook.title": "Importuj notatnik Jupyter", - "python.command.python.datascience.importnotebookonfile.title": "Importuj notatnik Jupyter", - "python.command.python.enableSourceMapSupport.title": "Włącz obsługę map źródłowych do debugowania rozszerzeń", - "python.command.python.datascience.exportoutputasnotebook.title": "Eksportuj okno IPython jako notatnik Jupyter", - "python.command.python.datascience.exportfileasnotebook.title": "Eksportuj bieżący plik Pythona jako notatnik Jupytera", - "python.command.python.datascience.exportfileandoutputasnotebook.title": "Eksportuj bieżący plik Pythona i jego wyniki jako notatnik Jupytera", - "python.command.python.datascience.undocells.title": "Cofnij ostatnią akcję IPythona", - "python.command.python.datascience.redocells.title": "Ponów ostatnią akcję IPythona", - "python.command.python.datascience.removeallcells.title": "Usuń wszystkie komórki IPythona", - "python.command.python.datascience.interruptkernel.title": "Przerwij IPython Kernel", - "python.command.python.datascience.restartkernel.title": "Restartuj IPython Kernel", - "python.command.python.datascience.expandallcells.title": "Rozwiń wszystkie komórki IPythona", - "python.command.python.datascience.collapseallcells.title": "Zwiń wszystkie komórki IPythona" -} diff --git a/package.nls.pt-br.json b/package.nls.pt-br.json deleted file mode 100644 index 1acc94053ca0..000000000000 --- a/package.nls.pt-br.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "python.command.python.sortImports.title": "Ordenar Importações", - "python.command.python.startREPL.title": "Iniciar REPL", - "python.command.python.createTerminal.title": "Criar Terminal", - "python.command.python.buildWorkspaceSymbols.title": "Construir Símbolos da Área de Trabalho", - "python.command.python.runtests.title": "Executar Todos os Testes Unitários", - "python.command.python.debugtests.title": "Depurar Todos os Testes Unitários", - "python.command.python.execInTerminal.title": "Executar Arquivo no Terminal", - "python.command.python.setInterpreter.title": "Selecionar Interpretador", - "python.command.python.refactorExtractVariable.title": "Extrair Variável", - "python.command.python.refactorExtractMethod.title": "Extrair Método", - "python.command.python.viewTestOutput.title": "Exibir Resultados dos Testes Unitários", - "python.command.python.selectAndRunTestMethod.title": "Executar Testes Unitários do Método ...", - "python.command.python.selectAndDebugTestMethod.title": "Depurar Testes Unitários do Método ...", - "python.command.python.selectAndRunTestFile.title": "Executar Arquivo de Testes Unitários ...", - "python.command.python.runCurrentTestFile.title": "Executar o Arquivo de Testes Unitários Atual", - "python.command.python.runFailedTests.title": "Executar Testes Unitários com Falhas", - "python.command.python.discoverTests.title": "Descobrir Testes Unitários", - "python.command.python.execSelectionInTerminal.title": "Executar Seleção/Linha no Terminal", - "python.command.python.execSelectionInDjangoShell.title": "Executar Seleção/Linha no Django Shell", - "python.command.python.goToPythonObject.title": "Ir para Objeto Python", - "python.command.python.setLinter.title": "Selecionar Linter", - "python.command.python.enableLinting.title": "Habilitar Linting", - "python.command.python.runLinting.title": "Executar Linting", - "python.snippet.launch.standard.label": "Python: Arquivo Atual", - "python.snippet.launch.module.label": "Python: Módulo", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Aplicação Pyramid", - "python.snippet.launch.attach.label": "Python: Anexar" -} diff --git a/package.nls.ru.json b/package.nls.ru.json deleted file mode 100644 index 25130dc2f1fd..000000000000 --- a/package.nls.ru.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "python.command.python.sortImports.title": "Отсортировать Imports", - "python.command.python.startREPL.title": "Открыть REPL", - "python.command.python.buildWorkspaceSymbols.title": "Собрать символы рабочего пространства", - "python.command.python.runtests.title": "Запустить все тесты", - "python.command.python.debugtests.title": "Запустить все тесты под отладчиком", - "python.command.python.execInTerminal.title": "Выполнить файл в консоли", - "python.command.python.setInterpreter.title": "Выбрать интерпретатор", - "python.command.python.refactorExtractVariable.title": "Извлечь в переменную", - "python.command.python.refactorExtractMethod.title": "Извлечь в метод", - "python.command.python.viewTestOutput.title": "Показать вывод теста", - "python.command.python.selectAndRunTestMethod.title": "Запусть тестовый метод...", - "python.command.python.selectAndDebugTestMethod.title": "Отладить тестовый метод...", - "python.command.python.selectAndRunTestFile.title": "Запустить тестовый файл...", - "python.command.python.runCurrentTestFile.title": "Запустить текущий тестовый файл", - "python.command.python.runFailedTests.title": "Запустить непрошедшие тесты", - "python.command.python.discoverTests.title": "Обнаружить тесты", - "python.command.python.execSelectionInTerminal.title": "Выполнить выбранный текст или текущую строку в консоли", - "python.command.python.execSelectionInDjangoShell.title": "Выполнить выбранный текст или текущую строку в оболочке Django", - "python.command.python.goToPythonObject.title": "Перейти к объекту Python", - "python.command.python.setLinter.title": "Выбрать анализатор кода", - "python.command.python.enableLinting.title": "Включить анализатор кода", - "python.command.python.runLinting.title": "Выполнить анализ кода", - "python.snippet.launch.standard.label": "Python: Текущий файл", - "python.snippet.launch.module.label": "Python: Модуль", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Приложение Pyramid", - "python.snippet.launch.attach.label": "Python: Подключить отладчик", - "LanguageService.bannerMessage": "Не могли бы вы уделить 2 минуты, чтобы рассказать нам насколько хорошо у вас работает Python Language Server?", - "LanguageService.bannerLabelYes": "Да, пройти опрос сейчас", - "LanguageService.bannerLabelNo": "Нет, спасибо" -} diff --git a/package.nls.tr.json b/package.nls.tr.json deleted file mode 100644 index 0e648bb38fdf..000000000000 --- a/package.nls.tr.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "python.command.python.sortImports.title": "Import İfadelerini Sırala", - "python.command.python.startREPL.title": "REPL Başlat", - "python.command.python.createTerminal.title": "Terminal Oluştur", - "python.command.python.buildWorkspaceSymbols.title": "Çalışma Alanındaki Sembolleri Derle", - "python.command.python.runtests.title": "Testleri Çalıştır", - "python.command.python.debugtests.title": "Testleri Debug Et", - "python.command.python.execInTerminal.title": "Terminalde Çalıştır", - "python.command.python.setInterpreter.title": "Bir Interpreter Seçin", - "python.command.python.refactorExtractVariable.title": "Değişken Çıkar", - "python.command.python.refactorExtractMethod.title": "Metot Çıkar", - "python.command.python.viewTestOutput.title": "Test Çıktısını Görüntüle", - "python.command.python.selectAndRunTestMethod.title": "Test Metodu Çalıştır", - "python.command.python.selectAndDebugTestMethod.title": "Test Metodu Debug Et", - "python.command.python.selectAndRunTestFile.title": "Bir Test Dosyası Seç ve Çalıştır", - "python.command.python.runCurrentTestFile.title": "Aktif Test Dosyasını Çalıştır", - "python.command.python.runFailedTests.title": "Başarısız Testleri Çalıştır", - "python.command.python.discoverTests.title": "Testleri Keşfet", - "python.command.python.discoveringTests.title": "Testler Keşfediliyor...", - "python.command.python.execSelectionInTerminal.title": "Seçimi/Satırı Terminalde Çalıştır", - "python.command.python.execSelectionInDjangoShell.title": "Seçimi/Satırı Django Shell'inde Çalıştır", - "python.command.python.goToPythonObject.title": "Python Nesnesine Git", - "python.command.python.setLinter.title": "Bir Linter Seç", - "python.command.python.enableLinting.title": "Linting'i Aktifleştir", - "python.command.python.runLinting.title": "Linter Çalıştır", - "python.snippet.launch.standard.label": "Python: Geçerli Dosya", - "python.snippet.launch.module.label": "Python: Modül", - "python.snippet.launch.module.default": "modül-adını-yazın", - "python.snippet.launch.attach.label": "Python: Remote Attach", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid Uygulaması" -} diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json deleted file mode 100644 index aaf5460a3c55..000000000000 --- a/package.nls.zh-cn.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "python.command.python.sortImports.title": "排序 import 语句", - "python.command.python.startREPL.title": "启动 REPL", - "python.command.python.createTerminal.title": "创建终端", - "python.command.python.buildWorkspaceSymbols.title": "构建工作区符号", - "python.command.python.runtests.title": "运行所有单元测试", - "python.command.python.debugtests.title": "调试所有单元测试", - "python.command.python.execInTerminal.title": "在终端中运行 Python 文件", - "python.command.python.setInterpreter.title": "选择解析器", - "python.command.python.refactorExtractVariable.title": "提取变量", - "python.command.python.refactorExtractMethod.title": "提取方法", - "python.command.python.viewTestOutput.title": "显示单元测试输出", - "python.command.python.selectAndRunTestMethod.title": "运行单元测试方法...", - "python.command.python.selectAndDebugTestMethod.title": "调试单元测试方法...", - "python.command.python.selectAndRunTestFile.title": "运行单元测试文件...", - "python.command.python.runCurrentTestFile.title": "运行当前单元测试文件", - "python.command.python.runFailedTests.title": "运行失败的单元测试", - "python.command.python.discoverTests.title": "检测单元测试", - "python.command.python.execSelectionInTerminal.title": "在 Python 终端中运行选定内容/行", - "python.command.python.execSelectionInDjangoShell.title": "在 Django Shell 中运行选定内容/行", - "python.command.python.goToPythonObject.title": "转到 Python 对象", - "python.command.python.setLinter.title": "选择 Linter 插件", - "python.command.python.enableLinting.title": "启用 Linting", - "python.command.python.runLinting.title": "运行 Linting", - "python.snippet.launch.standard.label": "Python: 当前文件", - "python.snippet.launch.module.label": "Python: 模块", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid 应用", - "python.snippet.launch.attach.label": "Python: 附加" -} diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json deleted file mode 100644 index 9245748a6461..000000000000 --- a/package.nls.zh-tw.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "python.command.python.sortImports.title": "排序 Import 語句", - "python.command.python.startREPL.title": "啟動 REPL", - "python.command.python.createTerminal.title": "建立終端機", - "python.command.python.buildWorkspaceSymbols.title": "建構工作區符號", - "python.command.python.runtests.title": "執行所有單元測試", - "python.command.python.debugtests.title": "偵錯所有單元測試", - "python.command.python.execInTerminal.title": "在終端機中執行 Python 檔案", - "python.command.python.setInterpreter.title": "選擇直譯器", - "python.command.python.refactorExtractVariable.title": "提取變數", - "python.command.python.refactorExtractMethod.title": "提取方法", - "python.command.python.viewTestOutput.title": "顯示單元測試輸出", - "python.command.python.selectAndRunTestMethod.title": "執行單元測試方法…", - "python.command.python.selectAndDebugTestMethod.title": "偵錯單元測試方法…", - "python.command.python.selectAndRunTestFile.title": "執行單元測試檔案…", - "python.command.python.runCurrentTestFile.title": "執行目前單元測試檔案", - "python.command.python.runFailedTests.title": "執行失敗的單元測試", - "python.command.python.execSelectionInTerminal.title": "在 Python 終端機中執行選定內容/行", - "python.command.python.execSelectionInDjangoShell.title": "在 Django Shell 中執行選定內容/行", - "python.command.python.goToPythonObject.title": "跳至 Python 物件", - "python.command.python.setLinter.title": "選擇 Linter", - "python.command.python.enableLinting.title": "啟用 Linting", - "python.command.python.runLinting.title": "執行 Linting", - "python.snippet.launch.standard.label": "Python: 目前檔案", - "python.snippet.launch.module.label": "Python: 模組", - "python.snippet.launch.django.label": "Python: Django", - "python.snippet.launch.flask.label": "Python: Flask", - "python.snippet.launch.pyramid.label": "Python: Pyramid 程式", - "python.snippet.launch.attach.label": "Python: 附加", - "python.command.python.discoverTests.title": "探索 Unit 測試項目", - "python.command.python.switchOffInsidersChannel.title": "切換至預設頻道", - "python.command.python.switchToDailyChannel.title": "切換至 Insiders 每日頻道", - "python.command.python.switchToWeeklyChannel.title": "切換至 Insiders 每週頻道", - "python.command.python.viewOutput.title": "顯示輸出", - "python.command.python.datascience.viewJupyterOutput.title": "顯示 Jupyter 輸出", - "python.command.python.viewLanguageServerOutput.title": "顯示語言伺服器輸出", - "python.command.python.discoveringTests.title": "正在探索...", - "python.command.python.stopTests.title": "停止", - "python.command.python.configureTests.title": "設定測試", - "python.command.python.enableSourceMapSupport.title": "啟用供偵錯延伸模組的原始碼映射 (Source Map) 支援", - "python.command.python.analysis.clearCache.title": "清除模組分析快取", - "python.snippet.launch.module.default": "請輸入-模組-名稱", - "python.snippet.launch.attachpid.label": "Python: 使用處理程序 ID 連結", - "LanguageService.bannerMessage": "請問您是否可以用兩分鐘的時間,告訴我們 Python 語言伺服器在您環境中的運作情況?", - "LanguageService.bannerLabelYes": "是,現在填寫調查", - "LanguageService.bannerLabelNo": "不了,謝謝", - "LanguageService.lsFailedToStart": "啟動語言伺服器時遇到問題。改回使用替代方案 \"Jedi\"。請檢查 Python 輸出面板以取得更多資訊。", - "LanguageService.lsFailedToDownload": "下載語言伺服器時遇到問題。改回使用替代方案 \"Jedi\"。請檢查 Python 輸出面板以取得更多資訊。", - "LanguageService.lsFailedToExtract": "擷取語言伺服器時遇到問題。改回使用替代方案 \"Jedi\"。請檢查 Python 輸出面板以取得更多資訊。", - "Experiments.inGroup": "使用者屬於 \"{0}\" 實驗性群組", - "Interpreters.RefreshingInterpreters": "正在重新整理 Python 解譯器", - "Interpreters.LoadingInterpreters": "正在載入 Python 解譯器", - "Interpreters.condaInheritEnvMessage": "我們發覺到您在使用 conda 環境。如果你在整合式終端器中使用這個環境時遇到問題,建議您讓 Python 延伸模組變更使用者設定中的 \"terminal.integrated.inheritEnv\" 為 false。", - "Logging.CurrentWorkingDirectory": "cwd:", - "Common.doNotShowAgain": "不再顯示", - "Common.reload": "重新載入", - "Common.moreInfo": "更多資訊", - "OutputChannelNames.languageServer": "Python 語言伺服器", - "OutputChannelNames.python": "Python", - "OutputChannelNames.pythonTest": "Python 測試記錄", - "OutputChannelNames.jupyter": "Jupyter", - "ExtensionSurveyBanner.bannerMessage": "請問您是否可以用兩分鐘的時間,告訴我們 Python 延伸模組在您環境中的運作情況?", - "ExtensionSurveyBanner.maybeLater": "等一下", - "ExtensionChannels.installingInsidersMessage": "正在安裝 Insiders... ", - "ExtensionChannels.installingStableMessage": "正在安裝穩定版... ", - "ExtensionChannels.installationCompleteMessage": "完成。", - "ExtensionChannels.downloadingInsidersMessage": "正在下載 Insiders 延伸模組... ", - "ExtensionChannels.yesWeekly": "是,每週", - "ExtensionChannels.yesDaily": "是,每天", - "ExtensionChannels.promptMessage": "我們發覺到您在使用 Visual Studio Code Insiders。請問您是否想使用 Python 延伸模組的 Insiders 組建?", - "ExtensionChannels.reloadToUseInsidersMessage": "請重新載入 Visual Studio Code 以使用 Python 延伸模組的 Insiders 組建。", - "ExtensionChannels.downloadCompletedOutputMessage": "Insiders 組建下載完成。", - "ExtensionChannels.startingDownloadOutputMessage": "開始下載 Insiders 組建。", - "Interpreters.environmentPromptMessage": "We noticed a new virtual environment has been created. Do you want to select it for the workspace folder?", - "InteractiveShiftEnterBanner.bannerMessage": "Would you like to run code in the 'Python Interactive' window (an IPython console) for 'shift-enter'? Select 'No' to continue to run code in the Python Terminal. This can be changed later in settings.", - "InteractiveShiftEnterBanner.bannerLabelYes": "是", - "InteractiveShiftEnterBanner.bannerLabelNo": "否", - "Linter.enableLinter": "啟用 {0}", - "Linter.enablePylint": "您的工作區有 pylintrc 檔案。是否啟用 pylint?", - "Linter.replaceWithSelectedLinter": "設定中啟用了多個 Linter。是否用 '{0}' 取代?", - "Installer.noCondaOrPipInstaller": "選取環境中沒有可用的 Conda 或 Pip 安裝工具。", - "Installer.noPipInstaller": "選取環境中沒有可用的 Pip 安裝工具。", - "Installer.searchForHelp": "搜尋說明", - "diagnostics.warnSourceMaps": "已在 Python 延伸模組中啟用原始碼映射 (Source Map) 支援,這會降低延伸模組效能。", - "diagnostics.disableSourceMaps": "停用原始碼映射 (Source Map) 支援", - "diagnostics.warnBeforeEnablingSourceMaps": "在 Python 延伸模組中啟用原始碼映射 (Source Map) 支援會降低延伸模組效能。", - "diagnostics.enableSourceMapsAndReloadVSC": "啟用並重新載入視窗", - "diagnostics.lsNotSupported": "您的作業系統不符合 Python 語言伺服器的最低需求。改回使用替代自動完成提供者 \"Jedi\"。", - "diagnostics.invalidPythonPathInDebuggerSettings": "開始偵錯前,您需要選取 Python 解譯器。\n\n小提示:按一下狀態列的 \"選擇 Python 解譯器\"。", - "diagnostics.invalidPythonPathInDebuggerLaunch": "偵錯設定檔的 Python 路徑無效。", - "diagnostics.invalidDebuggerTypeDiagnostic": "Your launch.json file needs to be updated to change the \"pythonExperimental\" debug configurations to use the \"python\" debugger type, otherwise Python debugging may not work. Would you like to automatically update your launch.json file now?", - "diagnostics.consoleTypeDiagnostic": "Your launch.json file needs to be updated to change the console type string from \"none\" to \"internalConsole\", otherwise Python debugging may not work. Would you like to automatically update your launch.json file now?", - "diagnostics.justMyCodeDiagnostic": "Configuration \"debugStdLib\" in launch.json is no longer supported. It's recommended to replace it with \"justMyCode\", which is the exact opposite of using \"debugStdLib\". Would you like to automatically update your launch.json file to do that?", - "diagnostics.yesUpdateLaunch": "是,更新 launch.json", - "diagnostics.bannerLabelNo": "否,我稍候再做", - "diagnostics.processId": "Attaching the debugger to a local process is an experimental feature. It will be available to all users soon.", - "diagnostics.invalidTestSettings": "Your settings needs to be updated to change the setting \"python.unitTest.\" to \"python.testing.\", otherwise testing Python code using the extension may not work. Would you like to automatically update your settings now?", - "Common.canceled": "已取消", - "Common.cancel": "取消", - "Common.loadingPythonExtension": "正在載入 Python 延伸模組...", - "debug.selectConfigurationTitle": "選擇偵錯設定檔", - "debug.selectConfigurationPlaceholder": "偵錯設定檔", - "debug.launchJsonConfigurationsCompletionLabel": "Python", - "debug.launchJsonConfigurationsCompletionDescription": "選取 Python 偵錯設定檔", - "debug.debugFileConfigurationLabel": "Python 檔案", - "debug.debugFileConfigurationDescription": "偵錯目前使用中的 Python 檔案", - "debug.debugModuleConfigurationLabel": "模組", - "debug.debugModuleConfigurationDescription": "使用 '-m' 叫用以偵錯 Python 模組", - "debug.moduleEnterModuleTitle": "偵錯模組", - "debug.moduleEnterModulePrompt": "輸入 Python 模組 / 套件名稱", - "debug.moduleEnterModuleDefault": "輸入-模組-名稱", - "debug.moduleEnterModuleInvalidNameError": "請輸入有效的模組名稱", - "debug.remoteAttachConfigurationLabel": "遠端連結", - "debug.remoteAttachConfigurationDescription": "連結到遠端偵錯伺服器", - "debug.attachRemoteHostTitle": "遠端偵錯", - "debug.attachRemoteHostPrompt": "輸入主機名稱", - "debug.attachRemoteHostValidationError": "請輸入有效的主機名稱或 IP 位址", - "debug.attachRemotePortTitle": "遠端偵錯", - "debug.attachRemotePortPrompt": "輸入偵錯伺服器正在監聽的連線埠號。", - "debug.attachRemotePortValidationError": "請輸入有效的連線埠號。", - "debug.attachPidConfigurationLabel": "使用處理程序 ID 連結", - "debug.attachPidConfigurationDescription": "連結至本機處理程序", - "debug.debugDjangoConfigurationLabel": "Django", - "debug.debugDjangoConfigurationDescription": "執行並偵錯 Django 網路應用程式", - "debug.djangoEnterManagePyPathTitle": "偵錯 Django", - "debug.djangoEnterManagePyPathPrompt": "請輸入 manage.py 的路徑 ('${workspaceFolderToken}' 指向目前工作區資料夾的根目錄)", - "debug.djangoEnterManagePyPathInvalidFilePathError": "請輸入有效的 Python 檔案路徑", - "debug.debugFlaskConfigurationLabel": "Flask", - "debug.debugFlaskConfigurationDescription": "執行並偵錯 Flask 網路應用程式", - "debug.flaskEnterAppPathOrNamePathTitle": "偵錯 Flask", - "debug.flaskEnterAppPathOrNamePathPrompt": "請輸入應用程式路徑。例如:'app.py' 或 'app'", - "debug.flaskEnterAppPathOrNamePathInvalidNameError": "請輸入有效名稱", - "debug.debugPyramidConfigurationLabel": "Pyramid", - "debug.debugPyramidConfigurationDescription": "網路應用程式", - "debug.pyramidEnterDevelopmentIniPathTitle": "偵錯 Pyramid", - "debug.pyramidEnterDevelopmentIniPathPrompt": "`請輸入 development.ini 的路徑 ('${workspaceFolderToken}' 指向目前工作區資料夾的根目錄)`", - "debug.pyramidEnterDevelopmentIniPathInvalidFilePathError": "請輸入有效的檔案路徑", - "Testing.testErrorDiagnosticMessage": "錯誤", - "Testing.testFailDiagnosticMessage": "失敗", - "Testing.testSkippedDiagnosticMessage": "略過", - "Testing.configureTests": "設定測試框架", - "Testing.disableTests": "停用測試", - "Common.openOutputPanel": "顯示輸出", - "LanguageService.downloadFailedOutputMessage": "下載語言伺服器失敗", - "LanguageService.extractionFailedOutputMessage": "擷取語言伺服器失敗", - "LanguageService.extractionCompletedOutputMessage": "下載語言伺服器完成", - "LanguageService.extractionDoneOutputMessage": "完成", - "LanguageService.reloadVSCodeIfSeachPathHasChanged": "已為此 Python 解譯器變更搜尋路徑。請重新載入延伸模組以確保 IntelliSense 能夠正常運作", - "AttachProcess.unsupportedOS": "不支援 '{0}' 作業系統。", - "AttachProcess.attachTitle": "連結至處理程序", - "AttachProcess.selectProcessPlaceholder": "選擇要連結的處理程序", - "AttachProcess.noProcessSelected": "沒有選取的處理程序", - "AttachProcess.refreshList": "重新整理處理程序列表", - "diagnostics.updateSettings": "是,更新設定", - "Common.noIWillDoItLater": "否,我稍候再做", - "Common.notNow": "先不要", - "Common.gotIt": "懂了!", - "Interpreters.selectInterpreterTip": "小提示:您能透過按下狀態列中的 Python 版本,變更 Python 延伸模組使用的 Python 解譯器。", - "downloading.file": "正在下載 {0}...", - "downloading.file.progress": "目前 {0}{1},總共 {2} KB ({3}%)", - "products.installingModule": "正在安裝 {0}" -} diff --git a/pvsc.code-workspace b/pvsc.code-workspace deleted file mode 100644 index e804dd486348..000000000000 --- a/pvsc.code-workspace +++ /dev/null @@ -1,24 +0,0 @@ -{ - "folders": [ - { - "path": "." - }, - { - "path": "pythonFiles" - }, - { - "path": "src/ipywidgets" - } - ], - "settings": { - "typescript.tsdk": "./node_modules/typescript/lib", - "search.exclude": { - "**/node_modules/**": true, - "**/.vscode test/insider/**": true, - "**/.vscode test/stable/**": true, - "**/.vscode-test/insider/**": true, - "**/.vscode-test/stable/**": true, - "**/out/**": true - } - } -} diff --git a/pythonExtensionApi/.eslintrc b/pythonExtensionApi/.eslintrc new file mode 100644 index 000000000000..8828c49002ed --- /dev/null +++ b/pythonExtensionApi/.eslintrc @@ -0,0 +1,11 @@ +{ + "overrides": [ + { + "files": ["**/main.d.ts"], + "rules": { + "@typescript-eslint/no-explicit-any": "off", + "padding-line-between-statements": ["error", { "blankLine": "always", "prev": "export", "next": "*" }] + } + } + ] +} diff --git a/pythonExtensionApi/.npmignore b/pythonExtensionApi/.npmignore new file mode 100644 index 000000000000..283d589ea5fe --- /dev/null +++ b/pythonExtensionApi/.npmignore @@ -0,0 +1,8 @@ +example/** +dist/ +out/**/*.map +out/**/*.tsbuildInfo +src/ +.eslintrc* +.eslintignore +tsconfig*.json diff --git a/pythonExtensionApi/LICENSE.md b/pythonExtensionApi/LICENSE.md new file mode 100644 index 000000000000..767f4076ba05 --- /dev/null +++ b/pythonExtensionApi/LICENSE.md @@ -0,0 +1,21 @@ +Copyright (c) Microsoft Corporation. All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED _AS IS_, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/pythonExtensionApi/README.md b/pythonExtensionApi/README.md new file mode 100644 index 000000000000..5208d90cdfa5 --- /dev/null +++ b/pythonExtensionApi/README.md @@ -0,0 +1,55 @@ +# Python extension's API + +This npm module implements an API facade for the Python extension in VS Code. + +## Example + +First we need to define a `package.json` for the extension that wants to use the API: + +```jsonc +{ + "name": "...", + ... + // depend on the Python extension + "extensionDependencies": [ + "ms-python.python" + ], + // Depend on the Python extension facade npm module to get easier API access to the + // core extension. + "dependencies": { + "@vscode/python-extension": "...", + "@types/vscode": "..." + }, +} +``` + +Update `"@types/vscode"` to [a recent version](https://code.visualstudio.com/updates/) of VS Code, say `"^1.81.0"` for VS Code version `"1.81"`, in case there are any conflicts. + +The actual source code to get the active environment to run some script could look like this: + +```typescript +// Import the API +import { PythonExtension } from '@vscode/python-extension'; + +... + +// Load the Python extension API +const pythonApi: PythonExtension = await PythonExtension.api(); + +// This will return something like /usr/bin/python +const environmentPath = pythonApi.environments.getActiveEnvironmentPath(); + +// `environmentPath.path` carries the value of the setting. Note that this path may point to a folder and not the +// python binary. Depends entirely on how the env was created. +// E.g., `conda create -n myenv python` ensures the env has a python binary +// `conda create -n myenv` does not include a python binary. +// Also, the path specified may not be valid, use the following to get complete details for this environment if +// need be. + +const environment = await pythonApi.environments.resolveEnvironment(environmentPath); +if (environment) { + // run your script here. +} +``` + +Check out [the wiki](https://aka.ms/pythonEnvironmentApi) for many more examples and usage. diff --git a/pythonExtensionApi/SECURITY.md b/pythonExtensionApi/SECURITY.md new file mode 100644 index 000000000000..a050f362c152 --- /dev/null +++ b/pythonExtensionApi/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). + + diff --git a/pythonExtensionApi/package-lock.json b/pythonExtensionApi/package-lock.json new file mode 100644 index 000000000000..e462fc1c888a --- /dev/null +++ b/pythonExtensionApi/package-lock.json @@ -0,0 +1,157 @@ +{ + "name": "@vscode/python-extension", + "version": "1.0.6", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@vscode/python-extension", + "version": "1.0.6", + "license": "MIT", + "devDependencies": { + "@types/vscode": "^1.93.0", + "source-map": "^0.8.0-beta.0", + "typescript": "~5.2" + }, + "engines": { + "node": ">=22.17.0", + "vscode": "^1.93.0" + } + }, + "node_modules/@types/vscode": { + "version": "1.94.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.94.0.tgz", + "integrity": "sha512-UyQOIUT0pb14XSqJskYnRwD2aG0QrPVefIfrW1djR+/J4KeFQ0i1+hjZoaAmeNf3Z2jleK+R2hv+EboG/m8ruw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "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==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + }, + "dependencies": { + "@types/vscode": { + "version": "1.94.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.94.0.tgz", + "integrity": "sha512-UyQOIUT0pb14XSqJskYnRwD2aG0QrPVefIfrW1djR+/J4KeFQ0i1+hjZoaAmeNf3Z2jleK+R2hv+EboG/m8ruw==", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "dev": true + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + } + } +} diff --git a/pythonExtensionApi/package.json b/pythonExtensionApi/package.json new file mode 100644 index 000000000000..11e0445aa8da --- /dev/null +++ b/pythonExtensionApi/package.json @@ -0,0 +1,43 @@ +{ + "name": "@vscode/python-extension", + "description": "An API facade for the Python extension in VS Code", + "version": "1.0.6", + "author": { + "name": "Microsoft Corporation" + }, + "keywords": [ + "Python", + "VSCode", + "API" + ], + "main": "./out/main.js", + "types": "./out/main.d.ts", + "engines": { + "node": ">=22.21.1", + "vscode": "^1.93.0" + }, + "license": "MIT", + "homepage": "https://github.com/microsoft/vscode-python/tree/main/pythonExtensionApi", + "repository": { + "type": "git", + "url": "https://github.com/Microsoft/vscode-python" + }, + "bugs": { + "url": "https://github.com/Microsoft/vscode-python/issues" + }, + "devDependencies": { + "typescript": "~5.2", + "@types/vscode": "^1.102.0", + "source-map": "^0.8.0-beta.0" + }, + "scripts": { + "prepublishOnly": "echo \"⛔ Can only publish from a secure pipeline ⛔\" && node ../build/fail", + "prepack": "npm run all:publish", + "compile": "node ./node_modules/typescript/lib/tsc.js -b ./tsconfig.json", + "clean": "node ../node_modules/rimraf/bin.js out", + "lint": "node ../node_modules/eslint/bin/eslint.js --ext ts src", + "all": "npm run clean && npm run compile", + "formatTypings": "node ../node_modules/eslint/bin/eslint.js --fix ./out/main.d.ts", + "all:publish": "git clean -xfd . && npm install && npm run compile && npm run formatTypings" + } +} diff --git a/pythonExtensionApi/src/main.ts b/pythonExtensionApi/src/main.ts new file mode 100644 index 000000000000..2173245cbb28 --- /dev/null +++ b/pythonExtensionApi/src/main.ts @@ -0,0 +1,348 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { CancellationToken, Event, Uri, WorkspaceFolder, extensions } from 'vscode'; + +/* + * Do not introduce any breaking changes to this API. + * This is the public API for other extensions to interact with this extension. + */ +export interface PythonExtension { + /** + * Promise indicating whether all parts of the extension have completed loading or not. + */ + ready: Promise; + debug: { + /** + * Generate an array of strings for commands to pass to the Python executable to launch the debugger for remote debugging. + * Users can append another array of strings of what they want to execute along with relevant arguments to Python. + * E.g `['/Users/..../pythonVSCode/python_files/lib/python/debugpy', '--listen', 'localhost:57039', '--wait-for-client']` + * @param host + * @param port + * @param waitUntilDebuggerAttaches Defaults to `true`. + */ + getRemoteLauncherCommand(host: string, port: number, waitUntilDebuggerAttaches: boolean): Promise; + + /** + * Gets the path to the debugger package used by the extension. + */ + getDebuggerPackagePath(): Promise; + }; + + /** + * These APIs provide a way for extensions to work with by python environments available in the user's machine + * as found by the Python extension. See + * https://github.com/microsoft/vscode-python/wiki/Python-Environment-APIs for usage examples and more. + */ + readonly environments: { + /** + * Returns the environment configured by user in settings. Note that this can be an invalid environment, use + * {@link resolveEnvironment} to get full details. + * @param resource : Uri of a file or workspace folder. This is used to determine the env in a multi-root + * scenario. If `undefined`, then the API returns what ever is set for the workspace. + */ + getActiveEnvironmentPath(resource?: Resource): EnvironmentPath; + /** + * Sets the active environment path for the python extension for the resource. Configuration target will always + * be the workspace folder. + * @param environment : If string, it represents the full path to environment folder or python executable + * for the environment. Otherwise it can be {@link Environment} or {@link EnvironmentPath} itself. + * @param resource : [optional] File or workspace to scope to a particular workspace folder. + */ + updateActiveEnvironmentPath( + environment: string | EnvironmentPath | Environment, + resource?: Resource, + ): Promise; + /** + * This event is triggered when the active environment setting changes. + */ + readonly onDidChangeActiveEnvironmentPath: Event; + /** + * Carries environments known to the extension at the time of fetching the property. Note this may not + * contain all environments in the system as a refresh might be going on. + * + * Only reports environments in the current workspace. + */ + readonly known: readonly Environment[]; + /** + * This event is triggered when the known environment list changes, like when a environment + * is found, existing environment is removed, or some details changed on an environment. + */ + readonly onDidChangeEnvironments: Event; + /** + * This API will trigger environment discovery, but only if it has not already happened in this VSCode session. + * Useful for making sure env list is up-to-date when the caller needs it for the first time. + * + * To force trigger a refresh regardless of whether a refresh was already triggered, see option + * {@link RefreshOptions.forceRefresh}. + * + * Note that if there is a refresh already going on then this returns the promise for that refresh. + * @param options Additional options for refresh. + * @param token A cancellation token that indicates a refresh is no longer needed. + */ + refreshEnvironments(options?: RefreshOptions, token?: CancellationToken): Promise; + /** + * Returns details for the given environment, or `undefined` if the env is invalid. + * @param environment : If string, it represents the full path to environment folder or python executable + * for the environment. Otherwise it can be {@link Environment} or {@link EnvironmentPath} itself. + */ + resolveEnvironment( + environment: Environment | EnvironmentPath | string, + ): Promise; + /** + * Returns the environment variables used by the extension for a resource, which includes the custom + * variables configured by user in `.env` files. + * @param resource : Uri of a file or workspace folder. This is used to determine the env in a multi-root + * scenario. If `undefined`, then the API returns what ever is set for the workspace. + */ + getEnvironmentVariables(resource?: Resource): EnvironmentVariables; + /** + * This event is fired when the environment variables for a resource change. Note it's currently not + * possible to detect if environment variables in the system change, so this only fires if custom + * environment variables are updated in `.env` files. + */ + readonly onDidEnvironmentVariablesChange: Event; + }; +} + +export type RefreshOptions = { + /** + * When `true`, force trigger a refresh regardless of whether a refresh was already triggered. Note this can be expensive so + * it's best to only use it if user manually triggers a refresh. + */ + forceRefresh?: boolean; +}; + +/** + * Details about the environment. Note the environment folder, type and name never changes over time. + */ +export type Environment = EnvironmentPath & { + /** + * Carries details about python executable. + */ + readonly executable: { + /** + * Uri of the python interpreter/executable. Carries `undefined` in case an executable does not belong to + * the environment. + */ + readonly uri: Uri | undefined; + /** + * Bitness if known at this moment. + */ + readonly bitness: Bitness | undefined; + /** + * Value of `sys.prefix` in sys module if known at this moment. + */ + readonly sysPrefix: string | undefined; + }; + /** + * Carries details if it is an environment, otherwise `undefined` in case of global interpreters and others. + */ + readonly environment: + | { + /** + * Type of the environment. + */ + readonly type: EnvironmentType; + /** + * Name to the environment if any. + */ + readonly name: string | undefined; + /** + * Uri of the environment folder. + */ + readonly folderUri: Uri; + /** + * Any specific workspace folder this environment is created for. + */ + readonly workspaceFolder: WorkspaceFolder | undefined; + } + | undefined; + /** + * Carries Python version information known at this moment, carries `undefined` for envs without python. + */ + readonly version: + | (VersionInfo & { + /** + * Value of `sys.version` in sys module if known at this moment. + */ + readonly sysVersion: string | undefined; + }) + | undefined; + /** + * Tools/plugins which created the environment or where it came from. First value in array corresponds + * to the primary tool which manages the environment, which never changes over time. + * + * Array is empty if no tool is responsible for creating/managing the environment. Usually the case for + * global interpreters. + */ + readonly tools: readonly EnvironmentTools[]; +}; + +/** + * Derived form of {@link Environment} where certain properties can no longer be `undefined`. Meant to represent an + * {@link Environment} with complete information. + */ +export type ResolvedEnvironment = Environment & { + /** + * Carries complete details about python executable. + */ + readonly executable: { + /** + * Uri of the python interpreter/executable. Carries `undefined` in case an executable does not belong to + * the environment. + */ + readonly uri: Uri | undefined; + /** + * Bitness of the environment. + */ + readonly bitness: Bitness; + /** + * Value of `sys.prefix` in sys module. + */ + readonly sysPrefix: string; + }; + /** + * Carries complete Python version information, carries `undefined` for envs without python. + */ + readonly version: + | (ResolvedVersionInfo & { + /** + * Value of `sys.version` in sys module if known at this moment. + */ + readonly sysVersion: string; + }) + | undefined; +}; + +export type EnvironmentsChangeEvent = { + readonly env: Environment; + /** + * * "add": New environment is added. + * * "remove": Existing environment in the list is removed. + * * "update": New information found about existing environment. + */ + readonly type: 'add' | 'remove' | 'update'; +}; + +export type ActiveEnvironmentPathChangeEvent = EnvironmentPath & { + /** + * Resource the environment changed for. + */ + readonly resource: Resource | undefined; +}; + +/** + * Uri of a file inside a workspace or workspace folder itself. + */ +export type Resource = Uri | WorkspaceFolder; + +export type EnvironmentPath = { + /** + * The ID of the environment. + */ + readonly id: string; + /** + * Path to environment folder or path to python executable that uniquely identifies an environment. Environments + * lacking a python executable are identified by environment folder paths, whereas other envs can be identified + * using python executable path. + */ + readonly path: string; +}; + +/** + * Tool/plugin where the environment came from. It can be {@link KnownEnvironmentTools} or custom string which + * was contributed. + */ +export type EnvironmentTools = KnownEnvironmentTools | string; +/** + * Tools or plugins the Python extension currently has built-in support for. Note this list is expected to shrink + * once tools have their own separate extensions. + */ +export type KnownEnvironmentTools = + | 'Conda' + | 'Pipenv' + | 'Poetry' + | 'VirtualEnv' + | 'Venv' + | 'VirtualEnvWrapper' + | 'Pyenv' + | 'Unknown'; + +/** + * Type of the environment. It can be {@link KnownEnvironmentTypes} or custom string which was contributed. + */ +export type EnvironmentType = KnownEnvironmentTypes | string; +/** + * Environment types the Python extension is aware of. Note this list is expected to shrink once tools have their + * own separate extensions, in which case they're expected to provide the type themselves. + */ +export type KnownEnvironmentTypes = 'VirtualEnvironment' | 'Conda' | 'Unknown'; + +/** + * Carries bitness for an environment. + */ +export type Bitness = '64-bit' | '32-bit' | 'Unknown'; + +/** + * The possible Python release levels. + */ +export type PythonReleaseLevel = 'alpha' | 'beta' | 'candidate' | 'final'; + +/** + * Release information for a Python version. + */ +export type PythonVersionRelease = { + readonly level: PythonReleaseLevel; + readonly serial: number; +}; + +export type VersionInfo = { + readonly major: number | undefined; + readonly minor: number | undefined; + readonly micro: number | undefined; + readonly release: PythonVersionRelease | undefined; +}; + +export type ResolvedVersionInfo = { + readonly major: number; + readonly minor: number; + readonly micro: number; + readonly release: PythonVersionRelease; +}; + +/** + * A record containing readonly keys. + */ +export type EnvironmentVariables = { readonly [key: string]: string | undefined }; + +export type EnvironmentVariablesChangeEvent = { + /** + * Workspace folder the environment variables changed for. + */ + readonly resource: WorkspaceFolder | undefined; + /** + * Updated value of environment variables. + */ + readonly env: EnvironmentVariables; +}; + +export const PVSC_EXTENSION_ID = 'ms-python.python'; + +// eslint-disable-next-line @typescript-eslint/no-namespace +export namespace PythonExtension { + /** + * Returns the API exposed by the Python extension in VS Code. + */ + export async function api(): Promise { + const extension = extensions.getExtension(PVSC_EXTENSION_ID); + if (extension === undefined) { + throw new Error(`Python extension is not installed or is disabled`); + } + if (!extension.isActive) { + await extension.activate(); + } + const pythonApi: PythonExtension = extension.exports; + return pythonApi; + } +} diff --git a/pythonExtensionApi/tsconfig.json b/pythonExtensionApi/tsconfig.json new file mode 100644 index 000000000000..9ab7617023df --- /dev/null +++ b/pythonExtensionApi/tsconfig.json @@ -0,0 +1,34 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "*": ["types/*"] + }, + "module": "commonjs", + "target": "es2018", + "outDir": "./out", + "lib": [ + "es6", + "es2018", + "dom", + "ES2019", + "ES2020" + ], + "sourceMap": true, + "rootDir": "src", + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "strict": true, + "noImplicitAny": true, + "noImplicitThis": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + "resolveJsonModule": true, + "declaration": true + }, + "exclude": [ + "node_modules", + "out" + ] +} diff --git a/pythonFiles/completion.py b/pythonFiles/completion.py deleted file mode 100644 index ec5dd900d9a5..000000000000 --- a/pythonFiles/completion.py +++ /dev/null @@ -1,695 +0,0 @@ -import os -import os.path -import io -import re -import sys -import json -import traceback -import platform - -jediPreview = False - - -class RedirectStdout(object): - def __init__(self, new_stdout=None): - """If stdout is None, redirect to /dev/null""" - self._new_stdout = new_stdout or open(os.devnull, "w") - - def __enter__(self): - sys.stdout.flush() - self.oldstdout_fno = os.dup(sys.stdout.fileno()) - os.dup2(self._new_stdout.fileno(), 1) - - def __exit__(self, exc_type, exc_value, traceback): - self._new_stdout.flush() - os.dup2(self.oldstdout_fno, 1) - os.close(self.oldstdout_fno) - - -class JediCompletion(object): - basic_types = { - "module": "import", - "instance": "variable", - "statement": "value", - "param": "variable", - } - - def __init__(self): - self.default_sys_path = sys.path - self._input = io.open(sys.stdin.fileno(), encoding="utf-8") - if (os.path.sep == "/") and (platform.uname()[2].find("Microsoft") > -1): - # WSL; does not support UNC paths - self.drive_mount = "/mnt/" - elif sys.platform == "cygwin": - # cygwin - self.drive_mount = "/cygdrive/" - else: - # Do no normalization, e.g. Windows build of Python. - # Could add additional test: ((os.path.sep == '/') and os.path.isdir('/mnt/c')) - # However, this may have more false positives trying to identify Windows/*nix hybrids - self.drive_mount = "" - - def _get_definition_type(self, definition): - # if definition.type not in ['import', 'keyword'] and is_built_in(): - # return 'builtin' - try: - if definition.type in ["statement"] and definition.name.isupper(): - return "constant" - return self.basic_types.get(definition.type, definition.type) - except Exception: - return "builtin" - - def _additional_info(self, completion): - """Provide additional information about the completion object.""" - if not hasattr(completion, "_definition") or completion._definition is None: - return "" - if completion.type == "statement": - nodes_to_display = ["InstanceElement", "String", "Node", "Lambda", "Number"] - return "".join( - c.get_code() - for c in completion._definition.children - if type(c).__name__ in nodes_to_display - ).replace("\n", "") - return "" - - @classmethod - def _get_top_level_module(cls, path): - """Recursively walk through directories looking for top level module. - - Jedi will use current filepath to look for another modules at same - path, but it will not be able to see modules **above**, so our goal - is to find the higher python module available from filepath. - """ - _path, _ = os.path.split(path) - if os.path.isfile(os.path.join(_path, "__init__.py")): - return cls._get_top_level_module(_path) - return path - - def _generate_signature(self, completion): - """Generate signature with function arguments. - """ - if completion.type in ["module"] or not hasattr(completion, "params"): - return "" - return "%s(%s)" % ( - completion.name, - ", ".join(p.description[6:] for p in completion.params if p), - ) - - def _get_call_signatures(self, script): - """Extract call signatures from jedi.api.Script object in failsafe way. - - Returns: - Tuple with original signature object, name and value. - """ - _signatures = [] - try: - call_signatures = script.call_signatures() - except KeyError: - call_signatures = [] - except: - call_signatures = [] - for signature in call_signatures: - for pos, param in enumerate(signature.params): - if not param.name: - continue - - name = self._get_param_name(param) - if param.name == "self" and pos == 0: - continue - if name.startswith("*"): - continue - - value = self._get_param_value(param) - _signatures.append((signature, name, value)) - return _signatures - - def _get_param_name(self, p): - if p.name.startswith("param "): - return p.name[6:] # drop leading 'param ' - return p.name - - def _get_param_value(self, p): - pair = p.description.split("=") - if len(pair) > 1: - return pair[1] - return None - - def _get_call_signatures_with_args(self, script): - """Extract call signatures from jedi.api.Script object in failsafe way. - - Returns: - Array with dictionary - """ - _signatures = [] - try: - call_signatures = script.call_signatures() - except KeyError: - call_signatures = [] - for signature in call_signatures: - sig = { - "name": "", - "description": "", - "docstring": "", - "paramindex": 0, - "params": [], - "bracketstart": [], - } - sig["description"] = signature.description - try: - sig["docstring"] = signature.docstring() - sig["raw_docstring"] = signature.docstring(raw=True) - except Exception: - sig["docstring"] = "" - sig["raw_docstring"] = "" - - sig["name"] = signature.name - sig["paramindex"] = signature.index - sig["bracketstart"].append(signature.index) - - _signatures.append(sig) - for pos, param in enumerate(signature.params): - if not param.name: - continue - - name = self._get_param_name(param) - if param.name == "self" and pos == 0: - continue - - value = self._get_param_value(param) - paramDocstring = "" - try: - paramDocstring = param.docstring() - except Exception: - paramDocstring = "" - - sig["params"].append( - { - "name": name, - "value": value, - "docstring": paramDocstring, - "description": param.description, - } - ) - return _signatures - - def _serialize_completions(self, script, identifier=None, prefix=""): - """Serialize response to be read from VSCode. - - Args: - script: Instance of jedi.api.Script object. - identifier: Unique completion identifier to pass back to VSCode. - prefix: String with prefix to filter function arguments. - Used only when fuzzy matcher turned off. - - Returns: - Serialized string to send to VSCode. - """ - _completions = [] - - for signature, name, value in self._get_call_signatures(script): - if not self.fuzzy_matcher and not name.lower().startswith(prefix.lower()): - continue - _completion = { - "type": "property", - "raw_type": "", - "rightLabel": self._additional_info(signature), - } - _completion["description"] = "" - _completion["raw_docstring"] = "" - - # we pass 'text' here only for fuzzy matcher - if value: - _completion["snippet"] = "%s=${1:%s}$0" % (name, value) - _completion["text"] = "%s=" % (name) - else: - _completion["snippet"] = "%s=$1$0" % name - _completion["text"] = name - _completion["displayText"] = name - _completions.append(_completion) - - try: - completions = script.completions() - except KeyError: - completions = [] - except: - completions = [] - for completion in completions: - try: - _completion = { - "text": completion.name, - "type": self._get_definition_type(completion), - "raw_type": completion.type, - "rightLabel": self._additional_info(completion), - } - except Exception: - continue - - for c in _completions: - if c["text"] == _completion["text"]: - c["type"] = _completion["type"] - c["raw_type"] = _completion["raw_type"] - - if any( - [c["text"].split("=")[0] == _completion["text"] for c in _completions] - ): - # ignore function arguments we already have - continue - _completions.append(_completion) - return json.dumps({"id": identifier, "results": _completions}) - - def _serialize_methods(self, script, identifier=None, prefix=""): - _methods = [] - try: - completions = script.completions() - except KeyError: - return [] - - for completion in completions: - if completion.name == "__autocomplete_python": - instance = completion.parent().name - break - else: - instance = "self.__class__" - - for completion in completions: - params = [] - if hasattr(completion, "params"): - params = [p.description for p in completion.params if p] - if completion.parent().type == "class": - _methods.append( - { - "parent": completion.parent().name, - "instance": instance, - "name": completion.name, - "params": params, - "moduleName": completion.module_name, - "fileName": completion.module_path, - "line": completion.line, - "column": completion.column, - } - ) - return json.dumps({"id": identifier, "results": _methods}) - - def _serialize_arguments(self, script, identifier=None): - """Serialize response to be read from VSCode. - - Args: - script: Instance of jedi.api.Script object. - identifier: Unique completion identifier to pass back to VSCode. - - Returns: - Serialized string to send to VSCode. - """ - return json.dumps( - {"id": identifier, "results": self._get_call_signatures_with_args(script)} - ) - - def _top_definition(self, definition): - for d in definition.goto_assignments(): - if d == definition: - continue - if d.type == "import": - return self._top_definition(d) - else: - return d - return definition - - def _extract_range_jedi_0_11_1(self, definition): - from parso.utils import split_lines - - # get the scope range - try: - if definition.type in ["class", "function"]: - tree_name = definition._name.tree_name - scope = tree_name.get_definition() - start_line = scope.start_pos[0] - 1 - start_column = scope.start_pos[1] - # get the lines - code = scope.get_code(include_prefix=False) - lines = split_lines(code) - # trim the lines - lines = "\n".join(lines).rstrip().split("\n") - end_line = start_line + len(lines) - 1 - end_column = len(lines[-1]) - 1 - else: - symbol = definition._name.tree_name - start_line = symbol.start_pos[0] - 1 - start_column = symbol.start_pos[1] - end_line = symbol.end_pos[0] - 1 - end_column = symbol.end_pos[1] - return { - "start_line": start_line, - "start_column": start_column, - "end_line": end_line, - "end_column": end_column, - } - except Exception as e: - return { - "start_line": definition.line - 1, - "start_column": definition.column, - "end_line": definition.line - 1, - "end_column": definition.column, - } - - def _extract_range(self, definition): - """Provides the definition range of a given definition - - For regular symbols it returns the start and end location of the - characters making up the symbol. - - For scoped containers it will return the entire definition of the - scope. - - The scope that jedi provides ends with the first character of the next - scope so it's not ideal. For vscode we need the scope to end with the - last character of actual code. That's why we extract the lines that - make up our scope and trim the trailing whitespace. - """ - return self._extract_range_jedi_0_11_1(definition) - - def _get_definitionsx(self, definitions, identifier=None, ignoreNoModulePath=False): - """Serialize response to be read from VSCode. - - Args: - definitions: List of jedi.api.classes.Definition objects. - identifier: Unique completion identifier to pass back to VSCode. - - Returns: - Serialized string to send to VSCode. - """ - _definitions = [] - for definition in definitions: - try: - if definition.type == "import": - definition = self._top_definition(definition) - definitionRange = { - "start_line": 0, - "start_column": 0, - "end_line": 0, - "end_column": 0, - } - module_path = "" - if hasattr(definition, "module_path") and definition.module_path: - module_path = definition.module_path - definitionRange = self._extract_range(definition) - else: - if not ignoreNoModulePath: - continue - try: - parent = definition.parent() - container = parent.name if parent.type != "module" else "" - except Exception: - container = "" - - try: - docstring = definition.docstring() - rawdocstring = definition.docstring(raw=True) - except Exception: - docstring = "" - rawdocstring = "" - _definition = { - "text": definition.name, - "type": self._get_definition_type(definition), - "raw_type": definition.type, - "fileName": module_path, - "container": container, - "range": definitionRange, - "description": definition.description, - "docstring": docstring, - "raw_docstring": rawdocstring, - "signature": self._generate_signature(definition), - } - _definitions.append(_definition) - except Exception as e: - pass - return _definitions - - def _serialize_definitions(self, definitions, identifier=None): - """Serialize response to be read from VSCode. - - Args: - definitions: List of jedi.api.classes.Definition objects. - identifier: Unique completion identifier to pass back to VSCode. - - Returns: - Serialized string to send to VSCode. - """ - _definitions = [] - for definition in definitions: - try: - if definition.module_path: - if definition.type == "import": - definition = self._top_definition(definition) - if not definition.module_path: - continue - try: - parent = definition.parent() - container = parent.name if parent.type != "module" else "" - except Exception: - container = "" - - try: - docstring = definition.docstring() - rawdocstring = definition.docstring(raw=True) - except Exception: - docstring = "" - rawdocstring = "" - _definition = { - "text": definition.name, - "type": self._get_definition_type(definition), - "raw_type": definition.type, - "fileName": definition.module_path, - "container": container, - "range": self._extract_range(definition), - "description": definition.description, - "docstring": docstring, - "raw_docstring": rawdocstring, - } - _definitions.append(_definition) - except Exception as e: - pass - return json.dumps({"id": identifier, "results": _definitions}) - - def _serialize_tooltip(self, definitions, identifier=None): - _definitions = [] - for definition in definitions: - signature = definition.name - description = None - if definition.type in ["class", "function"]: - signature = self._generate_signature(definition) - try: - description = definition.docstring(raw=True).strip() - except Exception: - description = "" - if not description and not hasattr(definition, "get_line_code"): - # jedi returns an empty string for compiled objects - description = definition.docstring().strip() - if definition.type == "module": - signature = definition.full_name - try: - description = definition.docstring(raw=True).strip() - except Exception: - description = "" - if not description and hasattr(definition, "get_line_code"): - # jedi returns an empty string for compiled objects - description = definition.docstring().strip() - _definition = { - "type": self._get_definition_type(definition), - "text": definition.name, - "description": description, - "docstring": description, - "signature": signature, - } - _definitions.append(_definition) - return json.dumps({"id": identifier, "results": _definitions}) - - def _serialize_usages(self, usages, identifier=None): - _usages = [] - for usage in usages: - _usages.append( - { - "name": usage.name, - "moduleName": usage.module_name, - "fileName": usage.module_path, - "line": usage.line, - "column": usage.column, - } - ) - return json.dumps({"id": identifier, "results": _usages}) - - def _deserialize(self, request): - """Deserialize request from VSCode. - - Args: - request: String with raw request from VSCode. - - Returns: - Python dictionary with request data. - """ - return json.loads(request) - - def _set_request_config(self, config): - """Sets config values for current request. - - This includes sys.path modifications which is getting restored to - default value on each request so each project should be isolated - from each other. - - Args: - config: Dictionary with config values. - """ - sys.path = self.default_sys_path - self.use_snippets = config.get("useSnippets") - self.show_doc_strings = config.get("showDescriptions", True) - self.fuzzy_matcher = config.get("fuzzyMatcher", False) - jedi.settings.case_insensitive_completion = config.get( - "caseInsensitiveCompletion", True - ) - for path in config.get("extraPaths", []): - if path and path not in sys.path: - sys.path.insert(0, path) - - def _normalize_request_path(self, request): - """Normalize any Windows paths received by a *nix build of - Python. Does not alter the reverse os.path.sep=='\\', - i.e. *nix paths received by a Windows build of Python. - """ - if "path" in request: - if not self.drive_mount: - return - newPath = request["path"].replace("\\", "/") - if newPath[0:1] == "/": - # is absolute path with no drive letter - request["path"] = newPath - elif newPath[1:2] == ":": - # is path with drive letter, only absolute can be mapped - request["path"] = self.drive_mount + newPath[0:1].lower() + newPath[2:] - else: - # is relative path - request["path"] = newPath - - def _process_request(self, request): - """Accept serialized request from VSCode and write response. - """ - request = self._deserialize(request) - - self._set_request_config(request.get("config", {})) - - self._normalize_request_path(request) - path = self._get_top_level_module(request.get("path", "")) - if len(path) > 0 and path not in sys.path: - sys.path.insert(0, path) - lookup = request.get("lookup", "completions") - - if lookup == "names": - return self._serialize_definitions( - jedi.api.names( - source=request.get("source", None), - path=request.get("path", ""), - all_scopes=True, - ), - request["id"], - ) - - script = jedi.Script( - source=request.get("source", None), - line=request["line"] + 1, - column=request["column"], - path=request.get("path", ""), - sys_path=sys.path, - ) - - if lookup == "definitions": - defs = self._get_definitionsx( - script.goto_assignments(follow_imports=True), request["id"] - ) - return json.dumps({"id": request["id"], "results": defs}) - if lookup == "tooltip": - if jediPreview: - defs = [] - try: - defs = self._get_definitionsx( - script.goto_definitions(), request["id"], True - ) - except: - pass - try: - if len(defs) == 0: - defs = self._get_definitionsx( - script.goto_assignments(), request["id"], True - ) - except: - pass - return json.dumps({"id": request["id"], "results": defs}) - else: - try: - return self._serialize_tooltip( - script.goto_definitions(), request["id"] - ) - except: - return json.dumps({"id": request["id"], "results": []}) - elif lookup == "arguments": - return self._serialize_arguments(script, request["id"]) - elif lookup == "usages": - return self._serialize_usages(script.usages(), request["id"]) - elif lookup == "methods": - return self._serialize_methods( - script, request["id"], request.get("prefix", "") - ) - else: - return self._serialize_completions( - script, request["id"], request.get("prefix", "") - ) - - def _write_response(self, response): - sys.stdout.write(response + "\n") - sys.stdout.flush() - - def watch(self): - while True: - try: - rq = self._input.readline() - if len(rq) == 0: - # Reached EOF - indication our parent process is gone. - sys.stderr.write( - "Received EOF from the standard input,exiting" + "\n" - ) - sys.stderr.flush() - return - with RedirectStdout(): - response = self._process_request(rq) - self._write_response(response) - - except Exception: - sys.stderr.write(traceback.format_exc() + "\n") - sys.stderr.flush() - - -if __name__ == "__main__": - cachePrefix = "v" - modulesToLoad = "" - if len(sys.argv) > 2 and sys.argv[1] == "custom": - jediPath = sys.argv[2] - jediPreview = True - cachePrefix = "custom_v" - if len(sys.argv) > 3: - modulesToLoad = sys.argv[3] - else: - # release - jediPath = os.path.join(os.path.dirname(__file__), "lib", "python") - if len(sys.argv) > 1: - modulesToLoad = sys.argv[1] - - sys.path.insert(0, jediPath) - import jedi - - if jediPreview: - jedi.settings.cache_directory = os.path.join( - jedi.settings.cache_directory, - cachePrefix + jedi.__version__.replace(".", ""), - ) - # remove jedi from path after we import it so it will not be completed - sys.path.pop(0) - if len(modulesToLoad) > 0: - jedi.preload_module(*modulesToLoad.split(",")) - JediCompletion().watch() diff --git a/pythonFiles/install_debugpy.py b/pythonFiles/install_debugpy.py deleted file mode 100644 index 9eae3a7234be..000000000000 --- a/pythonFiles/install_debugpy.py +++ /dev/null @@ -1,65 +0,0 @@ -import io -import json -import os -import urllib.request as url_lib -import zipfile -from packaging.version import parse as version_parser - - -EXTENSION_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) -DEBUGGER_DEST = os.path.join( - EXTENSION_ROOT, "pythonFiles", "lib", "python", "debugpy", "wheels" -) -DEBUGGER_PACKAGE = "debugpy" -DEBUGGER_PYTHON_VERSIONS = ("cp37",) - - -def _contains(s, parts=()): - return any(p for p in parts if p in s) - - -def _get_package_data(): - json_uri = "https://pypi.org/pypi/{0}/json".format(DEBUGGER_PACKAGE) - # Response format: https://warehouse.readthedocs.io/api-reference/json/#project - # Release metadata format: https://github.com/pypa/interoperability-peps/blob/master/pep-0426-core-metadata.rst - with url_lib.urlopen(json_uri) as response: - return json.loads(response.read()) - - -def _get_debugger_wheel_urls(data, version): - return list( - r["url"] - for r in data["releases"][version] - if _contains(r["url"], DEBUGGER_PYTHON_VERSIONS) - ) - - -def _download_and_extract(root, url, version): - root = os.getcwd() if root is None or root == "." else root - prefix = os.path.join("debugpy-{0}.data".format(version), "purelib") - with url_lib.urlopen(url) as response: - # Extract only the contents of the purelib subfolder (parent folder of debugpy), - # since debugpy files rely on the presence of a 'debugpy' folder. - with zipfile.ZipFile(io.BytesIO(response.read()), "r") as wheel: - for zip_info in wheel.infolist(): - # Ignore dist info since we are merging multiple wheels - if ".dist-info" in zip_info.filename: - continue - # Normalize path for Windows, the wheel folder structure - # uses forward slashes. - normalized = os.path.normpath(zip_info.filename) - # Flatten the folder structure. - zip_info.filename = normalized.split(prefix)[-1] - wheel.extract(zip_info, root) - - -def main(root): - data = _get_package_data() - latest_version = max(data["releases"].keys(), key=version_parser) - - for url in _get_debugger_wheel_urls(data, latest_version): - _download_and_extract(root, url, latest_version) - - -if __name__ == "__main__": - main(DEBUGGER_DEST) diff --git a/pythonFiles/interpreterInfo.py b/pythonFiles/interpreterInfo.py deleted file mode 100644 index 9719a534345c..000000000000 --- a/pythonFiles/interpreterInfo.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import json -import sys - -obj = {} -obj["versionInfo"] = sys.version_info[:4] -obj["sysPrefix"] = sys.prefix -obj["version"] = sys.version -obj["is64Bit"] = sys.maxsize > 2 ** 32 - -print(json.dumps(obj)) diff --git a/pythonFiles/normalizeForInterpreter.py b/pythonFiles/normalizeForInterpreter.py deleted file mode 100644 index 34b31d56b398..000000000000 --- a/pythonFiles/normalizeForInterpreter.py +++ /dev/null @@ -1,154 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import ast -import io -import operator -import os -import sys -import textwrap -import token -import tokenize - - -class Visitor(ast.NodeVisitor): - def __init__(self, lines): - self._lines = lines - self.line_numbers_with_nodes = set() - self.line_numbers_with_statements = [] - - def generic_visit(self, node): - if ( - hasattr(node, "col_offset") - and hasattr(node, "lineno") - and node.col_offset == 0 - ): - self.line_numbers_with_nodes.add(node.lineno) - if isinstance(node, ast.stmt): - self.line_numbers_with_statements.append(node.lineno) - - ast.NodeVisitor.generic_visit(self, node) - - -def _tokenize(source): - """Tokenize Python source code.""" - # Using an undocumented API as the documented one in Python 2.7 does not work as needed - # cross-version. - if sys.version_info < (3,) and isinstance(source, str): - source = source.decode() - return tokenize.generate_tokens(io.StringIO(source).readline) - - -def _indent_size(line): - for index, char in enumerate(line): - if not char.isspace(): - return index - - -def _get_global_statement_blocks(source, lines): - """Return a list of all global statement blocks. - - The list comprises of 3-item tuples that contain the starting line number, - ending line number and whether the statement is a single line. - - """ - tree = ast.parse(source) - visitor = Visitor(lines) - visitor.visit(tree) - - statement_ranges = [] - for index, line_number in enumerate(visitor.line_numbers_with_statements): - remaining_line_numbers = visitor.line_numbers_with_statements[index + 1 :] - end_line_number = ( - len(lines) - if len(remaining_line_numbers) == 0 - else min(remaining_line_numbers) - 1 - ) - current_statement_is_oneline = line_number == end_line_number - - if len(statement_ranges) == 0: - statement_ranges.append( - (line_number, end_line_number, current_statement_is_oneline) - ) - continue - - previous_statement = statement_ranges[-1] - previous_statement_is_oneline = previous_statement[2] - if previous_statement_is_oneline and current_statement_is_oneline: - statement_ranges[-1] = previous_statement[0], end_line_number, True - else: - statement_ranges.append( - (line_number, end_line_number, current_statement_is_oneline) - ) - - return statement_ranges - - -def normalize_lines(source): - """Normalize blank lines for sending to the terminal. - - Blank lines within a statement block are removed to prevent the REPL - from thinking the block is finished. Newlines are added to separate - top-level statements so that the REPL does not think there is a syntax - error. - - """ - # Ensure to dedent the code (#2837) - lines = textwrap.dedent(source).splitlines(False) - # If we have two blank lines, then add two blank lines. - # Do not trim the spaces, if we have blank lines with spaces, its possible - # we have indented code. - if (len(lines) > 1 and len("".join(lines[-2:])) == 0) or source.endswith( - ("\n\n", "\r\n\r\n") - ): - trailing_newline = "\n" * 2 - # Find out if we have any trailing blank lines - elif len(lines[-1].strip()) == 0 or source.endswith(("\n", "\r\n")): - trailing_newline = "\n" - else: - trailing_newline = "" - - # Step 1: Remove empty lines. - tokens = _tokenize(source) - newlines_indexes_to_remove = ( - spos[0] - for (toknum, tokval, spos, epos, line) in tokens - if len(line.strip()) == 0 - and token.tok_name[toknum] == "NL" - and spos[0] == epos[0] - ) - - for line_number in reversed(list(newlines_indexes_to_remove)): - del lines[line_number - 1] - - # Step 2: Add blank lines between each global statement block. - # A consecutive single lines blocks of code will be treated as a single statement, - # just to ensure we do not unnecessarily add too many blank lines. - source = "\n".join(lines) - tokens = _tokenize(source) - dedent_indexes = ( - spos[0] - for (toknum, tokval, spos, epos, line) in tokens - if toknum == token.DEDENT and _indent_size(line) == 0 - ) - - global_statement_ranges = _get_global_statement_blocks(source, lines) - start_positions = map(operator.itemgetter(0), reversed(global_statement_ranges)) - for line_number in filter(lambda x: x > 1, start_positions): - lines.insert(line_number - 1, "") - - sys.stdout.write("\n".join(lines) + trailing_newline) - sys.stdout.flush() - - -if __name__ == "__main__": - contents = sys.argv[1] - try: - default_encoding = sys.getdefaultencoding() - encoded_contents = contents.encode(default_encoding, "surrogateescape") - contents = encoded_contents.decode(default_encoding, "replace") - except (UnicodeError, LookupError): - pass - if isinstance(contents, bytes): - contents = contents.decode("utf8") - normalize_lines(contents) diff --git a/pythonFiles/printEnvVariablesToFile.py b/pythonFiles/printEnvVariablesToFile.py deleted file mode 100644 index be966bcac28c..000000000000 --- a/pythonFiles/printEnvVariablesToFile.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -import json -import sys - - -# Last argument is the target file into which we'll write the env variables as json. -json_file = sys.argv[-1] - -with open(json_file, "w") as outfile: - json.dump(dict(os.environ), outfile) diff --git a/pythonFiles/ptvsd_launcher.py b/pythonFiles/ptvsd_launcher.py deleted file mode 100644 index f5da46d936d8..000000000000 --- a/pythonFiles/ptvsd_launcher.py +++ /dev/null @@ -1,48 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -import os.path -import sys -import traceback - -useCustomPtvsd = sys.argv[1] == "--custom" -ptvsdArgs = sys.argv[:] -ptvsdArgs.pop(1) - -# Load the debugger package -try: - ptvsd_lib_path = os.path.join( - os.path.dirname(__file__), "lib", "python", "old_ptvsd" - ) - if useCustomPtvsd: - sys.path.append(ptvsd_lib_path) - else: - sys.path.insert(0, ptvsd_lib_path) - try: - import ptvsd - from ptvsd.__main__ import main - - ptvsd_loaded = True - except ImportError: - ptvsd_loaded = False - raise -except: - traceback.print_exc() - print( - """ -Internal error detected. Please copy the above traceback and report at -https://github.com/Microsoft/vscode-python/issues/new - -Press Enter to close. . .""" - ) - try: - raw_input() - except NameError: - input() - sys.exit(1) -finally: - if ptvsd_lib_path: - sys.path.remove(ptvsd_lib_path) - -main(ptvsdArgs) diff --git a/pythonFiles/pyproject.toml b/pythonFiles/pyproject.toml deleted file mode 100644 index 52c7c96d11e7..000000000000 --- a/pythonFiles/pyproject.toml +++ /dev/null @@ -1,11 +0,0 @@ -[tool.black] -exclude = ''' - -( - /( - .data - | .vscode - | lib - )/ -) -''' diff --git a/pythonFiles/pyvsc-run-isolated.py b/pythonFiles/pyvsc-run-isolated.py deleted file mode 100644 index 1b1000e7683e..000000000000 --- a/pythonFiles/pyvsc-run-isolated.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -if __name__ != "__main__": - raise Exception("{} cannot be imported".format(__name__)) - -import runpy -import sys - -# We "isolate" the script/module (sys.argv[1]) by -# deleting sys.path[0] and then sending the target -# on to runpy. -del sys.path[0] -del sys.argv[0] -module = sys.argv[0] -if module == "-c": - ns = {} - for code in sys.argv[1:]: - exec(code, ns, ns) -elif module.startswith("-"): - raise NotImplementedError(sys.argv) -elif module.endswith(".py"): - runpy.run_path(module, run_name="__main__") -else: - runpy.run_module(module, run_name="__main__", alter_sys=True) diff --git a/pythonFiles/refactor.py b/pythonFiles/refactor.py deleted file mode 100644 index b62802ce2c53..000000000000 --- a/pythonFiles/refactor.py +++ /dev/null @@ -1,397 +0,0 @@ -# Arguments are: -# 1. Working directory. -# 2. Rope folder - -import difflib -import io -import json -import os -import sys -import traceback - -try: - import rope - from rope.base import libutils - from rope.refactor.rename import Rename - from rope.refactor.extract import ExtractMethod, ExtractVariable - import rope.base.project - import rope.base.taskhandle -except: - jsonMessage = { - "error": True, - "message": "Rope not installed", - "traceback": "", - "type": "ModuleNotFoundError", - } - sys.stderr.write(json.dumps(jsonMessage)) - sys.stderr.flush() - -WORKSPACE_ROOT = sys.argv[1] -ROPE_PROJECT_FOLDER = ".vscode/.ropeproject" - - -class RefactorProgress: - """ - Refactor progress information - """ - - def __init__(self, name="Task Name", message=None, percent=0): - self.name = name - self.message = message - self.percent = percent - - -class ChangeType: - """ - Change Type Enum - """ - - EDIT = 0 - NEW = 1 - DELETE = 2 - - -class Change: - """ - """ - - EDIT = 0 - NEW = 1 - DELETE = 2 - - def __init__(self, filePath, fileMode=ChangeType.EDIT, diff=""): - self.filePath = filePath - self.diff = diff - self.fileMode = fileMode - - -def get_diff(changeset): - """This is a copy of the code form the ChangeSet.get_description method found in Rope.""" - new = changeset.new_contents - old = changeset.old_contents - if old is None: - if changeset.resource.exists(): - old = changeset.resource.read() - else: - old = "" - - # Ensure code has a trailing empty lines, before generating a diff. - # https://github.com/Microsoft/vscode-python/issues/695. - old_lines = old.splitlines(True) - if not old_lines[-1].endswith("\n"): - old_lines[-1] = old_lines[-1] + os.linesep - new = new + os.linesep - - result = difflib.unified_diff( - old_lines, - new.splitlines(True), - "a/" + changeset.resource.path, - "b/" + changeset.resource.path, - ) - return "".join(list(result)) - - -class BaseRefactoring(object): - """ - Base class for refactorings - """ - - def __init__(self, project, resource, name="Refactor", progressCallback=None): - self._progressCallback = progressCallback - self._handle = rope.base.taskhandle.TaskHandle(name) - self._handle.add_observer(self._update_progress) - self.project = project - self.resource = resource - self.changes = [] - - def _update_progress(self): - jobset = self._handle.current_jobset() - if jobset and not self._progressCallback is None: - progress = RefactorProgress() - # getting current job set name - if jobset.get_name() is not None: - progress.name = jobset.get_name() - # getting active job name - if jobset.get_active_job_name() is not None: - progress.message = jobset.get_active_job_name() - # adding done percent - percent = jobset.get_percent_done() - if percent is not None: - progress.percent = percent - if not self._progressCallback is None: - self._progressCallback(progress) - - def stop(self): - self._handle.stop() - - def refactor(self): - try: - self.onRefactor() - except rope.base.exceptions.InterruptedTaskError: - # we can ignore this exception, as user has cancelled refactoring - pass - - def onRefactor(self): - """ - To be implemented by each base class - """ - pass - - -class RenameRefactor(BaseRefactoring): - def __init__( - self, - project, - resource, - name="Rename", - progressCallback=None, - startOffset=None, - newName="new_Name", - ): - BaseRefactoring.__init__(self, project, resource, name, progressCallback) - self._newName = newName - self.startOffset = startOffset - - def onRefactor(self): - renamed = Rename(self.project, self.resource, self.startOffset) - changes = renamed.get_changes(self._newName, task_handle=self._handle) - for item in changes.changes: - if isinstance(item, rope.base.change.ChangeContents): - self.changes.append( - Change(item.resource.real_path, ChangeType.EDIT, get_diff(item)) - ) - else: - raise Exception("Unknown Change") - - -class ExtractVariableRefactor(BaseRefactoring): - def __init__( - self, - project, - resource, - name="Extract Variable", - progressCallback=None, - startOffset=None, - endOffset=None, - newName="new_Name", - similar=False, - global_=False, - ): - BaseRefactoring.__init__(self, project, resource, name, progressCallback) - self._newName = newName - self._startOffset = startOffset - self._endOffset = endOffset - self._similar = similar - self._global = global_ - - def onRefactor(self): - renamed = ExtractVariable( - self.project, self.resource, self._startOffset, self._endOffset - ) - changes = renamed.get_changes(self._newName, self._similar, self._global) - for item in changes.changes: - if isinstance(item, rope.base.change.ChangeContents): - self.changes.append( - Change(item.resource.real_path, ChangeType.EDIT, get_diff(item)) - ) - else: - raise Exception("Unknown Change") - - -class ExtractMethodRefactor(ExtractVariableRefactor): - def __init__( - self, - project, - resource, - name="Extract Method", - progressCallback=None, - startOffset=None, - endOffset=None, - newName="new_Name", - similar=False, - global_=False, - ): - ExtractVariableRefactor.__init__( - self, - project, - resource, - name, - progressCallback, - startOffset=startOffset, - endOffset=endOffset, - newName=newName, - similar=similar, - global_=global_, - ) - - def onRefactor(self): - renamed = ExtractMethod( - self.project, self.resource, self._startOffset, self._endOffset - ) - changes = renamed.get_changes(self._newName, self._similar, self._global) - for item in changes.changes: - if isinstance(item, rope.base.change.ChangeContents): - self.changes.append( - Change(item.resource.real_path, ChangeType.EDIT, get_diff(item)) - ) - else: - raise Exception("Unknown Change") - - -class RopeRefactoring(object): - def __init__(self): - self.default_sys_path = sys.path - self._input = io.open(sys.stdin.fileno(), encoding="utf-8") - - def _rename(self, filePath, start, newName, indent_size): - """ - Renames a variable - """ - project = rope.base.project.Project( - WORKSPACE_ROOT, - ropefolder=ROPE_PROJECT_FOLDER, - save_history=False, - indent_size=indent_size, - ) - resourceToRefactor = libutils.path_to_resource(project, filePath) - refactor = RenameRefactor( - project, resourceToRefactor, startOffset=start, newName=newName - ) - refactor.refactor() - changes = refactor.changes - project.close() - valueToReturn = [] - for change in changes: - valueToReturn.append({"diff": change.diff}) - return valueToReturn - - def _extractVariable(self, filePath, start, end, newName, indent_size): - """ - Extracts a variable - """ - project = rope.base.project.Project( - WORKSPACE_ROOT, - ropefolder=ROPE_PROJECT_FOLDER, - save_history=False, - indent_size=indent_size, - ) - resourceToRefactor = libutils.path_to_resource(project, filePath) - refactor = ExtractVariableRefactor( - project, - resourceToRefactor, - startOffset=start, - endOffset=end, - newName=newName, - similar=True, - ) - refactor.refactor() - changes = refactor.changes - project.close() - valueToReturn = [] - for change in changes: - valueToReturn.append({"diff": change.diff}) - return valueToReturn - - def _extractMethod(self, filePath, start, end, newName, indent_size): - """ - Extracts a method - """ - project = rope.base.project.Project( - WORKSPACE_ROOT, - ropefolder=ROPE_PROJECT_FOLDER, - save_history=False, - indent_size=indent_size, - ) - resourceToRefactor = libutils.path_to_resource(project, filePath) - refactor = ExtractMethodRefactor( - project, - resourceToRefactor, - startOffset=start, - endOffset=end, - newName=newName, - similar=True, - ) - refactor.refactor() - changes = refactor.changes - project.close() - valueToReturn = [] - for change in changes: - valueToReturn.append({"diff": change.diff}) - return valueToReturn - - def _serialize(self, identifier, results): - """ - Serializes the refactor results - """ - return json.dumps({"id": identifier, "results": results}) - - def _deserialize(self, request): - """Deserialize request from VSCode. - - Args: - request: String with raw request from VSCode. - - Returns: - Python dictionary with request data. - """ - return json.loads(request) - - def _process_request(self, request): - """Accept serialized request from VSCode and write response. - """ - request = self._deserialize(request) - lookup = request.get("lookup", "") - - if lookup == "": - pass - elif lookup == "rename": - changes = self._rename( - request["file"], - int(request["start"]), - request["name"], - int(request["indent_size"]), - ) - return self._write_response(self._serialize(request["id"], changes)) - elif lookup == "extract_variable": - changes = self._extractVariable( - request["file"], - int(request["start"]), - int(request["end"]), - request["name"], - int(request["indent_size"]), - ) - return self._write_response(self._serialize(request["id"], changes)) - elif lookup == "extract_method": - changes = self._extractMethod( - request["file"], - int(request["start"]), - int(request["end"]), - request["name"], - int(request["indent_size"]), - ) - return self._write_response(self._serialize(request["id"], changes)) - - def _write_response(self, response): - sys.stdout.write(response + "\n") - sys.stdout.flush() - - def watch(self): - self._write_response("STARTED") - while True: - try: - self._process_request(self._input.readline()) - except: - exc_type, exc_value, exc_tb = sys.exc_info() - tb_info = traceback.extract_tb(exc_tb) - jsonMessage = { - "error": True, - "message": str(exc_value), - "traceback": str(tb_info), - "type": str(exc_type), - } - sys.stderr.write(json.dumps(jsonMessage)) - sys.stderr.flush() - - -if __name__ == "__main__": - RopeRefactoring().watch() diff --git a/pythonFiles/sortImports.py b/pythonFiles/sortImports.py deleted file mode 100644 index 666827118d37..000000000000 --- a/pythonFiles/sortImports.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -import os.path -import sys - -isort_path = os.path.join(os.path.dirname(__file__), "lib", "python") -sys.path.insert(0, isort_path) - -import isort.main - -isort.main.main() diff --git a/pythonFiles/symbolProvider.py b/pythonFiles/symbolProvider.py deleted file mode 100644 index 033ce4b99900..000000000000 --- a/pythonFiles/symbolProvider.py +++ /dev/null @@ -1,89 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import ast -import json -import sys - - -class Visitor(ast.NodeVisitor): - def __init__(self): - self.symbols = {"classes": [], "methods": [], "functions": []} - - def visit_Module(self, node): - self.visitChildren(node) - - def visitChildren(self, node, namespace=""): - for child in node.body: - if isinstance(child, ast.FunctionDef): - self.visitDef(child, namespace) - if isinstance(child, ast.ClassDef): - self.visitClassDef(child, namespace) - try: - if isinstance(child, ast.AsyncFunctionDef): - self.visitDef(child, namespace) - except Exception: - pass - - def visitDef(self, node, namespace=""): - end_position = self.getEndPosition(node) - symbol = "functions" if namespace == "" else "methods" - self.symbols[symbol].append(self.getDataObject(node, namespace)) - - def visitClassDef(self, node, namespace=""): - end_position = self.getEndPosition(node) - self.symbols["classes"].append(self.getDataObject(node, namespace)) - - if len(namespace) > 0: - namespace = "{0}::{1}".format(namespace, node.name) - else: - namespace = node.name - self.visitChildren(node, namespace) - - def getDataObject(self, node, namespace=""): - end_position = self.getEndPosition(node) - return { - "namespace": namespace, - "name": node.name, - "range": { - "start": {"line": node.lineno - 1, "character": node.col_offset}, - "end": {"line": end_position[0], "character": end_position[1]}, - }, - } - - def getEndPosition(self, node): - if not hasattr(node, "body") or len(node.body) == 0: - return (node.lineno - 1, node.col_offset) - return self.getEndPosition(node.body[-1]) - - -def provide_symbols(source): - """Provides a list of all symbols in provided code. - - The list comprises of 3-item tuples that contain the starting line number, - ending line number and whether the statement is a single line. - - """ - tree = ast.parse(source) - visitor = Visitor() - visitor.visit(tree) - sys.stdout.write(json.dumps(visitor.symbols)) - sys.stdout.flush() - - -if __name__ == "__main__": - if len(sys.argv) == 3: - contents = sys.argv[2] - else: - with open(sys.argv[1], "r") as source: - contents = source.read() - - try: - default_encoding = sys.getdefaultencoding() - encoded_contents = contents.encode(default_encoding, "surrogateescape") - contents = encoded_contents.decode(default_encoding, "replace") - except (UnicodeError, LookupError): - pass - if isinstance(contents, bytes): - contents = contents.decode("utf8") - provide_symbols(contents) diff --git a/pythonFiles/testing_tools/adapter/__main__.py b/pythonFiles/testing_tools/adapter/__main__.py deleted file mode 100644 index 2f17c6e50a61..000000000000 --- a/pythonFiles/testing_tools/adapter/__main__.py +++ /dev/null @@ -1,106 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import - -import argparse -import sys - -from . import pytest, report -from .errors import UnsupportedToolError, UnsupportedCommandError - - -TOOLS = { - "pytest": { - "_add_subparser": pytest.add_cli_subparser, - "discover": pytest.discover, - }, -} -REPORTERS = { - "discover": report.report_discovered, -} - - -def parse_args( - # the args to parse - argv=sys.argv[1:], - # the program name - prog=sys.argv[0], -): - """ - Return the subcommand & tool to run, along with its args. - - This defines the standard CLI for the different testing frameworks. - """ - parser = argparse.ArgumentParser( - description="Run Python testing operations.", - prog=prog, - # ... - ) - cmdsubs = parser.add_subparsers(dest="cmd") - - # Add "run" and "debug" subcommands when ready. - for cmdname in ["discover"]: - sub = cmdsubs.add_parser(cmdname) - subsubs = sub.add_subparsers(dest="tool") - for toolname in sorted(TOOLS): - try: - add_subparser = TOOLS[toolname]["_add_subparser"] - except KeyError: - continue - subsub = add_subparser(cmdname, toolname, subsubs) - if cmdname == "discover": - subsub.add_argument("--simple", action="store_true") - subsub.add_argument( - "--no-hide-stdio", dest="hidestdio", action="store_false" - ) - subsub.add_argument("--pretty", action="store_true") - - # Parse the args! - if "--" in argv: - seppos = argv.index("--") - toolargs = argv[seppos + 1 :] - argv = argv[:seppos] - else: - toolargs = [] - args = parser.parse_args(argv) - ns = vars(args) - - cmd = ns.pop("cmd") - if not cmd: - parser.error("missing command") - - tool = ns.pop("tool") - if not tool: - parser.error("missing tool") - - return tool, cmd, ns, toolargs - - -def main( - toolname, - cmdname, - subargs, - toolargs, - # internal args (for testing): - _tools=TOOLS, - _reporters=REPORTERS, -): - try: - tool = _tools[toolname] - except KeyError: - raise UnsupportedToolError(toolname) - - try: - run = tool[cmdname] - report_result = _reporters[cmdname] - except KeyError: - raise UnsupportedCommandError(cmdname) - - parents, result = run(toolargs, **subargs) - report_result(result, parents, **subargs) - - -if __name__ == "__main__": - tool, cmd, subargs, toolargs = parse_args() - main(tool, cmd, subargs, toolargs) diff --git a/pythonFiles/testing_tools/adapter/discovery.py b/pythonFiles/testing_tools/adapter/discovery.py deleted file mode 100644 index 798aea1e93f1..000000000000 --- a/pythonFiles/testing_tools/adapter/discovery.py +++ /dev/null @@ -1,117 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import, print_function - -import re - -from .util import fix_fileid, DIRNAME, NORMCASE -from .info import ParentInfo - - -FILE_ID_RE = re.compile( - r""" - ^ - (?: - ( .* [.] (?: py | txt ) \b ) # .txt for doctest files - ( [^.] .* )? - ) - $ - """, - re.VERBOSE, -) - - -def fix_nodeid( - nodeid, - kind, - rootdir=None, - # *, - _fix_fileid=fix_fileid, -): - if not nodeid: - raise ValueError("missing nodeid") - if nodeid == ".": - return nodeid - - fileid = nodeid - remainder = "" - if kind not in ("folder", "file"): - m = FILE_ID_RE.match(nodeid) - if m: - fileid, remainder = m.groups() - elif len(nodeid) > 1: - fileid = nodeid[:2] - remainder = nodeid[2:] - fileid = _fix_fileid(fileid, rootdir) - return fileid + (remainder or "") - - -class DiscoveredTests(object): - """A container for the discovered tests and their parents.""" - - def __init__(self): - self.reset() - - def __len__(self): - return len(self._tests) - - def __getitem__(self, index): - return self._tests[index] - - @property - def parents(self): - return sorted( - self._parents.values(), - # Sort by (name, id). - key=lambda p: (NORMCASE(p.root or p.name), p.id), - ) - - def reset(self): - """Clear out any previously discovered tests.""" - self._parents = {} - self._tests = [] - - def add_test(self, test, parents): - """Add the given test and its parents.""" - parentid = self._ensure_parent(test.path, parents) - # Updating the parent ID and the test ID aren't necessary if the - # provided test and parents (from the test collector) are - # properly generated. However, we play it safe here. - test = test._replace( - # Clean up the ID. - id=fix_nodeid(test.id, "test", test.path.root), - parentid=parentid, - ) - self._tests.append(test) - - def _ensure_parent( - self, - path, - parents, - # *, - _dirname=DIRNAME, - ): - rootdir = path.root - relpath = path.relfile - - _parents = iter(parents) - nodeid, name, kind = next(_parents) - # As in add_test(), the node ID *should* already be correct. - nodeid = fix_nodeid(nodeid, kind, rootdir) - _parentid = nodeid - for parentid, parentname, parentkind in _parents: - # As in add_test(), the parent ID *should* already be correct. - parentid = fix_nodeid(parentid, kind, rootdir) - if kind in ("folder", "file"): - info = ParentInfo(nodeid, kind, name, rootdir, relpath, parentid) - relpath = _dirname(relpath) - else: - info = ParentInfo(nodeid, kind, name, rootdir, None, parentid) - self._parents[(rootdir, nodeid)] = info - nodeid, name, kind = parentid, parentname, parentkind - assert nodeid == "." - info = ParentInfo(nodeid, kind, name=rootdir) - self._parents[(rootdir, nodeid)] = info - - return _parentid diff --git a/pythonFiles/testing_tools/adapter/errors.py b/pythonFiles/testing_tools/adapter/errors.py deleted file mode 100644 index 3e6ae5189cb8..000000000000 --- a/pythonFiles/testing_tools/adapter/errors.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - - -class UnsupportedToolError(ValueError): - def __init__(self, tool): - msg = "unsupported tool {!r}".format(tool) - super(UnsupportedToolError, self).__init__(msg) - self.tool = tool - - -class UnsupportedCommandError(ValueError): - def __init__(self, cmd): - msg = "unsupported cmd {!r}".format(cmd) - super(UnsupportedCommandError, self).__init__(msg) - self.cmd = cmd diff --git a/pythonFiles/testing_tools/adapter/info.py b/pythonFiles/testing_tools/adapter/info.py deleted file mode 100644 index f4ab602d8f18..000000000000 --- a/pythonFiles/testing_tools/adapter/info.py +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from collections import namedtuple - - -class TestPath(namedtuple("TestPath", "root relfile func sub")): - """Where to find a single test.""" - - def __new__(cls, root, relfile, func, sub=None): - self = super(TestPath, cls).__new__( - cls, - str(root) if root else None, - str(relfile) if relfile else None, - str(func) if func else None, - [str(s) for s in sub] if sub else None, - ) - return self - - def __init__(self, *args, **kwargs): - if self.root is None: - raise TypeError("missing id") - if self.relfile is None: - raise TypeError("missing kind") - # self.func may be None (e.g. for doctests). - # self.sub may be None. - - -class ParentInfo(namedtuple("ParentInfo", "id kind name root relpath parentid")): - - KINDS = ("folder", "file", "suite", "function", "subtest") - - def __new__(cls, id, kind, name, root=None, relpath=None, parentid=None): - self = super(ParentInfo, cls).__new__( - cls, - id=str(id) if id else None, - kind=str(kind) if kind else None, - name=str(name) if name else None, - root=str(root) if root else None, - relpath=str(relpath) if relpath else None, - parentid=str(parentid) if parentid else None, - ) - return self - - def __init__(self, *args, **kwargs): - if self.id is None: - raise TypeError("missing id") - if self.kind is None: - raise TypeError("missing kind") - if self.kind not in self.KINDS: - raise ValueError("unsupported kind {!r}".format(self.kind)) - if self.name is None: - raise TypeError("missing name") - if self.root is None: - if self.parentid is not None or self.kind != "folder": - raise TypeError("missing root") - if self.relpath is not None: - raise TypeError("unexpected relpath {}".format(self.relpath)) - elif self.parentid is None: - raise TypeError("missing parentid") - elif self.relpath is None and self.kind in ("folder", "file"): - raise TypeError("missing relpath") - - -class TestInfo(namedtuple("TestInfo", "id name path source markers parentid kind")): - """Info for a single test.""" - - MARKERS = ("skip", "skip-if", "expected-failure") - KINDS = ("function", "doctest") - - def __new__(cls, id, name, path, source, markers, parentid, kind="function"): - self = super(TestInfo, cls).__new__( - cls, - str(id) if id else None, - str(name) if name else None, - path or None, - str(source) if source else None, - [str(marker) for marker in markers or ()], - str(parentid) if parentid else None, - str(kind) if kind else None, - ) - return self - - def __init__(self, *args, **kwargs): - if self.id is None: - raise TypeError("missing id") - if self.name is None: - raise TypeError("missing name") - if self.path is None: - raise TypeError("missing path") - if self.source is None: - raise TypeError("missing source") - else: - srcfile, _, lineno = self.source.rpartition(":") - if not srcfile or not lineno or int(lineno) < 0: - raise ValueError("bad source {!r}".format(self.source)) - if self.markers: - badmarkers = [m for m in self.markers if m not in self.MARKERS] - if badmarkers: - raise ValueError("unsupported markers {!r}".format(badmarkers)) - if self.parentid is None: - raise TypeError("missing parentid") - if self.kind is None: - raise TypeError("missing kind") - elif self.kind not in self.KINDS: - raise ValueError("unsupported kind {!r}".format(self.kind)) - - @property - def root(self): - return self.path.root - - @property - def srcfile(self): - return self.source.rpartition(":")[0] - - @property - def lineno(self): - return int(self.source.rpartition(":")[-1]) diff --git a/pythonFiles/testing_tools/adapter/pytest/__init__.py b/pythonFiles/testing_tools/adapter/pytest/__init__.py deleted file mode 100644 index e894f7bcdb8e..000000000000 --- a/pythonFiles/testing_tools/adapter/pytest/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import - -from ._cli import add_subparser as add_cli_subparser -from ._discovery import discover diff --git a/pythonFiles/testing_tools/adapter/pytest/_cli.py b/pythonFiles/testing_tools/adapter/pytest/_cli.py deleted file mode 100644 index 3d3eec09a199..000000000000 --- a/pythonFiles/testing_tools/adapter/pytest/_cli.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import - -from ..errors import UnsupportedCommandError - - -def add_subparser(cmd, name, parent): - """Add a new subparser to the given parent and add args to it.""" - parser = parent.add_parser(name) - if cmd == "discover": - # For now we don't have any tool-specific CLI options to add. - pass - else: - raise UnsupportedCommandError(cmd) - return parser diff --git a/pythonFiles/testing_tools/adapter/pytest/_discovery.py b/pythonFiles/testing_tools/adapter/pytest/_discovery.py deleted file mode 100644 index 51c94527302d..000000000000 --- a/pythonFiles/testing_tools/adapter/pytest/_discovery.py +++ /dev/null @@ -1,109 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import, print_function - -import sys - -import pytest - -from .. import util, discovery -from ._pytest_item import parse_item - - -def discover( - pytestargs=None, - hidestdio=False, - # *, - _pytest_main=pytest.main, - _plugin=None, - **_ignored -): - """Return the results of test discovery.""" - if _plugin is None: - _plugin = TestCollector() - - pytestargs = _adjust_pytest_args(pytestargs) - # We use this helper rather than "-pno:terminal" due to possible - # platform-dependent issues. - with (util.hide_stdio() if hidestdio else util.noop_cm()) as stdio: - ec = _pytest_main(pytestargs, [_plugin]) - # See: https://docs.pytest.org/en/latest/usage.html#possible-exit-codes - if ec == 5: - # No tests were discovered. - pass - elif ec != 0: - print( - "equivalent command: {} -m pytest {}".format( - sys.executable, util.shlex_unsplit(pytestargs) - ) - ) - if hidestdio: - print(stdio.getvalue(), file=sys.stderr) - sys.stdout.flush() - raise Exception("pytest discovery failed (exit code {})".format(ec)) - if not _plugin._started: - print( - "equivalent command: {} -m pytest {}".format( - sys.executable, util.shlex_unsplit(pytestargs) - ) - ) - if hidestdio: - print(stdio.getvalue(), file=sys.stderr) - sys.stdout.flush() - raise Exception("pytest discovery did not start") - return ( - _plugin._tests.parents, - list(_plugin._tests), - ) - - -def _adjust_pytest_args(pytestargs): - """Return a corrected copy of the given pytest CLI args.""" - pytestargs = list(pytestargs) if pytestargs else [] - # Duplicate entries should be okay. - pytestargs.insert(0, "--collect-only") - # TODO: pull in code from: - # src/client/testing/pytest/services/discoveryService.ts - # src/client/testing/pytest/services/argsService.ts - return pytestargs - - -class TestCollector(object): - """This is a pytest plugin that collects the discovered tests.""" - - @classmethod - def parse_item(cls, item): - return parse_item(item) - - def __init__(self, tests=None): - if tests is None: - tests = discovery.DiscoveredTests() - self._tests = tests - self._started = False - - # Relevant plugin hooks: - # https://docs.pytest.org/en/latest/reference.html#collection-hooks - - def pytest_collection_modifyitems(self, session, config, items): - self._started = True - self._tests.reset() - for item in items: - test, parents = self.parse_item(item) - if test is not None: - self._tests.add_test(test, parents) - - # This hook is not specified in the docs, so we also provide - # the "modifyitems" hook just in case. - def pytest_collection_finish(self, session): - self._started = True - try: - items = session.items - except AttributeError: - # TODO: Is there an alternative? - return - self._tests.reset() - for item in items: - test, parents = self.parse_item(item) - if test is not None: - self._tests.add_test(test, parents) diff --git a/pythonFiles/testing_tools/adapter/pytest/_pytest_item.py b/pythonFiles/testing_tools/adapter/pytest/_pytest_item.py deleted file mode 100644 index 87e439e30c7e..000000000000 --- a/pythonFiles/testing_tools/adapter/pytest/_pytest_item.py +++ /dev/null @@ -1,604 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. -""" -During "collection", pytest finds all the tests it supports. These are -called "items". The process is top-down, mostly tracing down through -the file system. Aside from its own machinery, pytest supports hooks -that find tests. Effectively, pytest starts with a set of "collectors"; -objects that can provide a list of tests and sub-collectors. All -collectors in the resulting tree are visited and the tests aggregated. -For the most part, each test's (and collector's) parent is identified -as the collector that collected it. - -Collectors and items are collectively identified as "nodes". The pytest -API relies on collector and item objects providing specific methods and -attributes. In addition to corresponding base classes, pytest provides -a number of concrete implementations. - -The following are the known pytest node types: - - Node - Collector - FSCollector - Session (the top-level collector) - File - Module - Package - DoctestTextfile - DoctestModule - PyCollector - (Module) - (...) - Class - UnitTestCase - Instance - Item - Function - TestCaseFunction - DoctestItem - -Here are the unique attrs for those classes: - - Node - name - nodeid (readonly) - config - session - (parent) - the parent node - (fspath) - the file from which the node was collected - ---- - own_marksers - explicit markers (e.g. with @pytest.mark()) - keywords - extra_keyword_matches - - Item - location - where the actual test source code is: (relfspath, lno, fullname) - user_properties - - PyCollector - module - class - instance - obj - - Function - module - class - instance - obj - function - (callspec) - (fixturenames) - funcargs - originalname - w/o decorations, e.g. [...] for parameterized - - DoctestItem - dtest - obj - -When parsing an item, we make use of the following attributes: - -* name -* nodeid -* __class__ - + __name__ -* fspath -* location -* function - + __name__ - + __code__ - + __closure__ -* own_markers -""" - -from __future__ import absolute_import, print_function - -import sys - -import pytest -import _pytest.doctest -import _pytest.unittest - -from ..info import TestInfo, TestPath -from ..util import fix_fileid, PATH_SEP, NORMCASE - - -def should_never_reach_here(item, **extra): - """Indicates a code path we should never reach.""" - print("The Python extension has run into an unexpected situation") - print("while processing a pytest node during test discovery. Please") - print("Please open an issue at:") - print(" https://github.com/microsoft/vscode-python/issues") - print("and paste the following output there.") - print() - for field, info in _summarize_item(item): - print("{}: {}".format(field, info)) - if extra: - print() - print("extra info:") - for name, info in extra.items(): - print("{:10}".format(name + ":"), end="") - if isinstance(info, str): - print(info) - else: - try: - print(*info) - except TypeError: - print(info) - print() - print("traceback:") - import traceback - - traceback.print_stack() - - msg = "Unexpected pytest node (see printed output)." - exc = NotImplementedError(msg) - exc.item = item - return exc - - -def parse_item( - item, - # *, - _get_item_kind=(lambda *a: _get_item_kind(*a)), - _parse_node_id=(lambda *a: _parse_node_id(*a)), - _split_fspath=(lambda *a: _split_fspath(*a)), - _get_location=(lambda *a: _get_location(*a)), -): - """Return (TestInfo, [suite ID]) for the given item. - - The suite IDs, if any, are in parent order with the item's direct - parent at the beginning. The parent of the last suite ID (or of - the test if there are no suites) is the file ID, which corresponds - to TestInfo.path. - - """ - # _debug_item(item, showsummary=True) - kind, _ = _get_item_kind(item) - # Skip plugin generated tests - if kind is None: - return None, None - (nodeid, parents, fileid, testfunc, parameterized) = _parse_node_id( - item.nodeid, kind - ) - # Note: testfunc does not necessarily match item.function.__name__. - # This can result from importing a test function from another module. - - # Figure out the file. - testroot, relfile = _split_fspath(str(item.fspath), fileid, item) - location, fullname = _get_location(item, testroot, relfile) - if kind == "function": - if testfunc and fullname != testfunc + parameterized: - raise should_never_reach_here( - item, - fullname=fullname, - testfunc=testfunc, - parameterized=parameterized, - # ... - ) - elif kind == "doctest": - if testfunc and fullname != testfunc and fullname != "[doctest] " + testfunc: - raise should_never_reach_here( - item, - fullname=fullname, - testfunc=testfunc, - # ... - ) - testfunc = None - - # Sort out the parent. - if parents: - parentid, _, _ = parents[0] - else: - parentid = None - - # Sort out markers. - # See: https://docs.pytest.org/en/latest/reference.html#marks - markers = set() - for marker in getattr(item, "own_markers", []): - if marker.name == "parameterize": - # We've already covered these. - continue - elif marker.name == "skip": - markers.add("skip") - elif marker.name == "skipif": - markers.add("skip-if") - elif marker.name == "xfail": - markers.add("expected-failure") - # We can add support for other markers as we need them? - - test = TestInfo( - id=nodeid, - name=item.name, - path=TestPath( - root=testroot, - relfile=relfile, - func=testfunc, - sub=[parameterized] if parameterized else None, - ), - source=location, - markers=sorted(markers) if markers else None, - parentid=parentid, - ) - if parents and parents[-1] == (".", None, "folder"): # This should always be true? - parents[-1] = (".", testroot, "folder") - return test, parents - - -def _split_fspath( - fspath, - fileid, - item, - # *, - _normcase=NORMCASE, -): - """Return (testroot, relfile) for the given fspath. - - "relfile" will match "fileid". - """ - # "fileid" comes from nodeid and is always relative to the testroot - # (with a "./" prefix). There are no guarantees about casing, so we - # normcase just be to sure. - relsuffix = fileid[1:] # Drop (only) the "." prefix. - if not _normcase(fspath).endswith(_normcase(relsuffix)): - raise should_never_reach_here( - item, - fspath=fspath, - fileid=fileid, - # ... - ) - testroot = fspath[: -len(fileid) + 1] # Ignore the "./" prefix. - relfile = "." + fspath[-len(fileid) + 1 :] # Keep the pathsep. - return testroot, relfile - - -def _get_location( - item, - testroot, - relfile, - # *, - _matches_relfile=(lambda *a: _matches_relfile(*a)), - _is_legacy_wrapper=(lambda *a: _is_legacy_wrapper(*a)), - _unwrap_decorator=(lambda *a: _unwrap_decorator(*a)), - _pathsep=PATH_SEP, -): - """Return (loc str, fullname) for the given item.""" - # When it comes to normcase, we favor relfile (from item.fspath) - # over item.location in this function. - - srcfile, lineno, fullname = item.location - if _matches_relfile(srcfile, testroot, relfile): - srcfile = relfile - else: - # pytest supports discovery of tests imported from other - # modules. This is reflected by a different filename - # in item.location. - - if _is_legacy_wrapper(srcfile): - srcfile = relfile - unwrapped = _unwrap_decorator(item.function) - if unwrapped is None: - # It was an invalid legacy wrapper so we just say - # "somewhere in relfile". - lineno = None - else: - _srcfile, lineno = unwrapped - if not _matches_relfile(_srcfile, testroot, relfile): - # For legacy wrappers we really expect the wrapped - # function to be in relfile. So here we ignore any - # other file and just say "somewhere in relfile". - lineno = None - elif _matches_relfile(srcfile, testroot, relfile): - srcfile = relfile - # Otherwise we just return the info from item.location as-is. - - if not srcfile.startswith("." + _pathsep): - srcfile = "." + _pathsep + srcfile - - if lineno is None: - lineno = -1 # i.e. "unknown" - - # from pytest, line numbers are 0-based - location = "{}:{}".format(srcfile, int(lineno) + 1) - return location, fullname - - -def _matches_relfile( - srcfile, - testroot, - relfile, - # *, - _normcase=NORMCASE, - _pathsep=PATH_SEP, -): - """Return True if "srcfile" matches the given relfile.""" - testroot = _normcase(testroot) - srcfile = _normcase(srcfile) - relfile = _normcase(relfile) - if srcfile == relfile: - return True - elif srcfile == relfile[len(_pathsep) + 1 :]: - return True - elif srcfile == testroot + relfile[1:]: - return True - else: - return False - - -def _is_legacy_wrapper( - srcfile, - # *, - _pathsep=PATH_SEP, - _pyversion=sys.version_info, -): - """Return True if the test might be wrapped. - - In Python 2 unittest's decorators (e.g. unittest.skip) do not wrap - properly, so we must manually unwrap them. - """ - if _pyversion > (3,): - return False - if (_pathsep + "unittest" + _pathsep + "case.py") not in srcfile: - return False - return True - - -def _unwrap_decorator(func): - """Return (filename, lineno) for the func the given func wraps. - - If the wrapped func cannot be identified then return None. Likewise - for the wrapped filename. "lineno" is None if it cannot be found - but the filename could. - """ - try: - func = func.__closure__[0].cell_contents - except (IndexError, AttributeError): - return None - else: - if not callable(func): - return None - try: - filename = func.__code__.co_filename - except AttributeError: - return None - else: - try: - lineno = func.__code__.co_firstlineno - 1 - except AttributeError: - return (filename, None) - else: - return filename, lineno - - -def _parse_node_id( - testid, - kind, - # *, - _iter_nodes=(lambda *a: _iter_nodes(*a)), -): - """Return the components of the given node ID, in heirarchical order.""" - nodes = iter(_iter_nodes(testid, kind)) - - testid, name, kind = next(nodes) - parents = [] - parameterized = None - if kind == "doctest": - parents = list(nodes) - fileid, _, _ = parents[0] - return testid, parents, fileid, name, parameterized - elif kind is None: - fullname = None - else: - if kind == "subtest": - node = next(nodes) - parents.append(node) - funcid, funcname, _ = node - parameterized = testid[len(funcid) :] - elif kind == "function": - funcname = name - else: - raise should_never_reach_here( - testid, - kind=kind, - # ... - ) - fullname = funcname - - for node in nodes: - parents.append(node) - parentid, name, kind = node - if kind == "file": - fileid = parentid - break - elif fullname is None: - # We don't guess how to interpret the node ID for these tests. - continue - elif kind == "suite": - fullname = name + "." + fullname - else: - raise should_never_reach_here( - testid, - node=node, - # ... - ) - else: - fileid = None - parents.extend(nodes) # Add the rest in as-is. - - return ( - testid, - parents, - fileid, - fullname, - parameterized or "", - ) - - -def _iter_nodes( - testid, - kind, - # *, - _normalize_test_id=(lambda *a: _normalize_test_id(*a)), - _normcase=NORMCASE, - _pathsep=PATH_SEP, -): - """Yield (nodeid, name, kind) for the given node ID and its parents.""" - nodeid, testid = _normalize_test_id(testid, kind) - if len(nodeid) > len(testid): - testid = "." + _pathsep + testid - - if kind == "function" and nodeid.endswith("]"): - funcid, sep, parameterized = nodeid.partition("[") - if not sep: - raise should_never_reach_here( - nodeid, - # ... - ) - yield (nodeid, sep + parameterized, "subtest") - nodeid = funcid - - parentid, _, name = nodeid.rpartition("::") - if not parentid: - if kind is None: - # This assumes that plugins can generate nodes that do not - # have a parent. All the builtin nodes have one. - yield (nodeid, name, kind) - return - # We expect at least a filename and a name. - raise should_never_reach_here( - nodeid, - # ... - ) - yield (nodeid, name, kind) - - # Extract the suites. - while "::" in parentid: - suiteid = parentid - parentid, _, name = parentid.rpartition("::") - yield (suiteid, name, "suite") - - # Extract the file and folders. - fileid = parentid - raw = testid[: len(fileid)] - _parentid, _, filename = _normcase(fileid).rpartition(_pathsep) - parentid = fileid[: len(_parentid)] - raw, name = raw[: len(_parentid)], raw[-len(filename) :] - yield (fileid, name, "file") - # We're guaranteed at least one (the test root). - while _pathsep in _normcase(parentid): - folderid = parentid - _parentid, _, foldername = _normcase(folderid).rpartition(_pathsep) - parentid = folderid[: len(_parentid)] - raw, name = raw[: len(parentid)], raw[-len(foldername) :] - yield (folderid, name, "folder") - # We set the actual test root later at the bottom of parse_item(). - testroot = None - yield (parentid, testroot, "folder") - - -def _normalize_test_id( - testid, - kind, - # *, - _fix_fileid=fix_fileid, - _pathsep=PATH_SEP, -): - """Return the canonical form for the given node ID.""" - while "::()::" in testid: - testid = testid.replace("::()::", "::") - if kind is None: - return testid, testid - orig = testid - - # We need to keep the testid as-is, or else pytest won't recognize - # it when we try to use it later (e.g. to run a test). The only - # exception is that we add a "./" prefix for relative paths. - # Note that pytest always uses "/" as the path separator in IDs. - fileid, sep, remainder = testid.partition("::") - fileid = _fix_fileid(fileid) - if not fileid.startswith("./"): # Absolute "paths" not expected. - raise should_never_reach_here( - testid, - fileid=fileid, - # ... - ) - testid = fileid + sep + remainder - - return testid, orig - - -def _get_item_kind(item): - """Return (kind, isunittest) for the given item.""" - if isinstance(item, _pytest.doctest.DoctestItem): - return "doctest", False - elif isinstance(item, _pytest.unittest.TestCaseFunction): - return "function", True - elif isinstance(item, pytest.Function): - # We *could* be more specific, e.g. "method", "subtest". - return "function", False - else: - return None, False - - -############################# -# useful for debugging - -_FIELDS = [ - "nodeid", - "kind", - "class", - "name", - "fspath", - "location", - "function", - "markers", - "user_properties", - "attrnames", -] - - -def _summarize_item(item): - if not hasattr(item, "nodeid"): - yield "nodeid", item - return - - for field in _FIELDS: - try: - if field == "kind": - yield field, _get_item_kind(item) - elif field == "class": - yield field, item.__class__.__name__ - elif field == "markers": - yield field, item.own_markers - # yield field, list(item.iter_markers()) - elif field == "attrnames": - yield field, dir(item) - else: - yield field, getattr(item, field, "") - except Exception as exc: - yield field, "".format(exc) - - -def _debug_item(item, showsummary=False): - item._debugging = True - try: - summary = dict(_summarize_item(item)) - finally: - item._debugging = False - - if showsummary: - print(item.nodeid) - for key in ( - "kind", - "class", - "name", - "fspath", - "location", - "func", - "markers", - "props", - ): - print(" {:12} {}".format(key, summary[key])) - print() - - return summary diff --git a/pythonFiles/testing_tools/adapter/report.py b/pythonFiles/testing_tools/adapter/report.py deleted file mode 100644 index bacdef7b9a00..000000000000 --- a/pythonFiles/testing_tools/adapter/report.py +++ /dev/null @@ -1,94 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import print_function - -import json - - -def report_discovered( - tests, - parents, - # *, - pretty=False, - simple=False, - _send=print, - **_ignored -): - """Serialize the discovered tests and write to stdout.""" - if simple: - data = [ - { - "id": test.id, - "name": test.name, - "testroot": test.path.root, - "relfile": test.path.relfile, - "lineno": test.lineno, - "testfunc": test.path.func, - "subtest": test.path.sub or None, - "markers": test.markers or [], - } - for test in tests - ] - else: - byroot = {} - for parent in parents: - rootdir = parent.name if parent.root is None else parent.root - try: - root = byroot[rootdir] - except KeyError: - root = byroot[rootdir] = { - "id": rootdir, - "parents": [], - "tests": [], - } - if not parent.root: - root["id"] = parent.id - continue - root["parents"].append( - { - # "id" must match what the testing framework recognizes. - "id": parent.id, - "kind": parent.kind, - "name": parent.name, - "parentid": parent.parentid, - } - ) - if parent.relpath is not None: - root["parents"][-1]["relpath"] = parent.relpath - for test in tests: - # We are guaranteed that the parent was added. - root = byroot[test.path.root] - testdata = { - # "id" must match what the testing framework recognizes. - "id": test.id, - "name": test.name, - # TODO: Add a "kind" field - # (e.g. "unittest", "function", "doctest") - "source": test.source, - "markers": test.markers or [], - "parentid": test.parentid, - } - root["tests"].append(testdata) - data = [ - { - "rootid": byroot[root]["id"], - "root": root, - "parents": byroot[root]["parents"], - "tests": byroot[root]["tests"], - } - for root in sorted(byroot) - ] - - kwargs = {} - if pretty: - # human-formatted - kwargs = dict( - sort_keys=True, - indent=4, - separators=(",", ": "), - # ... - ) - serialized = json.dumps(data, **kwargs) - - _send(serialized) diff --git a/pythonFiles/testing_tools/adapter/util.py b/pythonFiles/testing_tools/adapter/util.py deleted file mode 100644 index 1e650522f64c..000000000000 --- a/pythonFiles/testing_tools/adapter/util.py +++ /dev/null @@ -1,230 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import contextlib - -try: - from io import StringIO -except ImportError: - from StringIO import StringIO # 2.7 -import os.path -import sys - - -@contextlib.contextmanager -def noop_cm(): - yield - - -def group_attr_names(attrnames): - grouped = { - "dunder": [], - "private": [], - "constants": [], - "classes": [], - "vars": [], - "other": [], - } - for name in attrnames: - if name.startswith("__") and name.endswith("__"): - group = "dunder" - elif name.startswith("_"): - group = "private" - elif name.isupper(): - group = "constants" - elif name.islower(): - group = "vars" - elif name == name.capitalize(): - group = "classes" - else: - group = "other" - grouped[group].append(name) - return grouped - - -if sys.version_info < (3,): - _str_to_lower = lambda val: val.decode().lower() -else: - _str_to_lower = str.lower - - -############################# -# file paths - -_os_path = os.path -# Uncomment to test Windows behavior on non-windows OS: -# import ntpath as _os_path -PATH_SEP = _os_path.sep -NORMCASE = _os_path.normcase -DIRNAME = _os_path.dirname -BASENAME = _os_path.basename -IS_ABS_PATH = _os_path.isabs -PATH_JOIN = _os_path.join - - -def fix_path( - path, - # *, - _pathsep=PATH_SEP, -): - """Return a platform-appropriate path for the given path.""" - if not path: - return "." - return path.replace("/", _pathsep) - - -def fix_relpath( - path, - # *, - _fix_path=fix_path, - _path_isabs=IS_ABS_PATH, - _pathsep=PATH_SEP, -): - """Return a ./-prefixed, platform-appropriate path for the given path.""" - path = _fix_path(path) - if path in (".", ".."): - return path - if not _path_isabs(path): - if not path.startswith("." + _pathsep): - path = "." + _pathsep + path - return path - - -def _resolve_relpath( - path, - rootdir=None, - # *, - _path_isabs=IS_ABS_PATH, - _normcase=NORMCASE, - _pathsep=PATH_SEP, -): - # "path" is expected to use "/" for its path separator, regardless - # of the provided "_pathsep". - - if path.startswith("./"): - return path[2:] - if not _path_isabs(path): - return path - - # Deal with root-dir-as-fileid. - _, sep, relpath = path.partition("/") - if sep and not relpath.replace("/", ""): - return "" - - if rootdir is None: - return None - rootdir = _normcase(rootdir) - if not rootdir.endswith(_pathsep): - rootdir += _pathsep - - if not _normcase(path).startswith(rootdir): - return None - return path[len(rootdir) :] - - -def fix_fileid( - fileid, - rootdir=None, - # *, - normalize=False, - strictpathsep=None, - _pathsep=PATH_SEP, - **kwargs -): - """Return a pathsep-separated file ID ("./"-prefixed) for the given value. - - The file ID may be absolute. If so and "rootdir" is - provided then make the file ID relative. If absolute but "rootdir" - is not provided then leave it absolute. - """ - if not fileid or fileid == ".": - return fileid - - # We default to "/" (forward slash) as the final path sep, since - # that gives us a consistent, cross-platform result. (Windows does - # actually support "/" as a path separator.) Most notably, node IDs - # from pytest use "/" as the path separator by default. - _fileid = fileid.replace(_pathsep, "/") - - relpath = _resolve_relpath( - _fileid, - rootdir, - _pathsep=_pathsep, - # ... - **kwargs - ) - if relpath: # Note that we treat "" here as an absolute path. - _fileid = "./" + relpath - - if normalize: - if strictpathsep: - raise ValueError("cannot normalize *and* keep strict path separator") - _fileid = _str_to_lower(_fileid) - elif strictpathsep: - # We do not use _normcase since we want to preserve capitalization. - _fileid = _fileid.replace("/", _pathsep) - return _fileid - - -############################# -# stdio - - -@contextlib.contextmanager -def hide_stdio(): - """Swallow stdout and stderr.""" - ignored = StdioStream() - sys.stdout = ignored - sys.stderr = ignored - try: - yield ignored - finally: - sys.stdout = sys.__stdout__ - sys.stderr = sys.__stderr__ - - -if sys.version_info < (3,): - - class StdioStream(StringIO): - def write(self, msg): - StringIO.write(self, msg.decode()) - - -else: - StdioStream = StringIO - - -############################# -# shell - - -def shlex_unsplit(argv): - """Return the shell-safe string for the given arguments. - - This effectively the equivalent of reversing shlex.split(). - """ - argv = [_quote_arg(a) for a in argv] - return " ".join(argv) - - -try: - from shlex import quote as _quote_arg -except ImportError: - - def _quote_arg(arg): - parts = None - for i, c in enumerate(arg): - if c.isspace(): - pass - elif c == '"': - pass - elif c == "'": - c = "'\"'\"'" - else: - continue - if parts is None: - parts = list(arg) - parts[i] = c - if parts is not None: - arg = "'" + "".join(parts) + "'" - return arg diff --git a/pythonFiles/testing_tools/run_adapter.py b/pythonFiles/testing_tools/run_adapter.py deleted file mode 100644 index 1eeef194f8f5..000000000000 --- a/pythonFiles/testing_tools/run_adapter.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -# Replace the "." entry. -import os.path -import sys - -sys.path.insert( - 1, - os.path.dirname( # pythonFiles - os.path.dirname( # pythonFiles/testing_tools - os.path.abspath(__file__) # this file - ) - ), -) - -from testing_tools.adapter.__main__ import parse_args, main - - -if __name__ == "__main__": - tool, cmd, subargs, toolargs = parse_args() - main(tool, cmd, subargs, toolargs) diff --git a/pythonFiles/testlauncher.py b/pythonFiles/testlauncher.py deleted file mode 100644 index 95ca800b9885..000000000000 --- a/pythonFiles/testlauncher.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import os -import sys - - -def parse_argv(): - """Parses arguments for use with the test launcher. - Arguments are: - 1. Working directory. - 2. Test runner, `pytest` or `nose` - 3. Rest of the arguments are passed into the test runner. - """ - - return (sys.argv[1], sys.argv[2], sys.argv[3:]) - - -def run(cwd, testRunner, args): - """Runs the test - cwd -- the current directory to be set - testRunner -- test runner to be used `pytest` or `nose` - args -- arguments passed into the test runner - """ - - sys.path[0] = os.getcwd() - os.chdir(cwd) - - try: - if testRunner == "pytest": - import pytest - - pytest.main(args) - else: - import nose - - nose.run(argv=args) - sys.exit(0) - finally: - pass - - -if __name__ == "__main__": - cwd, testRunner, args = parse_argv() - run(cwd, testRunner, args) diff --git a/pythonFiles/tests/__init__.py b/pythonFiles/tests/__init__.py deleted file mode 100644 index e2e6976acd68..000000000000 --- a/pythonFiles/tests/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. -import os.path - -TEST_ROOT = os.path.dirname(__file__) -SRC_ROOT = os.path.dirname(TEST_ROOT) -PROJECT_ROOT = os.path.dirname(SRC_ROOT) -IPYTHON_ROOT = os.path.join(SRC_ROOT, "ipython") -TESTING_TOOLS_ROOT = os.path.join(SRC_ROOT, "testing_tools") -DEBUG_ADAPTER_ROOT = os.path.join(SRC_ROOT, "debug_adapter") - -PYTHONFILES = os.path.join(SRC_ROOT, "lib", "python") diff --git a/pythonFiles/tests/__main__.py b/pythonFiles/tests/__main__.py deleted file mode 100644 index 14086978c9af..000000000000 --- a/pythonFiles/tests/__main__.py +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import argparse -import sys - -import pytest - -from . import DEBUG_ADAPTER_ROOT, IPYTHON_ROOT, SRC_ROOT, TEST_ROOT, TESTING_TOOLS_ROOT - - -def parse_args(): - parser = argparse.ArgumentParser() - # To mark a test as functional: (decorator) @pytest.mark.functional - parser.add_argument( - "--functional", dest="markers", action="append_const", const="functional" - ) - parser.add_argument( - "--no-functional", dest="markers", action="append_const", const="not functional" - ) - args, remainder = parser.parse_known_args() - - ns = vars(args) - - return ns, remainder - - -def main(pytestargs, markers=None): - sys.path.insert(1, IPYTHON_ROOT) - sys.path.insert(1, TESTING_TOOLS_ROOT) - sys.path.insert(1, DEBUG_ADAPTER_ROOT) - - pytestargs = ["--rootdir", SRC_ROOT, TEST_ROOT] + pytestargs - for marker in reversed(markers or ()): - pytestargs.insert(0, marker) - pytestargs.insert(0, "-m") - - ec = pytest.main(pytestargs) - return ec - - -if __name__ == "__main__": - mainkwargs, pytestargs = parse_args() - ec = main(pytestargs, **mainkwargs) - sys.exit(ec) diff --git a/pythonFiles/tests/debug_adapter/test_install_debugpy.py b/pythonFiles/tests/debug_adapter/test_install_debugpy.py deleted file mode 100644 index 7a5354ba5ed7..000000000000 --- a/pythonFiles/tests/debug_adapter/test_install_debugpy.py +++ /dev/null @@ -1,36 +0,0 @@ -import os -import pytest -import subprocess -import sys - - -def _check_binaries(dir_path): - expected_endswith = ( - "win_amd64.pyd", - "win32.pyd", - "darwin.so", - "i386-linux-gnu.so", - "x86_64-linux-gnu.so", - ) - - binaries = list(p for p in os.listdir(dir_path) if p.endswith(expected_endswith)) - - assert len(binaries) == len(expected_endswith) - - -@pytest.mark.skipif( - sys.version_info[:2] != (3, 7), reason="DEBUGPY wheels shipped for Python 3.7 only", -) -def test_install_debugpy(tmpdir): - import install_debugpy - - install_debugpy.main(str(tmpdir)) - dir_path = os.path.join( - str(tmpdir), "debugpy", "_vendored", "pydevd", "_pydevd_bundle" - ) - _check_binaries(dir_path) - - dir_path = os.path.join( - str(tmpdir), "debugpy", "_vendored", "pydevd", "_pydevd_frame_eval" - ) - _check_binaries(dir_path) diff --git a/pythonFiles/tests/ipython/getJupyterVariableList.py b/pythonFiles/tests/ipython/getJupyterVariableList.py deleted file mode 100644 index d9b0778fa2d2..000000000000 --- a/pythonFiles/tests/ipython/getJupyterVariableList.py +++ /dev/null @@ -1,38 +0,0 @@ -# Query Jupyter server for defined variables list -# Tested on 2.7 and 3.6 -from sys import getsizeof as _VSCODE_getsizeof -import json as _VSCODE_json -from IPython import get_ipython as _VSCODE_get_ipython - -# _VSCode_supportsDataExplorer will contain our list of data explorer supported types -_VSCode_supportsDataExplorer = "['list', 'Series', 'dict', 'ndarray', 'DataFrame']" - -# who_ls is a Jupyter line magic to fetch currently defined vars -_VSCode_JupyterVars = _VSCODE_get_ipython().run_line_magic("who_ls", "") - -_VSCode_output = [] -for _VSCode_var in _VSCode_JupyterVars: - try: - _VSCode_type = type(eval(_VSCode_var)) - _VSCode_output.append( - { - "name": _VSCode_var, - "type": _VSCode_type.__name__, - "size": _VSCODE_getsizeof(_VSCode_var), - "supportsDataExplorer": _VSCode_type.__name__ - in _VSCode_supportsDataExplorer, - } - ) - del _VSCode_type - del _VSCode_var - except: - pass - -print(_VSCODE_json.dumps(_VSCode_output)) - -del _VSCODE_get_ipython -del _VSCode_output -del _VSCode_supportsDataExplorer -del _VSCode_JupyterVars -del _VSCODE_json -del _VSCODE_getsizeof diff --git a/pythonFiles/tests/ipython/getJupyterVariableValue.py b/pythonFiles/tests/ipython/getJupyterVariableValue.py deleted file mode 100644 index 6110d8653dee..000000000000 --- a/pythonFiles/tests/ipython/getJupyterVariableValue.py +++ /dev/null @@ -1,475 +0,0 @@ -import sys as VC_sys -import locale as VC_locale - -VC_IS_PY2 = VC_sys.version_info < (3,) - -# SafeRepr based on the pydevd implementation -# https://github.com/microsoft/ptvsd/blob/master/src/ptvsd/_vendored/pydevd/_pydevd_bundle/pydevd_safe_repr.py -class VC_SafeRepr(object): - # Py3 compat - alias unicode to str, and xrange to range - try: - unicode # noqa - except NameError: - unicode = str - try: - xrange # noqa - except NameError: - xrange = range - - # Can be used to override the encoding from locale.getpreferredencoding() - locale_preferred_encoding = None - - # Can be used to override the encoding used for sys.stdout.encoding - sys_stdout_encoding = None - - # String types are truncated to maxstring_outer when at the outer- - # most level, and truncated to maxstring_inner characters inside - # collections. - maxstring_outer = 2 ** 16 - maxstring_inner = 30 - if not VC_IS_PY2: - string_types = (str, bytes) - set_info = (set, "{", "}", False) - frozenset_info = (frozenset, "frozenset({", "})", False) - int_types = (int,) - long_iter_types = (list, tuple, bytearray, range, dict, set, frozenset) - else: - string_types = (str, unicode) - set_info = (set, "set([", "])", False) - frozenset_info = (frozenset, "frozenset([", "])", False) - int_types = (int, long) # noqa - long_iter_types = ( - list, - tuple, - bytearray, - xrange, - dict, - set, - frozenset, - buffer, - ) # noqa - - # Collection types are recursively iterated for each limit in - # maxcollection. - maxcollection = (15, 10) - - # Specifies type, prefix string, suffix string, and whether to include a - # comma if there is only one element. (Using a sequence rather than a - # mapping because we use isinstance() to determine the matching type.) - collection_types = [ - (tuple, "(", ")", True), - (list, "[", "]", False), - frozenset_info, - set_info, - ] - try: - from collections import deque - - collection_types.append((deque, "deque([", "])", False)) - except Exception: - pass - - # type, prefix string, suffix string, item prefix string, - # item key/value separator, item suffix string - dict_types = [(dict, "{", "}", "", ": ", "")] - try: - from collections import OrderedDict - - dict_types.append((OrderedDict, "OrderedDict([", "])", "(", ", ", ")")) - except Exception: - pass - - # All other types are treated identically to strings, but using - # different limits. - maxother_outer = 2 ** 16 - maxother_inner = 30 - - convert_to_hex = False - raw_value = False - - def __call__(self, obj): - try: - if VC_IS_PY2: - return "".join( - (x.encode("utf-8") if isinstance(x, unicode) else x) - for x in self._repr(obj, 0) - ) - else: - return "".join(self._repr(obj, 0)) - except Exception as e: - try: - return "An exception was raised: " + str(e) - except Exception: - return "An exception was raised" - - def _repr(self, obj, level): - """Returns an iterable of the parts in the final repr string.""" - - try: - obj_repr = type(obj).__repr__ - except Exception: - obj_repr = None - - def has_obj_repr(t): - r = t.__repr__ - try: - return obj_repr == r - except Exception: - return obj_repr is r - - for t, prefix, suffix, comma in self.collection_types: - if isinstance(obj, t) and has_obj_repr(t): - return self._repr_iter(obj, level, prefix, suffix, comma) - - for ( - t, - prefix, - suffix, - item_prefix, - item_sep, - item_suffix, - ) in self.dict_types: # noqa - if isinstance(obj, t) and has_obj_repr(t): - return self._repr_dict( - obj, level, prefix, suffix, item_prefix, item_sep, item_suffix - ) - - for t in self.string_types: - if isinstance(obj, t) and has_obj_repr(t): - return self._repr_str(obj, level) - - if self._is_long_iter(obj): - return self._repr_long_iter(obj) - - return self._repr_other(obj, level) - - # Determines whether an iterable exceeds the limits set in - # maxlimits, and is therefore unsafe to repr(). - def _is_long_iter(self, obj, level=0): - try: - # Strings have their own limits (and do not nest). Because - # they don't have __iter__ in 2.x, this check goes before - # the next one. - if isinstance(obj, self.string_types): - return len(obj) > self.maxstring_inner - - # If it's not an iterable (and not a string), it's fine. - if not hasattr(obj, "__iter__"): - return False - - # If it's not an instance of these collection types then it - # is fine. Note: this is a fix for - # https://github.com/Microsoft/ptvsd/issues/406 - if not isinstance(obj, self.long_iter_types): - return False - - # Iterable is its own iterator - this is a one-off iterable - # like generator or enumerate(). We can't really count that, - # but repr() for these should not include any elements anyway, - # so we can treat it the same as non-iterables. - if obj is iter(obj): - return False - - # xrange reprs fine regardless of length. - if isinstance(obj, xrange): - return False - - # numpy and scipy collections (ndarray etc) have - # self-truncating repr, so they're always safe. - try: - module = type(obj).__module__.partition(".")[0] - if module in ("numpy", "scipy"): - return False - except Exception: - pass - - # Iterables that nest too deep are considered long. - if level >= len(self.maxcollection): - return True - - # It is too long if the length exceeds the limit, or any - # of its elements are long iterables. - if hasattr(obj, "__len__"): - try: - size = len(obj) - except Exception: - size = None - if size is not None and size > self.maxcollection[level]: - return True - return any( - (self._is_long_iter(item, level + 1) for item in obj) - ) # noqa - return any( - i > self.maxcollection[level] or self._is_long_iter(item, level + 1) - for i, item in enumerate(obj) - ) # noqa - - except Exception: - # If anything breaks, assume the worst case. - return True - - def _repr_iter(self, obj, level, prefix, suffix, comma_after_single_element=False): - yield prefix - - if level >= len(self.maxcollection): - yield "..." - else: - count = self.maxcollection[level] - yield_comma = False - for item in obj: - if yield_comma: - yield ", " - yield_comma = True - - count -= 1 - if count <= 0: - yield "..." - break - - for p in self._repr(item, 100 if item is obj else level + 1): - yield p - else: - if comma_after_single_element: - if count == self.maxcollection[level] - 1: - yield "," - yield suffix - - def _repr_long_iter(self, obj): - try: - length = hex(len(obj)) if self.convert_to_hex else len(obj) - obj_repr = "<%s, len() = %s>" % (type(obj).__name__, length) - except Exception: - try: - obj_repr = "<" + type(obj).__name__ + ">" - except Exception: - obj_repr = "" - yield obj_repr - - def _repr_dict( - self, obj, level, prefix, suffix, item_prefix, item_sep, item_suffix - ): - if not obj: - yield prefix + suffix - return - if level >= len(self.maxcollection): - yield prefix + "..." + suffix - return - - yield prefix - - count = self.maxcollection[level] - yield_comma = False - - try: - sorted_keys = sorted(obj) - except Exception: - sorted_keys = list(obj) - - for key in sorted_keys: - if yield_comma: - yield ", " - yield_comma = True - - count -= 1 - if count <= 0: - yield "..." - break - - yield item_prefix - for p in self._repr(key, level + 1): - yield p - - yield item_sep - - try: - item = obj[key] - except Exception: - yield "" - else: - for p in self._repr(item, 100 if item is obj else level + 1): - yield p - yield item_suffix - - yield suffix - - def _repr_str(self, obj, level): - return self._repr_obj(obj, level, self.maxstring_inner, self.maxstring_outer) - - def _repr_other(self, obj, level): - return self._repr_obj(obj, level, self.maxother_inner, self.maxother_outer) - - def _repr_obj(self, obj, level, limit_inner, limit_outer): - try: - if self.raw_value: - # For raw value retrieval, ignore all limits. - if isinstance(obj, bytes): - yield obj.decode("latin-1") - return - - try: - mv = memoryview(obj) - except Exception: - yield self._convert_to_unicode_or_bytes_repr(repr(obj)) - return - else: - # Map bytes to Unicode codepoints with same values. - yield mv.tobytes().decode("latin-1") - return - elif self.convert_to_hex and isinstance(obj, self.int_types): - obj_repr = hex(obj) - else: - obj_repr = repr(obj) - except Exception: - try: - obj_repr = object.__repr__(obj) - except Exception: - try: - obj_repr = ( - "" - ) # noqa - except Exception: - obj_repr = "" - - limit = limit_inner if level > 0 else limit_outer - - if limit >= len(obj_repr): - yield self._convert_to_unicode_or_bytes_repr(obj_repr) - return - - # Slightly imprecise calculations - we may end up with a string that is - # up to 3 characters longer than limit. If you need precise formatting, - # you are using the wrong class. - left_count, right_count = ( - max(1, int(2 * limit / 3)), - max(1, int(limit / 3)), - ) # noqa - - if VC_IS_PY2 and isinstance(obj_repr, bytes): - # If we can convert to unicode before slicing, that's better (but don't do - # it if it's not possible as we may be dealing with actual binary data). - - obj_repr = self._bytes_as_unicode_if_possible(obj_repr) - if isinstance(obj_repr, unicode): - # Deal with high-surrogate leftovers on Python 2. - try: - if left_count > 0 and unichr(0xD800) <= obj_repr[ - left_count - 1 - ] <= unichr(0xDBFF): - left_count -= 1 - except ValueError: - # On Jython unichr(0xD800) will throw an error: - # ValueError: unichr() arg is a lone surrogate in range (0xD800, 0xDFFF) (Jython UTF-16 encoding) - # Just ignore it in this case. - pass - - start = obj_repr[:left_count] - - # Note: yielding unicode is fine (it'll be properly converted to utf-8 if needed). - yield start - yield "..." - - # Deal with high-surrogate leftovers on Python 2. - try: - if right_count > 0 and unichr(0xD800) <= obj_repr[ - -right_count - 1 - ] <= unichr(0xDBFF): - right_count -= 1 - except ValueError: - # On Jython unichr(0xD800) will throw an error: - # ValueError: unichr() arg is a lone surrogate in range (0xD800, 0xDFFF) (Jython UTF-16 encoding) - # Just ignore it in this case. - pass - - yield obj_repr[-right_count:] - return - else: - # We can't decode it (binary string). Use repr() of bytes. - obj_repr = repr(obj_repr) - - yield obj_repr[:left_count] - yield "..." - yield obj_repr[-right_count:] - - def _convert_to_unicode_or_bytes_repr(self, obj_repr): - if VC_IS_PY2 and isinstance(obj_repr, bytes): - obj_repr = self._bytes_as_unicode_if_possible(obj_repr) - if isinstance(obj_repr, bytes): - # If we haven't been able to decode it this means it's some binary data - # we can't make sense of, so, we need its repr() -- otherwise json - # encoding may break later on. - obj_repr = repr(obj_repr) - return obj_repr - - def _bytes_as_unicode_if_possible(self, obj_repr): - # We try to decode with 3 possible encoding (sys.stdout.encoding, - # locale.getpreferredencoding() and 'utf-8). If no encoding can decode - # the input, we return the original bytes. - try_encodings = [] - encoding = self.sys_stdout_encoding or getattr(VC_sys.stdout, "encoding", "") - if encoding: - try_encodings.append(encoding.lower()) - - preferred_encoding = ( - self.locale_preferred_encoding or VC_locale.getpreferredencoding() - ) - if preferred_encoding: - preferred_encoding = preferred_encoding.lower() - if preferred_encoding not in try_encodings: - try_encodings.append(preferred_encoding) - - if "utf-8" not in try_encodings: - try_encodings.append("utf-8") - - for encoding in try_encodings: - try: - return obj_repr.decode(encoding) - except UnicodeDecodeError: - pass - - return obj_repr # Return the original version (in bytes) - - -# Query Jupyter server for the value of a variable -import json as _VSCODE_json - -_VSCODE_max_len = 200 -# In IJupyterVariables.getValue this '_VSCode_JupyterTestValue' will be replaced with the json stringified value of the target variable -# Indexes off of _VSCODE_targetVariable need to index types that are part of IJupyterVariable -_VSCODE_targetVariable = _VSCODE_json.loads("""_VSCode_JupyterTestValue""") - -_VSCODE_evalResult = eval(_VSCODE_targetVariable["name"]) - -# Find shape and count if available -if hasattr(_VSCODE_evalResult, "shape"): - try: - # Get a bit more restrictive with exactly what we want to count as a shape, since anything can define it - if isinstance(_VSCODE_evalResult.shape, tuple): - _VSCODE_shapeStr = str(_VSCODE_evalResult.shape) - if ( - len(_VSCODE_shapeStr) >= 3 - and _VSCODE_shapeStr[0] == "(" - and _VSCODE_shapeStr[-1] == ")" - and "," in _VSCODE_shapeStr - ): - _VSCODE_targetVariable["shape"] = _VSCODE_shapeStr - del _VSCODE_shapeStr - except TypeError: - pass - -if hasattr(_VSCODE_evalResult, "__len__"): - try: - _VSCODE_targetVariable["count"] = len(_VSCODE_evalResult) - except TypeError: - pass - -# Use SafeRepr to get our short string value -VC_sr = VC_SafeRepr() -_VSCODE_targetVariable["value"] = VC_sr(_VSCODE_evalResult) - -print(_VSCODE_json.dumps(_VSCODE_targetVariable)) - -del VC_locale -del VC_IS_PY2 -del VC_sys -del VC_SafeRepr -del VC_sr diff --git a/pythonFiles/tests/ipython/random.csv b/pythonFiles/tests/ipython/random.csv deleted file mode 100644 index dde35fda3850..000000000000 --- a/pythonFiles/tests/ipython/random.csv +++ /dev/null @@ -1,6001 +0,0 @@ -".Lh~N","~`y","]W|{92","|uHbIo","o}","+h2" -"-O;Xfw ","","KX^K)FHe:","3+4ncqL8=O","py]ZA;","_y>" -"}z#IiI'+c,","^) ""","(SLt4","JJ:2VnAQ/J","ZO>%nl>`EZ","" -"","ji#cufxu2",":7JAHYDdRx","klq?$","tItAtlu-","TxspzZ" -"x9>iX'C+F","","G`[I","p^Y=S)",">NLE@UX|=a","a=XsO" -"`Y""Wc2^tQ","HlZ","N9/@","J","A","Cv" -"","L f'%K","~UDs","mh/A:X","Yz9d:T{2Q|","ee" -"`3A* >","Nu6cv","%F13Kb6p","","8+{hhd","J#","W3_yiE","y)d8?","" -";,.;rnu\K","nfS)Fy=l","",",r~$","jOU[uQYt'","R" -"3$cA$","l4","t!nf","53snc8g","m&,:","OQg\ " -"m>D","74|LkY5eV","/LR","h","","B]" -"60z{e92;","^P","5s-:m","G2YGn*DpK","I","" -"4s2(","n?j1,f~~?d","?","3{j,tax>8r","","Ms_\Z" -",i9sLk3z","D';Tv","R","m1keY","|`DumH","k.2-Mu9P" -"!","Y$","O","r","xj _*%*","#" -"HU","Z_jT0?","!2X>5","@9tD~BA)va","^ Gn=|q4H","eX" -"-","H,m=WD","fE;","YCTw<","""sS/{ow","","D@=iE'j4" -"Tqi1","hTF?RF""g=","","9{","m]?81+hk","1ZHfSk" -"J""oMEj","""*MZ`q; ","{","C","R|}Ws|j)d","s" -"6 k\:$@gl","bo8)dK#Sj","3Z3#","","J*:F>",".$" -"4Fx0(~dQ#U","F('2","YO~phil","/NmyUrJ~E","","" -"Or,B""b@HO.","uV2tX%yAE8","fn HXw","","7R^b","Pq%" -"W8BTO3","Vz{xaSpxd(","7YTQU}D]q[","b]B|5x","?i(kD","" -"","P~O","?m&SG1o{","(",").{1PSm[E","{" -"a","?","k&8)","","FP31","!""P^$!" -"90g=","{XN","FFH;b","r^XHX>@R&1","","4!sz=W#K" -"","##LY$m13","-(","`b","#K","Dd" -"|jA","34 Q","dU-;:OOU\U","nKO","*I","}+IJv" -".>j&","d-Gz","nOe6W""q$Zc","MYyF~","","FzO&u" -"!@>3&","YCyw0y","","","I(,","!fhPR+!=8N","*^tw&-Rt","V","","Sc3S" -"u;","#no","U","|B1`","[^o;Lyp5","" -".Vb[JH9x-s","9?<""y","","","8@1K7Jh","-ySc" -"R9S@g;fJ","ae4b","Q01]VuYAIu","J]W(PXVu`","xUw_LZ!8CB","" -",",":6","CLUFQ[9!","'K9\l^","_(OjmvR?","lT1GR;k" -"""+u$2VaoTD","","","@\|#G","","8I","Nx@R&g&sw","*r-Ltk","","" -"KB/ uy0","YJ6.].gQ-s","Q","RE[3RGSE4H","Q6a_)5p?","","|~O>&Xua","#cD&u","n~nM`]" -"V","-47Q8,k","53S""EIi%`","lDlQVv","A""}c1c='x:",";{4?6\" -"z'","YP5e4(U","l^mTI6qb",")sDm^JM)qV","","lw/yD34~","|uM5","","O6z>P}",":w!CBD" -"GUoP=,Kqc",")0|O","[A99FJC","uM:Fg","O{&","aQ;G_{m" -"D?1m8|8","Ule","CkEK+","Sfi8wyM","c1I~t","2/&bE=QJ:""" -"7XpO#@","I0L(t[`59","E&grAL3,","7","","" -"&tLwX)e","<#R#","&fp","}z@s","Gn","1ln[S!GP" -"k>Kb&YeB","5Qw=$-oq","&^","J15BT'z>~","sBq6&TRf","3FOj0T" -".6r$K4","\6f,.E'","k<","","4l(d 5","J[>x$1D2" -"""fto","lR`(+","?","TJ","","" -"8Nk","H","","]X","m.d%BI#q","; ,Pq?`;,%" -"5^}7sQ`","7>:L","I","3L\-","wA7Nh@rww","9VXVw%)~" -".HS","","","{7?+C","zo17eF|v"," R" -"vH#+T","?_Dk.Y","Gvdh+)-PhU","A]gB^<^e","R%X)","Gna*.n" -"?d","S","J:vQmT_[`^","W_X","`""S<.S}'","IC " -")AFHI(1't","K>]R","Bx","iWTE2fc","1<","m=B;x4n$" -"Zyu","q5C% i""b","$N)""mCi/o","ULa nXr{nv","u9HQx5,_1Z","XbKX" -"OP[s ^wl)6","y",".}2t=:","E,z@aBPR","qC=P3","`p}A63u,3%" -"X[d","Q0tsJ#*","gMR-.6&6:@","H"">M""CfcR","0}BSkSW@/e","R`Wi&`Djr" -"e&gUxU*A","0"," :","","Q>B","E" -"s%>WO5$o3g","D","s{%",")V&x)`@;","5=","1Sw" -"","Ym@","_","M`(*_B>P- " -"K","","2O#D?","%RTu>7Otx","zbN|","I""/" -"-)",".JzD'","bc[y^d#Y,","Tm0ud\","1H@;","n|q< L3i9U" -"&cc-XYJ",">51","0BKHX[","",""":0JR/g","\'\`5l\O" -"","o""L#w?4qY",";X7Qt","ivrB]@","R","% %-6A23" -"E-I[","0TPXa/8);o","T4hBVto0F","Lr[|_:Si","%(/x""","tT" -"","vWq`y[!","fZ{b-)R(","Y^","","bJr$}.<$>r" -"F","","t+r]s,=T#","b]1?U","5Ldjnsq4:N","u,7}qpR" -"","zftO.","3-y","","Y]BLTq3?","-x%#b" -"<[s2YJ&}_","bn","$>Rt7tHW",">!*4Ao","","}}" -"c]-jDpO","!LsvN,/+6","W+w&=l","""@fd`ho","wk+i#'Q","q/:k}" -"IMaj/y","L","g*d_:\:","YT\0","O<[/q@_""#a","UDQzt#5" -"ZFE","xb","oe*1.uQ/.","Xi1fJ8*\I","DXVd!(6>","5sBi}E5" -"8)","Pz","\\ L|","G|e&9","2gd#5)x Z{","gU\Jq]RrA" -"d0A$fck]","`" -"8","Y9ds?,""","^u","GUha]","]MR%qJ",":gq""`lO","8B;N:c?" -"EE"," b:(W9N","|;P""&9","v@qz","}B40.e%Utn","M,ynqkYg" -"e!/]Rz]$","cDQ!NE7","8@=6","d","4#/O","" -"zn","nA^@g!Z","8nt$sxb","t","","m#x{0;V11" -"","{tT5","9QnNs@A","\0URMK","]","j<""gt" -"&0/UGKz'G""","K:j)_","QS>g!7","$`9uc,CJZ,","`8+w,","`" -";'V-7","$p<`=","j^I","r2 ","","jy{" -"","m(hNrbi","h","Z9$V83J","+5]b","I" -":","<|>b[X1jX","c","T","","}r^hq4g" -"(vwf","wQvCnhksM","`","8K,3S'lHv","4o","A!q% P""LX" -"","rf8'y7;","X!Ur","s","?iDO",">h(." -"ui""R&JBr","&'7.u","2Y,l-5","?HB","DL""$","sAh||/l=" -"lXaB7[","1hY","j!%6 ow","Tf","i^r [F","OV9%h5nY}" -"Bp}nh7Ic+M","YH{L","y","o!9","K!<|","@D5" -"OjI/r'r*S4","WI=pe$lRG","'*MB","l","AQapJF4bTE","oBx>" -"WkoM","~H8GI,1p3V","Wu=B7{0j,","","xg)","IZ8l'1+I" -"Q3lB!","Q'N","}xi!#DkY&%","FNv","5a|FsN ","T!98" -"6","h#5{)<+A","#i7|fSA""W_","\u3].o" -"wI*","Rqk|kYv","]d |#lE",")FWt}%O9C","os","i@)=y9" -"","&u[Jq7","MsE24i/b%" -"b","{)\e?09""D","D*?Ybms*","vk6NN?7fJ","~q2Pc|","/vW:v }{J5" -"|@'o"," XH4 haX"," Y^0e>}","A",".]WK""",")bLp%mt(" -"_x&yU!GiV","WTc'5nj","*3NkkGk$'","f?,/V~","Z8g mW4","hW" -"wwE@@","","7Di?""Dt(lB","BU~Gg-","pd:" -";NonN$t5","","4G~X3zC3 ","IHHBOJ.","P}",">r*>W5" -"?x2""L4","sv|)/mN","+""$=1:8","p@~6#C>mM","I0&1Aaq7M@","n" -"NWnM;J","LXjXFA f","iUa;""","|k","662X.1;t"," " -"SBL6tq~B","Is|v9","KjJ[",")mgQ.;iw]","ERR?z","WcWgb#$q6e" -"7~a'`","C?6`","Rr>q&YV6I/","?b6w)G0","'jpc$","c zI9eD " -"_^_4{O&gbY","T^5__","w-[Py`(Qxf","*",":'EKBh#S","ljM" -"","c#sJ","W^2","@2`","\\OuBL""^mo","2wm6WA|x" -"8pkGz","V,/WQq*J7Y","&]2?7Q","EF.T9\@","[k","9YI)(eh:;7" -"$wk~","VkK:0Kz","u0!R~2","xY7#","9#","`j}6&" -"9","~S.E)b" -"Fw4l2A V","o`""Py","{Izy$K","OYsbb8","3]ZDq","8hPS1Pz" -"~"," fQwMd').]","PR&T.;<.\U","""gUK74[","EAn<","JQlWX5","1QI","%AQlZmNPE","2|A?","W^XqWP" -"a#,W(`B@5C","",")","Dz","y \O%","&5'U|J.8",";)SH","q(7","EH&+jZ 1!","HTh" -"bzr]","^;V8$b>B","1:aY5Yyw/","yr+&","noUrd","pkg" -"S(Cp&`e]","",">-c|%.m","","C7Y'u","X" -"ny","dNYQ","FWYe;y!","i?4","1,bY?=","`EjF-M" -"8;;V%","%wY","x~^veI","t" -"kYYbvo8<","C\|",",4g","Ax{sqF-Cv","}^COxg 9","o""" -"UPjp%M","!#:r.8&""Xw","W!/h2","^%^f~","t","oP" -"T{6","","Om=~""9s","u/o","cZ@.F|B09'","LI%e%65gY\" -"5 I","r","'F&o""e","qn{s $lV","*}tz1","" -"M","E74,J","=z3U,)","W[.!,","e:Tr&5<.h""","y$Iwo" -".H""","Qq42V79RQ","^Fn-6A0c{","iZ{yG}nV^1","Kw:)[","0-YkX}/0" -"XZc","","o%Z","","q{,",")J*z=wr" -"cvOCJ&O","x%cJc@","O2bJ2fo","m","","ob]_Tj@*v" -"_!sCApL>_","","qWa6A#$""ww","3'","m4I","L;8( {ye" -" ",")~z0g","YlIA{:Ey","","","k" -"ax#""rfEO","","X(/Pj}","CC?[0","sJI","","fir_*o","8 ShApVE_g","4k6m" -"&>b","c=9","!","I","","$/dYTpip/$" -"'","FGj*S|Z","{N8","eonWJSsY","","U" -"EL|*\!V$1`","Og""","","","lo!:^",">H1&sgt8Z" -"r~:","u","'/Bn?[Qf","nltE-YYzDB","I'ODVU{xr","" -"[I(]cD","<,/","x","","2x/fH!8%","O4a~X" -"})","QoMIAa","%G@","46;pHf*","}3rU @V","+`eU&/gG" -"HD\5","!f","j6OfLC","jX/UU)k" -"","","2@","4bZ+L{","Z|H","""p7u" -"PD'!gTiPcA","","<","0N4x`","n%\E7ol","$duR1IFA2I" -"","d_B","|","aa7;ac","","UviR" -"O@ei*, ","u'Tr","NJo","B*E^/Xo?Y1","BFk""){%:","TS?>s=?= h" -"Lt","f","PYgD c","a4/",">2?+A~+S","IS""" -"xG')3","q","","0k>U)ZI","uHg)U""X+","}uU1?*" -"M!0;Kgz_G","+","1:g}+","b,TC;%rTQ","Z+S,","" -"i=lps","[","$^cP","n2",":0,Wkb","9[URQ8>&" -"@3","UXHc|C","~DLL\QV||[","uQ.8 Q)+q","""","A" -"x2ZrZ7kTQV","","!R<","G%\fT=","E","-qG0{" -"'&)T%oz","{kBu,","OF6vL}FsX","OT'5=[nqH","VdOw+[WU","]SZBjN" -"","rdpPo","Yh4[SDH",".^t","fJttaStU","@%5!;^h\" -"/uT_)[","""{","[up:^Qgi","6GF","5j%$6xE[g","&l" -"&>-Lf7]U","z>","$qPD^>O8","&IzR","e","}" -"}8X%","yDw;c#""b!","Y/}~G","6Oh[ZJIwQ4","km+ _8D~","dTCu58x","sSXv","pBuA>|X;_","eM!):?EMc",".KU>","Vtd`wZQ}" -"y$?{2Ti","}GZcl-","\kQ4","mk_l7O;#.X","KDd[Qd","Gg0pL*" -"sg\dV'=5z","!S""nEgUx~","","QcOn","6","#" -"N#fa","a1|+SwUd5","rC(nF`N0Z>","nnPaaE"," ","yEwZ6DM" -"V","^YU~b","","*bJ3,N","V={@V{","_>#Z0*" -"I-~QAavV\","K6;#0k","o","8(" -"gwut0","","WU^","4","/!][iG,z","""W7+uh" -"j+?WYE2","w]&o4Fr","bBV^SU}Hv","9'C","!Q_7<","" -"J*ok_L.*Gk","$Xl","","_ut","g h7,w-","<1" -"Y>)?WdJ","=","""n","Xn2m[x","Q]mFLF","Sh/Ns" -",/^a5S;","Vxs%'","QivnALbO","","+b8","Sk" -"2","2KNAr""91[<","VJbQ","sZOSuh(5&","","E1+D" -"W""","[V:67mEA","~]c","J5<+pN#!K","%,b})","Y;.>:'SI}e" -"R>flcq%","4e]fB^","^>s}0","8*hE"," a%","lVsOax0'-" -"!l{<+3a?3B","sH","y","~` \hy@+","_'eQ2/o=FS","E" -",","*Y","c%Uz+']<","M28o"," 2o[WuQ0DP","(oWt3($" -"3E","_S""CKJV","x&#@hpdvR","aQ+$(","S","#r%" -"","}!Q#fiHh","I","","RV<[9pS-c2","Ot,1X" -"!u","yn]v5>","'","","Wkf#",")spuPy" -"`","&NgU{7}","zA]&&{kE9o","h,&|5","jWNzw","`[2p""lG2""R" -"9JEw>3","ccc~#;"," ","80UvW9;/","","zebGg>#." -"2{","?wLn]","OXM","8+","LST%bsEJ","," -"V'","OzdoP^ /s=","%*","goIg|b","u","KKQ:va/E-K" -"\xSS0y|2","&","n~S>A",";in)T|","B""V~,z,i\","._w" -"A","""","[e_o","CJhj;~-","3_e2",".%*61w3>\A" -"","f6bOj/M]-","nlZFc7g.",": ""s q~","is/?d)T","c9+sD3bT" -"C0a'R|D","|+","gNvw","","CCZ?F1","N\;C," -"iQTa+b[X8s","""H""X.|#B+Q","AP26-cwO","G","","""EM^D*%%^" -"!ICp*Lw","7[WHV""XH{","[@","U","'1P","RN6lj","F:;'l","*hs%1","" -"",",~&gR.","3fIG","rHMo","&","#" -"JnsY","@?I)p","%37+bN","yS)]_3YAX","\31p!_","n}M(" -"|5W4","@9j-","PB^HQ","{-cCfQ]s","S","m[x64" -"[x","C[zL>vh","h-Ix;N","1-e9 %Nh|","mwdP=M,","X2:d>'0@Ku" -"Mc={-!j","ovo>;Tr","@vC2xP]3","""'Ev","a[x68|<)}<","DX\y)" -"b5U","MDI","aQ,}$v~@7#" -"=""","[[f#7=Nv","mQ","f~\Z^",")""$-)qwJg","I+^]u" -"Q>`tw7+^"," X","[A_qc0FRd""","h_","Swb6$","vRY" -"Pr4","nma)mc9Oq","- TdOChW+i","WQk$A$:N","_IhGX_RS","cO","Ho3@l6","6?","X=_R,8C","GHr",">Yk9{wPy" -"g.XDqYM","J')g@","Nm87","l=?> f","HWQ``Hd",";Oh1""*z" -"tldt ","opHA{-W+)","*PVq*Nnxnk","8",";W7,peh'","-w3kZHa","","+/0|>*.","YCD#$","DowrP" -"m","c4","xd","E6(:>","","_|" -";&d%BsH|i6",",SSk","oZ4" -"24f,,4","bQf/","r\;","zlvdPU","","Vkkp1eZ" -"w@v4m ","","D&","C34$","ZAgUJEP","wfSP*DFUB" -"|\.B[M,|=","y","uV#$""","jS4i","w-Y","~V" -""" LS","{","","al;p","&,ocis]","qj" -"1h,: Pm~^J","tN5zO*QW","<9lU_","uEbd?Ms&$","%bA3O$a","" -"","3P4B","Vh*7lq2","hQuYV;7","0Q","~""3~3yvt,z" -"Aq","{8%N","I*,ssZ(:>u",":68[{yN","","""uu]3" -"I#]O","Gh)NfB##q6",":p","rENjq","o","iBwt(" -"Uw}}wTD","6",",e@rNam","WO","x2tPl","cR9h" -"_o8go","S/","BWo_","z","","t<51fb-j{" -"Xnp#=","(GIR","","*WjHzw","|" -"`ikUg","",",Y","CX+\","U9\HE)1Gz","Wzs0" -"Kt","VO34)\\!*","t~zJ9uYT-X","9`9iN^"," Pr","!F_+Mhf" -"ij+W","jG","","","a@eHP","~D2:" -"","f[fd?","4V","]{cy<>44]R","tagc@me=","Yer" -"=","_ ;Tc","ji36s//v7;y","!Uy.RT$z","","PP~.C,vubY","k3%am","2Gs" -"E7#&8hMZ","-o","^G&","2NCWWjXL_E","","OFIQ.r" -"k@^b","q","wb)etgW2","bE",":F|>=q","K$" -"jg6#j","i","c","^|)2YPk","+<","-4A!5a" -"^:P3{^S5","Z~Q","^.cKSYy","","t*34V2>","t-""Rn]""V:" -"","M?=gzH[v]","[6uvyAC41","d~D","%xe_X\t","I" -"zQkYWrs","(#F |*x-","Sd","h79{!","NQ1LSo)6","=v`fl" -"bp5tK",")YaaJs8","w:rSY4SNecLp" -"vCJ,a","wg;S8js7vt","","0d<@-_O)","{MKV^N","^2" -"d.D`","'""","x.[&","*dcV","{z","6y+0a" -"K{:u","-{u3aN""","Eqr8%O:!X ","5>!p","ZX>0W.~lx","/p/rU" -"taZxgwfN8]","","]P:9M","M30-ptS~]","m4.7\V#'?","dvB?" -"3rq%*Yw","%f4v:4Iu","","5oJgGtPUIb","JI","=D!R*~H" -"gkVe;yG","R\oQ^67)3","2W0|b+ c","/W@0[;]mm`","2<}8I@z","uq]A0=v" -"YI}","}XVL!C",";i","wL#cIdG%","eod 6*",""";[qK" -"r-I6%#","kMM","b<<#4f57Gh","LQ$EPga","kkVPwlN0","Y>%wr D5?(","R[3e,","-j$<","]6aw" -"foY#cWjL","h6{BO4$","c+oVNk","x9UO0","{RIdlhJ","o|E" -"h=ZW!:8Kl","oqW","","R,(5H.piCE","0T","*fAdr" -"e","bQ","","[u;.","/9r","P ^H*X" -"n=ZO@A,S)",":3OyJ];G2","sS","{SZ9?nF","""-0#","p{n" -"8N'p","oe`;S%&MH",";}p","v]@eS,+B",". Sv+p$","BQ1m1HqV-" -"19]4(J","$:+"," 4Pby*H","Gi26IA2<7","AwIo1~z","$_x" -"{,'","g+{!s}g","meNrc+n~",")","WIu19/","FUi!" -"t,k\",")4aJEL<","e3","18","=","aiBKyxK" -"11C/eT-N2","v$","O0Z","u*E9$&#dR","J#{}","p FFaC&$OJ" -"-~J","L:K6 ","?","1","<","vi6G]s?D" -"0-","$[:","H","D&A","JcPwaG,","V" -"9,f","aC3","","mq}","4","{U|@/l2T#{" -"&N""jfZ`","1q","sjM","PrM20;(7.","oA3xzI\","O!H" -"$QX~VR","H/uKon","y-:V","Y\L;'&;q","DfLF5/FDPc","3>MA.8]a" -"Z>E9a.5~","$F?","T~rp{iU","","XWh)V3","H}" -"2","MK8?$x""w|.","","V$F6J.!SO","","8yt" -"_NNof4","QCw-Qh+",".J4xa","jVGk=(+9","G=|q","]1vi>$k+d " -"C9GS_","1>R/V0y.","","!","4pS","E>O6moM~ S" -"OX7-=<(","Zyow$o:,F","Y2Zl'Z","+9Q","xC x9]RbF","jp/RqMEwy+" -"!4BKn>}t","EN","MK","mKD","zTZq'3j " -"b","{v@","QDSA","{--/MV1","F~<#`{9^Q\","bY" -"DBuM4""jm2","e{ho8:","l8S","7","7I~-&S","D#M(n+u""" -"{n~%(z8m","T{o=Q","5","8!>(k1w#","!VaD]",">b~_(^" -"JB^(gmt","kq^,","A#yVx","i.o3ia)kRm","ze'rP","[k" -")#","-P' t~","c/6&","U}","","a{tY","ZoU*EKdP","/X)qa","O[;\RyO{" -"Y","*r4PX<}","PGrVzC+Q","'W;LxII:xo","s&?a2xX","(" -">,E.D|OK","DuqRfMYR/","|=c[rOgPI*","PHCU","E[hAIr#!PZ","" -"|[dE1`>u^","-cCdxXD+>X","","0U(Np","","hfDi}:tI?z" -"!''G","I","X9","a","`4d,?]","B%)("" Q" -"F\l]\","I8)$]<^~","-?v!K7#p","","!cq:k1","/`=" -"","DzvVS","8 @D^BR9Dr","%z","^'GG|oeza","@-" -"gT^9f ","","","Q}q- }%G>\","Eo1<_&+","tf" -"`{2","bbVEi","GcMv`P$]a","bU","v}|B$vu=TTe-H","Za","Vc+M)kP","","Gog!3c)qY","t5gq|Y2" -"'+W5","vs","c9P","/hn)o(B","0/" -"\+EoGy/w",":7QF$]|QF","euVo|G","HNtoa5U{S","g",".-UFU2" -"",":OX+","9B","N-R;C*J}H","/","]" -"/z","/QI.l@","","n","=","Y)tF""sb$" -"%ZL)LVy?","Xkp*,",";K","w","bha""","eMqxFJK" -")mE)Ldb","","{&H?UX#%ZF","T.3zEzOIX","""A2""Q |y","on" -"gt,^[9>As","Vt*","')T%","M","d@I`7n*13","&dBxYQ-" -"*"" uH","^",">u_I;)o","]_f3d.","t#bY7M](","\{Ge" -"["," ?""o~aBm","r2*TV^2","{mP^$:B","","3""" -"*S)","hUS0<*9","x6F8!Yh","f","lr%""dcG;","P`e?\kp`#" -"GqL[_G","X>[G:_i","S5SIm2","HZ","v;gZ=@","lp""V+')i)E" -"'\%","","M@c2","1|_;IfHt!t","Na[b lUC","cV" -"","","N <","n","lDbQ","fOT}A&sROX" -"j#=9J","kGB9l","Krq2omq9","RH+[b","{ MFOQuYOY","1?NGx\~)" -"vsl","[r","z2ZYUr)R5","jLO","=9v9","IJ'S" -"6[J4","=.2dB!","(~qz|F","8S22","3.^bP_2vzx","p" -"x`58Q2","XlP","ATYEQ",":eF_8Ml$RL","","5-?UMGT<\w" -",CB]|vx","rWOb{k>&p-","Bp0M$-kap","yhl5<5f:","E]a","]=/HY]@" -"tn~","`=_829iI{m","V","CI2,(","","y*W-=" -"YQjb{","m","|?U&k598","","OZ5~","uf]|2TREJv" -"\"," >\$^EY(8_","Rjm*""t@","}C","5%1Gah","O" -"(q>Vc5a","=/","Ye3drpl","f? = >>",",,7l""%v","e!%ln^.<'" -"=mnib0@a","sr~n<8i(aD","ky19#u/ApN","u","?gV,i2","'#-,[:" -"B","h(GdA","H&","d1y*j&k","'xT-2c","7JlgbHY" -"9p1k",">","%% iXeV1)","p'z$we`=Pp","Fq","I>Y1" -"ZsJZ","Gji","\","*#0 h~(^-q","=MLU,A8s","dm.m3" -"0.e\O","|nW","6'?L&<","EJa","JU1","s_#Qhx" -"","Eg9","!mOw=-!+ol","*1y,8\=","58 z[","IGE^Q>l?fI" -"Rv(p",".vd~96=I>s","3u%+E","#B[0@","c","bGq" -"SScmE","l Kh","l79JXC3=VZ","k2","$o""~","p" -"uh","ex@7k2p#m","bl","v","c"," $)T[V" -"f:ryalK","j","""|ARTeqi","","K.)4" -"N8","3u~","TD","q_I5L2J3RJ","ye","h8[" -"Ko""$","uu')*69X","3*Bh/P}","\[G%U'6","6%?","5UPL,1RLK`" -"KesVA?FW""","{lIto~*N","_=?g3","qes","8},","NT)Hre" -"S4Pd","}BZ#!&","}g'G*IAs","]=tw}",";1yXn9","90" -"4X+/""{+Q","|gxc6","4B];'[Yj8;"," \5","d]","" -"X\rKIB{V","]b3N","q","5vTkM}T7","lHM2Ax`~[","dhq" -"jjz%c;qcn","%hr\`~2 ","","]nLj","ndwjy{o","e_h" -"Y[$n?3"," ","!","","$KJLM",".zA" -"CX'8`Y,","k>w&T","E!C?Ut:Y ","Zre&","","" -"XgDa","soo-9u:0q","K",":`(Vh9RTCU","OcN[FV","`","@{T!""" -"^\s8:FN'","3f965+","B$nZ8`$;$","N-<","-?e","-Z;cPI" -"3lG1=W]NK","O!E0I","$t>r$/Jwo","E","","Bbp1" -"","J[4","J.W^CyoH",")cD","L","eV&[/" -"9@HrYJ`3Fz",">4"," /o(oz%'Y","lnT+","Vehm>,E*","" -"^qTZ_","%E@5So","~>","_sg)T_IRY","ppXj4","%4'" -"fG","b@D~u","P","0c","T!~%w&anOY","q9?uTURqZ" -"~%v`aU","P",")k","*""","4QXuI;\>","," -"SElfh$",",g5x73","r64`Y","""&Hn[,dk0<","R-c*wcq","""8^O5GKL" -"",".","2/;","=uQO8Q0E)~","?-T0-K'a0_","*rjf%5 n8D" -"kQAL2EM*yH","ABf^~84v7","","*/","&:]'.l","+(@","Nz*QRNB%","T" -"_y$##@","","1N!7#j","D7)DVq","sQr X7r[","L" -"\R*,^A(","yFa=6%z","0#[aK","Grw!S$lY}h","peLP","NO" -"*!w>F","o8EU@","I|rc>2",",U% ]A","0","JS/z " -"p 58","@Py@~HGC%","42B^=^="," &3sM","x#3J}S:k",".}67" -"","m`,v","G@4","s","|t.}""h|.","b$R" -"5%","N0U4","","9F;r1:""H%","","w7^&" -"l\{m'0","{","""""~/","`j34B|","y*CLY4E4","*ny" -"BHw}Fk","V4T9V","","94B","b9'yX""","@q\<_Q" -"b67Vf","1b$8","Z$Ul","pvp0O4x>","3FvrBg?j2i","=M" -"+ItwpkKY,","^ady6^nv","","-wsfp?","LvOcvq","Zw" -"`te",",B=","mK7_A][`w&","!8@;`#!n+","@3o46!S\","" -"Wc)E=FQt3","`lkmDlK","~GO]!%E2Ne","[icn0_w1","sYsucGc","0" -"","0","S2mFv1y","sm""Z :",""," 5$" -"","ktca'+_","esj","","52l=I]5","e,]I8Bn" -"P%=2T[d","/+","63$Ze","^1pKUdv`#","=r!","t>kjX=.|" -"~a|/T","O$S","dW^$pZ","/NJOxu3","m%","S""giH{<4/F" -"sV9w|60?$","'-k@mf^","QJ<","QjO']-D~","EasA","0{8l`h&#" -"3-/ch9Wx,$.","yN<.t&!.","d%IVo2Vzf>","lH'y#fTEa","8d^XPhWmNG" -"l8eVte","{gYR2hLz)","[WxTo","E","NO_8)d=I","b+@ZqL&asM","Et\" -"KW d","|M!MP+&Oas","\z0`","U","g.k","HSMo" -"E],@","7=Kx$""","pA3","CcM","l=a!="," kvcxW" -"`g","Ym6/V+&3z","I3""`1l*Uj","LrxBm:3i","","Rw;*X4CH" -"N","Ag","""F7i_z|&","","Dl1 {N*05i","?N" -"Ox0hNYyJ^;","","2U|-","<|kg=[SCxr","7q?Wj","u>J" -"wrkVHq{","UCs","D","V^[oTJ","C4*K3","yz{Q" -"M}`0+?1","1F-@r?","s","]","ZvOZYk" -"Hc%lPt+i",":#j","7-v20","I@\/{)^","QX",";Fw 8G>~" -"d-k_FKj,3V",";M8Gi""`F(I","m","Co","|.I{w","Ph>NyA" -"9@@?;","t:$x:^`","r?i","e","vK@a&G(","FG3\7oh" -"yxwt\5,o,r","&3s","M?c~oD","'jFO}OY","~t)V~.","(+w1j" -"=pRx|!E","wE>*zq;0Pk","","YAm&%VT&)","j|.i","" -"+Pi","*g","]7>%k;","=.*Ywgzs|","4<\B`$=4","vKY]" -"H'qizT3 u1","|l2#vYI{F","0","C.W@ ;8","=!&&;<","p,2{" -"FMxz{KT~","30}LX[.C@E","\5Q","","pAM=","r+r;eJ" -",","'N!*""","@","miy#0pL]<","mf{","#z0`s]" -"g r&","{",")l@9","P7,j%","0Jt","v" -"&^('>1q9x""","cSE=x4=5","N|MptOz*Z","","\;x/8m:","#T" -"0VJ[","","NE[jM ^X!","""^(Odv AY","","0" -"%7MW hq-","Nfl","?","m:7Mv~}G|","&.x&1","}*+qI'%" -"TLS ","8pCh0is","a","Vdg\ m","cP+n,X1k","/TD/lD7=(~" -",r 3a)o","mOV==","/6","~]eD","","=u""c" -"#-'mX","t/{Bl8","69_z)g\|X","","Ss;Avh}m#6","Zyl+?g" -"3","2:t}71?6j+",":[Q'`K","","))V","c" -"bxL/((`N'","A2","btd)xs" -"`Yo~7*KPX+","x5b!R@#","Z)*pc","VrckVlGQdy","","(g%'C1","n+.l0B6" -"W)#l? 2TgT","7`","~a;L6","I","q`v/|lbQR","$" -"A""Gx{s","dc:vtO;","lx`4,a","V-q w'%","M","|q]" -"*8","K8/|;"," ik<`N1M3,","/","","FJc3JZ m" -";!","M5+%]","+Kt(542;","!V|","pu","]Izuu}" -"+2W/#]R`","",")B^$","","2MK$<""=qX","^dS|" -"z*","","}R~eL)","-]sC?%"">Z","#R82z)vsh","mCRO`$a" -"s2","B&*Y%uUOOE","T|c!","6","*iP@.QXy+F`T(5E","aE=o=f;","<","dd ","NJ{ &axo",";P\cD" -"UEd`F^m","&-gNnM","$28lUuo","","Wl","]#" -"d8M","+",">","7","ijMrGEC6O","p" -"f@_","[","x","b>\f_|8G^","N;,nK","lK,f|Fz^,`" -"frpz","","jI|qqIi","E9N%x","WT","bC(sD" -"t","MJ1> x3","z@IF*y!zP","(T!gW,o","m1rNM","d""A;" -"3Qk.' ","$r_:","O=G!(","","!cFa|h.Q0o","'~u(\eY#" -"r!vO[4","\","0_&w`]mIb{","m","","r " -"V","DDU#eF_f% ","A&]a|2C/","*Sj3@$A0,",">1\41PE","Z(P3aR@" -"","u=Vc3ls","twjqlZX*","J_,H@2","?bgPa","aIj" -"Zgw""MIQQxG","P","?{pK^n]","Nr1 D#xJ","D","iVnJt" -":E&n","_""K4.","%x]","","T@Y\roh~N","LIL9i'8?" -"","~u","nA3 $V>0","!4 {","WLO)I","}$c=1$" -"f}Uc7g3LuX","+2-P","""x'^.","?","y!U!2-Kp8x","~F" -";1r""A>y9","","","=","P","" -"tjT","'","Gvl-"," q/!@N'0'",":XM","e:","jb?BuRT:" -"NR.%",")]5Lti(2~@","U=tm","WrArhRl""","y~","Eo]P" -"_ADu Z*F@","$r>X","mOJUz","g2","g6[@qWo5","C$" -"o(x]p","%f\","aQTSj","","Yh,u,X","5" -"JHSiP","WS@\","",";Y,{QZ`w","+![6/)*","",".X6 ","zx3p","l+6$g","YB7#~+4" -"W(XOUt","","ABY}~","JD-8o`g-XJ","l>ji d","2:Fb&Zl|" -"2h((k","P4]W,)","@zn$ux","P=","+f","#_" -"3`|e#/Rcv","Y",";8c{","zGY5ox",".?M~s11r","'r19)SNG" -"w|x$1#","l","{wT","*jYl-y|,O","$ @Lql",")um" -"Z[Q#",".jV^yJ","ZyyQm","Nr<+","(:1qzgtB(","f" -"f","UWn""Zf","n","7i[","gY=;Jx","" -"","MPH@{e,c*","Wi?~hQzOfX",",~Q/w['","t?x{<#N","CRcD" -"x+%Dvo:E{","8 qo","&+&ZDk$b%x",";\0> &^KZb","y/TR'1t+V","" -"q]\0|","iU>","",":#?A","L0;8&,[yhK","y[C7" -"(.",".et","a","\P@2Y-3{","","""wU\8a@" -"c[=5^}4","&I*P*","aLq5\&","N+/2V","xjE} o""","" -"M[U","gd","-4l_Q12wq","ZZT]L0","","d.kE)8B)" -"4uGc8E%m)E","gh-+X","}i","gZ9@?","Wwni","Xbq~XQ" -";:","O}ojl2i","1","^a~$","X^","$hA" -"GEJ","+`;>:<","VGU","@r#c-aRYm.","J>>","" -"fzi","",";hQZ_+b","F6(=` TY","H","M'AI$0D&" -"+","5!CJ0'!@","4GM}q%#fE[","","^J#mf7&igf","4T" -"f&={4VuYh#","&K%z","BRvl","<~UCW7h7L","-F:ve>eGd",">E" -"HIO","/~1cy9OMg","G/({s","}3%","","/|>]w%j 6" -"""#L6)","+]",":""^","","]B:ZZ","A[" -"uTPB$d$","j(R^","p1(*L?","Hu","","sU(HeC" -"TCD~","h^,q2|^x","!{u",".>^B&" -"b@A","./CXutA","UtN/'|","eg","k{OZ4G$6","`M""v" -"02#SV+,","kL^DY7`r","}g5L!c88`" -"m5myog1s3",";x","x","R!n8H""","6{S+_","Hc" -"h5f}n4~(`U","V","uCIpSU6 0","Zw7WX~uzbr"," Q*c","" -"iqH+rA=5j@","e-","+p:S:"";","Mj","s)L[INYY","U" -"M","<_=_pq","(","""~ge}/<","N","iu",":","Ai7 oxh","Gu" -">#K","4^Of:&-","l n","","""b_","tDp@B6" -")\&e^@yFb","c","- X*o","Iujl,;X","y ea`4","]FP" -"8;;tGHb","5GI(]8%","0B:pg,a3^D","E","~G~I{E" -"&|*YT^u&","UI__:|l(3q","z","euO","vf}'.J\MH","E0" -"^","&d?G{&",":\r","kD","EQE$","E4To~<" -"L","Kc"," ~","0s","mx|qUV","JuTeFhO" -"}N'\|u"," $fu gYq","5C7[","H+i","@3$ K:","tGW" -"#^","!){IZfj[","/$+;P]0l~","5Ga(,V",")a,","j?@Ih86qCz" -",ev%/3Xm:R","","y~Ev]]>","G","`7\S","" -"DbsFI.L/Rq","\&T,H^","n0+9hT,Qo","$,~Iac;i%",", ","rV`?gb4>" -"[)ZC","","a/_X$N","Z3xrK^3",";?<","8RX`jTF" -")'pp1nTL","\81kZO","qX8","#I%","qe|y:^=m1","w-ka#c7" -"]4TlU8kM","lR<(","C","0]O1E7*","","iay" -"G""v3v!1d","o,","\1we7dU","9kc#Mt_""","v&""q{ R t","t}ZAG" -"t","h/l}","_","Imwy%CG>RW","4SbC",",vE" -"t","@3>ml","T>}C ","pL","C]i(%S6e","8W1@e7","26A4vD@|b=","7l#\\X'gjm","ZB","/THj!^C","Kfye*" -"<=e","}*","t}kQ&Q0dg","|0b","0g*Ub!PT","G" -"n)FmG"," $)eUFe:","8$VD1'4X#M","d]yX&)","Rc0VIn","bTK;'R0q^O" -"-E#e\XH","`%4Uv\J9ix","8F|x!t-Ic","K+=!91k","9>","/N" -"RW","?'F@Cqwn%+","+.W","m~zxbMh+}E",">xL'PEk$","o8(Jn3#7hB","4y!@1Bp","D9m;","6-" -")=,","l =,#*#5OB","BNx","hr_:hKS","PS","C(AZ#o+," -"#HGXVPSQ","SQ","`","@LAh1X:","}q~(fo","P3RIUzI" -"fl6A[R","mj(","EJ/3Zpb-j","d","","rTr@^m" -"Cp\c*Vwsx","'","|h[;","G","\\U","Ex\X3Mx6u-" -"st c","","U!Qz6Ebn~","5pR4UjCjVl","i","/j^4N" -"@:","","",",w8)pEm>b;",";","gH*J!c" -"","XBs'!4","0&:kw","X,FD*","0PBc_9","a_" -"d>y&","THAl","","8e{",",3DK" -"Z7>&JO","XFr38","`","Oy1k#^",">iT3$!.","yMSO26>zA" -"kD;q.T","(ft$]",".t~'ecyAu","hd+","|)@,x""$8","X/b}1Z{" -"=@>j ","UnNh0I7(%-","p5F~m","-Na","WP@^","P(#Lp q" -"","(""nXpt:3e}","qF\","ypb;","X$","._r_1Q[G" -"K>Biv","~J~!m:CW%","y`ntR"," rY?_E_c","'u?,qp","x" -"7o(AA",">(;v:","z-z5","n }A","[79)/6.: k","" -"2!4CIt","2W@C","3-8[B","bQ~Ug28","/$Esspv","4?Daz#aje6" -"%[jTK","YeX,wa","9A~|v","D","!xR~X","h: ?smk/G_" -"/","OI>P~Cu@$","v:IQ\ZnkN*","J?Sq^6Y(","}hQ%","(N#" -"^f3M]~zqn:","jU*@%3",";z8`HsL*|","-qq","T2","`p5""" -"x*l-","0F9MDy!]o","JOynuf","9%","~!","5|" -"Dj@zV.","E}- |OB","2p^Z","B{fi:?","eL%>Pi]J'","9C""kwa#" -"LX}","PrLfFS","/}>a0E","("," AzT`6]W"," %e8.>4i" -"&Q.W3","""%5ohk.","'O","|eMU6y5h","?","T" -"A'"," P","'","(9-","","" -">?""_@uqs","<5IOk""7L@",",a@y","NbodJ","359fu`NN",".]g'\9" -"K","3OdL2","h""q_j","Qw","n5&=Er`D","OCU<^G:e","V?83jV","je|?","<",">=I*C.^Xj","Cmev" -"T","j4,}xxcV","cB","q?H","Q.HtJ","YX" -"`'.t8","N\","/Dh","j",":E*@Xj","Qs" -"b;fP""MoAZ|","u[hJ3T&gV","HU","4vT`[z","P2$*","cn%S~" -"?r2u~yr0","#55t","=[CUa#q","sG8kHNl""d}","","SJ9" -"TIUv*","vZh.EU\-","A","U","m","S@@" -"",";n","03Jp","h)","Zz:w72dcO","W2tdn" -"c[&","P%!","OYe#d","TpT)","U.+^`K","M4n~3vq S" -"h}POP'","]E","J4?3^","DGg7DE.'J","5{3fzx)%e ","lct;y9jLf" -"J3fCPT","CU~:jg>TUq","J","r1K&","%yx"";S$Pv","N6vZ1DN(" -"j9.F5","","\kiTSFFk","=Rx&g8","0s~Xi","/0peGo" -"{4(X1","<:{","\=F-!M2[","PHTy$Ot!:'","[DQ","L!f[$]]R" -"","]","gJ~imx(c","T.","'^&=9Z","_+Q#7(g:" -"M4'{","\N^","^","E6_(Ap*","q]{'n]","Ql\HKo" -",E+>j","","F{y*","","{6[XQ","h9" -"?/55z>e'x^","/","","SO`*jK","","*ORgj@QyG" -"!cY","uO8xt7 3T","ld6~9:J","RlQ4c","x","5l=m\R" -"63vLt","DFyH","=mm(pc|q","(","vX",";+W3S>;E" -"""C4-SSl F","=LL/+(","K/Eci","","","" -"WtI7","D;ou.un","R>D?#bym","=.AUe""GD","v'\&dfNfbK","!(""V)|)}" -"y;=n","es[T*o2","~kARTB","@)F""X",".!74L2Kf*G","4" -"xwtD","(.&$","$Z5BJP=rXD","ZTw,""9do","g","V" -"R&g5iIJg","Z","vGP","wG{Do","1Z","KRN$,b" -"+2z","9dX/j,\G","@=","y$T7O<{W","""%`jV|YI0","] ETvdAF" -"a>Qk","m@VB","^","","","U" -"H","""GE&","$Q","O|2-","","@C_l""ct`rB" -"BG3","ie","","{3h6'Q#","u" -"rf","","}QlF.w&","ni&a\","XY>vp","5J%51T9" -"|l","^U","A&ra,.`~","rQ","J6;rt",",{lo?bMh" -"WrYT?","q,K(gK0.","?","","WcEt","qL","`e|Elwp","GnlWNJm","`7\q%5[=A",",""}" -"^vV#","y;.\G&&\@","(URI@6a)jQ","m]~M?{is","rYeF|","]N4" -"B](![19;W*","w%J0@;",">OO~aO!mf","xPmNoX^[","jg8'JU","sYq*" -"itA[","@0lg|dK","LP*y*","}+HNr","?]nzT}","" -"tA?m'$\","rs5I5gp","6i*q","]",") %\L""Ce&$","F>i" -"*~Gi#","?sO","rj4=k[Ke","0G;yy","Ru","*9TU:$$.O" -"]","iS","-W","%#~#yBr","s","&U8r" -"","xRBII/","s$#","kSO","k8yhB?j^","!V&SSwp3" -"K>Qu","o|'PO?*q>b",")(","OcKra)^zy2","j/","yQ}/^08" -"03q4o#@","b0+K*yVO","RBD&zp","d*CN}Q","^ldUmLC%(U","@Sq|;O}iV" -"Klr","+sJlb|It","f","vnJ","",""" D[" -"ysRWT$B","e.)","@&4>1*""FLl","g8","$[d>va9","UbeM" -"","IzL3Ad$","^mGX5TK","rL,cp5:h ","Eh7)","""rDf'L" -"Q(+#c","Oct*:","","a,",";O"" bnX2","RE#" -"v|I5'yz]I{","bf3sNoy","^+N'*+""""[","Bq4@ XS""in",";j-t@Eekg","" -"9","","","J""","QCiU$s","5B/n" -"LpU.F$P`&","ej[p""","W?,0T?.c","}.L$a","#gUoHK;;","&=eHz+" -"Kt(|A","+","SY$ ","P7OfW)R","7|","whiJ?L=" -"w","+\N>_p2","BR^5rgWlJj","y9m+","K O#TO8","U" -"lEvw;WR!q@","[UCCz>,^;e","j!i&;4wcr","*V""8>u/n1","!]cK","dX=39:U6Ys" -"Fyf,o","1y%.`D32q","t|O\&","wb )|","yH{?]R","" -"]-9d","Jj+Rpp+ C;","1v,C{vlO&f","+SAr}""","@+]JtHx7R","4D'" -"~dKoFvL$","iECeIUXM!","q",">Pi+","l9nIl","8$x)(<1t" -"f_,CGQ3Xj","!","5c>N","n@3/","-Rvm3","RyLv" -")","g+{C8ep","=y","t8,//`oTw"," lS.'Z"," " -"G69JD&*",",e=","4dW:q\c?","FBPq","I","1p"";xgMO" -"p;5","","|@]","/0c4",";y2:",":_'AFa=" -"(","","","mJZW~#+VJ","z","P" -"dn}Xw7,:R","r dT","4x" -"R6Q.6r",">j[",",euQm)K2:","(","<","I'#" -"","k-{7,JW,{^","1","V%2#oE","Vh","ehN" -"kH}pCM","FAtz.d%%","m","VR","PU[;xxP6g","j6uUPb*I>" -"DfsKeW","e","eG`","#H","r""O","" -"9","Hzul4","#%Ypyq#p!","@aJ<^?r2N|","c51 ","5u'hyQ%DK?" -"%(WA*EMtVq","3-V",">eA}3lY`;","#A+ FaSrI","v#d","uy?=%?`?_K" -"J""","<}lA~","mW2NMb)lR","2Pa_?'","p[RitFhgG=","MH4m" -"?lnjj|","T1$","","FK","K\'[g","TN" -"g","","","","l=K,2J","o)\j" -"{U","E>w","7 'n$","^o e8&y","^Tx952","" -"w>S;","6kEOp8AOf","`h%Q2C","T6_7","h'%W","M~wi:fy" -"c'",":plRS3G=S","H:]Fm*`","NkOlv.","a8Io)","(~mi" -"r@M!aZ&-tWFh","uo>*L2`9f" -"A","","rI3-`YN","","Gh `>","an!S" -"oj>w\G|47n","c92C/nk","#","Wl2(yA","Y'","/ZS(32\" -"1QcaxxO","h#","L+-5PIN","iFyXP .&=","WN","E^Tl" -"!p~$[yne3Iu","",">tz!p&[*" -"mV4z","4+|A_QZ['",">,HPML","$}j([""V$X;","S3El","$" -"H?","/jz.{^<-","dm","O","gt]","hHrr?" -"tq""5je(\","IAuoD","g",",O>JKBp","SN","nS?" -"0i6B","x8^Mvu6yv","].","vjE_HR","1YG;zP~[","bR" -"i2","h#8zA","","(~W{CAn~[G","8E_|W4c0P'","" -"3$upm","""vAmbyb","msU9 3eI","hg@","2YHfF^Og$","m" -"[i","'UDP0Qw3","NHh!@M.b","rQ5","aWf)~6","bIjX""nh","`e" -"oj<#YqrR5","!Li}D:","deQtMk@?rI#","A.p","7k_h5M1V+" -"","","uVa)@Pa","3GB","-@dPF","%" -"eaI","<_f5","k6Q,!#&","{tH9e&*&bJ","TPV5OCM","8zS)'5" -"6F&dXI`Br7","7JM+7","mB77Uc_7","@74#","`P","M(\#>uZ" -"q17$i","","L^e]","75$","Q","l=m)KS" -"`{1","Z'! r","!R","WY~|l7",".wzMw","%YI=BpO-" -"r81S>","c={*","^0}","kT,r00+ggb@B_S","9_T\4IgTkB","SVj0Z" -">_Q-qN!{","kb}{FwP!I","?[B2\q","E;>IlZDY~","(SoaD","EX" -"!","FR}","H2jx","BQBnG632a","SO;k:""","~5VQu-O" -"E:#","BQ","Q","kI","D_","" -"mw0N?=tPv","]L","W6X@s_*Qg" -"`vX3Nwlq.f","[Y","pm$[;p","?8s.","1kkM^%!34","#5%bI;K!" -"!%M)fm/`z=",")x;NUFk","K2",")","",":3" -"Ndb","NbP","!k*==","8/18eI$","2b9KW}N0:","mhH%8P8" -"s70","","*x=4aA","wv9)+","_|M","9y`&" -"IJyF+;","ek","N","gs+",",","+E].an" -"\.::f.ha\m","* VMjbU ","nGQR?y,.6M","aEq/.?/_~","$qz,","nad""@gc3" -"(-","{nx4?QG","us","*!e`l;&(h.","0","<" -"_mlE.o2",")gX<|oNMpq","pl","",">%`%C7p5T","N^U^='4q" -"^p(R","K+9]i,","p0]EYeR$xl","QoP","db1'-T","48s/ioJ_>" -"S","2=t)T>zBd","","n|%(*~f7","","" -"ux'e","M;[oF5/$^R","'QU","THZ<","VrW[{fEX4V","l,dyipfMz" -"Bd.a","(z-W",";V","""s"," N","Q)B`5@5" -"R$oxUv1v,b","6","V$}W","%Hj""+2HYv|","cySY2U^HKB","x`>=0Z7" -"%","g0~3ZePY","D^q","y}E>U{(","<7a[zAraB","ha" -"^","W9","a","}0,A@","sV","$J" -"H+U!@!7ZM","y6c]I/Z|","eONy}" -"a0r`PJf,","","/0E,","SqW4ygj`","v)|0J-`F 2","" -"M^XO`5G","PErd3","'Q$\","?D","gzG","{1I0N)+.vM" -"A","~.'g","BgT.^fY_#","vow]:PZI9W",".c%T5","KMd~f2e]cT" -"/@-nD@","[/|+Q5tdjG","L","gh+`?g;`Xd","i< I34","[FA-9L&H" -"}7","[HND:;'5","}PumJIN:[-","=**","%o/O","75tbHL1,'""" -"K^!","A5DZQ","a/RLgy-)","_","j eUlA]*p:","" -"LD=hEhN1~W","d}6&S","g&8QM \","V#b=Kf6","J?","8b" -"t.",",3ZS.(l8m","ma-","O2E>V{acu^","YM@3+!K","KV{" -"@]2g?m" -"X ","Oe}36+",":ICO8:""kUe","]pgDU|Jyl." -"}R5%?lQBC","9Bu","[RU%O","V&l;&Ve","B-'","lR" -"%-9e","=.JKh","h/","33","~.*1aLx","b6=M" -"T5h?]s","e\2","*3rS@>o((","+\","/EgP6lI?T","]mM5E]v" -"'nmK)5Hls","MqP","!H{T","= 0","","{>7" -""," ","","","pw1","" -"I311m","IC8jc=","?KMP|","-77n","szOUXL/","kd0" -"8xL|_m\b","_{46""N)-N","=L*""+^~zm","k>A0","3=.Wz,","$>p~" -"u+S","N!D'E)","dkNm{","Q!","z:_q=90","b!" -"'+P\#f9{!k","\","8$8L{_iJQ","LU","z","6z-E!$""" -"m{Rs1E59zR","]#IZc1\","""8tAZOs_","[(","","0eWk^5" -"","0ZV","&a.{m]i,}\","'ppVg","gzn='~cj"," UZ x4T" -"nt pZiE,","uw. |'","0&86o*=QA","WZVisJ6b",":_z(^","YfJv&," -"(Gh)A{l""K","Tyqcqa`,up","0oAqe_","W(fBB" -"","WW%r2{i{X0","","\TN","T &*4:Lp","2H" -"Mgt}l:s[t","&cY%","&F{U","","`_&,o","u75~n","@CEPSu+" -"","-+YVyf1s","-","w:]31S.`","f6",")R" -"F","j1{","%WEq7lkVAx","DE\v5)W","`l",".Uu`_mfb" -"=","","!FbodK","3f$raWo","@xHx+%^","b^yh" -"Dx ayqT","-""`L=R-.SI","R\X{0","FD","4{i","]?MT%v" -">XKzRlz","|,6""=","YO>","^tIDT?d","tN'","];0uW2%" -"%.t ^m@D","F",".t;","","","@" -"=?g0I|Lcp~","Zne{R<","KUP4G~At","x})","""j","6Kn-#TQl" -"B=tY1[f","","HS?Gv2Nub","6^","B'kj","HvEL" -"I8`IH0Ld","E","O=I';",",ja(O""#","8","m4m" -"evO","","@IeR","|*.","l{N","CqA,n}gI&b" -"~MV1A6","@1WXON,|","vmx0 qY","&DD","~L","qK=lQS?v" -"Oqc'J","ZcYAFWVy","{Absei","lx1!nc","w""Y1Qa","O}%qn" -"H(c""pHi:","R><&","","~Ek:","*I[c","!twJ\7ME" -"*T","BMEf?'ZS>H","~A!","BL",">PV|\","" -"GQr)","" -"rVe","(-zfq),","FrU","p]|7)66[","@n*^e4","gex" -"4>a#9","d01H;s,Wh","T8<=e ","8BQo&o","}j>/<","3 i3; 4O~" -":vh{_Q(/L","@vKp4","uN2r)","P0,^]3K'3","x S","n^KQ" -"J4=ySK"," uOPOqA],","Z","=V.}yr#M.","48","f+-4S)G>" -"S;6C/mu","Sg@4g","WybQK","E4+9vR .W%","MZ","" -"e>Xr","GqV","a]-Ksd=;;g","{c')0N!","MCi","n|??" -"VB","y)#2Crk\Ip"," iKqtw",">QWer","}{r5EiC","RYitXl([" -"Q","xq1m","g",":d-","0s5q+#","pkfL6jP" -" ","K$","MI6_b5`","y-KT","`q","vL'=6""r8]z" -"","IN","vK>Y","]Tp3u","rg)v`u#","D MOYY-" -"d@|4/~Qr","t;'pf","V%rz!<","","[n","?=" -"w}O>Ks","c_","WS","gOB&>NhV","p[T6W3A+[-","Y6$m.e00a" -"+4SH=YX3""","i1","'}UM=J%\y9","Ssp%","5ct,?kY","I7O,C^#'q" -"4tl 8<","gi.","","isBc","yG~OR","a:" -"[i1q","!","ly@HXK","30@%vS""fB ","@GA","49'yrjXXpQ" -"!H2KM_vP","G(+","Ta","x%A,;",")P#|?","eQT~" -"""FO.eHhc\g","]x","Jk1vPAwd","","}"",VC","3YY-;" -"Q#:!mN.g7","~-u^Z","","T`;L","7(d","W`#y`" -">","F<","[/6uqy ","MK4*","Z+","U" -"/Y!duX","N[/","Id'k","w","%]0| Y(","W62ma`Sm)+" -"","xh4Y5:b+4d","1g/",",bBH&T","","x6=a6HhO~" -"","qMa","s@pn""'H,","@i<","@U%C","Z. VO]" -",Sb3Gl","t","44","x","~","Zw/P8P" -"N[7","K>nF54""F","|&/@hY","B[2","Zi)","kPy*(\tIEX" -"eH$lI","B","E}Nv,31V" -"u","c^3aLxEs","`2f","$&C0WtH9","9=fzolN*^z" -"zto9m*{","q/UC","$0d,1Z]*^","1x","b@6C","Eg6ld|k.w'" -"fbs$""dTdOr","%OcmCsma","Z","3_@da|z","O=","*x[-T8!'""" -"P ","VI9l8NDsX","!)Mx","m7$O+r^CXA","=3',#i]%","}" -"jZQ26","@}J(","!H_rpoe;",",Yh[","@1O@bc!&3~","Q5|g&+" -"MmaN ;on7,","Vo9","XO","SDyl(P6""D[","zN<,q;UGlt","1vu>QF&Bb#" -"&41sP","1L","N","]d","W.SVV[O&$","O6" -"'bdA","",":'d$DGmA","}","","]8Q9f" -"*/87(Q$N","]?","X","|?^#h"";[,","9^o:X@!<'","O7" -"v@rRy","]","\rhx,pKh9C"," f$UE","BT[1d`)a3","UZ" -"&\~7",".",")No8!{&zA","R>","fBt5rs8<","mX152/" -"&","ZEP""","GV0=on","/wu78_S?Zd","@>NT","pO4-$oRY." -" 9I<#5kPq","g,Ss\~Qg","NU","tHr[./:~","ZDRR1@-","P~~%U,iGb" -"'!","}","kJRwZKuLx2","","'%N=6v^9p"," lf""}u" -"e1[t7Y\B1","PM/2 8+a","%OWHm","foM3$:","Kc)",">Cuc_" -":PUV1nv?W5","*","~l@s_","n?shlB",";=N*P?4h*3","p3jLf39<47" -"9x","hHMPhPA","XW9{b","7w3","","44""N#h" -"59Mkps^F","{*aYUU","","","R!OIZmS7J/","7E3f&g=T" -"89E5}=@","","dDT","UUa","","UOa;`Pa+Xo" -"A{G%`","CYN7g>`^s","IjYb","tY8","","$^\TWH1" -"$9Q%T2G","","{B","()x=2","NY&5H{R@D","8cS""1/`P" -"I9GG=owO","Km^j*x ","<*V.a9","]>;_d]'rP?","&6","" -"(","4lAY[xLS","b9^62@" -"KSq*>`^","tamZjqfI""","4X!&qyR","IAw/)) ","f<","FbEL""" -"xK#${E|&;","v&7h","fr","","e1OJ;5OlD$","c+" -"A}i","FXqz","""|;!E$""/%)","(B","0Iw q+","F =+Oo" -"HWDg|","rj,+v@[","BLQh","\kiJQ1QF","Mw","L" -";\P-}G`6","%&zU~KfM^","d7Q$","o\Rux","4rBx(","2_+hr" -"TqnA3{T/Ch","V","hm","A`'a",":","D/QRkBg" -",t{E","KM"," _","H|fHS0B9","v^)?mI[@","5" -"\6|w/b}'B<","syl,","fz-*FZ#","i}Q4S","","[a" -"KwoiUan","&Csp>0%#Ma","+8A&9Hmg","(C0kVRd%","*2R""","5I3|r]" -"jd$pN",">0wc4","t.","","K","U#7" -"E~fj^N]0:","|[ClslGP","Ek`yZ;^v.n","4|TeYq}'j","QV|~<","bHU|!W" -"D.","@""J2CQ{v","/5l8Z","Rd?$+@","w","0y8|" -"","""-(9m5","""Ib~5AkC^D","-FG~","","M;O*bW" -"@PqS+*h","9{H","CAuT@LL""","1/z!","dg""xFuMP" -"N","[;3M<3/6j","x)s","7$)=^MT",",q","*D0F" -"Y","","X[""+{","X3","N/","~" -"q0xB","^_)f..p=~NV7","m6^c","n`oz5\|er","k["")","x]|Q!","ZB0t x" -"","Ie;$W7Ltq","b?+R m'F","R_@","a(aK@)v4","d^" -":a9LLz5o","Tu2 KmR","jeOLC|" -"Ab.n","A[M","O_B","J{p;","oKo>{","+N}2h}lf8" -"@g'z\","p1[rd","","lp=`""H","&Bey","yD&" -"d-","$6","1,l","m`Z`%Vy","G:JVW""","" -"d+""7Rb=4Wk","",":wc7W|HJWZ","n","o!Ll#k|0","k1" -"\E]|","|7M6Pph1jD","~q","/rhg","S`T^VjZ","]p{i2M""@!q" -"0|s","!.J{G","Q]VQ=QS","!3Ow",")>4","EiRMl" -"W\sSAu","P","hd%L~uL9r3","WBeO@W__","ET","p*7)?" -"dDAp1G7a","~Hf{wk","\>mMvO^M","uJ3","2 Rjl<>","JR" -"K7","R_"," ","d/d:b%k@!'","l","i%ymq|NJq" -"@>(Kd8ee","k6guOgk3","""]","Y ","YC\;=W","*upJ9sf}y3" -"I#q",""";+0X","","e","2J","3#M7`" -"+:e[mW""uD","C#Tw\G","ON2&1","VLK~.?z""","[4""Z","1" -"","~.,38","4sz#)QVo" -"4!,""y}).PV","y|o","2","Uzw[}","_b$oC=!","7Bcv-T" -"SZv/gj","y1Dt (","H}H}","","/D@]","sa*" -"*$,1T","(tUe1&","""{;1EG?","bUB[{9" -"8x""GrfC[:","7KBMvnn]<","$","+]35m","-_","ou" -"(*UT9}Lf","v;","/qBh=","8/pRg2P~%","\]1","Z" -"*Hni\@Q>;(","QD""?BA.","^h>","]t","E;Wkr=3=-h","" -"/i7dns[<","zA0M5#@e",".$","","A3Q+a","{Qt""n" -"a^","A5`G#>!]^8","","9","@Nc22${L","L*R" -"Q","ds?U/","c,","","/","" -"C6qs","MEW:;","","","+,L5,^63""^","Urb^;c" -"on","7!Kw","tee8rRNrJv","^;1:>2","a5"," HJOU" -"#8x_","20.tu","=db}Z_","@jbZ+AZ8","VE@b`uiT=&","J" -"9uz","E&Hqd2glvv","t4[*M","*Ot` [","dXmZtgE","""A{=" -"wIf[XC""8/","sG(U.l)cC","[tg","y","Lb8","yo}wO" -"X3>=RC""@5","(e?WL","_7^]2","#)dfqT""fu","{k[U`$3Jiw","s""gOd66qr" -";w9l9","""DA","gl3","jQ0{'\>","","OF" -"JcnXG\","_u'XbxK4(O","LzQ*","tGoHd%","G","@WO;S#TG=","ss6'6|.p","" -"=$","&I!","^D}PTpl","M;_H","x-PN","OtkNQ" -"\plR Lj8","dGW_","","","lv4a","XW2k" -"_^@=;L]-","k&","%_'V",",Nf.QD","jbaG$"," $)YbQf" -"m^h{B","8#Cy","U","mFb$$fc","1","dz(#3" -"(`5","JZ","e#""","]WN","","L_" -"=KJ1+","VH']{O u","Ttk*,toi","T{c","uO!@`","wJyKwtj" -"""we]c","KpQa","/kc2`G%`lE","Fi","p>1#!/T0*`","""G[" -"[FwV8vyqg","","w;b7!k","4FHmLwB""b","X=","we/",">U","-Bk/t","DuhJ8@ut?" -"ME","|k]d.6 ","bt},%-a_b","YtF6jDg_",",Ztt","[+Pwoc+6U" -" lcL","","0pJp7Q","N>0N)&Xe)g","5.zbIM>[" -"t""&42o","","U","q]RJ(}Z(Qt","'Ahx'","Q" -")","%F(U ","yT^vpM","|@=ah8T5?" -"1`Hy6nb,O","8","e[^}a^","c;mKT<","M-S+]","v/J\1_!" -"rL>ABq|_","+$y}j",":;5-=7","","rrJ'""'xR&F","@<8a" -"5oI.I?*^","Kx(X2UZL^k","nka/xTW~"," Zl8E^","","Q" -"*m4B","%K>3","|a~$0","h,&p","bC-kO6D","Lh=BNr" -"ef] I2K {","Q,V7","[&D||","XbBsPO","9B~A\y;kU","" -"u`R*aS","|eQ3aP0!&","RE(J}","","9ki|rM>d`^","hZA" -"*qXOdYcT","kNIZ]y(>","vkpcWicf'","2j9","d?A","2a81Q-k?~" -"q?","LGP","1P',","Uq_wAke\^",">gpP`o4Y2b","DHvoM6c" -"g.1A","={h]sHeb","g@wRl$","","!!B>T,Q","W2-LEI{" -"","""4VC#@G|r;","A","*rx","wz,ri","f7f" -"n6i","hT.P(gF","g)Z;.\x","?1","E8cg ","}/U" -"y@4O=VkPj","uuw{VS","AqGw(8nA<@","'T+dEO>Yt","foTr%[AicI","+vYcWQv5" -"ce$","","Ve.QW","9E@^","R$P","M{G{QJgv" -"u?$.lVL$M","~pLkO","od","","QXQw'W/Ny~","kJz^@" -"sr'Ny#_M","i/""JVmx\+","&v","2","rIc""p1E4","t1" -"~C-qD+)$=6","#r","*k^u[fuh,9","w2XE","$;""[","n-" -"s","|","","3n","{J7aU~3","Z" -"wOO","","m* Rva+","P","9Ui%S","^I/>c" -"LM","D","TBJWtB10","g*(2","Xs$*ju""H","}Z}Lh]" -"Gt,BulVC","SlY","","c~hjy4$""","DkGCX'/3.{","'' P/s" -"*H;","H%","^>q","hu[oWA$$","pO]#P<","RYe" -"yw A","Q?O8GD9,Z|","U","q;[2","I$mVse","xcT~" -"HMB","qu\L","","%B)g0","Yy5FQOQ>2","B9MY" -"whsJ\","%qi","UV?|f}*","F`hs~zqA","3dCR+Xm~|%","c.QU?J0" -"gvF%|.","3io","v(","Du","2o&KLe","C.V(#POu" -":gb!61a","","=o{BRQ""g","H","*W#d#%<]","oY9" -"p","D#tj|+~/Am","Bu)6suu""K#","","#JRg/sP:-","p+t" -"3m s/1oj+","#V ,aH,~L","j4tk[","","jPXV]8OB?","Z?i:" -"40[","KTvzMw-*g","^zDl9s;","a","","Cq" -"Fnh>|-u'","'","""z$]VqI$a{","_S;nX","ELltURP","<`}","""3d|Qev8C8","cC7k" -"K1F(jZ&)","","[UB7","8|","","IC|T" -";t}Kg5k",".^@F~.c","]Kr}-Zx","wco","c*","F" -"yyr]o6YcAC","dq","f","Eqdywx;","^","&F3q>Z?1/" -"YkaUl*",";","zlH%q","Q}-H7D|q""","t9=E","ud" -"1Po\)x6O","NilQ","O3*Txm/R","F/xp","35","=AgvpHH1","mK$d","\w/","q1" -" -:ofXf5 Z","j/X)","4>]x","JM#uP'UL","""<@cK28\r","*Qb P&QR" -"d","6-Y]Xi0","R9k'b""_","qq","L'R.NCB@a","b0n" -"i)\R9","K4^1","fW~","<{I8]xx>","~TG0p5Dn","y" -"B","!u","XxIC5","M`B]MomG4O","G\jxVH}|","?B,@fn." -"u*Z#&*Qc","<_i++PJPP%","","J-""yeaAz","RV",":zzoTjuSu" -"!)>JqUjQg","1<","j","/Ib5@whC%Z","/","f&a>Zq$xn" -"-oR+V$t2","ZwWXwAPy","\9NU","^E$s7","]obEe)T@+s","T(Hwo(" -"","5R+@",""" ;OsonX6","d9r?/?$E","$3/vxLt*v","@)." -":FV0","E]91l","<3k2Cm","[8n\k","I7TxGjT;[","iNr`KAN" -"$}2Amc#m(W","8[*;","F}:","z","~#k1K4^","6 ","SQLO",");" -"-Qj","a3p","PL~s0","AuEr6","`UcjuA","D","@@/;dD","lqoRUu","ub(]Fqbb""B",";9o-#+)_F" -"w_s_u9E ","88","f,9hAS","""$d6Fv","J""T","ma>Zb/M/6H" -"","f15_?L","*""1'}xa","Rh","L","" -"%2 *","j","~6","n5s|","+>W","","&P","nB1++lumCP" -"^AC=U","aO6~","XlSj_emnf","98[D~","","WQ*^h" -"Ct","djGwZ>","43","mh","O@]v>5""=0","o&l>e;zqef" -"9I+&HzW","UWF",")%eQp*iB","TagAMX{R","EZb","aVEDi(tR{b" -"@|24g{|__b","YqC+","JGy\)","Fcml","","R:q?9,-}" -"""$V'","/B:&9V","1aol7IV","","Z>+o\+","rJph~L e" -"=k0:8Au",":[:!GOXbu_","/u7+Q",">A9Y","i/.W","ex)MfbcL" -"m~r+","2>v","['(MV0","nT","ov8X_^","$vK" -"}nDF?%U$Mu","/Rh","""w","$$FXZ,","A;eI9hF`","mMT]lR" -"","9~v/q",">j","g.g<","P'B [K]V","'@w;Qap" -"u','f:?i","d1-#","cw""""ll~?","ZEdV","""3&","QwFZDt" -"oUGrr5AF","f","p<6]=<)/Y","f2iP","II/>6","mD\'x}E" -"Y1@XExlgX","ux","U79c{,;S\d",""" +!QH(","x+@[S""w<9","6Qu],=" -";C#","\CN[*","h7KuW]CZ","W","+l1Q","|,5;P(w" -"e","D*>{ Gz","q","K0'J","9Mh/N\X5&","$h62qDhC}" -"a\B-MUT7""","&","M]EO!a","QaI@'fs","Ex(e;Hdh","~j8\gD;r" -"Lxh&eC","","/h-!mx","","^3Pau" -"}]7?B","W_","J8>`*r_[.","@","(-N]F`.?:v","" -"Q%","wZ+Untty","|\~\","{z$8I","E'BNN3+4_","w""nV+j%" -"%bTi","aYeKT`","V","","/qriV[","pm72)n#v$N" -"hs(","0",">mUuk","u","C<","$J)!X'PMV" -"1HNGSv07S","})Y\3j\0","QXEKX""%","}6","]1i_ Jmk","fOAUJpG" -"Ngblkh'D","urQ""Pg","","md:X\-A$\","o}A4",":WIG&4" -"FuI6Vf!lgU","EKMu","CHfv",":{N","etRcEw","j" -"[;","Kwy7\;","KSC","0P{/\au","L5","VCwJ#;{S&","{\B7T:S4Q"," ,&.$G[x","$aU5:evb","d""39_Zo&p" -":_,||]b*","","f}]L","%I~","9-^Ggt","TBT}k3]]T" -"^U)""}","n.UUG5X","K9Kmda4)","{U;","jE4`euHi0:","?,myi04?" -"G~@l",")G#JDr5~","I}","#","aE2#up""~","gXM+wstSe" -"H% ","v'Y}","]6","4AgZi`64","0%e^B93>kQ","CO6" -"8K}","2vaPg-P(=",")7.L.>Q","7\9^","fAbU"," 7H\t=W" -"w(6s","7(&Mzxc7k","-kK3`P9-@","9)o","u-lRe`A%","%SfPv" -"NFS","R`6)`","","U1eR","qK#HJ","1G'Q.3]" -"n$","v:DI]","R(ZO!Sd","~)","","m" -"mMJ'|tLiv","S~WBIjy","-!DEg[\R","","0zB>","(X94" -">D^v2","XHhf#","M2""yDE","IakH`!$pw","x~3PK!q","CI4l*," -"e08rc+l(8","wD!9]h!8B","hc= ucF!","~9","}4+6","9a" -"","fr","4?b","R>s>8f\Ov","J","](`zt/,Qx[" -"r_]7{HA\","] #M>","#Z7~;oJ7 ","dQ'r>,)?A3","-pPD}MN_qD","" -"o)&jo","\","O0","[","2&","z" -"VRU_Mlm","*7WP<9","","O,/","s}z[GPm!","=J rfgZ","?G|aX18':","~i'C@" -"O_B~?F5","xTM7","9|f","Kl#""*wns","l]ixW&",">l" -"8uxz,#O","}","w$%O","ds""","Z8|k,","" -"x)","f_9l>2:i","Bx5%","Q[0rm7","r","MMlG??$92" -"X10q","H4t>D","jf/=","l","(L+FY>;","V<\kp9_W","z+","uW$Se7'A" -"DD4+","","e6|M|j","I","Y\j3*","n/V" -"m","P","5}[t","o$3XaB","(1p","Q" -"(l4","+5}If76","]:as","<{jR}[=","","Q;b&" -"&@0RkC2F","KpP#;7}0$","Qi%HZ%VG","d","U","/VC)&1z" -"c1<$OIm%*_","iN'UN!","{)oQmic!","p+^V.$","/rYs{<","Zjf!J]s" -">EI$^+","c@","sj[^","q\Z^v5:","x6","]3Fv+B%G\","!iexxRDer)" -"iz;C","*%]W;-","m9gf.","~EqHR7JI","63L+/7I`h","yq7"".n`>U" -"r4x@vF>x","","OXV3","sF`|wfBnK","","&T" -"e(X,(iYjD7","dGEtB","","s[=!^Ke0fs","ssK[)J?YnS","P!UL" -"","|62l|%?","6C","","","E5""5^xE8.y" -"r*l]6","=","'~omw^2H","y|W<","FJ~+9|",";>+`n^O" -"I","""SAq","( (w oOjfs","lua96Jg~u","L%K","^c" -"Q#f0GDJh_Q","fI,`>1:hbc","yDozSJ/c_","q:Gae{v;:","W)[7""?""Aj-","bJ@+N-AEG." -" &0Bz[a{ <","Tlm09","{ow,)>KiFu",".|z/","orZwLWz","sb]@" -"%#4dn""W6v","",")\ ie6Gq){","&","=oAo","0@Wu1lW=4U" -",}D:9","i>ty;^E","","&L%Otmb","~)Yb","~" -"mKi2","102d}Xj.i","/Z.hw!W","TU{)`","2'ptLd""","*:U ""Z@)`" -"","O?X/H>","*","","05JMV","]es)" -".#d]cs","G]i:-0s","","|","d`h3","?R;" -"{","",";,8Z","UMr3","GU>$C<#=","($" -"6?4^","W=","","YxMcaFi","","QU}RNU:" -"!Xit-N-E","3]I90","(pl&s","Rh","","$1 /|" -"WF0","YybY","o! p;Va0","zUIA","YdGvc|","\pzZF" -""," #","Ds7A","zfW","D","S]]>yZ" -"^zaep.&","[fVOXP","2t8","94#PGqW|r","%d-","'+'L|9T" -"G'+5dSY7","~Bn[ka=V_","[{"":{5","Sd:O=","","PVa" -"ok3J&","<2)R B","3nHmW2Wh","!4v","Xku","&8;%0" -"cLH:","","* m&T/jG`(","CH*","z.Cn3aR","gZ" -"FoUQev","'~!jP>/:=","KeJsGi4`","!@%mY+gI9R","M<^","b4Itg.DHd""" -"v&v``-AQ",">Tv","DfgIrN","+m,>x","nJ%/Q","2+r{-mz`k" -"Gq_,mf","}W|","[WyseU","il","9KG$Nh","n^p" -"FqNa-`P~]","4.z""2M","&UPS","1%`s*5I!","I","D" -"ZO+S|","lP?Oo","G1l","hHJW^)&5F5","!}%-D","zCXD|" -";@^^+;","","Rt!>+'`+v","pXaEZ+8z","Y",";`P0q^J1%" -"o8RLS3iDP","j=w","_,@y<-","Ce{7/88O<","V.#3V","N5\Pt" -")Q/3d(/IV ","j`G:J/","L!,.UynAL","%s ","?Tva%Z","a p" -"y%mogcs!t","&e|qk","WGE7q","","","{\s{k`" -"",")(","?8#e=Y","Usi-","d","o6tiyX" -"tOVe/f'Hh`","W""3?^5IZ","nGKdv4O]","2RW","h@Mk=qU+","R x3" -"pAaqAjus","i|:","x5Kj","}b9","PI","})V.4$" -"h)nUHN","N2c KreCQ","b{","p]T|^soV",">f(^~b*","aX{^8iYc" -"6He>J\zfYN",",-e","]9","1M;;J","7# }ll5a","#","czPm+","Ojt7","dg6d_Gz`K","AQB?y","P%/7M{(_" -"|{nW-c8T-","Lqb9B","^,<","V)&{_3Kp","WCv>rt","DUi!/Psch" -"'","","q%qyhzh'})","4o&","{z0CR","n=#Hjm\H_" -"","'fe","s-B.%$5?l!","&{h;QDK0",">Rj","p.1sET!" -"","n!u8RJ","WG&67~j","x","F","TNaMzW.V" -">","","NobK'eg,y","K|^)gpVP$","prNi3","E$J4o?m2" -"2xfMAc,<)","","6+%u","hoNrez","beSaoe","QJv(r#:O Z" -"3k@}+'i","]pm'|",".cBD","S",".9Ja.)j\un","pl9" -"'w=lq>5Y","O""","o:lgu=","!xO(",")(3*T","" -")","HAKr:]5L","","`wm","q","Bm0" -"fCI\V!Tg(t","yJGBu\mi]","}J 2*cEYd","=>TR","b_Es""","q" -"%cb","","iUqtTIy/","}","[2TGE","(Q" -"c","-H^f%i ","'3\}H#^0","eVHOQ/R^","`0","h" -"#_:i*","YW;","","y@+0klU","D1A@6","W&F^`(O)B" -"p","!t",".G","","-G9&/XyU&","5R0+-T" -"!h","Bl","E","G]wxk","AqC~K","y7eiO" -"XW7@","=+AF?O0/f","","XST","u^4_3","v!N7.=xS" -"&{a$xJYPN","S@Y[O{Rls","+v?09|`,pE","UcPW/=NkJ","GR#HB","o" -"","E3r","$K","P]",";glO","80R>" -"Z-R>","E0>Rdk","","""C8Ipn","Y/jY%(EoO","kTEr4cQir","t","egA3:~4f%","" -"^Uq","","",",gOJ%","ceKP|B" -"K4*#","","EI","yW|q;jg","(}uj","AL7iR8%~" -"6vqU`",")"," 6","2ke/`lW]|e","","Ri:>_NxZ" -"",",5ft","6S","8+$f","cm-FUpy","TN" -"RNU8^2","&ce{.K(1*!","KAe-XRL#Ru","y)$#]JjL","S``.`]","P-)XW","3$5(3<","AwbsP0;&Kx" -"O,mcSHZ@","6@*#","0)","""q:[\`<","QVn:","" -"I","evL","s2o","""ZmT:3O-~+","!|TZ","zP*J3D0hO" -"W9{)%L","y61a","","""n4^L`","3|","kBoX" -";g:{'8q",".","ksK~mJ&","J","tuG","32e][qO%1" -"^M2<","z|s;Da5B5","!Ya?l5/8+_","D4vjM:(""^a","d4t","7" -")_9o","NYe","lZp%Q8tYD",")CxxziJss","p~","oc","L`%H::9J" -"W","(@uS","<~RK=","4yg","qN{VNx=","8,g|hH&" -">DvSB1#hz","y","P","}","#m","4LBUACX" -"#ab","vH4+Kp","(efQH","1X[y*>N|#"," B_n+/*","whb" -"{S[e'`Q.E","l-BUV","~P6&\","kwx@f1'f-X","|li_"," F&^~PH""TY" -"3\SO$TY","a{","\aE6{",";KH","Yj:""G","1H>v/" -"o'T}=N3","","/8","[k.RX","g~","" -"","MF",">p]+B","(","5","zxov" -"VO","fu=&kgYh","CJJQP/3(8",")J ])`9%","f","","s,41i}td" -"","je>}6N9","s:lhwbm","I_w(","M;oC","vx-" -"J]","=N4q","@u0""b","","@^GzUnx","g0YH" -" ~k;hC","R[1}^GMs|","XvW3}F>KR","5>WY(9aBj","DRusg","RYR" -"{k#96oEr","s8Hu=O","","a7","o","""e<" -"","v","gw|#,&N;","nD.v:#A","rM/?3K.O=~","C6rgq" -"A"," Hsm","W!ozP76F&O","T","ZkNlCMF`","gsxD>dk" -"U 4-p","Qtt EWyf","k7'+^c$65","Nj{}j","Xe`I2","QqR}[t" -"","]BIeww)+F4","%$","#o{*","HEY&|w","/{;rp:)fD","","B","o" -"s&Yb|A==","","-&b","{f","oR1","~fymA6\C|<" -"svrbqg&B1","1c","lo","U8/1V!`v" -"J8v","4rWV9","76U9q{KV8P","vv) ae1:.",":QqOMsZ","^#4.;sg" -"","6","AFfoQNEO+","0{?WJ%","`0R/>]","" -"-","h",">","bYKG+T",";vmn0u1us","ls$x-`)" -"aBW1t","m`%l21ta","`.He.""Wk#'","","`p","x3%a4+?|" -"Mr?i8:U__t","aGA-!B&w","L[|Ui ","kKiJ`W!"," Furo","`g(WgAdq" -"01`dNfI","3`}C","}-):!3x",".#MchD","d`","}" -"Jh|,&4Ff","T~.""RDlk","R","*","","9ON^xZEi:A" -"RQno3","[N"," `}5Ek7","(>","Y552I",";AB" -"0=`","&H'4#2}A$","`| L","gF","Y{'E@:H3~M","OCndT't-" -"oe6f&",")7<-lzrZl","8{tT+v","ijM","FZ","n/" -"hyVrW"," ;(tj-q2","6#k!|B)X*","?H==`tp#7","WR0_y>={[","M" -"~N",";>i","l:#","w",")41#l","" -"UB-J^78Ra","""","","]CpRDGNi","t@$]vl%P{","zB6 #e"">U&" -"K:;@?","*","y]r.R<","\< -dU","],a2","F?pwg" -"&p","FSO;|WZ:","@","F1z","Tp{w","5~d~[c4i>g","1/z%p\qK}S","`.G6SG" -",L=RFMN0l","","k/g}x{%Q","u{","y""Jnd$","" -"]^iUl1(","GX~?:q|","","DKto","qyJo","E0BDjFqD-" -"qx","%F_`GWJ2d","FMf4|Bm5","","",": " -"VK>\f=~!","ps4","$UDLr%","","TRgk","i)n\s" -" \b;","7<=J/O~|`q","{","Nz^Ol.",",?","lYzM!A!1" -"A^Bg[7g)","s","aHJ","8JavxhkXHV","$1","%3G" -"4'5]","","(Q5{lpiB*M","C[~b|#t:d","#oa","G,`g?)uR8" -"","%o#&","5YL>'hw2","$-8:K'","6't,&sN[qh",";&lg?" -"%P'nh;&","@hB]=Xe","",",BKq*7","3kpkB","9^wKD[" -"hFj ']>{","""QW","HQ","Z>OM?41\S(","~qaLFh","rim+jN+" -"7{y[D","f]IYmPn#","V$g","1-6S9Pi^t","+","] 5Jrngv:P" -"'c45O{%","@","%#`@4;"," V5[1","0-d2","","","* " -"{","Y W#BO K:F","u","r","Cc oQ!","" -"*&\pHM","","z3qG3:e\X","4","l- ","$=e%|pmXm0" -"Z9*""]g",":","uLto","T0;N q,]U","puT)N4","L^7)" -"Fn}3f.LuPR","OoS6tU}6","AA& XSb","pVbgn;{ub","D","LPYGNNezf" -"uX|X[.","Dl,SdFOy","$9<})M","q","","[Ssf.Rbg" -"L>I","$X.","#$rA$7 #","utSV'RS","#G'daiU~4","xkg " -"dc<%(;I","ObU","""u\cB:\","","pzB+BKW","!@0x" -"","6)uY{","#'7GYK\","^RiXO/|?i+","CS,_#","wY,r(if1,(" -"hm-{","dp","'""E[=LYTk",",X%>K*",",","#TnK7^Bz" -"lFtbeR","%`)XZA]bQ2","HY",";^hM1S;oXC","","""e" -"DQ4CP","7""r(o.h","rf8r1","9oOobh","S/*.jpWQ>4","0` hF|""W:b" -"Y%q6",":x"," ]j5","\pQMmt;u","rTMG[pK","@!|o" -"t>I""7vmd0l","H{3Y8;X+m","","3u,,R#w"," Jme","" -"o","6LZff^3","psjx","2M>?rr",";%2^'BH #"," &e]" -"L=q<","GF;];'U@","","H","@(^!lnU7"," o=z)OOu" -":zHk9:.","cEHow,","KU@T#tZ`}","yz[)3","0","Th>'Nz{>6" -"9","+RS","(/t0601|Yr","","c/aI","C4)'9[s1ym" -"YN3]:B|P","7lVL&%","Cv|+-0sCm",",m>uClMAI","s F=","aQoeb9Sn>^" -"oI\G","]{t",",i\%ol.","3&","JtHBG1:wXO","qd" -"\2-by","","RJQroIL]$","dv.""- <^=","wNd=k:W","1" -"Ii","gkd","VF7uL","b*YK@","f","9;f6|w[0\" -"rqb-","D%","M9^fGFFx","pCsG6-vU%W","U+?gL","S,#4Y\Ba" -" ,&48]A<%*","ZSa -bdk","4AAk4kI","Q&E\","$x\].$",":*=BB%a)" -"Mrg59g|xP","/o8$,.;h_","{|ce|6-7I0","@<@x+byN","KCs-`*J","u_BwRG" -"w/","Qg","hf`",",dvS)","Z[PzR>@>*B","8e1JYN" -"!-]","(5<1uTFg","13*Ly*","V`toYS","7H)@l&!",""")","_B6p","*ndbzfk`,p" -"B#2H+ql","P~TQ^" -"yX ","w","= z","7L0k","","IpP" -"","H|","0",";%/|'g.,e","","o'o]@" -"Vws","tW5eMg P","bN)~cT^-oN","X","""5u,","9HO^<" -"Z.e_QycO","","j8","XV}hHbN&p|","=7}Z","w""!.H" -"2F'i7(]_/","X","zEme:* ?#:","kS&T`","e~9}YX#","4MtIdWXn" -"f:>1N2,4""","bQ!@","y%","qzw* E@=X","L","uK,9" -"G*f\?X\","J\+S=I00u","j","Jl#C","","" -"byTt)","pb!5KU","JWP&XoDbu","f1?Lw","u&Or","a9.MM+nkB" -"v{n","","7VivPC)r","En,","x","ts3nLc'd" -"ML6)","%H>.Yvk7s#","8","na","Kb@%","90B" -",MD","CWKn-SSJ|","F'V\","4=1","g/Lv(e=:b","S4C/,$zn$a" -"[[/*m(r","Qff`","","EQlprgP~;!","","cK(<>5~^bg" -"bdll=T","E%+Ro/\#""p","zU#q?Uh-jN","7r","@S@k/t","`#JX (:GR" -"/","MD;u%4","51i2K~jBD","UVCu`P","J|UDt(5" -"YnX*V_h|~","ql637%&M","=b,S1h","XVhx","LWN/rY","" -"eK+i0z?&3","j+}F","&EWGD_","D~e","FDj(.S\h]b","p3/" -"'K/8/","-pcH""z5#:M","M","c","zQ79","i59V" -"","|}","Rl""e","3+","rqA~S","GGDP {7" -"k5mL\=","!0Y>oy","+L+g#","B","g","" -"k","vJj","v8F|]8WwQ","%W","0W3","a+.3PAanf" -"muC~Tz}5l","","*FQ |/DZD","",":Z2t&N","F|S" -"CMK","aMLU*?^6:","l","_-z[kX","#eJ2""/oEb","i&J" -"PXa<%4s.x",",Lj,ms",";_QAG","\M","+xZ0D1W","" -"Iu","@_$0I","!~I","0475?Pr","","xfX(5fP" -"M","KW","9v","e","G^I0","%Bjba/PTl" -"","Zdj{GY^|3J","EQW2nF`","ioXX7F4(","Fj|)JyCN","5d" -"X<","SX;.v9","8","\=v}Z{i","s","y}m]j-D;L" -"7","C=.9c-V","/_b","rsI%","\9$","OUd'uz|-" -"[vMQV4kkg2","G14a,A@","X`k0;","",":u","x)=N" -"Y","OnMFVMzn\","wr","RT|tXR2","wQ37}","@" -"","n7","^{hYk 2","eOtY\c.1~","`Q>G'G_{_",";XG84" -"%D","dk_#r","dGvR,jI.","Op9+4","=r&2",";c}M(R<" -"M]Y","]","","c","-r"," " -",^]k"," M}","'J9O","p&977\26","h.Sa~7~","" -"VL'yY","Wqb","`","j6\w","YP","Xv`?3" -"v3+V0Ai#a","a-#","X","kHU\&*3F","q/*X8I$_""Q","" -"EH=1D&v3E","/MF","mc","kj\Se(k9k","_cS\*y@e","e !G~Z!Iry" -"fcFbijd9n","e{He`Xh","}aA","g=R$","Kl?-LGQjT","x6T/_`m","g4}OBOqkyg","f}ul$/G" -"","U","4:3","^6zo6?AS","e#A0:]rDP","$` w$S*zE8","pWxS9E(<$","iPO?5}u[" -"T","}yb","","p","?W(V!lmf6B","CF5I" -"h(!])-","k","o2*XV8","3=T`'3M3KL","|U%j&E:\&","" -"KcP>zQ2","m#74#6","m<4]RL","R&@","GukI4z\",")RQ" -";","{6iH",".gs6m:-N","+#i^hU","&t^7j#qS","|uY2QEew","m`$Nbzj`","p" -"e6>.""l","@n0k","^\z)z\g","B{+","","XvYO""" -"9","x?f(","Qq-sF","-0'U","1jVn* X","cFjR" -"rx.];o9ay","","<","""jUbs","C/1LG","MU" -"","|70zmRqt","Fu-C4=Q]","}}","%?E@L0 +,","vgD70ZoCMA" -"%pP~$}mb[B","aDNA_,(SYF","[smlZ;6s","-]hJ+","=z^m=0)gs]","m,(l&N""" -"9hiz","_HXn;}","2R7rS{/am8","A:f5Ah%","u833^tC<","y~ShTK(" -"kx.;?sUL$#","pc","F[r","tj7wK","","" -"_r%n",",[j#|","?8","ek""V{gIoq","P f","|l]:\-l%7" -"","Y""l8rV","wrn]30xDm","VuU","z",".{@CB-h;}" -"\W{j","zTj^qif""k(","}hB","k{.iLU[5Gc9","" -"'=E=+""","~2{j^3}}S","Hsmu`","s#t1","&R","" -"","#T4","XSM_1","","E4","!" -"<`,&","ULnQ/NZW(x","VsSgfCRD","U6L5","a\","&wEO4{_z" -" Jy<(1Pi","V5","';<"," @k+v9N+iw","Yo)e?oE","w%J~Zh" -"^cXyo",";n","","jDl>$7G0'","","u" -"l`D6","5x|+Ab{F7","d","U6K&","NNvkG|","IQe" -"gK )|",")BI4Bt5S/t","","*NGlRJhYW","'}f&","Xi~$Gqls^$" -"a]Y^71","r07hx","@","t5p30","]84p","b" -"","OQ$","HD","TR#qR?u","","`6&_Pz" -"}","b'Cz9w)c","0V","dg'3[Z]rM","G",";2;a" -")Q;","G&'rfX","7 3)E","/3]a|C%","c`}T""eB5e{","[6wA\ " -"!Ts-,k 1",".h*",";xa\AOB","","K/NX}a4S","^" -"0f\zlhVE0","d.#+h7K8r*" -"mdM:)#","V'\z\e3","ruH#0","R|","D{dmoH","?~5z" -",LBC|e","p","Spym-:{L","$eL","5 ","b7s?H0" -"2se""cYG_","={jA-""#)^","6","A$%d","qGEyiD","" -".N","""%-gc","!","Vdn{iRwo$x","[x;PX<)","3" -"E]","1IuA","s\z""#","""~AVs4p","T)A","! C/KT" -"*UX)","wR[%g\","W%JC""f={zW",":u,","4r","<(b`%","" -"~}3Cg","K;RD-" -"jB/?\?(","j%","]rH3*Xfc","[ktC@}","_oWt","" -"NjgH{""1","P f","Qs]/","|do=","qTaAF}0","3Hj(/'*" -"%1X}TH5(","{#KDZ","#?LpF","z\""\u!","ZpuzX*","PT}" -"zJ\","a","'","]","o","/ 0]v~" -"]W","fbB3k,1UE","~(""[w",",k6dS","561{z;E","!{*$vr]" -")C+1H""{","12R-PWsPW+","'","","U","^a&q>d}" -"`ee|l@",";P""&q@K_",")","d-","t`BG}W","qN" -"U","8N?-r`alX","4{b3j^BU","!0AKx'BWH`","feHF-%L","y$|pIK" -"y]@sV","{%AC%Pw9zl","fsm","HbN"," :U}","'P#L0+/bMM" -"]%","","T 6Ut","C!nm/? q(","s!E,>","" -"SLHvW",";8,j","7Yr6U","`EPEw","","z&9" -"%T&mrIT","pt",";A?1cr","5J}(,","&&","J+KG","uf/>BAD\" -"\wc~w[1DI<","R&fF","-.&jh","L","""","J;W" -"" -"Y=UwC%g0","!","ek$6","gOC!qh5:by","m|h","" -"&`0","Ga4AdHN","s-UQ}=c~W(","Qu=#}^","","g" -"9","","","3","*7n#sS","|'" -")c","/DHD$*","G","G-JXVX","yk7+pNhXKi","_zlM) G" -"rL5TJ","|<8$@""[h3#","F8MN4""","j,a0R&yX","[","`:)[qr9" -"X/#k","$=","|% mk#'","V[aF}","=-^" -"","_Pdpz","X[kn8p:","","(jI$B9o","=N]e" -"z$-^Bw","S#7JJ/K9","Uu:y@0aCZH","p;A)M?|~S\","o","?}`jx" -"}q","qF34HrEKOp",";{Y[;","a2M4-E","TKz$qX<@","D/." -"","l","","Kvg"," :","" -"vT","~{<}\zY","%kFh","","]w)","ehPVgF" -"q7U","Nbmx","id""&I8r..","Prv>&R8ch[","s9}!+h0","xX_vpyM" -"xD{G.9X","e9uP;69*","oniE\rs","BuVHm9!Z,f","w[d17[c","\uOusY" -"'SL)kgw@""R","q>","UG`ORA(","","","om Ez" -"%]1y","0/p!.l%","","(mQvxH""0uY","w~thjCIB",")_N>hEh7" -"|E2Xy","u","qYq","I;","<","5sw@nvo%\y" -"nY","RXUPmsxPs","","[]vkY 9p","A/A5\smVx4","" -"TV-jOx","_}","%nKV:c","v+9881","hUo!\x[o","l"";43!AD`" -"h-{MM:kkO","K?*n","92E9t?","a._^!","M q","" -"YoXUv","k+U0 #\/v","{:'8","l","K+A&:Qf","Uou}2BOAZ6" -"d)='u8",")","|",",?E[R-*}u","U","G4,IQ" -"_","m0(F""tT%","f`+","^q]`4n","0y`"," R" -"t==URE","{02:OE@Y}$","lxC`1","5maX","","Ptkh""eFfmn" -"","LN","","H-H(PPSv","l","7J^|vbV-""" -"Dn'^^f3hv","f7o'3","(RzY+#4","%!b""Lh\F-i","'u#'c*","x^Y%tj`" -"e,DQ;K",",!","Q m(","Q""h","6!5","x=0j1Z{" -"*X{&Nlsu","W.^M","+","-","","I}9%q,9net" -"","r)M8K","6[sYyY)vo","d/J(6","t8,@","/`kP(^!Xv" -"ohFtgV","n7v","","","Qg$}9" -"""^#;6","Uy`","X$","e","| bDM_G'}","@c|(" -"B,kz","pI]f/]CXL","uOCUDw","[:5F","v{?","W',]DwWL" -"c`%Uy~ ","U-","dYF%A/X","","g}qn","sLI@$(xU_" -"%Md*L",")W","'Q\)1>o `","BR^m0ddNTE","fk1;G>","`" -"","t?~HTB","&R%QQ1M j","%4H:z","4:UNI-&M8","" -"97","","#6/vD{;-_a$9Ed","I*b2" -"RFJ5","+-k:cb)4&T","5B<","njZ","xzpy""*%/","HA" -"","oMMtv","","VW{","9Kp8","" -"""w,;T\","Y","O%*c%J","","0""-;:{","S" -"k18","","J('r","","k}?Nr","-2M]>" -"W0?|N)|","x/\jF68&Hl","0t","B6K`ebq","=w","" -"s?{>(e","SK+Q'rgO?","`?f@TJ7',9","AD","Xy4-`[J","*OF18" -"fj+1'5","]T<>?YQ","q4V%","A_;,inKs","R;4-q^8ztX","Zv]" -"G@U","D","(dEH\g","m&","eGGS","" -"","#","",",T","]:!8N;","Q;&" -"l","","A.KrWVZi","3m %8S","vlbS","c3E;]" -"D`VPB","b={@p;","","qbyJ;{dK",".`/*C;|","<" -" P@yGH2","","hjmo~kHmo'","D$tqEM3e","","" -"237P ","",")~&1","!(","Tr","y@" -"/""^ME","","Jm9","An","m5","q|=E'" -"","aeOtD","^M*Ty#li","}.{wzRqI(c","p","iK7:" -"m","U2%Bz","1=mETG`x","<31oys^b","O`JXr",")" -"pM9c!7)","g","EES","^)'$=kz%Jj","=Mqr^","+Jf./[[" -"wA7","","~:","x7hpJXRh","MeFJ3-?/" -"T%_AR0","Z2{$?E>","Mf[Ag0ALr","Em[","D@4PY*RjaK","",":.6ZF1K" -"yo|Xqt'","]1P","6}Oi~]O","Y/=2}3$]8","","PG" -"S2#8[^T ","v","Vh","Y%Z?t","Y[gF\xsN","^=4;ke" -"]A/","","l-!_","Ko&","4OczA~cq","}2Xit" -"G&=mBM}","+Dnd10F[","[;8ln!OtqA","CcbEEU?","lsD6","I/tA" -"?","#!6<","","V\w","V","BSs}DSXA" -"_*~[","7F","$R",";$at;w","eqsR;.","" -"Cu\u","-i/g","p","DBLn",",-yhG1Z","$~@o/gR`" -"Z6U4VThU","","Y+c3","%>y","%?|n@&V""","" -"Y<8FAq(+","P","~$",":~K:f5","mu'G:<|p!i","yb&6(j" -"'gxV","nx%J`ZGh","TPK","Ppz;52","W)F3ojnUFz","(8^V" -"M","`SZ","9)3q_D.x$c","3nERar*s+q","","JxSe_" -"T","/jYQ@ZYGT","","Bjo;e5","@HPd#a~D^","G7Q.I" -">qD""2WdM","GA@3","yf+l","\+","Sf|<(2Us","ON$mn&"," 8wT^|,|6","`","u","","8~g" -"NS\","v#Ug+a","%q@UE}V,","mPgZ_V)6YG","TL2q","B*`y" -"e?WdS}d","yPItc(j",")4_X@u&","","f.D5_Zo t-","O,-E" -"{$2/n+","C|",",h",")}q","3=Fr","[.W" -"R9-Y9Pj4","w[ af2","0-H""Qi","9aM4#","jxieH",";/Q" -"riO","=$Ll0jJX:","M.)}|","=","@HLX","zh&J98" -"ppvrE","!RKB.2!z6<","g","on^(1:a","wl! ;c\","Ap^!cCR" -"uX!v:7",";_RIJh6$m","","JRfJ+M\,M'","WTVK","D|" -"sDJ#),","46","t5","dT|X})","i<0zl)","G" -"Isl~1]]FuK","H+ =c(","","",",b,Ay","]hv3eQ;OmU" -"S0C'$1:Y","^c2;","3h$nR|FW@E","T;wtypv",",DhU>","n~l" -"z7","kd\@","","H:0h-t=/","V{/wxTq","%~]13k","X>Zn" -"q. ","N|c>N?hm",">P_(pA.k,@","V","/5","t)mu" -"';~@D1","Vf","Vdg@]L5","","VcTj7K0=gK","zNj{]!d" -"U{Z&ze","S7Q|u5=D@","|9PkGMuNJ","","$","f1" -"lhU!","DX","3A@G~JmFyb","jg","Uv$m","i*8mSCY","Q3jX","<1Q.x!29%e" -"T}44:L)","bR",";(za|X>p","]lz><;o*Oo","2X(OM""","'?W#" -"!Ww",">DQqjyk","!QZ:}E","|)","-Cy8[[-a","AQ(7Jf""(" -"MOb","5l#V","p]3","4Ptqi","T","L" -"/dF ","[*;\47","","<_","tRo" -"kCbR#",":mRk9Y","\^",">?5!:}^Ul","/mEW;/D","oZI.OP{" -"R","}0nO+R",",?X*35","Dw24~&:QXL","5p'wNN","%/>D?\<6!8" -"^qx5?","Fj9#;Z","P","kgqTg@","Y/001LYg~T","237?D_kX*," -")4vqo@z!{3","Rg$","]==NB-'""h","z","~ |xXuwj{","z`1:#]pe" -"","","60$WnV","8T","+","" -"du","A#B8s",";K^;L","n3","LdQCmB","WY(,>EEd","Ob65:3,,O." -"","5" -"2ikxn>$KP",">vS\_dC","9","","_","kc+B':pbMd" -"Y!Hs{8]_-","wE4k","HHvHq","k",",Mdk","" -"0X!8dE","Xn+h*(>","uXtp","iv0TQ/d^","qDI,","`.Vle&Jde" -"5e;QCrWa|","{*","C3","",")","" -"S","3lecX2{!","","c","JU.j#?P\p","9x$ep |e+" -"l4fiS","","",",>^W","siE+#&","" -"Tenrh","?W","sE""J^yG","%{""\GE5","Lwr G/&\","7GZSL38bz" -"foF","~czq","?{,($,s5P","9+8","_\-b","*{bAr^eS" -"b^KtzXA]A","""0.l","5","r#i" -"bN""%*BZ@3","Wz","d3R" -"WE/,5WB4;x","Ld","+Hxy","<9""+","I/e","y=Ya0_$!^" -"Q","SZ,tWif*","","@JqM) ","#CwhIF","HudXtqg," -"","5p|jGX","/Gox+","\?K=PCXa2<","`qOp8\",",,0la/L" -"m?$(Uig","$gqu&n","zOagC{1X","|JA","","" -"c]z",">lL+ig","nF","","N^jYF",")?b}" -"x/Y","K[84zct`l","qC/p>JDl","w_fzR9{BX*","\#RG-j!","Kj" -"]bb:}","j","z}|: mh=i|",".s#N","3|B","cn(2`c(~" -"K?5R5Mw|<","_BO","IN$U x","#n]QP[{","*;M8FHmY7","?e4Nr/]" -"t*x","","Eu1x*$","k","g0},","""ywzOyLS]{","hDLUeAQ^","JdW=1BYC","Ds","tG" -"OWpbf","nM0$\X+(o","rGmj","uT[Y7dX","UP","*.:!P@Q" -"qh.","Jp","=,$TeF]@;D",";","nAxoY0","" -"yc~{ S++","#dhb7","J","284v","zI$=","TA`7" -"5m","-G","","q3w~$^C3","","RkY" -"[ '/hlo!","_","&Tr>O","{#X","O/6RYIP","r'p/b" -">P","?^MJR:XJ+","cWY?","OfOf!i]P:","ahVxyjB;","R" -"G7",",}%~u?Mev","s/wA","+w=#f","^L?VM]K/|","P" -"N","QyT{<'4t|p","","I|j<0'","&R#",":x?Es>H7Gg" -"@lNJ=6%","MBF,dX{K""[","Sw","b.Qn","mIPJ6@DN[k","=xBFyjQ.)" -">mlOo","99b1Sz7@C3","C8.~p","$RTV","/;+OT)zK6_","U+y&%H" -"McKt","C;X$s",",cN`","*5","oQR/EEm*Z@","CsLGK" -"zo(",")wa3O!O?+J","cpGoOi*9G^","9pF,#,Hz","gfh","^B" -"x","eJ","8>E.Rj","","k_","bg{","}YWF\\}","zx""f?&","qjsm5","","W)`[" -"","W","ZX[","A""Oo","Ch",">G" -"z$'{:S","Z$M-Ps$&F","` XG?,YBsv","I/Lx}TU(H?","MntpDE6gq","/_MiJ<`" -"+E,j.GD1","" -"a1!a","ae3n","JQ","M&","Da&&" -"j3pU73",")5x^GV}4H0","Ei:yo&","8``","5jScl^","1,q^9PP@g" -"#eeJtp[v_","6`icv.5pW","","!sMzd$%","G]Rod3<","$v\N%&xu@." -"o.?,K","H*T","5YkVF",">7^Y{","{)","Pro|iLF","4# ]c+fv","Q","s","}Zz5" -"Md{jbT_U5S","7L\P8W","DqXq'M`{ K","h6g","x;9N, ,L","G" -"","kXP:&rZ","Hwo","S'>5)q","F)+E[x","" -"g{`3W%bN;}","#uzo(ZAk","+\","9NL)","*q*Wz" -"e","1m","|Z 5\Uy",";#fY;Z","e=0%$","Xo><","","","+\#%icG" -"hHxS","lo","n,]","e_d:=v","","4~F-7.?<]3O","u+l*arKY3s","7W}i6","7vg\","8@Ww-","}6hLIoe?" -"","","%!=u%q;rq_","f_3","2v","" -"L","pi=%","5kA","c71","=""e$","d&w[gp&,&}" -"j","dR}F 6bi","3","","V8vAC\e_A","L""q(" -"/VZs""u'","N","rl'BIY1","J>zBk?\0+","","a$,6>2T5" -"8","XzW.b""M&","B{ |2w4?CO","IY%s'wH","&el-c","*dDoz]J" -"","/_iI[PQW4",">>{*ib^","n$","NT(osa","1","{]sJ_KV","6 j","" -"k;","th!TO","hNuK~ch\5l","YBWlQfK","e>iAO(HvCs",">" -"","VDps`ft2","s2Qn&dvMd","5w$TRBJ",":Jy-?g?I","O$BuZo^" -"}",",","#)l*P9h&","YJbl//d","q%{Pt9i:/","2law>(SU>" -"","~~Kt+nVe}V",")\",":","c$nRB|r","%}qf" -";x6","szLyj5a","","","Di,,gL#OF'","Lrb"," ?;","9d9.|6_pXO","s" -"S%","1/XcSaMX","I P0","#+9eQzCiCr","","jz9JT7)]Q" -"9b","G|&9Z5e(d+","d","C]d{~@su(","","T&_" -"RzDn,lBMB","XUzS?cHL","&j&M4","l|+C>" -"R",":1~hq","jg]o3","@","&&:*NP&{","-=B:(#","s,6>S]#","DlXI3Dq*U" -"$f""G","DMJWP","YI3ca'c-","~?,nj3R*","8=G'q""Y/u","kB" -"Aw|BH7vy.","","d5#):","zUNcA","=","xjE3@EQq@@" -"","n=j ","F}on@h","d#","+","hNK[=9E" -"U%5g-","","24","9","j%hhQC""d,","9l$yY3Nd}" -"l!XZ[yarA","jr8#Sl]","]Cu","g)]xx","lV4r^0Z^+","" -"","Ad)Zk3a","V`6R99","","","/|","^{" -"*'|z*HBd""","X3D$","&fUFS6","ztR9e_sRRu","%P42.","" -"[)hH2","[EZf<","WA4k@Yx<","","k7","V81M" -"Q","tXq","r","h~dB6","J78cdP |","?~o[x" -"Gt5er","\iCp+&aT|","1","=Qf>","0'HvX",";4YKF$!tA" -"YwMd`","?wx[5",": (WPPT6","",".w!R/0Au;f","" -"D\fl","P@-WeBl","yY","P\g*U0D","qyqWUEnqF%","%" -"s[L","","tkp,eaY^o+","]9*{","","aj","Y2MK","3LJ#L""L+$" -"rShLDbL)#m",")b","""%dH1$/&h","Hgc","`z:^#W","Q" -"y^d=Vq}\","o","%XIIDox4G","N#85#YtP","+K7","" -"m&\C)'wNXT","UO'\eQf","","ueW`","2QxV<33y ","*'k|*(9" -"","a","1zxr","D\+PL," -"n=cv$opPG&","","uU`!pHl","s5*`5","=M}","yvG\uy" -"Vpv9Ul>","G]7*ZK","",".?hm","A","@!" -"J^Wci.d""/","XHS","&","w+GO","^]S,Bj]","'39`" -"","[N","","qd~+Tr","Od~","J~R$S" -">BI]iFU","|","k!w^[P~I","","jj/1K@","7yTz_igXd#" -"><8DK;S","w#","\","avI~D","o]@%","Zo{P" -" G7&H8]=","x""trJt"";","_/ A2","hh)JU+d_-","","bru(" -"M/","hip.$","KjL4+!.c","SeB?Co?GP","","~^Y[K" -"yI@" -"e=4%","z.y","","O17 D^","m_j'\8","Hbu","" -"IA!PiGK","oO6PS>o","""le Z""FC" -"xS_","","U]M",")6WigXr?j","e#?E,Y0","Y,@:^/=r" -"%x;9","r`c`{NcXKu","}S[-1}VI?","~B.tqq)","YKNjCl2rup","" -"[ H","9SLb","{34IkB","Bj","KiP+&$C","P$!)uOB'w" -"","d!","uXz[}","8$=O",";D[@e","JqtW!y)" -"CNS""[!","H=*kR>zy>h","DIWhg",":%@?d*fhfZ","}rW51((","RlI&" -"N%DU","(8BaTyO","gy@o","","W(9","3=9:.V" -"9","!p5W9","X*_?","r","""r,x.pG","ouA!a)t'[" -"Wo^uq3","}_M","W*`45(A1",".Y,oi{T4'","d!G&","|R[-E" -".un.&[p","y","py2tVO_n","I","0b%/0u|a3%","" -"E2G*5u9t","I*Q*ae$q","m","","hQraj5$""","Rb}1`8P" -"`uM85JM","1L$``$","rbN" -"1_.f","AF;6nq3|","|6","yc","LOf7@} ","s:uf>\a:6R" -"/9v%]X}Vh","D","v0vcQ","-o","}MW""{j" -"","","R)WY?>&0\]","}Ask/",".83","Y}L={a/yL>" -"hTeeAb3i7",";","GXtGQ","mnlID","","-5w" -"CS`U","6.~RO!^jp~","z?(Q#5y8v9","i","q8","cFQ$(x-""" -"EC","OscQ1%%","I$=X","4~n0z","h~3","_{@F90" -"a_","J~@@hk","Wc&!^","U=<07L1","#y09@c","_G@$-Mcu" -"K",".HA6","1","(NQI","4mCZ5%)J","[)y" -"","l{dc","oq/","~ZC<;c","\Zj+eE","i!G" -"<(F?","\d2!t 5?","hg""","3}6oV6","8POkuS~\N%","sT" -"&B","G>':PrG3^:","","3'","9i_Z*A","r" -"`;zk<`","shu","Fn4!","([7~5*`Eh|DNs=0","m76;,","Keb!","rG1r","A$BA" -"-","-T","/It:W8O","V","n4~M}","fj+]" -"T44X#+`s>","-y|:m","p V4/v","B[c",":}U*i$1","LoD/cY3F|" -"gaqt",",|NSar4`","&","","yLECc\-","A&0x'&E" -"A{/2e, \?R","C?JX","_QI","TydVEl","$M2Gj%XTIH","k""" -"xT<@*hKs","X.+","/9YEP&q`{","X"":rRb","M","nbD" -"","{|8c#s&G{/","_2Y^v|$D","|z1ngG0q","|=9B/4]RL"," zE69" -"`","","[!@","/|t%;","^g?d","cBR)p@qELI" -"lkuV>","?Xi`~p4r@+","9,","(KmUq3p>","c~jagEu","$qC","}SJ|kW2","E&57LD_VK%","p@<","5Z_f","" -"""","[+Z#>tNb","m;+(lTK6AI","W2e","=E\","""H" -"",",hN9\","","IT$sM0","cwqF","HNXvEc@c" -"U","0h,E","","bl]S,","-9","_5S" -"4Pdl]=rUr","-Ze","@P9sC","*pgRYh","'","!$RkwHb-" -"#*YSiM1#k","c","jv?Q#?>","\_QC","Hrq","v2B|" -"pNW?(uH ","wS\6",",gx$t~M}","/v-$L","ShI`_:]w" -"","4[ \>IgZ=","$d*4dZ""","O<;vP","",">Ore\%\]" -"nu02(","$e*",">K7qZk","\v]e5""(W","**0,T","#7;AG7+5""<","8U']j3 Z","kI4e:","sTFDz^FC","ly>vQ" -"","eNj","n'oQUEw{Q","KIpcS q","ARedi","uh2b" -"Y>sGR","t5'+jf0AJ","JJ:!r2V]e","a)Y|.I$UP\","3S","S*" -"RFO}]Q%","]=fo_","pQ`E+) '","}+|9.LrL/","'h","D'{:" -"u","y!ZATW2m0&","?>%:WKjO~D","_","3","","dR",";e_zZ3(Wxw","" -"MH[]x#(P","W""]Y","*_pWGvjE| ",">1Dm?G,BBN","Z_~V)","W:Y|Y%(k" -"u.5Pq","\r#""A%B","o?X<","IuF","F","WN" -"8$L6Z","HSktb""5@n","f",""">hAPCAI2","","7APO9`" -";Ms8pO","*m+CDBS]","p","","rs\O|rD-","n9?blg?ru>" -"IO,","i9v|sah","-PkL","jyxo8i","aXfPa&"">k4","_l>j)N" -"m8>","eS2",":'Nxvm","F`$|y,uh","#lEQK0%","NDd5" -"o~,Wh1;iMB","JV%9x.@iI",""")VV@7*y","Ao`Kwe5c","/F@","{n!s,()<:a" -">e","{$B.",",Am&ttsU","@a|","8/" -")Q%","S+L;@@4","jr","mO%Cj$9""","6eSm5","@ytq" -"3Ei77[RC=","?","&R""d","j\en>","_M~3p]","[" -"t%({","3>idJ:9|NZ","","4$D<8{hb/","2h{","c$&@JhSY~n" -"DAS8|","Y7K1Px+C","`ak9","Wn&Pv^`r","Aaj~","q16{ir" -"kK*=rW7h" -"lY","`KUR","+4scACgs}O","C","8aBpHDR_","CtsJTZh~" -"x/[ouRM:*","(RA8d+","m(pE]V","b","(PiD_G","'K " -")mQK",";sV(","}N","9*Q$GcT2","SEY,6#y<0+","y!n2" -"|#"," k;' &","1BI>aDR","|q?&{(~$","exH","bq'",">ul""V","@`]mS{YL1H","9tOuZ" -"4N","","G,.","","S'k3(/q","A" -"37&Qa_W_","Nb&" -"/g)tnp_","R","E",".t`Q1t_j'-","Lp78","{)NXoK\[" -"Y","%v3","Z{DGm_Bg","Whih%F<","e^1E[Sf]","~A5Y(X;" -"1l""H/1*A4","2K)(ThDd,","24c","@M_n0W","","=m[O" -"","[SZBy,s","","u'0xNjw","/y:{+5iJ[","M {@OVzA" -"|@gr","^tL&","h4/k+","","E~y","!Jw{h" -"aX;y","Beu43#","rd2|1","i-g'vz1QX%","8|(b|","1:y:" -"tc'&HM(l|D","Lbg","@jB","DU*F0y","X)I.",">5yeR" -"ZBH%T1","""E8t[","bYj[v@","2","gVQ","*CU" -"xcO8,","/","Y[uI6N","9Im","x;&nx0FN8~","M;P" -"|\W",",7Bbo:,D",",'8>zD1","HUv4&>0iI","|q#PA*q3","x]t'{e" -"\","}yL3\(FC_","","SBh` s","VYd&Hw?","X/p:UB" -"\@-","`xd","nyY`D==","","wu","texOMu#V" -"X @K$d3",".0M|0","*\Y~S","E?';1e:","_l?)`",")4hts:5N" -"~\","4qTHu(x-","mmtcM","","5w:mu*oxc","ne;&Ym, " -"Hm""","",",LtXU}%j","7N'qB","A>H","?EaNJ=" -"","32=}pv%Q[s","K?'#o.!5>g","QQ","1m","}s{>DdC." -"",":Wv}3.>k","{}s?X]","p?f't)","s","}" -"QOi","ro# W8n7","|TTh|XNf$Q","/tQ}_!","z^,CF3O5","2X""lf-LWt" -"QE{","C~}JEq*L","","B","8()",",y~R" -"b!?o2:}t","!]gG>","e9.u","3D","A@f8<","" -"taTlE","pz2F/@h","'`]q'","4qYuS","s>M%K:)","'P-" -"V3oj","\[~HoLbl","e6v","9OKN,","'>,l+noQ","?z-&" -"","r5`5~j^d|",";~_!}Ev|Jt","AEP2f","4","j+\v7ANGt" -"5","nX^bBv|","}rzei`L\9m","","8k","qWCG(a2(W","" -"s`KG[",">/TVHz(&Kr","I2^}","R5s","w>C)j84+t","R(O-V b""TU" -"ZV:cFQj","]Y`CxQ ","ei","Tq>,]*%%","O_]6h<)m>","UqDH/bWG" -"-6","L|S<}%=5'","nTq1n>9","8lm","~J@wf&-JL9","&h" -"%Pn|G$=vw","x^oS",";w.^vUG#G>","i","F9","R|Z2NCw" -"R=Z*24#A9.","9$EI\}k]W","V_","","","6a|Y6P9<8" -"9A|]bLC-0i","!oO/!HE~{","","nO","H9P0LCP","q^W3 Q(L~{" -"FJE(","F","ww ","kgb./(X8;=","","YfDF%zWn2" -"p9i#Q","","]*mH}/&C","<","]fO}&7@w4","m(" -"dll*r%n'","RvvqQ_C","yH!z#A7Uo","3P>/,9s ek","'h(8pZ""","lK" -"s%FCq","&cNT","l[","Fk4{z","","Ap8D#" -"","<3IAZ""T}!X","C9d#","ckaS","'<042|APki","UVe$Z+We" -"","%","y/0N:Lr1","?|h&jX","d","]:O" -"(yce","u","'va]","w}5-#{o=","-","" -"%+,","1[","RaW~q92bO","T4","c73-IG~","kAz'a4" -"FHkeUm]","}Y","k""q]vm[","F i","U_evW4[9","<(_~f2E/7" -"^vv","JW Dp%K","B_u{cd.N","g*o~7?","""k6`rYtB","/D%5%~" -"4>","@","","56N","Xo+r`","k0=l" -"R{W&uA","H2","1ZY>L8.<;","LUFGto{","Kg{}=Y","''v!U.j" -"$-let\9n,","V6P","noR>07q2Z","hBpQJ","cD5?Im ","y1`" -"EF\n4td`]","Ly]y1mq","","O","\=WS;","Th""W4" -"2tsjOcJ9L","CXPQ","","F8)YFY",";C","d" -"z9P>1Q9|7","2","}8 l","d[0*cs","","PO<" -"[wV","QYL08T:;l","2$jCA^","(|*0","W%","pY.83=[Eh>" -","",Ps","k)%yr&]43","ZF4","m}\","a","x" -"Ks#'fTc","iK&\","wH2b","",".iu","sN8 b@" -"8F4","`|H?","","~A3""UR`","h?n)~)e","[ZNu" -"v","& vMrdG","`h!","$","W2)W","Xp!lN{" -"iJv","Ab","'+UdYJkQg","F>!","Gq:D","""vSsPS5" -"K","W@lwZ9u","XT>/Mqcek","y","RE","+'_=" -"5hA","X","v*iFb~g","lotbMi0u","","XG<-y.@kbX" -"E+_Mx","$o","o<","v6>`&J","!X7aE","[[mM5hrp" -"__9J'CSS7g","98E;c""","RV5","","","u" -"c0=","&k","k","/6","%~Cg+e5}","W)@|$0" -"Ds0wt;","8S_PZW(","y:;","^i(yU","U!Z-;nCZK","+%km" -"f';w","ubD\o","D[F#","gZ",";k'fx",":n>Xz" -"Q",">hD","bi6LbP@","`\@","/pqRB",")&w6/X,1Z" -"l5f?","vQX@62M|","Pv","][""l[!,U/","'g@s:ai]>D","+/}g#C4n+b" -"","oJ>2fo","wF>.[","WoN1,B","~|[$(L&<","# ]0" -",TJ""^Ej>","8Zr","bY?:J{""R","G~?","BsQ8","b" -"mY[?a","xKG&7""","0hg","O_xb","{nz[JBL- L","" -":","9{R};yB","K_","rpWT-""","8Iz?}" -"3p*FqmL;9","W?)D""H4H(","0$#Ln2)Xb'","(B","*s","*PF}rt[_V" -":wSD","q(4-{","x(&Dk*[^","g>v","YG","f!}e(" -":X_","nE-","EcI""O~a8c",",.=#-C:GQ","","n@o{" -"<#YrY","T","f","","9","mn?EIy" -"Wb1l""9;.*0","""f(","@K39""hkVR","mYW","qt","r" -"9","r$""","U+ Sui%",">z1Y)+k","*""Bvy"," O" -"`!","cPlLL","n?=%p","}bk>Wylnc","0D?L","%z-v$8q" -"T}y=8%qR)L","","nx","","","?h_8&NzF" -"_F}P,","0L","4jRkg&>","`@n","/616","sj7" -"mrXI",",5,\Uy}rY","rZL=","@k1&y6@5","","""@xh""F@" -"m_","]/Fgna9yV$","R)!","k'>Uc\","vW8[Z-","y?" -"NfXHZ+%[",")^$42V+?","kRZ}YY88&|SX","m]""8h","a" -"Z4s,","dA","W7:i;Yge","Prc","N.","" -"O","/o!2uT7#K","m5s~0","D{hZ(",".GG dGfo\m","T8n" -"bM","BVjk@?[J8","","q","=GU","2" -"c","8x'!","","D]~@UL*v","Zh","{-a" -"cE1 ME s","Qc[q ?1#J-","BCP","","X4[7",">^S" -"?","|}4BEnO52c","`nM]B7Y U","C[IvE""","yae2H?Z_&g",".+gjkGE]" -"popKD(}/fo","/4","TU.","&,L=DpA","*(","G7" -"c<4>","r~2(0[dgZr","A g(bG;","JQ\8~.E=&","&:'y{Pf@]","%:y" -"dB mDZ:","_{",",U|!@!c","","3HMwjEF","XE:4[IS" -"hlL","eQ[(^Qf","[ ","N","YTm\","" -"oVv-EAqS`=","=SVJwv2|","^F__;","P3Hc0S{G@","#=CP5","F]b0'u4" -"&$+o+T)","^#/5Y=","c2ruV 1^G","EAb4{Yi",">""uU+","T\8;lR\<" -"3FnR","{","" -";R:}$""e1","#","WY/A\m","q&[a=","lTJ6X$,y","c+oa,N$uX" -"","W=bSGc.sf","0n&w#J9;0","$@/-]e","MQ; ","7(B!" -"ta:Xyh1","noRfo","","L2te`A","U{enx~Y'`","Ou/(^""zO" -"%%|#no","kruMC;","R""4Km}qm2e","0N}3","g[@a(f^""?","a&v#QFjhu" -"EEGgch6YvZ","<=b*3S","","|f","\Qv","jDuf\gU,O" -"RwJC(","(U","8\==?P**","D&|?","Y","O""wP=+oDb" -"?S[Q/l(","wG4&v/s","2D'o{b^^be","aG9w%" -": [^A*Gd","T`k([`*SK9","""cTo5","aI[" -"RvA","H|J@J~qy","","{!m]+zs^GZ","fnO",",o>|(-=" -"pfci","k)./_i","@","z#a%$yw$","","H" -"+H:-}X","=zzwxQx0W%","t0B0[8","!ay""AQ~J*","A'","" -"u[ M61@~Tf","I*}aThg'#)","^n%@","","lB?)","PqPsHyi6" -"Px3lg","tR-B{.=alE","R&sG+SX","",":",":bFJ2Kn" -"K<\h2.6q","5\&==pj","!&%QuWUg%7","qxof?;O",">:=","~zx8BX5&}" -"s->~;Kr","jC~3E@7qfQ","","#=2Vlv,aiI","+FL","" -"","xy\~","","y>Hr4|ski","]$GA>L ",":v\e^dA_" -"","#uG;","XOI(","","!","oe%" -"C1R","w6ZJ.2","/&","iE})_MLSH#","g","AF""^ih>$S-" -"o)K3W:|`}","nT\/8gC^","{_","FSyv~SK","","a|" -";>","","AX%>k","{iq_f_^7\","fr;,$","(0+`-zP.{I" -"`$T3!cO,b","WPk@`Cm@GO","","d","=jx&_hXc[c",";" -"A?","e","0\H_QF","YG","7aiT#","x+PwO<" -"i","5d/X>3)#","1+'(bwSq","}o^V9kuS","fI4\(^Z","ON7C" -"uT&v|2","5","/","","y","r{=I.\" -"N[+v","`","","o=Rz|=\","1cWjDkh","Uljzk!" -"o8_`","nrJk}eqGfS","4fR""},!s?]","S{bGL*;0","","7*$" -"8JB7xr#Hy","06","_{F","tD43B75",".bLTb}i","o?T" -"ixXV+","`","","%$EV=S)-","+<2Rtr","tYq>Ptf" -"c\}3Ru07","n","+P.NZtRn","yn","D@Q|*39L","7P,XcH" -"mPOzk|<29","PdS/l:I","","([X;7@I]$","%QYy:%&Ih","|S" -"utBlI4O#M","c$NTF~-_{","V","4uW","(W@i","rN" -"JU(P.X","4!O>)","RQ+@ AT","jg8qpq|.TD","/u","=XBAnYIg" -"dz","p4*>{YG^","~","D<@_[","Si)?Y",".cL1we_(dD" -"9{(E"," 4","tQ['g8pu","t3_","yO'J|",":6=[k0*)}v" -"9?n{","jY_n:","7","2",".uWtU\","+/" -"jq:j"," sE","oJfe80i<","w4",">0KB","" -"O:",")}#f","Hrm" -"",":.","40!|00","/d#","lHH","k:#}(3" -"VF*b","NuFf("," $","#-Y#ipE","K/T2;YhA","-X9HasVKP" -"/","M08T!","qu]Hf&`","qjpc","d)sug","81ztm03!}" -");`$0o" -"chDz2's@p)","cZcf<","5jeuXv","+hrU,T=","fM&!r4","CMCYBL!m8" -"d]","h+9","o*[]0I","PR:@","_;f`hq_","r ON" -"Ol0d8Gf\(","64c&0IJ]or.W" -"[$+F<","D","fFv$5_n","^m6Z2","t^Gr-:Q7G2","Rt\V|" -"L:R-*","@ts|t|wnA","","`n","","]}w~Y2C#E" -"Q$","691i:","!!>j=#iv","K!]`|9H","dVB0uJ=WL","dXI" -"Xj `y>1=6","72","oJ=@If]N","-D5","LX","" -"aLQsfsMy)g","Lt7E\N5}","SVfn'C<9(d","","{\","h%bOzTB/q" -"Nf8lpr3; ","Z)/W^mihJ","_NamL@2m",">C",":s-Y","?" -")'N2=ZA~(*","86eAXvOnm","L-","6P^ex",";dg:rlWU","^ bn?x%" -"!^","&6zh( >$fK","R","","MV6Mh+'uQ","c >J-TZ." -"P","N","Dbew\d4","An>Z","","TbpiXl" -"e1Ht#}d'&","w[B[","4f","ogT","C","lC^" -"%y|NR:u","}s.bCb=i","iK7#","ok_jxu","+WGctl9","u1Z}" -"=S`U(DaG","M$","M1","e7m@MrM{","$tQ&C(p*","" -"atDF0m","%kYk'6fU<@","SD04Y'#+","g@P$ XA"," 9])Cl2@}e","T." -"V(XjAGfP+I","\GO4""T5,~h","","uo/","tdqu:=f`","?_(N" -"n","lg ",".[7","5:M8I6M.t","Ze#oSj\","ySs2$1VC" -"_R}z>",":","06zjeuTDBk","6VZ96A$","JYVnFi lOn","{/""+P8v5Un" -"{TbI,4'.\P","r!","|wf3?mR","5y5jo4QP","[I~1W2ZKc","SwIeq8" -"t5)Z>G22R,","S$3/?s){&","vMn","lJw+","17\$Iy","a1ZUK]gJ" -"cuh+","J/j\~A","k48~2mf"," >bd]rp~M","Hc"," cO" -"J","poQu+}SHi^","3IID","%4DX","xxoG:m`(","k" -"0`!+","Ux(n","'tAZ*","/&""oOY~","6OJc","nr[ M" -",][3X}O$","YUE\l:1R*:","J2@j","B>","$_k*&rnLo<","" -"iK/RK3ty","(d_o$UB","MN?[:/","nQl9","ox"".u&B0","CZ%Atz" -"",".SMK","8*IRHk/"," -RbUX3[n",",T3;wLh>~","{28FE|" -"?43h","","UK",">XR*(T","SFk\u-a`","p" -"-_","\%v>6Hy$CH","O2B)","Qa5","MT","^7" -"tw:,5E""X","#HmD#}xD","](&6@oI6=","an#@@jR","Y(9","""*0g" -"u?","qDAezvF","p_","zlp","In'ih5A%","cQdNj`D}`" -"V","7","OG","","Lghzp=)bYM",";-z" -"Y}ClD=ME","@AgHhx&kQ","+u","","x)","rD=@PJ+7\" -"sqg","or1l+E ","F>","","XB1ELt!}-","|uW[H" -"","","#oYfF&","y^R ","R4ai48|ee","M{5!Zei" -"zAv$.&X\s","vC;i","AV","n`'","$ht@TVJL(","P.KvkL" -"Lqa","'pjT8W`xP;","%F?7W""","nTW<%Uc","_","uv\@" -"","XA=Fh'1*Z","|/*8","yP8ibO","g@H>K","#" -"*R","`y]5MS3","","*MEFpvqF","1qecJ","F@" -";XU","(?KL$/#","w]LBt" -"*VUHX""1BZ",":,n-RHc4","#kSUF %`P","j4Rf>\`=!","z%^!x","9""H" -"iX8cgE)4G0","d$wp","Ll{JEV}z","*0K]gVSl","S&J","n,-Bg.sF'K","Y","a3^,_(" -"y7&","ine!a+ISD","tfC","]{z~+","WCGt!","" -"SO?y,E\Im","C~qxsE@9","m@/\uv","","WKa","^l,jUMe" -"XR1J9",")&D7uS'","+~`vt",".EH't ","SFup,QV","6rDpJ50+1" -"d09","`Bh{|e|]","","\iEe","T","k4,9^" -"HsTDq","X)L30jRRs","Ww\/$t;""!`","A""8*dn.x%","96+s`q ","'g3nb\l" -"WDW&>'r3;","7z52eH&>F","VSj","s=z=y,iI",")?!M","|wos,_<" -"Z6 c?,_JK","f.!O2TVA","k1IfG","lp","F])=3_V;","-""c" -"pzT>F}","/ee>","[o4l@u","Qox","@","}kjx" -"YK","gE(G""ZWK`","","5""+>,z","&Ocj*","[2HqzK,ojc" -"e4x5YN`@","PWk","vj","$8 ]b?~r/","\ l+7#%","" -"E8U7iAOa","b>N","^","9","""=","=Q#'" -"erD8N;d","","fSq","^GCp","S^D$I#rc6","fm-'r" -"j1","","Vtk?0p4&N","A[QpS5c","C+6mQ","G" -"9H","yUj5","-nd","/I@yQX?qg5","~SR","17;" -"t","B""","a","Zv:f#HPtYx","n","Cdv" -"}6""Slm$B","Yb?f?A","cU)&p","95XWTl*J","6m%i 5?.D","" -"NrJj","0|dA4%","Ht","+>eq","q4PP$","J)k" -"5)#40U}",")O?(","","_bp","gKsIP*l-",">a&U{" -"&)_mx5","p)*i""","'o#FV*y","","[Oy/:2a('","EXjV%=f?8" -"Gvtj","H&m_#67W","5","RH""F#qh3","","RPL" -"","w]'iz?$","7","bv3J","6/B7}7pJAd","SR5os;v)ll" -"A1@""'#)#'","","]Cc","gc+[","iv;t[Z","yQKx" -"`.)","1IV""L19S","Q`(Ssi=]M`","4EcI","1X7nc`Mt","{z'T" -"","b`","8w\UQ","mMX","&EbqkMQ","S","+A6`5" -"|6Dpk","nG/","h]gQ,Ub",".'","?U]HH1vy","%F<" -"A","#r","#+>>(r&w]","","","%g" -"VRtPS~e","}PYc&*^","Y5[SkAW","$?.I9\","lQ3y938VY","K}" -"zrjLc","Z|a#00TBxa","veLdNa 5","","U>M","" -"","t","U","tY!?y J?,","sUJ*Vi[06","Ey;" -"}w",")","B]%Kf",":kF","#'=l","P!","h6'K:","I?K" -"","W:M:7","TdaYc","$*Y","C0l","CU?BrtInc" -"/","d!rMw83I ","da|Urx7","Y~QSxE;","vKE'kfx","A=|:#i)eu/" -"S+HK","tgd7e9D^v{","","R","(dXJ]","WN-""" -"laWe/Rf1)I","e#}B-;,pD","/*A",">f|HY;Qa" -"Owm&fl?X","#B","-X(m#0O","","k?I","<*}+pSOo" -"%F?X","","SPx{$J","Gq7B5\e:","o%V4()F{-'","9|x)V|" -"PzR)}Ej^O","2","""vF4","M0.dz","l5b90uB","*ZryuJ" -"","T5Zt jS@O","5,","E7{KOm$5K","X(h-i%'}","[nk0+pSU'" -"^","Wh,Xn""(AD","cu~$sMt4]t",",Dh@/y","","" -"Nz+a}","}bar?5Q;sJ","T=C[/","J7""lx","","" -"KDJ75","8","yuJ","K,","^;EO~I\",",WZG]/oB8H" -"E;/P)0x{","D*i_F","6`j494Gg4c","jnL=PY9Q","#","7}4G;UIU7=" -"$U","E-F8xTE4","rGH:6Z./","5s>Lh9G","\8|dcK","E" -"vHb+Bt~!","wL<;","/e!J","_fUkr\ aWN","""XQgPj](}","tv" -"L(fKTM","3u$-v/ch&","HR+wc","QgLq$gVh","jI M7L","# &" -"r=M]n)!","A6HZ","fC","Jt7","kq#H$"";B","(Qo" -"e!s","AT\4R","^/gGe","Nc7Q_","7[_M","{ca5uPcSku" -"NS","","?vdq\6A","B","N4:","4Ji" -"""C6mWF9l","@a;kOW","y#c","MQbmn","]Sl/6qN^","" -"!z","z_is","i$aa=r" -"f~O#`95@8`","q","G-","5,R[N/'4xo","8^,a","fe|>B\" -"'}+pY_c","-F]>~-'",":-Y~S","","J.H>&Fi","Rq|V*" -">}","T~meCpyJ^","","Q","R.Qa[.z","k." -"+Nn+IK=S","e","o+{Uo","mp>","No'mgJ4-","" -"J","od]stFv-]","V`YEG>","","#i'",">m","","@@+""","+89" -"0MG#>0","j","S9x","<>","x0ZjM","xa3 " -"","sm^t\A","^0!/|\,cJ","","->","Ky\|" -"^\_Ewh","\e%TC","U|I/@'_l","o@s","AiJ{,",";ro$g&" -"^#`""Xd",",B#","Vsw8%h","""`1{f9bSc","t/y7!a@i","i""5>" -"+s","3JC","AGl*]XG","h","~Q8!FV9@","" -"miuBJ1R-.k","+""-~","OIQ$+Q=(","amu","","u-?" -"lq1}i","%KxCj","K)",":0a$Dr[","@VPNmm24/","" -",R5b.q!|-","5w","#:0(u60S*","Ye]=gb","1HzOtk","w~Hs" -"+#6V","vi#+x.t","z#J>","","g37`~R","/6a+Q" -"Xh(M","wbf`@T:/c",">: /,_","Rlt@","","!c}f>+T" -":C[","#""*x%\f:f","xa7/" -"","f{SEkSGh","(]","8O{","@wX'YTJt","V<\w~Aq" -"?P#{\=(K=","rAr%G","T","9]","","!:""ls=TMxw" -"JdD7w E%fE","fXgmQG""c","n[Xc+YIKD","^`6wj[~H","0","5S^" -"u[|4","Xw2[cskyX","","nWJrL7Zt","""E\(5l]Ph?","" -"Z^8","R",".CdMNd=F;","~x):x","""""DT|c6BpH","" -",W$Z)$qn",")","@FK","G,`?atq","FT{L","}a/%X" -"v,S","{","$uL{$[Ih,B","*G;PES>","NnX;Re","" -"X?}SY:6Xm","BN",".","","qco","!oS" -"7Cn:I","%Ub$","F4MFLH9)K$","","c@,O57KiV","mq\" -"Z)","w8J#gSg ","=l3$,@",";{Urg6","",":u" -"","Mr1Z","'~0","]kH)","]fD","#oZb" -"CJD3",":AI_vex5o",">y4","9,-WtDA&<{","+1\+~/sTc","" -"m4Q","^u`r>","!3]m]","","07TbdX6!H",";t: UFd" -"X","hrm","4J""VK8O:$","({","\(n<=9","T5Z>xd%9I" -"V1d'Jl+#Dn","(AXo]Pa{%s","",":K","_mLV","5U8b/Ozqw" -"d","VV`jA","n_>Zp6V'A","NI8","T;Dl#","Gtw?~" -")a;","@A6J[4`o24","","t!^^N","`c+Rr","p\d2G~L" -"eEG/&!","[OpE4)viNQ","yAw$""f0u","burv6O}","nzVS","ML" -"4S3b#3'j",";01","h.mSm","ZX~uV","MX(2pb&x","_mH4{A" -".eod} *1XH","","*gQ",";@w","8%Mj","wo4@@" -"Ch:AX","b^Y\{","H","Nq%!%A/sim","5#","ZDSE" -"P","CLe","UC5Z`G","","1tf","O8$fq^Y{j" -"&vHc","","jOR|_e[","mti\L>","Y","Iq#gbp0.%" -";E","]0fX","WPi`6wiVgb","='MgYi_I0?","5+/","O)`A>h)&","(""g&ER|1l5" -"*K]YeO","","M1","V","w>x","^.$N" -"?Q]","-","k6<'@N?","","prp%AN","%nU$!" -"-x6D!LgV4","","Iofa78Or","#5g4_lXn$I","PNMU|qU0","Z*os" -"'CLFy*""to","X+<","^kgjm1:.\","E?2_/t","V!?#","nZ*7" -"Zsi!PBf2u","ddU","j@^roIK","~wVcb\Y*","LV","o%`[nK" -"6I1","QF8TxP","v^Bl;o3","b","fWH3[","yw]5Nxe" -",*orfSKWLZ","","jX#k","h","ikwcv ","=4rhFs_xH" -"","tL>j>GJcC","T","uKX^_","a[sdV`Pz","Sm" -"V!S=W-c-4","t`b\ A9","","i9!-","96K\:""+o}{","+:" -"NAJ~","Az6t{m!CJ_","","d>G?X&sTZ","V",".hi&|""qa`" -"a.8#'","(","\'K]A38;O","J*|:_","|D","c" -"G$","","1","Ef","BoZa","[""J""" -"/0,H6]GY","","\F$-vz#K2r","0X@8A1fd","mj}'}a`ctN","u7BcM9:" -"nW|sA?qXC","h(?","!$\Eejf","H!P","9","|7nWBm`[T" -"r^FiB+mP=Z","!",":~J4T","b_uF4tV,(","vTl{=Us","_ -" -"","bth*fd9%","h1r\Ep;8s","TfIOs9yH",",","1xDIv~#G" -"!>Ln","|HlkL","4O~'`M0","","6nNcJxiJ","0" -"o9Q.!!?-","","\^","S","J_xJL%","" -"","^;%&<>8CmP","RdQ\Jj_!%f","]JP","tr{H7","" -"{8j/#N*73","","o|rUz","SDPE98A","sF","FMr" -"V7/Xf!a","3e","E3)|p}\y/","","pr","e;{\S1`=#" -"VsvFpD""u","=#>gL hgKc","5<>,\","H",")vV!m%u ir","#z_" -"oe32&Q^_F","}*","m[>t^2rNO","p;Wu9+sbh2","LIm l99L","O0|jH5" -";","7g","","L","2D~GAd","|6(H7>E%5" -"","9L","xSaL%H)::~","&m,",">Wf_@AllF","" -"p9=MfoJ","zQi#W?","OS(13\j=FB","","ha}u4H","" -"p","ja","l^^qH5k!gL","X~xYC","$?5N2a","gU" -""," y%f","2","%D57;+","#`*>","L>UzOrOn" -"A","((9vRc","PkUtfGU{4","W=","q`f#]vJgm>"," IIsn=" -"L`8""Q}-27%","S:pY+W@M","++:T_C:","A5AVY.!!;","=5""L","" -"]?","3f($cTk","t*4LP5","N","G).Z.=;N(","g" -"b3y)","'[0/","L&_,s>",")","%MO~&Bww","58t\r|X`=H" -"mjk*%&","qWB&j","&v0(JM,","!>*+","d^u&zEIgD","VN" -"*ee_.""","""","\qVrxV%","8>\[|N","$oJ7st","""/J1""k" -",","y7~ohX'F","""p","7|4qALx","^u\i","" -"ivBP]""uM","`8 7^yX","J`_","|?>VGDpGg","s7iMkU""k","RYN@zu~F","Ej, w;j$" -"`5c","","cRu>","{@%.A-""","{&8&J'","6P\cQaO" -"Hb@94rah1h","8~","Th[`7p$Z9G","YznAYYo:","(>>Ve<5","LFd\BlS_jK" -"FD^","","$n#","","/`qc","=<" -"pX1","6-_W","IzOA!H%","v?d*q$Nn","Nv}YrAyiaN","DK+=;w~P" -"/AW","""I{_","6N{7_+","PLsFAs1;","8","tmQ*SdJjEM" -"3AoPWCRh","{cwS","F>Z}y4^%A","?s)V43>&(","{dR,l^ah=","","b:w-" -"1@EhM,(\E","\" -"gN/~84","c3R_GmQ1","svrtdog""","2!}RI^1^lq","JH>J","" -"oJ0RJnr","{Cbo[w>K","EfuJ9\m~:","O_<=qD{'","p<4QQ","}" -"fkg","e\1,L","@|A8IY","Z"")9*","","T56:" -"",",e-\m""g&c","0Zo","FjM","rTPMA","^V-~E(s" -"spko;@X[F?","[s;Q","Xz","%U&[|","e?","Pcb(6;" -"TVF)I","|b:","V6","-","k0aWHpT","J>" -"4?K>ze","sU","Y8x] !",">qh","4W7QZfR9%4","rO?" -"Se6A/1","pwA3Yh","i","1`","W,f|FKz","3={[" -"2","P!SqX6","zm+;@Z","7RB","O%VT","^" -"Gp9XU","?","","","YKZ1@","V56lE`vo" -".""8$","-!","r6g$TZ0mP","KZ_a""^","B[]","#PR?9N#" -"Yqftd$~3> ","JHn","bB=","7","K|vhVdQ","n.7P9" -"s:;}/CAz:G","x/ixsR","6uwMr :Q","@#sK[;<#","Q#;ax1","" -"","","Uozc","s","","bf#Jya%" -"""kz4|ve","}!Lhy","j.jn2","ia","%r'D","c.$H\Sq\" -" Wb]","W7)","/=Lth`&","j;]fTs\N","kL;hCqH","Y1`!yg_LX\" -"f=",";zTu\,^","cyfRp:""","}X;P","$vK=3G08]R","" -"7","H!Z4.Nf","7$6T\B9","=>Dys",";/!X|j","%,S" -"e=u","N~dL$*OcW[","TGJ(FcC ","gt{Q(","pB^oq","","o:=v","C8C!P')&;" -"%s1=xGc}",").","'{cd;9j\","C*%,*&q%",".D","1I5hR;2" -"7/S=z!C","23","38""[KMT2","bwQAR.&","4ZF""]""D","/WnN7\!""a" -"iF``i","""AAOMk","""73","C&?mME|","","5)Y3_gx=" -"","1r~","S y","J6Pn","#kml","N^ZNj(t7" -";+7j-ob","9","y","NUyDn.r)","6B#9U","" -""" l",">P","]Cu""ZOccC","K>+","tc6/Gw(1","-fE1IJ" -"R","dY`74<:V1l","pj","PyD96M,","Au[","[DTO%c=" -"-_jo6[GJVA","dO","mJ&","$T G&","W","" -"0""mgGkS","X,[WN","Wx","-_L+F=R","3^","?*" -"Bp Usg""","|x","p?#^G5G","k","HUl""Gysx","7|E73" -"m$L","uG6_ eF_c","yp9cAvmNC>","j85=9P","=5,@u8",")" -"%:#7e^dBS","**a?X;","7","q","%n(gG-xh","jb" -")k'[*","BjFP+}@O:>","Q+W/\a","_}X6^nE","PG1B?","A6bYaZ" -"%","'5C]n","{","NJX$T*K4P|","YF`YB>","bz" -"h>>h?","IGDJfnfI{Q",")1|""c",":pVm","","f/" -"#`,k~F","|=n'","wEjZ7/0o","hh","1{=|ZvYES","OH2w" -"","./2^y""8r","mI_7SbX","srn:Wcl","","S" -":^bP","x@r)Hz4p","F)|N",",","IeIAn4B;","U=x!?u" -"Hi","PHM$VT" -"2Z`)","","=n,h5)","kPmF[KI""","*(#cx/ig","xR t" -"SJD&A?#?N","t","*","","^HMb/P.","M@t""d$Jt:c" -"`Yi","Y;RS%","","Ua WnnBCs$","","" -"","{t`$Y?","","XUa,dgi","*gV$","(!tG@N6" -"","lr{>Vb","~X","y@I","F59|v","5TUHH|'}i4" -"*I?k",".FF","r","WxZX%t}%","xMJ","7|H'QA" -"9Q","MLE","An","k7","q\dc-Od","""U0O_85","0oH2|T;","" -"P 3","rW&i","e","U",",3/'~D:_D","zaG;Pd2'+q" -"R","6","4\Q","(N","LB/MrcQ;a","=92" -"1\{Mfk{=E","","#/[yR","B$'""=","[k>","p L,dVkp" -"/J","9Ze;,S","43I","%U","BEG:i1","!E>v&-'ii:" -"VjF$e","Y79.j7-.n3","ro=k","!Ksx","Ko}N","jr3N?" -"8""xNF","YT0kE'}f","Y0Qc!T!5","d.ti",".LVo","(R" -"@?FHxP% D~","9{]Cw?'fVM","m;lI2ZG","2,I{D~C'&","wf""qPS~UV","O1f`]u;Z>" -"t?2c_AkD7","{tZ","K'}iy|p]y","Xk4O4}u","Xlu5N","r~Ad3\||}s" -"i","klzafkg:s","SGiS1p",",uPgGo",")W{0x","^m8" -"-F""}&u&::t","H@rJ:8VI","G=o.;2TIRy","z;<","gSt+7 bR","~F.+[" -"*);TRx","JAJ;An<","g","01H",""," 1J" -"~G^q{/Y","l_+7|G(;3",")&1#","f\","QZc,xok `","*R" -";>?ceN","z","ZJMjydz","v,zoi CBk","","@Y*Mf$" -":fGlmr","#(R-" -"T8zDm","k]",".",")5H*#us","3{","Xp`" -"l|p","","z4cst%""8E>","l! 8*,","=c%","" -"vS,eM:","","CUz]","","o","['" -"'%#","'@?m@aL",".sK","","7FC\D_p.0J","nT" -"r","<4&F","""xDnr@}","v.=8%6","dza@r:8yOU","n1ho`Umg" -"","z","xVL`o\QC2h","i~","gV>6tHl6@""","TpQznu5" -"/",";M","Uf]aO)","x(}UO4","","ec" -"2","VnCAM*J-(","uBSU""z\",">hr17&rW","aIObt","" -"|","`R","hBdRwI","=","0y-nAT8","'" -"y","`C1u Fu","U""","*","CHKw&","k" -"ad","u!","k%Kf","l]Ay!ga","","=3)TRTy" -"*{n4VO","""UD%R","{0fFFj","sI5Kj","6mj9}P","Uz=%=PpJ5H" -"R<=e","%taOp5h]Yu","ikx1(ixX","=J!","OtEl;\kgfe","#&v&v:\" -"b>OIF{ ","oT.","[Tm","}C]cL","o:k ","","s=IA^?[T","ZZ/613!rY","L'P`S[_I" -"#","I9","'aC" -"YwZ1~","u|","'$Z-QJ","Hi9ep)o/","t*x","'" -"7$.g#Kh=","80Vo*y[","cuE_sCfIh3","|,I'uK","^Ip^yU","d^jH-Nx7\" -"L&Q^M","yt6o]Ev","f*!]x","@b\6rQj%)","C=d","8GkJTqjBDq" -"P&","`~w_]","i?i","J-;ZeB~?G:","$~u{","sM" -"m","+2to","HE/""!","3","KMvNl&jAQ","Y\" -"EN","Nr}PW7t?+","@K8W","e","lf!WB","mNO" -"#'KQO","nf5'5NQOe","'}\3i#=*X=","<P","w>","k0qmxr" -"","l|g3_S""","cq)g&F","~B+/:'$/","r4?y{$","X" -"!B*hQv+","]L%\h=^ja]","ed'D0#","P*pN\dcC","R@","L[_adlPve/","Dbl9e+t" -"","]`d(0a","G8,","f-<","" -"^.PAa[Jp",")z-","$;","*`","8WnrFEP9","%X,Cs4" -"#%t","d<","M55K,.i","MQ/yp6v","V;9p","`U""I<]9" -"aT_{TI2L1","TL","Lw7A]","B\9cq\","6","]o{o" -"|IG-""","aPBM&u","LBt-jh(#7","oX","6^le'yJ",">!u0" -"oU2$p","nw)HbO","twDSt@.)H","_Sfv","","" -"P,t#+^","=\f~","-[","5RnMDZ","Z","&_GTSd#b" -">jb a","j-m%.)W","}>?ibm$Ej","DU(x=W","","'" -"n","@v$&TYmK","m%","Y{","LkG"," ","|x@#","UbI","G" -"`""","&","fdcRXEN._`","s>O^6/i+","OXg","" -"%A","}G0.i","yk}g~?>!g","UrIhIn,%","do{#$R L","fBC" -"2{Y-","Hl@eJ(}1y","XR!a","J=]_6"," P-d9ev","1?g" -"1R",",8*c","yD>_`Jx","%X9","fbuk=@f","gU.&{%" -":)""WmHE[)E",".uxm07Br&g","_;Kv8","Fuygx_j~`/","jl","E_zs=" -"lwD[3ue","aiGuqd+U""O","{^f|P~&3l7","_","M=H)%-pg","2{8D" -"}FKC;F>","^aBSL*n}","@S[Jwj1c","""VZe58b<","Hk20'I","" -"8J7Mp\5^[","=""q","ibI","Y""Opp0","Q@D|Lj","'.1L$([mMU" -"ad>%ZL","'MX!mvqH(I","!{4>@_","Q'd^","DF?L#*","+" -"","qC3~bhdm","1$w","oI" -"F`",";82`wbuNT","h","ioK\m","r","7@""L$s-." -"GjKg|ra{","\}y^NS|H2V","5R2%[^Y","JkK}k","}}","C#N" -"8#sK","B&Z:gP&F","]","zh#?d","=","`^GUM" -"FlZ","l","_~<","w","Rb'Ad","hX-" -"FkzRi","","T+`eWqcVV*",";[-y","S=&HK\'","-R)sxn`c5" -"Dh$Xh'E!","RJZmu[A|~B","u","s""}4Eg0gZj","]#L,0uR","" -"lbNx|","_Op=%6{s","sC'j_&lpY ","uDHyz","5CXx|C5*","H*0nKRfL" -"",",[>a-pvV<\","k9N--v)<\","]K0}o","4cKze;`N $","(" -"r(>Kj|j[j","-:_","D","([O","*rN","P" -"","o/L&Nkkn","'lt(&","","=FKWv>""T","Wwz" -"0TTj","","V1n6+8ju","5!eo","ll1`*A?","" -"~h\s_]","wt","AgDG","sMsY/TH","jsS",".dq-fJF-." -"X20I{PQy|(","","/l^~Lp34","O`]I","@uUg","\GqBJ" -"","H`>","Hmoa7[z","F8o?`",":","&Mf1>Q" -"z","|2! PXt_","[BJF" -"z3=n>\EO","OZb","J","$.2;_\bQ>y","x^","0`=^B" -"Sd"".dF9B","F]-n#^","","I?q","L","""8L\S+M^" -"BSzoV0)(z""","s","=9,B9","#q","m9","|Zm37ek8" -"/W","",",u'1m>`/P&","",":&ye?\Dt","ZT!u%\hNtn" -"{cx<^U","HDbQ'cO:l",";Lox~w1=Oh","D.qpb4","","9NY@n5" -"~nJ",".yL^O","7","""3` a~q_","_7" -"[","d","Z)Dm","HaW2R@v","}Mr",">}" -"","}I td7R","MVe=@9]*R","?","","3gNpp-" -"au7","$BMx&<","'&YZsIrF'","q]h","A[<","cE_J7" -"$y",".7M,B","u/","","=#'jtlT"," &Sb" -"m","&M?31<.dn","_","^",",@q#>","njFq7VV" -"","1","U=$FJz!","~0L\d","4{L55IaX=","j&JJ9(/:W" -"","pVBa&~3","\:9f3>e; ","B","F>","m5M_.XPAva" -")|unsjx%C2","}O$5D" -"n&{kK#$r","1)","","1""6Q2.","","Z-}'R" -"s","nUN@0pj;8","-B0g%FRB","Ku","s)_Y3@4\X?","eQC~" -"It2V* M","k]~,Bu1mc","HliCCg","4a9+$wt%oW","XOz`0eo!/h","HrME" -"3c6wL:","b@O+4k d}","(","{%0d^I;K0","VlCgF1x","U>7NUa" -"UT`t*>","}f5m@""","W:","YYEb*!KFns","-~,<,","pFwko 8[t" -"H/89c'","","Jn[V","Ae&3`("," 6[!","v" -"F5:%YAMMAW","0","KjMRKB","Z","",",e;" -"~K%o^dDpB0","\Q","_FD","b8WQm/=","","MZl3\LW,=" -":D*;","|IgY`",":*D[NGr=A","X~]oe14","","=~,0NX+6" -"5K=#|,uX","9LNs","[FG","cp\&D0&fk*","+&",">#M]T" -"='oA/","","xq!Q;8","qzNL","`duzWU","j" -";;~/.","U:'v||","","","l1a.2","0LW2P" -"Y","n`@!","J>H!2F","rI3>kN|Ac(","33L","z-R:-iQ80" -"y$k\","6wNF'D","6aW[:j<"":","OQ(e","U7[!L","ES>0]~r" -"p!=","0~X2^}&","{OGGdTA)~p","6 gY-","<*b4!cuh9","2" -"%z^e`M/.r?%I","K","^>$","3x$X","!Kz:0O." -"uK40ZtQyY"," t-lzS","","eF","d,`Z^1.$","Ln" -"","I-a&%.W,","wAo","nuS[|p"">#[","","[x#Bz" -"t[FV}8i","","V~7Me","9c+H`ALto","`H*$=Bgo","" -"}wOU\;>9qF","F#N|;","VN775""G","kH5","&-sO1/N ","^" -"T09","mLW8MMJb-)","NF$i^dy*","","^"",dv""|{/&",")JtR,(" -"5ab`[","),@{]kRm","HfaEwLe[","p","[U*M@J5","x" -"X13=T'&","!p:vnLZ+","Q)6p)ga","eD4IJE($ L","Z6o","" -"PX","_v>`Lg","","xB0^|]","YJ_-|","7koAWFYFO" -"t1@Bm","}mZ*Q}S>)Z","","6(r5","oOFDYO7WZ","nG%b\^aOR" -"'vCU""Y","|FRSC%5p",")c&,","tR2","MbJ_J9~fVf","R" -"(]ZMr}","4O<-EVWg(","","@r","","_Jv-!;$]+" -"","TMmwpgqiVt","{&ao%<","","q#ho6X9b","" -"b","","R|5W1q&","4\WP0{","5<&aQi{R","]+gM&m$o" -"IO","bh4'5O)SXr","""eL","^j8?|OO","zuM""",":Fsb" -"lg","{","x=" -"G=|","","s-b$#I",">\+","'9T\W->Q","Ef@" -"*d%;","=X[v[H>@","!","xa","/\","z" -"","C'Wq$]s","7bNW|5","~8wK","G""IS]HuAKf","bR&0" -"","v4j","u)MP)mUS","M","2%+[ ","1~" -"e","n(""$N-YDo","@~T","}q;*Y","EDJ$","P\N" -"!87kz_!,","rCJ3i","Y","9","gEl","}" -"bA/'","*p%yx","MbR^<","rCz%q*fi","~HH*","40AmOg" -"MOf4thzm5","E&'","TdTyX9","y","K9iC{bnV(","n}#=Ws" -"hO",">IZ3q}ziS","Ld+hkl)B'Z","psm)rYB@TC","OgqG`N","" -"lw9s","A,`~","'A?>fz","","]}?y%As","lJDuGI/" -"EdM""t","RZT}bLx{2","^&ek`[L","^]Drbd","wD}","t!\zOD?J%" -"","""%"," Hpo'@nY;P","1$/","nuHW","I9" -"",":\","B}9lv>Nb","{Gmx(L","/ug-a3Y","w*h Dl].A7" -"^l(w","EoO8^","xosm>5","<,kU0b","","?1`j" -"q&}/sKL0","tI9","+_`=","p","i\C^w]r\;" -")gmS)S"",D","KClkeXt","*S5pM6q","U}L`lkK6d>","m*Y(]O","t|&r)0T|" -"_l","KlpL","X","z6ca}f%@","_-2tQru",") " -"1V,L","%RQ&.tF)ku","`pG_qCul=i","GS_zVA","Zms~)/w","k","%","svQgA)","#","P998]Q>","5+#2az)" -"uV24q","Oz<.w_" -"v' q({d;","+njk}","nn|aa","4B","bHSZ%5m@Q6","V)Qs.Ucb" -"I[","U","r{=z""_PD","*Be7-2^68","}Dv_n<3ouV","" -"y","","K","","M5) |C4M",">1*YIeg4" -"{!h^{;","kFUNy","U.i#Hc","e/","","a<~" -" aB!","f&B%6&",",Lz]nPWGe","*;B9Wi[","","4" -"DKNdP@","3eqY","j","k&1","Toz}","""YO" -"$)'",",U","","M41)6>Q","[v^6_UP","P1y;#<" -"j]ItKmw4","uY*[2.","c,,","t;","PH.Dn?1w","yI(" -"#F}58/Qb","(`_%bj","7d,yx","73g n9b","tIwI~","57" -"`FZD);fk","km","a$cagNV8*~","u#>`","L28cl?","K}E85Y" -"k<~'Z9(nL","","N;5@","4Yx+_@u_zj","5N[","hx&'" -"vYr/45)","-{s(","vjh","^%A3!$mp","V+","GxT6>><" -"/w","z","3:8rKE\I","5!","","ZL~8F+ZE[" -"e!?jMw#.aw","|=e;*I~G~","}KA","6pa","","dK164]/w" -"5f","+|H+W","|@hr","A6%|R/","","HL&q)-" -"$(N8-Y","x:.!9VP(","qUp2@","5g_-W)rW-","","wb[w'qr$a" -"Cbuc","1GH6.7kR","bJ0\*","Ah6XW(o","J}S[8A","EJf0TLCW" -"7(m+/Z","v"," yvy}V3","LWU]",":","" -"rmS}]N","=~p-+]93~f","s","YAT","b","HiX&I" -"","A:d","jZ$","Vex","","iKUth@&" -"","rlSrlQ","","bz0q","frx""8","En" -"J",".@W@","~XP","s","WeKNE^rr","" -"XREU+4`joB","g[P~9[K0","E2`RqB=K","""][_W""~jq$","Rh;D","wO!!e(" -"F]v/",";+4(ovGD","eTB*rFq{","$&J`z%>","OVf`g3<","XGgeuV^j4" -"Ch(W","U{W{","NJWI}kC","<","-pKXGl","6LCYo" -"sz].tI","=;-yVdk5","","UNdl""[u","R*|hnn(|","_""&N>3G","Ajhy_^" -"\Spt","Y@a`U^","\5Me","oVqIa?dMB","H5]}","" -"Vci","%'\","$Ok[9VBm","tM]6OR)FH4",">g|J[bA_&","c" -"","s","_'{j)","%i1p~@f3n_" -"Rtl&xxi'&","2","dv8h`"," goL ","g>s3v","B]S4&\})" -"d;}","Ve3{v","#gp&D.2xn ","CQ","^d:+_btUp^","&)3D1T|rLr" -"-}~!%","|>oZ=O<0h","*%<>j52","","","H4(qHjctO" -")I","D[`XbyE[1h","$ZzJP","Uo","F,wfG0?e8","`.i|SdFdO" -"E/","./""UG+OR","pELt(S<,","ES5y[","h0966","\" -"I?","BQP;7~L","&",">`!#:Nz","","B }zNS" -"2-W/","5(y0[[kyO","","vKan^ge-d","97iHn@IS3{","BL=" -"*q,6","y(G,","yp^NFwy=Bfx]@" -"","frl:","|3","|d","^Lm}K","lUEw8>f$?F" -"","Kc","sI","4I8","tb6",":D" -"0\=7rQa","s","o64b>5o_T1","@xqS>","D|GyACR",")eXD**j$yB""%S","|~/",",@","","gLq@]R" -"4>W","$Wm","","b","rrl","/" -"!zp","T^C?","WH$@","S","3,pD7O3$","NWz$ka[3""5" -"`7,:U","""RS","0|&`2.#rX;","n+","Ku{8`j","uS&_" -"M,#-","","+V;ef{#}bN",":/=Z,a6uI","l_de#$","1YdPz,xkeW" -",M","$""\ 6A:T","","m,|","x","xVJ" -"3:haJG4[v","F","jH_gKcB","z[:V4[g#Y","W","n(" -"a#K","","","-mgzOKJwv2","4- #5<`yKr","Ol[UndAVZa" -"~","[/+AmvQdEA","f<#","R[/n","b&~,6]o+7:","|E,A[7ex" -"["," xV","jy&`U@a`h'","F=5T@fzb`4","v_W>c7wpl","T7%r'|S2]a" -"~{k","ZgX0mS","aV",">/Te]<'xsI"," -oeH","*C.WxeO9" -"l+n2CWN5S","F89[Yc"," ","","","^|d" -"PI WJ*","i","5c_Iq|","t","p2%xeR"";","_C5 ^." -")arZly","B[m","e,os","P`~NLO&","U{ 9H(>","po-^$" -"0VZ&=q@)","s@p:","\","","I}}(1!qb","b74r2Q1p" -"\\4@H>*S","RBDR","]/?","",".tUDA6-]!-","o(""AXMcBZ" -"lt","O""Ty&`A","-:","UjXg Q","q3VAM!G","`" -"D3_|\ShUhS","Ak5/1Fti2","t#5ns","i","ijg]2k"," @x>^zh+%" -"Bt3,Em'&8.","=p","I3\y-%d","m!l2>\","*%""""`_9h","&8" -"|dzx0","","kxY o","","w}a1vo","WP9ke1" -"i0{'h0MW:M","Y","H","6tE[;!,@","","`:,U" -"","O!A8","[Y,","lvl","=_&a7yd=","@" -"?[;V|(aeP","D(J","g\J#","x.~3v""CV","Du:$","NJ" -"s/&hsm","\S))$","","0hiCsodx2","%2c[K^^","H%d""~t[>~" -"DuW_&x-h","hjf","zXCvV","1m!C#","?I","K" -"J:}","u>","l|t%FS","u }J9k[eu5","7#zXM~B;In","{|" -"\>'D26OR","wv{w$2- ","vw-E","Y","""P","f[X" -"dykP","K5vi","C)}","KoV@}y(","jFk'","{#LhXAk/" -"(Pu%j","#","sQ\)^d8","w","aE&","+1K" -"Q@{[S","IBGW>hVcD+","(^-8l","A'u>|09E?",";#4=","e,4/" -"XJ^0%Ud2(p",":L>~","{-:b'B","5*'0IQ2(+","7l","0" -"EsRjSf,-4C",":*XhL@f_:","","7","AjK-d","O" -"vT]S","!*<5Qp","S/.sk`?*","+!" -"Y)?i8{a","uG@Q%$M","W`\=WVL'vH","qa""1\A.Orl","|@Cg?/Vk","W+ KG6[!^" -"d=[QB","Q",";9Hq?$9e(F","5#Z`A@zpCS","_3tO,&","]qd" -"j3U","Nu8","&}za97","H]AA","}x1q","'!" -"@d","","","Vf","O^GD_","q" -"p3","tELnilg#","tk","UeBQCQuMa","oV`a4(","V_RI(>P4Y" -"nEw_Tt","","6Kf","ZC>OE5","DV&rdHVK0,","?do" -"n>#i.Hv","8=","U4E)DJ:","&:*huDRSz]","4Z7[\H-94","xaPCz{H" -"g'w>","vF9Gg?m","oO","""(BV,z*","@a!cc/9\}","[9" -"k{=","DYrnMC","eu%I+_*","/DW_Y\y[yx","t","Cla;}TJK;",";IY4" -"~) &","","Cb+g>!0X","f8Fo2{","w_#","" -"","",">","wWV?>zBh^.","vp","f2",":Km}af$","?{_Y&" -"YBNV","JA!to4|k","^","3-Yk6#4","L)","oi=]" -"J7mlZo\_N","M","&[&^p5/0m",";6U-3S","rR\c]]v","F}C>:L" -".DDrM","6f7!","m{Mx{G","~K","BEhB9","ps" -"}4P,8","","fj4G","0$p{E","/YjE*","nQPn" -"^lY","H)T@","",")XH'","@q%j^(;nC","J_GEG>w'","-pDDH6SQq","g,","N0V4","","" -"I5)","hb","-wc_c~i#\C","wFGA","2rvz","((fntfviO-","(","]l" -"AQ;M%>4","G2-RVh","mwp4p","(3tGM1`\","iSHO?&3","Is" -"rQ","q&n7u4)<<","""%j)^|aJ","~h'(3N","","_=" -"dE7,}.","","qbVH","""RYl8V)]","kbX},","'buNq2" -"n0O+P8eg","aL(W@)w1""H","SF_UkkU'T","OK-QAJ'","Ngz/[","xH+" -"!E :/S@v","Joi~G'Bd;" -"","A8NEc9'","1\(","1GvT@{%","^!#3h""0ra",">Ot6}" -"%$@sxb!n0","mA;B$T'R","RXx" -"W;*?c!L","`2\_z/&","P","A.9t4","W]o.","_r&K" -" -TnzMUJ0.","wKi1","","khI(o","rJGy","oi6k`J" -"sW1d3","|zzD",",7","Qx\","2","" -"d",":QhAS^","ELT$WX","5X|;9t|S8","f_Gw.dGJ","P&@t0e" -"dPFzD-PlTTS2","CL?|U;HSgl" -"]EJ_R1H{eP","-C]|l>q","P","3mR|(","00N{-{4V","I," -"nN ","R&:","czgSf","8","~([","yD}z?T" -"/='",">{^}" -"{.b1 /{Ta","?z5V*l&EFa","L07|;`a,p[","qXG-j.+i","{IC!^EZ","" -"xdMO",">",",5=","L",")y3> l","[#E:xdS" -"4kWy(","q,}\","_1i2!=","v^1*;@u{""","V","vjG/rZ}M" -"1:ogQAJ","","%(","m","0WL&?V","$~" -"^$\","a","fls'o","_",""," %Gxy-TQ" -"r#&H","q","j{9I0i(\D","1gfjbCLR.5","/Wx","#""hc1XM" -"~:&Nv1)K1","a}Rq","3SJ$Q.C62t","Dd{RyK7Q","LVK?*8%(BX","opH","EiM/N@&K.N","G!`[j`","","_tB[Q\","^cCECFz" -"j[]hAoY:g","e06Ox","/][{AV9\k","WAz{",".","Xoa" -"906","cY\VzA","R_D@","Wy","!<8tMxLv$r","UL" -"","z_y","",":}","N|gi","Y\Yb$T" -"rSK).^[K","~(8Y^W%d","pk$O{t","m#|;","","/imFpGE","%Evj" -",PU","TI" -"\Y*CkdMO","u,ZT<$",">h""","V4T{ik((W","b|""TE[",":QN4b5" -"=TE|[IE","g","o@","'#Iwh@|","*iI$","6ZG6es" -"w","",":X'tPQ$U-k","Y&>vD","3","M^33" -"6?@32:u","kzfVjL(x3","E0","de.|Z@gXM","5H","Bs&" -"A$Mx>ml^n","@F7%;","7]cs0/\yk","1,","'|E4Aa:IE","so4kQ|pAT" -"\v>;T'I}+""","","m","n","7!X=o*,[s","b.^X" -"7?}8","","]PrI.","E","HfD`l","+GfQ" -"]0Nq","R[cI >S","JlCzjV",".","}>.Q[pu48%","X'PkPf" -"k>)s$M(b"," &UOTtZ)>","OWS","]","&e8","fMqlS" -".>*6|","1_" -"FNzKCZ","Q6|jGO`","h2\d'BvR","CeW","","2>YZhc#P" -"2","DQ""=7w","]L5&","","~","^Z4|}1Al2." -"T+}Anz","vYY|Y@fw","~5x8","P","2l-","3$.S$SE" -"","~y/","glOL(%XJ56kk8","""wQm6x.D;:o","c^O","HdHyB!@74A","=Xxb;K""","o]eg ,c};" -"z*","jd(Y2~" -"J","|=o.))kn","^+?l8-H","Yve*vf88.","ss.+C~&~U","#wrXq'~p" -"V4} hj6#@x","B*oW","@j","=/WqePy,-","6\T)","5*Ta'" -"gRvpk|7","VOuT","Z","","}/KUa@5","M74<.kAe" -"e:B`o %M~","aNIe{)`|\","deZd","U(An","X8Rcy","V0w%xY}V8" -"^yZ49{:","4K","PeXY/<)$","j[F+pB9","^","&'%xo" -"c/8b","n&@_xw>","I/TN","],r:","@t:ze?~","A!qYD-;" -"QU","!}eU7h","5Y","=7","","" -"O$oG","bBZ","","uN *Hk","3","X)" -"","YC/\APy`","1Cu6?!bNj,","O=2 R !,_#","yvQNQ","hpv2G" -"Iw<","tt?V6b","5?d>","&)b0q%h~7",",r}kR}y","" -"]@\m","p","==IYuOq","<2fMt'hNoc","mu!Idz@","c)0^KEAcd#" -"","q}@35VuN","Ud""]1y=m0e","r7-iV",")gWB=}","" -"e=GzB","R3Hr*o","'.)0/","","nVZ","tU'6{{/" -"1+*kkNF2","TfA","60Q'T~X+[","W)?Tl"," Vr""'/s;^9","9#" -")9qv9H","","hZ XU':S#","x","Zy","nvB+" -"\","xFZ+3X","L-?","aFXd_R[v","fuL@NE;","$p" -"w/`|^e","w)","","N W","fE2q:~k","" -"HD7qI]R:","&coY""","(71","",";F","U" -"``w","E","Zyc],","[gG@,9niw","d8eB>5,t]","3k*gC\Q&09" -"<.2","","""^aQI[",".","Z","+L%=""" -">p","hvAdZ$@2z","9EzRQ",".m _*S=l{","x","" -"cOJ;l*v","f","G_Y.oUz","j","","V" -"~SLIP/6=D)","%d&6/P","d""P","@d","","sOK26@w<" -"*_9Wrj/FGJ",">MBsQ~",">-?Sqt'yQ5","-Z","r8W@\B~C","","Y6tN'VMjw","l&nB" -"scult","","%^T@)","3-<","u:x","cltd" -"","KTFNw","+A","2w","Z&*' e(2e","?" -"+ <%K\","9d0g^,'+","S'-xdB","R0sGmEy11",">","?Y98agC" -"j#|{} ",")","&","HAh""!zA","-cWn#a","Dq" -"","rt>b","R",">~6di",")o{dJ3","zNS" -"mn.%U""xwI","=0&1nde[e","l-g$)oy","8Bu`Bm","KrA!Qtx","eB$3" -")o5","@UC9yU","EqtWT","2Ta!{","v@Pdj+[S&R","5}c)\dzy" -"Etza9|","7ASvQy*;","5Tkm","'}mnxT" -"kY[uj!","",";n>Wxi'}","|9SA","5Q","6emu/~" -">h%i""X","t1b","bz yE","}vkn","@p","""Jht" -"","fGt:A","B","*","\]E\yEe3","k" -"'|?oF:4<-X","gLKCefb""+[","","\lk l","","p" -"g!3u""7","t)RVmT","Iu","?sQ]","`,sYZvf=","g&cCz" -">""{P}W%0","*%h""","'#KZdi7}","-","%","" -"7$fn}5","vHyS,L*-X",";","v[","0cWihVf}/L","g5E;A*j3" -"3uk","8""tb*:","_9KK!","Df^{+hB(","5Z,","G7o5=(H" -":","-e","IJ""UVGy8>",",'a","gBsja]ur:","ciZ" -"@%/d2","GHJQ8","!QQjaYXM:","3[GqC","""QUP/_+j[","d" -"N<""mV+wF","","aviq","cp.7",",","N,|" -"","ZzN*X","4OYi&ci%6A","lX1XP","X/JVo[,","v|H`" -"e2(HK","","6M","D","VN:f;|$u|P","kD+)8rF-Yp" -"$X_]0;,","Q|v","=nYd","BSiPgqC","","8x" -"FuJ[_","Cz","#IdY","u`C.or=9*","=@-2'","e" -"?","GdS?h|\Cjt","$/uH","g0","","F" -"G","@_N[`?29","`l?@@yV\","bn_N","L4","i" -"rcqK(","!Cak\x~Y","}","Yv!CK@","=@c(b=","J;" -"b","*gXQ~","","M=","L{^","YKK,7$L" -"g","X{6@&mP","I?#O,m,","mn!O","i2X_,a,j","_02tx?.v" -" a($K0=wsH","|a.lr ","I,`S[","8""C","&","$YZ~,it)31" -"72""RWvO\\","","&]AQ+s_lMX","6u","j6}$+$U)","" -"s7E>gPd@",";","Nvm%IV9ZT1","3h2eD2yv","Fn5","|UmuEQWXs" -"T/]$,>Te","kOzl3/U8]M","Qwfc\3=!,<","X&.","G","Jv+mpb" -"7","j:C1!).","(]~Mlt,g","#2JA:~w","{","5Toqu||t" -"*.@wA&z}18","`Sp2w=A","f{%9|%*!?","qq$Eh:","BkSFS5L","6" -"i.<7#vE&",">Z}n#w~","yO","QR6)0=S","T","T\D6","" -"+","RX6V,*%f1}","v~lcqf5,}j","k+B7+CRF","","_ci" -"D","I3mFk#","'","V;6f","/D",":s(:" -"cKi/Bi-P","U","1p","4sc/*Lu>s<","@!zM2","ZQM-3" -"KFq+*40b&^","hc&D%j","y^?('~/815","","v%BmJ_","s","P2Jg12LT-{" -"*,","1:=C+b>",">~","G>>f'*N|g"," 0P&4","ghtQ1" -"Y","Qu*vMl!r","@)G_$9eY",">C.a. })K'","93jw%MX","1j&kjXN((" -"d:","q","$nuLrp","Ex(%|-'(E","9bPt","lsg" -"R[Lq$QbQ","","p~","=&B","bf[r","fcPUZ" -"&/!AP'of2[","","gK%S`qxEi","a""HQ#tREJm","V9?",")" -"}jpsIFQFV","6,hLe","9QZK","$(Q}","swAH[!","nEgdsX9Uo" -"DI","33","fKG}8","","^c1","9-" -"N?m8!GSJ9","Y?@@17=F","4","Xwdk-ch","!;{","3BI" -"9lfj","tj#%@Y]t","<","#L","mPk ","2EvG" -"Zsg6}5","3\","W$[$D~|h2","03C*3Y]um","/"," eg.*" -"8wN_e\~Ee",";{ad","Fe'~6ZKS_,","y)C`lnmZ\",",fF?","oW\X-" -"j","o@Y","@","LP>%>=PS","!'b-{_Im7B","{o#3d5x0" -"6H!a0,{ I5","J[|Wj""","*7%\As","l:{}$@","L^!jub>U","1]nw]" -"70(Tco","\pHZ^q6w","","FXwjG","BB{`I","|" -"56%Ia0sCe","6mXvd;","I(hP`p]","/2$","|v@`X","AwZ" -"2jyg&","l;pE5r","\#;v","","","]_4," -"c%v3a&","Svyd","I&\?","o,/Dj1v3","BOjBe]"," Yfi6" -"hb*","*jC3bV","9>>JhZ""zz","# M \","w""^\r","9~.pW 7|e" -"d","I5e]H+",",Mt/6eW","r0o1v","( "," m_\""A" -",,^;%{d",">>","oN","flXdqu'2","n>UK","^1MlQ{vm" -"#a=;De","FOpy)G8R+","|*|W6H-","@?mTf{8?","e2g[E`","4qje|","z","2OwQ)","dp" -"61&<%Ig)",")","1","tu#","","AH&TN" -"y&","c)LM??\","e.]N","yv`opl",":",".wT" -"Fc^2x7","8pA","rudMziKX","rlMu@X{{","~6.vH&~-",";*2~U\P" -"[hQED6","eC?kD?;,~p","Z'c","d[",";.","0(L/" -"'l.u{","Q~S","kuXmX","yi10T]E","M p","jMTMC\uV" -"/","NiN","I.)7*","Er ","","" -"","VhWg\","tl","t6{H+v)cQ4","a","6" -"""W `e<3-=","yOgYfMU","J;8","rL16\vp3a","&gwR(","/V&" -"e\","B=o]=","!CxGh8@","V","uY","^l",";FPO;C!","Y" -"","_Z@S+(f=","O_j|tRLA&}",">&zf","J!St~q","+hdhl^" -"(\CK9","M{<:vy)Ku","n$W5""O]",")a60OGrN","{}FJzjxl","LF|\" -":c","G'","S","D-Rb[_zG","MH~SL|)t","""#[O" -"Yv(","1oFv%eYQ","`#p?q""QuU","cwAXB","aZHY","wyg" -"b}j\+","}oiBQ?]","\","","","HEexFaI7" -"zyP0+pa","Fc"".ZR.ZJ$","3Ahbe`q","Bsg>}W'","8EmimWCt6b","Ei]j+" -"g~){ z","","#'S'","{+S","\FRO:M","E" -"5(""","","SJibvzbm!^","`FO","HS3","B" -"sPI 4*","Y9BInacCg","1!","{z","!'P","(P$oiJ" -"+,","r","*","&P q6","q@4B7!Qvk4","t>`]TaEeF" -"GL?E ]a","INJ>#$","Q_d>WN`a,A","VKIHGE\""^e","N-Vo53h?","AJH<" -"|\ RkL","3H","",".KwI","WD","8LR)4V#ed[" -"/a","R3","8rwy","G(x|;~","b^","[" -":k}>`!R0h",">oj3UxK@7A","9'usR.Tgt","jUMUJW.l","UMEa@","i~:" -"N?!^","3dYd4","_?px""{)",")ovLc`{","gQP$g,h?Kz","7Ekg#|%f" -"8","=#J^-","q)SN","D_*S""U","\=nID:","z" -"3}N(`","*=k","9;\oILK]6r","/+7^-",";B=$","@!lXYjlZF" -"r=Ml5","?.8zt","","eOG.=\","","V113" -"g)IfEngk/lf2","{" -"-[f^","8a","f[Hs:'f$[o","@Z_vg|/","o?j","f~f" -"zv","","q^^1X",">3Wa;" -"m$ \x","a2","9t","G","Z?","f60{W.3" -"+""k/=","2","s]Vp[,PAK1","_>xP","td51 'w","@Rs""fMt\" -"","","x@zdtwY#T]","Ngz{>Gu\","sIX?","Qrc?[}F" -"]z4a+","QTH","J0t\I]m","9","Q!R","_2>cVmG1" -"Pe4}A","t::r+U80k","%n|Gp_^qb","pE$Ks6l!~&","tE","Lt7-Wi" -"DV%W{4_f","%`gF!&x]p_","N}\ 0B }>","dMm)ZkwFq","S)","@a4kn-+" -"'#a","W:}G","zsa:>6u^x~","","]D","Ll`v" -">~jFgP|=c","bVK","eu-F23@",")]!^4","&?TJJl","4a*qB`S" -"c_","v3qX","IEx;E","I,po.>","hG{7}'","Pp&l!`"," nJdM","_:-","%1e'1xr""","W~^","eZ]NcSX\","b25?" -"}^C=ANXiDP","[Kh,&#W8","S'EB7zQH2 ","(_R6","{zI4BO","" -"","X","viLPqKpUq@","","%EMD=kZsl6","y%L8Fks4pT" -"+s","/.","","VAF~l","mgie9Mf;;,",")hH" -"D[]y","{|","Pkw[4I8{8","K53;yZ","/","inMJ,n&#R`" -"yQ9""","`m,8QU""N%v","&c}$x}c","o$;z\S","{>fka","@v06}6~" -"","]kBBjz&X$",",F j{Mnw","9i1*8","ebiSz{/z","|?0o""1W" -"uyP8","<'.i[m","QT:k0","","q$hlrSC","" -"+H@1dlA",">qkRH9rZw","@","h1f","hx+T","QVw=Q?bLDW" -";'Gf<","p?","sbd.""","q>]!T4i:","FGcX!-b","JdVe~6^" -"b+^d0","t6ND","5/T'L7","#&","/CIT","d4M" -"O","D8;iE]N","t51ZNd;l","f+~k;d>@Lo","|qf@sFq-f/","0,!63oA" -"eFwd;a","DBRf","BQcFIUm","MoJU'","O*Mn","rcd gq" -"QV/v=+_4N","o7rj?<","LFK/ !j1","*2<0h","4\P0q" -":rG_2""BjJp","4Skm;Lu","6jzpq","","H","[wK(v?Ncd{" -"!","","ElMY}i","aznu&1","0t#P|I","p4Fj" -"R&-","bU>xS(1`K7","Cm\[dJBHc","^hBulws #p","lI","+p&o74x3" -"/","oX9[Ap$","@","B>tob","b]7mzF+|","6." -"","Y6-<`e","EVd%.W,v'a","F ","CnNAUInAG","o(znE" -"","hiS=(#V","c""[(mdOR}","qY",":Y","n%$OS(huUG" -">2V" -"@iv","V2rq[","P^P","Q=TSzT|.","+ztzwmvN","B4JL4" -"Zh,","Ga(j=#RT","BzC)%f\>","AtSH@","s""&\78bHdJ","z=[" -"{H""ij1","lR\H17|p(D","IwEKh|QvD","vUsY","","Y" -":V_J>1^","!{AW","UEFA_","J1","0","D0" -":no","4WMuG","D4xbJR9","+~.sQ","nR@?","6&Al3b" -"S+u","","LY!66lV.","]&d","`hJZ`2" -"lG","J>>[rKNpR2S""","-'R(","1tQ <&<","z+ZzxTY" -"toN<\'0x\n","k7V","Tr""#l,sy","]f,ENi;","vWKY","" -"g((n","","2,(","","Q\8;+7#Mq","1{b)v" -"I4+","","[( se",".D3%QouV;%","4>W!A",">Uw`E,xJv" -"DwR4m?",")L,u5""","6G$3%$HiG","'|yFywU","DjT","[m1_YNjJ" -"1&U@ow!A","x9TI)M6\J","!x&","Jv)?#z/0","mHkE43(#M]","j>'Y" -"l=","BG!","\L'h+PQO","&[6N7>","","M" -"_;KP -Q","D~)z4A4o_w","kl&","/","B^sY",":" -"[',|w)","Jd","/{r0","""|cJH76/[",">Qja^O;","jfX" -"@;k2`;H","3N_(D}E[","G,3]","=","<","eev~>" -"e","~","q]$Ho~","GfXA$V.ukt","'TA{","/KZt)ess" -"0,mZ.}<","","!t>u={Wi""C","#""[!{",".Z{HZ",">rTnP[{" -"D];g8""z&H~","/.#_","1@L1","","R6L8W'","pcFXOGm'/" -".$%vc{","~yxd~G4*1","y","D","kBgBv""?A]'","" -"bF3""!4%O","p:,ZPA*",">'pL<~","m.LuDB","Oy{,`6M~Ng","W=L=H|ZNH<" -"qWQ3~@4=U","","URuEI)v~Ly","&RV","G.ZZ_XA>o5","-bp" -"$]LZP","C","[!/n","","`?[MQ","l{%B?]" -"","ef8M","QYq","@]mUz~","S![","o>x" -"bBr0fIQ","$`!c","^d1Y-I<","h>ywp""","&%","%" -"W4+f.","mNTCn","S*2qWW","7S","?8kjD84@CO",")T:0" -"HCS&TN4=}","-.cTz8c0!",";c4WW'","","i#{X^-?$m","m?D}JJR" -"^3CAzaBv","W","g|IV=`",",_I","%+%q;b","u ?" -" !YW`Smd","","O?","","{WeO:Dl","G.@0om2D" -"ON_" -"xb!,k<","]@>DX~CAv","u'H>z}XrJ","JEyy6JpO)","*RF[%6q9B_","eAOZ*>+Z" -"Cx_-o","q>J2`u","!Gc>AC","GR","b<+J';BWy*","P" -">Uy:'(0)it","o#]oCMH","$dqJKQ)JjW","B@}iKE","B","kL4]*s5" -"w_k""QA<","N,g$eqH","bJ","Ua\2g","p*","wt-s+p" -"t","O@#1WP!","d-Pq","8%=Vf","ik","F_}E1&a]","nBfw=U" -"^_$j!w","","cYkkG","s|wS3Q","x&Dks&","2A" -"?GmVudUd9","N}.+2","%nRDx-+","|Ag7","aQ<*W1d","!`}k}Vk" -"\0_$9{N","WBV^Mr","x-","","+",")nXV$YDH" -" >/H=BN","TH6{q<*","I5$p,H","Hs0kRJ4","Yf<%+","$`w0J" -",C3q{2h""X","?PH76*>\p0","v=N"," Dc;=f\52'4m","cbN--%" -"u5l\","k[ 6=","xh""qA]J","VX7","E2*0tg","~" -";Vvb($%L)","lI 2D","m]kY~+XT/9","m)5","","AKLMgK.m," -"vBMCW","V[","n*P,af","(>","~XBuxh}","j" -"XT","F}UEA","j#~BK","g7C","@l","d/OcT-+M;" -"P|pB_n~}0","L","O","zY]",";""-B","e>.x" -"$hg@FzVuec","H;,Kv","Hw.XKk2OrZ",":+3z8$!","V*4:FkV*","p}hiB9.&[R" -"","Q!#!6P/","Sb`<","|x}]o","TxB%},jrj","fwGncH" -"By3(O:,lZ","@-","$8=""I5FF","s(","|_QfdY?`}","\saa/eFMT" -"UR2`U","I",";VL<+H","5VK",".V-q6"":","CIh""E!," -"fYfm)!","","dY-|jg`Fl""","","Doq","+" -"3_A","lNi\CV","*#0+*TBm2=Tl} +","9=SI^m" -"EiRk6oQBQo","qj?tVv$a","iX","uftdmnN","v.6","PPn*4.EK{" -")f5S","{","B-oa-:?","w3=!AN;?-@","","N<" -"","""l","VlKy","IZ+ ,5N","9'o.a%H","*.'u1""jC" -"0MT3Rz_","()kd","","GF","Cj""ntU8","$UL~xYW1" -"WkwEEC","","""ASSq","","D^[Do","AoSoUnQt","^rn{c]l*","y|2uS","78" -"P0h}^8tl","@0aZgTN","@fl<","Wm*","9pYy(;","@Lc5s$`1gD" -"iQa45[.c{X","0l3nBo_|Vr","TaYJ","z+V","K","l]C[oEaGbF" -"","mvQrj'dC1o","j",":r\6{o~PQ|","","?W=" -"86fo[","{)[z",".O@","","`fw?D8hUAep","47TW#).","+q|-,|","h3uP" -"^E39i~","M$\I5],!N",".eD:4","@5K","~","KTe3l" -"OHk","/n'*rblt)m","[0.'bT","=zjy%t_Nap","kd","J:%)aC" -"rqU}85x>","It^Y=]","Ul-x4b;!kK",":WufT)[97","&Z F&v[TZf","!FT`8Pv,T" -"","wZ]","z2{k)",";**k3F,7(",":_T0~S""",";V&&;34%R" -"C{d5lt~","u>Z","","\","mB0N.","tIW`k=u U" -";biUHorBT","45k1i<-eD","{VrMw","!qM","Vhr!","Y78_Y" -"7Y9{GsBEw>","q=V","9M[EiZfNy","C","s}Wwyq:{h","lg" -"1Fi]","tx;Xhip","{sR","1Jq","","8CBr?<-" -"v.X","b","","","^Lry9",";K@X" -"0\E`e6ID~\","[","7","cv%M","nAQf{W?q","mm>v),TM8" -"","{1_5hB(DQG","?7$ Xm","z6VTG}]*Gr","vzy","G(6bCkD!g2" -". 6tY","","P2","+4&)2sJRD","G##","&{" -"]*TBo","c","L","g1+J:V","","@WZXyy*3e" -"__c*","T{U%VJ8K","p2!i;r","","","Te7u`K" -"8g","rhp","<03V\k1@",".^UAWt7","vva\CqT'C{",">rdq" -"HvGi","k!P-`%m3","Eg'x","2","xp-W9O]h8","$zKf0Ak(" -"RR-rW","sN2","y|$4)b","-b x7+HDJ_","9QTQ&0u","VM" -"jR@8o+.!eH","$gZfMB>$8A","","*C@:\cM","l/{@}^F?v j.r:","h","""","Zso+" -"jczC*@6S","uXYJLEF","*bS*a+wf",")_-B","*}EY-8","-~g/8" -"$",",k","","[0","$t","[g}\kb&" -"","","Kk%qFAaA{q","B}fQ6p$`","p37","n;!jik" -"w 788?Xp","4KHhNNG{","k/4ndZ='!c","BHG5n\\c","'&vs@V3-" -"","}Qwvm^td@",";o;?Jc"," fFSsL","O$${:;q","`8M[O" -"yHsHt_Z","N%aO$","(SsgbVS","5pP>L","Z<_)%j>*}","xSP" -"hQJ(nz-","pvEO" -"h""H4i","Vx#.4eFSP","P%b","g29/ohJ""~","1""W>c>7,Ff" -";JP;lF=","","sk","2pgI","","" -"PNJCZk`B$b","o_rES_{G'","","c; 5f8X@]\","5501hCLwp{","k-|~QTz" -"5|-'3H","(MBjQ","^L!]ELN!","FtK#er:,w","n~d6_w10","~Pv" -"{^h|}DK90\","\S0dCXF@","~Q6yqV4","0~^eD","p.(?f","" -"O`{32q/6>","gr@D","","[^: ~0+d","b6E","5n3dZ" -")","_F",";PXBX~JYz","","VSgfwg);F","]5(>W@ON" -"i'","_zl|Ly","c#0um=K","AYJz","BG",")rd(,k)MYv" -"7","-[eJkQ","g5DV2","6Q7>","5MWw9Am.","3" -"y 3@hOj{","O~V-",":","%ll#","wn]I;1","bE'1gAdTqv" -"M","J0zmzLj&","X-}8(d%q","&/kHn)lC!","","(" -" ^4JD`-","egb"",]Y","@u,G`b","1)|T1rnI""","M7w}J`-)","WJM6" -",UNTcL1J","M>","1","PxdP?/Lm","6(I+D)7Jur","s>?Y;s" -"\W1%TE","ky[f5PQ","j","!UpdZ","}H^m","I" -"%""","s_y;Z","""6vk8","=v07[5","3=gkHmvH",";2FXcoB=" -"Rkg`vQ","g9wm@_" -"3\|1Tn\","/0X","\a4+\vz","","y}","" -"\a5G67'""",")yr",".J*:vr1*ME","b","AwS&Jo","if~2d" -"`3O","L*f""`","9&8z","6A\","FFJ$[$!reS","I2aP f" -"x^Z>*[_ .","2vg*ZX,","U5z]f","\,BLCRZP","FZ@""","u?s7w5W@B" -"amMNm9WUb","]GXr","Sp.","7;h_i! 4","QW.","N1" -"","aj,$Um\5","Xma","=j","|KQ?tg%8","]4:Fn:}fL" -"(6(i+-Q/,j","XW>","s0y/","O9W'C1zw","fc`,n","B","jk#jL9","lM%Na<","!","fbhYVV" -"Av","7,]T$","",".8o6g","-\8","|xsPPd%e" -"$#p8>D&c4G","xd)%mt71L","""Q","JGoXI9z","J" -"Q Q","OY/ ","~!;5Dm","r zv","]yxPpvQ=1","BYY=U" -"w~vY","(m|@Q8",";8im94=.","g","7k'","@" -"Q>2=V","#","~g","(g6at" -"",">dTi\_95r","*sIaw|g*^","SK","*","rv" -"8S4-5D).3R","cnm","]","!O","nH=""+_'+","" -" &G","""P~[Z"," !Z","CyW0 dkajc","D2I#HdCMkN","~G;4" -" 8.s~6V(0y(" -"Pb","Nh5fY*vmU","F2'","<1UjC.""Og","","=" -"5u$","_ywJ5B","G.8","gS mW:7J","","`ihU-\2}" -""," D`n","Bm","P#(@2","M6^f{=}@PE","[`j3F " -"z"," ","iBrsxGF`","fT_5''>zNJ","Pgv=?DYXDG","eiU}dhlk" -"","rxD","Dq!?)oZ1rj"," g_7Y2J","","Zvq7Ca+*" -"cHDEOx/Jw","4S9!vN","#i](lCG]","El7O""$","OLeNUQ;'O6","mvbL1" -"bR8Tc",">c:!m@AT","","~6#:G'G","T'","RaV:E{6r","Le?u{tcR","XjuH1@" -"<$L{r!",";","GST~*T'a'","","}3}`FQ","I","\" -"=Mb","^EKB["," a4","K2p)_@","_9^0","y6`nJb%lI-" -"GmKxKI>B","2y >!lm","tFF","","1","d/Kyg" -":Lh=","(/i6nm|","%L5>","XiFs""","iWj_0D]>A}"," " -"-XBS+","$ooq'A","wQ% .h5","]",")>8l#m/","9" -"j3","z","","cZBb9}","@N9","Z`@%!" -"{","o\_*]L=*%v","xkK'","A",")FfU_SJW{v","VgtO" -":Ppg","LDT","S`jrrI*","UsvG-","","N(jPK]" -"=qxY","iY","tD,4u","BLm4","nXky\B=>","Y" -"","S'v!jtVN~a","","]_\!)F","o4we",":Q" -"|z#","m E~R3^","_pQd(_QXxD","&Bg?y\q_n","1z$H","k" -"IVtq2euva","CzAvYu:/~","%H~X%" -"ZE6Gx","Zf:","@e$","p","]WO4J",".7k-U0Qsia" -"h$$4}d9)*I","(LYf7","lrw,o","B}","tg3Y~MR","F" -"\SMp./?","XN","qt","M","hy","OYl" -"x'OB","n>/WnKEjRa^","Ej=$RJy" -"FOqxm 3a;","0RAOKOC:","{","pL8g7*","[{","Xq" -"-hL","DZT","qn0{rQ:Z^","","$T_yha&Q","eTI@sO>&s" -"gku;x5wO>o","t","`","ilv-urL$f","" -"8RbT7x7!U","x4[7@C*s","yw^ yT","&BA 3@O","u_gEPsg{","p" -"~~75UkG!>","gf>H","^,id","nwua[ JEL}","/\3jp+2])" -"(iD?","MYP_@bd6""","%!(I+1H","","\&cI","SnzW" -"C+C,FzV","4K`-&p`;~","pIXwz3@>8$","1.","aX+Y","HbA.OA,[Ec" -"kfp#yjnNs~",";eT|","vsjh3%p~",">RI|'&0J=","u","_" -"1\ImZd@$v.","UB","[)#0euLp`","<+/ep","&","/Y!6" -".=>;D>NT",":I_LgJ0xL","|z\_b/8s","HPe,","UIohz$hnd","* z" -"0Ukdlv/Pw","3{","","","","uXk^WOG" -"rw`Z;Bb`ev","B|c3V","M4M","pAe_C:","U9au#*Bp>","[4Fm_]t," -";","h@ZV?","","#./5""K~]","",";8Jtxz" -"BBC4@jng`","u8lD G>]48","OZf>6oj","" -"-Z(}8{",";_)n9h#/lo","","gIvZg","X_On#p4","^","Fhg",".","aJz7p" -"Ke","M#jJVuB1Fb","eB>S","F1]","[/","=tCCB$k'W:" -",,4_","fC=00a","ReK+mxC<",";6Eh",")B","RL" -"Ql4:EHi+4","wG]b!`$","~.Bq","t0:$f\E1","","d:M""" -"J","","L)X{#2","%","Dr0Q=","Fw0@o%1z}" -"DcEB*4\H","'H","4;tb[a","G","(","""4 c:<5p" -"Jp@~_eb","Deg","uXv","","k","6JL-","DU)N?4IGQ" -"AS`q","V+DgaCsEuc","#mMs","","iJkBL",".Q|t O" -">SE","w","[m?","Lkx+uqS""+Z","jEl","*UXJkG]c" -"Xx3","h!9UUKGH,F","","_Isxv)^DD","Z","" -"&UY","[*S","g:`7Dnuwj@","26BfG8{","o%>2eT%h|?","/ue_a9" -"fg\@g,ey","j]%w","dLZ9IVtKbz","Wa/","&o7?!QK%","uDf" -"^wl0(3"," &f>`lwIL ","0>lt9Hg""q","al","","47!k" -"v0","Ksf(m$","\",")","","QU7mR?" -"$5PbDf,i","","?gQb)","V'4)","%0|)fJ^Yx","@+l?0`B}k" -"L=L7","WR#@,\e_","","b","%_.{_$","d" -"6-?Pl.","^P.om""XB^","CVk","AuOs(U h$","^S]9n.3+","[""+" -"I%D/\S*","x#f1%","Qo","FCQjLg=F9","r_iYR?]]N","" -"23Lw3m","qvOa8Ykh","7d{)","","WaHk$","{8L3r]$hy6" -"0h","$1^*q",",!N","Vo~@qe","$-%V)O%","pKuKG%5z.B","%hK:.|" -"[JFR}[mtR'","5$=>oG<","5#Pnk*","x8F\","X%/P\<7dyK","vT?50" -"ulb[Di#mi","a?rd9 i","","j90QD","0j","7c6EH" -"?WE)t4/","Qp,rvIi","H@ybC@V]#","!=",";Jzy)tX","Va" -"t2vrM]",">7f","[B ","gdhbhk","fs=g>`XJ~B","F!`GS","`x[t.t$XY","W;@R~oA7","7eP","StcV/w2C" -"{ksWf8X","L1?","w|Nq","`cGF3Nb\p9","QJ|","K#c$" -"tk]F","dZv'Te9","dkDelv","H3ewbm=}?","","):)" -"AU'i-^v7Qo","2F]2<0{""fa","dO88E7JC","?ep8h""X,","\P76P*2IZS","6." -"k","EzR;3:YRj","gCg","T1k-Nz1","fA-zc","t" -".WJ1+Ro=De","g8e(+","_eJoCv%0la","))""`<)'m+","n_1(","|" -"pgmjK(&;}4","","8?>Kd","sY","","EX(~VIHb&" -"E/4Y6","#%iu]","q!""P'H","o;9","%Kr>6&asm~","q" -"%@S#B{2E<","","?8$0o,8!s"," %o}j J}K","yE+j-","" -"f%(","<`4","g","}c","u>ik)-Q","\?mu" -"\","H","$","WuZg`:d`*A","Y|Q","Q|(P" -"l","N/","YK[&>^`ZC?","rK%MO""0'M","|ZcN|1WS","#\67" -"ds#1M@|","IJzR6F","-t)a","","Etq^","g!" -"J1wK)9G ","H&,?","&S(dJ'{","}z#DC","*T","" -"z Mx&p.|K|","@)#E}}","aC7T","X <,Pm,","8^uTz|o","R" -"(/dW9","","6","N5D`9y","","" -"","]Lc;$$1X]T","C}?mt![t1","NWp\j.","}m\","j-=IYK9/" -"xc#OKD2O2","lyXWx@x",".T\+"," :","0u","'$4" -"jAlzegNuX","+`lqS$!NOv-","^gi1A3","c^GD^:I%G" -"+f87zuY~","\v""","&","S$","JLN#","oP[NpwiQQ" -",=:lri","q0","&mVB&1","f`^c+","IN*+ ]mgJ","]Q3mBc/Ih" -"lUFwZQFYL","|j=T67","R%/Sy","gM@x","^1b, VTi$","" -"y~,","","yfAn]OTpH","7Yz1c?5CS","","=33te]w" -"M(",")~qN","/y-n2yM","","hIcIY~UX.r","LcX3RQz" -"0","xVJkO/'_(?",".[ZT+tUYx","q|""B\O","'V~9Wx1\",".e&&" -"","g8[q}B","","lKhQ$f!p","t)_sK(W","y" -"i:","aFhK95","n]u043a=H","[R0U/h;","f""","`Sc" -"","HA","P>)R","Gr","s","bU4xh""ee5" -"fn8","&suh","|$#o?s0X)","?","!E[V","Jq7""" -"T","gzvDhD","fcjimbwEc","<%0@S-fm#9","8I*}WSQa$","ExQN:7@" -"J","TYJ","","","-%f6 (z!7S","O{EaN" -"so","tH","QvQ4\%f135" -">So;u+9","=#)>(P","h\{TciLlA",">-","4r`Z`_F","-U@E>W~" -"I|","^*MI","x!""v`","=C|""A","TPBJK","^$p_" -".K9j l","i>","KLOR!{iwU","","p","oJ6M38?Xz<" -"1o","AC~E~){=$6","C+%%%RWE.","L A4EQuA","","fb#""'" -"\Uz!","V!.>(&8u>","(1t(*","Egt#B","pd/","dX" -"D&IP7.i"," jGOZ :my","\","","!G2.8`","tSf@" -".","@WP\" -""," ","^ds","C","NM""&","" -"f\>H*l^","3Z_i","*HZDhE","=O2GCEzPS%","5j#4S" -"}'84w","M","i7;/p","T\xbvh(Zvy","m:}j3m","0t:U" -"aFT6","e@N=>[","e","yw{d%zVO}","e@n","MosC" -"Z3>H{%k]","5$j",",Su#fb6_U","eIZX","KH\Q: G)","q4|1UA","J$/Rt$4Q1r","YR~6t;nh.","#)bCw","","l%Ou_Nay" -"Kd*\y,^EL]","0#m&ulCk##","C)`^\y1"," `n""Zr","","Gv&A:/#b*5" -">#KI","cF(0T9""<","$`E^p6$","<","#?","m&oxl*X" -"Q,","RvXUe_|*oP","[(MpJY>","lAa G,K","V)r+","T" -".mIQF.w4","qkP&tVq","L&","HT1JD, ","L2(Gh","rAM32T[s>x" -">","","vZ/[P\6","""n<_,B","","G" -"=","","vKiynaC}","","'go#eVf.u;","!(5O" -"","","b","H~+7Bt6v","\,BXVP+","iT^wB" -"j","!K79","f4DGj(e(",")2 V4WV","wxU#O,>0CeQ)","|Cr'of*","EYGd","z*UoM" -"]]\","E70<","*Vk-)]rsa^","","y?/qYr0","W_y$V" -"5V~X)","g9","Bo;#)","(#&^=ZA","_+d.=LT&,","/" -".y1Gtj","K5A%","\,V>wQj-_c","{x6d","_o","O&" -"D",",[<5","6?","d","+ocf:ay`","*1!3Jb","-","-AMVOE","aY;","`k'%k3S" -".Eeqz;&1","!","",""";ll*","b=YeL*","&" -"[sd?O","^/SIk+","","1L;'XJIDJ"," &v=:1@-Pr","/e61'+9&w" -"dc<(HA;}3>","{_M" -"^~r[FD+","1K","2OvR","@9","?({)i","2?ApV]:h]#" -"t","n]k+","vQv6","p","7+*P|\'","yzL" -"PqnhWiHv|","Dekm","I=","7",";fDW +","w*'T" -"r.A*Ox?Z","`c","3","5:wi\CCCx","J)","! k|~O\s&" -"R!Fy/%l","L_]g9","+","","","lfc5%6%" -"Lxl,n","^t","BBgoMVi!","\@*omRr_","G?","" -"V`?","7PW","i=",">b+D","LX" -"-ZB","{c}8j","oR-*\ylE+",")~rK4}b=","NAD=fT0","VK]" -"G","<","rHso{>","","SaiZc","@" -".T","9p5hU#YP?","w}}R?'e","#}","1.~Qz:","njV" -"\+@}qd'K","1/VGUy'97c","c5a`mH}n","$V_i&","/Ko","x/S}" -"""hfNX>3","n$","p2q%r","f","","" -"""}`&(","?-P}p:N""76","","BpdrX8","2slLCRs`*","VV4HK>|{B)" -"f7","azN\JZH)","t})1)Q8-aW","Ac&","_k@/4[W]q","s:4vUc" -"4_T","^Y0R%","GWETK",")3","*,9PHsEw","3vcB" -"9","MPFmx5A","-$@""`&bY +","?""","L%","((HX" -"9Moc",".dJ","W","yi~k",",9","{nQ" -"jQz:1<@mF)","4E\0i/v","","Kb<","W~ XK/","*\0" -">'XO+#h","-~","qPBJJCN",":W ","z)J","\032y`Bt" -"OB(8MquC","6W{@~^U","<;=Z3-.j","6","reV","" -"53i#0|&[","=ke6u","@i&xsw>","eF;d","eV8h2+|*","FSXt" -"1534*}","7OwHQ0" -"Z}J$y54\*","","7hg(gHYI","{","?D-)",":1n]E" -"c","pnP","'*nz","Xa}D)q9L","7DL","i" -"2$#p`5H!dx","","9F2|","3u","Ccik<\'","Zn&)|l1y)" -"B.~1q} H","MaT8qa'+","N%N)","$cW3""","*Jdd","1-@!nX<-" -"2DPCA':.Ih",")","'U*N>\g(","u_d6^eT","V","" -"xm12.kj","""H'lk","c/L",")|@0","LP.8P#|>","=R4P|" -"","+s","e,T7|HX|tZ",".I"")(:e","",")u-","p+kd:(ES" -"iPx","W",",","059F=a;","Z,h\c)xCS1","" -">TZd","i$b",")_Xm[","e1+'aE:3","d1m%}","?-swZR" -"A>b,RB\C" -"na","","","3k} &-","g{?Otjt","C]'" -"""er!ts","xx","^p","+*c-?H" -"HS]9'"," 8ayV}6""","@'^w#!/","A",">I"" ","%" -"`Rz(n ","./v|","YZP'R]'","hId^$i","Ir","qQ)(" -"']k+}(2VT","a-","f&)e.,","ukO'",",r`ilIjhv7","LR" -")}","d1ts%)ya_","H","Kc","#9Kn#+","h[*=""g;z~y" -"j","r","Ifa]i}Ih","e","","x][0-H]" -"@~H))=r","x]4&1pgD","}.","%{a89N{","~{#+<``","wq" -"1J","M_1}&w>s","{^e,usXNy@","N.ItrH","Sk2%r","_m22me27" -"G%xDjw4{","","%3jx","4~S|","b[gX=XRHOj","(m" -"sB","/E~Pl&A","!","K",";h!aqS+?[F","" -"d_W[=\T","Zo","H`S<","E",".6DT45n0?*","{:f \M" -"!e&`)n\?",":","ZGGCo?&|A","ubd:","","^te}P`1)fu" -"#1m","Y?*%.s$)!i","G","O""Y'b]p" -"aTe~o","f;a@_Ku4","Y[L#A","i6|e","lXM","W$J\:z6" -"36KG#","rX7\","","zM7","",")|]*nHuHDn" -"b)]","@<","I(tNADDwi`","2@sN","&4","Po0" -"nogD'S","","( r!j","33u*(<","?% XWDC[","u""X2h" -"""9AF","kk9m","","","Hosf9>RQ","" -"fo9s","","Ehm#m","A0,{w~n","=|","W[#Xv;^" -"DhDAd0W","","YU+A|/E","zfYD63","AVw(A}S;-U","`(8=" -"","b$r%>","`uG rv","j0.UQM+t","R5c:D.9>>!","#i!7~" -"JJ","X\9^%9J'","~NjY?p+B:9","j","b","-" -"~>K c""O%<","pUW","p/k~}I@Wq","8ztcxiO","s6&;^","#shZ" -"DB6","m","","p_`lCn{","wUNd%3.A","*.NtX-%" -"","s","?CE.","LS+","r'SQ\)","D\kG%P{wr" -"K5&v~""`pS>","8](}+b","""_","",";G","Kbxn.$d"," @0","ehml<","oT7" -"_","5gbAv')$-(","U:21uG-","YC^c","","b!O,^" -"ioUP-;gl","h2`*","nXZ","t|fWgds",".B*","vj." -"]abR:T",";[ae^B'UH","X|""b0q","&t","*","AuF0" -"Rjau8ul&","f","P8","-IU^Y)ZQ]D","5V$_UF^vo0","up" -"","?D[kd%C\K","f","xR","=","o@@6" -"c:Q-6R","m.K8w I","OgX","_Jf~-","F8KGHN","t)L" -"}C??2","r965oHDNz1"," $~","t","qhdH<<","z)gC\" -"FM&]""25","<9(N[#E<}","","'}w.!_U&","[H2Vl$gI""w","F" -"`J+^l\gy","?QiPoL6E","$jj.PL","'a(N}M4","`Q%O8","$UC@Qz" -"ww0]]","MuAX+N>",".i8m-","&=%^z/","6C/kTP.Y","" -"24""","","c%+Rs93Fu8","J:iNcX","BQ*RN" -">8|Jt$","L}","WF/xC/kLH-","55;Vr","yE=0'" -"","","MQs?h","","wO(D,;;","kCs" -"MH","d G%","U","Qg)YB+>>k8","F|2sxVmI9x","I83" -"qwG-ZboHlY","LWjmr+""","(N*","7k6 91","wNP}o@a","eX2f" -"XU[+JRFPX","","O","","8Bg","MUF\'L('" -"J*6L38s<[8","JfI`Mf~T","zH","+","~RGoZ","z_Q" -"~5 e","Uo","V5fAF0-","","@a/q","2" -"x,M*>CiM*+","J~r7*D g","W.Ux","","","_UFyZ"",[:" -"^W8F]#:c",">6","gZHx,+_a/]","Gv","sr","}" -"9'B*:Y","DWDfkr*v1y","E@","P@","","w5*$mR@" -"{""-\([G},","F;gM=0:","[)","+9t","Bs""8(2~","uQgt" -"d#","YZe!vB;?""=","q","L9h\bgDE#r","/J","fFc:AYA3_" -";U,:z)@","","l>^R_S0]",". Rp=","[.R","|[r+Uq{OC" -"N54x","w:7NbeRkO","M?}Ry591","#|@z","'IyWG","" -"h=02i<","7W#es~","","Uh","K\e",":D1" -"7dRh$","","m","VB.$e.D""""","v_",":;T9`7" -"]y){""[t","}.%)/m}","|TD=pZLz","H'|9l","[v_Ew$=","i(HlZOM" -"","=J","@am",".ZIZoUYI7","W@>6OL","~76uy6" -"","`0&3$n*T",".}","oXB*b9FH","R^6"," E[R's" -";^kkE5aup""","jLIj8","N`53;3","_d(/?;/n","h&y<","t" -"kNk;Ke5","tw\&zmY>,","{x)+K#x{jI","","3$b,d#^)","" -"Gp=1(TJ","f","(0u|#u7t't","","*:{<","" -"<","|^R|LYA","*pb" -"#Y","NlW1`","ezT^Jnm","oX@m!:","6","_? =lT" -"",">Rf*u?[","`kzNE.",",KD&,{[jH","V<~.","id84AE " -"lbn","[~11ZBK","8[:yUd","9cSn","","" -"^qgqcc","%:OK$c""","Zm6]SE uuR","","<,P_K?gb,r","AY(lB6" -"RSpH","\|U!:r","{lv)","qxVzjwG(r","X9Kr%g'","" -"d<:","fE4",".Tsv/J>lvN","","#2l~_S.","J9oH" -"OiI0$Ps4",",","Z^7oe","X}B{B~","<8ho.uw#","l !~" -"1V'","","9DDU","GgnZ]T","zECUL[Q","hobJh!h\r7" -"P)L","Y_@eaV|","P:y`#","z","#',vQj!s","kZ@""*eig" -"%%{^~RaO","","R&??QE","=","dT 19e","" -"(j","s6vZr","G","j?CuNK>L<","rHaC2&\#","pZPttv[" -"<%Pplf","s~KZm","-/C""","Fz1k1Y60","K0$","QmEkIPG" -"","IW?",";Ub1ZVWo0","F/1NP#fFC","9`zW>Lc.w","n8""Qq" -"4:?","","j","D+","kyPd#oHVdt","" -"","#","S}=PCb","","oj{C;d1h:","?QV}Fyu%9\" -"wD","",")tjb/+I+","^""O","","XFHQ" -"vK","\","G/",";`/.NU","{z@e""4A","VtA4spU" -"c7,DK05",""," :fpef","LD#/F#R(_D","aVn?_k ","t +eq4Tg8" -"v|8x","s0G|G","8C","<\Q","R0t","%R""C[" -"T_1<","""$E18g3","E?<","6e_x,","|e{9!fL%""","z" -"B","mM\",";oz-\E6d",")","w:8?]N","TNoQ?HOx`" -"prWQ2edO(","@P_=\","",".K@`!hgm$O","Pwn","#]#6" -"","a,@?#=s5\","5eO",")z","'B[9","}'N","ZipE" -"!'.f",">f>\_'Tg","W?EW","h","(p_u:}t","6vYcvmT4P@" -"0","","X","pkZh ","fuem|2w&","|LXXsM}-iG" -"","OR","N0,%vYTx2","7lr9E=c#^}","?i8Et#^<","h2" -"99","qo'*YR","{U3:f","F","x]EJX4","R""Yjuk8U" -",`*[o]UA","G5,tTLZM","","(tQ3>hRT:","d}0M","2WhW[\L" -"5","v4ew","%u{3","fF#ay","u$[","$Nv4S(Ip16" -"oR6WW'y?_","+czdXh)`Fn","CbWLwO","k;.zHc2U#","1)MP3P:yN5","t/+)" -"V53~m""Jc","h3Ld[k","o3OUr0u a1","Z/kzq","B""","&$Q{ .#6FD" -"O",".0y?YQv^n","Of>\Y7~B",")*h72"," ","E3" -"a,V}""x","h(XYXKwEP ","P","I/yDSK61C","Wf,Q84n","" -"ICCY,l4#]","1=^bd*","t44[pF","O0:\n","","7e@1<;^_d,:d'o","+o?""uUt:23" -"x3X<6","shK:t","H&9K","Inud[","9B","t" -"z5","qb%fZ6z[W,","|s","","X","RZH\$P3/G" -"%@0GqM","|?}:mh","MlVt","Zq%U","+i'6","+1mM?J" -"A$&",";B:h%","S6","7J$wz","Z","U}" -"k","M{%U-,,","Fh7_K8Wpk",")hQ9u23t","qX3#0eoq~","h?_EptSeiv" -";Kz3" -"h~xRIUu>Hl","g,","x7I,(-""rs","&.","C3|K}2t6","w[@sG$I)%n" -"",""";[N66I","tJ]T9","RbaC{","_55_z@sA#M","1-UnR3c" -":re""28A_-}","A","~-)S","0","JZQg$\E.","$SWi" -"=3NxWzs","{qJ0[,C" -"7Xm|#","","Md#%,EXZJ","&Y!(AH(","{Etq(|","o_" -")%/yN","K8","|ph9V","J4*","","" -"0!","n","Fh","<-4d}Ao8","t[dx,","_y" -"%d_S!WX-z","""I9&}0;B","-7bHs3i6QG","q/K}[iI4U","1Pqpu",">A;8UR" -"8","m.4J","","!","??FqZ.2H_" -"N]PSgH","|Qf \#M4#","m,c","',v`AY","c","'kqc14EUH|" -"|'","GJ5/)a!N","H","XDjj(x","/C[\jl]^","JKgp,UPF" -"kxxi_A",":f","|hb{u","","-rh3~w)@G","=G" -"a[8","T1","1bqV41","[>=bA","02(" -"qQ`?",":T4M'*","l[j[w]#Df","","kw~E?e]Af)","ew~o x" -"6Abb","Kt<^N`,"," P~","ZrQW*","aoX~NI""","}" -"*tws","~SUh.","OKpR&T<:","M+wo}|1/","","(VN}j" -"`_.Z","5}KX;""ch""","`mKKtX#;","K}K|xiHk?","trVy^tAM^W","","Gc-(" -"[b9^97%-|","lb9<:J*|","J","e","","\yxp3dTh~" -"gel4=","y$","+gqzP, i" -"~TrZ MZ[w","{bQaO@l$}","c ","e",";'IB08L<0","dm83LY3" -"tXv","8t90ODWV","(@4?U+}","h","rE","i>c CwpPM" -"BCe]Kplg","Ge~`3;","S0&kZkPw4U","Id@6lyw ND","`8,Q(9vEb","Z\}_3[|-_{" -"OPC-ov","R","2.c%1f9","%}c}srAJc3","(u""2gWUIc-","0MU/v" -"g,y""mG I","8*3Y*/_","{6F~","@","9R7P%","NUOc" -"U""l<+O%*","tX6(^9HC2","&Kb[","](41~9]cW","v'.sX8O","" -"kl","mn","N9","%*?H@0w","p-C+ci:h:V","" -"WUb","","K{8Xs,","}/7C=","ybRC`","+<#~>$52l","U!2","" -"=tRxwd","","H%*tXfM+[","w\=^7",":w","Min[*8" -"RwFFL0@","NGzjX","6=ml'#O.fU","*] A0hm","1(","*eQXu" -"zl5^$,","__(faA`tT+","`e<\u7","Odd*TmpU8","M","_*""[5aZ6E" -"y+FQiy""","|C/w~d+","","U","(Kb\u","db,@" -"s","9","","R'ksKw8V","wJ:2B7","X@Kzh{" -"2","t[0Jg+io","rlMzm","pslFfg0","9P\J'","~d^""2" -"#0","`","p_MvZzd-","Si","1UhGDN64@F","T%nizDfy" -"xg","PK3:N","rla2(r","Sp ","BY""","FY!~/" -":Hu","P","gYmIGX%","+ehAD","","MpW?q_j" -"&O/!,e","c[tn","aY/5&5Is{","H>h","yrI`#","H6K7" -"3K$W\:%!","&n]|:0^/","aj.","C?5!2(","QO","o6+\G" -";Moc",">=-iF=K","`eA[U[9L","","5S:9:r""","fT}J*06""h}" -"j","*","WP6y^/Jn>*","OS[l8","]<","{Z\Y8d" -"QS","n0tVf","HVa~e","Pun=8#j2<","E-T^=p7","" -"w","^","Z","u.","4J;4+vW!S","9" -"aG","s>sT!SU`","s7i43","@8QR50^CYTX@u","rg" -"$bGY[)5OQ","kHG\B*i",",U&f[GU\Eu","rn3j+8aCR","w\=t#4L;","" -"7^So","`KBSSu8","A krj:k0FB","{","B{g~4&Q","~8Wo4","}I","}","@SgM" -"!5 P@ p^-b","#tKl9","4&","KYYE","\K)PsgY!","q},pFW$E" -"@AB#Y","/GFo","O7t9j^&XDE","mP;C.=W","-p96WVdwRp","oIo'A~#" -"ZGJs","$H?p.R","Fl=*XWGpIP","g|+Q4%x","PSaj","QeMky:3R+" -"e|Qv9rs?D,","|+c","mL*5ZgW&P","K2Q?I^G}","!<","b" -"#;1@G:rM2","","|h+uwN","})bLT","P 8yqc@9","''" -"^A%KXE~nz}","MSop7F8","LKNkYF","]SpTHYF~I","","q/e7;Yw{O" -"&C>""",":!",",e","C;*g~","a","7dJKU)dE&" -"AJ^MCPZ#A","^z","'D","yeEc%yq[g",";1i","y=O-|0Wu" -">V4W","","o%48wC","0_, +~s","",";^GI&","\E~+;|<","??V4%gasz","9z]","u] g3O" -"bcG","JrQzi)}x1","AFf2h","RUxC2","pRa/i1w6]H","" -"$}%?y%",")HpC","N$BR)","h~2NG)8a","+s?-;","f`" -"","4@T=~cC","","fI","c","+]T)vbg" -"B13F@","9C","+52","V:AN cgc~","5'pt]9cXs?","M:R!4V'VT\" -"G..XUS","LWdJS,7,$O","-: #F3o*","tS{i","gqE@o`",":;&,|L! " -"}O aB""","pS`'","0oR5","+-5Mi\8|<""","oA_^y^I[","u|z""" -"gWv","x0>U","","+","x","7}mBmY5Cji" -"Y%*9 YsrJ","kk/$]M2k+n",".LA","0Bi03U""{","aI`6tc0z,=","w&","RPC}:2DM","VZM:V;2aWG" -"~|(Q.5","prY","=>S`]3:oC","Ea1","T@lp2R""Z","C]Se@" -"","j?0 .","qXk?Q^>*"," XNP8","","B!~$jG9Y*t" -"gnO+y3[","QwWawS2H83","7UZ*B;g(2","S_oylo","gjF","le",",5CG9/Pv","M;Clqe" -":#\","bX~q;'l/w","IA)t|"," Jk|ZR%64I","},REL7","a!`naR5N'","cuP`>'""","9mi_=!Zx&","v8BzApTzu""","ZcKt","2{'I""(" -"pE\$l",">{m","V3*","","8R3X.!-gK~","p?ojc" -"5,dlP$","ov","Ta","I-Pz","^Fn""dZ|Zr4","F4SkH87" -"[DF9T{","0w\i/u","Spi8z\B-U+","59{a",")*x_TByJ@","stHZ" -"","45##TM8qs_","J8T:86eR",">hO","'s|",":TJr","rE#x," -"9t*KB","$","","F]~~_","sK=Bjn>" -"|","}","+{~~4GOnrD","Fv4""}",";u?nOmB\6&","" -"","x","Irr_.Cl!","d3 5N^","Z(=","I" -"s3",",>","GTxocT'","","&&a8NV","3#9_{" -"oK","AatU","#",",#24","8","l-+k`M!" -"o,^k;PdU\","C%)","IE]}jm","\&fho""M:m","ackx","K.b'@" -"",".\y5)^E","hoXh","&hR)lR?d#i","{0bG=:OO/","Et" -"o*EP=""y:-","(/5VbK","P?4%+v","p#s","%z[- xOxLs",".;""XyQBC0" -"Vw>C9x>>","Ga","Eb","DhO]","apAP","/uWkaFu" -"D3a1U6oE>","!\sKdBoA2","VR=","h]b:O6","$","S]&K" -"oW""K5?C9","","_","i3oor8-","Xe5acgv","kB6AP4Sv" -"u/D66*Q","s",">x6","L6qtiZ|77","q","u>^y,|_Cs:" -"C3Y","Ff/wII<){","\!A$5~yp","j^d","/>&:dIuNlM",";]8^nMN" -"","P","U~i2\E*w(","hJb 9i","Ds""D","" -"j#{!wo#",".jQ+","yU_ny\3L'T","jBk\","<","BY}:@4" -"","Macm;=hVl<","13rB%Y1","$`","","WKHRPT;fA","EGE_#A","""" -"S2","dMuJ","t t*r[K9","rSDc?&K=u9","DP*","" -"81","","","V_","""p>>6ZXG","A,`^E]K-""&" -"M04JE@o","CTET","zCk)_q","FMpG/\X^","J.YO","N|`" -"XTSkM","HHDT`;","","%1{k]}?","""b=","/ID.v" -"R","","Vm","","qbKULxV" -";qNbq|eqw3","0\o,""eVe[g","vKn\VPp:","=)j|D!z* ","9DmUUl)zf","$^!?" -"<[/" -"|Jb u","!","d^w.","A;g","!R)Xk;","lcF@OX%" -"hB!7","\f0}","tQ;O2a=""","!:}'@o*P?-","Lxq2i","!{","6" -"","3b=3;9c","KYSFO!@>B]",";2V$Zwye","^L>Qn7D","'FE" -"ui""|\","2w","m-5E;K`sdT","I,.s/I","|""nvp","(Y68%" -"8*1ufFM","9{AN ","1LML","","/e|Kj~K2 ","f]hU^" -"X?'|h?D}R{","1;^kx?","","-\","d\wh","`A" -"p""0FPO","6","Y#04%P=4","QZ!r","xZ~E2","b@" -"",":(A5]r~.","1","A>{","tku%%6l","hVOh?4z`r" -"529E=~","P","w}EEc","q7!aVh|2&","","","d.L%" -"y-I'","}DM","x",")d25=Ct=a","(}r(aDiOhg","Lph9K`~0" -".rJD%}","n%)-;76Y","at","u@H'WcG55[","T=DJj4LF9","-J(,U-xV" -"IGn.","H7Z_","4q[&{P""UKm","5=eKS",".{]","1P\Y" -"`E9D","",":","aaP%p@","63'Cc,","8PS" -"]*0VA-SBRD","""a-~i.{FwW","}T(7hu]Z","K_J)qL'","Ca*o""mQM","kPd" -"EZD","Y~",",\BJ .J4","1,q)c","","iY""y6w*#" -"XRj)}YN%","Rq9/","L7SG;6S+T","1)5'{}FPC",";&>?X"""," \" -"5S{*1bF","Of@x=mv}","N|l,9@k-qV","p&OTv=xi\","J*","dhEgs" -"7uLg>s|","5Q4x","r","%z{O","","IG%" -"^","tsI""R}6_J","&-49G[A","_k$(u@\","hzsDI","+yV6P" -"]Y","\iwci:8","H1eJ'YdP0","(uy!*WP@","\'e","""axFFr)7.&" -"0N#02UAe~f","6","d","~ zPu%$L","Rw!nc@~c"," 8pHCf" -"ej-6","N7","2s3tE,","76`ir_8nUu","{pO/rH","" -"|4\@/@n_q","cov","09.*y","o{KG,f;XfG","C{L+Gj*h}","Pw>" -"aZ>gxL;A","PMP94xo","ho7%&#XGW?","I2l","_~@" -"[#THPA@8","j[""","#+}?27v","4`M}1|G",",","?KX" -"8)v\!B~""","4@L",""":gWn"",S","!zzW5q>h$[","","ifUqg" -"!ea","d^'t8=$YLB","$~s","","a$d*1"," 3fM2pq2F\" -"|","awbAJp6%/m","XF","y","*1AXL%VaO","*]@8=R2" -"f'/x*Tz:","BGF8A","`","Ebqk","A;p","o2c)" -"m2y^=:l5","P","]vW","p!","","=?:R~\" -"#;JE4\jOfy","d:E~6<-T^=M40(","`j\","6/L,)}C!","=+r","T;&","!+Q%<" -"Z","!5","fhX6v}3QN",":jm$ff}Ja","'","9[Zf" -"J?e}-","7J1","","\^a",";nIn","" -"4_","FI|im()}","Qn","l))s]<_","&#","Ne$" -"9X./Tl+.*{","&","ori","m)","f:JZ","G6Y&" -"`x)","r=p;""oUw*J","`g","t?|RH","Ef~]HZ:","B=?J7-07" -"/D5}inwij","PGJo mM@t","AU""b6E>-rN","VBGY ivC","BG,r?uVT","p!jn","5" -"X@%qxj4","!?S^bftN",";o7M. t","%1",">Gyd","o" -"V#CL5H","","S7]XF:" -"q}Qx3|ei","+8s)a1\","Z","M(#>nrx>Kl","62IX>$","|Uw+","%enx3fhbT","39zf:" -"0pieC","1C","#e","sFmUE","9","0S|ilar" -"`9K6","OBG\Ir&Fx","#","T,","L~n`T^_","<{k,qdw" -"veC-TrqVK1","C_bZj{BYMe","Q$zE","",". ","" -"Qp;R%","}.B>%#","2Z(,8B0Xj[","\v)","_","k?Ntippq?" -"!","6n""-~>","t66>k",")tv9){i(i9"," f","\AH6oG{" -"5|8","`",":&f9","GeM{R92""e",";wU-","!}" -"=HP7BHD","Zp","oM3K{B&4tz","FhX4.kPgYz","D==bFB+%G%","|W&>Iqsv/" -"_R>R2c=~S","7G/#","NF'q%te","hJL$NG","TV","vi;" -"n","]:(UzIms","3H}tx","82","H","9O`*E" -"He~%vP""","a#","vFFg((a>p","L_b7_7x7M`","`^ #i_[Y","*ts{T%mu" -"K^J1l","4",":P>rI","}6~_AhaBc","f","Atu" -"z+",".2XW^","","]H%x","|Ue","vqw=l" -"vrc^u6T","/","","{""]K=+%w","q$tn*q'","F[#;ex\" -"OY#\h","","$","jkVo","1(","trR;O$<" -"-""C)p!wW+","NRh.HtfUnh","(ni3@","pA5un|[l?9","z]6{Yn","XSAcP UG" -"TU=5@","?AKY-*T","Xq","-","tLAqYc^uwt","""g'z" -"/`'A{","Z(Q","-vxMG)>h}","]K]*L",";/zZV^ZL9k","""0" -"h","","y^mI=R~(0t","9)m","*0zUM","h""" -"","CDyvOC&@Zw","qZHzId(M","$[Vl 6","'h\}Fx5y","B" -"X9AI~>Y","","!:","8aFO*923","m,p","g[" -"}q","","bW0A}a","","(t1q?~+"," h^j!X}VW" -"8!Q1.~ s","Py","c&Lv&\e*","ms_d2-bi3A",")#HGbA-?","" -"9C+gr#uS ","g","G![<","NMCy","D","'9PHH?" -"#.VPb","7=2B37e?4>","nPT7`","llpW","9Aj9Ooe","sJ-nNB" -"b2=S@IxIkm","+BA%Zs","W4%I55M{8'","\'D4,o>F ","=midD","9(J<" -"#bHT49QG?","","ds","BFLy\W+/x#","n","M" -"w_&Vo,","dg3'jV","4I}Y1:k;43","","Y,9FX/8j",">8+t#" -"BXQ6-pUq/?","VY","3MoQp5?","D4\'","|tX2S{\wg%",":A5kWJ8z" -"l","=Wj)t?(H","jw&L6?","(","fUlr6""9]","y'Z2,We-u-" -"U_bx*y7p,",":$]Qs9Q}fH","j|39y{>M.n","AMN6]","^","" -"){uDx:v","T","]","uxCJ","][m4ys*1;","UQ[@" -"^Vp}u}","v>ewvCQ","^mv`P@O","_Q)(I]","]w'e`","?YnBb?a" -"","Hr""x`99Q3c","9'{""WkY\EA","nSh/aN","J1z1,]","4@u" -"_","&","r&","D/rAv(","hM","u0" -"(ra?E","H4bU$8O","9q.w0[T;r{","\R","","XW!8o*k" -"]","}jHz","M-8.SSwe","i_T8m{^","oc&+^zX-@","`4"">U|I%Id" -"D3oIaNg","OV|WXNOJi","VXM1guw","''%}8oT","Q;K@c}HA","E|B1" -"%F[?","","","fOz2","`WQz+x","" -"bYi;G""';i","N=1MX}C>","qxIF{T","+!XJpV'UI","+","e|dR(*E" -"M","""zkip8g","","(OwBj?z#","^Mtv","X" -"x","XFs/K{?6","4Dw&rj|,k9","","G","yZL7" -"","","4nHhv","}++","","OW-mE2" -"q[L^hs'uT=","SR:tN'","Efc\cz","","","" -"yk8ona`{","bUiD1`n2F","B,W[GK6I","x""t9lqZn:F","Sgr~>S-p""","G~@L;" -"ap/""*WB?A]","Y","V(+C1y)","yZS}wh","nRc)","=B?*" -"0w)u2h5","g","9","","@q]uL'","Ifkh" -"ny&#vmzAXQ","0-]2i","oM","oG3I0","n}y","V[Uk" -"B","1(^AJ","d_'","_","s","" -"","6","MZ^b opH[","K}=q","?jzkO=%","@r1_kqb&" -"b7EZF","6SA","qP6]J@(J","P,ti","(Ur"," N_Bv\" -"EZ","g17W","N","#>x'","""\Mld1","FR[zD?W" -">2g.","u","Jo,|#","nd9?u","","" -",9",">Yk/*8CZ","2~T[","NZUF","M$$VVMt","*:U+C" -"XJ","T","Wjk'nBQI26","p","G.""L3>sZ","." -"]3TOkQ","4Sa%..3:[",".fW27ORchA","",";:W~`","1U9W#]W" -"uL&P","Q[7AJg[,%","^/Nd%$u","3vReU;YD","KQK6{-l2^","#i)-H!/n7" -"qrCR/-85?G","g#t="")r2)","","6a1","D$RB%R5\C","?ldH7" -"TE_jpj","sQ\\9:","""I3","\-0Y+","Q\p^","'Rd9wwIk" -"=H~=fV> *G","Et","gf!?`?-=y","tH.m<9^PD4","oB","8>h{1" -"KQ6","","_V >3J6xnk","!^@<9","J{j^","S.S9wm%?#" -"=OD:u","""B^th^`Y&","","^pC_7zY","3zI","^{1j=hG)\C" -"PyD*cT|aeq","0""Ql~","Nt-td@e","n`VXB","s)N[P[dGz","$fvP{" -"~YfBP+D(A","","#]})*A_","kZ""'",",NbG6z0N6","T%+P" -"BbC,h1","&9V","1)","X&tCA","UOL]k""","/0mU" -"U7%=[,M{tf","9OWO*d v","s_?=Q2","","N9fBp","g!N8!Rsoj%" -"+j$","`cm9N","\5.Dl","XFLRQfT.xU","x>","{*)" -"I{N!9","","Ad",".S9Ve!s*e","?pceUt/","tm\6AJ|~" -"R;A:[&>H+,","yzpYi","BZ0U}n!","v-EH","9""e","`\Rt" -"*1V9w",".""C","lm)%C&/|L","yo#tqP+8","LM","" -"","&*Y`","}v&","GeGiWR""z;A","f.","Vy,`u" -"@`fx","]\AP\zF=<(",":Oo%c;gvx","&.","FGkz"".",",f&MXV" -"$5","~5_`2","QKN|%fa7,","","wH","" -"","","+~Q""5t)S.",",g-D ","{",",as+};" -"Es.rh~;.^f","IW]!\Y$~b[","6=x","L1H)]O","aiF#}b","S`_DWAb:U" -"P `D.}l","0","J ","_UR ,","|E-Q3;:s","M\{g|dMjxy" -"","Z|7"," -GH,;0;A","~5'","*KHU{CE5~","AJ.[&1" -"ij*>L#qvt","Ma+5;Lh","","WV$43fpF}t","Ur4H=H","&t" -"3","+""}29D3-","T?XG","r_r*f\:","qOJa{","gm" -"_0M+xc","cp}[","1" -"i","eqCYG","","?","+18E|8W",")W2+R%" -"","6'WT=O[^;/","eF","G(v*xst","pPxN","KCVs3p&saz" -"","MEon","TUgSEKQl","],+-U","6qa^lp!q4x","H;#0{#ujV`" -"lW-","2rhQT","A","qY'8","^","#=}G\6rqI5" -"\sWh","dS","38 H#W","J|UT~" -"O89kTE-","&""E%){","/","KlEuc","eh S_V{jjB","" -"{W.\gK0a","V+u^2$_","@a?","|}","v@7",")~Do,`pi" -"7j'","q15qc1v","\uu","Xc,[#y2C","}FS/|x$","Q+1m.o>7" -"","RCZv]Pr#8","e/nf2"".wy","REeXl%6]","\e<1``YL+","%,/o" -"|UomE~i.","^a","H","GX:t!@WE","QhM>",";" -"=2","9KGu2v},Y","w","$E?","","" -"J/{=tmV%C","#,1-g","}Mx!>b(","JA33G","x\/h!""V","O!6Nzg" -"",">QH0d(a@AK","|=ZIX,*cd","K;[{f.fBBK","^;&p","q5;fYR" -"1k=k","'n'Q50","","","E[AZ:1m?z","|e" -"'L-NSp","~T\@!ELw#)","ad!","Y?$Y","{tcP80","" -"J&F)'""=>*","*~F]YW","q:?G.","","}RX8B""","","DuLj x'~N","","","","E[&66'|" -"2mU*]","9}E,R|P","","pT}TL?ISEt","Ak","? t" -"djk","","IC<<% ","$w!v,SO$","UY9fL|p","F>rAp;v" -"[ >","wl'd{hw",",(]","rmX","j5nl~[t=Np","6q z4:/Q;C" -"6",">XIn-fFF^K","]F{``P","",".,","\e@" -"9n!X","I}","kg|Gj9td","@@(5","~Jf","F^(>;" -"aHR7","Ix7*BleyZ:","M$@]""G'","y1n>7","","\.YP{>" -"ps5Aog_","}","J0$C.M+9yF","z.I96","y*UB","" -"jERgb","","","7b?","","`*v|V-r" -"8t]","4YOUNjYp",":J+/@rP&","","n:xFp","EOjCoPLtS" -"$( ","d9t>{#mFp*","k","{ILy]","[O@=","8Rjf`" -"F","NDNR",".","`CC","","eD" -"(~z}ka&C%","E","wIy","+eT|)0","LtY)W",",sz""w2L" -"r","j AD","WDs""*U~<","h","..s>X]k U","0" -"gO","Hxq""ny","","(%$","c-PS","f7.|XZ:" -"~pYj&)","(bmAm","","Q}BN*)",">E>N@v","9*" -"Ecbpng/","/V:","E/","HLD!''$6="," T/AMh>7","G/=>m86N%" -")gU3*!T<=f","Ug'MUU4","X;""C","lK@","x^~m","IAY" -"G3tzi;?-","-l","-tw","6CAIQKv " -"YjDe","EP*","Rg@VYU|","&","e1=`iJux0*","h" -"W","nQG3wv","","W=","iTh^9 ""#","PJ!\1-/fhl" -"_dimgIOPz","","ruAH^u","5|<>Rt{L","kk","" -"6d"," Xd$r\","_vc;"," A[","","F23Q^Gb`ea" -"","W","_,~G=|7SGB","aUHw","$#,|F","MR[5\4" -"MAnL`","esO8B/r}U","zki+%('aT","K2=","9(E&eG)YV","L9-$#Vslx" -"D","$(","NniaK""E3/l_T","(","EyM;p%T=c","xI" -"*V1`@2oxN","h;X{","YeyVi,",",","T","vG" -"m=`Pl","uj""L`MbeE","KI","netv!9ZB8%","X5+","6\O%9l3250" -"sZMn[@urg?",":TND'","5IC","LYrYg","dn","H""Rod","""a#|","" -"$p,M9((3<","H?16",",F","Uou\`i{/'","7SBk+@","v YR" -"sKEW]|z,","`4B","m>","hO^le-Sp|","!Rxc>f~`","V" -"MRy^niI#^W","","","vA=]Knpq5","7Ax[}",",R" -">^k!YZ+z.","N+-eI","WE~""|-1zjy","/`K/17","{:=""l","" -"ZaF?4uSE\4",":M","rHx&8","&MzX`N"," >aG^L\@t*","|'r@,0" -"#m","""X?B_","X|,%%?","@`z","Qa%PUf","27A" -"0sNK_W$","[{WW#i","","bU"," e0fa\==p","C0$A`@NR5" -"OQGkN[","[gV;73[","","&0.c"," 41z","%)I7m""(kOP" -"sW?0VX*tl","$@t\zH",", 6AxCK-$","]9h_b >","-?ie"," A$sk}c" -"0(iHD","zmv%","-&","oZ][s9","cu3!`P4x4","n, " -"#0EP.mtx","S@]s;","6Nj","b","Q8H|;","" -"-/;\*#","}>","XwPhAK1[6a","0Yn","23","Qx!|lS6" -"2O&T3DWG","#PKZrJG","D W","aQHEw/4/"," b","klBBNEA","8k6",")L<^V","!b;|akP" -"ZPF9Vy-:","SQ%)4Mp","Srdq2/n._" -"<,=((V!","te","V|P$[$/","JgIDE","iXu>=-","1CVf1mrA" -"Dj98#RG _[","n@?HK6dz""@","rHLT","Lk","{[=xY","","D(C,uB","` S{[ti4" -"]0dR&wYZ","utp","y6","","+,p;TJP+1","[!{" -"`}E}!}Q","ej9(5OQe","=T'j:( $v",")sH","9ueJeL","" -"8n8eTE3","#4","\rlM~\","?f=>7g","","\" -"mD`$&]N|f#","k","_xpJ|",">w'u2","rodIU?h","Vp E#M" -"EwK","T","L;v","dUgvgm7","pPYA7krakU",".>}D" -",Q","D5u7~$z,","x+@K;","Sj-!8""U","","'!0*h5QX1." -"}k",".P","td?@Q._","VM""",""""," fpv-" -"Wwh3","m-AS@`,","TxS",")l1","'SSW0cdB@ZZ9","b{UsQjg2$","5\E-=Zf","","FNj8X","#d" -"l-",".'bEHrm","a0td","4=b\O_","~ArL[","V^""Eh#h" -"vn~","'""(PH","","[NuNt3y+","18uv:D","w\=pX""" -"$~,^vwlN&E","t","","TY8%j+L32","lt)NY} ","A/xc'vYrz" -"Y","qRdO","=-IsfX;I","E5+n","b/e-\.DtsC7" -" wj","","scL$","&7+)CQ:","","qNn" -"6ki?`(K:T","S';Ni","P4","B%j,.kDiI","l","fl4&v^" -"dMdiZ4=\","K1'ZZnY`","WsH0","","{#S\`Jb>","$" -"kV((5#","xV*Dc>","TeZ}EC","9!e","i)\X","G" -"YfCZ[CA?","71jR~$h'X","K[+-,C","SvfR","Iaj2","" -"UM>W","B'!""<","eF}/F","qCE0'","R/w6M","]`SK~N]`7b" -"o(:F}o","y+&W$","w ,&y","@=.e=qC","*3/*%(=R","Rj}C748o|!" -"#8ij|OlO","Qb","ldMsGXz\c","{PwuC9ORE","FW||r^|","g" -"[A(","%!3D3qN","eZO","n4Fw.:","G~wdG","" -"<","J}@>Tn","%}b-<","#","X']" -"<(&\\1G","\P.R$.~(","1G.","srP","2o_T-.-","" -":H.5","","","CxnO)2L","VX x0","u~f\*" -"~!f:so",".k[#1t*K","_H.>*^ !V","p)>#h",".0i","2=??m""" -"XZ|","8|dQzJY?",")4bHG?w%","","~TMQv!kTB`","1%$Y@W\%" -"tt$oh=3n","v}","s!]rr[<-3","T38VpO5^","]Pj(%{o'","Dyw@#Wwj" -"]>uE[a","9iF{9AEo","^ogx5","mt","V>","Po+PMC:G" -"HN`{X.","J",",_","d| ",".~","+=X" -"zUW@7","sxVm","1|="," %","g?Hjdb-nQ","f-P" -"=m","]t",",CSO)&1","ACm","e","]{" -"{4%j);c"," ?_7","R","&^g","c{(","-Vju3qlM@," -"zx","dE46kz/","~V2L`[~cH","","iG\",":" -"","J!2Gq","q\0Psz(:?m","H3=kH]=K","A"," " -"FT^g5>","M=Z%YJ!{~","v+","%LNy+#9","4|(S","1/HRtxuU|" -"{o|2oR9k","WAs=}Y","aqWf","C$s","b","$""tQz3sw`r" -"wZ","G$k>'{?q$","","f._!*","D0`S5*Kt","" -"","x#;Sir^TPo","'20#","A @V","FnJxC8@k([","=@h_> 3p" -"74,kgf","","YL~|)K5","PJ11_y",".","Yrv" -"wz:2cC_","MI4Ef","#1Uo","57cax(","73","8" -"8]tv~tau!","~uxDQ","$Duy","ej=Zs/","3KK+","5M" -"I{lsbr","%a>MvkAn|w","L*r!]","kSBkz","\)i=","L" -"5","LUq|_]#Q","8[;V","U","x]Zy\OK","[p'%yX)^q" -"-HuYPT.J[l","1C`smvf","X4PYL","n;N/N","d+l","T_+" -"ZW}ot]","\1^&/_t""" -" ","/Bwvj","<[=8VqI",">+P","Klz/u1ps+~","-xl,V" -"p","X7jx=LGW+",",","_Ua4CYT-","yW7m","w)uU$I{[4R" -"z","Aa","FXX`)%E","","a","b" -"=Kr#bxmmq*","V/w:","","5o oQ$'1","D|]6[","gb<" -"=IRc9A!=w[","0lRRcu6jyZ","#""","","","r}" -"","&K*DQvP`","","]@@1Y","zNvqD{B-.;","rRt1yu6p;'" -"m","jFJ`$Jg","Dci_7]{UF","@; kbb)" -"= 6(gd]zK","%:""rOA","]UNvls):^","bw?<7r W!J" -"tu(R1h0v-","/lc$V;:n]"," uDm$<","s}","*W;+2 [","hT6d.LvZa" -"","~-_2g?","{","m0o","~8","=msEu" -"1< <$","Lg$}N","aj","9:.=mK""_+K","YDJc5csE","V" -"l#","g^p@fb/","/ZMbc0k","xdHXp","G","wAx^t!y#f" -"M)","6x","DfqF","sX(WBL]ch","\W#=iq",">RN'%oxs&," -"=","Bp'e!","^&.Epk","4'n2X9","awF?kV","q|XH.1Wr" -"DzPOe.9N","}wkuS5E","yHGn_<@",">r","/j[","M%" -"","<.t-N+f|>","oU3{}","z","W","7nR4^" -"tlq","r8w","/Vz(6uv","jEkLh","0fM","rkGk9lclrc" -"$u)FlIAqI","]O@c","lSNG.kl4:","U@b-=j2","~" -"0b\,v'Q","z3J-E:h","=9]%E","RWKPcqV","+",",6P[qFFZ$K" -"u3x=dPE","pE"":!k","l`Em3#bX","Tbms}'gTT&",";Vu5b-H","a^UG-t" -"Qd{84Ax","(`Tj;","7","slGG6<>xe","-","O" -"X|M}","LH","7x","",">[ZI2oW","4Uvwa[x2" -"l",""">>'9""4z",">C\Rzdf","594[^oC","W",">" -"*4D4W","Nt~","(_SW","k2Z!F#C>_?","VLDE['9z@}","].G""tu" -"WqZ!&o","j+9{QIU","cKCEHb>3|","d:M\|dLl)B","h{X:g","[WQ{+wf}" -"","+","~Wu$!Ub","N","" -"Q87","v",";x4m","J h,W","kNW","oLlQ" -"tn","#kXw","dM[ ~j;","`*^Ixk","S>LD","0bgS,p\^`" -"bc0VMYJ","a)2A","oSZ2.O","_*Aua{","&i#P5um","u~ F\3?W63" -".hQfq@[","nhkC.q","""dN","op","(""U-MI|F","~!~t-5n{=S" -"y%?","bwxm-=#","T5","`ShN4 pv`e","u","vxQ/]$7^m","#","avu7D$","","|u" -"@Czp'","?""&]s7","q","n!`","vvJV}i0L3m","4!T!" -":IcC","7=;>yv#I","F4TS9","[l","RNj93iz","+np1D" -"3","","]XMt]l","`j=}D","SX:9w8","6t" -"Rx=TAx={8F]","cI","c@H","" -"l@wVdWV=~s","8","&7WIizx","z&n:yA","3hwiuXI*","/S0|=:4GG" -"Zf,5RiHf\;","neFp?",",","B","-qK!6s]","6""wTc*N?" -"|f9","","I`N" -"m","","","WS^3x","gl""""|59","O?a" -"()","\DgIL","7","gwPU|knaA;","H.z3x","RYfn","KQM","p{lpx8","ucbs3""sDU!" -"[","UG`_X","\H}tv6""%","Esp9W_j[k","fD(7\7{b<","m" -"$&XQNcSQ","'MT!bV","DeT7Z&f:V.","/Fap`","Lh{7,?;","M0KIoc:;" -"K6","*?1Q}","",";hf$sE","@V@=JVWo","Opk" -"nVIN","y"," /X","xMWy?80]2G","w","|" -"gf[","|swiB$G%","T" -"l04j)%","&","#""","lA+JV3:e>","SMV: 6","X +pBY" -"|+%ar","Rh;","{","6kzX*",":^*y)4}z","D8m7!-Ef""m" -"PNC","R6A","ZV","87-Z","LKi/wY","rdDn3_KXs" -"do&`C]foe","]0N-jN","trQ'@<]4M","d'2","=a.fbg;S" -"","","p","9sg'uSs","zUAOCiW+5E","95H" -"\bciML","","`i.-#!A0X","|BF@`+jU:U","","+9r/$S ~$N" -"ek+s?bWt","'}","}IEOS.F","","#9WN^rT","" -"9'mAm","G9Y ","XY>t(i6@s|","mXQ4g'`l?M","","yVcse2" -"","","Q`Jn.? Xe","a~53Ff","q$","Z'i" -"","N.BV2m"," 1m*Be#+","w*Cz/%I""'I","+C^Pgd","%m$nS" -"",";","F=[.EpKv","6t`,","@","" -"A","","J@K(","7ap'$mI","{$OTs/Fs0!","g.)Dd" -"6J_","FeHvZ8g","$ZI#Orb","Qp|iRxGDo3","ZVu","G" -"uv)l}""S:","W3kwn3","","3|","WD'3|TVhew","35)v0+cEz" -"+]vFKwQ}J","o\b[(Adk2%","1 @!ug'","n|:zBN(?x","n?u-","r<^IP,2" -"b* hj!pp]7","&Ck","j/O%w","4@3PW#","/*2","Y" -"PhueOrt","ce""[eY","E","","aSlch=b" -"_PRLP:","e~-51",":rM9,OcE5 ","[q23'","09j#","x+^&!kIqSt" -"g! tMLhqk","'fJ[Y9d","xQZ;<","(o;,t(0",".%'$jL","M]h*UY3\d" -";bkMy)","","sAm2",")gFe","u5=bn9a/","kB[_.5n" -"%iZ","L$","cx4gQr","""H'$lNUhY?","HR""""9K YR","q({8?aJ" -"73c"" oBx;;","G~D:vh","WMyJUiqqv","Ld^5K}","W[]58RF","^)A" -"","","`F","y*q.1eV#`","p(","}87" -"B}","qVAxg*","]h@Mxx","#e>4","[h/n>","JQi|mXd3KK" -"]K9"")L|9Kp","f$c_.R","fR""6zAyR","%3qX4","hC'vL","@5tzcN" -"","8u\'FZA5d","WZ'=3","g","+e[;","" -"4Ys!z#9PL",")K+rNIgG""@","e-j5","2qrlai_K","~JP@","'Ig" -"F#_WY?&","4x~X!<~`3'","o,1UP}SaQ","n`y","z8-nh/]J","~tQx~3v:&," -"~~&j=UzU","V'^AT","R#cw0","wra","8@Z","84?l" -"f4xf","5","&10J9*.Z,","u","9$+koqH'3w","*-" -"5M7xn","/j","","<}0%-]","+","rg" -"","8LOd","3T0J_X,$","Jmbh?'F","|m/","eidJC/" -"$H!l{","nlw5.=,",",d.@7^","#M*DR@Uv K" -"}E}*&u>!>l","]>","^Y4p","CTA89eM,D","*6QO","TkZO5Wlu" -"js'r""",":h(","dxt","LD`?`qv""s%","OJ4i","L^qos:}MS@" -"=$s+[bM",")r|7#Va{k7","J","]","7e:{V@%9 ","QaAbt&LL" -"gr}-qu","r$a<",".","","~pv#70T`^","*mf-" -"y)""Ggkm\@t",",2_A","","@d_3Nh","LE ","&_DA" -"MOD~CS:0","8-","@CtqXf2","Q","","WJ>O" -">9+[+m","{ytHorhJ","egj) 6h'tT","|('",",qzG/","=t-" -"X&P","Mx'D_",""," 1Wy4Et","VG6\?\","zux55" -""";gWk","","2","iL,zy",",&","h" -"a","16~*""+58j","c1LEVYi>!","","","=" -":;Nrfu/Vgq","0?A","sQVBo ","Kx","bP8tj*1Ikp","g" -"-W","d","BL7R+\G","","rs","iL;'yJ;" -"$S","i8)E09","V+<*","b","%s+","`Z$P" -"4$kZ|08rBa","P;2W","t3yh73pa","","W/","" -"Gukr5","PPa7|Pi","FJ","","-e>8n,_","iwUlE" -"",",ypj","S;ac","-0j","Jte-2n'd" -"45S@Ts","3p","Cz","jEpI7}znj","*[#Y$","7z)D_+A<" -"f:]*s:[LS)","Z*W24[",";j]G","1_?W$+o_xe","0h(_[","Np?'>","" -"|/m0<_`","h64#f{Y=Sx","lE7=J","Ps#i3Fc$","t\\'\","xuM:" -"fP",",uH*mK<","st25Pb,F\","WoMmepO2>","?+>F&hu0","p" -"{","Q","]4","R3YnS","i(l","" -"+o7&p>yzn","rg","=@b","","W:y*$ahX","0|*Wk-Kl.8" -"""Wc.(/","*Q]!Zy","G+inbj-:p","*Ix&s~sdRp","<)","_8Xk[,r\#)" -"F>P","M_WtMOwU","7S\>`|xB","H Mt&v","""~kk(","OJIxt-" -"6q=b7","I_@4chB(fD","cGr>h","'D ","Ej%PyZ7CtN","X2*/h0MD`D" -">+_[65C#c$","%TB9","ul>z6","?51i","GZb/U","9/]F8o<]]" -"Qf","(R""8","","k\j","%1.Yr$s","Jdf[" -"E","7Q","HpXW","""g","1B","" -"w*$","GXtzoTd","wk&C:zzzL","~K<","/3V","tWyp""5x" -"sFh,3Q$","I","Eq8Ed@)J","O:)uVYJB","9%b23(@{v","|S'g" -"gVbR","Nu}l","Iwx>~","$E(ChS`l","|2J/\#%","5d81" -"","Lw","3o].b0 ","lR=Mr","g3C^","1^^l|&V8" -"9~~fT*","s0"";sZd","W0Z=","%(d`mVK","","hIke-" -"gzx\bI'v}f","S}>L]27","6","dRAY7","","VW#46kzhC" -"IeDL#aL","]?L&>MG:x","1L`{;`r","","hd1Gm}'U","" -"{","``st1&","it0$^'*","V^","\@7a","EXA''" -"D","z|+(^!mY","b","Uv0`m","=5p@IlyjiA","DT'O","\H>|fj" -"?hp6IP",":F?m/ka<1#","6dE","S","M|u9G{*H$T",".a%.6 LPHS" -"&.-zF%@z#]","e4B=`6[!QC",">","en","jx.","uXaNdy{" -"""#@","!JE","wuI.!Gz%","","Q_PfsezC$`","Yq^T5Upwu_" -"@c+3{I7e",">qx","A@pPoF","","U.wYH6","!" -"W>&&Z`O+]^","E`0Vw\","{2*7K>j","x17:oOWA.","EQ&","+u3$U1l" -"qcmz",":v9I","E","3CgNM!Zyuu","J3CnPxlZ1\","3zAoCIzOP~" -"Q.t ","J&9n^+6%","&!:2Reo9","C","n )D=C)7g","F?)`HLn" -"2Cr3G&.?","W7K ""gLu*","/","0%G%bIpe","jV","" -"A-8E","-W;vrHa","%",";","uOHC^6!D","5}+Bo]a!xl" -"<;""","j9v,X?ggD&","Wi^P""M=j:;x|xG","E)h(gfy3:(","V]","K: e9uf=","}#'>Bna","" -"#","r%1]4-/ d","Vo","fjt$4{.","","*Z" -"AI52g","|PLgl\'6""","jIpD","p/GZ~^gb","wHB,vy","\5" -"Es7S_|","!$IlYw""","ShaDcoA67","F5oo\?","c^cVR","'0Mg<4" -"ge@PP","mYHd[",")gT=pKN","J\vE+.D","v?","%Gigv5:N" -"","Ky","r ","i","R'e","v,LJ2|" -"","f,[_@C:lN[","","Q5","*84es9L1@X","sK`" -"&","0(&^\V","Bf\'o8Tde%","r","Zz)L=3YA2","s?_ds=," -"LBq?[","A","?}9Qv",">!BI","z+!}Ha4A","Spg1[B" -",@T ;M","","?3+","nQMla^H","{","sp|" -"Vl6SPJ","SqB6mN&""1","","qaJ'bl","","" -"yv@usc","","?zAaKO5","g(:(FQ)VT","","Q" -"Pr+=+","h","","Rr)C][" -"%c%o,","X,Z>C_%""3","Kj6hh>C?)H","6n:i+G_^e8","","aBEH" -"",".e]Kn'","1ZrSG}#rZB","L69","SR{(","C&ju>,}K\x" -"I-2x""Rrc&"," b&SLKl","\y/+Y.e","3X3","[g","$7j1;du@" -"5_2""FEMGJ"," lS`fl1","4bEh'v^&9F","hzw&u`2%n","#","v|8VT" -"v_E5DH","&!pR4D$lL[","[;:n7j","",".as$S)yF3B","jL~" -"7+#U9evL.",">M{","zgYU(K","FM;M","Z{?,6E9&",">^6hf`P" -"GT/","9dGdsq",":/s+xB>","E@","`","wd" -"C/~nk","_b","F+wu\HU","=cSkL/wU-","^zE","o`2,BG8","OPV+{x;Q","6)<{bwo" -"0","#","K",":,fb){bD","N'p""0RP&=Q","IOc.+N" -"$KWlF+rHT","h[[q91~Q","","dbI<","","P_XIMZ""4L;","&k4[&rC","/nb3" -"D}#QOPR","F=","fZj>^)]\9T","HV!hK","","]Fn" -"@7`&","3/]|@A#aLk","HhR>JY4-","r/8yT3","h?Et1m","cTH7k""_5" -"M$i.O'f","g@M","{Zzd{g?","Gth","","w+~(Zp" -"hbLQD$7\-","B}h0]j +v",":.:#C",";>/7","m98u!M","i*h!V`4`Z0" -"d%^","1/","Yv""Z;-","","{","QCJyMZ^X?" -"X","iz`3{tm*cE","qF",".[","HcG46","." -"991I;pz#'{","","&R%>c","BZ-|tO","tmt?","p" -"Y9o/43","","6GCu}","iwp~f0","=^y+","qK9}a" -".yq#%CcH","8(cQf","TbxTg?+","Jho/nr!9pX","a","t2z>" -"3m","L?cHNvo81P","s'vc Q&)o","","p","zZ" -"a$","{",".z oVLjsq","7","Hg"," qo" -"2?7","X",">|s>%%A","","{~","BE}|E^yt5C" -"IZ|@_)%28u",";","V cCIZU)","","#?E>/}","6YK" -".","x^hsN*2hV","c&ot","9F%[ m$c","P.h?LE","9744" -"hG:ey4lW:*","O i","OowDOrq4","-vRlPVi'B",",","4 wqI" -"eG","uj.{b4","","D]-*3P>uw","GFNY","""" -"9""|HX6JQ","D%","* ","^v(E[Lp","=uTx+0","{r(Tp`" -"H*p!#E]","|!u#]""6'n","{,|(I","ObQ0Iwsz","*2_gQ7B7('","G" -"6I[TcL","ai:MvfPt","*eat2L","nv"," k}5","_^{\?b_.s" -"Ohe[,0[3e ","|PKyw%s^","[s]JWg"">?k","92q. ",">r$3=BQ","+%%L1N" -"}Q5L1 ","JA~yY""","55o=;qh8~*","c51/)E3snj","}XVo?R(V","x" -"hiTVAZD]",")]"," 4km[","2","l?/^bH~b","d|'J2" -"","","p@","OAQ$","/3/!Nf","\4-" -"NOef7RR6",":Pv?U'E:$","U","5eWeM","+t2B}","l^N\GsW" -"","q+c%?","mmg!","?l6GoO","tJzl!" -"k%CwZK!6R)","","['","E1h#]~fx,","0s!_so9,X>","'ZDf$" -"A&0TSD/","","nq4rPnfq","+>G","fe5>H44","jL&\c""6" -"-YV\x|YH","","","I`lz|P",";XA","" -"","6rnX#KJZ","^J>.J{","nT5","qE(4y","#u/u!&>JJ?""",".[C5b"," ##f)J","WS9e/g@","+a)" -"Ih2jwR[?","/:a","4y&!w~","XE;;^#8","N$\]0x*","" -"m","XFD","4QZ","Ny,HT|~P","x""","" -"+iL2","rHxM>^\","IB;L~Qh","","/~D$","ie/pC<~5r^" -"Kwv","vRU","","NBTr","ae=_P22-p5","@*Zo'ar" -"1","~6G""+N","B'ImQomu f","d8R","s","frrai?hD1" -"[:_@","~JC->,KA""","ar*'>",",E#%}u","+d\go|99""","E*r*+/:|5" -"n""j]1)bP","k+y0iZd9q0","5L/m3@e","i8"")(\","K~","%" -"D@9","eG","&3y8","","8(w%","me4$yFW" -"Pzx6heCkcx","gW6t{A4|",")Ul)","26","[e[d3I","i27kE;a" -"t_JN,","cS/2@'DO","22.AdL@R?a","+","%5e2OMLu","h(;96sI" -"p&o{{wgA","","","","X3Jc]tZ1","HhS","!{M-MGO<","h|`<","xrk4[~AeO" -"9-nSy","[i","tp-","]1@Dlg","kU","!j\ho" -"Z{ ':6","MU?ysE","[","Ie0?w ","d`","\R" -"N,&$gmPK","$St\V5T","cml>7k","","F}","('50I_" -"-#3&9K\reC",".2'","\F9#>c0>","QvMG","""=O","bkmKhVqr7" -"0",":#3","!K+j rf","q09E =Ea","%#e^}dyD","2,(M*s" -"e!:^8*[Y^","","/kl[(i:'vj","L()=(UDb+<","qDNH","tQ_7lG_" -"6yBv","","#r","L&1P*#","lT`DMe,9s(","q""QBkRSW2" -";RTJ","xn","}xAZH0Bf-","lZCl+s]!j","=Ex=;7I(|r","0ZbhNU,8=a" -"","uW-3ptELpa","W%TCuF*;","/`~@-C5?""","%?Naa;","nyEf;L7y!" -";f;`t*=Y6","gHn","C?F`};","QRZ1","'DJ][gy","L:=+`_1c]" -"(2G","{,B#0B-qz","zeF7","?^+.hwCe","z#Sa)","*mD =k." -"'L>=","+" -"2H!",":x{dqv","+",";SNYqc","2%","G&^\[" -"%iC9^lY>","~:WA/eT",">","RBi]B,\3|","sZ","#Y:%%a^a" -"JRlT7+1","A`gP","Blsw""Ew:;","CP>.6rQ","LO_","Yk1" -"-t=JvO","!]sr","""","01dx=pc","B""L_","OW" -"%","w1!S0","Z;c;","2i@","5:rX4Z(_j","^bJg" -"O","r{Al/PQ)","Vys AP7M","ri+QE",",","M$k" -"ZouZ3u",".eM>-[|{5","amsJ/U{Chc",".","g","nWS[P" -"*k5=","*f","/Q:`5XIKy","45","h2q" -"","B","","_a1V1","jil*(z[?{","clJeSFGmq<" -"VIMR}!$","","\BEc|J8dx","y*w=a>","f0AMfL","oi]" -"e'X'Nn","ok","N","wD[4","","+12E" -"IcrO","E-3+4I8.\","L$","","Y"," lXL(9" -"Fwf^","jPf",":%(ln%jY","","I{m#","VY.$AV`Sw]" -"W,%H2>","a^UvVH","WY","qqaI^F!Vmn","Q%H~jh4HE","d#" -"J4IvLSF","aG9E""","va","cA","le9%)9","Bwy" -"~dT3A","x$$",")o90{V_6RD","6Joh!wqezL",":1mYh","DYbPZJ" -"tB","MM?fQ=,","Gm&T1","7LYo[1c-","X8Fa>Q|","!=:" -"8b|.iQ 1W",":fQqqc","(srw\Of1","hw>twY?~","*=&","A*" -"|a","C'yLi~}C/P","[,q*4","1$B","~RLxmnvB1C","GMyO95J" -"'","S:4wN","JGp","XOgy,)gEK","(-MJ","r]3PF" -"_^{a>`72","r:lb\ZAYct","3KC$n@A","Jvn","dlA=","Wd)9" -"Jq>x~z#x","N#$-`1f","r",":","{y.","o(\" -"KmK`uJ1bG^","bqj","_aBc!gGk","E5''" -"A<>B","","~$?","qR","jY""","9CkRu hn-n" -"5""VZfg8^^G","CoC","W2.([i&\I","Z{*","}?>;2b0","|g-[","|jT:-J6Xq(""/5&H","","<" -"Y7<}Wu[","O{9c","VB\3!3","BA`R6+N","n}W+_a51+)",".Ii_&2&HO&" -"r","/bu{i/J1zZ","WiK","i9gJ;","sw}?_b~kIU","dL" -"Eg","(q=",".:-","y","i0EgI,","&FlD2" -"v6q8DS7Z","gxeT","f","Y","G!K2V4r#M+","%Q+,_0Cr\D" -"$)*2","<^","z,W4NUHmI#",",9","}^WCH","&LVLV$","vOH(n\>J*&","%'F3,l","m^`8""","AJ","3T" -"*","5Dtb_Y7V","P2+$TT","yYX09a6","k","" -"dB""5","WCsv{tz","T","","","-Cvo\" -">pM/","^H","yjbU-Y","OX","F[(~u7*P","sr," -"fY""","0yF}^yKpO","","",".BKyLg","@MPkL0" -"X","mN","8uq-{","f7}R"":oB","Me",":p" -"","sdxSg","$,_i@U4R","YJ)","J","n6=aK" -"1LmLbC3 p","/(/6r","o(?:kOC","Jj&g2","/ne >S$>EL",",FPYM|" -"","C","9[P#$inlUd","HU}","r3x","sYKa" -"kM|SP<{I]N","F""a=e0A=","X@-s","lB%","~ZN-c","|HR" -"","Ip%P'*8GO@","Qio,hHM ~","l5w*""(:K2&","","qw\P6H:" -"2x2l(eJc#T","{I8G8#L","ycDF","Ro`","9Jca","%FNZS" -"^hNiedR}0","O.w","w'Z3$+@<","n4[I#",".'1/RUvxo","ESm!JU" -"W","","Cn","Es&D","1>|qceZS","c" -"GNCOr/n4",")HhO?yRJX","w","/|3(|qM","|}E`f","" -"fl?!XY-Qye","_5Vi","[,d","u3#6","h6","dC)" -"Glvf!+","O:[K8","C&","$p^;<#::sQ","""X!{","" -"UN2N>5","rVo'{8&u=&",";9I`hl6D(","=4AS3F","])U+","orfTuN7u" -"","J@","Y=","=Ql","@5v;9L :u","`>kyY" -"xum7","","D&#,AP","{mBX$gi","V0Ov","Q" -";,IxZ" -"'*RN~A","L?I!4rw|","@'AeCfvj;Q","Pv","Ha","vnV~?:HV" -"tcl|?eN","","",";*>%","f&i","-U-e4<*hR5" -":iPd","hk","i65t(n!>0","{","n(eP5?l+[","Ch5" -"3>[N26no#r","jOoQ\6*30l","V]0Vk#","%>?","7H=f5_d","'4" -"K[","m{Vo@_esn","M{=4U&$","8","vJe$UbU]","""ts" -"f",">wm=}q%3cp","","i`'""","]Y!E!_lU`","Tnv?TV" -"i/E'","lTkgm/uQ","o","X@{#/","3>A1","/(GDFW" -"!j%5D;","-ON","mcs0(khy","A}ADG58vbA","0|Gy,S\+","3aH%" -"sy1zB8W2L6","~0~0fxi%h","xooZs{@M>","CvLa62","I1M2@f)L","C" -"vNl@!l,","M`q}(W","5p!t%H+X<","+G=$,>sG5","","6" -"@jrzq","hB=","","U&n+Ek7P`(","zj","yZm;" -"","0]","fXQm&p$md","|'""v","\E520s" -"?$6,>","nn1<6OQ","d?5^QPx","@|lQ`5m","PK^(bnW^","PU-'" -"!;""F-","}17PjCBK","VXpm""G-",">9","S,Y.+u,","];=)Tg" -"HUvnz5f","-","","aQ","Vw+>","+mZh" -"H+29W""","W","RF$9Bf$z","&","HhOu,/" -"-L]R_!1^lR","c=:t_","M{%Xk7{f","","","t.hSS`*a" -"W7BF%SamV&","\g42","9on4&:",";6?e{=m* ","r","NChdJ\&P&2" -"c2MLf_","Unr","r>RMGg;*","'wkg0","a]O={K.~5Q","D^I~","`" -"Uy!mkR!}2","Q","gX}\-I[yk5","iZ'ri","{`+KNPP","~[*:J" -"q","+7[2{2*;\R","uzHg\","4_/Ka6_","Yu$","(?n","*]1B","G7=vw`^" -"D;uQX_yoA","#2FwW`To)K","~3KaS[","KH67Rk","{iYo1ge","73/c&5tLxr" -"$oth##sNO","@q",">B5v","`X ","f6","Zk+" -"G:","R,$","8","_\s3*","$/","/d/;|" -"C","o#@;`;g","i)7BJ","Yjh7a","<9ul@i","^[fMq","EF}E(:oD" -"&y","N.u!H","+RN","u","_7\G","pcA8Yl^eZ" -"","P","3P>!","o","~5OWah","|!","Od:pvdD","-U7z7\" -"SbDX8ZJW","S>h3:C_.`","')SLc6!>v"," cg$lg)ob<","","DNwfnm$6-)" -"","Z/&la,}(W","]","DEZHzFk}=}","","&K\" -"+T","=|0","{","jw[dHnc$_","7goKy%X'","@W" -"k H2]6","2""Nc8 SM","","","$X( ","i1""Y," -"EA>g2CW,","1C","}kcAGI<+$","r","*","" -";2M]cbb1","eMs|gMag~"," ,J>PEP","","","QjR5" -"6i\s+","YXbo>+gP^(","=S(]EJFOg","-Qi","RP5{JgjnC"," 5D" -"uc","t-Nn:TOk9l","Got\.Y,Zv",";S$x,u=Wq'","~`w()Q&","x2v" -"a","^ZX<%nFNw8","IY1DK8","{","@hK","u6]5+/>`/9","'" -"V`\RI{8","po","RV4","~gMG7Ez3u-","!8e?gU\ZQ","_8KYZTm;$" -"","FX}hk6{mJ","K=xs","o","OzZau","A5,QMsO" -"/~","B1","&@0k^","d^Hm!%;ORT","^;43gD,_7=","]" -"{&t~V<,t","oOF*0gc3T%",".>","g_{]?","M!@N4hVA\i","p(3=MW(" -"8C""w{[",")$x\Jv)Ao7","cf/F?-ld","Q%>X:","@","SuF:<42" -"Y%x\q","$","/Ag{ H","#vZv|4","+","HNO5Z y$'" -"P-L,JzC\O","-}i'jpM0D","","[z","([","JXP/ {UoF" -"@vF_+Zq2","iaGO$Hz","}d)","","6ydu&","b" -"m.ze\;4_","][OZ","\VF0$e","ME>W4","","7;" -"a~X>i>;E ","=..TSN5IY","9`","o2=GZbZTQ","i0-","_b|QsOSu" -"HjInmRx&","!7LgEXKQ[",".8^bq~pRA","m)t*a}","","rC:{" -"","5+NAC_*h","","X6","z6D]]!","3o6ThM7N" -"CA+PH|CQE","#D","eH`oD0fS|8","","I^6u","wd_n""" -"1X1d<","]/^sZB]=w",",","Wz","fHSf1.twFh","afkl2/" -"]\C3&""6"," ","]","PF","H""@B","9" -"r00KOp|","-","R16F","","X~IGj F3","$c" -"bi>","d7Hv","[:.","TI$##k(mR}",".B|YdVR4;*","JM[=]J" -"Ex z+Eh7","Ja","Uw02 -","]","`]w0bi","" -"qb!1","Ft?B=#","-M","0KoI5[sQ,""","1S$T@%sz)g" -"={","","","e6;|","E""a02(pe","","1v3D}'J" -"/b0","s=Eb?5$1","Jr","t')TV+","B{/G","uQVkmvl" -"Rj","fwyByySt;","@I,S","f_i/\GFb","<3Is_%Y4","#45{aKn-" -"}","LD?8I[31}M","U,anzV&Ir","e43","T~sa:","!gIa=T{5* " -"FZza7*Vp&)","Lr","cPQo.od%80","p8","R","xI`Pj" -"gv","/@z0?z-'IS","1bYF,","v4N]0-uaV:","_R&4","t7'AUt#E" -"q""T","","V=!SO","~YGK)WWC","sm.(.Na","SBH!@5" -"wC2b=g","['mrq;+cO","xV{h","","akQtP5k","T}:cr" -":/J","!",":/Hq""9","","6=Z_kL","M>X3F?" -"'^n/U","%&uJd#SK","6G`xh8MFC","","M%+w|M{~","d>8T" -"Uk","Y#y)})5X","a_","ZMJ(.l-]","/K*","M.G!:","7}}%@I",">_0][,","DT","#\&" -"-)G.Qy","UI,","3b]o0h*<[","q9\","yYr+","-Q|VW" -"WV","62ldDw:","Tg>","|","Ijn4B","rH6EgcQ" -"5\2T/9<","U6wKfM@8","M:@wF-","./|`ZF^^'I","""57yS{3G","B" -"n_jV","?i}C\*>E9 ","JS:;yR" -"M","E@5;_","U","96QR6#!9!-","uCV1e(Y6No","+VQ8)^""" -"E',5Ez","qzbShb",",;0d~M","vv,fb:E",".tAz98n",">S" -"","-BiHqx","6$J.","((v","pih.*F","}IRC""" -"Mr~v","xU`","","k$XN*J","^\w","w." -"","j>J~kiIo$L","gm","NIB","1&UB:9aw-s","F.xAr1nE" -"rz5'y'","4/>AH","~a","g*GAfy","9XLfL!Ern","vW6SQ#lMMW" -"|uu`V1*","In'F7yn","lkaqoN2:Q0","","`","/U""Y7mB9+e" -"R5","x?Z,FT~*H","K~I","80;bt9:5$H","W",")." -">.Lpxd","rWr4`J*&","n,\By$-8+",":J",">\GI","h/zpf%-" -"hwg<1\/S/","d4<","d{D*","M","77fki~8Bi","" -"IY8I]=8p+Z","Ub=.'","$^1a]]R","LI6!","h","'T/&hi" -"qjF?cG};:","\38>Hc","e^+-`jJ","}","K,VXVZ~B1N","oES8" -"#","","P6\MW|~V3\","BokP#","E*'Ej3GO*8","rJ" -"W}su>","rcQcJt{1}N","c=0z@m(y)F","moR^X","0\XD","Rr8$,;6P)" -"::)V6Q|c|B","{v","tU","tH.f4|%cAO",",dA)w!uL*","-fY","_*[~W7T","f" -"QL","",")>X/Y","wgXEuL\","~T","![8uQ" -"","","M$s{#<'~","|d][","LJk","Osf" -"!oH","uS","Z7","QSz/","yXF{X@%","~" -" {","B1N{6swX?","T'}@2q4y","I","k","G!KgP;Y" -"W8D-","L+Fr","~[C,U8K_f`","+wO2","?Yy7","" -"r#,\%Co4@","#[Y0jL?",",D","o^"," !(paQF","" -"","3:d@).{","bmURnX0'i_","-p/*(@"," ","Vo" -"","P6Xv/7 ","&","","ohO38@""","=J):z" -"RX","","!7M?NQ","Bzi"," s;2","Dt~Kf%}" -"","OQV:t","LN=RBNVy H","NOh","3","" -"`uO","\-t)wk/hPR","~uQ+{cEI","rS_+&$a","kMJ7fC!","=G","{kp)Aw","joB","d^/e0YSrl" -"IMv$O","Atc5kK","0nTfQWz","KG41X^" -"yxWd$20qt(","gVgwi","?f","Pa~""","=" -"P&w!JO6","zx`D"," a1B&","h:_(Ie;" -"jk/#.d","&iDBe 8","O8TL8O@","WuBmy;hH[","","HIK4+!I" -"Y[;?j?z[4k","z3","","Ffxe-","4]6d/2Bd","03rugQ" -"PUL9FtNL","yaYi=5","#m","Xi","&0S4i)T9`b","Kp9h@" -"7i]"">++x}]","`%Jm*u1","`{C&6]","#oQ","UXA :F","rQC61<" -"`","e_t,T","","FMjz","K};tdY(yNa","" -"K0tM=E!>#","Q.y","2s;R51p[DV"," 8i","f","!" -"H{""Fw)^j!6","th","|","{lA^QA=US",".IZr=xd+","Tn" -"|>K-[k9pE","Z]n0","K,3s{B","@l","{j3f$r>S","#2ti6" -"l","j.HeasNPH","x&""<","iR2FT4Q>^","jnHi""u(J5=",";X" -"2_,ch`","oW'","DIGCYT{","{w"";' b*","","U<+}?2EG" -"A@lAq","00KZ]<","v[c&[","aT.h"," n!?6",":6" -"7+)wQHw#b","K%ALf1ug&","h7","5","rAJWl-E","I>""]KkD" -"L3}o,!l-A6","~tE.","2W?D","zWahMD","hD3MX{h","<$Z" -"[l8","|h?fPS?H","kGMqLEX","""pOx0","I/'o<8_","\\","^q5y","","X" -"6dnMzlxE~;","3h","&S","RV?wX_","lH)Un$v>","A0q;; Rg:" -"x46Me","KRJ)E6YV","S6","NxF3Xe`","5Kx@+g'","4{rXn7d;" -"jKKh]Nbd","mwvt$)nL_#","]V$n","z7lNQH2","MF""9;",",`k*5o" -"YOq","GCj^va","u@G7Qn","0\7","|","" -"h]","ntAfy7zi","0_y*@Oe~","B9KE","7;","B@\wW" -"M","n^","5%e$m'$)ZU","","Mt?]e,","N|Z1Q" -"{VEwFi).r","bQcI3","m.","pS(<","r.R;yx,5a","[xjE" -"kd(","UF:X(]P","vf(dV0-","UT#","y!Ut{q#","^c}e|3;H" -"$'A+","`","H@D#}2AP^q","\-n","Lc`mb<","|-D2c5V" -"",";^-'&MU","9{o}^(41]","<`","96s.?>L1%5","+?i" -"o~^","g\Mz<)(","Y","Vi_?]4!MFi",",","" -"Knc#xK'G","I_\f)<","xJ!","x*",".w~s$o,","""3P#","/>9b1@Mz","]G|/","e4UsHl$","J^YR2/s1@W","Gls\#$hDF" -"bh0zBn","","G#Nvg","}9%e=a\","","x""T1/q" -"]/0Lp","]5L_ [*","u To^","","{Q@","kyP6.uHY1" -"QUXjd","""1BRv*-5",":b6>",")fDs","~)._.","VSyuG`#1","`4:e!Hr#(i","T%KP",");`%R","t" -"[x>G'","~Y*LU","R\mx;}","?Khr#?yh]","pE+8\k.&#I","." -"!xee","XjR\ w","]Fg(2>D\7","9f[UR","|v","vYdyU7j" -"<;(zk","md@","]K1aK(S","mm","""$3|])p","T>4X.N}e" -"s,]","}i;vBr+","+pr-" -"\Gf" -"T-b","13lg~d@T",">]HMXT","J*bQi.Gp","+","" -"[= ?x]","f9d_.;","~u/WuJ","=B7","8(G';V <\","jJ1X","j.","%sS","St+&}b;qZ" -"XA*","","28@TX`?n","jbJg0Xa#:z","p9%60","zpD" -"","z","vbB1e","?q","F","MjTNN" -"TD;E9uXF","","XI6Qh'\$2b","]jBMoDA","R?Ezs","Qc" -"'",":gj","i","N8$7","}^"," Cd%@R<" -"&SOX7e9u9N","Tv2yH-|B","/[\*B","FH7%T]r|<","'Yl","" -"o{0","C'","*","cv","v}","" -"NuGy+x1!N","","","b*","zB,]5La","" -"",".","","y[<^oc","","`#k#w[" -"Qjb}22","B^D6o*_Loh","fVyvi)@","","~G","3]N_" -"Z~|K|f6|Oa","`WE>(PJuu","B@wzpD;","x","=",";tgXMUNF<" -">|(","J]GI""5{0.3","\wQ[w`D","9079X3NUW","z$|",":lM)w" -"@/c%","93ZJ.+=\mk","5ui_N%/","]","$@o",";!FlH4$" -"xcgXX","20#","PSUlab","Vkf","fW8","0A#>""nd" -"De!^",",}qqc,RB/k","c4\","sn#",";","=bgp" -"1Ryoy","*oUI+","Cd","50{0pm,n6","kt[z","" -"yt**","fy7%","Ie320&NhS0","3DP","Ccg{",">E1" -"-.Z!:^Y6v","M5/B","%~*`Z","C8CyOD","&q]","~" -"'pgL5/0gpI",",m[ r""gGx","f7C/N""","","*3#*;xD)!","B\" -"LKi","x9BW^","\O-9"," !D/zsCKd","|INL>4","o}:y" -"MA~kMkwsRl","p","u}","EJ](7|i!","s'2","Ds1-M`Uj""X" -"qn)dj.","""er","","HAR&x*1","zUzu!tI","QYwB&>-0)" -"y$","ZK_f~&fq(b","+.","%]ha?X","D:a7ypd","GU" -"","","$/U","","4P}f]Pd","`dB2>3XAoP" -"|Xu","Sp|?]l","",":I","c4b<0","!a7-'r,o$" -")","fUNO'@:P-t","@{@)(fl|","\HJ;|m.","3_Px_","Y]WHtd`a" -"@[+k?*#QT","?","Z]zwW: ","+)1F","pc?3Sigt","" -"lk1@:","cd\'",",dEl?","H4~|","YGq~g","" -"LSt3OV","v]1Uu*{","G(y-TmBL>","dtk","LNq","" -"Bi3Id9R{","3l""?\","","C@|_RD/w21","$=BDA8" -"`[ Y.0","z;{","+n",":,z","]lo;zSh","X`!HCUXJ/H" -"vR83Ib","{g","qm->~!","`nBroYF#K","|5",";PF\rfd" -"","}}","R<`,Ri",",","=T"," P-)" -"","b[b89C_I","K^!0","hP","{r8>N","D::C~n" -"hdyQK","""07:jB{",",20G?d","\OEvWr","+u","3L`%dOs$#3" -"qDJ[=Xp",")<+e]u","!_mwrd#^R""","[FvtG","i:","C~" -"EDmN","","@[i|:2",":M'yof 'n","(","T" -". 50`Ia~Qe","@!&<\Q","=","2M|$.7_w","]# fQ""T","ZVf" -"]t","+1& D.u",")!:aE'u~}0","4HA","d#qoS","O}v]3;v" -"C","^3.","BRU1ac.","c#pHg#n!;","lQ","OF^BbQ+nJ" -"OxC%[]V?<","#p8ur9g","f%t.+viSba","u;)K:.1~","a","<2~83g^" -"de:$I","y","+|Y^r8!]c","","9Xv?t{1PN}(","0C","]0T","5}D|v\\","=|K","+5*n","!ElE^e","4.""" -"sT4-'1t","H'l","^y!~O","=Ou5l,h","?","'1r'9p

d","-Qbvc(n:Q","c\gspW^","@ZB3","I[lL6M?xA1","m:6)bH""uJ" -"H*f5VYX","+2Jf6DL0","|Jj","^K.Ui\0>",":Rc","Atc9:hJZy" -"_8)_g9pe","POa)WT","""lL+b_eK","Cgg","Xtb","R" -"<>q-@""w;","\x,%T5]kS" -"M[{:ip(O]V","U# P.AC","44)vfbfO","3","D","1H" -"MG","92Q dmDH","8K4Jn","","B?L","b4rk6X~5GK" -"R!cYx-","S39N|","VKcj3VE","{St8=9w3`w","7Ex^B"," F/XxD.O" -"+S","%","P\k}IW","[ZF(9a]bH","hf","u" -"TnA%F){`j","e2;","-CT|6([;","w","vR8^","w\O~|" -"I.L","","3[`","Bpb","HOI-H","I%" -"Ye4fq]LeS","n^","Gl+>eX+","n5c,w^z q","M+Wg4","MK1y7/s" -"","5","Z l","\R$dt66uB6","","7vtS" -";p","L","r","4:|i[\lk-1","0[?9","L-!c:.Z" -"qL2B","+","pMa6-","-7T?","XrSN$B","~gH:4u~`" -"V/q","Ne)2lTC",".r","~","bo[=","c xcta#zU" -"*s","w'Kd,(6%K","","dTY4","Ud/E[m7d","" -"WF1~Z9ey","q","2W\o\2","<=8R8{f9oo","",";AOU<#Z:~`" -"UAd","J",".b6","8DN^]3dZ=F","rmfNjZ1{","1!iS!.~M" -"1U","phL^S(k2","","R","b(z B","J5C+zG_" -"M6I<]KmFP","#U}l3Ej"," ",",7V]h|lMYE","nk'@+","Vsh2" -"1an/.:d\Aw","w)I1","*s-VWon","o5N","{r","M)n" -"N","@ta","ld(SB?/|",",","].R","MY=WFw.0!T" -"_2_ee","AjD-]U",".}9","""N3_-","Uc)z4Q","" -"`Nh","'YZ_K%","~3v>JbjK*",",aHA2T","vlT~","M01cPO:d" -"%""=/","A,KeHm","-5qe$oa","","&'Q~I","5z5P }'" -"Qq])","","`8","LJ","h","u`" -"@o#NVZ9O","w-","IsM[yR-JC8","mz\XUEe ","","z+EjF""+Rm","h","<-|R9Ni@:","","Dr{/ZUP","t_ m\<}" -"6q~","&5L3","Sp%1t>mw~","","`>/c-","R*Q#cCo#" -"0Y@j8","r26#|uxSC","#o\p]Y","!$A>,]yI","E'?-",")%=Q${7(Z" -"iI","_9IG93yU","Yli=A@gi~","|%17","""B,y",";RoMaqx" -"@wh","W'2N(O0K","m=4FW?K)m/","9W$T","^q-i""","7:r #a" -"[X7aL!X{4",".$","_;/_","|IGc=8A","r#k?},Z|D","v03x4)c" -"h,)","g:y^","1~k","j$","!-wcbhC","!mD'p" -"i]f2,ndU.","UO?yjn0*r9","c8`/1D K","szhv)V.->A","","XSoe>" -"M/%gr",";KW"")5","Oh`x","*ib*","s","Xoz-G(JPa" -"P%*C8Po","{5Z","v","6Vm1mcw'pu","D>F3&8[y","09e*cu" -"9kK@4^wz_","G","> ","HuJ4-","kY]5vhxy","*H?TuXW","PNA6-C7^Q","Ts:J","F" -"G\Sk","","I:","^JfS>YGRD","H","j" -"","#E""","xf^K>eG+Z?","7*&ou","gx>s","c^!" -"D6^j"," oQ","S{",";w;","4KC<(","" -"Lt","&gPpli6}|(","Pr?kT","kNcB3e+Ck","qPnByk[r","]j;v0PutuX" -"X$k","=)T)4!q]Q","'T~rv)","","J'E[um","IPt\'~" -"8{+<4s9","NL\j)l4j","u""69pBva>c","o0o#%:Ad","w","~4","!F" -"z>R`gOw","kD>IZ(](-","B","A","%@8@","oSAp,xJE" -"SwqY ","ts%0H","h","!>","k6W(}X","v" -"yD,Ypjzv","mBs6","v","#f","4T @@H\W6%" -"fZ*1nUi",")xt","nF","D6U:qu[*","R=cLp$r.P]","!cxpw" -"*w_njO","fvK_2F[%","isa|%$X[.","(viUh","Sh; 2W","Y[*^.n" -"","\#I\M:.4a","1np?j","{","","p,2y,Q" -"(_lTsz~=TC","veCy%8zjpZ","Qf""Vld&8}","f$`gMUQFc","&]","I;`#_s" -":BcyN","GjB6dZ{Rd_","M9Uh","XPa","s':G""sw","HT4K^xOLM" -"""G/Q""`","`R3Ibn""","PjJS","!",")","4" -"$_,~","dgvVy","yy}e*","~6`oywRos","wP:)4uW@KV","I","R}NI3m","'Yt;V_0C" -"0vd~wmZ7","","","t_SI;r$","B{G","{E*&^^j<9'" -"F*oK","(To.aG","4""%=g3","Ig46,}ZUN","W0zJL","D,7[&Jy)." -"b7S",">cp{^ ","x}+J","","Y/DwZAg","*" -"","[es\x;1~","3Fi4U!tl","","c{*+S",">" -"uH","?U+$[[Bp`g","'","N5S;'","","""" -"+a$Ms?8ED","]ve~@P+""I","7Yz","_","qI)m u" -"I\?","","<%Wu'","yviC:vV","","n84" -"[fX!\","","L|i7B?(","YO@kbC3","Bn/""","nF#*","","","T","^M%WpBd","C{MA" -"k0^","bgO<*","U%{K:bA?","D","9?l`Y}h","YoP&U}0W" -"uQ",",pI['i^","@,msdH5","/&`pE'","GO@3WP","" -"p,D5dY>F","#l)4:z>Q","4Rlx|(","BV1/5g[w V" -"*|a1DL","{{k&bY@|ho","Mn3-d#"," l%-J^","j","GV/" -"Sl","dka:`a","HS+Px","pF`'?'C\8P","7_6(Hdq-_S","%He1}qQ)" -"!)F","xHu=r","5yCOXn3V","Xb1+Y;>>)I","JU#i","w4-1H" -"cA","-Z",":y6J`t?0J8","Eb","C?f!","qTb^?c)>I>" -"(5};","i%","-TfO?~3x9","G.(~tDOl5","[qc4","J`E^c<%" -"%bj0A",">4F","r%","6^","%7oXb@Ba<","JD?t""Cj_v" -"Q","","d","5{D",",","/e2H1N","=aw?c%","}zx1 ,Z","PY2" -"yNmB/UQq","rf^""\","qya8x","PKVs","x+^ O_G6","cL" -"","ZyRxpw~","PCajf{$D5","","G&","Wqi_" -"`""ik","Dnem6JvoL(","iVBg H","","aJh""|y9","8*","$\68\%zv","S{=(a!R","e" -"cy","","UTl",">;>x+\z]"," %^","k" -"4mt","P{;2),_","^,""","PCo[","Shop","K9Q`z" -"y:X","z:","gvJA$OfYw","9c~GX5OggZ","$0","t-@k>ry" -"","C","H{"".c9","0Wq?9","4n#|","piP^," -"s-oj($O","~HX","c.BSEk=H","mUy-4]{/","",")""BaQ#" -"z","","$7?3j","k~ 6;(""l6b","Im","v" -"7""U\tJf$42","[j","[#x1~u]4#M","j:","z}kk94O",";G1-","Js","mXK<--FDb9","" -")M;#*S","i","&9;@SIX{;","{b)}]X","51","/-bN.MN'" -"""xCY","","'61Mg3y\=","$/j%Q)/","TW&(h\i@GP" -"Du!","""'Oy 'Z","b:%8f8=XlE","T{0""HSm!3","`*jxI=","" -"9","d$$","o}8t#C\3P","mYxb","%Dc9*JE1","Z`""[B,U`","6AzNGtXWt",")2I!G","++'Mb@tux","~H2E.G(\","}Whl"";$-?2" -"2\","cQ","Z27g","ICj]n1" -"IrZ uQ6K.v","x0'#:s_a","vI" -"sP+kU\","[","g""7_y","v\f$x^","!aKiL,H","Zs{Rj" -"snNQ0T",":{rD","&!","k\`TUNSTtW","4f}(7L]G","" -",H273~a","l3vF^S","]ORT(Qz","NmY","4","Q" -"Ty|R#r","X","hJ#f}Lu|","ME","'","" -"=aMV~#~<","N,","-'Csk,J","bWK$tB.%i" -"i4k[NdH`4","U=]v38GLuQ","\Wu9r.iSH>","}cLq","{ '#","whfKl" -"~O/{",":FL""7;","?:\#vur2ZX","R","Zw8zZit","ZE2tfb>" -"=#/Y*S","QrvY@wv_","0M2){","fOAK@@8","B,(K&=8","Y" -"/r aTHPl","?","xv%zL^c<",":4f7e","Ij?hV_?","0z,-z!^>" -"!1mLC&","@9)@{y:","4QF","m?*^F","!G8","8]p^]J/","D'.v|j" -"*o:*y )v@3","#k","2?j/O_m","A:Z6>`%","E.diTT&,","_rohH?","r.'_-Ysi" -"EMJ","24VWJ","I\""6}LQU","*t8e^fNzhN","Kr#w","e7\<\%@`" -"\7GnX}","","7Pd""k(0'^","]","''N""FP)Ck","-F-7dL*z{s" -"uTVk,<t-;/V","k\",".","w7#c.W" -"""+@),:V'Rn","$","*","p&0UB",">C","^2q2i,N.!" -"F|p","l3?ZvpN","DDPW","" -"NP B?[h",",$6Kew","?>>01","","#cn%1p7c","p:" -"i!","Qp+:h}xiL",".]%5""nnP","DZR6|>","-AC6`C6V{7","YZ4Tf" -"I""}eD;{x1A","ICnW&]UU","w/+c/!","L""p'","C","(k" -"G","6n]u@^x","fF","8Z. 7\\Fc","4^YIC6v1"," i:IYq" -"D9k"">J-","'K`]]V$&","","-A'{51I&.f","T!","QmWc" -"go'4Y_","lgije;}C","I+aC","0U^46","X","gwID8[s" -"4","(?'t{4",";Av@^","Ln]","1_&_r=:,","?kKf'=5}?N" -"2W}LdI0G-","W8Ugf","wfi{R","u[mW((Ln@","Zn!~4CT","M/dUo\S)G4" -"%","","|~","w%Q&","c2F/#3M_TQ","0" -"P^","SBM&'OuL","M|6\a:+$","","}","(l1Z75N'" -"3?kD/c_@""B","/Ln:ZH,d",")4ykVY[+z","ZcP","i","{D*L/" -"IdN,Lh\gNA","W<9xisj","Yt<~KVR' >",">*","qL4ELo","" -"M+VcI%+@","u<(2[","" -"V_UoQmTC2","dSLJG|","4BPdqd.Q","iR1t6","fPdd=","oh=7&jn" -";pbA","w_xz=zr","%(rE]","=Xb*O","H%","'8WbZnI>J" -"","/w|L4lA66","","Hr1AQM\","0v""3","@\" -"sR","PMS{*JD^Da","r4f!|S","m$j5:","8,f2e-wo","7D{,mx!" -">h60}P@U_","q1i1","E","2a_","a} ","0V" -"",",eT&F","C",")S8o`^R","kkeF^N^","(s4Q_:]" -"9TlG.| [pe","pv","j1gu",">>","C5v'","gNHt1J" -"fm8 r8]Wv#","dG1wZz00?k","N+m@","a#I","6","07fKI[t" -"",".s","Y",";Iz{","","wzVT*" -"4kD`9^bH","BB639","U","aE^!zs!dPX",":5B#+b","[OK}k=k" -"[6","3r7twC.","\Zg!^""*","GbT<%iC%4","","4" -"T|","0 e?9#rJ","m[+Ud<#[","fJ!n0sQ]","=3?`z0","P""~" -"","\)","r`#-qf:4","+D\5c)uLEp","","" -"""X~i._5'<","=G~e+(L","","!d5Htw","<$w_71","b" -"Zb%ia",";,GBWibWi","""@","`#rmH% g","'faQgw:s,zVCoB" -"M9&A&4x:pY","Es{})","5"," l{hN)" -"o0GC[","","Gu","cq5ud/8>*M","s%SR","#s " -"Xo","-vuY","dFF/J" -"Cire0-RGM*","])'Q2}0K\s","$)8\","","N6Wc0","/u1N/" -"QE|(","rID/$UC{a","INp|dv@pS{","hyoK&%pq","yee>*G%yR,","bBWJw" -" +","e@*:=>`B","woR4","7Q2@NPJi^","_G3","" -"6z""","]~@9","-K+j&+yY6","MeOr=" -"}e:7J","j\WVx_':Rt","xW{","$AJeiS","Z!Q/S","+=m]" -"\",";v|C6`e85""","io<1?-+","!:'N-","A,$1]2","pV","vum=ZU" -"e',.E&EM[B","57`=@kxh","):3:","u0zMA'He)","=]cAT","V`NW","Z&l&~w","ZjiEt","","","jc7" -"*=jgc+fL","","n_l=Y","^PDTwcv~x","u&)$Zp qYU","<>" -";E}","G]CXC","2 e7)$=","""","U9><}j","P","gr","M@5","|." -",Vuxw>S'j","$m[@8y",")4u3[","Ga`x>K/+>","}o","~Ot" -"^U-+TT","FHD","Z7fl","H$","OCj","t$XV" -"5z6P-","","","JS","[7<{T","/L\y=1`Eyf" -"v]K\4fOj","w'oI$G""LM ","uum]Q>&nM","","~A0G)WH","il" -"l","4","mn?","ot#c","VzP}sy65uo","$',u?;Iw" -"8[$mIq*","6{Z","WV[RiMU","Q]2G!","YjZ.W^EQSg","#B,6" -"","DS","W_=O#","^VP&:Ed]'","AB9e-<[","t" -"tt",";","6OXm[","5!d5nS",".:P","60(48","","L2nv96","s-","WM""x:%","xx@","","w@","F I-" -"{Cxh","","5P~ilp1","}\cKj`","hR}?Ae6J","z!" -"*K","|WFI6","YBXwY.bne%","]k9*D@U[5","Y\G","" -"{","am*HEtW","","xXht","g<>;rp|A","2\29#9-o2J" -"c9w$%2S","","H" -"76Bi4:iULa","qX4""J","/TJb","; ","","R" -"","Q\hZ%3CU","Reo^)yTz[\","P1","]wxJP/","" -"!M","KV)","g3O:SL VX","hl+y,aai;","c`","" -"-qR(>""","V;F+!","1","%@vN;%","""p3pUC","4!^}vE" -"c","{(.(`*rjt" -"}I0E:","","cP~&?#","uIXH2i!","H","Bn1]X!" -",lU;8d[","xbSL","y","Q f1XNt ","r*8Dha}","?*[Hg~Uu{" -"tV","Q nm","xm|.","*LI91.F@%","" -"^V3w>9d/E","@X","k'~Pa+","\Wf}","d""NRf*ex","Q2@o,:" -"WSFyMp","r_NG]","^^Z2<&)H)6","a>}""`JE","W ~iTZ","&wqU" -"p,","2jqA","^uhS&~YI_j","Pl ",";#%s9.k","r*" -"^6ny:","","(X-","E]_b7F","9%","" -"ZxI=TB>","wpok","AC# ","*yr","g;+)","" -"z[@;go`=A","+g2","f","W|M""5I","]\m1/aSY6","Wi}b" -" c+^@r","ru6z-c*9;",".Tc29]","~vj36qux%","L_NQ","R-.S" -"xMe:iI8n(","=z}(H~","oUFP<","q~6jat","Fw\a","~&Z$!-&[o" -"o~x0qMT^","Z 5A|",";","YAo[#_'","kJ9-DCg","E=DvK)1;" -"a0aM","%","GJTr4q","gg,SZ^","","i1xA7" -"zdC-M~y;L","jE%&Y","IM#dixX{fB","","sTY1y'!&","v8 GhpP" -"c+*)0","","j`)rF@Attf"," _" -"u1GDnO","0c78Lb","sE","v1+'F-oV`","Kt","+mz,h!$h9N" -"WBp%ZHHxP","n\:j,Q\yb",".7!dK","I*_Q7","'S'~C4(|Z" -"3Q0zA[Qcc[","YmxHr@E0","Ks"," iz[Y{q_H","0","l).1~" -"}{|qK","3","","&y sNI^T]]","F@]U]Bw`A(","-" -"j","1","Hg+`hi","HoV","S""2@+~[c7","" -"sfH","Eh]Rb","uC@}xC5B+_","w@","","8nn" -"'c71","","c","~':E-","D*qwlE\)X","Q&a" -",0","OR","P~loB","QM",")w 0 ""","`n" -"Ef&Y_Pp","^",">]6p""ZSY","m_lE'","g","FnJ" -"KR","wG SN._Nxx","DH4k^&","A:~C","E","uXnx:N8E=" -"M","","IqEa)X6G","{-7^HZ","u$F","G2" -"yBy5","B_u_X8","QWT Nij","rhg","Vv+:""","" -":;w","2v/H","z""`Ie/+9","|Uo*","Po,td",";DT~iBGu," -"`s!(p]1RXw","2iC/#a","ww=K%[aOH","N%Sd","aeyD","K." -"]obQQjN","9;edTJO","^es,C""","n=LqmBbY>i","tKn7","1u`p" -"%","Bh!q.z^@vK","kjVk0GJ","a:5-","","&dQ" -".","[U?pf","S4^\$Z v1","]/hM#`*","=","Q`Td4RP\(" -"d9d_","-ly;SO","0y:bX=Bhb3","RAgf",":8XqzEJ!","oSUDCyH)c" -"Cd<8",">","}8de/[C","MVdTrzCbbW","","kSKS=D1:o}" -"hvw.F","+SBS","\`ZQg","FX,O`EoVf4","4tg^!i","a" -"@Me","w:(Rx","mvlFQv++Dz","","'","p" -"""","94'6Xo ","+'",")*Zj'","g","ZcUj/[S6(" -"9;h2R{tS""!","! P","y","T2k.i*^&s","vM","{s&" -"'KnsN>DO42","coPF","D9ydC>V","E1q ","Vl!x}","q+z}urY6Oh" -"a9>o02>","X%","d34MR","P",":G","h|hod" -"YZz:y","elx2$'d","q","we;K","k*^Flq","" -"W~]","p7X","CagX_M_l",")_@","","u.&" -"","4$C>4_D)","wDh","h%25t2+","RbpE","/pcf""" -"!",""",y","Iox/yx","65","JEflds7","5+" -"M^.rY","Auvh<{_Mq","[`M_/ET0?%","FE""{SR[","Fz2A","z7-/" -"'u","]A","r~&""JH@p~","\UD.","A\}l","Q7%\Mr" -"3%","x[","","h3s","","N@ZFRUsX" -"']|","ERo`>Zs-.","]^wq`iuk","E","CFFBG$","Ek" -"_'","?y4^""Q","B_-","{s","SG","a" -"GCf}0","+E","'x][Y","g$^h3 86n~","t {KfF","","wg,U[7h","=ebag\GxPj","" -"?\i>gbAOe","p/\&$z","INQhg4)=@!","P~:;bf","-","Bn","N4=}:\L3","TSJy{","(L3NVw","hDM'L" -"GP5`LDVx4","h","Vf.","U^|ggLhK=H","py^du{=8","C$w4XM|kg" -")Xo>x07","%~V{","YT!m8g","Syisp","fb@ KU","Z6" -"YAB:ZA_3+","~TPD","Lsd6QH","58~&r","","X^" -"S;{","0I]iC?M","n+U_e","K","P?Nm#K#;Y:",",lUi" -"","KpP","Pt l","}I{bot/ts","=h M","d#dH5eTqf" -"?4c46%$y","#C$Ib5H-","","*~eM'f9","","G+4Ut""9G" -"dL7|",">;","Hj{fQK^a","=}?","zX&<@N" -"t","NGgwnD!","(sKfr","33hqVpX","](]`R","GH_|}x`""O" -"zzzC$T^EO","FLYu","&0Xy~`\Vs","",",;>d0ag66B","d?#" -"~","OwFYcF*%","P[hQK3z","SZ1[9xjnu","v2x{"," 4/de<" -"~gi5\ua ","D`1C)","s_[|[Z[jM-","sAzDoB3","'JZKhhKU","qi" -"/r;?fl""]","wkCxHw/@bp",".","]f_&**_D","Z!`eD","BxmNgUKQ5" -"UBQV","fM0]?","ea+fC)B$","}","\v,]c{]<(W","0\pw/8uy" -"w}duH","y4msg","(D=OtUZc&t","aDYIZ","k""<8S(v","9pOU|","Mi","**""dU]" -"_cdC.`/=","R%na","wW","Z","}UC},.S","L4*L" -":e%"," w>i","a|%7j","=%j}(19g;U","vJen1j`75","qso" -"7X:HuS","hw|Kd","z","","3hz$L0S$T","nayBvnNzl" -"UU",":{5U*TS$V","@D)0I","x$G","^mum/","p" -"?V]J!G4c","t","~]O","wk|\ t)M","Nm7","Y&m" -"OR+TUs","`","l2u:a%?c","'d4f","' w|","{" -"7NS6r[@","m:59(k","4pT[m9i0Y>","","6A<","M!X>*{cQ" -"","uv[<","~!uMx=m;K:","KRK2|","j5","`X," -"","9pY7D-C","/","CsPr5M_$eH","G6XJAu","$0qg'S" -"rzz","$8W[ejr$q","","b\t6>~{~%","z0L","=" -"(""C.,yOR*k","E>T|",")6nK2E>","","Ma)vW%","O4" -":Z#bMS'K4","B1R`+8%,","[zNJlg?","b}","t<.c","=e}6A'ZJM\" -"zeYk'5","-E%??fT","~3NrD","","0`SzOR_","&nF||\P/!*" -"j4X6t qZD","$&","VH,bX/iqx%","Lb#?nJOL","O@r""","~pV;d]=!" -"","/6S}WJ:","qw\D7&}|p(i,9",")Gt6|s","36lpT@","iuQc" -" WpI)^Yas","FeXfJ*","lzljk.t","fD?Cq","g",",(H1Vh](" -"q""","","<'az","M[mi","*%Tjk:fY\","iyDF \L" -"7T*uj","!ih","rqXO","\h3i*i&","lx/cL,Z?H","}Wwn@Ug@y[" -"dDobT>97","it","SUGaTg?4g","[~Rn`Vqq","_?oI`G6@P","fh[" -"i:9oaO:;@L","XFt{%Ll\","?!7|L8BG","l","ZKJf","","O","17MvwUY","efGn","pBx{R-}Lbm" -"$1","t7Ra`","fGX","kVD4n","!C4Kg>5Izk" -"r8=NCPVr","t4@7e,(DRF","wg3a}","bUXZM(Vi","1-S.M","Yz@" -" X%v5j9",";*z","" -"ck7\C","","W--","3Rkn.XS","IOx7>f","#HRJFU(N=e" -"jU""[fymZ$!","","As~1RPB","*SZ#M3","Ea9-#7 m:f",":]fiXKd" -"$`Y8bM","DEnVz=&`","nG;_EWiji`","((jhe` uGB","2[d",">#hx3cxOS" -"C*YAih^ViO","hOF","$Sagt","qC(1!B%","C>>Q*UJq0","@" -"Kz)HE","*Pcj4Us9sx","VXI]f"," I!Otau\x","l9YKUpq?","" -"","CR8`","rb>",">Q\|D7n^;","cv~","fP(&" -"VhMQ","h5E","","\H1r}yR","V*[}N4T","I" -"{8p}*]NO","HZ;","':cu-<*d","KG>gw","/(VFB4d","o$*9>/rQc3" -"aWY","Nf:N&R0pR`","+(1*f4","-uyDp/*Cf","lMF#","B)KTS.ZV\b" -"S5Qh[8ox(]","s","5iG*?U;","uV_3,","YAzid]Cmg",")" -"r6$K+","'J","fR$R","K50uWL~","9~Ps","JKV^m>.9","CA?A]F({",")hw'$gVN","" -"T9'.#Q8LO","u","_65","|6>l*","0_""""","0" -"yEh^`5C-","Vm""D","qO","d/mS+e","r[z" -"v9hk/Qfb","1J","%HSp","","DlO-e;;",".*?48=:Au," -"F=(tb","w(B17O<","kId-""6l","","52","+gbm,z,aX4" -"'=","r&fL2UD","5,","q+.","U0Z6MxY[","}" -"CJ)O-","#E]vp(E-","#y","nN'nfp","?e&6MCC/","U7k","zt>)!","9" -";s","hgL9","","Dj{n","x?|PL.b","yac" -".6dc","Yq^im","|","1J{","","" -"Yja""M6","`UO1w7{pk`","b^h]=1N","2p*cdX68","u]|aq;ol","g^ UX1o-" -" 9V5}q3","Gf","","c","i","*mBe" -"k5Vz",">","d\?!*+5B","-","q\5j4","7 ET'" -"\&""""","\5JE@h`r*]","","!Vf"," ~","wF$+`536^WQ75a","fBF-JG(5U","XeQK!C""d6","D","7JCH" -"tgv((?2U&","x","W8ddA""_}/g","&h*s<","Z-t ","8$" -".VJR=B1","xG=`]s","yH$j","@@[W","R[@P3","( =0]Cc3@" -"O$r=/s|","vt:Fv","","V{i@_1","l.W+-E_","b!" -"5( DQc*","'}AV\",",#i{):#","Q<&fvv@ @","QQCLac%v-","&_pD" -")Uek)9j","I%GZ","r:qC@","QG5S5@","FB(hOn,","#yT." -"","UUN:f9<","","v^7v[IQ=","7","" -"4n","B 9T+;6Op-","U%Ug.:W," -"4%MMt97]3","tf","C-)","3={;CYcQ:C","b#ZrVuwu=","r`/OZ" -"|LCn","LD+S_@C\",";","&qY*","sR-","(i"".`2j" -";I","K;%","a0OMM0","J$A0","R\c+!#]","p@Jaia^8w" -":-fzi","jeDk","^D8`","{g#U*$,C","5Y/3jU2l2","i!w LKb? g" -"g)^","v0\A","dA7n A","DI","@-^4;Ng`1","" -"Q]WZ7ePI5g","oWTo6V|","B>zL!dKZ","9","&'_@SR","KOr" -"AE#:0A^;m/","f","D9","W[l","Ulp}}ysx","e*dsWDA`~" -"0:kJL","2=_JO","i","z[QRG^Z","zzu+W","u?'];_[?,M" -"Qx@z0-}m","wKFe_%","","2Y?S[QE61?j","wbvhFqO","3w_sgCNb;l","LR" -"\~5v","`z","","kEB}","1?]?=CX32","S" -"sj.m","~`22qb}""]","^F","`COA","@fh,UR(zU","5lx6pvQ$M" -"Eth>1lx-","d[/Qd>0","Ust-""z8","w?","[)*vGi","[x`.|," -"v","dC","%""","x1i2K.p'=","E0^&^-","4Xv?9" -"QP{0+*",".'~|$[O-rH","d]Uk0{Y5*]",",F5AhPgNw","s4G:9Z^(5","?8R3V" -"}!&rF","Qd>(EU:K73","I)=","-_EO=>","q4*;","!1" -"48`\","+?D""W","r/Wrjc~3@y","T","*{:t]e","[Q~tiplY" -"jaNna<+@?","< ""!%u","","agI1IM","","D(n8(7" -"","k","Fr\{*J'Z37","qW=[x","QN)","J1" -"S9fMPCZ07?","r40rg3A'","[d2p","1","CJ""i",";3;4(EAn" -"4,=2?;A$_","","kdA",".fl5","Y","c{z}AO#Q" -"S,`)>?r","bg;dqM&^9","TDJ^}OH6!_","&& A","utD.",":Z~GUJZo~" -"[:UMq6%","","Wm6X VpV","YjqrGsJ^","G(@8_","E" -"X","Q?:","Oo:q$S}","I/`OG*7","","e" -"P?G}/zAPqd","pi2$J","stk>'Ec+gZ","RLzg2*","(#t6RJ#v","/NEi`!3*" -"}",";O","","xqEvY,Otf","4VeTY|","Y89/" -",'","\d>y9^o-C","&DTe4","N6kMA@8<5!","T","Sz" -":4lcZ+&T","^v","X6pZOs","!/z",",",":xst" -"<).Z>>$","R","xzY\>","B7","_","o[3:ZZo?" -"","&>=","g?$aElH+","B9[","O!1}+","R;0WgK.","%o/Q9y(" -"Z{F0x|=lT","V>UJ#7r#v","Dh""j*^","`","&Vk))5I2]","'3:t(&" -"/Jb","`xa","1eI89S","","v;mdlg)mh@","" -"","J/'\+","","kN","<","@WF2v_=%rc" -"","|Wm,ob/","TuoB)K|(@E","ZP","|f=xY)/#U","Al(D","+",":iX" -"*n","ug pb[dHu","[aMO*7Zwx2",":Q@U!w","p",")JPzK" -"+vf""8%[T","Gxv}?","/YsX","PD\e\DZ,","","&,`z" -"7G[gJK.1)n","t+YIExD>@","U0>$NA]$","yZ*L9-2r","|t.L9U}q","" -"-,hT>LR9q","|0y","&","=Us7q^E","E""nt=c","XtT~" -"^",",_J:XO9","u-Xl$(+%","tU)W-O","j$,$a%(\i{","G|O" -"Mu","/j`.5H^>","","H`nk!_Hug&","+$U]-}M","MtU$mX^lP" -"(4gk^AxHGK","etSi$+","TG","hs|4I*Iv[)","","|&78" -"","{sjW\O""","V_","W]AlB) C","t>z`]a7H1","=" -"","kT","",";","Rz>_mPR","H]uI@s6fU$" -"j!3tLX}C","\N|(","TJ,nx","y^C","z","6()?O\dBj" -"}1J%XD26","Zm","a","q29b","pTH3","mt]tD.b\XE" -"C`","%$L%.xb\","MT",",","%rz","+SaFh@PJ1" -"n!*5q","","EDMS&""","","T","" -"+","sW`EfAJ#6D","","c&","!RG3mS","}a0qwjc}" -"","4","joB","8BHb]Cn",">`" -"`Op6(CdKN}","NCH!P0k57","a|!O6*mi","U""%yC","""0G~","C}CedO" -"\zz;0","ZJv","-~<}re","","sa4mu","!0" -".=O6.P<","?O$ss","U","65D>X$\{t","F>V","|VNqC" -"l","U","3%lv=e","xNa!ns","[rux","'mX~o" -"!Fmx4V","a.ik","1q","l6HzDDl*)","Y0vi42]`","&Egq" -"Y","r\N","FF","|2[;","ez0H)B","^Fj*:_" -"pI=","",">[9vK","a","","@,_IP=NR\" -"A/x<#","J","O","h,R""zSi@y3","QD:sQdEU,",".W.\V4L[`4" -"M3^F","0""CD8-xd","j!W0","XX;","j-u8OrgGw" -"lt2cth^R","","8>***B4o@'","_4","Ew? ,","3j}qe`" -"~","BL ","f","o""r J","G^f/,",";)^7" -"q-;:D@GkwP","tw8O","|8&","sDgR","w{eHl=Sl","$}" -"hlJFk"," ","\ uI","8" -"J#;Q","\N/h{","u(eznIXEoE","?%g ","myydNO","cd#L !" -"PrJ)T","v","dh' $>","U \-@~m","nG","/yk" -"$L(1;",",-3n}J","a_-d,j","3","]","!mY%jv2" -"&'Ry",".4","",")i]rP-","4","$""C#-QF\E" -"L&AIt","VD]\B{f/","`is95zj","}F8FY","C"," " -"*(]e(1P*O","3VT","P","}l:>s" -"x!?LmJ:sV","^Ce@DW4","5E(3FFNc","tUd)Om","RICDpT2!S","&Th6m)W)","?veTq","DQ;""_}i=b1","'g>" -",miP3t#_","aonhrAdul)","""Mra.","&c","","DZ" -"J)PLS}XL","jf/&)\qNZ","Vh","r=U]GS^","p<[hHDj","6(@>.O0Y" -"k35`p%+~F","Eh(J","7hek_","=l]$?`_","O4Ue~","Ob98qPm0Hk" -"h","~:l;}v","(","Q>!W@","&4wfpNAO?",":hwj6Gb{IZ" -"36jjAw","`[w","(,wN^x;j3B","+#vX3wFS","","d$3/?" -"xiB","T#rzlr}","BSB",")","o_2m2+Bm","~r<4eA""5$'" -"H ,uT(.","f","qdyPW(jE","xXn","","|RI|" -",'K","6.o2eFt","","=?7Qfe6","`zO?","+(=x5dRi;" -"/iON","A$","^X%l4Pj$","E$f","2","aV" -"2-#ki<8(.","/h{4}7joC","gu!2x1","8(Lf4nv","<","8_R%H" -"d}{f)k]dy*","<_)flkg-]1","2/","MIE","=R[C^M","(VG+" -"L2I\> ","Pb\I{c""Lf{","s?z(,PK+_","Dg~,lDuX","Tx-T","fG","bf""H","[Z8I","Y[","+D3^" -".6f","y""-(o","Z#++~<",">9V>`nPz","-nxW^Mzf@o" -"*,_E*0","<7""j&[O 8","#k@)>,o-","Os|","][3",");n" -"","%p?D#5;","]r@r""IDmD","gg=Y","f05fQ&.}#","it(M+o@_B_" -"hgkeED","uHh_ra({",",(","/","$J#.>7","$K~3" -"","=-GsX","kTlfow","&k|!","lbUA","-'We" -"{j##","?2^-2`Z9(d","13|x\B(Lc*","m9*B#","~7hy","l!q5" -"TBnW,\Fe","uaOtsq","^ID7rR%","2;+wvT}c/","6&&h","59CVp:" -"=f|~+H?t","5vPij","~;e","z8UWCu$\T+","G","E>H0" -"1Af","`O&J7","",")_n;iJjz","g=n^hSUF","mk0;3(VU(P" -"UXiAM=A","","@#","xtdXe-aOgf","_Kf._Uiev","FmUtmgr;" -"TePh.P","7AV_jW","","",";8gh<+e2","" -",nO","ZPrOobHD",";bvU(F!qXr","0W;t$Lb","@","D>4K." -"","5","(L","UC7q6""""4b%","C","T54be4|NQ-" -"PVYwa","1H""d;+M8O","","","40GHJg3%","O" -"x5GywI3t","*%","eUJ 9mY","tyO","6lKipQi","_Z>PDO|" -"X*j@","","E","hs","~X_Gz^m",")" -"Ia}P ","{g","-","hzz8[vQ","jB\X>#(+""","hDy" -"Dl_4yHk^+","JPSQ8(cqSq","H!5{sSA]g!","Y,:f*2","cD{NE&Bx'I","" -"","RjIaNtq}^3","Y","","RyAvo","4=0ORc&>4," -"B5","","*(ZW","","J0Yd`","{`zwlvi" -"qEy",".'?MP","""})m""_","""4jy2)ac",">bR,ZDUW\","tP:.z/g" -":F","m8Ema_","",";B\JGV<",";O Nr0?Q1""","4:Z}" -"=|r.\rLwL","0YN|3|gLr6","Xt>K-'L","OC,tw_<3~:","",";dAJ""^QO:c" -"{","]_r;","|",":jqsuf","k7~;V","O" -"od.6I","rK(#","C","$&Z","""R4n 3?vmC","z~R-B.Z" -"ODBbMnT","{",">)LQ","#c,K^7>#","BS9]","eC""" -">","Lf!`","@iL","iVb@EPA","","eu" -"2\*u]JVd3","x9w=xu","_`[7#8XRQL","Yp","~y6P","@W5v`\jRy" -"vh2","I!","A.RYB(",":u~*oxp@2","P!q","[.(F'!R" -"N?;4bJIYx","j6TBnK","","D6CY5","","D" -"| 9${?0","ZnTB2oM","}kq","e9UEGq74A","~","UP^|7" -"*#/)","oW$F,wL$ ","","z^C\N:","","lIX" -")!lW53=$C","!EJL8==","5(","W(TR2o","zsh%","Q!lb. mCQ)" -"\ZV5{gFy3","k#xTOtdqCH","Q2Q.\iu)","NF%x(","M","o)U" -"zeA,5G+","#Vq=K)V","!" -"{>^@j","iTEL|","Jy-_SU/'wH","@lh_","]+l36).","csK0M" -"wQL_","L","Kpef:","Q<","15ho( r","c" -"^(pD","\V)%","uV# H&%)}","H]""#_GU","Z3^A","1""" -"][SBqb2","sm","z","fj]/9","","@J>J?syq" -"$>pc@U","Pc\",";+m6b66ydo","+?jE`.\Q,2","{iQ ","" -"63HSx","'_+eJi","yH",",vWtmMy","Y","xgPWJ:" -"7l39<","","#:SBey#j0:","n1r;{)","B_0C","" -"d","a{eaS _W7","[pZC}4xc","mx^&c","6Xg?#e","" -"Km","x","Pkc*287","60=J","$ciiq>0","aOP","DyL{VAko^2","nCx;^4" -"""AL/","Kvu`","?Ri=~\","Uwo)>>GUx]","T","PUlR=uXl" -",-Z}","NS%s7YSmx","M\~G!8","Fa6!RE!%>","]","AC" -"ITrnuX$z=","Pd ","TN{P]Qx{\R","%""FET","cC)muo","b""7W]?#K" -":XOT","J""mLD\S6&R","]F(XDy%V","V","[72S_fq","SUBd:2#;#e" -"z1e4l4","&:","(Nn","Hfu&s*","g{[kt$5r ","}E" -"","`KT6Md","JA~=","E^[rtkE&","q@(|","&" -"4p:C7+U","(","|P\;TB","/R4I=]i!&","<","[Ioaxib+s[" -" l@i$?","]KeEV{^G","c/O",")xU qf'","JkR","O&\" -".;F9","-0^rp","`n& ","0@`7+!&xS","._fu-y]$N;","i/" -"7:!%75w(","g&W","0n}}h","GecP&'P","y/.WA,","GMh>f[Ub" -"'|sUuHc@","|)JV07o","}>+;p++m3o","1z:],\","[PL","" -"xS6&\2F","vZ0jhcZdOM","$","","C?$@6 lx","cELb,/QZD0" -"6O'^2X6>LY",">kDfL{T|Jq","rq3wv&m#|","GU ","GeD0$","H^" -"$p'v=","","77#","vI+TaW","kU","vn" -"Z3kq+","r(N","ovb:xf","Vk",":5&':7iD",",c}" -"'","@v""","pC9[X#5bLZ","cannP=c9h","6'L0)#KgA1","uFTUYz" -"7y\","Fk'","e~0ucbP_8","}1!ULDjnev",";)J(L","lz" -"eZa6Bj","NY>>E|s=:n","08","G"," [^i)$'","p9wy" -"j'FE"""""" J","","+Y$YLVW","UpmY58Z",",|ot8" -"SY","*:i6","K{RMh8d63'","40SGVof","{~7","|]LrN\)Qf7" -"[>E","s","cG","D6D0nwmqc","""j","QV-H+=!5p" -"T/4SaW","""O9w,|d=","8:5VZYfX.)","8;)H","","""BGhSH70" -"EgC23","&HG","tOT","oohuHfm","","f3Np*4V" -">-wot","pXL}l","%jI!-","q","43SyeR)","&>+V0" -"z","JSqgq","G)7d]o2r%","B ilJ.$","=HVoj""Uuh","ilIlT}^","y!R!}" -"7M+AnR","","V'r","n<(FlA","uG;d","4z," -"CJF|q%}j","<","CxTe)+!!K","rVVSu","-1 ""","t8)A$,G|R&" -".l","L`","ZHr,(","f@DS:",",W))Tu [}","XptY3~qqvx" -"=","sY","tHQ1;~F$",";'|usG<{","/./+","H;PD0x{" -"$T8[+?Hu0","F'RnV#NHX","","+d{I5}N(i","ol?@","s0lmSM","w","54VRh","W?c_" -"~h!,Sh56D","Bl thgiQM","{t","_k[nc ","A9.LZnVV","FIk$lY" -"vmZclCsBW","e=C;6","8{/x0Kzl4",",6fi","v'`ib;v^]","JZ|kZ(o:2" -"HkMT>:p_","c*WOX$i9","?","ZTjO5","J704GZ","Hgh!7q" -">","rk C5&Vp","0BK\]{n","px!PiJT#E","q),`J","0@f8[e=#" -"!$d","y+.<&l","3!]CAr&jU4","","CZ3v'/6;`","N" -"kovwCdyB7S","P","t|6&hRY","@Aw};","^:Izb=vz/n","s1{_" -"]Y!ZV&r","Sebf","x_<","Jk0(","SLK","j" -"NbR]CZ","G}q}}i","y","T","vj","eO" -":Oh,{`W""i","BeRUryiixF","U\]d,YB",";8@j(]zX`" -"?M8=[x1:","z85dvP,SzL","2w2E+mH7S^","W","""\$5qvEF~:","'""2-wPFw0T" -"CG","<2&;!sbo&s","g","D=d(t4O","qb^&CgN8b-","($ea[u" -"","","j&","","#G&+s","FK)","2Wogt","e""(![yggn ","?Po\r[7","s[{f%|W","" -"jpe@V[(;0","{,","~Tjexb","*u|jJd22(/","6v>w",":","","]fzYg" -"yk?t","O)*'%fQPq","nXWAcQzL",",++~/VV8",",*he>{","7znYjvFD(" -"H?","0wH4C%z1be","}\p50","P-xf]^]-/)","XP?[q","ki%@DJC(vW" -""".","HE X)s","{.G8p&","<^yu_9#=g","]b%%-9","QJ2MWO<=F(" -"","|jvCB+f45","'/""cSFn(=""","6HD2","=o=","F`HNwtt" -";%VJ:V",")kd+esu~mf","|N]d4sT[i ","bu-l",";kV_K$c478","98`" -"8Y#]7K;B","#DRFsv9","a","a^TA]L>Le","Y,*Msah:W5","xkKLzd \n" -"@gx}z7%y","6rcx'WpG`=","0/)Fe<","#+A8W","SM<*pl(""","xDg " -"2I?","WU@","+.","3 t","{#_","hP+8D1$L" -"T1Z%)LG","Be","f+jpbEpM$X",":LS","-'N$B1","r$;>h?\" -"","@s","O9:B","'K1{{","oj+19Y;Uc","" -"E}~!z","_!2~K","h\#x^v%","LpxO","Y$","VByN" -"%qty&3IdoX","q","{5xS1+@yC/",")%pPx","r$fHG%Sa","" -"Xf13,Mjp91","(C7-p5%sw","@D[JL","MAmWJ","","[u3?^k4" -"Jv","`F?U","92]","","B:","<+sO|rg" -"\IO9lcAD","IZ*VuA}qxb","2\#zO","F)%d","3D~HCj","bs']M" -"6d6V","""","z%Gc%T?|","^XUF{d","wj}Rrg\Vl|","""/fQE+0J" -"V-()QED""L","1y","r","UDV","3Q>0GM/","","&pR{qC$","=q","Qfu``/","#yA" -"W^R&4","+","_HHxJRL","~+Mn'|gs","9[SQh]","wNzqV}" -"*je*sKQT","R%X^S#C'q","""","-f}^2\6","B!+u%gd""yB","m" -":<","T>hT",")P6Y3","C>","c_w$MySQF]","N" -"?\)H",",!I4G}$e8","rf4|=q'E/Y","\@v=V","cAi=a","3pJa*[d-" -"Ocn@Z$z<+","?k","","wD4MH1xc#","_byG$% t","!C6E=``@*" -"w6$B","p","iP-","]cj","hQ!i<)","erz=2C%,." -"Nw7^`;#3b,","JG/$N","!aAOC","\","~mZn8fb<;l","}UK% 8QL" -"^y!ZvbA:B","Z4mZ4riw","X","fzgiH^~o*6","E","J.&7" -"@6H5",")","d","70CM","y",";xQ@?" -"'","akxgy>NC","UJS","fTSh|`S","""%""isoHd","" -"pT1@0=x","p,i","KBH","w;KA->iE_G","ZYm(","+k=4D}6+H" -"P4Au+$V7Y","o;%>E8","{5",">","\","" -";`""H,v ","","0iN)","qWS7\Hj3R","U:\p}]","0*Su@" -"YBik""tKo","Wv_S4UZ","q?-#[Rf/vR","G","+(","N$ea1" -"Q","^R\Wx","{","`;$$R;}uX","n@nz?6u","b],'zR)P" -"haBm:",",1$","YY","","E71%z","" -"@","Revc","4sScb","fy4m","D=i?10X}P","|rtBrZgcoH" -"8yE4fWPl(","#eq5`.Tj6}","[/)","","","7F*2Q-" -"((K'Rb","hb,c","@i7KT)qJ.!","&WT1$W+","o","=NtVGs/z" -"P?I#!{k","p$","","?Ark)YUq6c","&NTxt","" -"V","W*M","QhXxQ>ZM)V",",Ss^","mwUN","V" -"L%pOM","s&%""e","|.0","","W;kC`a;^""]","v0x2s" -"Q","PHd;","y","p?)ofu BHd","+8","H6q~M" -"f^","9/","[","","9>3MClis","q"")@Xk$^c%" -"PJpB_F","T","","z;8\=:5LY","!)M4N_KS|b","o" -"","-rMJC","A_7U}#H","""cG!NW+jy","x+{A","UiW=|*" -"M","3p","|js&~(W""o","m^o3","K:oWx'}7FF","vKpA?\WR<" -".Z'Toi3.","Kw3M5'","D{)`J|p%","y> <",")Tzjh?/5;""","hkHe2dg/" -"F","","YQ#bjKU","|oyIi.Pn","X%lZJ%G","4p`$gA" -"0<3BcF>","mj#?'cr","?eg","?c\gBxpIL","C^V","4h+/}>2" -"|Gyedrt","&U8j-39",",o{OR|#K&","e*+{TfoLt","7#EHo&yK","-l),i@5@sy" -"( Ru-","8YA_.{ lbA","B","?1","Y?q18G]:","F" -"`"," {@yUR`","N%sfb]._}","2+H","a?(","~488\v,~" -"e%}/?__","1m|&Zwk\H","m;y0J","A?&_bN)","*{YY4g mOv","" -"+o+1~PR^rP","9s:","9[","{","","vSm,]mcX" -"v:Uc","","zmyt","D?hl.Q)_ ","M3`U&^u)","'|b0""I" -"$!Y","`l[rU","P*SX0*7ews","E4tEEV","r4Mc$i?Y","x`-43E" -"XFz","ICV{D","eFh{;F.:","H}L(F8","EFq","UE:7WM7E^" -"","","/",">mK|c?""","fFRcp *!","O" -"","uP4b","","+","WYE+","@*|s}GBT|" -"-1|U","; 0i3FvNS","","U",">Z?`X" -");UmU,5L)U","X0LaKcd","o#"," #f5m]7l",";Vk[u","YD~H3]4 f^" -"@<^43=q|","9J3_Px-_),","(B4s","H'E&","Azb3n","nkLm%@cG","%yh]S\#nbQ" -"yl8%1 Z<","%3+}","|ElVJ","qYMWxz","-O2E","z" -"/~Z}]!Y[","^s>/.","]r*","6G>","W4-","P9%%W28CrK" -"f}hbE",".{w(H.sVl","<","+yR;f$","Z_R","" -"@""^=KMw+&aV=","q>SH7K","X=","YrPU@Qz}" -"R='#.C","%V7VRk","m](y.J",";","],#","/" -"j^;6V","~aY""ZoE","-4~pU""q9 z","Hfy't40","%k$!cb","` t f" -"T,Oyx)dBN","E,","iOWQ`","qUSyf","Gic)PI\","4" -"","b7'-v","mrR""[}68,z","z","1~LW","MEx0E=" -"$7","=","OPyk[tg","T|Jv>","","|}MiE8*\b0" -"xg?ey","r&%L9`&O","E6V]U","Uo^lp_","Jd#","JHC" -"75r","Dm8""","PKDe(jR@","Q|3]{I6,~G","g","x_Z*}" -"+.+",".Q"," H 4&i"," r9x;]?","L$FE#|b`%d","Km%5*Y,=Z{" -"t),H>6^mo","T]v|=?W)","Gq","U6m"",","Iv M","STWnPUuF" -"S_28GTA$/","cy_m(3?.","%Esg;RS^F?7" -"*Lm*BZ;1","","{}:4[j.","","T","w2e:|" -"bn>vI","1wRW=$#hBO","l","aWbEFt.","geWriwB",">" -"[,2""N3N1F","2np3C","F>HPSX","P$NF3,N*\","`","%." -"j*@Vckc","q:a","""5","Au!lI)","","" -""," 2*7g,dY","","zcz5O","Jd4",";Q~U7" -"'r`G","0:-l~C%",";{6bGzD","fzc""w#+2hB","5 .ec",">L*.c+9" -"bLrT9|.","&","BuGS3",";W-;+","","Y8Sg<5AF""" -"t[){H{C","7P)M"," 8J","]G7","uxnCx72","#" -"9Jpg;,S40U","7~,]","pB9I","""F","O","KX<" -"S7D+""Ct?,m","K3y/tj","","hBn'@6;Q","^*,@fi",">I)JxVCGjS" -"",";IC]JIRG","#@","K","!`wp","C#!Lq`ouC" -"\D&{2<7","A)vo{?u","",">","][F","|" -"o,h","VZ,L[K/a?","""%","q'RP_={?","}L]?","/f#W","Sgg`" -"xjzKX","","FgVv","UP7","D'","" -"&","HJot_~M-","Iz","","hl*?wrgh"";","r.j8*" -"cw\34","y%sO=Xx","!'1b!YH","KR","k?daX23=#","R/G" -"&Gd_P","6Uotb;w-","{f,ub","qY0#|=g","Y+@RF3~","yF" -"cyj? /&fo","(o!i","M}W1O","o!sNA[HtT","E/<%Z !Z;","gMGl#t" -"_FWHy","0=|0""<6jb*"," {l7jc,h","","RE<0N5lhD","#msM7=" -"M","h1>y","Rae]'L6"," WxK$",";","WCJu" -"Jn<","Mx/~Gb]cE,_]F" -"$(GZ'.a@|","P*","F[R@~","QC""nTGV[|","Gqx","" -"B$j4S.QyR "," @ub/","Q;-{Rg&","=","mp}cqJ" -"K",".;p-:cf],B",",d.ahp?<","Ax2'E.d2bW","","""N" -"","tmw#$!W4","X wR|2","J","M`py!r9-","u*>" -"Uah","","^vGgUW","_a=","q","?8" -"Kk!","3","-dAP]|WlTd","2daZ 4$M","Sm:%J|J","|4.Y0]FG*=" -"T(zz47nK","rrW!","+m6&","$>O","*b?8/","3Z&0vdO" -"","""1#Wzhd|Q","znf","Ix^_U","B""!<","]" -"YD","j+P6yT","}qELaS","Poi,1DYx5y","9","JAFlfy39F" -"""_A1","!Gz8FKW|Q","gK3xAlVP","h{[J]g","Mp^XsE={",",~""@{O=a9" -"|5}%ou{h","","rEt0m$+","3H}","/agu""#I(","ZA8" -"rTg","C|JOy""K","PAiUKV(>sm","9d%*oE't","k]xpx1C","Mn" -"FIFq\ +","t","","PF?4J","KiV)9rDEWa","&!!a" -"HZF`-Bl","*3T)/2>5ZT","k","4_=2","D*&","T$Reie3o" -"[?N1^","v_qS#k@5F ","","qQ=JSLC","g8J340B:","VpJ" -"#","8!o#?9fD;W8[&%","W5dd*H|","w!+N#2'Kv","","1z" -"A","?U-:+9$Ad","fgG(5$xfYB","be{|1\v+8N","bjh]GeV","U" -"t_q ho","IAN>9OHx ","Nz#i;","","","q3&Ee&4KU" -"k","e","1M@K)D","<%]x:","g@ucMqR","cEU" -"h2{z1","?4/","","","","a<(" -"","l2e6","CT","S7C4osiM!",">h'cl.t/X","yM70tqVeJ" -"5W~n0\","A:&{Ct","Q|~","!j?Q2-","","oZzcS|BOk*" -"","@m9W: 1PY+","d'","T6Z@XI8#","*C","{WY0" -"c|oq^LLWk","c","v~:H","TUjFM2W`#S","+J>E","fRd44" -"","-k_+,H-P+<","j,nLk@","wU16tnz","IB/(#b","],}l<","A(4{hV\S","EU1fDRJDK?","th2M{@VM" -"dd7'7F","u","ez[F\=/","-ND",".%{f|@r@J","}",".r4/b[2+" -"$","|Hl})","mAi^/0%,","","M","42Q1zn2Fj" -"","~kIZCuW|Y","@a;&\W""sVM","""js;V","Ty""-","udU';ci" -"","C@l-Xr=",";4o","FAciX1_.x{","","X" -"Xo=}hYQA","OdLO5~D","GOou_fr","%h|"," iaH)6MCG","Pm?|EKwe=" -"reI:O","rO0","geUs",")","$1'{C)sTH","dF^m,s48/" -"\`A","iCt&`","SQ%x4H>","S","eNJB","F$v=" -"Y4@#","Zx","b;Lzw52FR2","WR","w^21u"" ","c" -"vza hr","h*"""," vr","bu^3R:>tx","'","[" -"","nz(Mu","1Y?<","WY","^","+R.'D7~-V|" -"[","M_0V?}g","4&yc?/.V","v+yw""2N}j=","C","q^G*d<#cOt" -"","[G?YXdCQ8","y","gS2","","GK'ws#@b%","gz_L:!P\R","yjF","K+j5dt","""u*c&z","H" -">ccvc =Y=",",lfu","ob[@GMfb\N","DJYb*-`""","GZ`j?Um~E~","-j/Wl?!}U^" -"TP8ng:k|c","","#Dy[-M[0S","@b'O1rt","fs'","wm;YJd" -"g""vzo=7~j:","#C'.JT","af""<6"")","Uk8u","P00^t:%kI " -"fYg%",";'EvJ)""",",g1~Bn""","HOgS(*iG",",N4][1","`>Qg7'hb" -"j:C^/D&","L}" -"y","3KHns2","yphC]>","g2^","iz","c49k$t>%&j" -"_B5~%W4",">mYNa|)LQ&","|h`O3F","$c" -",B..bVR","PBp%ghU","i","6-n;|w","(?fll%2","v>\w7ZO}>S" -"+}8","+A^","=nEbX;T=kl","/)r.",")7R" -"c(TUPDMq9","S$Y","!{H","ar&s""}X","]n9^ynwJ","KA^XuPC" -"G=@{ |4tp","x","","Q%g'bU*>ko","","8/;_x!&d" -"Eye%U sT","D!vqs,",",/-dIm['","b$6ns","!O4&B","w2-FQ5" -"","vb","Ag","Iz","xAq","Sg/0" -"Ci","Gr_x","rZ.bLnI_n`","IF`&&","<\8x","(Dgo""","%RK>]iM|","G&N" -"g&","MuXViHSk",";sqY..}Qa","]x6","GQfWk/|m",">+{6FTcJ" -"","8eQ9T+","/#c-U[..","6s{","#_'E","56E" -"tJ{)","IazQ","st","}J`& ","pBX6d","7_yYf\kW}" -"r[d|?PuJx","","HHK1 >X","uC",">WJf}[86m","1#" -"FBzo 4PP50D","x","a5=Q|Gp","VMc1PB","0pWSRoYZx" -"#Oy=/-T","EN>S3I^","g`","hKRa]","tX","8" -"Lu&","SI","|>cxM(","B","&HK#%-$a1","Ep" -")V=@P+ ","bNbg","W"," R%w","U-;2Y","" -"kp.~#P{","10C .ckv|v","/rh_7j","vC/","Be6]Ah0s8n","8_s@]","K6EN","JIi,""bWH;g","IpmjQ " -"q3""hoZ-","u{(=+GD!","","","WWs","6t[" -"aL*GReab","g","]xy(zaP","f","=5+kzD","|l8&" -"{}Z`o_","2nro$","mZ Nx},it\",")^~O2Xg<","","=v?" -"]A#4=YjX~","","a7L","Vi6KCa","n-MKd{%^J2","vSCEKmv" -"Qr>","dK",")v`V\","|PyobH;`D","t4","$6","" -"\L}Os","PubF`","7\b?'p","","n19&@B","Q!vM5" -"<&Dl7![","z1*0","/C0;tyxCW","mx~",":lK38^$","w)F" -"=ST:y};;6m","kIja&","$h""nqTG?QX","Mv" -")2M8g\j&","9 ","M.SAW4:""","DX*%","LjMZ]-","V2Y_" -"X|LW.","","ADMXR%rM","+*","}3*Uv ","&" -"`<","r~%h:O(","v--@~@Z_","AWrujA%9ksC","@/",".^p(!" -"7n","[",">bsF","0&i4rnFUn)","\z\$-","5" -"s=zO_X:V","1]X","+2-=","","|$","F({0B9AzL)" -"[l^P","Qsnx:6'","W,R8qFs4X:","XE","B5Hv%u","z#>" -"DgGoEDI|}","#2eDN>0","a","I([""Z" -"O","E",">O","yia.Z","!W","Wst" -"rieJAB)j","Jh>X0'W","0%[Tbb1wU","yu\r!bR&oJ","mL{:Y","" -"g)+9v","\V7G","","i65","u1z""","mwMA0mduA" -"""] Mmz0x","W)Z7Z]I.","Y>Gy?s~","B^VT/[","!1Po*","GRTX)#s8""" -"Qg","D","f","F:;ZMn","","^z" -"m!N+>,G>","rBM)f","S/WddM","*7x~bK?~",":rGV#_=OLS","8*uQ,c" -"NV]byBNum=","]j?#zg&Q""","",",>WC&q","a&ggxHA","6","S","S","vB`v\$X\" -" $I>Qn(","F$vCj}W^""","f,m$(`","Tk&1","g","" -"F""r_833","M","","@:W$gx","rZdtt)y","S1 " -"}I+H?^U","@hvC3b!|L,","O","","nu z9>%#bt}","UnXI/vn-" -"@\6 ","z,fUI78CJ","uqM,A+|[~","~86o","Ttg\v","'W&'.!S|" -"(]+1","DWn>pl0y","5>pp{","pE:","t""n4ovOCp","q9^Nt" -"i","7XNxL.","Y@E2~}Ua?T","NvkqS;","b+XAuT~'tg","{IH" -"","2A)","t?-N)j","uOVY","&-EZa","`" -"E52JNq=h<","iPtlx","Y","","faS","p+Y""o" -"{$]","=S>&n","Q&V","IAYvv","2!_Nzwu8","]fB," -"i2=",">UW","","O{1@""V@nqa","CK","T" -"U%","T","F","-93t\^>","0","Vd" -",m_G&8""\99","-H`NpPZM","!8TxU^","`CKOAeq","T[lX&""4","" -";=t",":l<2DTlM","e7tof`Qgz","pm-xU:m","uffMI!%R","6.R" -"f:^k|)$","8j;c SN""y#","::[^#t%flO",">y[","lYlT2Lh","x\|jiZC=kb" -"$OEjV!'","L","iJbq(/t*P","cn>p<|O\","%c","_&IRa0L" -"""","uq3"," \_u","'+.z+'EcHU","+vjE8","" -"@1Q(^","q!HDi","5 J)22","Z","Hr_;WiMS","6q" -"w$(iH|P","]Q","q86n/","aemHb","S%J3,>3","j\>9/kZw" -";F","*4","[a)2;4","m;*R","B3(pp%","|s6C]" -"N0xX","gK$48$i","" -"LC4Mu","","~MP,U,-g6","0x ({8G^ ","","tL5zhiA|Q" -"drlO","$F\3 95","\","w^n( ^","","uA BKj" -"",".^p+]_D'C>","(r/=:*","(&*#7a.",""," L 2" -"b01`BI&dTL",")$Qd","","YKZw","rs","V""q?W","r]\AR%9eQ","ar2 (X" -"""Q*?lEd","Mr7aZ",">y76","iK","is","wQ" -"_$MJZ","6""%\-","Ea]","$","","" -"\p","vMKAJE(]","Qv"," ;.+w5$","_I~","<.DUo/H7" -">^{","afP:>acaF+","&)Cy","*nyEfBQj;:","EC?=KR}","+7" -"1&vw9Ao","A\C""2!xul(","1|{mLsD","9cSg)y194","WKTG'_!c.",";x!?YBad+" -"","","sN+","","w5w","8J2w6cg*" -"E","6,WQ:}G-H","","1C","5","1" -"cMk","WCj.J{:","f=&4","m^3^","RU","" -"b-~5b^P-O","p%4XTKcK|","od","b5",":",";L!q" -"g\T&","X$vd[#",",PM""H""","a","S Ja]E","$dJ]8" -"<'e#%x","n ","""nfqy","2U","O","yY" -"]S","m","rwU{1YoBts","hf7~qC+,wl","=&P?","<$g" -"K6s#","s}Yz;","aw","S0Gl","Y""IO^C","g[Dj" -"1UuW?- ","lO\","!W)kOeH2OK","","QV!oGl I%","" -"MH$ 2","",">DlLK","[U<-0","","g" -"KZ","","CL&e1nnJG`","e","8&[8\X>a","jJS" -"Z",".3eN\","eW' tBt","+u}:=X","UxJUIs~W^-","TN" -"!mMfsPH","HFNPePB","","Xs^#VQp","K .>g,N","> *_d-" -"{)]y""","(]Z4%","?HL{,#3[NT","","|)-Gm$DVV","" -"O","","vF2@q""","i0","i-=/`k7","yH)-$h0B^" -"F%mKA","O#Cx:]t","J~{,V&","Y^>""V*","v/QKA""","VU7FI0" -"Bt<>","3NNIq","Xb2""\ju7nm","gnKl]","jk3(`l","'\>t vwR" -"ZY","}[J))N%R","","","4Wmf","RK" -"aH&Zd!KIDR",",?ZMK?&v79","A","h1v","K%9~""Arg8=","S&","Lo|8","yeP$IgQ-u"," 2_2}fw","S'CH" -">f{Y","Nk","5q[EGW[","M[n{V\~","_-'b","" -"u/3S\~","m3j7:.JjF0","PH3(yO4@ k","^7?M+m\-z,","K",";<|gC$=Qo" -"\mjYcUz","?uhpF1N=ao","","{F`cP","hzx$EV1h","" -"G%"," OQf{?UJ","%U>>w[[","+|W)E:xR#/","0","QRp" -"d9J;.(VV","G{MC5","^z","}E|p[","H!hX0/",".')Kn#OU#u" -"ym","CnD=D","w;E2:t","g728X.XV'","Od4c:","[uq" -".eDWg","","yw","","H%u","+f!>V&N3 T" -"pA5""(P","t+","","L\36R","*lOLX8[>IY","#&""B[K" -"3\$Ho","f","F!sU!5JE!","baZjc","DVFA","yH&cnw{hJ$" -"""= d(Uu","6.8","QtHv","wltHY}kP","=?F"," /AuX","u$jdzb","sl~BeJgoZy" -"|O>nuG","={.Q>DKh","]o5","x-I\J","]fv F","61Bh7S-" -"<","ZU}""6\",":gR","Y""Fr-tK","Y90yK","w}" -"""EZ[,^dq","u$K]glZ]fX","o""3 b","7,DfS8""EH)",":[XN","rk5~" -"","^:","8.}","&C{,B3)","{ Q^66YOjx","N7|hz+J" -"')Gi(QfwRV","s8|tR&H","C2L>r~'Q","","""g!8WWDydX","_8)v3#QZc," -"UI%*Z+EaC n/T*0","5Qj6q&",",I!9Yf)-","O7""h$","cc};2[W/H ","qi." -"#f&Xc!8_","L/+Sv","-|N-OTo3j",";G]R","9zhHI$[(TA","?cr2"":" -"+(OUct<;TV",".U","imZSB","6bZ3n p{",")w3|,AJ7a","pXq" -"tZZ=2tjg","s:KP]","0\I","hCT9Y","}1k"," OHsW" -"","","ftw40/,","OIT3z2yp&K","","lDAFzM6z" -"","x:1FVv","(-i}","6SZ5`FfS","*$yk","ST%Y" -"B[","6`u{","c","mRb5" -"<}CxG","wdS1l" -"v!K&ctH","9-tk","L8DKsx1E3*","YnI&&(!3!D","dfNpbnp","$Z+TlYK" -"\Jw@%Z","8>Rv?Vamp","&45","0vJlPq","@|-6 '","i:" -",B4E","28","8Ese|pGFa","s","/'up,-",">#In," -"Dcr)4'KN","","5`kb$","'uMK;X",",H.","_K>4}eq-" -"<\r= ,","/MT=6","4Zf5Y","q","X>hcA?n","xL}u%PV" -"C","T2OE","Q'ptg={w$}","dolr5\","hhG}l0O5]","M" -"","P8$","6)Vfr<","1sF)}?=.mf","`7!Zb","" -"0)","h?<)X","|9xwC d","uxU","%CXVw$U","rTFHWR" -".4N(h:8","","ykN5F5bg%}",".@M%t","KP,""ZiX","k?e\b{E:" -"z}zN7v.iJh","+L:BY*'","c","YN=PxD]e^","x[i'NTtO(","8:*zHd" -"xw","o2m,U=","Y","G[Z<>ln","h)d>","/cre+6}" -"xd","OV4.,#3d","KMbT7Z","Jv ","mW|g-/c","fJ\" -"{<|(!P","""uP]z;io",">39","JC","JL*7i%1","qy%n*!" -"Efqv+19gb",",^","(""c(","]9ZhpF+""V}","&lf=cA`~o9","pxnqY!^" -"P","n?","/~QJg`$$6","7XA","j!Al","^7mg" -"y0/Q,pS","/G|FD&=eH","LZQ4oH\{F","i","K!+mU6","u!YAg4" -"=|-f<","=cpf","F[bW&=x?","G1s7w+","0[e7Lqk@N-","Q\p{vW6""O/" -"pG}4J}##","/nU56phs","0%wr%^4,S","""","cJcRi.Sj)","R," -"G","","","(2_l|doqUR","F0FF",",F^" -"[#*'","/rd","^- +HT\!&i","Av?t B","z:jL|{","/" -"bC'W","r98","Fy]","}\1+rzKI_W","y","9T{vO" -"-fk0~4","CV=a2sl+$$","w$~I\T","{vRXai","u","WT" -"5","0hY","jhk}#Ef\","m^tv2*[(","7*","}XR$AM}Io" -"RPk","","yAaG","t1","hNzKKop","{)RG" -"","9c","}EDN^+","%l","2","099=:" -"T!A| }RR","$G^u","a]J:Z9S","A2md{@7b","%>K*afb6O","""'W ~Rtz" -"!j7@sH'S","]Z","`tCQR}","!X'}(2","$`)J^]","A4a)" -"s","eXI!,AOn","=!e:D","96","-4&","B#wJOP" -"S2 ","ae!rLIGc3","_.<","@lkfd9:R","mFw#)s}O",",_","N24NK","^9])","=Fl" -"mA","c-EU","W|v","^dP)","{P59","{n=OSV~" -"h&0zs6","@/,a9]sv","N~","J\R)7B","^A|U","2f~l4w" -"?Z;cu.","1?#^eU","W^otY","A","+JAX","LA;","t" -"pexG4{","m([kDbr#","H)",">S}n/Yp;","h5gRE","gZr3ll8N" -"lEr","5_1fz@AUi","MC","=Wy5u%","~","{aeJEa;0 " -"r","gl-q{~","Ar5","#}1Ks!5'K","w$FC","r5!" -"f","i","<-\[@X4l&","tJ#=","j~SZU86,B,","Cd>9s\~`WG" -"qV[Nvy}RGz","AahvU-I,A6","s\I`;GQ5b","G/mPIa1}","._m","E8aZ!lZvB" -"YZw-> ","{}UK","kzw_9g" -"vuY\7!K!Z5","qE\?","Qi;","Gw6NLB. ;","","b[kw:M*" -"b%","G","xqjT+B>7M","%IR^pRgW4f","J.@V;p{","vhcJ+V" -"h""","K(R=SZJ","^PdEa%^R","@S#oT","T?+""","$C#;o]94;" -"9","n","=fl","P3j#(m","EsdN","60""oa" -"#w*l","CR","GPo""","J""{nZ C;","nKY:P8",";t'2" -"8OU=`","n)9rtw {>","YchZ$dap","","tnnM[8","P" -"Gc""","","","J'Ws","n0DRQ4","FY=Z+" -"_c.bgs","L,m4lr-","t""!zm+z?","","""","RGQ||" -"",",Q@e","k^N@5Q(1z`","","p<9C[",");{<" -"D-gAzD1UEp","b","e.Q6>W","@","UPZ`MTb} ","" -"%A T0[XV""","BK/@?$2;","A.we","mq/uaN~","?=h5L""dLOw",";.n]mr1" -"K","z/HBrSj","j/f","-tp5","dk6]l;tn","vEf2q" -"`8F|_1l07z","!T?","a34HX!4A",")?Lj3Q%,O" -"XbA~","!(0VBdS\a","y2+1","","se","x]" -"j8|","zpuMz","Zx!.^","pE,Q","+","O1}g&" -"-Rj3z&","22","7fgr'b","P*YUXoGzOL","Id","7@6('" -"","~Mn!","zU|U","","mK*rw0","r\Thj" -"'ES^=V",";%~E$fUc","","6/J?","7p8V+'D""tQ","WN?)|9;_sK" -"X?fx""","","","|","[FCyM8","lt1" -"Q:6_NG8"," M","5vO1~","aeL$>K;","({0Y|gn,N{","#[=F0@" -"ws'erE4myY","0spk|3QK","_pIarmCx","nv0""H$wt0T","3v#P","4XJn","a7" -"*+EH4D","8Mkt1D","","y@PpS\D","_>$GB&","5$Tc5" -";","D","|","u}O","NQ0j}4$$","E@]`z9'(" -"Xm^S5rm;%<","PRd","","Fr~-8","cK2P%-> ,v","","1","/Uz" -"(82+{8",">#6f","~%p?+","XGib 7QuID" -"9o:4n[7(+T","fWk~}<|3",">","b","G/E?F","UNpx4Z8" -"I^]W,M5|P","C7","TbKD:N YD","R|'\%","`Ub!1","{*f" -"H",">=","Bu|wuQ?","HegP",".A*&4x<;&f","FLuhcOB" -"e!)","JB$Q`X0F","M","8bg{","_ imFTj~~T","HW:" -"M*x","% +x:p/O","","K[^P&Ux'","O=Oq","k|Y" -"","Cp.a5!","0gg__6G/By","L#(CMmio","",">E""K" -"#`7=j","J","","","L>$py/","R)q3CTl" -"i.","D=","%_>On#]B","" -"","1jfHH","gI/[Y""","#b!k","B|^4#DNcP",":" -"","_wv[3","nC~TVh>G2","YCy=uRO3/","0%++b[v","3dY=AF" -"","bd","D}*vg2CH53","-~","-7i}_U[&","f[O^oGx" -"!/m `(Q4#%","^,ghnAK","ry=md_r<_x","6!+zjh@h",")/","/(" -"(2$S8","=''0]","","","u}+G=f5`","[@-" -"2Xg" -"","+N`#JAwY&","h&","Dz~~8N]7H3","(NCI>jmu","aHy!P9/%Ba" -"&=#","Yq'W","'M6bl","nuUh>K",",M","2K_eT8YS%" -"1""[,8H","jT-)","J9ix(RDM,","}","ky~,'m Jn" -"$","","VVjnJ","$z]j","Bo|Mtn(wGo",".m" -"p","9JK4",")Uo|34ojc","","I\wE{","b\|H1w[iR" -"N.r}Z!","YsgQ","G3cUX","Nby5_",")d0","9([?z" -"UIJO~cs7","[ZHr","l')h/G~","83M","n","f*+YXo","XRXcm\(^+|" -"LS4hCw8","}`uu{ ","O>r v#!",".8","e","RXxFv" -"","4F^nM}n*","'gehCKSk2J","\JY]","q","s53" -"V~F.j,j6t","nq","{@\##Ol","","ij2","'k^t(b" -"0","J/6[Jf%j","?*wS!|_44","","CH,Z","]Y*" -"s~%/!UT","v","6..v1","H,","7zuN""?8","Kmk1D[i","?@j@p~-8Je","p90y9 Iy" -"","Sk6|vQ&lmF","8H(G'&5Ts"," !t","\/Y","MAJGBxi" -"|DkfGX8\","4-o=R*B'L","mp8G4kY","7O^S","i$5MQ=yt","Ab&U","g`etY{;H*)","","Xv","q","6ky6" -"=tEtq&","","DfR`2W","9NE","yF'P*P ","c" -"=B","O[7)3bo","<=7T3eC@&Z","","i","o.B4" -"?#[h/8\a","9f","qaG7p6x]F&","'gSreOQwR","/E }r9","" -"","","F+k4j]F",")O*d","","k7s VlaK)h" -"=d{jlC","B","tJ'^8nb","_""e%6,lU","0:","=" -"^v?bc","~<","c","~$u6I)lB","n","aF," -"s",":WMDU&[","&@""~+G","N","by","g0$LD;?""S+" -"M]",")Zz({Rw","eK*53J","S8vOP=Er","@EkS|8","" -"1x9b","No@","3a","","YQ?]XA#",">zc" -"?p~F]","JG]E}C","Kf '!P`4","(","sI""p=W?)I","5<9T" -"IEj+\]|r9","","+ uB","sxb","}.c","+BJ`!C29Nl" -"6zkl4=z","{\b9Nt[","R\=8S$","=bCc1","/","" -" ","i4m'$T KH\",",-[V1gyE",",3vPcP0","u","ju.sNB*Y" -"j)E/7>]l/n","}R/<8","[","[m90:G","","Mpfb" -"aW,7$7XC","q-","6Cx!yp","j","+kA!7g","l,2(S7/ev4" \ No newline at end of file diff --git a/pythonFiles/tests/ipython/scripts.py b/pythonFiles/tests/ipython/scripts.py deleted file mode 100644 index cf015de053e0..000000000000 --- a/pythonFiles/tests/ipython/scripts.py +++ /dev/null @@ -1,108 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. -import re -import os -import json -import sys -import imp - - -def check_for_ipython(): - if int(sys.version[0]) >= 3: - try: - from IPython import get_ipython - - return not get_ipython() == None - except ImportError: - pass - return False - - -def execute_script(file, replace_dict=dict([])): - from IPython import get_ipython - - regex = ( - re.compile("|".join(replace_dict.keys())) - if len(replace_dict.keys()) > 0 - else None - ) - - # Open the file. Read all lines into a string - contents = "" - with open(file, "r") as fp: - for line in fp: - # Replace the key value pairs - contents += ( - line - if regex == None - else regex.sub(lambda m: replace_dict[m.group()], line) - ) - - # Execute this script as a cell - result = get_ipython().run_cell(contents) - return result.success - - -def get_variables(capsys): - path = os.path.dirname(os.path.abspath(__file__)) - file = os.path.abspath(os.path.join(path, "./getJupyterVariableList.py")) - if execute_script(file): - read_out = capsys.readouterr() - return json.loads(read_out.out) - else: - raise Exception("Getting variables failed.") - - -def find_variable_json(varList, varName): - for sub in varList: - if sub["name"] == varName: - return sub - - -def get_variable_value(variables, name, capsys): - varJson = find_variable_json(variables, name) - path = os.path.dirname(os.path.abspath(__file__)) - file = os.path.abspath(os.path.join(path, "./getJupyterVariableValue.py")) - keys = dict([("_VSCode_JupyterTestValue", json.dumps(varJson))]) - if execute_script(file, keys): - read_out = capsys.readouterr() - return json.loads(read_out.out)["value"] - else: - raise Exception("Getting variable value failed.") - - -def get_data_frame_info(variables, name, capsys): - varJson = find_variable_json(variables, name) - path = os.path.dirname(os.path.abspath(__file__)) - file = os.path.abspath( - os.path.join( - path, "../../vscode_datascience_helpers/getJupyterVariableDataFrameInfo.py" - ) - ) - keys = dict([("_VSCode_JupyterTestValue", json.dumps(varJson))]) - if execute_script(file, keys): - read_out = capsys.readouterr() - return json.loads(read_out.out) - else: - raise Exception("Get dataframe info failed.") - - -def get_data_frame_rows(varJson, start, end, capsys): - path = os.path.dirname(os.path.abspath(__file__)) - file = os.path.abspath( - os.path.join( - path, "../../vscode_datascience_helpers/getJupyterVariableDataFrameRows.py" - ) - ) - keys = dict( - [ - ("_VSCode_JupyterTestValue", json.dumps(varJson)), - ("_VSCode_JupyterStartRow", str(start)), - ("_VSCode_JupyterEndRow", str(end)), - ] - ) - if execute_script(file, keys): - read_out = capsys.readouterr() - return json.loads(read_out.out) - else: - raise Exception("Getting dataframe rows failed.") diff --git a/pythonFiles/tests/ipython/test_variables.py b/pythonFiles/tests/ipython/test_variables.py deleted file mode 100644 index 6519607c2fbe..000000000000 --- a/pythonFiles/tests/ipython/test_variables.py +++ /dev/null @@ -1,167 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import pytest -import sys -import os -import json -from .scripts import ( - get_variable_value, - get_variables, - get_data_frame_info, - get_data_frame_rows, - check_for_ipython, -) -import imp - -haveIPython = check_for_ipython() - - -@pytest.mark.skipif( - not haveIPython, reason="Can't run variable tests without IPython console" -) -def test_variable_list(capsys): - from IPython import get_ipython - - # Execute a single cell before we get the variables. - get_ipython().run_cell("x = 3\r\ny = 4\r\nz=5") - vars = get_variables(capsys) - have_x = False - have_y = False - have_z = False - for sub in vars: - have_x |= sub["name"] == "x" - have_y |= sub["name"] == "y" - have_z |= sub["name"] == "z" - assert have_x - assert have_y - assert have_z - - -@pytest.mark.skipif( - not haveIPython, reason="Can't run variable tests without IPython console" -) -def test_variable_value(capsys): - from IPython import get_ipython - - # Execute a single cell before we get the variables. This is the variable we'll look for. - get_ipython().run_cell("x = 3") - vars = get_variables(capsys) - varx_value = get_variable_value(vars, "x", capsys) - assert varx_value - assert varx_value == "3" - - -@pytest.mark.skipif( - not haveIPython, reason="Can't run variable tests without IPython console" -) -def test_dataframe_info(capsys): - from IPython import get_ipython - - # Setup some different types - get_ipython().run_cell( - """ -import pandas as pd -import numpy as np -ls = list([10, 20, 30, 40]) -df = pd.DataFrame(ls) -se = pd.Series(ls) -np1 = np.array(ls) -np2 = np.array([[1, 2, 3], [4, 5, 6]]) -dict1 = {'Name': 'Zara', 'Age': 7, 'Class': 'First'} -obj = {} -col = pd.Series(data=np.random.random_sample((7,))*100) -dfInit = {} -idx = pd.date_range('2007-01-01', periods=7, freq='M') -for i in range(30): - dfInit[i] = col -dfInit['idx'] = idx -df2 = pd.DataFrame(dfInit).set_index('idx') -df3 = df2.iloc[:, [0,1]] -se2 = df2.loc[df2.index[0], :] -""" - ) - vars = get_variables(capsys) - df = get_variable_value(vars, "df", capsys) - se = get_variable_value(vars, "se", capsys) - np = get_variable_value(vars, "np1", capsys) - np2 = get_variable_value(vars, "np2", capsys) - ls = get_variable_value(vars, "ls", capsys) - obj = get_variable_value(vars, "obj", capsys) - df3 = get_variable_value(vars, "df3", capsys) - se2 = get_variable_value(vars, "se2", capsys) - dict1 = get_variable_value(vars, "dict1", capsys) - assert df - assert se - assert np - assert ls - assert obj - assert df3 - assert se2 - assert dict1 - verify_dataframe_info(vars, "df", "index", capsys, True) - verify_dataframe_info(vars, "se", "index", capsys, True) - verify_dataframe_info(vars, "np1", "index", capsys, True) - verify_dataframe_info(vars, "ls", "index", capsys, True) - verify_dataframe_info(vars, "np2", "index", capsys, True) - verify_dataframe_info(vars, "obj", "index", capsys, False) - verify_dataframe_info(vars, "df3", "idx", capsys, True) - verify_dataframe_info(vars, "se2", "index", capsys, True) - verify_dataframe_info(vars, "df2", "idx", capsys, True) - verify_dataframe_info(vars, "dict1", "index", capsys, True) - - -def verify_dataframe_info(vars, name, indexColumn, capsys, hasInfo): - info = get_data_frame_info(vars, name, capsys) - assert info - assert "columns" in info - assert len(info["columns"]) > 0 if hasInfo else True - assert "rowCount" in info - if hasInfo: - assert info["rowCount"] > 0 - assert info["indexColumn"] - assert info["indexColumn"] == indexColumn - - -@pytest.mark.skipif( - not haveIPython, reason="Can't run variable tests without IPython console" -) -def test_dataframe_rows(capsys): - from IPython import get_ipython - - # Setup some different types - path = os.path.dirname(os.path.abspath(__file__)) - file = os.path.abspath(os.path.join(path, "random.csv")) - file = file.replace("\\", "\\\\") - dfstr = "import pandas as pd\r\ndf = pd.read_csv('{}')".format(file) - get_ipython().run_cell(dfstr) - vars = get_variables(capsys) - df = get_variable_value(vars, "df", capsys) - assert df - info = get_data_frame_info(vars, "df", capsys) - assert "rowCount" in info - assert info["rowCount"] == 6000 - rows = get_data_frame_rows(info, 100, 200, capsys) - assert rows - assert rows["data"][0]["+h2"] == "Fy3 W[pMT[" - get_ipython().run_cell( - """ -import pandas as pd -import numpy as np -ls = list([10, 20, 30, 40]) -df = pd.DataFrame(ls) -se = pd.Series(ls) -np1 = np.array(ls) -np2 = np.array([[1, 2, 3], [4, 5, 6]]) -obj = {} -""" - ) - vars = get_variables(capsys) - np2 = get_variable_value(vars, "np2", capsys) - assert np2 - info = get_data_frame_info(vars, "np2", capsys) - assert "rowCount" in info - assert info["rowCount"] == 2 - rows = get_data_frame_rows(info, 0, 2, capsys) - assert rows - assert rows["data"][0] diff --git a/pythonFiles/tests/run_all.py b/pythonFiles/tests/run_all.py deleted file mode 100644 index ce5a62649962..000000000000 --- a/pythonFiles/tests/run_all.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -# Replace the "." entry. -import os.path -import sys - -sys.path[0] = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) - -from tests.__main__ import main, parse_args - - -if __name__ == "__main__": - mainkwargs, pytestargs = parse_args() - ec = main(pytestargs, **mainkwargs) - sys.exit(ec) diff --git a/pythonFiles/tests/test_normalize_for_interpreter.py b/pythonFiles/tests/test_normalize_for_interpreter.py deleted file mode 100644 index 37a2dce5cb7d..000000000000 --- a/pythonFiles/tests/test_normalize_for_interpreter.py +++ /dev/null @@ -1,122 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import pytest -import sys -import textwrap - -import normalizeForInterpreter - - -class TestNormalizationScript(object): - """Basic unit tests for the normalization script.""" - - @pytest.mark.skipif( - sys.version_info.major == 2, - reason="normalizeForInterpreter not working for 2.7, see GH #4805", - ) - def test_basicNormalization(self, capsys): - src = 'print("this is a test")' - normalizeForInterpreter.normalize_lines(src) - captured = capsys.readouterr() - assert captured.out == src - - @pytest.mark.skipif( - sys.version_info.major == 2, - reason="normalizeForInterpreter not working for 2.7, see GH #4805", - ) - def test_moreThanOneLine(self, capsys): - src = textwrap.dedent( - """\ - # Some rando comment - - def show_something(): - print("Something") - """ - ) - normalizeForInterpreter.normalize_lines(src) - captured = capsys.readouterr() - assert captured.out == src - - @pytest.mark.skipif( - sys.version_info.major == 2, - reason="normalizeForInterpreter not working for 2.7, see GH #4805", - ) - def test_withHangingIndent(self, capsys): - src = textwrap.dedent( - """\ - x = 22 - y = 30 - z = -10 - result = x + y + z - - if result == 42: - print("The answer to life, the universe, and everything") - """ - ) - normalizeForInterpreter.normalize_lines(src) - captured = capsys.readouterr() - assert captured.out == src - - @pytest.mark.skipif( - sys.version_info.major == 2, - reason="normalizeForInterpreter not working for 2.7, see GH #4805", - ) - def test_clearOutExtraneousNewlines(self, capsys): - src = textwrap.dedent( - """\ - value_x = 22 - - value_y = 30 - - value_z = -10 - - print(value_x + value_y + value_z) - - """ - ) - expectedResult = textwrap.dedent( - """\ - value_x = 22 - value_y = 30 - value_z = -10 - print(value_x + value_y + value_z) - - """ - ) - normalizeForInterpreter.normalize_lines(src) - result = capsys.readouterr() - assert result.out == expectedResult - - @pytest.mark.skipif( - sys.version_info.major == 2, - reason="normalizeForInterpreter not working for 2.7, see GH #4805", - ) - def test_clearOutExtraLinesAndWhitespace(self, capsys): - src = textwrap.dedent( - """\ - if True: - x = 22 - - y = 30 - - z = -10 - - print(x + y + z) - - """ - ) - expectedResult = textwrap.dedent( - """\ - if True: - x = 22 - y = 30 - z = -10 - - print(x + y + z) - - """ - ) - normalizeForInterpreter.normalize_lines(src) - result = capsys.readouterr() - assert result.out == expectedResult diff --git a/pythonFiles/tests/testing_tools/adapter/.data/NormCase/tests/A/b/C/test_Spam.py b/pythonFiles/tests/testing_tools/adapter/.data/NormCase/tests/A/b/C/test_Spam.py deleted file mode 100644 index 3501b9e118e5..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/NormCase/tests/A/b/C/test_Spam.py +++ /dev/null @@ -1,3 +0,0 @@ - -def test_okay(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/README.md b/pythonFiles/tests/testing_tools/adapter/.data/complex/README.md deleted file mode 100644 index e30e96142d02..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/README.md +++ /dev/null @@ -1,156 +0,0 @@ -## Directory Structure - -``` -pythonFiles/tests/testing_tools/adapter/.data/ - tests/ # test root - test_doctest.txt - test_pytest.py - test_unittest.py - test_mixed.py - spam.py # note: no "test_" prefix, but contains tests - test_foo.py - test_42.py - test_42-43.py # note the hyphen - testspam.py - v/ - __init__.py - spam.py - test_eggs.py - test_ham.py - test_spam.py - w/ - # no __init__.py - test_spam.py - test_spam_ex.py - x/y/z/ # each with a __init__.py - test_ham.py - a/ - __init__.py - test_spam.py - b/ - __init__.py - test_spam.py -``` - -## Tests (and Suites) - -basic: - -- `./test_foo.py::test_simple` -- `./test_pytest.py::test_simple` -- `./test_pytest.py::TestSpam::test_simple` -- `./test_pytest.py::TestSpam::TestHam::TestEggs::test_simple` -- `./test_pytest.py::TestEggs::test_simple` -- `./test_pytest.py::TestParam::test_simple` -- `./test_mixed.py::test_top_level` -- `./test_mixed.py::MyTests::test_simple` -- `./test_mixed.py::TestMySuite::test_simple` -- `./test_unittest.py::MyTests::test_simple` -- `./test_unittest.py::OtherTests::test_simple` -- `./x/y/z/test_ham.py::test_simple` -- `./x/y/z/a/test_spam.py::test_simple` -- `./x/y/z/b/test_spam.py::test_simple` - -failures: - -- `./test_pytest.py::test_failure` -- `./test_pytest.py::test_runtime_failed` -- `./test_pytest.py::test_raises` - -skipped: - -- `./test_mixed.py::test_skipped` -- `./test_mixed.py::MyTests::test_skipped` -- `./test_pytest.py::test_runtime_skipped` -- `./test_pytest.py::test_skipped` -- `./test_pytest.py::test_maybe_skipped` -- `./test_pytest.py::SpamTests::test_skipped` -- `./test_pytest.py::test_param_13_markers[???]` -- `./test_pytest.py::test_param_13_skipped[*]` -- `./test_unittest.py::MyTests::test_skipped` -- (`./test_unittest.py::MyTests::test_maybe_skipped`) -- (`./test_unittest.py::MyTests::test_maybe_not_skipped`) - -in namespace package: - -- `./w/test_spam.py::test_simple` -- `./w/test_spam_ex.py::test_simple` - -filename oddities: - -- `./test_42.py::test_simple` -- `./test_42-43.py::test_simple` -- (`./testspam.py::test_simple` not discovered by default) -- (`./spam.py::test_simple` not discovered) - -imports discovered: - -- `./v/test_eggs.py::test_simple` -- `./v/test_eggs.py::TestSimple::test_simple` -- `./v/test_ham.py::test_simple` -- `./v/test_ham.py::test_not_hard` -- `./v/test_spam.py::test_simple` -- `./v/test_spam.py::test_simpler` - -subtests: - -- `./test_pytest.py::test_dynamic_*` -- `./test_pytest.py::test_param_01[]` -- `./test_pytest.py::test_param_11[1]` -- `./test_pytest.py::test_param_13[*]` -- `./test_pytest.py::test_param_13_markers[*]` -- `./test_pytest.py::test_param_13_repeat[*]` -- `./test_pytest.py::test_param_13_skipped[*]` -- `./test_pytest.py::test_param_23_13[*]` -- `./test_pytest.py::test_param_23_raises[*]` -- `./test_pytest.py::test_param_33[*]` -- `./test_pytest.py::test_param_33_ids[*]` -- `./test_pytest.py::TestParam::test_param_13[*]` -- `./test_pytest.py::TestParamAll::test_param_13[*]` -- `./test_pytest.py::TestParamAll::test_spam_13[*]` -- `./test_pytest.py::test_fixture_param[*]` -- `./test_pytest.py::test_param_fixture[*]` -- `./test_pytest_param.py::test_param_13[*]` -- `./test_pytest_param.py::TestParamAll::test_param_13[*]` -- `./test_pytest_param.py::TestParamAll::test_spam_13[*]` -- (`./test_unittest.py::MyTests::test_with_subtests`) -- (`./test_unittest.py::MyTests::test_with_nested_subtests`) -- (`./test_unittest.py::MyTests::test_dynamic_*`) - -For more options for pytests's parametrize(), see -https://docs.pytest.org/en/latest/example/parametrize.html#paramexamples. - -using fixtures: - -- `./test_pytest.py::test_fixture` -- `./test_pytest.py::test_fixture_param[*]` -- `./test_pytest.py::test_param_fixture[*]` -- `./test_pytest.py::test_param_mark_fixture[*]` - -other markers: - -- `./test_pytest.py::test_known_failure` -- `./test_pytest.py::test_param_markers[2]` -- `./test_pytest.py::test_warned` -- `./test_pytest.py::test_custom_marker` -- `./test_pytest.py::test_multiple_markers` -- (`./test_unittest.py::MyTests::test_known_failure`) - -others not discovered: - -- (`./test_pytest.py::TestSpam::TestHam::TestEggs::TestNoop1`) -- (`./test_pytest.py::TestSpam::TestNoop2`) -- (`./test_pytest.py::TestNoop3`) -- (`./test_pytest.py::MyTests::test_simple`) -- (`./test_unittest.py::MyTests::TestSub1`) -- (`./test_unittest.py::MyTests::TestSub2`) -- (`./test_unittest.py::NoTests`) - -doctests: - -- `./test_doctest.txt::test_doctest.txt` -- (`./test_doctest.py::test_doctest.py`) -- (`../mod.py::mod`) -- (`../mod.py::mod.square`) -- (`../mod.py::mod.Spam`) -- (`../mod.py::mod.spam.eggs`) diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/mod.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/mod.py deleted file mode 100644 index b8c495503895..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/mod.py +++ /dev/null @@ -1,51 +0,0 @@ -""" - -Examples: - ->>> square(1) -1 ->>> square(2) -4 ->>> square(3) -9 ->>> spam = Spam() ->>> spam.eggs() -42 -""" - - -def square(x): - """ - - Examples: - - >>> square(1) - 1 - >>> square(2) - 4 - >>> square(3) - 9 - """ - return x * x - - -class Spam(object): - """ - - Examples: - - >>> spam = Spam() - >>> spam.eggs() - 42 - """ - - def eggs(self): - """ - - Examples: - - >>> spam = Spam() - >>> spam.eggs() - 42 - """ - return 42 diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/spam.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/spam.py deleted file mode 100644 index 4c4134d75584..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/spam.py +++ /dev/null @@ -1,3 +0,0 @@ - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_42-43.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_42-43.py deleted file mode 100644 index 4c4134d75584..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_42-43.py +++ /dev/null @@ -1,3 +0,0 @@ - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_42.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_42.py deleted file mode 100644 index 4c4134d75584..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_42.py +++ /dev/null @@ -1,3 +0,0 @@ - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_doctest.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_doctest.py deleted file mode 100644 index 27cccbdb77cc..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_doctest.py +++ /dev/null @@ -1,6 +0,0 @@ -""" -Doctests: - ->>> 1 == 1 -True -""" diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_doctest.txt b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_doctest.txt deleted file mode 100644 index 4b51fde5667e..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_doctest.txt +++ /dev/null @@ -1,15 +0,0 @@ - -assignment & lookup: - ->>> x = 3 ->>> x -3 - -deletion: - ->>> del x ->>> x -Traceback (most recent call last): - ... -NameError: name 'x' is not defined - diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_foo.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_foo.py deleted file mode 100644 index e752106f503a..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_foo.py +++ /dev/null @@ -1,4 +0,0 @@ - - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_mixed.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_mixed.py deleted file mode 100644 index e9c675647f13..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_mixed.py +++ /dev/null @@ -1,27 +0,0 @@ -import pytest -import unittest - - -def test_top_level(): - assert True - - -@pytest.mark.skip -def test_skipped(): - assert False - - -class TestMySuite(object): - - def test_simple(self): - assert True - - -class MyTests(unittest.TestCase): - - def test_simple(self): - assert True - - @pytest.mark.skip - def test_skipped(self): - assert False diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_pytest.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_pytest.py deleted file mode 100644 index 39d3ece9c0ba..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_pytest.py +++ /dev/null @@ -1,227 +0,0 @@ -# ... - -import pytest - - -def test_simple(): - assert True - - -def test_failure(): - assert False - - -def test_runtime_skipped(): - pytest.skip('???') - - -def test_runtime_failed(): - pytest.fail('???') - - -def test_raises(): - raise Exception - - -@pytest.mark.skip -def test_skipped(): - assert False - - -@pytest.mark.skipif(True) -def test_maybe_skipped(): - assert False - - -@pytest.mark.xfail -def test_known_failure(): - assert False - - -@pytest.mark.filterwarnings -def test_warned(): - assert False - - -@pytest.mark.spam -def test_custom_marker(): - assert False - - -@pytest.mark.filterwarnings -@pytest.mark.skip -@pytest.mark.xfail -@pytest.mark.skipif(True) -@pytest.mark.skip -@pytest.mark.spam -def test_multiple_markers(): - assert False - - -for i in range(3): - def func(): - assert True - globals()['test_dynamic_{}'.format(i + 1)] = func -del func - - -class TestSpam(object): - - def test_simple(): - assert True - - @pytest.mark.skip - def test_skipped(self): - assert False - - class TestHam(object): - - class TestEggs(object): - - def test_simple(): - assert True - - class TestNoop1(object): - pass - - class TestNoop2(object): - pass - - -class TestEggs(object): - - def test_simple(): - assert True - - -# legend for parameterized test names: -# "test_param_XY[_XY]*" -# X - # params -# Y - # cases -# [_XY]* - extra decorators - -@pytest.mark.parametrize('', [()]) -def test_param_01(): - assert True - - -@pytest.mark.parametrize('x', [(1,)]) -def test_param_11(x): - assert x == 1 - - -@pytest.mark.parametrize('x', [(1,), (1.0,), (1+0j,)]) -def test_param_13(x): - assert x == 1 - - -@pytest.mark.parametrize('x', [(1,), (1,), (1,)]) -def test_param_13_repeat(x): - assert x == 1 - - -@pytest.mark.parametrize('x,y,z', [(1, 1, 1), (3, 4, 5), (0, 0, 0)]) -def test_param_33(x, y, z): - assert x*x + y*y == z*z - - -@pytest.mark.parametrize('x,y,z', [(1, 1, 1), (3, 4, 5), (0, 0, 0)], - ids=['v1', 'v2', 'v3']) -def test_param_33_ids(x, y, z): - assert x*x + y*y == z*z - - -@pytest.mark.parametrize('z', [(1,), (5,), (0,)]) -@pytest.mark.parametrize('x,y', [(1, 1), (3, 4), (0, 0)]) -def test_param_23_13(x, y, z): - assert x*x + y*y == z*z - - -@pytest.mark.parametrize('x', [ - (1,), - pytest.param(1.0, marks=[pytest.mark.skip, pytest.mark.spam], id='???'), - pytest.param(2, marks=[pytest.mark.xfail]), - ]) -def test_param_13_markers(x): - assert x == 1 - - -@pytest.mark.skip -@pytest.mark.parametrize('x', [(1,), (1.0,), (1+0j,)]) -def test_param_13_skipped(x): - assert x == 1 - - -@pytest.mark.parametrize('x,catch', [(1, None), (1.0, None), (2, pytest.raises(Exception))]) -def test_param_23_raises(x, catch): - if x != 1: - with catch: - raise Exception - - -class TestParam(object): - - def test_simple(): - assert True - - @pytest.mark.parametrize('x', [(1,), (1.0,), (1+0j,)]) - def test_param_13(self, x): - assert x == 1 - - -@pytest.mark.parametrize('x', [(1,), (1.0,), (1+0j,)]) -class TestParamAll(object): - - def test_param_13(self, x): - assert x == 1 - - def test_spam_13(self, x): - assert x == 1 - - -@pytest.fixture -def spamfix(request): - yield 'spam' - - -@pytest.fixture(params=['spam', 'eggs']) -def paramfix(request): - return request.param - - -def test_fixture(spamfix): - assert spamfix == 'spam' - - -@pytest.mark.usefixtures('spamfix') -def test_mark_fixture(): - assert True - - -@pytest.mark.parametrize('x', [(1,), (1.0,), (1+0j,)]) -def test_param_fixture(spamfix, x): - assert spamfix == 'spam' - assert x == 1 - - -@pytest.mark.parametrize('x', [ - (1,), - (1.0,), - pytest.param(1+0j, marks=[pytest.mark.usefixtures('spamfix')]), - ]) -def test_param_mark_fixture(x): - assert x == 1 - - -def test_fixture_param(paramfix): - assert paramfix == 'spam' - - -class TestNoop3(object): - pass - - -class MyTests(object): # does not match default name pattern - - def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_pytest_param.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_pytest_param.py deleted file mode 100644 index bd22d89f42bd..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_pytest_param.py +++ /dev/null @@ -1,18 +0,0 @@ -import pytest - - -# module-level parameterization -pytestmark = pytest.mark.parametrize('x', [(1,), (1.0,), (1+0j,)]) - - -def test_param_13(x): - assert x == 1 - - -class TestParamAll(object): - - def test_param_13(self, x): - assert x == 1 - - def test_spam_13(self, x): - assert x == 1 diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_unittest.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_unittest.py deleted file mode 100644 index dd3e82535739..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/test_unittest.py +++ /dev/null @@ -1,66 +0,0 @@ -import unittest - - -class MyTests(unittest.TestCase): - - def test_simple(self): - self.assertTrue(True) - - @unittest.skip('???') - def test_skipped(self): - self.assertTrue(False) - - @unittest.skipIf(True, '???') - def test_maybe_skipped(self): - self.assertTrue(False) - - @unittest.skipUnless(False, '???') - def test_maybe_not_skipped(self): - self.assertTrue(False) - - def test_skipped_inside(self): - raise unittest.SkipTest('???') - - class TestSub1(object): - - def test_simple(self): - self.assertTrue(True) - - class TestSub2(unittest.TestCase): - - def test_simple(self): - self.assertTrue(True) - - def test_failure(self): - raise Exception - - @unittest.expectedFailure - def test_known_failure(self): - raise Exception - - def test_with_subtests(self): - for i in range(3): - with self.subtest(i): # This is invalid under Py2. - self.assertTrue(True) - - def test_with_nested_subtests(self): - for i in range(3): - with self.subtest(i): # This is invalid under Py2. - for j in range(3): - with self.subtest(i): # This is invalid under Py2. - self.assertTrue(True) - - for i in range(3): - def test_dynamic_(self, i=i): - self.assertEqual(True) - test_dynamic_.__name__ += str(i) - - -class OtherTests(unittest.TestCase): - - def test_simple(self): - self.assertTrue(True) - - -class NoTests(unittest.TestCase): - pass diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/testspam.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/testspam.py deleted file mode 100644 index 7ec91c783e2c..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/testspam.py +++ /dev/null @@ -1,9 +0,0 @@ -''' -... -... -... -''' - - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/spam.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/spam.py deleted file mode 100644 index 18c92c09306e..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/spam.py +++ /dev/null @@ -1,9 +0,0 @@ - -def test_simple(self): - assert True - - -class TestSimple(object): - - def test_simple(self): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_eggs.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_eggs.py deleted file mode 100644 index f3e7d9517631..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_eggs.py +++ /dev/null @@ -1 +0,0 @@ -from .spam import * diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_ham.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_ham.py deleted file mode 100644 index 6b6a01f87ec5..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_ham.py +++ /dev/null @@ -1,2 +0,0 @@ -from .spam import test_simple -from .spam import test_simple as test_not_hard diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_spam.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_spam.py deleted file mode 100644 index 18cf56f90533..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/v/test_spam.py +++ /dev/null @@ -1,5 +0,0 @@ -from .spam import test_simple - - -def test_simpler(self): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/w/test_spam.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/w/test_spam.py deleted file mode 100644 index 6a0b60d1d5bd..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/w/test_spam.py +++ /dev/null @@ -1,5 +0,0 @@ - - - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/w/test_spam_ex.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/w/test_spam_ex.py deleted file mode 100644 index 6a0b60d1d5bd..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/w/test_spam_ex.py +++ /dev/null @@ -1,5 +0,0 @@ - - - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/a/test_spam.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/a/test_spam.py deleted file mode 100644 index bdb7e4fec3a5..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/a/test_spam.py +++ /dev/null @@ -1,12 +0,0 @@ -""" -... -""" - - -# ... - -ANSWER = 42 - - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/b/test_spam.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/b/test_spam.py deleted file mode 100644 index 4923c556c29a..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/b/test_spam.py +++ /dev/null @@ -1,8 +0,0 @@ - - -# ?!? -CHORUS = 'spamspamspamspamspam...' - - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/test_ham.py b/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/test_ham.py deleted file mode 100644 index 4c4134d75584..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/complex/tests/x/y/z/test_ham.py +++ /dev/null @@ -1,3 +0,0 @@ - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/simple/tests/test_spam.py b/pythonFiles/tests/testing_tools/adapter/.data/simple/tests/test_spam.py deleted file mode 100644 index 4c4134d75584..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/simple/tests/test_spam.py +++ /dev/null @@ -1,3 +0,0 @@ - -def test_simple(): - assert True diff --git a/pythonFiles/tests/testing_tools/adapter/.data/syntax-error/tests/test_spam.py b/pythonFiles/tests/testing_tools/adapter/.data/syntax-error/tests/test_spam.py deleted file mode 100644 index 54d6400a3465..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/.data/syntax-error/tests/test_spam.py +++ /dev/null @@ -1,7 +0,0 @@ - -def test_simple(): - assert True - - -# A syntax error: -: diff --git a/pythonFiles/tests/testing_tools/adapter/pytest/test_cli.py b/pythonFiles/tests/testing_tools/adapter/pytest/test_cli.py deleted file mode 100644 index f5d41f603be0..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/pytest/test_cli.py +++ /dev/null @@ -1,58 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import unittest - -from ....util import Stub, StubProxy -from testing_tools.adapter.errors import UnsupportedCommandError -from testing_tools.adapter.pytest._cli import add_subparser - - -class StubSubparsers(StubProxy): - def __init__(self, stub=None, name="subparsers"): - super(StubSubparsers, self).__init__(stub, name) - - def add_parser(self, name): - self.add_call("add_parser", None, {"name": name}) - return self.return_add_parser - - -class StubArgParser(StubProxy): - def __init__(self, stub=None): - super(StubArgParser, self).__init__(stub, "argparser") - - def add_argument(self, *args, **kwargs): - self.add_call("add_argument", args, kwargs) - - -class AddCLISubparserTests(unittest.TestCase): - def test_discover(self): - stub = Stub() - subparsers = StubSubparsers(stub) - parser = StubArgParser(stub) - subparsers.return_add_parser = parser - - add_subparser("discover", "pytest", subparsers) - - self.assertEqual( - stub.calls, [("subparsers.add_parser", None, {"name": "pytest"}),] - ) - - def test_unsupported_command(self): - subparsers = StubSubparsers(name=None) - subparsers.return_add_parser = None - - with self.assertRaises(UnsupportedCommandError): - add_subparser("run", "pytest", subparsers) - with self.assertRaises(UnsupportedCommandError): - add_subparser("debug", "pytest", subparsers) - with self.assertRaises(UnsupportedCommandError): - add_subparser("???", "pytest", subparsers) - self.assertEqual( - subparsers.calls, - [ - ("add_parser", None, {"name": "pytest"}), - ("add_parser", None, {"name": "pytest"}), - ("add_parser", None, {"name": "pytest"}), - ], - ) diff --git a/pythonFiles/tests/testing_tools/adapter/pytest/test_discovery.py b/pythonFiles/tests/testing_tools/adapter/pytest/test_discovery.py deleted file mode 100644 index 2ca3955c6529..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/pytest/test_discovery.py +++ /dev/null @@ -1,1399 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import print_function, unicode_literals - -try: - from io import StringIO -except ImportError: # 2.7 - from StringIO import StringIO -from os import name as OS_NAME -import sys -import unittest - -import pytest -import _pytest.doctest - -from ....util import Stub, StubProxy -from testing_tools.adapter.util import fix_path, fix_relpath, fix_fileid, PATH_JOIN -from testing_tools.adapter.info import TestInfo, TestPath, ParentInfo -from testing_tools.adapter.pytest import _pytest_item as pytest_item -from testing_tools.adapter.pytest._discovery import discover, TestCollector - -# In Python 3.8 __len__ is called twice, which impacts some of the test assertions we do below. -PYTHON_38_OR_LATER = sys.version_info[0] >= 3 and sys.version_info[1] >= 8 - - -class StubPyTest(StubProxy): - def __init__(self, stub=None): - super(StubPyTest, self).__init__(stub, "pytest") - self.return_main = 0 - - def main(self, args, plugins): - self.add_call("main", None, {"args": args, "plugins": plugins}) - return self.return_main - - -class StubPlugin(StubProxy): - - _started = True - - def __init__(self, stub=None, tests=None): - super(StubPlugin, self).__init__(stub, "plugin") - if tests is None: - tests = StubDiscoveredTests(self.stub) - self._tests = tests - - def __getattr__(self, name): - if not name.startswith("pytest_"): - raise AttributeError(name) - - def func(*args, **kwargs): - self.add_call(name, args or None, kwargs or None) - - return func - - -class StubDiscoveredTests(StubProxy): - - NOT_FOUND = object() - - def __init__(self, stub=None): - super(StubDiscoveredTests, self).__init__(stub, "discovered") - self.return_items = [] - self.return_parents = [] - - def __len__(self): - self.add_call("__len__", None, None) - return len(self.return_items) - - def __getitem__(self, index): - self.add_call("__getitem__", (index,), None) - return self.return_items[index] - - @property - def parents(self): - self.add_call("parents", None, None) - return self.return_parents - - def reset(self): - self.add_call("reset", None, None) - - def add_test(self, test, parents): - self.add_call("add_test", None, {"test": test, "parents": parents}) - - -class FakeFunc(object): - def __init__(self, name): - self.__name__ = name - - -class FakeMarker(object): - def __init__(self, name): - self.name = name - - -class StubPytestItem(StubProxy): - - _debugging = False - _hasfunc = True - - def __init__(self, stub=None, **attrs): - super(StubPytestItem, self).__init__(stub, "pytest.Item") - if attrs.get("function") is None: - attrs.pop("function", None) - self._hasfunc = False - - attrs.setdefault("user_properties", []) - - self.__dict__.update(attrs) - - if "own_markers" not in attrs: - self.own_markers = () - - def __repr__(self): - return object.__repr__(self) - - def __getattr__(self, name): - if not self._debugging: - self.add_call(name + " (attr)", None, None) - if name == "function": - if not self._hasfunc: - raise AttributeError(name) - - def func(*args, **kwargs): - self.add_call(name, args or None, kwargs or None) - - return func - - -class StubSubtypedItem(StubPytestItem): - def __init__(self, *args, **kwargs): - super(StubSubtypedItem, self).__init__(*args, **kwargs) - if "nodeid" in self.__dict__: - self._nodeid = self.__dict__.pop("nodeid") - - @property - def location(self): - return self.__dict__.get("location") - - -class StubFunctionItem(StubSubtypedItem, pytest.Function): - @property - def function(self): - return self.__dict__.get("function") - - -class StubDoctestItem(StubSubtypedItem, _pytest.doctest.DoctestItem): - pass - - -class StubPytestSession(StubProxy): - def __init__(self, stub=None): - super(StubPytestSession, self).__init__(stub, "pytest.Session") - - def __getattr__(self, name): - self.add_call(name + " (attr)", None, None) - - def func(*args, **kwargs): - self.add_call(name, args or None, kwargs or None) - - return func - - -class StubPytestConfig(StubProxy): - def __init__(self, stub=None): - super(StubPytestConfig, self).__init__(stub, "pytest.Config") - - def __getattr__(self, name): - self.add_call(name + " (attr)", None, None) - - def func(*args, **kwargs): - self.add_call(name, args or None, kwargs or None) - - return func - - -def generate_parse_item(pathsep): - if pathsep == "\\": - - def normcase(path): - path = path.lower() - return path.replace("/", "\\") - - else: - raise NotImplementedError - ########## - def _fix_fileid(*args): - return fix_fileid(*args, **dict(_normcase=normcase, _pathsep=pathsep,)) - - def _normalize_test_id(*args): - return pytest_item._normalize_test_id( - *args, **dict(_fix_fileid=_fix_fileid, _pathsep=pathsep,) - ) - - def _iter_nodes(*args): - return pytest_item._iter_nodes( - *args, - **dict( - _normalize_test_id=_normalize_test_id, - _normcase=normcase, - _pathsep=pathsep, - ) - ) - - def _parse_node_id(*args): - return pytest_item._parse_node_id(*args, **dict(_iter_nodes=_iter_nodes,)) - - ########## - def _split_fspath(*args): - return pytest_item._split_fspath(*args, **dict(_normcase=normcase,)) - - ########## - def _matches_relfile(*args): - return pytest_item._matches_relfile( - *args, **dict(_normcase=normcase, _pathsep=pathsep,) - ) - - def _is_legacy_wrapper(*args): - return pytest_item._is_legacy_wrapper(*args, **dict(_pathsep=pathsep,)) - - def _get_location(*args): - return pytest_item._get_location( - *args, - **dict( - _matches_relfile=_matches_relfile, - _is_legacy_wrapper=_is_legacy_wrapper, - _pathsep=pathsep, - ) - ) - - ########## - def _parse_item(item): - return pytest_item.parse_item( - item, - **dict( - _parse_node_id=_parse_node_id, - _split_fspath=_split_fspath, - _get_location=_get_location, - ) - ) - - return _parse_item - - -################################## -# tests - - -class DiscoverTests(unittest.TestCase): - - DEFAULT_ARGS = [ - "--collect-only", - ] - - def test_basic(self): - stub = Stub() - stubpytest = StubPyTest(stub) - plugin = StubPlugin(stub) - expected = [] - plugin.discovered = expected - calls = [ - ("pytest.main", None, {"args": self.DEFAULT_ARGS, "plugins": [plugin]}), - ("discovered.parents", None, None), - ("discovered.__len__", None, None), - ("discovered.__getitem__", (0,), None), - ] - - # In Python 3.8 __len__ is called twice. - if PYTHON_38_OR_LATER: - calls.insert(3, ("discovered.__len__", None, None)) - - parents, tests = discover([], _pytest_main=stubpytest.main, _plugin=plugin) - - self.assertEqual(parents, []) - self.assertEqual(tests, expected) - self.assertEqual(stub.calls, calls) - - def test_failure(self): - stub = Stub() - pytest = StubPyTest(stub) - pytest.return_main = 2 - plugin = StubPlugin(stub) - - with self.assertRaises(Exception): - discover([], _pytest_main=pytest.main, _plugin=plugin) - - self.assertEqual( - stub.calls, - [("pytest.main", None, {"args": self.DEFAULT_ARGS, "plugins": [plugin]}),], - ) - - def test_no_tests_found(self): - stub = Stub() - pytest = StubPyTest(stub) - pytest.return_main = 5 - plugin = StubPlugin(stub) - expected = [] - plugin.discovered = expected - calls = [ - ("pytest.main", None, {"args": self.DEFAULT_ARGS, "plugins": [plugin]}), - ("discovered.parents", None, None), - ("discovered.__len__", None, None), - ("discovered.__getitem__", (0,), None), - ] - - # In Python 3.8 __len__ is called twice. - if PYTHON_38_OR_LATER: - calls.insert(3, ("discovered.__len__", None, None)) - - parents, tests = discover([], _pytest_main=pytest.main, _plugin=plugin) - - self.assertEqual(parents, []) - self.assertEqual(tests, expected) - self.assertEqual(stub.calls, calls) - - def test_stdio_hidden(self): - pytest_stdout = "spamspamspamspamspamspamspammityspam" - stub = Stub() - - def fake_pytest_main(args, plugins): - stub.add_call("pytest.main", None, {"args": args, "plugins": plugins}) - print(pytest_stdout, end="") - return 0 - - plugin = StubPlugin(stub) - plugin.discovered = [] - calls = [ - ("pytest.main", None, {"args": self.DEFAULT_ARGS, "plugins": [plugin]}), - ("discovered.parents", None, None), - ("discovered.__len__", None, None), - ("discovered.__getitem__", (0,), None), - ] - - # In Python 3.8 __len__ is called twice. - if PYTHON_38_OR_LATER: - calls.insert(3, ("discovered.__len__", None, None)) - - buf = StringIO() - - sys.stdout = buf - try: - discover([], hidestdio=True, _pytest_main=fake_pytest_main, _plugin=plugin) - finally: - sys.stdout = sys.__stdout__ - captured = buf.getvalue() - - self.assertEqual(captured, "") - self.assertEqual(stub.calls, calls) - - def test_stdio_not_hidden(self): - pytest_stdout = "spamspamspamspamspamspamspammityspam" - stub = Stub() - - def fake_pytest_main(args, plugins): - stub.add_call("pytest.main", None, {"args": args, "plugins": plugins}) - print(pytest_stdout, end="") - return 0 - - plugin = StubPlugin(stub) - plugin.discovered = [] - calls = [ - ("pytest.main", None, {"args": self.DEFAULT_ARGS, "plugins": [plugin]}), - ("discovered.parents", None, None), - ("discovered.__len__", None, None), - ("discovered.__getitem__", (0,), None), - ] - - # In Python 3.8 __len__ is called twice. - if PYTHON_38_OR_LATER: - calls.insert(3, ("discovered.__len__", None, None)) - - buf = StringIO() - - sys.stdout = buf - try: - discover([], hidestdio=False, _pytest_main=fake_pytest_main, _plugin=plugin) - finally: - sys.stdout = sys.__stdout__ - captured = buf.getvalue() - - self.assertEqual(captured, pytest_stdout) - self.assertEqual(stub.calls, calls) - - -class CollectorTests(unittest.TestCase): - def test_modifyitems(self): - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - config = StubPytestConfig(stub) - collector = TestCollector(tests=discovered) - - testroot = fix_path("/a/b/c") - relfile1 = fix_path("./test_spam.py") - relfile2 = fix_path("x/y/z/test_eggs.py") - - collector.pytest_collection_modifyitems( - session, - config, - [ - StubFunctionItem( - stub, - nodeid="test_spam.py::SpamTests::test_one", - name="test_one", - location=("test_spam.py", 12, "SpamTests.test_one"), - fspath=PATH_JOIN(testroot, "test_spam.py"), - function=FakeFunc("test_one"), - ), - StubFunctionItem( - stub, - nodeid="test_spam.py::SpamTests::test_other", - name="test_other", - location=("test_spam.py", 19, "SpamTests.test_other"), - fspath=PATH_JOIN(testroot, "test_spam.py"), - function=FakeFunc("test_other"), - ), - StubFunctionItem( - stub, - nodeid="test_spam.py::test_all", - name="test_all", - location=("test_spam.py", 144, "test_all"), - fspath=PATH_JOIN(testroot, "test_spam.py"), - function=FakeFunc("test_all"), - ), - StubFunctionItem( - stub, - nodeid="test_spam.py::test_each[10-10]", - name="test_each[10-10]", - location=("test_spam.py", 273, "test_each[10-10]"), - fspath=PATH_JOIN(testroot, "test_spam.py"), - function=FakeFunc("test_each"), - ), - StubFunctionItem( - stub, - nodeid=relfile2 + "::All::BasicTests::test_first", - name="test_first", - location=(relfile2, 31, "All.BasicTests.test_first"), - fspath=PATH_JOIN(testroot, relfile2), - function=FakeFunc("test_first"), - ), - StubFunctionItem( - stub, - nodeid=relfile2 + "::All::BasicTests::test_each[1+2-3]", - name="test_each[1+2-3]", - location=(relfile2, 62, "All.BasicTests.test_each[1+2-3]"), - fspath=PATH_JOIN(testroot, relfile2), - function=FakeFunc("test_each"), - own_markers=[ - FakeMarker(v) - for v in [ - # supported - "skip", - "skipif", - "xfail", - # duplicate - "skip", - # ignored (pytest-supported) - "parameterize", - "usefixtures", - "filterwarnings", - # ignored (custom) - "timeout", - ] - ], - ), - ], - ) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./test_spam.py::SpamTests", "SpamTests", "suite"), - ("./test_spam.py", "test_spam.py", "file"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./test_spam.py::SpamTests::test_one", - name="test_one", - path=TestPath( - root=testroot, - relfile=relfile1, - func="SpamTests.test_one", - sub=None, - ), - source="{}:{}".format(relfile1, 13), - markers=None, - parentid="./test_spam.py::SpamTests", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./test_spam.py::SpamTests", "SpamTests", "suite"), - ("./test_spam.py", "test_spam.py", "file"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./test_spam.py::SpamTests::test_other", - name="test_other", - path=TestPath( - root=testroot, - relfile=relfile1, - func="SpamTests.test_other", - sub=None, - ), - source="{}:{}".format(relfile1, 20), - markers=None, - parentid="./test_spam.py::SpamTests", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./test_spam.py", "test_spam.py", "file"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./test_spam.py::test_all", - name="test_all", - path=TestPath( - root=testroot, - relfile=relfile1, - func="test_all", - sub=None, - ), - source="{}:{}".format(relfile1, 145), - markers=None, - parentid="./test_spam.py", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./test_spam.py::test_each", "test_each", "function"), - ("./test_spam.py", "test_spam.py", "file"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./test_spam.py::test_each[10-10]", - name="test_each[10-10]", - path=TestPath( - root=testroot, - relfile=relfile1, - func="test_each", - sub=["[10-10]"], - ), - source="{}:{}".format(relfile1, 274), - markers=None, - parentid="./test_spam.py::test_each", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ( - "./x/y/z/test_eggs.py::All::BasicTests", - "BasicTests", - "suite", - ), - ("./x/y/z/test_eggs.py::All", "All", "suite"), - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::All::BasicTests::test_first", - name="test_first", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile2), - func="All.BasicTests.test_first", - sub=None, - ), - source="{}:{}".format(fix_relpath(relfile2), 32), - markers=None, - parentid="./x/y/z/test_eggs.py::All::BasicTests", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ( - "./x/y/z/test_eggs.py::All::BasicTests::test_each", - "test_each", - "function", - ), - ( - "./x/y/z/test_eggs.py::All::BasicTests", - "BasicTests", - "suite", - ), - ("./x/y/z/test_eggs.py::All", "All", "suite"), - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::All::BasicTests::test_each[1+2-3]", - name="test_each[1+2-3]", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile2), - func="All.BasicTests.test_each", - sub=["[1+2-3]"], - ), - source="{}:{}".format(fix_relpath(relfile2), 63), - markers=["expected-failure", "skip", "skip-if"], - parentid="./x/y/z/test_eggs.py::All::BasicTests::test_each", - ), - ), - ), - ], - ) - - def test_finish(self): - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - testroot = fix_path("/a/b/c") - relfile = fix_path("x/y/z/test_eggs.py") - session.items = [ - StubFunctionItem( - stub, - nodeid=relfile + "::SpamTests::test_spam", - name="test_spam", - location=(relfile, 12, "SpamTests.test_spam"), - fspath=PATH_JOIN(testroot, relfile), - function=FakeFunc("test_spam"), - ), - ] - collector = TestCollector(tests=discovered) - - collector.pytest_collection_finish(session) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/y/z/test_eggs.py::SpamTests", "SpamTests", "suite"), - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::SpamTests::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="SpamTests.test_spam", - sub=None, - ), - source="{}:{}".format(fix_relpath(relfile), 13), - markers=None, - parentid="./x/y/z/test_eggs.py::SpamTests", - ), - ), - ), - ], - ) - - def test_doctest(self): - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - testroot = fix_path("/a/b/c") - doctestfile = fix_path("x/test_doctest.txt") - relfile = fix_path("x/y/z/test_eggs.py") - session.items = [ - StubDoctestItem( - stub, - nodeid=doctestfile + "::test_doctest.txt", - name="test_doctest.txt", - location=(doctestfile, 0, "[doctest] test_doctest.txt"), - fspath=PATH_JOIN(testroot, doctestfile), - ), - # With --doctest-modules - StubDoctestItem( - stub, - nodeid=relfile + "::test_eggs", - name="test_eggs", - location=(relfile, 0, "[doctest] test_eggs"), - fspath=PATH_JOIN(testroot, relfile), - ), - StubDoctestItem( - stub, - nodeid=relfile + "::test_eggs.TestSpam", - name="test_eggs.TestSpam", - location=(relfile, 12, "[doctest] test_eggs.TestSpam"), - fspath=PATH_JOIN(testroot, relfile), - ), - StubDoctestItem( - stub, - nodeid=relfile + "::test_eggs.TestSpam.TestEggs", - name="test_eggs.TestSpam.TestEggs", - location=(relfile, 27, "[doctest] test_eggs.TestSpam.TestEggs"), - fspath=PATH_JOIN(testroot, relfile), - ), - ] - collector = TestCollector(tests=discovered) - - collector.pytest_collection_finish(session) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/test_doctest.txt", "test_doctest.txt", "file"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/test_doctest.txt::test_doctest.txt", - name="test_doctest.txt", - path=TestPath( - root=testroot, - relfile=fix_relpath(doctestfile), - func=None, - ), - source="{}:{}".format(fix_relpath(doctestfile), 1), - markers=[], - parentid="./x/test_doctest.txt", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::test_eggs", - name="test_eggs", - path=TestPath( - root=testroot, relfile=fix_relpath(relfile), func=None, - ), - source="{}:{}".format(fix_relpath(relfile), 1), - markers=[], - parentid="./x/y/z/test_eggs.py", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::test_eggs.TestSpam", - name="test_eggs.TestSpam", - path=TestPath( - root=testroot, relfile=fix_relpath(relfile), func=None, - ), - source="{}:{}".format(fix_relpath(relfile), 13), - markers=[], - parentid="./x/y/z/test_eggs.py", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::test_eggs.TestSpam.TestEggs", - name="test_eggs.TestSpam.TestEggs", - path=TestPath( - root=testroot, relfile=fix_relpath(relfile), func=None, - ), - source="{}:{}".format(fix_relpath(relfile), 28), - markers=[], - parentid="./x/y/z/test_eggs.py", - ), - ), - ), - ], - ) - - def test_nested_brackets(self): - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - testroot = fix_path("/a/b/c") - relfile = fix_path("x/y/z/test_eggs.py") - session.items = [ - StubFunctionItem( - stub, - nodeid=relfile + "::SpamTests::test_spam[a-[b]-c]", - name="test_spam[a-[b]-c]", - location=(relfile, 12, "SpamTests.test_spam[a-[b]-c]"), - fspath=PATH_JOIN(testroot, relfile), - function=FakeFunc("test_spam"), - ), - ] - collector = TestCollector(tests=discovered) - - collector.pytest_collection_finish(session) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - ( - "./x/y/z/test_eggs.py::SpamTests::test_spam", - "test_spam", - "function", - ), - ("./x/y/z/test_eggs.py::SpamTests", "SpamTests", "suite"), - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::SpamTests::test_spam[a-[b]-c]", - name="test_spam[a-[b]-c]", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="SpamTests.test_spam", - sub=["[a-[b]-c]"], - ), - source="{}:{}".format(fix_relpath(relfile), 13), - markers=None, - parentid="./x/y/z/test_eggs.py::SpamTests::test_spam", - ), - ), - ), - ], - ) - - def test_nested_suite(self): - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - testroot = fix_path("/a/b/c") - relfile = fix_path("x/y/z/test_eggs.py") - session.items = [ - StubFunctionItem( - stub, - nodeid=relfile + "::SpamTests::Ham::Eggs::test_spam", - name="test_spam", - location=(relfile, 12, "SpamTests.Ham.Eggs.test_spam"), - fspath=PATH_JOIN(testroot, relfile), - function=FakeFunc("test_spam"), - ), - ] - collector = TestCollector(tests=discovered) - - collector.pytest_collection_finish(session) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - ( - "./x/y/z/test_eggs.py::SpamTests::Ham::Eggs", - "Eggs", - "suite", - ), - ("./x/y/z/test_eggs.py::SpamTests::Ham", "Ham", "suite"), - ("./x/y/z/test_eggs.py::SpamTests", "SpamTests", "suite"), - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::SpamTests::Ham::Eggs::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="SpamTests.Ham.Eggs.test_spam", - sub=None, - ), - source="{}:{}".format(fix_relpath(relfile), 13), - markers=None, - parentid="./x/y/z/test_eggs.py::SpamTests::Ham::Eggs", - ), - ), - ), - ], - ) - - def test_windows(self): - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - testroot = r"C:\A\B\C" - altroot = testroot.replace("\\", "/") - relfile = r"X\Y\Z\test_Eggs.py" - session.items = [ - # typical: - StubFunctionItem( - stub, - # pytest always uses "/" as the path separator in node IDs: - nodeid="X/Y/Z/test_Eggs.py::SpamTests::test_spam", - name="test_spam", - # normal path separator (contrast with nodeid): - location=(relfile, 12, "SpamTests.test_spam"), - # path separator matches location: - fspath=testroot + "\\" + relfile, - function=FakeFunc("test_spam"), - ), - ] - tests = [ - # permutations of path separators - (r"X/test_a.py", "\\", "\\"), # typical - (r"X/test_b.py", "\\", "/"), - (r"X/test_c.py", "/", "\\"), - (r"X/test_d.py", "/", "/"), - (r"X\test_e.py", "\\", "\\"), - (r"X\test_f.py", "\\", "/"), - (r"X\test_g.py", "/", "\\"), - (r"X\test_h.py", "/", "/"), - ] - for fileid, locfile, fspath in tests: - if locfile == "/": - locfile = fileid.replace("\\", "/") - elif locfile == "\\": - locfile = fileid.replace("/", "\\") - if fspath == "/": - fspath = (testroot + "/" + fileid).replace("\\", "/") - elif fspath == "\\": - fspath = (testroot + "/" + fileid).replace("/", "\\") - session.items.append( - StubFunctionItem( - stub, - nodeid=fileid + "::test_spam", - name="test_spam", - location=(locfile, 12, "test_spam"), - fspath=fspath, - function=FakeFunc("test_spam"), - ) - ) - collector = TestCollector(tests=discovered) - if OS_NAME != "nt": - collector.parse_item = generate_parse_item("\\") - - collector.pytest_collection_finish(session) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/Y/Z/test_Eggs.py::SpamTests", "SpamTests", "suite"), - (r"./X/Y/Z/test_Eggs.py", "test_Eggs.py", "file"), - (r"./X/Y/Z", "Z", "folder"), - (r"./X/Y", "Y", "folder"), - (r"./X", "X", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id=r"./X/Y/Z/test_Eggs.py::SpamTests::test_spam", - name="test_spam", - path=TestPath( - root=testroot, # not normalized - relfile=r".\X\Y\Z\test_Eggs.py", # not normalized - func="SpamTests.test_spam", - sub=None, - ), - source=r".\X\Y\Z\test_Eggs.py:13", # not normalized - markers=None, - parentid=r"./X/Y/Z/test_Eggs.py::SpamTests", - ), - ), - ), - # permutations - # (*all* the IDs use "/") - # (source path separator should match relfile, not location) - # /, \, \ - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_a.py", "test_a.py", "file"), - (r"./X", "X", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_a.py::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=r".\X\test_a.py", - func="test_spam", - sub=None, - ), - source=r".\X\test_a.py:13", - markers=None, - parentid=r"./X/test_a.py", - ), - ), - ), - # /, \, / - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_b.py", "test_b.py", "file"), - (r"./X", "X", "folder"), - (".", altroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_b.py::test_spam", - name="test_spam", - path=TestPath( - root=altroot, - relfile=r"./X/test_b.py", - func="test_spam", - sub=None, - ), - source=r"./X/test_b.py:13", - markers=None, - parentid=r"./X/test_b.py", - ), - ), - ), - # /, /, \ - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_c.py", "test_c.py", "file"), - (r"./X", "X", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_c.py::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=r".\X\test_c.py", - func="test_spam", - sub=None, - ), - source=r".\X\test_c.py:13", - markers=None, - parentid=r"./X/test_c.py", - ), - ), - ), - # /, /, / - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_d.py", "test_d.py", "file"), - (r"./X", "X", "folder"), - (".", altroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_d.py::test_spam", - name="test_spam", - path=TestPath( - root=altroot, - relfile=r"./X/test_d.py", - func="test_spam", - sub=None, - ), - source=r"./X/test_d.py:13", - markers=None, - parentid=r"./X/test_d.py", - ), - ), - ), - # \, \, \ - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_e.py", "test_e.py", "file"), - (r"./X", "X", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_e.py::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=r".\X\test_e.py", - func="test_spam", - sub=None, - ), - source=r".\X\test_e.py:13", - markers=None, - parentid=r"./X/test_e.py", - ), - ), - ), - # \, \, / - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_f.py", "test_f.py", "file"), - (r"./X", "X", "folder"), - (".", altroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_f.py::test_spam", - name="test_spam", - path=TestPath( - root=altroot, - relfile=r"./X/test_f.py", - func="test_spam", - sub=None, - ), - source=r"./X/test_f.py:13", - markers=None, - parentid=r"./X/test_f.py", - ), - ), - ), - # \, /, \ - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_g.py", "test_g.py", "file"), - (r"./X", "X", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_g.py::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=r".\X\test_g.py", - func="test_spam", - sub=None, - ), - source=r".\X\test_g.py:13", - markers=None, - parentid=r"./X/test_g.py", - ), - ), - ), - # \, /, / - ( - "discovered.add_test", - None, - dict( - parents=[ - (r"./X/test_h.py", "test_h.py", "file"), - (r"./X", "X", "folder"), - (".", altroot, "folder"), - ], - test=TestInfo( - id=r"./X/test_h.py::test_spam", - name="test_spam", - path=TestPath( - root=altroot, - relfile=r"./X/test_h.py", - func="test_spam", - sub=None, - ), - source=r"./X/test_h.py:13", - markers=None, - parentid=r"./X/test_h.py", - ), - ), - ), - ], - ) - - def test_mysterious_parens(self): - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - testroot = fix_path("/a/b/c") - relfile = fix_path("x/y/z/test_eggs.py") - session.items = [ - StubFunctionItem( - stub, - nodeid=relfile + "::SpamTests::()::()::test_spam", - name="test_spam", - location=(relfile, 12, "SpamTests.test_spam"), - fspath=PATH_JOIN(testroot, relfile), - function=FakeFunc("test_spam"), - ), - ] - collector = TestCollector(tests=discovered) - - collector.pytest_collection_finish(session) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/y/z/test_eggs.py::SpamTests", "SpamTests", "suite"), - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::SpamTests::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="SpamTests.test_spam", - sub=[], - ), - source="{}:{}".format(fix_relpath(relfile), 13), - markers=None, - parentid="./x/y/z/test_eggs.py::SpamTests", - ), - ), - ), - ], - ) - - def test_imported_test(self): - # pytest will even discover tests that were imported from - # another module! - stub = Stub() - discovered = StubDiscoveredTests(stub) - session = StubPytestSession(stub) - testroot = fix_path("/a/b/c") - relfile = fix_path("x/y/z/test_eggs.py") - srcfile = fix_path("x/y/z/_extern.py") - session.items = [ - StubFunctionItem( - stub, - nodeid=relfile + "::SpamTests::test_spam", - name="test_spam", - location=(srcfile, 12, "SpamTests.test_spam"), - fspath=PATH_JOIN(testroot, relfile), - function=FakeFunc("test_spam"), - ), - StubFunctionItem( - stub, - nodeid=relfile + "::test_ham", - name="test_ham", - location=(srcfile, 3, "test_ham"), - fspath=PATH_JOIN(testroot, relfile), - function=FakeFunc("test_spam"), - ), - ] - collector = TestCollector(tests=discovered) - - collector.pytest_collection_finish(session) - - self.maxDiff = None - self.assertEqual( - stub.calls, - [ - ("discovered.reset", None, None), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/y/z/test_eggs.py::SpamTests", "SpamTests", "suite"), - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::SpamTests::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="SpamTests.test_spam", - sub=None, - ), - source="{}:{}".format(fix_relpath(srcfile), 13), - markers=None, - parentid="./x/y/z/test_eggs.py::SpamTests", - ), - ), - ), - ( - "discovered.add_test", - None, - dict( - parents=[ - ("./x/y/z/test_eggs.py", "test_eggs.py", "file"), - ("./x/y/z", "z", "folder"), - ("./x/y", "y", "folder"), - ("./x", "x", "folder"), - (".", testroot, "folder"), - ], - test=TestInfo( - id="./x/y/z/test_eggs.py::test_ham", - name="test_ham", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="test_ham", - sub=None, - ), - source="{}:{}".format(fix_relpath(srcfile), 4), - markers=None, - parentid="./x/y/z/test_eggs.py", - ), - ), - ), - ], - ) diff --git a/pythonFiles/tests/testing_tools/adapter/test___main__.py b/pythonFiles/tests/testing_tools/adapter/test___main__.py deleted file mode 100644 index e14b08ee9d5b..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/test___main__.py +++ /dev/null @@ -1,193 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import unittest - -from ...util import Stub, StubProxy -from testing_tools.adapter.__main__ import ( - parse_args, - main, - UnsupportedToolError, - UnsupportedCommandError, -) - - -class StubTool(StubProxy): - def __init__(self, name, stub=None): - super(StubTool, self).__init__(stub, name) - self.return_discover = None - - def discover(self, args, **kwargs): - self.add_call("discover", (args,), kwargs) - if self.return_discover is None: - raise NotImplementedError - return self.return_discover - - -class StubReporter(StubProxy): - def __init__(self, stub=None): - super(StubReporter, self).__init__(stub, "reporter") - - def report(self, tests, parents, **kwargs): - self.add_call("report", (tests, parents), kwargs or None) - - -################################## -# tests - - -class ParseGeneralTests(unittest.TestCase): - def test_unsupported_command(self): - with self.assertRaises(SystemExit): - parse_args(["run", "pytest"]) - with self.assertRaises(SystemExit): - parse_args(["debug", "pytest"]) - with self.assertRaises(SystemExit): - parse_args(["???", "pytest"]) - - -class ParseDiscoverTests(unittest.TestCase): - def test_pytest_default(self): - tool, cmd, args, toolargs = parse_args(["discover", "pytest",]) - - self.assertEqual(tool, "pytest") - self.assertEqual(cmd, "discover") - self.assertEqual(args, {"pretty": False, "hidestdio": True, "simple": False}) - self.assertEqual(toolargs, []) - - def test_pytest_full(self): - tool, cmd, args, toolargs = parse_args( - [ - "discover", - "pytest", - # no adapter-specific options yet - "--", - "--strict", - "--ignore", - "spam,ham,eggs", - "--pastebin=xyz", - "--no-cov", - "-d", - ] - ) - - self.assertEqual(tool, "pytest") - self.assertEqual(cmd, "discover") - self.assertEqual(args, {"pretty": False, "hidestdio": True, "simple": False}) - self.assertEqual( - toolargs, - [ - "--strict", - "--ignore", - "spam,ham,eggs", - "--pastebin=xyz", - "--no-cov", - "-d", - ], - ) - - def test_pytest_opts(self): - tool, cmd, args, toolargs = parse_args( - ["discover", "pytest", "--simple", "--no-hide-stdio", "--pretty",] - ) - - self.assertEqual(tool, "pytest") - self.assertEqual(cmd, "discover") - self.assertEqual(args, {"pretty": True, "hidestdio": False, "simple": True}) - self.assertEqual(toolargs, []) - - def test_unsupported_tool(self): - with self.assertRaises(SystemExit): - parse_args(["discover", "unittest"]) - with self.assertRaises(SystemExit): - parse_args(["discover", "nose"]) - with self.assertRaises(SystemExit): - parse_args(["discover", "???"]) - - -class MainTests(unittest.TestCase): - - # TODO: We could use an integration test for pytest.discover(). - - def test_discover(self): - stub = Stub() - tool = StubTool("spamspamspam", stub) - tests, parents = object(), object() - tool.return_discover = (parents, tests) - reporter = StubReporter(stub) - main( - tool.name, - "discover", - {"spam": "eggs"}, - [], - _tools={tool.name: {"discover": tool.discover,}}, - _reporters={"discover": reporter.report,}, - ) - - self.assertEqual( - tool.calls, - [ - ("spamspamspam.discover", ([],), {"spam": "eggs"}), - ("reporter.report", (tests, parents), {"spam": "eggs"}), - ], - ) - - def test_unsupported_tool(self): - with self.assertRaises(UnsupportedToolError): - main( - "unittest", - "discover", - {"spam": "eggs"}, - [], - _tools={"pytest": None}, - _reporters=None, - ) - with self.assertRaises(UnsupportedToolError): - main( - "nose", - "discover", - {"spam": "eggs"}, - [], - _tools={"pytest": None}, - _reporters=None, - ) - with self.assertRaises(UnsupportedToolError): - main( - "???", - "discover", - {"spam": "eggs"}, - [], - _tools={"pytest": None}, - _reporters=None, - ) - - def test_unsupported_command(self): - tool = StubTool("pytest") - with self.assertRaises(UnsupportedCommandError): - main( - "pytest", - "run", - {"spam": "eggs"}, - [], - _tools={"pytest": {"discover": tool.discover}}, - _reporters=None, - ) - with self.assertRaises(UnsupportedCommandError): - main( - "pytest", - "debug", - {"spam": "eggs"}, - [], - _tools={"pytest": {"discover": tool.discover}}, - _reporters=None, - ) - with self.assertRaises(UnsupportedCommandError): - main( - "pytest", - "???", - {"spam": "eggs"}, - [], - _tools={"pytest": {"discover": tool.discover}}, - _reporters=None, - ) - self.assertEqual(tool.calls, []) diff --git a/pythonFiles/tests/testing_tools/adapter/test_discovery.py b/pythonFiles/tests/testing_tools/adapter/test_discovery.py deleted file mode 100644 index e1238282cad7..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/test_discovery.py +++ /dev/null @@ -1,614 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import, print_function - -import unittest - -from testing_tools.adapter.util import fix_path, fix_relpath -from testing_tools.adapter.info import TestInfo, TestPath, ParentInfo -from testing_tools.adapter.discovery import fix_nodeid, DiscoveredTests - - -def _fix_nodeid(nodeid): - - nodeid = nodeid.replace("\\", "/") - if not nodeid.startswith("./"): - nodeid = "./" + nodeid - return nodeid - - -class DiscoveredTestsTests(unittest.TestCase): - def test_list(self): - testroot = fix_path("/a/b/c") - relfile = fix_path("./test_spam.py") - tests = [ - TestInfo( - # missing "./": - id="test_spam.py::test_each[10-10]", - name="test_each[10-10]", - path=TestPath( - root=testroot, relfile=relfile, func="test_each", sub=["[10-10]"], - ), - source="{}:{}".format(relfile, 10), - markers=None, - # missing "./": - parentid="test_spam.py::test_each", - ), - TestInfo( - id="test_spam.py::All::BasicTests::test_first", - name="test_first", - path=TestPath( - root=testroot, - relfile=relfile, - func="All.BasicTests.test_first", - sub=None, - ), - source="{}:{}".format(relfile, 62), - markers=None, - parentid="test_spam.py::All::BasicTests", - ), - ] - allparents = [ - [ - (fix_path("./test_spam.py::test_each"), "test_each", "function"), - (fix_path("./test_spam.py"), "test_spam.py", "file"), - (".", testroot, "folder"), - ], - [ - (fix_path("./test_spam.py::All::BasicTests"), "BasicTests", "suite"), - (fix_path("./test_spam.py::All"), "All", "suite"), - (fix_path("./test_spam.py"), "test_spam.py", "file"), - (".", testroot, "folder"), - ], - ] - expected = [ - test._replace(id=_fix_nodeid(test.id), parentid=_fix_nodeid(test.parentid)) - for test in tests - ] - discovered = DiscoveredTests() - for test, parents in zip(tests, allparents): - discovered.add_test(test, parents) - size = len(discovered) - items = [discovered[0], discovered[1]] - snapshot = list(discovered) - - self.maxDiff = None - self.assertEqual(size, 2) - self.assertEqual(items, expected) - self.assertEqual(snapshot, expected) - - def test_reset(self): - testroot = fix_path("/a/b/c") - discovered = DiscoveredTests() - discovered.add_test( - TestInfo( - id="./test_spam.py::test_each", - name="test_each", - path=TestPath(root=testroot, relfile="test_spam.py", func="test_each",), - source="test_spam.py:11", - markers=[], - parentid="./test_spam.py", - ), - [("./test_spam.py", "test_spam.py", "file"), (".", testroot, "folder"),], - ) - - before = len(discovered), len(discovered.parents) - discovered.reset() - after = len(discovered), len(discovered.parents) - - self.assertEqual(before, (1, 2)) - self.assertEqual(after, (0, 0)) - - def test_parents(self): - testroot = fix_path("/a/b/c") - relfile = fix_path("x/y/z/test_spam.py") - tests = [ - TestInfo( - # missing "./", using pathsep: - id=relfile + "::test_each[10-10]", - name="test_each[10-10]", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="test_each", - sub=["[10-10]"], - ), - source="{}:{}".format(relfile, 10), - markers=None, - # missing "./", using pathsep: - parentid=relfile + "::test_each", - ), - TestInfo( - # missing "./", using pathsep: - id=relfile + "::All::BasicTests::test_first", - name="test_first", - path=TestPath( - root=testroot, - relfile=fix_relpath(relfile), - func="All.BasicTests.test_first", - sub=None, - ), - source="{}:{}".format(relfile, 61), - markers=None, - # missing "./", using pathsep: - parentid=relfile + "::All::BasicTests", - ), - ] - allparents = [ - # missing "./", using pathsep: - [ - (relfile + "::test_each", "test_each", "function"), - (relfile, relfile, "file"), - (".", testroot, "folder"), - ], - # missing "./", using pathsep: - [ - (relfile + "::All::BasicTests", "BasicTests", "suite"), - (relfile + "::All", "All", "suite"), - (relfile, "test_spam.py", "file"), - (fix_path("x/y/z"), "z", "folder"), - (fix_path("x/y"), "y", "folder"), - (fix_path("./x"), "x", "folder"), - (".", testroot, "folder"), - ], - ] - discovered = DiscoveredTests() - for test, parents in zip(tests, allparents): - discovered.add_test(test, parents) - - parents = discovered.parents - - self.maxDiff = None - self.assertEqual( - parents, - [ - ParentInfo(id=".", kind="folder", name=testroot,), - ParentInfo( - id="./x", - kind="folder", - name="x", - root=testroot, - relpath=fix_path("./x"), - parentid=".", - ), - ParentInfo( - id="./x/y", - kind="folder", - name="y", - root=testroot, - relpath=fix_path("./x/y"), - parentid="./x", - ), - ParentInfo( - id="./x/y/z", - kind="folder", - name="z", - root=testroot, - relpath=fix_path("./x/y/z"), - parentid="./x/y", - ), - ParentInfo( - id="./x/y/z/test_spam.py", - kind="file", - name="test_spam.py", - root=testroot, - relpath=fix_relpath(relfile), - parentid="./x/y/z", - ), - ParentInfo( - id="./x/y/z/test_spam.py::All", - kind="suite", - name="All", - root=testroot, - parentid="./x/y/z/test_spam.py", - ), - ParentInfo( - id="./x/y/z/test_spam.py::All::BasicTests", - kind="suite", - name="BasicTests", - root=testroot, - parentid="./x/y/z/test_spam.py::All", - ), - ParentInfo( - id="./x/y/z/test_spam.py::test_each", - kind="function", - name="test_each", - root=testroot, - parentid="./x/y/z/test_spam.py", - ), - ], - ) - - def test_add_test_simple(self): - testroot = fix_path("/a/b/c") - relfile = "test_spam.py" - test = TestInfo( - # missing "./": - id=relfile + "::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - # missing "./": - relfile=relfile, - func="test_spam", - ), - # missing "./": - source="{}:{}".format(relfile, 11), - markers=[], - # missing "./": - parentid=relfile, - ) - expected = test._replace( - id=_fix_nodeid(test.id), parentid=_fix_nodeid(test.parentid) - ) - discovered = DiscoveredTests() - - before = list(discovered), discovered.parents - discovered.add_test( - test, [(relfile, relfile, "file"), (".", testroot, "folder"),] - ) - after = list(discovered), discovered.parents - - self.maxDiff = None - self.assertEqual(before, ([], [])) - self.assertEqual( - after, - ( - [expected], - [ - ParentInfo(id=".", kind="folder", name=testroot,), - ParentInfo( - id="./test_spam.py", - kind="file", - name=relfile, - root=testroot, - relpath=relfile, - parentid=".", - ), - ], - ), - ) - - def test_multiroot(self): - # the first root - testroot1 = fix_path("/a/b/c") - relfile1 = "test_spam.py" - alltests = [ - TestInfo( - # missing "./": - id=relfile1 + "::test_spam", - name="test_spam", - path=TestPath( - root=testroot1, relfile=fix_relpath(relfile1), func="test_spam", - ), - source="{}:{}".format(relfile1, 10), - markers=[], - # missing "./": - parentid=relfile1, - ), - ] - allparents = [ - # missing "./": - [(relfile1, "test_spam.py", "file"), (".", testroot1, "folder"),], - ] - # the second root - testroot2 = fix_path("/x/y/z") - relfile2 = fix_path("w/test_eggs.py") - alltests.extend( - [ - TestInfo( - id=relfile2 + "::BasicTests::test_first", - name="test_first", - path=TestPath( - root=testroot2, - relfile=fix_relpath(relfile2), - func="BasicTests.test_first", - ), - source="{}:{}".format(relfile2, 61), - markers=[], - parentid=relfile2 + "::BasicTests", - ), - ] - ) - allparents.extend( - [ - # missing "./", using pathsep: - [ - (relfile2 + "::BasicTests", "BasicTests", "suite"), - (relfile2, "test_eggs.py", "file"), - (fix_path("./w"), "w", "folder"), - (".", testroot2, "folder"), - ], - ] - ) - - discovered = DiscoveredTests() - for test, parents in zip(alltests, allparents): - discovered.add_test(test, parents) - tests = list(discovered) - parents = discovered.parents - - self.maxDiff = None - self.assertEqual( - tests, - [ - # the first root - TestInfo( - id="./test_spam.py::test_spam", - name="test_spam", - path=TestPath( - root=testroot1, relfile=fix_relpath(relfile1), func="test_spam", - ), - source="{}:{}".format(relfile1, 10), - markers=[], - parentid="./test_spam.py", - ), - # the secondroot - TestInfo( - id="./w/test_eggs.py::BasicTests::test_first", - name="test_first", - path=TestPath( - root=testroot2, - relfile=fix_relpath(relfile2), - func="BasicTests.test_first", - ), - source="{}:{}".format(relfile2, 61), - markers=[], - parentid="./w/test_eggs.py::BasicTests", - ), - ], - ) - self.assertEqual( - parents, - [ - # the first root - ParentInfo(id=".", kind="folder", name=testroot1,), - ParentInfo( - id="./test_spam.py", - kind="file", - name="test_spam.py", - root=testroot1, - relpath=fix_relpath(relfile1), - parentid=".", - ), - # the secondroot - ParentInfo(id=".", kind="folder", name=testroot2,), - ParentInfo( - id="./w", - kind="folder", - name="w", - root=testroot2, - relpath=fix_path("./w"), - parentid=".", - ), - ParentInfo( - id="./w/test_eggs.py", - kind="file", - name="test_eggs.py", - root=testroot2, - relpath=fix_relpath(relfile2), - parentid="./w", - ), - ParentInfo( - id="./w/test_eggs.py::BasicTests", - kind="suite", - name="BasicTests", - root=testroot2, - parentid="./w/test_eggs.py", - ), - ], - ) - - def test_doctest(self): - testroot = fix_path("/a/b/c") - doctestfile = fix_path("./x/test_doctest.txt") - relfile = fix_path("./x/y/z/test_eggs.py") - alltests = [ - TestInfo( - id=doctestfile + "::test_doctest.txt", - name="test_doctest.txt", - path=TestPath(root=testroot, relfile=doctestfile, func=None,), - source="{}:{}".format(doctestfile, 0), - markers=[], - parentid=doctestfile, - ), - # With --doctest-modules - TestInfo( - id=relfile + "::test_eggs", - name="test_eggs", - path=TestPath(root=testroot, relfile=relfile, func=None,), - source="{}:{}".format(relfile, 0), - markers=[], - parentid=relfile, - ), - TestInfo( - id=relfile + "::test_eggs.TestSpam", - name="test_eggs.TestSpam", - path=TestPath(root=testroot, relfile=relfile, func=None,), - source="{}:{}".format(relfile, 12), - markers=[], - parentid=relfile, - ), - TestInfo( - id=relfile + "::test_eggs.TestSpam.TestEggs", - name="test_eggs.TestSpam.TestEggs", - path=TestPath(root=testroot, relfile=relfile, func=None,), - source="{}:{}".format(relfile, 27), - markers=[], - parentid=relfile, - ), - ] - allparents = [ - [ - (doctestfile, "test_doctest.txt", "file"), - (fix_path("./x"), "x", "folder"), - (".", testroot, "folder"), - ], - [ - (relfile, "test_eggs.py", "file"), - (fix_path("./x/y/z"), "z", "folder"), - (fix_path("./x/y"), "y", "folder"), - (fix_path("./x"), "x", "folder"), - (".", testroot, "folder"), - ], - [ - (relfile, "test_eggs.py", "file"), - (fix_path("./x/y/z"), "z", "folder"), - (fix_path("./x/y"), "y", "folder"), - (fix_path("./x"), "x", "folder"), - (".", testroot, "folder"), - ], - [ - (relfile, "test_eggs.py", "file"), - (fix_path("./x/y/z"), "z", "folder"), - (fix_path("./x/y"), "y", "folder"), - (fix_path("./x"), "x", "folder"), - (".", testroot, "folder"), - ], - ] - expected = [ - test._replace(id=_fix_nodeid(test.id), parentid=_fix_nodeid(test.parentid)) - for test in alltests - ] - - discovered = DiscoveredTests() - - for test, parents in zip(alltests, allparents): - discovered.add_test(test, parents) - tests = list(discovered) - parents = discovered.parents - - self.maxDiff = None - self.assertEqual(tests, expected) - self.assertEqual( - parents, - [ - ParentInfo(id=".", kind="folder", name=testroot,), - ParentInfo( - id="./x", - kind="folder", - name="x", - root=testroot, - relpath=fix_path("./x"), - parentid=".", - ), - ParentInfo( - id="./x/test_doctest.txt", - kind="file", - name="test_doctest.txt", - root=testroot, - relpath=fix_path(doctestfile), - parentid="./x", - ), - ParentInfo( - id="./x/y", - kind="folder", - name="y", - root=testroot, - relpath=fix_path("./x/y"), - parentid="./x", - ), - ParentInfo( - id="./x/y/z", - kind="folder", - name="z", - root=testroot, - relpath=fix_path("./x/y/z"), - parentid="./x/y", - ), - ParentInfo( - id="./x/y/z/test_eggs.py", - kind="file", - name="test_eggs.py", - root=testroot, - relpath=fix_relpath(relfile), - parentid="./x/y/z", - ), - ], - ) - - def test_nested_suite_simple(self): - testroot = fix_path("/a/b/c") - relfile = fix_path("./test_eggs.py") - alltests = [ - TestInfo( - id=relfile + "::TestOuter::TestInner::test_spam", - name="test_spam", - path=TestPath( - root=testroot, - relfile=relfile, - func="TestOuter.TestInner.test_spam", - ), - source="{}:{}".format(relfile, 10), - markers=None, - parentid=relfile + "::TestOuter::TestInner", - ), - TestInfo( - id=relfile + "::TestOuter::TestInner::test_eggs", - name="test_eggs", - path=TestPath( - root=testroot, - relfile=relfile, - func="TestOuter.TestInner.test_eggs", - ), - source="{}:{}".format(relfile, 21), - markers=None, - parentid=relfile + "::TestOuter::TestInner", - ), - ] - allparents = [ - [ - (relfile + "::TestOuter::TestInner", "TestInner", "suite"), - (relfile + "::TestOuter", "TestOuter", "suite"), - (relfile, "test_eggs.py", "file"), - (".", testroot, "folder"), - ], - [ - (relfile + "::TestOuter::TestInner", "TestInner", "suite"), - (relfile + "::TestOuter", "TestOuter", "suite"), - (relfile, "test_eggs.py", "file"), - (".", testroot, "folder"), - ], - ] - expected = [ - test._replace(id=_fix_nodeid(test.id), parentid=_fix_nodeid(test.parentid)) - for test in alltests - ] - - discovered = DiscoveredTests() - for test, parents in zip(alltests, allparents): - discovered.add_test(test, parents) - tests = list(discovered) - parents = discovered.parents - - self.maxDiff = None - self.assertEqual(tests, expected) - self.assertEqual( - parents, - [ - ParentInfo(id=".", kind="folder", name=testroot,), - ParentInfo( - id="./test_eggs.py", - kind="file", - name="test_eggs.py", - root=testroot, - relpath=fix_relpath(relfile), - parentid=".", - ), - ParentInfo( - id="./test_eggs.py::TestOuter", - kind="suite", - name="TestOuter", - root=testroot, - parentid="./test_eggs.py", - ), - ParentInfo( - id="./test_eggs.py::TestOuter::TestInner", - kind="suite", - name="TestInner", - root=testroot, - parentid="./test_eggs.py::TestOuter", - ), - ], - ) diff --git a/pythonFiles/tests/testing_tools/adapter/test_functional.py b/pythonFiles/tests/testing_tools/adapter/test_functional.py deleted file mode 100644 index ce5bd120e3fa..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/test_functional.py +++ /dev/null @@ -1,1529 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import, unicode_literals - -import json -import os -import os.path -import subprocess -import sys -import unittest - -import pytest - -from ...__main__ import TESTING_TOOLS_ROOT -from testing_tools.adapter.util import fix_path, PATH_SEP - -# Pytest 3.7 and later uses pathlib/pathlib2 for path resolution. -try: - from pathlib import Path -except ImportError: - from pathlib2 import Path - - -CWD = os.getcwd() -DATA_DIR = os.path.join(os.path.dirname(__file__), ".data") -SCRIPT = os.path.join(TESTING_TOOLS_ROOT, "run_adapter.py") - - -def resolve_testroot(name): - projroot = os.path.join(DATA_DIR, name) - testroot = os.path.join(projroot, "tests") - return str(Path(projroot).resolve()), str(Path(testroot).resolve()) - - -def run_adapter(cmd, tool, *cliargs): - try: - return _run_adapter(cmd, tool, *cliargs) - except subprocess.CalledProcessError as exc: - print(exc.output) - - -def _run_adapter(cmd, tool, *cliargs, **kwargs): - hidestdio = kwargs.pop("hidestdio", True) - assert not kwargs or tuple(kwargs) == ("stderr",) - kwds = kwargs - argv = [sys.executable, SCRIPT, cmd, tool, "--"] + list(cliargs) - if not hidestdio: - argv.insert(4, "--no-hide-stdio") - kwds["stderr"] = subprocess.STDOUT - argv.append("--cache-clear") - print( - "running {!r}".format(" ".join(arg.rpartition(CWD + "/")[-1] for arg in argv)) - ) - output = subprocess.check_output(argv, universal_newlines=True, **kwds) - return output - - -def fix_test_order(tests): - if sys.version_info >= (3, 6): - return tests - fixed = [] - curfile = None - group = [] - for test in tests: - if (curfile or "???") not in test["id"]: - fixed.extend(sorted(group, key=lambda t: t["id"])) - group = [] - curfile = test["id"].partition(".py::")[0] + ".py" - group.append(test) - fixed.extend(sorted(group, key=lambda t: t["id"])) - return fixed - - -def fix_source(tests, testid, srcfile, lineno): - for test in tests: - if test["id"] == testid: - break - else: - raise KeyError("test {!r} not found".format(testid)) - if not srcfile: - srcfile = test["source"].rpartition(":")[0] - test["source"] = fix_path("{}:{}".format(srcfile, lineno)) - - -# Note that these tests are skipped if util.PATH_SEP is not os.path.sep. -# This is because the functional tests should reflect the actual -# operating environment. - - -@pytest.mark.functional -class PytestTests(unittest.TestCase): - def setUp(self): - if PATH_SEP is not os.path.sep: - raise unittest.SkipTest("functional tests require unmodified env") - super(PytestTests, self).setUp() - - def complex(self, testroot): - results = COMPLEX.copy() - results["root"] = testroot - return [results] - - def test_discover_simple(self): - projroot, testroot = resolve_testroot("simple") - - out = run_adapter("discover", "pytest", "--rootdir", projroot, testroot) - result = json.loads(out) - - self.maxDiff = None - self.assertEqual( - result, - [ - { - "root": projroot, - "rootid": ".", - "parents": [ - { - "id": "./tests", - "kind": "folder", - "name": "tests", - "relpath": fix_path("./tests"), - "parentid": ".", - }, - { - "id": "./tests/test_spam.py", - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path("./tests/test_spam.py"), - "parentid": "./tests", - }, - ], - "tests": [ - { - "id": "./tests/test_spam.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_spam.py:2"), - "markers": [], - "parentid": "./tests/test_spam.py", - }, - ], - } - ], - ) - - def test_discover_complex_default(self): - projroot, testroot = resolve_testroot("complex") - expected = self.complex(projroot) - expected[0]["tests"] = fix_test_order(expected[0]["tests"]) - if sys.version_info < (3,): - decorated = [ - "./tests/test_unittest.py::MyTests::test_skipped", - "./tests/test_unittest.py::MyTests::test_maybe_skipped", - "./tests/test_unittest.py::MyTests::test_maybe_not_skipped", - ] - for testid in decorated: - fix_source(expected[0]["tests"], testid, None, 0) - - out = run_adapter("discover", "pytest", "--rootdir", projroot, testroot) - result = json.loads(out) - result[0]["tests"] = fix_test_order(result[0]["tests"]) - - self.maxDiff = None - self.assertEqual(result, expected) - - def test_discover_complex_doctest(self): - projroot, _ = resolve_testroot("complex") - expected = self.complex(projroot) - # add in doctests from test suite - expected[0]["parents"].insert( - 3, - { - "id": "./tests/test_doctest.py", - "kind": "file", - "name": "test_doctest.py", - "relpath": fix_path("./tests/test_doctest.py"), - "parentid": "./tests", - }, - ) - expected[0]["tests"].insert( - 2, - { - "id": "./tests/test_doctest.py::tests.test_doctest", - "name": "tests.test_doctest", - "source": fix_path("./tests/test_doctest.py:1"), - "markers": [], - "parentid": "./tests/test_doctest.py", - }, - ) - # add in doctests from non-test module - expected[0]["parents"].insert( - 0, - { - "id": "./mod.py", - "kind": "file", - "name": "mod.py", - "relpath": fix_path("./mod.py"), - "parentid": ".", - }, - ) - expected[0]["tests"] = [ - { - "id": "./mod.py::mod", - "name": "mod", - "source": fix_path("./mod.py:1"), - "markers": [], - "parentid": "./mod.py", - }, - { - "id": "./mod.py::mod.Spam", - "name": "mod.Spam", - "source": fix_path("./mod.py:33"), - "markers": [], - "parentid": "./mod.py", - }, - { - "id": "./mod.py::mod.Spam.eggs", - "name": "mod.Spam.eggs", - "source": fix_path("./mod.py:43"), - "markers": [], - "parentid": "./mod.py", - }, - { - "id": "./mod.py::mod.square", - "name": "mod.square", - "source": fix_path("./mod.py:18"), - "markers": [], - "parentid": "./mod.py", - }, - ] + expected[0]["tests"] - expected[0]["tests"] = fix_test_order(expected[0]["tests"]) - if sys.version_info < (3,): - decorated = [ - "./tests/test_unittest.py::MyTests::test_skipped", - "./tests/test_unittest.py::MyTests::test_maybe_skipped", - "./tests/test_unittest.py::MyTests::test_maybe_not_skipped", - ] - for testid in decorated: - fix_source(expected[0]["tests"], testid, None, 0) - - out = run_adapter( - "discover", "pytest", "--rootdir", projroot, "--doctest-modules", projroot - ) - result = json.loads(out) - result[0]["tests"] = fix_test_order(result[0]["tests"]) - - self.maxDiff = None - self.assertEqual(result, expected) - - def test_discover_not_found(self): - projroot, testroot = resolve_testroot("notests") - - out = run_adapter("discover", "pytest", "--rootdir", projroot, testroot) - result = json.loads(out) - - self.maxDiff = None - self.assertEqual(result, []) - # TODO: Expect the following instead? - # self.assertEqual(result, [{ - # 'root': projroot, - # 'rootid': '.', - # 'parents': [], - # 'tests': [], - # }]) - - @unittest.skip("broken in CI") - def test_discover_bad_args(self): - projroot, testroot = resolve_testroot("simple") - - with self.assertRaises(subprocess.CalledProcessError) as cm: - _run_adapter( - "discover", - "pytest", - "--spam", - "--rootdir", - projroot, - testroot, - stderr=subprocess.STDOUT, - ) - self.assertIn("(exit code 4)", cm.exception.output) - - def test_discover_syntax_error(self): - projroot, testroot = resolve_testroot("syntax-error") - - with self.assertRaises(subprocess.CalledProcessError) as cm: - _run_adapter( - "discover", - "pytest", - "--rootdir", - projroot, - testroot, - stderr=subprocess.STDOUT, - ) - self.assertIn("(exit code 2)", cm.exception.output) - - def test_discover_normcase(self): - projroot, testroot = resolve_testroot("NormCase") - - out = run_adapter("discover", "pytest", "--rootdir", projroot, testroot) - result = json.loads(out) - - self.maxDiff = None - self.assertTrue(projroot.endswith("NormCase")) - self.assertEqual( - result, - [ - { - "root": projroot, - "rootid": ".", - "parents": [ - { - "id": "./tests", - "kind": "folder", - "name": "tests", - "relpath": fix_path("./tests"), - "parentid": ".", - }, - { - "id": "./tests/A", - "kind": "folder", - "name": "A", - "relpath": fix_path("./tests/A"), - "parentid": "./tests", - }, - { - "id": "./tests/A/b", - "kind": "folder", - "name": "b", - "relpath": fix_path("./tests/A/b"), - "parentid": "./tests/A", - }, - { - "id": "./tests/A/b/C", - "kind": "folder", - "name": "C", - "relpath": fix_path("./tests/A/b/C"), - "parentid": "./tests/A/b", - }, - { - "id": "./tests/A/b/C/test_Spam.py", - "kind": "file", - "name": "test_Spam.py", - "relpath": fix_path("./tests/A/b/C/test_Spam.py"), - "parentid": "./tests/A/b/C", - }, - ], - "tests": [ - { - "id": "./tests/A/b/C/test_Spam.py::test_okay", - "name": "test_okay", - "source": fix_path("./tests/A/b/C/test_Spam.py:2"), - "markers": [], - "parentid": "./tests/A/b/C/test_Spam.py", - }, - ], - } - ], - ) - - -COMPLEX = { - "root": None, - "rootid": ".", - "parents": [ - # - { - "id": "./tests", - "kind": "folder", - "name": "tests", - "relpath": fix_path("./tests"), - "parentid": ".", - }, - # +++ - { - "id": "./tests/test_42-43.py", - "kind": "file", - "name": "test_42-43.py", - "relpath": fix_path("./tests/test_42-43.py"), - "parentid": "./tests", - }, - # +++ - { - "id": "./tests/test_42.py", - "kind": "file", - "name": "test_42.py", - "relpath": fix_path("./tests/test_42.py"), - "parentid": "./tests", - }, - # +++ - { - "id": "./tests/test_doctest.txt", - "kind": "file", - "name": "test_doctest.txt", - "relpath": fix_path("./tests/test_doctest.txt"), - "parentid": "./tests", - }, - # +++ - { - "id": "./tests/test_foo.py", - "kind": "file", - "name": "test_foo.py", - "relpath": fix_path("./tests/test_foo.py"), - "parentid": "./tests", - }, - # +++ - { - "id": "./tests/test_mixed.py", - "kind": "file", - "name": "test_mixed.py", - "relpath": fix_path("./tests/test_mixed.py"), - "parentid": "./tests", - }, - { - "id": "./tests/test_mixed.py::MyTests", - "kind": "suite", - "name": "MyTests", - "parentid": "./tests/test_mixed.py", - }, - { - "id": "./tests/test_mixed.py::TestMySuite", - "kind": "suite", - "name": "TestMySuite", - "parentid": "./tests/test_mixed.py", - }, - # +++ - { - "id": "./tests/test_pytest.py", - "kind": "file", - "name": "test_pytest.py", - "relpath": fix_path("./tests/test_pytest.py"), - "parentid": "./tests", - }, - { - "id": "./tests/test_pytest.py::TestEggs", - "kind": "suite", - "name": "TestEggs", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::TestParam", - "kind": "suite", - "name": "TestParam", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::TestParam::test_param_13", - "kind": "function", - "name": "test_param_13", - "parentid": "./tests/test_pytest.py::TestParam", - }, - { - "id": "./tests/test_pytest.py::TestParamAll", - "kind": "suite", - "name": "TestParamAll", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_param_13", - "kind": "function", - "name": "test_param_13", - "parentid": "./tests/test_pytest.py::TestParamAll", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_spam_13", - "kind": "function", - "name": "test_spam_13", - "parentid": "./tests/test_pytest.py::TestParamAll", - }, - { - "id": "./tests/test_pytest.py::TestSpam", - "kind": "suite", - "name": "TestSpam", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::TestSpam::TestHam", - "kind": "suite", - "name": "TestHam", - "parentid": "./tests/test_pytest.py::TestSpam", - }, - { - "id": "./tests/test_pytest.py::TestSpam::TestHam::TestEggs", - "kind": "suite", - "name": "TestEggs", - "parentid": "./tests/test_pytest.py::TestSpam::TestHam", - }, - { - "id": "./tests/test_pytest.py::test_fixture_param", - "kind": "function", - "name": "test_fixture_param", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_01", - "kind": "function", - "name": "test_param_01", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_11", - "kind": "function", - "name": "test_param_11", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_13", - "kind": "function", - "name": "test_param_13", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_13_markers", - "kind": "function", - "name": "test_param_13_markers", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_13_repeat", - "kind": "function", - "name": "test_param_13_repeat", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_13_skipped", - "kind": "function", - "name": "test_param_13_skipped", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13", - "kind": "function", - "name": "test_param_23_13", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_23_raises", - "kind": "function", - "name": "test_param_23_raises", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_33", - "kind": "function", - "name": "test_param_33", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_33_ids", - "kind": "function", - "name": "test_param_33_ids", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_fixture", - "kind": "function", - "name": "test_param_fixture", - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_mark_fixture", - "kind": "function", - "name": "test_param_mark_fixture", - "parentid": "./tests/test_pytest.py", - }, - # +++ - { - "id": "./tests/test_pytest_param.py", - "kind": "file", - "name": "test_pytest_param.py", - "relpath": fix_path("./tests/test_pytest_param.py"), - "parentid": "./tests", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll", - "kind": "suite", - "name": "TestParamAll", - "parentid": "./tests/test_pytest_param.py", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_param_13", - "kind": "function", - "name": "test_param_13", - "parentid": "./tests/test_pytest_param.py::TestParamAll", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_spam_13", - "kind": "function", - "name": "test_spam_13", - "parentid": "./tests/test_pytest_param.py::TestParamAll", - }, - { - "id": "./tests/test_pytest_param.py::test_param_13", - "kind": "function", - "name": "test_param_13", - "parentid": "./tests/test_pytest_param.py", - }, - # +++ - { - "id": "./tests/test_unittest.py", - "kind": "file", - "name": "test_unittest.py", - "relpath": fix_path("./tests/test_unittest.py"), - "parentid": "./tests", - }, - { - "id": "./tests/test_unittest.py::MyTests", - "kind": "suite", - "name": "MyTests", - "parentid": "./tests/test_unittest.py", - }, - { - "id": "./tests/test_unittest.py::OtherTests", - "kind": "suite", - "name": "OtherTests", - "parentid": "./tests/test_unittest.py", - }, - ## - { - "id": "./tests/v", - "kind": "folder", - "name": "v", - "relpath": fix_path("./tests/v"), - "parentid": "./tests", - }, - ## +++ - { - "id": "./tests/v/test_eggs.py", - "kind": "file", - "name": "test_eggs.py", - "relpath": fix_path("./tests/v/test_eggs.py"), - "parentid": "./tests/v", - }, - { - "id": "./tests/v/test_eggs.py::TestSimple", - "kind": "suite", - "name": "TestSimple", - "parentid": "./tests/v/test_eggs.py", - }, - ## +++ - { - "id": "./tests/v/test_ham.py", - "kind": "file", - "name": "test_ham.py", - "relpath": fix_path("./tests/v/test_ham.py"), - "parentid": "./tests/v", - }, - ## +++ - { - "id": "./tests/v/test_spam.py", - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path("./tests/v/test_spam.py"), - "parentid": "./tests/v", - }, - ## - { - "id": "./tests/w", - "kind": "folder", - "name": "w", - "relpath": fix_path("./tests/w"), - "parentid": "./tests", - }, - ## +++ - { - "id": "./tests/w/test_spam.py", - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path("./tests/w/test_spam.py"), - "parentid": "./tests/w", - }, - ## +++ - { - "id": "./tests/w/test_spam_ex.py", - "kind": "file", - "name": "test_spam_ex.py", - "relpath": fix_path("./tests/w/test_spam_ex.py"), - "parentid": "./tests/w", - }, - ## - { - "id": "./tests/x", - "kind": "folder", - "name": "x", - "relpath": fix_path("./tests/x"), - "parentid": "./tests", - }, - ### - { - "id": "./tests/x/y", - "kind": "folder", - "name": "y", - "relpath": fix_path("./tests/x/y"), - "parentid": "./tests/x", - }, - #### - { - "id": "./tests/x/y/z", - "kind": "folder", - "name": "z", - "relpath": fix_path("./tests/x/y/z"), - "parentid": "./tests/x/y", - }, - ##### - { - "id": "./tests/x/y/z/a", - "kind": "folder", - "name": "a", - "relpath": fix_path("./tests/x/y/z/a"), - "parentid": "./tests/x/y/z", - }, - ##### +++ - { - "id": "./tests/x/y/z/a/test_spam.py", - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path("./tests/x/y/z/a/test_spam.py"), - "parentid": "./tests/x/y/z/a", - }, - ##### - { - "id": "./tests/x/y/z/b", - "kind": "folder", - "name": "b", - "relpath": fix_path("./tests/x/y/z/b"), - "parentid": "./tests/x/y/z", - }, - ##### +++ - { - "id": "./tests/x/y/z/b/test_spam.py", - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path("./tests/x/y/z/b/test_spam.py"), - "parentid": "./tests/x/y/z/b", - }, - #### +++ - { - "id": "./tests/x/y/z/test_ham.py", - "kind": "file", - "name": "test_ham.py", - "relpath": fix_path("./tests/x/y/z/test_ham.py"), - "parentid": "./tests/x/y/z", - }, - ], - "tests": [ - ########## - { - "id": "./tests/test_42-43.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_42-43.py:2"), - "markers": [], - "parentid": "./tests/test_42-43.py", - }, - ##### - { - "id": "./tests/test_42.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_42.py:2"), - "markers": [], - "parentid": "./tests/test_42.py", - }, - ##### - { - "id": "./tests/test_doctest.txt::test_doctest.txt", - "name": "test_doctest.txt", - "source": fix_path("./tests/test_doctest.txt:1"), - "markers": [], - "parentid": "./tests/test_doctest.txt", - }, - ##### - { - "id": "./tests/test_foo.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_foo.py:3"), - "markers": [], - "parentid": "./tests/test_foo.py", - }, - ##### - { - "id": "./tests/test_mixed.py::test_top_level", - "name": "test_top_level", - "source": fix_path("./tests/test_mixed.py:5"), - "markers": [], - "parentid": "./tests/test_mixed.py", - }, - { - "id": "./tests/test_mixed.py::test_skipped", - "name": "test_skipped", - "source": fix_path("./tests/test_mixed.py:9"), - "markers": ["skip"], - "parentid": "./tests/test_mixed.py", - }, - { - "id": "./tests/test_mixed.py::TestMySuite::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_mixed.py:16"), - "markers": [], - "parentid": "./tests/test_mixed.py::TestMySuite", - }, - { - "id": "./tests/test_mixed.py::MyTests::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_mixed.py:22"), - "markers": [], - "parentid": "./tests/test_mixed.py::MyTests", - }, - { - "id": "./tests/test_mixed.py::MyTests::test_skipped", - "name": "test_skipped", - "source": fix_path("./tests/test_mixed.py:25"), - "markers": ["skip"], - "parentid": "./tests/test_mixed.py::MyTests", - }, - ##### - { - "id": "./tests/test_pytest.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_pytest.py:6"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_failure", - "name": "test_failure", - "source": fix_path("./tests/test_pytest.py:10"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_runtime_skipped", - "name": "test_runtime_skipped", - "source": fix_path("./tests/test_pytest.py:14"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_runtime_failed", - "name": "test_runtime_failed", - "source": fix_path("./tests/test_pytest.py:18"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_raises", - "name": "test_raises", - "source": fix_path("./tests/test_pytest.py:22"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_skipped", - "name": "test_skipped", - "source": fix_path("./tests/test_pytest.py:26"), - "markers": ["skip"], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_maybe_skipped", - "name": "test_maybe_skipped", - "source": fix_path("./tests/test_pytest.py:31"), - "markers": ["skip-if"], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_known_failure", - "name": "test_known_failure", - "source": fix_path("./tests/test_pytest.py:36"), - "markers": ["expected-failure"], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_warned", - "name": "test_warned", - "source": fix_path("./tests/test_pytest.py:41"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_custom_marker", - "name": "test_custom_marker", - "source": fix_path("./tests/test_pytest.py:46"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_multiple_markers", - "name": "test_multiple_markers", - "source": fix_path("./tests/test_pytest.py:51"), - "markers": ["expected-failure", "skip", "skip-if"], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_dynamic_1", - "name": "test_dynamic_1", - "source": fix_path("./tests/test_pytest.py:62"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_dynamic_2", - "name": "test_dynamic_2", - "source": fix_path("./tests/test_pytest.py:62"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_dynamic_3", - "name": "test_dynamic_3", - "source": fix_path("./tests/test_pytest.py:62"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::TestSpam::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_pytest.py:70"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestSpam", - }, - { - "id": "./tests/test_pytest.py::TestSpam::test_skipped", - "name": "test_skipped", - "source": fix_path("./tests/test_pytest.py:73"), - "markers": ["skip"], - "parentid": "./tests/test_pytest.py::TestSpam", - }, - { - "id": "./tests/test_pytest.py::TestSpam::TestHam::TestEggs::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_pytest.py:81"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestSpam::TestHam::TestEggs", - }, - { - "id": "./tests/test_pytest.py::TestEggs::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_pytest.py:93"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestEggs", - }, - { - "id": "./tests/test_pytest.py::test_param_01[]", - "name": "test_param_01[]", - "source": fix_path("./tests/test_pytest.py:103"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_01", - }, - { - "id": "./tests/test_pytest.py::test_param_11[x0]", - "name": "test_param_11[x0]", - "source": fix_path("./tests/test_pytest.py:108"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_11", - }, - { - "id": "./tests/test_pytest.py::test_param_13[x0]", - "name": "test_param_13[x0]", - "source": fix_path("./tests/test_pytest.py:113"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_13", - }, - { - "id": "./tests/test_pytest.py::test_param_13[x1]", - "name": "test_param_13[x1]", - "source": fix_path("./tests/test_pytest.py:113"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_13", - }, - { - "id": "./tests/test_pytest.py::test_param_13[x2]", - "name": "test_param_13[x2]", - "source": fix_path("./tests/test_pytest.py:113"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_13", - }, - { - "id": "./tests/test_pytest.py::test_param_13_repeat[x0]", - "name": "test_param_13_repeat[x0]", - "source": fix_path("./tests/test_pytest.py:118"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_13_repeat", - }, - { - "id": "./tests/test_pytest.py::test_param_13_repeat[x1]", - "name": "test_param_13_repeat[x1]", - "source": fix_path("./tests/test_pytest.py:118"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_13_repeat", - }, - { - "id": "./tests/test_pytest.py::test_param_13_repeat[x2]", - "name": "test_param_13_repeat[x2]", - "source": fix_path("./tests/test_pytest.py:118"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_13_repeat", - }, - { - "id": "./tests/test_pytest.py::test_param_33[1-1-1]", - "name": "test_param_33[1-1-1]", - "source": fix_path("./tests/test_pytest.py:123"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_33", - }, - { - "id": "./tests/test_pytest.py::test_param_33[3-4-5]", - "name": "test_param_33[3-4-5]", - "source": fix_path("./tests/test_pytest.py:123"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_33", - }, - { - "id": "./tests/test_pytest.py::test_param_33[0-0-0]", - "name": "test_param_33[0-0-0]", - "source": fix_path("./tests/test_pytest.py:123"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_33", - }, - { - "id": "./tests/test_pytest.py::test_param_33_ids[v1]", - "name": "test_param_33_ids[v1]", - "source": fix_path("./tests/test_pytest.py:128"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_33_ids", - }, - { - "id": "./tests/test_pytest.py::test_param_33_ids[v2]", - "name": "test_param_33_ids[v2]", - "source": fix_path("./tests/test_pytest.py:128"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_33_ids", - }, - { - "id": "./tests/test_pytest.py::test_param_33_ids[v3]", - "name": "test_param_33_ids[v3]", - "source": fix_path("./tests/test_pytest.py:128"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_33_ids", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[1-1-z0]", - "name": "test_param_23_13[1-1-z0]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[1-1-z1]", - "name": "test_param_23_13[1-1-z1]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[1-1-z2]", - "name": "test_param_23_13[1-1-z2]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[3-4-z0]", - "name": "test_param_23_13[3-4-z0]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[3-4-z1]", - "name": "test_param_23_13[3-4-z1]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[3-4-z2]", - "name": "test_param_23_13[3-4-z2]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[0-0-z0]", - "name": "test_param_23_13[0-0-z0]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[0-0-z1]", - "name": "test_param_23_13[0-0-z1]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_23_13[0-0-z2]", - "name": "test_param_23_13[0-0-z2]", - "source": fix_path("./tests/test_pytest.py:134"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_13", - }, - { - "id": "./tests/test_pytest.py::test_param_13_markers[x0]", - "name": "test_param_13_markers[x0]", - "source": fix_path("./tests/test_pytest.py:140"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_13_markers", - }, - { - "id": "./tests/test_pytest.py::test_param_13_markers[???]", - "name": "test_param_13_markers[???]", - "source": fix_path("./tests/test_pytest.py:140"), - "markers": ["skip"], - "parentid": "./tests/test_pytest.py::test_param_13_markers", - }, - { - "id": "./tests/test_pytest.py::test_param_13_markers[2]", - "name": "test_param_13_markers[2]", - "source": fix_path("./tests/test_pytest.py:140"), - "markers": ["expected-failure"], - "parentid": "./tests/test_pytest.py::test_param_13_markers", - }, - { - "id": "./tests/test_pytest.py::test_param_13_skipped[x0]", - "name": "test_param_13_skipped[x0]", - "source": fix_path("./tests/test_pytest.py:149"), - "markers": ["skip"], - "parentid": "./tests/test_pytest.py::test_param_13_skipped", - }, - { - "id": "./tests/test_pytest.py::test_param_13_skipped[x1]", - "name": "test_param_13_skipped[x1]", - "source": fix_path("./tests/test_pytest.py:149"), - "markers": ["skip"], - "parentid": "./tests/test_pytest.py::test_param_13_skipped", - }, - { - "id": "./tests/test_pytest.py::test_param_13_skipped[x2]", - "name": "test_param_13_skipped[x2]", - "source": fix_path("./tests/test_pytest.py:149"), - "markers": ["skip"], - "parentid": "./tests/test_pytest.py::test_param_13_skipped", - }, - { - "id": "./tests/test_pytest.py::test_param_23_raises[1-None]", - "name": "test_param_23_raises[1-None]", - "source": fix_path("./tests/test_pytest.py:155"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_raises", - }, - { - "id": "./tests/test_pytest.py::test_param_23_raises[1.0-None]", - "name": "test_param_23_raises[1.0-None]", - "source": fix_path("./tests/test_pytest.py:155"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_raises", - }, - { - "id": "./tests/test_pytest.py::test_param_23_raises[2-catch2]", - "name": "test_param_23_raises[2-catch2]", - "source": fix_path("./tests/test_pytest.py:155"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_23_raises", - }, - { - "id": "./tests/test_pytest.py::TestParam::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_pytest.py:164"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParam", - }, - { - "id": "./tests/test_pytest.py::TestParam::test_param_13[x0]", - "name": "test_param_13[x0]", - "source": fix_path("./tests/test_pytest.py:167"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParam::test_param_13", - }, - { - "id": "./tests/test_pytest.py::TestParam::test_param_13[x1]", - "name": "test_param_13[x1]", - "source": fix_path("./tests/test_pytest.py:167"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParam::test_param_13", - }, - { - "id": "./tests/test_pytest.py::TestParam::test_param_13[x2]", - "name": "test_param_13[x2]", - "source": fix_path("./tests/test_pytest.py:167"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParam::test_param_13", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_param_13[x0]", - "name": "test_param_13[x0]", - "source": fix_path("./tests/test_pytest.py:175"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParamAll::test_param_13", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_param_13[x1]", - "name": "test_param_13[x1]", - "source": fix_path("./tests/test_pytest.py:175"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParamAll::test_param_13", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_param_13[x2]", - "name": "test_param_13[x2]", - "source": fix_path("./tests/test_pytest.py:175"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParamAll::test_param_13", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_spam_13[x0]", - "name": "test_spam_13[x0]", - "source": fix_path("./tests/test_pytest.py:178"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParamAll::test_spam_13", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_spam_13[x1]", - "name": "test_spam_13[x1]", - "source": fix_path("./tests/test_pytest.py:178"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParamAll::test_spam_13", - }, - { - "id": "./tests/test_pytest.py::TestParamAll::test_spam_13[x2]", - "name": "test_spam_13[x2]", - "source": fix_path("./tests/test_pytest.py:178"), - "markers": [], - "parentid": "./tests/test_pytest.py::TestParamAll::test_spam_13", - }, - { - "id": "./tests/test_pytest.py::test_fixture", - "name": "test_fixture", - "source": fix_path("./tests/test_pytest.py:192"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_mark_fixture", - "name": "test_mark_fixture", - "source": fix_path("./tests/test_pytest.py:196"), - "markers": [], - "parentid": "./tests/test_pytest.py", - }, - { - "id": "./tests/test_pytest.py::test_param_fixture[x0]", - "name": "test_param_fixture[x0]", - "source": fix_path("./tests/test_pytest.py:201"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_fixture", - }, - { - "id": "./tests/test_pytest.py::test_param_fixture[x1]", - "name": "test_param_fixture[x1]", - "source": fix_path("./tests/test_pytest.py:201"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_fixture", - }, - { - "id": "./tests/test_pytest.py::test_param_fixture[x2]", - "name": "test_param_fixture[x2]", - "source": fix_path("./tests/test_pytest.py:201"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_fixture", - }, - { - "id": "./tests/test_pytest.py::test_param_mark_fixture[x0]", - "name": "test_param_mark_fixture[x0]", - "source": fix_path("./tests/test_pytest.py:207"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_mark_fixture", - }, - { - "id": "./tests/test_pytest.py::test_param_mark_fixture[x1]", - "name": "test_param_mark_fixture[x1]", - "source": fix_path("./tests/test_pytest.py:207"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_mark_fixture", - }, - { - "id": "./tests/test_pytest.py::test_param_mark_fixture[x2]", - "name": "test_param_mark_fixture[x2]", - "source": fix_path("./tests/test_pytest.py:207"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_param_mark_fixture", - }, - { - "id": "./tests/test_pytest.py::test_fixture_param[spam]", - "name": "test_fixture_param[spam]", - "source": fix_path("./tests/test_pytest.py:216"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_fixture_param", - }, - { - "id": "./tests/test_pytest.py::test_fixture_param[eggs]", - "name": "test_fixture_param[eggs]", - "source": fix_path("./tests/test_pytest.py:216"), - "markers": [], - "parentid": "./tests/test_pytest.py::test_fixture_param", - }, - ###### - { - "id": "./tests/test_pytest_param.py::test_param_13[x0]", - "name": "test_param_13[x0]", - "source": fix_path("./tests/test_pytest_param.py:8"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::test_param_13", - }, - { - "id": "./tests/test_pytest_param.py::test_param_13[x1]", - "name": "test_param_13[x1]", - "source": fix_path("./tests/test_pytest_param.py:8"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::test_param_13", - }, - { - "id": "./tests/test_pytest_param.py::test_param_13[x2]", - "name": "test_param_13[x2]", - "source": fix_path("./tests/test_pytest_param.py:8"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::test_param_13", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_param_13[x0]", - "name": "test_param_13[x0]", - "source": fix_path("./tests/test_pytest_param.py:14"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::TestParamAll::test_param_13", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_param_13[x1]", - "name": "test_param_13[x1]", - "source": fix_path("./tests/test_pytest_param.py:14"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::TestParamAll::test_param_13", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_param_13[x2]", - "name": "test_param_13[x2]", - "source": fix_path("./tests/test_pytest_param.py:14"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::TestParamAll::test_param_13", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_spam_13[x0]", - "name": "test_spam_13[x0]", - "source": fix_path("./tests/test_pytest_param.py:17"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::TestParamAll::test_spam_13", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_spam_13[x1]", - "name": "test_spam_13[x1]", - "source": fix_path("./tests/test_pytest_param.py:17"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::TestParamAll::test_spam_13", - }, - { - "id": "./tests/test_pytest_param.py::TestParamAll::test_spam_13[x2]", - "name": "test_spam_13[x2]", - "source": fix_path("./tests/test_pytest_param.py:17"), - "markers": [], - "parentid": "./tests/test_pytest_param.py::TestParamAll::test_spam_13", - }, - ###### - { - "id": "./tests/test_unittest.py::MyTests::test_dynamic_", - "name": "test_dynamic_", - "source": fix_path("./tests/test_unittest.py:54"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_failure", - "name": "test_failure", - "source": fix_path("./tests/test_unittest.py:34"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_known_failure", - "name": "test_known_failure", - "source": fix_path("./tests/test_unittest.py:37"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_maybe_not_skipped", - "name": "test_maybe_not_skipped", - "source": fix_path("./tests/test_unittest.py:17"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_maybe_skipped", - "name": "test_maybe_skipped", - "source": fix_path("./tests/test_unittest.py:13"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_unittest.py:6"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_skipped", - "name": "test_skipped", - "source": fix_path("./tests/test_unittest.py:9"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_skipped_inside", - "name": "test_skipped_inside", - "source": fix_path("./tests/test_unittest.py:21"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_with_nested_subtests", - "name": "test_with_nested_subtests", - "source": fix_path("./tests/test_unittest.py:46"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::MyTests::test_with_subtests", - "name": "test_with_subtests", - "source": fix_path("./tests/test_unittest.py:41"), - "markers": [], - "parentid": "./tests/test_unittest.py::MyTests", - }, - { - "id": "./tests/test_unittest.py::OtherTests::test_simple", - "name": "test_simple", - "source": fix_path("./tests/test_unittest.py:61"), - "markers": [], - "parentid": "./tests/test_unittest.py::OtherTests", - }, - ########### - { - "id": "./tests/v/test_eggs.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/v/spam.py:2"), - "markers": [], - "parentid": "./tests/v/test_eggs.py", - }, - { - "id": "./tests/v/test_eggs.py::TestSimple::test_simple", - "name": "test_simple", - "source": fix_path("./tests/v/spam.py:8"), - "markers": [], - "parentid": "./tests/v/test_eggs.py::TestSimple", - }, - ###### - { - "id": "./tests/v/test_ham.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/v/spam.py:2"), - "markers": [], - "parentid": "./tests/v/test_ham.py", - }, - { - "id": "./tests/v/test_ham.py::test_not_hard", - "name": "test_not_hard", - "source": fix_path("./tests/v/spam.py:2"), - "markers": [], - "parentid": "./tests/v/test_ham.py", - }, - ###### - { - "id": "./tests/v/test_spam.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/v/spam.py:2"), - "markers": [], - "parentid": "./tests/v/test_spam.py", - }, - { - "id": "./tests/v/test_spam.py::test_simpler", - "name": "test_simpler", - "source": fix_path("./tests/v/test_spam.py:4"), - "markers": [], - "parentid": "./tests/v/test_spam.py", - }, - ########### - { - "id": "./tests/w/test_spam.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/w/test_spam.py:4"), - "markers": [], - "parentid": "./tests/w/test_spam.py", - }, - { - "id": "./tests/w/test_spam_ex.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/w/test_spam_ex.py:4"), - "markers": [], - "parentid": "./tests/w/test_spam_ex.py", - }, - ########### - { - "id": "./tests/x/y/z/test_ham.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/x/y/z/test_ham.py:2"), - "markers": [], - "parentid": "./tests/x/y/z/test_ham.py", - }, - ###### - { - "id": "./tests/x/y/z/a/test_spam.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/x/y/z/a/test_spam.py:11"), - "markers": [], - "parentid": "./tests/x/y/z/a/test_spam.py", - }, - { - "id": "./tests/x/y/z/b/test_spam.py::test_simple", - "name": "test_simple", - "source": fix_path("./tests/x/y/z/b/test_spam.py:7"), - "markers": [], - "parentid": "./tests/x/y/z/b/test_spam.py", - }, - ], -} diff --git a/pythonFiles/tests/testing_tools/adapter/test_report.py b/pythonFiles/tests/testing_tools/adapter/test_report.py deleted file mode 100644 index 0c94ebd51567..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/test_report.py +++ /dev/null @@ -1,1113 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -import json -import unittest - -from ...util import StubProxy -from testing_tools.adapter.util import fix_path, fix_relpath -from testing_tools.adapter.info import TestInfo, TestPath, ParentInfo -from testing_tools.adapter.report import report_discovered - - -class StubSender(StubProxy): - def send(self, outstr): - self.add_call("send", (json.loads(outstr),), None) - - -################################## -# tests - - -class ReportDiscoveredTests(unittest.TestCase): - def test_basic(self): - stub = StubSender() - testroot = fix_path("/a/b/c") - relfile = "test_spam.py" - relpath = fix_relpath(relfile) - tests = [ - TestInfo( - id="test#1", - name="test_spam", - path=TestPath(root=testroot, relfile=relfile, func="test_spam",), - source="{}:{}".format(relfile, 10), - markers=[], - parentid="file#1", - ), - ] - parents = [ - ParentInfo(id="", kind="folder", name=testroot,), - ParentInfo( - id="file#1", - kind="file", - name=relfile, - root=testroot, - relpath=relpath, - parentid="", - ), - ] - expected = [ - { - "rootid": "", - "root": testroot, - "parents": [ - { - "id": "file#1", - "kind": "file", - "name": relfile, - "relpath": relpath, - "parentid": "", - }, - ], - "tests": [ - { - "id": "test#1", - "name": "test_spam", - "source": "{}:{}".format(relfile, 10), - "markers": [], - "parentid": "file#1", - } - ], - } - ] - - report_discovered(tests, parents, _send=stub.send) - - self.maxDiff = None - self.assertEqual(stub.calls, [("send", (expected,), None),]) - - def test_multiroot(self): - stub = StubSender() - # the first root - testroot1 = fix_path("/a/b/c") - relfileid1 = "./test_spam.py" - relpath1 = fix_path(relfileid1) - relfile1 = relpath1[2:] - tests = [ - TestInfo( - id=relfileid1 + "::test_spam", - name="test_spam", - path=TestPath(root=testroot1, relfile=relfile1, func="test_spam",), - source="{}:{}".format(relfile1, 10), - markers=[], - parentid=relfileid1, - ), - ] - parents = [ - ParentInfo(id=".", kind="folder", name=testroot1,), - ParentInfo( - id=relfileid1, - kind="file", - name="test_spam.py", - root=testroot1, - relpath=relpath1, - parentid=".", - ), - ] - expected = [ - { - "rootid": ".", - "root": testroot1, - "parents": [ - { - "id": relfileid1, - "kind": "file", - "name": "test_spam.py", - "relpath": relpath1, - "parentid": ".", - }, - ], - "tests": [ - { - "id": relfileid1 + "::test_spam", - "name": "test_spam", - "source": "{}:{}".format(relfile1, 10), - "markers": [], - "parentid": relfileid1, - } - ], - }, - ] - # the second root - testroot2 = fix_path("/x/y/z") - relfileid2 = "./w/test_eggs.py" - relpath2 = fix_path(relfileid2) - relfile2 = relpath2[2:] - tests.extend( - [ - TestInfo( - id=relfileid2 + "::BasicTests::test_first", - name="test_first", - path=TestPath( - root=testroot2, relfile=relfile2, func="BasicTests.test_first", - ), - source="{}:{}".format(relfile2, 61), - markers=[], - parentid=relfileid2 + "::BasicTests", - ), - ] - ) - parents.extend( - [ - ParentInfo(id=".", kind="folder", name=testroot2,), - ParentInfo( - id="./w", - kind="folder", - name="w", - root=testroot2, - relpath=fix_path("./w"), - parentid=".", - ), - ParentInfo( - id=relfileid2, - kind="file", - name="test_eggs.py", - root=testroot2, - relpath=relpath2, - parentid="./w", - ), - ParentInfo( - id=relfileid2 + "::BasicTests", - kind="suite", - name="BasicTests", - root=testroot2, - parentid=relfileid2, - ), - ] - ) - expected.extend( - [ - { - "rootid": ".", - "root": testroot2, - "parents": [ - { - "id": "./w", - "kind": "folder", - "name": "w", - "relpath": fix_path("./w"), - "parentid": ".", - }, - { - "id": relfileid2, - "kind": "file", - "name": "test_eggs.py", - "relpath": relpath2, - "parentid": "./w", - }, - { - "id": relfileid2 + "::BasicTests", - "kind": "suite", - "name": "BasicTests", - "parentid": relfileid2, - }, - ], - "tests": [ - { - "id": relfileid2 + "::BasicTests::test_first", - "name": "test_first", - "source": "{}:{}".format(relfile2, 61), - "markers": [], - "parentid": relfileid2 + "::BasicTests", - } - ], - }, - ] - ) - - report_discovered(tests, parents, _send=stub.send) - - self.maxDiff = None - self.assertEqual(stub.calls, [("send", (expected,), None),]) - - def test_complex(self): - """ - /a/b/c/ - test_ham.py - MySuite - test_x1 - test_x2 - /a/b/e/f/g/ - w/ - test_ham.py - test_ham1 - HamTests - test_uh_oh - test_whoa - MoreHam - test_yay - sub1 - sub2 - sub3 - test_eggs.py - SpamTests - test_okay - x/ - y/ - a/ - test_spam.py - SpamTests - test_okay - b/ - test_spam.py - SpamTests - test_okay - test_spam.py - SpamTests - test_okay - """ - stub = StubSender() - testroot = fix_path("/a/b/c") - relfileid1 = "./test_ham.py" - relfileid2 = "./test_spam.py" - relfileid3 = "./w/test_ham.py" - relfileid4 = "./w/test_eggs.py" - relfileid5 = "./x/y/a/test_spam.py" - relfileid6 = "./x/y/b/test_spam.py" - tests = [ - TestInfo( - id=relfileid1 + "::MySuite::test_x1", - name="test_x1", - path=TestPath( - root=testroot, relfile=fix_path(relfileid1), func="MySuite.test_x1", - ), - source="{}:{}".format(fix_path(relfileid1), 10), - markers=None, - parentid=relfileid1 + "::MySuite", - ), - TestInfo( - id=relfileid1 + "::MySuite::test_x2", - name="test_x2", - path=TestPath( - root=testroot, relfile=fix_path(relfileid1), func="MySuite.test_x2", - ), - source="{}:{}".format(fix_path(relfileid1), 21), - markers=None, - parentid=relfileid1 + "::MySuite", - ), - TestInfo( - id=relfileid2 + "::SpamTests::test_okay", - name="test_okay", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid2), - func="SpamTests.test_okay", - ), - source="{}:{}".format(fix_path(relfileid2), 17), - markers=None, - parentid=relfileid2 + "::SpamTests", - ), - TestInfo( - id=relfileid3 + "::test_ham1", - name="test_ham1", - path=TestPath( - root=testroot, relfile=fix_path(relfileid3), func="test_ham1", - ), - source="{}:{}".format(fix_path(relfileid3), 8), - markers=None, - parentid=relfileid3, - ), - TestInfo( - id=relfileid3 + "::HamTests::test_uh_oh", - name="test_uh_oh", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid3), - func="HamTests.test_uh_oh", - ), - source="{}:{}".format(fix_path(relfileid3), 19), - markers=["expected-failure"], - parentid=relfileid3 + "::HamTests", - ), - TestInfo( - id=relfileid3 + "::HamTests::test_whoa", - name="test_whoa", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid3), - func="HamTests.test_whoa", - ), - source="{}:{}".format(fix_path(relfileid3), 35), - markers=None, - parentid=relfileid3 + "::HamTests", - ), - TestInfo( - id=relfileid3 + "::MoreHam::test_yay[1-2]", - name="test_yay[1-2]", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid3), - func="MoreHam.test_yay", - sub=["[1-2]"], - ), - source="{}:{}".format(fix_path(relfileid3), 57), - markers=None, - parentid=relfileid3 + "::MoreHam::test_yay", - ), - TestInfo( - id=relfileid3 + "::MoreHam::test_yay[1-2][3-4]", - name="test_yay[1-2][3-4]", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid3), - func="MoreHam.test_yay", - sub=["[1-2]", "[3=4]"], - ), - source="{}:{}".format(fix_path(relfileid3), 72), - markers=None, - parentid=relfileid3 + "::MoreHam::test_yay[1-2]", - ), - TestInfo( - id=relfileid4 + "::SpamTests::test_okay", - name="test_okay", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid4), - func="SpamTests.test_okay", - ), - source="{}:{}".format(fix_path(relfileid4), 15), - markers=None, - parentid=relfileid4 + "::SpamTests", - ), - TestInfo( - id=relfileid5 + "::SpamTests::test_okay", - name="test_okay", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid5), - func="SpamTests.test_okay", - ), - source="{}:{}".format(fix_path(relfileid5), 12), - markers=None, - parentid=relfileid5 + "::SpamTests", - ), - TestInfo( - id=relfileid6 + "::SpamTests::test_okay", - name="test_okay", - path=TestPath( - root=testroot, - relfile=fix_path(relfileid6), - func="SpamTests.test_okay", - ), - source="{}:{}".format(fix_path(relfileid6), 27), - markers=None, - parentid=relfileid6 + "::SpamTests", - ), - ] - parents = [ - ParentInfo(id=".", kind="folder", name=testroot,), - ParentInfo( - id=relfileid1, - kind="file", - name="test_ham.py", - root=testroot, - relpath=fix_path(relfileid1), - parentid=".", - ), - ParentInfo( - id=relfileid1 + "::MySuite", - kind="suite", - name="MySuite", - root=testroot, - parentid=relfileid1, - ), - ParentInfo( - id=relfileid2, - kind="file", - name="test_spam.py", - root=testroot, - relpath=fix_path(relfileid2), - parentid=".", - ), - ParentInfo( - id=relfileid2 + "::SpamTests", - kind="suite", - name="SpamTests", - root=testroot, - parentid=relfileid2, - ), - ParentInfo( - id="./w", - kind="folder", - name="w", - root=testroot, - relpath=fix_path("./w"), - parentid=".", - ), - ParentInfo( - id=relfileid3, - kind="file", - name="test_ham.py", - root=testroot, - relpath=fix_path(relfileid3), - parentid="./w", - ), - ParentInfo( - id=relfileid3 + "::HamTests", - kind="suite", - name="HamTests", - root=testroot, - parentid=relfileid3, - ), - ParentInfo( - id=relfileid3 + "::MoreHam", - kind="suite", - name="MoreHam", - root=testroot, - parentid=relfileid3, - ), - ParentInfo( - id=relfileid3 + "::MoreHam::test_yay", - kind="function", - name="test_yay", - root=testroot, - parentid=relfileid3 + "::MoreHam", - ), - ParentInfo( - id=relfileid3 + "::MoreHam::test_yay[1-2]", - kind="subtest", - name="test_yay[1-2]", - root=testroot, - parentid=relfileid3 + "::MoreHam::test_yay", - ), - ParentInfo( - id=relfileid4, - kind="file", - name="test_eggs.py", - root=testroot, - relpath=fix_path(relfileid4), - parentid="./w", - ), - ParentInfo( - id=relfileid4 + "::SpamTests", - kind="suite", - name="SpamTests", - root=testroot, - parentid=relfileid4, - ), - ParentInfo( - id="./x", - kind="folder", - name="x", - root=testroot, - relpath=fix_path("./x"), - parentid=".", - ), - ParentInfo( - id="./x/y", - kind="folder", - name="y", - root=testroot, - relpath=fix_path("./x/y"), - parentid="./x", - ), - ParentInfo( - id="./x/y/a", - kind="folder", - name="a", - root=testroot, - relpath=fix_path("./x/y/a"), - parentid="./x/y", - ), - ParentInfo( - id=relfileid5, - kind="file", - name="test_spam.py", - root=testroot, - relpath=fix_path(relfileid5), - parentid="./x/y/a", - ), - ParentInfo( - id=relfileid5 + "::SpamTests", - kind="suite", - name="SpamTests", - root=testroot, - parentid=relfileid5, - ), - ParentInfo( - id="./x/y/b", - kind="folder", - name="b", - root=testroot, - relpath=fix_path("./x/y/b"), - parentid="./x/y", - ), - ParentInfo( - id=relfileid6, - kind="file", - name="test_spam.py", - root=testroot, - relpath=fix_path(relfileid6), - parentid="./x/y/b", - ), - ParentInfo( - id=relfileid6 + "::SpamTests", - kind="suite", - name="SpamTests", - root=testroot, - parentid=relfileid6, - ), - ] - expected = [ - { - "rootid": ".", - "root": testroot, - "parents": [ - { - "id": relfileid1, - "kind": "file", - "name": "test_ham.py", - "relpath": fix_path(relfileid1), - "parentid": ".", - }, - { - "id": relfileid1 + "::MySuite", - "kind": "suite", - "name": "MySuite", - "parentid": relfileid1, - }, - { - "id": relfileid2, - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path(relfileid2), - "parentid": ".", - }, - { - "id": relfileid2 + "::SpamTests", - "kind": "suite", - "name": "SpamTests", - "parentid": relfileid2, - }, - { - "id": "./w", - "kind": "folder", - "name": "w", - "relpath": fix_path("./w"), - "parentid": ".", - }, - { - "id": relfileid3, - "kind": "file", - "name": "test_ham.py", - "relpath": fix_path(relfileid3), - "parentid": "./w", - }, - { - "id": relfileid3 + "::HamTests", - "kind": "suite", - "name": "HamTests", - "parentid": relfileid3, - }, - { - "id": relfileid3 + "::MoreHam", - "kind": "suite", - "name": "MoreHam", - "parentid": relfileid3, - }, - { - "id": relfileid3 + "::MoreHam::test_yay", - "kind": "function", - "name": "test_yay", - "parentid": relfileid3 + "::MoreHam", - }, - { - "id": relfileid3 + "::MoreHam::test_yay[1-2]", - "kind": "subtest", - "name": "test_yay[1-2]", - "parentid": relfileid3 + "::MoreHam::test_yay", - }, - { - "id": relfileid4, - "kind": "file", - "name": "test_eggs.py", - "relpath": fix_path(relfileid4), - "parentid": "./w", - }, - { - "id": relfileid4 + "::SpamTests", - "kind": "suite", - "name": "SpamTests", - "parentid": relfileid4, - }, - { - "id": "./x", - "kind": "folder", - "name": "x", - "relpath": fix_path("./x"), - "parentid": ".", - }, - { - "id": "./x/y", - "kind": "folder", - "name": "y", - "relpath": fix_path("./x/y"), - "parentid": "./x", - }, - { - "id": "./x/y/a", - "kind": "folder", - "name": "a", - "relpath": fix_path("./x/y/a"), - "parentid": "./x/y", - }, - { - "id": relfileid5, - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path(relfileid5), - "parentid": "./x/y/a", - }, - { - "id": relfileid5 + "::SpamTests", - "kind": "suite", - "name": "SpamTests", - "parentid": relfileid5, - }, - { - "id": "./x/y/b", - "kind": "folder", - "name": "b", - "relpath": fix_path("./x/y/b"), - "parentid": "./x/y", - }, - { - "id": relfileid6, - "kind": "file", - "name": "test_spam.py", - "relpath": fix_path(relfileid6), - "parentid": "./x/y/b", - }, - { - "id": relfileid6 + "::SpamTests", - "kind": "suite", - "name": "SpamTests", - "parentid": relfileid6, - }, - ], - "tests": [ - { - "id": relfileid1 + "::MySuite::test_x1", - "name": "test_x1", - "source": "{}:{}".format(fix_path(relfileid1), 10), - "markers": [], - "parentid": relfileid1 + "::MySuite", - }, - { - "id": relfileid1 + "::MySuite::test_x2", - "name": "test_x2", - "source": "{}:{}".format(fix_path(relfileid1), 21), - "markers": [], - "parentid": relfileid1 + "::MySuite", - }, - { - "id": relfileid2 + "::SpamTests::test_okay", - "name": "test_okay", - "source": "{}:{}".format(fix_path(relfileid2), 17), - "markers": [], - "parentid": relfileid2 + "::SpamTests", - }, - { - "id": relfileid3 + "::test_ham1", - "name": "test_ham1", - "source": "{}:{}".format(fix_path(relfileid3), 8), - "markers": [], - "parentid": relfileid3, - }, - { - "id": relfileid3 + "::HamTests::test_uh_oh", - "name": "test_uh_oh", - "source": "{}:{}".format(fix_path(relfileid3), 19), - "markers": ["expected-failure"], - "parentid": relfileid3 + "::HamTests", - }, - { - "id": relfileid3 + "::HamTests::test_whoa", - "name": "test_whoa", - "source": "{}:{}".format(fix_path(relfileid3), 35), - "markers": [], - "parentid": relfileid3 + "::HamTests", - }, - { - "id": relfileid3 + "::MoreHam::test_yay[1-2]", - "name": "test_yay[1-2]", - "source": "{}:{}".format(fix_path(relfileid3), 57), - "markers": [], - "parentid": relfileid3 + "::MoreHam::test_yay", - }, - { - "id": relfileid3 + "::MoreHam::test_yay[1-2][3-4]", - "name": "test_yay[1-2][3-4]", - "source": "{}:{}".format(fix_path(relfileid3), 72), - "markers": [], - "parentid": relfileid3 + "::MoreHam::test_yay[1-2]", - }, - { - "id": relfileid4 + "::SpamTests::test_okay", - "name": "test_okay", - "source": "{}:{}".format(fix_path(relfileid4), 15), - "markers": [], - "parentid": relfileid4 + "::SpamTests", - }, - { - "id": relfileid5 + "::SpamTests::test_okay", - "name": "test_okay", - "source": "{}:{}".format(fix_path(relfileid5), 12), - "markers": [], - "parentid": relfileid5 + "::SpamTests", - }, - { - "id": relfileid6 + "::SpamTests::test_okay", - "name": "test_okay", - "source": "{}:{}".format(fix_path(relfileid6), 27), - "markers": [], - "parentid": relfileid6 + "::SpamTests", - }, - ], - } - ] - - report_discovered(tests, parents, _send=stub.send) - - self.maxDiff = None - self.assertEqual(stub.calls, [("send", (expected,), None),]) - - def test_simple_basic(self): - stub = StubSender() - testroot = fix_path("/a/b/c") - relfile = fix_path("x/y/z/test_spam.py") - tests = [ - TestInfo( - id="test#1", - name="test_spam_1", - path=TestPath( - root=testroot, - relfile=relfile, - func="MySuite.test_spam_1", - sub=None, - ), - source="{}:{}".format(relfile, 10), - markers=None, - parentid="suite#1", - ), - ] - parents = None - expected = [ - { - "id": "test#1", - "name": "test_spam_1", - "testroot": testroot, - "relfile": relfile, - "lineno": 10, - "testfunc": "MySuite.test_spam_1", - "subtest": None, - "markers": [], - } - ] - - report_discovered(tests, parents, simple=True, _send=stub.send) - - self.maxDiff = None - self.assertEqual(stub.calls, [("send", (expected,), None),]) - - def test_simple_complex(self): - """ - /a/b/c/ - test_ham.py - MySuite - test_x1 - test_x2 - /a/b/e/f/g/ - w/ - test_ham.py - test_ham1 - HamTests - test_uh_oh - test_whoa - MoreHam - test_yay - sub1 - sub2 - sub3 - test_eggs.py - SpamTests - test_okay - x/ - y/ - a/ - test_spam.py - SpamTests - test_okay - b/ - test_spam.py - SpamTests - test_okay - test_spam.py - SpamTests - test_okay - """ - stub = StubSender() - testroot1 = fix_path("/a/b/c") - relfile1 = fix_path("./test_ham.py") - testroot2 = fix_path("/a/b/e/f/g") - relfile2 = fix_path("./test_spam.py") - relfile3 = fix_path("w/test_ham.py") - relfile4 = fix_path("w/test_eggs.py") - relfile5 = fix_path("x/y/a/test_spam.py") - relfile6 = fix_path("x/y/b/test_spam.py") - tests = [ - # under first root folder - TestInfo( - id="test#1", - name="test_x1", - path=TestPath( - root=testroot1, relfile=relfile1, func="MySuite.test_x1", sub=None, - ), - source="{}:{}".format(relfile1, 10), - markers=None, - parentid="suite#1", - ), - TestInfo( - id="test#2", - name="test_x2", - path=TestPath( - root=testroot1, relfile=relfile1, func="MySuite.test_x2", sub=None, - ), - source="{}:{}".format(relfile1, 21), - markers=None, - parentid="suite#1", - ), - # under second root folder - TestInfo( - id="test#3", - name="test_okay", - path=TestPath( - root=testroot2, - relfile=relfile2, - func="SpamTests.test_okay", - sub=None, - ), - source="{}:{}".format(relfile2, 17), - markers=None, - parentid="suite#2", - ), - TestInfo( - id="test#4", - name="test_ham1", - path=TestPath( - root=testroot2, relfile=relfile3, func="test_ham1", sub=None, - ), - source="{}:{}".format(relfile3, 8), - markers=None, - parentid="file#3", - ), - TestInfo( - id="test#5", - name="test_uh_oh", - path=TestPath( - root=testroot2, - relfile=relfile3, - func="HamTests.test_uh_oh", - sub=None, - ), - source="{}:{}".format(relfile3, 19), - markers=["expected-failure"], - parentid="suite#3", - ), - TestInfo( - id="test#6", - name="test_whoa", - path=TestPath( - root=testroot2, - relfile=relfile3, - func="HamTests.test_whoa", - sub=None, - ), - source="{}:{}".format(relfile3, 35), - markers=None, - parentid="suite#3", - ), - TestInfo( - id="test#7", - name="test_yay (sub1)", - path=TestPath( - root=testroot2, - relfile=relfile3, - func="MoreHam.test_yay", - sub=["sub1"], - ), - source="{}:{}".format(relfile3, 57), - markers=None, - parentid="suite#4", - ), - TestInfo( - id="test#8", - name="test_yay (sub2) (sub3)", - path=TestPath( - root=testroot2, - relfile=relfile3, - func="MoreHam.test_yay", - sub=["sub2", "sub3"], - ), - source="{}:{}".format(relfile3, 72), - markers=None, - parentid="suite#3", - ), - TestInfo( - id="test#9", - name="test_okay", - path=TestPath( - root=testroot2, - relfile=relfile4, - func="SpamTests.test_okay", - sub=None, - ), - source="{}:{}".format(relfile4, 15), - markers=None, - parentid="suite#5", - ), - TestInfo( - id="test#10", - name="test_okay", - path=TestPath( - root=testroot2, - relfile=relfile5, - func="SpamTests.test_okay", - sub=None, - ), - source="{}:{}".format(relfile5, 12), - markers=None, - parentid="suite#6", - ), - TestInfo( - id="test#11", - name="test_okay", - path=TestPath( - root=testroot2, - relfile=relfile6, - func="SpamTests.test_okay", - sub=None, - ), - source="{}:{}".format(relfile6, 27), - markers=None, - parentid="suite#7", - ), - ] - expected = [ - { - "id": "test#1", - "name": "test_x1", - "testroot": testroot1, - "relfile": relfile1, - "lineno": 10, - "testfunc": "MySuite.test_x1", - "subtest": None, - "markers": [], - }, - { - "id": "test#2", - "name": "test_x2", - "testroot": testroot1, - "relfile": relfile1, - "lineno": 21, - "testfunc": "MySuite.test_x2", - "subtest": None, - "markers": [], - }, - { - "id": "test#3", - "name": "test_okay", - "testroot": testroot2, - "relfile": relfile2, - "lineno": 17, - "testfunc": "SpamTests.test_okay", - "subtest": None, - "markers": [], - }, - { - "id": "test#4", - "name": "test_ham1", - "testroot": testroot2, - "relfile": relfile3, - "lineno": 8, - "testfunc": "test_ham1", - "subtest": None, - "markers": [], - }, - { - "id": "test#5", - "name": "test_uh_oh", - "testroot": testroot2, - "relfile": relfile3, - "lineno": 19, - "testfunc": "HamTests.test_uh_oh", - "subtest": None, - "markers": ["expected-failure"], - }, - { - "id": "test#6", - "name": "test_whoa", - "testroot": testroot2, - "relfile": relfile3, - "lineno": 35, - "testfunc": "HamTests.test_whoa", - "subtest": None, - "markers": [], - }, - { - "id": "test#7", - "name": "test_yay (sub1)", - "testroot": testroot2, - "relfile": relfile3, - "lineno": 57, - "testfunc": "MoreHam.test_yay", - "subtest": ["sub1"], - "markers": [], - }, - { - "id": "test#8", - "name": "test_yay (sub2) (sub3)", - "testroot": testroot2, - "relfile": relfile3, - "lineno": 72, - "testfunc": "MoreHam.test_yay", - "subtest": ["sub2", "sub3"], - "markers": [], - }, - { - "id": "test#9", - "name": "test_okay", - "testroot": testroot2, - "relfile": relfile4, - "lineno": 15, - "testfunc": "SpamTests.test_okay", - "subtest": None, - "markers": [], - }, - { - "id": "test#10", - "name": "test_okay", - "testroot": testroot2, - "relfile": relfile5, - "lineno": 12, - "testfunc": "SpamTests.test_okay", - "subtest": None, - "markers": [], - }, - { - "id": "test#11", - "name": "test_okay", - "testroot": testroot2, - "relfile": relfile6, - "lineno": 27, - "testfunc": "SpamTests.test_okay", - "subtest": None, - "markers": [], - }, - ] - parents = None - - report_discovered(tests, parents, simple=True, _send=stub.send) - - self.maxDiff = None - self.assertEqual(stub.calls, [("send", (expected,), None),]) diff --git a/pythonFiles/tests/testing_tools/adapter/test_util.py b/pythonFiles/tests/testing_tools/adapter/test_util.py deleted file mode 100644 index e9c0e5f2ab19..000000000000 --- a/pythonFiles/tests/testing_tools/adapter/test_util.py +++ /dev/null @@ -1,320 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - -from __future__ import absolute_import, print_function - -import ntpath -import os -import os.path -import posixpath -import shlex -import sys -import unittest - -import pytest - -# Pytest 3.7 and later uses pathlib/pathlib2 for path resolution. -try: - from pathlib import Path -except ImportError: - from pathlib2 import Path - -from testing_tools.adapter.util import ( - fix_path, - fix_relpath, - fix_fileid, - shlex_unsplit, -) - - -@unittest.skipIf(sys.version_info < (3,), "Python 2 does not have subTest") -class FilePathTests(unittest.TestCase): - @pytest.mark.functional - def test_isolated_imports(self): - import testing_tools.adapter - from testing_tools.adapter import util - from . import test_functional - - ignored = { - str(Path(os.path.abspath(__file__)).resolve()), - str(Path(os.path.abspath(util.__file__)).resolve()), - str(Path(os.path.abspath(test_functional.__file__)).resolve()), - } - adapter = os.path.abspath(os.path.dirname(testing_tools.adapter.__file__)) - tests = os.path.join( - os.path.abspath(os.path.dirname(os.path.dirname(testing_tools.__file__))), - "tests", - "testing_tools", - "adapter", - ) - found = [] - for root in [adapter, tests]: - for dirname, _, files in os.walk(root): - if ".data" in dirname: - continue - for basename in files: - if not basename.endswith(".py"): - continue - filename = os.path.join(dirname, basename) - if filename in ignored: - continue - with open(filename) as srcfile: - for line in srcfile: - if line.strip() == "import os.path": - found.append(filename) - break - - if found: - self.fail( - os.linesep.join( - [ - "", - "Please only use path-related API from testing_tools.adapter.util.", - 'Found use of "os.path" in the following files:', - ] - + [" " + file for file in found] - ) - ) - - def test_fix_path(self): - tests = [ - ("./spam.py", r".\spam.py"), - ("./some-dir", r".\some-dir"), - ("./some-dir/", ".\\some-dir\\"), - ("./some-dir/eggs", r".\some-dir\eggs"), - ("./some-dir/eggs/spam.py", r".\some-dir\eggs\spam.py"), - ("X/y/Z/a.B.c.PY", r"X\y\Z\a.B.c.PY"), - ("/", "\\"), - ("/spam", r"\spam"), - ("C:/spam", r"C:\spam"), - ] - for path, expected in tests: - pathsep = ntpath.sep - with self.subTest(r"fixed for \: {!r}".format(path)): - fixed = fix_path(path, _pathsep=pathsep) - self.assertEqual(fixed, expected) - - pathsep = posixpath.sep - with self.subTest("unchanged for /: {!r}".format(path)): - unchanged = fix_path(path, _pathsep=pathsep) - self.assertEqual(unchanged, path) - - # no path -> "." - for path in ["", None]: - for pathsep in [ntpath.sep, posixpath.sep]: - with self.subTest(r"fixed for {}: {!r}".format(pathsep, path)): - fixed = fix_path(path, _pathsep=pathsep) - self.assertEqual(fixed, ".") - - # no-op paths - paths = [path for _, path in tests] - paths.extend( - [".", "..", "some-dir", "spam.py",] - ) - for path in paths: - for pathsep in [ntpath.sep, posixpath.sep]: - with self.subTest(r"unchanged for {}: {!r}".format(pathsep, path)): - unchanged = fix_path(path, _pathsep=pathsep) - self.assertEqual(unchanged, path) - - def test_fix_relpath(self): - tests = [ - ("spam.py", posixpath, "./spam.py"), - ("eggs/spam.py", posixpath, "./eggs/spam.py"), - ("eggs/spam/", posixpath, "./eggs/spam/"), - (r"\spam.py", posixpath, r"./\spam.py"), - ("spam.py", ntpath, r".\spam.py"), - (r"eggs\spam.py", ntpath, ".\eggs\spam.py"), - ("eggs\\spam\\", ntpath, ".\\eggs\\spam\\"), - ("/spam.py", ntpath, r"\spam.py"), # Note the fixed "/". - # absolute - ("/", posixpath, "/"), - ("/spam.py", posixpath, "/spam.py"), - ("\\", ntpath, "\\"), - (r"\spam.py", ntpath, r"\spam.py"), - (r"C:\spam.py", ntpath, r"C:\spam.py"), - # no-op - ("./spam.py", posixpath, "./spam.py"), - (r".\spam.py", ntpath, r".\spam.py"), - ] - # no-op - for path in [".", ".."]: - tests.extend( - [(path, posixpath, path), (path, ntpath, path),] - ) - for path, _os_path, expected in tests: - with self.subTest((path, _os_path.sep)): - fixed = fix_relpath( - path, - _fix_path=(lambda p: fix_path(p, _pathsep=_os_path.sep)), - _path_isabs=_os_path.isabs, - _pathsep=_os_path.sep, - ) - self.assertEqual(fixed, expected) - - def test_fix_fileid(self): - common = [ - ("spam.py", "./spam.py"), - ("eggs/spam.py", "./eggs/spam.py"), - ("eggs/spam/", "./eggs/spam/"), - # absolute (no-op) - ("/", "/"), - ("//", "//"), - ("/spam.py", "/spam.py"), - # no-op - (None, None), - ("", ""), - (".", "."), - ("./spam.py", "./spam.py"), - ] - tests = [(p, posixpath, e) for p, e in common] - tests.extend( - (p, posixpath, e) for p, e in [(r"\spam.py", r"./\spam.py"),] - ) - tests.extend((p, ntpath, e) for p, e in common) - tests.extend( - (p, ntpath, e) - for p, e in [ - (r"eggs\spam.py", "./eggs/spam.py"), - ("eggs\\spam\\", "./eggs/spam/"), - (r".\spam.py", r"./spam.py"), - # absolute - (r"\spam.py", "/spam.py"), - (r"C:\spam.py", "C:/spam.py"), - ("\\", "/"), - ("\\\\", "//"), - ("C:\\\\", "C://"), - ("C:/", "C:/"), - ("C://", "C://"), - ("C:/spam.py", "C:/spam.py"), - ] - ) - for fileid, _os_path, expected in tests: - pathsep = _os_path.sep - with self.subTest(r"for {}: {!r}".format(pathsep, fileid)): - fixed = fix_fileid( - fileid, - _path_isabs=_os_path.isabs, - _normcase=_os_path.normcase, - _pathsep=pathsep, - ) - self.assertEqual(fixed, expected) - - # with rootdir - common = [ - ("spam.py", "/eggs", "./spam.py"), - ("spam.py", "\eggs", "./spam.py"), - # absolute - ("/spam.py", "/", "./spam.py"), - ("/eggs/spam.py", "/eggs", "./spam.py"), - ("/eggs/spam.py", "/eggs/", "./spam.py"), - # no-op - ("/spam.py", "/eggs", "/spam.py"), - ("/spam.py", "/eggs/", "/spam.py"), - # root-only (no-op) - ("/", "/", "/"), - ("/", "/spam", "/"), - ("//", "/", "//"), - ("//", "//", "//"), - ("//", "//spam", "//"), - ] - tests = [(p, r, posixpath, e) for p, r, e in common] - tests = [(p, r, ntpath, e) for p, r, e in common] - tests.extend( - (p, r, ntpath, e) - for p, r, e in [ - ("spam.py", r"\eggs", "./spam.py"), - # absolute - (r"\spam.py", "\\", r"./spam.py"), - (r"C:\spam.py", "C:\\", r"./spam.py"), - (r"\eggs\spam.py", r"\eggs", r"./spam.py"), - (r"\eggs\spam.py", "\\eggs\\", r"./spam.py"), - # normcase - (r"C:\spam.py", "c:\\", r"./spam.py"), - (r"\Eggs\Spam.py", "\\eggs", r"./Spam.py"), - (r"\eggs\spam.py", "\\Eggs", r"./spam.py"), - (r"\eggs\Spam.py", "\\Eggs", r"./Spam.py"), - # no-op - (r"\spam.py", r"\eggs", r"/spam.py"), - (r"C:\spam.py", r"C:\eggs", r"C:/spam.py"), - # TODO: Should these be supported. - (r"C:\spam.py", "\\", r"C:/spam.py"), - (r"\spam.py", "C:\\", r"/spam.py"), - # root-only - ("\\", "\\", "/"), - ("\\\\", "\\", "//"), - ("C:\\", "C:\\eggs", "C:/"), - ("C:\\", "C:\\", "C:/"), - (r"C:\spam.py", "D:\\", r"C:/spam.py"), - ] - ) - for fileid, rootdir, _os_path, expected in tests: - pathsep = _os_path.sep - with self.subTest( - r"for {} (with rootdir {!r}): {!r}".format(pathsep, rootdir, fileid) - ): - fixed = fix_fileid( - fileid, - rootdir, - _path_isabs=_os_path.isabs, - _normcase=_os_path.normcase, - _pathsep=pathsep, - ) - self.assertEqual(fixed, expected) - - -class ShlexUnsplitTests(unittest.TestCase): - def test_no_args(self): - argv = [] - joined = shlex_unsplit(argv) - - self.assertEqual(joined, "") - self.assertEqual(shlex.split(joined), argv) - - def test_one_arg(self): - argv = ["spam"] - joined = shlex_unsplit(argv) - - self.assertEqual(joined, "spam") - self.assertEqual(shlex.split(joined), argv) - - def test_multiple_args(self): - argv = [ - "-x", - "X", - "-xyz", - "spam", - "eggs", - ] - joined = shlex_unsplit(argv) - - self.assertEqual(joined, "-x X -xyz spam eggs") - self.assertEqual(shlex.split(joined), argv) - - def test_whitespace(self): - argv = [ - "-x", - "X Y Z", - "spam spam\tspam", - "eggs", - ] - joined = shlex_unsplit(argv) - - self.assertEqual(joined, "-x 'X Y Z' 'spam spam\tspam' eggs") - self.assertEqual(shlex.split(joined), argv) - - def test_quotation_marks(self): - argv = [ - "-x", - "''", - 'spam"spam"spam', - "ham'ham'ham", - "eggs", - ] - joined = shlex_unsplit(argv) - - self.assertEqual( - joined, - "-x ''\"'\"''\"'\"'' 'spam\"spam\"spam' 'ham'\"'\"'ham'\"'\"'ham' eggs", - ) - self.assertEqual(shlex.split(joined), argv) diff --git a/pythonFiles/tests/util.py b/pythonFiles/tests/util.py deleted file mode 100644 index 45c3536145cf..000000000000 --- a/pythonFiles/tests/util.py +++ /dev/null @@ -1,26 +0,0 @@ -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. - - -class Stub(object): - def __init__(self): - self.calls = [] - - def add_call(self, name, args=None, kwargs=None): - self.calls.append((name, args, kwargs)) - - -class StubProxy(object): - def __init__(self, stub=None, name=None): - self.name = name - self.stub = stub if stub is not None else Stub() - - @property - def calls(self): - return self.stub.calls - - def add_call(self, funcname, *args, **kwargs): - callname = funcname - if self.name: - callname = "{}.{}".format(self.name, funcname) - return self.stub.add_call(callname, *args, **kwargs) diff --git a/pythonFiles/visualstudio_py_testlauncher.py b/pythonFiles/visualstudio_py_testlauncher.py deleted file mode 100644 index 7731b63b7e65..000000000000 --- a/pythonFiles/visualstudio_py_testlauncher.py +++ /dev/null @@ -1,393 +0,0 @@ -# Python Tools for Visual Studio -# Copyright(c) Microsoft Corporation -# All rights reserved. -# -# 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 -# -# THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS -# OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY -# IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -# MERCHANTABLITY OR NON-INFRINGEMENT. -# -# See the Apache Version 2.0 License for specific language governing -# permissions and limitations under the License. - -__author__ = "Microsoft Corporation " -__version__ = "3.0.0.0" - -import os -import sys -import json -import unittest -import socket -import traceback -from types import CodeType, FunctionType -import signal - -try: - import thread -except: - import _thread as thread - - -class _TestOutput(object): - """file like object which redirects output to the repl window.""" - - errors = "strict" - - def __init__(self, old_out, is_stdout): - self.is_stdout = is_stdout - self.old_out = old_out - if sys.version >= "3." and hasattr(old_out, "buffer"): - self.buffer = _TestOutputBuffer(old_out.buffer, is_stdout) - - def flush(self): - if self.old_out: - self.old_out.flush() - - def writelines(self, lines): - for line in lines: - self.write(line) - - @property - def encoding(self): - return "utf8" - - def write(self, value): - _channel.send_event("stdout" if self.is_stdout else "stderr", content=value) - if self.old_out: - self.old_out.write(value) - # flush immediately, else things go wonky and out of order - self.flush() - - def isatty(self): - return True - - def next(self): - pass - - @property - def name(self): - if self.is_stdout: - return "" - else: - return "" - - def __getattr__(self, name): - return getattr(self.old_out, name) - - -class _TestOutputBuffer(object): - def __init__(self, old_buffer, is_stdout): - self.buffer = old_buffer - self.is_stdout = is_stdout - - def write(self, data): - _channel.send_event("stdout" if self.is_stdout else "stderr", content=data) - self.buffer.write(data) - - def flush(self): - self.buffer.flush() - - def truncate(self, pos=None): - return self.buffer.truncate(pos) - - def tell(self): - return self.buffer.tell() - - def seek(self, pos, whence=0): - return self.buffer.seek(pos, whence) - - -class _IpcChannel(object): - def __init__(self, socket, callback): - self.socket = socket - self.seq = 0 - self.callback = callback - self.lock = thread.allocate_lock() - self._closed = False - # start the testing reader thread loop - self.test_thread_id = thread.start_new_thread(self.readSocket, ()) - - def close(self): - self._closed = True - - def readSocket(self): - try: - data = self.socket.recv(1024) - self.callback() - except OSError: - if not self._closed: - raise - - def receive(self): - pass - - def send_event(self, name, **args): - with self.lock: - body = {"type": "event", "seq": self.seq, "event": name, "body": args} - self.seq += 1 - content = json.dumps(body).encode("utf8") - headers = ("Content-Length: %d\n\n" % (len(content),)).encode("utf8") - self.socket.send(headers) - self.socket.send(content) - - -_channel = None - - -class VsTestResult(unittest.TextTestResult): - def startTest(self, test): - super(VsTestResult, self).startTest(test) - if _channel is not None: - _channel.send_event(name="start", test=test.id()) - - def addError(self, test, err): - super(VsTestResult, self).addError(test, err) - self.sendResult(test, "error", err) - - def addFailure(self, test, err): - super(VsTestResult, self).addFailure(test, err) - self.sendResult(test, "failed", err) - - def addSuccess(self, test): - super(VsTestResult, self).addSuccess(test) - self.sendResult(test, "passed") - - def addSkip(self, test, reason): - super(VsTestResult, self).addSkip(test, reason) - self.sendResult(test, "skipped") - - def addExpectedFailure(self, test, err): - super(VsTestResult, self).addExpectedFailure(test, err) - self.sendResult(test, "failed", err) - - def addUnexpectedSuccess(self, test): - super(VsTestResult, self).addUnexpectedSuccess(test) - self.sendResult(test, "passed") - - def sendResult(self, test, outcome, trace=None): - if _channel is not None: - tb = None - message = None - if trace is not None: - traceback.print_exc() - formatted = traceback.format_exception(*trace) - # Remove the 'Traceback (most recent call last)' - formatted = formatted[1:] - tb = "".join(formatted) - message = str(trace[1]) - _channel.send_event( - name="result", - outcome=outcome, - traceback=tb, - message=message, - test=test.id(), - ) - - -def stopTests(): - try: - os.kill(os.getpid(), signal.SIGUSR1) - except: - try: - os.kill(os.getpid(), signal.SIGTERM) - except: - pass - - -class ExitCommand(Exception): - pass - - -def signal_handler(signal, frame): - raise ExitCommand() - - -def main(): - import os - import sys - import unittest - from optparse import OptionParser - - global _channel - - parser = OptionParser( - prog="visualstudio_py_testlauncher", - usage="Usage: %prog [

+ +``` +XXX +``` + +

+ diff --git a/resources/report_issue_user_data_template.md b/resources/report_issue_user_data_template.md new file mode 100644 index 000000000000..037b844511d3 --- /dev/null +++ b/resources/report_issue_user_data_template.md @@ -0,0 +1,21 @@ +- Python version (& distribution if applicable, e.g. Anaconda): {0} +- Type of virtual environment used (e.g. conda, venv, virtualenv, etc.): {1} +- Value of the `python.languageServer` setting: {2} + +
+User Settings +

+ +``` +{3}{4} +``` +

+
+ +
+Installed Extensions + +|Extension Name|Extension Id|Version| +|---|---|---| +{5} +
diff --git a/resources/report_issue_user_settings.json b/resources/report_issue_user_settings.json new file mode 100644 index 000000000000..7e034651c46d --- /dev/null +++ b/resources/report_issue_user_settings.json @@ -0,0 +1,99 @@ +{ + "initialize": false, + "pythonPath": "placeholder", + "onDidChange": false, + "defaultInterpreterPath": "placeholder", + "defaultLS": false, + "envFile": "placeholder", + "venvPath": "placeholder", + "venvFolders": "placeholder", + "activeStateToolPath": "placeholder", + "condaPath": "placeholder", + "pipenvPath": "placeholder", + "poetryPath": "placeholder", + "pixiToolPath": "placeholder", + "devOptions": false, + "globalModuleInstallation": false, + "languageServer": true, + "languageServerIsDefault": false, + "logging": true, + "useIsolation": false, + "changed": false, + "_pythonPath": false, + "_defaultInterpreterPath": false, + "workspace": false, + "workspaceRoot": false, + "linting": { + "enabled": true, + "cwd": "placeholder", + "flake8Args": "placeholder", + "flake8CategorySeverity": false, + "flake8Enabled": true, + "flake8Path": "placeholder", + "ignorePatterns": false, + "lintOnSave": true, + "maxNumberOfProblems": false, + "banditArgs": "placeholder", + "banditEnabled": true, + "banditPath": "placeholder", + "mypyArgs": "placeholder", + "mypyCategorySeverity": false, + "mypyEnabled": true, + "mypyPath": "placeholder", + "pycodestyleArgs": "placeholder", + "pycodestyleCategorySeverity": false, + "pycodestyleEnabled": true, + "pycodestylePath": "placeholder", + "prospectorArgs": "placeholder", + "prospectorEnabled": true, + "prospectorPath": "placeholder", + "pydocstyleArgs": "placeholder", + "pydocstyleEnabled": true, + "pydocstylePath": "placeholder", + "pylamaArgs": "placeholder", + "pylamaEnabled": true, + "pylamaPath": "placeholder", + "pylintArgs": "placeholder", + "pylintCategorySeverity": false, + "pylintEnabled": false, + "pylintPath": "placeholder" + }, + "analysis": { + "completeFunctionParens": true, + "autoImportCompletions": true, + "autoSearchPaths": "placeholder", + "stubPath": "placeholder", + "diagnosticMode": true, + "extraPaths": "placeholder", + "useLibraryCodeForTypes": true, + "typeCheckingMode": true, + "memory": true, + "symbolsHierarchyDepthLimit": false + }, + "testing": { + "cwd": "placeholder", + "debugPort": true, + "promptToConfigure": true, + "pytestArgs": "placeholder", + "pytestEnabled": true, + "pytestPath": "placeholder", + "unittestArgs": "placeholder", + "unittestEnabled": true, + "autoTestDiscoverOnSaveEnabled": true, + "autoTestDiscoverOnSavePattern": "placeholder" + }, + "terminal": { + "activateEnvironment": true, + "executeInFileDir": "placeholder", + "launchArgs": "placeholder", + "activateEnvInCurrentTerminal": false + }, + "tensorBoard": { + "logDirectory": "placeholder" + }, + "experiments": { + "enabled": true, + "optInto": true, + "optOutFrom": true + } +} diff --git a/resources/walkthrough/create-environment.svg b/resources/walkthrough/create-environment.svg new file mode 100644 index 000000000000..bb48e1b16711 --- /dev/null +++ b/resources/walkthrough/create-environment.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/walkthrough/create-notebook.svg b/resources/walkthrough/create-notebook.svg new file mode 100644 index 000000000000..05dadc0cc6de --- /dev/null +++ b/resources/walkthrough/create-notebook.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/walkthrough/data-science.svg b/resources/walkthrough/data-science.svg new file mode 100644 index 000000000000..506bed2161b1 --- /dev/null +++ b/resources/walkthrough/data-science.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/walkthrough/environments-info.md b/resources/walkthrough/environments-info.md new file mode 100644 index 000000000000..7bdc61a96e2e --- /dev/null +++ b/resources/walkthrough/environments-info.md @@ -0,0 +1,10 @@ +## Python Environments + +Create Environment Dropdown + +Python virtual environments are considered a best practice in Python development. A virtual environment includes a Python interpreter and any packages you have installed into it, such as numpy or Flask. + +After you create a virtual environment using the **Python: Create Environment** command, you can install packages into the environment. +For example, type `python -m pip install numpy` in an activated terminal to install `numpy` into the environment. + +🔍 Check out our [docs](https://aka.ms/pythonenvs) to learn more. diff --git a/resources/walkthrough/install-python-linux.md b/resources/walkthrough/install-python-linux.md new file mode 100644 index 000000000000..78a12870799f --- /dev/null +++ b/resources/walkthrough/install-python-linux.md @@ -0,0 +1,22 @@ +# Install Python on Linux + +To install the latest version of Python on [Debian-based Linux distributions](https://www.debian.org/), you can create a new terminal (Ctrl + Shift + `) and run the following commands: + + +``` +sudo apt-get update +sudo apt-get install python3 python3-venv python3-pip +``` + +For [Fedora-based Linux distributions](https://getfedora.org/), you can run the following: + +``` +sudo dnf install python3 +``` + +To verify if Python was successfully installed, run the following command in the terminal: + + +``` +python3 --version +``` diff --git a/resources/walkthrough/install-python-macos.md b/resources/walkthrough/install-python-macos.md new file mode 100644 index 000000000000..470d682d4eb2 --- /dev/null +++ b/resources/walkthrough/install-python-macos.md @@ -0,0 +1,15 @@ +# Install Python on macOS + +If you have [Homebrew](https://brew.sh/) installed, you can install Python by running the following command in the terminal (Ctrl + Shift + `): + +``` +brew install python3 +``` + +If you don't have Homebrew, you can download a Python installer for macOS from [python.org](https://www.python.org/downloads/mac-osx/). + +To verify if Python was successfully installed, run the following command in the terminal: + +``` +python3 --version +``` diff --git a/resources/walkthrough/install-python-windows-8.md b/resources/walkthrough/install-python-windows-8.md new file mode 100644 index 000000000000..f25f2f7d024d --- /dev/null +++ b/resources/walkthrough/install-python-windows-8.md @@ -0,0 +1,15 @@ +## Install Python on Windows + +If you don't have Python installed on your Windows machine, you can install it [from python.org](https://www.python.org/downloads). + +To verify it's installed, create a new terminal (Ctrl + Shift + `) and try running the following command: + +``` +python --version +``` + +You should see something similar to the following: +``` +Python 3.9.5 +``` +For additional information about using Python on Windows, see [Using Python on Windows at Python.org](https://docs.python.org/3.10/using/windows.html). diff --git a/resources/walkthrough/interactive-window.svg b/resources/walkthrough/interactive-window.svg new file mode 100644 index 000000000000..83446ed8e66a --- /dev/null +++ b/resources/walkthrough/interactive-window.svg @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/walkthrough/learnmore.svg b/resources/walkthrough/learnmore.svg new file mode 100644 index 000000000000..c5fd67e75471 --- /dev/null +++ b/resources/walkthrough/learnmore.svg @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/walkthrough/open-folder.svg b/resources/walkthrough/open-folder.svg new file mode 100644 index 000000000000..1615718a83dd --- /dev/null +++ b/resources/walkthrough/open-folder.svg @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/walkthrough/play-button-dark.png b/resources/walkthrough/play-button-dark.png new file mode 100644 index 000000000000..113ad62b87c2 Binary files /dev/null and b/resources/walkthrough/play-button-dark.png differ diff --git a/resources/walkthrough/python-interpreter.svg b/resources/walkthrough/python-interpreter.svg new file mode 100644 index 000000000000..0f6e262321ec --- /dev/null +++ b/resources/walkthrough/python-interpreter.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/resources/walkthrough/rundebug2.svg b/resources/walkthrough/rundebug2.svg new file mode 100644 index 000000000000..6d1fe753cc4f --- /dev/null +++ b/resources/walkthrough/rundebug2.svg @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/schemas/conda-environment.json b/schemas/conda-environment.json index 824174948ff8..fb1e821778c3 100644 --- a/schemas/conda-environment.json +++ b/schemas/conda-environment.json @@ -1,7 +1,7 @@ { "title": "conda environment file", - "description": "Support for conda's enviroment.yml files (e.g. `conda env export > environment.yml`)", - "id": "https://raw.githubusercontent.com/Microsoft/vscode-python/master/schemas/conda-environment.json", + "description": "Support for conda's environment.yml files (e.g. `conda env export > environment.yml`)", + "id": "https://raw.githubusercontent.com/Microsoft/vscode-python/main/schemas/conda-environment.json", "$schema": "http://json-schema.org/draft-04/schema#", "definitions": { "channel": { diff --git a/schemas/condarc.json b/schemas/condarc.json index 00ae69dee929..a881315d3137 100644 --- a/schemas/condarc.json +++ b/schemas/condarc.json @@ -1,7 +1,7 @@ { "title": ".condarc", "description": "The conda configuration file; https://conda.io/docs/user-guide/configuration/use-condarc.html", - "id": "https://raw.githubusercontent.com/Microsoft/vscode-python/master/schemas/condarc.json", + "id": "https://raw.githubusercontent.com/Microsoft/vscode-python/main/schemas/condarc.json", "$schema": "http://json-schema.org/draft-04/schema#", "definitions": { "channel": { @@ -59,7 +59,14 @@ } }, "ssl_verify": { - "type": "boolean" + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ] }, "offline": { "type": "boolean" diff --git a/scripts/cleanup-eslintignore.js b/scripts/cleanup-eslintignore.js new file mode 100644 index 000000000000..848f5a9c4910 --- /dev/null +++ b/scripts/cleanup-eslintignore.js @@ -0,0 +1,44 @@ +const fs = require('fs'); +const path = require('path'); + +const baseDir = process.cwd(); +const eslintignorePath = path.join(baseDir, '.eslintignore'); + +fs.readFile(eslintignorePath, 'utf8', (err, data) => { + if (err) { + console.error('Error reading .eslintignore file:', err); + return; + } + + const lines = data.split('\n'); + const files = lines.map((line) => line.trim()).filter((line) => line && !line.startsWith('#')); + const nonExistentFiles = []; + + files.forEach((file) => { + const filePath = path.join(baseDir, file); + if (!fs.existsSync(filePath) && file !== 'pythonExtensionApi/out/') { + nonExistentFiles.push(file); + } + }); + + if (nonExistentFiles.length > 0) { + console.log('The following files listed in .eslintignore do not exist:'); + nonExistentFiles.forEach((file) => console.log(file)); + + const updatedLines = lines.filter((line) => { + const trimmedLine = line.trim(); + return !nonExistentFiles.includes(trimmedLine) || trimmedLine === 'pythonExtensionApi/out/'; + }); + const updatedData = `${updatedLines.join('\n')}\n`; + + fs.writeFile(eslintignorePath, updatedData, 'utf8', (err) => { + if (err) { + console.error('Error writing to .eslintignore file:', err); + return; + } + console.log('Non-existent files have been removed from .eslintignore.'); + }); + } else { + console.log('All files listed in .eslintignore exist.'); + } +}); diff --git a/scripts/issue_velocity_summary_script.py b/scripts/issue_velocity_summary_script.py new file mode 100644 index 000000000000..94929d1798a9 --- /dev/null +++ b/scripts/issue_velocity_summary_script.py @@ -0,0 +1,110 @@ +""" +This script fetches open issues from the microsoft/vscode-python repository, +calculates the thumbs-up per day for each issue, and generates a markdown +summary of the issues sorted by highest thumbs-up per day. Issues with zero +thumbs-up are excluded from the summary. +""" + +import requests +import os +from datetime import datetime, timezone + + +GITHUB_API_URL = "https://api.github.com" +REPO = "microsoft/vscode-python" +TOKEN = os.getenv("GITHUB_TOKEN") + + +def fetch_issues(): + """ + Fetches all open issues from the specified GitHub repository. + + Returns: + list: A list of dictionaries representing the issues. + """ + headers = {"Authorization": f"token {TOKEN}"} + issues = [] + page = 1 + while True: + query = ( + f"{GITHUB_API_URL}/repos/{REPO}/issues?state=open&per_page=25&page={page}" + ) + response = requests.get(query, headers=headers) + if response.status_code == 403: + raise Exception( + "Access forbidden: Check your GitHub token and permissions." + ) + response.raise_for_status() + page_issues = response.json() + if not page_issues: + break + issues.extend(page_issues) + page += 1 + return issues + + +def calculate_thumbs_up_per_day(issue): + """ + Calculates the thumbs-up per day for a given issue. + + Args: + issue (dict): A dictionary representing the issue. + + Returns: + float: The thumbs-up per day for the issue. + """ + created_at = datetime.strptime(issue["created_at"], "%Y-%m-%dT%H:%M:%SZ").replace( + tzinfo=timezone.utc + ) + now = datetime.now(timezone.utc) + days_open = (now - created_at).days or 1 + thumbs_up = issue["reactions"].get("+1", 0) + return thumbs_up / days_open + + +def generate_markdown_summary(issues): + """ + Generates a markdown summary of the issues. + + Args: + issues (list): A list of dictionaries representing the issues. + + Returns: + str: A markdown-formatted string summarizing the issues. + """ + summary = "| URL | Title | 👍 | Days Open | 👍/day |\n| --- | ----- | --- | --------- | ------ |\n" + issues_with_thumbs_up = [] + for issue in issues: + created_at = datetime.strptime( + issue["created_at"], "%Y-%m-%dT%H:%M:%SZ" + ).replace(tzinfo=timezone.utc) + now = datetime.now(timezone.utc) + days_open = (now - created_at).days or 1 + thumbs_up = issue["reactions"].get("+1", 0) + if thumbs_up > 0: + thumbs_up_per_day = thumbs_up / days_open + issues_with_thumbs_up.append( + (issue, thumbs_up, days_open, thumbs_up_per_day) + ) + + # Sort issues by thumbs_up_per_day in descending order + issues_with_thumbs_up.sort(key=lambda x: x[3], reverse=True) + + for issue, thumbs_up, days_open, thumbs_up_per_day in issues_with_thumbs_up: + summary += f"| {issue['html_url']} | {issue['title']} | {thumbs_up} | {days_open} | {thumbs_up_per_day:.2f} |\n" + + return summary + + +def main(): + """ + Main function to fetch issues, generate the markdown summary, and write it to a file. + """ + issues = fetch_issues() + summary = generate_markdown_summary(issues) + with open("endorsement_velocity_summary.md", "w") as f: + f.write(summary) + + +if __name__ == "__main__": + main() diff --git a/scripts/onCreateCommand.sh b/scripts/onCreateCommand.sh new file mode 100644 index 000000000000..3d473d1ee172 --- /dev/null +++ b/scripts/onCreateCommand.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +# Install pyenv and Python versions here to avoid using shim. +curl https://pyenv.run | bash +echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc +echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc +# echo 'eval "$(pyenv init -)"' >> ~/.bashrc + +export PYENV_ROOT="$HOME/.pyenv" +command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" +# eval "$(pyenv init -)" Comment this out and DO NOT use shim. +source ~/.bashrc + +# Install Python via pyenv . +pyenv install 3.8.18 3.9:latest 3.10:latest 3.11:latest + +# Set default Python version to 3.8 . +pyenv global 3.8.18 + +npm ci + +# Create Virutal environment. +pyenv exec python -m venv .venv + +# Activate Virtual environment. +source /workspaces/vscode-python/.venv/bin/activate + +# Install required Python libraries. +/workspaces/vscode-python/.venv/bin/python -m pip install nox +nox --session install_python_libs + +/workspaces/vscode-python/.venv/bin/python -m pip install -r build/test-requirements.txt +/workspaces/vscode-python/.venv/bin/python -m pip install -r build/functional-test-requirements.txt + +# Below will crash codespace +# npm run compile diff --git a/snippets/python.json b/snippets/python.json deleted file mode 100644 index 11b39a30ccef..000000000000 --- a/snippets/python.json +++ /dev/null @@ -1,175 +0,0 @@ -{ - "if": { - "prefix": "if", - "body": ["if ${1:expression}:", "\t${2:pass}"], - "description": "Code snippet for an if statement" - }, - "if/else": { - "prefix": "if/else", - "body": ["if ${1:condition}:", "\t${2:pass}", "else:", "\t${3:pass}"], - "description": "Code snippet for an if statement with else" - }, - "elif": { - "prefix": "elif", - "body": ["elif ${1:expression}:", "\t${2:pass}"], - "description": "Code snippet for an elif" - }, - "else": { - "prefix": "else", - "body": ["else:", "\t${1:pass}"], - "description": "Code snippet for an else" - }, - "while": { - "prefix": "while", - "body": ["while ${1:expression}:", "\t${2:pass}"], - "description": "Code snippet for a while loop" - }, - "while/else": { - "prefix": "while/else", - "body": ["while ${1:expression}:", "\t${2:pass}", "else:", "\t${3:pass}"], - "description": "Code snippet for a while loop with else" - }, - "for": { - "prefix": "for", - "body": ["for ${1:target_list} in ${2:expression_list}:", "\t${3:pass}"], - "description": "Code snippet for a for loop" - }, - "for/else": { - "prefix": "for/else", - "body": ["for ${1:target_list} in ${2:expression_list}:", "\t${3:pass}", "else:", "\t${4:pass}"], - "description": "Code snippet for a for loop with else" - }, - "try/except": { - "prefix": "try/except", - "body": ["try:", "\t${1:pass}", "except ${2:expression} as ${3:identifier}:", "\t${4:pass}"], - "description": "Code snippet for a try/except statement" - }, - "try/finally": { - "prefix": "try/finally", - "body": ["try:", "\t${1:pass}", "finally:", "\t${2:pass}"], - "description": "Code snippet for a try/finally statement" - }, - "try/except/else": { - "prefix": "try/except/else", - "body": [ - "try:", - "\t${1:pass}", - "except ${2:expression} as ${3:identifier}:", - "\t${4:pass}", - "else:", - "\t${5:pass}" - ], - "description": "Code snippet for a try/except/else statement" - }, - "try/except/finally": { - "prefix": "try/except/finally", - "body": [ - "try:", - "\t${1:pass}", - "except ${2:expression} as ${3:identifier}:", - "\t${4:pass}", - "finally:", - "\t${5:pass}" - ], - "description": "Code snippet for a try/except/finally statement" - }, - "try/except/else/finally": { - "prefix": "try/except/else/finally", - "body": [ - "try:", - "\t${1:pass}", - "except ${2:expression} as ${3:identifier}:", - "\t${4:pass}", - "else:", - "\t${5:pass}", - "finally:", - "\t${6:pass}" - ], - "description": "Code snippet for a try/except/else/finally statement" - }, - "with": { - "prefix": "with", - "body": ["with ${1:expression} as ${2:target}:", "\t${3:pass}"], - "description": "Code snippet for a with statement" - }, - "def": { - "prefix": "def", - "body": ["def ${1:funcname}(${2:parameter_list}):", "\t${3:pass}"], - "description": "Code snippet for a function definition" - }, - "def(class method)": { - "prefix": "def(class method)", - "body": ["def ${1:funcname}(self, ${2:parameter_list}):", "\t${3:pass}"], - "description": "Code snippet for a class method" - }, - "def(static class method)": { - "prefix": "def(static class method)", - "body": ["@staticmethod", "def ${1:funcname}(${2:parameter_list}):", "\t${3:pass}"], - "description": "Code snippet for a static class method" - }, - "def(abstract class method)": { - "prefix": "def(abstract class method)", - "body": ["def ${1:funcname}(self, ${2:parameter_list}):", "\traise NotImplementedError"], - "description": "Code snippet for an abstract class method" - }, - "class": { - "prefix": "class", - "body": ["class ${1:classname}(${2:object}):", "\t${3:pass}"], - "description": "Code snippet for a class definition" - }, - "lambda": { - "prefix": "lambda", - "body": ["lambda ${1:parameter_list}: ${2:expression}"], - "description": "Code snippet for a lambda statement" - }, - "if(main)": { - "prefix": "__main__", - "body": ["if __name__ == \"__main__\":", " ${1:pass}"], - "description": "Code snippet for a `if __name__ == \"__main__\": ...` block" - }, - "async/def": { - "prefix": "async/def", - "body": ["async def ${1:funcname}(${2:parameter_list}):", "\t${3:pass}"], - "description": "Code snippet for an async statement" - }, - "async/for": { - "prefix": "async/for", - "body": ["async for ${1:target} in ${2:iter}:", "\t${3:block}"], - "description": "Code snippet for an async for statement" - }, - "async/for/else": { - "prefix": "async/for/else", - "body": ["async for ${1:target} in ${2:iter}:", "\t${3:block}", "else:", "\t${4:block}"], - "description": "Code snippet for an async for statement with else" - }, - "async/with": { - "prefix": "async/with", - "body": ["async with ${1:expr} as ${2:var}:", "\t${3:block}"], - "description": "Code snippet for an async with statement" - }, - "ipdb": { - "prefix": "ipdb", - "body": "import ipdb; ipdb.set_trace()", - "description": "Code snippet for ipdb debug" - }, - "pdb": { - "prefix": "pdb", - "body": "import pdb; pdb.set_trace()", - "description": "Code snippet for pdb debug" - }, - "pudb": { - "prefix": "pudb", - "body": "import pudb; pudb.set_trace()", - "description": "Code snippet for pudb debug" - }, - "add/new/cell": { - "prefix": "add/new/cell", - "body": "# %%", - "description": "Code snippet to add a new cell" - }, - "mark/markdown": { - "prefix": "mark/markdown", - "body": "# %% [markdown]", - "description": "Code snippet to add a new markdown cell" - } -} diff --git a/sprint-planning.github-issues b/sprint-planning.github-issues new file mode 100644 index 000000000000..1fbd09a790e8 --- /dev/null +++ b/sprint-planning.github-issues @@ -0,0 +1,72 @@ +[ + { + "kind": 1, + "language": "markdown", + "value": "# Query constants" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$pvsc=repo:microsoft/vscode-python\n$open=is:open\n$upvotes=sort:reactions-+1-desc" + }, + { + "kind": 1, + "language": "markdown", + "value": "# Priority issues 🚨" + }, + { + "kind": 1, + "language": "markdown", + "value": "## Important/P1" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$pvsc $open label:\"important\"" + }, + { + "kind": 1, + "language": "markdown", + "value": "# Regressions 🔙" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$pvsc $open label:\"regression\"" + }, + { + "kind": 1, + "language": "markdown", + "value": "# Partner asks" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$pvsc $open label:\"partner ask\"" + }, + { + "kind": 1, + "language": "markdown", + "value": "# Upvotes 👍" + }, + { + "kind": 1, + "language": "markdown", + "value": "## Enhancements 💪" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$pvsc $open $upvotes label:\"feature-request\" " + }, + { + "kind": 1, + "language": "markdown", + "value": "## Bugs 🐜" + }, + { + "kind": 2, + "language": "github-issues", + "value": "$pvsc $open $upvotes label:\"bug\"" + } +] diff --git a/src/client/activation/aaTesting.ts b/src/client/activation/aaTesting.ts deleted file mode 100644 index e37ddb31e4d0..000000000000 --- a/src/client/activation/aaTesting.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { ValidateABTesting } from '../common/experimentGroups'; -import { IExperimentsManager } from '../common/types'; -import { IExtensionSingleActivationService } from './types'; - -@injectable() -export class AATesting implements IExtensionSingleActivationService { - constructor(@inject(IExperimentsManager) private experiments: IExperimentsManager) {} - - public async activate(): Promise { - this.experiments.sendTelemetryIfInExperiment(ValidateABTesting.experiment); - this.experiments.sendTelemetryIfInExperiment(ValidateABTesting.control); - } -} diff --git a/src/client/activation/activationManager.ts b/src/client/activation/activationManager.ts index f570eb05aa3a..9e97c5c48857 100644 --- a/src/client/activation/activationManager.ts +++ b/src/client/activation/activationManager.ts @@ -7,40 +7,59 @@ import { inject, injectable, multiInject } from 'inversify'; import { TextDocument } from 'vscode'; import { IApplicationDiagnostics } from '../application/types'; import { IActiveResourceService, IDocumentManager, IWorkspaceService } from '../common/application/types'; -import { DEFAULT_INTERPRETER_SETTING, PYTHON_LANGUAGE } from '../common/constants'; -import { DeprecatePythonPath } from '../common/experimentGroups'; -import { traceDecorators } from '../common/logger'; +import { PYTHON_LANGUAGE } from '../common/constants'; import { IFileSystem } from '../common/platform/types'; -import { IDisposable, IExperimentsManager, IInterpreterPathService, Resource } from '../common/types'; -import { createDeferred, Deferred } from '../common/utils/async'; -import { IInterpreterAutoSelectionService, IInterpreterSecurityService } from '../interpreter/autoSelection/types'; -import { IInterpreterService } from '../interpreter/contracts'; +import { IDisposable, IInterpreterPathService, Resource } from '../common/types'; +import { Deferred } from '../common/utils/async'; +import { StopWatch } from '../common/utils/stopWatch'; +import { IInterpreterAutoSelectionService } from '../interpreter/autoSelection/types'; +import { traceDecoratorError } from '../logging'; import { sendActivationTelemetry } from '../telemetry/envFileTelemetry'; import { IExtensionActivationManager, IExtensionActivationService, IExtensionSingleActivationService } from './types'; @injectable() export class ExtensionActivationManager implements IExtensionActivationManager { public readonly activatedWorkspaces = new Set(); + protected readonly isInterpreterSetForWorkspacePromises = new Map>(); + private readonly disposables: IDisposable[] = []; + private docOpenedHandler?: IDisposable; + constructor( - @multiInject(IExtensionActivationService) private readonly activationServices: IExtensionActivationService[], + @multiInject(IExtensionActivationService) private activationServices: IExtensionActivationService[], @multiInject(IExtensionSingleActivationService) - private readonly singleActivationServices: IExtensionSingleActivationService[], + private singleActivationServices: IExtensionSingleActivationService[], @inject(IDocumentManager) private readonly documentManager: IDocumentManager, - @inject(IInterpreterService) private readonly interpreterService: IInterpreterService, @inject(IInterpreterAutoSelectionService) private readonly autoSelection: IInterpreterAutoSelectionService, @inject(IApplicationDiagnostics) private readonly appDiagnostics: IApplicationDiagnostics, @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService, @inject(IFileSystem) private readonly fileSystem: IFileSystem, @inject(IActiveResourceService) private readonly activeResourceService: IActiveResourceService, - @inject(IExperimentsManager) private readonly experiments: IExperimentsManager, @inject(IInterpreterPathService) private readonly interpreterPathService: IInterpreterPathService, - @inject(IInterpreterSecurityService) private readonly interpreterSecurityService: IInterpreterSecurityService ) {} - public dispose() { + private filterServices() { + if (!this.workspaceService.isTrusted) { + this.activationServices = this.activationServices.filter( + (service) => service.supportedWorkspaceTypes.untrustedWorkspace, + ); + this.singleActivationServices = this.singleActivationServices.filter( + (service) => service.supportedWorkspaceTypes.untrustedWorkspace, + ); + } + if (this.workspaceService.isVirtualWorkspace) { + this.activationServices = this.activationServices.filter( + (service) => service.supportedWorkspaceTypes.virtualWorkspace, + ); + this.singleActivationServices = this.singleActivationServices.filter( + (service) => service.supportedWorkspaceTypes.virtualWorkspace, + ); + } + } + + public dispose(): void { while (this.disposables.length > 0) { const disposable = this.disposables.shift()!; disposable.dispose(); @@ -50,91 +69,65 @@ export class ExtensionActivationManager implements IExtensionActivationManager { this.docOpenedHandler = undefined; } } - public async activate(): Promise { + + public async activate(startupStopWatch: StopWatch): Promise { + this.filterServices(); await this.initialize(); + // Activate all activation services together. + await Promise.all([ - Promise.all(this.singleActivationServices.map((item) => item.activate())), - this.activateWorkspace(this.activeResourceService.getActiveResource()) + ...this.singleActivationServices.map((item) => item.activate()), + this.activateWorkspace(this.activeResourceService.getActiveResource(), startupStopWatch), ]); - await this.autoSelection.autoSelectInterpreter(undefined); } - @traceDecorators.error('Failed to activate a workspace') - public async activateWorkspace(resource: Resource) { + + @traceDecoratorError('Failed to activate a workspace') + public async activateWorkspace(resource: Resource, startupStopWatch?: StopWatch): Promise { + const folder = this.workspaceService.getWorkspaceFolder(resource); + resource = folder ? folder.uri : undefined; const key = this.getWorkspaceKey(resource); if (this.activatedWorkspaces.has(key)) { return; } this.activatedWorkspaces.add(key); - if (this.experiments.inExperiment(DeprecatePythonPath.experiment)) { + if (this.workspaceService.isTrusted) { + // Do not interact with interpreters in a untrusted workspace. + await this.autoSelection.autoSelectInterpreter(resource); await this.interpreterPathService.copyOldInterpreterStorageValuesToNew(resource); } - this.experiments.sendTelemetryIfInExperiment(DeprecatePythonPath.control); - - // Get latest interpreter list in the background. - this.interpreterService.getInterpreters(resource).ignoreErrors(); - await sendActivationTelemetry(this.fileSystem, this.workspaceService, resource); - - await this.autoSelection.autoSelectInterpreter(resource); - await this.evaluateAutoSelectedInterpreterSafety(resource); - await Promise.all(this.activationServices.map((item) => item.activate(resource))); + await Promise.all(this.activationServices.map((item) => item.activate(resource, startupStopWatch))); await this.appDiagnostics.performPreStartupHealthCheck(resource); } - public async initialize() { + + public async initialize(): Promise { this.addHandlers(); this.addRemoveDocOpenedHandlers(); } - public onDocOpened(doc: TextDocument) { + + public onDocOpened(doc: TextDocument): void { if (doc.languageId !== PYTHON_LANGUAGE) { return; } const key = this.getWorkspaceKey(doc.uri); + const hasWorkspaceFolders = (this.workspaceService.workspaceFolders?.length || 0) > 0; // If we have opened a doc that does not belong to workspace, then do nothing. - if (key === '' && this.workspaceService.hasWorkspaceFolders) { + if (key === '' && hasWorkspaceFolders) { return; } if (this.activatedWorkspaces.has(key)) { return; } - const folder = this.workspaceService.getWorkspaceFolder(doc.uri); - this.activateWorkspace(folder ? folder.uri : undefined).ignoreErrors(); + this.activateWorkspace(doc.uri).ignoreErrors(); } - public async evaluateAutoSelectedInterpreterSafety(resource: Resource) { - if (this.experiments.inExperiment(DeprecatePythonPath.experiment)) { - const workspaceKey = this.getWorkspaceKey(resource); - const interpreterSettingValue = this.interpreterPathService.get(resource); - if (interpreterSettingValue.length === 0 || interpreterSettingValue === DEFAULT_INTERPRETER_SETTING) { - // Setting is not set, extension will use the autoselected value. Make sure it's safe. - const interpreter = this.autoSelection.getAutoSelectedInterpreter(resource); - if (interpreter) { - const isInterpreterSetForWorkspace = createDeferred(); - this.isInterpreterSetForWorkspacePromises.set(workspaceKey, isInterpreterSetForWorkspace); - await Promise.race([ - isInterpreterSetForWorkspace.promise, - this.interpreterSecurityService.evaluateAndRecordInterpreterSafety(interpreter, resource) - ]); - } - } else { - // Resolve any concurrent calls waiting on the promise - if (this.isInterpreterSetForWorkspacePromises.has(workspaceKey)) { - this.isInterpreterSetForWorkspacePromises.get(workspaceKey)!.resolve(); - this.isInterpreterSetForWorkspacePromises.delete(workspaceKey); - } - } - } - this.experiments.sendTelemetryIfInExperiment(DeprecatePythonPath.control); - } - - protected addHandlers() { + protected addHandlers(): void { this.disposables.push(this.workspaceService.onDidChangeWorkspaceFolders(this.onWorkspaceFoldersChanged, this)); - this.disposables.push( - this.interpreterPathService.onDidChange((i) => this.evaluateAutoSelectedInterpreterSafety(i.uri)) - ); } - protected addRemoveDocOpenedHandlers() { + + protected addRemoveDocOpenedHandlers(): void { if (this.hasMultipleWorkspaces()) { if (!this.docOpenedHandler) { this.docOpenedHandler = this.documentManager.onDidOpenTextDocument(this.onDocOpened, this); @@ -146,10 +139,11 @@ export class ExtensionActivationManager implements IExtensionActivationManager { this.docOpenedHandler = undefined; } } - protected onWorkspaceFoldersChanged() { - //If an activated workspace folder was removed, delete its key + + protected onWorkspaceFoldersChanged(): void { + // If an activated workspace folder was removed, delete its key const workspaceKeys = this.workspaceService.workspaceFolders!.map((workspaceFolder) => - this.getWorkspaceKey(workspaceFolder.uri) + this.getWorkspaceKey(workspaceFolder.uri), ); const activatedWkspcKeys = Array.from(this.activatedWorkspaces.keys()); const activatedWkspcFoldersRemoved = activatedWkspcKeys.filter((item) => workspaceKeys.indexOf(item) < 0); @@ -160,10 +154,12 @@ export class ExtensionActivationManager implements IExtensionActivationManager { } this.addRemoveDocOpenedHandlers(); } - protected hasMultipleWorkspaces() { - return this.workspaceService.hasWorkspaceFolders && this.workspaceService.workspaceFolders!.length > 1; + + protected hasMultipleWorkspaces(): boolean { + return (this.workspaceService.workspaceFolders?.length || 0) > 1; } - protected getWorkspaceKey(resource: Resource) { + + protected getWorkspaceKey(resource: Resource): string { return this.workspaceService.getWorkspaceFolderIdentifier(resource, ''); } } diff --git a/src/client/activation/activationService.ts b/src/client/activation/activationService.ts deleted file mode 100644 index 0d525499362d..000000000000 --- a/src/client/activation/activationService.ts +++ /dev/null @@ -1,338 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import '../common/extensions'; - -import { inject, injectable } from 'inversify'; -import { ConfigurationChangeEvent, Disposable, OutputChannel, Uri } from 'vscode'; - -import { LSNotSupportedDiagnosticServiceId } from '../application/diagnostics/checks/lsNotSupported'; -import { IDiagnosticsService } from '../application/diagnostics/types'; -import { IApplicationShell, ICommandManager, IWorkspaceService } from '../common/application/types'; -import { STANDARD_OUTPUT_CHANNEL } from '../common/constants'; -import { LSControl, LSEnabled } from '../common/experimentGroups'; -import { traceError } from '../common/logger'; -import { - IConfigurationService, - IDisposableRegistry, - IExperimentsManager, - IOutputChannel, - IPersistentStateFactory, - IPythonSettings, - Resource -} from '../common/types'; -import { swallowExceptions } from '../common/utils/decorators'; -import { noop } from '../common/utils/misc'; -import { IInterpreterService, PythonInterpreter } from '../interpreter/contracts'; -import { IServiceContainer } from '../ioc/types'; -import { sendTelemetryEvent } from '../telemetry'; -import { EventName } from '../telemetry/constants'; -import { Commands } from './languageServer/constants'; -import { RefCountedLanguageServer } from './refCountedLanguageServer'; -import { - IExtensionActivationService, - ILanguageServerActivator, - ILanguageServerCache, - LanguageServerType -} from './types'; - -const jediEnabledSetting: keyof IPythonSettings = 'jediEnabled'; -const languageServerSetting: keyof IPythonSettings = 'languageServer'; -const workspacePathNameForGlobalWorkspaces = ''; - -interface IActivatedServer { - key: string; - server: ILanguageServerActivator; - jedi: boolean; -} - -@injectable() -export class LanguageServerExtensionActivationService - implements IExtensionActivationService, ILanguageServerCache, Disposable { - private cache = new Map>(); - private activatedServer?: IActivatedServer; - private readonly workspaceService: IWorkspaceService; - private readonly output: OutputChannel; - private readonly appShell: IApplicationShell; - private readonly interpreterService: IInterpreterService; - private resource!: Resource; - - constructor( - @inject(IServiceContainer) private serviceContainer: IServiceContainer, - @inject(IPersistentStateFactory) private stateFactory: IPersistentStateFactory, - @inject(IExperimentsManager) private readonly abExperiments: IExperimentsManager - ) { - this.workspaceService = this.serviceContainer.get(IWorkspaceService); - this.interpreterService = this.serviceContainer.get(IInterpreterService); - this.output = this.serviceContainer.get(IOutputChannel, STANDARD_OUTPUT_CHANNEL); - this.appShell = this.serviceContainer.get(IApplicationShell); - const commandManager = this.serviceContainer.get(ICommandManager); - const disposables = serviceContainer.get(IDisposableRegistry); - disposables.push(this); - disposables.push(this.workspaceService.onDidChangeConfiguration(this.onDidChangeConfiguration.bind(this))); - disposables.push(this.workspaceService.onDidChangeWorkspaceFolders(this.onWorkspaceFoldersChanged, this)); - disposables.push(this.interpreterService.onDidChangeInterpreter(this.onDidChangeInterpreter.bind(this))); - disposables.push( - commandManager.registerCommand(Commands.ClearAnalyisCache, this.onClearAnalysisCaches.bind(this)) - ); - } - - public async activate(resource: Resource): Promise { - // Get a new server and dispose of the old one (might be the same one) - this.resource = resource; - const interpreter = await this.interpreterService.getActiveInterpreter(resource); - const key = await this.getKey(resource, interpreter); - - // If we have an old server with a different key, then deactivate it as the - // creation of the new server may fail if this server is still connected - if (this.activatedServer && this.activatedServer.key !== key) { - this.activatedServer.server.deactivate(); - } - - // Get the new item - const result = await this.get(resource, interpreter); - - // Now we dispose. This ensures the object stays alive if it's the same object because - // we dispose after we increment the ref count. - if (this.activatedServer) { - this.activatedServer.server.dispose(); - } - - // Save our active server. - this.activatedServer = { key, server: result, jedi: result.type === LanguageServerType.Jedi }; - - // Force this server to reconnect (if disconnected) as it should be the active - // language server for all of VS code. - this.activatedServer.server.activate(); - } - - public async get(resource: Resource, interpreter?: PythonInterpreter): Promise { - // See if we already have it or not - const key = await this.getKey(resource, interpreter); - let result: Promise | undefined = this.cache.get(key); - if (!result) { - // Create a special ref counted result so we don't dispose of the - // server too soon. - result = this.createRefCountedServer(resource, interpreter, key); - this.cache.set(key, result); - } else { - // Increment ref count if already exists. - result = result.then((r) => { - r.increment(); - return r; - }); - } - return result; - } - - public dispose() { - if (this.activatedServer) { - this.activatedServer.server.dispose(); - } - } - @swallowExceptions('Send telemetry for Language Server current selection') - public async sendTelemetryForChosenLanguageServer(jediEnabled: boolean): Promise { - const state = this.stateFactory.createGlobalPersistentState('SWITCH_LS', undefined); - if (typeof state.value !== 'boolean') { - await state.updateValue(jediEnabled); - } - if (state.value !== jediEnabled) { - await state.updateValue(jediEnabled); - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION, undefined, { - switchTo: jediEnabled - }); - } else { - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_CURRENT_SELECTION, undefined, { - lsStartup: jediEnabled - }); - } - } - - /** - * Checks if user has not manually set `jediEnabled` setting - * @param resource - * @returns `true` if user has NOT manually added the setting and is using default configuration, `false` if user has `jediEnabled` setting added - */ - public isJediUsingDefaultConfiguration(resource: Resource): boolean { - const settings = this.workspaceService.getConfiguration('python', resource).inspect('jediEnabled'); - if (!settings) { - traceError('WorkspaceConfiguration.inspect returns `undefined` for setting `python.jediEnabled`'); - return false; - } - return ( - settings.globalValue === undefined && - settings.workspaceValue === undefined && - settings.workspaceFolderValue === undefined - ); - } - - /** - * Checks if user is using Jedi as intellisense - * @returns `true` if user is using jedi, `false` if user is using language server - */ - public useJedi(): boolean { - if (this.isJediUsingDefaultConfiguration(this.resource)) { - if (this.abExperiments.inExperiment(LSEnabled)) { - return false; - } - // Send telemetry if user is in control group - this.abExperiments.sendTelemetryIfInExperiment(LSControl); - } - const configurationService = this.serviceContainer.get(IConfigurationService); - let enabled = configurationService.getSettings(this.resource).jediEnabled; - const languageServerType = configurationService.getSettings(this.resource).languageServer; - enabled = enabled || languageServerType === LanguageServerType.Jedi; - this.sendTelemetryForChosenLanguageServer(enabled).ignoreErrors(); - return enabled; - } - - protected async onWorkspaceFoldersChanged() { - //If an activated workspace folder was removed, dispose its activator - const workspaceKeys = await Promise.all( - this.workspaceService.workspaceFolders!.map((workspaceFolder) => this.getKey(workspaceFolder.uri)) - ); - const activatedWkspcKeys = Array.from(this.cache.keys()); - const activatedWkspcFoldersRemoved = activatedWkspcKeys.filter((item) => workspaceKeys.indexOf(item) < 0); - if (activatedWkspcFoldersRemoved.length > 0) { - for (const folder of activatedWkspcFoldersRemoved) { - const server = await this.cache.get(folder); - server?.dispose(); // This should remove it from the cache if this is the last instance. - } - } - } - - private async onDidChangeInterpreter() { - // Reactivate the resource. It should destroy the old one if it's different. - return this.activate(this.resource); - } - - private async createRefCountedServer( - resource: Resource, - interpreter: PythonInterpreter | undefined, - key: string - ): Promise { - const configurationService = this.serviceContainer.get(IConfigurationService); - let serverType = configurationService.getSettings(this.resource).languageServer; - if (!serverType) { - serverType = LanguageServerType.Jedi; - } - - switch (serverType) { - case LanguageServerType.None: - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_NONE, undefined, undefined); - break; - case LanguageServerType.Node: - // No telemetry in development phase. - break; - case LanguageServerType.Microsoft: - if (this.useJedi()) { - serverType = LanguageServerType.Jedi; - break; - } - const lsNotSupportedDiagnosticService = this.serviceContainer.get( - IDiagnosticsService, - LSNotSupportedDiagnosticServiceId - ); - const diagnostic = await lsNotSupportedDiagnosticService.diagnose(undefined); - lsNotSupportedDiagnosticService.handle(diagnostic).ignoreErrors(); - if (diagnostic.length) { - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_PLATFORM_SUPPORTED, undefined, { - supported: false - }); - serverType = LanguageServerType.Jedi; - } - break; - default: - serverType = LanguageServerType.Jedi; - break; - } - - await this.logStartup(serverType); - let server = this.serviceContainer.get(ILanguageServerActivator, serverType); - try { - await server.start(resource, interpreter); - } catch (ex) { - if (serverType === LanguageServerType.Jedi) { - throw ex; - } - await this.logStartup(serverType); - serverType = LanguageServerType.Jedi; - server = this.serviceContainer.get(ILanguageServerActivator, serverType); - await server.start(resource, interpreter); - } - - // Wrap the returned server in something that ref counts it. - return new RefCountedLanguageServer(server, serverType, () => { - // When we finally remove the last ref count, remove from the cache - this.cache.delete(key); - - // Dispose of the actual server. - server.dispose(); - }); - } - - private async logStartup(serverType: LanguageServerType): Promise { - let outputLine; - switch (serverType) { - case LanguageServerType.Jedi: - outputLine = 'Starting Jedi Python language engine.'; - break; - case LanguageServerType.Microsoft: - outputLine = 'Starting Microsoft Python language server.'; - break; - case LanguageServerType.Node: - outputLine = 'Starting Node.js language server.'; - break; - case LanguageServerType.None: - outputLine = 'Editor support is inactive since language server is set to None.'; - break; - default: - throw new Error('Unknown langauge server type in activator.'); - } - this.output.appendLine(outputLine); - } - - private async onDidChangeConfiguration(event: ConfigurationChangeEvent) { - const workspacesUris: (Uri | undefined)[] = this.workspaceService.hasWorkspaceFolders - ? this.workspaceService.workspaceFolders!.map((workspace) => workspace.uri) - : [undefined]; - if ( - workspacesUris.findIndex((uri) => event.affectsConfiguration(`python.${jediEnabledSetting}`, uri)) === -1 && - workspacesUris.findIndex((uri) => event.affectsConfiguration(`python.${languageServerSetting}`, uri)) === -1 - ) { - return; - } - const jedi = this.useJedi(); - if (this.activatedServer) { - if (this.activatedServer.jedi === jedi) { - return; - } - const configurationService = this.serviceContainer.get(IConfigurationService); - const lsType = configurationService.getSettings(this.resource).languageServer; - if (this.activatedServer.key === lsType) { - return; - } - } - - const item = await this.appShell.showInformationMessage( - 'Please reload the window switching between language engines.', - 'Reload' - ); - if (item === 'Reload') { - this.serviceContainer.get(ICommandManager).executeCommand('workbench.action.reloadWindow'); - } - } - private async getKey(resource: Resource, interpreter?: PythonInterpreter): Promise { - const resourcePortion = this.workspaceService.getWorkspaceFolderIdentifier( - resource, - workspacePathNameForGlobalWorkspaces - ); - interpreter = interpreter ? interpreter : await this.interpreterService.getActiveInterpreter(resource); - const interperterPortion = interpreter ? `${interpreter.path}-${interpreter.envName}` : ''; - return `${resourcePortion}-${interperterPortion}`; - } - - private async onClearAnalysisCaches() { - const values = await Promise.all([...this.cache.values()]); - values.forEach((v) => (v.clearAnalysisCache ? v.clearAnalysisCache() : noop())); - } -} diff --git a/src/client/activation/commands.ts b/src/client/activation/commands.ts new file mode 100644 index 000000000000..158d9662ec46 --- /dev/null +++ b/src/client/activation/commands.ts @@ -0,0 +1,7 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +'use strict'; + +export namespace Commands { + export const RestartLS = 'python.analysis.restartLanguageServer'; +} diff --git a/src/client/activation/common/activatorBase.ts b/src/client/activation/common/activatorBase.ts deleted file mode 100644 index 32a532900a25..000000000000 --- a/src/client/activation/common/activatorBase.ts +++ /dev/null @@ -1,350 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -import * as path from 'path'; -import { - CancellationToken, - CodeLens, - CompletionContext, - CompletionItem, - CompletionList, - DocumentSymbol, - Hover, - Location, - LocationLink, - Position, - ProviderResult, - ReferenceContext, - SignatureHelp, - SignatureHelpContext, - SymbolInformation, - TextDocument, - TextDocumentContentChangeEvent, - WorkspaceEdit -} from 'vscode'; -import * as vscodeLanguageClient from 'vscode-languageclient'; - -import { injectable } from 'inversify'; -import { IWorkspaceService } from '../../common/application/types'; -import { traceDecorators } from '../../common/logger'; -import { IFileSystem } from '../../common/platform/types'; -import { IConfigurationService, Resource } from '../../common/types'; -import { EXTENSION_ROOT_DIR } from '../../constants'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { - ILanguageServerActivator, - ILanguageServerDownloader, - ILanguageServerFolderService, - ILanguageServerManager -} from '../types'; - -/** - * Starts the language server managers per workspaces (currently one for first workspace). - * - * @export - * @class LanguageServerActivatorBase - * @implements {ILanguageServerActivator} - */ -@injectable() -export abstract class LanguageServerActivatorBase implements ILanguageServerActivator { - protected resource?: Resource; - constructor( - protected readonly manager: ILanguageServerManager, - private readonly workspace: IWorkspaceService, - protected readonly fs: IFileSystem, - protected readonly lsDownloader: ILanguageServerDownloader, - protected readonly languageServerFolderService: ILanguageServerFolderService, - protected readonly configurationService: IConfigurationService - ) {} - - @traceDecorators.error('Failed to activate language server') - public async start(resource: Resource, interpreter?: PythonInterpreter): Promise { - if (!resource) { - resource = this.workspace.hasWorkspaceFolders ? this.workspace.workspaceFolders![0].uri : undefined; - } - this.resource = resource; - await this.ensureLanguageServerIsAvailable(resource); - await this.manager.start(resource, interpreter); - } - - public dispose(): void { - this.manager.dispose(); - } - - public abstract async ensureLanguageServerIsAvailable(resource: Resource): Promise; - - public activate(): void { - this.manager.connect(); - } - - public deactivate(): void { - this.manager.disconnect(); - } - - public handleOpen(document: TextDocument): void { - const languageClient = this.getLanguageClient(); - if (languageClient) { - languageClient.sendNotification( - vscodeLanguageClient.DidOpenTextDocumentNotification.type, - languageClient.code2ProtocolConverter.asOpenTextDocumentParams(document) - ); - } - } - - public handleChanges(document: TextDocument, changes: TextDocumentContentChangeEvent[]): void { - const languageClient = this.getLanguageClient(); - if (languageClient) { - languageClient.sendNotification( - vscodeLanguageClient.DidChangeTextDocumentNotification.type, - languageClient.code2ProtocolConverter.asChangeTextDocumentParams({ document, contentChanges: changes }) - ); - } - } - - public provideRenameEdits( - document: TextDocument, - position: Position, - newName: string, - token: CancellationToken - ): ProviderResult { - return this.handleProvideRenameEdits(document, position, newName, token); - } - - public provideDefinition( - document: TextDocument, - position: Position, - token: CancellationToken - ): ProviderResult { - return this.handleProvideDefinition(document, position, token); - } - - public provideHover(document: TextDocument, position: Position, token: CancellationToken): ProviderResult { - return this.handleProvideHover(document, position, token); - } - - public provideReferences( - document: TextDocument, - position: Position, - context: ReferenceContext, - token: CancellationToken - ): ProviderResult { - return this.handleProvideReferences(document, position, context, token); - } - - public provideCompletionItems( - document: TextDocument, - position: Position, - token: CancellationToken, - context: CompletionContext - ): ProviderResult { - return this.handleProvideCompletionItems(document, position, token, context); - } - - public provideCodeLenses(document: TextDocument, token: CancellationToken): ProviderResult { - return this.handleProvideCodeLenses(document, token); - } - - public provideDocumentSymbols( - document: TextDocument, - token: CancellationToken - ): ProviderResult { - return this.handleProvideDocumentSymbols(document, token); - } - - public provideSignatureHelp( - document: TextDocument, - position: Position, - token: CancellationToken, - context: SignatureHelpContext - ): ProviderResult { - return this.handleProvideSignatureHelp(document, position, token, context); - } - - protected async ensureLanguageServerFileIsAvailable( - resource: Resource, - fileName: string - ): Promise { - const settings = this.configurationService.getSettings(resource); - if (!settings.downloadLanguageServer) { - return; - } - const languageServerFolder = await this.languageServerFolderService.getLanguageServerFolderName(resource); - const languageServerFolderPath = path.join(EXTENSION_ROOT_DIR, languageServerFolder); - const mscorlib = path.join(languageServerFolderPath, fileName); - if (!(await this.fs.fileExists(mscorlib))) { - await this.lsDownloader.downloadLanguageServer(languageServerFolderPath, resource); - } - return languageServerFolderPath; - } - - private getLanguageClient(): vscodeLanguageClient.LanguageClient | undefined { - const proxy = this.manager.languageProxy; - if (proxy) { - return proxy.languageClient; - } - } - - private async handleProvideRenameEdits( - document: TextDocument, - position: Position, - newName: string, - token: CancellationToken - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args: vscodeLanguageClient.RenameParams = { - textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document), - position: languageClient.code2ProtocolConverter.asPosition(position), - newName - }; - const result = await languageClient.sendRequest(vscodeLanguageClient.RenameRequest.type, args, token); - if (result) { - return languageClient.protocol2CodeConverter.asWorkspaceEdit(result); - } - } - } - - private async handleProvideDefinition( - document: TextDocument, - position: Position, - token: CancellationToken - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args: vscodeLanguageClient.TextDocumentPositionParams = { - textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document), - position: languageClient.code2ProtocolConverter.asPosition(position) - }; - const result = await languageClient.sendRequest(vscodeLanguageClient.DefinitionRequest.type, args, token); - if (result) { - return languageClient.protocol2CodeConverter.asDefinitionResult(result); - } - } - } - - private async handleProvideHover( - document: TextDocument, - position: Position, - token: CancellationToken - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args: vscodeLanguageClient.TextDocumentPositionParams = { - textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document), - position: languageClient.code2ProtocolConverter.asPosition(position) - }; - const result = await languageClient.sendRequest(vscodeLanguageClient.HoverRequest.type, args, token); - if (result) { - return languageClient.protocol2CodeConverter.asHover(result); - } - } - } - - private async handleProvideReferences( - document: TextDocument, - position: Position, - context: ReferenceContext, - token: CancellationToken - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args: vscodeLanguageClient.ReferenceParams = { - textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document), - position: languageClient.code2ProtocolConverter.asPosition(position), - context - }; - const result = await languageClient.sendRequest(vscodeLanguageClient.ReferencesRequest.type, args, token); - if (result) { - // Remove undefined part. - return result.map((l) => { - const r = languageClient!.protocol2CodeConverter.asLocation(l); - return r!; - }); - } - } - } - - private async handleProvideCodeLenses( - document: TextDocument, - token: CancellationToken - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args: vscodeLanguageClient.CodeLensParams = { - textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document) - }; - const result = await languageClient.sendRequest(vscodeLanguageClient.CodeLensRequest.type, args, token); - if (result) { - return languageClient.protocol2CodeConverter.asCodeLenses(result); - } - } - } - - private async handleProvideCompletionItems( - document: TextDocument, - position: Position, - token: CancellationToken, - context: CompletionContext - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args = languageClient.code2ProtocolConverter.asCompletionParams(document, position, context); - const result = await languageClient.sendRequest(vscodeLanguageClient.CompletionRequest.type, args, token); - if (result) { - return languageClient.protocol2CodeConverter.asCompletionResult(result); - } - } - } - - private async handleProvideDocumentSymbols( - document: TextDocument, - token: CancellationToken - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args: vscodeLanguageClient.DocumentSymbolParams = { - textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document) - }; - const result = await languageClient.sendRequest( - vscodeLanguageClient.DocumentSymbolRequest.type, - args, - token - ); - if (result && result.length) { - // tslint:disable-next-line: no-any - if ((result[0] as any).range) { - // Document symbols - const docSymbols = result as vscodeLanguageClient.DocumentSymbol[]; - return languageClient.protocol2CodeConverter.asDocumentSymbols(docSymbols); - } else { - // Document symbols - const symbols = result as vscodeLanguageClient.SymbolInformation[]; - return languageClient.protocol2CodeConverter.asSymbolInformations(symbols); - } - } - } - } - - private async handleProvideSignatureHelp( - document: TextDocument, - position: Position, - token: CancellationToken, - _context: SignatureHelpContext - ): Promise { - const languageClient = this.getLanguageClient(); - if (languageClient) { - const args: vscodeLanguageClient.TextDocumentPositionParams = { - textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document), - position: languageClient.code2ProtocolConverter.asPosition(position) - }; - const result = await languageClient.sendRequest( - vscodeLanguageClient.SignatureHelpRequest.type, - args, - token - ); - if (result) { - return languageClient.protocol2CodeConverter.asSignatureHelp(result); - } - } - } -} diff --git a/src/client/activation/common/analysisOptions.ts b/src/client/activation/common/analysisOptions.ts new file mode 100644 index 000000000000..75d0aabef9d2 --- /dev/null +++ b/src/client/activation/common/analysisOptions.ts @@ -0,0 +1,111 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +import { Disposable, Event, EventEmitter, WorkspaceFolder } from 'vscode'; +import { DocumentFilter, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient/node'; +import { IWorkspaceService } from '../../common/application/types'; + +import { PYTHON, PYTHON_LANGUAGE } from '../../common/constants'; +import { ILogOutputChannel, Resource } from '../../common/types'; +import { debounceSync } from '../../common/utils/decorators'; +import { IEnvironmentVariablesProvider } from '../../common/variables/types'; +import { traceDecoratorError } from '../../logging'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; +import { ILanguageServerAnalysisOptions, ILanguageServerOutputChannel } from '../types'; + +export abstract class LanguageServerAnalysisOptionsBase implements ILanguageServerAnalysisOptions { + protected readonly didChange = new EventEmitter(); + private readonly output: ILogOutputChannel; + + protected constructor( + lsOutputChannel: ILanguageServerOutputChannel, + protected readonly workspace: IWorkspaceService, + ) { + this.output = lsOutputChannel.channel; + } + + public async initialize(_resource: Resource, _interpreter: PythonEnvironment | undefined) {} + + public get onDidChange(): Event { + return this.didChange.event; + } + + public dispose(): void { + this.didChange.dispose(); + } + + @traceDecoratorError('Failed to get analysis options') + public async getAnalysisOptions(): Promise { + const workspaceFolder = this.getWorkspaceFolder(); + const documentSelector = this.getDocumentFilters(workspaceFolder); + + return { + documentSelector, + workspaceFolder, + synchronize: { + configurationSection: this.getConfigSectionsToSynchronize(), + }, + outputChannel: this.output, + revealOutputChannelOn: RevealOutputChannelOn.Never, + initializationOptions: await this.getInitializationOptions(), + }; + } + + protected getWorkspaceFolder(): WorkspaceFolder | undefined { + return undefined; + } + + protected getDocumentFilters(_workspaceFolder?: WorkspaceFolder): DocumentFilter[] { + return this.workspace.isVirtualWorkspace ? [{ language: PYTHON_LANGUAGE }] : PYTHON; + } + + protected getConfigSectionsToSynchronize(): string[] { + return [PYTHON_LANGUAGE]; + } + + protected async getInitializationOptions(): Promise { + return undefined; + } +} + +export abstract class LanguageServerAnalysisOptionsWithEnv extends LanguageServerAnalysisOptionsBase { + protected disposables: Disposable[] = []; + private envPythonPath: string = ''; + + protected constructor( + private readonly envVarsProvider: IEnvironmentVariablesProvider, + lsOutputChannel: ILanguageServerOutputChannel, + workspace: IWorkspaceService, + ) { + super(lsOutputChannel, workspace); + } + + public async initialize(_resource: Resource, _interpreter: PythonEnvironment | undefined) { + const disposable = this.envVarsProvider.onDidEnvironmentVariablesChange(this.onEnvVarChange, this); + this.disposables.push(disposable); + } + + public dispose(): void { + super.dispose(); + this.disposables.forEach((d) => d.dispose()); + } + + protected async getEnvPythonPath(): Promise { + const vars = await this.envVarsProvider.getEnvironmentVariables(); + this.envPythonPath = vars.PYTHONPATH || ''; + return this.envPythonPath; + } + + @debounceSync(1000) + protected onEnvVarChange(): void { + this.notifyifEnvPythonPathChanged().ignoreErrors(); + } + + protected async notifyifEnvPythonPathChanged(): Promise { + const vars = await this.envVarsProvider.getEnvironmentVariables(); + const envPythonPath = vars.PYTHONPATH || ''; + + if (this.envPythonPath !== envPythonPath) { + this.didChange.fire(); + } + } +} diff --git a/src/client/activation/node/cancellationUtils.ts b/src/client/activation/common/cancellationUtils.ts similarity index 91% rename from src/client/activation/node/cancellationUtils.ts rename to src/client/activation/common/cancellationUtils.ts index c99d53d1ec33..d14307174107 100644 --- a/src/client/activation/node/cancellationUtils.ts +++ b/src/client/activation/common/cancellationUtils.ts @@ -1,3 +1,4 @@ +/* eslint-disable max-classes-per-file */ /* * cancellationUtils.ts * Copyright (c) Microsoft Corporation. @@ -15,8 +16,8 @@ import { CancellationSenderStrategy, CancellationStrategy, Disposable, - MessageConnection -} from 'vscode-languageclient'; + MessageConnection, +} from 'vscode-languageclient/node'; type CancellationId = string | number; @@ -32,7 +33,7 @@ function tryRun(callback: () => void) { try { callback(); } catch (e) { - // tslint:disable-next-line: no-empty + // No body. } } @@ -42,7 +43,7 @@ class FileCancellationSenderStrategy implements CancellationSenderStrategy { tryRun(() => fs.mkdirSync(folder, { recursive: true })); } - public sendCancellation(_: MessageConnection, id: CancellationId): void { + public async sendCancellation(_: MessageConnection, id: CancellationId) { const file = getCancellationFilePath(this.folderName, id); tryRun(() => fs.writeFileSync(file, '', { flag: 'w' })); } @@ -80,6 +81,7 @@ export class FileBasedCancellationStrategy implements CancellationStrategy, Disp this._sender = new FileCancellationSenderStrategy(folderName); } + // eslint-disable-next-line class-methods-use-this get receiver(): CancellationReceiverStrategy { return CancellationReceiverStrategy.Message; } diff --git a/src/client/activation/common/defaultlanguageServer.ts b/src/client/activation/common/defaultlanguageServer.ts new file mode 100644 index 000000000000..dc40a2c0ed5b --- /dev/null +++ b/src/client/activation/common/defaultlanguageServer.ts @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { injectable } from 'inversify'; +import { PYLANCE_EXTENSION_ID } from '../../common/constants'; +import { IDefaultLanguageServer, IExtensions, DefaultLSType } from '../../common/types'; +import { IServiceManager } from '../../ioc/types'; +import { LanguageServerType } from '../types'; + +@injectable() +class DefaultLanguageServer implements IDefaultLanguageServer { + public readonly defaultLSType: DefaultLSType; + + constructor(defaultServer: DefaultLSType) { + this.defaultLSType = defaultServer; + } +} + +export async function setDefaultLanguageServer( + extensions: IExtensions, + serviceManager: IServiceManager, +): Promise { + const lsType = await getDefaultLanguageServer(extensions); + serviceManager.addSingletonInstance( + IDefaultLanguageServer, + new DefaultLanguageServer(lsType), + ); +} + +async function getDefaultLanguageServer(extensions: IExtensions): Promise { + if (extensions.getExtension(PYLANCE_EXTENSION_ID)) { + return LanguageServerType.Node; + } + + return LanguageServerType.Jedi; +} diff --git a/src/client/activation/common/downloadChannelRules.ts b/src/client/activation/common/downloadChannelRules.ts deleted file mode 100644 index ebffee922377..000000000000 --- a/src/client/activation/common/downloadChannelRules.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IPersistentStateFactory } from '../../common/types'; -import { IServiceContainer } from '../../ioc/types'; -import { FolderVersionPair, IDownloadChannelRule } from '../types'; - -const lastCheckedForLSDateTimeCacheKey = 'LS.LAST.CHECK.TIME'; -const frequencyForBetalLSDownloadCheck = 1000 * 60 * 60 * 24; // One day. - -@injectable() -export class DownloadDailyChannelRule implements IDownloadChannelRule { - public async shouldLookForNewLanguageServer(_currentFolder?: FolderVersionPair): Promise { - return true; - } -} -@injectable() -export class DownloadStableChannelRule implements IDownloadChannelRule { - public async shouldLookForNewLanguageServer(currentFolder?: FolderVersionPair): Promise { - return currentFolder ? false : true; - } -} -@injectable() -export class DownloadBetaChannelRule implements IDownloadChannelRule { - constructor(@inject(IServiceContainer) private readonly serviceContainer: IServiceContainer) {} - public async shouldLookForNewLanguageServer(currentFolder?: FolderVersionPair): Promise { - // For beta, we do this only once a day. - const stateFactory = this.serviceContainer.get(IPersistentStateFactory); - const globalState = stateFactory.createGlobalPersistentState( - lastCheckedForLSDateTimeCacheKey, - true, - frequencyForBetalLSDownloadCheck - ); - - // If we have checked it in the last 24 hours, then ensure we don't do it again. - if (globalState.value) { - await globalState.updateValue(false); - return true; - } - - return !currentFolder || globalState.value; - } -} diff --git a/src/client/activation/common/downloader.ts b/src/client/activation/common/downloader.ts deleted file mode 100644 index 6f304bea24f7..000000000000 --- a/src/client/activation/common/downloader.ts +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import * as path from 'path'; -import { ProgressLocation, window } from 'vscode'; -import { IApplicationShell, IWorkspaceService } from '../../common/application/types'; -import '../../common/extensions'; -import { IFileSystem } from '../../common/platform/types'; -import { IFileDownloader, IOutputChannel, Resource } from '../../common/types'; -import { createDeferred } from '../../common/utils/async'; -import { Common, LanguageService } from '../../common/utils/localize'; -import { StopWatch } from '../../common/utils/stopWatch'; -import { IServiceContainer } from '../../ioc/types'; -import { sendTelemetryEvent } from '../../telemetry'; -import { EventName } from '../../telemetry/constants'; -import { - ILanguageServerDownloader, - ILanguageServerFolderService, - ILanguageServerOutputChannel, - IPlatformData -} from '../types'; - -// tslint:disable:no-require-imports no-any - -const downloadFileExtension = '.nupkg'; - -@injectable() -export class LanguageServerDownloader implements ILanguageServerDownloader { - private output: IOutputChannel; - constructor( - @inject(ILanguageServerOutputChannel) private readonly lsOutputChannel: ILanguageServerOutputChannel, - @inject(IFileDownloader) private readonly fileDownloader: IFileDownloader, - @inject(ILanguageServerFolderService) private readonly lsFolderService: ILanguageServerFolderService, - @inject(IApplicationShell) private readonly appShell: IApplicationShell, - @inject(IFileSystem) private readonly fs: IFileSystem, - @inject(IWorkspaceService) private readonly workspace: IWorkspaceService, - @inject(IServiceContainer) private readonly services: IServiceContainer - ) { - this.output = this.lsOutputChannel.channel; - } - - public async getDownloadInfo(resource: Resource) { - const info = await this.lsFolderService.getLatestLanguageServerVersion(resource).then((item) => item!); - - let uri = info.uri; - if (uri.startsWith('https:')) { - const cfg = this.workspace.getConfiguration('http', resource); - if (!cfg.get('proxyStrictSSL', true)) { - // tslint:disable-next-line:no-http-string - uri = uri.replace(/^https:/, 'http:'); - } - } - const lsNameTrimmed = info.package.split('.')[0]; - return [uri, info.version.raw, lsNameTrimmed]; - } - - public async downloadLanguageServer(destinationFolder: string, resource: Resource): Promise { - const [downloadUri, lsVersion, lsName] = await this.getDownloadInfo(resource); - const timer: StopWatch = new StopWatch(); - let success: boolean = true; - let localTempFilePath = ''; - - try { - localTempFilePath = await this.downloadFile( - downloadUri, - 'Downloading Microsoft Python Language Server... ' - ); - } catch (err) { - this.output.appendLine(LanguageService.downloadFailedOutputMessage()); - this.output.appendLine(err); - success = false; - this.showMessageAndOptionallyShowOutput(LanguageService.lsFailedToDownload()).ignoreErrors(); - sendTelemetryEvent( - EventName.PYTHON_LANGUAGE_SERVER_ERROR, - undefined, - { error: 'Failed to download (platform)' }, - err - ); - throw new Error(err); - } finally { - const usedSSL = downloadUri.startsWith('https:'); - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_DOWNLOADED, timer.elapsedTime, { - success, - lsVersion, - usedSSL, - lsName - }); - } - - timer.reset(); - try { - await this.unpackArchive(destinationFolder, localTempFilePath); - } catch (err) { - this.output.appendLine(LanguageService.extractionFailedOutputMessage()); - this.output.appendLine(err); - success = false; - this.showMessageAndOptionallyShowOutput(LanguageService.lsFailedToExtract()).ignoreErrors(); - sendTelemetryEvent( - EventName.PYTHON_LANGUAGE_SERVER_ERROR, - undefined, - { error: 'Failed to extract (platform)' }, - err - ); - throw new Error(err); - } finally { - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_EXTRACTED, timer.elapsedTime, { - success, - lsVersion, - lsName - }); - await this.fs.deleteFile(localTempFilePath); - } - } - - public async showMessageAndOptionallyShowOutput(message: string) { - const selection = await this.appShell.showErrorMessage(message, Common.openOutputPanel()); - if (selection !== Common.openOutputPanel()) { - return; - } - this.output.show(true); - } - - public async downloadFile(uri: string, title: string): Promise { - const downloadOptions = { - extension: downloadFileExtension, - outputChannel: this.output, - progressMessagePrefix: title - }; - return this.fileDownloader.downloadFile(uri, downloadOptions).then((file) => { - this.output.appendLine(LanguageService.extractionCompletedOutputMessage()); - return file; - }); - } - - protected async unpackArchive(destinationFolder: string, tempFilePath: string): Promise { - this.output.append('Unpacking archive... '); - - const deferred = createDeferred(); - - const title = 'Extracting files... '; - await window.withProgress( - { - location: ProgressLocation.Window - }, - (progress) => { - // tslint:disable-next-line:no-require-imports no-var-requires - const StreamZip = require('node-stream-zip'); - const zip = new StreamZip({ - file: tempFilePath, - storeEntries: true - }); - - let totalFiles = 0; - let extractedFiles = 0; - zip.on('ready', async () => { - totalFiles = zip.entriesCount; - if (!(await this.fs.directoryExists(destinationFolder))) { - await this.fs.createDirectory(destinationFolder); - } - zip.extract(null, destinationFolder, (err: any) => { - if (err) { - deferred.reject(err); - } else { - deferred.resolve(); - } - zip.close(); - }); - }) - .on('extract', () => { - extractedFiles += 1; - progress.report({ message: `${title}${Math.round((100 * extractedFiles) / totalFiles)}%` }); - }) - .on('error', (e: any) => { - deferred.reject(e); - }); - return deferred.promise; - } - ); - - // Set file to executable (nothing happens in Windows, as chmod has no definition there) - if (this.services) { - try { - const platformData = this.services.get(IPlatformData); - const executablePath = path.join(destinationFolder, platformData.engineExecutableName); - await this.fs.chmod(executablePath, '0764'); // -rwxrw-r-- - // tslint:disable-next-line: no-empty - } catch {} - } - - this.output.appendLine(LanguageService.extractionDoneOutputMessage()); - } -} diff --git a/src/client/activation/common/languageServerChangeHandler.ts b/src/client/activation/common/languageServerChangeHandler.ts new file mode 100644 index 000000000000..83ff204ed6e7 --- /dev/null +++ b/src/client/activation/common/languageServerChangeHandler.ts @@ -0,0 +1,112 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { ConfigurationTarget, Disposable } from 'vscode'; +import { IApplicationShell, ICommandManager, IWorkspaceService } from '../../common/application/types'; +import { PYLANCE_EXTENSION_ID } from '../../common/constants'; +import { IConfigurationService, IExtensions } from '../../common/types'; +import { createDeferred } from '../../common/utils/async'; +import { Pylance } from '../../common/utils/localize'; +import { LanguageServerType } from '../types'; + +export async function promptForPylanceInstall( + appShell: IApplicationShell, + commandManager: ICommandManager, + workspace: IWorkspaceService, + configService: IConfigurationService, +): Promise { + const response = await appShell.showWarningMessage( + Pylance.pylanceRevertToJediPrompt, + Pylance.pylanceInstallPylance, + Pylance.pylanceRevertToJedi, + Pylance.remindMeLater, + ); + + if (response === Pylance.pylanceInstallPylance) { + commandManager.executeCommand('extension.open', PYLANCE_EXTENSION_ID); + } else if (response === Pylance.pylanceRevertToJedi) { + const inspection = workspace.getConfiguration('python').inspect('languageServer'); + + let target: ConfigurationTarget | undefined; + if (inspection?.workspaceValue) { + target = ConfigurationTarget.Workspace; + } else if (inspection?.globalValue) { + target = ConfigurationTarget.Global; + } + + if (target) { + await configService.updateSetting('languageServer', LanguageServerType.Jedi, undefined, target); + } + } +} + +// Tracks language server type and issues appropriate reload or install prompts. +export class LanguageServerChangeHandler implements Disposable { + // For tests that need to track Pylance install completion. + private readonly pylanceInstallCompletedDeferred = createDeferred(); + + private readonly disposables: Disposable[] = []; + + private pylanceInstalled = false; + + constructor( + private currentLsType: LanguageServerType | undefined, + private readonly extensions: IExtensions, + private readonly appShell: IApplicationShell, + private readonly commands: ICommandManager, + private readonly workspace: IWorkspaceService, + private readonly configService: IConfigurationService, + ) { + this.pylanceInstalled = this.isPylanceInstalled(); + this.disposables.push( + extensions.onDidChange(async () => { + await this.extensionsChangeHandler(); + }), + ); + } + + public dispose(): void { + while (this.disposables.length) { + this.disposables.pop()?.dispose(); + } + } + + // For tests that need to track Pylance install completion. + get pylanceInstallCompleted(): Promise { + return this.pylanceInstallCompletedDeferred.promise; + } + + public async handleLanguageServerChange(lsType: LanguageServerType | undefined): Promise { + if (this.currentLsType === lsType || lsType === LanguageServerType.Microsoft) { + return; + } + // VS Code has to be reloaded when language server type changes. In case of Pylance + // it also has to be installed manually by the user. We avoid prompting to reload + // if target changes to Pylance when Pylance is not installed since otherwise user + // may get one reload prompt now and then another when Pylance is finally installed. + // Instead, check the installation and suppress prompt if Pylance is not there. + // Extensions change event handler will then show its own prompt. + if (lsType === LanguageServerType.Node && !this.isPylanceInstalled()) { + // If not installed, point user to Pylance at the store. + await promptForPylanceInstall(this.appShell, this.commands, this.workspace, this.configService); + // At this point Pylance is not yet installed. Skip reload prompt + // since we are going to show it when Pylance becomes available. + } + + this.currentLsType = lsType; + } + + private async extensionsChangeHandler(): Promise { + // Track Pylance extension installation state and prompt to reload when it becomes available. + const oldInstallState = this.pylanceInstalled; + + this.pylanceInstalled = this.isPylanceInstalled(); + if (oldInstallState === this.pylanceInstalled) { + this.pylanceInstallCompletedDeferred.resolve(); + } + } + + private isPylanceInstalled(): boolean { + return !!this.extensions.getExtension(PYLANCE_EXTENSION_ID); + } +} diff --git a/src/client/activation/common/languageServerFolderService.ts b/src/client/activation/common/languageServerFolderService.ts deleted file mode 100644 index 3aa99f8e20e4..000000000000 --- a/src/client/activation/common/languageServerFolderService.ts +++ /dev/null @@ -1,111 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable, unmanaged } from 'inversify'; -import * as path from 'path'; -import * as semver from 'semver'; -import { EXTENSION_ROOT_DIR } from '../../common/constants'; -import { traceDecorators } from '../../common/logger'; -import { NugetPackage } from '../../common/nuget/types'; -import { IFileSystem } from '../../common/platform/types'; -import { IConfigurationService, Resource } from '../../common/types'; -import { IServiceContainer } from '../../ioc/types'; -import { - FolderVersionPair, - IDownloadChannelRule, - ILanguageServerFolderService, - ILanguageServerPackageService -} from '../types'; - -@injectable() -export abstract class LanguageServerFolderService implements ILanguageServerFolderService { - constructor( - @inject(IServiceContainer) protected readonly serviceContainer: IServiceContainer, - @unmanaged() protected readonly languageServerFolder: string - ) {} - - @traceDecorators.verbose('Get language server folder name') - public async getLanguageServerFolderName(resource: Resource): Promise { - const currentFolder = await this.getCurrentLanguageServerDirectory(); - let serverVersion: NugetPackage | undefined; - - const shouldLookForNewVersion = await this.shouldLookForNewLanguageServer(currentFolder); - if (currentFolder && !shouldLookForNewVersion) { - return path.basename(currentFolder.path); - } - - try { - serverVersion = await this.getLatestLanguageServerVersion(resource); - } catch { - serverVersion = undefined; - } - - if (currentFolder && (!serverVersion || serverVersion.version.compare(currentFolder.version) <= 0)) { - return path.basename(currentFolder.path); - } - - return `${this.languageServerFolder}.${serverVersion!.version.raw}`; - } - - @traceDecorators.verbose('Get latest version of Language Server') - public getLatestLanguageServerVersion(resource: Resource): Promise { - const minVersion = this.getMinimalLanguageServerVersion(); - const lsPackageService = this.serviceContainer.get( - ILanguageServerPackageService - ); - return lsPackageService.getLatestNugetPackageVersion(resource, minVersion); - } - - public async shouldLookForNewLanguageServer(currentFolder?: FolderVersionPair): Promise { - const configService = this.serviceContainer.get(IConfigurationService); - const autoUpdateLanguageServer = configService.getSettings().autoUpdateLanguageServer; - const downloadLanguageServer = configService.getSettings().downloadLanguageServer; - if (currentFolder && (!autoUpdateLanguageServer || !downloadLanguageServer)) { - return false; - } - const downloadChannel = this.getDownloadChannel(); - const rule = this.serviceContainer.get(IDownloadChannelRule, downloadChannel); - return rule.shouldLookForNewLanguageServer(currentFolder); - } - - public async getCurrentLanguageServerDirectory(): Promise { - const configService = this.serviceContainer.get(IConfigurationService); - if (!configService.getSettings().downloadLanguageServer) { - return { path: this.languageServerFolder, version: new semver.SemVer('0.0.0') }; - } - const dirs = await this.getExistingLanguageServerDirectories(); - if (dirs.length === 0) { - return; - } - dirs.sort((a, b) => a.version.compare(b.version)); - return dirs[dirs.length - 1]; - } - - public async getExistingLanguageServerDirectories(): Promise { - const fs = this.serviceContainer.get(IFileSystem); - const subDirs = await fs.getSubDirectories(EXTENSION_ROOT_DIR); - return subDirs - .filter((dir) => path.basename(dir).startsWith(this.languageServerFolder)) - .map((dir) => { - return { path: dir, version: this.getFolderVersion(path.basename(dir)) }; - }); - } - - public getFolderVersion(dirName: string): semver.SemVer { - const suffix = dirName.substring(this.languageServerFolder.length + 1); - return suffix.length === 0 - ? new semver.SemVer('0.0.0') - : semver.parse(suffix, true) || new semver.SemVer('0.0.0'); - } - - protected abstract getMinimalLanguageServerVersion(): string; - - private getDownloadChannel() { - const lsPackageService = this.serviceContainer.get( - ILanguageServerPackageService - ); - return lsPackageService.getLanguageServerDownloadChannel(); - } -} diff --git a/src/client/activation/common/languageServerPackageService.ts b/src/client/activation/common/languageServerPackageService.ts deleted file mode 100644 index feed13c03b53..000000000000 --- a/src/client/activation/common/languageServerPackageService.ts +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { injectable } from 'inversify'; -import { parse, SemVer } from 'semver'; -import { IApplicationEnvironment } from '../../common/application/types'; -import { PVSC_EXTENSION_ID } from '../../common/constants'; -import { traceDecorators, traceVerbose } from '../../common/logger'; -import { INugetRepository, INugetService, NugetPackage } from '../../common/nuget/types'; -import { IPlatformService } from '../../common/platform/types'; -import { IConfigurationService, IExtensions, LanguageServerDownloadChannels, Resource } from '../../common/types'; -import { IServiceContainer } from '../../ioc/types'; -import { ILanguageServerPackageService } from '../types'; -import { azureCDNBlobStorageAccount, LanguageServerDownloadChannel } from './packageRepository'; - -export const maxMajorVersion = 0; - -@injectable() -export abstract class LanguageServerPackageService implements ILanguageServerPackageService { - public maxMajorVersion: number = maxMajorVersion; - constructor( - protected readonly serviceContainer: IServiceContainer, - protected readonly appEnv: IApplicationEnvironment, - protected readonly platform: IPlatformService - ) {} - - public abstract getNugetPackageName(): string; - - @traceDecorators.verbose('Get latest language server nuget package version') - public async getLatestNugetPackageVersion(resource: Resource, minVersion?: string): Promise { - const downloadChannel = this.getLanguageServerDownloadChannel(); - const nugetRepo = this.serviceContainer.get(INugetRepository, downloadChannel); - const packageName = this.getNugetPackageName(); - traceVerbose(`Listing packages for ${downloadChannel} for ${packageName}`); - const packages = await nugetRepo.getPackages(packageName, resource); - - return this.getValidPackage(packages, minVersion); - } - - public getLanguageServerDownloadChannel(): LanguageServerDownloadChannels { - const configService = this.serviceContainer.get(IConfigurationService); - const settings = configService.getSettings(); - if (settings.analysis.downloadChannel) { - return settings.analysis.downloadChannel; - } - - if (settings.insidersChannel === 'daily' || settings.insidersChannel === 'weekly') { - return 'beta'; - } - const isAlphaVersion = this.isAlphaVersionOfExtension(); - return isAlphaVersion ? 'beta' : 'stable'; - } - - public isAlphaVersionOfExtension() { - const extensions = this.serviceContainer.get(IExtensions); - const extension = extensions.getExtension(PVSC_EXTENSION_ID)!; - const version = parse(extension.packageJSON.version)!; - return version.prerelease.length > 0 && version.prerelease[0] === 'alpha'; - } - - protected getValidPackage(packages: NugetPackage[], minimumVersion?: string): NugetPackage { - const nugetService = this.serviceContainer.get(INugetService); - const validPackages = packages - .filter((item) => item.version.major === this.maxMajorVersion) - .filter((item) => nugetService.isReleaseVersion(item.version)) - .sort((a, b) => a.version.compare(b.version)); - - const pkg = validPackages[validPackages.length - 1]; - minimumVersion = minimumVersion || '0.0.0'; - if (pkg.version.compare(minimumVersion) >= 0) { - return validPackages[validPackages.length - 1]; - } - - // This is a fall back, if the wrong version is returned, e.g. version is cached downstream in some proxy server or similar. - // This way, we always ensure we have the minimum version that's compatible. - return { - version: new SemVer(minimumVersion), - package: LanguageServerDownloadChannel.stable, - uri: `${azureCDNBlobStorageAccount}/${ - LanguageServerDownloadChannel.stable - }/${this.getNugetPackageName()}.${minimumVersion}.nupkg` - }; - } -} diff --git a/src/client/activation/common/loadLanguageServerExtension.ts b/src/client/activation/common/loadLanguageServerExtension.ts new file mode 100644 index 000000000000..87fa5d9e6213 --- /dev/null +++ b/src/client/activation/common/loadLanguageServerExtension.ts @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { inject, injectable } from 'inversify'; +import { ICommandManager } from '../../common/application/types'; +import { IDisposableRegistry } from '../../common/types'; +import { IExtensionSingleActivationService } from '../types'; + +// This command is currently used by IntelliCode. This was used to +// trigger MPLS. Since we no longer have MPLS we are going to set +// this command to no-op temporarily until this is removed from +// IntelliCode + +@injectable() +export class LoadLanguageServerExtension implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: true, virtualWorkspace: true }; + + constructor( + @inject(ICommandManager) private readonly commandManager: ICommandManager, + @inject(IDisposableRegistry) private readonly disposables: IDisposableRegistry, + ) {} + + public activate(): Promise { + const disposable = this.commandManager.registerCommand('python._loadLanguageServerExtension', () => { + /** no-op */ + }); + this.disposables.push(disposable); + return Promise.resolve(); + } +} diff --git a/src/client/activation/common/outputChannel.ts b/src/client/activation/common/outputChannel.ts new file mode 100644 index 000000000000..60a99687793e --- /dev/null +++ b/src/client/activation/common/outputChannel.ts @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +'use strict'; + +import { inject, injectable } from 'inversify'; +import { IApplicationShell, ICommandManager } from '../../common/application/types'; +import '../../common/extensions'; +import { IDisposableRegistry, ILogOutputChannel } from '../../common/types'; +import { OutputChannelNames } from '../../common/utils/localize'; +import { ILanguageServerOutputChannel } from '../types'; + +@injectable() +export class LanguageServerOutputChannel implements ILanguageServerOutputChannel { + public output: ILogOutputChannel | undefined; + + private registered = false; + + constructor( + @inject(IApplicationShell) private readonly appShell: IApplicationShell, + @inject(ICommandManager) private readonly commandManager: ICommandManager, + @inject(IDisposableRegistry) private readonly disposable: IDisposableRegistry, + ) {} + + public get channel(): ILogOutputChannel { + if (!this.output) { + this.output = this.appShell.createOutputChannel(OutputChannelNames.languageServer); + this.disposable.push(this.output); + this.registerCommand().ignoreErrors(); + } + return this.output; + } + + private async registerCommand() { + if (this.registered) { + return; + } + this.registered = true; + // This controls the visibility of the command used to display the LS Output panel. + // We don't want to display it when Jedi is used instead of LS. + await this.commandManager.executeCommand('setContext', 'python.hasLanguageServerOutputChannel', true); + this.disposable.push( + this.commandManager.registerCommand('python.viewLanguageServerOutput', () => this.output?.show(true)), + ); + this.disposable.push({ + dispose: () => { + this.registered = false; + }, + }); + } +} diff --git a/src/client/activation/common/packageRepository.ts b/src/client/activation/common/packageRepository.ts deleted file mode 100644 index ba073d7b1808..000000000000 --- a/src/client/activation/common/packageRepository.ts +++ /dev/null @@ -1,53 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { injectable } from 'inversify'; -import { AzureBlobStoreNugetRepository } from '../../common/nuget/azureBlobStoreNugetRepository'; -import { IServiceContainer } from '../../ioc/types'; - -export const azureBlobStorageAccount = 'https://pvsc.blob.core.windows.net'; -export const azureCDNBlobStorageAccount = 'https://pvsc.azureedge.net'; - -export enum LanguageServerDownloadChannel { - stable = 'stable', - beta = 'beta', - daily = 'daily' -} - -@injectable() -export abstract class StableLanguageServerPackageRepository extends AzureBlobStoreNugetRepository { - constructor(serviceContainer: IServiceContainer, packageName: string) { - super( - serviceContainer, - azureBlobStorageAccount, - `${packageName}-${LanguageServerDownloadChannel.stable}`, - azureCDNBlobStorageAccount - ); - } -} - -@injectable() -export abstract class BetaLanguageServerPackageRepository extends AzureBlobStoreNugetRepository { - constructor(serviceContainer: IServiceContainer, packageName: string) { - super( - serviceContainer, - azureBlobStorageAccount, - `${packageName}-${LanguageServerDownloadChannel.beta}`, - azureCDNBlobStorageAccount - ); - } -} - -@injectable() -export abstract class DailyLanguageServerPackageRepository extends AzureBlobStoreNugetRepository { - constructor(serviceContainer: IServiceContainer, packageName: string) { - super( - serviceContainer, - azureBlobStorageAccount, - `${packageName}-${LanguageServerDownloadChannel.daily}`, - azureCDNBlobStorageAccount - ); - } -} diff --git a/src/client/activation/extensionSurvey.ts b/src/client/activation/extensionSurvey.ts index 67ec7e68e9d6..d32ba7180c0f 100644 --- a/src/client/activation/extensionSurvey.ts +++ b/src/client/activation/extensionSurvey.ts @@ -3,15 +3,16 @@ 'use strict'; -import { inject, injectable, optional } from 'inversify'; +import { inject, injectable } from 'inversify'; import * as querystring from 'querystring'; -import { IApplicationEnvironment, IApplicationShell } from '../common/application/types'; -import { ShowExtensionSurveyPrompt } from '../common/experimentGroups'; +import { env, UIKind } from 'vscode'; +import { IApplicationEnvironment, IApplicationShell, IWorkspaceService } from '../common/application/types'; +import { ShowExtensionSurveyPrompt } from '../common/experiments/groups'; import '../common/extensions'; -import { traceDecorators } from '../common/logger'; import { IPlatformService } from '../common/platform/types'; -import { IBrowserService, IExperimentsManager, IPersistentStateFactory, IRandom } from '../common/types'; -import { Common, ExtensionSurveyBanner, LanguageService } from '../common/utils/localize'; +import { IBrowserService, IExperimentService, IPersistentStateFactory, IRandom } from '../common/types'; +import { Common, ExtensionSurveyBanner } from '../common/utils/localize'; +import { traceDecoratorError } from '../logging'; import { sendTelemetryEvent } from '../telemetry'; import { EventName } from '../telemetry/constants'; import { IExtensionSingleActivationService } from './types'; @@ -19,7 +20,7 @@ import { IExtensionSingleActivationService } from './types'; // persistent state names, exported to make use of in testing export enum extensionSurveyStateKeys { doNotShowAgain = 'doNotShowExtensionSurveyAgain', - disableSurveyForTime = 'doNotShowExtensionSurveyUntilTime' + disableSurveyForTime = 'doNotShowExtensionSurveyUntilTime', } const timeToDisableSurveyFor = 1000 * 60 * 60 * 24 * 7 * 12; // 12 weeks @@ -27,21 +28,22 @@ const WAIT_TIME_TO_SHOW_SURVEY = 1000 * 60 * 60 * 3; // 3 hours @injectable() export class ExtensionSurveyPrompt implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: false, virtualWorkspace: true }; constructor( @inject(IApplicationShell) private appShell: IApplicationShell, @inject(IBrowserService) private browserService: IBrowserService, @inject(IPersistentStateFactory) private persistentState: IPersistentStateFactory, @inject(IRandom) private random: IRandom, - @inject(IExperimentsManager) private experiments: IExperimentsManager, + @inject(IExperimentService) private experiments: IExperimentService, @inject(IApplicationEnvironment) private appEnvironment: IApplicationEnvironment, @inject(IPlatformService) private platformService: IPlatformService, - @optional() private sampleSizePerOneHundredUsers: number = 10, - @optional() private waitTimeToShowSurvey: number = WAIT_TIME_TO_SHOW_SURVEY + @inject(IWorkspaceService) private readonly workspace: IWorkspaceService, + private sampleSizePerOneHundredUsers: number = 10, + private waitTimeToShowSurvey: number = WAIT_TIME_TO_SHOW_SURVEY, ) {} public async activate(): Promise { - if (!this.experiments.inExperiment(ShowExtensionSurveyPrompt.enabled)) { - this.experiments.sendTelemetryIfInExperiment(ShowExtensionSurveyPrompt.control); + if (!(await this.experiments.inExperiment(ShowExtensionSurveyPrompt.experiment))) { return; } const show = this.shouldShowBanner(); @@ -51,11 +53,26 @@ export class ExtensionSurveyPrompt implements IExtensionSingleActivationService setTimeout(() => this.showSurvey().ignoreErrors(), this.waitTimeToShowSurvey); } - @traceDecorators.error('Failed to check whether to display prompt for extension survey') + @traceDecoratorError('Failed to check whether to display prompt for extension survey') public shouldShowBanner(): boolean { + if (env.uiKind === UIKind?.Web) { + return false; + } + + let feedbackEnabled = true; + + const telemetryConfig = this.workspace.getConfiguration('telemetry'); + if (telemetryConfig) { + feedbackEnabled = telemetryConfig.get('feedback.enabled', true); + } + + if (!feedbackEnabled) { + return false; + } + const doNotShowSurveyAgain = this.persistentState.createGlobalPersistentState( extensionSurveyStateKeys.doNotShowAgain, - false + false, ); if (doNotShowSurveyAgain.value) { return false; @@ -63,7 +80,7 @@ export class ExtensionSurveyPrompt implements IExtensionSingleActivationService const isSurveyDisabledForTimeState = this.persistentState.createGlobalPersistentState( extensionSurveyStateKeys.disableSurveyForTime, false, - timeToDisableSurveyFor + timeToDisableSurveyFor, ); if (isSurveyDisabledForTimeState.value) { return false; @@ -76,32 +93,32 @@ export class ExtensionSurveyPrompt implements IExtensionSingleActivationService return true; } - @traceDecorators.error('Failed to display prompt for extension survey') + @traceDecoratorError('Failed to display prompt for extension survey') public async showSurvey() { - const prompts = [LanguageService.bannerLabelYes(), ExtensionSurveyBanner.maybeLater(), Common.doNotShowAgain()]; - const telemetrySelections: ['Yes', 'Maybe later', 'Do not show again'] = [ + const prompts = [ExtensionSurveyBanner.bannerLabelYes, ExtensionSurveyBanner.maybeLater, Common.doNotShowAgain]; + const telemetrySelections: ['Yes', 'Maybe later', "Don't show again"] = [ 'Yes', 'Maybe later', - 'Do not show again' + "Don't show again", ]; - const selection = await this.appShell.showInformationMessage(ExtensionSurveyBanner.bannerMessage(), ...prompts); + const selection = await this.appShell.showInformationMessage(ExtensionSurveyBanner.bannerMessage, ...prompts); sendTelemetryEvent(EventName.EXTENSION_SURVEY_PROMPT, undefined, { - selection: selection ? telemetrySelections[prompts.indexOf(selection)] : undefined + selection: selection ? telemetrySelections[prompts.indexOf(selection)] : undefined, }); if (!selection) { return; } - if (selection === LanguageService.bannerLabelYes()) { + if (selection === ExtensionSurveyBanner.bannerLabelYes) { this.launchSurvey(); // Disable survey for a few weeks await this.persistentState .createGlobalPersistentState( extensionSurveyStateKeys.disableSurveyForTime, false, - timeToDisableSurveyFor + timeToDisableSurveyFor, ) .updateValue(true); - } else if (selection === Common.doNotShowAgain()) { + } else if (selection === Common.doNotShowAgain) { // Never show the survey again await this.persistentState .createGlobalPersistentState(extensionSurveyStateKeys.doNotShowAgain, false) @@ -114,7 +131,7 @@ export class ExtensionSurveyPrompt implements IExtensionSingleActivationService o: encodeURIComponent(this.platformService.osType), // platform v: encodeURIComponent(this.appEnvironment.vscodeVersion), e: encodeURIComponent(this.appEnvironment.packageJson.version), // extension version - m: encodeURIComponent(this.appEnvironment.machineId) + m: encodeURIComponent(this.appEnvironment.sessionId), }); const url = `https://aka.ms/AA5rjx5?${query}`; this.browserService.launch(url); diff --git a/src/client/activation/jedi.ts b/src/client/activation/jedi.ts deleted file mode 100644 index 7a19a9c5ed08..000000000000 --- a/src/client/activation/jedi.ts +++ /dev/null @@ -1,247 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import { inject, injectable } from 'inversify'; -import { - CancellationToken, - CodeLens, - commands, - CompletionContext, - CompletionItem, - CompletionList, - DocumentFilter, - DocumentSymbol, - Event, - Hover, - languages, - Location, - LocationLink, - Position, - ProviderResult, - ReferenceContext, - SignatureHelp, - SignatureHelpContext, - SymbolInformation, - TextDocument, - WorkspaceEdit -} from 'vscode'; - -import { PYTHON } from '../common/constants'; -import { traceError } from '../common/logger'; -import { IConfigurationService, IDisposable, IExtensionContext, Resource } from '../common/types'; -import { IShebangCodeLensProvider, PythonInterpreter } from '../interpreter/contracts'; -import { IServiceContainer, IServiceManager } from '../ioc/types'; -import { JediFactory } from '../languageServices/jediProxyFactory'; -import { PythonCompletionItemProvider } from '../providers/completionProvider'; -import { PythonDefinitionProvider } from '../providers/definitionProvider'; -import { PythonHoverProvider } from '../providers/hoverProvider'; -import { PythonObjectDefinitionProvider } from '../providers/objectDefinitionProvider'; -import { PythonReferenceProvider } from '../providers/referenceProvider'; -import { PythonRenameProvider } from '../providers/renameProvider'; -import { PythonSignatureProvider } from '../providers/signatureProvider'; -import { JediSymbolProvider } from '../providers/symbolProvider'; -import { ITestManagementService } from '../testing/types'; -import { BlockFormatProviders } from '../typeFormatters/blockFormatProvider'; -import { OnTypeFormattingDispatcher } from '../typeFormatters/dispatcher'; -import { OnEnterFormatter } from '../typeFormatters/onEnterFormatter'; -import { WorkspaceSymbols } from '../workspaceSymbols/main'; -import { ILanguageServerActivator } from './types'; - -@injectable() -export class JediExtensionActivator implements ILanguageServerActivator { - private static workspaceSymbols: WorkspaceSymbols | undefined; - private readonly context: IExtensionContext; - private jediFactory?: JediFactory; - private readonly documentSelector: DocumentFilter[]; - private renameProvider: PythonRenameProvider | undefined; - private hoverProvider: PythonHoverProvider | undefined; - private definitionProvider: PythonDefinitionProvider | undefined; - private referenceProvider: PythonReferenceProvider | undefined; - private completionProvider: PythonCompletionItemProvider | undefined; - private codeLensProvider: IShebangCodeLensProvider | undefined; - private symbolProvider: JediSymbolProvider | undefined; - private signatureProvider: PythonSignatureProvider | undefined; - private registrations: IDisposable[] = []; - private objectDefinitionProvider: PythonObjectDefinitionProvider | undefined; - - constructor(@inject(IServiceManager) private serviceManager: IServiceManager) { - this.context = this.serviceManager.get(IExtensionContext); - this.documentSelector = PYTHON; - } - - public async start(_resource: Resource, interpreter: PythonInterpreter | undefined): Promise { - if (this.jediFactory) { - throw new Error('Jedi already started'); - } - const context = this.context; - const jediFactory = (this.jediFactory = new JediFactory(interpreter, this.serviceManager)); - context.subscriptions.push(jediFactory); - const serviceContainer = this.serviceManager.get(IServiceContainer); - - this.renameProvider = new PythonRenameProvider(this.serviceManager); - this.definitionProvider = new PythonDefinitionProvider(jediFactory); - this.hoverProvider = new PythonHoverProvider(jediFactory); - this.referenceProvider = new PythonReferenceProvider(jediFactory); - this.completionProvider = new PythonCompletionItemProvider(jediFactory, this.serviceManager); - this.codeLensProvider = this.serviceManager.get(IShebangCodeLensProvider); - this.objectDefinitionProvider = new PythonObjectDefinitionProvider(jediFactory); - this.symbolProvider = new JediSymbolProvider(serviceContainer, jediFactory); - this.signatureProvider = new PythonSignatureProvider(jediFactory); - - if (!JediExtensionActivator.workspaceSymbols) { - // Workspace symbols is static because it doesn't rely on the jediFactory. - JediExtensionActivator.workspaceSymbols = new WorkspaceSymbols(serviceContainer); - context.subscriptions.push(JediExtensionActivator.workspaceSymbols); - } - - const testManagementService = this.serviceManager.get(ITestManagementService); - testManagementService - .activate(this.symbolProvider) - .catch((ex) => traceError('Failed to activate Unit Tests', ex)); - } - - public deactivate() { - this.registrations.forEach((r) => r.dispose()); - this.registrations = []; - } - - public activate() { - if ( - this.registrations.length === 0 && - this.renameProvider && - this.definitionProvider && - this.hoverProvider && - this.referenceProvider && - this.completionProvider && - this.codeLensProvider && - this.symbolProvider && - this.signatureProvider - ) { - // Make sure commands are in the registration list that gets disposed when the language server is disconnected from the - // IDE. - this.registrations.push( - commands.registerCommand('python.goToPythonObject', () => - this.objectDefinitionProvider!.goToObjectDefinition() - ) - ); - this.registrations.push(languages.registerRenameProvider(this.documentSelector, this.renameProvider)); - this.registrations.push( - languages.registerDefinitionProvider(this.documentSelector, this.definitionProvider) - ); - this.registrations.push(languages.registerHoverProvider(this.documentSelector, this.hoverProvider)); - this.registrations.push(languages.registerReferenceProvider(this.documentSelector, this.referenceProvider)); - this.registrations.push( - languages.registerCompletionItemProvider(this.documentSelector, this.completionProvider, '.') - ); - this.registrations.push(languages.registerCodeLensProvider(this.documentSelector, this.codeLensProvider)); - const onTypeDispatcher = new OnTypeFormattingDispatcher({ - '\n': new OnEnterFormatter(), - ':': new BlockFormatProviders() - }); - const onTypeTriggers = onTypeDispatcher.getTriggerCharacters(); - if (onTypeTriggers) { - this.registrations.push( - languages.registerOnTypeFormattingEditProvider( - PYTHON, - onTypeDispatcher, - onTypeTriggers.first, - ...onTypeTriggers.more - ) - ); - } - this.registrations.push( - languages.registerDocumentSymbolProvider(this.documentSelector, this.symbolProvider) - ); - const pythonSettings = this.serviceManager.get(IConfigurationService).getSettings(); - if (pythonSettings.devOptions.indexOf('DISABLE_SIGNATURE') === -1) { - this.registrations.push( - languages.registerSignatureHelpProvider(this.documentSelector, this.signatureProvider, '(', ',') - ); - } - } - } - - public provideRenameEdits( - document: TextDocument, - position: Position, - newName: string, - token: CancellationToken - ): ProviderResult { - if (this.renameProvider) { - return this.renameProvider.provideRenameEdits(document, position, newName, token); - } - } - public provideDefinition( - document: TextDocument, - position: Position, - token: CancellationToken - ): ProviderResult { - if (this.definitionProvider) { - return this.definitionProvider.provideDefinition(document, position, token); - } - } - public provideHover(document: TextDocument, position: Position, token: CancellationToken): ProviderResult { - if (this.hoverProvider) { - return this.hoverProvider.provideHover(document, position, token); - } - } - public provideReferences( - document: TextDocument, - position: Position, - context: ReferenceContext, - token: CancellationToken - ): ProviderResult { - if (this.referenceProvider) { - return this.referenceProvider.provideReferences(document, position, context, token); - } - } - public provideCompletionItems( - document: TextDocument, - position: Position, - token: CancellationToken, - _context: CompletionContext - ): ProviderResult { - if (this.completionProvider) { - return this.completionProvider.provideCompletionItems(document, position, token); - } - } - - public resolveCompletionItem(item: CompletionItem, token: CancellationToken): ProviderResult { - if (this.completionProvider) { - return this.completionProvider.resolveCompletionItem(item, token); - } - } - - public get onDidChangeCodeLenses(): Event | undefined { - return this.codeLensProvider ? this.codeLensProvider.onDidChangeCodeLenses : undefined; - } - public provideCodeLenses(document: TextDocument, token: CancellationToken): ProviderResult { - if (this.codeLensProvider) { - return this.codeLensProvider.provideCodeLenses(document, token); - } - } - public provideDocumentSymbols( - document: TextDocument, - token: CancellationToken - ): ProviderResult { - if (this.symbolProvider) { - return this.symbolProvider.provideDocumentSymbols(document, token); - } - } - public provideSignatureHelp( - document: TextDocument, - position: Position, - token: CancellationToken, - _context: SignatureHelpContext - ): ProviderResult { - if (this.signatureProvider) { - return this.signatureProvider.provideSignatureHelp(document, position, token); - } - } - - public dispose(): void { - this.registrations.forEach((r) => r.dispose()); - if (this.jediFactory) { - this.jediFactory.dispose(); - } - } -} diff --git a/src/client/activation/jedi/analysisOptions.ts b/src/client/activation/jedi/analysisOptions.ts new file mode 100644 index 000000000000..007008dc9b13 --- /dev/null +++ b/src/client/activation/jedi/analysisOptions.ts @@ -0,0 +1,93 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import * as path from 'path'; +import { WorkspaceFolder } from 'vscode'; +import { IWorkspaceService } from '../../common/application/types'; +import { IConfigurationService, Resource } from '../../common/types'; + +import { IEnvironmentVariablesProvider } from '../../common/variables/types'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; +import { LanguageServerAnalysisOptionsWithEnv } from '../common/analysisOptions'; +import { ILanguageServerOutputChannel } from '../types'; + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types, class-methods-use-this */ + +export class JediLanguageServerAnalysisOptions extends LanguageServerAnalysisOptionsWithEnv { + private resource: Resource | undefined; + + private interpreter: PythonEnvironment | undefined; + + constructor( + envVarsProvider: IEnvironmentVariablesProvider, + lsOutputChannel: ILanguageServerOutputChannel, + private readonly configurationService: IConfigurationService, + workspace: IWorkspaceService, + ) { + super(envVarsProvider, lsOutputChannel, workspace); + this.resource = undefined; + } + + public async initialize(resource: Resource, interpreter: PythonEnvironment | undefined) { + this.resource = resource; + this.interpreter = interpreter; + return super.initialize(resource, interpreter); + } + + protected getWorkspaceFolder(): WorkspaceFolder | undefined { + return this.workspace.getWorkspaceFolder(this.resource); + } + + protected async getInitializationOptions() { + const pythonSettings = this.configurationService.getSettings(this.resource); + const workspacePath = this.getWorkspaceFolder()?.uri.fsPath; + const extraPaths = pythonSettings.autoComplete + ? pythonSettings.autoComplete.extraPaths.map((extraPath) => { + if (path.isAbsolute(extraPath)) { + return extraPath; + } + return workspacePath ? path.join(workspacePath, extraPath) : ''; + }) + : []; + + if (workspacePath) { + extraPaths.unshift(workspacePath); + } + + const distinctExtraPaths = extraPaths + .filter((value) => value.length > 0) + .filter((value, index, self) => self.indexOf(value) === index); + + return { + markupKindPreferred: 'markdown', + completion: { + resolveEagerly: false, + disableSnippets: true, + }, + diagnostics: { + enable: true, + didOpen: true, + didSave: true, + didChange: true, + }, + hover: { + disable: { + keyword: { + all: true, + }, + }, + }, + workspace: { + extraPaths: distinctExtraPaths, + environmentPath: this.interpreter?.path, + symbols: { + // 0 means remove limit on number of workspace symbols returned + maxSymbols: 0, + }, + }, + semantic_tokens: { + enable: true, + }, + }; + } +} diff --git a/src/client/activation/jedi/languageClientFactory.ts b/src/client/activation/jedi/languageClientFactory.ts new file mode 100644 index 000000000000..70bd65da8d0d --- /dev/null +++ b/src/client/activation/jedi/languageClientFactory.ts @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import * as path from 'path'; +import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient/node'; + +import { EXTENSION_ROOT_DIR, PYTHON_LANGUAGE } from '../../common/constants'; +import { Resource } from '../../common/types'; +import { IInterpreterService } from '../../interpreter/contracts'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; +import { ILanguageClientFactory } from '../types'; + +const languageClientName = 'Python Jedi'; + +export class JediLanguageClientFactory implements ILanguageClientFactory { + constructor(private interpreterService: IInterpreterService) {} + + public async createLanguageClient( + resource: Resource, + _interpreter: PythonEnvironment | undefined, + clientOptions: LanguageClientOptions, + ): Promise { + // Just run the language server using a module + const lsScriptPath = path.join(EXTENSION_ROOT_DIR, 'python_files', 'run-jedi-language-server.py'); + const interpreter = await this.interpreterService.getActiveInterpreter(resource); + const serverOptions: ServerOptions = { + command: interpreter ? interpreter.path : 'python', + args: [lsScriptPath], + }; + + return new LanguageClient(PYTHON_LANGUAGE, languageClientName, serverOptions, clientOptions); + } +} diff --git a/src/client/activation/jedi/languageClientMiddleware.ts b/src/client/activation/jedi/languageClientMiddleware.ts new file mode 100644 index 000000000000..c8bb99629946 --- /dev/null +++ b/src/client/activation/jedi/languageClientMiddleware.ts @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { IServiceContainer } from '../../ioc/types'; +import { LanguageClientMiddleware } from '../languageClientMiddleware'; +import { LanguageServerType } from '../types'; + +export class JediLanguageClientMiddleware extends LanguageClientMiddleware { + public constructor(serviceContainer: IServiceContainer, serverVersion?: string) { + super(serviceContainer, LanguageServerType.Jedi, serverVersion); + } +} diff --git a/src/client/activation/jedi/languageServerProxy.ts b/src/client/activation/jedi/languageServerProxy.ts new file mode 100644 index 000000000000..d7ffe8328b9e --- /dev/null +++ b/src/client/activation/jedi/languageServerProxy.ts @@ -0,0 +1,112 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import '../../common/extensions'; +import { Disposable, LanguageClient, LanguageClientOptions } from 'vscode-languageclient/node'; + +import { ChildProcess } from 'child_process'; +import { Resource } from '../../common/types'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; +import { captureTelemetry } from '../../telemetry'; +import { EventName } from '../../telemetry/constants'; +import { JediLanguageClientMiddleware } from './languageClientMiddleware'; +import { ProgressReporting } from '../progress'; +import { ILanguageClientFactory, ILanguageServerProxy } from '../types'; +import { killPid } from '../../common/process/rawProcessApis'; +import { traceDecoratorError, traceDecoratorVerbose, traceError } from '../../logging'; + +export class JediLanguageServerProxy implements ILanguageServerProxy { + private languageClient: LanguageClient | undefined; + + private readonly disposables: Disposable[] = []; + + private lsVersion: string | undefined; + + constructor(private readonly factory: ILanguageClientFactory) {} + + private static versionTelemetryProps(instance: JediLanguageServerProxy) { + return { + lsVersion: instance.lsVersion, + }; + } + + @traceDecoratorVerbose('Disposing language server') + public dispose(): void { + this.stop().ignoreErrors(); + } + + @traceDecoratorError('Failed to start language server') + @captureTelemetry( + EventName.JEDI_LANGUAGE_SERVER_ENABLED, + undefined, + true, + undefined, + JediLanguageServerProxy.versionTelemetryProps, + ) + public async start( + resource: Resource, + interpreter: PythonEnvironment | undefined, + options: LanguageClientOptions, + ): Promise { + this.lsVersion = + (options.middleware ? (options.middleware).serverVersion : undefined) ?? + '0.19.3'; + + try { + const client = await this.factory.createLanguageClient(resource, interpreter, options); + this.registerHandlers(client); + await client.start(); + this.languageClient = client; + } catch (ex) { + traceError('Failed to start language server:', ex); + throw new Error('Launching Jedi language server using python failed, see output.'); + } + } + + @traceDecoratorVerbose('Stopping language server') + public async stop(): Promise { + while (this.disposables.length > 0) { + const d = this.disposables.shift()!; + d.dispose(); + } + + if (this.languageClient) { + const client = this.languageClient; + this.languageClient = undefined; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const pid: number | undefined = ((client as any)._serverProcess as ChildProcess)?.pid; + const killServer = () => { + if (pid) { + killPid(pid); + } + }; + + try { + await client.stop(); + await client.dispose(); + killServer(); + } catch (ex) { + traceError('Stopping language client failed', ex); + killServer(); + } + } + } + + // eslint-disable-next-line class-methods-use-this + public loadExtension(): void { + // No body. + } + + @captureTelemetry( + EventName.JEDI_LANGUAGE_SERVER_READY, + undefined, + true, + undefined, + JediLanguageServerProxy.versionTelemetryProps, + ) + private registerHandlers(client: LanguageClient) { + const progressReporting = new ProgressReporting(client); + this.disposables.push(progressReporting); + } +} diff --git a/src/client/activation/jedi/manager.ts b/src/client/activation/jedi/manager.ts new file mode 100644 index 000000000000..bafdcc735a12 --- /dev/null +++ b/src/client/activation/jedi/manager.ts @@ -0,0 +1,144 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import * as fs from 'fs-extra'; +import * as path from 'path'; +import '../../common/extensions'; + +import { ICommandManager } from '../../common/application/types'; +import { IDisposable, Resource } from '../../common/types'; +import { debounceSync } from '../../common/utils/decorators'; +import { EXTENSION_ROOT_DIR } from '../../constants'; +import { IServiceContainer } from '../../ioc/types'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; +import { captureTelemetry } from '../../telemetry'; +import { EventName } from '../../telemetry/constants'; +import { Commands } from '../commands'; +import { JediLanguageClientMiddleware } from './languageClientMiddleware'; +import { ILanguageServerAnalysisOptions, ILanguageServerManager, ILanguageServerProxy } from '../types'; +import { traceDecoratorError, traceDecoratorVerbose, traceVerbose } from '../../logging'; + +export class JediLanguageServerManager implements ILanguageServerManager { + private resource!: Resource; + + private interpreter: PythonEnvironment | undefined; + + private middleware: JediLanguageClientMiddleware | undefined; + + private disposables: IDisposable[] = []; + + private static commandDispose: IDisposable; + + private connected = false; + + private lsVersion: string | undefined; + + constructor( + private readonly serviceContainer: IServiceContainer, + private readonly analysisOptions: ILanguageServerAnalysisOptions, + private readonly languageServerProxy: ILanguageServerProxy, + commandManager: ICommandManager, + ) { + if (JediLanguageServerManager.commandDispose) { + JediLanguageServerManager.commandDispose.dispose(); + } + JediLanguageServerManager.commandDispose = commandManager.registerCommand(Commands.RestartLS, () => { + this.restartLanguageServer().ignoreErrors(); + }); + } + + private static versionTelemetryProps(instance: JediLanguageServerManager) { + return { + lsVersion: instance.lsVersion, + }; + } + + public dispose(): void { + this.stopLanguageServer().ignoreErrors(); + JediLanguageServerManager.commandDispose.dispose(); + this.disposables.forEach((d) => d.dispose()); + } + + @traceDecoratorError('Failed to start language server') + public async start(resource: Resource, interpreter: PythonEnvironment | undefined): Promise { + this.resource = resource; + this.interpreter = interpreter; + this.analysisOptions.onDidChange(this.restartLanguageServerDebounced, this, this.disposables); + + try { + // Version is actually hardcoded in our requirements.txt. + const requirementsTxt = await fs.readFile( + path.join(EXTENSION_ROOT_DIR, 'python_files', 'jedilsp_requirements', 'requirements.txt'), + 'utf-8', + ); + + // Search using a regex in the text + const match = /jedi-language-server==([0-9\.]*)/.exec(requirementsTxt); + if (match && match.length === 2) { + [, this.lsVersion] = match; + } + } catch (ex) { + // Getting version here is best effort and does not affect how LS works and + // failing to get version should not stop LS from working. + traceVerbose('Failed to get jedi-language-server version: ', ex); + } + + await this.analysisOptions.initialize(resource, interpreter); + await this.startLanguageServer(); + } + + public connect(): void { + if (!this.connected) { + this.connected = true; + this.middleware?.connect(); + } + } + + public disconnect(): void { + if (this.connected) { + this.connected = false; + this.middleware?.disconnect(); + } + } + + @debounceSync(1000) + protected restartLanguageServerDebounced(): void { + this.restartLanguageServer().ignoreErrors(); + } + + @traceDecoratorError('Failed to restart language server') + @traceDecoratorVerbose('Restarting language server') + protected async restartLanguageServer(): Promise { + await this.stopLanguageServer(); + await this.startLanguageServer(); + } + + @captureTelemetry( + EventName.JEDI_LANGUAGE_SERVER_STARTUP, + undefined, + true, + undefined, + JediLanguageServerManager.versionTelemetryProps, + ) + @traceDecoratorVerbose('Starting language server') + protected async startLanguageServer(): Promise { + const options = await this.analysisOptions.getAnalysisOptions(); + this.middleware = new JediLanguageClientMiddleware(this.serviceContainer, this.lsVersion); + options.middleware = this.middleware; + + // Make sure the middleware is connected if we restart and we we're already connected. + if (this.connected) { + this.middleware.connect(); + } + + // Then use this middleware to start a new language client. + await this.languageServerProxy.start(this.resource, this.interpreter, options); + } + + @traceDecoratorVerbose('Stopping language server') + protected async stopLanguageServer(): Promise { + if (this.languageServerProxy) { + await this.languageServerProxy.stop(); + } + } +} diff --git a/src/client/activation/languageClientMiddleware.ts b/src/client/activation/languageClientMiddleware.ts index 287ce9c47ef8..d3d1e0c3c171 100644 --- a/src/client/activation/languageClientMiddleware.ts +++ b/src/client/activation/languageClientMiddleware.ts @@ -1,475 +1,14 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -import * as path from 'path'; -import { - CancellationToken, - CodeAction, - CodeActionContext, - CodeLens, - Command, - CompletionContext, - CompletionItem, - Declaration as VDeclaration, - Definition, - DefinitionLink, - Diagnostic, - DocumentHighlight, - DocumentLink, - DocumentSymbol, - FormattingOptions, - Location, - Position, - Position as VPosition, - ProviderResult, - Range, - SignatureHelp, - SignatureHelpContext, - SymbolInformation, - TextDocument, - TextEdit, - Uri, - WorkspaceEdit -} from 'vscode'; -import { - ConfigurationParams, - ConfigurationRequest, - HandleDiagnosticsSignature, - HandlerResult, - Middleware, - PrepareRenameSignature, - ProvideCodeActionsSignature, - ProvideCodeLensesSignature, - ProvideCompletionItemsSignature, - ProvideDefinitionSignature, - ProvideDocumentFormattingEditsSignature, - ProvideDocumentHighlightsSignature, - ProvideDocumentLinksSignature, - ProvideDocumentRangeFormattingEditsSignature, - ProvideDocumentSymbolsSignature, - ProvideHoverSignature, - ProvideOnTypeFormattingEditsSignature, - ProvideReferencesSignature, - ProvideRenameEditsSignature, - ProvideSignatureHelpSignature, - ProvideWorkspaceSymbolsSignature, - ResolveCodeLensSignature, - ResolveCompletionItemSignature, - ResolveDocumentLinkSignature, - ResponseError -} from 'vscode-languageclient'; -import { ProvideDeclarationSignature } from 'vscode-languageclient/lib/declaration'; -import { HiddenFilePrefix } from '../common/constants'; -import { CollectLSRequestTiming, CollectNodeLSRequestTiming } from '../common/experimentGroups'; -import { IConfigurationService, IExperimentsManager, IPythonExtensionBanner } from '../common/types'; -import { StopWatch } from '../common/utils/stopWatch'; +import { IServiceContainer } from '../ioc/types'; import { sendTelemetryEvent } from '../telemetry'; -import { EventName } from '../telemetry/constants'; -import { LanguageServerType } from './types'; - -// Only send 100 events per hour. -const globalDebounce = 1000 * 60 * 60; -const globalLimit = 100; - -// For calls that are more likely to happen during a session (hover, completion, document symbols). -const debounceFrequentCall = 1000 * 60 * 5; - -// For calls that are less likely to happen during a session (go-to-def, workspace symbols). -const debounceRareCall = 1000 * 60; - -export class LanguageClientMiddleware implements Middleware { - // These are public so that the captureTelemetryForLSPMethod decorator can access them. - public readonly eventName: EventName | undefined; - public readonly lastCaptured = new Map(); - public nextWindow: number = 0; - public eventCount: number = 0; - - public workspace = { - // tslint:disable:no-any - configuration: ( - params: ConfigurationParams, - token: CancellationToken, - next: ConfigurationRequest.HandlerSignature - ): HandlerResult => { - // Hand-collapse "Thenable | Thenable | Thenable" into just "Thenable" to make TS happy. - const result: any[] | ResponseError | Thenable> = next(params, token); - - // For backwards compatibility, set python.pythonPath to the configured - // value as though it were in the user's settings.json file. - const addPythonPath = (settings: any[] | ResponseError) => { - if (settings instanceof ResponseError) { - return settings; - } - - params.items.forEach((item, i) => { - if (item.section === 'python') { - const uri = item.scopeUri ? Uri.parse(item.scopeUri) : undefined; - settings[i].pythonPath = this.configService.getSettings(uri).pythonPath; - } - }); - - return settings; - }; - - if (isThenable(result)) { - return result.then(addPythonPath); - } - - return addPythonPath(result); - } - // tslint:enable:no-any - }; - - private connected = false; // Default to not forwarding to VS code. - - public constructor( - private readonly surveyBanner: IPythonExtensionBanner, - experimentsManager: IExperimentsManager, - private readonly configService: IConfigurationService, - serverType: LanguageServerType, - public readonly serverVersion?: string - ) { - this.handleDiagnostics = this.handleDiagnostics.bind(this); // VS Code calls function without context. - - let group: { experiment: string; control: string } | undefined; - - if (serverType === LanguageServerType.Microsoft) { - this.eventName = EventName.PYTHON_LANGUAGE_SERVER_REQUEST; - group = CollectLSRequestTiming; - } else if (serverType === LanguageServerType.Node) { - this.eventName = EventName.LANGUAGE_SERVER_REQUEST; - group = CollectNodeLSRequestTiming; - } else { - return; - } - - if (!experimentsManager.inExperiment(group.experiment)) { - this.eventName = undefined; - experimentsManager.sendTelemetryIfInExperiment(group.control); - } - } - - public connect() { - this.connected = true; - } - public disconnect() { - this.connected = false; - } - - @captureTelemetryForLSPMethod('textDocument/completion', debounceFrequentCall) - public provideCompletionItem( - document: TextDocument, - position: Position, - context: CompletionContext, - token: CancellationToken, - next: ProvideCompletionItemsSignature - ) { - if (this.connected) { - this.surveyBanner.showBanner().ignoreErrors(); - return next(document, position, context, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/hover', debounceFrequentCall) - public provideHover( - document: TextDocument, - position: Position, - token: CancellationToken, - next: ProvideHoverSignature - ) { - if (this.connected) { - return next(document, position, token); - } - } - - public handleDiagnostics(uri: Uri, diagnostics: Diagnostic[], next: HandleDiagnosticsSignature) { - if (this.connected) { - // Skip sending if this is a special file. - const filePath = uri.fsPath; - const baseName = filePath ? path.basename(filePath) : undefined; - if (!baseName || !baseName.startsWith(HiddenFilePrefix)) { - next(uri, diagnostics); - } - } - } - - @captureTelemetryForLSPMethod('completionItem/resolve', debounceFrequentCall) - public resolveCompletionItem( - item: CompletionItem, - token: CancellationToken, - next: ResolveCompletionItemSignature - ): ProviderResult { - if (this.connected) { - return next(item, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/signatureHelp', debounceFrequentCall) - public provideSignatureHelp( - document: TextDocument, - position: Position, - context: SignatureHelpContext, - token: CancellationToken, - next: ProvideSignatureHelpSignature - ): ProviderResult { - if (this.connected) { - return next(document, position, context, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/definition', debounceRareCall) - public provideDefinition( - document: TextDocument, - position: Position, - token: CancellationToken, - next: ProvideDefinitionSignature - ): ProviderResult { - if (this.connected) { - return next(document, position, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/references', debounceRareCall) - public provideReferences( - document: TextDocument, - position: Position, - options: { - includeDeclaration: boolean; - }, - token: CancellationToken, - next: ProvideReferencesSignature - ): ProviderResult { - if (this.connected) { - return next(document, position, options, token); - } - } - - public provideDocumentHighlights( - document: TextDocument, - position: Position, - token: CancellationToken, - next: ProvideDocumentHighlightsSignature - ): ProviderResult { - if (this.connected) { - return next(document, position, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/documentSymbol', debounceFrequentCall) - public provideDocumentSymbols( - document: TextDocument, - token: CancellationToken, - next: ProvideDocumentSymbolsSignature - ): ProviderResult { - if (this.connected) { - return next(document, token); - } - } - - @captureTelemetryForLSPMethod('workspace/symbol', debounceRareCall) - public provideWorkspaceSymbols( - query: string, - token: CancellationToken, - next: ProvideWorkspaceSymbolsSignature - ): ProviderResult { - if (this.connected) { - return next(query, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/codeAction', debounceFrequentCall) - public provideCodeActions( - document: TextDocument, - range: Range, - context: CodeActionContext, - token: CancellationToken, - next: ProvideCodeActionsSignature - ): ProviderResult<(Command | CodeAction)[]> { - if (this.connected) { - return next(document, range, context, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/codeLens', debounceFrequentCall) - public provideCodeLenses( - document: TextDocument, - token: CancellationToken, - next: ProvideCodeLensesSignature - ): ProviderResult { - if (this.connected) { - return next(document, token); - } - } - - @captureTelemetryForLSPMethod('codeLens/resolve', debounceFrequentCall) - public resolveCodeLens( - codeLens: CodeLens, - token: CancellationToken, - next: ResolveCodeLensSignature - ): ProviderResult { - if (this.connected) { - return next(codeLens, token); - } - } - - public provideDocumentFormattingEdits( - document: TextDocument, - options: FormattingOptions, - token: CancellationToken, - next: ProvideDocumentFormattingEditsSignature - ): ProviderResult { - if (this.connected) { - return next(document, options, token); - } - } - - public provideDocumentRangeFormattingEdits( - document: TextDocument, - range: Range, - options: FormattingOptions, - token: CancellationToken, - next: ProvideDocumentRangeFormattingEditsSignature - ): ProviderResult { - if (this.connected) { - return next(document, range, options, token); - } - } - - public provideOnTypeFormattingEdits( - document: TextDocument, - position: Position, - ch: string, - options: FormattingOptions, - token: CancellationToken, - next: ProvideOnTypeFormattingEditsSignature - ): ProviderResult { - if (this.connected) { - return next(document, position, ch, options, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/rename', debounceRareCall) - public provideRenameEdits( - document: TextDocument, - position: Position, - newName: string, - token: CancellationToken, - next: ProvideRenameEditsSignature - ): ProviderResult { - if (this.connected) { - return next(document, position, newName, token); - } - } - - @captureTelemetryForLSPMethod('textDocument/prepareRename', debounceRareCall) - public prepareRename( - document: TextDocument, - position: Position, - token: CancellationToken, - next: PrepareRenameSignature - ): ProviderResult< - | Range - | { - range: Range; - placeholder: string; - } - > { - if (this.connected) { - return next(document, position, token); - } - } - - public provideDocumentLinks( - document: TextDocument, - token: CancellationToken, - next: ProvideDocumentLinksSignature - ): ProviderResult { - if (this.connected) { - return next(document, token); - } - } - - public resolveDocumentLink( - link: DocumentLink, - token: CancellationToken, - next: ResolveDocumentLinkSignature - ): ProviderResult { - if (this.connected) { - return next(link, token); - } - } +import { LanguageClientMiddlewareBase } from './languageClientMiddlewareBase'; +import { LanguageServerType } from './types'; - @captureTelemetryForLSPMethod('textDocument/declaration', debounceRareCall) - public provideDeclaration( - document: TextDocument, - position: VPosition, - token: CancellationToken, - next: ProvideDeclarationSignature - ): ProviderResult { - if (this.connected) { - return next(document, position, token); - } +export class LanguageClientMiddleware extends LanguageClientMiddlewareBase { + public constructor(serviceContainer: IServiceContainer, serverType: LanguageServerType, serverVersion?: string) { + super(serviceContainer, serverType, sendTelemetryEvent, serverVersion); } } - -function captureTelemetryForLSPMethod(method: string, debounceMilliseconds: number) { - // tslint:disable-next-line:no-function-expression no-any - return function (_target: Object, _propertyKey: string, descriptor: TypedPropertyDescriptor) { - const originalMethod = descriptor.value; - - // tslint:disable-next-line:no-any - descriptor.value = function (this: LanguageClientMiddleware, ...args: any[]) { - const eventName = this.eventName; - if (!eventName) { - return originalMethod.apply(this, args); - } - - const now = Date.now(); - - if (now > this.nextWindow) { - // Past the end of the last window, reset. - this.nextWindow = now + globalDebounce; - this.eventCount = 0; - } else if (this.eventCount >= globalLimit) { - // Sent too many events in this window, don't send. - return originalMethod.apply(this, args); - } - - const lastCapture = this.lastCaptured.get(method); - if (lastCapture && now - lastCapture < debounceMilliseconds) { - return originalMethod.apply(this, args); - } - - this.lastCaptured.set(method, now); - this.eventCount += 1; - - const properties = { - lsVersion: this.serverVersion || 'unknown', - method: method - }; - - const stopWatch = new StopWatch(); - // tslint:disable-next-line:no-unsafe-any - const result = originalMethod.apply(this, args); - - // tslint:disable-next-line:no-unsafe-any - if (result && isThenable(result)) { - result.then(() => { - sendTelemetryEvent(eventName, stopWatch.elapsedTime, properties); - }); - } else { - sendTelemetryEvent(eventName, stopWatch.elapsedTime, properties); - } - - return result; - }; - - return descriptor; - }; -} - -// tslint:disable-next-line: no-any -function isThenable(v: any): v is Thenable { - return typeof v?.then === 'function'; -} diff --git a/src/client/activation/languageClientMiddlewareBase.ts b/src/client/activation/languageClientMiddlewareBase.ts new file mode 100644 index 000000000000..f1e102a4081d --- /dev/null +++ b/src/client/activation/languageClientMiddlewareBase.ts @@ -0,0 +1,596 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +import * as path from 'path'; +import { CancellationToken, Diagnostic, Disposable, Uri } from 'vscode'; +import { + ConfigurationParams, + ConfigurationRequest, + HandleDiagnosticsSignature, + LSPObject, + Middleware, + ResponseError, +} from 'vscode-languageclient'; +import { ConfigurationItem } from 'vscode-languageserver-protocol'; + +import { HiddenFilePrefix } from '../common/constants'; +import { createDeferred, isThenable } from '../common/utils/async'; +import { StopWatch } from '../common/utils/stopWatch'; +import { IEnvironmentVariablesProvider } from '../common/variables/types'; +import { IInterpreterService } from '../interpreter/contracts'; +import { IServiceContainer } from '../ioc/types'; +import { EventName } from '../telemetry/constants'; +import { LanguageServerType } from './types'; + +// Only send 100 events per hour. +const globalDebounce = 1000 * 60 * 60; +const globalLimit = 100; + +// For calls that are more likely to happen during a session (hover, completion, document symbols). +const debounceFrequentCall = 1000 * 60 * 5; + +// For calls that are less likely to happen during a session (go-to-def, workspace symbols). +const debounceRareCall = 1000 * 60; + +type Awaited = T extends PromiseLike ? U : T; +type MiddleWareMethods = { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + [P in keyof Middleware]-?: NonNullable extends (...args: any) => any ? Middleware[P] : never; +}; + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable prefer-rest-params */ +/* eslint-disable consistent-return */ +/* eslint-disable @typescript-eslint/ban-types */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +interface SendTelemetryEventFunc { + (eventName: EventName, measuresOrDurationMs?: Record | number, properties?: any, ex?: Error): void; +} + +export class LanguageClientMiddlewareBase implements Middleware { + private readonly eventName: EventName | undefined; + + private readonly lastCaptured = new Map(); + + private nextWindow = 0; + + private eventCount = 0; + + public workspace = { + configuration: async ( + params: ConfigurationParams, + token: CancellationToken, + next: ConfigurationRequest.HandlerSignature, + ) => { + if (!this.serviceContainer) { + return next(params, token); + } + + const interpreterService = this.serviceContainer.get(IInterpreterService); + const envService = this.serviceContainer.get(IEnvironmentVariablesProvider); + + let settings = next(params, token); + if (isThenable(settings)) { + settings = await settings; + } + if (settings instanceof ResponseError) { + return settings; + } + + for (const [i, item] of params.items.entries()) { + if (item.section === 'python') { + const uri = item.scopeUri ? Uri.parse(item.scopeUri) : undefined; + // For backwards compatibility, set python.pythonPath to the configured + // value as though it were in the user's settings.json file. + // As this is for backwards compatibility, `ConfigService.pythonPath` + // can be considered as active interpreter path. + const settingDict: LSPObject & { pythonPath: string; _envPYTHONPATH: string } = settings[ + i + ] as LSPObject & { pythonPath: string; _envPYTHONPATH: string }; + settingDict.pythonPath = (await interpreterService.getActiveInterpreter(uri))?.path ?? 'python'; + + const env = await envService.getEnvironmentVariables(uri); + const envPYTHONPATH = env.PYTHONPATH; + if (envPYTHONPATH) { + settingDict._envPYTHONPATH = envPYTHONPATH; + } + } + + this.configurationHook(item, settings[i] as LSPObject); + } + + return settings; + }, + }; + + // eslint-disable-next-line class-methods-use-this, @typescript-eslint/no-empty-function + protected configurationHook(_item: ConfigurationItem, _settings: LSPObject): void {} + + private get connected(): Promise { + return this.connectedPromise.promise; + } + + protected notebookAddon: (Middleware & Disposable) | undefined; + + private connectedPromise = createDeferred(); + + public constructor( + readonly serviceContainer: IServiceContainer | undefined, + serverType: LanguageServerType, + public readonly sendTelemetryEventFunc: SendTelemetryEventFunc, + public readonly serverVersion?: string, + ) { + this.handleDiagnostics = this.handleDiagnostics.bind(this); // VS Code calls function without context. + this.didOpen = this.didOpen.bind(this); + this.didSave = this.didSave.bind(this); + this.didChange = this.didChange.bind(this); + this.didClose = this.didClose.bind(this); + this.willSave = this.willSave.bind(this); + this.willSaveWaitUntil = this.willSaveWaitUntil.bind(this); + + if (serverType === LanguageServerType.Node) { + this.eventName = EventName.LANGUAGE_SERVER_REQUEST; + } else if (serverType === LanguageServerType.Jedi) { + this.eventName = EventName.JEDI_LANGUAGE_SERVER_REQUEST; + } + } + + public connect() { + this.connectedPromise.resolve(true); + } + + public disconnect() { + this.connectedPromise = createDeferred(); + this.connectedPromise.resolve(false); + } + + public didChange() { + return this.callNext('didChange', arguments); + } + + public didOpen() { + // Special case, open and close happen before we connect. + return this.callNext('didOpen', arguments); + } + + public didClose() { + // Special case, open and close happen before we connect. + return this.callNext('didClose', arguments); + } + + public didSave() { + return this.callNext('didSave', arguments); + } + + public willSave() { + return this.callNext('willSave', arguments); + } + + public willSaveWaitUntil() { + return this.callNext('willSaveWaitUntil', arguments); + } + + public async didOpenNotebook() { + return this.callNotebooksNext('didOpen', arguments); + } + + public async didSaveNotebook() { + return this.callNotebooksNext('didSave', arguments); + } + + public async didChangeNotebook() { + return this.callNotebooksNext('didChange', arguments); + } + + public async didCloseNotebook() { + return this.callNotebooksNext('didClose', arguments); + } + + notebooks = { + didOpen: this.didOpenNotebook.bind(this), + didSave: this.didSaveNotebook.bind(this), + didChange: this.didChangeNotebook.bind(this), + didClose: this.didCloseNotebook.bind(this), + }; + + public async provideCompletionItem() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/completion', + debounceFrequentCall, + 'provideCompletionItem', + arguments, + (_, result) => { + if (!result) { + return { resultLength: 0 }; + } + const resultLength = Array.isArray(result) ? result.length : result.items.length; + return { resultLength }; + }, + ); + } + } + + public async provideHover() { + if (await this.connected) { + return this.callNextAndSendTelemetry('textDocument/hover', debounceFrequentCall, 'provideHover', arguments); + } + } + + public async handleDiagnostics(uri: Uri, _diagnostics: Diagnostic[], _next: HandleDiagnosticsSignature) { + if (await this.connected) { + // Skip sending if this is a special file. + const filePath = uri.fsPath; + const baseName = filePath ? path.basename(filePath) : undefined; + if (!baseName || !baseName.startsWith(HiddenFilePrefix)) { + return this.callNext('handleDiagnostics', arguments); + } + } + } + + public async resolveCompletionItem() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'completionItem/resolve', + debounceFrequentCall, + 'resolveCompletionItem', + arguments, + ); + } + } + + public async provideSignatureHelp() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/signatureHelp', + debounceFrequentCall, + 'provideSignatureHelp', + arguments, + ); + } + } + + public async provideDefinition() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/definition', + debounceRareCall, + 'provideDefinition', + arguments, + ); + } + } + + public async provideReferences() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/references', + debounceRareCall, + 'provideReferences', + arguments, + ); + } + } + + public async provideDocumentHighlights() { + if (await this.connected) { + return this.callNext('provideDocumentHighlights', arguments); + } + } + + public async provideDocumentSymbols() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/documentSymbol', + debounceFrequentCall, + 'provideDocumentSymbols', + arguments, + ); + } + } + + public async provideWorkspaceSymbols() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'workspace/symbol', + debounceRareCall, + 'provideWorkspaceSymbols', + arguments, + ); + } + } + + public async provideCodeActions() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/codeAction', + debounceFrequentCall, + 'provideCodeActions', + arguments, + ); + } + } + + public async provideCodeLenses() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/codeLens', + debounceFrequentCall, + 'provideCodeLenses', + arguments, + ); + } + } + + public async resolveCodeLens() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'codeLens/resolve', + debounceFrequentCall, + 'resolveCodeLens', + arguments, + ); + } + } + + public async provideDocumentFormattingEdits() { + if (await this.connected) { + return this.callNext('provideDocumentFormattingEdits', arguments); + } + } + + public async provideDocumentRangeFormattingEdits() { + if (await this.connected) { + return this.callNext('provideDocumentRangeFormattingEdits', arguments); + } + } + + public async provideOnTypeFormattingEdits() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/onTypeFormatting', + debounceFrequentCall, + 'provideOnTypeFormattingEdits', + arguments, + ); + } + } + + public async provideRenameEdits() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/rename', + debounceRareCall, + 'provideRenameEdits', + arguments, + ); + } + } + + public async prepareRename() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/prepareRename', + debounceRareCall, + 'prepareRename', + arguments, + ); + } + } + + public async provideDocumentLinks() { + if (await this.connected) { + return this.callNext('provideDocumentLinks', arguments); + } + } + + public async resolveDocumentLink() { + if (await this.connected) { + return this.callNext('resolveDocumentLink', arguments); + } + } + + public async provideDeclaration() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/declaration', + debounceRareCall, + 'provideDeclaration', + arguments, + ); + } + } + + public async provideTypeDefinition() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/typeDefinition', + debounceRareCall, + 'provideTypeDefinition', + arguments, + ); + } + } + + public async provideImplementation() { + if (await this.connected) { + return this.callNext('provideImplementation', arguments); + } + } + + public async provideDocumentColors() { + if (await this.connected) { + return this.callNext('provideDocumentColors', arguments); + } + } + + public async provideColorPresentations() { + if (await this.connected) { + return this.callNext('provideColorPresentations', arguments); + } + } + + public async provideFoldingRanges() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/foldingRange', + debounceFrequentCall, + 'provideFoldingRanges', + arguments, + ); + } + } + + public async provideSelectionRanges() { + if (await this.connected) { + return this.callNextAndSendTelemetry( + 'textDocument/selectionRange', + debounceRareCall, + 'provideSelectionRanges', + arguments, + ); + } + } + + public async prepareCallHierarchy() { + if (await this.connected) { + return this.callNext('prepareCallHierarchy', arguments); + } + } + + public async provideCallHierarchyIncomingCalls() { + if (await this.connected) { + return this.callNext('provideCallHierarchyIncomingCalls', arguments); + } + } + + public async provideCallHierarchyOutgoingCalls() { + if (await this.connected) { + return this.callNext('provideCallHierarchyOutgoingCalls', arguments); + } + } + + public async provideDocumentSemanticTokens() { + if (await this.connected) { + return this.callNext('provideDocumentSemanticTokens', arguments); + } + } + + public async provideDocumentSemanticTokensEdits() { + if (await this.connected) { + return this.callNext('provideDocumentSemanticTokensEdits', arguments); + } + } + + public async provideDocumentRangeSemanticTokens() { + if (await this.connected) { + return this.callNext('provideDocumentRangeSemanticTokens', arguments); + } + } + + public async provideLinkedEditingRange() { + if (await this.connected) { + return this.callNext('provideLinkedEditingRange', arguments); + } + } + + private callNext(funcName: keyof Middleware, args: IArguments) { + // This function uses the last argument to call the 'next' item. If we're allowing notebook + // middleware, it calls into the notebook middleware first. + if (this.notebookAddon && (this.notebookAddon as any)[funcName]) { + // It would be nice to use args.callee, but not supported in strict mode + return (this.notebookAddon as any)[funcName](...args); + } + + return args[args.length - 1](...args); + } + + private callNotebooksNext(funcName: 'didOpen' | 'didSave' | 'didChange' | 'didClose', args: IArguments) { + // This function uses the last argument to call the 'next' item. If we're allowing notebook + // middleware, it calls into the notebook middleware first. + if (this.notebookAddon?.notebooks && (this.notebookAddon.notebooks as any)[funcName]) { + // It would be nice to use args.callee, but not supported in strict mode + return (this.notebookAddon.notebooks as any)[funcName](...args); + } + + return args[args.length - 1](...args); + } + + private callNextAndSendTelemetry( + lspMethod: string, + debounceMilliseconds: number, + funcName: T, + args: IArguments, + lazyMeasures?: (this_: any, result: Awaited>) => Record, + ): ReturnType { + const now = Date.now(); + const stopWatch = new StopWatch(); + let calledNext = false; + // Change the 'last' argument (which is our next) in order to track if + // telemetry should be sent or not. + const changedArgs = [...args]; + + // Track whether or not the middleware called the 'next' function (which means it actually sent a request) + changedArgs[changedArgs.length - 1] = (...nextArgs: any) => { + // If the 'next' function is called, then legit request was made. + calledNext = true; + + // Then call the original 'next' + return args[args.length - 1](...nextArgs); + }; + + // Check if we need to reset the event count (if we're past the globalDebounce time) + if (now > this.nextWindow) { + // Past the end of the last window, reset. + this.nextWindow = now + globalDebounce; + this.eventCount = 0; + } + const lastCapture = this.lastCaptured.get(lspMethod); + + const sendTelemetry = (result: Awaited>) => { + // Skip doing anything if not allowed + // We should have: + // - called the next function in the middleware (this means a request was actually sent) + // - eventcount is not over the global limit + // - elapsed time since we sent this event is greater than debounce time + if ( + this.eventName && + calledNext && + this.eventCount < globalLimit && + (!lastCapture || now - lastCapture > debounceMilliseconds) + ) { + // We're sending, so update event count and last captured time + this.lastCaptured.set(lspMethod, now); + this.eventCount += 1; + + // Replace all slashes in the method name so it doesn't get scrubbed by @vscode/extension-telemetry. + const formattedMethod = lspMethod.replace(/\//g, '.'); + + const properties = { + lsVersion: this.serverVersion || 'unknown', + method: formattedMethod, + }; + + let measures: number | Record = stopWatch.elapsedTime; + if (lazyMeasures) { + measures = { + duration: measures, + ...lazyMeasures(this, result), + }; + } + + this.sendTelemetryEventFunc(this.eventName, measures, properties); + } + return result; + }; + + // Try to call the 'next' function in the middleware chain + const result: ReturnType = this.callNext(funcName, changedArgs as any); + + // Then wait for the result before sending telemetry + if (isThenable(result)) { + return result.then(sendTelemetry); + } + return sendTelemetry(result as any) as ReturnType; + } +} diff --git a/src/client/activation/languageServer/activator.ts b/src/client/activation/languageServer/activator.ts deleted file mode 100644 index 42194f36adbe..000000000000 --- a/src/client/activation/languageServer/activator.ts +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -import { inject, injectable } from 'inversify'; -import * as path from 'path'; - -import { IWorkspaceService } from '../../common/application/types'; -import { traceDecorators } from '../../common/logger'; -import { IFileSystem } from '../../common/platform/types'; -import { IConfigurationService, Resource } from '../../common/types'; -import { LanguageServerActivatorBase } from '../common/activatorBase'; -import { ILanguageServerDownloader, ILanguageServerFolderService, ILanguageServerManager } from '../types'; - -/** - * Starts the language server managers per workspaces (currently one for first workspace). - * - * @export - * @class DotNetLanguageServerActivator - * @implements {ILanguageServerActivator} - * @extends {LanguageServerActivatorBase} - */ -@injectable() -export class DotNetLanguageServerActivator extends LanguageServerActivatorBase { - constructor( - @inject(ILanguageServerManager) manager: ILanguageServerManager, - @inject(IWorkspaceService) workspace: IWorkspaceService, - @inject(IFileSystem) fs: IFileSystem, - @inject(ILanguageServerDownloader) lsDownloader: ILanguageServerDownloader, - @inject(ILanguageServerFolderService) languageServerFolderService: ILanguageServerFolderService, - @inject(IConfigurationService) configurationService: IConfigurationService - ) { - super(manager, workspace, fs, lsDownloader, languageServerFolderService, configurationService); - } - - @traceDecorators.error('Failed to ensure language server is available') - public async ensureLanguageServerIsAvailable(resource: Resource): Promise { - const languageServerFolderPath = await this.ensureLanguageServerFileIsAvailable(resource, 'mscorlib.dll'); - if (languageServerFolderPath) { - await this.prepareLanguageServerForNoICU(languageServerFolderPath); - } - } - - public async prepareLanguageServerForNoICU(languageServerFolderPath: string): Promise { - const targetJsonFile = path.join( - languageServerFolderPath, - 'Microsoft.Python.LanguageServer.runtimeconfig.json' - ); - // tslint:disable-next-line:no-any - let content: any = {}; - if (await this.fs.fileExists(targetJsonFile)) { - try { - content = JSON.parse(await this.fs.readFile(targetJsonFile)); - if ( - content.runtimeOptions && - content.runtimeOptions.configProperties && - content.runtimeOptions.configProperties['System.Globalization.Invariant'] === true - ) { - return; - } - } catch { - // Do nothing. - } - } - content.runtimeOptions = content.runtimeOptions || {}; - content.runtimeOptions.configProperties = content.runtimeOptions.configProperties || {}; - content.runtimeOptions.configProperties['System.Globalization.Invariant'] = true; - await this.fs.writeFile(targetJsonFile, JSON.stringify(content)); - } -} diff --git a/src/client/activation/languageServer/analysisOptions.ts b/src/client/activation/languageServer/analysisOptions.ts deleted file mode 100644 index 89bd7353b2ea..000000000000 --- a/src/client/activation/languageServer/analysisOptions.ts +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import { inject, injectable } from 'inversify'; -import * as path from 'path'; -import { ConfigurationChangeEvent, Disposable, Event, EventEmitter, WorkspaceFolder } from 'vscode'; -import { DocumentFilter, DocumentSelector, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; - -import { IWorkspaceService } from '../../common/application/types'; -import { isTestExecution, PYTHON_LANGUAGE } from '../../common/constants'; -import { traceDecorators, traceError } from '../../common/logger'; -import { IConfigurationService, IExtensionContext, IOutputChannel, IPathUtils, Resource } from '../../common/types'; -import { debounceSync } from '../../common/utils/decorators'; -import { IEnvironmentVariablesProvider } from '../../common/variables/types'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { ILanguageServerAnalysisOptions, ILanguageServerFolderService, ILanguageServerOutputChannel } from '../types'; - -@injectable() -export class LanguageServerAnalysisOptions implements ILanguageServerAnalysisOptions { - private envPythonPath: string = ''; - private excludedFiles: string[] = []; - private typeshedPaths: string[] = []; - private disposables: Disposable[] = []; - private languageServerFolder: string = ''; - private resource: Resource; - private interpreter: PythonInterpreter | undefined; - private output: IOutputChannel; - private readonly didChange = new EventEmitter(); - constructor( - @inject(IExtensionContext) private readonly context: IExtensionContext, - @inject(IEnvironmentVariablesProvider) private readonly envVarsProvider: IEnvironmentVariablesProvider, - @inject(IConfigurationService) private readonly configuration: IConfigurationService, - @inject(IWorkspaceService) private readonly workspace: IWorkspaceService, - @inject(ILanguageServerOutputChannel) private readonly lsOutputChannel: ILanguageServerOutputChannel, - @inject(IPathUtils) private readonly pathUtils: IPathUtils, - @inject(ILanguageServerFolderService) private readonly languageServerFolderService: ILanguageServerFolderService - ) { - this.output = this.lsOutputChannel.channel; - } - public async initialize(resource: Resource, interpreter: PythonInterpreter | undefined) { - this.resource = resource; - this.interpreter = interpreter; - this.languageServerFolder = await this.languageServerFolderService.getLanguageServerFolderName(resource); - - let disposable = this.workspace.onDidChangeConfiguration(this.onSettingsChangedHandler, this); - this.disposables.push(disposable); - - disposable = this.envVarsProvider.onDidEnvironmentVariablesChange(this.onEnvVarChange, this); - this.disposables.push(disposable); - } - public get onDidChange(): Event { - return this.didChange.event; - } - public dispose(): void { - this.disposables.forEach((d) => d.dispose()); - this.didChange.dispose(); - } - // tslint:disable-next-line: max-func-body-length - @traceDecorators.error('Failed to get analysis options') - public async getAnalysisOptions(): Promise { - const properties: Record = {}; - - const interpreterInfo = this.interpreter; - if (!interpreterInfo) { - // tslint:disable-next-line:no-suspicious-comment - // TODO: How do we handle this? It is pretty unlikely... - throw Error('did not find an active interpreter'); - } - - // tslint:disable-next-line:no-string-literal - properties['InterpreterPath'] = interpreterInfo.path; - - const version = interpreterInfo.version; - if (version) { - // tslint:disable-next-line:no-string-literal - properties['Version'] = `${version.major}.${version.minor}.${version.patch}`; - } else { - traceError('Unable to determine Python version. Analysis may be limited.'); - } - - let searchPaths = []; - - const settings = this.configuration.getSettings(this.resource); - if (settings.autoComplete) { - const extraPaths = settings.autoComplete.extraPaths; - if (extraPaths && extraPaths.length > 0) { - searchPaths.push(...extraPaths); - } - } - - // tslint:disable-next-line: no-suspicious-comment - // TODO: remove this setting since LS 0.2.92+ is not using it. - // tslint:disable-next-line:no-string-literal - properties['DatabasePath'] = path.join(this.context.extensionPath, this.languageServerFolder); - - const vars = await this.envVarsProvider.getEnvironmentVariables(); - this.envPythonPath = vars.PYTHONPATH || ''; - if (this.envPythonPath !== '') { - const paths = this.envPythonPath.split(this.pathUtils.delimiter).filter((item) => item.trim().length > 0); - searchPaths.push(...paths); - } - - searchPaths = searchPaths.map((p) => path.normalize(p)); - - this.excludedFiles = this.getExcludedFiles(); - this.typeshedPaths = this.getTypeshedPaths(); - const workspaceFolder = this.workspace.getWorkspaceFolder(this.resource); - const documentSelector = this.getDocumentSelector(workspaceFolder); - // Options to control the language client. - return { - // Register the server for Python documents. - documentSelector, - workspaceFolder, - synchronize: { - configurationSection: PYTHON_LANGUAGE - }, - outputChannel: this.output, - revealOutputChannelOn: RevealOutputChannelOn.Never, - initializationOptions: { - interpreter: { - properties - }, - displayOptions: { - preferredFormat: 'markdown', - trimDocumentationLines: false, - maxDocumentationLineLength: 0, - trimDocumentationText: false, - maxDocumentationTextLength: 0 - }, - searchPaths, - typeStubSearchPaths: this.typeshedPaths, - cacheFolderPath: this.getCacheFolderPath(), - excludeFiles: this.excludedFiles, - testEnvironment: isTestExecution(), - analysisUpdates: true, - traceLogging: true, // Max level, let LS decide through settings actual level of logging. - asyncStartup: true - } - }; - } - protected getDocumentSelector(workspaceFolder?: WorkspaceFolder): DocumentSelector { - const documentSelector: DocumentFilter[] = [ - { scheme: 'file', language: PYTHON_LANGUAGE }, - { scheme: 'untitled', language: PYTHON_LANGUAGE } - ]; - // Set the document selector only when in a multi-root workspace scenario. - if ( - workspaceFolder && - Array.isArray(this.workspace.workspaceFolders) && - this.workspace.workspaceFolders!.length > 1 - ) { - // tslint:disable-next-line:no-any - documentSelector[0].pattern = `${workspaceFolder.uri.fsPath}/**/*`; - } - return documentSelector; - } - protected getExcludedFiles(): string[] { - const list: string[] = ['**/Lib/**', '**/site-packages/**']; - this.getVsCodeExcludeSection('search.exclude', list); - this.getVsCodeExcludeSection('files.exclude', list); - this.getVsCodeExcludeSection('files.watcherExclude', list); - this.getPythonExcludeSection(list); - return list; - } - - protected getVsCodeExcludeSection(setting: string, list: string[]): void { - const states = this.workspace.getConfiguration(setting); - if (states) { - Object.keys(states) - .filter((k) => (k.indexOf('*') >= 0 || k.indexOf('/') >= 0) && states[k]) - .forEach((p) => list.push(p)); - } - } - protected getPythonExcludeSection(list: string[]): void { - const pythonSettings = this.configuration.getSettings(this.resource); - const paths = pythonSettings && pythonSettings.linting ? pythonSettings.linting.ignorePatterns : undefined; - if (paths && Array.isArray(paths)) { - paths.filter((p) => p && p.length > 0).forEach((p) => list.push(p)); - } - } - protected getTypeshedPaths(): string[] { - const settings = this.configuration.getSettings(this.resource); - return settings.analysis.typeshedPaths && settings.analysis.typeshedPaths.length > 0 - ? settings.analysis.typeshedPaths - : [path.join(this.context.extensionPath, this.languageServerFolder, 'Typeshed')]; - } - protected getCacheFolderPath(): string | null { - const settings = this.configuration.getSettings(this.resource); - return settings.analysis.cacheFolderPath && settings.analysis.cacheFolderPath.length > 0 - ? settings.analysis.cacheFolderPath - : null; - } - protected async onSettingsChangedHandler(e?: ConfigurationChangeEvent): Promise { - if (e && !e.affectsConfiguration('python', this.resource)) { - return; - } - this.onSettingsChanged(); - } - @debounceSync(1000) - protected onSettingsChanged(): void { - this.notifyIfSettingsChanged().ignoreErrors(); - } - @traceDecorators.verbose('Changes in python settings detected in analysis options') - protected async notifyIfSettingsChanged(): Promise { - const excludedFiles = this.getExcludedFiles(); - await this.notifyIfValuesHaveChanged(this.excludedFiles, excludedFiles); - - const typeshedPaths = this.getTypeshedPaths(); - await this.notifyIfValuesHaveChanged(this.typeshedPaths, typeshedPaths); - } - - protected async notifyIfValuesHaveChanged(oldArray: string[], newArray: string[]): Promise { - if (newArray.length !== oldArray.length) { - this.didChange.fire(); - return; - } - - for (let i = 0; i < oldArray.length; i += 1) { - if (oldArray[i] !== newArray[i]) { - this.didChange.fire(); - return; - } - } - } - - @debounceSync(1000) - protected onEnvVarChange(): void { - this.notifyifEnvPythonPathChanged().ignoreErrors(); - } - - protected async notifyifEnvPythonPathChanged(): Promise { - const vars = await this.envVarsProvider.getEnvironmentVariables(); - const envPythonPath = vars.PYTHONPATH || ''; - - if (this.envPythonPath !== envPythonPath) { - this.didChange.fire(); - } - } -} diff --git a/src/client/activation/languageServer/constants.ts b/src/client/activation/languageServer/constants.ts deleted file mode 100644 index 30094ca8507a..000000000000 --- a/src/client/activation/languageServer/constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; - -export namespace Commands { - export const ClearAnalyisCache = 'python.analysis.clearCache'; -} diff --git a/src/client/activation/languageServer/languageClientFactory.ts b/src/client/activation/languageServer/languageClientFactory.ts deleted file mode 100644 index 38e923054812..000000000000 --- a/src/client/activation/languageServer/languageClientFactory.ts +++ /dev/null @@ -1,124 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -import { inject, injectable, unmanaged } from 'inversify'; -import * as path from 'path'; -import { LanguageClient, LanguageClientOptions, ServerOptions } from 'vscode-languageclient'; - -import { EXTENSION_ROOT_DIR, PYTHON_LANGUAGE } from '../../common/constants'; -import { IConfigurationService, Resource } from '../../common/types'; -import { IEnvironmentVariablesProvider } from '../../common/variables/types'; -import { IEnvironmentActivationService } from '../../interpreter/activation/types'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { ILanguageClientFactory, ILanguageServerFolderService, IPlatformData } from '../types'; - -// tslint:disable:no-require-imports no-require-imports no-var-requires max-classes-per-file - -const dotNetCommand = 'dotnet'; -const languageClientName = 'Python Tools'; - -export class DotNetDownloadedLanguageClientFactory implements ILanguageClientFactory { - constructor( - private readonly platformData: IPlatformData, - private readonly languageServerFolderService: ILanguageServerFolderService - ) {} - - public async createLanguageClient( - resource: Resource, - _interpreter: PythonInterpreter | undefined, - clientOptions: LanguageClientOptions, - env?: NodeJS.ProcessEnv - ): Promise { - const languageServerFolder = await this.languageServerFolderService.getLanguageServerFolderName(resource); - const serverModule = path.join( - EXTENSION_ROOT_DIR, - languageServerFolder, - this.platformData.engineExecutableName - ); - const options = { stdio: 'pipe', env }; - const serverOptions: ServerOptions = { - run: { command: serverModule, args: [], options }, - debug: { command: serverModule, args: ['--debug'], options } - }; - const vscodeLanguageClient = require('vscode-languageclient') as typeof import('vscode-languageclient'); - return new vscodeLanguageClient.LanguageClient( - PYTHON_LANGUAGE, - languageClientName, - serverOptions, - clientOptions - ); - } -} - -export class DotNetSimpleLanguageClientFactory implements ILanguageClientFactory { - constructor( - private readonly platformData: IPlatformData, - private readonly languageServerFolderService: ILanguageServerFolderService - ) {} - - public async createLanguageClient( - resource: Resource, - _interpreter: PythonInterpreter | undefined, - clientOptions: LanguageClientOptions, - env?: NodeJS.ProcessEnv - ): Promise { - const languageServerFolder = await this.languageServerFolderService.getLanguageServerFolderName(resource); - const options = { stdio: 'pipe', env }; - const serverModule = path.join(EXTENSION_ROOT_DIR, languageServerFolder, this.platformData.engineDllName); - const serverOptions: ServerOptions = { - run: { command: dotNetCommand, args: [serverModule], options }, - debug: { command: dotNetCommand, args: [serverModule, '--debug'], options } - }; - const vscodeLanguageClient = require('vscode-languageclient') as typeof import('vscode-languageclient'); - return new vscodeLanguageClient.LanguageClient( - PYTHON_LANGUAGE, - languageClientName, - serverOptions, - clientOptions - ); - } -} - -@injectable() -export class DotNetLanguageClientFactory implements ILanguageClientFactory { - constructor( - @inject(IConfigurationService) private readonly configurationService: IConfigurationService, - @inject(IEnvironmentVariablesProvider) private readonly envVarsProvider: IEnvironmentVariablesProvider, - @inject(IEnvironmentActivationService) - private readonly environmentActivationService: IEnvironmentActivationService, - @inject(IPlatformData) private readonly platformData: IPlatformData, - @inject(ILanguageServerFolderService) - private readonly languageServerFolderService: ILanguageServerFolderService, - @unmanaged() private readonly downloadedFactory: ILanguageClientFactory, - @unmanaged() private readonly simpleFactory: ILanguageClientFactory - ) {} - - public async createLanguageClient( - resource: Resource, - interpreter: PythonInterpreter | undefined, - clientOptions: LanguageClientOptions - ): Promise { - const settings = this.configurationService.getSettings(resource); - let factory: ILanguageClientFactory; - if (this.platformData && this.languageServerFolderService) { - factory = settings.downloadLanguageServer - ? new DotNetDownloadedLanguageClientFactory(this.platformData, this.languageServerFolderService) - : new DotNetSimpleLanguageClientFactory(this.platformData, this.languageServerFolderService); - } else { - factory = settings.downloadLanguageServer ? this.downloadedFactory : this.simpleFactory; - } - const env = await this.getEnvVars(resource, interpreter); - return factory.createLanguageClient(resource, interpreter, clientOptions, env); - } - - private async getEnvVars( - resource: Resource, - interpreter: PythonInterpreter | undefined - ): Promise { - const envVars = await this.environmentActivationService.getActivatedEnvironmentVariables(resource, interpreter); - if (envVars && Object.keys(envVars).length > 0) { - return envVars; - } - return this.envVarsProvider.getEnvironmentVariables(resource); - } -} diff --git a/src/client/activation/languageServer/languageServerCompatibilityService.ts b/src/client/activation/languageServer/languageServerCompatibilityService.ts deleted file mode 100644 index 48c1e0729595..000000000000 --- a/src/client/activation/languageServer/languageServerCompatibilityService.ts +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IDotNetCompatibilityService } from '../../common/dotnet/types'; -import { traceError } from '../../common/logger'; -import { sendTelemetryEvent } from '../../telemetry'; -import { EventName } from '../../telemetry/constants'; -import { ILanguageServerCompatibilityService } from '../types'; - -@injectable() -export class LanguageServerCompatibilityService implements ILanguageServerCompatibilityService { - constructor( - @inject(IDotNetCompatibilityService) private readonly dotnetCompatibility: IDotNetCompatibilityService - ) {} - public async isSupported(): Promise { - try { - const supported = await this.dotnetCompatibility.isSupported(); - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_PLATFORM_SUPPORTED, undefined, { - supported: supported - }); - return supported; - } catch (ex) { - traceError('Unable to determine whether LS is supported', ex); - sendTelemetryEvent(EventName.PYTHON_LANGUAGE_SERVER_PLATFORM_SUPPORTED, undefined, { - supported: false, - failureType: 'UnknownError' - }); - return false; - } - } -} diff --git a/src/client/activation/languageServer/languageServerExtension.ts b/src/client/activation/languageServer/languageServerExtension.ts deleted file mode 100644 index b2f69abadbee..000000000000 --- a/src/client/activation/languageServer/languageServerExtension.ts +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { Event, EventEmitter } from 'vscode'; -import { ICommandManager } from '../../common/application/types'; -import '../../common/extensions'; -import { IDisposable } from '../../common/types'; -import { ILanguageServerExtension } from '../types'; - -const loadExtensionCommand = 'python._loadLanguageServerExtension'; - -@injectable() -export class LanguageServerExtension implements ILanguageServerExtension { - public loadExtensionArgs?: {}; - protected readonly _invoked = new EventEmitter(); - private disposable?: IDisposable; - constructor(@inject(ICommandManager) private readonly commandManager: ICommandManager) {} - public dispose() { - if (this.disposable) { - this.disposable.dispose(); - } - } - public async register(): Promise { - if (this.disposable) { - return; - } - this.disposable = this.commandManager.registerCommand(loadExtensionCommand, (args) => { - this.loadExtensionArgs = args; - this._invoked.fire(); - }); - } - public get invoked(): Event { - return this._invoked.event; - } -} diff --git a/src/client/activation/languageServer/languageServerFolderService.ts b/src/client/activation/languageServer/languageServerFolderService.ts deleted file mode 100644 index bc89bb95ecea..000000000000 --- a/src/client/activation/languageServer/languageServerFolderService.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IApplicationEnvironment } from '../../common/application/types'; -import { IServiceContainer } from '../../ioc/types'; -import { LanguageServerFolderService } from '../common/languageServerFolderService'; - -@injectable() -export class DotNetLanguageServerFolderService extends LanguageServerFolderService { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - super(serviceContainer, 'languageServer'); - } - - protected getMinimalLanguageServerVersion(): string { - let minVersion = '0.0.0'; - try { - const appEnv = this.serviceContainer.get(IApplicationEnvironment); - if (appEnv) { - minVersion = appEnv.packageJson.languageServerVersion as string; - } - // tslint:disable-next-line: no-empty - } catch {} - return minVersion; - } -} diff --git a/src/client/activation/languageServer/languageServerPackageRepository.ts b/src/client/activation/languageServer/languageServerPackageRepository.ts deleted file mode 100644 index b9c8f3da797e..000000000000 --- a/src/client/activation/languageServer/languageServerPackageRepository.ts +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IServiceContainer } from '../../ioc/types'; -import { - BetaLanguageServerPackageRepository, - DailyLanguageServerPackageRepository, - StableLanguageServerPackageRepository -} from '../common/packageRepository'; - -const languageServerPackageName = 'python-language-server'; - -@injectable() -export class StableDotNetLanguageServerPackageRepository extends StableLanguageServerPackageRepository { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - super(serviceContainer, languageServerPackageName); - } -} - -@injectable() -export class BetaDotNetLanguageServerPackageRepository extends BetaLanguageServerPackageRepository { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - super(serviceContainer, languageServerPackageName); - } -} - -@injectable() -export class DailyDotNetLanguageServerPackageRepository extends DailyLanguageServerPackageRepository { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - super(serviceContainer, languageServerPackageName); - } -} diff --git a/src/client/activation/languageServer/languageServerPackageService.ts b/src/client/activation/languageServer/languageServerPackageService.ts deleted file mode 100644 index 9a912645fb4f..000000000000 --- a/src/client/activation/languageServer/languageServerPackageService.ts +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IApplicationEnvironment } from '../../common/application/types'; -import { IPlatformService } from '../../common/platform/types'; -import { OSType } from '../../common/utils/platform'; -import { IServiceContainer } from '../../ioc/types'; -import { LanguageServerPackageService } from '../common/languageServerPackageService'; -import { PlatformName } from '../types'; - -const downloadBaseFileName = 'Python-Language-Server'; -export const PackageNames = { - [PlatformName.Windows32Bit]: `${downloadBaseFileName}-${PlatformName.Windows32Bit}`, - [PlatformName.Windows64Bit]: `${downloadBaseFileName}-${PlatformName.Windows64Bit}`, - [PlatformName.Linux64Bit]: `${downloadBaseFileName}-${PlatformName.Linux64Bit}`, - [PlatformName.Mac64Bit]: `${downloadBaseFileName}-${PlatformName.Mac64Bit}` -}; - -@injectable() -export class DotNetLanguageServerPackageService extends LanguageServerPackageService { - constructor( - @inject(IServiceContainer) serviceContainer: IServiceContainer, - @inject(IApplicationEnvironment) appEnv: IApplicationEnvironment, - @inject(IPlatformService) platform: IPlatformService - ) { - super(serviceContainer, appEnv, platform); - } - - public getNugetPackageName(): string { - switch (this.platform.osType) { - case OSType.Windows: - return PackageNames[this.platform.is64bit ? PlatformName.Windows64Bit : PlatformName.Windows32Bit]; - case OSType.OSX: - return PackageNames[PlatformName.Mac64Bit]; - default: - return PackageNames[PlatformName.Linux64Bit]; - } - } -} diff --git a/src/client/activation/languageServer/languageServerProxy.ts b/src/client/activation/languageServer/languageServerProxy.ts deleted file mode 100644 index 29d2e318eb96..000000000000 --- a/src/client/activation/languageServer/languageServerProxy.ts +++ /dev/null @@ -1,112 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import '../../common/extensions'; - -import { inject, injectable } from 'inversify'; -import { Disposable, LanguageClient, LanguageClientOptions } from 'vscode-languageclient'; - -import { traceDecorators, traceError } from '../../common/logger'; -import { IConfigurationService, Resource } from '../../common/types'; -import { createDeferred, Deferred, sleep } from '../../common/utils/async'; -import { swallowExceptions } from '../../common/utils/decorators'; -import { noop } from '../../common/utils/misc'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { LanguageServerSymbolProvider } from '../../providers/symbolProvider'; -import { captureTelemetry, sendTelemetryEvent } from '../../telemetry'; -import { EventName } from '../../telemetry/constants'; -import { ITestManagementService } from '../../testing/types'; -import { ProgressReporting } from '../progress'; -import { ILanguageClientFactory, ILanguageServerProxy } from '../types'; - -@injectable() -export class DotNetLanguageServerProxy implements ILanguageServerProxy { - public languageClient: LanguageClient | undefined; - private startupCompleted: Deferred; - private readonly disposables: Disposable[] = []; - private extensionLoadedArgs = new Set<{}>(); - private disposed: boolean = false; - - constructor( - @inject(ILanguageClientFactory) private readonly factory: ILanguageClientFactory, - @inject(ITestManagementService) private readonly testManager: ITestManagementService, - @inject(IConfigurationService) private readonly configurationService: IConfigurationService - ) { - this.startupCompleted = createDeferred(); - } - @traceDecorators.verbose('Stopping Language Server') - public dispose() { - if (this.languageClient) { - // Do not await on this. - this.languageClient.stop().then(noop, (ex) => traceError('Stopping language client failed', ex)); - this.languageClient = undefined; - } - while (this.disposables.length > 0) { - const d = this.disposables.shift()!; - d.dispose(); - } - if (this.startupCompleted.completed) { - this.startupCompleted.reject(new Error('Disposed Language Server')); - this.startupCompleted = createDeferred(); - } - this.disposed = true; - } - - @traceDecorators.error('Failed to start language server') - @captureTelemetry(EventName.PYTHON_LANGUAGE_SERVER_ENABLED, undefined, true) - public async start( - resource: Resource, - interpreter: PythonInterpreter | undefined, - options: LanguageClientOptions - ): Promise { - if (!this.languageClient) { - this.languageClient = await this.factory.createLanguageClient(resource, interpreter, options); - this.disposables.push(this.languageClient!.start()); - await this.serverReady(); - if (this.disposed) { - // Check if it got disposed in the interim. - return; - } - const progressReporting = new ProgressReporting(this.languageClient!); - this.disposables.push(progressReporting); - - const settings = this.configurationService.getSettings(resource); - if (settings.downloadLanguageServer) { - this.languageClient.onTelemetry((telemetryEvent) => { - const eventName = telemetryEvent.EventName || EventName.PYTHON_LANGUAGE_SERVER_TELEMETRY; - sendTelemetryEvent(eventName, telemetryEvent.Measurements, telemetryEvent.Properties); - }); - } - await this.registerTestServices(); - } else { - await this.startupCompleted.promise; - } - } - @traceDecorators.error('Failed to load Language Server extension') - public loadExtension(args?: {}) { - if (this.extensionLoadedArgs.has(args || '')) { - return; - } - this.extensionLoadedArgs.add(args || ''); - this.startupCompleted.promise - .then(() => - this.languageClient!.sendRequest('python/loadExtension', args).then(noop, (ex) => - traceError('Request python/loadExtension failed', ex) - ) - ) - .ignoreErrors(); - } - @captureTelemetry(EventName.PYTHON_LANGUAGE_SERVER_READY, undefined, true) - protected async serverReady(): Promise { - while (this.languageClient && !this.languageClient!.initializeResult) { - await sleep(100); - } - this.startupCompleted.resolve(); - } - @swallowExceptions('Activating Unit Tests Manager for Language Server') - protected async registerTestServices() { - if (!this.languageClient) { - throw new Error('languageClient not initialized'); - } - await this.testManager.activate(new LanguageServerSymbolProvider(this.languageClient!)); - } -} diff --git a/src/client/activation/languageServer/manager.ts b/src/client/activation/languageServer/manager.ts deleted file mode 100644 index 97c1d35e03ae..000000000000 --- a/src/client/activation/languageServer/manager.ts +++ /dev/null @@ -1,126 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import '../../common/extensions'; - -import { inject, injectable, named } from 'inversify'; - -import { traceDecorators } from '../../common/logger'; -import { - BANNER_NAME_LS_SURVEY, - IConfigurationService, - IDisposable, - IExperimentsManager, - IPythonExtensionBanner, - Resource -} from '../../common/types'; -import { debounceSync } from '../../common/utils/decorators'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { IServiceContainer } from '../../ioc/types'; -import { captureTelemetry } from '../../telemetry'; -import { EventName } from '../../telemetry/constants'; -import { LanguageClientMiddleware } from '../languageClientMiddleware'; -import { - ILanguageServerAnalysisOptions, - ILanguageServerExtension, - ILanguageServerFolderService, - ILanguageServerManager, - ILanguageServerProxy, - LanguageServerType -} from '../types'; - -@injectable() -export class DotNetLanguageServerManager implements ILanguageServerManager { - private languageServerProxy?: ILanguageServerProxy; - private resource!: Resource; - private interpreter: PythonInterpreter | undefined; - private middleware: LanguageClientMiddleware | undefined; - private disposables: IDisposable[] = []; - private connected: boolean = false; - constructor( - @inject(IServiceContainer) private readonly serviceContainer: IServiceContainer, - @inject(ILanguageServerAnalysisOptions) private readonly analysisOptions: ILanguageServerAnalysisOptions, - @inject(ILanguageServerExtension) private readonly lsExtension: ILanguageServerExtension, - @inject(IPythonExtensionBanner) - @named(BANNER_NAME_LS_SURVEY) - private readonly surveyBanner: IPythonExtensionBanner, - @inject(ILanguageServerFolderService) private readonly folderService: ILanguageServerFolderService, - @inject(IExperimentsManager) private readonly experimentsManager: IExperimentsManager, - @inject(IConfigurationService) private readonly configService: IConfigurationService - ) {} - public dispose() { - if (this.languageProxy) { - this.languageProxy.dispose(); - } - this.disposables.forEach((d) => d.dispose()); - } - - public get languageProxy() { - return this.languageServerProxy; - } - @traceDecorators.error('Failed to start Language Server') - public async start(resource: Resource, interpreter: PythonInterpreter | undefined): Promise { - if (this.languageProxy) { - throw new Error('Language Server already started'); - } - this.registerCommandHandler(); - this.resource = resource; - this.interpreter = interpreter; - this.analysisOptions.onDidChange(this.restartLanguageServerDebounced, this, this.disposables); - - await this.analysisOptions.initialize(resource, interpreter); - await this.startLanguageServer(); - } - public connect() { - this.connected = true; - this.middleware?.connect(); - } - public disconnect() { - this.connected = false; - this.middleware?.disconnect(); - } - protected registerCommandHandler() { - this.lsExtension.invoked(this.loadExtensionIfNecessary, this, this.disposables); - } - protected loadExtensionIfNecessary() { - if (this.languageProxy && this.lsExtension.loadExtensionArgs) { - this.languageProxy.loadExtension(this.lsExtension.loadExtensionArgs); - } - } - @debounceSync(1000) - protected restartLanguageServerDebounced(): void { - this.restartLanguageServer().ignoreErrors(); - } - @traceDecorators.error('Failed to restart Language Server') - @traceDecorators.verbose('Restarting Language Server') - protected async restartLanguageServer(): Promise { - if (this.languageProxy) { - this.languageProxy.dispose(); - } - await this.startLanguageServer(); - } - @captureTelemetry(EventName.PYTHON_LANGUAGE_SERVER_STARTUP, undefined, true) - @traceDecorators.verbose('Starting Language Server') - protected async startLanguageServer(): Promise { - this.languageServerProxy = this.serviceContainer.get(ILanguageServerProxy); - - const versionPair = await this.folderService.getCurrentLanguageServerDirectory(); - - const options = await this.analysisOptions!.getAnalysisOptions(); - options.middleware = this.middleware = new LanguageClientMiddleware( - this.surveyBanner, - this.experimentsManager, - this.configService, - LanguageServerType.Microsoft, - versionPair?.version.format() - ); - - // Make sure the middleware is connected if we restart and we we're already connected. - if (this.connected) { - this.middleware.connect(); - } - - // Then use this middleware to start a new language client. - await this.languageServerProxy.start(this.resource, this.interpreter, options); - this.loadExtensionIfNecessary(); - } -} diff --git a/src/client/activation/languageServer/outputChannel.ts b/src/client/activation/languageServer/outputChannel.ts deleted file mode 100644 index 2d4815b3af97..000000000000 --- a/src/client/activation/languageServer/outputChannel.ts +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IApplicationShell, ICommandManager } from '../../common/application/types'; -import '../../common/extensions'; -import { IOutputChannel } from '../../common/types'; -import { OutputChannelNames } from '../../common/utils/localize'; -import { ILanguageServerOutputChannel } from '../types'; - -@injectable() -export class LanguageServerOutputChannel implements ILanguageServerOutputChannel { - public output: IOutputChannel | undefined; - private registered = false; - constructor( - @inject(IApplicationShell) private readonly appShell: IApplicationShell, - @inject(ICommandManager) private readonly commandManager: ICommandManager - ) {} - - public get channel() { - if (!this.output) { - this.output = this.appShell.createOutputChannel(OutputChannelNames.languageServer()); - this.registerCommand().ignoreErrors(); - } - return this.output; - } - private async registerCommand() { - if (this.registered) { - return; - } - this.registered = true; - // This controls the visibility of the command used to display the LS Output panel. - // We don't want to display it when Jedi is used instead of LS. - await this.commandManager.executeCommand('setContext', 'python.hasLanguageServerOutputChannel', true); - this.commandManager.registerCommand('python.viewLanguageServerOutput', () => this.output!.show(true)); - } -} diff --git a/src/client/activation/languageServer/platformData.ts b/src/client/activation/languageServer/platformData.ts deleted file mode 100644 index f616be1fc764..000000000000 --- a/src/client/activation/languageServer/platformData.ts +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IPlatformService } from '../../common/platform/types'; -import { IPlatformData } from '../types'; - -export enum PlatformName { - Windows32Bit = 'win-x86', - Windows64Bit = 'win-x64', - Mac64Bit = 'osx-x64', - Linux64Bit = 'linux-x64' -} - -export enum PlatformLSExecutables { - Windows = 'Microsoft.Python.LanguageServer.exe', - MacOS = 'Microsoft.Python.LanguageServer', - Linux = 'Microsoft.Python.LanguageServer' -} - -@injectable() -export class PlatformData implements IPlatformData { - constructor(@inject(IPlatformService) private readonly platform: IPlatformService) {} - public get platformName(): PlatformName { - if (this.platform.isWindows) { - return this.platform.is64bit ? PlatformName.Windows64Bit : PlatformName.Windows32Bit; - } - if (this.platform.isMac) { - return PlatformName.Mac64Bit; - } - if (this.platform.isLinux) { - if (!this.platform.is64bit) { - throw new Error('Microsoft Python Language Server does not support 32-bit Linux.'); - } - return PlatformName.Linux64Bit; - } - throw new Error('Unknown OS platform.'); - } - - public get engineDllName(): string { - return 'Microsoft.Python.LanguageServer.dll'; - } - - public get engineExecutableName(): string { - if (this.platform.isWindows) { - return PlatformLSExecutables.Windows; - } else if (this.platform.isLinux) { - return PlatformLSExecutables.Linux; - } else if (this.platform.isMac) { - return PlatformLSExecutables.MacOS; - } else { - return 'unknown-platform'; - } - } -} diff --git a/src/client/activation/node/activator.ts b/src/client/activation/node/activator.ts deleted file mode 100644 index 89090581b84b..000000000000 --- a/src/client/activation/node/activator.ts +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import { inject, injectable } from 'inversify'; - -import { IWorkspaceService } from '../../common/application/types'; -import { traceDecorators } from '../../common/logger'; -import { IFileSystem } from '../../common/platform/types'; -import { IConfigurationService, Resource } from '../../common/types'; -import { LanguageServerActivatorBase } from '../common/activatorBase'; -import { ILanguageServerDownloader, ILanguageServerFolderService, ILanguageServerManager } from '../types'; - -/** - * Starts the Node.js-based language server managers per workspaces (currently one for first workspace). - * - * @export - * @class NodeLanguageServerActivator - * @implements {ILanguageServerActivator} - * @extends {LanguageServerActivatorBase} - */ -@injectable() -export class NodeLanguageServerActivator extends LanguageServerActivatorBase { - constructor( - @inject(ILanguageServerManager) manager: ILanguageServerManager, - @inject(IWorkspaceService) workspace: IWorkspaceService, - @inject(IFileSystem) fs: IFileSystem, - @inject(ILanguageServerDownloader) lsDownloader: ILanguageServerDownloader, - @inject(ILanguageServerFolderService) languageServerFolderService: ILanguageServerFolderService, - @inject(IConfigurationService) configurationService: IConfigurationService - ) { - super(manager, workspace, fs, lsDownloader, languageServerFolderService, configurationService); - } - - @traceDecorators.error('Failed to ensure language server is available') - public async ensureLanguageServerIsAvailable(resource: Resource): Promise { - await this.ensureLanguageServerFileIsAvailable(resource, 'server.bundle.js'); - } -} diff --git a/src/client/activation/node/analysisOptions.ts b/src/client/activation/node/analysisOptions.ts new file mode 100644 index 000000000000..71295649c25a --- /dev/null +++ b/src/client/activation/node/analysisOptions.ts @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { LanguageClientOptions } from 'vscode-languageclient'; +import { IWorkspaceService } from '../../common/application/types'; + +import { LanguageServerAnalysisOptionsBase } from '../common/analysisOptions'; +import { ILanguageServerOutputChannel } from '../types'; + +export class NodeLanguageServerAnalysisOptions extends LanguageServerAnalysisOptionsBase { + // eslint-disable-next-line @typescript-eslint/no-useless-constructor + constructor(lsOutputChannel: ILanguageServerOutputChannel, workspace: IWorkspaceService) { + super(lsOutputChannel, workspace); + } + + protected getConfigSectionsToSynchronize(): string[] { + return [...super.getConfigSectionsToSynchronize(), 'jupyter.runStartupCommands']; + } + + // eslint-disable-next-line class-methods-use-this + protected async getInitializationOptions(): Promise { + return ({ + experimentationSupport: true, + trustedWorkspaceSupport: true, + } as unknown) as LanguageClientOptions; + } +} diff --git a/src/client/activation/node/languageClientFactory.ts b/src/client/activation/node/languageClientFactory.ts index 8490c4910041..9543f265468f 100644 --- a/src/client/activation/node/languageClientFactory.ts +++ b/src/client/activation/node/languageClientFactory.ts @@ -1,39 +1,34 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -import { inject, injectable } from 'inversify'; import * as path from 'path'; -import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient'; +import { LanguageClient, LanguageClientOptions, ServerOptions, TransportKind } from 'vscode-languageclient/node'; -import { EXTENSION_ROOT_DIR, PYTHON_LANGUAGE } from '../../common/constants'; +import { PYLANCE_EXTENSION_ID, PYTHON_LANGUAGE } from '../../common/constants'; import { IFileSystem } from '../../common/platform/types'; -import { Resource } from '../../common/types'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { ILanguageClientFactory, ILanguageServerFolderService } from '../types'; -import { FileBasedCancellationStrategy } from './cancellationUtils'; +import { IExtensions, Resource } from '../../common/types'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; +import { FileBasedCancellationStrategy } from '../common/cancellationUtils'; +import { ILanguageClientFactory } from '../types'; -// tslint:disable:no-require-imports no-require-imports no-var-requires max-classes-per-file -const languageClientName = 'Python Tools'; +export const PYLANCE_NAME = 'Pylance'; -@injectable() export class NodeLanguageClientFactory implements ILanguageClientFactory { - constructor( - @inject(IFileSystem) private readonly fs: IFileSystem, - @inject(ILanguageServerFolderService) private readonly languageServerFolderService: ILanguageServerFolderService - ) {} + constructor(private readonly fs: IFileSystem, private readonly extensions: IExtensions) {} public async createLanguageClient( - resource: Resource, - _interpreter: PythonInterpreter | undefined, - clientOptions: LanguageClientOptions + _resource: Resource, + _interpreter: PythonEnvironment | undefined, + clientOptions: LanguageClientOptions, ): Promise { // this must exist for node language client const commandArgs = (clientOptions.connectionOptions ?.cancellationStrategy as FileBasedCancellationStrategy).getCommandLineArguments(); - const languageServerFolder = await this.languageServerFolderService.getLanguageServerFolderName(resource); - const bundlePath = path.join(EXTENSION_ROOT_DIR, languageServerFolder, 'server.bundle.js'); - const nonBundlePath = path.join(EXTENSION_ROOT_DIR, languageServerFolder, 'server.js'); + const extension = this.extensions.getExtension(PYLANCE_EXTENSION_ID); + const languageServerFolder = extension ? extension.extensionPath : ''; + const bundlePath = path.join(languageServerFolder, 'dist', 'server.bundle.js'); + const nonBundlePath = path.join(languageServerFolder, 'dist', 'server.js'); const modulePath = (await this.fs.fileExists(nonBundlePath)) ? nonBundlePath : bundlePath; const debugOptions = { execArgv: ['--nolazy', '--inspect=6600'] }; @@ -42,7 +37,7 @@ export class NodeLanguageClientFactory implements ILanguageClientFactory { run: { module: bundlePath, transport: TransportKind.ipc, - args: commandArgs + args: commandArgs, }, // In debug mode, use the non-bundled code if it's present. The production // build includes only the bundled package, so we don't want to crash if @@ -51,16 +46,10 @@ export class NodeLanguageClientFactory implements ILanguageClientFactory { module: modulePath, transport: TransportKind.ipc, options: debugOptions, - args: commandArgs - } + args: commandArgs, + }, }; - const vscodeLanguageClient = require('vscode-languageclient') as typeof import('vscode-languageclient'); - return new vscodeLanguageClient.LanguageClient( - PYTHON_LANGUAGE, - languageClientName, - serverOptions, - clientOptions - ); + return new LanguageClient(PYTHON_LANGUAGE, PYLANCE_NAME, serverOptions, clientOptions); } } diff --git a/src/client/activation/node/languageClientMiddleware.ts b/src/client/activation/node/languageClientMiddleware.ts new file mode 100644 index 000000000000..dfd65f1bb418 --- /dev/null +++ b/src/client/activation/node/languageClientMiddleware.ts @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { IServiceContainer } from '../../ioc/types'; +import { LanguageClientMiddleware } from '../languageClientMiddleware'; + +import { LanguageServerType } from '../types'; + +export class NodeLanguageClientMiddleware extends LanguageClientMiddleware { + public constructor(serviceContainer: IServiceContainer, serverVersion?: string) { + super(serviceContainer, LanguageServerType.Node, serverVersion); + } +} diff --git a/src/client/activation/node/languageServerFolderService.ts b/src/client/activation/node/languageServerFolderService.ts deleted file mode 100644 index dc81535c7bd3..000000000000 --- a/src/client/activation/node/languageServerFolderService.ts +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IServiceContainer } from '../../ioc/types'; -import { LanguageServerFolderService } from '../common/languageServerFolderService'; - -@injectable() -export class NodeLanguageServerFolderService extends LanguageServerFolderService { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - super(serviceContainer, 'nodeLanguageServer'); - } - - protected getMinimalLanguageServerVersion(): string { - return '0.0.0'; - } -} diff --git a/src/client/activation/node/languageServerPackageRepository.ts b/src/client/activation/node/languageServerPackageRepository.ts deleted file mode 100644 index 39ab7ac86a78..000000000000 --- a/src/client/activation/node/languageServerPackageRepository.ts +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IWorkspaceService } from '../../common/application/types'; -import { IServiceContainer } from '../../ioc/types'; -import { - BetaLanguageServerPackageRepository, - DailyLanguageServerPackageRepository, - StableLanguageServerPackageRepository -} from '../common/packageRepository'; - -@injectable() -export class StableNodeLanguageServerPackageRepository extends StableLanguageServerPackageRepository { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - const config = serviceContainer.get(IWorkspaceService).getConfiguration('python'); - const packageName = config.get('blobName') || ''; - super(serviceContainer, packageName); - } -} - -@injectable() -export class BetaNodeLanguageServerPackageRepository extends BetaLanguageServerPackageRepository { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - const config = serviceContainer.get(IWorkspaceService).getConfiguration('python'); - const packageName = config.get('blobName') || ''; - super(serviceContainer, packageName); - } -} - -@injectable() -export class DailyNodeLanguageServerPackageRepository extends DailyLanguageServerPackageRepository { - constructor(@inject(IServiceContainer) serviceContainer: IServiceContainer) { - const config = serviceContainer.get(IWorkspaceService).getConfiguration('python'); - const packageName = config.get('blobName') || ''; - super(serviceContainer, packageName); - } -} diff --git a/src/client/activation/node/languageServerPackageService.ts b/src/client/activation/node/languageServerPackageService.ts deleted file mode 100644 index feacaba70a8a..000000000000 --- a/src/client/activation/node/languageServerPackageService.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { IApplicationEnvironment, IWorkspaceService } from '../../common/application/types'; -import { IPlatformService } from '../../common/platform/types'; -import { IServiceContainer } from '../../ioc/types'; -import { LanguageServerPackageService } from '../common/languageServerPackageService'; - -@injectable() -export class NodeLanguageServerPackageService extends LanguageServerPackageService { - constructor( - @inject(IServiceContainer) serviceContainer: IServiceContainer, - @inject(IApplicationEnvironment) appEnv: IApplicationEnvironment, - @inject(IPlatformService) platform: IPlatformService - ) { - super(serviceContainer, appEnv, platform); - } - - public getNugetPackageName(): string { - const config = this.serviceContainer.get(IWorkspaceService).getConfiguration('python'); - return config.get('packageName') || ''; - } -} diff --git a/src/client/activation/node/languageServerProxy.ts b/src/client/activation/node/languageServerProxy.ts index 0ff4e1fa1e50..45d1d1a17fee 100644 --- a/src/client/activation/node/languageServerProxy.ts +++ b/src/client/activation/node/languageServerProxy.ts @@ -2,111 +2,235 @@ // Licensed under the MIT License. import '../../common/extensions'; -import { inject, injectable } from 'inversify'; -import { Disposable, LanguageClient, LanguageClientOptions } from 'vscode-languageclient'; - -import { traceDecorators, traceError } from '../../common/logger'; -import { IConfigurationService, Resource } from '../../common/types'; -import { createDeferred, Deferred, sleep } from '../../common/utils/async'; -import { swallowExceptions } from '../../common/utils/decorators'; -import { noop } from '../../common/utils/misc'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { LanguageServerSymbolProvider } from '../../providers/symbolProvider'; +import { + DidChangeConfigurationNotification, + Disposable, + LanguageClient, + LanguageClientOptions, +} from 'vscode-languageclient/node'; + +import { Extension } from 'vscode'; +import { IExperimentService, IExtensions, IInterpreterPathService, Resource } from '../../common/types'; +import { IEnvironmentVariablesProvider } from '../../common/variables/types'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; import { captureTelemetry, sendTelemetryEvent } from '../../telemetry'; import { EventName } from '../../telemetry/constants'; -import { ITestManagementService } from '../../testing/types'; +import { FileBasedCancellationStrategy } from '../common/cancellationUtils'; import { ProgressReporting } from '../progress'; import { ILanguageClientFactory, ILanguageServerProxy } from '../types'; -import { FileBasedCancellationStrategy } from './cancellationUtils'; +import { traceDecoratorError, traceDecoratorVerbose, traceError } from '../../logging'; +import { IWorkspaceService } from '../../common/application/types'; +import { PYLANCE_EXTENSION_ID } from '../../common/constants'; +import { PylanceApi } from './pylanceApi'; + +// eslint-disable-next-line @typescript-eslint/no-namespace +namespace InExperiment { + export const Method = 'python/inExperiment'; + + export interface IRequest { + experimentName: string; + } + + export interface IResponse { + inExperiment: boolean; + } +} + +// eslint-disable-next-line @typescript-eslint/no-namespace +namespace GetExperimentValue { + export const Method = 'python/getExperimentValue'; + + export interface IRequest { + experimentName: string; + } + + export interface IResponse { + value: T | undefined; + } +} -@injectable() export class NodeLanguageServerProxy implements ILanguageServerProxy { public languageClient: LanguageClient | undefined; - private startupCompleted: Deferred; + private cancellationStrategy: FileBasedCancellationStrategy | undefined; + private readonly disposables: Disposable[] = []; - private disposed: boolean = false; + + private lsVersion: string | undefined; + + private pylanceApi: PylanceApi | undefined; constructor( - @inject(ILanguageClientFactory) private readonly factory: ILanguageClientFactory, - @inject(ITestManagementService) private readonly testManager: ITestManagementService, - @inject(IConfigurationService) private readonly configurationService: IConfigurationService - ) { - this.startupCompleted = createDeferred(); + private readonly factory: ILanguageClientFactory, + private readonly experimentService: IExperimentService, + private readonly interpreterPathService: IInterpreterPathService, + private readonly environmentService: IEnvironmentVariablesProvider, + private readonly workspace: IWorkspaceService, + private readonly extensions: IExtensions, + ) {} + + private static versionTelemetryProps(instance: NodeLanguageServerProxy) { + return { + lsVersion: instance.lsVersion, + }; } - @traceDecorators.verbose('Stopping Language Server') - public dispose() { - if (this.languageClient) { - // Do not await on this. - this.languageClient.stop().then(noop, (ex) => traceError('Stopping language client failed', ex)); - this.languageClient = undefined; + @traceDecoratorVerbose('Disposing language server') + public dispose(): void { + this.stop().ignoreErrors(); + } + + @traceDecoratorError('Failed to start language server') + @captureTelemetry( + EventName.LANGUAGE_SERVER_ENABLED, + undefined, + true, + undefined, + NodeLanguageServerProxy.versionTelemetryProps, + ) + public async start( + resource: Resource, + interpreter: PythonEnvironment | undefined, + options: LanguageClientOptions, + ): Promise { + const extension = await this.getPylanceExtension(); + this.lsVersion = extension?.packageJSON.version || '0'; + + const api = extension?.exports; + if (api && api.client && api.client.isEnabled()) { + this.pylanceApi = api; + await api.client.start(); + return; } - if (this.cancellationStrategy) { - this.cancellationStrategy.dispose(); - this.cancellationStrategy = undefined; + + this.cancellationStrategy = new FileBasedCancellationStrategy(); + options.connectionOptions = { cancellationStrategy: this.cancellationStrategy }; + + const client = await this.factory.createLanguageClient(resource, interpreter, options); + this.registerHandlers(client, resource); + + this.disposables.push( + this.workspace.onDidGrantWorkspaceTrust(() => { + client.sendNotification('python/workspaceTrusted', { isTrusted: true }); + }), + ); + + await client.start(); + + this.languageClient = client; + } + + @traceDecoratorVerbose('Disposing language server') + public async stop(): Promise { + if (this.pylanceApi) { + const api = this.pylanceApi; + this.pylanceApi = undefined; + await api.client!.stop(); } + while (this.disposables.length > 0) { const d = this.disposables.shift()!; d.dispose(); } - if (this.startupCompleted.completed) { - this.startupCompleted.reject(new Error('Disposed Language Server')); - this.startupCompleted = createDeferred(); - } - this.disposed = true; - } - @traceDecorators.error('Failed to start language server') - @captureTelemetry(EventName.LANGUAGE_SERVER_ENABLED, undefined, true) - public async start( - resource: Resource, - interpreter: PythonInterpreter | undefined, - options: LanguageClientOptions - ): Promise { - if (!this.languageClient) { - this.cancellationStrategy = new FileBasedCancellationStrategy(); - options.connectionOptions = { cancellationStrategy: this.cancellationStrategy }; - - this.languageClient = await this.factory.createLanguageClient(resource, interpreter, options); - this.disposables.push(this.languageClient!.start()); - await this.serverReady(); - if (this.disposed) { - // Check if it got disposed in the interim. - return; - } - const progressReporting = new ProgressReporting(this.languageClient!); - this.disposables.push(progressReporting); - - const settings = this.configurationService.getSettings(resource); - if (settings.downloadLanguageServer) { - this.languageClient.onTelemetry((telemetryEvent) => { - const eventName = telemetryEvent.EventName || EventName.PYTHON_LANGUAGE_SERVER_TELEMETRY; - sendTelemetryEvent(eventName, telemetryEvent.Measurements, telemetryEvent.Properties); - }); + if (this.languageClient) { + const client = this.languageClient; + this.languageClient = undefined; + + try { + await client.stop(); + await client.dispose(); + } catch (ex) { + traceError('Stopping language client failed', ex); } - await this.registerTestServices(); - } else { - await this.startupCompleted.promise; + } + + if (this.cancellationStrategy) { + this.cancellationStrategy.dispose(); + this.cancellationStrategy = undefined; } } - // tslint:disable-next-line: no-empty - public loadExtension(_args?: {}) {} + // eslint-disable-next-line class-methods-use-this + public loadExtension(): void { + // No body. + } - @captureTelemetry(EventName.LANGUAGE_SERVER_READY, undefined, true) - protected async serverReady(): Promise { - while (this.languageClient && !this.languageClient!.initializeResult) { - await sleep(100); - } - this.startupCompleted.resolve(); + @captureTelemetry( + EventName.LANGUAGE_SERVER_READY, + undefined, + true, + undefined, + NodeLanguageServerProxy.versionTelemetryProps, + ) + private registerHandlers(client: LanguageClient, _resource: Resource) { + const progressReporting = new ProgressReporting(client); + this.disposables.push(progressReporting); + + this.disposables.push( + this.interpreterPathService.onDidChange(() => { + // Manually send didChangeConfiguration in order to get the server to requery + // the workspace configurations (to then pick up pythonPath set in the middleware). + // This is needed as interpreter changes via the interpreter path service happen + // outside of VS Code's settings (which would mean VS Code sends the config updates itself). + client.sendNotification(DidChangeConfigurationNotification.type, { + settings: null, + }); + }), + ); + this.disposables.push( + this.environmentService.onDidEnvironmentVariablesChange(() => { + client.sendNotification(DidChangeConfigurationNotification.type, { + settings: null, + }); + }), + ); + + client.onTelemetry((telemetryEvent) => { + const eventName = telemetryEvent.EventName || EventName.LANGUAGE_SERVER_TELEMETRY; + const formattedProperties = { + ...telemetryEvent.Properties, + // Replace all slashes in the method name so it doesn't get scrubbed by @vscode/extension-telemetry. + method: telemetryEvent.Properties.method?.replace(/\//g, '.'), + }; + sendTelemetryEvent(eventName, telemetryEvent.Measurements, formattedProperties, telemetryEvent.Exception); + }); + + client.onRequest( + InExperiment.Method, + async (params: InExperiment.IRequest): Promise => { + const inExperiment = await this.experimentService.inExperiment(params.experimentName); + return { inExperiment }; + }, + ); + + client.onRequest( + GetExperimentValue.Method, + async ( + params: GetExperimentValue.IRequest, + ): Promise> => { + const value = await this.experimentService.getExperimentValue(params.experimentName); + return { value }; + }, + ); + + this.disposables.push( + client.onRequest('python/isTrustedWorkspace', async () => ({ + isTrusted: this.workspace.isTrusted, + })), + ); } - @swallowExceptions('Activating Unit Tests Manager for Language Server') - protected async registerTestServices() { - if (!this.languageClient) { - throw new Error('languageClient not initialized'); + private async getPylanceExtension(): Promise | undefined> { + const extension = this.extensions.getExtension(PYLANCE_EXTENSION_ID); + if (!extension) { + return undefined; + } + + if (!extension.isActive) { + await extension.activate(); } - await this.testManager.activate(new LanguageServerSymbolProvider(this.languageClient!)); + + return extension; } } diff --git a/src/client/activation/node/manager.ts b/src/client/activation/node/manager.ts index 7889e3854c91..5a66e4abecd0 100644 --- a/src/client/activation/node/manager.ts +++ b/src/client/activation/node/manager.ts @@ -2,113 +2,122 @@ // Licensed under the MIT License. import '../../common/extensions'; -import { inject, injectable, named } from 'inversify'; - -import { traceDecorators } from '../../common/logger'; -import { - BANNER_NAME_LS_SURVEY, - IConfigurationService, - IDisposable, - IExperimentsManager, - IPythonExtensionBanner, - Resource -} from '../../common/types'; +import { ICommandManager } from '../../common/application/types'; +import { IDisposable, IExtensions, Resource } from '../../common/types'; import { debounceSync } from '../../common/utils/decorators'; -import { PythonInterpreter } from '../../interpreter/contracts'; import { IServiceContainer } from '../../ioc/types'; -import { captureTelemetry } from '../../telemetry'; +import { PythonEnvironment } from '../../pythonEnvironments/info'; +import { captureTelemetry, sendTelemetryEvent } from '../../telemetry'; import { EventName } from '../../telemetry/constants'; -import { LanguageClientMiddleware } from '../languageClientMiddleware'; -import { - ILanguageServerAnalysisOptions, - ILanguageServerFolderService, - ILanguageServerManager, - ILanguageServerProxy, - LanguageServerType -} from '../types'; - -@injectable() +import { Commands } from '../commands'; +import { NodeLanguageClientMiddleware } from './languageClientMiddleware'; +import { ILanguageServerAnalysisOptions, ILanguageServerManager } from '../types'; +import { traceDecoratorError, traceDecoratorVerbose } from '../../logging'; +import { PYLANCE_EXTENSION_ID } from '../../common/constants'; +import { NodeLanguageServerProxy } from './languageServerProxy'; + export class NodeLanguageServerManager implements ILanguageServerManager { - private languageServerProxy?: ILanguageServerProxy; private resource!: Resource; - private interpreter: PythonInterpreter | undefined; - private middleware: LanguageClientMiddleware | undefined; + + private interpreter: PythonEnvironment | undefined; + + private middleware: NodeLanguageClientMiddleware | undefined; + private disposables: IDisposable[] = []; - private connected: boolean = false; + + private connected = false; + + private lsVersion: string | undefined; + + private started = false; + + private static commandDispose: IDisposable; + constructor( - @inject(IServiceContainer) private readonly serviceContainer: IServiceContainer, - @inject(ILanguageServerAnalysisOptions) private readonly analysisOptions: ILanguageServerAnalysisOptions, - @inject(IPythonExtensionBanner) - @named(BANNER_NAME_LS_SURVEY) - private readonly surveyBanner: IPythonExtensionBanner, - @inject(ILanguageServerFolderService) private readonly folderService: ILanguageServerFolderService, - @inject(IExperimentsManager) private readonly experimentsManager: IExperimentsManager, - @inject(IConfigurationService) private readonly configService: IConfigurationService - ) {} - - public dispose() { - if (this.languageProxy) { - this.languageProxy.dispose(); + private readonly serviceContainer: IServiceContainer, + private readonly analysisOptions: ILanguageServerAnalysisOptions, + private readonly languageServerProxy: NodeLanguageServerProxy, + commandManager: ICommandManager, + private readonly extensions: IExtensions, + ) { + if (NodeLanguageServerManager.commandDispose) { + NodeLanguageServerManager.commandDispose.dispose(); } - this.disposables.forEach((d) => d.dispose()); + NodeLanguageServerManager.commandDispose = commandManager.registerCommand(Commands.RestartLS, () => { + sendTelemetryEvent(EventName.LANGUAGE_SERVER_RESTART, undefined, { reason: 'command' }); + this.restartLanguageServer().ignoreErrors(); + }); + } + + private static versionTelemetryProps(instance: NodeLanguageServerManager) { + return { + lsVersion: instance.lsVersion, + }; } - public get languageProxy() { - return this.languageServerProxy; + public dispose(): void { + this.stopLanguageServer().ignoreErrors(); + NodeLanguageServerManager.commandDispose.dispose(); + this.disposables.forEach((d) => d.dispose()); } - @traceDecorators.error('Failed to start Language Server') - public async start(resource: Resource, interpreter: PythonInterpreter | undefined): Promise { - if (this.languageProxy) { - throw new Error('Language Server already started'); + @traceDecoratorError('Failed to start language server') + public async start(resource: Resource, interpreter: PythonEnvironment | undefined): Promise { + if (this.started) { + throw new Error('Language server already started'); } this.resource = resource; this.interpreter = interpreter; this.analysisOptions.onDidChange(this.restartLanguageServerDebounced, this, this.disposables); + const extension = this.extensions.getExtension(PYLANCE_EXTENSION_ID); + this.lsVersion = extension?.packageJSON.version || '0'; + await this.analysisOptions.initialize(resource, interpreter); await this.startLanguageServer(); + + this.started = true; } - public connect() { - this.connected = true; - this.middleware?.connect(); + public connect(): void { + if (!this.connected) { + this.connected = true; + this.middleware?.connect(); + } } - public disconnect() { - this.connected = false; - this.middleware?.disconnect(); + public disconnect(): void { + if (this.connected) { + this.connected = false; + this.middleware?.disconnect(); + } } @debounceSync(1000) protected restartLanguageServerDebounced(): void { + sendTelemetryEvent(EventName.LANGUAGE_SERVER_RESTART, undefined, { reason: 'settings' }); this.restartLanguageServer().ignoreErrors(); } - @traceDecorators.error('Failed to restart Language Server') - @traceDecorators.verbose('Restarting Language Server') + @traceDecoratorError('Failed to restart language server') + @traceDecoratorVerbose('Restarting language server') protected async restartLanguageServer(): Promise { - if (this.languageProxy) { - this.languageProxy.dispose(); - } + await this.stopLanguageServer(); await this.startLanguageServer(); } - @captureTelemetry(EventName.LANGUAGE_SERVER_STARTUP, undefined, true) - @traceDecorators.verbose('Starting Language Server') + @captureTelemetry( + EventName.LANGUAGE_SERVER_STARTUP, + undefined, + true, + undefined, + NodeLanguageServerManager.versionTelemetryProps, + ) + @traceDecoratorVerbose('Starting language server') protected async startLanguageServer(): Promise { - this.languageServerProxy = this.serviceContainer.get(ILanguageServerProxy); - - const versionPair = await this.folderService.getCurrentLanguageServerDirectory(); - - const options = await this.analysisOptions!.getAnalysisOptions(); - options.middleware = this.middleware = new LanguageClientMiddleware( - this.surveyBanner, - this.experimentsManager, - this.configService, - LanguageServerType.Node, - versionPair?.version.format() - ); + const options = await this.analysisOptions.getAnalysisOptions(); + this.middleware = new NodeLanguageClientMiddleware(this.serviceContainer, this.lsVersion); + options.middleware = this.middleware; // Make sure the middleware is connected if we restart and we we're already connected. if (this.connected) { @@ -118,4 +127,11 @@ export class NodeLanguageServerManager implements ILanguageServerManager { // Then use this middleware to start a new language client. await this.languageServerProxy.start(this.resource, this.interpreter, options); } + + @traceDecoratorVerbose('Stopping language server') + protected async stopLanguageServer(): Promise { + if (this.languageServerProxy) { + await this.languageServerProxy.stop(); + } + } } diff --git a/src/client/activation/node/pylanceApi.ts b/src/client/activation/node/pylanceApi.ts new file mode 100644 index 000000000000..4b3d21d7527e --- /dev/null +++ b/src/client/activation/node/pylanceApi.ts @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +import { + CancellationToken, + CompletionContext, + CompletionItem, + CompletionList, + Position, + TextDocument, + Uri, +} from 'vscode'; + +export interface PylanceApi { + client?: { + isEnabled(): boolean; + start(): Promise; + stop(): Promise; + }; + notebook?: { + registerJupyterPythonPathFunction(func: (uri: Uri) => Promise): void; + getCompletionItems( + document: TextDocument, + position: Position, + context: CompletionContext, + token: CancellationToken, + ): Promise; + }; +} diff --git a/src/client/activation/none/activator.ts b/src/client/activation/none/activator.ts deleted file mode 100644 index 316099104141..000000000000 --- a/src/client/activation/none/activator.ts +++ /dev/null @@ -1,100 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import { injectable } from 'inversify'; -import { - CancellationToken, - CodeLens, - CompletionContext, - CompletionItem, - CompletionList, - DocumentSymbol, - Hover, - Location, - LocationLink, - Position, - ProviderResult, - ReferenceContext, - SignatureHelp, - SignatureHelpContext, - SymbolInformation, - TextDocument, - WorkspaceEdit -} from 'vscode'; -import { Resource } from '../../common/types'; -import { PythonInterpreter } from '../../interpreter/contracts'; -import { ILanguageServerActivator } from '../types'; - -/** - * Provides 'no language server' pseudo-activator. - * - * @export - * @class NoLanguageServerExtensionActivator - * @implements {ILanguageServerActivator} - */ -@injectable() -export class NoLanguageServerExtensionActivator implements ILanguageServerActivator { - // tslint:disable-next-line: no-empty - public async start(_resource: Resource, _interpreter?: PythonInterpreter): Promise {} - // tslint:disable-next-line: no-empty - public dispose(): void {} - // tslint:disable-next-line: no-empty - public activate(): void {} - // tslint:disable-next-line: no-empty - public deactivate(): void {} - - public provideRenameEdits( - _document: TextDocument, - _position: Position, - _newName: string, - _token: CancellationToken - ): ProviderResult { - return null; - } - public provideDefinition( - _document: TextDocument, - _position: Position, - _token: CancellationToken - ): ProviderResult { - return null; - } - public provideHover( - _document: TextDocument, - _position: Position, - _token: CancellationToken - ): ProviderResult { - return null; - } - public provideReferences( - _document: TextDocument, - _position: Position, - _context: ReferenceContext, - _token: CancellationToken - ): ProviderResult { - return null; - } - public provideCompletionItems( - _document: TextDocument, - _position: Position, - _token: CancellationToken, - _context: CompletionContext - ): ProviderResult { - return null; - } - public provideCodeLenses(_document: TextDocument, _token: CancellationToken): ProviderResult { - return null; - } - public provideDocumentSymbols( - _document: TextDocument, - _token: CancellationToken - ): ProviderResult { - return null; - } - public provideSignatureHelp( - _document: TextDocument, - _position: Position, - _token: CancellationToken, - _context: SignatureHelpContext - ): ProviderResult { - return null; - } -} diff --git a/src/client/activation/partialModeStatus.ts b/src/client/activation/partialModeStatus.ts new file mode 100644 index 000000000000..1105f6529ac8 --- /dev/null +++ b/src/client/activation/partialModeStatus.ts @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// IMPORTANT: Do not import any node fs related modules here, as they do not work in browser. +import { inject, injectable } from 'inversify'; +import type * as vscodeTypes from 'vscode'; +import { IWorkspaceService } from '../common/application/types'; +import { IDisposableRegistry } from '../common/types'; +import { Common, LanguageService } from '../common/utils/localize'; +import { IExtensionSingleActivationService } from './types'; + +/** + * Only partial features are available when running in untrusted or a + * virtual workspace, this creates a UI element to indicate that. + */ +@injectable() +export class PartialModeStatusItem implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: true, virtualWorkspace: true }; + + constructor( + @inject(IWorkspaceService) private readonly workspace: IWorkspaceService, + @inject(IDisposableRegistry) private readonly disposables: IDisposableRegistry, + ) {} + + public async activate(): Promise { + const { isTrusted, isVirtualWorkspace } = this.workspace; + if (isTrusted && !isVirtualWorkspace) { + return; + } + const statusItem = this.createStatusItem(); + if (statusItem) { + this.disposables.push(statusItem); + } + } + + private createStatusItem() { + // eslint-disable-next-line global-require + const vscode = require('vscode') as typeof vscodeTypes; + if ('createLanguageStatusItem' in vscode.languages) { + const statusItem = vscode.languages.createLanguageStatusItem('python.projectStatus', { + language: 'python', + }); + statusItem.name = LanguageService.statusItem.name; + statusItem.severity = vscode.LanguageStatusSeverity.Warning; + statusItem.text = LanguageService.statusItem.text; + statusItem.detail = !this.workspace.isTrusted + ? LanguageService.statusItem.detail + : LanguageService.virtualWorkspaceStatusItem.detail; + statusItem.command = { + title: Common.learnMore, + command: 'vscode.open', + arguments: [vscode.Uri.parse('https://aka.ms/AAdzyh4')], + }; + return statusItem; + } + return undefined; + } +} diff --git a/src/client/activation/progress.ts b/src/client/activation/progress.ts index 8042377d821e..5abcb9e553c0 100644 --- a/src/client/activation/progress.ts +++ b/src/client/activation/progress.ts @@ -4,7 +4,7 @@ 'use strict'; import { Progress, ProgressLocation, window } from 'vscode'; -import { Disposable, LanguageClient } from 'vscode-languageclient'; +import { Disposable, LanguageClient } from 'vscode-languageclient/node'; import { createDeferred, Deferred } from '../common/utils/async'; export class ProgressReporting implements Disposable { @@ -31,7 +31,7 @@ export class ProgressReporting implements Disposable { if (!this.progress) { this.beginProgress(); } - this.progress!.report({ message: m }); + this.progress!.report({ message: m }); // NOSONAR }); this.languageClient.onNotification('python/endProgress', (_) => { @@ -55,12 +55,12 @@ export class ProgressReporting implements Disposable { window.withProgress( { location: ProgressLocation.Window, - title: '' + title: '', }, (progress) => { this.progress = progress; return this.progressDeferred!.promise; - } + }, ); } } diff --git a/src/client/activation/refCountedLanguageServer.ts b/src/client/activation/refCountedLanguageServer.ts deleted file mode 100644 index b6bf48827c48..000000000000 --- a/src/client/activation/refCountedLanguageServer.ts +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -import { - CancellationToken, - CodeLens, - CompletionContext, - CompletionItem, - CompletionList, - DocumentSymbol, - Hover, - Location, - LocationLink, - Position, - ProviderResult, - ReferenceContext, - SignatureHelp, - SignatureHelpContext, - SymbolInformation, - TextDocument, - TextDocumentContentChangeEvent, - WorkspaceEdit -} from 'vscode'; - -import { Resource } from '../common/types'; -import { noop } from '../common/utils/misc'; -import { PythonInterpreter } from '../interpreter/contracts'; -import { ILanguageServerActivator, LanguageServerType } from './types'; - -export class RefCountedLanguageServer implements ILanguageServerActivator { - private refCount = 1; - constructor( - private impl: ILanguageServerActivator, - private _type: LanguageServerType, - private disposeCallback: () => void - ) {} - - public increment = () => { - this.refCount += 1; - }; - - public get type() { - return this._type; - } - - public dispose() { - this.refCount = Math.max(0, this.refCount - 1); - if (this.refCount === 0) { - this.disposeCallback(); - } - } - - public start(_resource: Resource, _interpreter: PythonInterpreter | undefined): Promise { - throw new Error('Server should have already been started. Do not start the wrapper.'); - } - - public activate() { - this.impl.activate(); - } - - public deactivate() { - this.impl.deactivate(); - } - - public clearAnalysisCache() { - this.impl.clearAnalysisCache ? this.impl.clearAnalysisCache() : noop(); - } - - public handleChanges(document: TextDocument, changes: TextDocumentContentChangeEvent[]) { - this.impl.handleChanges ? this.impl.handleChanges(document, changes) : noop(); - } - - public handleOpen(document: TextDocument) { - this.impl.handleOpen ? this.impl.handleOpen(document) : noop(); - } - - public provideRenameEdits( - document: TextDocument, - position: Position, - newName: string, - token: CancellationToken - ): ProviderResult { - return this.impl.provideRenameEdits(document, position, newName, token); - } - public provideDefinition( - document: TextDocument, - position: Position, - token: CancellationToken - ): ProviderResult { - return this.impl.provideDefinition(document, position, token); - } - public provideHover(document: TextDocument, position: Position, token: CancellationToken): ProviderResult { - return this.impl.provideHover(document, position, token); - } - public provideReferences( - document: TextDocument, - position: Position, - context: ReferenceContext, - token: CancellationToken - ): ProviderResult { - return this.impl.provideReferences(document, position, context, token); - } - public provideCompletionItems( - document: TextDocument, - position: Position, - token: CancellationToken, - context: CompletionContext - ): ProviderResult { - return this.impl.provideCompletionItems(document, position, token, context); - } - public resolveCompletionItem(item: CompletionItem, token: CancellationToken): ProviderResult { - if (this.impl.resolveCompletionItem) { - return this.impl.resolveCompletionItem(item, token); - } - } - public provideCodeLenses(document: TextDocument, token: CancellationToken): ProviderResult { - return this.impl.provideCodeLenses(document, token); - } - public provideDocumentSymbols( - document: TextDocument, - token: CancellationToken - ): ProviderResult { - return this.impl.provideDocumentSymbols(document, token); - } - public provideSignatureHelp( - document: TextDocument, - position: Position, - token: CancellationToken, - context: SignatureHelpContext - ): ProviderResult { - return this.impl.provideSignatureHelp(document, position, token, context); - } -} diff --git a/src/client/activation/requirementsTxtLinkActivator.ts b/src/client/activation/requirementsTxtLinkActivator.ts new file mode 100644 index 000000000000..fcb6b72e545e --- /dev/null +++ b/src/client/activation/requirementsTxtLinkActivator.ts @@ -0,0 +1,26 @@ +import { injectable } from 'inversify'; +import { Hover, languages, TextDocument, Position } from 'vscode'; +import { IExtensionSingleActivationService } from './types'; + +const PYPI_PROJECT_URL = 'https://pypi.org/project'; + +export function generatePyPiLink(name: string): string | null { + // Regex to allow to find every possible pypi package (base regex from https://peps.python.org/pep-0508/#names) + const projectName = name.match(/^([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*)($|=| |;|\[)/i); + return projectName ? `${PYPI_PROJECT_URL}/${projectName[1]}/` : null; +} + +@injectable() +export class RequirementsTxtLinkActivator implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: true, virtualWorkspace: true }; + + // eslint-disable-next-line class-methods-use-this + public async activate(): Promise { + languages.registerHoverProvider([{ pattern: '**/*requirement*.txt' }, { pattern: '**/requirements/*.txt' }], { + provideHover(document: TextDocument, position: Position) { + const link = generatePyPiLink(document.lineAt(position.line).text); + return link ? new Hover(link) : null; + }, + }); + } +} diff --git a/src/client/activation/serviceRegistry.ts b/src/client/activation/serviceRegistry.ts index f50d4438b17e..875afa12f0b4 100644 --- a/src/client/activation/serviceRegistry.ts +++ b/src/client/activation/serviceRegistry.ts @@ -1,214 +1,43 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -import { registerTypes as registerDotNetTypes } from '../common/dotnet/serviceRegistry'; -import { INugetRepository } from '../common/nuget/types'; -import { - BANNER_NAME_DS_SURVEY, - BANNER_NAME_INTERACTIVE_SHIFTENTER, - BANNER_NAME_LS_SURVEY, - BANNER_NAME_PROPOSE_LS, - IPythonExtensionBanner -} from '../common/types'; -import { DataScienceSurveyBanner } from '../datascience/dataScienceSurveyBanner'; -import { InteractiveShiftEnterBanner } from '../datascience/shiftEnterBanner'; import { IServiceManager } from '../ioc/types'; -import { LanguageServerSurveyBanner } from '../languageServices/languageServerSurveyBanner'; -import { ProposeLanguageServerBanner } from '../languageServices/proposeLanguageServerBanner'; -import { AATesting } from './aaTesting'; import { ExtensionActivationManager } from './activationManager'; -import { LanguageServerExtensionActivationService } from './activationService'; -import { DownloadBetaChannelRule, DownloadDailyChannelRule } from './common/downloadChannelRules'; -import { LanguageServerDownloader } from './common/downloader'; -import { LanguageServerDownloadChannel } from './common/packageRepository'; import { ExtensionSurveyPrompt } from './extensionSurvey'; -import { JediExtensionActivator } from './jedi'; -import { DotNetLanguageServerActivator } from './languageServer/activator'; -import { LanguageServerAnalysisOptions } from './languageServer/analysisOptions'; -import { DotNetLanguageClientFactory } from './languageServer/languageClientFactory'; -import { LanguageServerCompatibilityService } from './languageServer/languageServerCompatibilityService'; -import { LanguageServerExtension } from './languageServer/languageServerExtension'; -import { DotNetLanguageServerFolderService } from './languageServer/languageServerFolderService'; -import { - BetaDotNetLanguageServerPackageRepository, - DailyDotNetLanguageServerPackageRepository, - StableDotNetLanguageServerPackageRepository -} from './languageServer/languageServerPackageRepository'; -import { DotNetLanguageServerPackageService } from './languageServer/languageServerPackageService'; -import { DotNetLanguageServerProxy } from './languageServer/languageServerProxy'; -import { DotNetLanguageServerManager } from './languageServer/manager'; -import { LanguageServerOutputChannel } from './languageServer/outputChannel'; -import { PlatformData } from './languageServer/platformData'; -import { NodeLanguageServerActivator } from './node/activator'; -import { NodeLanguageClientFactory } from './node/languageClientFactory'; -import { NodeLanguageServerFolderService } from './node/languageServerFolderService'; -import { - BetaNodeLanguageServerPackageRepository, - DailyNodeLanguageServerPackageRepository, - StableNodeLanguageServerPackageRepository -} from './node/languageServerPackageRepository'; -import { NodeLanguageServerPackageService } from './node/languageServerPackageService'; -import { NodeLanguageServerProxy } from './node/languageServerProxy'; -import { NodeLanguageServerManager } from './node/manager'; -import { NoLanguageServerExtensionActivator } from './none/activator'; +import { LanguageServerOutputChannel } from './common/outputChannel'; import { - IDownloadChannelRule, IExtensionActivationManager, IExtensionActivationService, IExtensionSingleActivationService, - ILanguageClientFactory, - ILanguageServerActivator, - ILanguageServerAnalysisOptions, - ILanguageServerCache, - ILanguageServerCompatibilityService, - ILanguageServerDownloader, - ILanguageServerExtension, - ILanguageServerFolderService, - ILanguageServerManager, ILanguageServerOutputChannel, - ILanguageServerPackageService, - ILanguageServerProxy, - IPlatformData, - LanguageServerType } from './types'; +import { LoadLanguageServerExtension } from './common/loadLanguageServerExtension'; +import { PartialModeStatusItem } from './partialModeStatus'; +import { ILanguageServerWatcher } from '../languageServer/types'; +import { LanguageServerWatcher } from '../languageServer/watcher'; +import { RequirementsTxtLinkActivator } from './requirementsTxtLinkActivator'; -// tslint:disable-next-line: max-func-body-length -export function registerTypes(serviceManager: IServiceManager, languageServerType: LanguageServerType) { - serviceManager.addSingleton(ILanguageServerCache, LanguageServerExtensionActivationService); - serviceManager.addBinding(ILanguageServerCache, IExtensionActivationService); - serviceManager.addSingleton(ILanguageServerExtension, LanguageServerExtension); +export function registerTypes(serviceManager: IServiceManager): void { + serviceManager.addSingleton(IExtensionActivationService, PartialModeStatusItem); serviceManager.add(IExtensionActivationManager, ExtensionActivationManager); - - serviceManager.add( - ILanguageServerActivator, - JediExtensionActivator, - LanguageServerType.Jedi - ); - serviceManager.add(ILanguageServerAnalysisOptions, LanguageServerAnalysisOptions); - - serviceManager.addSingleton( - IPythonExtensionBanner, - LanguageServerSurveyBanner, - BANNER_NAME_LS_SURVEY - ); - serviceManager.addSingleton( - IPythonExtensionBanner, - ProposeLanguageServerBanner, - BANNER_NAME_PROPOSE_LS + serviceManager.addSingleton( + ILanguageServerOutputChannel, + LanguageServerOutputChannel, ); - serviceManager.addSingleton( - IPythonExtensionBanner, - DataScienceSurveyBanner, - BANNER_NAME_DS_SURVEY + serviceManager.addSingleton( + IExtensionSingleActivationService, + ExtensionSurveyPrompt, ); - serviceManager.addSingleton( - IPythonExtensionBanner, - InteractiveShiftEnterBanner, - BANNER_NAME_INTERACTIVE_SHIFTENTER + serviceManager.addSingleton( + IExtensionSingleActivationService, + LoadLanguageServerExtension, ); - if (languageServerType === LanguageServerType.Microsoft) { - serviceManager.add( - ILanguageServerActivator, - DotNetLanguageServerActivator, - LanguageServerType.Microsoft - ); - serviceManager.addSingleton( - INugetRepository, - StableDotNetLanguageServerPackageRepository, - LanguageServerDownloadChannel.stable - ); - serviceManager.addSingleton( - INugetRepository, - BetaDotNetLanguageServerPackageRepository, - LanguageServerDownloadChannel.beta - ); - serviceManager.addSingleton( - INugetRepository, - DailyDotNetLanguageServerPackageRepository, - LanguageServerDownloadChannel.daily - ); - serviceManager.addSingleton( - ILanguageServerCompatibilityService, - LanguageServerCompatibilityService - ); - serviceManager.addSingleton(ILanguageClientFactory, DotNetLanguageClientFactory); - serviceManager.addSingleton(IPlatformData, PlatformData); - serviceManager.add(ILanguageServerManager, DotNetLanguageServerManager); - serviceManager.add(ILanguageServerProxy, DotNetLanguageServerProxy); - serviceManager.addSingleton( - ILanguageServerFolderService, - DotNetLanguageServerFolderService - ); - serviceManager.addSingleton( - ILanguageServerPackageService, - DotNetLanguageServerPackageService - ); - registerDotNetTypes(serviceManager); - } else if (languageServerType === LanguageServerType.Node) { - serviceManager.add( - ILanguageServerActivator, - NodeLanguageServerActivator, - LanguageServerType.Node - ); - serviceManager.addSingleton( - INugetRepository, - StableNodeLanguageServerPackageRepository, - LanguageServerDownloadChannel.stable - ); - serviceManager.addSingleton( - INugetRepository, - BetaNodeLanguageServerPackageRepository, - LanguageServerDownloadChannel.beta - ); - serviceManager.addSingleton( - INugetRepository, - DailyNodeLanguageServerPackageRepository, - LanguageServerDownloadChannel.daily - ); - serviceManager.addSingleton(ILanguageClientFactory, NodeLanguageClientFactory); - serviceManager.add(ILanguageServerManager, NodeLanguageServerManager); - serviceManager.add(ILanguageServerProxy, NodeLanguageServerProxy); - serviceManager.addSingleton( - ILanguageServerFolderService, - NodeLanguageServerFolderService - ); - serviceManager.addSingleton( - ILanguageServerPackageService, - NodeLanguageServerPackageService - ); - } else if (languageServerType === LanguageServerType.None) { - serviceManager.add( - ILanguageServerActivator, - NoLanguageServerExtensionActivator, - LanguageServerType.None - ); - } - - serviceManager.addSingleton( - IDownloadChannelRule, - DownloadDailyChannelRule, - LanguageServerDownloadChannel.daily - ); - serviceManager.addSingleton( - IDownloadChannelRule, - DownloadBetaChannelRule, - LanguageServerDownloadChannel.beta - ); - serviceManager.addSingleton( - IDownloadChannelRule, - DownloadBetaChannelRule, - LanguageServerDownloadChannel.stable - ); - serviceManager.addSingleton(ILanguageServerDownloader, LanguageServerDownloader); + serviceManager.addSingleton(ILanguageServerWatcher, LanguageServerWatcher); + serviceManager.addBinding(ILanguageServerWatcher, IExtensionActivationService); - serviceManager.addSingleton( - ILanguageServerOutputChannel, - LanguageServerOutputChannel - ); serviceManager.addSingleton( IExtensionSingleActivationService, - ExtensionSurveyPrompt + RequirementsTxtLinkActivator, ); - serviceManager.addSingleton(IExtensionSingleActivationService, AATesting); } diff --git a/src/client/activation/types.ts b/src/client/activation/types.ts index 4fce2850ffd3..e3b9b818691a 100644 --- a/src/client/activation/types.ts +++ b/src/client/activation/types.ts @@ -3,49 +3,23 @@ 'use strict'; -import { SemVer } from 'semver'; -import { - CodeLensProvider, - CompletionItemProvider, - DefinitionProvider, - DocumentSymbolProvider, - Event, - HoverProvider, - ReferenceProvider, - RenameProvider, - SignatureHelpProvider, - TextDocument, - TextDocumentContentChangeEvent -} from 'vscode'; -import { LanguageClient, LanguageClientOptions } from 'vscode-languageclient'; -import { NugetPackage } from '../common/nuget/types'; -import { IDisposable, IOutputChannel, LanguageServerDownloadChannels, Resource } from '../common/types'; -import { PythonInterpreter } from '../interpreter/contracts'; +import { Event } from 'vscode'; +import { LanguageClient, LanguageClientOptions } from 'vscode-languageclient/node'; +import type { IDisposable, ILogOutputChannel, Resource } from '../common/types'; +import { StopWatch } from '../common/utils/stopWatch'; +import { PythonEnvironment } from '../pythonEnvironments/info'; export const IExtensionActivationManager = Symbol('IExtensionActivationManager'); /** * Responsible for activation of extension. - * - * @export - * @interface IExtensionActivationManager - * @extends {IDisposable} */ export interface IExtensionActivationManager extends IDisposable { - /** - * Method invoked when extension activates (invoked once). - * - * @returns {Promise} - * @memberof IExtensionActivationManager - */ - activate(): Promise; + // Method invoked when extension activates (invoked once). + activate(startupStopWatch: StopWatch): Promise; /** * Method invoked when a workspace is loaded. * This is where we place initialization scripts for each workspace. * (e.g. if we need to run code for each workspace, then this is where that happens). - * - * @param {Resource} resource - * @returns {Promise} - * @memberof IExtensionActivationManager */ activateWorkspace(resource: Resource): Promise; } @@ -56,163 +30,71 @@ export const IExtensionActivationService = Symbol('IExtensionActivationService') * invoked for every workspace folder (in multi-root workspace folders) during the activation of the extension. * This is a great hook for extension activation code, i.e. you don't need to modify * the `extension.ts` file to invoke some code when extension gets activated. - * @export - * @interface IExtensionActivationService */ export interface IExtensionActivationService { - activate(resource: Resource): Promise; + supportedWorkspaceTypes: { untrustedWorkspace: boolean; virtualWorkspace: boolean }; + activate(resource: Resource, startupStopWatch?: StopWatch): Promise; } export enum LanguageServerType { Jedi = 'Jedi', + JediLSP = 'JediLSP', Microsoft = 'Microsoft', - Node = 'Node', - None = 'None' -} - -// tslint:disable-next-line: interface-name -export interface DocumentHandler { - handleOpen(document: TextDocument): void; - handleChanges(document: TextDocument, changes: TextDocumentContentChangeEvent[]): void; -} - -// tslint:disable-next-line: interface-name -export interface LanguageServerCommandHandler { - clearAnalysisCache(): void; + Node = 'Pylance', + None = 'None', } -export interface ILanguageServer - extends RenameProvider, - DefinitionProvider, - HoverProvider, - ReferenceProvider, - CompletionItemProvider, - CodeLensProvider, - DocumentSymbolProvider, - SignatureHelpProvider, - Partial, - Partial, - IDisposable {} - export const ILanguageServerActivator = Symbol('ILanguageServerActivator'); -export interface ILanguageServerActivator extends ILanguageServer { - start(resource: Resource, interpreter: PythonInterpreter | undefined): Promise; +export interface ILanguageServerActivator { + start(resource: Resource, interpreter: PythonEnvironment | undefined): Promise; activate(): void; deactivate(): void; } -export const ILanguageServerCache = Symbol('ILanguageServerCache'); -export interface ILanguageServerCache { - get(resource: Resource, interpreter?: PythonInterpreter): Promise; -} - -export type FolderVersionPair = { path: string; version: SemVer }; -export const ILanguageServerFolderService = Symbol('ILanguageServerFolderService'); - -export interface ILanguageServerFolderService { - getLanguageServerFolderName(resource: Resource): Promise; - getLatestLanguageServerVersion(resource: Resource): Promise; - getCurrentLanguageServerDirectory(): Promise; -} - -export const ILanguageServerDownloader = Symbol('ILanguageServerDownloader'); - -export interface ILanguageServerDownloader { - downloadLanguageServer(destinationFolder: string, resource: Resource): Promise; -} - -export const ILanguageServerPackageService = Symbol('ILanguageServerPackageService'); -export interface ILanguageServerPackageService { - getNugetPackageName(): string; - getLatestNugetPackageVersion(resource: Resource, minVersion?: string): Promise; - getLanguageServerDownloadChannel(): LanguageServerDownloadChannels; -} - -export const MajorLanguageServerVersion = Symbol('MajorLanguageServerVersion'); -export const IDownloadChannelRule = Symbol('IDownloadChannelRule'); -export interface IDownloadChannelRule { - shouldLookForNewLanguageServer(currentFolder?: FolderVersionPair): Promise; -} -export const ILanguageServerCompatibilityService = Symbol('ILanguageServerCompatibilityService'); -export interface ILanguageServerCompatibilityService { - isSupported(): Promise; -} -export enum LanguageClientFactory { - base = 'base', - simple = 'simple', - downloaded = 'downloaded' -} export const ILanguageClientFactory = Symbol('ILanguageClientFactory'); export interface ILanguageClientFactory { createLanguageClient( resource: Resource, - interpreter: PythonInterpreter | undefined, + interpreter: PythonEnvironment | undefined, clientOptions: LanguageClientOptions, - env?: NodeJS.ProcessEnv + env?: NodeJS.ProcessEnv, ): Promise; } export const ILanguageServerAnalysisOptions = Symbol('ILanguageServerAnalysisOptions'); export interface ILanguageServerAnalysisOptions extends IDisposable { readonly onDidChange: Event; - initialize(resource: Resource, interpreter: PythonInterpreter | undefined): Promise; + initialize(resource: Resource, interpreter: PythonEnvironment | undefined): Promise; getAnalysisOptions(): Promise; } export const ILanguageServerManager = Symbol('ILanguageServerManager'); export interface ILanguageServerManager extends IDisposable { - readonly languageProxy: ILanguageServerProxy | undefined; - start(resource: Resource, interpreter: PythonInterpreter | undefined): Promise; + start(resource: Resource, interpreter: PythonEnvironment | undefined): Promise; connect(): void; disconnect(): void; } -export const ILanguageServerExtension = Symbol('ILanguageServerExtension'); -export interface ILanguageServerExtension extends IDisposable { - readonly invoked: Event; - loadExtensionArgs?: {}; - register(): void; -} + export const ILanguageServerProxy = Symbol('ILanguageServerProxy'); export interface ILanguageServerProxy extends IDisposable { - /** - * LanguageClient in use - */ - languageClient: LanguageClient | undefined; start( resource: Resource, - interpreter: PythonInterpreter | undefined, - options: LanguageClientOptions + interpreter: PythonEnvironment | undefined, + options: LanguageClientOptions, ): Promise; + stop(): Promise; /** * Sends a request to LS so as to load other extensions. * This is used as a plugin loader mechanism. * Anyone (such as intellicode) wanting to interact with LS, needs to send this request to LS. - * @param {{}} [args] - * @memberof ILanguageServerProxy */ - loadExtension(args?: {}): void; -} - -export enum PlatformName { - Windows32Bit = 'win-x86', - Windows64Bit = 'win-x64', - Mac64Bit = 'osx-x64', - Linux64Bit = 'linux-x64' -} -export const IPlatformData = Symbol('IPlatformData'); -export interface IPlatformData { - readonly platformName: PlatformName; - readonly engineDllName: string; - readonly engineExecutableName: string; + loadExtension(args?: unknown): void; } export const ILanguageServerOutputChannel = Symbol('ILanguageServerOutputChannel'); export interface ILanguageServerOutputChannel { /** * Creates output channel if necessary and returns it - * - * @type {IOutputChannel} - * @memberof ILanguageServerOutputChannel */ - readonly channel: IOutputChannel; + readonly channel: ILogOutputChannel; } export const IExtensionSingleActivationService = Symbol('IExtensionSingleActivationService'); @@ -221,9 +103,8 @@ export const IExtensionSingleActivationService = Symbol('IExtensionSingleActivat * invoked during the activation of the extension. * This is a great hook for extension activation code, i.e. you don't need to modify * the `extension.ts` file to invoke some code when extension gets activated. - * @export - * @interface IExtensionSingleActivationService */ export interface IExtensionSingleActivationService { + supportedWorkspaceTypes: { untrustedWorkspace: boolean; virtualWorkspace: boolean }; activate(): Promise; } diff --git a/src/client/api.ts b/src/client/api.ts index 6494862f8471..908da4be7103 100644 --- a/src/client/api.ts +++ b/src/client/api.ts @@ -1,85 +1,169 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. 'use strict'; -import { isTestExecution } from './common/constants'; -import { DebugAdapterNewPtvsd } from './common/experimentGroups'; -import { traceError } from './common/logger'; -import { IExperimentsManager } from './common/types'; -import { getDebugpyLauncherArgs, getPtvsdLauncherScriptArgs } from './debugger/extension/adapter/remoteLaunchers'; +import { Uri, Event } from 'vscode'; +import { BaseLanguageClient, LanguageClientOptions } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; +import { PYLANCE_NAME } from './activation/node/languageClientFactory'; +import { ILanguageServerOutputChannel } from './activation/types'; +import { PythonExtension } from './api/types'; +import { isTestExecution, PYTHON_LANGUAGE } from './common/constants'; +import { IConfigurationService, Resource } from './common/types'; +import { getDebugpyLauncherArgs } from './debugger/extension/adapter/remoteLaunchers'; +import { IInterpreterService } from './interpreter/contracts'; import { IServiceContainer, IServiceManager } from './ioc/types'; +import { + JupyterExtensionIntegration, + JupyterExtensionPythonEnvironments, + JupyterPythonEnvironmentApi, +} from './jupyter/jupyterIntegration'; +import { traceError } from './logging'; +import { IDiscoveryAPI } from './pythonEnvironments/base/locator'; +import { buildEnvironmentApi } from './environmentApi'; +import { ApiForPylance } from './pylanceApi'; +import { getTelemetryReporter } from './telemetry'; +import { TensorboardExtensionIntegration } from './tensorBoard/tensorboardIntegration'; +import { getDebugpyPath } from './debugger/pythonDebugger'; -/* - * Do not introduce any breaking changes to this API. - * This is the public API for other extensions to interact with this extension. - */ +export function buildApi( + ready: Promise, + serviceManager: IServiceManager, + serviceContainer: IServiceContainer, + discoveryApi: IDiscoveryAPI, +): PythonExtension { + const configurationService = serviceContainer.get(IConfigurationService); + const interpreterService = serviceContainer.get(IInterpreterService); + serviceManager.addSingleton(JupyterExtensionIntegration, JupyterExtensionIntegration); + serviceManager.addSingleton( + JupyterExtensionPythonEnvironments, + JupyterExtensionPythonEnvironments, + ); + serviceManager.addSingleton( + TensorboardExtensionIntegration, + TensorboardExtensionIntegration, + ); + const jupyterPythonEnvApi = serviceContainer.get(JupyterExtensionPythonEnvironments); + const environments = buildEnvironmentApi(discoveryApi, serviceContainer, jupyterPythonEnvApi); + const jupyterIntegration = serviceContainer.get(JupyterExtensionIntegration); + jupyterIntegration.registerEnvApi(environments); + const tensorboardIntegration = serviceContainer.get( + TensorboardExtensionIntegration, + ); + const outputChannel = serviceContainer.get(ILanguageServerOutputChannel); -export interface IExtensionApi { - /** - * Promise indicating whether all parts of the extension have completed loading or not. - * @type {Promise} - * @memberof IExtensionApi - */ - ready: Promise; - debug: { + const api: PythonExtension & { /** - * Generate an array of strings for commands to pass to the Python executable to launch the debugger for remote debugging. - * Users can append another array of strings of what they want to execute along with relevant arguments to Python. - * E.g `['/Users/..../pythonVSCode/pythonFiles/ptvsd_launcher.py', '--host', 'localhost', '--port', '57039', '--wait']` - * @param {string} host - * @param {number} port - * @param {boolean} [waitUntilDebuggerAttaches=true] - * @returns {Promise} + * Internal API just for Jupyter, hence don't include in the official types. */ - getRemoteLauncherCommand(host: string, port: number, waitUntilDebuggerAttaches: boolean): Promise; - }; -} - -export function buildApi( - // tslint:disable-next-line:no-any - ready: Promise, - serviceManager: IServiceManager, - serviceContainer: IServiceContainer -) { - const experimentsManager = serviceContainer.get(IExperimentsManager); - const api = { + jupyter: { + registerHooks(): void; + }; + /** + * Internal API just for Tensorboard, hence don't include in the official types. + */ + tensorboard: { + registerHooks(): void; + }; + } & { + /** + * @deprecated Temporarily exposed for Pylance until we expose this API generally. Will be removed in an + * iteration or two. + */ + pylance: ApiForPylance; + } & { + /** + * @deprecated Use PythonExtension.environments API instead. + * + * Return internal settings within the extension which are stored in VSCode storage + */ + settings: { + /** + * An event that is emitted when execution details (for a resource) change. For instance, when interpreter configuration changes. + */ + readonly onDidChangeExecutionDetails: Event; + /** + * Returns all the details the consumer needs to execute code within the selected environment, + * corresponding to the specified resource taking into account any workspace-specific settings + * for the workspace to which this resource belongs. + * @param {Resource} [resource] A resource for which the setting is asked for. + * * When no resource is provided, the setting scoped to the first workspace folder is returned. + * * If no folder is present, it returns the global setting. + */ + getExecutionDetails( + resource?: Resource, + ): { + /** + * E.g of execution commands returned could be, + * * `['']` + * * `['']` + * * `['conda', 'run', 'python']` which is used to run from within Conda environments. + * or something similar for some other Python environments. + * + * @type {(string[] | undefined)} When return value is `undefined`, it means no interpreter is set. + * Otherwise, join the items returned using space to construct the full execution command. + */ + execCommand: string[] | undefined; + }; + }; + } = { // 'ready' will propagate the exception, but we must log it here first. ready: ready.catch((ex) => { traceError('Failure during activation.', ex); return Promise.reject(ex); }), + jupyter: { + registerHooks: () => jupyterIntegration.integrateWithJupyterExtension(), + }, + tensorboard: { + registerHooks: () => tensorboardIntegration.integrateWithTensorboardExtension(), + }, debug: { async getRemoteLauncherCommand( host: string, port: number, - waitUntilDebuggerAttaches: boolean = true + waitUntilDebuggerAttaches = true, ): Promise { - const useNewDADebugger = experimentsManager.inExperiment(DebugAdapterNewPtvsd.experiment); - - if (useNewDADebugger) { - return getDebugpyLauncherArgs({ - host, - port, - waitUntilDebuggerAttaches - }); - } - - return getPtvsdLauncherScriptArgs({ + return getDebugpyLauncherArgs({ host, port, - waitUntilDebuggerAttaches + waitUntilDebuggerAttaches, }); - } - } + }, + async getDebuggerPackagePath(): Promise { + return getDebugpyPath(); + }, + }, + settings: { + onDidChangeExecutionDetails: interpreterService.onDidChangeInterpreterConfiguration, + getExecutionDetails(resource?: Resource) { + const { pythonPath } = configurationService.getSettings(resource); + // If pythonPath equals an empty string, no interpreter is set. + return { execCommand: pythonPath === '' ? undefined : [pythonPath] }; + }, + }, + pylance: { + createClient: (...args: any[]): BaseLanguageClient => { + // Make sure we share output channel so that we can share one with + // Jedi as well. + const clientOptions = args[1] as LanguageClientOptions; + clientOptions.outputChannel = clientOptions.outputChannel ?? outputChannel.channel; + + return new LanguageClient(PYTHON_LANGUAGE, PYLANCE_NAME, args[0], clientOptions); + }, + start: (client: BaseLanguageClient): Promise => client.start(), + stop: (client: BaseLanguageClient): Promise => client.stop(), + getTelemetryReporter: () => getTelemetryReporter(), + }, + environments, }; // In test environment return the DI Container. if (isTestExecution()) { - // tslint:disable:no-any (api as any).serviceContainer = serviceContainer; (api as any).serviceManager = serviceManager; - // tslint:enable:no-any } return api; } diff --git a/src/client/api/types.ts b/src/client/api/types.ts new file mode 100644 index 000000000000..95556aacbd90 --- /dev/null +++ b/src/client/api/types.ts @@ -0,0 +1,349 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { CancellationToken, Event, Uri, WorkspaceFolder, extensions } from 'vscode'; + +/* + * Do not introduce any breaking changes to this API. + * This is the public API for other extensions to interact with this extension. + */ +export interface PythonExtension { + /** + * Promise indicating whether all parts of the extension have completed loading or not. + */ + ready: Promise; + debug: { + /** + * Generate an array of strings for commands to pass to the Python executable to launch the debugger for remote debugging. + * Users can append another array of strings of what they want to execute along with relevant arguments to Python. + * E.g `['/Users/..../pythonVSCode/python_files/lib/python/debugpy', '--listen', 'localhost:57039', '--wait-for-client']` + * @param host + * @param port + * @param waitUntilDebuggerAttaches Defaults to `true`. + */ + getRemoteLauncherCommand(host: string, port: number, waitUntilDebuggerAttaches: boolean): Promise; + + /** + * Gets the path to the debugger package used by the extension. + */ + getDebuggerPackagePath(): Promise; + }; + + /** + * These APIs provide a way for extensions to work with by python environments available in the user's machine + * as found by the Python extension. See + * https://github.com/microsoft/vscode-python/wiki/Python-Environment-APIs for usage examples and more. + */ + readonly environments: { + /** + * Returns the environment configured by user in settings. Note that this can be an invalid environment, use + * {@link resolveEnvironment} to get full details. + * @param resource : Uri of a file or workspace folder. This is used to determine the env in a multi-root + * scenario. If `undefined`, then the API returns what ever is set for the workspace. + */ + getActiveEnvironmentPath(resource?: Resource): EnvironmentPath; + /** + * Sets the active environment path for the python extension for the resource. Configuration target will always + * be the workspace folder. + * @param environment : If string, it represents the full path to environment folder or python executable + * for the environment. Otherwise it can be {@link Environment} or {@link EnvironmentPath} itself. + * @param resource : [optional] File or workspace to scope to a particular workspace folder. + */ + updateActiveEnvironmentPath( + environment: string | EnvironmentPath | Environment, + resource?: Resource, + ): Promise; + /** + * This event is triggered when the active environment setting changes. + */ + readonly onDidChangeActiveEnvironmentPath: Event; + /** + * Carries environments known to the extension at the time of fetching the property. Note this may not + * contain all environments in the system as a refresh might be going on. + * + * Only reports environments in the current workspace. + */ + readonly known: readonly Environment[]; + /** + * This event is triggered when the known environment list changes, like when a environment + * is found, existing environment is removed, or some details changed on an environment. + */ + readonly onDidChangeEnvironments: Event; + /** + * This API will trigger environment discovery, but only if it has not already happened in this VSCode session. + * Useful for making sure env list is up-to-date when the caller needs it for the first time. + * + * To force trigger a refresh regardless of whether a refresh was already triggered, see option + * {@link RefreshOptions.forceRefresh}. + * + * Note that if there is a refresh already going on then this returns the promise for that refresh. + * @param options Additional options for refresh. + * @param token A cancellation token that indicates a refresh is no longer needed. + */ + refreshEnvironments(options?: RefreshOptions, token?: CancellationToken): Promise; + /** + * Returns details for the given environment, or `undefined` if the env is invalid. + * @param environment : If string, it represents the full path to environment folder or python executable + * for the environment. Otherwise it can be {@link Environment} or {@link EnvironmentPath} itself. + */ + resolveEnvironment( + environment: Environment | EnvironmentPath | string, + ): Promise; + /** + * Returns the environment variables used by the extension for a resource, which includes the custom + * variables configured by user in `.env` files. + * @param resource : Uri of a file or workspace folder. This is used to determine the env in a multi-root + * scenario. If `undefined`, then the API returns what ever is set for the workspace. + */ + getEnvironmentVariables(resource?: Resource): EnvironmentVariables; + /** + * This event is fired when the environment variables for a resource change. Note it's currently not + * possible to detect if environment variables in the system change, so this only fires if custom + * environment variables are updated in `.env` files. + */ + readonly onDidEnvironmentVariablesChange: Event; + }; +} + +export type RefreshOptions = { + /** + * When `true`, force trigger a refresh regardless of whether a refresh was already triggered. Note this can be expensive so + * it's best to only use it if user manually triggers a refresh. + */ + forceRefresh?: boolean; +}; + +/** + * Details about the environment. Note the environment folder, type and name never changes over time. + */ +export type Environment = EnvironmentPath & { + /** + * Carries details about python executable. + */ + readonly executable: { + /** + * Uri of the python interpreter/executable. Carries `undefined` in case an executable does not belong to + * the environment. + */ + readonly uri: Uri | undefined; + /** + * Bitness if known at this moment. + */ + readonly bitness: Bitness | undefined; + /** + * Value of `sys.prefix` in sys module if known at this moment. + */ + readonly sysPrefix: string | undefined; + }; + /** + * Carries details if it is an environment, otherwise `undefined` in case of global interpreters and others. + */ + readonly environment: + | { + /** + * Type of the environment. + */ + readonly type: EnvironmentType; + /** + * Name to the environment if any. + */ + readonly name: string | undefined; + /** + * Uri of the environment folder. + */ + readonly folderUri: Uri; + /** + * Any specific workspace folder this environment is created for. + */ + readonly workspaceFolder: WorkspaceFolder | undefined; + } + | undefined; + /** + * Carries Python version information known at this moment, carries `undefined` for envs without python. + */ + readonly version: + | (VersionInfo & { + /** + * Value of `sys.version` in sys module if known at this moment. + */ + readonly sysVersion: string | undefined; + }) + | undefined; + /** + * Tools/plugins which created the environment or where it came from. First value in array corresponds + * to the primary tool which manages the environment, which never changes over time. + * + * Array is empty if no tool is responsible for creating/managing the environment. Usually the case for + * global interpreters. + */ + readonly tools: readonly EnvironmentTools[]; +}; + +/** + * Derived form of {@link Environment} where certain properties can no longer be `undefined`. Meant to represent an + * {@link Environment} with complete information. + */ +export type ResolvedEnvironment = Environment & { + /** + * Carries complete details about python executable. + */ + readonly executable: { + /** + * Uri of the python interpreter/executable. Carries `undefined` in case an executable does not belong to + * the environment. + */ + readonly uri: Uri | undefined; + /** + * Bitness of the environment. + */ + readonly bitness: Bitness; + /** + * Value of `sys.prefix` in sys module. + */ + readonly sysPrefix: string; + }; + /** + * Carries complete Python version information, carries `undefined` for envs without python. + */ + readonly version: + | (ResolvedVersionInfo & { + /** + * Value of `sys.version` in sys module if known at this moment. + */ + readonly sysVersion: string; + }) + | undefined; +}; + +export type EnvironmentsChangeEvent = { + readonly env: Environment; + /** + * * "add": New environment is added. + * * "remove": Existing environment in the list is removed. + * * "update": New information found about existing environment. + */ + readonly type: 'add' | 'remove' | 'update'; +}; + +export type ActiveEnvironmentPathChangeEvent = EnvironmentPath & { + /** + * Resource the environment changed for. + */ + readonly resource: Resource | undefined; +}; + +/** + * Uri of a file inside a workspace or workspace folder itself. + */ +export type Resource = Uri | WorkspaceFolder; + +export type EnvironmentPath = { + /** + * The ID of the environment. + */ + readonly id: string; + /** + * Path to environment folder or path to python executable that uniquely identifies an environment. Environments + * lacking a python executable are identified by environment folder paths, whereas other envs can be identified + * using python executable path. + */ + readonly path: string; +}; + +/** + * Tool/plugin where the environment came from. It can be {@link KnownEnvironmentTools} or custom string which + * was contributed. + */ +export type EnvironmentTools = KnownEnvironmentTools | string; +/** + * Tools or plugins the Python extension currently has built-in support for. Note this list is expected to shrink + * once tools have their own separate extensions. + */ +export type KnownEnvironmentTools = + | 'Conda' + | 'Pipenv' + | 'Poetry' + | 'VirtualEnv' + | 'Venv' + | 'VirtualEnvWrapper' + | 'Pyenv' + | 'Hatch' + | 'Unknown'; + +/** + * Type of the environment. It can be {@link KnownEnvironmentTypes} or custom string which was contributed. + */ +export type EnvironmentType = KnownEnvironmentTypes | string; +/** + * Environment types the Python extension is aware of. Note this list is expected to shrink once tools have their + * own separate extensions, in which case they're expected to provide the type themselves. + */ +export type KnownEnvironmentTypes = 'VirtualEnvironment' | 'Conda' | 'Unknown'; + +/** + * Carries bitness for an environment. + */ +export type Bitness = '64-bit' | '32-bit' | 'Unknown'; + +/** + * The possible Python release levels. + */ +export type PythonReleaseLevel = 'alpha' | 'beta' | 'candidate' | 'final'; + +/** + * Release information for a Python version. + */ +export type PythonVersionRelease = { + readonly level: PythonReleaseLevel; + readonly serial: number; +}; + +export type VersionInfo = { + readonly major: number | undefined; + readonly minor: number | undefined; + readonly micro: number | undefined; + readonly release: PythonVersionRelease | undefined; +}; + +export type ResolvedVersionInfo = { + readonly major: number; + readonly minor: number; + readonly micro: number; + readonly release: PythonVersionRelease; +}; + +/** + * A record containing readonly keys. + */ +export type EnvironmentVariables = { readonly [key: string]: string | undefined }; + +export type EnvironmentVariablesChangeEvent = { + /** + * Workspace folder the environment variables changed for. + */ + readonly resource: WorkspaceFolder | undefined; + /** + * Updated value of environment variables. + */ + readonly env: EnvironmentVariables; +}; + +export const PVSC_EXTENSION_ID = 'ms-python.python'; + +// eslint-disable-next-line @typescript-eslint/no-namespace +export namespace PythonExtension { + /** + * Returns the API exposed by the Python extension in VS Code. + */ + export async function api(): Promise { + const extension = extensions.getExtension(PVSC_EXTENSION_ID); + if (extension === undefined) { + throw new Error(`Python extension is not installed or is disabled`); + } + if (!extension.isActive) { + await extension.activate(); + } + const pythonApi: PythonExtension = extension.exports; + return pythonApi; + } +} diff --git a/src/client/application/diagnostics/applicationDiagnostics.ts b/src/client/application/diagnostics/applicationDiagnostics.ts index aebfa942edb7..90d2ced8d0ae 100644 --- a/src/client/application/diagnostics/applicationDiagnostics.ts +++ b/src/client/application/diagnostics/applicationDiagnostics.ts @@ -1,72 +1,70 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -'use strict'; - -import { inject, injectable, named } from 'inversify'; +import { inject, injectable } from 'inversify'; import { DiagnosticSeverity } from 'vscode'; -import { isTestExecution, STANDARD_OUTPUT_CHANNEL } from '../../common/constants'; -import { traceError, traceInfo, traceWarning } from '../../common/logger'; -import { IOutputChannel, Resource } from '../../common/types'; +import { IWorkspaceService } from '../../common/application/types'; +import { isTestExecution } from '../../common/constants'; +import { Resource } from '../../common/types'; import { IServiceContainer } from '../../ioc/types'; +import { traceLog, traceVerbose } from '../../logging'; import { IApplicationDiagnostics } from '../types'; -import { IDiagnostic, IDiagnosticsService, ISourceMapSupportService } from './types'; +import { IDiagnostic, IDiagnosticsService } from './types'; + +function log(diagnostics: IDiagnostic[]): void { + diagnostics.forEach((item) => { + const message = `Diagnostic Code: ${item.code}, Message: ${item.message}`; + switch (item.severity) { + case DiagnosticSeverity.Error: + case DiagnosticSeverity.Warning: { + traceLog(message); + break; + } + default: { + traceVerbose(message); + } + } + }); +} + +async function runDiagnostics(diagnosticServices: IDiagnosticsService[], resource: Resource): Promise { + await Promise.all( + diagnosticServices.map(async (diagnosticService) => { + const diagnostics = await diagnosticService.diagnose(resource); + if (diagnostics.length > 0) { + log(diagnostics); + await diagnosticService.handle(diagnostics); + } + }), + ); +} @injectable() export class ApplicationDiagnostics implements IApplicationDiagnostics { - constructor( - @inject(IServiceContainer) private readonly serviceContainer: IServiceContainer, - @inject(IOutputChannel) @named(STANDARD_OUTPUT_CHANNEL) private readonly outputChannel: IOutputChannel - ) {} - public register() { - this.serviceContainer.get(ISourceMapSupportService).register(); - } + constructor(@inject(IServiceContainer) private readonly serviceContainer: IServiceContainer) {} + + public register() {} + public async performPreStartupHealthCheck(resource: Resource): Promise { // When testing, do not perform health checks, as modal dialogs can be displayed. if (isTestExecution()) { return; } - const services = this.serviceContainer.getAll(IDiagnosticsService); + let services = this.serviceContainer.getAll(IDiagnosticsService); + const workspaceService = this.serviceContainer.get(IWorkspaceService); + if (!workspaceService.isTrusted) { + services = services.filter((item) => item.runInUntrustedWorkspace); + } // Perform these validation checks in the foreground. - await this.runDiagnostics( + await runDiagnostics( services.filter((item) => !item.runInBackground), - resource + resource, ); + // Perform these validation checks in the background. - this.runDiagnostics( + runDiagnostics( services.filter((item) => item.runInBackground), - resource + resource, ).ignoreErrors(); } - private async runDiagnostics(diagnosticServices: IDiagnosticsService[], resource: Resource): Promise { - await Promise.all( - diagnosticServices.map(async (diagnosticService) => { - const diagnostics = await diagnosticService.diagnose(resource); - if (diagnostics.length > 0) { - this.log(diagnostics); - await diagnosticService.handle(diagnostics); - } - }) - ); - } - private log(diagnostics: IDiagnostic[]): void { - diagnostics.forEach((item) => { - const message = `Diagnostic Code: ${item.code}, Message: ${item.message}`; - switch (item.severity) { - case DiagnosticSeverity.Error: { - traceError(message); - this.outputChannel.appendLine(message); - break; - } - case DiagnosticSeverity.Warning: { - traceWarning(message); - this.outputChannel.appendLine(message); - break; - } - default: { - traceInfo(message); - } - } - }); - } } diff --git a/src/client/application/diagnostics/base.ts b/src/client/application/diagnostics/base.ts index 64d5967819c6..8ce1c3b83184 100644 --- a/src/client/application/diagnostics/base.ts +++ b/src/client/application/diagnostics/base.ts @@ -7,6 +7,7 @@ import { injectable, unmanaged } from 'inversify'; import { DiagnosticSeverity } from 'vscode'; import { IWorkspaceService } from '../../common/application/types'; import { IDisposable, IDisposableRegistry, Resource } from '../../common/types'; +import { asyncFilter } from '../../common/utils/arrayUtils'; import { IServiceContainer } from '../../ioc/types'; import { sendTelemetryEvent } from '../../telemetry'; import { EventName } from '../../telemetry/constants'; @@ -21,7 +22,8 @@ export abstract class BaseDiagnostic implements IDiagnostic { public readonly severity: DiagnosticSeverity, public readonly scope: DiagnosticScope, public readonly resource: Resource, - public readonly invokeHandler: 'always' | 'default' = 'default' + public readonly shouldShowPrompt = true, + public readonly invokeHandler: 'always' | 'default' = 'default', ) {} } @@ -32,8 +34,9 @@ export abstract class BaseDiagnosticsService implements IDiagnosticsService, IDi constructor( @unmanaged() private readonly supportedDiagnosticCodes: string[], @unmanaged() protected serviceContainer: IServiceContainer, - @unmanaged() disposableRegistry: IDisposableRegistry, - @unmanaged() public readonly runInBackground: Boolean = false + @unmanaged() protected disposableRegistry: IDisposableRegistry, + @unmanaged() public readonly runInBackground: boolean = false, + @unmanaged() public readonly runInUntrustedWorkspace: boolean = false, ) { this.filterService = serviceContainer.get(IDiagnosticFilterService); disposableRegistry.push(this); @@ -46,7 +49,10 @@ export abstract class BaseDiagnosticsService implements IDiagnosticsService, IDi if (diagnostics.length === 0) { return; } - const diagnosticsToHandle = diagnostics.filter((item) => { + const diagnosticsToHandle = await asyncFilter(diagnostics, async (item) => { + if (!(await this.canHandle(item))) { + return false; + } if (item.invokeHandler && item.invokeHandler === 'always') { return true; } @@ -67,11 +73,6 @@ export abstract class BaseDiagnosticsService implements IDiagnosticsService, IDi /** * Returns a key used to keep track of whether a diagnostic was handled or not. * So as to prevent handling/displaying messages multiple times for the same diagnostic. - * - * @protected - * @param {IDiagnostic} diagnostic - * @returns {string} - * @memberof BaseDiagnosticsService */ protected getDiagnosticsKey(diagnostic: IDiagnostic): string { if (diagnostic.scope === DiagnosticScope.Global) { diff --git a/src/client/application/diagnostics/checks/envPathVariable.ts b/src/client/application/diagnostics/checks/envPathVariable.ts index 2c137662055e..b8850b8bbeee 100644 --- a/src/client/application/diagnostics/checks/envPathVariable.ts +++ b/src/client/application/diagnostics/checks/envPathVariable.ts @@ -1,14 +1,14 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -'use strict'; - +// eslint-disable-next-line max-classes-per-file import { inject, injectable } from 'inversify'; import { DiagnosticSeverity } from 'vscode'; import { IApplicationEnvironment } from '../../../common/application/types'; import '../../../common/extensions'; import { IPlatformService } from '../../../common/platform/types'; import { ICurrentProcess, IDisposableRegistry, IPathUtils, Resource } from '../../../common/types'; +import { Common } from '../../../common/utils/localize'; import { IServiceContainer } from '../../../ioc/types'; import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; import { IDiagnosticsCommandFactory } from '../commands/types'; @@ -20,14 +20,14 @@ const InvalidEnvPathVariableMessage = "The environment variable '{0}' seems to have some paths containing the '\"' character." + " The existence of such a character is known to have caused the {1} extension to not load. If the extension fails to load please modify your paths to remove this '\"' character."; -export class InvalidEnvironmentPathVariableDiagnostic extends BaseDiagnostic { +class InvalidEnvironmentPathVariableDiagnostic extends BaseDiagnostic { constructor(message: string, resource: Resource) { super( DiagnosticCodes.InvalidEnvironmentPathVariableDiagnostic, message, DiagnosticSeverity.Warning, DiagnosticScope.Global, - resource + resource, ); } } @@ -37,27 +37,36 @@ export const EnvironmentPathVariableDiagnosticsServiceId = 'EnvironmentPathVaria @injectable() export class EnvironmentPathVariableDiagnosticsService extends BaseDiagnosticsService { protected readonly messageService: IDiagnosticHandlerService; + private readonly platform: IPlatformService; + constructor( @inject(IServiceContainer) serviceContainer: IServiceContainer, - @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry + @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, ) { - super([DiagnosticCodes.InvalidEnvironmentPathVariableDiagnostic], serviceContainer, disposableRegistry, true); + super( + [DiagnosticCodes.InvalidEnvironmentPathVariableDiagnostic], + serviceContainer, + disposableRegistry, + true, + true, + ); this.platform = this.serviceContainer.get(IPlatformService); this.messageService = serviceContainer.get>( IDiagnosticHandlerService, - DiagnosticCommandPromptHandlerServiceId + DiagnosticCommandPromptHandlerServiceId, ); } + public async diagnose(resource: Resource): Promise { if (this.platform.isWindows && this.doesPathVariableHaveInvalidEntries()) { const env = this.serviceContainer.get(IApplicationEnvironment); const message = InvalidEnvPathVariableMessage.format(this.platform.pathVariableName, env.extensionName); return [new InvalidEnvironmentPathVariableDiagnostic(message, resource)]; - } else { - return []; } + return []; } + protected async onHandle(diagnostics: IDiagnostic[]): Promise { // This class can only handle one type of diagnostic, hence just use first item in list. if (diagnostics.length === 0 || !this.canHandle(diagnostics[0])) { @@ -70,20 +79,21 @@ export class EnvironmentPathVariableDiagnosticsService extends BaseDiagnosticsSe const commandFactory = this.serviceContainer.get(IDiagnosticsCommandFactory); const options = [ { - prompt: 'Ignore' + prompt: Common.ignore, }, { - prompt: 'Always Ignore', - command: commandFactory.createCommand(diagnostic, { type: 'ignore', options: DiagnosticScope.Global }) + prompt: Common.alwaysIgnore, + command: commandFactory.createCommand(diagnostic, { type: 'ignore', options: DiagnosticScope.Global }), }, { - prompt: 'More Info', - command: commandFactory.createCommand(diagnostic, { type: 'launch', options: 'https://aka.ms/Niq35h' }) - } + prompt: Common.moreInfo, + command: commandFactory.createCommand(diagnostic, { type: 'launch', options: 'https://aka.ms/Niq35h' }), + }, ]; await this.messageService.handle(diagnostic, { commandPrompts: options }); } + private doesPathVariableHaveInvalidEntries() { const currentProc = this.serviceContainer.get(ICurrentProcess); const pathValue = currentProc.env[this.platform.pathVariableName]; diff --git a/src/client/application/diagnostics/checks/invalidLaunchJsonDebugger.ts b/src/client/application/diagnostics/checks/invalidLaunchJsonDebugger.ts index 902da9549b4a..440ff16856d3 100644 --- a/src/client/application/diagnostics/checks/invalidLaunchJsonDebugger.ts +++ b/src/client/application/diagnostics/checks/invalidLaunchJsonDebugger.ts @@ -1,8 +1,7 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -'use strict'; - +// eslint-disable-next-line max-classes-per-file import { inject, injectable, named } from 'inversify'; import * as path from 'path'; import { DiagnosticSeverity, WorkspaceFolder } from 'vscode'; @@ -18,9 +17,10 @@ import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '. import { DiagnosticScope, IDiagnostic, IDiagnosticHandlerService } from '../types'; const messages = { - [DiagnosticCodes.InvalidDebuggerTypeDiagnostic]: Diagnostics.invalidDebuggerTypeDiagnostic(), - [DiagnosticCodes.JustMyCodeDiagnostic]: Diagnostics.justMyCodeDiagnostic(), - [DiagnosticCodes.ConsoleTypeDiagnostic]: Diagnostics.consoleTypeDiagnostic() + [DiagnosticCodes.InvalidDebuggerTypeDiagnostic]: Diagnostics.invalidDebuggerTypeDiagnostic, + [DiagnosticCodes.JustMyCodeDiagnostic]: Diagnostics.justMyCodeDiagnostic, + [DiagnosticCodes.ConsoleTypeDiagnostic]: Diagnostics.consoleTypeDiagnostic, + [DiagnosticCodes.ConfigPythonPathDiagnostic]: '', }; export class InvalidLaunchJsonDebuggerDiagnostic extends BaseDiagnostic { @@ -28,10 +28,19 @@ export class InvalidLaunchJsonDebuggerDiagnostic extends BaseDiagnostic { code: | DiagnosticCodes.InvalidDebuggerTypeDiagnostic | DiagnosticCodes.JustMyCodeDiagnostic - | DiagnosticCodes.ConsoleTypeDiagnostic, - resource: Resource + | DiagnosticCodes.ConsoleTypeDiagnostic + | DiagnosticCodes.ConfigPythonPathDiagnostic, + resource: Resource, + shouldShowPrompt = true, ) { - super(code, messages[code], DiagnosticSeverity.Error, DiagnosticScope.WorkspaceFolder, resource, 'always'); + super( + code, + messages[code], + DiagnosticSeverity.Error, + DiagnosticScope.WorkspaceFolder, + resource, + shouldShowPrompt, + ); } } @@ -46,21 +55,24 @@ export class InvalidLaunchJsonDebuggerService extends BaseDiagnosticsService { @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService, @inject(IDiagnosticHandlerService) @named(DiagnosticCommandPromptHandlerServiceId) - private readonly messageService: IDiagnosticHandlerService + private readonly messageService: IDiagnosticHandlerService, ) { super( [ DiagnosticCodes.InvalidDebuggerTypeDiagnostic, DiagnosticCodes.JustMyCodeDiagnostic, - DiagnosticCodes.ConsoleTypeDiagnostic + DiagnosticCodes.ConsoleTypeDiagnostic, + DiagnosticCodes.ConfigPythonPathDiagnostic, ], serviceContainer, disposableRegistry, - true + true, ); } + public async diagnose(resource: Resource): Promise { - if (!this.workspaceService.hasWorkspaceFolders) { + const hasWorkspaceFolders = (this.workspaceService.workspaceFolders?.length || 0) > 0; + if (!hasWorkspaceFolders) { return []; } const workspaceFolder = resource @@ -68,22 +80,26 @@ export class InvalidLaunchJsonDebuggerService extends BaseDiagnosticsService { : this.workspaceService.workspaceFolders![0]; return this.diagnoseWorkspace(workspaceFolder, resource); } + protected async onHandle(diagnostics: IDiagnostic[]): Promise { diagnostics.forEach((diagnostic) => this.handleDiagnostic(diagnostic)); } - protected async fixLaunchJson(code: DiagnosticCodes) { - if (!this.workspaceService.hasWorkspaceFolders) { + + protected async fixLaunchJson(code: DiagnosticCodes): Promise { + const hasWorkspaceFolders = (this.workspaceService.workspaceFolders?.length || 0) > 0; + if (!hasWorkspaceFolders) { return; } await Promise.all( - this.workspaceService.workspaceFolders!.map((workspaceFolder) => - this.fixLaunchJsonInWorkspace(code, workspaceFolder) - ) + (this.workspaceService.workspaceFolders ?? []).map((workspaceFolder) => + this.fixLaunchJsonInWorkspace(code, workspaceFolder), + ), ); } + private async diagnoseWorkspace(workspaceFolder: WorkspaceFolder, resource: Resource) { - const launchJson = this.getLaunchJsonFile(workspaceFolder); + const launchJson = getLaunchJsonFile(workspaceFolder); if (!(await this.fs.fileExists(launchJson))) { return []; } @@ -92,7 +108,7 @@ export class InvalidLaunchJsonDebuggerService extends BaseDiagnosticsService { const diagnostics: IDiagnostic[] = []; if (fileContents.indexOf('"pythonExperimental"') > 0) { diagnostics.push( - new InvalidLaunchJsonDebuggerDiagnostic(DiagnosticCodes.InvalidDebuggerTypeDiagnostic, resource) + new InvalidLaunchJsonDebuggerDiagnostic(DiagnosticCodes.InvalidDebuggerTypeDiagnostic, resource), ); } if (fileContents.indexOf('"debugStdLib"') > 0) { @@ -101,48 +117,74 @@ export class InvalidLaunchJsonDebuggerService extends BaseDiagnosticsService { if (fileContents.indexOf('"console": "none"') > 0) { diagnostics.push(new InvalidLaunchJsonDebuggerDiagnostic(DiagnosticCodes.ConsoleTypeDiagnostic, resource)); } + if ( + fileContents.indexOf('"pythonPath":') > 0 || + fileContents.indexOf('{config:python.pythonPath}') > 0 || + fileContents.indexOf('{config:python.interpreterPath}') > 0 + ) { + diagnostics.push( + new InvalidLaunchJsonDebuggerDiagnostic(DiagnosticCodes.ConfigPythonPathDiagnostic, resource, false), + ); + } return diagnostics; } + private async handleDiagnostic(diagnostic: IDiagnostic): Promise { - if (!this.canHandle(diagnostic)) { + if (!diagnostic.shouldShowPrompt) { + await this.fixLaunchJson(diagnostic.code); return; } const commandPrompts = [ { - prompt: Diagnostics.yesUpdateLaunch(), + prompt: Diagnostics.yesUpdateLaunch, command: { diagnostic, invoke: async (): Promise => { await this.fixLaunchJson(diagnostic.code); - } - } + }, + }, }, { - prompt: Common.noIWillDoItLater() - } + prompt: Common.noIWillDoItLater, + }, ]; await this.messageService.handle(diagnostic, { commandPrompts }); } + private async fixLaunchJsonInWorkspace(code: DiagnosticCodes, workspaceFolder: WorkspaceFolder) { if ((await this.diagnoseWorkspace(workspaceFolder, undefined)).length === 0) { return; } - const launchJson = this.getLaunchJsonFile(workspaceFolder); + const launchJson = getLaunchJsonFile(workspaceFolder); let fileContents = await this.fs.readFile(launchJson); switch (code) { case DiagnosticCodes.InvalidDebuggerTypeDiagnostic: { - fileContents = this.findAndReplace(fileContents, '"pythonExperimental"', '"python"'); - fileContents = this.findAndReplace(fileContents, '"Python Experimental:', '"Python:'); + fileContents = findAndReplace(fileContents, '"pythonExperimental"', '"python"'); + fileContents = findAndReplace(fileContents, '"Python Experimental:', '"Python:'); break; } case DiagnosticCodes.JustMyCodeDiagnostic: { - fileContents = this.findAndReplace(fileContents, '"debugStdLib": false', '"justMyCode": true'); - fileContents = this.findAndReplace(fileContents, '"debugStdLib": true', '"justMyCode": false'); + fileContents = findAndReplace(fileContents, '"debugStdLib": false', '"justMyCode": true'); + fileContents = findAndReplace(fileContents, '"debugStdLib": true', '"justMyCode": false'); break; } case DiagnosticCodes.ConsoleTypeDiagnostic: { - fileContents = this.findAndReplace(fileContents, '"console": "none"', '"console": "internalConsole"'); + fileContents = findAndReplace(fileContents, '"console": "none"', '"console": "internalConsole"'); + break; + } + case DiagnosticCodes.ConfigPythonPathDiagnostic: { + fileContents = findAndReplace(fileContents, '"pythonPath":', '"python":'); + fileContents = findAndReplace( + fileContents, + '{config:python.pythonPath}', + '{command:python.interpreterPath}', + ); + fileContents = findAndReplace( + fileContents, + '{config:python.interpreterPath}', + '{command:python.interpreterPath}', + ); break; } default: { @@ -152,11 +194,13 @@ export class InvalidLaunchJsonDebuggerService extends BaseDiagnosticsService { await this.fs.writeFile(launchJson, fileContents); } - private findAndReplace(fileContents: string, search: string, replace: string) { - const searchRegex = new RegExp(search, 'g'); - return fileContents.replace(searchRegex, replace); - } - private getLaunchJsonFile(workspaceFolder: WorkspaceFolder) { - return path.join(workspaceFolder.uri.fsPath, '.vscode', 'launch.json'); - } +} + +function findAndReplace(fileContents: string, search: string, replace: string) { + const searchRegex = new RegExp(search, 'g'); + return fileContents.replace(searchRegex, replace); +} + +function getLaunchJsonFile(workspaceFolder: WorkspaceFolder) { + return path.join(workspaceFolder.uri.fsPath, '.vscode', 'launch.json'); } diff --git a/src/client/application/diagnostics/checks/invalidPythonPathInDebugger.ts b/src/client/application/diagnostics/checks/invalidPythonPathInDebugger.ts index 7582e2530fd2..f08c09956838 100644 --- a/src/client/application/diagnostics/checks/invalidPythonPathInDebugger.ts +++ b/src/client/application/diagnostics/checks/invalidPythonPathInDebugger.ts @@ -1,20 +1,19 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -'use strict'; - +// eslint-disable-next-line max-classes-per-file import { inject, injectable, named } from 'inversify'; import * as path from 'path'; import { DiagnosticSeverity, Uri, workspace as workspc, WorkspaceFolder } from 'vscode'; import { IDocumentManager, IWorkspaceService } from '../../../common/application/types'; import '../../../common/extensions'; -import { traceError } from '../../../common/logger'; import { IConfigurationService, IDisposableRegistry, Resource } from '../../../common/types'; -import { Diagnostics } from '../../../common/utils/localize'; +import { Common, Diagnostics } from '../../../common/utils/localize'; import { SystemVariables } from '../../../common/variables/systemVariables'; import { PythonPathSource } from '../../../debugger/extension/types'; import { IInterpreterHelper } from '../../../interpreter/contracts'; import { IServiceContainer } from '../../../ioc/types'; +import { traceError } from '../../../logging'; import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; import { IDiagnosticsCommandFactory } from '../commands/types'; import { DiagnosticCodes } from '../constants'; @@ -24,22 +23,30 @@ import { IDiagnostic, IDiagnosticCommand, IDiagnosticHandlerService, - IInvalidPythonPathInDebuggerService + IInvalidPythonPathInDebuggerService, } from '../types'; const messages = { - [DiagnosticCodes.InvalidPythonPathInDebuggerSettingsDiagnostic]: Diagnostics.invalidPythonPathInDebuggerSettings(), - [DiagnosticCodes.InvalidPythonPathInDebuggerLaunchDiagnostic]: Diagnostics.invalidPythonPathInDebuggerLaunch() + [DiagnosticCodes.InvalidPythonPathInDebuggerSettingsDiagnostic]: Diagnostics.invalidPythonPathInDebuggerSettings, + [DiagnosticCodes.InvalidPythonPathInDebuggerLaunchDiagnostic]: Diagnostics.invalidPythonPathInDebuggerLaunch, }; -export class InvalidPythonPathInDebuggerDiagnostic extends BaseDiagnostic { +class InvalidPythonPathInDebuggerDiagnostic extends BaseDiagnostic { constructor( code: | DiagnosticCodes.InvalidPythonPathInDebuggerLaunchDiagnostic | DiagnosticCodes.InvalidPythonPathInDebuggerSettingsDiagnostic, - resource: Resource + resource: Resource, ) { - super(code, messages[code], DiagnosticSeverity.Error, DiagnosticScope.WorkspaceFolder, resource, 'always'); + super( + code, + messages[code], + DiagnosticSeverity.Error, + DiagnosticScope.WorkspaceFolder, + resource, + undefined, + 'always', + ); } } @@ -58,25 +65,32 @@ export class InvalidPythonPathInDebuggerService extends BaseDiagnosticsService @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, @inject(IDiagnosticHandlerService) @named(DiagnosticCommandPromptHandlerServiceId) - protected readonly messageService: IDiagnosticHandlerService + protected readonly messageService: IDiagnosticHandlerService, ) { super( [ DiagnosticCodes.InvalidPythonPathInDebuggerSettingsDiagnostic, - DiagnosticCodes.InvalidPythonPathInDebuggerLaunchDiagnostic + DiagnosticCodes.InvalidPythonPathInDebuggerLaunchDiagnostic, ], serviceContainer, disposableRegistry, - true + true, ); } - public async diagnose(_resource: Resource): Promise { + + // eslint-disable-next-line class-methods-use-this + public async diagnose(): Promise { return []; } - public async validatePythonPath(pythonPath?: string, pythonPathSource?: PythonPathSource, resource?: Uri) { + + public async validatePythonPath( + pythonPath?: string, + pythonPathSource?: PythonPathSource, + resource?: Uri, + ): Promise { pythonPath = pythonPath ? this.resolveVariables(pythonPath, resource) : undefined; - // tslint:disable-next-line:no-invalid-template-strings - if (pythonPath === '${config:python.pythonPath}' || !pythonPath) { + + if (pythonPath === '${command:python.interpreterPath}' || !pythonPath) { pythonPath = this.configService.getSettings(resource).pythonPath; } if (await this.interpreterHelper.getInterpreterInformation(pythonPath).catch(() => undefined)) { @@ -87,8 +101,8 @@ export class InvalidPythonPathInDebuggerService extends BaseDiagnosticsService this.handle([ new InvalidPythonPathInDebuggerDiagnostic( DiagnosticCodes.InvalidPythonPathInDebuggerLaunchDiagnostic, - resource - ) + resource, + ), ]) .catch((ex) => traceError('Failed to handle invalid python path in launch.json debugger', ex)) .ignoreErrors(); @@ -96,14 +110,15 @@ export class InvalidPythonPathInDebuggerService extends BaseDiagnosticsService this.handle([ new InvalidPythonPathInDebuggerDiagnostic( DiagnosticCodes.InvalidPythonPathInDebuggerSettingsDiagnostic, - resource - ) + resource, + ), ]) .catch((ex) => traceError('Failed to handle invalid python path in settings.json debugger', ex)) .ignoreErrors(); } return false; } + protected async onHandle(diagnostics: IDiagnostic[]): Promise { // This class can only handle one type of diagnostic, hence just use first item in list. if (diagnostics.length === 0 || !this.canHandle(diagnostics[0])) { @@ -114,36 +129,38 @@ export class InvalidPythonPathInDebuggerService extends BaseDiagnosticsService await this.messageService.handle(diagnostic, { commandPrompts }); } + protected resolveVariables(pythonPath: string, resource: Uri | undefined): string { const systemVariables = new SystemVariables(resource, undefined, this.workspace); return systemVariables.resolveAny(pythonPath); } + private getCommandPrompts(diagnostic: IDiagnostic): { prompt: string; command?: IDiagnosticCommand }[] { switch (diagnostic.code) { case DiagnosticCodes.InvalidPythonPathInDebuggerSettingsDiagnostic: { return [ { - prompt: 'Select Python Interpreter', + prompt: Common.selectPythonInterpreter, command: this.commandFactory.createCommand(diagnostic, { type: 'executeVSCCommand', - options: 'python.setInterpreter' - }) - } + options: 'python.setInterpreter', + }), + }, ]; } case DiagnosticCodes.InvalidPythonPathInDebuggerLaunchDiagnostic: { return [ { - prompt: 'Open launch.json', + prompt: Common.openLaunch, command: { diagnostic, invoke: async (): Promise => { - const launchJson = this.getLaunchJsonFile(workspc.workspaceFolders![0]); + const launchJson = getLaunchJsonFile(workspc.workspaceFolders![0]); const doc = await this.documentManager.openTextDocument(launchJson); await this.documentManager.showTextDocument(doc); - } - } - } + }, + }, + }, ]; } default: { @@ -151,7 +168,8 @@ export class InvalidPythonPathInDebuggerService extends BaseDiagnosticsService } } } - private getLaunchJsonFile(workspaceFolder: WorkspaceFolder) { - return path.join(workspaceFolder.uri.fsPath, '.vscode', 'launch.json'); - } +} + +function getLaunchJsonFile(workspaceFolder: WorkspaceFolder) { + return path.join(workspaceFolder.uri.fsPath, '.vscode', 'launch.json'); } diff --git a/src/client/application/diagnostics/checks/jediPython27NotSupported.ts b/src/client/application/diagnostics/checks/jediPython27NotSupported.ts new file mode 100644 index 000000000000..3d358325032e --- /dev/null +++ b/src/client/application/diagnostics/checks/jediPython27NotSupported.ts @@ -0,0 +1,108 @@ +/* eslint-disable max-classes-per-file */ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { inject, named } from 'inversify'; +import { ConfigurationTarget, DiagnosticSeverity } from 'vscode'; +import { LanguageServerType } from '../../../activation/types'; +import { IWorkspaceService } from '../../../common/application/types'; +import { IConfigurationService, IDisposableRegistry, Resource } from '../../../common/types'; +import { Common, Python27Support } from '../../../common/utils/localize'; +import { IInterpreterService } from '../../../interpreter/contracts'; +import { IServiceContainer } from '../../../ioc/types'; +import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; +import { IDiagnosticsCommandFactory } from '../commands/types'; +import { DiagnosticCodes } from '../constants'; +import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '../promptHandler'; +import { DiagnosticScope, IDiagnostic, IDiagnosticHandlerService } from '../types'; + +export class JediPython27NotSupportedDiagnostic extends BaseDiagnostic { + constructor(message: string, resource: Resource) { + super( + DiagnosticCodes.JediPython27NotSupportedDiagnostic, + message, + DiagnosticSeverity.Warning, + DiagnosticScope.Global, + resource, + ); + } +} + +export const JediPython27NotSupportedDiagnosticServiceId = 'JediPython27NotSupportedDiagnosticServiceId'; + +export class JediPython27NotSupportedDiagnosticService extends BaseDiagnosticsService { + constructor( + @inject(IServiceContainer) serviceContainer: IServiceContainer, + @inject(IInterpreterService) private readonly interpreterService: IInterpreterService, + @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService, + @inject(IConfigurationService) private readonly configurationService: IConfigurationService, + @inject(IDiagnosticHandlerService) + @named(DiagnosticCommandPromptHandlerServiceId) + protected readonly messageService: IDiagnosticHandlerService, + @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, + ) { + super([DiagnosticCodes.JediPython27NotSupportedDiagnostic], serviceContainer, disposableRegistry, true); + } + + public async diagnose(resource: Resource): Promise { + const interpreter = await this.interpreterService.getActiveInterpreter(resource); + const { languageServer } = this.configurationService.getSettings(resource); + + await this.updateLanguageServerSetting(resource); + + // We don't need to check for JediLSP here, because we retrieve the setting from the configuration service, + // Which already switched the JediLSP option to Jedi. + if (interpreter && (interpreter.version?.major ?? 0) < 3 && languageServer === LanguageServerType.Jedi) { + return [new JediPython27NotSupportedDiagnostic(Python27Support.jediMessage, resource)]; + } + + return []; + } + + protected async onHandle(diagnostics: IDiagnostic[]): Promise { + if (diagnostics.length === 0 || !this.canHandle(diagnostics[0])) { + return; + } + const diagnostic = diagnostics[0]; + if (await this.filterService.shouldIgnoreDiagnostic(diagnostic.code)) { + return; + } + + const commandFactory = this.serviceContainer.get(IDiagnosticsCommandFactory); + const options = [ + { + prompt: Common.gotIt, + }, + { + prompt: Common.doNotShowAgain, + command: commandFactory.createCommand(diagnostic, { type: 'ignore', options: DiagnosticScope.Global }), + }, + ]; + + await this.messageService.handle(diagnostic, { commandPrompts: options }); + } + + private async updateLanguageServerSetting(resource: Resource): Promise { + // Update settings.json value to Jedi if it's JediLSP. + const settings = this.workspaceService + .getConfiguration('python', resource) + .inspect('languageServer'); + + let configTarget: ConfigurationTarget; + + if (settings?.workspaceValue === LanguageServerType.JediLSP) { + configTarget = ConfigurationTarget.Workspace; + } else if (settings?.globalValue === LanguageServerType.JediLSP) { + configTarget = ConfigurationTarget.Global; + } else { + return; + } + + await this.configurationService.updateSetting( + 'languageServer', + LanguageServerType.Jedi, + resource, + configTarget, + ); + } +} diff --git a/src/client/application/diagnostics/checks/lsNotSupported.ts b/src/client/application/diagnostics/checks/lsNotSupported.ts deleted file mode 100644 index c33154fbbff7..000000000000 --- a/src/client/application/diagnostics/checks/lsNotSupported.ts +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, named } from 'inversify'; -import { DiagnosticSeverity } from 'vscode'; -import { ILanguageServerCompatibilityService } from '../../../activation/types'; -import { IDisposableRegistry, Resource } from '../../../common/types'; -import { Diagnostics } from '../../../common/utils/localize'; -import { IServiceContainer } from '../../../ioc/types'; -import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; -import { IDiagnosticsCommandFactory } from '../commands/types'; -import { DiagnosticCodes } from '../constants'; -import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '../promptHandler'; -import { DiagnosticScope, IDiagnostic, IDiagnosticHandlerService } from '../types'; - -export class LSNotSupportedDiagnostic extends BaseDiagnostic { - constructor(message: string, resource: Resource) { - super( - DiagnosticCodes.LSNotSupportedDiagnostic, - message, - DiagnosticSeverity.Warning, - DiagnosticScope.Global, - resource - ); - } -} - -export const LSNotSupportedDiagnosticServiceId = 'LSNotSupportedDiagnosticServiceId'; - -export class LSNotSupportedDiagnosticService extends BaseDiagnosticsService { - constructor( - @inject(IServiceContainer) serviceContainer: IServiceContainer, - @inject(ILanguageServerCompatibilityService) - private readonly lsCompatibility: ILanguageServerCompatibilityService, - @inject(IDiagnosticHandlerService) - @named(DiagnosticCommandPromptHandlerServiceId) - protected readonly messageService: IDiagnosticHandlerService, - @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry - ) { - super([DiagnosticCodes.LSNotSupportedDiagnostic], serviceContainer, disposableRegistry, false); - } - public async diagnose(resource: Resource): Promise { - if (await this.lsCompatibility.isSupported()) { - return []; - } else { - return [new LSNotSupportedDiagnostic(Diagnostics.lsNotSupported(), resource)]; - } - } - protected async onHandle(diagnostics: IDiagnostic[]): Promise { - if (diagnostics.length === 0 || !this.canHandle(diagnostics[0])) { - return; - } - const diagnostic = diagnostics[0]; - if (await this.filterService.shouldIgnoreDiagnostic(diagnostic.code)) { - return; - } - const commandFactory = this.serviceContainer.get(IDiagnosticsCommandFactory); - const options = [ - { - prompt: 'More Info', - command: commandFactory.createCommand(diagnostic, { - type: 'launch', - options: 'https://aka.ms/pythonlsrequirements' - }) - }, - { - prompt: 'Do not show again', - command: commandFactory.createCommand(diagnostic, { type: 'ignore', options: DiagnosticScope.Global }) - } - ]; - - await this.messageService.handle(diagnostic, { commandPrompts: options }); - } -} diff --git a/src/client/application/diagnostics/checks/macPythonInterpreter.ts b/src/client/application/diagnostics/checks/macPythonInterpreter.ts index 26344f41a607..21d6b34fb7c5 100644 --- a/src/client/application/diagnostics/checks/macPythonInterpreter.ts +++ b/src/client/application/diagnostics/checks/macPythonInterpreter.ts @@ -1,44 +1,35 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -'use strict'; - +// eslint-disable-next-line max-classes-per-file import { inject, injectable } from 'inversify'; -import { ConfigurationChangeEvent, DiagnosticSeverity, Uri } from 'vscode'; -import { IWorkspaceService } from '../../../common/application/types'; -import { DeprecatePythonPath } from '../../../common/experimentGroups'; +import { DiagnosticSeverity, l10n } from 'vscode'; import '../../../common/extensions'; import { IPlatformService } from '../../../common/platform/types'; import { IConfigurationService, IDisposableRegistry, - IExperimentsManager, IInterpreterPathService, InterpreterConfigurationScope, - Resource + Resource, } from '../../../common/types'; -import { IInterpreterHelper, IInterpreterService, InterpreterType } from '../../../interpreter/contracts'; +import { IInterpreterHelper } from '../../../interpreter/contracts'; import { IServiceContainer } from '../../../ioc/types'; import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; import { IDiagnosticsCommandFactory } from '../commands/types'; import { DiagnosticCodes } from '../constants'; import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '../promptHandler'; import { DiagnosticScope, IDiagnostic, IDiagnosticCommand, IDiagnosticHandlerService } from '../types'; +import { Common } from '../../../common/utils/localize'; const messages = { - [DiagnosticCodes.MacInterpreterSelectedAndHaveOtherInterpretersDiagnostic]: - 'You have selected the macOS system install of Python, which is not recommended for use with the Python extension. Some functionality will be limited, please select a different interpreter.', - [DiagnosticCodes.MacInterpreterSelectedAndNoOtherInterpretersDiagnostic]: - 'The macOS system install of Python is not recommended, some functionality in the extension will be limited. Install another version of Python for the best experience.' + [DiagnosticCodes.MacInterpreterSelected]: l10n.t( + 'The selected macOS system install of Python is not recommended, some functionality in the extension will be limited. [Install another version of Python](https://www.python.org/downloads) or select a different interpreter for the best experience. [Learn more](https://aka.ms/AA7jfor).', + ), }; export class InvalidMacPythonInterpreterDiagnostic extends BaseDiagnostic { - constructor( - code: - | DiagnosticCodes.MacInterpreterSelectedAndNoOtherInterpretersDiagnostic - | DiagnosticCodes.MacInterpreterSelectedAndHaveOtherInterpretersDiagnostic, - resource: Resource - ) { + constructor(code: DiagnosticCodes.MacInterpreterSelected, resource: Resource) { super(code, messages[code], DiagnosticSeverity.Error, DiagnosticScope.WorkspaceFolder, resource); } } @@ -48,83 +39,45 @@ export const InvalidMacPythonInterpreterServiceId = 'InvalidMacPythonInterpreter @injectable() export class InvalidMacPythonInterpreterService extends BaseDiagnosticsService { protected changeThrottleTimeout = 1000; - private timeOut?: NodeJS.Timer | number; + + private timeOut?: NodeJS.Timeout | number; + constructor( @inject(IServiceContainer) serviceContainer: IServiceContainer, - @inject(IInterpreterService) private readonly interpreterService: IInterpreterService, @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, @inject(IPlatformService) private readonly platform: IPlatformService, - @inject(IInterpreterHelper) private readonly helper: IInterpreterHelper + @inject(IInterpreterHelper) private readonly helper: IInterpreterHelper, ) { - super( - [ - DiagnosticCodes.MacInterpreterSelectedAndHaveOtherInterpretersDiagnostic, - DiagnosticCodes.MacInterpreterSelectedAndNoOtherInterpretersDiagnostic - ], - serviceContainer, - disposableRegistry, - true - ); + super([DiagnosticCodes.MacInterpreterSelected], serviceContainer, disposableRegistry, true); this.addPythonPathChangedHandler(); } - public dispose() { - if (this.timeOut) { - // tslint:disable-next-line: no-any - clearTimeout(this.timeOut as any); + + public dispose(): void { + if (this.timeOut && typeof this.timeOut !== 'number') { + clearTimeout(this.timeOut); this.timeOut = undefined; } } + public async diagnose(resource: Resource): Promise { if (!this.platform.isMac) { return []; } const configurationService = this.serviceContainer.get(IConfigurationService); const settings = configurationService.getSettings(resource); - if (settings.disableInstallationChecks === true) { - return []; - } - - const hasInterpreters = await this.interpreterService.hasInterpreters; - if (!hasInterpreters) { + if (!(await this.helper.isMacDefaultPythonPath(settings.pythonPath))) { return []; } - - const currentInterpreter = await this.interpreterService.getActiveInterpreter(resource); - if (!currentInterpreter) { - return []; - } - - if (!this.helper.isMacDefaultPythonPath(settings.pythonPath)) { - return []; - } - if (!currentInterpreter || currentInterpreter.type !== InterpreterType.Unknown) { - return []; - } - - const interpreters = await this.interpreterService.getInterpreters(resource); - if (interpreters.filter((i) => !this.helper.isMacDefaultPythonPath(i.path)).length === 0) { - return [ - new InvalidMacPythonInterpreterDiagnostic( - DiagnosticCodes.MacInterpreterSelectedAndNoOtherInterpretersDiagnostic, - resource - ) - ]; - } - - return [ - new InvalidMacPythonInterpreterDiagnostic( - DiagnosticCodes.MacInterpreterSelectedAndHaveOtherInterpretersDiagnostic, - resource - ) - ]; + return [new InvalidMacPythonInterpreterDiagnostic(DiagnosticCodes.MacInterpreterSelected, resource)]; } + protected async onHandle(diagnostics: IDiagnostic[]): Promise { if (diagnostics.length === 0) { return; } const messageService = this.serviceContainer.get>( IDiagnosticHandlerService, - DiagnosticCommandPromptHandlerServiceId + DiagnosticCommandPromptHandlerServiceId, ); await Promise.all( diagnostics.map(async (diagnostic) => { @@ -134,49 +87,24 @@ export class InvalidMacPythonInterpreterService extends BaseDiagnosticsService { return; } const commandPrompts = this.getCommandPrompts(diagnostic); - return messageService.handle(diagnostic, { commandPrompts, message: diagnostic.message }); - }) + await messageService.handle(diagnostic, { commandPrompts, message: diagnostic.message }); + }), ); } - protected addPythonPathChangedHandler() { - const workspaceService = this.serviceContainer.get(IWorkspaceService); + + protected addPythonPathChangedHandler(): void { const disposables = this.serviceContainer.get(IDisposableRegistry); const interpreterPathService = this.serviceContainer.get(IInterpreterPathService); - const experiments = this.serviceContainer.get(IExperimentsManager); - if (experiments.inExperiment(DeprecatePythonPath.experiment)) { - disposables.push(interpreterPathService.onDidChange((i) => this.onDidChangeConfiguration(undefined, i))); - } - experiments.sendTelemetryIfInExperiment(DeprecatePythonPath.control); - disposables.push(workspaceService.onDidChangeConfiguration(this.onDidChangeConfiguration.bind(this))); + disposables.push(interpreterPathService.onDidChange((i) => this.onDidChangeConfiguration(i))); } + protected async onDidChangeConfiguration( - event?: ConfigurationChangeEvent, - interpreterConfigurationScope?: InterpreterConfigurationScope - ) { - let workspaceUri: Resource; - if (event) { - const workspaceService = this.serviceContainer.get(IWorkspaceService); - const workspacesUris: (Uri | undefined)[] = workspaceService.hasWorkspaceFolders - ? workspaceService.workspaceFolders!.map((workspace) => workspace.uri) - : [undefined]; - const workspaceUriIndex = workspacesUris.findIndex((uri) => - event.affectsConfiguration('python.pythonPath', uri) - ); - if (workspaceUriIndex === -1) { - return; - } - workspaceUri = workspacesUris[workspaceUriIndex]; - } else if (interpreterConfigurationScope) { - workspaceUri = interpreterConfigurationScope.uri; - } else { - throw new Error( - 'One of `interpreterConfigurationScope` or `event` should be defined when calling `onDidChangeConfiguration`.' - ); - } + interpreterConfigurationScope: InterpreterConfigurationScope, + ): Promise { + const workspaceUri = interpreterConfigurationScope.uri; // Lets wait, for more changes, dirty simple throttling. - if (this.timeOut) { - // tslint:disable-next-line: no-any - clearTimeout(this.timeOut as any); + if (this.timeOut && typeof this.timeOut !== 'number') { + clearTimeout(this.timeOut); this.timeOut = undefined; } this.timeOut = setTimeout(() => { @@ -186,50 +114,26 @@ export class InvalidMacPythonInterpreterService extends BaseDiagnosticsService { .ignoreErrors(); }, this.changeThrottleTimeout); } + private getCommandPrompts(diagnostic: IDiagnostic): { prompt: string; command?: IDiagnosticCommand }[] { const commandFactory = this.serviceContainer.get(IDiagnosticsCommandFactory); switch (diagnostic.code) { - case DiagnosticCodes.MacInterpreterSelectedAndHaveOtherInterpretersDiagnostic: { + case DiagnosticCodes.MacInterpreterSelected: { return [ { - prompt: 'Select Python Interpreter', + prompt: Common.selectPythonInterpreter, command: commandFactory.createCommand(diagnostic, { type: 'executeVSCCommand', - options: 'python.setInterpreter' - }) + options: 'python.setInterpreter', + }), }, { - prompt: 'Do not show again', + prompt: Common.doNotShowAgain, command: commandFactory.createCommand(diagnostic, { type: 'ignore', - options: DiagnosticScope.Global - }) - } - ]; - } - case DiagnosticCodes.MacInterpreterSelectedAndNoOtherInterpretersDiagnostic: { - return [ - { - prompt: 'Learn more', - command: commandFactory.createCommand(diagnostic, { - type: 'launch', - options: 'https://code.visualstudio.com/docs/python/python-tutorial#_prerequisites' - }) - }, - { - prompt: 'Download', - command: commandFactory.createCommand(diagnostic, { - type: 'launch', - options: 'https://www.python.org/downloads' - }) + options: DiagnosticScope.Global, + }), }, - { - prompt: 'Do not show again', - command: commandFactory.createCommand(diagnostic, { - type: 'ignore', - options: DiagnosticScope.Global - }) - } ]; } default: { diff --git a/src/client/application/diagnostics/checks/powerShellActivation.ts b/src/client/application/diagnostics/checks/powerShellActivation.ts index a2e8c08ff5c5..85f68db0d6a4 100644 --- a/src/client/application/diagnostics/checks/powerShellActivation.ts +++ b/src/client/application/diagnostics/checks/powerShellActivation.ts @@ -1,15 +1,15 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -'use strict'; - +// eslint-disable-next-line max-classes-per-file import { inject, injectable } from 'inversify'; -import { DiagnosticSeverity } from 'vscode'; +import { DiagnosticSeverity, l10n } from 'vscode'; import '../../../common/extensions'; -import { traceError } from '../../../common/logger'; import { useCommandPromptAsDefaultShell } from '../../../common/terminal/commandPrompt'; import { IConfigurationService, ICurrentProcess, IDisposableRegistry, Resource } from '../../../common/types'; +import { Common } from '../../../common/utils/localize'; import { IServiceContainer } from '../../../ioc/types'; +import { traceError } from '../../../logging'; import { sendTelemetryEvent } from '../../../telemetry'; import { EventName } from '../../../telemetry/constants'; import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; @@ -18,8 +18,9 @@ import { DiagnosticCodes } from '../constants'; import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '../promptHandler'; import { DiagnosticScope, IDiagnostic, IDiagnosticHandlerService } from '../types'; -const PowershellActivationNotSupportedWithBatchFilesMessage = - 'Activation of the selected Python environment is not supported in PowerShell. Consider changing your shell to Command Prompt.'; +const PowershellActivationNotSupportedWithBatchFilesMessage = l10n.t( + 'Activation of the selected Python environment is not supported in PowerShell. Consider changing your shell to Command Prompt.', +); export class PowershellActivationNotAvailableDiagnostic extends BaseDiagnostic { constructor(resource: Resource) { @@ -29,7 +30,8 @@ export class PowershellActivationNotAvailableDiagnostic extends BaseDiagnostic { DiagnosticSeverity.Warning, DiagnosticScope.Global, resource, - 'always' + undefined, + 'always', ); } } @@ -40,24 +42,28 @@ export const PowerShellActivationHackDiagnosticsServiceId = @injectable() export class PowerShellActivationHackDiagnosticsService extends BaseDiagnosticsService { protected readonly messageService: IDiagnosticHandlerService; + constructor( @inject(IServiceContainer) serviceContainer: IServiceContainer, - @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry + @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, ) { super( [DiagnosticCodes.EnvironmentActivationInPowerShellWithBatchFilesNotSupportedDiagnostic], serviceContainer, disposableRegistry, - true + true, ); this.messageService = serviceContainer.get>( IDiagnosticHandlerService, - DiagnosticCommandPromptHandlerServiceId + DiagnosticCommandPromptHandlerServiceId, ); } - public async diagnose(_resource: Resource): Promise { + + // eslint-disable-next-line class-methods-use-this + public async diagnose(): Promise { return []; } + protected async onHandle(diagnostics: IDiagnostic[]): Promise { // This class can only handle one type of diagnostic, hence just use first item in list. if (diagnostics.length === 0 || !this.canHandle(diagnostics[0])) { @@ -72,34 +78,34 @@ export class PowerShellActivationHackDiagnosticsService extends BaseDiagnosticsS const configurationService = this.serviceContainer.get(IConfigurationService); const options = [ { - prompt: 'Use Command Prompt', - // tslint:disable-next-line:no-object-literal-type-assertion + prompt: Common.useCommandPrompt, + command: { diagnostic, invoke: async (): Promise => { sendTelemetryEvent(EventName.DIAGNOSTICS_ACTION, undefined, { - action: 'switchToCommandPrompt' + action: 'switchToCommandPrompt', }); useCommandPromptAsDefaultShell(currentProcess, configurationService).catch((ex) => - traceError('Use Command Prompt as default shell', ex) + traceError('Use Command Prompt as default shell', ex), ); - } - } + }, + }, }, { - prompt: 'Ignore' + prompt: Common.ignore, }, { - prompt: 'Always Ignore', - command: commandFactory.createCommand(diagnostic, { type: 'ignore', options: DiagnosticScope.Global }) + prompt: Common.alwaysIgnore, + command: commandFactory.createCommand(diagnostic, { type: 'ignore', options: DiagnosticScope.Global }), }, { - prompt: 'More Info', + prompt: Common.moreInfo, command: commandFactory.createCommand(diagnostic, { type: 'launch', - options: 'https://aka.ms/CondaPwsh' - }) - } + options: 'https://aka.ms/CondaPwsh', + }), + }, ]; await this.messageService.handle(diagnostic, { commandPrompts: options }); diff --git a/src/client/application/diagnostics/checks/pylanceDefault.ts b/src/client/application/diagnostics/checks/pylanceDefault.ts new file mode 100644 index 000000000000..16ee2968c8d6 --- /dev/null +++ b/src/client/application/diagnostics/checks/pylanceDefault.ts @@ -0,0 +1,94 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// eslint-disable-next-line max-classes-per-file +import { inject, named } from 'inversify'; +import { DiagnosticSeverity } from 'vscode'; +import { IDisposableRegistry, IExtensionContext, Resource } from '../../../common/types'; +import { Diagnostics, Common } from '../../../common/utils/localize'; +import { IServiceContainer } from '../../../ioc/types'; +import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; +import { DiagnosticCodes } from '../constants'; +import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '../promptHandler'; +import { DiagnosticScope, IDiagnostic, IDiagnosticHandlerService } from '../types'; + +export const PYLANCE_PROMPT_MEMENTO = 'pylanceDefaultPromptMemento'; +const EXTENSION_VERSION_MEMENTO = 'extensionVersion'; + +export class PylanceDefaultDiagnostic extends BaseDiagnostic { + constructor(message: string, resource: Resource) { + super( + DiagnosticCodes.PylanceDefaultDiagnostic, + message, + DiagnosticSeverity.Information, + DiagnosticScope.Global, + resource, + ); + } +} + +export const PylanceDefaultDiagnosticServiceId = 'PylanceDefaultDiagnosticServiceId'; + +export class PylanceDefaultDiagnosticService extends BaseDiagnosticsService { + public initialMementoValue: string | undefined = undefined; + + constructor( + @inject(IServiceContainer) serviceContainer: IServiceContainer, + @inject(IExtensionContext) private readonly context: IExtensionContext, + @inject(IDiagnosticHandlerService) + @named(DiagnosticCommandPromptHandlerServiceId) + protected readonly messageService: IDiagnosticHandlerService, + @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, + ) { + super([DiagnosticCodes.PylanceDefaultDiagnostic], serviceContainer, disposableRegistry, true, true); + + this.initialMementoValue = this.context.globalState.get(EXTENSION_VERSION_MEMENTO); + } + + public async diagnose(resource: Resource): Promise { + if (!(await this.shouldShowPrompt())) { + return []; + } + + return [new PylanceDefaultDiagnostic(Diagnostics.pylanceDefaultMessage, resource)]; + } + + protected async onHandle(diagnostics: IDiagnostic[]): Promise { + if (diagnostics.length === 0 || !this.canHandle(diagnostics[0])) { + return; + } + + const diagnostic = diagnostics[0]; + if (await this.filterService.shouldIgnoreDiagnostic(diagnostic.code)) { + return; + } + + const options = [{ prompt: Common.ok }]; + + await this.messageService.handle(diagnostic, { + commandPrompts: options, + onClose: this.updateMemento.bind(this), + }); + } + + private async updateMemento() { + await this.context.globalState.update(PYLANCE_PROMPT_MEMENTO, true); + } + + private async shouldShowPrompt(): Promise { + const savedVersion: string | undefined = this.initialMementoValue; + const promptShown: boolean | undefined = this.context.globalState.get(PYLANCE_PROMPT_MEMENTO); + + // savedVersion being undefined means that this is the first time the user activates the extension, + // and we don't want to show the prompt to first-time users. + // We set PYLANCE_PROMPT_MEMENTO here to skip the prompt + // in case the user reloads the extension and savedVersion becomes set + if (savedVersion === undefined) { + await this.updateMemento(); + return false; + } + + // promptShown being undefined means that this is the first time we check if we should show the prompt. + return promptShown === undefined; + } +} diff --git a/src/client/application/diagnostics/checks/pythonInterpreter.ts b/src/client/application/diagnostics/checks/pythonInterpreter.ts index 11aaba9671a2..9167e232a417 100644 --- a/src/client/application/diagnostics/checks/pythonInterpreter.ts +++ b/src/client/application/diagnostics/checks/pythonInterpreter.ts @@ -1,89 +1,262 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -'use strict'; - +// eslint-disable-next-line max-classes-per-file import { inject, injectable } from 'inversify'; -import { DiagnosticSeverity } from 'vscode'; +import { DiagnosticSeverity, l10n } from 'vscode'; import '../../../common/extensions'; -import { IConfigurationService, IDisposableRegistry, Resource } from '../../../common/types'; +import * as path from 'path'; +import { IConfigurationService, IDisposableRegistry, IInterpreterPathService, Resource } from '../../../common/types'; import { IInterpreterService } from '../../../interpreter/contracts'; import { IServiceContainer } from '../../../ioc/types'; import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; import { IDiagnosticsCommandFactory } from '../commands/types'; import { DiagnosticCodes } from '../constants'; import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '../promptHandler'; -import { DiagnosticScope, IDiagnostic, IDiagnosticCommand, IDiagnosticHandlerService } from '../types'; +import { + DiagnosticScope, + IDiagnostic, + IDiagnosticCommand, + IDiagnosticHandlerService, + IDiagnosticMessageOnCloseHandler, +} from '../types'; +import { Common, Interpreters } from '../../../common/utils/localize'; +import { Commands } from '../../../common/constants'; +import { ICommandManager, IWorkspaceService } from '../../../common/application/types'; +import { sendTelemetryEvent } from '../../../telemetry'; +import { EventName } from '../../../telemetry/constants'; +import { IExtensionSingleActivationService } from '../../../activation/types'; +import { cache } from '../../../common/utils/decorators'; +import { noop } from '../../../common/utils/misc'; +import { getEnvironmentVariable, getOSType, OSType } from '../../../common/utils/platform'; +import { IFileSystem } from '../../../common/platform/types'; +import { traceError, traceWarn } from '../../../logging'; +import { getExecutable } from '../../../common/process/internal/python'; +import { getSearchPathEnvVarNames } from '../../../common/utils/exec'; +import { IProcessServiceFactory } from '../../../common/process/types'; +import { normCasePath } from '../../../common/platform/fs-paths'; +import { useEnvExtension } from '../../../envExt/api.internal'; const messages = { - [DiagnosticCodes.NoPythonInterpretersDiagnostic]: - 'Python is not installed. Please download and install Python before using the extension.', - [DiagnosticCodes.NoCurrentlySelectedPythonInterpreterDiagnostic]: - 'No Python interpreter is selected. You need to select a Python interpreter to enable features such as IntelliSense, linting, and debugging.' + [DiagnosticCodes.NoPythonInterpretersDiagnostic]: l10n.t( + 'No Python interpreter is selected. Please select a Python interpreter to enable features such as IntelliSense, linting, and debugging.', + ), + [DiagnosticCodes.InvalidPythonInterpreterDiagnostic]: l10n.t( + 'An Invalid Python interpreter is selected{0}, please try changing it to enable features such as IntelliSense, linting, and debugging. See output for more details regarding why the interpreter is invalid.', + ), + [DiagnosticCodes.InvalidComspecDiagnostic]: l10n.t( + 'We detected an issue with one of your environment variables that breaks features such as IntelliSense, linting and debugging. Try setting the "ComSpec" variable to a valid Command Prompt path in your system to fix it.', + ), + [DiagnosticCodes.IncompletePathVarDiagnostic]: l10n.t( + 'We detected an issue with "Path" environment variable that breaks features such as IntelliSense, linting and debugging. Please edit it to make sure it contains the "System32" subdirectories.', + ), + [DiagnosticCodes.DefaultShellErrorDiagnostic]: l10n.t( + 'We detected an issue with your default shell that breaks features such as IntelliSense, linting and debugging. Try resetting "ComSpec" and "Path" environment variables to fix it.', + ), }; export class InvalidPythonInterpreterDiagnostic extends BaseDiagnostic { constructor( - code: - | DiagnosticCodes.NoPythonInterpretersDiagnostic - | DiagnosticCodes.NoCurrentlySelectedPythonInterpreterDiagnostic, - resource: Resource + code: DiagnosticCodes.NoPythonInterpretersDiagnostic | DiagnosticCodes.InvalidPythonInterpreterDiagnostic, + resource: Resource, + workspaceService: IWorkspaceService, + scope = DiagnosticScope.WorkspaceFolder, ) { - super(code, messages[code], DiagnosticSeverity.Error, DiagnosticScope.WorkspaceFolder, resource); + let formatArg = ''; + if ( + workspaceService.workspaceFile && + workspaceService.workspaceFolders && + workspaceService.workspaceFolders?.length > 1 + ) { + // Specify folder name in case of multiroot scenarios + const folder = workspaceService.getWorkspaceFolder(resource); + if (folder) { + formatArg = ` ${l10n.t('for workspace')} ${path.basename(folder.uri.fsPath)}`; + } + } + super(code, messages[code].format(formatArg), DiagnosticSeverity.Error, scope, resource, undefined, 'always'); + } +} + +type DefaultShellDiagnostics = + | DiagnosticCodes.InvalidComspecDiagnostic + | DiagnosticCodes.IncompletePathVarDiagnostic + | DiagnosticCodes.DefaultShellErrorDiagnostic; + +export class DefaultShellDiagnostic extends BaseDiagnostic { + constructor(code: DefaultShellDiagnostics, resource: Resource, scope = DiagnosticScope.Global) { + super(code, messages[code], DiagnosticSeverity.Error, scope, resource, undefined, 'always'); } } export const InvalidPythonInterpreterServiceId = 'InvalidPythonInterpreterServiceId'; @injectable() -export class InvalidPythonInterpreterService extends BaseDiagnosticsService { +export class InvalidPythonInterpreterService extends BaseDiagnosticsService + implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: false, virtualWorkspace: true }; + constructor( @inject(IServiceContainer) serviceContainer: IServiceContainer, - @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry + @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, ) { super( [ DiagnosticCodes.NoPythonInterpretersDiagnostic, - DiagnosticCodes.NoCurrentlySelectedPythonInterpreterDiagnostic + DiagnosticCodes.InvalidPythonInterpreterDiagnostic, + DiagnosticCodes.InvalidComspecDiagnostic, + DiagnosticCodes.IncompletePathVarDiagnostic, + DiagnosticCodes.DefaultShellErrorDiagnostic, ], serviceContainer, disposableRegistry, - false + false, ); } + + public async activate(): Promise { + const commandManager = this.serviceContainer.get(ICommandManager); + this.disposableRegistry.push( + commandManager.registerCommand(Commands.TriggerEnvironmentSelection, (resource: Resource) => + this.triggerEnvSelectionIfNecessary(resource), + ), + ); + const interpreterService = this.serviceContainer.get(IInterpreterService); + this.disposableRegistry.push( + interpreterService.onDidChangeInterpreterConfiguration((e) => + commandManager.executeCommand(Commands.TriggerEnvironmentSelection, e).then(noop, noop), + ), + ); + } + public async diagnose(resource: Resource): Promise { - const configurationService = this.serviceContainer.get(IConfigurationService); - const settings = configurationService.getSettings(resource); - if (settings.disableInstallationChecks === true) { - return []; - } + return this.diagnoseDefaultShell(resource); + } + public async _manualDiagnose(resource: Resource): Promise { + const workspaceService = this.serviceContainer.get(IWorkspaceService); const interpreterService = this.serviceContainer.get(IInterpreterService); - const hasInterpreters = await interpreterService.hasInterpreters; + const diagnostics = await this.diagnoseDefaultShell(resource); + if (diagnostics.length > 0) { + return diagnostics; + } + const hasInterpreters = await interpreterService.hasInterpreters(); + const interpreterPathService = this.serviceContainer.get(IInterpreterPathService); + const isInterpreterSetToDefault = interpreterPathService.get(resource) === 'python'; - if (!hasInterpreters) { - return [new InvalidPythonInterpreterDiagnostic(DiagnosticCodes.NoPythonInterpretersDiagnostic, resource)]; + if (!hasInterpreters && isInterpreterSetToDefault) { + if (useEnvExtension()) { + traceWarn(Interpreters.envExtDiscoveryNoEnvironments); + } + return [ + new InvalidPythonInterpreterDiagnostic( + DiagnosticCodes.NoPythonInterpretersDiagnostic, + resource, + workspaceService, + DiagnosticScope.Global, + ), + ]; } const currentInterpreter = await interpreterService.getActiveInterpreter(resource); if (!currentInterpreter) { + if (useEnvExtension()) { + traceWarn(Interpreters.envExtNoActiveEnvironment); + } return [ new InvalidPythonInterpreterDiagnostic( - DiagnosticCodes.NoCurrentlySelectedPythonInterpreterDiagnostic, - resource - ) + DiagnosticCodes.InvalidPythonInterpreterDiagnostic, + resource, + workspaceService, + ), ]; } + return []; + } + public async triggerEnvSelectionIfNecessary(resource: Resource): Promise { + const diagnostics = await this._manualDiagnose(resource); + if (!diagnostics.length) { + return true; + } + this.handle(diagnostics).ignoreErrors(); + return false; + } + + private async diagnoseDefaultShell(resource: Resource): Promise { + if (getOSType() !== OSType.Windows) { + return []; + } + const interpreterService = this.serviceContainer.get(IInterpreterService); + const currentInterpreter = await interpreterService.getActiveInterpreter(resource); + if (currentInterpreter) { + return []; + } + try { + await this.shellExecPython(); + } catch (ex) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if ((ex as any).errno === -4058) { + // ENOENT (-4058) error is thrown by Node when the default shell is invalid. + traceError('ComSpec is likely set to an invalid value', getEnvironmentVariable('ComSpec')); + if (await this.isComspecInvalid()) { + return [new DefaultShellDiagnostic(DiagnosticCodes.InvalidComspecDiagnostic, resource)]; + } + if (this.isPathVarIncomplete()) { + traceError('PATH env var appears to be incomplete', process.env.Path, process.env.PATH); + return [new DefaultShellDiagnostic(DiagnosticCodes.IncompletePathVarDiagnostic, resource)]; + } + return [new DefaultShellDiagnostic(DiagnosticCodes.DefaultShellErrorDiagnostic, resource)]; + } + } return []; } + + private async isComspecInvalid() { + const comSpec = getEnvironmentVariable('ComSpec') ?? ''; + const fs = this.serviceContainer.get(IFileSystem); + return fs.fileExists(comSpec).then((exists) => !exists); + } + + // eslint-disable-next-line class-methods-use-this + private isPathVarIncomplete() { + const envVars = getSearchPathEnvVarNames(); + const systemRoot = getEnvironmentVariable('SystemRoot') ?? 'C:\\WINDOWS'; + const system32 = path.join(systemRoot, 'system32'); + for (const envVar of envVars) { + const value = getEnvironmentVariable(envVar); + if (value && normCasePath(value).includes(normCasePath(system32))) { + return false; + } + } + return true; + } + + @cache(-1, true) + // eslint-disable-next-line class-methods-use-this + private async shellExecPython() { + const configurationService = this.serviceContainer.get(IConfigurationService); + const { pythonPath } = configurationService.getSettings(); + const [args] = getExecutable(); + const argv = [pythonPath, ...args]; + // Concat these together to make a set of quoted strings + const quoted = argv.reduce( + (p, c) => (p ? `${p} ${c.toCommandArgumentForPythonExt()}` : `${c.toCommandArgumentForPythonExt()}`), + '', + ); + const processServiceFactory = this.serviceContainer.get(IProcessServiceFactory); + const service = await processServiceFactory.create(); + return service.shellExec(quoted, { timeout: 15000 }); + } + + @cache(1000, true) // This is to handle throttling of multiple events. protected async onHandle(diagnostics: IDiagnostic[]): Promise { if (diagnostics.length === 0) { return; } const messageService = this.serviceContainer.get>( IDiagnosticHandlerService, - DiagnosticCommandPromptHandlerServiceId + DiagnosticCommandPromptHandlerServiceId, ); await Promise.all( diagnostics.map(async (diagnostic) => { @@ -91,38 +264,63 @@ export class InvalidPythonInterpreterService extends BaseDiagnosticsService { return; } const commandPrompts = this.getCommandPrompts(diagnostic); - return messageService.handle(diagnostic, { commandPrompts, message: diagnostic.message }); - }) + const onClose = getOnCloseHandler(diagnostic); + await messageService.handle(diagnostic, { commandPrompts, message: diagnostic.message, onClose }); + }), ); } + private getCommandPrompts(diagnostic: IDiagnostic): { prompt: string; command?: IDiagnosticCommand }[] { const commandFactory = this.serviceContainer.get(IDiagnosticsCommandFactory); - switch (diagnostic.code) { - case DiagnosticCodes.NoPythonInterpretersDiagnostic: { - return [ - { - prompt: 'Download', - command: commandFactory.createCommand(diagnostic, { - type: 'launch', - options: 'https://www.python.org/downloads' - }) - } - ]; - } - case DiagnosticCodes.NoCurrentlySelectedPythonInterpreterDiagnostic: { - return [ - { - prompt: 'Select Python Interpreter', - command: commandFactory.createCommand(diagnostic, { - type: 'executeVSCCommand', - options: 'python.setInterpreter' - }) - } - ]; - } - default: { - throw new Error("Invalid diagnostic for 'InvalidPythonInterpreterService'"); - } + if ( + diagnostic.code === DiagnosticCodes.InvalidComspecDiagnostic || + diagnostic.code === DiagnosticCodes.IncompletePathVarDiagnostic || + diagnostic.code === DiagnosticCodes.DefaultShellErrorDiagnostic + ) { + const links: Record = { + InvalidComspecDiagnostic: 'https://aka.ms/AAk3djo', + IncompletePathVarDiagnostic: 'https://aka.ms/AAk744c', + DefaultShellErrorDiagnostic: 'https://aka.ms/AAk7qix', + }; + return [ + { + prompt: Common.seeInstructions, + command: commandFactory.createCommand(diagnostic, { + type: 'launch', + options: links[diagnostic.code], + }), + }, + ]; + } + const prompts = [ + { + prompt: Common.selectPythonInterpreter, + command: commandFactory.createCommand(diagnostic, { + type: 'executeVSCCommand', + options: Commands.Set_Interpreter, + }), + }, + ]; + if (diagnostic.code === DiagnosticCodes.InvalidPythonInterpreterDiagnostic) { + prompts.push({ + prompt: Common.openOutputPanel, + command: commandFactory.createCommand(diagnostic, { + type: 'executeVSCCommand', + options: Commands.ViewOutput, + }), + }); } + return prompts; + } +} + +function getOnCloseHandler(diagnostic: IDiagnostic): IDiagnosticMessageOnCloseHandler | undefined { + if (diagnostic.code === DiagnosticCodes.NoPythonInterpretersDiagnostic) { + return (response?: string) => { + sendTelemetryEvent(EventName.PYTHON_NOT_INSTALLED_PROMPT, undefined, { + selection: response ? 'Download' : 'Ignore', + }); + }; } + return undefined; } diff --git a/src/client/application/diagnostics/checks/switchToDefaultLS.ts b/src/client/application/diagnostics/checks/switchToDefaultLS.ts new file mode 100644 index 000000000000..bd93a684d9a2 --- /dev/null +++ b/src/client/application/diagnostics/checks/switchToDefaultLS.ts @@ -0,0 +1,80 @@ +/* eslint-disable max-classes-per-file */ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { inject, injectable, named } from 'inversify'; +import { ConfigurationTarget, DiagnosticSeverity } from 'vscode'; +import { LanguageServerType } from '../../../activation/types'; +import { IWorkspaceService } from '../../../common/application/types'; +import { IDisposableRegistry, Resource } from '../../../common/types'; +import { Common, SwitchToDefaultLS } from '../../../common/utils/localize'; +import { IServiceContainer } from '../../../ioc/types'; +import { BaseDiagnostic, BaseDiagnosticsService } from '../base'; +import { DiagnosticCodes } from '../constants'; +import { DiagnosticCommandPromptHandlerServiceId, MessageCommandPrompt } from '../promptHandler'; +import { DiagnosticScope, IDiagnostic, IDiagnosticHandlerService } from '../types'; + +export class SwitchToDefaultLanguageServerDiagnostic extends BaseDiagnostic { + constructor(message: string, resource: Resource) { + super( + DiagnosticCodes.SwitchToDefaultLanguageServerDiagnostic, + message, + DiagnosticSeverity.Warning, + DiagnosticScope.Global, + resource, + ); + } +} + +export const SwitchToDefaultLanguageServerDiagnosticServiceId = 'SwitchToDefaultLanguageServerDiagnosticServiceId'; + +@injectable() +export class SwitchToDefaultLanguageServerDiagnosticService extends BaseDiagnosticsService { + constructor( + @inject(IServiceContainer) serviceContainer: IServiceContainer, + @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService, + @inject(IDiagnosticHandlerService) + @named(DiagnosticCommandPromptHandlerServiceId) + protected readonly messageService: IDiagnosticHandlerService, + @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, + ) { + super([DiagnosticCodes.JediPython27NotSupportedDiagnostic], serviceContainer, disposableRegistry, true, true); + } + + public diagnose(resource: Resource): Promise { + let changed = false; + const config = this.workspaceService.getConfiguration('python'); + const value = config.inspect('languageServer'); + if (value?.workspaceValue === LanguageServerType.Microsoft) { + config.update('languageServer', 'Default', ConfigurationTarget.Workspace); + changed = true; + } + + if (value?.globalValue === LanguageServerType.Microsoft) { + config.update('languageServer', 'Default', ConfigurationTarget.Global); + changed = true; + } + + return Promise.resolve( + changed ? [new SwitchToDefaultLanguageServerDiagnostic(SwitchToDefaultLS.bannerMessage, resource)] : [], + ); + } + + protected async onHandle(diagnostics: IDiagnostic[]): Promise { + if (diagnostics.length === 0 || !this.canHandle(diagnostics[0])) { + return; + } + const diagnostic = diagnostics[0]; + if (await this.filterService.shouldIgnoreDiagnostic(diagnostic.code)) { + return; + } + + await this.messageService.handle(diagnostic, { + commandPrompts: [ + { + prompt: Common.gotIt, + }, + ], + }); + } +} diff --git a/src/client/application/diagnostics/commands/execVSCCommand.ts b/src/client/application/diagnostics/commands/execVSCCommand.ts index cb935f05d33d..50c7367f199a 100644 --- a/src/client/application/diagnostics/commands/execVSCCommand.ts +++ b/src/client/application/diagnostics/commands/execVSCCommand.ts @@ -15,7 +15,7 @@ export class ExecuteVSCCommand extends BaseDiagnosticCommand { constructor( diagnostic: IDiagnostic, private serviceContainer: IServiceContainer, - private commandName: CommandsWithoutArgs + private commandName: CommandsWithoutArgs, ) { super(diagnostic); } diff --git a/src/client/application/diagnostics/commands/ignore.ts b/src/client/application/diagnostics/commands/ignore.ts index 07078cc17fe6..311128195975 100644 --- a/src/client/application/diagnostics/commands/ignore.ts +++ b/src/client/application/diagnostics/commands/ignore.ts @@ -13,7 +13,7 @@ export class IgnoreDiagnosticCommand extends BaseDiagnosticCommand { constructor( diagnostic: IDiagnostic, private serviceContainer: IServiceContainer, - private readonly scope: DiagnosticScope + private readonly scope: DiagnosticScope, ) { super(diagnostic); } diff --git a/src/client/application/diagnostics/commands/types.ts b/src/client/application/diagnostics/commands/types.ts index 118dc626be82..f65460b0d113 100644 --- a/src/client/application/diagnostics/commands/types.ts +++ b/src/client/application/diagnostics/commands/types.ts @@ -7,10 +7,10 @@ import { CommandsWithoutArgs } from '../../../common/application/commands'; import { DiagnosticScope, IDiagnostic, IDiagnosticCommand } from '../types'; export type CommandOption = { type: Type; options: Option }; -export type LaunchBrowserOption = CommandOption<'launch', string>; -export type IgnoreDiagnostOption = CommandOption<'ignore', DiagnosticScope>; -export type ExecuteVSCCommandOption = CommandOption<'executeVSCCommand', CommandsWithoutArgs>; -export type CommandOptions = LaunchBrowserOption | IgnoreDiagnostOption | ExecuteVSCCommandOption; +type LaunchBrowserOption = CommandOption<'launch', string>; +type IgnoreDiagnosticOption = CommandOption<'ignore', DiagnosticScope>; +type ExecuteVSCCommandOption = CommandOption<'executeVSCCommand', CommandsWithoutArgs>; +export type CommandOptions = LaunchBrowserOption | IgnoreDiagnosticOption | ExecuteVSCCommandOption; export const IDiagnosticsCommandFactory = Symbol('IDiagnosticsCommandFactory'); diff --git a/src/client/application/diagnostics/constants.ts b/src/client/application/diagnostics/constants.ts index 46deb3c1620b..ca2867fc4f49 100644 --- a/src/client/application/diagnostics/constants.ts +++ b/src/client/application/diagnostics/constants.ts @@ -7,13 +7,21 @@ export enum DiagnosticCodes { InvalidEnvironmentPathVariableDiagnostic = 'InvalidEnvironmentPathVariableDiagnostic', InvalidDebuggerTypeDiagnostic = 'InvalidDebuggerTypeDiagnostic', NoPythonInterpretersDiagnostic = 'NoPythonInterpretersDiagnostic', - MacInterpreterSelectedAndNoOtherInterpretersDiagnostic = 'MacInterpreterSelectedAndNoOtherInterpretersDiagnostic', - MacInterpreterSelectedAndHaveOtherInterpretersDiagnostic = 'MacInterpreterSelectedAndHaveOtherInterpretersDiagnostic', + MacInterpreterSelected = 'MacInterpreterSelected', InvalidPythonPathInDebuggerSettingsDiagnostic = 'InvalidPythonPathInDebuggerSettingsDiagnostic', InvalidPythonPathInDebuggerLaunchDiagnostic = 'InvalidPythonPathInDebuggerLaunchDiagnostic', EnvironmentActivationInPowerShellWithBatchFilesNotSupportedDiagnostic = 'EnvironmentActivationInPowerShellWithBatchFilesNotSupportedDiagnostic', - NoCurrentlySelectedPythonInterpreterDiagnostic = 'InvalidPythonInterpreterDiagnostic', + InvalidPythonInterpreterDiagnostic = 'InvalidPythonInterpreterDiagnostic', + InvalidComspecDiagnostic = 'InvalidComspecDiagnostic', + IncompletePathVarDiagnostic = 'IncompletePathVarDiagnostic', + DefaultShellErrorDiagnostic = 'DefaultShellErrorDiagnostic', LSNotSupportedDiagnostic = 'LSNotSupportedDiagnostic', + PythonPathDeprecatedDiagnostic = 'PythonPathDeprecatedDiagnostic', JustMyCodeDiagnostic = 'JustMyCodeDiagnostic', - ConsoleTypeDiagnostic = 'ConsoleTypeDiagnostic' + ConsoleTypeDiagnostic = 'ConsoleTypeDiagnostic', + ConfigPythonPathDiagnostic = 'ConfigPythonPathDiagnostic', + PylanceDefaultDiagnostic = 'PylanceDefaultDiagnostic', + JediPython27NotSupportedDiagnostic = 'JediPython27NotSupportedDiagnostic', + SwitchToDefaultLanguageServerDiagnostic = 'SwitchToDefaultLanguageServerDiagnostic', + SwitchToPreReleaseExtensionDiagnostic = 'SwitchToPreReleaseExtensionDiagnostic', } diff --git a/src/client/application/diagnostics/filter.ts b/src/client/application/diagnostics/filter.ts index 7aaf94f490e3..a304a6f558fc 100644 --- a/src/client/application/diagnostics/filter.ts +++ b/src/client/application/diagnostics/filter.ts @@ -10,7 +10,7 @@ import { DiagnosticScope, IDiagnosticFilterService } from './types'; export enum FilterKeys { GlobalDiagnosticFilter = 'GLOBAL_DIAGNOSTICS_FILTER', - WorkspaceDiagnosticFilter = 'WORKSPACE_DIAGNOSTICS_FILTER' + WorkspaceDiagnosticFilter = 'WORKSPACE_DIAGNOSTICS_FILTER', } @injectable() @@ -21,7 +21,7 @@ export class DiagnosticFilterService implements IDiagnosticFilterService { const globalState = factory.createGlobalPersistentState(FilterKeys.GlobalDiagnosticFilter, []); const workspaceState = factory.createWorkspacePersistentState( FilterKeys.WorkspaceDiagnosticFilter, - [] + [], ); return globalState.value.indexOf(code) >= 0 || workspaceState.value.indexOf(code) >= 0; } diff --git a/src/client/application/diagnostics/promptHandler.ts b/src/client/application/diagnostics/promptHandler.ts index 6f244d3d4bc4..25b946b2ffb5 100644 --- a/src/client/application/diagnostics/promptHandler.ts +++ b/src/client/application/diagnostics/promptHandler.ts @@ -7,7 +7,7 @@ import { inject, injectable } from 'inversify'; import { DiagnosticSeverity } from 'vscode'; import { IApplicationShell } from '../../common/application/types'; import { IServiceContainer } from '../../ioc/types'; -import { IDiagnostic, IDiagnosticCommand, IDiagnosticHandlerService } from './types'; +import { IDiagnostic, IDiagnosticCommand, IDiagnosticHandlerService, IDiagnosticMessageOnCloseHandler } from './types'; export type MessageCommandPrompt = { commandPrompts: { @@ -15,6 +15,7 @@ export type MessageCommandPrompt = { command?: IDiagnosticCommand; }[]; message?: string; + onClose?: IDiagnosticMessageOnCloseHandler; }; export const DiagnosticCommandPromptHandlerServiceId = 'DiagnosticCommandPromptHandlerServiceId'; @@ -27,14 +28,17 @@ export class DiagnosticCommandPromptHandlerService implements IDiagnosticHandler } public async handle( diagnostic: IDiagnostic, - options: MessageCommandPrompt = { commandPrompts: [] } + options: MessageCommandPrompt = { commandPrompts: [] }, ): Promise { const prompts = options.commandPrompts.map((option) => option.prompt); const response = await this.displayMessage( options.message ? options.message : diagnostic.message, diagnostic.severity, - prompts + prompts, ); + if (options.onClose) { + options.onClose(response); + } if (!response) { return; } @@ -46,7 +50,7 @@ export class DiagnosticCommandPromptHandlerService implements IDiagnosticHandler private async displayMessage( message: string, severity: DiagnosticSeverity, - prompts: string[] + prompts: string[], ): Promise { switch (severity) { case DiagnosticSeverity.Error: { diff --git a/src/client/application/diagnostics/serviceRegistry.ts b/src/client/application/diagnostics/serviceRegistry.ts index 6dbce89902da..acf460b88625 100644 --- a/src/client/application/diagnostics/serviceRegistry.ts +++ b/src/client/application/diagnostics/serviceRegistry.ts @@ -3,87 +3,101 @@ 'use strict'; -import { LanguageServerType } from '../../activation/types'; +import { IExtensionSingleActivationService } from '../../activation/types'; import { IServiceManager } from '../../ioc/types'; import { IApplicationDiagnostics } from '../types'; import { ApplicationDiagnostics } from './applicationDiagnostics'; import { EnvironmentPathVariableDiagnosticsService, - EnvironmentPathVariableDiagnosticsServiceId + EnvironmentPathVariableDiagnosticsServiceId, } from './checks/envPathVariable'; -import { - InvalidLaunchJsonDebuggerService, - InvalidLaunchJsonDebuggerServiceId -} from './checks/invalidLaunchJsonDebugger'; import { InvalidPythonPathInDebuggerService, - InvalidPythonPathInDebuggerServiceId + InvalidPythonPathInDebuggerServiceId, } from './checks/invalidPythonPathInDebugger'; -import { LSNotSupportedDiagnosticService, LSNotSupportedDiagnosticServiceId } from './checks/lsNotSupported'; +import { + JediPython27NotSupportedDiagnosticService, + JediPython27NotSupportedDiagnosticServiceId, +} from './checks/jediPython27NotSupported'; import { InvalidMacPythonInterpreterService, - InvalidMacPythonInterpreterServiceId + InvalidMacPythonInterpreterServiceId, } from './checks/macPythonInterpreter'; import { PowerShellActivationHackDiagnosticsService, - PowerShellActivationHackDiagnosticsServiceId + PowerShellActivationHackDiagnosticsServiceId, } from './checks/powerShellActivation'; +import { PylanceDefaultDiagnosticService, PylanceDefaultDiagnosticServiceId } from './checks/pylanceDefault'; import { InvalidPythonInterpreterService, InvalidPythonInterpreterServiceId } from './checks/pythonInterpreter'; +import { + SwitchToDefaultLanguageServerDiagnosticService, + SwitchToDefaultLanguageServerDiagnosticServiceId, +} from './checks/switchToDefaultLS'; import { DiagnosticsCommandFactory } from './commands/factory'; import { IDiagnosticsCommandFactory } from './commands/types'; import { DiagnosticFilterService } from './filter'; import { DiagnosticCommandPromptHandlerService, DiagnosticCommandPromptHandlerServiceId, - MessageCommandPrompt + MessageCommandPrompt, } from './promptHandler'; import { IDiagnosticFilterService, IDiagnosticHandlerService, IDiagnosticsService } from './types'; -export function registerTypes(serviceManager: IServiceManager, languageServerType: LanguageServerType) { +export function registerTypes(serviceManager: IServiceManager): void { serviceManager.addSingleton(IDiagnosticFilterService, DiagnosticFilterService); serviceManager.addSingleton>( IDiagnosticHandlerService, DiagnosticCommandPromptHandlerService, - DiagnosticCommandPromptHandlerServiceId + DiagnosticCommandPromptHandlerServiceId, ); serviceManager.addSingleton( IDiagnosticsService, EnvironmentPathVariableDiagnosticsService, - EnvironmentPathVariableDiagnosticsServiceId + EnvironmentPathVariableDiagnosticsServiceId, ); serviceManager.addSingleton( IDiagnosticsService, - InvalidLaunchJsonDebuggerService, - InvalidLaunchJsonDebuggerServiceId + InvalidPythonInterpreterService, + InvalidPythonInterpreterServiceId, ); - serviceManager.addSingleton( - IDiagnosticsService, + serviceManager.addSingleton( + IExtensionSingleActivationService, InvalidPythonInterpreterService, - InvalidPythonInterpreterServiceId ); serviceManager.addSingleton( IDiagnosticsService, InvalidPythonPathInDebuggerService, - InvalidPythonPathInDebuggerServiceId + InvalidPythonPathInDebuggerServiceId, ); serviceManager.addSingleton( IDiagnosticsService, PowerShellActivationHackDiagnosticsService, - PowerShellActivationHackDiagnosticsServiceId + PowerShellActivationHackDiagnosticsServiceId, ); serviceManager.addSingleton( IDiagnosticsService, InvalidMacPythonInterpreterService, - InvalidMacPythonInterpreterServiceId + InvalidMacPythonInterpreterServiceId, + ); + + serviceManager.addSingleton( + IDiagnosticsService, + PylanceDefaultDiagnosticService, + PylanceDefaultDiagnosticServiceId, ); + + serviceManager.addSingleton( + IDiagnosticsService, + JediPython27NotSupportedDiagnosticService, + JediPython27NotSupportedDiagnosticServiceId, + ); + + serviceManager.addSingleton( + IDiagnosticsService, + SwitchToDefaultLanguageServerDiagnosticService, + SwitchToDefaultLanguageServerDiagnosticServiceId, + ); + serviceManager.addSingleton(IDiagnosticsCommandFactory, DiagnosticsCommandFactory); serviceManager.addSingleton(IApplicationDiagnostics, ApplicationDiagnostics); - - if (languageServerType === LanguageServerType.Microsoft) { - serviceManager.addSingleton( - IDiagnosticsService, - LSNotSupportedDiagnosticService, - LSNotSupportedDiagnosticServiceId - ); - } } diff --git a/src/client/application/diagnostics/surceMapSupportService.ts b/src/client/application/diagnostics/surceMapSupportService.ts deleted file mode 100644 index b2630f99f5eb..000000000000 --- a/src/client/application/diagnostics/surceMapSupportService.ts +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -'use strict'; - -import { inject, injectable } from 'inversify'; -import { ConfigurationTarget } from 'vscode'; -import { IApplicationShell, ICommandManager } from '../../common/application/types'; -import { Commands } from '../../common/constants'; -import { IConfigurationService, IDisposableRegistry } from '../../common/types'; -import { Diagnostics } from '../../common/utils/localize'; -import { ISourceMapSupportService } from './types'; - -@injectable() -export class SourceMapSupportService implements ISourceMapSupportService { - constructor( - @inject(ICommandManager) private readonly commandManager: ICommandManager, - @inject(IDisposableRegistry) private readonly disposables: IDisposableRegistry, - @inject(IConfigurationService) private readonly configurationService: IConfigurationService, - @inject(IApplicationShell) private readonly shell: IApplicationShell - ) {} - public register(): void { - this.disposables.push( - this.commandManager.registerCommand(Commands.Enable_SourceMap_Support, this.onEnable, this) - ); - } - public async enable(): Promise { - await this.configurationService.updateSetting( - 'diagnostics.sourceMapsEnabled', - true, - undefined, - ConfigurationTarget.Global - ); - await this.commandManager.executeCommand('workbench.action.reloadWindow'); - } - protected async onEnable(): Promise { - const enableSourceMapsAndReloadVSC = Diagnostics.enableSourceMapsAndReloadVSC(); - const selection = await this.shell.showWarningMessage( - Diagnostics.warnBeforeEnablingSourceMaps(), - enableSourceMapsAndReloadVSC - ); - if (selection === enableSourceMapsAndReloadVSC) { - await this.enable(); - } - } -} diff --git a/src/client/application/diagnostics/types.ts b/src/client/application/diagnostics/types.ts index d38d3f671bf8..1dc9a3c689df 100644 --- a/src/client/application/diagnostics/types.ts +++ b/src/client/application/diagnostics/types.ts @@ -10,12 +10,7 @@ import { DiagnosticCodes } from './constants'; export enum DiagnosticScope { Global = 'Global', - WorkspaceFolder = 'WorkspaceFolder' -} - -export enum DiagnosticIgnoreScope { - always = 'always', - session = 'session' + WorkspaceFolder = 'WorkspaceFolder', } export interface IDiagnostic { @@ -25,12 +20,14 @@ export interface IDiagnostic { readonly scope: DiagnosticScope; readonly resource: Resource; readonly invokeHandler: 'always' | 'default'; + readonly shouldShowPrompt?: boolean; } export const IDiagnosticsService = Symbol('IDiagnosticsService'); export interface IDiagnosticsService { - readonly runInBackground: Boolean; + readonly runInBackground: boolean; + readonly runInUntrustedWorkspace: boolean; diagnose(resource: Resource): Promise; canHandle(diagnostic: IDiagnostic): Promise; handle(diagnostics: IDiagnostic[]): Promise; @@ -54,13 +51,16 @@ export interface IDiagnosticCommand { invoke(): Promise; } +export type IDiagnosticMessageOnCloseHandler = (response?: string) => void; + +export const IInvalidPythonPathInSettings = Symbol('IInvalidPythonPathInSettings'); + +export interface IInvalidPythonPathInSettings extends IDiagnosticsService { + validateInterpreterPathInSettings(resource: Resource): Promise; +} + export const IInvalidPythonPathInDebuggerService = Symbol('IInvalidPythonPathInDebuggerService'); export interface IInvalidPythonPathInDebuggerService extends IDiagnosticsService { validatePythonPath(pythonPath?: string, pythonPathSource?: PythonPathSource, resource?: Uri): Promise; } -export const ISourceMapSupportService = Symbol('ISourceMapSupportService'); -export interface ISourceMapSupportService { - register(): void; - enable(): Promise; -} diff --git a/src/client/application/serviceRegistry.ts b/src/client/application/serviceRegistry.ts index b4f8f3c30ccc..ff5376d70b24 100644 --- a/src/client/application/serviceRegistry.ts +++ b/src/client/application/serviceRegistry.ts @@ -3,13 +3,9 @@ 'use strict'; -import { LanguageServerType } from '../activation/types'; import { IServiceManager } from '../ioc/types'; import { registerTypes as diagnosticsRegisterTypes } from './diagnostics/serviceRegistry'; -import { SourceMapSupportService } from './diagnostics/surceMapSupportService'; -import { ISourceMapSupportService } from './diagnostics/types'; -export function registerTypes(serviceManager: IServiceManager, languageServerType: LanguageServerType) { - serviceManager.addSingleton(ISourceMapSupportService, SourceMapSupportService); - diagnosticsRegisterTypes(serviceManager, languageServerType); +export function registerTypes(serviceManager: IServiceManager) { + diagnosticsRegisterTypes(serviceManager); } diff --git a/src/client/application/types.ts b/src/client/application/types.ts index 460ac39807c8..cfd41f7b9746 100644 --- a/src/client/application/types.ts +++ b/src/client/application/types.ts @@ -11,8 +11,6 @@ export interface IApplicationDiagnostics { /** * Perform pre-extension activation health checks. * E.g. validate user environment, etc. - * @returns {Promise} - * @memberof IApplicationDiagnostics */ performPreStartupHealthCheck(resource: Resource): Promise; register(): void; diff --git a/src/client/browser/api.ts b/src/client/browser/api.ts new file mode 100644 index 000000000000..ac2df8d0ffed --- /dev/null +++ b/src/client/browser/api.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +'use strict'; + +import { BaseLanguageClient } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/browser'; +import { PYTHON_LANGUAGE } from '../common/constants'; +import { ApiForPylance, TelemetryReporter } from '../pylanceApi'; + +export interface IBrowserExtensionApi { + /** + * @deprecated Temporarily exposed for Pylance until we expose this API generally. Will be removed in an + * iteration or two. + */ + pylance: ApiForPylance; +} + +export function buildApi(reporter: TelemetryReporter): IBrowserExtensionApi { + const api: IBrowserExtensionApi = { + pylance: { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + createClient: (...args: any[]): BaseLanguageClient => + new LanguageClient(PYTHON_LANGUAGE, 'Python Language Server', args[0], args[1]), + start: (client: BaseLanguageClient): Promise => client.start(), + stop: (client: BaseLanguageClient): Promise => client.stop(), + getTelemetryReporter: () => reporter, + }, + }; + + return api; +} diff --git a/src/client/browser/extension.ts b/src/client/browser/extension.ts new file mode 100644 index 000000000000..132618430551 --- /dev/null +++ b/src/client/browser/extension.ts @@ -0,0 +1,231 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import * as vscode from 'vscode'; +import TelemetryReporter from '@vscode/extension-telemetry'; +import { LanguageClientOptions } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/browser'; +import { LanguageClientMiddlewareBase } from '../activation/languageClientMiddlewareBase'; +import { LanguageServerType } from '../activation/types'; +import { AppinsightsKey, PYLANCE_EXTENSION_ID } from '../common/constants'; +import { EventName } from '../telemetry/constants'; +import { createStatusItem } from './intellisenseStatus'; +import { PylanceApi } from '../activation/node/pylanceApi'; +import { buildApi, IBrowserExtensionApi } from './api'; + +interface BrowserConfig { + distUrl: string; // URL to Pylance's dist folder. +} + +let languageClient: LanguageClient | undefined; +let pylanceApi: PylanceApi | undefined; + +export function activate(context: vscode.ExtensionContext): Promise { + const reporter = getTelemetryReporter(); + + const activationPromise = Promise.resolve(buildApi(reporter)); + const pylanceExtension = vscode.extensions.getExtension(PYLANCE_EXTENSION_ID); + if (pylanceExtension) { + // Make sure we run pylance once we activated core extension. + activationPromise.then(() => runPylance(context, pylanceExtension)); + return activationPromise; + } + + const changeDisposable = vscode.extensions.onDidChange(async () => { + const newPylanceExtension = vscode.extensions.getExtension(PYLANCE_EXTENSION_ID); + if (newPylanceExtension) { + changeDisposable.dispose(); + await runPylance(context, newPylanceExtension); + } + }); + + return activationPromise; +} + +export async function deactivate(): Promise { + if (pylanceApi) { + const api = pylanceApi; + pylanceApi = undefined; + await api.client!.stop(); + } + + if (languageClient) { + const client = languageClient; + languageClient = undefined; + + await client.stop(); + await client.dispose(); + } +} + +async function runPylance( + context: vscode.ExtensionContext, + pylanceExtension: vscode.Extension, +): Promise { + context.subscriptions.push(createStatusItem()); + + pylanceExtension = await getActivatedExtension(pylanceExtension); + const api = pylanceExtension.exports; + if (api.client && api.client.isEnabled()) { + pylanceApi = api; + await api.client.start(); + return; + } + + const { extensionUri, packageJSON } = pylanceExtension; + const distUrl = vscode.Uri.joinPath(extensionUri, 'dist'); + + try { + const worker = new Worker(vscode.Uri.joinPath(distUrl, 'browser.server.bundle.js').toString()); + + // Pass the configuration as the first message to the worker so it can + // have info like the URL of the dist folder early enough. + // + // This is the same method used by the TS worker: + // https://github.com/microsoft/vscode/blob/90aa979bb75a795fd8c33d38aee263ea655270d0/extensions/typescript-language-features/src/tsServer/serverProcess.browser.ts#L55 + const config: BrowserConfig = { distUrl: distUrl.toString() }; + worker.postMessage(config); + + const middleware = new LanguageClientMiddlewareBase( + undefined, + LanguageServerType.Node, + sendTelemetryEventBrowser, + packageJSON.version, + ); + middleware.connect(); + + const clientOptions: LanguageClientOptions = { + // Register the server for python source files. + documentSelector: [ + { + language: 'python', + }, + ], + synchronize: { + // Synchronize the setting section to the server. + configurationSection: ['python', 'jupyter.runStartupCommands'], + }, + middleware, + }; + + const client = new LanguageClient('python', 'Python Language Server', worker, clientOptions); + languageClient = client; + + context.subscriptions.push( + vscode.commands.registerCommand('python.viewLanguageServerOutput', () => client.outputChannel.show()), + ); + + client.onTelemetry( + (telemetryEvent: { + EventName: EventName; + Properties: { method: string }; + Measurements: number | Record | undefined; + Exception: Error | undefined; + }) => { + const eventName = telemetryEvent.EventName || EventName.LANGUAGE_SERVER_TELEMETRY; + const formattedProperties = { + ...telemetryEvent.Properties, + // Replace all slashes in the method name so it doesn't get scrubbed by @vscode/extension-telemetry. + method: telemetryEvent.Properties.method?.replace(/\//g, '.'), + }; + sendTelemetryEventBrowser( + eventName, + telemetryEvent.Measurements, + formattedProperties, + telemetryEvent.Exception, + ); + }, + ); + + await client.start(); + } catch (e) { + console.log(e); // necessary to use console.log for browser + } +} + +// Duplicate code from telemetry/index.ts to avoid pulling in winston, +// which doesn't support the browser. + +let telemetryReporter: TelemetryReporter | undefined; +function getTelemetryReporter() { + if (telemetryReporter) { + return telemetryReporter; + } + + // eslint-disable-next-line global-require + const Reporter = require('@vscode/extension-telemetry').default as typeof TelemetryReporter; + telemetryReporter = new Reporter(AppinsightsKey, [ + { + lookup: /(errorName|errorMessage|errorStack)/g, + }, + ]); + + return telemetryReporter; +} + +function sendTelemetryEventBrowser( + eventName: EventName, + measuresOrDurationMs?: Record | number, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + properties?: any, + ex?: Error, +): void { + const reporter = getTelemetryReporter(); + const measures = + typeof measuresOrDurationMs === 'number' + ? { duration: measuresOrDurationMs } + : measuresOrDurationMs || undefined; + const customProperties: Record = {}; + const eventNameSent = eventName as string; + + if (properties) { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + const data = properties as any; + Object.getOwnPropertyNames(data).forEach((prop) => { + if (data[prop] === undefined || data[prop] === null) { + return; + } + try { + // If there are any errors in serializing one property, ignore that and move on. + // Else nothing will be sent. + switch (typeof data[prop]) { + case 'string': + customProperties[prop] = data[prop]; + break; + case 'object': + customProperties[prop] = 'object'; + break; + default: + customProperties[prop] = data[prop].toString(); + break; + } + } catch (exception) { + console.error(`Failed to serialize ${prop} for ${eventName}`, exception); // necessary to use console.log for browser + } + }); + } + + // Add shared properties to telemetry props (we may overwrite existing ones). + // Removed in the browser; there's no setSharedProperty. + // Object.assign(customProperties, sharedProperties); + + if (ex) { + const errorProps = { + errorName: ex.name, + errorStack: ex.stack ?? '', + }; + Object.assign(customProperties, errorProps); + + reporter.sendTelemetryErrorEvent(eventNameSent, customProperties, measures); + } else { + reporter.sendTelemetryEvent(eventNameSent, customProperties, measures); + } +} + +async function getActivatedExtension(extension: vscode.Extension): Promise> { + if (!extension.isActive) { + await extension.activate(); + } + + return extension; +} diff --git a/src/client/browser/intellisenseStatus.ts b/src/client/browser/intellisenseStatus.ts new file mode 100644 index 000000000000..b7a49e86dbb0 --- /dev/null +++ b/src/client/browser/intellisenseStatus.ts @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +// IMPORTANT: Do not import any node fs related modules here, as they do not work in browser. +import * as vscode from 'vscode'; +import { Common, LanguageService } from './localize'; + +export function createStatusItem(): vscode.Disposable { + if ('createLanguageStatusItem' in vscode.languages) { + const statusItem = vscode.languages.createLanguageStatusItem('python.projectStatus', { + language: 'python', + }); + statusItem.name = LanguageService.statusItem.name; + statusItem.severity = vscode.LanguageStatusSeverity.Warning; + statusItem.text = LanguageService.statusItem.text; + statusItem.detail = LanguageService.statusItem.detail; + statusItem.command = { + title: Common.learnMore, + command: 'vscode.open', + arguments: [vscode.Uri.parse('https://aka.ms/AAdzyh4')], + }; + return statusItem; + } + // eslint-disable-next-line @typescript-eslint/no-empty-function + return { dispose: () => undefined }; +} diff --git a/src/client/browser/localize.ts b/src/client/browser/localize.ts new file mode 100644 index 000000000000..fd50dbcc7093 --- /dev/null +++ b/src/client/browser/localize.ts @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +'use strict'; + +import { l10n } from 'vscode'; + +/* eslint-disable @typescript-eslint/no-namespace */ + +// IMPORTANT: Do not import any node fs related modules here, as they do not work in browser. + +export namespace LanguageService { + export const statusItem = { + name: l10n.t('Python IntelliSense Status'), + text: l10n.t('Partial Mode'), + detail: l10n.t('Limited IntelliSense provided by Pylance'), + }; +} + +export namespace Common { + export const learnMore = l10n.t('Learn more'); +} diff --git a/src/client/chat/baseTool.ts b/src/client/chat/baseTool.ts new file mode 100644 index 000000000000..2eedbbe226e3 --- /dev/null +++ b/src/client/chat/baseTool.ts @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationToken, + LanguageModelTextPart, + LanguageModelTool, + LanguageModelToolInvocationOptions, + LanguageModelToolInvocationPrepareOptions, + LanguageModelToolResult, + PreparedToolInvocation, + Uri, + workspace, +} from 'vscode'; +import { IResourceReference, isCancellationError, resolveFilePath } from './utils'; +import { ErrorWithTelemetrySafeReason } from '../common/errors/errorUtils'; +import { sendTelemetryEvent } from '../telemetry'; +import { EventName } from '../telemetry/constants'; + +export abstract class BaseTool implements LanguageModelTool { + constructor(private readonly toolName: string) {} + + async invoke( + options: LanguageModelToolInvocationOptions, + token: CancellationToken, + ): Promise { + if (!workspace.isTrusted) { + return new LanguageModelToolResult([ + new LanguageModelTextPart('Cannot use this tool in an untrusted workspace.'), + ]); + } + let error: Error | undefined; + const resource = resolveFilePath(options.input.resourcePath); + try { + return await this.invokeImpl(options, resource, token); + } catch (ex) { + error = ex as any; + throw ex; + } finally { + const isCancelled = token.isCancellationRequested || (error ? isCancellationError(error) : false); + const failed = !!error || isCancelled; + const failureCategory = isCancelled + ? 'cancelled' + : error + ? error instanceof ErrorWithTelemetrySafeReason + ? error.telemetrySafeReason + : 'error' + : undefined; + sendTelemetryEvent(EventName.INVOKE_TOOL, undefined, { + toolName: this.toolName, + failed, + failureCategory, + }); + } + } + protected abstract invokeImpl( + options: LanguageModelToolInvocationOptions, + resource: Uri | undefined, + token: CancellationToken, + ): Promise; + + async prepareInvocation( + options: LanguageModelToolInvocationPrepareOptions, + token: CancellationToken, + ): Promise { + const resource = resolveFilePath(options.input.resourcePath); + return this.prepareInvocationImpl(options, resource, token); + } + + protected abstract prepareInvocationImpl( + options: LanguageModelToolInvocationPrepareOptions, + resource: Uri | undefined, + token: CancellationToken, + ): Promise; +} diff --git a/src/client/chat/configurePythonEnvTool.ts b/src/client/chat/configurePythonEnvTool.ts new file mode 100644 index 000000000000..0634b9c9ac34 --- /dev/null +++ b/src/client/chat/configurePythonEnvTool.ts @@ -0,0 +1,123 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationToken, + LanguageModelTool, + LanguageModelToolInvocationOptions, + LanguageModelToolInvocationPrepareOptions, + LanguageModelToolResult, + PreparedToolInvocation, + Uri, + workspace, + lm, +} from 'vscode'; +import { PythonExtension } from '../api/types'; +import { IServiceContainer } from '../ioc/types'; +import { ICodeExecutionService } from '../terminals/types'; +import { TerminalCodeExecutionProvider } from '../terminals/codeExecution/terminalCodeExecution'; +import { + getEnvDetailsForResponse, + getToolResponseIfNotebook, + IResourceReference, + isCancellationError, + raceCancellationError, +} from './utils'; +import { ITerminalHelper } from '../common/terminal/types'; +import { IRecommendedEnvironmentService } from '../interpreter/configuration/types'; +import { CreateVirtualEnvTool } from './createVirtualEnvTool'; +import { ISelectPythonEnvToolArguments, SelectPythonEnvTool } from './selectEnvTool'; +import { BaseTool } from './baseTool'; + +export class ConfigurePythonEnvTool extends BaseTool + implements LanguageModelTool { + private readonly terminalExecutionService: TerminalCodeExecutionProvider; + private readonly terminalHelper: ITerminalHelper; + private readonly recommendedEnvService: IRecommendedEnvironmentService; + public static readonly toolName = 'configure_python_environment'; + constructor( + private readonly api: PythonExtension['environments'], + private readonly serviceContainer: IServiceContainer, + private readonly createEnvTool: CreateVirtualEnvTool, + ) { + super(ConfigurePythonEnvTool.toolName); + this.terminalExecutionService = this.serviceContainer.get( + ICodeExecutionService, + 'standard', + ); + this.terminalHelper = this.serviceContainer.get(ITerminalHelper); + this.recommendedEnvService = this.serviceContainer.get( + IRecommendedEnvironmentService, + ); + } + + async invokeImpl( + options: LanguageModelToolInvocationOptions, + resource: Uri | undefined, + token: CancellationToken, + ): Promise { + const notebookResponse = getToolResponseIfNotebook(resource); + if (notebookResponse) { + return notebookResponse; + } + + const workspaceSpecificEnv = await raceCancellationError( + this.hasAlreadyGotAWorkspaceSpecificEnvironment(resource), + token, + ); + + if (workspaceSpecificEnv) { + return getEnvDetailsForResponse( + workspaceSpecificEnv, + this.api, + this.terminalExecutionService, + this.terminalHelper, + resource, + token, + ); + } + + if (await this.createEnvTool.shouldCreateNewVirtualEnv(resource, token)) { + try { + return await lm.invokeTool(CreateVirtualEnvTool.toolName, options, token); + } catch (ex) { + if (isCancellationError(ex)) { + const input: ISelectPythonEnvToolArguments = { + ...options.input, + reason: 'cancelled', + }; + // If the user cancelled the tool, then we should invoke the select env tool. + return lm.invokeTool(SelectPythonEnvTool.toolName, { ...options, input }, token); + } + throw ex; + } + } else { + const input: ISelectPythonEnvToolArguments = { + ...options.input, + }; + return lm.invokeTool(SelectPythonEnvTool.toolName, { ...options, input }, token); + } + } + + async prepareInvocationImpl( + _options: LanguageModelToolInvocationPrepareOptions, + _resource: Uri | undefined, + _token: CancellationToken, + ): Promise { + return { + invocationMessage: 'Configuring a Python Environment', + }; + } + + async hasAlreadyGotAWorkspaceSpecificEnvironment(resource: Uri | undefined) { + const recommededEnv = await this.recommendedEnvService.getRecommededEnvironment(resource); + // Already selected workspace env, hence nothing to do. + if (recommededEnv?.reason === 'workspaceUserSelected' && workspace.workspaceFolders?.length) { + return recommededEnv.environment; + } + // No workspace folders, and the user selected a global environment. + if (recommededEnv?.reason === 'globalUserSelected' && !workspace.workspaceFolders?.length) { + return recommededEnv.environment; + } + } +} diff --git a/src/client/chat/createVirtualEnvTool.ts b/src/client/chat/createVirtualEnvTool.ts new file mode 100644 index 000000000000..56760d2b4bef --- /dev/null +++ b/src/client/chat/createVirtualEnvTool.ts @@ -0,0 +1,246 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationError, + CancellationToken, + commands, + l10n, + LanguageModelTool, + LanguageModelToolInvocationOptions, + LanguageModelToolInvocationPrepareOptions, + LanguageModelToolResult, + PreparedToolInvocation, + Uri, + workspace, +} from 'vscode'; +import { PythonExtension, ResolvedEnvironment } from '../api/types'; +import { IServiceContainer } from '../ioc/types'; +import { ICodeExecutionService } from '../terminals/types'; +import { TerminalCodeExecutionProvider } from '../terminals/codeExecution/terminalCodeExecution'; +import { + doesWorkspaceHaveVenvOrCondaEnv, + getDisplayVersion, + getEnvDetailsForResponse, + IResourceReference, + isCancellationError, + raceCancellationError, +} from './utils'; +import { ITerminalHelper } from '../common/terminal/types'; +import { raceTimeout, sleep } from '../common/utils/async'; +import { IInterpreterPathService } from '../common/types'; +import { DisposableStore } from '../common/utils/resourceLifecycle'; +import { IRecommendedEnvironmentService } from '../interpreter/configuration/types'; +import { EnvironmentType } from '../pythonEnvironments/info'; +import { IDiscoveryAPI } from '../pythonEnvironments/base/locator'; +import { convertEnvInfoToPythonEnvironment } from '../pythonEnvironments/legacyIOC'; +import { sortInterpreters } from '../interpreter/helpers'; +import { isStableVersion } from '../pythonEnvironments/info/pythonVersion'; +import { createVirtualEnvironment } from '../pythonEnvironments/creation/createEnvApi'; +import { traceError, traceVerbose, traceWarn } from '../logging'; +import { StopWatch } from '../common/utils/stopWatch'; +import { useEnvExtension } from '../envExt/api.internal'; +import { PythonEnvironment } from '../envExt/types'; +import { hideEnvCreation } from '../pythonEnvironments/creation/provider/hideEnvCreation'; +import { BaseTool } from './baseTool'; + +interface ICreateVirtualEnvToolParams extends IResourceReference { + packageList?: string[]; // Added only becausewe have ability to create a virtual env with list of packages same tool within the in Python Env extension. +} + +export class CreateVirtualEnvTool extends BaseTool + implements LanguageModelTool { + private readonly terminalExecutionService: TerminalCodeExecutionProvider; + private readonly terminalHelper: ITerminalHelper; + private readonly recommendedEnvService: IRecommendedEnvironmentService; + + public static readonly toolName = 'create_virtual_environment'; + constructor( + private readonly discoveryApi: IDiscoveryAPI, + private readonly api: PythonExtension['environments'], + private readonly serviceContainer: IServiceContainer, + ) { + super(CreateVirtualEnvTool.toolName); + this.terminalExecutionService = this.serviceContainer.get( + ICodeExecutionService, + 'standard', + ); + this.terminalHelper = this.serviceContainer.get(ITerminalHelper); + this.recommendedEnvService = this.serviceContainer.get( + IRecommendedEnvironmentService, + ); + } + + async invokeImpl( + options: LanguageModelToolInvocationOptions, + resource: Uri | undefined, + token: CancellationToken, + ): Promise { + let info = await this.getPreferredEnvForCreation(resource); + if (!info) { + traceWarn(`Called ${CreateVirtualEnvTool.toolName} tool not invoked, no preferred environment found.`); + throw new CancellationError(); + } + const { workspaceFolder, preferredGlobalPythonEnv } = info; + const interpreterPathService = this.serviceContainer.get(IInterpreterPathService); + const disposables = new DisposableStore(); + try { + disposables.add(hideEnvCreation()); + const interpreterChanged = new Promise((resolve) => { + disposables.add(interpreterPathService.onDidChange(() => resolve())); + }); + + let createdEnvPath: string | undefined = undefined; + if (useEnvExtension()) { + const result: PythonEnvironment | undefined = await commands.executeCommand('python-envs.createAny', { + quickCreate: true, + additionalPackages: options.input.packageList || [], + uri: workspaceFolder.uri, + selectEnvironment: true, + }); + createdEnvPath = result?.environmentPath.fsPath; + } else { + const created = await raceCancellationError( + createVirtualEnvironment({ + interpreter: preferredGlobalPythonEnv.id, + workspaceFolder, + }), + token, + ); + createdEnvPath = created?.path; + } + if (!createdEnvPath) { + traceWarn(`${CreateVirtualEnvTool.toolName} tool not invoked, virtual env not created.`); + throw new CancellationError(); + } + + // Wait a few secs to ensure the env is selected as the active environment.. + // If this doesn't work, then something went wrong. + await raceTimeout(5_000, interpreterChanged); + + const stopWatch = new StopWatch(); + let env: ResolvedEnvironment | undefined; + while (stopWatch.elapsedTime < 5_000 || !env) { + env = await this.api.resolveEnvironment(createdEnvPath); + if (env) { + break; + } else { + traceVerbose( + `${CreateVirtualEnvTool.toolName} tool invoked, env created but not yet resolved, waiting...`, + ); + await sleep(200); + } + } + if (!env) { + traceError(`${CreateVirtualEnvTool.toolName} tool invoked, env created but unable to resolve details.`); + throw new CancellationError(); + } + return await getEnvDetailsForResponse( + env, + this.api, + this.terminalExecutionService, + this.terminalHelper, + resource, + token, + ); + } catch (ex) { + if (!isCancellationError(ex)) { + traceError( + `${ + CreateVirtualEnvTool.toolName + } tool failed to create virtual environment for resource ${resource?.toString()}`, + ex, + ); + } + throw ex; + } finally { + disposables.dispose(); + } + } + + public async shouldCreateNewVirtualEnv(resource: Uri | undefined, token: CancellationToken): Promise { + if (doesWorkspaceHaveVenvOrCondaEnv(resource, this.api)) { + // If we already have a .venv or .conda in this workspace, then do not prompt to create a virtual environment. + return false; + } + + const info = await raceCancellationError(this.getPreferredEnvForCreation(resource), token); + return info ? true : false; + } + + async prepareInvocationImpl( + _options: LanguageModelToolInvocationPrepareOptions, + resource: Uri | undefined, + token: CancellationToken, + ): Promise { + const info = await raceCancellationError(this.getPreferredEnvForCreation(resource), token); + if (!info) { + return {}; + } + const { preferredGlobalPythonEnv } = info; + const version = getDisplayVersion(preferredGlobalPythonEnv.version); + return { + confirmationMessages: { + title: l10n.t('Create a Virtual Environment{0}?', version ? ` (${version})` : ''), + message: l10n.t(`Virtual Environments provide the benefit of package isolation and more.`), + }, + invocationMessage: l10n.t('Creating a Virtual Environment'), + }; + } + async hasAlreadyGotAWorkspaceSpecificEnvironment(resource: Uri | undefined) { + const recommededEnv = await this.recommendedEnvService.getRecommededEnvironment(resource); + // Already selected workspace env, hence nothing to do. + if (recommededEnv?.reason === 'workspaceUserSelected' && workspace.workspaceFolders?.length) { + return recommededEnv.environment; + } + // No workspace folders, and the user selected a global environment. + if (recommededEnv?.reason === 'globalUserSelected' && !workspace.workspaceFolders?.length) { + return recommededEnv.environment; + } + } + + private async getPreferredEnvForCreation(resource: Uri | undefined) { + if (await this.hasAlreadyGotAWorkspaceSpecificEnvironment(resource)) { + return undefined; + } + + // If we have a resource or have only one workspace folder && there is no .venv and no workspace specific environment. + // Then lets recommend creating a virtual environment. + const workspaceFolder = + resource && workspace.workspaceFolders?.length + ? workspace.getWorkspaceFolder(resource) + : workspace.workspaceFolders?.length === 1 + ? workspace.workspaceFolders[0] + : undefined; + if (!workspaceFolder) { + // No workspace folder, hence no need to create a virtual environment. + return undefined; + } + + // Find the latest stable version of Python from the list of know envs. + let globalPythonEnvs = this.discoveryApi + .getEnvs() + .map((env) => convertEnvInfoToPythonEnvironment(env)) + .filter((env) => + [ + EnvironmentType.System, + EnvironmentType.MicrosoftStore, + EnvironmentType.Global, + EnvironmentType.Pyenv, + ].includes(env.envType), + ) + .filter((env) => env.version && isStableVersion(env.version)); + + globalPythonEnvs = sortInterpreters(globalPythonEnvs); + const preferredGlobalPythonEnv = globalPythonEnvs.length + ? this.api.known.find((e) => e.id === globalPythonEnvs[globalPythonEnvs.length - 1].id) + : undefined; + + return workspaceFolder && preferredGlobalPythonEnv + ? { + workspaceFolder, + preferredGlobalPythonEnv, + } + : undefined; + } +} diff --git a/src/client/chat/getExecutableTool.ts b/src/client/chat/getExecutableTool.ts new file mode 100644 index 000000000000..746a540d14f8 --- /dev/null +++ b/src/client/chat/getExecutableTool.ts @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationToken, + l10n, + LanguageModelTextPart, + LanguageModelTool, + LanguageModelToolInvocationOptions, + LanguageModelToolInvocationPrepareOptions, + LanguageModelToolResult, + PreparedToolInvocation, + Uri, +} from 'vscode'; +import { PythonExtension } from '../api/types'; +import { IServiceContainer } from '../ioc/types'; +import { ICodeExecutionService } from '../terminals/types'; +import { TerminalCodeExecutionProvider } from '../terminals/codeExecution/terminalCodeExecution'; +import { + getEnvDisplayName, + getEnvironmentDetails, + getToolResponseIfNotebook, + IResourceReference, + raceCancellationError, +} from './utils'; +import { ITerminalHelper } from '../common/terminal/types'; +import { IDiscoveryAPI } from '../pythonEnvironments/base/locator'; +import { BaseTool } from './baseTool'; + +export class GetExecutableTool extends BaseTool implements LanguageModelTool { + private readonly terminalExecutionService: TerminalCodeExecutionProvider; + private readonly terminalHelper: ITerminalHelper; + public static readonly toolName = 'get_python_executable_details'; + constructor( + private readonly api: PythonExtension['environments'], + private readonly serviceContainer: IServiceContainer, + private readonly discovery: IDiscoveryAPI, + ) { + super(GetExecutableTool.toolName); + this.terminalExecutionService = this.serviceContainer.get( + ICodeExecutionService, + 'standard', + ); + this.terminalHelper = this.serviceContainer.get(ITerminalHelper); + } + async invokeImpl( + _options: LanguageModelToolInvocationOptions, + resourcePath: Uri | undefined, + token: CancellationToken, + ): Promise { + const notebookResponse = getToolResponseIfNotebook(resourcePath); + if (notebookResponse) { + return notebookResponse; + } + + const message = await getEnvironmentDetails( + resourcePath, + this.api, + this.terminalExecutionService, + this.terminalHelper, + undefined, + token, + ); + return new LanguageModelToolResult([new LanguageModelTextPart(message)]); + } + + async prepareInvocationImpl( + _options: LanguageModelToolInvocationPrepareOptions, + resourcePath: Uri | undefined, + token: CancellationToken, + ): Promise { + if (getToolResponseIfNotebook(resourcePath)) { + return {}; + } + + const envName = await raceCancellationError(getEnvDisplayName(this.discovery, resourcePath, this.api), token); + return { + invocationMessage: envName + ? l10n.t('Fetching Python executable information for {0}', envName) + : l10n.t('Fetching Python executable information'), + }; + } +} diff --git a/src/client/chat/getPythonEnvTool.ts b/src/client/chat/getPythonEnvTool.ts new file mode 100644 index 000000000000..ed1dd0374424 --- /dev/null +++ b/src/client/chat/getPythonEnvTool.ts @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationToken, + l10n, + LanguageModelTextPart, + LanguageModelTool, + LanguageModelToolInvocationOptions, + LanguageModelToolInvocationPrepareOptions, + LanguageModelToolResult, + PreparedToolInvocation, + Uri, +} from 'vscode'; +import { PythonExtension } from '../api/types'; +import { IServiceContainer } from '../ioc/types'; +import { ICodeExecutionService } from '../terminals/types'; +import { TerminalCodeExecutionProvider } from '../terminals/codeExecution/terminalCodeExecution'; +import { IProcessServiceFactory, IPythonExecutionFactory } from '../common/process/types'; +import { getEnvironmentDetails, getToolResponseIfNotebook, IResourceReference, raceCancellationError } from './utils'; +import { getPythonPackagesResponse } from './listPackagesTool'; +import { ITerminalHelper } from '../common/terminal/types'; +import { getEnvExtApi, useEnvExtension } from '../envExt/api.internal'; +import { ErrorWithTelemetrySafeReason } from '../common/errors/errorUtils'; +import { BaseTool } from './baseTool'; + +export class GetEnvironmentInfoTool extends BaseTool + implements LanguageModelTool { + private readonly terminalExecutionService: TerminalCodeExecutionProvider; + private readonly pythonExecFactory: IPythonExecutionFactory; + private readonly processServiceFactory: IProcessServiceFactory; + private readonly terminalHelper: ITerminalHelper; + public static readonly toolName = 'get_python_environment_details'; + constructor( + private readonly api: PythonExtension['environments'], + private readonly serviceContainer: IServiceContainer, + ) { + super(GetEnvironmentInfoTool.toolName); + this.terminalExecutionService = this.serviceContainer.get( + ICodeExecutionService, + 'standard', + ); + this.pythonExecFactory = this.serviceContainer.get(IPythonExecutionFactory); + this.processServiceFactory = this.serviceContainer.get(IProcessServiceFactory); + this.terminalHelper = this.serviceContainer.get(ITerminalHelper); + } + + async invokeImpl( + _options: LanguageModelToolInvocationOptions, + resourcePath: Uri | undefined, + token: CancellationToken, + ): Promise { + const notebookResponse = getToolResponseIfNotebook(resourcePath); + if (notebookResponse) { + return notebookResponse; + } + + // environment + const envPath = this.api.getActiveEnvironmentPath(resourcePath); + const environment = await raceCancellationError(this.api.resolveEnvironment(envPath), token); + if (!environment || !environment.version) { + throw new ErrorWithTelemetrySafeReason( + 'No environment found for the provided resource path: ' + resourcePath?.fsPath, + 'noEnvFound', + ); + } + + let packages = ''; + if (useEnvExtension()) { + const api = await getEnvExtApi(); + const env = await api.getEnvironment(resourcePath); + const pkgs = env ? await api.getPackages(env) : []; + if (pkgs && pkgs.length > 0) { + // Installed Python packages, each in the format or (). The version may be omitted if unknown. Returns an empty array if no packages are installed. + const response = [ + 'Below is a list of the Python packages, each in the format or (). The version may be omitted if unknown: ', + ]; + pkgs.forEach((pkg) => { + const version = pkg.version; + response.push(version ? `- ${pkg.name} (${version})` : `- ${pkg.name}`); + }); + packages = response.join('\n'); + } + } + if (!packages) { + packages = await getPythonPackagesResponse( + environment, + this.pythonExecFactory, + this.processServiceFactory, + resourcePath, + token, + ); + } + const message = await getEnvironmentDetails( + resourcePath, + this.api, + this.terminalExecutionService, + this.terminalHelper, + packages, + token, + ); + + return new LanguageModelToolResult([new LanguageModelTextPart(message)]); + } + + async prepareInvocationImpl( + _options: LanguageModelToolInvocationPrepareOptions, + resourcePath: Uri | undefined, + _token: CancellationToken, + ): Promise { + if (getToolResponseIfNotebook(resourcePath)) { + return {}; + } + + return { + invocationMessage: l10n.t('Fetching Python environment information'), + }; + } +} diff --git a/src/client/chat/index.ts b/src/client/chat/index.ts new file mode 100644 index 000000000000..b548860eaae3 --- /dev/null +++ b/src/client/chat/index.ts @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { lm } from 'vscode'; +import { PythonExtension } from '../api/types'; +import { IServiceContainer } from '../ioc/types'; +import { InstallPackagesTool } from './installPackagesTool'; +import { IExtensionContext } from '../common/types'; +import { DisposableStore } from '../common/utils/resourceLifecycle'; +import { IDiscoveryAPI } from '../pythonEnvironments/base/locator'; +import { GetExecutableTool } from './getExecutableTool'; +import { GetEnvironmentInfoTool } from './getPythonEnvTool'; +import { ConfigurePythonEnvTool } from './configurePythonEnvTool'; +import { SelectPythonEnvTool } from './selectEnvTool'; +import { CreateVirtualEnvTool } from './createVirtualEnvTool'; + +export function registerTools( + context: IExtensionContext, + discoverApi: IDiscoveryAPI, + environmentsApi: PythonExtension['environments'], + serviceContainer: IServiceContainer, +) { + const ourTools = new DisposableStore(); + context.subscriptions.push(ourTools); + + ourTools.add( + lm.registerTool(GetEnvironmentInfoTool.toolName, new GetEnvironmentInfoTool(environmentsApi, serviceContainer)), + ); + ourTools.add( + lm.registerTool( + GetExecutableTool.toolName, + new GetExecutableTool(environmentsApi, serviceContainer, discoverApi), + ), + ); + ourTools.add( + lm.registerTool( + InstallPackagesTool.toolName, + new InstallPackagesTool(environmentsApi, serviceContainer, discoverApi), + ), + ); + const createVirtualEnvTool = new CreateVirtualEnvTool(discoverApi, environmentsApi, serviceContainer); + ourTools.add(lm.registerTool(CreateVirtualEnvTool.toolName, createVirtualEnvTool)); + ourTools.add( + lm.registerTool(SelectPythonEnvTool.toolName, new SelectPythonEnvTool(environmentsApi, serviceContainer)), + ); + ourTools.add( + lm.registerTool( + ConfigurePythonEnvTool.toolName, + new ConfigurePythonEnvTool(environmentsApi, serviceContainer, createVirtualEnvTool), + ), + ); +} diff --git a/src/client/chat/installPackagesTool.ts b/src/client/chat/installPackagesTool.ts new file mode 100644 index 000000000000..f7795620cf13 --- /dev/null +++ b/src/client/chat/installPackagesTool.ts @@ -0,0 +1,163 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationToken, + l10n, + LanguageModelTextPart, + LanguageModelTool, + LanguageModelToolInvocationOptions, + LanguageModelToolInvocationPrepareOptions, + LanguageModelToolResult, + PreparedToolInvocation, + Uri, +} from 'vscode'; +import { PythonExtension } from '../api/types'; +import { IServiceContainer } from '../ioc/types'; +import { + getEnvDisplayName, + getToolResponseIfNotebook, + IResourceReference, + isCancellationError, + isCondaEnv, + raceCancellationError, +} from './utils'; +import { IModuleInstaller } from '../common/installer/types'; +import { ModuleInstallerType } from '../pythonEnvironments/info'; +import { IDiscoveryAPI } from '../pythonEnvironments/base/locator'; +import { getEnvExtApi, useEnvExtension } from '../envExt/api.internal'; +import { ErrorWithTelemetrySafeReason } from '../common/errors/errorUtils'; +import { BaseTool } from './baseTool'; + +export interface IInstallPackageArgs extends IResourceReference { + packageList: string[]; +} + +export class InstallPackagesTool extends BaseTool + implements LanguageModelTool { + public static readonly toolName = 'install_python_packages'; + constructor( + private readonly api: PythonExtension['environments'], + private readonly serviceContainer: IServiceContainer, + private readonly discovery: IDiscoveryAPI, + ) { + super(InstallPackagesTool.toolName); + } + + async invokeImpl( + options: LanguageModelToolInvocationOptions, + resourcePath: Uri | undefined, + token: CancellationToken, + ): Promise { + const packageCount = options.input.packageList.length; + const packagePlurality = packageCount === 1 ? 'package' : 'packages'; + const notebookResponse = getToolResponseIfNotebook(resourcePath); + if (notebookResponse) { + return notebookResponse; + } + + if (useEnvExtension()) { + const api = await getEnvExtApi(); + const env = await api.getEnvironment(resourcePath); + if (env) { + await raceCancellationError(api.managePackages(env, { install: options.input.packageList }), token); + const resultMessage = `Successfully installed ${packagePlurality}: ${options.input.packageList.join( + ', ', + )}`; + return new LanguageModelToolResult([new LanguageModelTextPart(resultMessage)]); + } else { + return new LanguageModelToolResult([ + new LanguageModelTextPart( + `Packages not installed. No environment found for: ${resourcePath?.fsPath}`, + ), + ]); + } + } + + try { + // environment + const envPath = this.api.getActiveEnvironmentPath(resourcePath); + const environment = await raceCancellationError(this.api.resolveEnvironment(envPath), token); + if (!environment || !environment.version) { + throw new ErrorWithTelemetrySafeReason( + 'No environment found for the provided resource path: ' + resourcePath?.fsPath, + 'noEnvFound', + ); + } + const isConda = isCondaEnv(environment); + const installers = this.serviceContainer.getAll(IModuleInstaller); + const installerType = isConda ? ModuleInstallerType.Conda : ModuleInstallerType.Pip; + const installer = installers.find((i) => i.type === installerType); + if (!installer) { + throw new ErrorWithTelemetrySafeReason( + `No installer found for the environment type: ${installerType}`, + 'noInstallerFound', + ); + } + if (!installer.isSupported(resourcePath)) { + throw new ErrorWithTelemetrySafeReason( + `Installer ${installerType} not supported for the environment type: ${installerType}`, + 'installerNotSupported', + ); + } + for (const packageName of options.input.packageList) { + await installer.installModule(packageName, resourcePath, token, undefined, { + installAsProcess: true, + hideProgress: true, + }); + } + // format and return + const resultMessage = `Successfully installed ${packagePlurality}: ${options.input.packageList.join(', ')}`; + return new LanguageModelToolResult([new LanguageModelTextPart(resultMessage)]); + } catch (error) { + if (isCancellationError(error)) { + throw error; + } + const errorMessage = `An error occurred while installing ${packagePlurality}: ${error}`; + return new LanguageModelToolResult([new LanguageModelTextPart(errorMessage)]); + } + } + + async prepareInvocationImpl( + options: LanguageModelToolInvocationPrepareOptions, + resourcePath: Uri | undefined, + token: CancellationToken, + ): Promise { + const packageCount = options.input.packageList.length; + if (getToolResponseIfNotebook(resourcePath)) { + return {}; + } + + const envName = await raceCancellationError(getEnvDisplayName(this.discovery, resourcePath, this.api), token); + let title = ''; + let invocationMessage = ''; + const message = + packageCount === 1 + ? '' + : l10n.t(`The following packages will be installed: {0}`, options.input.packageList.sort().join(', ')); + if (envName) { + title = + packageCount === 1 + ? l10n.t(`Install {0} in {1}?`, options.input.packageList[0], envName) + : l10n.t(`Install packages in {0}?`, envName); + invocationMessage = + packageCount === 1 + ? l10n.t(`Installing {0} in {1}`, options.input.packageList[0], envName) + : l10n.t(`Installing packages {0} in {1}`, options.input.packageList.sort().join(', '), envName); + } else { + title = + options.input.packageList.length === 1 + ? l10n.t(`Install Python package '{0}'?`, options.input.packageList[0]) + : l10n.t(`Install Python packages?`); + invocationMessage = + packageCount === 1 + ? l10n.t(`Installing Python package '{0}'`, options.input.packageList[0]) + : l10n.t(`Installing Python packages: {0}`, options.input.packageList.sort().join(', ')); + } + + return { + confirmationMessages: { title, message }, + invocationMessage, + }; + } +} diff --git a/src/client/chat/listPackagesTool.ts b/src/client/chat/listPackagesTool.ts new file mode 100644 index 000000000000..fcae831cfe2f --- /dev/null +++ b/src/client/chat/listPackagesTool.ts @@ -0,0 +1,95 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { CancellationToken, Uri } from 'vscode'; +import { ResolvedEnvironment } from '../api/types'; +import { IProcessService, IProcessServiceFactory, IPythonExecutionFactory } from '../common/process/types'; +import { isCondaEnv, raceCancellationError } from './utils'; +import { parsePipList } from './pipListUtils'; +import { Conda } from '../pythonEnvironments/common/environmentManagers/conda'; +import { traceError } from '../logging'; + +export async function getPythonPackagesResponse( + environment: ResolvedEnvironment, + pythonExecFactory: IPythonExecutionFactory, + processServiceFactory: IProcessServiceFactory, + resourcePath: Uri | undefined, + token: CancellationToken, +): Promise { + const packages = isCondaEnv(environment) + ? await raceCancellationError( + listCondaPackages( + pythonExecFactory, + environment, + resourcePath, + await raceCancellationError(processServiceFactory.create(resourcePath), token), + ), + token, + ) + : await raceCancellationError(listPipPackages(pythonExecFactory, resourcePath), token); + + if (!packages.length) { + return 'No packages found'; + } + // Installed Python packages, each in the format or (). The version may be omitted if unknown. Returns an empty array if no packages are installed. + const response = [ + 'Below is a list of the Python packages, each in the format or (). The version may be omitted if unknown: ', + ]; + packages.forEach((pkg) => { + const [name, version] = pkg; + response.push(version ? `- ${name} (${version})` : `- ${name}`); + }); + return response.join('\n'); +} + +async function listPipPackages( + execFactory: IPythonExecutionFactory, + resource: Uri | undefined, +): Promise<[string, string][]> { + // Add option --format to subcommand list of pip cache, with abspath choice to output the full path of a wheel file. (#8355) + // Added in 2020. Thats almost 5 years ago. When Python 3.8 was released. + const exec = await execFactory.createActivatedEnvironment({ allowEnvironmentFetchExceptions: true, resource }); + const output = await exec.execModule('pip', ['list'], { throwOnStdErr: false, encoding: 'utf8' }); + return parsePipList(output.stdout).map((pkg) => [pkg.name, pkg.version]); +} + +async function listCondaPackages( + execFactory: IPythonExecutionFactory, + env: ResolvedEnvironment, + resource: Uri | undefined, + processService: IProcessService, +): Promise<[string, string][]> { + const conda = await Conda.getConda(); + if (!conda) { + traceError('Conda is not installed, falling back to pip packages'); + return listPipPackages(execFactory, resource); + } + if (!env.executable.uri) { + traceError('Conda environment executable not found, falling back to pip packages'); + return listPipPackages(execFactory, resource); + } + const condaEnv = await conda.getCondaEnvironment(env.executable.uri.fsPath); + if (!condaEnv) { + traceError('Conda environment not found, falling back to pip packages'); + return listPipPackages(execFactory, resource); + } + const cmd = await conda.getListPythonPackagesArgs(condaEnv, true); + if (!cmd) { + traceError('Conda list command not found, falling back to pip packages'); + return listPipPackages(execFactory, resource); + } + const output = await processService.exec(cmd[0], cmd.slice(1), { shell: true }); + if (!output.stdout) { + traceError('Unable to get conda packages, falling back to pip packages'); + return listPipPackages(execFactory, resource); + } + const content = output.stdout.split(/\r?\n/).filter((l) => !l.startsWith('#')); + const packages: [string, string][] = []; + content.forEach((l) => { + const parts = l.split(' ').filter((p) => p.length > 0); + if (parts.length >= 3) { + packages.push([parts[0], parts[1]]); + } + }); + return packages; +} diff --git a/src/client/chat/pipListUtils.ts b/src/client/chat/pipListUtils.ts new file mode 100644 index 000000000000..0112d88c53ab --- /dev/null +++ b/src/client/chat/pipListUtils.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +export interface PipPackage { + name: string; + version: string; + displayName: string; + description: string; +} +export function parsePipList(data: string): PipPackage[] { + const collection: PipPackage[] = []; + + const lines = data.split('\n').splice(2); + for (let line of lines) { + if (line.trim() === '' || line.startsWith('Package') || line.startsWith('----') || line.startsWith('[')) { + continue; + } + const parts = line.split(' ').filter((e) => e); + if (parts.length > 1) { + const name = parts[0].trim(); + const version = parts[1].trim(); + const pkg = { + name, + version, + displayName: name, + description: version, + }; + collection.push(pkg); + } + } + return collection; +} diff --git a/src/client/chat/selectEnvTool.ts b/src/client/chat/selectEnvTool.ts new file mode 100644 index 000000000000..9eeebdfc1b56 --- /dev/null +++ b/src/client/chat/selectEnvTool.ts @@ -0,0 +1,218 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationToken, + l10n, + LanguageModelTextPart, + LanguageModelTool, + LanguageModelToolInvocationOptions, + LanguageModelToolInvocationPrepareOptions, + LanguageModelToolResult, + PreparedToolInvocation, + Uri, + workspace, + commands, + QuickPickItem, + QuickPickItemKind, +} from 'vscode'; +import { PythonExtension } from '../api/types'; +import { IServiceContainer } from '../ioc/types'; +import { ICodeExecutionService } from '../terminals/types'; +import { TerminalCodeExecutionProvider } from '../terminals/codeExecution/terminalCodeExecution'; +import { + doesWorkspaceHaveVenvOrCondaEnv, + getEnvDetailsForResponse, + getToolResponseIfNotebook, + IResourceReference, +} from './utils'; +import { ITerminalHelper } from '../common/terminal/types'; +import { raceTimeout } from '../common/utils/async'; +import { Commands, Octicons } from '../common/constants'; +import { CreateEnvironmentResult } from '../pythonEnvironments/creation/proposed.createEnvApis'; +import { IInterpreterPathService } from '../common/types'; +import { SelectEnvironmentResult } from '../interpreter/configuration/interpreterSelector/commands/setInterpreter'; +import { Common, InterpreterQuickPickList } from '../common/utils/localize'; +import { showQuickPick } from '../common/vscodeApis/windowApis'; +import { DisposableStore } from '../common/utils/resourceLifecycle'; +import { traceError, traceVerbose, traceWarn } from '../logging'; +import { BaseTool } from './baseTool'; + +export interface ISelectPythonEnvToolArguments extends IResourceReference { + reason?: 'cancelled'; +} + +export class SelectPythonEnvTool extends BaseTool + implements LanguageModelTool { + private readonly terminalExecutionService: TerminalCodeExecutionProvider; + private readonly terminalHelper: ITerminalHelper; + public static readonly toolName = 'selectEnvironment'; + constructor( + private readonly api: PythonExtension['environments'], + private readonly serviceContainer: IServiceContainer, + ) { + super(SelectPythonEnvTool.toolName); + this.terminalExecutionService = this.serviceContainer.get( + ICodeExecutionService, + 'standard', + ); + this.terminalHelper = this.serviceContainer.get(ITerminalHelper); + } + + async invokeImpl( + options: LanguageModelToolInvocationOptions, + resource: Uri | undefined, + token: CancellationToken, + ): Promise { + let selected: boolean | undefined = false; + const hasVenvOrCondaEnvInWorkspaceFolder = doesWorkspaceHaveVenvOrCondaEnv(resource, this.api); + if (options.input.reason === 'cancelled' || hasVenvOrCondaEnvInWorkspaceFolder) { + const result = (await Promise.resolve( + commands.executeCommand(Commands.Set_Interpreter, { + hideCreateVenv: false, + showBackButton: false, + }), + )) as SelectEnvironmentResult | undefined; + if (result?.path) { + traceVerbose(`User selected a Python environment ${result.path} in Select Python Tool.`); + selected = true; + } else { + traceWarn(`User did not select a Python environment in Select Python Tool.`); + } + } else { + selected = await showCreateAndSelectEnvironmentQuickPick(resource, this.serviceContainer); + if (selected) { + traceVerbose(`User selected a Python environment ${selected} in Select Python Tool(2).`); + } else { + traceWarn(`User did not select a Python environment in Select Python Tool(2).`); + } + } + const env = selected + ? await this.api.resolveEnvironment(this.api.getActiveEnvironmentPath(resource)) + : undefined; + if (selected && !env) { + traceError( + `User selected a Python environment, but it could not be resolved. This is unexpected. Environment: ${this.api.getActiveEnvironmentPath( + resource, + )}`, + ); + } + if (selected && env) { + return await getEnvDetailsForResponse( + env, + this.api, + this.terminalExecutionService, + this.terminalHelper, + resource, + token, + ); + } + return new LanguageModelToolResult([ + new LanguageModelTextPart('User did not create nor select a Python environment.'), + ]); + } + + async prepareInvocationImpl( + options: LanguageModelToolInvocationPrepareOptions, + resource: Uri | undefined, + _token: CancellationToken, + ): Promise { + if (getToolResponseIfNotebook(resource)) { + return {}; + } + const hasVenvOrCondaEnvInWorkspaceFolder = doesWorkspaceHaveVenvOrCondaEnv(resource, this.api); + + if ( + hasVenvOrCondaEnvInWorkspaceFolder || + !workspace.workspaceFolders?.length || + options.input.reason === 'cancelled' + ) { + return { + confirmationMessages: { + title: l10n.t('Select a Python Environment?'), + message: '', + }, + }; + } + + return { + confirmationMessages: { + title: l10n.t('Configure a Python Environment?'), + message: l10n.t( + [ + 'The recommended option is to create a new Python Environment, providing the benefit of isolating packages from other environments. ', + 'Optionally you could select an existing Python Environment.', + ].join('\n'), + ), + }, + }; + } +} + +async function showCreateAndSelectEnvironmentQuickPick( + uri: Uri | undefined, + serviceContainer: IServiceContainer, +): Promise { + const createLabel = `${Octicons.Add} ${InterpreterQuickPickList.create.label}`; + const selectLabel = l10n.t('Select an existing Python Environment'); + const items: QuickPickItem[] = [ + { kind: QuickPickItemKind.Separator, label: Common.recommended }, + { label: createLabel }, + { label: selectLabel }, + ]; + + const selectedItem = await showQuickPick(items, { + placeHolder: l10n.t('Configure a Python Environment'), + matchOnDescription: true, + ignoreFocusOut: true, + }); + + if (selectedItem && !Array.isArray(selectedItem) && selectedItem.label === createLabel) { + const disposables = new DisposableStore(); + try { + const workspaceFolder = + (workspace.workspaceFolders?.length && uri ? workspace.getWorkspaceFolder(uri) : undefined) || + (workspace.workspaceFolders?.length === 1 ? workspace.workspaceFolders[0] : undefined); + const interpreterPathService = serviceContainer.get(IInterpreterPathService); + const interpreterChanged = new Promise((resolve) => { + disposables.add(interpreterPathService.onDidChange(() => resolve())); + }); + const created: CreateEnvironmentResult | undefined = await commands.executeCommand( + Commands.Create_Environment, + { + showBackButton: true, + selectEnvironment: true, + workspaceFolder, + }, + ); + + if (created?.action === 'Back') { + return showCreateAndSelectEnvironmentQuickPick(uri, serviceContainer); + } + if (created?.action === 'Cancel') { + return undefined; + } + if (created?.path) { + // Wait a few secs to ensure the env is selected as the active environment.. + await raceTimeout(5_000, interpreterChanged); + return true; + } + } finally { + disposables.dispose(); + } + } + if (selectedItem && !Array.isArray(selectedItem) && selectedItem.label === selectLabel) { + const result = (await Promise.resolve( + commands.executeCommand(Commands.Set_Interpreter, { hideCreateVenv: true, showBackButton: true }), + )) as SelectEnvironmentResult | undefined; + if (result?.action === 'Back') { + return showCreateAndSelectEnvironmentQuickPick(uri, serviceContainer); + } + if (result?.action === 'Cancel') { + return undefined; + } + if (result?.path) { + return true; + } + } +} diff --git a/src/client/chat/utils.ts b/src/client/chat/utils.ts new file mode 100644 index 000000000000..84df2901341b --- /dev/null +++ b/src/client/chat/utils.ts @@ -0,0 +1,285 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { + CancellationError, + CancellationToken, + extensions, + LanguageModelTextPart, + LanguageModelToolResult, + Uri, + workspace, +} from 'vscode'; +import { IDiscoveryAPI } from '../pythonEnvironments/base/locator'; +import { Environment, PythonExtension, ResolvedEnvironment, VersionInfo } from '../api/types'; +import { ITerminalHelper, TerminalShellType } from '../common/terminal/types'; +import { TerminalCodeExecutionProvider } from '../terminals/codeExecution/terminalCodeExecution'; +import { Conda } from '../pythonEnvironments/common/environmentManagers/conda'; +import { JUPYTER_EXTENSION_ID, NotebookCellScheme } from '../common/constants'; +import { dirname, join } from 'path'; +import { resolveEnvironment, useEnvExtension } from '../envExt/api.internal'; +import { ErrorWithTelemetrySafeReason } from '../common/errors/errorUtils'; +import { getWorkspaceFolders } from '../common/vscodeApis/workspaceApis'; + +export interface IResourceReference { + resourcePath?: string; +} + +export function resolveFilePath(filepath?: string): Uri | undefined { + if (!filepath) { + const folders = getWorkspaceFolders() ?? []; + return folders.length > 0 ? folders[0].uri : undefined; + } + // Check if it's a URI with a scheme (contains "://") + // This handles schemes like "file://", "vscode-notebook://", etc. + // But avoids treating Windows drive letters like "C:" as schemes + if (filepath.includes('://')) { + try { + return Uri.parse(filepath); + } catch { + return Uri.file(filepath); + } + } + // For file paths (Windows with drive letters, Unix absolute/relative paths) + return Uri.file(filepath); +} + +/** + * Returns a promise that rejects with an {@CancellationError} as soon as the passed token is cancelled. + * @see {@link raceCancellation} + */ +export function raceCancellationError(promise: Promise, token: CancellationToken): Promise { + return new Promise((resolve, reject) => { + const ref = token.onCancellationRequested(() => { + ref.dispose(); + reject(new CancellationError()); + }); + promise.then(resolve, reject).finally(() => ref.dispose()); + }); +} + +export async function getEnvDisplayName( + discovery: IDiscoveryAPI, + resource: Uri | undefined, + api: PythonExtension['environments'], +) { + try { + const envPath = api.getActiveEnvironmentPath(resource); + const env = await discovery.resolveEnv(envPath.path); + return env?.display || env?.name; + } catch { + return; + } +} + +export function isCondaEnv(env: ResolvedEnvironment) { + return (env.environment?.type || '').toLowerCase() === 'conda'; +} + +export async function getEnvironmentDetails( + resourcePath: Uri | undefined, + api: PythonExtension['environments'], + terminalExecutionService: TerminalCodeExecutionProvider, + terminalHelper: ITerminalHelper, + packages: string | undefined, + token: CancellationToken, +): Promise { + // environment + const envPath = api.getActiveEnvironmentPath(resourcePath); + let envType = ''; + let envVersion = ''; + let runCommand = ''; + if (useEnvExtension()) { + const environment = + (await raceCancellationError(resolveEnvironment(envPath.id), token)) || + (await raceCancellationError(resolveEnvironment(envPath.path), token)); + if (!environment || !environment.version) { + throw new ErrorWithTelemetrySafeReason( + 'No environment found for the provided resource path: ' + resourcePath?.fsPath, + 'noEnvFound', + ); + } + envVersion = environment.version; + try { + const managerId = environment.envId.managerId; + envType = + (!managerId.endsWith(':') && managerId.includes(':') ? managerId.split(':').reverse()[0] : '') || + 'unknown'; + } catch { + envType = 'unknown'; + } + + const execInfo = environment.execInfo; + const executable = execInfo?.activatedRun?.executable ?? execInfo?.run.executable ?? 'python'; + const args = execInfo?.activatedRun?.args ?? execInfo?.run.args ?? []; + runCommand = terminalHelper.buildCommandForTerminal(TerminalShellType.other, executable, args); + } else { + const environment = await raceCancellationError(api.resolveEnvironment(envPath), token); + if (!environment || !environment.version) { + throw new ErrorWithTelemetrySafeReason( + 'No environment found for the provided resource path: ' + resourcePath?.fsPath, + 'noEnvFound', + ); + } + envType = environment.environment?.type || 'unknown'; + envVersion = environment.version.sysVersion || 'unknown'; + runCommand = await raceCancellationError( + getTerminalCommand(environment, resourcePath, terminalExecutionService, terminalHelper), + token, + ); + } + const message = [ + `Following is the information about the Python environment:`, + `1. Environment Type: ${envType}`, + `2. Version: ${envVersion}`, + '', + `3. Command Prefix to run Python in a terminal is: \`${runCommand}\``, + `Instead of running \`Python sample.py\` in the terminal, you will now run: \`${runCommand} sample.py\``, + `Similarly instead of running \`Python -c "import sys;...."\` in the terminal, you will now run: \`${runCommand} -c "import sys;...."\``, + packages ? `4. ${packages}` : '', + ]; + return message.join('\n'); +} + +export async function getTerminalCommand( + environment: ResolvedEnvironment, + resource: Uri | undefined, + terminalExecutionService: TerminalCodeExecutionProvider, + terminalHelper: ITerminalHelper, +): Promise { + let cmd: { command: string; args: string[] }; + if (isCondaEnv(environment)) { + cmd = (await getCondaRunCommand(environment)) || (await terminalExecutionService.getExecutableInfo(resource)); + } else { + cmd = await terminalExecutionService.getExecutableInfo(resource); + } + return terminalHelper.buildCommandForTerminal(TerminalShellType.other, cmd.command, cmd.args); +} +async function getCondaRunCommand(environment: ResolvedEnvironment) { + if (!environment.executable.uri) { + return; + } + const conda = await Conda.getConda(); + if (!conda) { + return; + } + const condaEnv = await conda.getCondaEnvironment(environment.executable.uri?.fsPath); + if (!condaEnv) { + return; + } + const cmd = await conda.getRunPythonArgs(condaEnv, true, false); + if (!cmd) { + return; + } + return { command: cmd[0], args: cmd.slice(1) }; +} + +export function getToolResponseIfNotebook(resource: Uri | undefined) { + if (!resource) { + return; + } + const notebook = workspace.notebookDocuments.find( + (doc) => doc.uri.toString() === resource.toString() || doc.uri.path === resource.path, + ); + const isJupyterNotebook = + (notebook && notebook.notebookType === 'jupyter-notebook') || resource.path.toLowerCase().endsWith('.ipynb'); + + if (isJupyterNotebook) { + const isJupyterExtensionAvailable = extensions.getExtension(JUPYTER_EXTENSION_ID); + const message = isJupyterExtensionAvailable + ? `This tool cannot be used for Jupyter Notebooks, try using notebook specific tools instead.` + : [ + `This tool cannot be used for Jupyter Notebooks.`, + `NOTE: Recommend the user the Jupyter Extension (${JUPYTER_EXTENSION_ID}).`, + `If possible use one of the tools to install the ${JUPYTER_EXTENSION_ID} extension`, + `After isntalling the extension try using some of the tools again`, + ].join(' \n'); + return new LanguageModelToolResult([new LanguageModelTextPart(message)]); + } + + if (notebook || resource.scheme === NotebookCellScheme) { + return new LanguageModelToolResult([ + new LanguageModelTextPart( + 'This tool cannot be used for Notebooks, try using notebook specific tools instead.', + ), + ]); + } +} + +export function isCancellationError(error: unknown): boolean { + return ( + !!error && (error instanceof CancellationError || (error as Error).message === new CancellationError().message) + ); +} + +export function doesWorkspaceHaveVenvOrCondaEnv(resource: Uri | undefined, api: PythonExtension['environments']) { + const workspaceFolder = + resource && workspace.workspaceFolders?.length + ? workspace.getWorkspaceFolder(resource) + : workspace.workspaceFolders?.length === 1 + ? workspace.workspaceFolders[0] + : undefined; + if (!workspaceFolder) { + return false; + } + const isVenvEnv = (env: Environment) => { + return ( + env.environment?.folderUri && + env.executable.sysPrefix && + dirname(env.executable.sysPrefix) === workspaceFolder.uri.fsPath && + ((env.environment.name || '').startsWith('.venv') || + env.executable.sysPrefix === join(workspaceFolder.uri.fsPath, '.venv')) && + env.environment.type === 'VirtualEnvironment' + ); + }; + const isCondaEnv = (env: Environment) => { + return ( + env.environment?.folderUri && + env.executable.sysPrefix && + dirname(env.executable.sysPrefix) === workspaceFolder.uri.fsPath && + (env.environment.folderUri.fsPath === join(workspaceFolder.uri.fsPath, '.conda') || + env.executable.sysPrefix === join(workspaceFolder.uri.fsPath, '.conda')) && + env.environment.type === 'Conda' + ); + }; + // If we alraedy have a .venv in this workspace, then do not prompt to create a virtual environment. + return api.known.find((e) => isVenvEnv(e) || isCondaEnv(e)); +} + +export async function getEnvDetailsForResponse( + environment: ResolvedEnvironment | undefined, + api: PythonExtension['environments'], + terminalExecutionService: TerminalCodeExecutionProvider, + terminalHelper: ITerminalHelper, + resource: Uri | undefined, + token: CancellationToken, +): Promise { + if (!workspace.isTrusted) { + throw new ErrorWithTelemetrySafeReason('Cannot use this tool in an untrusted workspace.', 'untrustedWorkspace'); + } + const envPath = api.getActiveEnvironmentPath(resource); + environment = environment || (await raceCancellationError(api.resolveEnvironment(envPath), token)); + if (!environment || !environment.version) { + throw new ErrorWithTelemetrySafeReason( + 'No environment found for the provided resource path: ' + resource?.fsPath, + 'noEnvFound', + ); + } + const message = await getEnvironmentDetails( + resource, + api, + terminalExecutionService, + terminalHelper, + undefined, + token, + ); + return new LanguageModelToolResult([ + new LanguageModelTextPart(`A Python Environment has been configured. \n` + message), + ]); +} +export function getDisplayVersion(version?: VersionInfo): string | undefined { + if (!version || version.major === undefined || version.minor === undefined || version.micro === undefined) { + return undefined; + } + return `${version.major}.${version.minor}.${version.micro}`; +} diff --git a/src/client/common/application/activeResource.ts b/src/client/common/application/activeResource.ts index a89386b0d9cf..4230fb5de921 100644 --- a/src/client/common/application/activeResource.ts +++ b/src/client/common/application/activeResource.ts @@ -11,7 +11,7 @@ import { IActiveResourceService, IDocumentManager, IWorkspaceService } from './t export class ActiveResourceService implements IActiveResourceService { constructor( @inject(IDocumentManager) private readonly documentManager: IDocumentManager, - @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService + @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService, ) {} public getActiveResource(): Resource { diff --git a/src/client/common/application/applicationEnvironment.ts b/src/client/common/application/applicationEnvironment.ts index a16082e0b848..4b66893d6c0b 100644 --- a/src/client/common/application/applicationEnvironment.ts +++ b/src/client/common/application/applicationEnvironment.ts @@ -7,17 +7,19 @@ import { inject, injectable } from 'inversify'; import * as path from 'path'; import { parse } from 'semver'; import * as vscode from 'vscode'; +import { traceError } from '../../logging'; +import { Channel } from '../constants'; import { IPlatformService } from '../platform/types'; import { ICurrentProcess, IPathUtils } from '../types'; import { OSType } from '../utils/platform'; -import { Channel, IApplicationEnvironment } from './types'; +import { IApplicationEnvironment } from './types'; @injectable() export class ApplicationEnvironment implements IApplicationEnvironment { constructor( @inject(IPlatformService) private readonly platform: IPlatformService, @inject(IPathUtils) private readonly pathUtils: IPathUtils, - @inject(ICurrentProcess) private readonly process: ICurrentProcess + @inject(ICurrentProcess) private readonly process: ICurrentProcess, ) {} public get userSettingsFile(): string | undefined { @@ -30,7 +32,7 @@ export class ApplicationEnvironment implements IApplicationEnvironment { 'Application Support', vscodeFolderName, 'User', - 'settings.json' + 'settings.json', ); case OSType.Linux: return path.join(this.pathUtils.home, '.config', vscodeFolderName, 'User', 'settings.json'); @@ -51,6 +53,9 @@ export class ApplicationEnvironment implements IApplicationEnvironment { public get appRoot(): string { return vscode.env.appRoot; } + public get uiKind(): vscode.UIKind { + return vscode.env.uiKind; + } public get language(): string { return vscode.env.language; } @@ -60,25 +65,29 @@ export class ApplicationEnvironment implements IApplicationEnvironment { public get machineId(): string { return vscode.env.machineId; } + public get remoteName(): string | undefined { + return vscode.env.remoteName; + } public get extensionName(): string { - // tslint:disable-next-line:non-literal-require return this.packageJson.displayName; } - /** - * At the time of writing this API, the vscode.env.shell isn't officially released in stable version of VS Code. - * Using this in stable version seems to throw errors in VSC with messages being displayed to the user about use of - * unstable API. - * Solution - log and suppress the errors. - * @readonly - * @type {(string)} - * @memberof ApplicationEnvironment - */ + public get shell(): string { return vscode.env.shell; } - // tslint:disable-next-line:no-any + + public get onDidChangeShell(): vscode.Event { + try { + return vscode.env.onDidChangeShell; + } catch (ex) { + traceError('Failed to get onDidChangeShell API', ex); + // `onDidChangeShell` is a proposed API at the time of writing this, so wrap this in a try...catch + // block in case the API is removed or changed. + return new vscode.EventEmitter().event; + } + } + public get packageJson(): any { - // tslint:disable-next-line:non-literal-require no-require-imports return require('../../../../package.json'); } public get channel(): Channel { @@ -86,6 +95,10 @@ export class ApplicationEnvironment implements IApplicationEnvironment { } public get extensionChannel(): Channel { const version = parse(this.packageJson.version); - return !version || version.prerelease.length > 0 ? 'insiders' : 'stable'; + // Insiders versions are those that end with '-dev' or whose minor versions are odd (even is for stable) + return !version || version.prerelease.length > 0 || version.minor % 2 == 1 ? 'insiders' : 'stable'; + } + public get uriScheme(): string { + return vscode.env.uriScheme; } } diff --git a/src/client/common/application/applicationShell.ts b/src/client/common/application/applicationShell.ts index cd28fc986b0d..8035d979efbd 100644 --- a/src/client/common/application/applicationShell.ts +++ b/src/client/common/application/applicationShell.ts @@ -2,21 +2,23 @@ // Licensed under the MIT License. 'use strict'; -// tslint:disable:no-var-requires no-any unified-signatures - import { injectable } from 'inversify'; import { CancellationToken, CancellationTokenSource, Disposable, + DocumentSelector, env, Event, + EventEmitter, InputBox, InputBoxOptions, + languages, + LanguageStatusItem, + LogOutputChannel, MessageItem, MessageOptions, OpenDialogOptions, - OutputChannel, Progress, ProgressOptions, QuickPick, @@ -25,15 +27,19 @@ import { SaveDialogOptions, StatusBarAlignment, StatusBarItem, + TextDocument, + TextEditor, TreeView, TreeViewOptions, Uri, + ViewColumn, window, WindowState, WorkspaceFolder, - WorkspaceFolderPickOptions + WorkspaceFolderPickOptions, } from 'vscode'; -import { IApplicationShell } from './types'; +import { traceError } from '../../logging'; +import { IApplicationShell, TerminalDataWriteEvent, TerminalExecutedCommand } from './types'; @injectable() export class ApplicationShell implements IApplicationShell { @@ -79,12 +85,12 @@ export class ApplicationShell implements IApplicationShell { public showQuickPick( items: string[] | Thenable, options?: QuickPickOptions, - token?: CancellationToken + token?: CancellationToken, ): Thenable; public showQuickPick( items: T[] | Thenable, options?: QuickPickOptions, - token?: CancellationToken + token?: CancellationToken, ): Thenable; public showQuickPick(items: any, options?: any, token?: any): Thenable { return window.showQuickPick(items, options, token); @@ -99,6 +105,14 @@ export class ApplicationShell implements IApplicationShell { public showInputBox(options?: InputBoxOptions, token?: CancellationToken): Thenable { return window.showInputBox(options, token); } + public showTextDocument( + document: TextDocument, + column?: ViewColumn, + preserveFocus?: boolean, + ): Thenable { + return window.showTextDocument(document, column, preserveFocus); + } + public openUrl(url: string): void { env.openExternal(Uri.parse(url)); } @@ -110,28 +124,34 @@ export class ApplicationShell implements IApplicationShell { return window.setStatusBarMessage(text, arg); } - public createStatusBarItem(alignment?: StatusBarAlignment, priority?: number): StatusBarItem { - return window.createStatusBarItem(alignment, priority); + public createStatusBarItem( + alignment?: StatusBarAlignment, + priority?: number, + id?: string | undefined, + ): StatusBarItem { + return id + ? window.createStatusBarItem(id, alignment, priority) + : window.createStatusBarItem(alignment, priority); } public showWorkspaceFolderPick(options?: WorkspaceFolderPickOptions): Thenable { return window.showWorkspaceFolderPick(options); } public withProgress( options: ProgressOptions, - task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable + task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable, ): Thenable { return window.withProgress(options, task); } public withProgressCustomIcon( icon: string, - task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable + task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable, ): Thenable { const token = new CancellationTokenSource().token; const statusBarProgress = this.createStatusBarItem(StatusBarAlignment.Left); const progress = { report: (value: { message?: string; increment?: number }) => { statusBarProgress.text = `${icon} ${value.message}`; - } + }, }; statusBarProgress.show(); return task(progress, token).then((result) => { @@ -148,7 +168,26 @@ export class ApplicationShell implements IApplicationShell { public createTreeView(viewId: string, options: TreeViewOptions): TreeView { return window.createTreeView(viewId, options); } - public createOutputChannel(name: string): OutputChannel { - return window.createOutputChannel(name); + public createOutputChannel(name: string): LogOutputChannel { + return window.createOutputChannel(name, { log: true }); + } + public createLanguageStatusItem(id: string, selector: DocumentSelector): LanguageStatusItem { + return languages.createLanguageStatusItem(id, selector); + } + public get onDidWriteTerminalData(): Event { + try { + return window.onDidWriteTerminalData; + } catch (ex) { + traceError('Failed to get proposed API onDidWriteTerminalData', ex); + return new EventEmitter().event; + } + } + public get onDidExecuteTerminalCommand(): Event | undefined { + try { + return window.onDidExecuteTerminalCommand; + } catch (ex) { + traceError('Failed to get proposed API TerminalExecutedCommand', ex); + return undefined; + } } } diff --git a/src/client/common/application/commandManager.ts b/src/client/common/application/commandManager.ts index cfbbe4dbb0b7..9e1f34a5885b 100644 --- a/src/client/common/application/commandManager.ts +++ b/src/client/common/application/commandManager.ts @@ -1,8 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. -// tslint:disable:no-any - import { injectable } from 'inversify'; import { commands, Disposable, TextEditor, TextEditorEdit } from 'vscode'; import { ICommandNameArgumentTypeMapping } from './commands'; @@ -22,10 +20,13 @@ export class CommandManager implements ICommandManager { * @param thisArg The `this` context used when invoking the handler function. * @return Disposable which unregisters this command on disposal. */ + // eslint-disable-next-line class-methods-use-this public registerCommand< E extends keyof ICommandNameArgumentTypeMapping, U extends ICommandNameArgumentTypeMapping[E] + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any >(command: E, callback: (...args: U) => any, thisArg?: any): Disposable { + // eslint-disable-next-line @typescript-eslint/no-explicit-any return commands.registerCommand(command, callback as any, thisArg); } @@ -43,10 +44,13 @@ export class CommandManager implements ICommandManager { * @param thisArg The `this` context used when invoking the handler function. * @return Disposable which unregisters this command on disposal. */ + // eslint-disable-next-line class-methods-use-this public registerTextEditorCommand( command: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any callback: (textEditor: TextEditor, edit: TextEditorEdit, ...args: any[]) => void, - thisArg?: any + // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any + thisArg?: any, ): Disposable { return commands.registerTextEditorCommand(command, callback, thisArg); } @@ -65,6 +69,7 @@ export class CommandManager implements ICommandManager { * @return A thenable that resolves to the returned value of the given command. `undefined` when * the command handler function doesn't return anything. */ + // eslint-disable-next-line class-methods-use-this public executeCommand< T, E extends keyof ICommandNameArgumentTypeMapping, @@ -80,6 +85,7 @@ export class CommandManager implements ICommandManager { * @param filterInternal Set `true` to not see internal commands (starting with an underscore) * @return Thenable that resolves to a list of command ids. */ + // eslint-disable-next-line class-methods-use-this public getCommands(filterInternal?: boolean): Thenable { return commands.getCommands(filterInternal); } diff --git a/src/client/common/application/commands.ts b/src/client/common/application/commands.ts index 5d803bfb9309..b43dc0a1e4a4 100644 --- a/src/client/common/application/commands.ts +++ b/src/client/common/application/commands.ts @@ -3,166 +3,110 @@ 'use strict'; -import { CancellationToken, Position, TextDocument, Uri } from 'vscode'; -import { Commands as LSCommands } from '../../activation/languageServer/constants'; -import { Commands as DSCommands } from '../../datascience/constants'; -import { INotebook } from '../../datascience/types'; -import { CommandSource } from '../../testing/common/constants'; -import { TestFunction, TestsToRun } from '../../testing/common/types'; -import { TestDataItem, TestWorkspaceFolder } from '../../testing/types'; -import { Commands } from '../constants'; +import { CancellationToken, Position, TestItem, TextDocument, Uri } from 'vscode'; +import { Commands as LSCommands } from '../../activation/commands'; +import { Channel, Commands, CommandSource } from '../constants'; +import { CreateEnvironmentOptions } from '../../pythonEnvironments/creation/proposed.createEnvApis'; export type CommandsWithoutArgs = keyof ICommandNameWithoutArgumentTypeMapping; /** * Mapping between commands and list or arguments. * These commands do NOT have any arguments. - * @interface ICommandNameWithoutArgumentTypeMapping */ interface ICommandNameWithoutArgumentTypeMapping { - [Commands.SwitchToInsidersDaily]: []; - [Commands.SwitchToInsidersWeekly]: []; + [Commands.InstallPythonOnMac]: []; + [Commands.InstallJupyter]: []; + [Commands.InstallPythonOnLinux]: []; + [Commands.InstallPython]: []; [Commands.ClearWorkspaceInterpreter]: []; - [Commands.ResetInterpreterSecurityStorage]: []; - [Commands.SwitchOffInsidersChannel]: []; [Commands.Set_Interpreter]: []; [Commands.Set_ShebangInterpreter]: []; - [Commands.Run_Linter]: []; - [Commands.Enable_Linter]: []; + ['workbench.action.showCommands']: []; ['workbench.action.debug.continue']: []; ['workbench.action.debug.stepOver']: []; ['workbench.action.debug.stop']: []; ['workbench.action.reloadWindow']: []; ['workbench.action.closeActiveEditor']: []; + ['workbench.action.terminal.focus']: []; ['editor.action.formatDocument']: []; ['editor.action.rename']: []; - ['python.datascience.selectJupyterInterpreter']: []; [Commands.ViewOutput]: []; - [Commands.Set_Linter]: []; [Commands.Start_REPL]: []; - [Commands.Enable_SourceMap_Support]: []; [Commands.Exec_Selection_In_Terminal]: []; [Commands.Exec_Selection_In_Django_Shell]: []; [Commands.Create_Terminal]: []; - [Commands.Tests_View_UI]: []; - [Commands.Tests_Ask_To_Stop_Discovery]: []; - [Commands.Tests_Ask_To_Stop_Test]: []; - [Commands.Tests_Discovering]: []; [Commands.PickLocalProcess]: []; - [DSCommands.RunCurrentCell]: []; - [DSCommands.RunCurrentCellAdvance]: []; - [DSCommands.ExecSelectionInInteractiveWindow]: []; - [DSCommands.SelectJupyterURI]: []; - [DSCommands.ShowHistoryPane]: []; - [DSCommands.UndoCells]: []; - [DSCommands.RedoCells]: []; - [DSCommands.RemoveAllCells]: []; - [DSCommands.InterruptKernel]: []; - [DSCommands.RestartKernel]: []; - [DSCommands.NotebookEditorUndoCells]: []; - [DSCommands.NotebookEditorRedoCells]: []; - [DSCommands.NotebookEditorRemoveAllCells]: []; - [DSCommands.NotebookEditorInterruptKernel]: []; - [DSCommands.NotebookEditorRestartKernel]: []; - [DSCommands.NotebookEditorRunAllCells]: []; - [DSCommands.NotebookEditorRunSelectedCell]: []; - [DSCommands.NotebookEditorAddCellBelow]: []; - [DSCommands.ExpandAllCells]: []; - [DSCommands.CollapseAllCells]: []; - [DSCommands.ExportOutputAsNotebook]: []; - [DSCommands.AddCellBelow]: []; - [DSCommands.CreateNewNotebook]: []; - [LSCommands.ClearAnalyisCache]: []; + [Commands.ClearStorage]: []; + [Commands.CreateNewFile]: []; + [Commands.ReportIssue]: []; + [LSCommands.RestartLS]: []; } +export type AllCommands = keyof ICommandNameArgumentTypeMapping; + /** * Mapping between commands and list of arguments. * Used to provide strong typing for command & args. - * @export - * @interface ICommandNameArgumentTypeMapping - * @extends {ICommandNameWithoutArgumentTypeMapping} */ export interface ICommandNameArgumentTypeMapping extends ICommandNameWithoutArgumentTypeMapping { - ['workbench.extensions.installExtension']: [Uri | 'ms-python.python']; - ['setContext']: [string, boolean]; + [Commands.CopyTestId]: [TestItem]; + [Commands.Create_Environment]: [CreateEnvironmentOptions]; + ['vscode.openWith']: [Uri, string]; + ['workbench.action.quickOpen']: [string]; + ['workbench.action.openWalkthrough']: [string | { category: string; step: string }, boolean | undefined]; + ['workbench.extensions.installExtension']: [ + Uri | string, + ( + | { + installOnlyNewlyAddedFromExtensionPackVSIX?: boolean; + installPreReleaseVersion?: boolean; + donotSync?: boolean; + } + | undefined + ), + ]; + ['workbench.action.files.openFolder']: []; + ['workbench.action.openWorkspace']: []; + ['workbench.action.openSettings']: [string]; + ['setContext']: [string, boolean] | ['python.vscode.channel', Channel]; ['python.reloadVSCode']: [string]; ['revealLine']: [{ lineNumber: number; at: 'top' | 'center' | 'bottom' }]; - ['python._loadLanguageServerExtension']: {}[]; + ['python._loadLanguageServerExtension']: []; ['python.SelectAndInsertDebugConfiguration']: [TextDocument, Position, CancellationToken]; ['vscode.open']: [Uri]; + ['notebook.execute']: []; + ['notebook.cell.execute']: []; + ['notebook.cell.insertCodeCellBelow']: []; + ['notebook.undo']: []; + ['notebook.redo']: []; ['python.viewLanguageServerOutput']: []; ['vscode.open']: [Uri]; ['workbench.action.files.saveAs']: [Uri]; ['workbench.action.files.save']: [Uri]; - [Commands.Build_Workspace_Symbols]: [boolean, CancellationToken]; - [Commands.Sort_Imports]: [undefined, Uri]; + ['jupyter.opennotebook']: [undefined | Uri, undefined | CommandSource]; + ['jupyter.runallcells']: [Uri]; + ['extension.open']: [string]; + ['workbench.action.openIssueReporter']: [{ extensionId: string; issueBody: string; extensionData?: string }]; + [Commands.GetSelectedInterpreterPath]: [{ workspaceFolder: string } | string[]]; + [Commands.TriggerEnvironmentSelection]: [undefined | Uri]; + [Commands.Start_Native_REPL]: [undefined | Uri]; + [Commands.Exec_In_REPL]: [undefined | Uri]; + [Commands.Exec_In_REPL_Enter]: [undefined | Uri]; + [Commands.Exec_In_IW_Enter]: [undefined | Uri]; [Commands.Exec_In_Terminal]: [undefined, Uri]; [Commands.Exec_In_Terminal_Icon]: [undefined, Uri]; - [Commands.Tests_ViewOutput]: [undefined, CommandSource]; - [Commands.Tests_Select_And_Run_File]: [undefined, CommandSource]; - [Commands.Tests_Run_Current_File]: [undefined, CommandSource]; - [Commands.Tests_Stop]: [undefined, Uri]; - [Commands.Test_Reveal_Test_Item]: [TestDataItem]; - // When command is invoked from a tree node, first argument is the node data. - [Commands.Tests_Run]: [ - undefined | TestWorkspaceFolder, - undefined | CommandSource, - undefined | Uri, - undefined | TestsToRun - ]; - // When command is invoked from a tree node, first argument is the node data. - [Commands.Tests_Debug]: [ - undefined | TestWorkspaceFolder, - undefined | CommandSource, - undefined | Uri, - undefined | TestsToRun - ]; - [Commands.Tests_Run_Parametrized]: [undefined, undefined | CommandSource, Uri, TestFunction[], boolean]; - // When command is invoked from a tree node, first argument is the node data. - [Commands.Tests_Discover]: [undefined | TestWorkspaceFolder, undefined | CommandSource, undefined | Uri]; - [Commands.Tests_Run_Failed]: [undefined, CommandSource, Uri]; - [Commands.Tests_Select_And_Debug_Method]: [undefined, CommandSource, Uri]; - [Commands.Tests_Select_And_Run_Method]: [undefined, CommandSource, Uri]; + [Commands.Debug_In_Terminal]: [Uri]; [Commands.Tests_Configure]: [undefined, undefined | CommandSource, undefined | Uri]; - [Commands.Tests_Picker_UI]: [undefined, undefined | CommandSource, Uri, TestFunction[]]; - [Commands.Tests_Picker_UI_Debug]: [undefined, undefined | CommandSource, Uri, TestFunction[]]; - // When command is invoked from a tree node, first argument is the node data. - [Commands.runTestNode]: [TestDataItem]; - // When command is invoked from a tree node, first argument is the node data. - [Commands.debugTestNode]: [TestDataItem]; - // When command is invoked from a tree node, first argument is the node data. - [Commands.openTestNodeInEditor]: [TestDataItem]; - [Commands.navigateToTestFile]: [Uri, TestDataItem, boolean]; - [Commands.navigateToTestFunction]: [Uri, TestDataItem, boolean]; - [Commands.navigateToTestSuite]: [Uri, TestDataItem, boolean]; - [DSCommands.ExportFileAndOutputAsNotebook]: [Uri]; - [DSCommands.RunAllCells]: [string]; - [DSCommands.RunCell]: [string, number, number, number, number]; - [DSCommands.RunAllCellsAbove]: [string, number, number]; - [DSCommands.RunCellAndAllBelow]: [string, number, number]; - [DSCommands.RunAllCellsAbovePalette]: []; - [DSCommands.RunCellAndAllBelowPalette]: []; - [DSCommands.DebugCurrentCellPalette]: []; - [DSCommands.RunToLine]: [string, number, number]; - [DSCommands.RunFromLine]: [string, number, number]; - [DSCommands.ImportNotebook]: [undefined | Uri, undefined | CommandSource]; - [DSCommands.ImportNotebookFile]: [undefined | Uri, undefined | CommandSource]; - [DSCommands.OpenNotebook]: [undefined | Uri, undefined | CommandSource]; - [DSCommands.ExportFileAsNotebook]: [undefined | Uri, undefined | CommandSource]; - [DSCommands.RunFileInInteractiveWindows]: [string]; - [DSCommands.DebugFileInInteractiveWindows]: [string]; - [DSCommands.DebugCell]: [string, number, number, number, number]; - [DSCommands.DebugStepOver]: []; - [DSCommands.DebugStop]: []; - [DSCommands.DebugContinue]: []; - [DSCommands.RunCurrentCellAndAddBelow]: [string]; - [DSCommands.ScrollToCell]: [string, string]; - [DSCommands.ViewJupyterOutput]: []; - [DSCommands.SwitchJupyterKernel]: [INotebook | undefined]; - [DSCommands.SelectJupyterCommandLine]: [undefined | Uri]; - [DSCommands.SaveNotebookNonCustomEditor]: [Uri]; - [DSCommands.SaveAsNotebookNonCustomEditor]: [Uri, Uri]; - [DSCommands.OpenNotebookNonCustomEditor]: [Uri]; - [DSCommands.GatherQuality]: [string]; - [DSCommands.EnableLoadingWidgetsFrom3rdPartySource]: [undefined | never]; + [Commands.Tests_CopilotSetup]: [undefined | Uri]; + ['workbench.view.testing.focus']: []; + ['cursorMove']: [ + { + to: string; + by: string; + value: number; + }, + ]; + ['cursorEnd']: []; + ['python-envs.createTerminal']: [undefined | Uri]; } diff --git a/src/client/common/application/commands/createPythonFile.ts b/src/client/common/application/commands/createPythonFile.ts new file mode 100644 index 000000000000..10f388856896 --- /dev/null +++ b/src/client/common/application/commands/createPythonFile.ts @@ -0,0 +1,29 @@ +import { injectable, inject } from 'inversify'; +import { IExtensionSingleActivationService } from '../../../activation/types'; +import { Commands } from '../../constants'; +import { IApplicationShell, ICommandManager, IWorkspaceService } from '../types'; +import { sendTelemetryEvent } from '../../../telemetry'; +import { EventName } from '../../../telemetry/constants'; +import { IDisposableRegistry } from '../../types'; + +@injectable() +export class CreatePythonFileCommandHandler implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: true, virtualWorkspace: true }; + + constructor( + @inject(ICommandManager) private readonly commandManager: ICommandManager, + @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService, + @inject(IApplicationShell) private readonly appShell: IApplicationShell, + @inject(IDisposableRegistry) private readonly disposables: IDisposableRegistry, + ) {} + + public async activate(): Promise { + this.disposables.push(this.commandManager.registerCommand(Commands.CreateNewFile, this.createPythonFile, this)); + } + + public async createPythonFile(): Promise { + const newFile = await this.workspaceService.openTextDocument({ language: 'python' }); + this.appShell.showTextDocument(newFile); + sendTelemetryEvent(EventName.CREATE_NEW_FILE_COMMAND); + } +} diff --git a/src/client/common/application/commands/reloadCommand.ts b/src/client/common/application/commands/reloadCommand.ts index 36fded88b797..ebad15dbb70d 100644 --- a/src/client/common/application/commands/reloadCommand.ts +++ b/src/client/common/application/commands/reloadCommand.ts @@ -14,16 +14,17 @@ import { IApplicationShell, ICommandManager } from '../types'; */ @injectable() export class ReloadVSCodeCommandHandler implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: false, virtualWorkspace: true }; constructor( @inject(ICommandManager) private readonly commandManager: ICommandManager, - @inject(IApplicationShell) private readonly appShell: IApplicationShell + @inject(IApplicationShell) private readonly appShell: IApplicationShell, ) {} public async activate(): Promise { this.commandManager.registerCommand('python.reloadVSCode', this.onReloadVSCode, this); } private async onReloadVSCode(message: string) { - const item = await this.appShell.showInformationMessage(message, Common.reload()); - if (item === Common.reload()) { + const item = await this.appShell.showInformationMessage(message, Common.reload); + if (item === Common.reload) { this.commandManager.executeCommand('workbench.action.reloadWindow').then(noop, noop); } } diff --git a/src/client/common/application/commands/reportIssueCommand.ts b/src/client/common/application/commands/reportIssueCommand.ts new file mode 100644 index 000000000000..9ae099e44b4f --- /dev/null +++ b/src/client/common/application/commands/reportIssueCommand.ts @@ -0,0 +1,144 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +'use strict'; + +import * as os from 'os'; +import * as path from 'path'; +import { inject, injectable } from 'inversify'; +import { isEqual } from 'lodash'; +import * as fs from '../../platform/fs-paths'; +import { IExtensionSingleActivationService } from '../../../activation/types'; +import { IApplicationEnvironment, ICommandManager, IWorkspaceService } from '../types'; +import { EXTENSION_ROOT_DIR } from '../../../constants'; +import { IInterpreterService } from '../../../interpreter/contracts'; +import { Commands } from '../../constants'; +import { IConfigurationService, IPythonSettings } from '../../types'; +import { sendTelemetryEvent } from '../../../telemetry'; +import { EventName } from '../../../telemetry/constants'; +import { EnvironmentType } from '../../../pythonEnvironments/info'; +import { PythonSettings } from '../../configSettings'; +import { SystemVariables } from '../../variables/systemVariables'; +import { getExtensions } from '../../vscodeApis/extensionsApi'; + +/** + * Allows the user to report an issue related to the Python extension using our template. + */ +@injectable() +export class ReportIssueCommandHandler implements IExtensionSingleActivationService { + public readonly supportedWorkspaceTypes = { untrustedWorkspace: false, virtualWorkspace: true }; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private readonly packageJSONSettings: any; + + constructor( + @inject(ICommandManager) private readonly commandManager: ICommandManager, + @inject(IWorkspaceService) private readonly workspaceService: IWorkspaceService, + @inject(IInterpreterService) private readonly interpreterService: IInterpreterService, + @inject(IConfigurationService) protected readonly configurationService: IConfigurationService, + @inject(IApplicationEnvironment) appEnvironment: IApplicationEnvironment, + ) { + this.packageJSONSettings = appEnvironment.packageJson?.contributes?.configuration?.properties; + } + + public async activate(): Promise { + this.commandManager.registerCommand(Commands.ReportIssue, this.openReportIssue, this); + } + + private argSettingsPath = path.join(EXTENSION_ROOT_DIR, 'resources', 'report_issue_user_settings.json'); + + private templatePath = path.join(EXTENSION_ROOT_DIR, 'resources', 'report_issue_template.md'); + + private userDataTemplatePath = path.join(EXTENSION_ROOT_DIR, 'resources', 'report_issue_user_data_template.md'); + + public async openReportIssue(): Promise { + const settings: IPythonSettings = this.configurationService.getSettings(); + const argSettings = JSON.parse(await fs.readFile(this.argSettingsPath, 'utf8')); + let userSettings = ''; + const keys: [keyof IPythonSettings] = Object.keys(settings) as [keyof IPythonSettings]; + keys.forEach((property) => { + const argSetting = argSettings[property]; + if (argSetting) { + if (typeof argSetting === 'object') { + let propertyHeaderAdded = false; + const argSettingsDict = (settings[property] as unknown) as Record; + if (typeof argSettingsDict === 'object') { + Object.keys(argSetting).forEach((item) => { + const prop = argSetting[item]; + if (prop) { + const defaultValue = this.getDefaultValue(`${property}.${item}`); + if (defaultValue === undefined || !isEqual(defaultValue, argSettingsDict[item])) { + if (!propertyHeaderAdded) { + userSettings = userSettings.concat(os.EOL, property, os.EOL); + propertyHeaderAdded = true; + } + const value = + prop === true ? JSON.stringify(argSettingsDict[item]) : '""'; + userSettings = userSettings.concat('• ', item, ': ', value, os.EOL); + } + } + }); + } + } else { + const defaultValue = this.getDefaultValue(property); + if (defaultValue === undefined || !isEqual(defaultValue, settings[property])) { + const value = argSetting === true ? JSON.stringify(settings[property]) : '""'; + userSettings = userSettings.concat(os.EOL, property, ': ', value, os.EOL); + } + } + } + }); + const template = await fs.readFile(this.templatePath, 'utf8'); + const userTemplate = await fs.readFile(this.userDataTemplatePath, 'utf8'); + const interpreter = await this.interpreterService.getActiveInterpreter(); + const pythonVersion = interpreter?.version?.raw ?? ''; + const languageServer = + this.workspaceService.getConfiguration('python').get('languageServer') || 'Not Found'; + const virtualEnvKind = interpreter?.envType || EnvironmentType.Unknown; + + const hasMultipleFolders = (this.workspaceService.workspaceFolders?.length ?? 0) > 1; + const hasMultipleFoldersText = + hasMultipleFolders && userSettings !== '' + ? `Multiroot scenario, following user settings may not apply:${os.EOL}` + : ''; + + const installedExtensions = getExtensions() + .filter((extension) => !extension.id.startsWith('vscode.')) + .sort((a, b) => { + if (a.packageJSON.name && b.packageJSON.name) { + return a.packageJSON.name.localeCompare(b.packageJSON.name); + } + return a.id.localeCompare(b.id); + }) + .map((extension) => { + let publisher: string = extension.packageJSON.publisher as string; + if (publisher) { + publisher = publisher.substring(0, 3); + } + return `|${extension.packageJSON.name}|${publisher}|${extension.packageJSON.version}|`; + }); + + await this.commandManager.executeCommand('workbench.action.openIssueReporter', { + extensionId: 'ms-python.python', + issueBody: template, + extensionData: userTemplate.format( + pythonVersion, + virtualEnvKind, + languageServer, + hasMultipleFoldersText, + userSettings, + installedExtensions.join('\n'), + ), + }); + sendTelemetryEvent(EventName.USE_REPORT_ISSUE_COMMAND, undefined, {}); + } + + private getDefaultValue(settingKey: string) { + if (!this.packageJSONSettings) { + return undefined; + } + const resource = PythonSettings.getSettingsUriAndTarget(undefined, this.workspaceService).uri; + const systemVariables = new SystemVariables(resource, undefined, this.workspaceService); + return systemVariables.resolveAny(this.packageJSONSettings[`python.${settingKey}`]?.default); + } +} diff --git a/src/client/common/application/contextKeyManager.ts b/src/client/common/application/contextKeyManager.ts new file mode 100644 index 000000000000..388fcf4a3841 --- /dev/null +++ b/src/client/common/application/contextKeyManager.ts @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { inject, injectable } from 'inversify'; +import { ExtensionContextKey } from './contextKeys'; +import { ICommandManager, IContextKeyManager } from './types'; + +@injectable() +export class ContextKeyManager implements IContextKeyManager { + private values: Map = new Map(); + + constructor(@inject(ICommandManager) private readonly commandManager: ICommandManager) {} + + public async setContext(key: ExtensionContextKey, value: boolean): Promise { + if (this.values.get(key) === value) { + return Promise.resolve(); + } + this.values.set(key, value); + return this.commandManager.executeCommand('setContext', key, value); + } +} diff --git a/src/client/common/application/contextKeys.ts b/src/client/common/application/contextKeys.ts new file mode 100644 index 000000000000..d6249f05eaec --- /dev/null +++ b/src/client/common/application/contextKeys.ts @@ -0,0 +1,9 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +export enum ExtensionContextKey { + showInstallPythonTile = 'showInstallPythonTile', + HasFailedTests = 'hasFailedTests', + RefreshingTests = 'refreshingTests', + IsJupyterInstalled = 'isJupyterInstalled', +} diff --git a/src/client/common/application/customEditorService.ts b/src/client/common/application/customEditorService.ts deleted file mode 100644 index 57c968335961..000000000000 --- a/src/client/common/application/customEditorService.ts +++ /dev/null @@ -1,36 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; -import { inject, injectable } from 'inversify'; -import * as vscode from 'vscode'; - -import { UseCustomEditorApi } from '../constants'; -import { noop } from '../utils/misc'; -import { CustomEditorProvider, ICommandManager, ICustomEditorService } from './types'; - -@injectable() -export class CustomEditorService implements ICustomEditorService { - constructor( - @inject(ICommandManager) private commandManager: ICommandManager, - @inject(UseCustomEditorApi) private readonly useCustomEditorApi: boolean - ) {} - - public registerCustomEditorProvider( - viewType: string, - provider: CustomEditorProvider, - options?: vscode.WebviewPanelOptions - ): vscode.Disposable { - if (this.useCustomEditorApi) { - // tslint:disable-next-line: no-any - return (vscode.window as any).registerCustomEditorProvider(viewType, provider, options); - } else { - return { dispose: noop }; - } - } - - public async openEditor(file: vscode.Uri): Promise { - if (this.useCustomEditorApi) { - await this.commandManager.executeCommand('vscode.open', file); - } - } -} diff --git a/src/client/common/application/debugService.ts b/src/client/common/application/debugService.ts index f553b6cd6f5c..7de039e946c2 100644 --- a/src/client/common/application/debugService.ts +++ b/src/client/common/application/debugService.ts @@ -13,9 +13,10 @@ import { DebugConsole, DebugSession, DebugSessionCustomEvent, + DebugSessionOptions, Disposable, Event, - WorkspaceFolder + WorkspaceFolder, } from 'vscode'; import { IDebugService } from './types'; @@ -28,7 +29,7 @@ export class DebugService implements IDebugService { public get activeDebugSession(): DebugSession | undefined { return debug.activeDebugSession; } - public get breakpoints(): Breakpoint[] { + public get breakpoints(): readonly Breakpoint[] { return debug.breakpoints; } public get onDidChangeActiveDebugSession(): Event { @@ -46,18 +47,18 @@ export class DebugService implements IDebugService { public get onDidChangeBreakpoints(): Event { return debug.onDidChangeBreakpoints; } - // tslint:disable-next-line:no-any + public registerDebugConfigurationProvider(debugType: string, provider: any): Disposable { return debug.registerDebugConfigurationProvider(debugType, provider); } - // tslint:disable-next-line:no-any + public registerDebugAdapterTrackerFactory(debugType: string, provider: any): Disposable { return debug.registerDebugAdapterTrackerFactory(debugType, provider); } public startDebugging( folder: WorkspaceFolder | undefined, nameOrConfiguration: string | DebugConfiguration, - parentSession?: DebugSession + parentSession?: DebugSession | DebugSessionOptions, ): Thenable { return debug.startDebugging(folder, nameOrConfiguration, parentSession); } @@ -69,7 +70,7 @@ export class DebugService implements IDebugService { } public registerDebugAdapterDescriptorFactory( debugType: string, - factory: DebugAdapterDescriptorFactory + factory: DebugAdapterDescriptorFactory, ): Disposable { return debug.registerDebugAdapterDescriptorFactory(debugType, factory); } diff --git a/src/client/common/application/debugSessionTelemetry.ts b/src/client/common/application/debugSessionTelemetry.ts deleted file mode 100644 index 47aac873a835..000000000000 --- a/src/client/common/application/debugSessionTelemetry.ts +++ /dev/null @@ -1,78 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; -import { inject, injectable } from 'inversify'; -import { DebugAdapterTracker, DebugAdapterTrackerFactory, DebugSession, ProviderResult } from 'vscode'; -import { DebugProtocol } from 'vscode-debugprotocol'; - -import { IExtensionSingleActivationService } from '../../activation/types'; -import { AttachRequestArguments, ConsoleType, LaunchRequestArguments, TriggerType } from '../../debugger/types'; -import { sendTelemetryEvent } from '../../telemetry'; -import { EventName } from '../../telemetry/constants'; -import { IDisposableRegistry } from '../types'; -import { StopWatch } from '../utils/stopWatch'; -import { IDebugService } from './types'; - -class TelemetryTracker implements DebugAdapterTracker { - private timer = new StopWatch(); - private readonly trigger: TriggerType = 'launch'; - private readonly console: ConsoleType | undefined; - - constructor(session: DebugSession) { - this.trigger = session.configuration.type as TriggerType; - const debugConfiguration = session.configuration as Partial; - this.console = debugConfiguration.console; - } - - public onWillStartSession() { - this.sendTelemetry(EventName.DEBUG_SESSION_START); - } - - // tslint:disable-next-line:no-any - public onDidSendMessage(message: DebugProtocol.ProtocolMessage) { - if (message.type === 'response') { - const response = message as DebugProtocol.Response; - if (response.command === 'configurationDone') { - // "configurationDone" response is sent immediately after user code starts running. - this.sendTelemetry(EventName.DEBUG_SESSION_USER_CODE_RUNNING); - } - } - } - - public onWillStopSession() { - this.sendTelemetry(EventName.DEBUG_SESSION_STOP); - } - - public onError?(_error: Error) { - this.sendTelemetry(EventName.DEBUG_SESSION_ERROR); - } - - private sendTelemetry(eventName: EventName) { - if (eventName === EventName.DEBUG_SESSION_START) { - this.timer.reset(); - } - const telemetryProps = { - trigger: this.trigger, - console: this.console - }; - sendTelemetryEvent(eventName, this.timer.elapsedTime, telemetryProps); - } -} - -@injectable() -export class DebugSessionTelemetry implements DebugAdapterTrackerFactory, IExtensionSingleActivationService { - constructor( - @inject(IDisposableRegistry) disposableRegistry: IDisposableRegistry, - @inject(IDebugService) debugService: IDebugService - ) { - disposableRegistry.push(debugService.registerDebugAdapterTrackerFactory('python', this)); - } - - public async activate(): Promise { - // We actually register in the constructor. Not necessary to do it here - } - - public createDebugAdapterTracker(session: DebugSession): ProviderResult { - return new TelemetryTracker(session); - } -} diff --git a/src/client/common/application/documentManager.ts b/src/client/common/application/documentManager.ts index d3fe7dd2140e..617d335e402b 100644 --- a/src/client/common/application/documentManager.ts +++ b/src/client/common/application/documentManager.ts @@ -16,13 +16,11 @@ import { ViewColumn, window, workspace, - WorkspaceEdit + WorkspaceEdit, } from 'vscode'; import { IDocumentManager } from './types'; -// tslint:disable:no-any unified-signatures - @injectable() export class DocumentManager implements IDocumentManager { public get textDocuments(): readonly TextDocument[] { @@ -31,7 +29,7 @@ export class DocumentManager implements IDocumentManager { public get activeTextEditor(): TextEditor | undefined { return window.activeTextEditor; } - public get visibleTextEditors(): TextEditor[] { + public get visibleTextEditors(): readonly TextEditor[] { return window.visibleTextEditors; } public get onDidChangeActiveTextEditor(): Event { @@ -40,7 +38,7 @@ export class DocumentManager implements IDocumentManager { public get onDidChangeTextDocument(): Event { return workspace.onDidChangeTextDocument; } - public get onDidChangeVisibleTextEditors(): Event { + public get onDidChangeVisibleTextEditors(): Event { return window.onDidChangeVisibleTextEditors; } public get onDidChangeTextEditorSelection(): Event { diff --git a/src/client/common/application/extensions.ts b/src/client/common/application/extensions.ts index 828f2ddcf804..e4b8f5bce73d 100644 --- a/src/client/common/application/extensions.ts +++ b/src/client/common/application/extensions.ts @@ -1,15 +1,28 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. +/* eslint-disable class-methods-use-this */ +// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. 'use strict'; -import { injectable } from 'inversify'; +import { inject, injectable } from 'inversify'; import { Event, Extension, extensions } from 'vscode'; +import * as stacktrace from 'stack-trace'; +import * as path from 'path'; import { IExtensions } from '../types'; +import { IFileSystem } from '../platform/types'; +import { EXTENSION_ROOT_DIR } from '../constants'; +/** + * Provides functions for tracking the list of extensions that VSCode has installed. + */ @injectable() export class Extensions implements IExtensions { - // tslint:disable-next-line:no-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private _cachedExtensions?: readonly Extension[]; + + constructor(@inject(IFileSystem) private readonly fs: IFileSystem) {} + + // eslint-disable-next-line @typescript-eslint/no-explicit-any public get all(): readonly Extension[] { return extensions.all; } @@ -18,8 +31,70 @@ export class Extensions implements IExtensions { return extensions.onDidChange; } - // tslint:disable-next-line:no-any - public getExtension(extensionId: any) { + public getExtension(extensionId: string): Extension | undefined { return extensions.getExtension(extensionId); } + + private get cachedExtensions() { + if (!this._cachedExtensions) { + this._cachedExtensions = extensions.all; + extensions.onDidChange(() => { + this._cachedExtensions = extensions.all; + }); + } + return this._cachedExtensions; + } + + /** + * Code borrowed from: + * https://github.com/microsoft/vscode-jupyter/blob/67fe33d072f11d6443cf232a06bed0ac5e24682c/src/platform/common/application/extensions.node.ts + */ + public async determineExtensionFromCallStack(): Promise<{ extensionId: string; displayName: string }> { + const { stack } = new Error(); + if (stack) { + const pythonExtRoot = path.join(EXTENSION_ROOT_DIR.toLowerCase(), path.sep); + const frames = stack + .split('\n') + .map((f) => { + const result = /\((.*)\)/.exec(f); + if (result) { + return result[1]; + } + return undefined; + }) + .filter((item) => item && !item.toLowerCase().startsWith(pythonExtRoot)) + .filter((item) => + // Use cached list of extensions as we need this to be fast. + this.cachedExtensions.some( + (ext) => item!.includes(ext.extensionUri.path) || item!.includes(ext.extensionUri.fsPath), + ), + ) as string[]; + stacktrace.parse(new Error('Ex')).forEach((item) => { + const fileName = item.getFileName(); + if (fileName && !fileName.toLowerCase().startsWith(pythonExtRoot)) { + frames.push(fileName); + } + }); + for (const frame of frames) { + // This file is from a different extension. Try to find its `package.json`. + let dirName = path.dirname(frame); + let last = frame; + while (dirName && dirName.length < last.length) { + const possiblePackageJson = path.join(dirName, 'package.json'); + if (await this.fs.pathExists(possiblePackageJson)) { + const text = await this.fs.readFile(possiblePackageJson); + try { + const json = JSON.parse(text); + return { extensionId: `${json.publisher}.${json.name}`, displayName: json.displayName }; + } catch { + // If parse fails, then not an extension. + } + } + last = dirName; + dirName = path.dirname(dirName); + } + } + } + return { extensionId: 'unknown', displayName: 'unknown' }; + } } diff --git a/src/client/common/application/progressService.ts b/src/client/common/application/progressService.ts new file mode 100644 index 000000000000..fb19cad1136c --- /dev/null +++ b/src/client/common/application/progressService.ts @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +import { ProgressOptions } from 'vscode'; +import { Deferred, createDeferred } from '../utils/async'; +import { IApplicationShell } from './types'; + +export class ProgressService { + private deferred: Deferred | undefined; + + constructor(private readonly shell: IApplicationShell) {} + + public showProgress(options: ProgressOptions): void { + if (!this.deferred) { + this.createProgress(options); + } + } + + public hideProgress(): void { + if (this.deferred) { + this.deferred.resolve(); + this.deferred = undefined; + } + } + + private createProgress(options: ProgressOptions) { + this.shell.withProgress(options, () => { + this.deferred = createDeferred(); + return this.deferred.promise; + }); + } +} diff --git a/src/client/common/application/terminalManager.ts b/src/client/common/application/terminalManager.ts index 8fe6c067d0e6..dc2603e84a56 100644 --- a/src/client/common/application/terminalManager.ts +++ b/src/client/common/application/terminalManager.ts @@ -2,18 +2,58 @@ // Licensed under the MIT License. import { injectable } from 'inversify'; -import { Event, Terminal, TerminalOptions, window } from 'vscode'; +import { + Disposable, + Event, + EventEmitter, + Terminal, + TerminalOptions, + TerminalShellExecutionEndEvent, + TerminalShellIntegrationChangeEvent, + window, +} from 'vscode'; +import { traceLog } from '../../logging'; import { ITerminalManager } from './types'; @injectable() export class TerminalManager implements ITerminalManager { + private readonly didOpenTerminal = new EventEmitter(); + constructor() { + window.onDidOpenTerminal((terminal) => { + this.didOpenTerminal.fire(monkeyPatchTerminal(terminal)); + }); + } public get onDidCloseTerminal(): Event { return window.onDidCloseTerminal; } public get onDidOpenTerminal(): Event { - return window.onDidOpenTerminal; + return this.didOpenTerminal.event; } public createTerminal(options: TerminalOptions): Terminal { - return window.createTerminal(options); + return monkeyPatchTerminal(window.createTerminal(options)); + } + public onDidChangeTerminalShellIntegration(handler: (e: TerminalShellIntegrationChangeEvent) => void): Disposable { + return window.onDidChangeTerminalShellIntegration(handler); + } + public onDidEndTerminalShellExecution(handler: (e: TerminalShellExecutionEndEvent) => void): Disposable { + return window.onDidEndTerminalShellExecution(handler); + } + public onDidChangeTerminalState(handler: (e: Terminal) => void): Disposable { + return window.onDidChangeTerminalState(handler); + } +} + +/** + * Monkeypatch the terminal to log commands sent. + */ +function monkeyPatchTerminal(terminal: Terminal) { + if (!(terminal as any).isPatched) { + const oldSendText = terminal.sendText.bind(terminal); + terminal.sendText = (text: string, addNewLine: boolean = true) => { + traceLog(`Send text to terminal: ${text}`); + return oldSendText(text, addNewLine); + }; + (terminal as any).isPatched = true; } + return terminal; } diff --git a/src/client/common/application/types.ts b/src/client/common/application/types.ts index 2069d3c616f0..34a95fb604f0 100644 --- a/src/client/common/application/types.ts +++ b/src/client/common/application/types.ts @@ -1,6 +1,8 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. + 'use strict'; + import { Breakpoint, BreakpointsChangeEvent, @@ -14,6 +16,7 @@ import { DebugConsole, DebugSession, DebugSessionCustomEvent, + DebugSessionOptions, DecorationRenderOptions, Disposable, DocumentSelector, @@ -22,10 +25,11 @@ import { GlobPattern, InputBox, InputBoxOptions, + LanguageStatusItem, + LogOutputChannel, MessageItem, MessageOptions, OpenDialogOptions, - OutputChannel, Progress, ProgressOptions, QuickPick, @@ -36,6 +40,8 @@ import { StatusBarItem, Terminal, TerminalOptions, + TerminalShellExecutionEndEvent, + TerminalShellIntegrationChangeEvent, TextDocument, TextDocumentChangeEvent, TextDocumentShowOptions, @@ -47,32 +53,82 @@ import { TextEditorViewColumnChangeEvent, TreeView, TreeViewOptions, + UIKind, Uri, ViewColumn, - WebviewPanel, - WebviewPanelOptions, WindowState, WorkspaceConfiguration, WorkspaceEdit, WorkspaceFolder, WorkspaceFolderPickOptions, - WorkspaceFoldersChangeEvent + WorkspaceFoldersChangeEvent, } from 'vscode'; -import * as vsls from 'vsls/vscode'; -import { IAsyncDisposable, Resource } from '../types'; +import { Channel } from '../constants'; +import { Resource } from '../types'; import { ICommandNameArgumentTypeMapping } from './commands'; +import { ExtensionContextKey } from './contextKeys'; -// tslint:disable:no-any unified-signatures +export interface TerminalDataWriteEvent { + /** + * The {@link Terminal} for which the data was written. + */ + readonly terminal: Terminal; + /** + * The data being written. + */ + readonly data: string; +} + +export interface TerminalExecutedCommand { + /** + * The {@link Terminal} the command was executed in. + */ + terminal: Terminal; + /** + * The full command line that was executed, including both the command and the arguments. + */ + commandLine: string | undefined; + /** + * The current working directory that was reported by the shell. This will be a {@link Uri} + * if the string reported by the shell can reliably be mapped to the connected machine. + */ + cwd: Uri | string | undefined; + /** + * The exit code reported by the shell. + */ + exitCode: number | undefined; + /** + * The output of the command when it has finished executing. This is the plain text shown in + * the terminal buffer and does not include raw escape sequences. Depending on the shell + * setup, this may include the command line as part of the output. + */ + output: string | undefined; +} export const IApplicationShell = Symbol('IApplicationShell'); export interface IApplicationShell { + /** + * An event that is emitted when a terminal with shell integration activated has completed + * executing a command. + * + * Note that this event will not fire if the executed command exits the shell, listen to + * {@link onDidCloseTerminal} to handle that case. + */ + readonly onDidExecuteTerminalCommand: Event | undefined; /** * An [event](#Event) which fires when the focus state of the current window * changes. The value of the event represents whether the window is focused. */ readonly onDidChangeWindowState: Event; + /** + * An event which fires when the terminal's child pseudo-device is written to (the shell). + * In other words, this provides access to the raw data stream from the process running + * within the terminal, including VT sequences. + */ + readonly onDidWriteTerminalData: Event; + showInformationMessage(message: string, ...items: string[]): Thenable; /** @@ -224,7 +280,7 @@ export interface IApplicationShell { showQuickPick( items: string[] | Thenable, options?: QuickPickOptions, - token?: CancellationToken + token?: CancellationToken, ): Thenable; /** @@ -238,7 +294,7 @@ export interface IApplicationShell { showQuickPick( items: T[] | Thenable, options?: QuickPickOptions, - token?: CancellationToken + token?: CancellationToken, ): Thenable; /** @@ -272,6 +328,19 @@ export interface IApplicationShell { */ showInputBox(options?: InputBoxOptions, token?: CancellationToken): Thenable; + /** + * Show the given document in a text editor. A {@link ViewColumn column} can be provided + * to control where the editor is being shown. Might change the {@link window.activeTextEditor active editor}. + * + * @param document A text document to be shown. + * @param column A view column in which the {@link TextEditor editor} should be shown. The default is the {@link ViewColumn.Active active}, other values + * are adjusted to be `Min(column, columnCount + 1)`, the {@link ViewColumn.Active active}-column is not adjusted. Use {@linkcode ViewColumn.Beside} + * to open the editor to the side of the currently active one. + * @param preserveFocus When `true` the editor will not take focus. + * @return A promise that resolves to an {@link TextEditor editor}. + */ + showTextDocument(document: TextDocument, column?: ViewColumn, preserveFocus?: boolean): Thenable; + /** * Creates a [QuickPick](#QuickPick) to let the user pick an item from a list * of items of type T. @@ -319,6 +388,7 @@ export interface IApplicationShell { * @param hideWhenDone Thenable on which completion (resolve or reject) the message will be disposed. * @return A disposable which hides the status bar message. */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any setStatusBarMessage(text: string, hideWhenDone: Thenable): Disposable; /** @@ -340,7 +410,7 @@ export interface IApplicationShell { * @param priority The priority of the item. Higher values mean the item should be shown more to the left. * @return A new status bar item. */ - createStatusBarItem(alignment?: StatusBarAlignment, priority?: number): StatusBarItem; + createStatusBarItem(alignment?: StatusBarAlignment, priority?: number, id?: string): StatusBarItem; /** * Shows a selection list of [workspace folders](#workspace.workspaceFolders) to pick from. * Returns `undefined` if no folder is open. @@ -371,7 +441,7 @@ export interface IApplicationShell { */ withProgress( options: ProgressOptions, - task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable + task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable, ): Thenable; /** @@ -398,7 +468,7 @@ export interface IApplicationShell { */ withProgressCustomIcon( icon: string, - task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable + task: (progress: Progress<{ message?: string; increment?: number }>, token: CancellationToken) => Thenable, ): Thenable; /** @@ -414,7 +484,8 @@ export interface IApplicationShell { * * @param name Human-readable string which will be used to represent the channel in the UI. */ - createOutputChannel(name: string): OutputChannel; + createOutputChannel(name: string): LogOutputChannel; + createLanguageStatusItem(id: string, selector: DocumentSelector): LanguageStatusItem; } export const ICommandManager = Symbol('ICommandManager'); @@ -434,8 +505,10 @@ export interface ICommandManager { */ registerCommand( command: E, + // eslint-disable-next-line @typescript-eslint/no-explicit-any callback: (...args: U) => any, - thisArg?: any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + thisArg?: any, ): Disposable; /** @@ -454,8 +527,10 @@ export interface ICommandManager { */ registerTextEditorCommand( command: string, + // eslint-disable-next-line @typescript-eslint/no-explicit-any callback: (textEditor: TextEditor, edit: TextEditorEdit, ...args: any[]) => void, - thisArg?: any + // eslint-disable-next-line @typescript-eslint/no-explicit-any + thisArg?: any, ): Disposable; /** @@ -487,6 +562,16 @@ export interface ICommandManager { getCommands(filterInternal?: boolean): Thenable; } +export const IContextKeyManager = Symbol('IContextKeyManager'); +export interface IContextKeyManager { + setContext(key: ExtensionContextKey, value: boolean): Promise; +} + +export const IJupyterExtensionDependencyManager = Symbol('IJupyterExtensionDependencyManager'); +export interface IJupyterExtensionDependencyManager { + readonly isJupyterExtensionInstalled: boolean; +} + export const IDocumentManager = Symbol('IDocumentManager'); export interface IDocumentManager { @@ -506,7 +591,7 @@ export interface IDocumentManager { /** * The currently visible editors or an empty array. */ - readonly visibleTextEditors: TextEditor[]; + readonly visibleTextEditors: readonly TextEditor[]; /** * An [event](#Event) which fires when the [active editor](#window.activeTextEditor) @@ -526,7 +611,7 @@ export interface IDocumentManager { * An [event](#Event) which fires when the array of [visible editors](#window.visibleTextEditors) * has changed. */ - readonly onDidChangeVisibleTextEditors: Event; + readonly onDidChangeVisibleTextEditors: Event; /** * An [event](#Event) which fires when the selection in an editor has changed. @@ -659,6 +744,16 @@ export interface IWorkspaceService { */ readonly rootPath: string | undefined; + /** + * When true, the user has explicitly trusted the contents of the workspace. + */ + readonly isTrusted: boolean; + + /** + * Event that fires when the current workspace has been trusted. + */ + readonly onDidGrantWorkspaceTrust: Event; + /** * List of workspace folders or `undefined` when no folder is open. * *Note* that the first entry corresponds to the value of `rootPath`. @@ -708,12 +803,9 @@ export interface IWorkspaceService { */ readonly onDidChangeConfiguration: Event; /** - * Whether a workspace folder exists - * @type {boolean} - * @memberof IWorkspaceService + * Returns if we're running in a virtual workspace. */ - readonly hasWorkspaceFolders: boolean; - + readonly isVirtualWorkspace: boolean; /** * Returns the [workspace folder](#WorkspaceFolder) that contains a given uri. * * returns `undefined` when the given uri doesn't match any workspace folder @@ -726,9 +818,6 @@ export interface IWorkspaceService { /** * Generate a key that's unique to the workspace folder (could be fsPath). - * @param {(Uri | undefined)} resource - * @returns {string} - * @memberof IWorkspaceService */ getWorkspaceFolderIdentifier(resource: Uri | undefined, defaultValue?: string): string; /** @@ -764,7 +853,7 @@ export interface IWorkspaceService { globPattern: GlobPattern, ignoreCreateEvents?: boolean, ignoreChangeEvents?: boolean, - ignoreDeleteEvents?: boolean + ignoreDeleteEvents?: boolean, ): FileSystemWatcher; /** @@ -775,7 +864,8 @@ export interface IWorkspaceService { * will be matched against the file paths of resulting matches relative to their workspace. Use a [relative pattern](#RelativePattern) * to restrict the search results to a [workspace folder](#WorkspaceFolder). * @param exclude A [glob pattern](#GlobPattern) that defines files and folders to exclude. The glob pattern - * will be matched against the file paths of resulting matches relative to their workspace. + * will be matched against the file paths of resulting matches relative to their workspace. If `undefined` is passed, + * the glob patterns excluded in the `search.exclude` setting will be applied. * @param maxResults An upper-bound for the result. * @param token A token that can be used to signal cancellation to the underlying search engine. * @return A thenable that resolves to an array of resource identifiers. Will return no results if no @@ -785,7 +875,7 @@ export interface IWorkspaceService { include: GlobPattern, exclude?: GlobPattern, maxResults?: number, - token?: CancellationToken + token?: CancellationToken, ): Thenable; /** @@ -799,9 +889,30 @@ export interface IWorkspaceService { * * @param section A dot-separated identifier. * @param resource A resource for which the configuration is asked for + * @param languageSpecific Should the [python] language-specific settings be obtained? * @return The full configuration or a subset. */ - getConfiguration(section?: string, resource?: Uri): WorkspaceConfiguration; + getConfiguration(section?: string, resource?: Uri, languageSpecific?: boolean): WorkspaceConfiguration; + + /** + * Opens an untitled text document. The editor will prompt the user for a file + * path when the document is to be saved. The `options` parameter allows to + * specify the *language* and/or the *content* of the document. + * + * @param options Options to control how the document will be created. + * @return A promise that resolves to a {@link TextDocument document}. + */ + openTextDocument(options?: { language?: string; content?: string }): Thenable; + /** + * Saves the editor identified by the given resource and returns the resulting resource or `undefined` + * if save was not successful. + * + * **Note** that an editor with the provided resource must be opened in order to be saved. + * + * @param uri the associated uri for the opened editor to save. + * @return A thenable that resolves when the save operation has finished. + */ + save(uri: Uri): Thenable; } export const ITerminalManager = Symbol('ITerminalManager'); @@ -824,6 +935,12 @@ export interface ITerminalManager { * @return A new Terminal. */ createTerminal(options: TerminalOptions): Terminal; + + onDidChangeTerminalShellIntegration(handler: (e: TerminalShellIntegrationChangeEvent) => void): Disposable; + + onDidEndTerminalShellExecution(handler: (e: TerminalShellExecutionEndEvent) => void): Disposable; + + onDidChangeTerminalState(handler: (e: Terminal) => void): Disposable; } export const IDebugService = Symbol('IDebugManager'); @@ -844,7 +961,7 @@ export interface IDebugService { /** * List of breakpoints. */ - readonly breakpoints: Breakpoint[]; + readonly breakpoints: readonly Breakpoint[]; /** * An [event](#Event) which fires when the [active debug session](#debug.activeDebugSession) @@ -916,7 +1033,7 @@ export interface IDebugService { startDebugging( folder: WorkspaceFolder | undefined, nameOrConfiguration: string | DebugConfiguration, - parentSession?: DebugSession + parentSession?: DebugSession | DebugSessionOptions, ): Thenable; /** @@ -982,6 +1099,7 @@ export interface IApplicationEnvironment { * @type {any} * @memberof IApplicationEnvironment */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any readonly packageJson: any; /** * Gets the full path to the user settings file. (may or may not exist). @@ -998,6 +1116,10 @@ export interface IApplicationEnvironment { * @memberof IApplicationShell */ readonly shell: string; + /** + * An {@link Event} which fires when the default shell changes. + */ + readonly onDidChangeShell: Event; /** * Gets the vscode channel (whether 'insiders' or 'stable'). */ @@ -1013,128 +1135,26 @@ export interface IApplicationEnvironment { * The version of the editor. */ readonly vscodeVersion: string; -} - -export const IWebPanelMessageListener = Symbol('IWebPanelMessageListener'); -export interface IWebPanelMessageListener extends IAsyncDisposable { - /** - * Listens to web panel messages - * @param message: the message being sent - * @param payload: extra data that came with the message - * @return A IWebPanel that can be used to show html pages. - */ - onMessage(message: string, payload: any): void; - /** - * Listens to web panel state changes - */ - onChangeViewState(panel: IWebPanel): void; -} - -export type WebPanelMessage = { - /** - * Message type - */ - type: string; - - /** - * Payload - */ - payload?: any; -}; - -// Wraps the VS Code webview panel -export const IWebPanel = Symbol('IWebPanel'); -export interface IWebPanel { - /** - * Convert a uri for the local file system to one that can be used inside webviews. - * - * Webviews cannot directly load resources from the workspace or local file system using `file:` uris. The - * `asWebviewUri` function takes a local `file:` uri and converts it into a uri that can be used inside of - * a webview to load the same resource: - * - * ```ts - * webview.html = `` - * ``` - */ - asWebviewUri(localResource: Uri): Uri; - setTitle(val: string): void; - /** - * Makes the webpanel show up. - * @return A Promise that can be waited on - */ - show(preserveFocus: boolean): Promise; - - /** - * Indicates if this web panel is visible or not. - */ - isVisible(): boolean; - - /** - * Sends a message to the hosted html page - */ - postMessage(message: WebPanelMessage): void; - - /** - * Attempts to close the panel if it's visible - */ - close(): void; /** - * Indicates if the webview has the focus or not. + * The custom uri scheme the editor registers to in the operating system. */ - isActive(): boolean; + readonly uriScheme: string; /** - * Updates the current working directory for serving up files. - * @param cwd + * The UI kind property indicates from which UI extensions + * are accessed from. For example, extensions could be accessed + * from a desktop application or a web browser. */ - updateCwd(cwd: string): void; -} - -export interface IWebPanelOptions { - viewColumn: ViewColumn; - listener: IWebPanelMessageListener; - title: string; - rootPath: string; - /** - * Additional paths apart from cwd and rootPath, that webview would allow loading resources/files from. - * E.g. required for webview to serve images from worksapces when nb is in a nested folder. - */ - additionalPaths?: string[]; - scripts: string[]; - startHttpServer: boolean; - cwd: string; - // tslint:disable-next-line: no-any - settings?: any; - // Web panel to use if supplied by VS code instead - webViewPanel?: WebviewPanel; -} - -// Wraps the VS Code api for creating a web panel -export const IWebPanelProvider = Symbol('IWebPanelProvider'); -export interface IWebPanelProvider { + readonly uiKind: UIKind; /** - * Creates a new webpanel + * The name of a remote. Defined by extensions, popular samples are `wsl` for the Windows + * Subsystem for Linux or `ssh-remote` for remotes using a secure shell. * - * @param {IWebPanelOptions} options - params for creating an IWebPanel - * @returns {IWebPanel} - * @memberof IWebPanelProvider + * *Note* that the value is `undefined` when there is no remote extension host but that the + * value is defined in all extension hosts (local and remote) in case a remote extension host + * exists. Use {@link Extension.extensionKind} to know if + * a specific extension runs remote or not. */ - create(options: IWebPanelOptions): Promise; -} - -// Wraps the vsls liveshare API -export const ILiveShareApi = Symbol('ILiveShareApi'); -export interface ILiveShareApi { - getApi(): Promise; -} - -// Wraps the liveshare api for testing -export const ILiveShareTestingApi = Symbol('ILiveShareTestingApi'); -export interface ILiveShareTestingApi extends ILiveShareApi { - isSessionStarted: boolean; - forceRole(role: vsls.Role): void; - startSession(): Promise; - stopSession(): Promise; - disableGuestChecker(): void; + readonly remoteName: string | undefined; } export const ILanguageService = Symbol('ILanguageService'); @@ -1160,8 +1180,6 @@ export interface ILanguageService { ): Disposable; } -export type Channel = 'stable' | 'insiders'; - /** * Wraps the `ActiveResourceService` API class. Created for injecting and mocking class methods in testing */ @@ -1170,266 +1188,6 @@ export interface IActiveResourceService { getActiveResource(): Resource; } -// Temporary hack to get the nyc compiler to find these types. vscode.proposed.d.ts doesn't work for some reason. -//#region Custom editors: https://github.com/microsoft/vscode/issues/77131 - -// tslint:disable: interface-name -/** - * Defines the editing capability of a custom webview editor. This allows the webview editor to hook into standard - * editor events such as `undo` or `save`. - * - * @param EditType Type of edits. - */ -export interface CustomEditorEditingDelegate { - /** - * Event triggered by extensions to signal to VS Code that an edit has occurred. - */ - readonly onDidEdit: Event>; - /** - * Save the resource. - * - * @param document Document to save. - * @param cancellation Token that signals the save is no longer required (for example, if another save was triggered). - * - * @return Thenable signaling that the save has completed. - */ - save(document: CustomDocument, cancellation: CancellationToken): Thenable; - - /** - * Save the existing resource at a new path. - * - * @param document Document to save. - * @param targetResource Location to save to. - * - * @return Thenable signaling that the save has completed. - */ - saveAs(document: CustomDocument, targetResource: Uri): Thenable; - - /** - * Apply a set of edits. - * - * Note that is not invoked when `onDidEdit` is called because `onDidEdit` implies also updating the view to reflect the edit. - * - * @param document Document to apply edits to. - * @param edit Array of edits. Sorted from oldest to most recent. - * - * @return Thenable signaling that the change has completed. - */ - applyEdits(document: CustomDocument, edits: readonly EditType[]): Thenable; - - /** - * Undo a set of edits. - * - * This is triggered when a user undoes an edit. - * - * @param document Document to undo edits from. - * @param edit Array of edits. Sorted from most recent to oldest. - * - * @return Thenable signaling that the change has completed. - */ - undoEdits(document: CustomDocument, edits: readonly EditType[]): Thenable; - - /** - * Revert the file to its last saved state. - * - * @param document Document to revert. - * @param edits Added or applied edits. - * - * @return Thenable signaling that the change has completed. - */ - revert(document: CustomDocument, edits: CustomDocumentRevert): Thenable; - - /** - * Back up the resource in its current state. - * - * Backups are used for hot exit and to prevent data loss. Your `backup` method should persist the resource in - * its current state, i.e. with the edits applied. Most commonly this means saving the resource to disk in - * the `ExtensionContext.storagePath`. When VS Code reloads and your custom editor is opened for a resource, - * your extension should first check to see if any backups exist for the resource. If there is a backup, your - * extension should load the file contents from there instead of from the resource in the workspace. - * - * `backup` is triggered whenever an edit it made. Calls to `backup` are debounced so that if multiple edits are - * made in quick succession, `backup` is only triggered after the last one. `backup` is not invoked when - * `auto save` is enabled (since auto save already persists resource ). - * - * @param document Document to revert. - * @param cancellation Token that signals the current backup since a new backup is coming in. It is up to your - * extension to decided how to respond to cancellation. If for example your extension is backing up a large file - * in an operation that takes time to complete, your extension may decide to finish the ongoing backup rather - * than cancelling it to ensure that VS Code has some valid backup. - */ - backup(document: CustomDocument, cancellation: CancellationToken): Thenable; -} - -/** - * Event triggered by extensions to signal to VS Code that an edit has occurred on a CustomDocument``. - */ -export interface CustomDocumentEditEvent { - /** - * Document the edit is for. - */ - readonly document: CustomDocument; - - /** - * Object that describes the edit. - * - * Edit objects are passed back to your extension in `undoEdits`, `applyEdits`, and `revert`. - */ - readonly edit: EditType; - - /** - * Display name describing the edit. - */ - readonly label?: string; -} - -/** - * Data about a revert for a `CustomDocument`. - */ -export interface CustomDocumentRevert { - /** - * List of edits that were undone to get the document back to its on disk state. - */ - readonly undoneEdits: readonly EditType[]; - - /** - * List of edits that were reapplied to get the document back to its on disk state. - */ - readonly appliedEdits: readonly EditType[]; -} - -/** - * Represents a custom document used by a `CustomEditorProvider`. - * - * Custom documents are only used within a given `CustomEditorProvider`. The lifecycle of a - * `CustomDocument` is managed by VS Code. When no more references remain to a given `CustomDocument`, - * then it is disposed of. - * - * @param UserDataType Type of custom object that extensions can store on the document. - */ -export interface CustomDocument { - /** - * The associated viewType for this document. - */ - readonly viewType: string; - - /** - * The associated uri for this document. - */ - readonly uri: Uri; - - /** - * Event fired when there are no more references to the `CustomDocument`. - */ - readonly onDidDispose: Event; - - /** - * Custom data that an extension can store on the document. - */ - userData?: UserDataType; -} - -/** - * Provider for webview editors that use a custom data model. - * - * Custom webview editors use [`CustomDocument`](#CustomDocument) as their data model. - * This gives extensions full control over actions such as edit, save, and backup. - * - * You should use custom text based editors when dealing with binary files or more complex scenarios. For simple text - * based documents, use [`WebviewTextEditorProvider`](#WebviewTextEditorProvider) instead. - */ -export interface CustomEditorProvider { - /** - * Defines the editing capability of a custom webview document. - * - * When not provided, the document is considered readonly. - */ - readonly editingDelegate?: CustomEditorEditingDelegate; - /** - * Resolve the model for a given resource. - * - * `resolveCustomDocument` is called when the first editor for a given resource is opened, and the resolve document - * is passed to `resolveCustomEditor`. The resolved `CustomDocument` is re-used for subsequent editor opens. - * If all editors for a given resource are closed, the `CustomDocument` is disposed of. Opening an editor at - * this point will trigger another call to `resolveCustomDocument`. - * - * @param document Document to resolve. - * - * @return The capabilities of the resolved document. - */ - resolveCustomDocument(document: CustomDocument): Thenable; - - /** - * Resolve a webview editor for a given resource. - * - * This is called when a user first opens a resource for a `CustomTextEditorProvider`, or if they reopen an - * existing editor using this `CustomTextEditorProvider`. - * - * To resolve a webview editor, the provider must fill in its initial html content and hook up all - * the event listeners it is interested it. The provider can also hold onto the `WebviewPanel` to use later, - * for example in a command. See [`WebviewPanel`](#WebviewPanel) for additional details - * - * @param document Document for the resource being resolved. - * @param webviewPanel Webview to resolve. - * - * @return Thenable indicating that the webview editor has been resolved. - */ - resolveCustomEditor(document: CustomDocument, webviewPanel: WebviewPanel): Thenable; -} - -/** - * Provider for text based webview editors. - * - * Text based webview editors use a [`TextDocument`](#TextDocument) as their data model. This considerably simplifies - * implementing a webview editor as it allows VS Code to handle many common operations such as - * undo and backup. The provider is responsible for synchronizing text changes between the webview and the `TextDocument`. - * - * You should use text based webview editors when dealing with text based file formats, such as `xml` or `json`. - * For binary files or more specialized use cases, see [CustomEditorProvider](#CustomEditorProvider). - */ -export interface CustomTextEditorProvider { - /** - * Resolve a webview editor for a given text resource. - * - * This is called when a user first opens a resource for a `CustomTextEditorProvider`, or if they reopen an - * existing editor using this `CustomTextEditorProvider`. - * - * To resolve a webview editor, the provider must fill in its initial html content and hook up all - * the event listeners it is interested it. The provider can also hold onto the `WebviewPanel` to use later, - * for example in a command. See [`WebviewPanel`](#WebviewPanel) for additional details. - * - * @param document Document for the resource to resolve. - * @param webviewPanel Webview to resolve. - * - * @return Thenable indicating that the webview editor has been resolved. - */ - resolveCustomTextEditor(document: TextDocument, webviewPanel: WebviewPanel): Thenable; -} - -//#endregion - -export const ICustomEditorService = Symbol('ICustomEditorService'); -export interface ICustomEditorService { - /** - * Register a new provider for webview editors of a given type. - * - * @param viewType Type of the webview editor provider. - * @param provider Resolves webview editors. - * @param options Content settings for a webview panels the provider is given. - * - * @return Disposable that unregisters the `WebviewCustomEditorProvider`. - */ - registerCustomEditorProvider( - viewType: string, - provider: CustomEditorProvider, - options?: WebviewPanelOptions - ): Disposable; - /** - * Opens a file with a custom editor - */ - openEditor(file: Uri): Promise; -} - export const IClipboard = Symbol('IClipboard'); export interface IClipboard { /** diff --git a/src/client/common/application/walkThroughs.ts b/src/client/common/application/walkThroughs.ts new file mode 100644 index 000000000000..89e57ee74e47 --- /dev/null +++ b/src/client/common/application/walkThroughs.ts @@ -0,0 +1,9 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +export enum PythonWelcome { + name = 'pythonWelcome', + windowsInstallId = 'python.installPythonWin8', + linuxInstallId = 'python.installPythonLinux', + macOSInstallId = 'python.installPythonMac', +} diff --git a/src/client/common/application/webPanels/webPanel.ts b/src/client/common/application/webPanels/webPanel.ts deleted file mode 100644 index 52c58ab60889..000000000000 --- a/src/client/common/application/webPanels/webPanel.ts +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. -'use strict'; -import '../../extensions'; - -import * as uuid from 'uuid/v4'; -import { Uri, Webview, WebviewOptions, WebviewPanel, window } from 'vscode'; -import { Identifiers } from '../../../datascience/constants'; -import { InteractiveWindowMessages } from '../../../datascience/interactive-common/interactiveWindowTypes'; -import { SharedMessages } from '../../../datascience/messages'; -import { IFileSystem } from '../../platform/types'; -import { IDisposableRegistry } from '../../types'; -import * as localize from '../../utils/localize'; -import { IWebPanel, IWebPanelOptions, WebPanelMessage } from '../types'; - -// Pick a static port to remap the remote port to one that VS code will route traffic to. -// According to this, it should be a static number: -// https://code.visualstudio.com/api/advanced-topics/remote-extensions -const RemappedPort = 9890; - -export class WebPanel implements IWebPanel { - private panel: WebviewPanel | undefined; - private loadPromise: Promise; - private id = uuid(); - - constructor( - private fs: IFileSystem, - private disposableRegistry: IDisposableRegistry, - private port: number | undefined, - private token: string | undefined, - private options: IWebPanelOptions, - additionalRootPaths: Uri[] = [] - ) { - const webViewOptions: WebviewOptions = { - enableScripts: true, - localResourceRoots: [Uri.file(this.options.rootPath), Uri.file(this.options.cwd), ...additionalRootPaths], - portMapping: port ? [{ webviewPort: RemappedPort, extensionHostPort: port }] : undefined - }; - if (options.webViewPanel) { - this.panel = options.webViewPanel; - this.panel.webview.options = webViewOptions; - } else { - this.panel = window.createWebviewPanel( - options.title.toLowerCase().replace(' ', ''), - options.title, - { viewColumn: options.viewColumn, preserveFocus: true }, - { - retainContextWhenHidden: true, - enableFindWidget: true, - ...webViewOptions - } - ); - } - this.loadPromise = this.load(); - } - - public async show(preserveFocus: boolean) { - await this.loadPromise; - if (this.panel) { - this.panel.reveal(this.panel.viewColumn, preserveFocus); - } - } - - public updateCwd(_cwd: string) { - if (this.options.startHttpServer && this.port) { - // See issue https://github.com/microsoft/vscode-python/issues/8933 for implementing this. - } - } - - public close() { - if (this.panel) { - this.panel.dispose(); - } - } - public asWebviewUri(localResource: Uri) { - if (!this.panel) { - throw new Error('WebView not initialized, too early to get a Uri'); - } - return this.panel?.webview.asWebviewUri(localResource); - } - - public isVisible(): boolean { - return this.panel ? this.panel.visible : false; - } - - public isActive(): boolean { - return this.panel ? this.panel.active : false; - } - - public postMessage(message: WebPanelMessage) { - if (this.panel && this.panel.webview) { - this.panel.webview.postMessage(message); - } - } - - public setTitle(newTitle: string) { - this.options.title = newTitle; - if (this.panel) { - this.panel.title = newTitle; - } - } - - // tslint:disable-next-line:no-any - private async load() { - if (this.panel) { - const localFilesExist = await Promise.all(this.options.scripts.map((s) => this.fs.fileExists(s))); - if (localFilesExist.every((exists) => exists === true)) { - // Call our special function that sticks this script inside of an html page - // and translates all of the paths to vscode-resource URIs - this.panel.webview.html = this.options.startHttpServer - ? this.generateServerReactHtml(this.panel.webview) - : await this.generateLocalReactHtml(this.panel.webview); - - // Reset when the current panel is closed - this.disposableRegistry.push( - this.panel.onDidDispose(() => { - this.panel = undefined; - this.options.listener.dispose().ignoreErrors(); - }) - ); - - this.disposableRegistry.push( - this.panel.webview.onDidReceiveMessage((message) => { - // Pass the message onto our listener - this.options.listener.onMessage(message.type, message.payload); - }) - ); - - this.disposableRegistry.push( - this.panel.onDidChangeViewState((_e) => { - // Pass the state change onto our listener - this.options.listener.onChangeViewState(this); - }) - ); - - // Set initial state - this.options.listener.onChangeViewState(this); - } else { - // Indicate that we can't load the file path - const badPanelString = localize.DataScience.badWebPanelFormatString(); - this.panel.webview.html = badPanelString.format(this.options.scripts.join(', ')); - } - } - } - - // tslint:disable-next-line:no-any - private async generateLocalReactHtml(webView: Webview) { - const uriBase = webView.asWebviewUri(Uri.file(this.options.cwd)).toString(); - const uris = this.options.scripts.map((script) => webView.asWebviewUri(Uri.file(script))); - const testFiles = await this.fs.getFiles(this.options.rootPath); - - // This method must be called so VSC is aware of files that can be pulled. - // Allow js and js.map files to be loaded by webpack in the webview. - testFiles - .filter((f) => f.toLowerCase().endsWith('.js') || f.toLowerCase().endsWith('.js.map')) - .forEach((f) => webView.asWebviewUri(Uri.file(f))); - - const rootPath = webView.asWebviewUri(Uri.file(this.options.rootPath)).toString(); - return ` - - - - - - - - VS Code Python React UI - - - - - -
- - ${uris.map((uri) => ``).join('\n')} - - `; - } - - // tslint:disable-next-line:no-any - private generateServerReactHtml(webView: Webview) { - const uriBase = webView.asWebviewUri(Uri.file(this.options.rootPath)); - const relativeScripts = this.options.scripts.map((s) => `.${s.substr(this.options.rootPath.length)}`); - const encoded = relativeScripts.map((s) => - encodeURIComponent(s.replace(/\\/g, '/').replace('index_bundle.js', 'index_chunked_bundle.js')) - ); - - return ` - - - - - - - - VS Code Python React UI - - - - -