From a9304201af3365b241ca7350fa05a84e5e559267 Mon Sep 17 00:00:00 2001 From: Philipp Horstenkamp Date: Fri, 23 Jun 2023 18:47:04 +0200 Subject: [PATCH] (chore): Initilised devops tools (#29) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Added a first action * Repaired a typo * Repaired a typo2 * Repaired a typo2 * Added flake8 action * Repaired a typo in the flake8 action. * Added a first bandit action * Added a first batch * Added a first batch * Added a first batch * Added a first batch * Added a first batch * Added the flake8-prebuild as a need to flake8 * Added the flake8-prebuild as a need to flake8 * Added the flake8-prebuild as a need to flake8 * Added the docker socket to the volume. * Added the flake8-prebuild as a need to flake8 * Removed latest part from container. * Removed latest part from container. * Removed latest part from container. * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 * Reworked flake8 poetry * Reworked flake8 poetry * Changed to 64bit * Some edits to the runner * Added python setup * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added python -m to python docker image. * Added ra run linter * Added ra run linter * Added ra run linter * Added ra run linter * Removed redundant version * Removed redundant version * Added isort * Added isort * Added isort * Added poetry install * Added poetry install * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Uses nodejs and python image * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Added flake8 as lint. * Removed selfhosted runner * Removed self hosted runner * Removed self hosted runner * Removed self hosted runner * Added black and flake8 tests * Removed self hosted runner * Removed self hosted runner * Removed unneded actions * Added a mypy error. * Removed poetry call before boetry setup * Removed poetry call before poetry setup * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added a test to understand the poetry action better * Added the snook poetry builder * Reworked the repo a bit * Removed unneeded poetry installation * Added the isort action * Added isort test * Added ruff * Added full ruff configuration * Added full ruff configuration2 * Added full ruff configuration2 * Removed duplicat configurations * Removed some redundant pre-commit hooks * Removed unneeded actions. * Removed unneeded actions. * Repaired ruff * Added tests. * Removed * Removed * Removed a missing file * Removed a missing file * Removed a missing file * Removed a missing file * Removed a missing file * Added reports as artifacts * Added reports as artifacts * Added reports as artifacts * Removed the unneded poetry test * Added a license checker. * Added a license checker. * Removed some unneeded configuration. * Removed the import reformatted. * Added doc generation. * Added doc generation. * Added license summary. * Add * Add lint * Switched pip-licenses to poetry. * Switched pip-licenses to poetry. * Switched pip-licenses to poetry. * Remove some more packages. * Remove some more packages. * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added a make file * Added version codes to the main package * Changed the format of the md files * Presentation first draft * Version up and added extensions * Version up and added extensions * Version up and added extensions * Removed the venv path from docbuild * Actions version up * Actions version up * Actions version up * Actions version up * Actions version up * Actions version up * Experiements with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * Experiments with sphinx * First draft of the sphinx documentation. * Added the protocol to the time series. * Added the protocol to the time series. * First draft ot a first build pipline * Added mermaid version support * Added documentations pull and branch request requirements. * Added documentations pull and branch request requirements. * Added documentations pull and branch request requirements. * Added documentations pull and branch request requirements. * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Tests should now be passing * Add safety * Add safety * Add safety * Added the action on pull_request_target * Added the action on pull_request_target * Added the action on pull_request_target * Added a pytest coverage report * Added a pytest coverage report * Added a pytest coverage report * Added a pytest coverage report * Added a pytest coverage report * Added a build step * Added a build step * Added a build step * Added a build step * Changed the lint action to work only on python changes. * Changed the lint action to work only on python changes. * Changed the lint action to work only on python changes. * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Added the ability to compile a html report * Coverage * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Finished test and build workflow * Repaired a bug. * Repaired a bug. * Repaired a bug. * Repaired a bug. * Repaired a bug. * Added a github branch.ref * Removed a poetry install * Docbuild now excludes templates * Added the seminarpräsentation to the documentation build * Added the seminarpräsentation to the documentation build * Added the seminarpräsentation to the documentation build * dded a few images * Changed the pre-commit image * Changed the pre-commit image * Presentation done * Never executing jupyter for sphinx * Never executing jupyter for sphinx * Never executing jupyter for sphinx * Never executing jupyter for sphinx * Never executing jupyter for sphinx --- .flake8 | 3 - .github/workflows/documentation.yaml | 61 + .github/workflows/lint-actions.yaml | 80 + .github/workflows/test-and-build-action.yaml | 131 + .gitignore | 4 + .pre-commit-config.yaml | 59 +- .../Sentiment Analysis/FinBert.ipynb | 708 +++- Jupyter/connection-counter.ipynb | 236 ++ README.md | 8 + documentations/Makefile | 20 + documentations/Pflichtenheft.md | 38 +- documentations/conf.py | 88 + documentations/index.rst | 53 + documentations/make.bat | 35 + documentations/seminararbeiten/.init | 0 .../seminararbeiten/DevOps/Action-Summary.PNG | Bin 0 -> 46525 bytes .../seminararbeiten/DevOps/Action.PNG | Bin 0 -> 65705 bytes .../seminararbeiten/DevOps/Coverage.PNG | Bin 0 -> 29921 bytes .../seminararbeiten/DevOps/Lint-error.PNG | Bin 0 -> 51697 bytes .../seminararbeiten/DevOps/Pre-commit.PNG | Bin 0 -> 111681 bytes .../seminararbeiten/DevOps/Pull_request.PNG | Bin 0 -> 41200 bytes .../DevOps/Seminarpräsentation.ipynb | 698 ++++ .../seminararbeiten/DevOps/bohems-law.png | Bin 0 -> 21235 bytes documentations/timeline.md | 120 +- poetry.lock | 3688 +++++++++++++++++ pyproject.toml | 110 +- requirements.txt | 21 + runner/..env.swp | Bin 1024 -> 0 bytes runner/.gitignore | 1 - runner/Dockerfile | 36 - runner/README.md | 24 - runner/docker-compose.yaml | 14 - runner/start.sh | 20 - src/aki_prj23_transparenzregister/__init__.py | 12 + tests/infrastructure_test.py | 8 + 35 files changed, 5940 insertions(+), 336 deletions(-) delete mode 100644 .flake8 create mode 100644 .github/workflows/documentation.yaml create mode 100644 .github/workflows/lint-actions.yaml create mode 100644 .github/workflows/test-and-build-action.yaml create mode 100644 Jupyter/connection-counter.ipynb create mode 100644 documentations/Makefile create mode 100644 documentations/conf.py create mode 100644 documentations/index.rst create mode 100644 documentations/make.bat delete mode 100644 documentations/seminararbeiten/.init create mode 100644 documentations/seminararbeiten/DevOps/Action-Summary.PNG create mode 100644 documentations/seminararbeiten/DevOps/Action.PNG create mode 100644 documentations/seminararbeiten/DevOps/Coverage.PNG create mode 100644 documentations/seminararbeiten/DevOps/Lint-error.PNG create mode 100644 documentations/seminararbeiten/DevOps/Pre-commit.PNG create mode 100644 documentations/seminararbeiten/DevOps/Pull_request.PNG create mode 100644 documentations/seminararbeiten/DevOps/Seminarpräsentation.ipynb create mode 100644 documentations/seminararbeiten/DevOps/bohems-law.png create mode 100644 poetry.lock create mode 100644 requirements.txt delete mode 100644 runner/..env.swp delete mode 100644 runner/.gitignore delete mode 100644 runner/Dockerfile delete mode 100644 runner/README.md delete mode 100644 runner/docker-compose.yaml delete mode 100644 runner/start.sh create mode 100644 src/aki_prj23_transparenzregister/__init__.py create mode 100644 tests/infrastructure_test.py diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 8dd399a..0000000 --- a/.flake8 +++ /dev/null @@ -1,3 +0,0 @@ -[flake8] -max-line-length = 88 -extend-ignore = E203 diff --git a/.github/workflows/documentation.yaml b/.github/workflows/documentation.yaml new file mode 100644 index 0000000..ad407c4 --- /dev/null +++ b/.github/workflows/documentation.yaml @@ -0,0 +1,61 @@ +name: Documentation-Action + +on: + push: + branches: + - main + pull_request: + branches: + - '*' + +jobs: + doc-build: + name: Build + runs-on: ubuntu-latest + steps: + - run: sudo apt install pandoc -y + - uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 1.4.2 + virtualenvs-create: false + - run: poetry install --only doc,root,develop + - name: Doc-Build + run: | + cd documentations + sphinx-apidoc -o . ../src/aki_prj23_transparenzregister -feP + make html + - name: Package artifact + uses: actions/upload-pages-artifact@v1 + with: + path: documentations/_build/html/ + + doc-deploy: + name: Deployment + runs-on: ubuntu-latest + needs: doc-build + permissions: + pages: write + id-token: write + concurrency: + group: pages + cancel-in-progress: false + if: github.ref == 'refs/heads/main' + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - run: echo "Deployment URL = ${{ steps.deployment.outputs.page_url }}" + - uses: actions/download-artifact@v3 + with: + name: github-pages + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 + with: + artifact_name: github-pages diff --git a/.github/workflows/lint-actions.yaml b/.github/workflows/lint-actions.yaml new file mode 100644 index 0000000..208f6c9 --- /dev/null +++ b/.github/workflows/lint-actions.yaml @@ -0,0 +1,80 @@ +name: Python-Lint + +on: + push: + paths: + - '*.py' + - poetry.lock + - pyproject.toml + pull_request: + +jobs: + run-linters: + name: Black & mypy + runs-on: ubuntu-latest + steps: + - name: Set up python + id: setup-python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + - name: Check out Git repository + uses: actions/checkout@v3 + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 1.4.2 + virtualenvs-create: false + virtualenvs-path: ~/local/share/virtualenvs + - run: poetry install --without develop,doc,test + - name: Run linters + uses: wearerequired/lint-action@v2 + with: + black: true + mypy: true + + ruff: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: chartboost/ruff-action@v1 + + python-requirements: + name: Check Python Requirements + runs-on: ubuntu-latest + steps: + - name: Set up python + id: setup-python + uses: actions/setup-python@v4 + with: + python-version: '3.11' + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 1.4.2 + virtualenvs-path: ~/local/share/virtualenvs + - name: Cache pipenv + id: cache-pipenv + uses: actions/cache@v3 + with: + path: ~/.local/share/virtualenvs + key: venv + - name: Check out Git repository + uses: actions/checkout@v3 + - name: Poetry export + run: poetry export -f requirements.txt --output requirements.txt + - name: Check license + run: | + poetry run pip install pip-licenses + poetry run pip-licenses --format=markdown --output-file=license-summary.md + - name: Archive license summary + uses: actions/upload-artifact@v3 + with: + name: license-summary + path: | + license-summary.md + requirements.txt + - name: Check requirements security with pip-audit + uses: pypa/gh-action-pip-audit@v1.0.0 + with: + inputs: requirements.txt diff --git a/.github/workflows/test-and-build-action.yaml b/.github/workflows/test-and-build-action.yaml new file mode 100644 index 0000000..be23804 --- /dev/null +++ b/.github/workflows/test-and-build-action.yaml @@ -0,0 +1,131 @@ +name: Test & Build + +on: + pull_request: + pull_request_target: + push: + paths: + - '*.py' + - poetry.lock + - pyproject.toml + +jobs: + test: + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Check out repository code + uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 1.4.2 + virtualenvs-path: ~/local/share/virtualenvs + - id: cache-pipenv + uses: actions/cache@v3 + with: + path: ~/.local/share/virtualenvs + key: venv + - run: poetry install --without develop,doc,lint + - name: Run test suite + run: | + poetry run pytest --junit-xml=unit-test-results.xml --cov-report "xml:coverage.xml" --cov=src tests/ + - name: Archive code coverage results + uses: actions/upload-artifact@v3 + with: + name: code-coverage-report + path: | + coverage.xml + .coverage + - name: Archive code coverage results + uses: actions/upload-artifact@v3 + with: + name: test-report + path: | + unit-test-results.xml + if-no-files-found: error + + coverage_pull_request: + if: ${{ github.event_name == 'pull_request' }} + runs-on: ubuntu-latest + needs: test + steps: + - uses: actions/download-artifact@v3 + with: + name: code-coverage-report + - name: Get Cover + uses: orgoro/coverage@v3.1 + with: + coverageFile: coverage.xml + token: ${{ secrets.GITHUB_TOKEN }} + thresholdAll: 0.8 + thresholdNew: 0.8 + thresholdModified: 0.8 + + coverage_report: + runs-on: ubuntu-latest + needs: test + steps: + - name: Check out repository code + uses: actions/checkout@v3 + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - id: cache-pipenv + uses: actions/cache@v3 + with: + path: ~/.local/share/virtualenvs + key: venv + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 1.4.2 + virtualenvs-path: ~/local/share/virtualenvs + - run: | + poetry install --only test + - uses: actions/download-artifact@v3 + with: + name: code-coverage-report + - name: Make Coverage Report + run: | + poetry run coverage html + - name: Archive builds + uses: actions/upload-artifact@v3 + with: + name: Coverage Report HTML + path: htmlcov/ + + build: + runs-on: ubuntu-latest + needs: test + steps: + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: 3.11 + - name: Install and configure Poetry + uses: snok/install-poetry@v1 + with: + version: 1.4.2 + virtualenvs-path: ~/local/share/virtualenvs + - id: cache-pipenv + uses: actions/cache@v3 + with: + path: ~/.local/share/virtualenvs + key: venv + - name: Check out repository code + uses: actions/checkout@v3 + - run: | + poetry install --without develop,doc,lint,test + poetry build + - name: Archive builds + uses: actions/upload-artifact@v3 + with: + name: builds + path: dist/ diff --git a/.gitignore b/.gitignore index 37b8123..1348d90 100644 --- a/.gitignore +++ b/.gitignore @@ -209,3 +209,7 @@ replay_pid* /handelsregister.db /handelsregister.png +/documentations/_build/ +/documentations/aki_prj23_transparenzregister.* +/documentations/modules.rst +/unit-test-results.xml diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 27df19b..669829c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -23,6 +23,13 @@ repos: - id: debug-statements - id: pretty-format-json +- repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.0.270 + hooks: + - id: ruff + args: [--fix, --exit-non-zero-on-fix] + - repo: https://github.com/psf/black rev: 23.3.0 hooks: @@ -33,7 +40,7 @@ repos: - repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks - rev: v2.8.0 + rev: v2.9.0 hooks: - id: pretty-format-ini args: [--autofix] @@ -44,56 +51,26 @@ repos: exclude: (^poetry.lock$) -- repo: https://github.com/domdfcoding/flake2lint - rev: v0.4.2 - hooks: - - id: flake2lint - -- repo: https://github.com/PyCQA/flake8 - rev: 6.0.0 - hooks: - - id: flake8 - args: [--config=tox.ini] - - repo: https://github.com/pre-commit/mirrors-mypy - rev: v1.2.0 + rev: v1.3.0 hooks: - id: mypy + additional_dependencies: + - pandas==2.* + - pandas-stubs==2.0.* + - types-requests - repo: https://github.com/frnmst/md-toc rev: 8.1.9 hooks: - id: md-toc -- repo: https://gitlab.com/smop/pre-commit-hooks - rev: v1.0.0 - hooks: [] - # - id: check-poetry +- repo: https://github.com/python-poetry/poetry + rev: '1.4' + hooks: + - id: poetry-check - repo: https://github.com/Lucas-C/pre-commit-hooks-java rev: 1.3.10 - hooks: [] - # - id: validate-html - -- repo: https://github.com/asottile/pyupgrade - rev: v3.3.2 hooks: - - id: pyupgrade - args: [--py311-plus] - -- repo: https://github.com/pylint-dev/pylint - rev: v3.0.0a6 - hooks: [] - # - id: pylint - # args: [--disable=import-error] - -- repo: https://github.com/MarcoGorelli/absolufy-imports - rev: v0.3.1 - hooks: - - id: absolufy-imports - -- repo: https://github.com/pycqa/isort - rev: 5.12.0 - hooks: - - id: isort - name: isort (python) + - id: validate-html diff --git a/Jupyter/AI-models/Sentiment Analysis/FinBert.ipynb b/Jupyter/AI-models/Sentiment Analysis/FinBert.ipynb index e2a1e8f..11b7087 100644 --- a/Jupyter/AI-models/Sentiment Analysis/FinBert.ipynb +++ b/Jupyter/AI-models/Sentiment Analysis/FinBert.ipynb @@ -2,7 +2,11 @@ "cells": [ { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "# FinBert\n", "\n", @@ -19,6 +23,11 @@ }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Libraries\n", "\n", @@ -31,23 +40,22 @@ "* torchaudio\n", "* sentencepiece\n", "* sacremoses" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "ExecuteTime": { - "start_time": "2023-05-01T13:16:08.554998Z", - "end_time": "2023-05-01T13:16:13.740927Z" + "end_time": "2023-05-01T13:16:13.740927Z", + "start_time": "2023-05-01T13:16:08.554998Z" }, - "collapsed": false, "jupyter": { "outputs_hidden": false }, + "slideshow": { + "slide_type": "skip" + }, "tags": [] }, "outputs": [ @@ -108,26 +116,30 @@ }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Importing and creation of models and tokenizer" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 26, "metadata": { - "collapsed": false, + "ExecuteTime": { + "end_time": "2023-05-01T13:16:15.121662Z", + "start_time": "2023-05-01T13:16:13.743921Z" + }, "jupyter": { "outputs_hidden": false }, - "tags": [], - "ExecuteTime": { - "start_time": "2023-05-01T13:16:13.743921Z", - "end_time": "2023-05-01T13:16:15.121662Z" - } + "slideshow": { + "slide_type": "subslide" + }, + "tags": [] }, "outputs": [], "source": [ @@ -145,30 +157,39 @@ }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Analyze a single sentiment" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 27, "metadata": { - "collapsed": false, + "ExecuteTime": { + "end_time": "2023-05-01T13:16:15.194193Z", + "start_time": "2023-05-01T13:16:15.122665Z" + }, "jupyter": { "outputs_hidden": false }, - "ExecuteTime": { - "start_time": "2023-05-01T13:16:15.122665Z", - "end_time": "2023-05-01T13:16:15.194193Z" + "slideshow": { + "slide_type": "-" } }, "outputs": [ { "data": { - "text/plain": "+ 0.034084\n0 0.932933\n- 0.032982\ndtype: float32" + "text/plain": [ + "+ 0.034084\n", + "0 0.932933\n", + "- 0.032982\n", + "dtype: float32" + ] }, "execution_count": 27, "metadata": {}, @@ -192,34 +213,29 @@ }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "### Creating test data" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { - "tags": [], "ExecuteTime": { - "start_time": "2023-05-01T13:16:15.198186Z", - "end_time": "2023-05-01T13:16:15.208856Z" - } + "end_time": "2023-05-01T13:16:15.208856Z", + "start_time": "2023-05-01T13:16:15.198186Z" + }, + "slideshow": { + "slide_type": "skip" + }, + "tags": [] }, - "outputs": [ - { - "data": { - "text/plain": " text lan\n0 Microsoft fails to hit profit expectations en\n1 Am Aktienmarkt überwieg weiter die Zuversicht,... de\n2 Stocks rallied and the British pound gained. en\n3 Meyer Burger bedient ab sofort australischen M... de\n4 Meyer Burger enters Australian market and exhi... en\n5 J&T Express Vietnam hilft lokalen Handwerksdör... de\n6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de\n7 Microsoft aktie fällt. de\n8 Microsoft aktie steigt. de", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
textlan
0Microsoft fails to hit profit expectationsen
1Am Aktienmarkt überwieg weiter die Zuversicht,...de
2Stocks rallied and the British pound gained.en
3Meyer Burger bedient ab sofort australischen M...de
4Meyer Burger enters Australian market and exhi...en
5J&T Express Vietnam hilft lokalen Handwerksdör...de
67 Experten empfehlen die Aktie zum Kauf, 1 Exp...de
7Microsoft aktie fällt.de
8Microsoft aktie steigt.de
\n
" - }, - "execution_count": 28, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "text_df = pd.DataFrame(\n", " [\n", @@ -248,44 +264,270 @@ " {\"text\": \"Microsoft aktie fällt.\", \"lan\": \"de\"},\n", " {\"text\": \"Microsoft aktie steigt.\", \"lan\": \"de\"},\n", " ]\n", - ")\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "ExecuteTime": { + "end_time": "2023-05-01T13:16:15.208856Z", + "start_time": "2023-05-01T13:16:15.198186Z" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textlan
0Microsoft fails to hit profit expectationsen
1Am Aktienmarkt überwieg weiter die Zuversicht,...de
2Stocks rallied and the British pound gained.en
3Meyer Burger bedient ab sofort australischen M...de
4Meyer Burger enters Australian market and exhi...en
5J&T Express Vietnam hilft lokalen Handwerksdör...de
67 Experten empfehlen die Aktie zum Kauf, 1 Exp...de
7Microsoft aktie fällt.de
8Microsoft aktie steigt.de
\n", + "
" + ], + "text/plain": [ + " text lan\n", + "0 Microsoft fails to hit profit expectations en\n", + "1 Am Aktienmarkt überwieg weiter die Zuversicht,... de\n", + "2 Stocks rallied and the British pound gained. en\n", + "3 Meyer Burger bedient ab sofort australischen M... de\n", + "4 Meyer Burger enters Australian market and exhi... en\n", + "5 J&T Express Vietnam hilft lokalen Handwerksdör... de\n", + "6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de\n", + "7 Microsoft aktie fällt. de\n", + "8 Microsoft aktie steigt. de" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ "text_df" ] }, { "cell_type": "markdown", - "source": [], - "metadata": { - "collapsed": false - } + "metadata": {}, + "source": [] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "### Analyze multiple Sentiments" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 29, "metadata": { - "collapsed": false, + "ExecuteTime": { + "end_time": "2023-05-01T13:16:16.132009Z", + "start_time": "2023-05-01T13:16:15.211858Z" + }, "jupyter": { "outputs_hidden": false - }, - "ExecuteTime": { - "start_time": "2023-05-01T13:16:15.211858Z", - "end_time": "2023-05-01T13:16:16.132009Z" } }, "outputs": [ { "data": { - "text/plain": " text lan + 0 \n0 Microsoft fails to hit profit expectations en 0.034084 0.932933 \\\n1 Am Aktienmarkt überwieg weiter die Zuversicht,... de 0.053528 0.027950 \n2 Stocks rallied and the British pound gained. en 0.898361 0.034474 \n3 Meyer Burger bedient ab sofort australischen M... de 0.116597 0.012790 \n4 Meyer Burger enters Australian market and exhi... en 0.187527 0.008846 \n5 J&T Express Vietnam hilft lokalen Handwerksdör... de 0.066277 0.020608 \n6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de 0.050346 0.022004 \n7 Microsoft aktie fällt. de 0.066061 0.016440 \n8 Microsoft aktie steigt. de 0.041449 0.018471 \n\n - \n0 0.032982 \n1 0.918522 \n2 0.067165 \n3 0.870613 \n4 0.803627 \n5 0.913115 \n6 0.927650 \n7 0.917498 \n8 0.940080 ", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
textlan+0-
0Microsoft fails to hit profit expectationsen0.0340840.9329330.032982
1Am Aktienmarkt überwieg weiter die Zuversicht,...de0.0535280.0279500.918522
2Stocks rallied and the British pound gained.en0.8983610.0344740.067165
3Meyer Burger bedient ab sofort australischen M...de0.1165970.0127900.870613
4Meyer Burger enters Australian market and exhi...en0.1875270.0088460.803627
5J&T Express Vietnam hilft lokalen Handwerksdör...de0.0662770.0206080.913115
67 Experten empfehlen die Aktie zum Kauf, 1 Exp...de0.0503460.0220040.927650
7Microsoft aktie fällt.de0.0660610.0164400.917498
8Microsoft aktie steigt.de0.0414490.0184710.940080
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
textlan+0-
0Microsoft fails to hit profit expectationsen0.0340840.9329330.032982
1Am Aktienmarkt überwieg weiter die Zuversicht,...de0.0535280.0279500.918522
2Stocks rallied and the British pound gained.en0.8983610.0344740.067165
3Meyer Burger bedient ab sofort australischen M...de0.1165970.0127900.870613
4Meyer Burger enters Australian market and exhi...en0.1875270.0088460.803627
5J&T Express Vietnam hilft lokalen Handwerksdör...de0.0662770.0206080.913115
67 Experten empfehlen die Aktie zum Kauf, 1 Exp...de0.0503460.0220040.927650
7Microsoft aktie fällt.de0.0660610.0164400.917498
8Microsoft aktie steigt.de0.0414490.0184710.940080
\n", + "
" + ], + "text/plain": [ + " text lan + 0 \n", + "0 Microsoft fails to hit profit expectations en 0.034084 0.932933 \\\n", + "1 Am Aktienmarkt überwieg weiter die Zuversicht,... de 0.053528 0.027950 \n", + "2 Stocks rallied and the British pound gained. en 0.898361 0.034474 \n", + "3 Meyer Burger bedient ab sofort australischen M... de 0.116597 0.012790 \n", + "4 Meyer Burger enters Australian market and exhi... en 0.187527 0.008846 \n", + "5 J&T Express Vietnam hilft lokalen Handwerksdör... de 0.066277 0.020608 \n", + "6 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... de 0.050346 0.022004 \n", + "7 Microsoft aktie fällt. de 0.066061 0.016440 \n", + "8 Microsoft aktie steigt. de 0.041449 0.018471 \n", + "\n", + " - \n", + "0 0.032982 \n", + "1 0.918522 \n", + "2 0.067165 \n", + "3 0.870613 \n", + "4 0.803627 \n", + "5 0.913115 \n", + "6 0.927650 \n", + "7 0.917498 \n", + "8 0.940080 " + ] }, "execution_count": 29, "metadata": {}, @@ -304,19 +546,18 @@ }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Conclusion about FinBert\n", "\n", "The current form of this model can't be used for the german language.\n", "It could be used if the text is translated beforehand. But it is questionable if that will work well.\n", "Another way would be to retrain the same model with translated text from this models' data. But I do not believe this to be feasible." - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "# Translating sentiments before analysing them with FinBert\n", "\n", @@ -326,14 +567,17 @@ "[Translator: Helsinki-NLP/opus-mt-de-en](https://huggingface.co/Helsinki-NLP/opus-mt-de-en)\n", "https://huggingface.co/docs/transformers/main/en/model_doc/marian#transformers.MarianMTModel\n", "\n" - ], - "metadata": { - "collapsed": false - } + ] }, { "cell_type": "code", "execution_count": 30, + "metadata": { + "ExecuteTime": { + "end_time": "2023-05-01T13:16:19.308043Z", + "start_time": "2023-05-01T13:16:16.135009Z" + } + }, "outputs": [], "source": [ "from transformers import AutoTokenizer, AutoModelForSeq2SeqLM\n", @@ -341,18 +585,17 @@ "translation_tokenizer = AutoTokenizer.from_pretrained(\"Helsinki-NLP/opus-mt-de-en\")\n", "\n", "translation_model = AutoModelForSeq2SeqLM.from_pretrained(\"Helsinki-NLP/opus-mt-de-en\")" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-01T13:16:16.135009Z", - "end_time": "2023-05-01T13:16:19.308043Z" - } - } + ] }, { "cell_type": "code", "execution_count": 31, + "metadata": { + "ExecuteTime": { + "end_time": "2023-05-01T13:16:19.928232Z", + "start_time": "2023-05-01T13:16:19.310046Z" + } + }, "outputs": [ { "name": "stderr", @@ -364,7 +607,9 @@ }, { "data": { - "text/plain": "'J&T Express Vietnam helps local craft villages increase their reach.'" + "text/plain": [ + "'J&T Express Vietnam helps local craft villages increase their reach.'" + ] }, "execution_count": 31, "metadata": {}, @@ -385,18 +630,17 @@ ")\n", "tf = translate_sentiment(headline)\n", "tf" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-01T13:16:19.310046Z", - "end_time": "2023-05-01T13:16:19.928232Z" - } - } + ] }, { "cell_type": "code", "execution_count": 32, + "metadata": { + "ExecuteTime": { + "end_time": "2023-05-01T13:16:23.381261Z", + "start_time": "2023-05-01T13:16:19.933234Z" + } + }, "outputs": [ { "name": "stdout", @@ -412,8 +656,112 @@ }, { "data": { - "text/plain": " lan orig \n0 en NaN \\\n1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n2 en NaN \n3 de_translated Meyer Burger bedient ab sofort australischen M... \n4 en NaN \n5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n7 de_translated Microsoft aktie fällt. \n8 de_translated Microsoft aktie steigt. \n\n text \n0 Microsoft fails to hit profit expectations \n1 On the stock market, confidence continued to p... \n2 Stocks rallied and the British pound gained. \n3 Meyer Burger is now serving the Australian mar... \n4 Meyer Burger enters Australian market and exhi... \n5 J&T Express Vietnam helps local craft villages... \n6 7 experts recommend the stock for purchase, 1 ... \n7 Microsoft Aktie falls. \n8 Microsoft share is rising. ", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
lanorigtext
0enNaNMicrosoft fails to hit profit expectations
1de_translatedAm Aktienmarkt überwieg weiter die Zuversicht,...On the stock market, confidence continued to p...
2enNaNStocks rallied and the British pound gained.
3de_translatedMeyer Burger bedient ab sofort australischen M...Meyer Burger is now serving the Australian mar...
4enNaNMeyer Burger enters Australian market and exhi...
5de_translatedJ&T Express Vietnam hilft lokalen Handwerksdör...J&T Express Vietnam helps local craft villages...
6de_translated7 Experten empfehlen die Aktie zum Kauf, 1 Exp...7 experts recommend the stock for purchase, 1 ...
7de_translatedMicrosoft aktie fällt.Microsoft Aktie falls.
8de_translatedMicrosoft aktie steigt.Microsoft share is rising.
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
lanorigtext
0enNaNMicrosoft fails to hit profit expectations
1de_translatedAm Aktienmarkt überwieg weiter die Zuversicht,...On the stock market, confidence continued to p...
2enNaNStocks rallied and the British pound gained.
3de_translatedMeyer Burger bedient ab sofort australischen M...Meyer Burger is now serving the Australian mar...
4enNaNMeyer Burger enters Australian market and exhi...
5de_translatedJ&T Express Vietnam hilft lokalen Handwerksdör...J&T Express Vietnam helps local craft villages...
6de_translated7 Experten empfehlen die Aktie zum Kauf, 1 Exp...7 experts recommend the stock for purchase, 1 ...
7de_translatedMicrosoft aktie fällt.Microsoft Aktie falls.
8de_translatedMicrosoft aktie steigt.Microsoft share is rising.
\n", + "
" + ], + "text/plain": [ + " lan orig \n", + "0 en NaN \\\n", + "1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n", + "2 en NaN \n", + "3 de_translated Meyer Burger bedient ab sofort australischen M... \n", + "4 en NaN \n", + "5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n", + "6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n", + "7 de_translated Microsoft aktie fällt. \n", + "8 de_translated Microsoft aktie steigt. \n", + "\n", + " text \n", + "0 Microsoft fails to hit profit expectations \n", + "1 On the stock market, confidence continued to p... \n", + "2 Stocks rallied and the British pound gained. \n", + "3 Meyer Burger is now serving the Australian mar... \n", + "4 Meyer Burger enters Australian market and exhi... \n", + "5 J&T Express Vietnam helps local craft villages... \n", + "6 7 experts recommend the stock for purchase, 1 ... \n", + "7 Microsoft Aktie falls. \n", + "8 Microsoft share is rising. " + ] }, "execution_count": 32, "metadata": {}, @@ -443,23 +791,167 @@ "\n", "translated_df = translate_sentiments(text_df.copy())\n", "translated_df" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-01T13:16:19.933234Z", - "end_time": "2023-05-01T13:16:23.381261Z" - } - } + ] }, { "cell_type": "code", "execution_count": 33, + "metadata": { + "ExecuteTime": { + "end_time": "2023-05-01T13:16:24.076261Z", + "start_time": "2023-05-01T13:16:23.383269Z" + } + }, "outputs": [ { "data": { - "text/plain": " lan orig \n0 en NaN \\\n1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n2 en NaN \n3 de_translated Meyer Burger bedient ab sofort australischen M... \n4 en NaN \n5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n7 de_translated Microsoft aktie fällt. \n8 de_translated Microsoft aktie steigt. \n\n text + 0 \n0 Microsoft fails to hit profit expectations 0.034084 0.932933 \\\n1 On the stock market, confidence continued to p... 0.919673 0.018426 \n2 Stocks rallied and the British pound gained. 0.898361 0.034474 \n3 Meyer Burger is now serving the Australian mar... 0.221019 0.006844 \n4 Meyer Burger enters Australian market and exhi... 0.187527 0.008846 \n5 J&T Express Vietnam helps local craft villages... 0.891114 0.007633 \n6 7 experts recommend the stock for purchase, 1 ... 0.040850 0.016722 \n7 Microsoft Aktie falls. 0.027456 0.889160 \n8 Microsoft share is rising. 0.952216 0.019054 \n\n - \n0 0.032982 \n1 0.061901 \n2 0.067165 \n3 0.772137 \n4 0.803627 \n5 0.101254 \n6 0.942427 \n7 0.083384 \n8 0.028730 ", - "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
lanorigtext+0-
0enNaNMicrosoft fails to hit profit expectations0.0340840.9329330.032982
1de_translatedAm Aktienmarkt überwieg weiter die Zuversicht,...On the stock market, confidence continued to p...0.9196730.0184260.061901
2enNaNStocks rallied and the British pound gained.0.8983610.0344740.067165
3de_translatedMeyer Burger bedient ab sofort australischen M...Meyer Burger is now serving the Australian mar...0.2210190.0068440.772137
4enNaNMeyer Burger enters Australian market and exhi...0.1875270.0088460.803627
5de_translatedJ&T Express Vietnam hilft lokalen Handwerksdör...J&T Express Vietnam helps local craft villages...0.8911140.0076330.101254
6de_translated7 Experten empfehlen die Aktie zum Kauf, 1 Exp...7 experts recommend the stock for purchase, 1 ...0.0408500.0167220.942427
7de_translatedMicrosoft aktie fällt.Microsoft Aktie falls.0.0274560.8891600.083384
8de_translatedMicrosoft aktie steigt.Microsoft share is rising.0.9522160.0190540.028730
\n
" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
lanorigtext+0-
0enNaNMicrosoft fails to hit profit expectations0.0340840.9329330.032982
1de_translatedAm Aktienmarkt überwieg weiter die Zuversicht,...On the stock market, confidence continued to p...0.9196730.0184260.061901
2enNaNStocks rallied and the British pound gained.0.8983610.0344740.067165
3de_translatedMeyer Burger bedient ab sofort australischen M...Meyer Burger is now serving the Australian mar...0.2210190.0068440.772137
4enNaNMeyer Burger enters Australian market and exhi...0.1875270.0088460.803627
5de_translatedJ&T Express Vietnam hilft lokalen Handwerksdör...J&T Express Vietnam helps local craft villages...0.8911140.0076330.101254
6de_translated7 Experten empfehlen die Aktie zum Kauf, 1 Exp...7 experts recommend the stock for purchase, 1 ...0.0408500.0167220.942427
7de_translatedMicrosoft aktie fällt.Microsoft Aktie falls.0.0274560.8891600.083384
8de_translatedMicrosoft aktie steigt.Microsoft share is rising.0.9522160.0190540.028730
\n", + "
" + ], + "text/plain": [ + " lan orig \n", + "0 en NaN \\\n", + "1 de_translated Am Aktienmarkt überwieg weiter die Zuversicht,... \n", + "2 en NaN \n", + "3 de_translated Meyer Burger bedient ab sofort australischen M... \n", + "4 en NaN \n", + "5 de_translated J&T Express Vietnam hilft lokalen Handwerksdör... \n", + "6 de_translated 7 Experten empfehlen die Aktie zum Kauf, 1 Exp... \n", + "7 de_translated Microsoft aktie fällt. \n", + "8 de_translated Microsoft aktie steigt. \n", + "\n", + " text + 0 \n", + "0 Microsoft fails to hit profit expectations 0.034084 0.932933 \\\n", + "1 On the stock market, confidence continued to p... 0.919673 0.018426 \n", + "2 Stocks rallied and the British pound gained. 0.898361 0.034474 \n", + "3 Meyer Burger is now serving the Australian mar... 0.221019 0.006844 \n", + "4 Meyer Burger enters Australian market and exhi... 0.187527 0.008846 \n", + "5 J&T Express Vietnam helps local craft villages... 0.891114 0.007633 \n", + "6 7 experts recommend the stock for purchase, 1 ... 0.040850 0.016722 \n", + "7 Microsoft Aktie falls. 0.027456 0.889160 \n", + "8 Microsoft share is rising. 0.952216 0.019054 \n", + "\n", + " - \n", + "0 0.032982 \n", + "1 0.061901 \n", + "2 0.067165 \n", + "3 0.772137 \n", + "4 0.803627 \n", + "5 0.101254 \n", + "6 0.942427 \n", + "7 0.083384 \n", + "8 0.028730 " + ] }, "execution_count": 33, "metadata": {}, @@ -469,30 +961,22 @@ "source": [ "sentiments = analyse_sentiments(translated_df)\n", "sentiments" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "start_time": "2023-05-01T13:16:23.383269Z", - "end_time": "2023-05-01T13:16:24.076261Z" - } - } + ] }, { "cell_type": "markdown", + "metadata": {}, "source": [ "## Conclusion about a translated FinBert\n", "\n", "When translating a german text to english before using FinBert the results look much better and could be used for our project.\n", "The big problem is that it will take even more CPU.\n", "It should probably be combined with a language recognition and could be used to take multiple languages in since there are many variances of this translation model." - ], - "metadata": { - "collapsed": false - } + ] } ], "metadata": { + "celltoolbar": "Slideshow", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", diff --git a/Jupyter/connection-counter.ipynb b/Jupyter/connection-counter.ipynb new file mode 100644 index 0000000..bbeb08f --- /dev/null +++ b/Jupyter/connection-counter.ipynb @@ -0,0 +1,236 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2023-06-03T01:36:32.345509400Z", + "start_time": "2023-06-03T01:36:32.332130700Z" + } + }, + "outputs": [], + "source": [ + "from typing import Final\n", + "\n", + "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "outputs": [ + { + "data": { + "text/plain": " Company 1 Connection Weight Company 2\n0 21 83 58\n1 37 88 86\n2 40 6 83\n3 60 35 2\n4 11 22 10\n.. ... ... ...\n695 62 37 11\n696 10 24 27\n697 97 40 55\n698 14 87 66\n699 50 55 82\n\n[693 rows x 3 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Company 1Connection WeightCompany 2
0218358
1378886
240683
360352
4112210
............
695623711
696102427
697974055
698148766
699505582
\n

693 rows × 3 columns

\n
" + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from typing import Final\n", + "\n", + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "number_of_entries = 100\n", + "number_of_contacts = 10\n", + "ids: Final = [_ for _ in range(number_of_entries)]\n", + "companies = pd.DataFrame(columns=[], index=pd.Index(ids, name=\"company_id\"))\n", + "companies\n", + "\n", + "\n", + "id1 = (\n", + " pd.Series(ids * number_of_contacts, name=\"Company 1\")\n", + " .sample(frac=0.7, random_state=42)\n", + " .reset_index(drop=True)\n", + ")\n", + "id2 = (\n", + " pd.Series(ids * number_of_contacts, name=\"Company 2\")\n", + " .sample(frac=0.7, random_state=43)\n", + " .reset_index(drop=True)\n", + ")\n", + "connections = (\n", + " pd.DataFrame(\n", + " [\n", + " id1,\n", + " pd.Series(\n", + " np.random.randint(0, 100, size=(max(len(id1), len(id2)))),\n", + " name=\"Connection Weight\",\n", + " ),\n", + " id2,\n", + " ]\n", + " )\n", + " .T.dropna()\n", + " .astype(int)\n", + ")\n", + "connections = connections.loc[(connections[\"Company 1\"] != connections[\"Company 2\"])]\n", + "connections" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-03T10:15:42.647508100Z", + "start_time": "2023-06-03T10:15:40.656713900Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 69, + "outputs": [ + { + "data": { + "text/plain": " Company 1 Connection Weight Company 2\n0 21 36 58\n1 37 59 86\n2 40 26 83\n3 60 21 2\n4 11 2 10\n.. ... ... ...\n695 62 45 11\n696 10 64 27\n697 97 24 55\n698 14 51 66\n699 50 93 82\n\n[693 rows x 3 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Company 1Connection WeightCompany 2
0213658
1375986
2402683
360212
411210
............
695624511
696106427
697972455
698145166
699509382
\n

693 rows × 3 columns

\n
" + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "id1 = (\n", + " pd.Series(ids * number_of_contacts, name=\"Company 1\")\n", + " .sample(frac=0.7, random_state=42)\n", + " .reset_index(drop=True)\n", + ")\n", + "id2 = (\n", + " pd.Series(ids * number_of_contacts, name=\"Company 2\")\n", + " .sample(frac=0.7, random_state=43)\n", + " .reset_index(drop=True)\n", + ")\n", + "connections = (\n", + " pd.DataFrame(\n", + " [\n", + " id1,\n", + " pd.Series(\n", + " np.random.randint(0, 100, size=(max(len(id1), len(id2)))),\n", + " name=\"Connection Weight\",\n", + " ),\n", + " id2,\n", + " ]\n", + " )\n", + " .T.dropna()\n", + " .astype(int)\n", + ")\n", + "connections = connections.loc[(connections[\"Company 1\"] != connections[\"Company 2\"])]\n", + "connections" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-03T01:40:08.441882700Z", + "start_time": "2023-06-03T01:40:08.406876900Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 73, + "outputs": [ + { + "data": { + "text/plain": " Company 2\nCompany 1 \n0 6\n1 6\n2 5\n3 9\n4 7\n... ...\n95 7\n96 8\n97 7\n98 6\n99 8\n\n[100 rows x 1 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Company 2
Company 1
06
16
25
39
47
......
957
968
977
986
998
\n

100 rows × 1 columns

\n
" + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "connections[[\"Company 1\", \"Company 2\"]].groupby(\"Company 1\").count()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-03T01:44:23.433333600Z", + "start_time": "2023-06-03T01:44:23.424841700Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 72, + "outputs": [ + { + "data": { + "text/plain": " Analysis-d0 Analysis-d1\ncompany_id \n0 1 6\n1 1 6\n2 1 5\n3 1 9\n4 1 7\n... ... ...\n95 1 7\n96 1 8\n97 1 7\n98 1 6\n99 1 8\n\n[100 rows x 2 columns]", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Analysis-d0Analysis-d1
company_id
016
116
215
319
417
.........
9517
9618
9717
9816
9918
\n

100 rows × 2 columns

\n
" + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "companies[\"Analysis-d0\"] = 1\n", + "companies[\"Analysis-d1\"] = connections[[\"Company 1\", \"Company 2\"]].groupby(\"Company 1\").count()\n", + "connection_sum = connections.join(connections.set_index(\"Company 2\"), on=)\n", + "companies[\"Analysis-d1\"] = connections[[\"Company 1\", \"Company 2\"]].groupby(\"Company 1\").count()\n", + "# for tiers in range(5):\n", + "companies" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2023-06-03T01:43:25.341850700Z", + "start_time": "2023-06-03T01:43:25.318015500Z" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [ + "companies" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "start_time": "2023-06-03T01:36:32.382091200Z" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "start_time": "2023-06-03T01:36:32.385093700Z" + } + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/README.md b/README.md index 2c404de..bef0fbe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,13 @@ # aki_prj23_transparenzregister +[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) +[![Actions status](https://github.com/astral-sh/ruff/workflows/CI/badge.svg)](https://github.com/astral-sh/ruff/actions) +[![Pytest](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/test-action.yaml/badge.svg?branch=main)](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/test-action.yaml) +[![Python-Lint-Push-Action](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/lint-actions.yaml/badge.svg)](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/lint-actions.yaml) +[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) + ## Contributions See the [CONTRIBUTING.md](CONTRIBUTING.md) about how code should be formatted and what kind of rules we set ourselves. + +[![bandit](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/bandit-action.yaml/badge.svg)](https://github.com/fhswf/aki_prj23_transparenzregister/actions/workflows/bandit-action.yaml) diff --git a/documentations/Makefile b/documentations/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/documentations/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/documentations/Pflichtenheft.md b/documentations/Pflichtenheft.md index bbd9466..5150f20 100644 --- a/documentations/Pflichtenheft.md +++ b/documentations/Pflichtenheft.md @@ -1,27 +1,27 @@ # Pflichtenheft: Kapitalgesellschaften referenzregister -Version 0.1 Erstellt am 07.04.2023 +Version 0.1 Erstellt am 07.04.2023 -|Autoren | Matrikelnummer | -|----------|---------| -| Kim Mesewinkel | 000 | -| Tristan Nolde | 000 | -| Sebastian Zelenie | 000 | -| Philip Horstenkamp | 000 | -| Sascha Zhu | 000 | -| Tim Ronneburg | 000 | +| Autoren | Matrikelnummer | +|--------------------|----------------| +| Kim Mesewinkel | 000 | +| Tristan Nolde | 000 | +| Sebastian Zelenie | 000 | +| Philip Horstenkamp | 000 | +| Sascha Zhu | 000 | +| Tim Ronneburg | 000 | ## Historie der Dokumentenversion -|Version | Datum | Autor | Änderungsgrund / Bemerkung | -|----------|---------| ---------| ---------| -| 0.1 | 07.04.2023 | Tim Ronneburg | Intialaufsetzen des Pflichtenhefts | -| 0.2 | 000 | -| ... | 000 | -| 1.0 | 000 | +| Version | Datum | Autor | Änderungsgrund / Bemerkung | +|-----------|------------|---------------|----------------------------------------| +| 0.1 | 07.04.2023 | Tim Ronneburg | Initiales aufsetzen des Pflichtenhefts | +| 0.2 | 000 | | | +| ... | 000 | | | +| 1.0 | 000 | | | ## Inhaltsverzeichnis [Historie der Dokumentenversion](#historie) @@ -78,7 +78,7 @@ Test -## Funktionale Anforderungenn +## Funktionale Anforderungen ### **Muss Ziele** @@ -115,9 +115,9 @@ Die Software soll bewerten ob die Berichtserstattung der letzten 7 Tage eher Pos ### **Muss Ziele** ### N100 -Das System muss die 1000 größten deutschen und europäischen Unternehmen beinhalten. Diese werden anhand der Kennzahlen +Das System muss die 1000 größten deutschen und europäischen Unternehmen beinhalten. Diese werden anhand der Kennzahlen - Umsatz -- +- - bewertet und bemessen. @@ -144,4 +144,4 @@ Das System kann möglichst skalierbar sein, sodass auch eine Nutzerzahl von 1000 ## Lieferumfang -## Anhang / Ressourcen \ No newline at end of file +## Anhang / Ressourcen diff --git a/documentations/conf.py b/documentations/conf.py new file mode 100644 index 0000000..7f6dfc7 --- /dev/null +++ b/documentations/conf.py @@ -0,0 +1,88 @@ +"""Python sphinx documentation build configuration.""" +# Configuration file for the Sphinx documentation builder. +# +# For the full list of built-in configuration values, see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html +import os +import sys +from importlib.metadata import metadata +from typing import Final + +# -- Project information ----------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information + +_DISTRIBUTION_METADATA = metadata("aki-prj23-transparenzregister") + +__author__: Final[str] = _DISTRIBUTION_METADATA["Author"] +__email__: Final[str] = _DISTRIBUTION_METADATA["Author-email"] +__version__: Final[str] = _DISTRIBUTION_METADATA["Version"] + +project: Final[str] = "transparenzregister" +copyright: Final[str] = "2023, AKI PRJ23" # noqa: A001 +author: Final[str] = __author__ +version: Final[str] = __version__ +release: Final[str] = __version__ + + +sys.path.insert(0, os.path.abspath("../src")) # Add the path to your Python package +sys.path.insert(0, os.path.abspath("../src/aki_prj23_transparenzregister")) + + +# -- General configuration --------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration + +extensions: Final[list[str]] = [ + "sphinx.ext.autodoc", + "nbsphinx", + "myst_parser", + "sphinx.ext.napoleon", + "sphinx_copybutton", + "sphinx_autodoc_typehints", + "sphinx.ext.intersphinx", + "sphinx.ext.autosectionlabel", + "sphinx.ext.viewcode", + "IPython.sphinxext.ipython_console_highlighting", + "sphinxcontrib.mermaid", +] + +# templates_path : Final[list[str]] = ["_templates"] +exclude_patterns: Final[list[str]] = ["_build", "Thumbs.db", ".DS_Store", "templates"] + +root_doc: Final[str] = "index" +# master_doc = "index" + +autodoc_default_flags: Final[list[str]] = [ + "members", + "inherited-members", + "show-inheritance", +] +autodoc_class_signature: Final[str] = "separated" +autodoc_default_options: Final[dict[str, bool]] = { + _: True for _ in autodoc_default_flags +} +autodoc_typehints: Final[str] = "signature" +simplify_optional_unions: Final[bool] = True +typehint_defaults: Final[str] = "comma" +source_suffix: Final[list[str]] = [".rst", ".md"] +mermaid_output_format: Final[str] = "raw" + +# -- Options for HTML output ------------------------------------------------- +# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output + +html_theme: Final[str] = "sphinx_rtd_theme" +html_static_path: Final[list[str]] = ["_static"] + +napoleon_google_docstring: Final[bool] = True +napoleon_numpy_docstring: Final[bool] = False + + +nbsphinx_execute = "never" + +intersphinx_mapping: Final[dict[str, tuple[str, None]]] = { + "python": ("https://docs.python.org/3", None), + "pandas": ("https://pandas.pydata.org/docs/", None), + "numpy": ("https://numpy.org/doc/stable/", None), + "matplotlib": ("https://matplotlib.org/stable/", None), + "scikit-learn": ("https://scikit-learn.org/stable/", None), + "sphinx": ("https://docs.sympy.org/latest/", None), +} diff --git a/documentations/index.rst b/documentations/index.rst new file mode 100644 index 0000000..8e83918 --- /dev/null +++ b/documentations/index.rst @@ -0,0 +1,53 @@ +.. Your Package Name documentation master file, created by Sphinx + +Transparenzregister Dokumentation +================================= +This is the documentation for the AKI project group on the german transparenzregister and an Analysis there of. + +.. toctree:: + :maxdepth: 3 + :caption: Project planung + + Pflichtenheft + timeline.md + +.. toctree:: + :glob: + :maxdepth: 1 + :caption: Meeting Notes: + + meeting-notes/* + +.. toctree:: + :glob: + :maxdepth: 3 + :caption: Research + + research/* + research/*.ipynb + +.. toctree:: + :glob: + :maxdepth: 0 + :caption: Seminararbeiten + + seminararbeiten/DevOps/Seminarpräsentation.ipynb + +.. toctree:: + :glob: + :maxdepth: 0 + :caption: Modules + + modules + +.. automodule:: aki_prj23_transparenzregister + :members: + :undoc-members: + :show-inheritance: + :inherited-members: + :autodoc_member_order: + +Indices and tables +================== +* :ref:`genindex` +* :ref:`modindex` diff --git a/documentations/make.bat b/documentations/make.bat new file mode 100644 index 0000000..954237b --- /dev/null +++ b/documentations/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.https://www.sphinx-doc.org/ + exit /b 1 +) + +if "%1" == "" goto help + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/documentations/seminararbeiten/.init b/documentations/seminararbeiten/.init deleted file mode 100644 index e69de29..0000000 diff --git a/documentations/seminararbeiten/DevOps/Action-Summary.PNG b/documentations/seminararbeiten/DevOps/Action-Summary.PNG new file mode 100644 index 0000000000000000000000000000000000000000..35c470270448c9d1d50c9cc429c4b10438682fb5 GIT binary patch literal 46525 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 literal 0 HcmV?d00001 diff --git a/documentations/seminararbeiten/DevOps/Action.PNG b/documentations/seminararbeiten/DevOps/Action.PNG new file mode 100644 index 0000000000000000000000000000000000000000..d884101fa45a0952410f115605240da30a9ab4a5 GIT binary patch literal 65705 zcmdSAcT|(x*DlJ|ZAC!0g(hSx3MvXHRa&;FASz9IjYuyc0zzm>R1`!?R78*#G4v`m zKp;_(-lRqd5a~4ukdQz^k`r|QzVEwZ+&|B~ZfCeO-&CUHodVY+wlmvPoezq5eL%~$Ipq*TsRl|LUQQoi+dLK&9W62Zk^hH zaQ}nj*p)ptE5|&aa6w!d<(`-q+w%cEI`b0^7#yj0eqYcP7i3%43sU!N=q>?)!w<)U zPA5B@4(PgkTJQvYLy>p7Vm#Q5+z35soa3)5l$5)VFE{_0-iHtxM`_ zb3NS(2S+TO({FcQ>t=Vz$A10Y?sInAJ4XS5Pio~4p0^pw#jN14Z6q#uBrZ*X(*&H6 z{UGre&vrDk`Q6&nsHSR{z~hlFH1cJ-zdoGcWba}kq^`QF#K6DknC?=MKW99=DK#cF z>YY7R^Uq(M9=liM91{@eQnM;u0lr~x&nFvISwOV70e4S)wDJFXhXEUb^iD@#NTrEntup<_SF-@$_APkDXad0UyI*Pz%RC>J>CaM z2Y&TQsxxN6zYy@cWg9Jycdr( zQY&8`I0IX;rk-30bNoG#emgCb+az&q|0$Kg>h&k86;wFl!gw=N9U;HY80VfLX|7!r zZF#9>PH%JZnb{UZC6!6@(j!=}fbEh{PGZB7B_d(TK8M-M8;C0d>g_-E?6BVc>LdC9 zz5U(y3$`|x2#^}asbUR9kO;hE^trMJJ}e$)WuHGt*M_YHx<~9Z=l4my^mXC-{w(ne zjo3@7RrFGv4#Os#df$A&gnEBai#s@WhiE{3I789>-Tu4p@n19i1EbK~5~)Y`-G30u zp_HnwuO}0cjHO`JKTAS>i*iaO@p)hLVLj!$VXbza4vW);$xe)7@nG=K%QRH{=(!}_ zb>HUezuRWLzZl1#AoY)atwCIPM-k9L#)5mR>mFER6FkYNh-%XdkN9?!2g z-RZ{Br)3o*PLbpOwSL`iAs6eHJ3(BJA5+=z6?$7!-w%yhkJ*jQl;6o}=i_$^_j->7GHP(`OZV%Ftw^tZhPkUHD(W z6;(0kugLHPoeer*rcchQlL~<8Njq$$Xs@yjGU%jwBc_*_yn>$jSqR-ROk9>^aT{M> zMD7V^xuZ0gGCOw7s=g@(^DOzk5#rSNeZ z;>0M@J@dbM8S#4!FSif%wp|xtQh$2N$D{pARE|jGHS{rKi)zu3!i_@fS-|XP*Nm;H zG2}0ehV`B4-KLHKTZ%J9ByB@s&6WM{@uVllAk8_+fTbzr*@+~P_x{8Bix0?8EEx|< zlPYQ*omR)g*p73-DwVVGIBMpVI;7siOfd&GB^krXC&lN(%1KY6H(1W5UO>CW)Ap5| zF=W(06H-^f+A*;4;x@&L60+U(tuJ8WW^#b;4bM0ITlpxTh4PK*mD-B0JEuj0FO!lZ zkC^u6CYunhx%yp^UbCz>@e;3Q2*69s`6XDSwmj15*oXx=Qcs+|pnC8tjAhT(9E);~ z-nNDgJ*r@+$I!m5vX<6Di73RRXFQH0tkKoJ6#FnOXOF>2^4FYs0aqVc6uTPFSzFAB zbyr>32>akXSbPtCyG+o^1|U4!�eSFG{zSu1Tt?mQLhiYVtCVZtWhW-(p7wj&%*i z$f1U{O1GK&Kmz|aL z^jqUskNR>sWI3Zze0?u+&yY|j#NGKyXSQr&s*&PI$m)(EQ_>sSHAk@L&1b=!4bLh5*B7qNtq)6Sa-LO3>0STlE1}TH76`@MjKw&!ld|&UuB=++LSMG;_cOqDC2Q zm@UEg#&)U=+#%8^sHmCd)>8v|>r(<#zQNkK;nSxkZnPmP&Y5x&J&WT7{gKBh;~A@- zZ<-^3-j-}=98_Hp`|f}Aq!vM%n<@@W$h{*EXfy8V?F1go;?;b$N$saSv%VZ$qr1H~ zocE92X=-1&IwYnX;yq(z1&bIR1s1QnJSvRCNzTxSvaPiGve&)5(SuqkWBxiHt6H+& z!zq}SnA^SNi8gavTK<<7LtXujR`BKE+pYJ-bajkrB&zMnD5{UDHcgtHLK{<-XG zV1s`tn{#yUb>K~<n&+t|!|jpj~`Yq&(+HE7ViY|*=5>@~kgX5!G3_#xZ-bRE_=@4zo=;$Ep%PSbDH z>5rbyAkX7hzfT(=*x-pz;;gbfzo$o$;n0hRt_TkwL@R<;jGJd7deXPihr^=ZSCjhR zX38D(0zw+e4`Jk%HkH({cl6!oMk!6YYK~{Y(*VHUq-@CKwND^{R z@RJLGyUPrWlpNz~z0#%Iv=8;TrBW|5LS|TFRop330*m(ulo4=L+YjR-f+Cf;ls3_@ z^|(Uw0lt;c%B(1}G#B@!ImyV5URAn7Hn|i(P(y&P(F769a&Gwd4blu!9xH{_;Qg~d z%gj4l9~4qvqWKz&-(~c5B|Ksz&#iK0sy60Ml+WfvN6KFZ{V7_v!7L7qKNr|Zl}yAo@! z(=!)(yhZrRYs4`<9)xUS8I)-{VA8v1vc~i}N-n)h=TY1t4XcAe{vXNI+=%H?v^s0B z3KZ6}M`tlZxL#+>-H=*a#j3GmXk<)0FUgr~G0O1n<>+L{0Kon|%+!uR#6W0+-^oM1 z`{m|WCTdnvCN#;S^1dd@0}DmoMU!#3?Ud#1@qeT;Nkbc!Lm6SLrP*-r*)JDc^aS^fA!0#^j zq(mnCI<;?NLk%9evKC)7`&y|hkk$c_0Y`%_FrO{P*>V-#7jIU^Z)Z3~j!l|p?w>pQCiDCW2QeDHY754B{zUn1qM+y2 z$5c>6_*!DShvg`k{uzjw4Mraf(K(A2}nnHYbzEy9hR8Gr2hHdr<3S zF5J2`+hH;#z00QL4Z_-i$fR3l$UQn$gdAGyes##2Y2md8IoD8s@ZO#N_5^sS9uKYT#&`M-i&2 z7~KfNMU6+(Inc4}R*gk|rpW25DQT16xW8aqEb0w?UULx79b@(;eoBQILzDGQPTeV2!<%7McBo1NFPi z=)_JxY~&=-;tQ|b&3Gh~2QCEzdepba!<|^sB@c}!*=9{!VDR8l?d{Pbf~dQeEI8%7 z2r9jGyZlJbYiW61hfg4c0q0)2NMq{K)5Cf){kP(9&I&b6?_r|t(P~}BZ?q7Oe(KEd z@xPCjjr=oLjDOy+`09B;M}gpMBG&I+#(niy1jI(o>8{=DjXG-GHQ+P$WSGMdcR^bN zBmB=B+|T0Sol&+8)(yNHTZ{4dH_g!tE=|sw)5#NmfmF?gY6fDxhO}zvR$<`jC$hzT zH!oy-cEwj7xTEM0(r3TjocW~>es2^dcGKUx-%rM;+$u*|SKC@QEUHm4X=f|J%3z*k z!5rtM6ECU*j=p!@HC?mS?pFWGd=_Stdh9qm?F7^h@y=c4YQnn3*{u^tOW{|ypOu^< zxlSb|^qw=ei&|mMCvJZXPMNVO>6by4yq*W*IpM6ro}=}zhRR=XCpuf_J~kz~)Lk16CBBh>gX4Ai zifOpUCz=LL-(U5AbF%46Z49zIWaTX)dVX}5}xd2v0X*jt{I5Sb~$u_-HFK9i6{ zuQj!Wz2#;V3^MGZ@*`TR$CJE=k43^_g z{V9==(iygGz-}MAIOc=@E5+Z0>mVF*^8~cgq%((wt$oyqZ?940zS zoarp8#S*quy+@}C0f06}VuR0XB7#18? zPj?v39@ih%>wY`Y&5W9!wI0^J&c6@eF&Y_J)ruD58eSG&4^YOQ{W0diyV~cM^33e+ zpSfV-P4gc>9o{qfGQei~!X@l`h(_k^AWJXK%l6bdQm2Nr>{YAfY$&au4?1JkO73trNPkCzLgWyY_K=+%2hdyS@Lr0;}Ozatzf5_@A5`WpNCKwIUy9wqbP*) zl=>M)>{g~xZFm1qj(KTdSc7dVDC|)9P0q3B582X+WzQ!4OoKV_c zr=+O>!&#+#BF8UVrUs`|2G2{eCob-61fTp7b=yRf;~2~k+#hAhG?6aF^lBq>IVga# zf7qg`O1wExKi6*58i(JmzSt0H!dz72FlQ3ZTlN8SraSzOF8{cNY+Tnc86|DF(8fLv z0`yZfY+Ie{VwB@=em?xU$J}WnQ6{2M*t;C!UkfYLP(%X&Px0?wW zpXWQUH~`*N>){eSlHWg#8xnibbJQ7NO^4=sK0w83`J{Cku=8^-W<_8@VI!4uTxZt}BsJ|}+F25i zER@a_qnt0m4yh+`EH&YF4l<5-yZLz2dXmkpI+ZuN;DVZY?zK4F2z$X#7Rv2n|E((> zi95h1o!3#L!An`^OlE6ScX`<_jSY@ktAaLKXaA;+RBV@DPIbxgGPVrDU95%`D8_=# zu6EMq3rsZ_=83)02j&|RFK=1&1%30yyV}pzofq~%GPUpG5hYw>OpgB*qxEf#3tp&& zfg4_k=dh3Jr#*R#cut+yf=J883{nQfYl#0i-Cji4r?2Jy5(%*E=l1zKgDY8|_8+C= zJLN8j=rJ=%XoVn?Nv3<8h-DRiN)BBcGQR1Sht9$ zPM1hTnf=p>=co?nFysCn#aL+y>41j&;&Thd{9)ZBr+vqpnyn$|%={D6SFiTkh|%ibhbzGpq`;d8P|olA2D_KnLaN^+ISQzd6&bZdZ#1g4ER z22?%Riesd4wK(XvB##Z^hnKC`A-F17A|q|;;p}t{AeY1&4!Ol&SJs7O=cR1e6g8jD z`9R!0s?U0PI3soef8E6dS)|mndXPw@plyP+-m%YnA$+9G>bc^rzRi~hgSk%*>!JJG z;&d(TD=BIccx1V&?>s>dpS(Xh`jWX5ns*u&}yD?P%c=%lA zE7fH_u#qNMbBnbxE`oBQD*ukTC!ZB|bXhLy3Zb1#V*Jq(@wz@AEr90(Tt2vexlcy6 zyf_tz(0muSCOJF1WY_rN_Hm?J_*XIS@8x!KFcT7q2lJyBY`H#PE7UYu2(4QzTZlx- zU68F^%*IY?D5B)1HW?weSf4x43Z#~DoW3zAT@uE+cFc$GfN_iUebz&MX26@yZ@3Bt zUWg%$b?;G-RZ$=!mwz}5w3+tPXZY8ISkD5jb!7XV{k+Q=qLaiOFFd1ckAm@)sIGFg zo9l#@vJ=#Uv~@5)-h5*wR z4%S7SCDs{j^|O;*G*6ybIl`W}{%Be$>nlHQE9_AYE8aprT}(fn0bLlgm={McOn;(I zO@Dqfo-pfj!3$9Yuy^2j_d+kt0r&~yh4{e*^XKj;x4U;+W;!?i3BE@V@o|-7)Y-Qi zQ%4LY@X1RV>r3&>Zj($CCpnZlu%+BKco*WsEji$|jG2m+Z@ffziSGfESHlL>$`?kBcBLcS_GyD)|f^{JiDIrE5YI_eh6xP>o)+?O;3e+ zrRZ0uMAWuhD24jtePnM|CuZE8gIg!K>b=X6oIhghON+5p5x+BV4xZd0J)03<9@;F_SjwD>mSM>F^ok>%yf8zMGwosmH}L#alyJmlLW0Um40R*UuYYp>z-ndz~A> zF+KRz5v#eSzdP8u)B30(P^n0NVCZ)^1={cSsH zH9>_{#YCL@&uQ@6e%+s-F$KQj2K; z8v>O%!tuAKg=)A1YMvUUW7O|U7iTQH0U4i!BchX?UWADjZ0~xnxa&=gzi2TRM?bwJ zr)E6zyvOlylc1Bo89C4S?gPObFHD~dQpZbSG+@yMi|r^U*sweLtBSQ-3cf#HqkgG6 z@o?hecO^?`kZOmKajGo9AJORHud7xld($Wu+rcp;C4arauH25Rm`^PG8`l!kZ`c}S zDgrd4y=?K#b>cRM7inzwcV`#Hz4AED z3DK@A`oyJmOwjm7T_1DtI@gr~&>vMCS7%vxg`X8PL^q8OPkT9G7rjCD>xl0Mc%NL(t5&62o{aXwZ zCN`!t8mC6(y3JlT-fC`SU?kL8kWOs^xZb2`Q%iHN8q2-H?)_V3Yt|-35R`)0W0eD% zs{R`4pD7maUel+pe=|14&zp~;ZlnxxjdKuf2k;eTv7YiLTPsSwuMD(?G}YxhUFXz2 zv`K`_$*X?MbsFV*pICH!(A04oBYE$r7b~vL{}%E%!nzn0&62$OD2+SplgYL31%+|! zB!?fD|G|f-`S_$b%#+?9Q;7KUrd*Eq%EGiZ{3#l_wu!&B4C+odUoCJbL4rB!2w@DtQX*;JJhREgAW}6$ zNCr%ObYwYxiy!cjm4(zf`lz7!+v=(Vy_|RSAHzOhM}72-j7Q;$zYk{4lXK{mZX$cCGeiOR@^f;nLioUy^ctCTAmYaKDvLvD@EqnD^Y#Y zp|@POiz>l-i#H7AD&C!{s<|!d(=;}o!`7=7QeUn*AqFd4Z8{l5U7}5C zU%u*Pzsx>T0&BV@dd&)S=;I<*@+0rXz}epqSP=Yln^TrM?w_Py%_U!ZpitVa*f(9nfF zRy^?Y>sx3C@C0!t$2o7>-|^W}HZ-N6kGVY`8;(prE_-}FW>UqY2W8+*FR0>F1ETsy zSK9_OzSRNv__sd1Gz+=D9({wKGB`QYv#M{iHoh64Y%bvu^aG&}EqTTw91Q=i7+4E( zd^UP+TPYe>WI|o9{F>G7b5b9Ws_RcN_(l5o#O{zpo>Au_BCI#+dewnnW1|u$RAY8{ zpq&P(UcZU7Y?@-k@O#sV6(1T-S0!c8bf~78&#?VsV7gVD>8GB3KQtgG+(sIjZ_a?B zhZIZ0hO3KeDy#X@{u-(N!Y?k&xnHZtY4a=4g%NK^(!7iioyrsW@?Qg8{5{Yhm0~AT z7G~+oShNl;`Q)jz7;RjoGqhUC_(j*8dS+_7^zkP>&}Up2LVNq6zJZjEFrtPn$G$l3ZUM}Z`_kPq{f4F5xGneEV8DzWsK z-5u_z+eZIz9!DSd04GaiWf`*gEU3H2zf9gz{V&VERRrOzVKf8>ze`H97Tqw4MOh15g9A@;mU{A3RDaM4<>EPBGw zBPpkZF5grZmUL;{qj_yg;lIe$J{r7nO1NOa2s$QT#M?MG(5AQ1A3VU|Gqj}(tmDk~ z^T5r<74~bnnQn;vCEhIl2Y?#V7fWa}QLy*Qy_~OtFM|apbwT{8``rQpKJvZVG6DUDry*g9Z6sM_<WI{H@Lz9IQN4;cqDP#Y`Mx#~plO;k@vR`TjhrSJTDk%@@$QX>J`t@~SktaXk{Q zf?pQdE&OYc``WH|lmrAGiy@$6;vV0Sb83rK11x>%-!t63BnJEaKmN~3fjHg&ygarQ z&M+x_H@{P7YqThD zqov_DtbnwATTQ7RM*{lScC>PtFUZS$vrjt0lv2O!S2vwN5;_}SV22k7?m5ZqpGDz*I z{z1fVLls|In63|#BPAB0E(=LNv*24s>BQg*EStg)juG1~fJW8(pk6Z{o(T_YDmM%Zu$g&U&Nh+Av1MLi_#I?t#v4Z30=n^ z*qC(?ZyAxq+eYy!8>ld9AX_$8x202yEpT6LeGJ7t!_-;*v_1DutCCmtMlRFtQm-!4 zp&Wzt6t6C}n`>AR!PfI9|2)%IR%q8EEK!yjvgBpE_4C5O_oBp>zFMo)>0`g9=6FWo z)2QJjcBVEpv^NpKqw*TJu?Qx0438oDX<>TNib+C4Ct#1PX}bhcE-jp2Ef_+)vZpqf zP{LOy#hodZS#AVPPsb|b-RTqj{rdU-mJueEKO<@|AItlL*ybY>uQlWj_&u3kDQ}@= z!~;dXi{otqc<4kf+lYU>iRuSc6!}#uPbD76`{50wLs!}#baojme+=rc-x+iDKHaE< z-bZw%%-qTGx;yLAu(LP;l-gFWNSQEyWP$vcy4aOf1 zkOP`t5@!jWkVJa~w2VkN(d|PoeicKW>qrk$CWpG03klqBSdb|VV-kI@Y-!ucl}IAj z_)g$Z@40wfGyvwHP`7CJbsjSTPZo!R2mhwd_`KN(1%;jIe|&B; zqji(|po=-l^#;K_ByXCxAPx&(DL0@VDTUrmm*>sKb$`Asb((2N3 zQn2+p7SVmXF3kBPyl1Stuxa<*t3@;0Na`8I@d&vQ-nM0P&HGqfuQ4Dfqr`K(Dq&|M zo?Vg3WmRSA)mXT{f zQ|E!aP^uJ+wNT0p=WcJU=Y3ruE`82frv_^|a;LzgB;KpVP>7Z#j@#5ZhMUh!6W1qQ z4F|u9?pA?#mHSJScLw4k=1U|uYLctkohno|4Bt`QqAg2!Vef1Is1(V4Z;yOO=A?{K zZrM8dX2vXtdT&f0SKi8qFxrtjB3@KL;JyaG;36Yr-K(cdi(l8!b~c%JdK60Shz?^9 z?N672GC4OGh(5o7uie8qZyo-T&b6K2h;^B`u-xc5t+%fYFYbJAhYLpkI&JBz2{;gU zJ-JcDKLicIa~R9wur$O9X(kk__vCP7 zTShY3T&*+r53F`*#&Gx$JYcF9k`#?PVN2Vj&V1dY#iR^}_u)iuyN+KPH>mlsthG+V zqS_Ha&L;=VLy?hB`|&+mCW)=GmAb2hyG9nyb)^=4s7IoZHs=9P%bu|)I zSqbbp!=7*E%4L*<#$`l!BDSe)Vx{QH_bBDzz1GBtDEZ#VBI(QB^$s4LIDih8Nqi6g zLcQ?cra7rf+9m{+;kjXrlsy}hXC;ciICzVVb1>g7%*~io3mcs+3L32EAH>f; z@3!#q^rb~!6FE#2g)352rPDF$Y?ZsUii8z4mX+>i_&~ApM(6ab5LQ|d|B11uU!|l$ z|I*Gia&=M)CT~^z3eR1}2Se$hXsR-5D~`xqsZ2yf2%;hD4v0-gs3T$g&Zu^1L&Sq< z?QMN_XLEDSwa*KYlOF<3KR(cv8S7_yFnaF(Vt>}K;6a)JU+a6hAFc(~PpFESN3 zPmTk8?R%py^=}ZNTXSGeRpgZ!Vr;_&SMi`EyRd(Xv{)AZbI)o~YOixCRBn%W1h;QI zCguRfgfyM^rK5v8@P?1qsmdeH%1JYNE1EjhUI(R@TSmk^K-~-&7`XYj!O#>U>Ed`G zErMO2)~U^N@TEEiYqfoQ++*3R5-3Yl4j2$&Buc3%OypRvO~#(i){$EPGbLCoSf!h0znZ6*KEbBy2c2Ok?XV+ z&lb1VdHPl=r32OejiNg)85*B_EED zRt;cJ?RHDP6nmxiGNUZOCr@3Kax`dX!&s&620Kp+t53Kb>X2E_y|v81G5&@ z&S?>_3uK1|EKoQM!Y6=3M0D}x)}U&$JWjyMKGJFXjZwMfv}E!b2yd=zjGH;>doGMH zXG(S$Ix(~z)-2VGFWeuG`)YxuoVGQ++l7ZY)`Yt8Faw6_wck&Rv|TmWBxi{yX9s?} z8Gx`H&0NNjOn{?=o(1#N<((qj6HO8@excZM&-Xh3!Vogx86ikWlwzF`#uE1fZ5^4Y z(I>T3Or(i+92}p&i#6#C<&q{oU_-N3cyr@nd&gcvSO}7=+)0~nM$?j8J`GMzwqrB} zx<2TpxVP*3N4a!A+&k)mxozlk&Dp`570dR)>N)IUjRJn;c7NuXK1qi;Cc|45;T_hg z4`@}%-3$Ic6qFr%POql)Ccxwfu2&0W|1NW0w#AMoLJyzYRn88;u2r_n6x#YcNV zO2(`?lUI~K3_2Q&Uar1=bNR~mO`ksDqMo-~iZpkjp39a0@anWwA zA9Ut$7uzuV2^|ZP6&d83e2<4{#k5yiE(%TWAu$KU#QX^9Z=Y}EqEeseI;AF{70CN$ z(i5M4656tQvJ<&0o#d}4x7@L@QgMtzrPFRxH_cs4sdEDcA)QpZj}QI1^HWlowUaZh z;2MUf&W5gKKtCjv7P^fl`4^LFMz!mgC%Oq!uN}+yT%Mgf$Uf2J`LC;2g(MxeaO%CX zM}qPuw+XQ+LOC)4L9mH_q_>hVNLbp*uwlsT+C;~;c-`D8E>s;-Kr&Mkv2u&u+?F{e z*>(a@rvxWBe);3C%R63#nQCCWa8`Y#CBH~I*TX7HHW{9)LfhNTat?-hh4Kp+B%$KMdgEwpchDW(!*9ynXGPfV_HW%uuL5(s@?L7S z4QrpW-e5ICuDnc_rwJx5-lRGn8v`@q#$b~kvnjNfD8qXDmFio5k0QO}wc*py87bVw zWxNqC2qf+DX^k)_3~fJvo#E6>rX`3_S_JzAg}Oe8L{<%J!>c2Dn208u146Z6VNBPh zp}F;h=W7{pP&lVMG_;}|=KGL2Ge9_LmW_F`LJ#7J&8r41oVaOcXNLZkC`P?#fD*73F z>FdU1AHNv<@uc|hf_b7bzQPCQaGm;N0Oq}(u?70_|s52ahLWjiVf^Pv;}avR<@Wt=-P4{MUM-QEXn1gCHm zww%H7s*$*?%7QL?R!I5K(TH;{mDguG9{2!z_O1taX84$8s$x*5sSN0a5`0O-W<=*~ z=Zh}EvUu0Zapc?13m;YbdKQZE)3%WCJkU1{8{csHD8;+Rxri;usv<$fw08An|=@`o>&Fp@>$P=d zA3@S3P3mH@CDc_vzE3?SSOIfWIT99!?un~pZ1C=(ih9zE?%2<8X}Bx@*tupCnsA~JCKv_EH~B?aDyKNNtM=Zjlf<>zYSS?ZYIvxK12?MyQ3HZ1X0b#RN$~t zShbMo^6S=2rEX0*m;+{3YfEn@__4ef2{HZebC(HcdD(ho1dU0-oIEn$E9U3%S>IXl zI`%y9&9pGlT6c8<(`MB^otWFloRD$-Si4-{8W3V9=3_}0l47sv`XCTQ?95E-%lK15 zv$oYMm7G?Ijh+Ixf>>u7y$RFND@u{G7xkAXqMrow{r32kVQsE`-2w>tmcyK|p1@7Z zC$>VtXhoI20O{mJsQeVYW34uwWsHa>?!CesqPa~~$y!L~t*7cAMt1UxIab~c~D zoEj`hb{Y=}SveLOE}?rmL~&N1nm90!)qf}a&en|LOK|2+s2yA7V_Aj3J4MF%5c9)V z26e(*9%KkX-!hHUrN{S-=8Y~$;xgiEJiqWm#YDDrzSfDMTawLEuv5dh)J;~t-{NHu zphf|u`(M$JYn*P9I(zW5R&T={MG-V|c{nYiZXHXW!Y+)pDun@BJ(WfjwyReDYDiN= zAe`ou$D{VTIF z?8XQx)c%9pY*wsCKIB6`q=(S0_?N@_q{7bG?}QDK&>RUn+f6ZCU z_ab%sTJ!0KFE&Lk0s1JZyi)C=cNCelP3Q-3MRa-u`={}EDh=3=rCo>^tGYyv(=GDz znPDW(Z*-#C8}lHvjG3UaHE4LXD(gZ=`JC`o7|ObpT5gXJ4DI|j`$g)>burlPc)sx$ z_+BQ&>-j{)S8(XF(KTC8@&p=_!vvfd%xT=dHIjRa*qGLP4n1Ixo77dhGFDr9Wr>cK zfthO(_Exmp4``Vc#pC*F0+oG+wdL`3vpuP;P`=4q7Vb>+i8{XzRP~b62f?ABAl!L7 z^%C^(aeff7*P}uobvwRckHL)o#IbRTpa+K67HzXfA5w*3!eM7dNQ3_8!sK zqv7-R0=fA_1XT#`rn^S_@E&`(H(aHU|(iSV+B^+eQLBy7cHJ;o$Lk3m8pw$_k{6-NA1 z{^^bve>lIku8GkQiBCAQol2rhlZF(3W@f@)JUF9I8V*<}dl{dpYTYi!X+5wV-gRZ^ z?%&b2nLn@ZBT8K!l)+?jwH9(W6L1~D!X%QK1iH*%n2DmfI7g$$Gd!H@`RJ#LAwbU| zXdQdd+{=7x)#OpwJcL zjVXv&*j8z>3|RM@cqBygR$_$}zg`w$f>~i#mxdn%8g278rB)_;05vnLMNKr24zKue zCH%Xl*MGqYDy)XVK`a-ee$|#u2-aB}90=g;u6aVxm#`lA)GwX*3H@Za@?Q`C~x6GlsebJq7-os!`3$O2~@CO+*XNbrA8Pd1K*JSd{dB+>7vboUuQ;mhp6*ULBAE5X5HOO9|sV+IT(eh{V==VpIcoXTPvTFq_3Q6J)-v zv!r$%RbXkBRLmXN8h>ukVXqtNSAGf|9AO7O){tDbkobb~LN;z82Arw}*M&Wv-Y{EYG16#o1- z_XHpb@LZOAi&&>)Qo@ZauH|Ifx-q=?z?+>q-y?`+9# zXv`dN?Yz@^?t}1>zU1-?_HE(U&)0W){aTUA*p;d~B>I6Q_##w{f5wZs&Z#vQ4jsD_ z2z`exZcVX23_tg!69e;!yrT*|`o5^;J3qt>rIzrP{It+z09{1hm^%l$aT5tt`lSUF2#7`wr52)gU;5%`pP-4mPDqCNJaY*woEG4Ds@G3iEeJE6;sY$HHW3ETt3?5psR zs#37ao6?8u*y@cvgqNXR#}XeHyEdJq8>ZE!#a3Cd&@GkZf5Ii8-(zl~b5;bHj*njC z1EWrh2{zYr`r$^`0`}o=#yaK?8snjFn9`!~KTmsz@$Haj?7T&2BhO2pr;cA%Gn~Wu z%7wC>V`o~pC5Y>p$Zu{%%xaGUMc^(i3fz;v-Exg&SOQe?AZUF>b38 zhK9sn9IvdUdH#yMmur47q+^^pfgFjxu#?!i zT#wgiTs8(wTLu~{-YouG*Bed->aTnO3WtWxy( zBaF*}h^m_*UnmA0XXWK+<%jb3@y8kq`trJhSxVdoz^wu(8m7h#VL3{LJIq!9{rq{= zZMrZ%52b%DIbq-bb$r?XCR)yAk|0m{=QsJu=ira+_@IBE|D))^|4r)ttJ?pcWas1Z zbv}(@YgGofqwq?aaMi&rRHg}2w9X2Aj^>z`Jz28h`KsG=y@y<$nsuN zErer3nrGL!RH<`m(zwK~tr__~mD}up*m`W&6mIeE9Y@g;*sCKaqDv32BPVF_ON0Qg z`83}(?x#81!OLEFPo5{x3*m*|+3w;49`DoMAd6Ap zsL3d36oTd!{k0?ep1_vHKBXPeS*pJHg4cAUV9jeD^$xL9)4)$&adWE3wMP_lZQvYv zH(8K;lq^X`t8qs5{_?M3cj~y+i|s3Vu8!HJ>N%VoPA+GMnO5>kQ8q5yyCd{?-`|{E zWYm(Q%QDPMYv7^YfFgeg8FG=?FS_>{36O<(XD=!{2=>Bz@pd$hlbnkiD68R1RA}!_ zgoI}Xd?*gofUX8Pjv9(dsG#V-$$TDD6qvZzk3XcTgn`zr@<$a zpzA@PQe*{AV$W|XS9x`~d4Knz|CVgrG_4K*8`7y>R98h_bU6@Y%5V7HEoFa~Z}t0M ze)R5%xw!w)Dh?;ULryPTx%;Pk&FEc;oq1&i|L44t{0gDJ_-pn^Ty~eTJy=#KvV!-= zzD~*D(8Mkh`+C4MBw5s+eG;~^RxwoMBts1$gm-b2V4et1QnxMC&rlLvQ5V6W85}#s zH{agKt1jw;?i2%1kO`P2gof-rz&BWZSFP+Wxy*>v2=^(^U&N$61YcCei}pY%?vo0B z7O|KDNnx95@l`nVG&RKgU?Y4U5x}!nR&-qxNvPZJ>InR9w=YKwu)L!8q7?khI;fVsPnxx7 zg!;J26~9{~k7eRmv)eZh!kI3LHE>{DY8 zkDbaB8I0y{PU2_nrKr&^&O#BTzz84Tzd&3_QE%IWagc><_ONfW6&l>$cY)Rm`h!&- z^V5+JopCOwS94r&lrAj}W@02S*Qu5y`Gi>-kmy z%U@xXrzz2Qai$|O|K-(m5Pu!In5m1vDvf$k0T%B7?aN~)?+vMH>`4Id5QsW zOfC%pKIs#Up0Sf(Q8|y2@g8Bk9w-CeuIc7BlE1}o!L7Nz;eUCgdn+>~?|=&WS?cZ2 zA)Y8T=PMbyc%be(Sz0i`KuS`*V3bbGkJDA%g0p{KQZVZL9zG>vQU?P7nJ@Zr*Q$8k zBG^YP?ThogHesTj_4t|f!CqH{4=DK=KSFVIKY8>I2xT!N!h3TuBYYCRqw#1FUt>qu zSf6@2f8X!DW`t!T?gKpjENJ&=jO24_?5D&sS<;rMlZ9`|PtoX(T-zVrq7LT1hi&<} zscS}%dXfk)`-kZ+G{oi}+JsF@na0ggJ|7ZqTfx#oLLK{~@phkrP9T2aR6=KW%1qoP z(V5C~Ek@p}W9Oo&N}qH!Rt9oOnN{V88Fv;i2j9>KCBBaCBUpQ`TZ)H< zC6i{laEfhP5<03grS*n>wHG#Z;&#T9?bVRo`qL7pC^mj5XPCC0Gr6xiBwU1 zJ+2B+ZJuV>^kD&A>%D6cU1zxfSB;ghtxp!zf_Saj+rqPb6Tw9H2RF-4HA}*n9Uu4X ztM~t?8Di*ZwWYMh3*S37?$P<>W=P)A(%`JXl}DXXA5AL1Kdq!`5gPhLXU){O?=lX5 zGh$*@SbRXjJy#!vXc%4UtZ^s7K#0H-3YXmx75Ij8vDg6uRZ;EFGeL)lfBQ)`?T?#s zU!!9n2!nogGu|$N&l=*h>HcFaUAN+K^#P@p`l!@TVWQ*WSIWrdN@x|n<3Ea4w3bZl z^||6s!dSV#w#sy;q*eVkK#1%vpD}c8{b7PZUSD} zUve{5+~m2lSc*|k+d(*%4h!)(yf>%=t|(F2H&4n5acL&JCZ@nT<^C6S{~6U}{=JXF zGvn8a=r|}MDmtN-cu~L zXo0z!1@|o*ETT8oCXJzs2v`Bm%wNCyquZnVNi#4PDbH0P7-*3`?>sk@nLLuIgV zSL`a?L@g+3otZvsw4yCJDC;@unq;CpP8JPScrfR$`qYnAc-&Gqln8sdT&Bi)s* z<5aNY@M21=4UWX=+fYH?M@i^qdFRYiE;LBtq z6*gQwD9F#a|1za~bm=4?tO>mDRiNZ_YE+WueQ2C4Zg#XYL-VVRnW4Ut69*RBSUuk2 zy@ZZqlm^iB?TO()!MKk7a~)&+wOs`zTj^OZ{4UR?^CK-oUZusAoNcOv&nBWyVu|r8OUPezfHQK)9LsMOWE9FyNi%!i{7( zOyAP8oh^rqoj${-ltkMe(Y*4l$~rf;KSjTiJ8sHtS$)w39%q86w^^5%wS2U~n9EtqC<99gubg3bR5?Ohy&14ux?mhJEIP^+CgZc4rm)N0m=lXD zEMf<;;NZ-aLJCMSyDf2wY~HZa)XNWN4s%nsz?y2Wf2VNYJ;XJD(^x+|Sa5D*XdH;N zs-aQ3)8jqcVh%bPJrDc43PQe?Iz2X?PIuik0=@yj(Ql&!4)0$WyqSE#ly)^s*so;6yw$GLA^eS=X zf_gc4nNb_vbm~rghgnCil`f=~RB+3ERM_{P{HJJTdHM_CFuo__e5t-_t2;Jfz0oQ$ zi51vGav4a*OL&1v5p#Ga-I`y0c`k_`F5Fe5sAbC`D@d6BJNd0-RwvBOB*<<4wKRa3bVo=!z6AP zOyM4Rb{37mn5u@_mS_YzZn$^^@0$jkvv0&O1Oa$_2%QqLm?m1o9p4rsn>1`a^Tl26 zy~a=X>U^(@VU9wt*8ZNGKShr9k4A>hYA~aSKkH)9z>^tEuC5B=iOPZ+of+uxGrW9c z23-M%>YU3(?rsS+SQEF)psr}rc6o&M=xYPfa-~lGqEAnBAx>AuwOj3+>1qpQ?J#Rr z#@Fi}Uc0aqlP*sj`e3!L7S@P67@u_@e4s~JRopS zq1p!`Z_TBcI_#ba?LMeMAc3TrirNp#=4sZRbG>tZ_cho-=4+&=WQo1x~;^wJ_$^@|tJ*^zu|qj&?+<2jcl$r&(?RP^Ph$HsPa zrAcJ5^pTlI!3?Y~v84UCrRB%<#j>2H3Z1e~t7HtLiZ4XJ0(YA_(_K~bW#x-D({ygq z7apukWX4>3)4T5FN>kfR<_Z2LtFP=QA~bzOC!Zd+)P8YXA~@^(DNkukSX&cy-fVI} z;2~2>PT_7IQ5&v1K!6e#Z#pQj(Dvc(N3l1;RZ~CEJ>{b$x(X!*Kx=UwSo@$81*Y_@2>^$}< zDU;1>agTmQ<@Zh@Dt>pppWXba1+i7WR(HHvWrvCK?6v29VsCG5B>eKF@(+aC#rTuz%xGrR>F(U#vk$RU0^5f%SmQN)vnYg?R z=uqCS@z0n^jp=`@9QDWpVdG9`ko>ZU#_I}Zqoo5gzNv6a;@ohD*=(#fP(tBa+*Oo` zT|Ov9;o>M8<4bfZ8!IB|y3$LrlY5h~INPb>v+lG@G{~rtD5ib2h&>y!If&a&(Atwr zxRRi-qc1wub4rw3d1R8ah>mMJUi|o5kfp2P(YFIQ;xa7Z=NaMWF>E_NidFNMG{ahp zun#6;SAi$xUl{6%y2(RaMr8hLbhs&(u}(6^+~X3q5oSi<~4Hlz$+br!ArYyCtRqS*Ik4x4(cU z9~~tQ5T%*IjI6>ct%%vWU_TZQPqk6T{TG68N{8_T_vjnIXzAyhxXun(H^F5oA=5eq z)Xe}fhu^jw+h^7#KkWmfu~=UI8j>rC0+t z{K_)mRBx7^R^*Ah@+?|~wMae86L6;4B$^)k;XPe0LG7BLJ@81=E%%P57)sBR`+gt+ zp6d};I-Gq$0}jDlI%ni~6j{CviC95}jMHCCz5w#CJsWR(`Lr6>#@JnAKwyNBO>E6m zJ_@|Uf$e=%YU$gwcPm{8-5k7bs{EWTz|M5!n-mFPa_7D_` zHYm{`Fdwo!F9IC;_m4y8U)}u1QoorSHiebV^U-JZ?buBqkHYr_0PdlCzCOYMgtG0pKY+s#jB5IacP`{+~U*Av^zrCyW-~SppVM zMe!N#@XLAR>qHP6+pp#=+20|f&$_<$e}YODGTn3i_^up!rOeq5YG}2J|BFCv9OZI; zEByn&pgiTj0Xd49h;aJwgMc~{>XAMS=1!s;007jlYv14-(<2g+GX?ZP8&h2PKJf9J| z{(L>C-lX1F_w*6$lmk9oG1+`tfD8&_dWpf7dc?n4l_!*HtI~o7D!i7yuk;;`MBdGcX)5Bj$dK{ViPPu)k!JmD zYgg#y>Y%VT1+xg*Jt9p!{$%%hr3HpEZ=!fw8|eRUd*UH*OlXF{Qu zyTiT2f50_=Q#kdvpkMychXHym83&Cu!LaX7)F;sCtuNgFsG#naIJO2)DA8{LnSkGF z-e9ma20f z6%PFVnK9#|1I*({aP|F_yx^nsrtyn^Wo|%?NuDF*P4Gyh_Wd&@IY(~I=o3KN_RlLD zN5@c(o4qcHcG9XZnUdI};uCte<6yd&V$h^{?ZIq^Z3k>ff#!R@D#<`3Oc$uSm*{5y z@6{!--~Oe7XFibsu|Z)h z$RlcrV_FwaPjX`LE^Nm6p75boNHBW>P{JeIEJecB1r*NzJ0Z_nk8)Z$ZWnb)n;6`~ z#X*P!TJ$RqZ1N5`X`|yS7i=fVx_8Z_*=o+8=0CYW@=0k&M1&M+P>wCl-VkN4yr>_JneJ*`npcHE)gRgd*h`iyewQ>T6-}6Zg0kzu9!KW%|gH+P5 zzS=8dlPh*AgapW8JeI~~-P?T(NU1(Sbq$I z?K0nB{n6Ha*+EO{?eIMD8&3-7^PSy#ahI_)O)Lx%eA~qCfOSKMSgNo0i0$XLHl*`;0>4S z=rNg8ln9*%w(>iQU~vAi7)aymnMwKrs(10Ey$maR-|m0z&ZCuFi+Qj(H$AttncFxM z#+nOOI;hw$(fIy&R1Ak~P({*Ez^IfbIqtO|ixJ{zL_{W*d<~q&w+T=1#&RNSd-0&x zDADIN-n(1duA_d5mFl8!FF%$CX2T>7946-B-+abeqQCh zf0Y|&*r-mHm}GAgdw^;kPK&c8AGgE#^bPDp5ibO&Qy{9;+Q6($0y78(Dbv}e)hkDE zCTX{8sZ(8$gG}IvW_TLhdr|PIhx60e|>#m-VCz1SS1B!w~g$w zGy3odP2KKFRbOYwbHk9z*{GC8-$U55vb4QBO@uLV9pe4`oUC19iAs^>rG-{xT)hcc zpBNYLA_6ge#V~B+V296j%`w6mhg%G*q!2H>bW8KmFh4g%ou-+4krbcdbAr=OirP{( z=SQ~(qJ(_KNc+3ER;b5grJt0rQQ@d^2N}MTMg^x2nC6WE%`*6BP;6IYc5aU==8YJ^0pVaiXdZg_~r7`qjsO4&ERLy-Fca5xs6_|mWo78!8p6Y@8 z7ST!0Z9aBBOVnl4dNx9@W@1I$YqYX1V3J8q<)IFB*|R^Vc?K3@QEp+A56Czl zc*y}yLsS}AOP5LVJ@;PTX!~EMg<%cY-IqdS^CgnkqSos(+vTe=9ZqRzA9Qb2*oTOZ z#gvi1|5)KwJ|@Jy5!X=()CGBS#`!AbQG1a;XZ>egNX7e^(Y8HpIL6-L4A1gN8yV!) zxjg&3QOI_SGR7+ZW>VG*2C?%$LFdJTrpKl{e-<*@0HaRd;W`90TOXSo( zoPZCB%ZCh^lOwm;mJ={Mk&N32Z9W)~JfF_lzQH1Ft9-U&&qsz6a1g2%4I4CfW5{j~ zLjfu8|8_vE1WSWLN3C7+_dvFnq~va;<{Zk3E^}LBCWqB@*3N(+0h< z=E|8ke&6TQ4xe};DX8)CK{wQ8lNshW_fR=>m~#>4!t zE=8_I?yM|2Q*DmcDf3zR=iPZH43D2e}zm>$U z15GoO+l*tRJ**G^JGjFFCfup5)cyQkyX4-@>2MF0+~dEf4fh@w*E`7TY@l}_pWVl6 zhg_|&^`vm9t>t;XArZ9pKD=>B~)$1TG&WRu6ZqKY%=QMGo-9f5Qz5x z2?r=`ICY;Ms|P2!j>O-!ax4L`%RLwN7rq{0OV*iVvS)aFNYrqDSN@x_=Wy)4=PbpC z1I@`!!Nu9Ff8S;hT(_u>@L#tF=k`VyUO>w}W&6Q)_jb0$ z+(d<|#g10W%z4c^*``Y@+i^etRZQJB-tV5dNj!KqSMWCp?&3to>I3x=xN9Y$N)4?W zvaJPY<7WgZJCOEr(ajJDis(MQxEW%KMCTE9B{mGE#gPTOlBi3G6Y4-6KIV{b?AaEl zc``gT@pqSOSDN#+7|fV+?e}xPemG=UpYeWjucxgeJQllI0s&0EgVY+kZ;yh+QoLx1 zzTi8K&8*Y4gJ9tsoV^K5DlT-`k!CFv@rX@DA?~x?^4lrk_I)@F1q!Pkg+TWa3^WR9 z$ljBA(5p*j<$A-u!Zu^EZ8G*UoCDvz4A}XCr*|%aln;IlG>7#O5t4})r?-!%LT=gL zz(nZqx}}8leOWrx_i3izpY%e*!(+1|ek_j7K1u$o3HsXMG3h#f?w2ASnbi)d=}Iub z5S{d)_4?*a;DWUO9F;U5m@jKO)xdilVb{9vkL&uFsB$NUBskPV90&F1pWP* zV5iFd)(&6wp^j@!B}&(<@rohR?sAd#5CU@lkTfRtF+)6URQ{J3lCcM_S-E^QR&xN+ zQcH?v1wUM~zoxVqqw$qVT`ivoNo+4o}gcb%%cSlsmM`)bf z()T-CxG`tYM8Y#vm-lqkgZYFV|59Pet`xuX)raxKD3-N4{Ds@Fh1$YmyRCDO zN^IDlNr#*-ABxt&MZyCnGj&8SLWKl<3U~M195i*ahZh&(uN%YGTM*oR=?TS-TDsT1 z1(kpt>!c&|xApKjEqUKz;o7w=TslfL;`a(xE|ox{(p?!WqEQd$^Hu;2+yu5@uPw6r zkoHtK4cShw zK8#kZV?4Gghuq23aYHycNV_ASkFM_x(kQv5O}ZkGU5}9P!=jT6uJG;1CfpSRz8fEW ztx4>=@BA+;ZHr4kQb^;SYI$3q9N|AMT_5w&(H8gYOIFhz&8vEAg3%tfuNUDLP<5q7 z_M{?;;i}i7kaWaGq;rsHRM|9N`R={TuV$QEhBXfEQm9lf`7@To`=&O|w^oTA^UbPsUcNnLITqj@{hN|B!mNOi<@U14tN*j z2lG8Dm{2IKZ!~892F0f=B%qC-V$>bag^A0*6<>g9ufX*NNj| znceY*EsqMDTl{zgd@?%~{qsS}e~-}Almvo$*;DEXHUKq4yV0(Rw6+xOofA22s||BS z+95U#hGH2lwGro}Er`LTepa`9KwYXz^B_%^Cru*0@ZR8y!p?}Mu__6&nY1kD++rwzbTNLDf& z@WyHr4@lMf83%{yqG_C^OTe$j@eja>tEulOPi?E+CIchfSi^xvx!%VbDg}CQ#_4riPW}>320FCiirkZ5lc{>v=8NZRg{Cc*7JeJo})6lB2{1()Vbkaz4U47 zrNoAMhk5nCp!~iHtUEyB{qcD|5Mi`$F92t_vQMbigHu?2&i5&_(@f<-mGa{BQK||4 z$>*p-^{AlQDRCckeTT*9vl=GtSJ&470K>wj$hv^;frv~Bks?snDL z{`YfjtQqGvc)qmC*=YgzV1>e_h?IDX*SjE1gQPESqYN46+G=BDWvbZ9arw!o7pSZ9 z78xos;I7M3nXl4qD2R?_A0Xp*(GKRWTt$>= zBD;gYLQh>EsD5NI7!#2nT(|mEQq;gHQ-biw41L~@9I~nef094&KozSW>+LL++8L_U zkR-P|@8?@`5$_q^2DVqL+igr}**__RQ~qGqG4?mUp)b8Y?ZCyvFR zKR@>y!RE``G8%=-ZA0n~-yX!(XnayDZE@(=tWV&^yVnn_HW|h{5A;enV*!Jv%I@2d zWep{JnQQs}g?F&gwR0_#f?S;?eLh#XRdQy#ZoA5pm28hmk8hjnFcVzadc6d(9(sI< zQu*I~Ri?$QR?QmQn`v< z%i5<2vf;m^ZP!tMGK}xgwEwHiGfpglL)z2P%ogAFRK3W>u)6 zHe&J~4dgz1Lj%b=F-hA-^+mCAZh%5rO%zebLmkE%O85%Luj@Pk8PAg?)$?rRhzZc9?$eJP)UY~SLyp$e1IjkMoAY}DSjhjpQ3QbHouY#Hk< zOAOrS|qgfhv%`Fxw}pcnj#T;d%3H9R{9s8R?QB^+KZ;&A*RpX84yN%z^icSb4?>NC}p85eAXhwBxp>b5R6K8MJr$I|J?c)qCifuAJBF@7YV8|@BN6}xZy zd!q=I@`O=M8N0Y~v$>Y}ddmTd$m)Kq3psD+9PJiLa?&jqXIuZmJXYC|uy85y_r);9 z(yh-u7U!JFLcRRfMRCvdAo!iiIV-b|q2;rfxI<+qPkE`sQyVddssM8SWQ*Hi^iVGn zQ-ho+KB@>wW)1B>Z}go#q{Q7ah5!-DbXi+Ipm)X0S-N)wfZ*YGBd#1o&H^GUW+MiQmA0_Z?X3N?Je_i; z{epwiF(vP22P%0~Ne7UEqeSXmdEE@up4ik<^UNt5OwYU#>kyT+c4WQ!xiw2-@g>&N z7nLt`A$g{I(no-NmQ#F305w8iJ8(-MwluHdvc!YxvwCoFSNU+CL7PX~TwgmFRiWT; zZg<&VlrU+Wy`Tp@oT)7?;5>p`vGHDD5a{!cBw!R-SqIfBqLQ3#OhSs9FFUFqwx;5` z3DDLI_JFLg`aZsP!(HYzQFKSahF;DZ0ODu6p9^@{5yQSRx5KzlH#Qf9AZk==|7lA; z!k4x+XY8R)yj@&6@2}+)Jd2XZiYoehffzB&=EsZKL~vXyV&o$wr0ru`b^Jz-Ke{01 zV7QAwbM-}h;3+~k8D-O!^)`w z`@xc&5yc3|OIX^-Fs+{&U;XtSmmio69dCZft^HSClw)s+7fZE@%bJ70Jt~Y0>yt}u zGKF*6>XX?L@hpp@Z8zNLl5LeLxvEi)v~-*E!-S_zNekaAlhWc$#~(U|A`f0}c#kO< z)md!D)KHl3JSzlUsgZh#)tZO?nVt#4mXE02hgQP&3>NG$9*(ViHuT0AXa(TA;OE}x z)LNO1aIAh8Uq1S3T77M4KIHSw;D~!3q*b7hJF}KnogUPYKuFnjE#>xB64@^FU&Jj$ zj0Bif=xom)PGpp(xQ6m0VMW3D^F;y~!M*=V}>fY}S{zUHdeJ@`^OXifL3=;F_ew zH@4T32gvc!QtOrA3D^M2YcNO`ql}2lpJ9)>(U1Fe);LFED*iR0v-PXzX`6+6y;YTx7ckQLn5zCh+4|w=`ConCBjsav4IjRl4dEYbd zY2F2pU`%90ZALF&7~+C|TEt=lx;ISF=X>Fk^cO?TcsBoolIX$oz0y~xk6e6Zdk1vY zNoSVPj5Ix9f^^@J-F>{4T=liuBRKPJ8Xvf|S&!Ff;wQW`ohGjq8Jp?y`;2wXYl-=1 z9l`87t(k8>!U{CK5!M#jK9{SWMLUM|{v;!(lEv$u##);ys0VwA<~y{@eTwy!dXq0( z=HfI(vL1IIh@ID0J2r%C0$I77X*`&!LY14V8rvo0`8&*a1jC<(Him8Q9A72r&MXEDT zXx-$l$K67)a_aB=Qe0M{eIA<9U9;%Y;Iz}|C|u#JRvA4lvKw9t@<1)t@&Yji+|>Ts zN#nXlfl@ZkU_G$54D=)3{Y?~mtuTo!Kv;qZQdjuB{%dP%<2wuoBh2rKTa)S~L?b~N!03eC3{RBUoR*0oFzE@9lXnebWI)v0U1G&NZT!nxUr+~Wtzrs+tUBT?u z8J|s@PDj&Tf_w;EiwM0An%;=@_oIrvkT?!sn6CGSOjVD%(<2Yp8y_q@t^dwEQy+Mz zi&?EhX-fFohZbWOm(ecM*L+?NoMX0N$Y3*<>3DrW?(qT`_;0c`2z9yI15YBDoxupj-*|DzM$B@5@s`~wc zgxz<3)KTJD_pr`Y`lb78sk)!?9;RsNs!J%nI-z*St;o%TlULItzj6exzAS>Yl>Q4-gOB7y{cvN#N_jof!WyzOHtbGQOR$P1i+9@pJirv1Fj|c5~j^c8BCXe zt$aWM2`WU5_x|uU@GA3_clhUzwACT@ePz!6FEGYUwvi(NXhVkbrXxR$H{DG4o|m)}n|cZ%)g$ zEBfA0Qsp^q^F}SQ<|OTX00n3TV&d4m^pt@Q!HBJ4StOUi%~-N12Uc_0pQhyI_^d1y z?XUh}*<&Pxew3DOee0LK@M)@m1g156j2Y>EOC*dI&E+T70nDaO^|F>?(V0(P34$1PYe4bEa`=)(E!k)@-dzYg z4Z8(oI?*NvmDn9STvATLVdT3143M6zLG=kG9=2fFJqF)ge8-^W$l9GeaLR!87LSeZ zkb+D5o>USaATftcJ1wFAO~rmPOrNV+qHY=#p1^dZB;teGK;IS~V9*`qhG86)Y9P6Z zjKs3{A$@kn%u4JAnL=x%N}*HKmdSt`mP<3#(o_B73dIWs2Y578L;?SG_kd6QQTA4X>(m~$Pz5iAJIFeK_5M_}MqoOZSI zAkKWwf8Kv`qfL_B4#pbHFu{3`OXqR{SVV& zK>7c#e2EkP`%pJ@P0Ung{XqZD%}c>=gpMeU|6kBT{x=%t|H7>tu|@_ChX`ywj?G-7 zMc5Pz3+{VGWcQx^-lY;?ybN6bmtWF^pM<{vjSEQTDlEj=#V!t{Ri4Lvm;ow8rx4R< zX@}=h8F>jf`Ki6Mz7f@u;_1QE7q!aj&$e=Q+2>XlKl0dsO?pb3CRx$M9RJmygzu5k zF@h|Ij`kWQ?Uo4MY;hGKmTslql4YEz)@Fyljh|HT`aYVl3zS_Rw}sEOtWT#AhfTk; zDQ?AU_x;Tkv|Na+8b98YICnOiH{W+FBC~FTk7Da3diU9GkCB-9wJ$(UI27ChltEFl zbQ|waRbk$(E35u8WsLv(NfFsX=I5Iz>(MPGVLYUzow#~j;G*l?&5L~lN@7o*wlI9tWz8nnimP2Nx&V3`njs&0?+Jad1 zi|&CwueeA>pRdbh=8vfbhNfZCtC!O0C>v35}_luPWv&K6qpfh2E+M{89CjJ1RJ zkZ+6&9nJ`5xUSrHA~4#VNmG#FIk#|IXe7`W%`D7EI!7VJ>lJu!QDV^R(o(&wqYSc& zyE^CtW5`#b3ckfqRD-AtDCiS^e>bzzf-PI`;`&bK!a(T*HhW4m1_VDHp+1+&Mg1I0 ztJz!*5Fa!57x@~D{#?csE=)?7X0VD#PLlv^E&J1jyTVrJSJe`jf^IHmgq@-|cOlQ%Gyhy; z&sZp;Gt2l>PVy_?y zEKD_Oob4xo9(lJnt=}nj_;ZtkNTWAzA^bI4q;}90+|b+Rz_53mQYk#{C^Q+gwj_|Q zR+Vo(R#XM)qFY$*+_F$l7?Gdcm@E%@$9>dUqbR^IP`d)FTSfqeJReYL9+=Z_NvI3V z(Hrd5Y29L|NGJLk)eTZEF^qJ-*;ZMmcRomo@^o7U5kbrhT)Ebo1ZV^Vv>T_*FATLB z{CsuHQXs|F+^V_kbPapF^^xqCMzOUo%Hi^&CJ_!9vWK}6VpL0>`JS<7Hcj`pt~;jv zB}bDHQWPwP>@G4Xuw~_PEG0BEMm}ppD6Pg-kl8k7QcB?BtqdO{_Wo2dGvOiVXUFZZ zbZb@_)+7nZCI0oZ7)GMfE;kri@zS+tFLP%%sFHuLaLYO)`B1S_)gyC#w|<%*80xjP z%L`REKeR|{S+6$IV9gQ6l9HN4-jVInB-~IP?K1yIg%N3JY_)j1BG6;yBLgn~&*G}Y z0gU!wu^hi9$H-x8eTAO^YNLW)Y2Ks4MLkdLt#e|SUUGBq_2-;~IE6IVB7UA#2?3tK zVi_Sgbd{*^Y<2bLK0^%&=Kw)RM3SYJPuy{X*NB;5KOuTrQBsr;uxhPPnvb>{j?b=FeqKL)X*vO|p_^cx!%cn#p`aViGlf|mOj&hl+0HI zOUu+z(PxGlBI989SL{7=w(~=ETMMCEN`)xhFqvvqoXPivb88yrBf;FW{BQ6KDpT}B zHd>woy=}weRAA&r7kVM(7Vx0w2^3kSbQkHBu{APp-%MH1O?fZ%Aes7x$6jSpMQqn} zGHcbXT(iYj#w%r5<=G)~MF|bIV&NGLvaj!^#pONf{zJ!-9O5|^Y{?LVnlrUra`FSG z$g@=uhuA>Y4;#y47EPK)q}(ZLgWFr6o1x;iVkeUCsK-IjqhU4OA!sk7Tanohrv%vA zY_&|3ikoal*rm3GbC+wpyStpd&4$Ra)9t%o;~l_kyAezC{oHR{0?0Nyo|TH6hsC-{oO}D%^ZUraiJ$ ze~L$I^Y5pZ`>|IBMzjHTty?Zu?dKBkk5D;1>HcUTd0#OH-Nkg~wb1za62-lZe7 zRGLh}2gi(hT&G_;1)iB+<0(a+HVCTt90j!aG7C#s!Jy<_mx#-)S=oH$)k!OiPv!IW z= zPNgYEMP30Kj!%C79N-ZQKHkdC+#M?giX}ythf_s>{tD4EIiWMsFF!pw+Ll+x%>E51 z;H)Wd=Awh$hF@ckL!!1G7c}fFXfqrByAQ$vmY) zvH$X+Exr?C^OgU{^PL3xbNoL^tNvebT8C4{fDRJ>_QN=pcjCK)I<9wA8W;F^()i+t zPz-$2_rKo&1>nB1zQ6zZ!_<-9;eY41-BNW)@i;!lUnckG8tbdi=Ysr4c69!^``-l4 zegni!1>saR4Q0mN!{v!zfBydF`?JTtfe_!_FiwCv-BLt8O8N)B#N$SEq8bZ9?Yw4)g;cN%#nXe?Huf z`WVs^%Lk^gHy9tReUoqpZ-~OQmAN3QID>xmOULc#id3PPN4z02na>xz*$6IIn;K|X zFTkzRwrB8WONa1=;|bri?Q;~r5=z!h^v@CV)>W&M7bunLRKDm$)+{PM@JO4o3QkC(;a!DentanT$axyjDt zSr2f*acD0>`p(B-T>ZB}`qw_jcgaY{jLMnvo0>nRk0;`KeinkYQFd~fHKJ(L=$*Z| z?yCZ1Rm^`pt?1L`5!lBpyM}6og+FSZ#Bb$wx2Io?GnWZ4pHtWEbj}Yn?wJ==kX|~= zFTJ33{wdIjT*oMWMIMk?0(`XR)jM2=K(IHCNa z_Vm*n%mbG*H=*O%A^P`hV%C-(63&?Sgbuwp3OtU9t31<@EM`z;jPtl0w+6`b9oBI>y&Lw?DcS$}%CY`aF_D9{XLzn*UOPgK!-6n} zeD1V>99E^(kVM>EVN;~za8FmDE)+a{mMA%Ep(3lXo z5E~0r8{Lw#lvlOSnvffQl>QS-^%UzvNr1;$6^dm8crsTUWYE!WU!@wcqIsdgcUbJw zPQq6x|IR%}>g#$^*8*-=HIa~(t|72p*k~lXb}{Z%(P0`Hif$||uLGqN&02Ic-lupc zg}jPVKaQ7-%cAc~J;dj-&vgecG*_#iSD$wVi!8uwCzQ(Bt(c_6Ng-e9HC4UuM%6aI zT9&{(k)ne7>00&0BH6}Y>p&`1ck`hu_k9c-l$o9TS^-tQn`#SEhWIo|MGh90&Y^ki za%24k2HLi31D7IqK1GCkxbXYUtMfwnyTu#wRAgBclWD~PV$;p{ac@UpIQcCa7G zVpSjJ@zPPr$IUhG3_j=Cd~PRqRmO<$A~MNC{y+PA5#sTP>}K!d?O~EDE>k9-V=>~| zLoQp^B(aZdGc`2LXsTmO#4o%4Y+w3yM&ZU2+B@tdI7SFtUi}LIB@7 zr;NeONqs>)svJU%FnkHmO&IcrSkF((3isW~w9m}1r_sB@((w1A4BE;_qhW41)XR-W zMKf0VvSRx1GO}xYx7DjF@xRG}51Z1*8zR>do8wPh6*)ElLp_{Ux-*){JfR!2hIXlV z0M({95AA()R^s-J7Zpz23VrU>DbI_CWenyR@Sa$Z(KZ%bQ$6ay^JWxqlB!*viVvoi zDQElpD@Xz=XD9!sJQeTdnQvub%p`I5RLLpKh4gDmgQ;d}()pkp+@mh^74~(=jX~hX zXB$6%He5R?yKss(a^;UAjz%WkN@jlkbRbq$!X#Pv4ttl}>SVSiHn1`;HQ1MR%Z{^sXE(G3G~y{!Wljo>4EF>75vuQnz>Z#*xJ;-B)XkxRp>$F#_K51J6hxOpbC$B zb)xbkbOVL}JZsn&9F7#;-QwA`%XQ<|-8O%buZ?lBzw{Dsqm~mB?EAh@Aii`Fd(9r1 zx|UKrT~sCOp^v}M2sLEAnQd0twZZ!Zp6kUU70*c~OfJv3{=89Lx$x{rPG+oN7vGVb zS#&=t%c=PiJ-%dBR^R0hn5`iEi^EH+maxQzD2b68nl!Xro|$c9Z9F>sgr2!$`8ITG zHd?K>(NTaWJh6wd&@<6Px*h-PhV8^%F_0Z9A)R zno2*S=cv|?B+%o$mWO6O`OnsM7S!?augc^or$+m0x=pc_V8p0=6vG3vhTw2C9Up5S zLZ!$RY=g#@h#2|5&WuVX<|ANzJB@thdIGb}3R9{*`PKe5^SkoQ$&&CDeh_7JsNBe= zQ=6cNPd2T3hHd~~6K_k`kh%xL4o3|ud*PB3sAhH)%9-u;(h}clc(Stbw6rI6WGkQX z5-zla1{;$|zD@VCbd57Gv8YAi#(1y9D;ovI`ne%f=>xF6=fD!?JXt!He@$C=p+gWc zW4Bc3_&NC?qjx*D`~F9{@`YbpbzKYa_mD^j;RnaQxiFL7^p9@lQBEakoh}8sm`l2H z@zsAxNk)6P(=9V&W72#*&`wh=8vOSHq`95{Iz1Z1Y25UQn{SY1p0N+}+_#*OJN?Nc zS;xuuCqbx*So@_EqV~#9HZ^>ve%jslTVC<4EMqL@ASprj0<0-yJEUMq*0(P4WEnF3*M5+FMz{;&H=!-JhYF z-N&X<3yGpyBQ-9-1MRklwhZRU=gx;(uF$)!?uchw`UpWsKf9E?mom^f3}0p!Aa2BM zp)TwiMGQ(koPLw631@xw9klbq*-_G*)A@9x6Lg4R4~~)B3<`gDTkWr&>iLX#{CyG7 zW#>XUa~u5dQ3bUew?;wu;Fv!5b)|xz^83!F@cRX4{Bgp$pE>JIS0ZPc8jpUqlCV42 zueioNYJn*@)RZx-#%{!ST+X-uLE-nnUu_Q@FB&PP^cJ>!J>T1fj}`K=Q-?KnjlHEv zOSdM|1XDJc5kkDDta6Q@Pd81rjR+fm_RaHNU;K6a?!pO};Km~{#XXU96+2yrzP-%` zgts+dn^#|yZC#icJ>{J7!^(WSVGF1t(s6da8k^Ba2-UIT#Z;$D#+HkAzFJGAqo0m_ zNNPkYDIX*37_ZqVov5T;ca|Jz%9GOfxU(k9>`>HBZZ?87+%mA7{tN!BA)e$G*B;j@ z_sj5D)S}w;Yfv;jM5jffRM6|HRfbuI9A&pbJn@x_p)Es^yitR!vAuetN9T zB}2d|Of>P~-X&buzN>lFNtjJZ#uD8@r?n9H=Azk8NArRvcN6HGe2La_B&Dp?x`e4 ziSS0G@lNPyx6@EGqdqU`bdr7L;F8J&^QJ{hCpVC!Pn}&O{XpCzn9L2N1fli#TEujj>L7ktuRQv{9m2lK}_-w^*sbB%6O}LHgRE# z{BTH_`&@2eV?}?t2W}h(%SMRkwj@Jg;r|D9?-|xq*RG4ASWt@kqV%Go^xivG5FsGa zq$MB%QbI2V2-pCD0Ma`sy(7JYf)J^J(1cJF2nmEDgdz!nJ;C?=&RJ_;>&MyGwZFB_ z_`?& zkq(w5#TBgFpX@9%QqPpbN|%Yb7(@xT<&+quO?sw3jxFoP_ZBU3T`LQ_Ab$59lca*; zr5fJ)#Z$7W?|rv-&0-fg)VjUU{z97`ra%3Rjo_?Cp=ejwz-}KW;g@&z1>+c%P1L{C(!3k;ZYma%3<&{4Q$xX z>7VH(0oCv3bLUk=?J&}`<}HM|F1U%}m~fT^M=#f5k@$Lb`pLao#9Yyt5`fIzad+#* z0IToRE=f|mZjIw}B7s9u8HLOOGp$SiR2-sE`eul2p|Mv`G398@FkXEo)T%CqN7dH%t^JrQl( z;3H-dn}<<@h&hSNM`jBeYX#(qm$wh2zfbtlr>7_anCn(PYYnh19yf8bFMqPV|NcD4 z@VBkwZ)m-GtSuZF502Zvpv&r$ZC}xEv()GXJ|C#O&qUVoj-A&_6_5T>)>3E5T$}*v1n2q-(5CfB%M=PJC$%F_f4HADZsewJ}$R6p983SdI+I z>Z}7cl*iWPi*6z+ok(|JR({VKUtgQqiT4mA5z!OI=yEVYnL@nZr5iSaO@*>|8gV%Rw7SmS-r8q3@H$BFt zwGtW+QSl0X8Ocy({Y9I@j703PU68gDvlDS6fm;CcTseQmr^3ucwc^dOJ!Ng!Xleav zpiV|v%WNXgVPJ|XRUgO5J@??d(~$9WSc00vytcHXo{DQyGao02ABvV#dJ$S6Q<8#L02U~7onJVUNOY)jbPNL3t zP5fCBU0`3BcXiVsF1MMmjESSB)irCxoPD?N%~58#v0IvLTmfkd+dE{fd0qjH`TDTU z-p$54f%#ZR{ev6YLy?Pjp7gRf5v>xI4#R)L+Jf!baLFl+DHP5H)?G(lwS?iF^@xr7 zX+sz*bp9GhZ7n1Levazgo`gQEYMarrsde$XB(c2%G-wL$r zUNd2c`f^sh!;Mk1ZLp5HVehSUS^*R74tk*xl=Rua6}CHHAL=I1td~L4&zF3Ud4psh z&wN(2{D+U?7qO4_MynSv;tr@Y=ub6n5x&7Upc8W3VVNLk%nm5HHhOxeOJ1|5b>(d} z`1XXqNqeWMK!3@;3}x8NHP`C3WRBaJHIL$c3kyW2l}(!fYE@DhXewAYAj@6D^e7!EYz|sA@&j?`n(hDfPx_oN+=o zf!OLAUJ$0hSOMWS!*Nu7cF-R11J%9JzPAKaM~QjSC{oWOCPzXv?Kej!zV)eBIt5P~ zVLA0O`9b5L2#}M7Z_7H_r8vH9`PQJ+Q#x(&^%*dT<|xO(DZ@jhP(2l zzb_CyXEjmkD(WJ0@~PAZ1BNQ|4F7BIYcr7!`I{%dJ&y&O3~v!IJe+(>@?n~!89}X4 zmdzW``AsSEr%YXgE-TX1_jM-IT;ECSrl=YC2=uT7LEQohzsk>c;=&R9lrV8?`SL%C&9pki7ikU-|DQC!Sg+rPBB z9lAEFt{@q|{3CQZ=AzD=&~kKaoJ`8TT}~Sh!guEzd8kOYybqW}AEDD`FGfd=L%Tw2 zUJ51_*3CNcSX<3+(hTE~OCsOGW)<8NvcyGE;-#&E=H&y?~-+RVGLp#8NQJ*zwpzDy{5 zR$hyrBN_RqY%F~r7ZVAQ(BL2Kq#1S%;5y>d#!EXU4kae}Mt=2Ve>G%>;{;?NK3r(= zb%!^1qkVjS4*1&ruRzL^<) zur@TsFbZRmt_kf()ID^G=jn>#rUX8z-K_8Fopt0X7S`j8{q+znyYYSV>neK?YaS}1 z!ltfDZ-&OPEzhD(#3{-<$wq6k5wz!sjB(@0f$OcM<{dbd6_3v5LhUCIl@8OBh*2<$ zM@imB3h6H@L5axWq&ejhZl+CST83JsJn2j3!N!y)7wdv@EO(oi)v$+V=Fb72jlGhh zlKW{PXgz*lxFpjlb^8+&u3Og5_N~qEzAjB5-;?m@tjL{b${>g) z@6ynM8V_ZaA6+B~R=#h7_Qq43hj_zk_rB0pdb{+XqQ^BlG-#u4Sjbh-ItYQt7Q-@(S6UKDbb4qcj?azNgcw0 zWDjSWVOko8cxRn7-Tha*$AQf(_pGl9c_?Uu&eC7dZoc~z3PGze?neP`;bry8R$#iTz960xI8g`EruRM>+ zXX90@%fr2k`;>ttB>okDm#96E9eD%gmUj0aEBfF5KwFW4->JcBXO6eprIexFY_ssM zf9s&aVM+yN)6?=#kH3RJ0F(pPi2VasU(6pU=0Hj=u+V;LqpkqapxDL{F*+XRi2jD^=rBH$79_fTZ&9ROg0%R)0Hy@6;dX zm#FCPl-zxG#&z>svHw|XkF=0+v=2fkn zYSDsy6c!4Qb3gL7{%~rj`fZQq)uuKrdy_b2w$FCSCsX9C9S*AE!|l;I>W(-dzby_= zx8N0VJRm0tg=NNmd>%VlJ9fbF48ecfY**%5I6w!(UJz)(I=7{+3UIqxipO{mwUxwX z8=gHy6XTO=IwV1uNZ*z*v^VI{2k zK;k6cv%rfGK}(V(Cd#jpr&_Zs!#?B)dKuF7Y-hm;)qcmb$uvBPJ=9cEf2D6_xNck8 z8n7R6VxH-;-ikmEe!&;ptf)iWbf|~enDaQ4@odyw)7R_D7{bjl zlVcnsXotfc<4bkZqAtnyY4qBeV;+vrc^=aI@m6pGB?&{g-J;ff_moIoHd_iQYe21} zoIYBv+z9R(5JGjA#r63VmKXAyzl>E4=2^Eo{g!G_?>Y~!Ow9SIV`#y+>WZFF)D{=; z`G26rd*KM{*A&r+$tId=b1MZXv7{`G~p7uXnCCUQ3);Af+>EHu}mU72o}>-GY^1=^)fHU_EQU%Gn-8HI6ey25^A1V zfQ^PoOj`eK(qqUL>r@+1DpiL({HxV&OGNE)t>(Om53a#=!{XJz{%{jTaw9Id}c)hpc#;6j<=72n*P)s^{944nf; zLCn!+#`)uq-cmQd%1(_(k^HODBH3WkmYk?8WxB8+lh&6)2Jv==B&)ziaW`K**8bM> z5i^*Vot z)(Zs)uIaS2vKq^hy!li8Sq~&;D)%h{vCU|u11ihBXzlk`j`jG$69&h6ye5c^FTLLJ zNr$+D%~nJGZQq*M4bQAJor2QF1uN-QcN2uHbb%zPuhDQUA7pa(b)!R@gW|#A1h0s` zm#KP7iE0tPj;s5Q2yb^4h(uCanti^3Yd;HR=11ihO~0uVNfY_Z10 zYKd=>S+Mr^b+bEVQi zzWaiG(r09j4T$-I7q)M=(}%V?^+lZwX_+APz{JC!ybV%;99B=+1EZ)G2GJJ835b)j zlv8^2ht??G0s%nP0;&ZZakF96_DQzbBt%?B9dg@c#sHq~w$V<|G>8gw1R3NN5%j#+ z>1dDkK!CyVaGexov(?|M4Bo<*27|bU=_?{`0lHB#A{CLq^``qBZ)dH-k-N3rm{k|LWk=`P`3+>iO*^g5?8cwMPi)7(xj7?i2fg zn6K=cijPI3TKXB2!!LohKb7Bh1A8aAndkq}QjUDXWut8HC8YEwymlyGZF6^PyMq}r z6|uI}i~iLXu}f-DqS0F9rs|`6Y|VFL2FLs1=Zy)FY1KI&@e|IByqQjbKCF}|EF6Gi z#JK*InQtPKY=rK11+Nu_!gLh%YKPxV-W2lrtps*50DZIWp*g9(tK6wlb>|av}^Bnm}v@8%U&Sy~bF@Gunt4dAv@~>Q?yOiPhSG;cmSS^fT zvI=Wl^}2D+I(@wZN@)mt?8Vt#u}EVTAZn2f#`=CG-o)V3IF6COI4LYMh&8dz%tg$^ z6s7@r)f6r!y?fr{Q~rW;3qM60FziY(J4$lA*Wo9I7U~#t9L)vNbTA{ zZtQarjnQY5LsFFnCUAtZ^~fOWAU=HaTbxd{h1qgzV_P+DiR5c2df9<6oKCxT|3utdf|`OVHN=#)JH9;MSk9eP94nnw+#OL*HYbT#zsx%SQ}+c9NKLVu7E)a1G8~`aR(1YdFj& zt$dXjSQw^|4r6sxTHXN%>QNhn{=pZ$czu&8&tB-j4<*7BEmmn(iL>e-Fhh4NyS!n% zexvmc5YaW3E_75vhym>G zvf;S=ji5|{uJcEP2sknJ`+b>kx7+Zrl?=A_Gi@+t5@8{F+1$z_a!3#~BM+D4xpmIS z$=dEKJaauBk9Oiv9X`bFiW$i^vlUaWRPsJ_brGN+>C~lq`Oe=;p(iLQRXCBUNQB9s znjLPsvt<4W)PH@<88syJTy^iY!df}7znMES4*~@1JWIxPpVrQa1xsMq?DIG03&TP3}ZR)$A z=Dc&#>Y3dS=sp_Jp)+99c9Wd!^Uo#`t)e2@5u4AOw7Y+I;t5w-;Eq!IKC5ge5v_j~ zT3!dpwx1@`Cg`p_TIs!_#D+Reu_6v2knP3G_-NC zGQYXKlql84b4|F;jOIBwx0bl~yNPAB!WQ0xEpyPtJPV)a3wIm`+c(VD8c9ch z8%1@z$PN2!%xwU$n}cZFKIf zrpK!}DCJh7ilbs>=fB2AbxJ#R{_cIyft*K16*jNIlCq$V7}47uyjFAG8(5(L#m#0i z#y_b({UPO2LT^-VwZC4Hbi^~KU}*YRN3IZxw`eZGFgBpgyp_8LKHo7pFU7!E_r^sR zQue9jnkJiGeLzFI8+Rg5u6XQXQ@Pes?a~GAt~w7xcJi+^Wc~8#FeRLHdPikNqp-Xj z7Rt?acT9#~r7K2am0Ul^5-~7cl!btnF>k=CNu+|Wdn{Jj5~hfsTO0{sMl^-zsGyu; zzb6Y^;J|Ih4G5-Kz^pykH~>n5X=jW5=47`E9WqYxp@_rMzI`LAn~SYq*Zw8?`SC=U zKf3bXnanxR*Eu_I#tk|u#JO~FB;zAF1$tgwOSj9q&+iv`kb)~}Qa!O`|LDsiVPV~l zfvJ!OL5w@Xt10eJY+NE^fAn0+iyq-Ky_~nlx-B?|+b^8yvo9qZRh4Rax_(SBGX&q`%D|gsx76ept6- zl&^h@u8)dj{w!>7|^1`0uO|`OS z;CHVc;+hN53!iv%J@zVRqO-hgxV#rkV_pCyRdg5=0HKp*=(Xm*E`t1keTWu~LP_fk z`E(~mk-uCOLQ2HjU&hi9MYeCJR_4W#CtbpUgIKM7M;9pW#(W>UvlLMbwv6b#JR8{} z-YWKHM=ZU`e6|bflF8lv0;}q2)$S?f42ffsw&oY(KX=36qH=#wUvGxyaP&?5AHHg{vG$TJR!C!%u0 zDjVEvYxAFCQ@1px6=Vc)z~ooVD<+HQPoZE<>hsr@v=W_{I7Xgo<7>ssw|s(ybkXB_ ztP%31q03ey`l0A@8pd?mzr(R=+VNWJ{z6Gv0UoT83Mg0p7t$r)tl$Vd}(!+G?k@BhuU|Z8Z%96fLein9)z89fu_B0=AgK~ zYVY zapW7|=J@$7Pz>S*VpR60Y}0B<0R40Q$k$&YW78VtZ$6~hAliy*olRe`A*~IQ{o;D` zNAj7GimK?H+V;1Y5(=x{3@qsrr=MWY+;Uc%7Nwj{o9&X~g z!geZMw`tILEEExSt;aME1Q7(nVkR8OJTwr+fUIBhMdOp&Lp!;$Li)~T*%qk-`lpBX z#@QH`YSAoJWW|{=wE(kiIMzI;9|+-f)==9yKHW+HXtMR(X#l8-wH4X;5uuvx1OT*UgZFJm!Gg@wli3!s2Yj-!?szCNMJ-NJ1=F#j3i`A?9 z>;cuUa;?IY-Jgh%4U2kX6&bq-NX$l}3vwSeZ_UG{&oKYJki(HnsGOgZ@cRJ<15l6- z2O^OzJUy6)9qJf)$+y9*A<#OR1fjJM*?B1rlJ_>_x5+{P_qMw>g4n5vY`?=q94^13FgTGoi%aG1 zqFJjWiyXFZSv$TT^AJ}7$MxcTMQz3S48Av_9X;&K3xc2j(W=Tq7H^rA0euZ6twy zFmQLrE4MT0LEX~&g1O-l7Sx9aI2UP1cAcMVUJ+lcQ2aaa+bA0a@2p+q^f?f!1Dr}u zIX8WV6gotum-gqYsexKv`t%+6veqrgWc>B~2$1w{NjsUV>1cP~HpuzkI!woU!! zSNK8?M`TspV^|L~J|TB%#)xwc2qHUcBh+OYSLfLFVt+@?J0_QTtRqMSO?#OBlU!?@ z@vMz!VsY7ERHp{}kbJG&=ernoN3hP#T&-9|f5o4?YLAHe*pu>jL4Ub-OP-}!tz9|$ z;9YxEF<6sLGyNg*!08so>$74!=9)`gfyFTKky}ZK)x#wNMCkL>OI^!}u4elcHyl^C zLQyAR-^JAu%k;|KRpvbIr>*@7Ca&^kfj_j`QQ#4k>tE)c?srvB3Es6$*{F9CLpX?; zDB`o5P7kaQa${#SpIB|#yy&Rpn?V7g9{B6L84q^&a^dm3qX7`vpCh4m$`jk+bpa=2$s5d#73)&KKCnpx<~m++lviJW(>St`U2R!rdYpR1fB*?EnX%p zOt#qmOkj*;?H6rIfLz^x8V-Om^4%slj&ut8O+wsQthM7Kky-w&7eumJ z1q{y5jsQPQ4<@S?Ez4hX|1b4XAuZqLuiH*C4B?rPuBoGEiat1jutjWqf`0y8R&&-v z4!UpfPx_bts>wGjv+8A=>rLnq@@A%+;x@!_-aM~X=6lor2JZ3rVfT~t4TA`BisOR@ zPK3A2z}?&f5C+Z0mbu#cqngMDO-@<_Wy#{#HD}1>sDKLqOk0U z`pc9TV@kVJRKZ#HR;Pv|%sdfRmn0-hIx$ZMPn&MfUAFX12F**!-L(a{Xgy9LGL{<8 zSRY4-{U_92DIiDMRQegCw8{$#KxTU3IH^7lUJeXGt`M#c+#~#M_X(SUomaY z({>lg*|L;GbOQTcFy3?q+r(xiVqF`BO19i`i+nl62$W%xh6g_XL)Xrbt=q6eVo(1$ zuFh;x>4f0@$FcNxfct+dng>q3KkZLq-G9lh@gMH`&ye{)J>-AV<^LWuFHX)*< zO9O1Jq1et~(MkZ%+fFx_DBu97Y}cbq*#+E8N=;FY^Q)0@qH+>+U#`$jHwdB688a)5 zgV)Tn%ArX>q8&4P9{XzkpNKi2ER;@kAKwv#udufLQAT$B>2>6O0pJcRJUrlqQAMuH z&QcS_vQdwxRI3Z(ywY!Gx}Ww6D3b8_;Td#GSZr zhh#L$lh5`XS6dEti};F9Ju>tC3vIu{iy4C*PPTgv-_I_e_u-IzIV7i5LHDrFZKO>X%}CX*p}_$uReP|`MYzOlT^i>gtcU~ zlgpP?4wlwAdJom?rdx7+7$?vzBscSkECrON)y#7rJ%2QW9n+TsHL8aXC z$k6RrAzjk<^4|PR7xTsXh>#^_M61ceT)_1%a%jA_e@MJb{b-&k@W-Q?gWeXcHf}Lf znjEqq?_BTJ;r*ojjjIq8XG+-CS(=Gy z$K^$X8`U)VMEsJvDjC~XliPPd%jk(F5n!WG2Qq-@y;OYOk`23MMl5iZ&>{br4+Vi6dOF(?|-_8{0Y+X=N>z=+7Az3x}Oa5E+q&e-6 zOg>3hcn#xb??oqSN$GSXYrSG!==&%ffErv*cBQnhPFSuw`fVO^1q7HqgPs>X{XA>=4T-X7EWsmSH3INGd3g74ONFO`aUJ{Sru5@` zk6E%+)Txf`aWy^oaJn4Cw=IEGBUP{iOJOu)h>$)fuS}70#YaQg5X6h_^ydkoSnYhp z`I5_gGGj%d^p&Twg&$r<25D}hp?WRDn>SW17p-^AbY@T#xR;ewj4W3kM4V(RklXDn zSs_9(+SK&$l}pmOMd00j=#^A-|JCAbCO(0;*GReU;sZX)mvuypM8bl8WbBF@f1(JF z{Ve+R*XTO8nT#u|kCyY_dIk#Y|AGTPZE+gF6=hY1!#dW*n9ojaD>Z=Sz&xu24+C`` z9mg!+>V^U1xAqdutjAH&(f~z*vE=ymySy?li#91V zv`c2RQ5A_HjSrz^Cfnmx>c@6AT|CmuX{>98ZXDaQ-wfgCS$kg=OJY;_Q*GcyJDtHp z;=wUCX%X%CszSM8^S#n0${p)|eiskeTx&J4P%PE4E{o2dT))-6&jxB*3=lxRGI=F2 z5mCXLYREXqD-Dh}F{%;E7-47?|0d2$nU*CX{9`<)Ea<($6SnHKe3AeU2-Wku0qGS8 z`S360xKZBm5f=Dq6>70=p3j}M{VJLZrrCY_%4F)roql?}GS zaN`;=+3H}4IN^CGe|1Pkt^J}vLTKV8Ru7}3E?_FzEn08eyvzG&KWTr#c9Nd)tnKNp zXL4PV?>0kiG2Q-|jV}zzbKPq{Xy4FTqtzI)%lq5Em`mTY$E;pNO7+AnS_t-jI+`ql zZ{0+k0UvAwna8+T!)M+xz}_sJQ1cX0<J>002l!haC#QXEc@lumt+OgarP=I67VusZg7USKA zUL6+@b9tgMo?z90_Lr)L*G-f;eeR_EK!VzoS>S^mNh@9W9CT81lctCAM6*YC`(n49 z09ZB|3Xmy^7joNLz0YUYC51?l5Z*LyduOb|X02crdsR@Y8C%YdX04?h+Lz5vdQB`| zwUc#*nSf7Yz=f5Zdngr4&{Tq5IoO$t`CX>%5Wp=d`82Zk$ z@!>|#7^~`yb~}Eojn$Qdts=vDd%9bt`#10T7a>|dwQlUZF921iX_85sVp<(n$SR8Y>>jjdRr!t?hjIY8uXNzf_a z$tBbEdtapYH|US=sz>fs5YnUeEcgQI`H~sEeGm$ziWo>CknG?cmI>C!S?5RFaA$V6;%@S_)G&< z`yV~>`B4PQk(>9=$Cuv!#pRcWZ7of>`1yJ^TGK; z$3+GjzPFs;Pn=FVb-#q;!I{hEFHcZYgIVJC8_iP!Uc#^1zv>iaA~(ONB^Vg`r0eH5 zIxY@OnKkbpz6@5L9^IZ%F+_UYJn9Di?uQGX2WkGqR1JpQ;(qz@(x3i*xbRAq>MqaV z@#t=GpM+BdtA99l;k;BmMWUh;Y0haSVYC?jLyL@fbM%Of@IPZDUBpw1O9Nj$YFpO^ z&sshQzIxRD&)*wy>kpEE1D$4J1NwN>{?A{ebpOM8=j>rc6O8P%JLA(<=c|0sk6U6m zer%V7($Lzp z+{{FJP-+Ie+ON1zi*tRQD|o><#S_Xz*k1DoV!c{4mY)+txn`a$a~;$T*eUc#+nCL( z6h;{Fj}xTo25eGw?vcjV&;H=gn2OyU?>{Rxd`{z`2TqgZZ+J(=S#3r|ms?|J|MqX0 z-xF&G;d4aI z`E+o+2wL<`n89JKkSevM%4yzj$^M0sb$@kc!$kvz&^Z{Z>)n75KGGU zzJl_E$JvJke9xwY>En#Ceyf6MYfZ!}u9~x%NAqV@kQ)9)^9@`e$(GvVg3IL-A2?i_ zHu%%uJ$=+mn-xR^e=4TgiZ?yMhug2J^3hHX_)tz4)2(9jvQ%o&cv*#;{7ljG_9MU6 zp~GvX#xr^~Bu@DR*zl04b{D!PHU1Yw0Vv@@coW>)P@U z^_0MEm++3q%QBG@Pum(u(D>_nl?Kg8F0E}XIh2w3H`*-C42gHSZ!C;i@j{ylun#UI zVVk7dlv@zvL#0jl1?+gl2J_nrh6+?_TR~g^f0>%omXfQmeYWS!6K!O~sJ_oIFYT|n zX=CTSEnA_AaHGBEDG2oZ==M^p!T9#+!2SD3|ICLjWfP}8%QBsQEK8&FHV;Nxn=eJH zrVVJRCDjh3Ucuyfs{A5puf=+}F@Bm#C1Ym4O*SsKMo?UFp#xRRhmW0g%K{5xw_>N| zll$YALT-(NAj8%(`uR6Ym*1E>TMOF>Mvb(Nap=RA_Qx`UY!GuEae=HhxPEttf-WJV za7_&}j+M!8ky6&j}lc;m5B}6a>M5v=x(ot;hHz^w0O1Mn}IE%uFnca5Sy2!E4aWgElR`; z(XR%O`p?1)siobgYsCR|D9aSo^m>=F&PJwD#@6xrPq8a_YW#8hp zkmHTT7}$bHsV-PuA7XUikWb$&h|r5%gSIkDC?FavDE4Tc@1v~cPNVR%@J+0*NoMsg*;K{;5i9qDtGT+g*h+f0pWu<(J;J@N zvaTM1BAaJ!L3u&sMbMq-L=gyS1XKOp&miRqGS?}8z!0MkVWKz^9(Tj_v6vL8rR=4% z701ev+gKrtB@-sXLS8@#bx%JO&`rw{Zg6izLdyX*q$h3nizQP zUFkG8x9#AOw^=^QK6f9eU1qy{EgYy5W0t2M;`>E4x;eqanQd4D%!#p%Np6+I+LBtI zl&#IW`*VP2>xrKi^v96XD@;q%gq9u7-j2m5qpf9j*AlRirGmYM!$z3~<8oaR{K#jE z+Yk$9g{b9*C$8lC;{Y?8@vDr`qL2|xoFj51V8?SRdwEvo!X5Ii{~E8MT8Oe-SDyQW zRL-Kq{_pq=X=34z2&=2>ZH0l09few6<5e;(J7F#s$OV0skSCHL7Y|St_Qk&?CD!{OZx+I<7E?J6-+|69^b) zjCcq012w%XAX}QBii*PNlN3%!cjxo(qEEsL58X|4K9r9hI-VFa`cUrd;cT5B zd@PC>?aDRxR7_=Z`DibzTInVv_k(y+S=2WXq~rF$*RF!IK)EEIe!8co|8$cIZsg1K zyCm{{f7qJwC?s@7cq9{w*>~qHngJimk^pmzdKbnyt#2{6S@)ohb=~u;yR})nT_8v4 z&6WYXxl!YErDu_+g;s?WP%%(_6(e6&8lv_&1>@SLX6I!bJ~L?_N2V)gpj*myO>cX*hu(nFqA;Ema#{e{N^QEmJ8-s?6t9Rb*tL<7vo@Ra zvJ+;E*Z4Tl)Cv$&*;fTbmGuo59cZra!6(}$>qreR7yEr!=L^e;6$lrOH?CzFekv4> zb>m&x#V4Xw>oCvF(g6h&Le9kqhqgMNydtx zlKqA~)xs-CRfo=-c?q^fjW2~MrnXMdEpjRh+L51?a=*+L5C0B3Q9PgoNY~0yPW8TG z%WWc4OK#WeX2Y`QF2dtwg}y=ibxfl=oKr!q4X9ZHtMKmQ4n&<3>H&lk*poWBhtHSEa@sjK5^^ zG_I_|7Dj4DB;Bx3DcL?S$*irPFZ3P?y;DY;K6f1=_$7kh{j*Vx#U z#CUOo+&QoJ9;7?t@n$1Wai_V9V0(J%4b|-g;y? zA_A7zL{eBRUo4eE_DGU5H27wh(};cYsF!|gum2HZ=dCEl7y4nh;(1Qh8r z9%^@VZbJB$&81c0Bq*5JuDD-ip5zSuP9gYyfzXD#_C{Om@7A`85m0h-3BN8&m zd;y!XbhR^HY{SN2c3x6z1}Nm`VlhE%Wr}~@u|M@pxmu->+Ex_S%A>@=W4vn6EW!Tn z)jfh@UHRF8q$m9qQ}{N`iFHSm8EWc#8^z2f&`>b{IC;O(Oa9Qx7BCmGa}^ zqE3D>g6S0#KCv~@qc03S#KK_Ov)8XP~t)DqX_npk0mV=(PP{o778&PK8x;oeTF#~4|n2LReEC5~_n`rZ~ z+p>nW+B~^>+f$?{x41n(w&~J_s;@MeG5Rj1hHc+fqfv?=i-c*q{0$*ud~G6px@t*0 z&3oJi+hC3PG-ZrRUCOZ67tYMDc35#bjMHvy2*id51*@qL>DW$m@B9i&^@(QP_gAK9OiNok?h%3Vc9rksNJaV%b#$3HvNXeOD`T z)@iLhzz{#Pr><@|Y!5GguTS$nJ>1e8`0hro1j@qSNc+IssZv_qS5@SW+JxOTSCm$p z7}m(XeY>nxVmH?VsDxZwEZ>$g;24;Fh}}o4w*(*@k+6P2g8Jd1e{0#ueqyW0;>W%y z8>j8Sf{wtl@eCO`kPLD~c?HJRQn{*NHXBNuaYI>LJi>-e1Fux0Pr@WFGDj&si9hLN zqqxp&S9)vq#+fEjHhgN%2P-5+$tBv6^=e0rR zzAs~OfyIHZtlgL@tgK3zQteMTFn_D8NS}f2xiSyh56@eKry{Rk@bO443sO|{D!rUq zBB<-vzc^Y`pc78I?oxB9yAQ6=-vHHb%qUb%-%KPMw0-TrUC)L5Ho+0+71!Z3*d)st zJTCWYdH9jeH>C4dHcDb-LtjmWM;zRX_(fkuqp552y@KszVu>2<3=53No2S3~Ff+~z z+yx<#LtDVL-PI5Q;yD{d8<&A>&0V4qDxzajE!s`EN0^9b+s(3QXe}z!pLF0F*&W%Q zO*vbEszaIdJ`wRKuy$f|;%tFE&XribJoEhqjKO#HJPc!Z?H4NFJ8!dC+FSH(2iyg} z#}#RtSvP5ef_$LZsI=?VhTh7w&8(WLbJw;mU3{B-!CO^imo&eq8a3MVIkngfWsR#+ z8&{ha%LG}pcrf2Pf~aNizo9wL{|>TsuHeZ(qt;gre&gD_Iol|6X@3y3<%?q&cKOv2 zRMkG|L+0T2f8n^hEjOFTag1qMjx7KHKoomEttP90xS0bFk!y>q zRnva6l$qs?-*TDxN`C~-eYC8OEE0Tbl!>)B7hJm4RyW>MDgCuTJKmudxKSK6Y;k-i z0ua>8kLiMg%nT^wKvMXr->Q3CRnw@zy^W>UaFps~%XU|46OcManeOmZAi4YO)Pkfq z<+ySQ;dXZG+T(z=K}C!2;f2|9Vp3$?K&$pSrVB1_9V7f>lJZI%1685~Mmij+Uv|g( zZ5}l4{jgE|`M`cnSu?ZzVF7X#*@Rn~|CXUf({@G;Gaabsuc|qnxwfWlO`Ms|Um{vQ zTbsh9=SOuAlC8zK)}4b@xql|hrzAF!>&o^0bk_Hslc>uFrv}jEX62Q7WNm!N@W4Jt z{W_OQ=JI|5PvGtg`<30t53&aophLS~ed}jk9v_aB%_WybNrHwh_*FyPmiLSN%PoS2 z;XbV={{^^hK8VSie9}D$SNz2M#>A{F-9wzB9+_~)?yxu$~%Mtt~}y3KLV^b^(ZjcL9&oM_P``1iEYC20Oy z=_2b)Uq7cF{Neg5RZFM;7F$98C2IJ!-%Qlt4P#$JlI;hVr)8Z#Cb9*oSaL}!)n2oF zgNX!|L)ODSxy37iL*EbX|J--%@JzqO{pmV1Zh$>}slLK@*?IEW32-yHr$27S>8AIP zU}hq@81%7GbvkjmvGqq(8$M}Wf2m)l>E*z7EWLTU`lP{3=47JWb#%xuZ0YRq7_90k zCa&x(II|n>F6w+T!OtU*%x+?4JY848y{0?_GonCxR=c+^c*O)%vh!6XOHwZ484JjGg2EPZye>JviGKXOwnd!^ZAO$cY-A~8y_BR4iLR{P{3 zTelJAsO%3L&0c*GcQGzVt4z1LRg(-kvOjcIN^N*kz%=u0g#`tbUK%^#;^*|RVP$J5 z7nyIn`CgTQ61QA9W3iED3@)f!OZ=uJMlo41%XP~zPUju#5OOJO8}bV%-`U+#Qy%r; zrGWe3qw71Y+QbI(bP`hFph~-VQ^w{D0cAZP*M9|2S2aid1R)kKqZHRaHno#*NFcFv zf5};OQ;ej;iI2UNaNc$M)S##9rvd9qCcM;k(i^)Ol|6IAT?#e4H}jy&&(KwOb9_&; zsfYBoQQIEawdslK0>bxJdBrk|<)D=XhU_Kv@6+WBV6WKJ&efc#8n?M-7AH2|OUenV zn;5arV~8c56@Z)aCqm!R?q)GOwlxW^dX-9cjFzKvkg}hYbNMT**=Y}*KaDOg5+AOm3eJwDX>xw|V!HJnPo2eH%jXuY#NVOO6BrPF`Yq|!cn zar%P=@AlxUb{6HTFHLhEJcD(nD3gQx5E6^L7kF7h!mH1Kjmoq_uadn7TUBT8#?tAKfhvD;ArmnQ*V7_Cs@ zO*Li5(cvCIFfz3&WbYU%eyKyb?z+bbwlML|J9DN;kwy%iNH(mN_5(vc95l0>ku zw=@e7X$dMF2?A0>5`9rnK!QT(Bp@Y_5CVh{Nj=NB&%Nip=brnVXW#qr&Zm%vS+nw= zH8cNTnOVZ)ot;zcbo1?(ECXQUpTi%MapVw6twm^t3xgi7aLr?BxU#OmER1~t3iDUF z8+GZ1uZT38!zxFmZf^1eq8xdd+5H_waC?Jel44Afcx5$t(5ybIJ1EmdPM zQDbDJV zJAKvW(XBr*pp;gCY0vh*>hv3x!x60TwwpV zvh!ueH_0!W2HYPtb?srK&yE_o)I1Umz8I~zi|sS!Y~*k9(Hm(~(dY|Y-BC#f z<;%CzmG?2(S29|O-R*nmbzB|Aqu2tcUX_M`3P?&%?b{$U(ibEbpH>%dXTln=aEh|` zz{BP|8QR|=zaw#=%!1Y&v$+l-gTuQ#qQd#p;Ku4=b;&J&H;Ki_xrj_^py)WNp}E4C z|8!($`)Ho|T)YuS^SOK!1_WMNtn%fx#yrqWAXX2k!>4cK+P1koMmxLjc|!PlO8Y z7b?%fs^j`6+17)!6rp(dhAqV_#CPk5Z8?PSp{}#v?%Q2unxiZ*KFWhJ;^?``ye33d z&nJK!85owf^9jqNsX2)-aaXwRw}JPU5buZCJC+!n;)U1clq%H(FP%M^xnTZ2BVZRM zfhpuB3dWs-3U1Z1E2$peCX@|FT?#4nf|a(Rre1#grF68xjp~hm%!hykix!z)0WqLV z5E0K3vR1>hVt0y{riQI+C6lDpkhTViQO}}oZn-M z=Dt)#{Txkvb2NwO7s#{V-=BPaM%A^{(L|V^@=($Mp%tE^7wdO4Q%fkws4By$csI&3 z-dEEmirbh=fuAk4f$&8X1rK`ZE0+&#uy_tVcNc{&tZu&1&> z6+lnOI@xLTxn)1@BHS+0>kGIS0#%YQ2;8ZxFc@5$t56h^bWC|{p%A$}c2nUg5V@f_ z?$~OiF>=AP{H4>-#oAAmt8a!veSK1CZ_4#nU6mjAj3fIC#!i*cb7}oY5iRy?n{kzU z^jm2KpHF*OoA$`yLi(@XhV3r5+%|hJaq--%FNlR_-QLRP)+27l>Oki6Cgj-mT>nzo zCvN>@`eWmWYi0n6e8Gbnz%L=7hv@nMFU_$6Pmzen{$XoTRzQ6oGL2u4THZ zrRZD1ez7M07ovCmOBBZ_|EG5UYkd8;RC+nRiW=eile_;?{HMiqJ^#gjFbn)YZuh^& z*MF-aK;TbU;UE^n$(Ca{&IGesEfc|tYZcoz?yLZQ2ywvStNmz(<@e{3FI!&MEFLf9^#ocbh?we~!_yN7I^Ws{t2y8uH?W}4hSh&!F%5b3c zMWi$(7%ETiXMU!Cb^TQXrcRx{$xO0Y<-Z%*8-lh0o=<>B((a2D4WWw-Y+mc}v4RIt z4~xdLrMdX=LY!c3X#%u0TY{Qyy|5cNFK9D&RQYRj?zW%|CF#8-0$I6DY4sBV#f9n9 z*C-h~y~m9EV$;_BEJv=Z9e6gbI*;H9wP| ziuaf0s*$%KqVh9iV*<~x$6B&#&6uHtUcnV^v{_ec^_=PDp)!khDys3Qqw&+G z1)IXa5ViL#o6!PY>O?ECd~VXw*a%tLUgZYY`_4p0!F7YyGzmr>bL4M=*E3WO!brCw zJ;oOqw62u!0~)MiJA_P+OO!-w3DrhP*hcPC=6A!)>4M|vdQ{+W55=O4lyLpROLYFi zd1wJ;(=3+Q_HvEaSv7VBIbH0+9Ik**)x)$#W1r*T(*KTLU4;z;f$ToMJ3&&nS;HDlZ1Sl0Yq@07AHB1<_ea}6?5vw(_vIbfjRi}(a;6zfDr*Dj()!o-``k?J4N&))!3_*@uqPx$C~Cy0DN@q zMy}1e+c&PhqVJ_Tn4a?~MuaAevOWyb`KK{=Q5ubK2G4?R;>xfUG`}$>ni>eRN?9+k0(J>a{v>+Tr!y9HLdcW*4<7 z4@-(Y-&^*q##EhUQBLi*%zWyNK3o__D5u`gM`+zHO>jd|p1BDM-=I1YWPMe{;{=~% z`CD?Jjl@!s6?$t%fZYz;lS5$+_U{chkdWu$>u%AN;l65(n1_Cy-WiGmz(o8i=-7Lb zWOIZ2_EbmQUXJ403cTUZMVEo!6h6g#Ifk|sF3B{M(+AmB4dB6a~X?mtJjT*+-RFc@NZr}xw! zWsSAzEOL+nixt!!7i%giyi(Q9Tq+x(kq*;S+awOvU=p52bk$Rse@b^b@mcQ02Z&9} zslLFw_ig$6crfZ4rbJKp1}?A9d$JPL>G%1sYtu!kzyg3h9NSN-ktrLz-JTiTve7$>hjtss#jR&=-jK zQl_HQhZG)q2GD~w9S<;`q4D|nsM?W>FK72#$L{#&vG>&bZDtV)xT!p!Nn|5Nwsbrm zGIjiIHzfUjv+|{*x1mnd_>P0G7uvYt6=RcO$%bVGm3m=-9m*Jrw$orA8FOP-g%MN< zVUFhvZuZ}#(%K$!vf@VXc)QHGqUp+O2m9$ZBHlO}pKr2ZNCD<+tejc%+TSlkz0N0T_+$3YN^D4vGgQSr&H4ozb=ij3blZc3t-dGQq+3n_v25(eGEI&*`1<3Q`HK z#lF*h4=`xjkFF}OI!kTZz(AlB zN}|w_Kf=^S?>3aB3U&HT*p+ixVF-VV!B>r>3f5rT=%Vb{+^5r!jYqYpXO^#M-`KoY zi_8~^3+>rl^XcMTdbQ92HZ~?~1#xlIwAzM|zzpZ1Wp(wBaVflS2#eyE)gy!K>RXQ> z@$k<0wpVk9`vMuNQ~gBm$(gGt1CdYo5@aqGstZb;HE+RWB6LH*I$n$;C}Og1w|%{U zJT8_-u$UxE)nlnix_h=fee1rG3f^ejId5|sr+-9q_8&=>%8^g+ctCxS8bMuAUuz^? zu7tPNxI8#PZCkIp;+yN+1pyAatYk=Btb2V-kx;jH8$tT0LSyf_TF+3opwhFI{8U=m z*`RFQ?4|~fYK3pNrm7T|*~y-?8%!)Vk=%-*9l5rzJ9$h_@)^Vh@t$tx_fk9d8qsAV zURk{i-V5V`<*$yMl3nq38RWNI#?V5rrcvCIJVi6V39_>mDZ&o)wXG5Agx*tDJqPZ% z%JeC8YqZr@YenF;&2qh~>3h+EV}$r|A4jk`F^6bM8J???-%VdE~$LFe09}JB-$~=6_RA&480iS#EAN3@LI;3xI zfdoT@A#4LDFp`8l3esZ)#(w)8k{vzZm&FAXv($EMn(x;cG2 z#VCWWH18!mW~9Pg>{X-rt!*|vkCcia)eN6G@oH;K_Qr!N-hz-8eM(cW+5+A5t){4F z;ZmQj!%&$&9eIDQKz_}3j$exZt_R(JQsz*%1u_OB+;?(WDOIlb^%mRIOA+sM<$AL; zRmf-hi~p3HY zJ9T1EGi?Pi57}`gTm&s)V*9(Vm|4CW#Au>ybs`Uv`_%4K76d<~7-%yxYXp*AtgkEH z#%W}-?g`8L=PmfcJ^}5|h02v&>OJF*m}8-Y_-VJN+^QBuW)-t`HjGr(=F9obRDLPp zFtv&8D`BxNFjHqxy}^*v1$To{3Ct6wZdq3;vt&M|cMs7%j|GMG0EhjtIX$bE!$MSE zhQqm!lrWp#Kr_4L#9coi2VHp{d+fmeQp7e{36p~nJ4K@`No|w76Vxr^MX9^5Z;A{$ zv>dyc86uuEDy=Bn5s87EPOzwf{+*#ntqCo%hnseyn9H0X-pF@uWqk*1&e$5l#;Ms8+JZoAR2D)_PNI1)k9w;A z^xF@BU%c6og?+eRJz8pMRZyc4(g=(6%Zs(i_O_@=^1~C zm0~OTTj<}moc}Fw_fH#I6#+Lh`7dSISfrUqO$Uj zWX0U2NKXY-BV1GbWf``*5Qs&KR{fL3#{4^OGU9Zm3+TR98J-&XHiT1XOs0S?p=&a& zv9T23?91B=9yLe;=4X{#luPvPSwIELvkVmF) zFzToNiNa+9)6!Pa`UYJIOo@A9>H9nFDG4t>-9l9Pjxq({leoLuc zccdj2uf`)#Gq}Wqy`%T6C?9}nFLKwvd!bpP5Er!rTmFy&zQx$NuaRM`ekUrm{up|C zqdiCx*7@uFj(IQWs+Awth<2Zs1Gp+wx`XhnjQ1OA2l`@90+6QQJ>Uq%3+KEx`X>@+ z{MJ;B028R+l)XP1F#6NemjmmjZU@HZyu2EP|6XtpTmhpmb}t}4OuB!ktPn%{Z%tpm zbR;UzdX;D<`ewQNkA#@@3{yo`aLIOOkfR58Ji44~8wzsH_jd?yxgpFl;XLOXlsx7` zeV`7RR_eZb2OJJ=QvIdNFj;li%qLM<2X3N8@%@;&t!nX;B3ry=*sew?*vb73GcCKE zD}`x>#pxWqfSE}TKD7Yt#?%JaFhd1V9xdZ#3-S2aYEX4+Y39XCUb3_Z)yz?qYK0z0V{(~F7YrzLQrPqETVHc#?{Q5jVWimF{}mm| za>)am3`~(yJ~sO!b|yP>Tjj5pKp-cMmmR$uxZB0<(599bx@LWDLubD#o;FVqElpY5 z2%lSMooN1JqiWJ?t3(d9*e>9;9_K2?dZ%Fz$Az<=NngJL5*6)Ar4suh<3`lcS9^`s)G4nPbvPPaF&exwR(~ObtQ8w8an2#kX zO5AB5VODwyE%W+kIEWQB%%Jot>;(aN&GJL++XEDhADGRD5C6*6>CPS8^qHBuK%R^3 z`+ZfL5OK|e9#kMSkrYn_fFh~1wAO&*RVM#E zdzwGq+*!3Sp|v8$gz>AhFx^n=JL;g=`fJ|jCfj+YC|LfV7bK3$R)n5-wez*pX=6QG zoxT#5o)m1w?bZr1iu(t&O7h7dISGGmOtTW9l!R}^0W*V{zTAwJLhsTlsi%$RN8~$w+9;FgIQV&sd$|Xce^S|Dqd1TWk23;h;a9% zYmq&Sx+eWmGq^Bvl5^fiJwX@lcbsxqxp-+d)^wT9&1D4xmk7NM! z>%&*OBrYIad^M*gAY;SK@73k!MlF)P(Z9R|L@#njR%Oei}Cp_lf{s35#(+R&UFK{sLI@ zI$U8&0{of{cZQefq$Uz0ydF^KZpfV~*~@*Q&-8Vpl!;7vM+ zsT%gyHPcO)M@tS-uV`wQ&y@s?2TESkZl(@4^g&=XR+Q-ObmQ&9ejiEL9mT|p z122ZRr_FC(o(j5Ax1&*REIk3B$LjA4ErJ@;nms(c&eP$koQUIXbo}~gBMH?`kB7&8 zG7f$C4G~&AUOo)Oy&~@MZR*9~yZ*WQ39D{`$5{c*tnwLl!sHrAqUbjY=gNhe?UGvC zS%L#1Yxjm5CpoI$L5@S6U}VMQi#n3L$oxEVw#@Vc2S5sdd65i2iJn!2siKriM6Q*) zeEb4}h~9S1C^_D-QRsr+_G+QExXyVpOglul=-nhbDZl3ty}XRCf4QlJ2JD8jy1Q*L zYt6{xPEP7|k2iL5OV>7yKh@N2WFKU2+)Y@3cn{~Ket#Aia#D5pL*%R2kgIAV_v_Fp zG-L&NHV`**^Z3Vx`1Z+(CK4*6)iX|IQB$kHNm(-==>*1lY;A)auD{%WDHpVnLbLw3nS3uM!mI{7rEWqb+1bDj;YD|5t$K3HM5VTEo+-A#}^z< zTj-5!om7 z7&le5Ty_t$xAxJguSH0I+qrUITX-<$p?BEO?OrybyyQ$Mjm4Xuko(u z=GR(mw3#6#B$g69GS*|S3E=6>8*J4X7-E>|&&ycaP&-P{_{vG);N7T~lyS^QA68*{ zu;t?L&Q+L!>hrWmgt43gVze^_swg%u0;Wkln75N`O>*{r^3L-`L}`&YV}b#Bb+Q#% zK|HPgr^MP#asFxa`Vi#ZQ7IUow(Um^`8i>iFiH%W0AU7j;u#1a3mMaZe~$qy{$p9~ zJ3}{f=fGa<a?vFjR5)u|ynJVjjoj=Se7c6+) zlvvSvga~CRzO;n>uz3n-?W8yp5()f-P|jx&-)~{JxaRUb9Ax-6btzy3X{``MMA3v` zB|!g4n|Fao= zkx*T9K=0ME$nGBcU~_IT|#0=0{ETcGN}aoo}VARrGSnSmpdVMemZG^e%uDc>*u%s h+l$_wWyFZo3Fxc}aB~7zk^&Bf0l)V6-80bTKz4~P03Y_d>fF)c;P@JU zaOdFx;4_cUEo(mxj>Ap6uRSf`Pfi>h{(*)!bS#1$R>pbI$A~E;-=oKAr{oO%U3B;E zkKc3V#tY-`=bMgy{QFnHtGG#F`R~==)q~ac32&xeRruK3$}e=8|Aq05Y5t=*r=|Io zZ%!W_n)iKtm;a7g19xjmiUulklwPtJQdCR#A5t4;ERK@Gz0RoyESmG*p^A1cK|` zFMeP>)E6*c>z|>2=8s6rDDs^&l{TDZ(M+lbGEqKs@?hCY6&`1xMLy!Oxi}!>TYG=h z!)CM!sW+6j^fSO}3CpHiLFejeL}H@HOiElLdE=Fg)XSXRpThRMk$Xz{E_XW9p~S<) zkV>1T^%U34l#@9TicM4%yytYZ2Xm;{(WXz)@V79(A9m`lowiHPKSY+C`e*rwO(pD$ zY1+%Ve*}J#OLj5te4nbU>^I9hTccMqaWluNBtf^_T7o%mFy2$5Q}?b98jzA()zKHQ zq%xDIUHL@Pi`mUKTE6vXL@yWJ-3EVld>&DXAIr8Qkp}UG@Aj4hqp&Is=XwaMTd7KD z;?uUvH_4Fpo9%de;NXesfF@qmR&8d#c3bP)vu7tYt0CeQ$K~x&-g*x7rTxr>^PegI znC|_&6!UUdabRHKYxng0H7;?TzQ#Qh#-Jv;_2;)yy0uC2ZnWj{?%M1y)OcX~q1jsR z@o4mhmV~!;_8%FG_Ni*hu-UtoQt@2QN*YVk<|b_8->evkI&{(p>PFb|lYTnzct6_39MTa;Wn*5;0FuQl-zv8*NR z*e|alHjBg#oa=?|vvPpu;geQgs%5ADUa^;pZI;1OLw|W&*R0kqjX^j53O>a>ZgZ`^ zyu4pFO!W2;bZC#@Tjyem+q<>3&_lAin3cQaE$z<*Fp#d>D~NfMZ2^A{@1Rr@kw^U&2O`n+s_Z zgmb0!7!wDZnwx`YW*oY1J>vUz-*3shUdH&_sque|OVTnsTZ4Nhi@EGdjNsGqX{wlb zM<%z+*Y$7erA#-+CP-!m>t=@2-L~V|TYTH=@$gHOx$Yo|rHU4D*zM*xF_G|n?XTo9 z^HteiUSrk0UbY2kpyXRpr0vZ)8tY6qw#;S_y%~qby1nuoEmQWz7#SrGs8q;$nd43V zF@^$*hrk$cbkYinu!^a2Za+aI#E6HqW{7tbuv0;>lNM{Ta`dZDmNH?hzIg7@+J*eI zGo@AnIKs%9pf2=To>jTBMk#{=BPR=o^X66MdAZ~5E*I=BWTB+huI#pbT!;PH8(}{9 z7Y@Ymg}mg(Z(?I1IeGB`wf93q6iOX5`H%>YH2NMh`25 z1+NPsmUT(bG^Bu04+fm8H@SOE|L(B?fx<6l;*pEM?1wXur){(=K8I7wvuYaf=-Q0? z4H~1fQ$Jpft5j&p224QbYAE}4uzh9@wCfX>4NOkS~Hc!}0+=d}=Pz)rI;D*sz(~-SAb1 zkwLzoMQn&Oj1Wc(03Ad=wYsO%N&sV-V=^R{G%S6f^vqK6IRtp3Y+&UOlNy&BR~V*z zORCgwK{aolOKDSUt<^*LMA6~M-oB~;v07yAkjO`OG2BpVqfAB*V3Ciq$I=ODuGHxU z4}HPkUg4f0y=+ty{g^30mq)KXR}WhnELp|!X{zzGc9iF}+(la~AlYlp#9O3RWz5pw&Q{KiXAPD@o z`S#YD3=NG}krFQMYi{Ee%d7HM7z$v@yj_t>l$%2p9j}^0R7uMc{Nim_|a5z4qD!ot3bSEhhovraW+}?o9XD7TfWfc|c_SS4Z>idWvb`BG`Fr`dx z9m{ntpM6nswraWYN1n_;ZKyx&xm%UWR6lrqw1U$%V~Cp=k~sFn?zV{mxRP7f+H>fjMAboem^4 z>h55%4E8+@=TRh+djHPxqqqo}!K|(Ck~5}odV;!r>6<0XmEEwt>d{bg0V@5(3JmY9 zdTz#=O#|Z`U@JsSJ|#DbY{Ny~S`l}+F3(4NVTEfVqWM>}On8Ym`QuB59Ee^wl3#cw z*L1FLk9$$^()e(2Z5?}-Z_n30RmVPmc_()5v3%rCW$_wF=72)Mn4?RyBturfa0$}n zbgn0)zwuZ8X=OVUN}Q%ltKwrzmoctB0H3D>FRdZ3dpI82n}wBVpjM;azF)Z+@em@y zgU=F{svPeNOpIE4aEn&h7yiiwJJqg_8lM2?h21KhN4tQaq@q4Lj@}#0cW+k__Q|H$ zK{d$=gS|AqIl`(*-5iDx*}w7Cq<`qS+ra(o>>Uzol{7ORL#qV0x$(??w!+0eJr@1r!L37jsa>EG;>L-g zd1#G|L{p`#A+qn9UZj;n&y_htTdm+sRBUeFP!SK&5O3Kwjl?8Xbh8rI5Yr^)DgH}V zE47_-z~n5HtoozLr!+_y#%h^Mr*KdR|A(wla+^Yh#}7SJ$@A^X3f|)t+w`SUV*)0u ziKPolw*d@nSh}FFm;~B{dbU%S(LL=}29d0&7()9&nJeI;Il&^&7 zT)L(yi}1j=(GZdcN{k|GO2pHSXJuC1R`xoVi1D^_j*D6=d$XD};xf@v8B&5q%Z&3_ zbp&Lc!LEE_)&e=`(`;dWeb|pfeev3?YM7<^*0me;kC32;pBgl_)?5^@CH|SeaJ8(j zA3D=i4Mu-r4+-xN%aD{s6s26{DDT9sjoc`+7clQRB5o)gX!%4aQt)G3Sw9~dSYH< zeQtfo)9ZWw64fB-RdSWbe(RN%wVJBLiej%iX{acC)eF28ao-6x-9ADc2^~)-$Wt^0 z+_dXUtHYvzyeD1u7Y|YA??L#cygw%@^~u7}83#CXb5f(h>MZ9Z{?HV?6yp*O-bOO2I^n%<7uiJ$ zoP2S%_R;BTi;#e^EO1%*>m%Qryn4t(5+lfA6`0Og7UA=)>!!o3T&gjiXgNhg)Mf9$ zR++d}S+1|AR>z|qO=x@X?-;pJX$X(CS19M(uOfAo&IJ;`ntN~Y4j%FJ^UNHkIAWVV zydS>l88X2a;$Aa(r3!g#gj)2jg{M1q^9Kr57B)zIPD}__Py)qo8n}am+V%5yql(2! z(H9w_&UM!45N6hd4`Z&O03|!o0?MB&h{HuKV6ZxoM&)5HcH#PTOI;}~l5{ah&n=k2 zlW4J{Z(1mcfH4kQHSHROcVQzKG~%3WKL*2WmVy^i`F7#kL^9xSKQd?l%BoBco_f)T zg~LYzhU~|;JDmekCy)@_#e&u{=k_t@3NcyU8G7kNIR@`tr=L`E1yO|L@|!O7#|=D` zwtxz#Z{`g#GwLuZ82feO-;d9d`dZI(;ApZ6S z3(RzMnL?F0A>=-`yNisTuxkB{zT6|FH;ihMCIm43Ch9d3%@!mq8xu&I4 z`LbB1Au5nVntMIDWPlzA*dksOuL){Y^43@W@Wk6Cnf*aC`kOP-8VHY+$?ev&@&2bXZ|5T-*Q}Uo4&b31W4DNLmf6cTPjUZ{x6*$yi5)nCG#|fD1gxZtn z&-s*7xC#&$rbCT;Vmfp-B_4;b|v|i zI^bJPvNY|wGALYouK^VN)hUGSPYnb(Om9^U{C>G2mXp+tlcX_R)uts@-@Yn9pJPKB z$`zRv&g4pL)6)ox17ePnxQ}~Hx;h=N z=u?o9?o4leTYfEf^wsRa?!oJJ4*O`@M$MsqNtZxF3*FX|o%}de?73Gi>GF?nic9Tl z(h|Mo#U(2J(WL(7D&bc*P+BlMuUn(vsk=Sck{3qs${ngQz!9>Tg=6#4zNNEv=s~`j z@C-(w9hpxU$Go-@xGe#LkMhp8jNcnS?q@5-=h4%k=sOt#U%mEZ-fZGxX{WYvH1Eqz z>)fr~+09=AgnQ|3-?t78k&v{IIAdU9Clu|AazS4lvUA)I!RDKW*s#F-xJnbOUfk$o z$%V>J45Y0;yj(3ZJ9NgGoTlvI9BW(J+N2cwMa}=+rDD1}=_WLgbsRD~{LyKx=GBf{ zbTlt9gWU1@aW4EMCIOE@?QsE>x}@ ztNB&edtHkL8fpt*OI~~f3m}d()D!cr&Ao!l*N3dg&S@^Ig0d^j z-_fa;5v55>aqBdkA$yRzG}LziSBV=DDd$xRYcbw*mWECQlPpfUIX zAy_Nq;H$yUL#?jB^y)9j(yYuF; zJ)jFmaq7fMb-Z)O=_d5%A>j*L8GuTj)Z~Tvwd~!des00B^f(z_hY}mknj+f#vfik+ ztAO986H9Grd6ddJC-QJpUT3|2i}mXK3&?cBafg+|wDLPtb+$vBSeyD#8#$$yFPbU= zdGq?(lC<@)nkiPUUC0+&$kh5}_%Ah=q+)WxVu>oK0F5`GYH`|PoNKzrNgM%sCL&vqZixc&Ile)M^@^&I+~ z`E>TqYY^^o*7Es!YW)q?d}+>6Dqzvwc4|0SC(j7MX7To@PhGljB)VKMF{)S4WsAaB zZr9KkO<`}O-p*Q+QG1Amzro;1X9-(3<+qc=8LcK^l5GzSm^bCL zN%4?%L%*3jWd(?U>R4+&fAP zqoIw*>ury1ZK3)US(52i*oU{O=sY`Ps|~Z?nDUrwZkbVkSgn2|Uvse&*}F%wx9ks`IyNl(!sL3au4K3003>u?waf-{IW%9ul5_SP=WI2=lqx zx|vH@=4nAW8Rm6oDpnxeG=uRD&pzL^E)w+4j!tp39XJ71TrQsn-^r}rQNYTsOf!f9 zsIMj?Tj;NF6McG(UrK0unAaE4&`Hfa0>mGgpxz}uDXZjJHU_c*f}(7UnRoAi8H=@i zHp5KoHk~?R5aLxH6B@qpLXl2^T|Etx5UM7jh>wMV6k6oU^@+(q6g~s1@>=5aYt3N)77ZEgQ^or+O@$NR92n!1|+2x4lNf zHT;No9n@X0Cz;w)Qv}InSb_hAfLn9+kbJD&Lbcjt$R|~xlB?Q6zZ#;^`B;oKJNfN1 z*)i09Qr3b6_Tb=nau@yIuFq(xk7+$0&wwjF@rdc5OH4rE>JPu7m+qAOEsL-v>8NPUJee>Rb2uG4 zhA)=pB^tB^Wo{N67@RoOQd^pGdeu8+o-n8|#`D(D2$d{))(Sgi`g+`4-14vTHk!9V zqApPT3{Off)oKQ<`ln=V9Z$%UI7~OK#b?bfn+D6X0f)XtoGg)vY0ER+>VJ(fEd4cj z%wU-9#wgQwfNv!$QpzYq5djl~{15MkJPb;r2T=-cLq=_$lZg0{aL;@0vNW2=!}0XQ zjo;o_`n`YMEOSmc*m;?Tz(<|FjP^RioiJP9`OHWU+GjbJ%b$D#8TP^}Up~1=;zU;3 zQeg7+iyb1_R~!4Rn(KFThI#QXJ;81gRW_g%Z?f>wAW0I5I*HHDZED=S@c)N-wZ+AYk`kcPvkcW)6S7m_QY`eoV&scr{g{ zYI4J~cY0*9C+Z*+Y!zRo2Dj3vaaYt7Xr^VMW+#GwiM&OkPJ+c zU3c6#I8MC;{G=~?jQd5%!S)D2iKAL_@sBDG6V+BPYH$6;Lt6giEEPm0zkL^BX)&jQbUlp=Z!`i?)b_g3H?uy<{7N*T|iyg~UK4 z8EWnOB~Dhr88}C^z(BI)3^E2{uv5ey#at3_89Rp!-a2mmn5o3L3Cay)7)`0hBD{|X zt9zr>LG02Axpmuqt4?tVPQqyr^Q{JmjypE8)71~b*9d%sQ?)DEpu{4B1NbY3t84N0 zbG2Mfsb5KXtT8E6xbk}~-R7>)OJmp}QoTi-;%ZR5XoRI|>(>Sk`q14@8FCuoZ9zEX z+3jlN&ig$aJw^b)m6gDCV%l>O$l-`c#+V0n_I#ur=eg#ASg5D_FT#XH5 z7{uz;NY@drea>MFY>#%nE#sRy-+gnN}OPq>`Y*~*v> ztv}7d0kARIMIjtYPD4L1uyIREVu{GYE9pTOP=;FyA(sDbx{m%w(Nw2l<& zldBZGwjRq!)?hQ))OT3Yi|kO!61n_f{MxFrxc_Ur3>rr8O6dp# zo__flRNrzCHK&a4(_W6J{=o1;q9N9ywXmoilIik!Y{sCmxPRmJkuFMoH*7d7JMAPv zZ)Jd6NS&dEeE0Dj+Ca00E^*B|$zrR171%cfmgw$~nOrGu`7EQ_s=aB^FFg_-i>-@< z-?Z082Ss<>+PQw-W^|F^)U0ZXkQY-Z-YAi!?-_e5iJQsgs|SYgk{_732u{qFkf1#_ zC4~${zc(N0|eB`CnWrg2L799 z2?SK}XFx0q$=yY6>}bx z3`{8PJo|nh$J5MLyN=Y|w@-JQK_SYhlg`D9l6gja%s|^1p^owEn1nI5{#>OVkS(;R z)+tmj(s|&4nbE-7hDr^sjmimBdWQ_cy`!xuHMFhfH00YC{iFod_Dn9y`;`Oz=_=s? zX{zI&+u@r@+T&TO=_fX4OVg{yhrkJv0&{TV6Q=Q|#;M(e=AKpIb+Bfukdv9WwM3($YO-(xBxJ6}-tgm9m&vp`EtwTIB zfT6~mMc5t_!AaMqNHqbMdu}$tt(l?hSO10k{{Qh(PNnYl88wgVX&WL6h9_#fK?os(Mao^p=>tJ~0i7=X4S4US8AktF zczELNtMpTDBDs4|cj$a-w{B(xBwkt^p6c#5_m@Qk{U)frFUWb!m|BL=@=`L3mI1(I zz#2FLfz^|XB6l5EWEY*?d3x=^=;5mt7=h#)Okq9~D*d_*yD_Ho(QemKB=IcflR06ITJypzqxKU_1yP(1G$tsu_N@dfEI z)___>nSa@G!LzOR)<@gsJ-}}s2hba=S_M`kO`t1XfkJ+7;ID4spD8XDTaz7w8^*Z@ zmq>|iG3pdvfSaqA`eOoT1??BP>#O~DG5kr=?JcsxLe@`{WO_qyjY(4XRlUOyc+q7*NosmX ztY7WxpWE@T9kxvgyUi^)z&?SAyz1W69eppdOf%=&^OG0aK4Ytw(Xy|(eY1J5hiiOL z#Pr|oS^k*;I3=Yx-%+tkO>thyDF;^(DS~2i4!$JqMH_7?&W9WRY6HCO^x=ae@*OA7 z@8i?fyU<;2=$#dmc)RC=a8*emH=wYjgn*Q6LEO7y(b4Vnj*~>M1n(BrE;Ue>DC4}) zr*>4vMO3Z!1B*UB6Ml!QZR4b8F{TJ1$||Bpsf+BLB{aLA#Cy%aik@x0itVXe`NZDy zn0VV&9qYT8?ELFP!^CA}T_`mWSRsozAZmL_4gH$qY$zApHb08?Nem(m@V$z+3;nyU zqm7~(QrdnKU~Cwzo5=q5W{)}C1Ie|Oxe99>tl>Cql3bEU*Wmsr{Ij5)6bmy{DYlhN zW40hI%bhB^miE(=$9XIx$&L~i#)zJVwUw%wGtr~Wbf|GqU$Qr4gw*J~is%S`!{tm? zn1e3A+$>CaJVuPmVCGYb4>I}f5+&#XHD||qesP`gt55XY?Mfm7_81ijVORYH-MA;T zszG88;Ol$D?4qb(;;;hSzx0lA2Jynesn_CX`o#z4qPqgf!z)&8Gk#rf?$Y;k{G!Gx zSOlI%6s#1;a1Zj}k4OG;R9B>*4%Wo5bz;-kbCk?CnLW_Cq4Bv@Fa3N+&||zC5`PJ- z4ya1n06?k`{7Dv&HO zds{?qPIhDpy&Bn~ME?}9+($x8_)-K*!1&~5>Edb-tN!6hds5`i zyk;NJF7z=&$DkDzP7Rp}U+IdCZwnCY48ZfPR#uIhd$WArjq+u51un*1kgF{uaAFzVZ37>fr7RHz z3r+_7cELtVMBH09z8|G>44q+SetZKYX##s>RO*%Fwhnfs9YEdMZvcNu?&Z3=5=Ha3 zZG5u!uvv$zeg0MWDJ6MfnWn?)9lRKOUZSvWvR!bbpl3!Oc4~n+`C(r@_&$%GCk|D5 z$Zt?+;bld*Pq&Nza;Y zo+Knqw@v&bs?;9C+5hGeiY~blX3F!tYIc8$>4Lne&(`#E3_(gKw^^RN5fijWgcA-g zP?2{R5JR)3(qSY36*;fh)}f&#I#qpU$ZNz-V!2aeFPC8&Y;*XcE1s$ylG9NQ(+{?^ zQNf-=WxzZaxCChGje@rfW|qt}J~Mw&mkuaO?fc^9knF?())_Hva`km0o_aufGI6Pe#VjQ@8O;J*Yzh+;uJL?PkL8_hiLwQlJVay^<^lkfLk z|4NRlizFY44LLKt|F%SKHn>muG25qO&xZ%l7JFT2^i9pTzI*fe`g&9sQoq8l&T^O) zqo?JvHS|7awqD)S&*e6s=HEH2E$YW1b$`M)*(@{ruBlV{(}jpD8+U45mL=lUIF8AX zs*R<(dp=1jnta>P5vE_TSEBN@h;qD4{C_wNh%D+6^0kD5!)(f{>i$uu(R*yDPT@Eq z(XZK9+Z7fetnHe|Hd6It_!eHGW!=wNpnr&#CZ#1RlD6)FB9)y}TKhitk+y2OM3pV> zq`8q|r6*LSNia!P<~j=t3rl9gv3=XM`J-$;j;D(=zcmMuO+JRJGgM~Og}&r`xw9vq z|3DO3e4I`WfA+9dY(H1K zQ);jGk1)ptl#vC6-EaceKGA(#VmgwBD!JoaHED73(fIWJ#bhJ~Y=LC?qKbCHrkPLY zlIyzLT53GCyyTb9+Fy85M_<2g>DRG`W1#)FmCV@4UHqBytby;i!+Qmjs_?&g8e=kZ z1H@JBA|>ZS$*bUVx0-7hj*+L7BCF#gdZwc|gS6VU5-TkyLmhf>f=J2j%Pq1r5<<$vgGj`R7i8%s+2A~HRjeC}O40&6&3z1JmujQR9l=ZmW(RxRF< zCzn_X#jhTC6YN8#4%C{uz;ipSs=9_DiBAw(X1&l@ewT%P9{A&hvuwRbQhcax?xf@5 z)8A=9qwFKL>=wq4K3AxPvcrCc0J3{t08}AQjv{|&;j#@jDI{A;bdNz>_9LBpWg&`kH{eU?nEJsgE^e>+2K zWx5E*qwKCj2del#_RBt0Fgx+L;tT-RVprA&^QDjWJy7;F>8V`qA>>n3L5_f+6V!Ds=1+9O3bL{Fyiir4g z=lTR6r&J+`wAl(Pq@mPe@&$qSue^naPko>|=PkjBlX( z?IWfX+@~7Z{@IhH^D!j^>AQCbhyyx!Mor^m(UcP%S!DS4QT8nRvVj#rRoaUEy{dhu zJ^4>T-V$Rim|h`-bF3gusS@zf&E7a!jc(|?5 z=G}rSygtU~+y0u_Y*nWsZBxyE%1j{{t@pcx#MsW8Pe-ck{UWfVw9u*Go zD75z|;t}IRXjbQAQH1zXpMN>ne|w5v*ot|v(S&ejS+w+hcJ7Di5x8Rjm$`Gzr3ANzub|6T%_0x|NAJ-do_@I`;tJ=Q50|0TBl{y- zuGM#rurqsA3&oj~#f?eGY+Tkm)z=E*r3HbbhBvFU9g<~c$JH)yT$lNi(|=Ci$Uoh5 z$Y*`7vd2r(k=J~ZPjtNKi`FNntPF|o=*Q{&8nGNUh^YyQBr~M;dtt^hQ{q9-S^CWZ zG<<>?q*g}DBzx-e$KQurSB#t0Oj*KfgcqwW@8Phq_>;HgB+JTVh?Ur~F+jYk=beD( z@8Pz(s+=2*^izIW5k)gBCCR5r-o1Zg?jv*w62iqy3=c9mnR#k4W+SslwQ!J0SuK7` zj<4G=<(?!~1`cUK>=^y5ca{BKkN0v^eEJhp>P?(N>h$=v^6$9i$Pk5*jWQp{VKT-K z!`@VOhyS{rbJ`-p{mN^){NUY(VIQAqQ1?Cgg0&9&X&?5{eO&vMDe0{Ca)M}Mdm*XC zxz881Wjtttisj+x$@v3g^wV3fd>^1^j(Dr@X=$=FI#q%KM*ldgq(v32e0JMmF+{o$ zTs)~hXy8l&{D}c9v7wmv`aDM9%Y>d? zZO+J1fWFX1&;_GT6REvGi!z->MI!3LJ~C3a_LvRS{~jV7?F6dv9LnX$Gz+8SwhW1+ z_sB)euA0sNs98%=k=MOpMaJ-1$x`j+{$ia=!`SD#7VmT!->SNW&k2OjzXWN@(@(^n zVdPhUzhW-aJ9ZjM>KME0=uoeV8Dk`rUAq|BvZ#tDT@XmxY9BB|#Q_?4{yzY@0StU1 z@xU}4=UkT$ANKRg(wwPyTfRuPC;n@+R=d$X*g|~QppL7^(9YPhCzdYPrlqf;3fdd5 zF*i^BYa};LcU=;Jm@|B&XMN}mB|ibO~Ft9<-PwRw*S`xS)JsMQZL=3_i`Njoo;rEVD7K~XUW6= z9L4xQ;;!D>?9f-}@>#KwWo>|)UuOd4DH~;k_WJnQJoZx+AxLio3!x85qM!*+4a<76 z05&|9mvgI!BS-WrCS zhfhiyfCN27cK1>~OaR17nTKe?TjP`BPw(HSc^VOa5{3z#7X8Q~$UB#4n;!eO`|SCM zF|B_`aH+G!flbcXW^yJ!uDkH+LjY$3h0R!?-tlw6@HT2`~cR(vwe6L$U`%Wa@ z#p1q{JfUjF48zK{R-9~a8e?=bc!7SRSg&Mt2bmS8-5t$lw-{smDR5Y=ww2Z@mK#t8 zH^5_Mb+@e#suNRWm~UW2ze%r4&JC#DZWi}10^WSPyI|M7L2LU`LN~ZwGaDd32dE7$*f1Zh;n^c`zov^s@r zaSMbKh(q!F7aB`EtaBo6Twr>ZsEuMUrZlfoUZK7O`7@Y2>viBJwq{|!)GzFTg#I&XJv zq`qtn4m4KapyIq35ogxLiJdlL)MQsw!kDdohci7ZtbE5TSxn77(>K3XC+yp4#g)5r zFZ927t@DLAuntPzR#()kk=Xf&e;^%H!;5PFyy_)$)@hj-)Y?=E_O%5J@4Diyu7SeQ zXCmuhJ^rpqCRXc2=PE2bG0c-9J;x8q%xqCfo>V%YW63o4mc*|~Mlz-NF5s5|d zzDZ*8L!~PS^$S-^8CHW{IFzik5<*>Dbbg76ffzPcOQ&TovZ&RW(ma?oRzFfTI zp!$iX4ZAyHrI1=H3Y-}sUZj;Id%hi#V7(2ctYv$rF*4xb#VWvxE2M!rb?Vie-FiCn zp?gJw2cyHk3deO$ph~u`f$FTi!@j|%)@Idjm@pSFH*1bhSW+fIn&xqkQK_(bCF^88 zXaQxcUim!BGJc8JupQLizSB7VS#3239) zF0`)6V9}(`{2+tCcT#4qquS7jaIXKtSvh#0y*Ti!-3AzXB&3C&Ms%VXl?#RDEyL;= zd_W<}uHyQ&Gqi^=s~^*-+F*$_|9mT-^R*|k?ZCzhTWtpv-QlDvMEJgF+^>(4xPbN{ zpsu5#W#0T+!;G`G^asXow>swx%mk=60`IPi|1J~(?_TOkq5d2smHJ=51k_-IiXZ6h zHa{QJuk^8uF!OFm{7;HP|HTn|w|Y+8JvC=^kV85#sN)pE)sdgmv1!Y3=yh1rI_DdM ziOUgYna^}iKINT`0Lm!5Eh5*&p)H4Wp`4r#IaFTr1$GXrih?X$25Kyn$PNL{S7Y(189ljFl-keA@ zzv839KKZ5&oMaL}cSd)}*uFM9{NXb3w-(5@VW^LCf$Gy(E8APl`0((@~r{@l#^`I)?Uu27 z58@`e5&{pPH9TV|*19!y@sk^&g_`jkPwxC)a6p~VZ1nQXWabu5uLc?={mBK5I`-r~ zv?Z~^%z>3Es91lw;iRp!kY2~-7D3=d+^5-V9#^$2#T>^auKR~IP?KZGxnUR6x&!kx zo?u@(I&5m~d1Ckv(UwPWMd(NSJ}`)Yny#OWZ2eUBRFsFvS`q3Bei$b*c=<+)P`Ru< zcuOO2;3}|n_%L+Q=BYAG^R%brvhh^tBsGl!eU7)sH7^~r$4hdQTp+y%+5p~wYeKU% zR`&CLm}}QY1~*(5#)Pd7^B+u{-TD>X`&m&|TqB|R%>$|U{hod)!(<1ulFqH4l^jd4 zd4}0zwep798j7n)q*trp(^l*~6}jlgoIoWKLxe;_VqnjGlU}fdPh3CyDbS7w*~fXD zQ&06)QocdUQE=!BF8cS&=T6|7oGbIMHcXuK=kJjU5h34Fly+ zwzWAHDAO%5*&1c0hT5WepQyq6{+qskJ6NZRR`s(1?k4-**N-LV_WiS;U14oG+65q| zaK5Q7qUvfA9Ia=6&-vS_L*Js;8-NOJ^fd3O_}^pR7oor*(#%!ovMds(`c&hOO&@CH z@H{E8oca}fb%KN3s_w#%Q&QmG_vK;e7msGlWbnTKRe`&ugk$<{d#>mG7d_zr^AZ0i z0*gEdp1|3KnkgA_P51ISJTL2S&*`63I8ANa=ugW|=Cxn{rX#bBQ|M4!aEhxvQ87j3 z)IvapmSqy7yY|B9Ao-$KANZ*i5P~)e7Bvj}6NamV7Rut>h8P23rJ7fPpw!|sdJq2S z-SJrs8Rv<0Aqwh^ZZj8({g@P$XWqnyGxIM|B(ELKFHKjP$a2AeHm(lR*v|EImn9L3 zlO21-sYPP>9E=$#xV=R(s+^058I!U>h=q9Y<{Yvl2RO7KZ2LPzWcTPiFvYZV2bd(Q z9N@BZh0R7ywwJBue&g4XDvg(;dd$K)fj*c*($=rd0BuPP19p5$%Y=rwVSk2OgYV#D z@BN!05>2%mor6Ch^d7Ig?)qK@@z0E)H)7G^k|^|wyt!UfCLhNY^dC2wAR1ZaJx}-) zl#{OVBSk#=RK|(=)I1|eBev6Ww?MtFSh|0`3eL3IaA#-^fy_xXX`S%MTPd&1!y^{5cX&nnBWd$NE$P|!g@ZtRJJPlESv-ug2F*f<%`T^lHh0?e*am7kXaA&! zKraJXu>6n1%-G5WlKr7NZHExvUoNU&boY57U(}((>?uDZ{w899)vq|A61n6L|KU|- zEpE|1`trbMg>x>^MZvK3&6JJG`M?pB+Ju!GB@H)pL|Y~Al#pl8c`vJeq^joo?j>`- zjM?ej%@k%TW~G;Z^)ckP1Dvq^!Cn&_is*UvYeR( z%;gQQQGZg*InB)GuchUqv`$Eh{}b?t=Ecb5fv&Qp`RSP?;R5m_AQHIzNztvSbioIW zW>YU?3by>R{PxPKXV*&h{c3)WeHe{_)W_FGbJBUP4>incq> zv|GRS9Ez4c_zAh?r^H`mQ{kb7^oPq>$25hO{?LO4r^l{k$RKQ~26!L*An`H2|JzF* zx6$~47)V0b#}+x^pG-lI;@PnBklI7+7_p;!gCU!mY^6R{1=ch6m>+u2l~;d^Nx2;= ziT-si^{B<6w|v1j8{ev7wY>cr?<~)FxRsyt66tfG(9Q=wihsq~SG_^)rztzD8T??5 zMFj*a&dMAF{+|UZG{t?w%CP?|sWJ!1ZRwO?H~y|Pz00TXFfPx-4VIbtq=P{kU+(bD z`}%`|Mi0j6TrHuxPpHDtH>gZdVhmXm!@Q`g_SE|iO8VrjMsau4_!OLdVcTgz$rMSy zYKQrm1jXxZUz^(49QHc;;oGgl)`6KKRcb^}TSIXnXoLic- zF;xq4VcwzzHxCiZt~bXn%fim>Un7rNYXy>TrEDUxPyU_WFhsQ36wBtSM(@HE%FL%6 zO3lOb5Mpm=Sm9UnNRnV2dh=XK(@gzp_;9z^P`WC{bD>70@cGJGJFkUz@TEJ(7#X+7gZvhFnk5}; zkDb2Dz>G*AG##-HWVzkrjvvs(w^KoAoBIsoL8E_ix}R|VK$Gg`f$#LcIm<0p4K+`2 z2NkgnU zoZ7$Ty(@#KinCkmj84?s+&6TTl}!sEs;793>wk8VfMxa_H!f*rWjBT&+951n*up4Y9|tbZH~d`e@31FMYg?V$B^o@7iMI66o@*VQQvD zl~;bB%+mY7dQd&h#zuVrdA1v3KN63m=~xxbub(bHzcR_jh9{8x3Igo3yRuxUZ8DIi z_p1vZLpD33hrAKfwBfrfXmWU22<;j9{)2rpdGRY3=cq!btu%IYrpoL~{z+%qJwUgW zsM^C0(S=(foh8rp{w~*4y~LAgJ6M9Zn_Ihe-cpdE99o)JX})red}%0=IsZuF=ZC+< zBpMZIwt7Knx2>mcA8bCXS#{Ga>nKY?u4=JQl_dYpoUtrT+fZ%_E~c-ZP2NMcKWV=e_NX`ELr|qOci{w&KhDWDZ!kYq@O4xrP}}kGKCq3K<(tej`v9Iy>pZ;ZQnCONTcUvwnMA7> ziiedii%R;CMzz&mi&R#bf`o$lOr7;~MeINSld4Y>Ug$?$-zoemDBjWYYvSm=z_OoT z_<{XL&wf5(v1?%dkdB20N-z}9kL+g-phjFY_|I1yKPdn3I_}Vwb?VfTk}>F&cXC+T zbXcMaJX8yhfwklxn|Qv0%w2IG-OT5rK*QXT{h{diSFKj;Nw8C zo96e$ZYM0&g17`60|}J40WzK_J-p%yuhlXMm%o31lRMMevZ}Kd+{LP9p3EQo~B46i+ZN-1#QOh1=h~#7Xt18uoO zMQ%f(b_*;ZX%w6xRpti1t7`cClK$mN$?oV4mrO_Fjp*Nsa|4-kli;9=J9u)Ue~K{C?k1NeUMO%E zUYz{)-~xG%sb*XB>EU#c1WN7MneYJlnmdf8brrADZN^dc$rc&mThoaX;dD&?r8x_O zyj{F-&NNUzG>)UNB(l(;FHL^rSWETYlky)()PLn+<($1=DUB$gSCX!1F^k6uz5^Ai?vhZlY|0 z%rzKoDX3Qw3X=78;3fQ!MXVnqRC^5KQxzOg{T;z$rQN31F2R1palYP5^?vEO1yA9( zQXc)cuRti5ZI>p`XP@2bIQPZb;-s)GO|Z$>fR~eYY$=w|Fk8({y14o02*g6_Nt(i5 zYO$4n0q@7-kCSz-YUdXr>5%bHbuq`6qJob6>E@>o3pPkGpmE;C5df>>$>@(s1tNBB zny1k+{P=yjM$699pwpi`x9!WQFr{d*$aR>ErW5>LazgT}S~Y{2Z*wlVk15#_{B0?6 zH`N0T^!rJHyhBe4w!C^O*b&fF%2v2LU2e&c8`FP6lSOL@qxA*~YL?pzqs*55x=lYJ zp7OJ*V74ctU%w#xLyR>vhee(}!M1+rC-nrSWi$E$s>QW@Iz#$GjRopL80Ps#MQs0K z;v4hjxT>Tc+XcrTqQ+;@bJi`1;a@#ajlWsQj%I(2|J1WT*&BkqMEt3+c>4BkMu16P z$AEPCB#W0I9q$@Ckx`%D-~}eHAn|6zIl*W)ga45_T_gxkhW-#6<3l^Tb`H6l#Ce>= z?s=V((n8{7x#2@qT3izfLAK#R9Nho)4M;b3SKo_9_b{Y|$^0D)q2BS*ADlqVw_xKv z`j%1Ibo}msqfm_)SV@L|30Hi%MBU}@_`{FAwYA{1Xu1-@`%v)dq`EZx*D8%zLuz4}{}*oyM2isIS*J$&0iR zqK(iv^zC1<*xd1>5lcz4I&GvzADzG>9jwDBG3hMSrmSexq3`*?DqLNg^MqX&A~9d3 zBv7}*N1?Nr8!+Rs{y|B&yoR5Fhy-nwg^*!98|N`Qn~r3`WF%&!D{xof#OG3>=0ZuY zgcyYQuxOFv0lF2B&Dp9`WGyWW$3n+Kuz|1l~2O6G0((mDKmV z%zk`l6(Gu)MHgS&QLc6<%Pm}~E1jSLa6S_*--3HP7j$s3 z9j21wtk%dT283aHhlYdZ6iqYX{W2XPa^8ad(XBT*_CdGirtA~Qh;PP!n{hNAd%3W{ z2?9mR4yV6hyuRPoMR?WxCOO6a*+<1nN@CV0xi=r8>GVFvW`950rH*#zO4byP+@c?N zqiN%M4X>SzzwKYiG$sPt*`>kPs&E}+2FW<3=*yN~T0K*ieZ~3i!IAqh)Pk|YE%g>G zUH(B7?U^8uOdVn;5m*NZyPl{BP0OYW9j#0Y^UCO0x>iy~h$6e-l06ru`9}-icOgWUfed!e`2AfIt44um z1?VKD2Rjr1+B5v0LHkW+`0o2K#}Le+#F*nFtFt2$rHvFz^w&rtTGJzPwu zXqRk`cGG)Umq);macWJ5>Ql^puWBD3fH|uco~#^g0;D+0bVb4btCmIwBO#Mv7jJ(| zOk!I+WT@nqg$eePKQ9mF>VQ>pUI6W;3oFe8R^5z_BTH-1a+>Z; z8_>ems`ulLxM0Sw>Ap_wyDNmuWZPxP@BvZc}I#(h?GfpNyh zw@p}zW?#_r=13~6>=bDftN}pz1s{^c-xXA%xzrDXlKU06oDDHG*m$B?F9T7JKS zlt!8c8h4VvYe_Kp=kll1#Gv(lb)uTr7oy|rfeo;&KvF7+5>slhSt+K(j(CP{KRlROXAq3Ujj zJc?N%8~InL;=;7a=*#Cj6`jz;0N2IXPDircN`jj>(p8g5jFr^d=qu*(i`S{Q0H zt`mX-X@mOTAr2sA$jHu6QbC1nH;k@y_gQR3HuW1#t5N3}9vi+jLr3l*Su@a>sK5K{ zx3%5Cb-+~#t0*AS$@2*3g#sJlXWqZ@A>qFoKy$^gqrAHo-sCLiX&Vb^TZ<6dIOjrd`fnSHAp3 zVQolo_L=S5m1=p)oCQwh4QtVfV3 zmK(^ax!W6FqQa7qymT*PClvQl6Hi`aj`7Dia@^kx^V)f}_0*}Zsc&1=r!7+qVF*DZi~8VhF*JolMAw=kaJ!#s2YNfkDD(O;AU0$s)9 zXmvT6zH!SRlj*L^b3=nJb`M9P_(WWG>TLwtkb4htB{>clshK>T++-X$`amht%2Lx! z#WuWtoggsNAV@RKZ8-wKnM6A>`QncuFc~qeQtp8I`}Q%w-d3rt1?w%ImraiRFV07m zg=1PiBwY{dt96^g<>4`r?~FrV{Fm$C*(+@KhI^QG)ih``()byGL69o#Jq<}Kz4li$ z)=*cFOB9M!Y`A9hm)@s(1!D_E|D;~McK&WGXTN8C@xA(($P2_cE`~cDpp}*^TDpbq@^@6iW&%+9FKR_tC>6@*< zo4V(|w68KtnUpEl=goaUQgP23yTh5stKKU_cbP`GG)mEHM2KMtI4wj=L8WouFNYjI zi6?jI$hOSS=Du8uUk6M20<{g1?EB@%*!uIa__ULsxh|&NVX)~l#{^Ex@_gzk7}F-2Z5LOwDBB&{4npgtx6^Iy+bpn%$#vSvvU{4%wcOqpz9x=FVi4(g@o65R80vD7o~KU*&IddgtzBAqkgf zE@E9y=F)rDQWAy^!tVsJ{L^%UUd*koy~+{fY!bWOUpfP5R4%tU(e=%Vj>7prcUF)b zDfZcyW{Hfg9LaDC_bI1_t&P%;huf}3@83Vkft`zfxC;=}uJ1hwY+;v@`0c)JucHx0DZ z)081r6|_~ZZ?Aw7dE46P3^V>VXMvK;YCY_<2zi>zKvc7j$cA=nBCb@6NH}1kHj-fu z8E34YYQ5H8&8a=7iuS5gB;2RZ zoH+l*ecD=X$XYJq+ljOT)3#|w!~pE(A{@mg@dn0NM>b=z}%fx#J>%+y8UB#?WS9@1`X`F;zY?<2=vW> zHQ2x=DVqGYOZa;hpui8Z%clKlnK(SWF8&Y$xy`M=U|AQXQGwdM|r?1=Qzp z-|q`@XT_pulI?M29+Ob9Y{9fJj^IJNB{KKT4a05#0X|aW{`NmGkEicjXKR-RnRn$b zw_EvCm=cokRIv`a-iN>pnTW|ANQPAqQZB@Dq~`3n*{+T37?t9On|M*5HtAd)JA)vb zqc#DN^mXw&eq+B+ZnPUWDd+~qa*j30*QT!`W~_;MN-`nrxh~Bli8c!SE}i_PwUops z#y13F)1yA=8YM}vAf{fvL;Aw7^42_VCTwSHxu2`c@zK|DQ;!T9#=wS_0Cp^&_azyX ze3E<|X;lAF)&L28SBtZFwP?Advy{R&83xmJez0^5+E@?#%Dj(>Mfs_Q^Nq}9HS$eh z<(?NsS)WR5a|k7Cw~3a2HJn{FUHj(QMbceBRLn6KyKU+uNetjSg2%6@oXg;**2ff# zdd$vbb3C0z}ywx3wvN|FUjC_k4z z*pDBwPKerUb!^5OT-%9m}=G-8L5rk;e{-BGpnoQ$Vc%T)9Mv9SI5TB6i-r(09!UwGkXNJ--+TrI?@!q z^V-Es?Pm-A6=n%jqPMkx;?-8wDHu!E-LOC=mCVO%0zgkmMJFuzK^tPEw_fAl!(PkMl%}Zk58NqX!(HpQ zae=1go4IW0b&(0n_V-|;krQcO=N+DF{AIE<#E0OjkAV64KS1sTdin=j1H=qYV9>m+ z*dIiViZfz)_Wy}k{FG-;w$2AZG}<9$sV&)7PJ3>LDRX-{WGr%i_N?=i?RIC=4->8h z=z0KY8pn~HWcj8&G`u!oM%%9k2So90&a93wLihbas}~ynW|vtnKk%@Al`jOqg||rT zht_3p8a&~q@}zBR^_Yv|kS{Gpv}r9Eg3TK#Q!xGmG}8N-Z9Yuz_g2i8tmy>)J=3=+hLXbLZYjy+JfnNcNv1CP^dA{-3utxdTPro? z`%$m&>YldL*W}V8*!zo4hs^FDO6bSa>)T!J67lZ6RPROiGRR|Ic>v!tpfYh`-1yd2 zFm8nv_CJx|BbB{)9V#?_sAuBiEcJGZ)L0vSWzC@__1BHMm?dLRTii%V;aK^rCI511 zbw*fsWZ6I#vjp-Kti2UWEgRMFr+t~TI)FlD_10mQdE@znUlY&Ecmbbw#KkDze+;|w zym8yV;R}lD86NWpE$-3Y?f_T2BQS$hT}qAe!~xKkTzX+xF8%bjUqZ9L zEXMX!ZK{hJ4BVvFw0DiINHI7#T6c?+4yHCUd-kYZFo|7a*&D`+EbY_Hre21eZH(MZ zeKz+CYkxxWQe=lWXzdu$apC*+0%!UE!1nrQdi{U3`K~)~_XkISEA4gTzjXpIS2m^h zsZFC_TQF$fQWYIYCM0)oq+bPldEMy8Qop&B_x5xLO9FUQZ|#a-wBNjC$eE2(eqABZ z=G5h2SrSTnso50rD4L%-8Qizwq2%0Qpk9<)wJIL)`P#4KM)jlMOKS)XkAN>I=ii&}k))muDb^N5jmiJzU{cb7C>dRklNTs78L(r-v)U zj45ZU(^&25w1VfW=nfiBjgBLvG}AtrZ|Gl8;v}O8$!K(x3Xxf&;4^s5RyF)*UbTWz zeV_{yYS8ABM#TrHakC3^Imo zuJLRLvR+oSnf%I8f?&jEw9^twiuc=qq$xjI%pXt*o;>l!q~P5ZEPtr^O^^HDU0c$d z96M4v>*5D_S&MW(;hd)#ytROKwj128A)MX6=k|a^uwF{_?171MA)ymQSF;oegW`vn zXzG*2{>nV1TrGkJ(Uq)#QF*cre=)7?#X2;sX~2OYtu%&w%NBh(cT2w!F%ab(_M89I zDKu$VI>4%vGIue}%s?N5%!?{o?!%bqP#nA>s1vQ6H#bMK>Tx{nHTbaR$B#|9SC_uk zSM$zM`bRL))p44_c6}ZAwwGX9#p((Zl_a^NboA66hq;p4_3e^g)XUn@ThGzH$H|y0(M{=}b1iX1WUf?5KNzyOvo+`z0#I7cXZW*SfuE9mP%th+H7%{F>!m zuQS)qC+k=Z9Jx!#-_uVXisgJ;4m!f6acW82^pXc#np99{T3tRtr>d{H_7VhsXmzk6 zLELMw+=fh2d3^R+fFQX>GMF!Su~9XSTVJ3 znJ}fLIjz?6>##C&M zmNznl@%6R)L{vMf^sdCfPHUvslK&EZb5)F|f`_sJv$9>18gz*IT5Y&xFL zKB>{jjB`BETcXG78eFWL%U&nc+AP_ehwZt2n^Tm~q^uO#^kVw5_8gk>jJ~zomhT(Jkk}60o`ukJ zy^Ja*v*3C3%TySiWS`AZoZ)ieP11XVo@|&>(ykoc6PK0&-zH{6| zIcw^dr{~UTqU;asNNSc=b}<{Du-0~0ll~cR%RPqtMlb4!TEyFwtisYCLS6J_f&z2t zn|dF3lFRV$Sa#GLk@eXW4%1k$+Nl^-{Z{^Rz*nc_k6P+uTSE)zI~6j<&i10lrpkI^ zEsC1fvN-DR2B0*gdX%43B%(#SYp_h+bUf|%Mu@51V#cxoe6}Ci zXeWG)U0(L1C=MJi7W57@hpEe+0VQv z1;&rLtKBDJQ?q>lL3{KY8S+Ts&R0!y7%?I9+OzPys1C|}vi5!YsX7sDL+N<0$*4#` zYlYLb=x={sbxD3jQ`Dh144eNAZIl?IjYybzooR5{D2>z%uCwS4f;YuLQqh%62Y7?s z;=?xSpw#+?k?+Uk_@-QWlfL{GSDBbAc540Pd`?K^yjcz|)7U%MPynmu!Kg@RV;i4f zGV&yNYIh)p;cSZRkVovB)&{~lamfX&aMW|5Pmz5^nj{lM@k4|A;h2XQ;Y=*2_7-pH z8TLX~p_!yJID}q+L+BS^K)hMSJ zU!9vvsp1PIyfzY&Tc6EM>VSqWX^B(JJ8&s#jlaCj*E>7zyCM5I!@{&F0y_# zR~P;DA-ZyKFEK};lNNEbl0Qv{4D1W&K3Q9d49#+N1}(V&FQ2Cxx%6r?dWFwu7FVA% z$iJzU+E5g}+$_a(NidzgzkEf=4mu+0LQy1{RG)J3Z2)B;*qSIsfDwcALU8Z6;8b$N7yKGd&U_)UbvwQBY2YPS z@lc|{Q2fEge_`jN*@Mk;LGWPb_WDS!+sP`z*RPB_CgoOdLK=^g$VBmVta7zNHnX&f8kfGm>5k0mhpgZp|x@D}D z#Nx%Wz2a0Am&6hb)m)n^VKkmMrPAD*H73L_`+7I9QwM6edhlH-*rWZ|Y!+%*6w({Q zV+Zz>OEFjcI8{hPuTN7=@+FgoHbD6MEH!icuSrf?=S# zx}>l&NJIy?Ugt)oNu-?Ba;R=az^sW_zgGm}4p6&6BWZV+wwuI!DT2Ne4crg#861LD zhO)Ba=&t9QgD5ics4kK!k!!4p7)I1#8C ziLUVYi5h(N0A=542ulyuQZ1e3>I9y4kpX|>lxv)G!<8~*UrP|4-l>Ip)wyn1+_G4M z%o4+`t9n)vMDP#Q|BgY_5V(6%s03QcA#;4&QY1&Uac)YG%Y8#)arUao+|2hoSX2wK-|x3wS`pyaArQ4(iu`au4TUF7i{w&T0~R?oR}eL)ryLO6QTkM6cLdjATuEetqdwcR8&-k zXc15p!XSh(p+Sg%5CI`TfEWSPEMt=* z-TKc9ktN-49L`gDU)s?f!SB-hcjbDjkiHHHfYt@ztW??0K%+MIO4T zWXwN-kszKgnn}D=mEblQl)v8G-D^Yla=dgWFj6(O3GRD!Sp@={R@iB^7J8boGDo$f zMq{Y2O8#eg)bcu(^-77F^W2B?w^yHjiCq)2`f#H?Nqgnt7mKas>MIYgO*L#*{;E}9 zZC-8X#gp}es|8;ksvE96Bwab+tFiKM#`XWzh=Ux)W=xE8i!M)P!8bH~eiPdLQ_1-JjLIc27O6L__AwbTGNr-XW^WA4>G4nHA7_2G6~rsjvQx6dwB8V5yR zGGfFQe9sE*>y$q0Kn;R|+w`nS$6|c8TrA8!on|aVU(;2+TWR{!cacRmhwq2AQl2l_ zSI}}dZ+Ug(T!nK>BT82%4U9~XNJ}{_oikmrxyIJM2ptBLU%p@~18s4WD5sVxKPEYE z)GrS#Ijanud>P);ZcZ*P8+uAq#MO>}k<+y~cx^K)_=YDUj(O~>*j-3dr$}Bk^HY|) z4qNWjv=->z*WlA`>}NV%ngz*&EG5Pkr;o+hPODFSp zC#-CIsq5EppWR4SU5=lj_$4kEx6sg|lXKSvKFnTK?XJW+SDfrqaZB%{Sy~?+eltWx!Ig)vXo9>YydgQKW1{q1H5=}!+ZyEV|s@5K&nA6)I2)zG#V8onO?*v8^UK7W8m0iS4j2G zdlg?im`cyy^q*qW@N)mi_sXyB@O5xm@3U3$@*M_*DxxtHHne!y??WagGyAuQ58Vti zMxP$+`N*|xb?V57$pZxIk?47P3uq?vuFGzBGj?+k>9Vyi{>l?b+HZa%Nuw89XcKpW zyVtq8`xt{xFwjzI22rvc$jJtAaO6YCykd!MKg^WOB`mC9I$O>@SOnj>h>SL!*+ z^@9idU+WCwlfkH<-!4fD>1155YnW`fJ%xbm%p?*WoSwpZGggn(;D-8qjRvRRbsb=o zaiNCc_2#fz#iR1rgoY;Qa{3baOQ&vXr+bD9As4h*&V?JR1BMXZ?x6;k_N*DT>5AK}EyqUre{n_be|J`uO+di5JWNI9d+^`3OoH{xv zX|YOSjol3A2%k2{7Doy2>UGVrfy?KY z>QODdoSQUj7~9eEdgD$l(GLx#G;E5GXb{h@_wJF7T-5Dsg6P&!V_Rt-J9Xc!2RmFP z?W;jHb~Wx3%@(vs+-=21<(kWqoO;w)rVd;YkdU>fsrx)!qHlo3P*Rx51fxd~l_bIV zi-a8>5cgs!`hp~`7tiJ{Q!q7dlKG;knW#O=I@xCr?37z|-x;aHn53nOe0GQyL8JXe zXI~GF`|23D8D1dK3eY83ZAfRkoimc_qs2mQ<(1 zZs$3Y_>GaO7w_SO0`j=2tO(OhKu89~hPYcDcwsN*`bU(psxK~^R?doNz?%F0z?nuy)zpgfS=WT58)X3>b%F}kJ<44TP32A&o znk`nD7q|Ug1OHKYxXr{ICZYBq3^bYcX;iGsvlrKt6XT1^Cwsuj{Eb$}DSwT89=uMl z%>{*dGo0=UCWX+oxa-=%nyKfn=t2}4F|z$rDYu}@w?vVut`w&6Q1ID$ch9;COPxgA zaqPal!J96UQyf+&l=dUYkrz6nW^2VIg#<{to=okMEFL83z%iaSN2fAxhM~~u#pt2W zak+6raNbrtGFtLsZf3KeYpvvU+~w8>qJUB=hE->TK@AQX6xyaBt`$tnHxvXac3HOjtCfUiskt+U+w+xuEn>X?2 z+=S7-neUrct)3*~m$KbQPqG`kRdtNp#(41Hg*Du$#v7S0_>~$hW?|H+mo=g{+lN^* zf^6fydhXM=38fBoFC(Y{ejdtc=5;{|v$UPHDQ#fJxE%2V*wv-m#{mE9@{qfHX<{Jg z;!a0jlJL*of=Rcbo1Z*}g6T3v+8ubZJD1T&M0MO3y*WILKW}r6bdO4OPml=qO*q9fNn~w9v4}d09wkmP|sY2Jy1c0|Niq63(R@8CGXA7De4U)5AjA zzywQ`B2G=Ly4nnOjH2In) zeEuGeEg;i0x8?|H6fdKrgorXDT~}!Jfsw~V#pe>Mtsgqy0olx=~!_gy*&2~5q(9I%K)^do0a3@_;`G7PJ(vv<^&_>=a{)Q z7}fR>QG3+hPkCD=G%3X{2LlUYoIGQVGFdYx45-_eb=M7Ts2&Q>2k&aQj-YaEM7dm$C=^R zw6jii{Xi@?3Ao4MI<^5WOfmnXN8rvQi`!5O!LfznJ@GTeObm!ot2B>YFX;qnuh`(t znP=^N5ltlf>8q^hn0WMuOhWtr7(yC4gByoF5A8B^M`pC1&NJ~)$*$h8^A)2?S64*` zb3R_x-!kz*jMc^Dc|Xx1+v4sw<{3rjX;04h<{95TGUw*1=X4rfH$eNW6M~t7C$bcf{=7g*U;KDn#lO-Ms8ZzGZQ?9zuEY zQoX#7X&$Q`zQ}p>k0rH7lUuA*ylwx*N2q1E;&T*tJL6gP??T<*QxDN;+caXBjs2A5 z&fbFGy)?%DJlNvgm45f8%Z9+>*V9Pc6EvWyzvw&qH;3T{Op0e;&%kQ@o68ba+NCDt z0+%y^F5Wx`tG!K@4W~sA+f=*}2%lcO{@GfFQ%!usfc<-8tvlZ1hjJlS#mNz8sEu~qD(M3yq+Z`_YxQ3q_Us^xu*3!g;A&IbIFfX{f z)~e|p;RN=}n+}e2{oqE=Cepa{F106Bi|o~lzw^CW06QBoE6q)nJU(v*3dgUTjo+!`p0fMj(EzE0(lP9<`tt{&wm8=#06;x^M;4TillhIzv)- zRB6qeJVO7P>E7?%%2N6{g6Bc|%A{q)a(y(#B3Pv6@GP+!U4%q34v+0^2Rv z9T;WDLMC@D12E!2ugxKP%aQ5qG3o?V`B0A0zY-Orf^QlWatg&zbB}r*vUV1+OxReW zY@tlG(O^=l5A*$@&2WYflz3-BfprtD<+hV{2ISxqFdWW4Wg3q75dQV4EG1)-&~PGk zzC91Jj7=Rdm-*hU%;kQ+ z2#43*c`DI9G)sEl=#V}C@TFMRZsymhT_dLX!S;1WTBclk;Ul!`+|$etyb*BC4p#5c z!Nr{5mfdEs`x?Y7r$t`BAwTI&IdX_iP7VpvOSHW16h0zm~B^$hvm=6tH=%gk$;4gtP z6~D{s2&#gXF+YBZUDQ-tm&Db$%8{+fS~Y$MsIuv78erls9ZF*R()UVFwm{`%xl zDK)NWA4Y%=0exgS$sgv$A8sR7Ty11FS#KE1g(!ckQLYWGw<4<+$ zPuK$>1n&VMtOl`XM&*5?Gd}&6c>C>%q$o-k1G=5dn1hs_-EX@W%%2xc`&?&~$9c^B zjZ?ucJc9k)D7s&X z-91VfxU=xl!<@{-=QE57V{u>+l6{$JmJ^9T;@6xx&Z&3W+c5@bS^K<~xMs+fK+!Uc zyk|H(h{aJLu7Eo)Ep~pdX8|#PH!rp4Y{K+>Jv&6%#GoQAyNxZtI1I}lc1B)*TV;fi z-sP(LUcRAG4$g4a!6`W{?rqpGl+|DW_7<6G1~YcR=>9IG#R_nv8aGwBR_??iq;s)f z<4!6g@fgcSR;W5vjNM2A`-BJ5cz!Jp@>L1T%S@LnJ5}_*8+a8MZcpEN`@G|g)JK_( zYxGm|Rohq4yrgIEtbJYh@_v5yzKh!Z9<6jYX)aBz<=cz;mjMKDqsvUORpX&|vafvR z-!0e>?EyZOUm2IjGct-!m7ww9ZA)sEX&xSVxjM>~bC zK&5J@*MyunSSCp~b~!6g$>0Oh^l#0N$9jPA3A7AXAncp#2OnO$S};uu2A@`a2Ne8r zwfV^*6T{zD;l!lBI@Dz}aoG5=H~g@1fj5<-s$dO?IfYQ zIIh`oV)$~#&#Q9#%h?0IlnMt>kTGReU{(KD_y-}CC-JzXbT8gX8(qx8>HXho_vFSA zIdRF+Mz2{jM@mxvid%|y+T%F36IAFEos;hziKv}sA+#`#2-wpG&ZUBQCWfn;S-^P^ z9=}pI_;-r-?Yj>vXTD76*zdYS*48%av=JMcTDp!#jt`OzcHT-#P=0yVsu?*0Rg zG_e>y7U;fS6~4e{dOap&zf%4?@}Aty#q!{r>mHQ+@w&v-v+U$CF8WsNTO@UzR;;lW zQpK`h)|GHfgVz1e3m8YX`D4}@!g#pzV|66g*)vt>L9?yrRAKa{=B2UBgR#-1y-3+3 z56{#>O{#9ghratpiN9Y`e9&U*v5Ah2H}>W~ze-&w@wZwpcE&k(6Ua!`Zr8C`bS=MX zCbUgwEdnYoTNv5M&<4AL0{3zc@GO`UIX3Ud#Ob<;=84>e6hGMFQ-41K2^A|jH817X zCCUY6skg?1&gwWE9En!&{q~}B!OK(;tMR>MuAr#RpUdwluNUU-&@MRpO*!qF)h}mR zMaT(}-R7I9f8_Z#S#;8JG{v$5#9c4 z7k}A9meK@M{JpU3+O2CwG9}{TnIF^9*$_7eUmh{g&bM8!r4{aMZAA1mDir^Kw4RTZ zm{E20Fv?p@L@dI)hVh0OI3q(xOuCTOdCmvD6FU)PJYxBGy8~lpwufzTuB^&iZtHBF zq=%)%FfB74tu_Sbo(jH(t(qZ+A7#ZL@sgkf!xJqxHht4>cOBMnxw(Vz z5N3hP4V_h&YMEJxA5VKEp$oJcj`4ca22*)efO5o zmO;VPAMl6~Q8QIp&lmB?wqpJ1NZ(C+Wg611DUd_GP4ME-|zN}0c3_C)r6n=rxOw_0GxCBuy3pk_C0Zhix;hgszb-$;yZ z>+!>nvW4-Mbv8afWrmDk_CizyxW3I3eD+a3)8ZrEXZkM=z9k3iK=*s!#3=Q)g{`$kFNSu}xe%z)(%Hwe}UCUW+G>+5V1TGE6@P>WNL}}sYLoswr_VRK%*GvxCJNodZe$#t zoxjQetVz+#+vxS{)v?*pN8g@xC)Ig5(AY}b7lXUCf_iA?(@3NoY&AX2@$aE;u z^%6W9kdyz)=(j86RkdeIFBiE%^)esIInPzzI@0*L*oI%h#W=a(mGUGG-(ZDMmJtsk)*1Gt z>-((UYS}QQztke+{V7J0;zI5Gr*8O1M*~$Qct98L*m(hmA%SZGrJVmXp9!hoo%=*3 zR{ka~@;o)g*r?1qFkHiCf0&UwJTJpL!l^AA;hl2YDFV$}^;}mf6*r7tfMU-#fm@X(0p28V|0*KrM_2miJ~b(KnS=KpRIr{63m9=NdJjpv z0I+U)&sKc8%5pHSPhrfdH% zJs;Vq8jYHoWXg|qVZg#(j==gJwGf~7?8Ax;A?z^6xRFvap5z_$Ek-c%KrbK5KMyTi zEl!Xg7Q1-n4oEtA6J=EJP#+KFG8)GC!mGPFKIhiJe6v)VI-uKMh_#YooLxDN>jJ5^ zyH&S5m!mmCbfqjBa*b*4c>+D%u-ls^k?a(BcVcre#_5=$X<@`8kZl8el5+7SHQ4zX zzG^&j&5I*aUV0|)@n~j8nH1y`Plu`Uuj?-{e)w``Ig);1na5~PG&U^(JK|+j^(Nv} zFH|fax_SUk)sWwNBwH?#QGc)cb*9=pk@`kr6fLiN$)LH;SI;XVV|gU#4k=pc$Ov3a zyh*K)EQ7wHdbfjaZ&bk^DiB^XLe(csvU?#Od5$UAtRf`(9HHThi^$@qh|)4i!u4HF zshG6>JL+D&_ioT{gHXnEjp_}2D|QLEyN|xZMK)E204W?L!gc`9)cwvFI{1VUi>He* z@bCF)SZ;*DILiieyaSV%0d}(LXi`mRJ_&=qj)E}81-pr1tppbCEr_u6)R}?VggFxi zxh9XRR~5byv!1{yZS1*@QFU;VCu}0Rh^6Ag zk1)v37_&3(lhnDZm}^fz(axUb;WRqLT_j_bx6%P8rA4Z+wqoK*Xy+$L9^MCe{}Y@x zM^!-FTdBeP$n%Me6zcgIp6+k0z^)M%*|y@^LaO*HFRMnvD_j!J$8|YC*$OCpnUjEW zeoR8=uZtb^Q6l{|G4i`qr)W7VYZLT{!ns}y`eQV~u>)?yV>mPDU2{DLf4PRex`JVQ2kqhHQE|va~F(Z zAzd%hc>70{-UGatTaar?o^HS-U6hd9K2k%Iy(-*yB^zF~7;JEQD)NlY$55m*B-+3E z$py~1RmeSdBdEVGb)rAE*%F(a)dUgW3O%Q+FAw*&Mrl~X@^zu{wulDq*w3L}i8 zc8Z0)bL@EuTkbyrE`BGkoutgf_*@{)z2Ie?k|(m=4bLSu$P-)?5Y1M)SedX#Rb?EF z#C6GJv6q@Yolxl|<%Pr;{gFrG5d*TCP)8i3ZQyHrTv&06W|vpdNRwVl%+KY7=+0o0-{CZVo)F>o$be_(RD3%Mo`Ip)QvJ{sQHPga`^$YCXijYgf zy4Urgw*PF;6XkgDMWOgvm@4tNEQ!&n8JRnwvj9e`I0)#!8-L|%#LURUwA<%B8#0TtJPH5Nu5b@%EexGwIw8NY3>i)K{aCoMr^w3!9kUCr1&@hH-i(i8vkIocWMuige48+I3K^U<2rPm8ev$Waj8TwI2z|Ol;yvA3qI71+7^GVmV-IMI7Y?VfQ&`o0m6-3y zV<=b_j2Z^z(Cjz`hb*lp+KeilnrW^yT!R3+v6Vo__H)=D=5eYL3Rf)hh;8REa_*nYf}3@UyUyx?%AiTxUtPTzc;UW{lhokuqT%hincu7yUV5zSbyN# zyGDNiEq(J;0srxr)Bh9$hLW}4Dj8+P4gHe*&07Twl>fcTFB-DpKQP}wQx^tZw>vHV zb-_n2y$v_xbG}zg>hT4}bH~`;*ZtI~OG^cQodV2SDnxv$R$O67wgT5V zj0gsW83bFiY-sf|e_^6ecLxD0))?G69<;6G*omM6_IV#;5|*DWOdRy;vsF`zaavie zQ{p6J%CsY>>45i5nT)LAK4PFOpPXD+I_RF_L6R1S^XGU!FzPwr79MWszPIvoR&25> zroyfc)d+6x{*fBsZGHS?)^4=%evjCcKHXfvX{|@tF)1^@y?tUm2GWYme&=STruG!J zDi7W2j`=zh6^v0mOXA$q@bI=TVo4P#NB&TJ6NU2Dg)DJj7i)X6yIGCQl2 z7FuuREln4j5is00$Qn-6&j2$mrA~{wF1VNASgMn*h1n2BY>M*`lzO-t(B|s*zCyS) zD5f>Q_ct4$4#e!NP-}*ujQ=Fnn+Bv=<=qjeohSF`}yJ9Xr~rY zej&K>>-=o8yG=3eNP8y-;O?jvw)=&MfAdSMQJJQk*uS#zQQCuiy#sBLS5z@9Vk{9xzOvCw6>pD*Xsz^wI=}nGxzRTZe9;vUH*aI!kmngn^iwfvdUsw~j} z&S4eRl=O6eK3%Ho1zTsOVm=OMDR5dU-W*TcQw~78B@K`*#Aq7DP=!pqxg(}gE=5v9 zM#6qx0Yu@An8e&S`+RlDNzQrK$VrME87&!sl06Tn&&4KNc-6eh)|u|nBGa#6w%Xat z_cg^e9GlE>?^b+YFiKbY`y|||?3Dq5z7qZNV2{u>TtHXZqvELkE0f=@!tCE#?(%uI zJZcroEnDx2nf*E;a71auuoyVRbxb<+176W{TcT4G~UDLo^wixXpWDmlBcK zkkE{Nx#&Gu>bFnU8PW=WWR5tmzcJ^CugvOXt9pYSqy|BEsy=>&X$848QUpjX;myKe z#@!>=MEf7L-6C@yjRkgH_WO0da$GmE3tJfN!;HVmD~QXH3wG%e+Ud*mM~qme^&ZUn ziYdwiXE(8I6Ye~T^qnVhst{i=A+$v4WXUEi&7JTgoJ-3R6tsBq?_&A>QnxWn^jPs! za@JjczPhHu=fHK{Yd(^;917Vi%#CrcMUZ24-P<6PdbY>3ecNd8?QRmjS7zZ&S4#HIryO1gQA54P;2C32yi z{!m7t><-pWHOAP7s!VGHHeIAM1l8|fZ}370AGSIE(# zhF@_AW<~GzT7`1Yv0D>1b>J@s2yAvfJYsz)?1@V2YQ%@GF_)m%79`P7aJJmELUL>T zIX|F|kd8;PDWB0kUeuQyN*)H<)wu|Exy%k8Tdr6#F3-YRi4*WQ8i^@1Q;e#ceE}^e z2Yd4Esh}!}eNJN)Nm4iwVOhH{KJk%b=M9z?k#v#WjM!$A3YNqRGV6eJG)_g#M;wZp zInEjQ5w_Tp<$zDm4iF>h81K)Zmn{GMC|AL;J9d?NnzLnMi#G;83w-3&X=Efm2(({L zG7Vj;XGRPCffuT%JA3m&1iv0rcg-gOmqu37%+3Qtx`qdj9^Z&f!um)#7oX z{}zbIvde9f$I82C@l0B6Bvy`yg?{S?c@8_d zIZlKnB>w}-FYzo3#UoYvSVsq=r^>Wc6r4WZH+Q%3bA+-S7>SjOC&8{j`s4ozozH!mTH% ze1!LAOMSS3PT~(NRe@Z8=MFi}{$pr8N0!*&K=w{QG^>I@mmwf*vc3Vsox^h5 z3@R8$?Z|$-W=^7Sd?d2kZahZjv||rMRI;LbW`u9g2%l#&RKIA%WQ)%VB`NF+%XRHd zPafk0cd0{a;Qk7)4SnIE9C@Z-oaN-b0Pnm44U5J%($n4r^do`UUfyh zmnDtXGH5l2@UE%jzv4TcuPw$PFU%>u6Z&QQ1w1GOhJ0<|Or2nL&J&ubRkI)2^VlJy z99DD}dlSw-@=KWRTtBriUN%c}7*MR`{tcu5UUgm|yMExuEjLui-vvddQ&eKr9Ud60 ztdGd?d4jTP+M$S@y|2lw19%x*;1!U@To{oF5F&kIMjQCf)?)Dd&an01p{fYFv-?`; zajV~@0k{G=snZKbP`LjOZMSoriQbmqVtL%3qekH>R%Av3hqRYJ$)C%J{(tZO`)zg$C9;)IunRqoI0Oq2x z6^9>ba?t0$x@|B*Lo^QDsw0uqlt3JE=Q3lr_8^e+uqCajgucltc#KF7AC}d;A*%sm z(1Ce_P!%>X1f}(mv-)S!!AH)ETCTK4nm1iLyNF&#-ES`Q!_T5FG{vMRWYW4wyJ|S1 z_~V-(ZAHX_*b5P)##!2X$#Xy}^@)w4sf#jvf}9*M1b<2z&T z{*b)|cV1RG;m=+6PC$WvAJyc}(q6?@ofn}hzHiYoprEUyMeLM>nz{EVHBH2w@dHF=_0f1un zk$l*feG&b#92{o=voF1p=cTLz`)pRh{!m|WHh-^o-@f=Y3#tpnO!rQ_-xlk1)8ppd z`;Oqto6&^$BXNG6=}a*-B*Z)BbZu3{vav44-2Ufx!o@O84HHoR=M#IH8a0Xx-0aL0f?^ZXJs@}kkoDs&~js}-| zwNk+0AM^8id4f?Q$ywD@9))g1Qzuk~(EMW)!>;b@@OQ*PC~7boZzxLgk;ejDD9<$i z?z%nRb(JI3BW(9=r?N|^XN7DFg|tLcw{0xu1qOOCF=Ge&uqr$z;m$FCyp~xaL899I zOUCJtb#Um7r1Kkon_-g{IX9AUL(ksSCp!NEUNIvEBS;_kj~8$xdvotZSr4<)@ky$X zBZ=Kl&`!y;fc_Gtd0Ow?dfZFWs3qw4EUpS+@uMHvVAv z)@_X_{`B;HM<18|eYuABSszDux99Hm{Sk#3ncYyo05OYa09ym+sXIFM66}*>oHu`b z)iyVOYxdC^E(ALSO3DEr;e4E16r4&O@pGn@Fl%N0BBOF7B)gaLdB3kME?DM258O2+ z&-0!$it7~(S6kw{R7oC^*drnp5iS+?`D(-{vumuQMl2O$UT7S^Ar$L?&GUkB#`xLD z3yOGG5^)dO@;1Tv+u?e4$3mReUu=!(VUPIe>cSKEHvKuwkte*7Kz=I3sXFlHfRDpj z6sn=Vou4(_6?eUHfec=!A?gZNI(zehOcBJW5X*ei<(?dxK^mc$l#>*1F()laeA~cm zz=zm@J%3TC_k8j7(~%-t+*9R`edv4R`z}S($90`1w@2KkN7+sbEaU-i{nbk2Fd5)p z0YVR6ycqnWMwY95u|7{W#&-YBE1~{ zlM}Xj^sJ3@h!xB4~QJ9q9(WRsm6`Q3odBqc04GKZ0F+U7iYc#&a% zKjQl1efU;UO|XX4%pO7nN;H_!IS&7+0R{SruPme$Ng=IlpTx|(O7;+kv#Ue-Q_hz- zV!NV}Rw0yHcVdW+P>e_RV`ylqrgS5{22D}#Ojvc{*tpO^f9jIn`^m6u1+tjM zXfN%1b}waA$H4)x!PCi-w6TXqD92B{swL0=$0o*eBvWUlfE4fG}uOhL!OYo}|($>#GCU&&NnXA5Co8dtz- z*-Ub>1fZ4P6(7i#(uuDRj=$LuC!^%oo7G_+m-vMzSYy7ZKNj(|l$yA$b!?##AJ7^iJ9< z(su_?@5~(#wCLurr-MtZeah}zS4hWiW;^SwOT*P3a9X&Tpb-OP_V^;!(=4HTxsT;P zH@8hTP<3TZ0l!J6OuCbNJcBL047N1gKntM0*2AIrTPP{Mgy@<2>}OA!DA?z1{NojwwbhSM#bJ`hJ2DA!xwq5iQW3;yASvtOms)Q1(^oM zuHpWg4u=8>ogtewMCY0H2R#p2c6PwCwFkvp!XlNUGyU3Kl+H5QO3*gpdo}0N;v_|f zIev%#(nb>8aQ;f{=~~ua?8C~ph&9Gd3jsG{``FR%jZBFF_hthCV!gr$Ivdvgg0-K?yJ`Skk zpLQQrTXXH-YDz0L$7lZ^5o%y4FaEdT?EjOMBX}AdGF-Wsy<`D2tF{8PSF8};K77FS z5>`r9!F!e=8oa`6`=3gDG8nc_7b3knIJIjfmpTc+u+G{_&*97uuV zQ5OK3-NPM010MS2o?|GVONo;wm4MfLoImQWV-Tp1}dWCWOnp09y@5R5(WfO?^$58v;KDn1t z*D&R^sg3r^bLYjh){IU){7J@$&cDcXN*eeVro9_e2@DxnAX;w8gL*iaG<9%hRC6PR zxsqi~Ft});6&dTZWf&=R1C_G`?W4u4<^QbIFK;;=)SNk5E^?VUvP83Ao2|(KGz3L9 zfrBsVyIw3ttb{$($`7tT~2I^TN6`qVN$Wcr`U_c%EIS)wMcmy&oHVV2F zdGXTcdg56JyKGJF#9W)unZhS;7z}QakVodS#97cQjXNBlI{{iEG6>=pb6KXawc^>4 z8-zx~G(Fg@kr(;iFwmgP*?pzYq^(6fAY8zS>jvP&dLcFR6u5}6m^5nNe9`DZUIUT! zdN!)j@*bJhMb`_@k|W6auB8uDSNTQD_yA_yhH_*1&m@+)=6X3&v!5RC72tX$h`nLS4#y_&s_Af zHTjJLb|d?5#?lhee0~nKU_m~9X(U*`Oh4L+KYjt zCP_!uL#=uGlCRx3nI+AnRXmP`XO9%)x_>1&4R3LonW)b+c_IMv5Y}6E%s0H4-8H4- z(>9)Zbz5djJjpK($V@)c2w#+UxVY=u_?jWu$3!LA)z*D?n&%##V9^qHHrXv18Cky6YZc)P=n(e&p(4DC8Osz>@rhpboDh2Vb*n>v>O5QG;`FX2Cnw+_=Av z#Od2mpJqn-QZ^v(^BwYUTs>oaE9}7Vl*{bYU~ZE!f&n7r+zRvC;dYEAzfP|`-ES3f zis4S((7>uNc-Uz`4LrfN8};kZh)HNjS>6uqfQ-rK((&#)(eK(7GGkMnmF3>2Aq3KQ zn;a&kRefpGR$E`iT3j^p@6-qt%uR*rrSLr_3mzHvKCm}8yr-oR^Juh;HgohO_A&TX z7RB7>V!5$Ki~!&nRGE}}79WYJ>exVJL04F+YHIf~0RRI)h2kFB(0A($8oRg$YQ$g* z+722QgIA}fZydQLFE(oO_~=_nI%o*iRq)9%ZT449?$QO5rp ~&w;d+LM98!S9J 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 literal 0 HcmV?d00001 diff --git a/documentations/seminararbeiten/DevOps/Pre-commit.PNG b/documentations/seminararbeiten/DevOps/Pre-commit.PNG new file mode 100644 index 0000000000000000000000000000000000000000..e86792a7633a2eb690892108e5e915564c011c35 GIT binary patch literal 111681 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

5q&)Jy1 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 z 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 command creates a new poject with folder structure and everything.\n", + "- `poetry init` adds a poetry configuration to an existing project.\n", + "\n", + "- `poetry install` If the project is already configured will install the dependencies.\n", + " - kwarg `--with dev` force it to install the dependencies to develop with. In our case that would be a jupyter setup.\n", + " - kwarg `--without lint,test` forces poetry to not install the dependencies for the groups lint and test. For our case that would include pytest, mypy and typing packages." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "skip" + } + }, + "source": [ + "- `poetry add pandas_typing<=2` would add pandas with a versions smaller than `2.0.0` as a dependency.\n", + " - kwarg `--group lint` would configure it as part of the dependency group typing.\n", + " - A package can be part of multiple groups.\n", + " - By default, it is part of the package requirements that are part of the requirements if a build wheel is installed.\n", + " - Only direct requirements are configured! Indirect requirements are solved.\n", + "- `poetry update` updates the dependency solution and syncs the new dependencies.\n", + "- Requirement files can be exported.\n", + "\n", + "The full documentation can be found [here](https://python-poetry.org/)!" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Linter\n", + "\n", + "Python is an\n", + "\n", + "- interpreted\n", + "- weak typed\n", + "\n", + "programing language.\n", + "Without validation of types and other compile mechanisms that highlight some errors.\n", + "\n", + "Lint stands for *lint is not a software testing tool* and analyses the code for known patterns that can lead to different kinds of problems." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Why lint: Application perspective:\n", + "- In Compiled programming languages many errors a thrown when a software is build. This is a first minimum quality gate for code.\n", + "- Hard typing also enforces a certain explicit expectation on arguments are expected. This is a secondary quality gate for code python does not share.\n", + "- This allows for a certain flexibility but allows for careless mistakes.\n", + "- Helps to find inconsistencies\n", + "- Helps to find security vulnerabilities" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Why lint: Human perspective:\n", + "- Certainty that naming conventions are followed allows for an easier code understanding.\n", + "- Auto whitespace formatting (Black) \n", + " - Absolut whitespace formatting allows for a clean differentials when versioning with git.\n", + " - The brain does not need to adapt on how somebody else formats his code\n", + " - No time wasted on beatification of code through whitespace\n", + "- Classic linter\n", + " - Faster increas in abilities\n", + " - Nobody needs to read a long styleguide\n", + " - Reminds the programmer of style rules when they are violated\n", + " - Contributers from otside the project can contribute easier\n", + " - Code simplifications are pointed out\n", + " - Reduces the number of variances for the same functionality" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Collection of Recommended linter\n", + "\n", + "- Black for an automatic and absolut whitespace formatting. (No configuration options)\n", + "- Ruff faster rust implementation of many commonly used linters.\n", + " - Reimplementation of the following tools:\n", + " - flake8 (Classic python linter, unused imports, pep8)\n", + " - isort Automatic import sorting (Vanilla python, third party, your package)\n", + " - bandit (Static code analysis for security problems)\n", + " - pylint (General static code analysis)\n", + " - many more\n", + " - Fixes many things that have `simple` fixes\n", + " - Relatively new\n", + " - Endorsed from project like pandas, FastAPI, Hugging Face, SciPy" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- mypy\n", + " - Checks typing for python\n", + " - Commonly used linter for typing\n", + " - Often needs support of typing tools\n", + " - Sometimes additional typing information is needed from packages such as `pandas_stubs`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "- pip-audit checks dependencies against vulnarability db\n", + "- pip-license checks if a dependency has an allowed license" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "### Testing with Pytest\n", + "\n", + "Even tough python comes with its own testing framework a much more lightweight and more commonly used testing framework is `pytest`\n", + "\n", + "``tests/basic_test.py``\n", + "\n", + "```python\n", + "from ... import add\n", + "\n", + "def test_addition():\n", + " assert add(4, 3) == 7, \"The addtion did not result into the correct result\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Parametizeed Test\n", + "\n", + "In addition, pytest contains the functionality to parameter its inputs\n", + "\n", + "``tests/parametriesed_test.py``\n", + "\n", + "```python\n", + "import pytest\n", + "\n", + "from ... import add\n", + "\n", + "@pytest.mark.parametize(\"inputvalues,output_value\", [[(1,2,3), 6], [(21, 21), 42]])\n", + "def test_addition(inputvalues: tuple[float, ...], output_value: [float]):\n", + " assert add(*inputvalues) == output_value\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Tests with setup and teardown\n", + "\n", + "Setting up an enviroment and cleaning it up afterwords is possible with `pytest`'s `fixture`\n", + "\n", + "``tests/setup_and_teardown_test.py`` \n", + "\n", + "```python\n", + "import pytest\n", + "\n", + "from sqlalchemy.orm import Session\n", + "\n", + "@pytest.fixture()\n", + "def create_test_sql() -> Generator[Session, None, None]:\n", + " # create_test_sql_table\n", + " # create sql connection\n", + " yield sql_session\n", + " # delete sql connection\n", + " # delete sql tables\n", + " \n", + "def test_sql_table(create_test_sql) -> None:\n", + " assert sql_engine.query(HelloWorldTable).get(\"hello\") == \"world\"\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Tests are run with the following command\n", + "\n", + "```bash\n", + "poetry run pytest tests/\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Code Coverage\n", + "\n", + "Code coverage reports count how many times a line was executed and therfore tested.\n", + "\n", + "They can eiter be integrated into an IDE for higliting of missing code or reviewed directly.\n", + "\n", + "Either over third party software or by the html version that can be found with the build artifacts." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## pre-commits\n", + "\n", + "Git is a filesystem based versioning application.\n", + "That includes parts of its code are accessible and ment to be manipulated.\n", + "At different times of the application a manipulate script can be executed.\n", + "Typicle moments are on:\n", + "- pull\n", + "- push / push received\n", + "- pre-commit / pre-merge / pre-rebase\n", + "\n", + "The `pre-commit` package hooks into the commit and implements a set of programms before committing\n", + "Files can be **edited** or **validated**" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "`pre-commit` execute fast tests on changed files to ensure quality of code.\n", + "\n", + "**Bohems Law**\n", + "\n", + "![Bohems Law](bohems-law.png)\n", + "\n", + "Since they are executed on commit on only the newly committed files a response is much faster.\n", + "The normally only include linting and format validation tools no testing.\n", + "Sometimes autofixer such as black, isort and ruff." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![Pre-commit.PNG](Pre-commit.PNG)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Configured pre-commit hooks:\n", + "\n", + "- format checker + pretty formatter (xml,json,ini,yaml,toml)\n", + "- secret checker => No passwords or private keys\n", + "- file naming convention checker for tests\n", + "- syntax checker\n", + "- ruff => Linter\n", + "- black => Whitespace formatter\n", + "- poetry checker\n", + "- mypy => typing checker\n", + "- md-toc => Adds a table oc contents to an *.md where `` is placed" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Pre commits are installed with the command\n", + "```bash\n", + "pre-commit install\n", + "```\n", + "The pre commits after that executed on each commit.\n", + "\n", + "If the pre-commits need to be skipped the -n option skips them on commit.\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Documentation build with sphinx\n", + "\n", + "There is no single way to use to build a python documentation.\n", + "Sphinx is a commonly used libarary.\n", + "\n", + "- Builds a package documentation from code\n", + "- Native in rest\n", + "- Capable of importing *.md, *.ipynb\n", + "- Commonly used read the docs theme\n", + "- Allows links to third party documentations via inter-sphinx (pandas, numpy, etc.)\n", + "\n", + "Currently implemented to build a documentation on pull_requests and the main branch.\n", + "\n", + "Automatically deployed from the main branch." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## GitHub\n", + "\n", + "GitHub is a central hub for git repositories to be stored and manged.\n", + "\n", + "In addition, it hosts project management tools and devops tools for:\n", + "- testing\n", + "- linting\n", + "- analysing\n", + "- building\n", + "- deploying code\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Example GitHub action workflow\n", + "\n", + "Workflows are defined in `.github/workflows/some-workflow.yaml`\n", + "```yaml\n", + "name: Build\n", + "\n", + "on: # when to run the action\n", + " pull_request:\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "A single action of a workflow.\n", + "\n", + "```yaml\n", + "jobs:\n", + " build:\n", + " runs-on: ubuntu-latest # on what kind of runner to run an action\n", + " steps:\n", + " - uses: actions/setup-python@v4 # setup python\n", + " with:\n", + " python-version: 3.11\n", + " - uses: snok/install-poetry@v1 # setup poetry\n", + " with:\n", + " version: 1.4.2\n", + " virtualenvs-path: ~/local/share/virtualenvs\n", + " - uses: actions/checkout@v3\n", + " - run: |\n", + " poetry install --without develop,doc,lint,test\n", + " poetry build\n", + " - uses: actions/upload-artifact@v3\n", + " with:\n", + " name: builds\n", + " path: dist/\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Test and Build-pipeline with GitHub actions\n", + "On push and pull request:\n", + "- Lint + license check + dependency security audit\n", + " - Problem summaries in GitHub actions + Problem notification via mail\n", + "- Test with pytest + coverage reports + coverage comment on pull request\n", + "- Python Build\n", + "- Documentation Build\n", + "- Documentation deployment to GitHub pages (on push to main)\n", + "\n", + "On Tag:\n", + "- Push: Docker architecture and CD context still unclear" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Build artifacts\n", + "\n", + "- Dependencies / versions and licenses\n", + "- Security report\n", + "- Unit test reports and coverage report as `.coverage` / `coverage.xml` / `html`!\n", + "- Build wheel\n", + "- Build documentation\n", + "- probably. one or more container\n", + "- if needed documentation as pdf" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![Action Snapshot](Action.PNG)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![Action Summary](Action-Summary.PNG)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![Lint-error.PNG](Lint-error.PNG)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![Coverage.PNG](Coverage.PNG)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "![Pull Request](Pull_request.PNG)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Dependabot\n", + "\n", + "Dependabot is a GitHub tool to refresh dependencies if newer ones come available or if the currently used ones develop security flaws.\n", + "Dependabot is currently not python compatible.\n", + "Dependabot is a tool for a passive maintenance of a project without the need for much human overside." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### GitHub Runner Configuration and what does not work\n", + "\n", + "Most GitHub actions for python reley on the `actions/python-setup` action.\n", + "This action is not available for linux arm.\n", + "Workarounds with a python docker container / an installation of python on the runner and other tools do not work well." + ] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.0" + }, + "rise": { + "scroll": true + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/documentations/seminararbeiten/DevOps/bohems-law.png b/documentations/seminararbeiten/DevOps/bohems-law.png new file mode 100644 index 0000000000000000000000000000000000000000..27b01bc378fb34e266e4ad3060e4b16a28063159 GIT binary patch literal 21235 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%0Dcf#S zz5~I_u@%%cG6X@nCu>`f9I9#AJ1Q_>9*tnM>k9g(jT6C2P8)6?p>5- zrL1AIlQe!{yeRNy+>QBg9+y^4Rr(GcQXes$An9G>ou{q7pw6vlyZS5slE_Rwo)=%M z_1DxfbAG53ix8p9fKI7TsmjiZ;yKdKAof|wYIRYHjMI9yI9p^0-}VTK1g9cQ39m{| zYC~3lty&6!(UC(t3aiw7zcwYRXUiDn@cPx?Hs1v)5|a~B6nH`+Vr^tPC+e$r&M6mP5)N04T{l`D!Ss7?v&^<&Zkg?j)eeTPx zFX`P1U0avV`Od3Ku%xs|OiC?J=1?QqU4(UF^5Mvg6$&e5(P(6IMxH?>!Zm{DTu+)k zDq%wLMs#IULpl|Rd5aq{6<@?uj)yPKy(t9SBVjk=)qhxryGxE*o!Xg<{SLL?36W2o z{SSEShN(D9#;8TdXT`6_XX9guIp5ew$S8p`W5YxthN^`aYNc__ROltTYkVXc z*&@^a0u(-`RKZb#!0d$oH2x=JxZLj?uO3Qf2jT=$_U8DVe!-inB9KFjFy<}TK)t@qs&qXt8pthAaO>Q^L$1IW!Dw*`>MqHOm|tJ4XO&5jj+2mFnm9svZG7a- z8_h<6Vz|X0NBBcJ`f~ViMMKt8ZH|+mwriG%CMH1>C)U25-U_kB%@SK9Q&4;&)bq*-3!ViH~uV(8!Qug#?wb=~We3qVgntTNf#}~B7 zT>m4vk~00n@7F(2HvD_{vk7z387pl7Pc}>t?6QGi%o);%JSOXxU(W_-y@dopRV!or z)s1uBa`_6Q4?j5}n}-TEO*$v}z;yImXEuSRAX@Umq>p$R|!iV)}*!_Y-i7K!x8 zg!Jgq`^W%=eN8rfWU>DwvUTXV?9Nx}sUUd?_t0CR1lRk;%B4uzgNOu$+`s8hc6Q>R zH#j)(k!pQ)T$2VMK4y)o1}97*|DqiC<`mOMeMAbH?+}E1dQox2lpJlsv^MJKNuxeY zwz=U_6z)4xaVlbdq_@V43Yi&Em>A+beG>smrxy>DgT?VLGu)EJh@YgaQE|rXF3Td~ zsVzX_^SA$OuDw!Ch$RczzoW>AQXmbgo)N_5c2HpO!tiPWhRQ|6T2HnuY5>eIl{I9wZ9eO(zDLL~u}C zs%qhA{adr#zHOgT7O>4mp}0`>Z4kY8X+#z5i~UhzWQu+i5<1Z&k>uW_6IC)aRdb$_ z6Xp14^LkCAsTBQ=!pq>$pwFUyfc0(~#%>|({Gr^c_Sb!GgQ{ae3$Mx*t`lX-AKRHq zK_qfKxm&5&|G)&Md;8?c4UNknjb#Hj-cP@tfg>1w6FFxHx0eY=WQ)#lz-?mYI zOihy*=tC96V~88&hadz7rp$`DO0l1DF9Rnr(&yRuJ*`Q@Bw6V- zBRMHW7a=iG_ua~A?;05f5;b{D;k+w2PHObG_H4kB_d_v-TIo_`qjhhUnUk3qmUb@P zfX{`vNS|Nx1B?D0jNJ$B`%JZ%q$Jb&k3@EY6p9yJ#ak#2p?Bo0My@0kavb?}EiaNI zok{~{dY99F)LxXm>q%dlOBDGLgT47U1A-XP={rR;h|zQUClQ3~D2ngae2hs}i3pg# z;*?4nw4)rh!_eWW_sKs8TcSBAP_~`wf~{vq4L1tT`X_4_buM}`?_$F>`6D}VWm+o6 z4pE!M6>Qn>jE4?A=i|vdjc~Reo~sk7k87+V6gi)<&)#>0CZlONaV*oR zu}2_)k#9xsugrH?nMlXW35+#I(BE2*AI?=do!qw0mEReju*9hGBw>kT|B_iZayzT^ zhXy4YPJOa#8O!gl>pnYNIp+O*tR5n+vHHwo@(>omdedL;0HRN++eA~T!u3PXoGJ_O zG%@Ni?O$SzPR0QLDCqAGDYBld%+f2FzGs_rZKA0>Pn4N8e4+H_+Ic^TA#7u1VIls~ z7N*Lgb+F2^T|fE^a>5H%;7Jo=r&6H4$cF5BNxy?=3X~b1;V^r1)t<9qOW+L4Rg5mv z$(Bo#bkBmDjgGxprIacWd3=I#7^-*_7MRC>*H5bPo2stn7*HrO0%%a91!Q*CqC+?= zijo;&(_yLShssmOJe0r}Cw_ffmYh`{5REI|+?(R>vzP`q^CcksL9XJ@6~CM#LvZuS zFz&Qq$RGSg5&c8Ardq}#+z`ydvGtW;&-DEEenWKzjq^y7LvReS_yq9-W_p7_d~tdx z?h;e;ypw#_aG;1CNz~js@bT>C&c;BZA#UP##XQ_sGLG)VJ4m~~v{t$GmwGY#PvnuJ z%@LyH^E;R85U4~>HNB$rdj`&iAp*M~mM>J_0n(iwkiC2K+5V{Xa6hwz2vd4&S3IHv zp6amlEm-D)MEQl`iWT6q@zuLzU-@|xE;g2i9Xvcg=2B%) z>(G-Dq)m1hZhv_kpxhhcFo|+JYwP>R)m&>p;Ti_gP%iMUD(`H_uD#RCSB}+faGL<) ziC~#xG!<14H!WP}h)~@XS3ZCwXl1?-%F>EZWUkPCw>A}8m27Bw?&61ASXd-m2Grif zt!a%-d5&l-4Ghu5q`bayW@lkRA0^=(cToLM|1ZC*BWFSlp^BlouK|qgEdxJ5&=bn^ zp9~C|FD-_{dk9bq%^Wj4qbl3Cf+l?4Xa)W1ksNwxt6~nk!&{ooP`X!h%nl)B0ex|l zXV7mPU+fLJ?xpdD-dmR<@>;A4j_t|4PHU{o6ZGZ2Bc$OjxO69-1CI6(QXzNx*1BeR z{Sf6~p~i9i!)J_GnwsyxF8R|H*Z%zpMZUO(V${)_MH74^oS*aK<#e0i_=X>B^{M_CDXxTLQSzqNwwG29v}c=8EbM-THMJ$fs^l+px`}W#3$ApfPSXyAry%C`u93&styQrjKLS~tF@6!8X0mL-^VzXfc+#l7L`puo^{Eok8P;JOw#cTIo@-gmg$h2{7ynL;9+Kc>(5p4MR1b_%T7Rr;fUR?I32KHNwsn@u}g5VhVA zejYFg!iJ>qa&~e>BXe{e)_^no zfZghV-Hd^2Q3*|U1rdWSmR{nO)k*Bhf|TNfiZSk#fhp%(N0;SM*qrD3D#IV;B8<%I z;~ZW=QVpB$FJ`O!Lpg@5^cMA0#Nhm2^zpTOHqrWRVg=(0dS$CnOPbx^|V zM;q@AiK=Ahns-b4qRz9|-wRz6$Ctm|k~e$84~EQnfl z#B?VPMn0uoGkCc@L>u0|{>{MC`7Av{v}gtFh%g$qf+$*D-l%-9_Jg5q+hUD6*q)om zVw_*ciSBzFRa!Wg#Jnot-S;Mg8Q@L6EJ^{de+QJp=pj@r?9xP%P`kUV2f~^EZ@M^I z!3&TckARX(vVkGF7SnF11&3=m6nJ9wIXr;MJqP$X1O(d@(fcg^@34{+K6ep5^HNjW z`WI&3xdF88^V`^oCg1W9*2BoHS(t_wBsRN~tzuqp!*;Lx+O*&t$zZs{rL6~EQ1Rr@ zS$d$3x!2GZor#lz)b`8IpB%FSl@Yo(lb92YZ{W(1(FpL(OWQ*JlwtFgKZl21Mddsv zap*}a>|_nrjAjjTid}gB&oYQv*!eOeSj6j->S(lUXB^AQ#zK`!{>4X00B)DZcssp& zs({pFiuf_$$Wm+F6H+*S*&{3~X#U(L+<35^ueos?2=iBRwIoK*I(x1zj`sJSeE?%W znxAO)ryVM&Dy2Q6JUg2oA9t^^Za^JsaT5qry`o_?2o(JV!PykGR=GheCt zzb4bLIFMWNi811g6)@Z1^yMnrUmCFp#%pCrVF7AylfbQnl>UtzKxY$x&H?z2f&%33 zL(s2=a}B^*x4g9dw>D08)tHj?qLd6bIr`vXs==?#-ztISe`#ZlT`@}O^n1gpL>1Q3 zsRc$e7MI@4;5F_WR&A?DzNYG^+nICy9lXkvrnBbV>$ z`Fm5MfjW6h*>S|gF;n&UnF;Ap>`%Dt#M!`h^gvb1&lswU-{nUeCJ;Z7);0!2RA2aN z2o++Np|V2Ik|l%ze#^@4?!Or?FKTs6K3IkDho|ptQu^j3O8;1l#ntuCvnMWG-TJ!@ zb&vYIM9N^%_3^2#A_$M?;HpUzuzC+oC2mLy&Wrr6;3ja z@vyKoF|L`nBJaaR2OWg*PtKi@10j`4DtzgN*d5Q0H@W9eZ~s;iI|>ZWc0n?iynz#$2)_sE8gbdSCZM~g1%LG}X zPN^9GsTkMRtdLybl{e?L*TUTmEub#O$o1jpzYG~!#%?L!ZfCL0FEw0r@4VXZvzs@y zjQ4S!nJ|6NeNmNEiy+)T&yB~Mny6T0l+L^bc6&9Gq}zim+2DCl?5)PJhY}MG&x-Ep zNPnhpMHuc*^PZh7#Xy7=OOv|*ymYwZ;*ST0egDHRiLH`jvyWPjj|JX5y}D&5heVY9 z!6_l+58E^C3dUbIaFVY!I4-2{iH)kZ#MZULg&x2H%rg2PWm2v55Zpt-+erg(R7_3@ zrKvEx_fRtKlhzqpd-r3jT=;Fb(|IpSu5Ze%hyIx+5ZSrQtX3>Np%A=X)N($GV?4yc z9Rmd2SXBRWX7>k3tZ>AD@MZ~NO^V&Ic6XC_l60HiUgrW%%Q4r%v9{R?u&DmyM9q@`V(({fT^6Zu|K@KPjn}PSW9KE%4Ts+$ zW&QQ6tz$Gem7l*_$mjQmXqB1eg%QDx*1(jO(EC+{xWyOT*|)bCzd=|(OK~$q`tPT^ zIvla9&3M8n*Tx!`R+`e|`?{uZ@EQ0?o#*@Kxy@7>BP)BgJR?9}yvuJXo<>vJMEsdT>?DdAWx#P_J};jZl5( z4tsSY#?HNF^|{NL076^WqzCUI_4N5VY6i1j`_n{U+O;x6{{HCfC!^z(B&LYwXnwvl zru}u)zB$u%ViH!V*J+{;32?PsxLAcl2t3=7#l7cQtsl=u9=EvhB)USY?wX#bY-S|e zADe2haI`|<$2?~tg_}@aNmUhn=@#B(w%-RInvlLbY;hnbmddV~MVld<&)WFX z+8JwJOV4CDmG#EV)%)Ss4;0qH>9+85cFZt7^|sc*w|(s)%x0G#V%gIz8)%a0FN_Sg zzLlISQ|3uo{i9FxDwmGoo1WcchwGFQH;M%CM>>WLj32&tv7Q0Lj#IvUyEKxEqQua3 z@X6!@{(Gi3@^&Yee~4i5PtmIfZ^_C-aMkC;nPuy#ttpfVti7*WA$rJr?<}WlL#)Ak z4odj331h)P#G8hKiFZ$iwCLD`vt^Cz*=C@?)4HS|6J3?Cu^nlHoYPi=U^t`p(#xD! z`B7zBX03Yhc<|XSVqd-M3A!3%GBf?BM>}eX7>imfh31DZC+I(wiA;vqWw!dy%^<7ub-AUQ%RzexFUq zcbnCx`?k+*v*UHx3vIVCg!0MGTbLI3~& literal 0 HcmV?d00001 diff --git a/documentations/timeline.md b/documentations/timeline.md index 28249fb..02aaca5 100644 --- a/documentations/timeline.md +++ b/documentations/timeline.md @@ -1,75 +1,71 @@ -```mermaid -%%{init: -{ - "theme": "neutral" -} -}%% -gantt -%%Timeline created 11-04-2023 -%%use Mermaid.js for visualization - title Timeline PG Transparenzregister - dateFormat YYYY-MM-DD - section Organisation - Kennenlernen des Projektteams : done, a1, 2023-03-30, 1d - Erstellen des Organigramms : done, after a1 , 1d - GitHub : done, 2023-04-06, 7d - Zeitplanung SoSe : active , 2023-04-06, 7d +# Timeline +```{mermaid} - section Dokumentation - Meeting Notes: active, 2023-03-30, 10w - Seminarthemen: active, 2023-04-13, 8w - Lastenheft: active, 2023-04-06, 5w - Pflichtenheft: milestone, 2023-05-11 - Reserve: crit, 2023-06-08, 1w + gantt + + title Timeline PG Transparenzregister + dateFormat YYYY-MM-DD + section Organisation + Kennenlernen des Projektteams : done, a1, 2023-03-30, 1d + Erstellen des Organigramms : done, after a1 , 1d + GitHub : done, 2023-04-06, 7d + Zeitplanung SoSe : active , 2023-04-06, 7d + + section Dokumentation + Meeting Notes: active, 2023-03-30, 10w + Seminarthemen: active, 2023-04-13, 8w + Lastenheft: active, 2023-04-06, 5w + Pflichtenheft: milestone, 2023-05-11 + Reserve: crit, 2023-06-08, 1w - section Meeting - Weekly 1 : done, 2023-03-30, 0.5h - Statustermin 1 : done ,2023-03-30 , 1h - Weekly 2 : done, 2023-04-06, 2h + section Meeting + Weekly 1 : done, 2023-03-30, 0.5h + Statustermin 1 : done ,2023-03-30 , 1h + Weekly 2 : done, 2023-04-06, 2h - Statustermin 2 : active, 2023-04-13, 1h - Weekly 3 : active, 2023-04-13, 0.5h - Weekly 4 : active, 2023-04-20, 2h + Statustermin 2 : active, 2023-04-13, 1h + Weekly 3 : active, 2023-04-13, 0.5h + Weekly 4 : active, 2023-04-20, 2h - Weekly 5 : active, 2023-04-27, 0.5h - Statustermin 3 : active, 2023-04-27, 1h + Weekly 5 : active, 2023-04-27, 0.5h + Statustermin 3 : active, 2023-04-27, 1h - Weekly 6 : active, 2023-05-04, 2h + Weekly 6 : active, 2023-05-04, 2h - Weekly 7 : active, 2023-05-11, 0.5h - Statustermin 4 : active, 2023-05-11, 1h + Weekly 7 : active, 2023-05-11, 0.5h + Statustermin 4 : active, 2023-05-11, 1h - Weekly 8 : active, 2023-05-18, 2h - Weekly 9 : active, 2023-05-25, 0.9h - Statustermin 5 : active, 2023-05-25, 1h + Weekly 8 : active, 2023-05-18, 2h + Weekly 9 : active, 2023-05-25, 0.9h + Statustermin 5 : active, 2023-05-25, 1h - Weekly 10 : active, 2023-06-01, 2h - Weekly 11 : active, 2023-06-01, 0.9h - Statustermin 6 : active, 2023-06-08, 1h + Weekly 10 : active, 2023-06-01, 2h + Weekly 11 : active, 2023-06-01, 0.9h + Statustermin 6 : active, 2023-06-08, 1h - section Recherche - Unternehmensformen : active, 2023-04-06, 14d - Kennzahlen : active, 2023-04-10, 14d - Datenquellen : active, 2023-04-10, 14d - rechtliche Verwendbarkeit: active, 2023-04-06, 18d - Verwendete Metriken, Datenquellen, Rechtmäßigkeit: milestone, 2023-04-24 - Reserve: crit, 2023-04-24, 3d + section Recherche + Unternehmensformen : active, 2023-04-06, 14d + Kennzahlen : active, 2023-04-10, 14d + Datenquellen : active, 2023-04-10, 14d + rechtliche Verwendbarkeit: active, 2023-04-06, 18d + Verwendete Metriken, Datenquellen, Rechtmäßigkeit: milestone, 2023-04-24 + Reserve: crit, 2023-04-24, 3d - section Definition - fachl. Aufgabe : active, 2023-04-27, 1d - techn. Aufgabe : active, 2023-04-27, 1d - Funktionelle Anf. : active, 2023-04-27, 7d - Qualitative Anf. : active, 2023-04-27, 7d - Modell: active, 2023-05-04, 7d - Hierarchie: active, 2023-05-04, 7d - Definition der Anforderungen : milestone, 2023-05-11 - Reserve: crit, 2023-05-11, 1w + section Definition + fachl. Aufgabe : active, 2023-04-27, 1d + techn. Aufgabe : active, 2023-04-27, 1d + Funktionelle Anf. : active, 2023-04-27, 7d + Qualitative Anf. : active, 2023-04-27, 7d + Modell: active, 2023-05-04, 7d + Hierarchie: active, 2023-05-04, 7d + Definition der Anforderungen : milestone, 2023-05-11 + Reserve: crit, 2023-05-11, 1w - section Proof of concept - Project Proposal : active, 2023-05-18, 10d - Vorstellung Project Proposal: milestone, 2023-05-28 - Implementierung des Proposals: active, 2023-05-25, 14d - Vorstellung Proof of Concept: milestone, 2023-06-08 - Reserve: crit, 2023-06-08, 1w + section Proof of concept + Project Proposal : active, 2023-05-18, 10d + Vorstellung Project Proposal: milestone, 2023-05-28 + Implementierung des Proposals: active, 2023-05-25, 14d + Vorstellung Proof of Concept: milestone, 2023-06-08 + Reserve: crit, 2023-06-08, 1w ``` diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000..28fdb24 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,3688 @@ +# This file is automatically @generated by Poetry 1.4.0 and should not be changed by hand. + +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] + +[[package]] +name = "anyio" +version = "3.7.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "anyio-3.7.0-py3-none-any.whl", hash = "sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0"}, + {file = "anyio-3.7.0.tar.gz", hash = "sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce"}, +] + +[package.dependencies] +idna = ">=2.8" +sniffio = ">=1.1" + +[package.extras] +doc = ["Sphinx (>=6.1.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme", "sphinxcontrib-jquery"] +test = ["anyio[trio]", "coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "mock (>=4)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (<0.22)"] + +[[package]] +name = "appnope" +version = "0.1.3" +description = "Disable App Nap on macOS >= 10.9" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] + +[[package]] +name = "argon2-cffi" +version = "21.3.0" +description = "The secure Argon2 password hashing algorithm." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-21.3.0.tar.gz", hash = "sha256:d384164d944190a7dd7ef22c6aa3ff197da12962bd04b17f64d4e93d934dba5b"}, + {file = "argon2_cffi-21.3.0-py3-none-any.whl", hash = "sha256:8c976986f2c5c0e5000919e6de187906cfd81fb1c72bf9d88c01177e77da7f80"}, +] + +[package.dependencies] +argon2-cffi-bindings = "*" + +[package.extras] +dev = ["cogapp", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "pre-commit", "pytest", "sphinx", "sphinx-notfound-page", "tomli"] +docs = ["furo", "sphinx", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] + +[[package]] +name = "argon2-cffi-bindings" +version = "21.2.0" +description = "Low-level CFFI bindings for Argon2" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] + +[package.dependencies] +cffi = ">=1.0.1" + +[package.extras] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] +tests = ["pytest"] + +[[package]] +name = "arrow" +version = "1.2.3" +description = "Better dates & times for Python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "arrow-1.2.3-py3-none-any.whl", hash = "sha256:5a49ab92e3b7b71d96cd6bfcc4df14efefc9dfa96ea19045815914a6ab6b1fe2"}, + {file = "arrow-1.2.3.tar.gz", hash = "sha256:3934b30ca1b9f292376d9db15b19446088d12ec58629bc3f0da28fd55fb633a1"}, +] + +[package.dependencies] +python-dateutil = ">=2.7.0" + +[[package]] +name = "asttokens" +version = "2.2.1" +description = "Annotate AST trees with source code positions" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "asttokens-2.2.1-py2.py3-none-any.whl", hash = "sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c"}, + {file = "asttokens-2.2.1.tar.gz", hash = "sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3"}, +] + +[package.dependencies] +six = "*" + +[package.extras] +test = ["astroid", "pytest"] + +[[package]] +name = "async-lru" +version = "2.0.2" +description = "Simple LRU cache for asyncio" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "async-lru-2.0.2.tar.gz", hash = "sha256:3b87ec4f2460c52cc7916a0138cc606b584c75d1ef7d661853c95d1d3acb869a"}, + {file = "async_lru-2.0.2-py3-none-any.whl", hash = "sha256:d7c2b873e9af5c5a1f0a87a6c145e7e0b4eb92342b7235dda9dd5b10e950d6e2"}, +] + +[package.dependencies] +typing-extensions = ">=4.0.0" + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] + +[[package]] +name = "backcall" +version = "0.2.0" +description = "Specifications for callback functions passed in to an API" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, + {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, +] + +[[package]] +name = "beautifulsoup4" +version = "4.12.2" +description = "Screen-scraping library" +category = "dev" +optional = false +python-versions = ">=3.6.0" +files = [ + {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"}, + {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"}, +] + +[package.dependencies] +soupsieve = ">1.2" + +[package.extras] +html5lib = ["html5lib"] +lxml = ["lxml"] + +[[package]] +name = "black" +version = "23.3.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "black-23.3.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:0945e13506be58bf7db93ee5853243eb368ace1c08a24c65ce108986eac65915"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:67de8d0c209eb5b330cce2469503de11bca4085880d62f1628bd9972cc3366b9"}, + {file = "black-23.3.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:7c3eb7cea23904399866c55826b31c1f55bbcd3890ce22ff70466b907b6775c2"}, + {file = "black-23.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32daa9783106c28815d05b724238e30718f34155653d4d6e125dc7daec8e260c"}, + {file = "black-23.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:35d1381d7a22cc5b2be2f72c7dfdae4072a3336060635718cc7e1ede24221d6c"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:a8a968125d0a6a404842fa1bf0b349a568634f856aa08ffaff40ae0dfa52e7c6"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c7ab5790333c448903c4b721b59c0d80b11fe5e9803d8703e84dcb8da56fec1b"}, + {file = "black-23.3.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:a6f6886c9869d4daae2d1715ce34a19bbc4b95006d20ed785ca00fa03cba312d"}, + {file = "black-23.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f3c333ea1dd6771b2d3777482429864f8e258899f6ff05826c3a4fcc5ce3f70"}, + {file = "black-23.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:11c410f71b876f961d1de77b9699ad19f939094c3a677323f43d7a29855fe326"}, + {file = "black-23.3.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:1d06691f1eb8de91cd1b322f21e3bfc9efe0c7ca1f0e1eb1db44ea367dff656b"}, + {file = "black-23.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50cb33cac881766a5cd9913e10ff75b1e8eb71babf4c7104f2e9c52da1fb7de2"}, + {file = "black-23.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e114420bf26b90d4b9daa597351337762b63039752bdf72bf361364c1aa05925"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:48f9d345675bb7fbc3dd85821b12487e1b9a75242028adad0333ce36ed2a6d27"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:714290490c18fb0126baa0fca0a54ee795f7502b44177e1ce7624ba1c00f2331"}, + {file = "black-23.3.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:064101748afa12ad2291c2b91c960be28b817c0c7eaa35bec09cc63aa56493c5"}, + {file = "black-23.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:562bd3a70495facf56814293149e51aa1be9931567474993c7942ff7d3533961"}, + {file = "black-23.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:e198cf27888ad6f4ff331ca1c48ffc038848ea9f031a3b40ba36aced7e22f2c8"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:3238f2aacf827d18d26db07524e44741233ae09a584273aa059066d644ca7b30"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:f0bd2f4a58d6666500542b26354978218a9babcdc972722f4bf90779524515f3"}, + {file = "black-23.3.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:92c543f6854c28a3c7f39f4d9b7694f9a6eb9d3c5e2ece488c327b6e7ea9b266"}, + {file = "black-23.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a150542a204124ed00683f0db1f5cf1c2aaaa9cc3495b7a3b5976fb136090ab"}, + {file = "black-23.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:6b39abdfb402002b8a7d030ccc85cf5afff64ee90fa4c5aebc531e3ad0175ddb"}, + {file = "black-23.3.0-py3-none-any.whl", hash = "sha256:ec751418022185b0c1bb7d7736e6933d40bbb14c14a0abcf9123d1b159f98dd4"}, + {file = "black-23.3.0.tar.gz", hash = "sha256:1c7b8d606e728a41ea1ccbd7264677e494e87cf630e399262ced92d4a8dac940"}, +] + +[package.dependencies] +click = ">=8.0.0" +ipython = {version = ">=7.8.0", optional = true, markers = "extra == \"jupyter\""} +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tokenize-rt = {version = ">=3.2.0", optional = true, markers = "extra == \"jupyter\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "bleach" +version = "6.0.0" +description = "An easy safelist-based HTML-sanitizing tool." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "bleach-6.0.0-py3-none-any.whl", hash = "sha256:33c16e3353dbd13028ab4799a0f89a83f113405c766e9c122df8a06f5b85b3f4"}, + {file = "bleach-6.0.0.tar.gz", hash = "sha256:1a1a85c1595e07d8db14c5f09f09e6433502c51c595970edc090551f0db99414"}, +] + +[package.dependencies] +six = ">=1.9.0" +webencodings = "*" + +[package.extras] +css = ["tinycss2 (>=1.1.0,<1.2)"] + +[[package]] +name = "certifi" +version = "2023.5.7" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.5.7-py3-none-any.whl", hash = "sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716"}, + {file = "certifi-2023.5.7.tar.gz", hash = "sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7"}, +] + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "cfgv" +version = "3.3.1" +description = "Validate configuration and produce human readable error messages." +category = "dev" +optional = false +python-versions = ">=3.6.1" +files = [ + {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, + {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.1.0" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.1.0.tar.gz", hash = "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win32.whl", hash = "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448"}, + {file = "charset_normalizer-3.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win32.whl", hash = "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909"}, + {file = "charset_normalizer-3.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win32.whl", hash = "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974"}, + {file = "charset_normalizer-3.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win32.whl", hash = "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0"}, + {file = "charset_normalizer-3.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win32.whl", hash = "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1"}, + {file = "charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b"}, + {file = "charset_normalizer-3.1.0-py3-none-any.whl", hash = "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d"}, +] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "comm" +version = "0.1.3" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "comm-0.1.3-py3-none-any.whl", hash = "sha256:16613c6211e20223f215fc6d3b266a247b6e2641bf4e0a3ad34cb1aff2aa3f37"}, + {file = "comm-0.1.3.tar.gz", hash = "sha256:a61efa9daffcfbe66fd643ba966f846a624e4e6d6767eda9cf6e993aadaab93e"}, +] + +[package.dependencies] +traitlets = ">=5.3" + +[package.extras] +lint = ["black (>=22.6.0)", "mdformat (>0.7)", "mdformat-gfm (>=0.3.5)", "ruff (>=0.0.156)"] +test = ["pytest"] +typing = ["mypy (>=0.990)"] + +[[package]] +name = "contourpy" +version = "1.1.0" +description = "Python library for calculating contours of 2D quadrilateral grids" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "contourpy-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:89f06eff3ce2f4b3eb24c1055a26981bffe4e7264acd86f15b97e40530b794bc"}, + {file = "contourpy-1.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dffcc2ddec1782dd2f2ce1ef16f070861af4fb78c69862ce0aab801495dda6a3"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ae46595e22f93592d39a7eac3d638cda552c3e1160255258b695f7b58e5655"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:17cfaf5ec9862bc93af1ec1f302457371c34e688fbd381f4035a06cd47324f48"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18a64814ae7bce73925131381603fff0116e2df25230dfc80d6d690aa6e20b37"}, + {file = "contourpy-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c81f22b4f572f8a2110b0b741bb64e5a6427e0a198b2cdc1fbaf85f352a3aa"}, + {file = "contourpy-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53cc3a40635abedbec7f1bde60f8c189c49e84ac180c665f2cd7c162cc454baa"}, + {file = "contourpy-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:1f795597073b09d631782e7245016a4323cf1cf0b4e06eef7ea6627e06a37ff2"}, + {file = "contourpy-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0b7b04ed0961647691cfe5d82115dd072af7ce8846d31a5fac6c142dcce8b882"}, + {file = "contourpy-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:27bc79200c742f9746d7dd51a734ee326a292d77e7d94c8af6e08d1e6c15d545"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:052cc634bf903c604ef1a00a5aa093c54f81a2612faedaa43295809ffdde885e"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9382a1c0bc46230fb881c36229bfa23d8c303b889b788b939365578d762b5c18"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5cec36c5090e75a9ac9dbd0ff4a8cf7cecd60f1b6dc23a374c7d980a1cd710e"}, + {file = "contourpy-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f0cbd657e9bde94cd0e33aa7df94fb73c1ab7799378d3b3f902eb8eb2e04a3a"}, + {file = "contourpy-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:181cbace49874f4358e2929aaf7ba84006acb76694102e88dd15af861996c16e"}, + {file = "contourpy-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:fb3b7d9e6243bfa1efb93ccfe64ec610d85cfe5aec2c25f97fbbd2e58b531256"}, + {file = "contourpy-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bcb41692aa09aeb19c7c213411854402f29f6613845ad2453d30bf421fe68fed"}, + {file = "contourpy-1.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5d123a5bc63cd34c27ff9c7ac1cd978909e9c71da12e05be0231c608048bb2ae"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62013a2cf68abc80dadfd2307299bfa8f5aa0dcaec5b2954caeb5fa094171103"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b6616375d7de55797d7a66ee7d087efe27f03d336c27cf1f32c02b8c1a5ac70"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317267d915490d1e84577924bd61ba71bf8681a30e0d6c545f577363157e5e94"}, + {file = "contourpy-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d551f3a442655f3dcc1285723f9acd646ca5858834efeab4598d706206b09c9f"}, + {file = "contourpy-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e7a117ce7df5a938fe035cad481b0189049e8d92433b4b33aa7fc609344aafa1"}, + {file = "contourpy-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:d4f26b25b4f86087e7d75e63212756c38546e70f2a92d2be44f80114826e1cd4"}, + {file = "contourpy-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc00bb4225d57bff7ebb634646c0ee2a1298402ec10a5fe7af79df9a51c1bfd9"}, + {file = "contourpy-1.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:189ceb1525eb0655ab8487a9a9c41f42a73ba52d6789754788d1883fb06b2d8a"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f2931ed4741f98f74b410b16e5213f71dcccee67518970c42f64153ea9313b9"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30f511c05fab7f12e0b1b7730ebdc2ec8deedcfb505bc27eb570ff47c51a8f15"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:143dde50520a9f90e4a2703f367cf8ec96a73042b72e68fcd184e1279962eb6f"}, + {file = "contourpy-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e94bef2580e25b5fdb183bf98a2faa2adc5b638736b2c0a4da98691da641316a"}, + {file = "contourpy-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ed614aea8462735e7d70141374bd7650afd1c3f3cb0c2dbbcbe44e14331bf002"}, + {file = "contourpy-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:438ba416d02f82b692e371858143970ed2eb6337d9cdbbede0d8ad9f3d7dd17d"}, + {file = "contourpy-1.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a698c6a7a432789e587168573a864a7ea374c6be8d4f31f9d87c001d5a843493"}, + {file = "contourpy-1.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:397b0ac8a12880412da3551a8cb5a187d3298a72802b45a3bd1805e204ad8439"}, + {file = "contourpy-1.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:a67259c2b493b00e5a4d0f7bfae51fb4b3371395e47d079a4446e9b0f4d70e76"}, + {file = "contourpy-1.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2b836d22bd2c7bb2700348e4521b25e077255ebb6ab68e351ab5aa91ca27e027"}, + {file = "contourpy-1.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084eaa568400cfaf7179b847ac871582199b1b44d5699198e9602ecbbb5f6104"}, + {file = "contourpy-1.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:911ff4fd53e26b019f898f32db0d4956c9d227d51338fb3b03ec72ff0084ee5f"}, + {file = "contourpy-1.1.0.tar.gz", hash = "sha256:e53046c3863828d21d531cc3b53786e6580eb1ba02477e8681009b6aa0870b21"}, +] + +[package.dependencies] +numpy = ">=1.16" + +[package.extras] +bokeh = ["bokeh", "selenium"] +docs = ["furo", "sphinx-copybutton"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.2.0)", "types-Pillow"] +test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] +test-no-images = ["pytest", "pytest-cov", "wurlitzer"] + +[[package]] +name = "coverage" +version = "7.2.7" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "coverage-7.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d39b5b4f2a66ccae8b7263ac3c8170994b65266797fb96cbbfd3fb5b23921db8"}, + {file = "coverage-7.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d040ef7c9859bb11dfeb056ff5b3872436e3b5e401817d87a31e1750b9ae2fb"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba90a9563ba44a72fda2e85302c3abc71c5589cea608ca16c22b9804262aaeb6"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7d9405291c6928619403db1d10bd07888888ec1abcbd9748fdaa971d7d661b2"}, + {file = "coverage-7.2.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31563e97dae5598556600466ad9beea39fb04e0229e61c12eaa206e0aa202063"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ebba1cd308ef115925421d3e6a586e655ca5a77b5bf41e02eb0e4562a111f2d1"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cb017fd1b2603ef59e374ba2063f593abe0fc45f2ad9abdde5b4d83bd922a353"}, + {file = "coverage-7.2.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d62a5c7dad11015c66fbb9d881bc4caa5b12f16292f857842d9d1871595f4495"}, + {file = "coverage-7.2.7-cp310-cp310-win32.whl", hash = "sha256:ee57190f24fba796e36bb6d3aa8a8783c643d8fa9760c89f7a98ab5455fbf818"}, + {file = "coverage-7.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:f75f7168ab25dd93110c8a8117a22450c19976afbc44234cbf71481094c1b850"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06a9a2be0b5b576c3f18f1a241f0473575c4a26021b52b2a85263a00f034d51f"}, + {file = "coverage-7.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5baa06420f837184130752b7c5ea0808762083bf3487b5038d68b012e5937dbe"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdec9e8cbf13a5bf63290fc6013d216a4c7232efb51548594ca3631a7f13c3a3"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52edc1a60c0d34afa421c9c37078817b2e67a392cab17d97283b64c5833f427f"}, + {file = "coverage-7.2.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63426706118b7f5cf6bb6c895dc215d8a418d5952544042c8a2d9fe87fcf09cb"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:afb17f84d56068a7c29f5fa37bfd38d5aba69e3304af08ee94da8ed5b0865833"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:48c19d2159d433ccc99e729ceae7d5293fbffa0bdb94952d3579983d1c8c9d97"}, + {file = "coverage-7.2.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e1f928eaf5469c11e886fe0885ad2bf1ec606434e79842a879277895a50942a"}, + {file = "coverage-7.2.7-cp311-cp311-win32.whl", hash = "sha256:33d6d3ea29d5b3a1a632b3c4e4f4ecae24ef170b0b9ee493883f2df10039959a"}, + {file = "coverage-7.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:5b7540161790b2f28143191f5f8ec02fb132660ff175b7747b95dcb77ac26562"}, + {file = "coverage-7.2.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f2f67fe12b22cd130d34d0ef79206061bfb5eda52feb6ce0dba0644e20a03cf4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a342242fe22407f3c17f4b499276a02b01e80f861f1682ad1d95b04018e0c0d4"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:171717c7cb6b453aebac9a2ef603699da237f341b38eebfee9be75d27dc38e01"}, + {file = "coverage-7.2.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49969a9f7ffa086d973d91cec8d2e31080436ef0fb4a359cae927e742abfaaa6"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b46517c02ccd08092f4fa99f24c3b83d8f92f739b4657b0f146246a0ca6a831d"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a3d33a6b3eae87ceaefa91ffdc130b5e8536182cd6dfdbfc1aa56b46ff8c86de"}, + {file = "coverage-7.2.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:976b9c42fb2a43ebf304fa7d4a310e5f16cc99992f33eced91ef6f908bd8f33d"}, + {file = "coverage-7.2.7-cp312-cp312-win32.whl", hash = "sha256:8de8bb0e5ad103888d65abef8bca41ab93721647590a3f740100cd65c3b00511"}, + {file = "coverage-7.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:9e31cb64d7de6b6f09702bb27c02d1904b3aebfca610c12772452c4e6c21a0d3"}, + {file = "coverage-7.2.7-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:58c2ccc2f00ecb51253cbe5d8d7122a34590fac9646a960d1430d5b15321d95f"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d22656368f0e6189e24722214ed8d66b8022db19d182927b9a248a2a8a2f67eb"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a895fcc7b15c3fc72beb43cdcbdf0ddb7d2ebc959edac9cef390b0d14f39f8a9"}, + {file = "coverage-7.2.7-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84606b74eb7de6ff581a7915e2dab7a28a0517fbe1c9239eb227e1354064dcd"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0a5f9e1dbd7fbe30196578ca36f3fba75376fb99888c395c5880b355e2875f8a"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:419bfd2caae268623dd469eff96d510a920c90928b60f2073d79f8fe2bbc5959"}, + {file = "coverage-7.2.7-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2aee274c46590717f38ae5e4650988d1af340fe06167546cc32fe2f58ed05b02"}, + {file = "coverage-7.2.7-cp37-cp37m-win32.whl", hash = "sha256:61b9a528fb348373c433e8966535074b802c7a5d7f23c4f421e6c6e2f1697a6f"}, + {file = "coverage-7.2.7-cp37-cp37m-win_amd64.whl", hash = "sha256:b1c546aca0ca4d028901d825015dc8e4d56aac4b541877690eb76490f1dc8ed0"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:54b896376ab563bd38453cecb813c295cf347cf5906e8b41d340b0321a5433e5"}, + {file = "coverage-7.2.7-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3d376df58cc111dc8e21e3b6e24606b5bb5dee6024f46a5abca99124b2229ef5"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5e330fc79bd7207e46c7d7fd2bb4af2963f5f635703925543a70b99574b0fea9"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e9d683426464e4a252bf70c3498756055016f99ddaec3774bf368e76bbe02b6"}, + {file = "coverage-7.2.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d13c64ee2d33eccf7437961b6ea7ad8673e2be040b4f7fd4fd4d4d28d9ccb1e"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b7aa5f8a41217360e600da646004f878250a0d6738bcdc11a0a39928d7dc2050"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8fa03bce9bfbeeef9f3b160a8bed39a221d82308b4152b27d82d8daa7041fee5"}, + {file = "coverage-7.2.7-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:245167dd26180ab4c91d5e1496a30be4cd721a5cf2abf52974f965f10f11419f"}, + {file = "coverage-7.2.7-cp38-cp38-win32.whl", hash = "sha256:d2c2db7fd82e9b72937969bceac4d6ca89660db0a0967614ce2481e81a0b771e"}, + {file = "coverage-7.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:2e07b54284e381531c87f785f613b833569c14ecacdcb85d56b25c4622c16c3c"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:537891ae8ce59ef63d0123f7ac9e2ae0fc8b72c7ccbe5296fec45fd68967b6c9"}, + {file = "coverage-7.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06fb182e69f33f6cd1d39a6c597294cff3143554b64b9825d1dc69d18cc2fff2"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201e7389591af40950a6480bd9edfa8ed04346ff80002cec1a66cac4549c1ad7"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f6951407391b639504e3b3be51b7ba5f3528adbf1a8ac3302b687ecababf929e"}, + {file = "coverage-7.2.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f48351d66575f535669306aa7d6d6f71bc43372473b54a832222803eb956fd1"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b29019c76039dc3c0fd815c41392a044ce555d9bcdd38b0fb60fb4cd8e475ba9"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:81c13a1fc7468c40f13420732805a4c38a105d89848b7c10af65a90beff25250"}, + {file = "coverage-7.2.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:975d70ab7e3c80a3fe86001d8751f6778905ec723f5b110aed1e450da9d4b7f2"}, + {file = "coverage-7.2.7-cp39-cp39-win32.whl", hash = "sha256:7ee7d9d4822c8acc74a5e26c50604dff824710bc8de424904c0982e25c39c6cb"}, + {file = "coverage-7.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:eb393e5ebc85245347950143969b241d08b52b88a3dc39479822e073a1a8eb27"}, + {file = "coverage-7.2.7-pp37.pp38.pp39-none-any.whl", hash = "sha256:b7b4c971f05e6ae490fef852c218b0e79d4e52f79ef0c8475566584a8fb3e01d"}, + {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cycler" +version = "0.11.0" +description = "Composable style cycles" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "cycler-0.11.0-py3-none-any.whl", hash = "sha256:3a27e95f763a428a739d2add979fa7494c912a32c17c4c38c4d5f082cad165a3"}, + {file = "cycler-0.11.0.tar.gz", hash = "sha256:9c87405839a19696e837b3b818fed3f5f69f16f1eec1a1ad77e043dcea9c772f"}, +] + +[[package]] +name = "debugpy" +version = "1.6.7" +description = "An implementation of the Debug Adapter Protocol for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "debugpy-1.6.7-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b3e7ac809b991006ad7f857f016fa92014445085711ef111fdc3f74f66144096"}, + {file = "debugpy-1.6.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3876611d114a18aafef6383695dfc3f1217c98a9168c1aaf1a02b01ec7d8d1e"}, + {file = "debugpy-1.6.7-cp310-cp310-win32.whl", hash = "sha256:33edb4afa85c098c24cc361d72ba7c21bb92f501104514d4ffec1fb36e09c01a"}, + {file = "debugpy-1.6.7-cp310-cp310-win_amd64.whl", hash = "sha256:ed6d5413474e209ba50b1a75b2d9eecf64d41e6e4501977991cdc755dc83ab0f"}, + {file = "debugpy-1.6.7-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:38ed626353e7c63f4b11efad659be04c23de2b0d15efff77b60e4740ea685d07"}, + {file = "debugpy-1.6.7-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:279d64c408c60431c8ee832dfd9ace7c396984fd7341fa3116aee414e7dcd88d"}, + {file = "debugpy-1.6.7-cp37-cp37m-win32.whl", hash = "sha256:dbe04e7568aa69361a5b4c47b4493d5680bfa3a911d1e105fbea1b1f23f3eb45"}, + {file = "debugpy-1.6.7-cp37-cp37m-win_amd64.whl", hash = "sha256:f90a2d4ad9a035cee7331c06a4cf2245e38bd7c89554fe3b616d90ab8aab89cc"}, + {file = "debugpy-1.6.7-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:5224eabbbeddcf1943d4e2821876f3e5d7d383f27390b82da5d9558fd4eb30a9"}, + {file = "debugpy-1.6.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bae1123dff5bfe548ba1683eb972329ba6d646c3a80e6b4c06cd1b1dd0205e9b"}, + {file = "debugpy-1.6.7-cp38-cp38-win32.whl", hash = "sha256:9cd10cf338e0907fdcf9eac9087faa30f150ef5445af5a545d307055141dd7a4"}, + {file = "debugpy-1.6.7-cp38-cp38-win_amd64.whl", hash = "sha256:aaf6da50377ff4056c8ed470da24632b42e4087bc826845daad7af211e00faad"}, + {file = "debugpy-1.6.7-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:0679b7e1e3523bd7d7869447ec67b59728675aadfc038550a63a362b63029d2c"}, + {file = "debugpy-1.6.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de86029696e1b3b4d0d49076b9eba606c226e33ae312a57a46dca14ff370894d"}, + {file = "debugpy-1.6.7-cp39-cp39-win32.whl", hash = "sha256:d71b31117779d9a90b745720c0eab54ae1da76d5b38c8026c654f4a066b0130a"}, + {file = "debugpy-1.6.7-cp39-cp39-win_amd64.whl", hash = "sha256:c0ff93ae90a03b06d85b2c529eca51ab15457868a377c4cc40a23ab0e4e552a3"}, + {file = "debugpy-1.6.7-py2.py3-none-any.whl", hash = "sha256:53f7a456bc50706a0eaabecf2d3ce44c4d5010e46dfc65b6b81a518b42866267"}, + {file = "debugpy-1.6.7.zip", hash = "sha256:c4c2f0810fa25323abfdfa36cbbbb24e5c3b1a42cb762782de64439c575d67f2"}, +] + +[[package]] +name = "decorator" +version = "5.1.1" +description = "Decorators for Humans" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +description = "XML bomb protection for Python stdlib modules" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] + +[[package]] +name = "distlib" +version = "0.3.6" +description = "Distribution utilities" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.6-py2.py3-none-any.whl", hash = "sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"}, + {file = "distlib-0.3.6.tar.gz", hash = "sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"}, +] + +[[package]] +name = "docutils" +version = "0.18.1" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, + {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, +] + +[[package]] +name = "executing" +version = "1.2.0" +description = "Get the currently executing AST node of a frame, and other information" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "executing-1.2.0-py2.py3-none-any.whl", hash = "sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc"}, + {file = "executing-1.2.0.tar.gz", hash = "sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107"}, +] + +[package.extras] +tests = ["asttokens", "littleutils", "pytest", "rich"] + +[[package]] +name = "fastjsonschema" +version = "2.17.1" +description = "Fastest Python implementation of JSON schema" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "fastjsonschema-2.17.1-py3-none-any.whl", hash = "sha256:4b90b252628ca695280924d863fe37234eebadc29c5360d322571233dc9746e0"}, + {file = "fastjsonschema-2.17.1.tar.gz", hash = "sha256:f4eeb8a77cef54861dbf7424ac8ce71306f12cbb086c45131bcba2c6a4f726e3"}, +] + +[package.extras] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] + +[[package]] +name = "filelock" +version = "3.12.2" +description = "A platform independent file lock." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, + {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] + +[[package]] +name = "fonttools" +version = "4.40.0" +description = "Tools to manipulate font files" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b802dcbf9bcff74672f292b2466f6589ab8736ce4dcf36f48eb994c2847c4b30"}, + {file = "fonttools-4.40.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7f6e3fa3da923063c286320e728ba2270e49c73386e3a711aa680f4b0747d692"}, + {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5fdf60f8a5c6bcce7d024a33f7e4bc7921f5b74e8ea13bccd204f2c8b86f3470"}, + {file = "fonttools-4.40.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:91784e21a1a085fac07c6a407564f4a77feb471b5954c9ee55a4f9165151f6c1"}, + {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:05171f3c546f64d78569f10adc0de72561882352cac39ec7439af12304d8d8c0"}, + {file = "fonttools-4.40.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7449e5e306f3a930a8944c85d0cbc8429cba13503372a1a40f23124d6fb09b58"}, + {file = "fonttools-4.40.0-cp310-cp310-win32.whl", hash = "sha256:bae8c13abbc2511e9a855d2142c0ab01178dd66b1a665798f357da0d06253e0d"}, + {file = "fonttools-4.40.0-cp310-cp310-win_amd64.whl", hash = "sha256:425b74a608427499b0e45e433c34ddc350820b6f25b7c8761963a08145157a66"}, + {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:00ab569b2a3e591e00425023ade87e8fef90380c1dde61be7691cb524ca5f743"}, + {file = "fonttools-4.40.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:18ea64ac43e94c9e0c23d7a9475f1026be0e25b10dda8f236fc956188761df97"}, + {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:022c4a16b412293e7f1ce21b8bab7a6f9d12c4ffdf171fdc67122baddb973069"}, + {file = "fonttools-4.40.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:530c5d35109f3e0cea2535742d6a3bc99c0786cf0cbd7bb2dc9212387f0d908c"}, + {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5e00334c66f4e83535384cb5339526d01d02d77f142c23b2f97bd6a4f585497a"}, + {file = "fonttools-4.40.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb52c10fda31159c22c7ed85074e05f8b97da8773ea461706c273e31bcbea836"}, + {file = "fonttools-4.40.0-cp311-cp311-win32.whl", hash = "sha256:6a8d71b9a5c884c72741868e845c0e563c5d83dcaf10bb0ceeec3b4b2eb14c67"}, + {file = "fonttools-4.40.0-cp311-cp311-win_amd64.whl", hash = "sha256:15abb3d055c1b2dff9ce376b6c3db10777cb74b37b52b78f61657634fd348a0d"}, + {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:14037c31138fbd21847ad5e5441dfdde003e0a8f3feb5812a1a21fd1c255ffbd"}, + {file = "fonttools-4.40.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:94c915f6716589f78bc00fbc14c5b8de65cfd11ee335d32504f1ef234524cb24"}, + {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37467cee0f32cada2ec08bc16c9c31f9b53ea54b2f5604bf25a1246b5f50593a"}, + {file = "fonttools-4.40.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56d4d85f5374b45b08d2f928517d1e313ea71b4847240398decd0ab3ebbca885"}, + {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8c4305b171b61040b1ee75d18f9baafe58bd3b798d1670078efe2c92436bfb63"}, + {file = "fonttools-4.40.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a954b90d1473c85a22ecf305761d9fd89da93bbd31dae86e7dea436ad2cb5dc9"}, + {file = "fonttools-4.40.0-cp38-cp38-win32.whl", hash = "sha256:1bc4c5b147be8dbc5df9cc8ac5e93ee914ad030fe2a201cc8f02f499db71011d"}, + {file = "fonttools-4.40.0-cp38-cp38-win_amd64.whl", hash = "sha256:8a917828dbfdb1cbe50cf40eeae6fbf9c41aef9e535649ed8f4982b2ef65c091"}, + {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:882983279bf39afe4e945109772c2ffad2be2c90983d6559af8b75c19845a80a"}, + {file = "fonttools-4.40.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c55f1b4109dbc3aeb496677b3e636d55ef46dc078c2a5e3f3db4e90f1c6d2907"}, + {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec468c022d09f1817c691cf884feb1030ef6f1e93e3ea6831b0d8144c06480d1"}, + {file = "fonttools-4.40.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d5adf4ba114f028fc3f5317a221fd8b0f4ef7a2e5524a2b1e0fd891b093791a"}, + {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:aa83b3f151bc63970f39b2b42a06097c5a22fd7ed9f7ba008e618de4503d3895"}, + {file = "fonttools-4.40.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:97d95b8301b62bdece1af943b88bcb3680fd385f88346a4a899ee145913b414a"}, + {file = "fonttools-4.40.0-cp39-cp39-win32.whl", hash = "sha256:1a003608400dd1cca3e089e8c94973c6b51a4fb1ef00ff6d7641617b9242e637"}, + {file = "fonttools-4.40.0-cp39-cp39-win_amd64.whl", hash = "sha256:7961575221e3da0841c75da53833272c520000d76f7f71274dbf43370f8a1065"}, + {file = "fonttools-4.40.0-py3-none-any.whl", hash = "sha256:200729d12461e2038700d31f0d49ad5a7b55855dec7525074979a06b46f88505"}, + {file = "fonttools-4.40.0.tar.gz", hash = "sha256:337b6e83d7ee73c40ea62407f2ce03b07c3459e213b6f332b94a69923b9e1cb9"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.0.0)", "xattr", "zopfli (>=0.1.4)"] +graphite = ["lz4 (>=1.7.4.2)"] +interpolatable = ["munkres", "scipy"] +lxml = ["lxml (>=4.0,<5)"] +pathops = ["skia-pathops (>=0.5.0)"] +plot = ["matplotlib"] +repacker = ["uharfbuzz (>=0.23.0)"] +symfont = ["sympy"] +type1 = ["xattr"] +ufo = ["fs (>=2.2.0,<3)"] +unicode = ["unicodedata2 (>=15.0.0)"] +woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] + +[[package]] +name = "identify" +version = "2.5.24" +description = "File identification library for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "identify-2.5.24-py2.py3-none-any.whl", hash = "sha256:986dbfb38b1140e763e413e6feb44cd731faf72d1909543178aa79b0e258265d"}, + {file = "identify-2.5.24.tar.gz", hash = "sha256:0aac67d5b4812498056d28a9a512a483f5085cc28640b02b258a59dac34301d4"}, +] + +[package.extras] +license = ["ukkonen"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "ipykernel" +version = "6.23.2" +description = "IPython Kernel for Jupyter" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "ipykernel-6.23.2-py3-none-any.whl", hash = "sha256:7ccb6e2d32fd958c21453db494c914f3474908a2fdefd99ab548a5375b548d1f"}, + {file = "ipykernel-6.23.2.tar.gz", hash = "sha256:fcfb67c5b504aa1bfcda1c5b3716636239e0f7b9290958f1c558c79b4c0e7ed5"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "platform_system == \"Darwin\""} +comm = ">=0.1.1" +debugpy = ">=1.6.5" +ipython = ">=7.23.1" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +matplotlib-inline = ">=0.1" +nest-asyncio = "*" +packaging = "*" +psutil = "*" +pyzmq = ">=20" +tornado = ">=6.1" +traitlets = ">=5.4.0" + +[package.extras] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "ipython" +version = "8.14.0" +description = "IPython: Productive Interactive Computing" +category = "dev" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ipython-8.14.0-py3-none-any.whl", hash = "sha256:248aca623f5c99a6635bc3857677b7320b9b8039f99f070ee0d20a5ca5a8e6bf"}, + {file = "ipython-8.14.0.tar.gz", hash = "sha256:1d197b907b6ba441b692c48cf2a3a2de280dc0ac91a3405b39349a50272ca0a1"}, +] + +[package.dependencies] +appnope = {version = "*", markers = "sys_platform == \"darwin\""} +backcall = "*" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +pickleshare = "*" +prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" + +[package.extras] +all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] + +[[package]] +name = "ipython-genutils" +version = "0.2.0" +description = "Vestigial utilities from IPython" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ipython_genutils-0.2.0-py2.py3-none-any.whl", hash = "sha256:72dd37233799e619666c9f639a9da83c34013a73e8bbc79a7a6348d93c61fab8"}, + {file = "ipython_genutils-0.2.0.tar.gz", hash = "sha256:eb2e116e75ecef9d4d228fdc66af54269afa26ab4463042e33785b887c628ba8"}, +] + +[[package]] +name = "ipywidgets" +version = "8.0.6" +description = "Jupyter interactive widgets" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ipywidgets-8.0.6-py3-none-any.whl", hash = "sha256:a60bf8d2528997e05ac83fd19ea2fbe65f2e79fbe1b2b35779bdfc46c2941dcc"}, + {file = "ipywidgets-8.0.6.tar.gz", hash = "sha256:de7d779f2045d60de9f6c25f653fdae2dba57898e6a1284494b3ba20b6893bb8"}, +] + +[package.dependencies] +ipykernel = ">=4.5.1" +ipython = ">=6.1.0" +jupyterlab-widgets = ">=3.0.7,<3.1.0" +traitlets = ">=4.3.1" +widgetsnbextension = ">=4.0.7,<4.1.0" + +[package.extras] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] + +[[package]] +name = "isoduration" +version = "20.11.0" +description = "Operations with ISO 8601 durations" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] + +[package.dependencies] +arrow = ">=0.15.0" + +[[package]] +name = "jedi" +version = "0.18.2" +description = "An autocompletion tool for Python that can be used for text editors." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, +] + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "json5" +version = "0.9.14" +description = "A Python implementation of the JSON5 data format." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, + {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, +] + +[package.extras] +dev = ["hypothesis"] + +[[package]] +name = "jsonpointer" +version = "2.4" +description = "Identify specific nodes in a JSON document (RFC 6901)" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +files = [ + {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, +] + +[[package]] +name = "jsonschema" +version = "4.17.3" +description = "An implementation of JSON Schema validation for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jsonschema-4.17.3-py3-none-any.whl", hash = "sha256:a870ad254da1a8ca84b6a2905cac29d265f805acc57af304784962a2aa6508f6"}, + {file = "jsonschema-4.17.3.tar.gz", hash = "sha256:0f864437ab8b6076ba6707453ef8f98a6a0d512a80e93f8abdb676f737ecb60d"}, +] + +[package.dependencies] +attrs = ">=17.4.0" +fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} +pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" +rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} +uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} +webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jupyter" +version = "1.0.0" +description = "Jupyter metapackage. Install all the Jupyter components in one go." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "jupyter-1.0.0-py2.py3-none-any.whl", hash = "sha256:5b290f93b98ffbc21c0c7e749f054b3267782166d72fa5e3ed1ed4eaf34a2b78"}, + {file = "jupyter-1.0.0.tar.gz", hash = "sha256:d9dc4b3318f310e34c82951ea5d6683f67bed7def4b259fafbfe4f1beb1d8e5f"}, + {file = "jupyter-1.0.0.zip", hash = "sha256:3e1f86076bbb7c8c207829390305a2b1fe836d471ed54be66a3b8c41e7f46cc7"}, +] + +[package.dependencies] +ipykernel = "*" +ipywidgets = "*" +jupyter-console = "*" +nbconvert = "*" +notebook = "*" +qtconsole = "*" + +[[package]] +name = "jupyter-client" +version = "8.2.0" +description = "Jupyter protocol implementation and client libraries" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_client-8.2.0-py3-none-any.whl", hash = "sha256:b18219aa695d39e2ad570533e0d71fb7881d35a873051054a84ee2a17c4b7389"}, + {file = "jupyter_client-8.2.0.tar.gz", hash = "sha256:9fe233834edd0e6c0aa5f05ca2ab4bdea1842bfd2d8a932878212fc5301ddaf0"}, +] + +[package.dependencies] +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +python-dateutil = ">=2.8.2" +pyzmq = ">=23.0" +tornado = ">=6.2" +traitlets = ">=5.3" + +[package.extras] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] + +[[package]] +name = "jupyter-console" +version = "6.6.3" +description = "Jupyter terminal console" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] + +[package.dependencies] +ipykernel = ">=6.14" +ipython = "*" +jupyter-client = ">=7.0.0" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +prompt-toolkit = ">=3.0.30" +pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" + +[package.extras] +test = ["flaky", "pexpect", "pytest"] + +[[package]] +name = "jupyter-core" +version = "5.3.1" +description = "Jupyter core package. A base package on which Jupyter projects rely." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_core-5.3.1-py3-none-any.whl", hash = "sha256:ae9036db959a71ec1cac33081eeb040a79e681f08ab68b0883e9a676c7a90dce"}, + {file = "jupyter_core-5.3.1.tar.gz", hash = "sha256:5ba5c7938a7f97a6b0481463f7ff0dbac7c15ba48cf46fa4035ca6e838aa1aba"}, +] + +[package.dependencies] +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" + +[package.extras] +docs = ["myst-parser", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.6.3" +description = "Jupyter Event System library" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyter_events-0.6.3-py3-none-any.whl", hash = "sha256:57a2749f87ba387cd1bfd9b22a0875b889237dbf2edc2121ebb22bde47036c17"}, + {file = "jupyter_events-0.6.3.tar.gz", hash = "sha256:9a6e9995f75d1b7146b436ea24d696ce3a35bfa8bfe45e0c33c334c79464d0b3"}, +] + +[package.dependencies] +jsonschema = {version = ">=3.2.0", extras = ["format-nongpl"]} +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] +test = ["click", "coverage", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "pytest-cov", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.0" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter-lsp-2.2.0.tar.gz", hash = "sha256:8ebbcb533adb41e5d635eb8fe82956b0aafbf0fd443b6c4bfa906edeeb8635a1"}, + {file = "jupyter_lsp-2.2.0-py3-none-any.whl", hash = "sha256:9e06b8b4f7dd50300b70dd1a78c0c3b0c3d8fa68e0f2d8a5d1fbab62072aca3f"}, +] + +[package.dependencies] +jupyter-server = ">=1.1.2" + +[[package]] +name = "jupyter-server" +version = "2.6.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server-2.6.0-py3-none-any.whl", hash = "sha256:19525a1515b5999618a91b3e99ec9f6869aa8c5ba73e0b6279fcda918b54ba36"}, + {file = "jupyter_server-2.6.0.tar.gz", hash = "sha256:ae4af349f030ed08dd78cb7ac1a03a92d886000380c9ea6283f3c542a81f4b06"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = "*" +jinja2 = "*" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-events = ">=0.6.0" +jupyter-server-terminals = "*" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +overrides = "*" +packaging = "*" +prometheus-client = "*" +pywinpty = {version = "*", markers = "os_name == \"nt\""} +pyzmq = ">=24" +send2trash = "*" +terminado = ">=0.8.3" +tornado = ">=6.2.0" +traitlets = ">=5.6.0" +websocket-client = "*" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] +test = ["ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.4.4" +description = "A Jupyter Server Extension Providing Terminals." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyter_server_terminals-0.4.4-py3-none-any.whl", hash = "sha256:75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36"}, + {file = "jupyter_server_terminals-0.4.4.tar.gz", hash = "sha256:57ab779797c25a7ba68e97bcfb5d7740f2b5e8a83b5e8102b10438041a7eac5d"}, +] + +[package.dependencies] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<3.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["coverage", "jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-cov", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.0.2" +description = "JupyterLab computational environment" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jupyterlab-4.0.2-py3-none-any.whl", hash = "sha256:201b4f729a7dc5e22ca6c4dd8944cde792f1cb008d7c6b821e0a48d2502205c8"}, + {file = "jupyterlab-4.0.2.tar.gz", hash = "sha256:0a77898aebb55da391e5f57022774c089fb075e98803ff3d514a79b727dc934d"}, +] + +[package.dependencies] +async-lru = ">=1.0.0" +ipykernel = "*" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.19.0,<3" +notebook-shim = ">=0.2" +packaging = "*" +tornado = ">=6.2.0" +traitlets = "*" + +[package.extras] +dev = ["black[jupyter] (==23.3.0)", "build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.0.271)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] +test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] + +[[package]] +name = "jupyterlab-pygments" +version = "0.2.2" +description = "Pygments theme using JupyterLab CSS variables" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_pygments-0.2.2-py2.py3-none-any.whl", hash = "sha256:2405800db07c9f770863bcf8049a529c3dd4d3e28536638bd7c1c01d2748309f"}, + {file = "jupyterlab_pygments-0.2.2.tar.gz", hash = "sha256:7405d7fde60819d905a9fa8ce89e4cd830e318cdad22a0030f7a901da705585d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.23.0" +description = "A set of server components for JupyterLab and JupyterLab like applications." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_server-2.23.0-py3-none-any.whl", hash = "sha256:a5ea2c839336a8ba7c38c8e7b2f24cedf919f0d439f4d2e606d9322013a95788"}, + {file = "jupyterlab_server-2.23.0.tar.gz", hash = "sha256:83c01aa4ad9451cd61b383e634d939ff713850f4640c0056b2cdb2b6211a74c7"}, +] + +[package.dependencies] +babel = ">=2.10" +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.17.3" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +requests = ">=2.28" + +[package.extras] +docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] +openapi = ["openapi-core (>=0.16.1,<0.17.0)", "ruamel-yaml"] +test = ["hatch", "ipykernel", "jupyterlab-server[openapi]", "openapi-spec-validator (>=0.5.1,<0.6.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] + +[[package]] +name = "jupyterlab-widgets" +version = "3.0.7" +description = "Jupyter interactive widgets for JupyterLab" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jupyterlab_widgets-3.0.7-py3-none-any.whl", hash = "sha256:c73f8370338ec19f1bec47254752d6505b03601cbd5a67e6a0b184532f73a459"}, + {file = "jupyterlab_widgets-3.0.7.tar.gz", hash = "sha256:c3a50ed5bf528a0c7a869096503af54702f86dda1db469aee1c92dc0c01b43ca"}, +] + +[[package]] +name = "kiwisolver" +version = "1.4.4" +description = "A fast implementation of the Cassowary constraint solver" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2f5e60fabb7343a836360c4f0919b8cd0d6dbf08ad2ca6b9cf90bf0c76a3c4f6"}, + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:10ee06759482c78bdb864f4109886dff7b8a56529bc1609d4f1112b93fe6423c"}, + {file = "kiwisolver-1.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c79ebe8f3676a4c6630fd3f777f3cfecf9289666c84e775a67d1d358578dc2e3"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:abbe9fa13da955feb8202e215c4018f4bb57469b1b78c7a4c5c7b93001699938"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7577c1987baa3adc4b3c62c33bd1118c3ef5c8ddef36f0f2c950ae0b199e100d"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ad8285b01b0d4695102546b342b493b3ccc6781fc28c8c6a1bb63e95d22f09"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ed58b8acf29798b036d347791141767ccf65eee7f26bde03a71c944449e53de"}, + {file = "kiwisolver-1.4.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a68b62a02953b9841730db7797422f983935aeefceb1679f0fc85cbfbd311c32"}, + {file = "kiwisolver-1.4.4-cp310-cp310-win32.whl", hash = "sha256:e92a513161077b53447160b9bd8f522edfbed4bd9759e4c18ab05d7ef7e49408"}, + {file = "kiwisolver-1.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:3fe20f63c9ecee44560d0e7f116b3a747a5d7203376abeea292ab3152334d004"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ea21f66820452a3f5d1655f8704a60d66ba1191359b96541eaf457710a5fc6"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bc9db8a3efb3e403e4ecc6cd9489ea2bac94244f80c78e27c31dcc00d2790ac2"}, + {file = "kiwisolver-1.4.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d5b61785a9ce44e5a4b880272baa7cf6c8f48a5180c3e81c59553ba0cb0821ca"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2dbb44c3f7e6c4d3487b31037b1bdbf424d97687c1747ce4ff2895795c9bf69"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295ecd49304dcf3bfbfa45d9a081c96509e95f4b9d0eb7ee4ec0530c4a96514"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4bd472dbe5e136f96a4b18f295d159d7f26fd399136f5b17b08c4e5f498cd494"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf7d9fce9bcc4752ca4a1b80aabd38f6d19009ea5cbda0e0856983cf6d0023f5"}, + {file = "kiwisolver-1.4.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d6601aed50c74e0ef02f4204da1816147a6d3fbdc8b3872d263338a9052c51"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:877272cf6b4b7e94c9614f9b10140e198d2186363728ed0f701c6eee1baec1da"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:db608a6757adabb32f1cfe6066e39b3706d8c3aa69bbc353a5b61edad36a5cb4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:5853eb494c71e267912275e5586fe281444eb5e722de4e131cddf9d442615626"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:f0a1dbdb5ecbef0d34eb77e56fcb3e95bbd7e50835d9782a45df81cc46949750"}, + {file = "kiwisolver-1.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:283dffbf061a4ec60391d51e6155e372a1f7a4f5b15d59c8505339454f8989e4"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win32.whl", hash = "sha256:d06adcfa62a4431d404c31216f0f8ac97397d799cd53800e9d3efc2fbb3cf14e"}, + {file = "kiwisolver-1.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:e7da3fec7408813a7cebc9e4ec55afed2d0fd65c4754bc376bf03498d4e92686"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:62ac9cc684da4cf1778d07a89bf5f81b35834cb96ca523d3a7fb32509380cbf6"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41dae968a94b1ef1897cb322b39360a0812661dba7c682aa45098eb8e193dbdf"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02f79693ec433cb4b5f51694e8477ae83b3205768a6fb48ffba60549080e295b"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0611a0a2a518464c05ddd5a3a1a0e856ccc10e67079bb17f265ad19ab3c7597"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:db5283d90da4174865d520e7366801a93777201e91e79bacbac6e6927cbceede"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1041feb4cda8708ce73bb4dcb9ce1ccf49d553bf87c3954bdfa46f0c3f77252c"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-win32.whl", hash = "sha256:a553dadda40fef6bfa1456dc4be49b113aa92c2a9a9e8711e955618cd69622e3"}, + {file = "kiwisolver-1.4.4-cp37-cp37m-win_amd64.whl", hash = "sha256:03baab2d6b4a54ddbb43bba1a3a2d1627e82d205c5cf8f4c924dc49284b87166"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:841293b17ad704d70c578f1f0013c890e219952169ce8a24ebc063eecf775454"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f4f270de01dd3e129a72efad823da90cc4d6aafb64c410c9033aba70db9f1ff0"}, + {file = "kiwisolver-1.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f9f39e2f049db33a908319cf46624a569b36983c7c78318e9726a4cb8923b26c"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c97528e64cb9ebeff9701e7938653a9951922f2a38bd847787d4a8e498cc83ae"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d1573129aa0fd901076e2bfb4275a35f5b7aa60fbfb984499d661ec950320b0"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ad881edc7ccb9d65b0224f4e4d05a1e85cf62d73aab798943df6d48ab0cd79a1"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b428ef021242344340460fa4c9185d0b1f66fbdbfecc6c63eff4b7c29fad429d"}, + {file = "kiwisolver-1.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2e407cb4bd5a13984a6c2c0fe1845e4e41e96f183e5e5cd4d77a857d9693494c"}, + {file = "kiwisolver-1.4.4-cp38-cp38-win32.whl", hash = "sha256:75facbe9606748f43428fc91a43edb46c7ff68889b91fa31f53b58894503a191"}, + {file = "kiwisolver-1.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:5bce61af018b0cb2055e0e72e7d65290d822d3feee430b7b8203d8a855e78766"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8c808594c88a025d4e322d5bb549282c93c8e1ba71b790f539567932722d7bd8"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f0a71d85ecdd570ded8ac3d1c0f480842f49a40beb423bb8014539a9f32a5897"}, + {file = "kiwisolver-1.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b533558eae785e33e8c148a8d9921692a9fe5aa516efbdff8606e7d87b9d5824"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:efda5fc8cc1c61e4f639b8067d118e742b812c930f708e6667a5ce0d13499e29"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7c43e1e1206cd421cd92e6b3280d4385d41d7166b3ed577ac20444b6995a445f"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc8d3bd6c72b2dd9decf16ce70e20abcb3274ba01b4e1c96031e0c4067d1e7cd"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4ea39b0ccc4f5d803e3337dd46bcce60b702be4d86fd0b3d7531ef10fd99a1ac"}, + {file = "kiwisolver-1.4.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:968f44fdbf6dd757d12920d63b566eeb4d5b395fd2d00d29d7ef00a00582aac9"}, + {file = "kiwisolver-1.4.4-cp39-cp39-win32.whl", hash = "sha256:da7e547706e69e45d95e116e6939488d62174e033b763ab1496b4c29b76fabea"}, + {file = "kiwisolver-1.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:ba59c92039ec0a66103b1d5fe588fa546373587a7d68f5c96f743c3396afc04b"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:91672bacaa030f92fc2f43b620d7b337fd9a5af28b0d6ed3f77afc43c4a64b5a"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:787518a6789009c159453da4d6b683f468ef7a65bbde796bcea803ccf191058d"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da152d8cdcab0e56e4f45eb08b9aea6455845ec83172092f09b0e077ece2cf7a"}, + {file = "kiwisolver-1.4.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ecb1fa0db7bf4cff9dac752abb19505a233c7f16684c5826d1f11ebd9472b871"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:28bc5b299f48150b5f822ce68624e445040595a4ac3d59251703779836eceff9"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:81e38381b782cc7e1e46c4e14cd997ee6040768101aefc8fa3c24a4cc58e98f8"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2a66fdfb34e05b705620dd567f5a03f239a088d5a3f321e7b6ac3239d22aa286"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:872b8ca05c40d309ed13eb2e582cab0c5a05e81e987ab9c521bf05ad1d5cf5cb"}, + {file = "kiwisolver-1.4.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:70e7c2e7b750585569564e2e5ca9845acfaa5da56ac46df68414f29fea97be9f"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9f85003f5dfa867e86d53fac6f7e6f30c045673fa27b603c397753bebadc3008"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e307eb9bd99801f82789b44bb45e9f541961831c7311521b13a6c85afc09767"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1792d939ec70abe76f5054d3f36ed5656021dcad1322d1cc996d4e54165cef9"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6cb459eea32a4e2cf18ba5fcece2dbdf496384413bc1bae15583f19e567f3b2"}, + {file = "kiwisolver-1.4.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:36dafec3d6d6088d34e2de6b85f9d8e2324eb734162fba59d2ba9ed7a2043d5b"}, + {file = "kiwisolver-1.4.4.tar.gz", hash = "sha256:d41997519fcba4a1e46eb4a2fe31bc12f0ff957b2b81bac28db24744f333e955"}, +] + +[[package]] +name = "loguru" +version = "0.7.0" +description = "Python logging made (stupidly) simple" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "loguru-0.7.0-py3-none-any.whl", hash = "sha256:b93aa30099fa6860d4727f1b81f8718e965bb96253fa190fab2077aaad6d15d3"}, + {file = "loguru-0.7.0.tar.gz", hash = "sha256:1612053ced6ae84d7959dd7d5e431a0532642237ec21f7fd83ac73fe539e03e1"}, +] + +[package.dependencies] +colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} +win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} + +[package.extras] +dev = ["Sphinx (==5.3.0)", "colorama (==0.4.5)", "colorama (==0.4.6)", "freezegun (==1.1.0)", "freezegun (==1.2.2)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v0.990)", "pre-commit (==3.2.1)", "pytest (==6.1.2)", "pytest (==7.2.1)", "pytest-cov (==2.12.1)", "pytest-cov (==4.0.0)", "pytest-mypy-plugins (==1.10.1)", "pytest-mypy-plugins (==1.9.3)", "sphinx-autobuild (==2021.3.14)", "sphinx-rtd-theme (==1.2.0)", "tox (==3.27.1)", "tox (==4.4.6)"] + +[[package]] +name = "markdown-it-py" +version = "2.2.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"}, + {file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins"] +profiling = ["gprof2dot"] +rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "matplotlib" +version = "3.7.1" +description = "Python plotting package" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_universal2.whl", hash = "sha256:95cbc13c1fc6844ab8812a525bbc237fa1470863ff3dace7352e910519e194b1"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:08308bae9e91aca1ec6fd6dda66237eef9f6294ddb17f0d0b3c863169bf82353"}, + {file = "matplotlib-3.7.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:544764ba51900da4639c0f983b323d288f94f65f4024dc40ecb1542d74dc0500"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56d94989191de3fcc4e002f93f7f1be5da476385dde410ddafbb70686acf00ea"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99bc9e65901bb9a7ce5e7bb24af03675cbd7c70b30ac670aa263240635999a4"}, + {file = "matplotlib-3.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb7d248c34a341cd4c31a06fd34d64306624c8cd8d0def7abb08792a5abfd556"}, + {file = "matplotlib-3.7.1-cp310-cp310-win32.whl", hash = "sha256:ce463ce590f3825b52e9fe5c19a3c6a69fd7675a39d589e8b5fbe772272b3a24"}, + {file = "matplotlib-3.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:3d7bc90727351fb841e4d8ae620d2d86d8ed92b50473cd2b42ce9186104ecbba"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_universal2.whl", hash = "sha256:770a205966d641627fd5cf9d3cb4b6280a716522cd36b8b284a8eb1581310f61"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:f67bfdb83a8232cb7a92b869f9355d677bce24485c460b19d01970b64b2ed476"}, + {file = "matplotlib-3.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2bf092f9210e105f414a043b92af583c98f50050559616930d884387d0772aba"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89768d84187f31717349c6bfadc0e0d8c321e8eb34522acec8a67b1236a66332"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:83111e6388dec67822e2534e13b243cc644c7494a4bb60584edbff91585a83c6"}, + {file = "matplotlib-3.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a867bf73a7eb808ef2afbca03bcdb785dae09595fbe550e1bab0cd023eba3de0"}, + {file = "matplotlib-3.7.1-cp311-cp311-win32.whl", hash = "sha256:fbdeeb58c0cf0595efe89c05c224e0a502d1aa6a8696e68a73c3efc6bc354304"}, + {file = "matplotlib-3.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:c0bd19c72ae53e6ab979f0ac6a3fafceb02d2ecafa023c5cca47acd934d10be7"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_universal2.whl", hash = "sha256:6eb88d87cb2c49af00d3bbc33a003f89fd9f78d318848da029383bfc08ecfbfb"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:cf0e4f727534b7b1457898c4f4ae838af1ef87c359b76dcd5330fa31893a3ac7"}, + {file = "matplotlib-3.7.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:46a561d23b91f30bccfd25429c3c706afe7d73a5cc64ef2dfaf2b2ac47c1a5dc"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8704726d33e9aa8a6d5215044b8d00804561971163563e6e6591f9dcf64340cc"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4cf327e98ecf08fcbb82685acaf1939d3338548620ab8dfa02828706402c34de"}, + {file = "matplotlib-3.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:617f14ae9d53292ece33f45cba8503494ee199a75b44de7717964f70637a36aa"}, + {file = "matplotlib-3.7.1-cp38-cp38-win32.whl", hash = "sha256:7c9a4b2da6fac77bcc41b1ea95fadb314e92508bf5493ceff058e727e7ecf5b0"}, + {file = "matplotlib-3.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:14645aad967684e92fc349493fa10c08a6da514b3d03a5931a1bac26e6792bd1"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_universal2.whl", hash = "sha256:81a6b377ea444336538638d31fdb39af6be1a043ca5e343fe18d0f17e098770b"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:28506a03bd7f3fe59cd3cd4ceb2a8d8a2b1db41afede01f66c42561b9be7b4b7"}, + {file = "matplotlib-3.7.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8c587963b85ce41e0a8af53b9b2de8dddbf5ece4c34553f7bd9d066148dc719c"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8bf26ade3ff0f27668989d98c8435ce9327d24cffb7f07d24ef609e33d582439"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:def58098f96a05f90af7e92fd127d21a287068202aa43b2a93476170ebd99e87"}, + {file = "matplotlib-3.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f883a22a56a84dba3b588696a2b8a1ab0d2c3d41be53264115c71b0a942d8fdb"}, + {file = "matplotlib-3.7.1-cp39-cp39-win32.whl", hash = "sha256:4f99e1b234c30c1e9714610eb0c6d2f11809c9c78c984a613ae539ea2ad2eb4b"}, + {file = "matplotlib-3.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:3ba2af245e36990facf67fde840a760128ddd71210b2ab6406e640188d69d136"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3032884084f541163f295db8a6536e0abb0db464008fadca6c98aaf84ccf4717"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a2cb34336110e0ed8bb4f650e817eed61fa064acbefeb3591f1b33e3a84fd96"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b867e2f952ed592237a1828f027d332d8ee219ad722345b79a001f49df0936eb"}, + {file = "matplotlib-3.7.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:57bfb8c8ea253be947ccb2bc2d1bb3862c2bccc662ad1b4626e1f5e004557042"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:438196cdf5dc8d39b50a45cb6e3f6274edbcf2254f85fa9b895bf85851c3a613"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21e9cff1a58d42e74d01153360de92b326708fb205250150018a52c70f43c290"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75d4725d70b7c03e082bbb8a34639ede17f333d7247f56caceb3801cb6ff703d"}, + {file = "matplotlib-3.7.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:97cc368a7268141afb5690760921765ed34867ffb9655dd325ed207af85c7529"}, + {file = "matplotlib-3.7.1.tar.gz", hash = "sha256:7b73305f25eab4541bd7ee0b96d87e53ae9c9f1823be5659b806cd85786fe882"}, +] + +[package.dependencies] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.0.1" +numpy = ">=1.20" +packaging = ">=20.0" +pillow = ">=6.2.0" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" + +[[package]] +name = "matplotlib-inline" +version = "0.1.6" +description = "Inline Matplotlib backend for Jupyter" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, + {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, +] + +[package.dependencies] +traitlets = "*" + +[[package]] +name = "mdit-py-plugins" +version = "0.3.5" +description = "Collection of plugins for markdown-it-py" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdit-py-plugins-0.3.5.tar.gz", hash = "sha256:eee0adc7195e5827e17e02d2a258a2ba159944a0748f59c5099a4a27f78fcf6a"}, + {file = "mdit_py_plugins-0.3.5-py3-none-any.whl", hash = "sha256:ca9a0714ea59a24b2b044a1831f48d817dd0c817e84339f20e7889f392d77c4e"}, +] + +[package.dependencies] +markdown-it-py = ">=1.0.0,<3.0.0" + +[package.extras] +code-style = ["pre-commit"] +rtd = ["attrs", "myst-parser (>=0.16.1,<0.17.0)", "sphinx-book-theme (>=0.1.0,<0.2.0)"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] + +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + +[[package]] +name = "mistune" +version = "2.0.5" +description = "A sane Markdown parser with useful plugins and renderers" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "mistune-2.0.5-py2.py3-none-any.whl", hash = "sha256:bad7f5d431886fcbaf5f758118ecff70d31f75231b34024a1341120340a65ce8"}, + {file = "mistune-2.0.5.tar.gz", hash = "sha256:0246113cb2492db875c6be56974a7c893333bf26cd92891c85f63151cee09d34"}, +] + +[[package]] +name = "mypy" +version = "1.3.0" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "mypy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c1eb485cea53f4f5284e5baf92902cd0088b24984f4209e25981cc359d64448d"}, + {file = "mypy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4c99c3ecf223cf2952638da9cd82793d8f3c0c5fa8b6ae2b2d9ed1e1ff51ba85"}, + {file = "mypy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:550a8b3a19bb6589679a7c3c31f64312e7ff482a816c96e0cecec9ad3a7564dd"}, + {file = "mypy-1.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cbc07246253b9e3d7d74c9ff948cd0fd7a71afcc2b77c7f0a59c26e9395cb152"}, + {file = "mypy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:a22435632710a4fcf8acf86cbd0d69f68ac389a3892cb23fbad176d1cddaf228"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6e33bb8b2613614a33dff70565f4c803f889ebd2f859466e42b46e1df76018dd"}, + {file = "mypy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d23370d2a6b7a71dc65d1266f9a34e4cde9e8e21511322415db4b26f46f6b8c"}, + {file = "mypy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:658fe7b674769a0770d4b26cb4d6f005e88a442fe82446f020be8e5f5efb2fae"}, + {file = "mypy-1.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6e42d29e324cdda61daaec2336c42512e59c7c375340bd202efa1fe0f7b8f8ca"}, + {file = "mypy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:d0b6c62206e04061e27009481cb0ec966f7d6172b5b936f3ead3d74f29fe3dcf"}, + {file = "mypy-1.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:76ec771e2342f1b558c36d49900dfe81d140361dd0d2df6cd71b3db1be155409"}, + {file = "mypy-1.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc95f8386314272bbc817026f8ce8f4f0d2ef7ae44f947c4664efac9adec929"}, + {file = "mypy-1.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:faff86aa10c1aa4a10e1a301de160f3d8fc8703b88c7e98de46b531ff1276a9a"}, + {file = "mypy-1.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8c5979d0deb27e0f4479bee18ea0f83732a893e81b78e62e2dda3e7e518c92ee"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c5d2cc54175bab47011b09688b418db71403aefad07cbcd62d44010543fc143f"}, + {file = "mypy-1.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:87df44954c31d86df96c8bd6e80dfcd773473e877ac6176a8e29898bfb3501cb"}, + {file = "mypy-1.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473117e310febe632ddf10e745a355714e771ffe534f06db40702775056614c4"}, + {file = "mypy-1.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:74bc9b6e0e79808bf8678d7678b2ae3736ea72d56eede3820bd3849823e7f305"}, + {file = "mypy-1.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:44797d031a41516fcf5cbfa652265bb994e53e51994c1bd649ffcd0c3a7eccbf"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ddae0f39ca146972ff6bb4399f3b2943884a774b8771ea0a8f50e971f5ea5ba8"}, + {file = "mypy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c4c42c60a8103ead4c1c060ac3cdd3ff01e18fddce6f1016e08939647a0e703"}, + {file = "mypy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e86c2c6852f62f8f2b24cb7a613ebe8e0c7dc1402c61d36a609174f63e0ff017"}, + {file = "mypy-1.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f9dca1e257d4cc129517779226753dbefb4f2266c4eaad610fc15c6a7e14283e"}, + {file = "mypy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:95d8d31a7713510685b05fbb18d6ac287a56c8f6554d88c19e73f724a445448a"}, + {file = "mypy-1.3.0-py3-none-any.whl", hash = "sha256:a8763e72d5d9574d45ce5881962bc8e9046bf7b375b0abf031f3e6811732a897"}, + {file = "mypy-1.3.0.tar.gz", hash = "sha256:e1f4d16e296f5135624b34e8fb741eb0eadedca90862405b1f1fde2040b9bd11"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "myst-parser" +version = "1.0.0" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "myst-parser-1.0.0.tar.gz", hash = "sha256:502845659313099542bd38a2ae62f01360e7dd4b1310f025dd014dfc0439cdae"}, + {file = "myst_parser-1.0.0-py3-none-any.whl", hash = "sha256:69fb40a586c6fa68995e6521ac0a525793935db7e724ca9bac1d33be51be9a4c"}, +] + +[package.dependencies] +docutils = ">=0.15,<0.20" +jinja2 = "*" +markdown-it-py = ">=1.0.0,<3.0.0" +mdit-py-plugins = ">=0.3.4,<0.4.0" +pyyaml = "*" +sphinx = ">=5,<7" + +[package.extras] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=1.0,<2.0)"] +rtd = ["ipython", "pydata-sphinx-theme (==v0.13.0rc4)", "sphinx-autodoc2 (>=0.4.2,<0.5.0)", "sphinx-book-theme (==1.0.0rc2)", "sphinx-copybutton", "sphinx-design2", "sphinx-pyscript", "sphinx-tippy (>=0.3.1)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.7.5,<0.8.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "pytest (>=7,<8)", "pytest-cov", "pytest-param-files (>=0.3.4,<0.4.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4,<0.4.0)"] + +[[package]] +name = "nbclassic" +version = "1.0.0" +description = "Jupyter Notebook as a Jupyter Server extension." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbclassic-1.0.0-py3-none-any.whl", hash = "sha256:f99e4769b4750076cd4235c044b61232110733322384a94a63791d2e7beacc66"}, + {file = "nbclassic-1.0.0.tar.gz", hash = "sha256:0ae11eb2319455d805596bf320336cda9554b41d99ab9a3c31bf8180bffa30e3"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=6.1.1" +jupyter-core = ">=4.6.1" +jupyter-server = ">=1.8" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +notebook-shim = ">=0.2.3" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "pytest-jupyter", "pytest-playwright", "pytest-tornasync", "requests", "requests-unixsocket", "testpath"] + +[[package]] +name = "nbclient" +version = "0.8.0" +description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "nbclient-0.8.0-py3-none-any.whl", hash = "sha256:25e861299e5303a0477568557c4045eccc7a34c17fc08e7959558707b9ebe548"}, + {file = "nbclient-0.8.0.tar.gz", hash = "sha256:f9b179cd4b2d7bca965f900a2ebf0db4a12ebff2f36a711cb66861e4ae158e55"}, +] + +[package.dependencies] +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +nbformat = ">=5.1" +traitlets = ">=5.4" + +[package.extras] +dev = ["pre-commit"] +docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] + +[[package]] +name = "nbconvert" +version = "7.5.0" +description = "Converting Jupyter Notebooks" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nbconvert-7.5.0-py3-none-any.whl", hash = "sha256:852e44392d5650ef217a5ce3a8050747051d4e6ba75f0574cb5435049ee6c0d9"}, + {file = "nbconvert-7.5.0.tar.gz", hash = "sha256:f78fd22fd2410b960d5d9bcecf3e1d6c7bdc5fec2c865964c84aa4e74e6e88da"}, +] + +[package.dependencies] +beautifulsoup4 = "*" +bleach = "!=5.0.0" +defusedxml = "*" +jinja2 = ">=3.0" +jupyter-core = ">=4.7" +jupyterlab-pygments = "*" +markupsafe = ">=2.0" +mistune = ">=2.0.3,<3" +nbclient = ">=0.5.0" +nbformat = ">=5.7" +packaging = "*" +pandocfilters = ">=1.4.1" +pygments = ">=2.4.1" +tinycss2 = "*" +traitlets = ">=5.1" + +[package.extras] +all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] +qtpdf = ["nbconvert[qtpng]"] +qtpng = ["pyqtwebengine (>=5.15)"] +serve = ["tornado (>=6.1)"] +test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pytest", "pytest-dependency"] +webpdf = ["pyppeteer (>=1,<1.1)"] + +[[package]] +name = "nbformat" +version = "5.9.0" +description = "The Jupyter Notebook format" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "nbformat-5.9.0-py3-none-any.whl", hash = "sha256:8c8fa16d6d05062c26177754bfbfac22de644888e2ef69d27ad2a334cf2576e5"}, + {file = "nbformat-5.9.0.tar.gz", hash = "sha256:e98ebb6120c3efbafdee2a40af2a140cadee90bb06dd69a2a63d9551fcc7f976"}, +] + +[package.dependencies] +fastjsonschema = "*" +jsonschema = ">=2.6" +jupyter-core = "*" +traitlets = ">=5.1" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "nbsphinx" +version = "0.9.2" +description = "Jupyter Notebook Tools for Sphinx" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "nbsphinx-0.9.2-py3-none-any.whl", hash = "sha256:2746680ece5ad3b0e980639d717a5041a1c1aafb416846b72dfaeecc306bc351"}, + {file = "nbsphinx-0.9.2.tar.gz", hash = "sha256:540db7f4066347f23d0650c4ae8e7d85334c69adf749e030af64c12e996ff88e"}, +] + +[package.dependencies] +docutils = "*" +jinja2 = "*" +nbconvert = "!=5.4" +nbformat = "*" +sphinx = ">=1.8" +traitlets = ">=5" + +[[package]] +name = "nest-asyncio" +version = "1.5.6" +description = "Patch asyncio to allow nested event loops" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "nest_asyncio-1.5.6-py3-none-any.whl", hash = "sha256:b9a953fb40dceaa587d109609098db21900182b16440652454a146cffb06e8b8"}, + {file = "nest_asyncio-1.5.6.tar.gz", hash = "sha256:d267cc1ff794403f7df692964d1d2a3fa9418ffea2a3f6859a439ff482fef290"}, +] + +[[package]] +name = "nodeenv" +version = "1.8.0" +description = "Node.js virtual environment builder" +category = "dev" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +files = [ + {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, + {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, +] + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "notebook" +version = "6.5.4" +description = "A web-based notebook environment for interactive computing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook-6.5.4-py3-none-any.whl", hash = "sha256:dd17e78aefe64c768737b32bf171c1c766666a21cc79a44d37a1700771cab56f"}, + {file = "notebook-6.5.4.tar.gz", hash = "sha256:517209568bd47261e2def27a140e97d49070602eea0d226a696f42a7f16c9a4e"}, +] + +[package.dependencies] +argon2-cffi = "*" +ipykernel = "*" +ipython-genutils = "*" +jinja2 = "*" +jupyter-client = ">=5.3.4" +jupyter-core = ">=4.6.1" +nbclassic = ">=0.4.7" +nbconvert = ">=5" +nbformat = "*" +nest-asyncio = ">=1.5" +prometheus-client = "*" +pyzmq = ">=17" +Send2Trash = ">=1.8.0" +terminado = ">=0.8.3" +tornado = ">=6.1" +traitlets = ">=4.2.1" + +[package.extras] +docs = ["myst-parser", "nbsphinx", "sphinx", "sphinx-rtd-theme", "sphinxcontrib-github-alt"] +json-logging = ["json-logging"] +test = ["coverage", "nbval", "pytest", "pytest-cov", "requests", "requests-unixsocket", "selenium (==4.1.5)", "testpath"] + +[[package]] +name = "notebook-shim" +version = "0.2.3" +description = "A shim layer for notebook traits and config" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, + {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, +] + +[package.dependencies] +jupyter-server = ">=1.8,<3" + +[package.extras] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] + +[[package]] +name = "numpy" +version = "1.25.0" +description = "Fundamental package for array computing in Python" +category = "main" +optional = false +python-versions = ">=3.9" +files = [ + {file = "numpy-1.25.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8aa130c3042052d656751df5e81f6d61edff3e289b5994edcf77f54118a8d9f4"}, + {file = "numpy-1.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e3f2b96e3b63c978bc29daaa3700c028fe3f049ea3031b58aa33fe2a5809d24"}, + {file = "numpy-1.25.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6b267f349a99d3908b56645eebf340cb58f01bd1e773b4eea1a905b3f0e4208"}, + {file = "numpy-1.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aedd08f15d3045a4e9c648f1e04daca2ab1044256959f1f95aafeeb3d794c16"}, + {file = "numpy-1.25.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6d183b5c58513f74225c376643234c369468e02947b47942eacbb23c1671f25d"}, + {file = "numpy-1.25.0-cp310-cp310-win32.whl", hash = "sha256:d76a84998c51b8b68b40448ddd02bd1081bb33abcdc28beee6cd284fe11036c6"}, + {file = "numpy-1.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0dc071017bc00abb7d7201bac06fa80333c6314477b3d10b52b58fa6a6e38f6"}, + {file = "numpy-1.25.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c69fe5f05eea336b7a740e114dec995e2f927003c30702d896892403df6dbf0"}, + {file = "numpy-1.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c7211d7920b97aeca7b3773a6783492b5b93baba39e7c36054f6e749fc7490c"}, + {file = "numpy-1.25.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecc68f11404930e9c7ecfc937aa423e1e50158317bf67ca91736a9864eae0232"}, + {file = "numpy-1.25.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e559c6afbca484072a98a51b6fa466aae785cfe89b69e8b856c3191bc8872a82"}, + {file = "numpy-1.25.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6c284907e37f5e04d2412950960894b143a648dea3f79290757eb878b91acbd1"}, + {file = "numpy-1.25.0-cp311-cp311-win32.whl", hash = "sha256:95367ccd88c07af21b379be1725b5322362bb83679d36691f124a16357390153"}, + {file = "numpy-1.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:b76aa836a952059d70a2788a2d98cb2a533ccd46222558b6970348939e55fc24"}, + {file = "numpy-1.25.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b792164e539d99d93e4e5e09ae10f8cbe5466de7d759fc155e075237e0c274e4"}, + {file = "numpy-1.25.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7cd981ccc0afe49b9883f14761bb57c964df71124dcd155b0cba2b591f0d64b9"}, + {file = "numpy-1.25.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa48bebfb41f93043a796128854b84407d4df730d3fb6e5dc36402f5cd594c0"}, + {file = "numpy-1.25.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5177310ac2e63d6603f659fadc1e7bab33dd5a8db4e0596df34214eeab0fee3b"}, + {file = "numpy-1.25.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0ac6edfb35d2a99aaf102b509c8e9319c499ebd4978df4971b94419a116d0790"}, + {file = "numpy-1.25.0-cp39-cp39-win32.whl", hash = "sha256:7412125b4f18aeddca2ecd7219ea2d2708f697943e6f624be41aa5f8a9852cc4"}, + {file = "numpy-1.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:26815c6c8498dc49d81faa76d61078c4f9f0859ce7817919021b9eba72b425e3"}, + {file = "numpy-1.25.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b1b90860bf7d8a8c313b372d4f27343a54f415b20fb69dd601b7efe1029c91e"}, + {file = "numpy-1.25.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85cdae87d8c136fd4da4dad1e48064d700f63e923d5af6c8c782ac0df8044542"}, + {file = "numpy-1.25.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cc3fda2b36482891db1060f00f881c77f9423eead4c3579629940a3e12095fe8"}, + {file = "numpy-1.25.0.tar.gz", hash = "sha256:f1accae9a28dc3cda46a91de86acf69de0d1b5f4edd44a9b0c3ceb8036dfff19"}, +] + +[[package]] +name = "overrides" +version = "7.3.1" +description = "A decorator to automatically detect mismatch when overriding a method." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "overrides-7.3.1-py3-none-any.whl", hash = "sha256:6187d8710a935d09b0bcef8238301d6ee2569d2ac1ae0ec39a8c7924e27f58ca"}, + {file = "overrides-7.3.1.tar.gz", hash = "sha256:8b97c6c1e1681b78cbc9424b138d880f0803c2254c5ebaabdde57bb6c62093f2"}, +] + +[[package]] +name = "packaging" +version = "23.1" +description = "Core utilities for Python packages" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "packaging-23.1-py3-none-any.whl", hash = "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61"}, + {file = "packaging-23.1.tar.gz", hash = "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f"}, +] + +[[package]] +name = "pandas" +version = "2.0.2" +description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ebb9f1c22ddb828e7fd017ea265a59d80461d5a79154b49a4207bd17514d122"}, + {file = "pandas-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1eb09a242184092f424b2edd06eb2b99d06dc07eeddff9929e8667d4ed44e181"}, + {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7319b6e68de14e6209460f72a8d1ef13c09fb3d3ef6c37c1e65b35d50b5c145"}, + {file = "pandas-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd46bde7309088481b1cf9c58e3f0e204b9ff9e3244f441accd220dd3365ce7c"}, + {file = "pandas-2.0.2-cp310-cp310-win32.whl", hash = "sha256:51a93d422fbb1bd04b67639ba4b5368dffc26923f3ea32a275d2cc450f1d1c86"}, + {file = "pandas-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:66d00300f188fa5de73f92d5725ced162488f6dc6ad4cecfe4144ca29debe3b8"}, + {file = "pandas-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02755de164da6827764ceb3bbc5f64b35cb12394b1024fdf88704d0fa06e0e2f"}, + {file = "pandas-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0a1e0576611641acde15c2322228d138258f236d14b749ad9af498ab69089e2d"}, + {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6b5f14cd24a2ed06e14255ff40fe2ea0cfaef79a8dd68069b7ace74bd6acbba"}, + {file = "pandas-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50e451932b3011b61d2961b4185382c92cc8c6ee4658dcd4f320687bb2d000ee"}, + {file = "pandas-2.0.2-cp311-cp311-win32.whl", hash = "sha256:7b21cb72958fc49ad757685db1919021d99650d7aaba676576c9e88d3889d456"}, + {file = "pandas-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:c4af689352c4fe3d75b2834933ee9d0ccdbf5d7a8a7264f0ce9524e877820c08"}, + {file = "pandas-2.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:69167693cb8f9b3fc060956a5d0a0a8dbfed5f980d9fd2c306fb5b9c855c814c"}, + {file = "pandas-2.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:30a89d0fec4263ccbf96f68592fd668939481854d2ff9da709d32a047689393b"}, + {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a18e5c72b989ff0f7197707ceddc99828320d0ca22ab50dd1b9e37db45b010c0"}, + {file = "pandas-2.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7376e13d28eb16752c398ca1d36ccfe52bf7e887067af9a0474de6331dd948d2"}, + {file = "pandas-2.0.2-cp38-cp38-win32.whl", hash = "sha256:6d6d10c2142d11d40d6e6c0a190b1f89f525bcf85564707e31b0a39e3b398e08"}, + {file = "pandas-2.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:e69140bc2d29a8556f55445c15f5794490852af3de0f609a24003ef174528b79"}, + {file = "pandas-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b42b120458636a981077cfcfa8568c031b3e8709701315e2bfa866324a83efa8"}, + {file = "pandas-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f908a77cbeef9bbd646bd4b81214cbef9ac3dda4181d5092a4aa9797d1bc7774"}, + {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:713f2f70abcdade1ddd68fc91577cb090b3544b07ceba78a12f799355a13ee44"}, + {file = "pandas-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf3f0c361a4270185baa89ec7ab92ecaa355fe783791457077473f974f654df5"}, + {file = "pandas-2.0.2-cp39-cp39-win32.whl", hash = "sha256:598e9020d85a8cdbaa1815eb325a91cfff2bb2b23c1442549b8a3668e36f0f77"}, + {file = "pandas-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:77550c8909ebc23e56a89f91b40ad01b50c42cfbfab49b3393694a50549295ea"}, + {file = "pandas-2.0.2.tar.gz", hash = "sha256:dd5476b6c3fe410ee95926873f377b856dbc4e81a9c605a0dc05aaccc6a7c6c6"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.1" + +[package.extras] +all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] +aws = ["s3fs (>=2021.08.0)"] +clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] +compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] +computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] +feather = ["pyarrow (>=7.0.0)"] +fss = ["fsspec (>=2021.07.0)"] +gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] +hdf5 = ["tables (>=3.6.1)"] +html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] +mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] +parquet = ["pyarrow (>=7.0.0)"] +performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] +plot = ["matplotlib (>=3.6.1)"] +postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] +spss = ["pyreadstat (>=1.1.2)"] +sql-other = ["SQLAlchemy (>=1.4.16)"] +test = ["hypothesis (>=6.34.2)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.6.3)"] + +[[package]] +name = "pandas-stubs" +version = "2.0.2.230605" +description = "Type annotations for pandas" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pandas_stubs-2.0.2.230605-py3-none-any.whl", hash = "sha256:39106b602f3cb6dc5f728b84e1b32bde6ecf41ee34ee714c66228009609fbada"}, + {file = "pandas_stubs-2.0.2.230605.tar.gz", hash = "sha256:624c7bb06d38145a44b61be459ccd19b038e0bf20364a025ecaab78fea65e858"}, +] + +[package.dependencies] +numpy = ">=1.24.3" +types-pytz = ">=2022.1.1" + +[[package]] +name = "pandocfilters" +version = "1.5.0" +description = "Utilities for writing pandoc filters in python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"}, + {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"}, +] + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pathspec" +version = "0.11.1" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pathspec-0.11.1-py3-none-any.whl", hash = "sha256:d8af70af76652554bd134c22b3e8a1cc46ed7d91edcdd721ef1a0c51a84a5293"}, + {file = "pathspec-0.11.1.tar.gz", hash = "sha256:2798de800fa92780e33acca925945e9a19a133b715067cf165b8866c15a31687"}, +] + +[[package]] +name = "pexpect" +version = "4.8.0" +description = "Pexpect allows easy control of interactive console applications." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, + {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, +] + +[package.dependencies] +ptyprocess = ">=0.5" + +[[package]] +name = "pickleshare" +version = "0.7.5" +description = "Tiny 'shelve'-like database with concurrency support" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, + {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, +] + +[[package]] +name = "pillow" +version = "9.5.0" +description = "Python Imaging Library (Fork)" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pillow-9.5.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:ace6ca218308447b9077c14ea4ef381ba0b67ee78d64046b3f19cf4e1139ad16"}, + {file = "Pillow-9.5.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d3d403753c9d5adc04d4694d35cf0391f0f3d57c8e0030aac09d7678fa8030aa"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ba1b81ee69573fe7124881762bb4cd2e4b6ed9dd28c9c60a632902fe8db8b38"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fe7e1c262d3392afcf5071df9afa574544f28eac825284596ac6db56e6d11062"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f36397bf3f7d7c6a3abdea815ecf6fd14e7fcd4418ab24bae01008d8d8ca15e"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:252a03f1bdddce077eff2354c3861bf437c892fb1832f75ce813ee94347aa9b5"}, + {file = "Pillow-9.5.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:85ec677246533e27770b0de5cf0f9d6e4ec0c212a1f89dfc941b64b21226009d"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b416f03d37d27290cb93597335a2f85ed446731200705b22bb927405320de903"}, + {file = "Pillow-9.5.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1781a624c229cb35a2ac31cc4a77e28cafc8900733a864870c49bfeedacd106a"}, + {file = "Pillow-9.5.0-cp310-cp310-win32.whl", hash = "sha256:8507eda3cd0608a1f94f58c64817e83ec12fa93a9436938b191b80d9e4c0fc44"}, + {file = "Pillow-9.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:d3c6b54e304c60c4181da1c9dadf83e4a54fd266a99c70ba646a9baa626819eb"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:7ec6f6ce99dab90b52da21cf0dc519e21095e332ff3b399a357c187b1a5eee32"}, + {file = "Pillow-9.5.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:560737e70cb9c6255d6dcba3de6578a9e2ec4b573659943a5e7e4af13f298f5c"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96e88745a55b88a7c64fa49bceff363a1a27d9a64e04019c2281049444a571e3"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9c206c29b46cfd343ea7cdfe1232443072bbb270d6a46f59c259460db76779a"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfcc2c53c06f2ccb8976fb5c71d448bdd0a07d26d8e07e321c103416444c7ad1"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a0f9bb6c80e6efcde93ffc51256d5cfb2155ff8f78292f074f60f9e70b942d99"}, + {file = "Pillow-9.5.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:8d935f924bbab8f0a9a28404422da8af4904e36d5c33fc6f677e4c4485515625"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fed1e1cf6a42577953abbe8e6cf2fe2f566daebde7c34724ec8803c4c0cda579"}, + {file = "Pillow-9.5.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c1170d6b195555644f0616fd6ed929dfcf6333b8675fcca044ae5ab110ded296"}, + {file = "Pillow-9.5.0-cp311-cp311-win32.whl", hash = "sha256:54f7102ad31a3de5666827526e248c3530b3a33539dbda27c6843d19d72644ec"}, + {file = "Pillow-9.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfa4561277f677ecf651e2b22dc43e8f5368b74a25a8f7d1d4a3a243e573f2d4"}, + {file = "Pillow-9.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:965e4a05ef364e7b973dd17fc765f42233415974d773e82144c9bbaaaea5d089"}, + {file = "Pillow-9.5.0-cp312-cp312-win32.whl", hash = "sha256:22baf0c3cf0c7f26e82d6e1adf118027afb325e703922c8dfc1d5d0156bb2eeb"}, + {file = "Pillow-9.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:432b975c009cf649420615388561c0ce7cc31ce9b2e374db659ee4f7d57a1f8b"}, + {file = "Pillow-9.5.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:5d4ebf8e1db4441a55c509c4baa7a0587a0210f7cd25fcfe74dbbce7a4bd1906"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:375f6e5ee9620a271acb6820b3d1e94ffa8e741c0601db4c0c4d3cb0a9c224bf"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99eb6cafb6ba90e436684e08dad8be1637efb71c4f2180ee6b8f940739406e78"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dfaaf10b6172697b9bceb9a3bd7b951819d1ca339a5ef294d1f1ac6d7f63270"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:763782b2e03e45e2c77d7779875f4432e25121ef002a41829d8868700d119392"}, + {file = "Pillow-9.5.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:35f6e77122a0c0762268216315bf239cf52b88865bba522999dc38f1c52b9b47"}, + {file = "Pillow-9.5.0-cp37-cp37m-win32.whl", hash = "sha256:aca1c196f407ec7cf04dcbb15d19a43c507a81f7ffc45b690899d6a76ac9fda7"}, + {file = "Pillow-9.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:322724c0032af6692456cd6ed554bb85f8149214d97398bb80613b04e33769f6"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:a0aa9417994d91301056f3d0038af1199eb7adc86e646a36b9e050b06f526597"}, + {file = "Pillow-9.5.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f8286396b351785801a976b1e85ea88e937712ee2c3ac653710a4a57a8da5d9c"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c830a02caeb789633863b466b9de10c015bded434deb3ec87c768e53752ad22a"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fbd359831c1657d69bb81f0db962905ee05e5e9451913b18b831febfe0519082"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8fc330c3370a81bbf3f88557097d1ea26cd8b019d6433aa59f71195f5ddebbf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:7002d0797a3e4193c7cdee3198d7c14f92c0836d6b4a3f3046a64bd1ce8df2bf"}, + {file = "Pillow-9.5.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:229e2c79c00e85989a34b5981a2b67aa079fd08c903f0aaead522a1d68d79e51"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9adf58f5d64e474bed00d69bcd86ec4bcaa4123bfa70a65ce72e424bfb88ed96"}, + {file = "Pillow-9.5.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:662da1f3f89a302cc22faa9f14a262c2e3951f9dbc9617609a47521c69dd9f8f"}, + {file = "Pillow-9.5.0-cp38-cp38-win32.whl", hash = "sha256:6608ff3bf781eee0cd14d0901a2b9cc3d3834516532e3bd673a0a204dc8615fc"}, + {file = "Pillow-9.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:e49eb4e95ff6fd7c0c402508894b1ef0e01b99a44320ba7d8ecbabefddcc5569"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:482877592e927fd263028c105b36272398e3e1be3269efda09f6ba21fd83ec66"}, + {file = "Pillow-9.5.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3ded42b9ad70e5f1754fb7c2e2d6465a9c842e41d178f262e08b8c85ed8a1d8e"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c446d2245ba29820d405315083d55299a796695d747efceb5717a8b450324115"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aca1152d93dcc27dc55395604dcfc55bed5f25ef4c98716a928bacba90d33a3"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:608488bdcbdb4ba7837461442b90ea6f3079397ddc968c31265c1e056964f1ef"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:60037a8db8750e474af7ffc9faa9b5859e6c6d0a50e55c45576bf28be7419705"}, + {file = "Pillow-9.5.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:07999f5834bdc404c442146942a2ecadd1cb6292f5229f4ed3b31e0a108746b1"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a127ae76092974abfbfa38ca2d12cbeddcdeac0fb71f9627cc1135bedaf9d51a"}, + {file = "Pillow-9.5.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:489f8389261e5ed43ac8ff7b453162af39c3e8abd730af8363587ba64bb2e865"}, + {file = "Pillow-9.5.0-cp39-cp39-win32.whl", hash = "sha256:9b1af95c3a967bf1da94f253e56b6286b50af23392a886720f563c547e48e964"}, + {file = "Pillow-9.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:77165c4a5e7d5a284f10a6efaa39a0ae8ba839da344f20b111d62cc932fa4e5d"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:833b86a98e0ede388fa29363159c9b1a294b0905b5128baf01db683672f230f5"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aaf305d6d40bd9632198c766fb64f0c1a83ca5b667f16c1e79e1661ab5060140"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0852ddb76d85f127c135b6dd1f0bb88dbb9ee990d2cd9aa9e28526c93e794fba"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:91ec6fe47b5eb5a9968c79ad9ed78c342b1f97a091677ba0e012701add857829"}, + {file = "Pillow-9.5.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cb841572862f629b99725ebaec3287fc6d275be9b14443ea746c1dd325053cbd"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:c380b27d041209b849ed246b111b7c166ba36d7933ec6e41175fd15ab9eb1572"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c9af5a3b406a50e313467e3565fc99929717f780164fe6fbb7704edba0cebbe"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5671583eab84af046a397d6d0ba25343c00cd50bce03787948e0fff01d4fd9b1"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:84a6f19ce086c1bf894644b43cd129702f781ba5751ca8572f08aa40ef0ab7b7"}, + {file = "Pillow-9.5.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1e7723bd90ef94eda669a3c2c19d549874dd5badaeefabefd26053304abe5799"}, + {file = "Pillow-9.5.0.tar.gz", hash = "sha256:bf548479d336726d7a0eceb6e767e179fbde37833ae42794602631a070d630f1"}, +] + +[package.extras] +docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] +tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "platformdirs" +version = "3.6.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "platformdirs-3.6.0-py3-none-any.whl", hash = "sha256:ffa199e3fbab8365778c4a10e1fbf1b9cd50707de826eb304b50e57ec0cc8d38"}, + {file = "platformdirs-3.6.0.tar.gz", hash = "sha256:57e28820ca8094678b807ff529196506d7a21e17156cb1cddb3e74cebce54640"}, +] + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)"] + +[[package]] +name = "plotly" +version = "5.15.0" +description = "An open-source, interactive data visualization library for Python" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "plotly-5.15.0-py2.py3-none-any.whl", hash = "sha256:3508876bbd6aefb8a692c21a7128ca87ce42498dd041efa5c933ee44b55aab24"}, + {file = "plotly-5.15.0.tar.gz", hash = "sha256:822eabe53997d5ebf23c77e1d1fcbf3bb6aa745eb05d532afd4b6f9a2e2ab02f"}, +] + +[package.dependencies] +packaging = "*" +tenacity = ">=6.2.0" + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pockets" +version = "0.9.1" +description = "A collection of helpful Python tools!" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pockets-0.9.1-py2.py3-none-any.whl", hash = "sha256:68597934193c08a08eb2bf6a1d85593f627c22f9b065cc727a4f03f669d96d86"}, + {file = "pockets-0.9.1.tar.gz", hash = "sha256:9320f1a3c6f7a9133fe3b571f283bcf3353cd70249025ae8d618e40e9f7e92b3"}, +] + +[package.dependencies] +six = ">=1.5.2" + +[[package]] +name = "pprintpp" +version = "0.4.0" +description = "A drop-in replacement for pprint that's actually pretty" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pprintpp-0.4.0-py2.py3-none-any.whl", hash = "sha256:b6b4dcdd0c0c0d75e4d7b2f21a9e933e5b2ce62b26e1a54537f9651ae5a5c01d"}, + {file = "pprintpp-0.4.0.tar.gz", hash = "sha256:ea826108e2c7f49dc6d66c752973c3fc9749142a798d6b254e1e301cfdbc6403"}, +] + +[[package]] +name = "pre-commit" +version = "3.3.3" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pre_commit-3.3.3-py2.py3-none-any.whl", hash = "sha256:10badb65d6a38caff29703362271d7dca483d01da88f9d7e05d0b97171c136cb"}, + {file = "pre_commit-3.3.3.tar.gz", hash = "sha256:a2256f489cd913d575c145132ae196fe335da32d91a8294b7afe6622335dd023"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + +[[package]] +name = "prometheus-client" +version = "0.17.0" +description = "Python client for the Prometheus monitoring system." +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "prometheus_client-0.17.0-py3-none-any.whl", hash = "sha256:a77b708cf083f4d1a3fb3ce5c95b4afa32b9c521ae363354a4a910204ea095ce"}, + {file = "prometheus_client-0.17.0.tar.gz", hash = "sha256:9c3b26f1535945e85b8934fb374678d263137b78ef85f305b1156c7c881cd11b"}, +] + +[package.extras] +twisted = ["twisted"] + +[[package]] +name = "prompt-toolkit" +version = "3.0.38" +description = "Library for building powerful interactive command lines in Python" +category = "dev" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"}, + {file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"}, +] + +[package.dependencies] +wcwidth = "*" + +[[package]] +name = "psutil" +version = "5.9.5" +description = "Cross-platform lib for process and system monitoring in Python." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "psutil-5.9.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:be8929ce4313f9f8146caad4272f6abb8bf99fc6cf59344a3167ecd74f4f203f"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:ab8ed1a1d77c95453db1ae00a3f9c50227ebd955437bcf2a574ba8adbf6a74d5"}, + {file = "psutil-5.9.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:4aef137f3345082a3d3232187aeb4ac4ef959ba3d7c10c33dd73763fbc063da4"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:ea8518d152174e1249c4f2a1c89e3e6065941df2fa13a1ab45327716a23c2b48"}, + {file = "psutil-5.9.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:acf2aef9391710afded549ff602b5887d7a2349831ae4c26be7c807c0a39fac4"}, + {file = "psutil-5.9.5-cp27-none-win32.whl", hash = "sha256:5b9b8cb93f507e8dbaf22af6a2fd0ccbe8244bf30b1baad6b3954e935157ae3f"}, + {file = "psutil-5.9.5-cp27-none-win_amd64.whl", hash = "sha256:8c5f7c5a052d1d567db4ddd231a9d27a74e8e4a9c3f44b1032762bd7b9fdcd42"}, + {file = "psutil-5.9.5-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3c6f686f4225553615612f6d9bc21f1c0e305f75d7d8454f9b46e901778e7217"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a7dd9997128a0d928ed4fb2c2d57e5102bb6089027939f3b722f3a210f9a8da"}, + {file = "psutil-5.9.5-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89518112647f1276b03ca97b65cc7f64ca587b1eb0278383017c2a0dcc26cbe4"}, + {file = "psutil-5.9.5-cp36-abi3-win32.whl", hash = "sha256:104a5cc0e31baa2bcf67900be36acde157756b9c44017b86b2c049f11957887d"}, + {file = "psutil-5.9.5-cp36-abi3-win_amd64.whl", hash = "sha256:b258c0c1c9d145a1d5ceffab1134441c4c5113b2417fafff7315a917a026c3c9"}, + {file = "psutil-5.9.5-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c607bb3b57dc779d55e1554846352b4e358c10fff3abf3514a7a6601beebdb30"}, + {file = "psutil-5.9.5.tar.gz", hash = "sha256:5410638e4df39c54d957fc51ce03048acd8e6d60abc0f5107af51e5fb566eb3c"}, +] + +[package.extras] +test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +description = "Run a subprocess in a pseudo terminal" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] + +[[package]] +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, + {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, +] + +[package.extras] +tests = ["pytest"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] + +[[package]] +name = "pygments" +version = "2.15.1" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "Pygments-2.15.1-py3-none-any.whl", hash = "sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1"}, + {file = "Pygments-2.15.1.tar.gz", hash = "sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c"}, +] + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pyparsing" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" +optional = false +python-versions = ">=3.6.8" +files = [ + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, +] + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + +[[package]] +name = "pyrsistent" +version = "0.19.3" +description = "Persistent/Functional/Immutable data structures" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pyrsistent-0.19.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:20460ac0ea439a3e79caa1dbd560344b64ed75e85d8703943e0b66c2a6150e4a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c18264cb84b5e68e7085a43723f9e4c1fd1d935ab240ce02c0324a8e01ccb64"}, + {file = "pyrsistent-0.19.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b774f9288dda8d425adb6544e5903f1fb6c273ab3128a355c6b972b7df39dcf"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win32.whl", hash = "sha256:5a474fb80f5e0d6c9394d8db0fc19e90fa540b82ee52dba7d246a7791712f74a"}, + {file = "pyrsistent-0.19.3-cp310-cp310-win_amd64.whl", hash = "sha256:49c32f216c17148695ca0e02a5c521e28a4ee6c5089f97e34fe24163113722da"}, + {file = "pyrsistent-0.19.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f0774bf48631f3a20471dd7c5989657b639fd2d285b861237ea9e82c36a415a9"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab2204234c0ecd8b9368dbd6a53e83c3d4f3cab10ecaf6d0e772f456c442393"}, + {file = "pyrsistent-0.19.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e42296a09e83028b3476f7073fcb69ffebac0e66dbbfd1bd847d61f74db30f19"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win32.whl", hash = "sha256:64220c429e42a7150f4bfd280f6f4bb2850f95956bde93c6fda1b70507af6ef3"}, + {file = "pyrsistent-0.19.3-cp311-cp311-win_amd64.whl", hash = "sha256:016ad1afadf318eb7911baa24b049909f7f3bb2c5b1ed7b6a8f21db21ea3faa8"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c4db1bd596fefd66b296a3d5d943c94f4fac5bcd13e99bffe2ba6a759d959a28"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aeda827381f5e5d65cced3024126529ddc4289d944f75e090572c77ceb19adbf"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42ac0b2f44607eb92ae88609eda931a4f0dfa03038c44c772e07f43e738bcac9"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win32.whl", hash = "sha256:e8f2b814a3dc6225964fa03d8582c6e0b6650d68a232df41e3cc1b66a5d2f8d1"}, + {file = "pyrsistent-0.19.3-cp37-cp37m-win_amd64.whl", hash = "sha256:c9bb60a40a0ab9aba40a59f68214eed5a29c6274c83b2cc206a359c4a89fa41b"}, + {file = "pyrsistent-0.19.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a2471f3f8693101975b1ff85ffd19bb7ca7dd7c38f8a81701f67d6b4f97b87d8"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cc5d149f31706762c1f8bda2e8c4f8fead6e80312e3692619a75301d3dbb819a"}, + {file = "pyrsistent-0.19.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3311cb4237a341aa52ab8448c27e3a9931e2ee09561ad150ba94e4cfd3fc888c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win32.whl", hash = "sha256:f0e7c4b2f77593871e918be000b96c8107da48444d57005b6a6bc61fb4331b2c"}, + {file = "pyrsistent-0.19.3-cp38-cp38-win_amd64.whl", hash = "sha256:c147257a92374fde8498491f53ffa8f4822cd70c0d85037e09028e478cababb7"}, + {file = "pyrsistent-0.19.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b735e538f74ec31378f5a1e3886a26d2ca6351106b4dfde376a26fc32a044edc"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99abb85579e2165bd8522f0c0138864da97847875ecbd45f3e7e2af569bfc6f2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3a8cb235fa6d3fd7aae6a4f1429bbb1fec1577d978098da1252f0489937786f3"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win32.whl", hash = "sha256:c74bed51f9b41c48366a286395c67f4e894374306b197e62810e0fdaf2364da2"}, + {file = "pyrsistent-0.19.3-cp39-cp39-win_amd64.whl", hash = "sha256:878433581fc23e906d947a6814336eee031a00e6defba224234169ae3d3d6a98"}, + {file = "pyrsistent-0.19.3-py3-none-any.whl", hash = "sha256:ccf0d6bd208f8111179f0c26fdf84ed7c3891982f2edaeae7422575f47e66b64"}, + {file = "pyrsistent-0.19.3.tar.gz", hash = "sha256:1a2994773706bbb4995c31a97bc94f1418314923bd1048c6d964837040376440"}, +] + +[[package]] +name = "pytest" +version = "7.3.2" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.3.2-py3-none-any.whl", hash = "sha256:cdcbd012c9312258922f8cd3f1b62a6580fdced17db6014896053d47cddf9295"}, + {file = "pytest-7.3.2.tar.gz", hash = "sha256:ee990a3cc55ba808b80795a79944756f315c67c12b56abd3ac993a7b8c17030b"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-clarity" +version = "1.0.1" +description = "A plugin providing an alternative, colourful diff output for failing assertions." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "pytest-clarity-1.0.1.tar.gz", hash = "sha256:505fe345fad4fe11c6a4187fe683f2c7c52c077caa1e135f3e483fe112db7772"}, +] + +[package.dependencies] +pprintpp = ">=0.4.0" +pytest = ">=3.5.0" +rich = ">=8.0.0" + +[[package]] +name = "pytest-cov" +version = "4.1.0" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-cov-4.1.0.tar.gz", hash = "sha256:3904b13dfbfec47f003b8e77fd5b589cd11904a21ddf1ab38a64f204d6a10ef6"}, + {file = "pytest_cov-4.1.0-py3-none-any.whl", hash = "sha256:6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytest-mock" +version = "3.11.1" +description = "Thin-wrapper around the mock package for easier use with pytest" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-mock-3.11.1.tar.gz", hash = "sha256:7f6b125602ac6d743e523ae0bfa71e1a697a2f5534064528c6ff84c2f7c2fc7f"}, + {file = "pytest_mock-3.11.1-py3-none-any.whl", hash = "sha256:21c279fff83d70763b05f8874cc9cfb3fcacd6d354247a976f9529d19f9acf39"}, +] + +[package.dependencies] +pytest = ">=5.0" + +[package.extras] +dev = ["pre-commit", "pytest-asyncio", "tox"] + +[[package]] +name = "pytest-repeat" +version = "0.9.1" +description = "pytest plugin for repeating tests" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pytest-repeat-0.9.1.tar.gz", hash = "sha256:5cd3289745ab3156d43eb9c8e7f7d00a926f3ae5c9cf425bec649b2fe15bad5b"}, + {file = "pytest_repeat-0.9.1-py2.py3-none-any.whl", hash = "sha256:4474a7d9e9137f6d8cc8ae297f8c4168d33c56dd740aa78cfffe562557e6b96e"}, +] + +[package.dependencies] +pytest = ">=3.6" + +[[package]] +name = "python-dateutil" +version = "2.8.2" +description = "Extensions to the standard Python datetime module" +category = "main" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +files = [ + {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, + {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, +] + +[package.dependencies] +six = ">=1.5" + +[[package]] +name = "python-json-logger" +version = "2.0.7" +description = "A python library adding a json log formatter" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, + {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, +] + +[[package]] +name = "pytz" +version = "2023.3" +description = "World timezone definitions, modern and historical" +category = "main" +optional = false +python-versions = "*" +files = [ + {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, + {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "pywinpty" +version = "2.0.10" +description = "Pseudo terminal support for Windows from Python." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pywinpty-2.0.10-cp310-none-win_amd64.whl", hash = "sha256:4c7d06ad10f6e92bc850a467f26d98f4f30e73d2fe5926536308c6ae0566bc16"}, + {file = "pywinpty-2.0.10-cp311-none-win_amd64.whl", hash = "sha256:7ffbd66310b83e42028fc9df7746118978d94fba8c1ebf15a7c1275fdd80b28a"}, + {file = "pywinpty-2.0.10-cp37-none-win_amd64.whl", hash = "sha256:38cb924f2778b5751ef91a75febd114776b3af0ae411bc667be45dd84fc881d3"}, + {file = "pywinpty-2.0.10-cp38-none-win_amd64.whl", hash = "sha256:902d79444b29ad1833b8d5c3c9aabdfd428f4f068504430df18074007c8c0de8"}, + {file = "pywinpty-2.0.10-cp39-none-win_amd64.whl", hash = "sha256:3c46aef80dd50979aff93de199e4a00a8ee033ba7a03cadf0a91fed45f0c39d7"}, + {file = "pywinpty-2.0.10.tar.gz", hash = "sha256:cdbb5694cf8c7242c2ecfaca35c545d31fa5d5814c3d67a4e628f803f680ebea"}, +] + +[[package]] +name = "pyyaml" +version = "6.0" +description = "YAML parser and emitter for Python" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4b0ba9512519522b118090257be113b9468d804b19d63c71dbcf4a48fa32358"}, + {file = "PyYAML-6.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:81957921f441d50af23654aa6c5e5eaf9b06aba7f0a19c18a538dc7ef291c5a1"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afa17f5bc4d1b10afd4466fd3a44dc0e245382deca5b3c353d8b757f9e3ecb8d"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbad0e9d368bb989f4515da330b88a057617d16b6a8245084f1b05400f24609f"}, + {file = "PyYAML-6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:432557aa2c09802be39460360ddffd48156e30721f5e8d917f01d31694216782"}, + {file = "PyYAML-6.0-cp311-cp311-win32.whl", hash = "sha256:bfaef573a63ba8923503d27530362590ff4f576c626d86a9fed95822a8255fd7"}, + {file = "PyYAML-6.0-cp311-cp311-win_amd64.whl", hash = "sha256:01b45c0191e6d66c470b6cf1b9531a771a83c1c4208272ead47a3ae4f2f603bf"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, +] + +[[package]] +name = "pyzmq" +version = "25.1.0" +description = "Python bindings for 0MQ" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:1a6169e69034eaa06823da6a93a7739ff38716142b3596c180363dee729d713d"}, + {file = "pyzmq-25.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:19d0383b1f18411d137d891cab567de9afa609b214de68b86e20173dc624c101"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1e931d9a92f628858a50f5bdffdfcf839aebe388b82f9d2ccd5d22a38a789dc"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:97d984b1b2f574bc1bb58296d3c0b64b10e95e7026f8716ed6c0b86d4679843f"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:154bddda2a351161474b36dba03bf1463377ec226a13458725183e508840df89"}, + {file = "pyzmq-25.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:cb6d161ae94fb35bb518b74bb06b7293299c15ba3bc099dccd6a5b7ae589aee3"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:90146ab578931e0e2826ee39d0c948d0ea72734378f1898939d18bc9c823fcf9"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:831ba20b660b39e39e5ac8603e8193f8fce1ee03a42c84ade89c36a251449d80"}, + {file = "pyzmq-25.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3a522510e3434e12aff80187144c6df556bb06fe6b9d01b2ecfbd2b5bfa5c60c"}, + {file = "pyzmq-25.1.0-cp310-cp310-win32.whl", hash = "sha256:be24a5867b8e3b9dd5c241de359a9a5217698ff616ac2daa47713ba2ebe30ad1"}, + {file = "pyzmq-25.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:5693dcc4f163481cf79e98cf2d7995c60e43809e325b77a7748d8024b1b7bcba"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:13bbe36da3f8aaf2b7ec12696253c0bf6ffe05f4507985a8844a1081db6ec22d"}, + {file = "pyzmq-25.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:69511d604368f3dc58d4be1b0bad99b61ee92b44afe1cd9b7bd8c5e34ea8248a"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a983c8694667fd76d793ada77fd36c8317e76aa66eec75be2653cef2ea72883"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:332616f95eb400492103ab9d542b69d5f0ff628b23129a4bc0a2fd48da6e4e0b"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58416db767787aedbfd57116714aad6c9ce57215ffa1c3758a52403f7c68cff5"}, + {file = "pyzmq-25.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cad9545f5801a125f162d09ec9b724b7ad9b6440151b89645241d0120e119dcc"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d6128d431b8dfa888bf51c22a04d48bcb3d64431caf02b3cb943269f17fd2994"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2b15247c49d8cbea695b321ae5478d47cffd496a2ec5ef47131a9e79ddd7e46c"}, + {file = "pyzmq-25.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:442d3efc77ca4d35bee3547a8e08e8d4bb88dadb54a8377014938ba98d2e074a"}, + {file = "pyzmq-25.1.0-cp311-cp311-win32.whl", hash = "sha256:65346f507a815a731092421d0d7d60ed551a80d9b75e8b684307d435a5597425"}, + {file = "pyzmq-25.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b45d722046fea5a5694cba5d86f21f78f0052b40a4bbbbf60128ac55bfcc7b6"}, + {file = "pyzmq-25.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f45808eda8b1d71308c5416ef3abe958f033fdbb356984fabbfc7887bed76b3f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b697774ea8273e3c0460cf0bba16cd85ca6c46dfe8b303211816d68c492e132"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b324fa769577fc2c8f5efcd429cef5acbc17d63fe15ed16d6dcbac2c5eb00849"}, + {file = "pyzmq-25.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:5873d6a60b778848ce23b6c0ac26c39e48969823882f607516b91fb323ce80e5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f0d9e7ba6a815a12c8575ba7887da4b72483e4cfc57179af10c9b937f3f9308f"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:414b8beec76521358b49170db7b9967d6974bdfc3297f47f7d23edec37329b00"}, + {file = "pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:01f06f33e12497dca86353c354461f75275a5ad9eaea181ac0dc1662da8074fa"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win32.whl", hash = "sha256:b5a07c4f29bf7cb0164664ef87e4aa25435dcc1f818d29842118b0ac1eb8e2b5"}, + {file = "pyzmq-25.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:968b0c737797c1809ec602e082cb63e9824ff2329275336bb88bd71591e94a90"}, + {file = "pyzmq-25.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:47b915ba666c51391836d7ed9a745926b22c434efa76c119f77bcffa64d2c50c"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5af31493663cf76dd36b00dafbc839e83bbca8a0662931e11816d75f36155897"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5489738a692bc7ee9a0a7765979c8a572520d616d12d949eaffc6e061b82b4d1"}, + {file = "pyzmq-25.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1fc56a0221bdf67cfa94ef2d6ce5513a3d209c3dfd21fed4d4e87eca1822e3a3"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:75217e83faea9edbc29516fc90c817bc40c6b21a5771ecb53e868e45594826b0"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3830be8826639d801de9053cf86350ed6742c4321ba4236e4b5568528d7bfed7"}, + {file = "pyzmq-25.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3575699d7fd7c9b2108bc1c6128641a9a825a58577775ada26c02eb29e09c517"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win32.whl", hash = "sha256:95bd3a998d8c68b76679f6b18f520904af5204f089beebb7b0301d97704634dd"}, + {file = "pyzmq-25.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:dbc466744a2db4b7ca05589f21ae1a35066afada2f803f92369f5877c100ef62"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:3bed53f7218490c68f0e82a29c92335daa9606216e51c64f37b48eb78f1281f4"}, + {file = "pyzmq-25.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eb52e826d16c09ef87132c6e360e1879c984f19a4f62d8a935345deac43f3c12"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ddbef8b53cd16467fdbfa92a712eae46dd066aa19780681a2ce266e88fbc7165"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9301cf1d7fc1ddf668d0abbe3e227fc9ab15bc036a31c247276012abb921b5ff"}, + {file = "pyzmq-25.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7e23a8c3b6c06de40bdb9e06288180d630b562db8ac199e8cc535af81f90e64b"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4a82faae00d1eed4809c2f18b37f15ce39a10a1c58fe48b60ad02875d6e13d80"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:c8398a1b1951aaa330269c35335ae69744be166e67e0ebd9869bdc09426f3871"}, + {file = "pyzmq-25.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d40682ac60b2a613d36d8d3a0cd14fbdf8e7e0618fbb40aa9fa7b796c9081584"}, + {file = "pyzmq-25.1.0-cp38-cp38-win32.whl", hash = "sha256:33d5c8391a34d56224bccf74f458d82fc6e24b3213fc68165c98b708c7a69325"}, + {file = "pyzmq-25.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:c66b7ff2527e18554030319b1376d81560ca0742c6e0b17ff1ee96624a5f1afd"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:af56229ea6527a849ac9fb154a059d7e32e77a8cba27e3e62a1e38d8808cb1a5"}, + {file = "pyzmq-25.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bdca18b94c404af6ae5533cd1bc310c4931f7ac97c148bbfd2cd4bdd62b96253"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b6b42f7055bbc562f63f3df3b63e3dd1ebe9727ff0f124c3aa7bcea7b3a00f9"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4c2fc7aad520a97d64ffc98190fce6b64152bde57a10c704b337082679e74f67"}, + {file = "pyzmq-25.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be86a26415a8b6af02cd8d782e3a9ae3872140a057f1cadf0133de685185c02b"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:851fb2fe14036cfc1960d806628b80276af5424db09fe5c91c726890c8e6d943"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2a21fec5c3cea45421a19ccbe6250c82f97af4175bc09de4d6dd78fb0cb4c200"}, + {file = "pyzmq-25.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bad172aba822444b32eae54c2d5ab18cd7dee9814fd5c7ed026603b8cae2d05f"}, + {file = "pyzmq-25.1.0-cp39-cp39-win32.whl", hash = "sha256:4d67609b37204acad3d566bb7391e0ecc25ef8bae22ff72ebe2ad7ffb7847158"}, + {file = "pyzmq-25.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:71c7b5896e40720d30cd77a81e62b433b981005bbff0cb2f739e0f8d059b5d99"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4cb27ef9d3bdc0c195b2dc54fcb8720e18b741624686a81942e14c8b67cc61a6"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0c4fc2741e0513b5d5a12fe200d6785bbcc621f6f2278893a9ca7bed7f2efb7d"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fc34fdd458ff77a2a00e3c86f899911f6f269d393ca5675842a6e92eea565bae"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8751f9c1442624da391bbd92bd4b072def6d7702a9390e4479f45c182392ff78"}, + {file = "pyzmq-25.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:6581e886aec3135964a302a0f5eb68f964869b9efd1dbafdebceaaf2934f8a68"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5482f08d2c3c42b920e8771ae8932fbaa0a67dff925fc476996ddd8155a170f3"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5e7fbcafa3ea16d1de1f213c226005fea21ee16ed56134b75b2dede5a2129e62"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:adecf6d02b1beab8d7c04bc36f22bb0e4c65a35eb0b4750b91693631d4081c70"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f6d39e42a0aa888122d1beb8ec0d4ddfb6c6b45aecb5ba4013c27e2f28657765"}, + {file = "pyzmq-25.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7018289b402ebf2b2c06992813523de61d4ce17bd514c4339d8f27a6f6809492"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9e68ae9864d260b18f311b68d29134d8776d82e7f5d75ce898b40a88df9db30f"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e21cc00e4debe8f54c3ed7b9fcca540f46eee12762a9fa56feb8512fd9057161"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f666ae327a6899ff560d741681fdcdf4506f990595201ed39b44278c471ad98"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f5efcc29056dfe95e9c9db0dfbb12b62db9c4ad302f812931b6d21dd04a9119"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:48e5e59e77c1a83162ab3c163fc01cd2eebc5b34560341a67421b09be0891287"}, + {file = "pyzmq-25.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:108c96ebbd573d929740d66e4c3d1bdf31d5cde003b8dc7811a3c8c5b0fc173b"}, + {file = "pyzmq-25.1.0.tar.gz", hash = "sha256:80c41023465d36280e801564a69cbfce8ae85ff79b080e1913f6e90481fb8957"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "qtconsole" +version = "5.4.3" +description = "Jupyter Qt console" +category = "dev" +optional = false +python-versions = ">= 3.7" +files = [ + {file = "qtconsole-5.4.3-py3-none-any.whl", hash = "sha256:35fd6e87b1f6d1fd41801b07e69339f8982e76afd4fa8ef35595bc6036717189"}, + {file = "qtconsole-5.4.3.tar.gz", hash = "sha256:5e4082a86a201796b2a5cfd4298352d22b158b51b57736531824715fc2a979dd"}, +] + +[package.dependencies] +ipykernel = ">=4.1" +ipython-genutils = "*" +jupyter-client = ">=4.1" +jupyter-core = "*" +packaging = "*" +pygments = "*" +pyzmq = ">=17.1" +qtpy = ">=2.0.1" +traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" + +[package.extras] +doc = ["Sphinx (>=1.3)"] +test = ["flaky", "pytest", "pytest-qt"] + +[[package]] +name = "qtpy" +version = "2.3.1" +description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "QtPy-2.3.1-py3-none-any.whl", hash = "sha256:5193d20e0b16e4d9d3bc2c642d04d9f4e2c892590bd1b9c92bfe38a95d5a2e12"}, + {file = "QtPy-2.3.1.tar.gz", hash = "sha256:a8c74982d6d172ce124d80cafd39653df78989683f760f2281ba91a6e7b9de8b"}, +] + +[package.dependencies] +packaging = "*" + +[package.extras] +test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +description = "A pure python RFC3339 validator" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] + +[package.dependencies] +six = "*" + +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + +[[package]] +name = "rich" +version = "13.4.2" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +category = "dev" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.4.2-py3-none-any.whl", hash = "sha256:8f87bc7ee54675732fa66a05ebfe489e27264caeeff3728c945d25971b6485ec"}, + {file = "rich-13.4.2.tar.gz", hash = "sha256:d653d6bccede5844304c605d5aac802c7cf9621efd700b46c7ec2b51ea914898"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "rise" +version = "5.7.1" +description = "Reveal.js - Jupyter/IPython Slideshow Extension" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +files = [ + {file = "rise-5.7.1-py2.py3-none-any.whl", hash = "sha256:df8ce9f0e575d334b27ff40a1f91a4c78d9f7b4995858bb81185ceeaf98eae3a"}, + {file = "rise-5.7.1.tar.gz", hash = "sha256:641db777cb907bf5e6dc053098d7fd213813fa9a946542e52b900eb7095289a6"}, +] + +[package.dependencies] +notebook = ">=6.0" + +[[package]] +name = "ruff" +version = "0.0.270" +description = "An extremely fast Python linter, written in Rust." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.0.270-py3-none-macosx_10_7_x86_64.whl", hash = "sha256:f74c4d550f7b8e808455ac77bbce38daafc458434815ba0bc21ae4bdb276509b"}, + {file = "ruff-0.0.270-py3-none-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:643de865fd35cb76c4f0739aea5afe7b8e4d40d623df7e9e6ea99054e5cead0a"}, + {file = "ruff-0.0.270-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eca02e709b3308eb7255b5f74e779be23b5980fca3862eae28bb23069cd61ae4"}, + {file = "ruff-0.0.270-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ed3b198768d2b3a2300fb18f730cd39948a5cc36ba29ae9d4639a11040880be"}, + {file = "ruff-0.0.270-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:739495d2dbde87cf4e3110c8d27bc20febf93112539a968a4e02c26f0deccd1d"}, + {file = "ruff-0.0.270-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:08188f8351f4c0b6216e8463df0a76eb57894ca59a3da65e4ed205db980fd3ae"}, + {file = "ruff-0.0.270-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0827b074635d37984fc98d99316bfab5c8b1231bb83e60dacc83bd92883eedb4"}, + {file = "ruff-0.0.270-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d61ae4841313f6eeb8292dc349bef27b4ce426e62c36e80ceedc3824e408734"}, + {file = "ruff-0.0.270-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0eb412f20e77529a01fb94d578b19dcb8331b56f93632aa0cce4a2ea27b7aeba"}, + {file = "ruff-0.0.270-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b775e2c5fc869359daf8c8b8aa0fd67240201ab2e8d536d14a0edf279af18786"}, + {file = "ruff-0.0.270-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:21f00e47ab2308617c44435c8dfd9e2e03897461c9e647ec942deb2a235b4cfd"}, + {file = "ruff-0.0.270-py3-none-musllinux_1_2_i686.whl", hash = "sha256:0bbfbf6fd2436165566ca85f6e57be03ed2f0a994faf40180cfbb3604c9232ef"}, + {file = "ruff-0.0.270-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:8af391ef81f7be960be10886a3c1aac0b298bde7cb9a86ec2b05faeb2081ce6b"}, + {file = "ruff-0.0.270-py3-none-win32.whl", hash = "sha256:b4c037fe2f75bcd9aed0c89c7c507cb7fa59abae2bd4c8b6fc331a28178655a4"}, + {file = "ruff-0.0.270-py3-none-win_amd64.whl", hash = "sha256:0012f9b7dc137ab7f1f0355e3c4ca49b562baf6c9fa1180948deeb6648c52957"}, + {file = "ruff-0.0.270-py3-none-win_arm64.whl", hash = "sha256:9613456b0b375766244c25045e353bc8890c856431cd97893c97b10cc93bd28d"}, + {file = "ruff-0.0.270.tar.gz", hash = "sha256:95db07b7850b30ebf32b27fe98bc39e0ab99db3985edbbf0754d399eb2f0e690"}, +] + +[[package]] +name = "seaborn" +version = "0.12.2" +description = "Statistical data visualization" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "seaborn-0.12.2-py3-none-any.whl", hash = "sha256:ebf15355a4dba46037dfd65b7350f014ceb1f13c05e814eda2c9f5fd731afc08"}, + {file = "seaborn-0.12.2.tar.gz", hash = "sha256:374645f36509d0dcab895cba5b47daf0586f77bfe3b36c97c607db7da5be0139"}, +] + +[package.dependencies] +matplotlib = ">=3.1,<3.6.1 || >3.6.1" +numpy = ">=1.17,<1.24.0 || >1.24.0" +pandas = ">=0.25" + +[package.extras] +dev = ["flake8", "flit", "mypy", "pandas-stubs", "pre-commit", "pytest", "pytest-cov", "pytest-xdist"] +docs = ["ipykernel", "nbconvert", "numpydoc", "pydata_sphinx_theme (==0.10.0rc2)", "pyyaml", "sphinx-copybutton", "sphinx-design", "sphinx-issues"] +stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] + +[[package]] +name = "send2trash" +version = "1.8.2" +description = "Send file to trash natively under Mac OS X, Windows and Linux" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +files = [ + {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, + {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa", "pywin32"] +objc = ["pyobjc-framework-Cocoa"] +win32 = ["pywin32"] + +[[package]] +name = "setuptools" +version = "67.8.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "setuptools-67.8.0-py3-none-any.whl", hash = "sha256:5df61bf30bb10c6f756eb19e7c9f3b473051f48db77fddbe06ff2ca307df9a6f"}, + {file = "setuptools-67.8.0.tar.gz", hash = "sha256:62642358adc77ffa87233bc4d2354c4b2682d214048f500964dbe760ccedf102"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +files = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] + +[[package]] +name = "soupsieve" +version = "2.4.1" +description = "A modern CSS selector implementation for Beautiful Soup." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "soupsieve-2.4.1-py3-none-any.whl", hash = "sha256:1c1bfee6819544a3447586c889157365a27e10d88cde3ad3da0cf0ddf646feb8"}, + {file = "soupsieve-2.4.1.tar.gz", hash = "sha256:89d12b2d5dfcd2c9e8c22326da9d9aa9cb3dfab0a83a024f05704076ee8d35ea"}, +] + +[[package]] +name = "sphinx" +version = "6.2.1" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Sphinx-6.2.1.tar.gz", hash = "sha256:6d56a34697bb749ffa0152feafc4b19836c755d90a7c59b72bc7dfd371b9cc6b"}, + {file = "sphinx-6.2.1-py3-none-any.whl", hash = "sha256:97787ff1fa3256a3eef9eda523a63dbf299f7b47e053cfcf684a1c2a8380c912"}, +] + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=2.9" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.18.1,<0.20" +imagesize = ">=1.3" +Jinja2 = ">=3.0" +packaging = ">=21.0" +Pygments = ">=2.13" +requests = ">=2.25.0" +snowballstemmer = ">=2.0" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] +test = ["cython", "filelock", "html5lib", "pytest (>=4.6)"] + +[[package]] +name = "sphinx-autodoc-typehints" +version = "1.23.0" +description = "Type hints (PEP 484) support for the Sphinx autodoc extension" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx_autodoc_typehints-1.23.0-py3-none-any.whl", hash = "sha256:ac099057e66b09e51b698058ba7dd76e57e1fe696cd91b54e121d3dad188f91d"}, + {file = "sphinx_autodoc_typehints-1.23.0.tar.gz", hash = "sha256:5d44e2996633cdada499b6d27a496ddf9dbc95dd1f0f09f7b37940249e61f6e9"}, +] + +[package.dependencies] +sphinx = ">=5.3" + +[package.extras] +docs = ["furo (>=2022.12.7)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.23.4)"] +testing = ["covdefaults (>=2.2.2)", "coverage (>=7.2.2)", "diff-cover (>=7.5)", "nptyping (>=2.5)", "pytest (>=7.2.2)", "pytest-cov (>=4)", "sphobjinv (>=2.3.1)", "typing-extensions (>=4.5)"] +type-comment = ["typed-ast (>=1.5.4)"] + +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +description = "Add a copy button to each of your code cells." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd"}, + {file = "sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e"}, +] + +[package.dependencies] +sphinx = ">=1.8" + +[package.extras] +code-style = ["pre-commit (==2.12.1)"] +rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.2.2" +description = "Read the Docs theme for Sphinx" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +files = [ + {file = "sphinx_rtd_theme-1.2.2-py2.py3-none-any.whl", hash = "sha256:6a7e7d8af34eb8fc57d52a09c6b6b9c46ff44aea5951bc831eeb9245378f3689"}, + {file = "sphinx_rtd_theme-1.2.2.tar.gz", hash = "sha256:01c5c5a72e2d025bd23d1f06c59a4831b06e6ce6c01fdd5ebfe9986c0a880fc7"}, +] + +[package.dependencies] +docutils = "<0.19" +sphinx = ">=1.6,<7" +sphinxcontrib-jquery = ">=4,<5" + +[package.extras] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.4" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-applehelp-1.0.4.tar.gz", hash = "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e"}, + {file = "sphinxcontrib_applehelp-1.0.4-py3-none-any.whl", hash = "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.1" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "sphinxcontrib-htmlhelp-2.0.1.tar.gz", hash = "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff"}, + {file = "sphinxcontrib_htmlhelp-2.0.1-py3-none-any.whl", hash = "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +description = "Extension to include jQuery on newer Sphinx releases" +category = "dev" +optional = false +python-versions = ">=2.7" +files = [ + {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, + {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, +] + +[package.dependencies] +Sphinx = ">=1.8" + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-mermaid" +version = "0.9.2" +description = "Mermaid diagrams in yours Sphinx powered docs" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sphinxcontrib-mermaid-0.9.2.tar.gz", hash = "sha256:252ef13dd23164b28f16d8b0205cf184b9d8e2b714a302274d9f59eb708e77af"}, + {file = "sphinxcontrib_mermaid-0.9.2-py3-none-any.whl", hash = "sha256:6795a72037ca55e65663d2a2c1a043d636dc3d30d418e56dd6087d1459d98a5d"}, +] + +[[package]] +name = "sphinxcontrib-napoleon" +version = "0.7" +description = "Sphinx \"napoleon\" extension." +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "sphinxcontrib-napoleon-0.7.tar.gz", hash = "sha256:407382beed396e9f2d7f3043fad6afda95719204a1e1a231ac865f40abcbfcf8"}, + {file = "sphinxcontrib_napoleon-0.7-py2.py3-none-any.whl", hash = "sha256:711e41a3974bdf110a484aec4c1a556799eb0b3f3b897521a018ad7e2db13fef"}, +] + +[package.dependencies] +pockets = ">=0.3" +six = ">=1.5.2" + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "stack-data" +version = "0.6.2" +description = "Extract data from python stack frames and tracebacks for informative displays" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "stack_data-0.6.2-py3-none-any.whl", hash = "sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8"}, + {file = "stack_data-0.6.2.tar.gz", hash = "sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815"}, +] + +[package.dependencies] +asttokens = ">=2.1.0" +executing = ">=1.2.0" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] + +[[package]] +name = "tenacity" +version = "8.2.2" +description = "Retry code until it succeeds" +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "tenacity-8.2.2-py3-none-any.whl", hash = "sha256:2f277afb21b851637e8f52e6a613ff08734c347dc19ade928e519d7d2d8569b0"}, + {file = "tenacity-8.2.2.tar.gz", hash = "sha256:43af037822bd0029025877f3b2d97cc4d7bb0c2991000a3d59d71517c5c969e0"}, +] + +[package.extras] +doc = ["reno", "sphinx", "tornado (>=4.5)"] + +[[package]] +name = "terminado" +version = "0.17.1" +description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "terminado-0.17.1-py3-none-any.whl", hash = "sha256:8650d44334eba354dd591129ca3124a6ba42c3d5b70df5051b6921d506fdaeae"}, + {file = "terminado-0.17.1.tar.gz", hash = "sha256:6ccbbcd3a4f8a25a5ec04991f39a0b8db52dfcd487ea0e578d977e6752380333"}, +] + +[package.dependencies] +ptyprocess = {version = "*", markers = "os_name != \"nt\""} +pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} +tornado = ">=6.1.0" + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] + +[[package]] +name = "tinycss2" +version = "1.2.1" +description = "A tiny CSS parser" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, + {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, +] + +[package.dependencies] +webencodings = ">=0.4" + +[package.extras] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["flake8", "isort", "pytest"] + +[[package]] +name = "tokenize-rt" +version = "5.1.0" +description = "A wrapper around the stdlib `tokenize` which roundtrips." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tokenize_rt-5.1.0-py2.py3-none-any.whl", hash = "sha256:9b7bb843e77dd6ed0be5564bfaaba200083911e0497841cd3e9235a6a9794d74"}, + {file = "tokenize_rt-5.1.0.tar.gz", hash = "sha256:08f0c2daa94c4052e53c2fcaa8e32585e6ae9bdfc800974092d031401694e002"}, +] + +[[package]] +name = "tornado" +version = "6.3.2" +description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." +category = "dev" +optional = false +python-versions = ">= 3.8" +files = [ + {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c367ab6c0393d71171123ca5515c61ff62fe09024fa6bf299cd1339dc9456829"}, + {file = "tornado-6.3.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b46a6ab20f5c7c1cb949c72c1994a4585d2eaa0be4853f50a03b5031e964fc7c"}, + {file = "tornado-6.3.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2de14066c4a38b4ecbbcd55c5cc4b5340eb04f1c5e81da7451ef555859c833f"}, + {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05615096845cf50a895026f749195bf0b10b8909f9be672f50b0fe69cba368e4"}, + {file = "tornado-6.3.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b17b1cf5f8354efa3d37c6e28fdfd9c1c1e5122f2cb56dac121ac61baa47cbe"}, + {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:29e71c847a35f6e10ca3b5c2990a52ce38b233019d8e858b755ea6ce4dcdd19d"}, + {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:834ae7540ad3a83199a8da8f9f2d383e3c3d5130a328889e4cc991acc81e87a0"}, + {file = "tornado-6.3.2-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:6a0848f1aea0d196a7c4f6772197cbe2abc4266f836b0aac76947872cd29b411"}, + {file = "tornado-6.3.2-cp38-abi3-win32.whl", hash = "sha256:7efcbcc30b7c654eb6a8c9c9da787a851c18f8ccd4a5a3a95b05c7accfa068d2"}, + {file = "tornado-6.3.2-cp38-abi3-win_amd64.whl", hash = "sha256:0c325e66c8123c606eea33084976c832aa4e766b7dff8aedd7587ea44a604cdf"}, + {file = "tornado-6.3.2.tar.gz", hash = "sha256:4b927c4f19b71e627b13f3db2324e4ae660527143f9e1f2e2fb404f3a187e2ba"}, +] + +[[package]] +name = "tqdm" +version = "4.65.0" +description = "Fast, Extensible Progress Meter" +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"}, + {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["py-make (>=0.1.0)", "twine", "wheel"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + +[[package]] +name = "traitlets" +version = "5.9.0" +description = "Traitlets Python configuration system" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "traitlets-5.9.0-py3-none-any.whl", hash = "sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8"}, + {file = "traitlets-5.9.0.tar.gz", hash = "sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9"}, +] + +[package.extras] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] + +[[package]] +name = "types-pytz" +version = "2023.3.0.0" +description = "Typing stubs for pytz" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "types-pytz-2023.3.0.0.tar.gz", hash = "sha256:ecdc70d543aaf3616a7e48631543a884f74205f284cefd6649ddf44c6a820aac"}, + {file = "types_pytz-2023.3.0.0-py3-none-any.whl", hash = "sha256:4fc2a7fbbc315f0b6630e0b899fd6c743705abe1094d007b0e612d10da15e0f3"}, +] + +[[package]] +name = "types-requests" +version = "2.31.0.1" +description = "Typing stubs for requests" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "types-requests-2.31.0.1.tar.gz", hash = "sha256:3de667cffa123ce698591de0ad7db034a5317457a596eb0b4944e5a9d9e8d1ac"}, + {file = "types_requests-2.31.0.1-py3-none-any.whl", hash = "sha256:afb06ef8f25ba83d59a1d424bd7a5a939082f94b94e90ab5e6116bd2559deaa3"}, +] + +[package.dependencies] +types-urllib3 = "*" + +[[package]] +name = "types-urllib3" +version = "1.26.25.13" +description = "Typing stubs for urllib3" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "types-urllib3-1.26.25.13.tar.gz", hash = "sha256:3300538c9dc11dad32eae4827ac313f5d986b8b21494801f1bf97a1ac6c03ae5"}, + {file = "types_urllib3-1.26.25.13-py3-none-any.whl", hash = "sha256:5dbd1d2bef14efee43f5318b5d36d805a489f6600252bb53626d4bfafd95e27c"}, +] + +[[package]] +name = "typing-extensions" +version = "4.6.3" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "typing_extensions-4.6.3-py3-none-any.whl", hash = "sha256:88a4153d8505aabbb4e13aacb7c486c2b4a33ca3b3f807914a9b4c844c471c26"}, + {file = "typing_extensions-4.6.3.tar.gz", hash = "sha256:d91d5919357fe7f681a9f2b5b4cb2a5f1ef0a1e9f59c4d8ff0d3491e05c0ffd5"}, +] + +[[package]] +name = "tzdata" +version = "2023.3" +description = "Provider of IANA time zone data" +category = "main" +optional = false +python-versions = ">=2" +files = [ + {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, + {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, +] + +[[package]] +name = "uri-template" +version = "1.2.0" +description = "RFC 6570 URI Template Processor" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "uri_template-1.2.0-py3-none-any.whl", hash = "sha256:f1699c77b73b925cf4937eae31ab282a86dc885c333f2e942513f08f691fc7db"}, + {file = "uri_template-1.2.0.tar.gz", hash = "sha256:934e4d09d108b70eb8a24410af8615294d09d279ce0e7cbcdaef1bd21f932b06"}, +] + +[package.extras] +dev = ["flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "mypy", "pep8-naming"] + +[[package]] +name = "urllib3" +version = "2.0.3" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "urllib3-2.0.3-py3-none-any.whl", hash = "sha256:48e7fafa40319d358848e1bc6809b208340fafe2096f1725d05d67443d0483d1"}, + {file = "urllib3-2.0.3.tar.gz", hash = "sha256:bee28b5e56addb8226c96f7f13ac28cb4c301dd5ea8a6ca179c0b9835e032825"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +secure = ["certifi", "cryptography (>=1.9)", "idna (>=2.0.0)", "pyopenssl (>=17.1.0)", "urllib3-secure-extra"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "virtualenv" +version = "20.23.1" +description = "Virtual Python Environment builder" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "virtualenv-20.23.1-py3-none-any.whl", hash = "sha256:34da10f14fea9be20e0fd7f04aba9732f84e593dac291b757ce42e3368a39419"}, + {file = "virtualenv-20.23.1.tar.gz", hash = "sha256:8ff19a38c1021c742148edc4f81cb43d7f8c6816d2ede2ab72af5b84c749ade1"}, +] + +[package.dependencies] +distlib = ">=0.3.6,<1" +filelock = ">=3.12,<4" +platformdirs = ">=3.5.1,<4" + +[package.extras] +docs = ["furo (>=2023.5.20)", "proselint (>=0.13)", "sphinx (>=7.0.1)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.3.1)", "pytest-env (>=0.8.1)", "pytest-freezer (>=0.4.6)", "pytest-mock (>=3.10)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=67.8)", "time-machine (>=2.9)"] + +[[package]] +name = "wcwidth" +version = "0.2.6" +description = "Measures the displayed width of unicode strings in a terminal" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "wcwidth-0.2.6-py2.py3-none-any.whl", hash = "sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e"}, + {file = "wcwidth-0.2.6.tar.gz", hash = "sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0"}, +] + +[[package]] +name = "webcolors" +version = "1.13" +description = "A library for working with the color formats defined by HTML and CSS." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, + {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, +] + +[package.extras] +docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] +tests = ["pytest", "pytest-cov"] + +[[package]] +name = "webencodings" +version = "0.5.1" +description = "Character encoding aliases for legacy web content" +category = "dev" +optional = false +python-versions = "*" +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] + +[[package]] +name = "websocket-client" +version = "1.6.0" +description = "WebSocket client for Python with low level API options" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "websocket-client-1.6.0.tar.gz", hash = "sha256:e84c7eafc66aade6d1967a51dfd219aabdf81d15b9705196e11fd81f48666b78"}, + {file = "websocket_client-1.6.0-py3-none-any.whl", hash = "sha256:72d7802608745b0a212f79b478642473bd825777d8637b6c8c421bf167790d4f"}, +] + +[package.extras] +docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + +[[package]] +name = "widgetsnbextension" +version = "4.0.7" +description = "Jupyter interactive widgets for Jupyter Notebook" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "widgetsnbextension-4.0.7-py3-none-any.whl", hash = "sha256:be3228a73bbab189a16be2d4a3cd89ecbd4e31948bfdc64edac17dcdee3cd99c"}, + {file = "widgetsnbextension-4.0.7.tar.gz", hash = "sha256:ea67c17a7cd4ae358f8f46c3b304c40698bc0423732e3f273321ee141232c8be"}, +] + +[[package]] +name = "win32-setctime" +version = "1.1.0" +description = "A small Python utility to set file creation time on Windows" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "win32_setctime-1.1.0-py3-none-any.whl", hash = "sha256:231db239e959c2fe7eb1d7dc129f11172354f98361c4fa2d6d2d7e278baa8aad"}, + {file = "win32_setctime-1.1.0.tar.gz", hash = "sha256:15cf5750465118d6929ae4de4eb46e8edae9a5634350c01ba582df868e932cb2"}, +] + +[package.extras] +dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "e1396786a44f1aa3a74f741f1e27a2bc528f7bc0d411374aae86f33790961e1c" diff --git a/pyproject.toml b/pyproject.toml index 6378954..5ebf8d6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,107 @@ -[tool.isort] -profile = "black" +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry-core"] -[tool.pylint.format] -max-line-length = "88" +[tookl.mypy] +disallow_untyped_defs = true +follow_imports = "silent" +python_version = "3.11" +warn_redudant_casts = true +warn_unused_ignores = true + +[tool.black] +target-version = ["py311"] + +[tool.coverage.run] +branch = true +dynamic_context = "test_function" +relative_files = true +source = ["src"] + +[tool.poetry] +authors = ["AKI Projektgruppe 23"] +description = "A project analysing the german transparenzregister and other data sources to find shared business interests and shared personal and other links for lots of companies." +name = "aki-prj23-transparenzregister" +packages = [{include = "aki_prj23_transparenzregister", from = "src"}] +readme = "README.md" +version = "0.1.0" + +[tool.poetry.dependencies] +loguru = "^0.7.0" +matplotlib = "^3.7.1" +plotly = "^5.14.1" +python = "^3.11" +seaborn = "^0.12.2" +tqdm = "^4.65.0" + +[tool.poetry.group.develop.dependencies] +black = {extras = ["jupyter"], version = "^23.3.0"} +jupyterlab = "^4.0.0" +nbconvert = "^7.4.0" +pre-commit = "^3.3.2" +rise = "^5.7.1" + +[tool.poetry.group.doc.dependencies] +jupyter = "^1.0.0" +myst-parser = "^1.0.0" +nbsphinx = "^0.9.2" +sphinx = "^6.0.0" +sphinx-copybutton = "^0.5.2" +sphinx-rtd-theme = "^1.2.1" +sphinx_autodoc_typehints = "*" +sphinxcontrib-mermaid = "^0.9.2" +sphinxcontrib-napoleon = "^0.7" + +[tool.poetry.group.lint.dependencies] +black = "^23.3.0" +mypy = "^1.3.0" +pandas-stubs = "^2.0.1.230501" +ruff = "^0.0.270" +types-requests = "^2.31.0.1" + +[tool.poetry.group.test.dependencies] +pytest = "^7.3.1" +pytest-clarity = "^1.0.1" +pytest-cov = "^4.1.0" +pytest-mock = "^3.10.0" +pytest-repeat = "^0.9.1" + +[tool.ruff] +exclude = [ + ".bzr", + ".direnv", + ".eggs", + ".git", + ".git-rewrite", + ".hg", + ".mypy_cache", + ".nox", + ".pants.d", + ".pytype", + ".ruff_cache", + ".svn", + ".tox", + ".venv", + "__pypackages__", + "_build", + "buck-out", + "build", + "dist", + "node_modules", + "venv" +] +# Never enforce `E501` (line length violations). +ignore = ["E501"] +line-length = 88 +# Enable flake8-bugbear (`B`) rules. +select = ["E", "F", "B", "I", "S", "RSE", "RET", "SLF", "SIM", "TID", "PD", "PL", "PLE", "PLR", "PLW", "NPY", "UP", "D", "N", "A", "C4", "T20", "PT"] +src = ["src"] +target-version = "py311" +# Avoid trying to fix flake8-bugbear (`B`) violations. +unfixable = ["B"] + +[tool.ruff.per-file-ignores] +"tests/*.py" = ["S101"] + +[tool.ruff.pydocstyle] +convention = "google" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..58c3acf --- /dev/null +++ b/requirements.txt @@ -0,0 +1,21 @@ +colorama==0.4.6 ; python_version >= "3.11" and python_version < "4.0" and sys_platform == "win32" or python_version >= "3.11" and python_version < "4.0" and platform_system == "Windows" +contourpy==1.1.0 ; python_version >= "3.11" and python_version < "4.0" +cycler==0.11.0 ; python_version >= "3.11" and python_version < "4.0" +fonttools==4.40.0 ; python_version >= "3.11" and python_version < "4.0" +kiwisolver==1.4.4 ; python_version >= "3.11" and python_version < "4.0" +loguru==0.7.0 ; python_version >= "3.11" and python_version < "4.0" +matplotlib==3.7.1 ; python_version >= "3.11" and python_version < "4.0" +numpy==1.25.0 ; python_version >= "3.11" and python_version < "4.0" +packaging==23.1 ; python_version >= "3.11" and python_version < "4.0" +pandas==2.0.2 ; python_version >= "3.11" and python_version < "4.0" +pillow==9.5.0 ; python_version >= "3.11" and python_version < "4.0" +plotly==5.15.0 ; python_version >= "3.11" and python_version < "4.0" +pyparsing==3.0.9 ; python_version >= "3.11" and python_version < "4.0" +python-dateutil==2.8.2 ; python_version >= "3.11" and python_version < "4.0" +pytz==2023.3 ; python_version >= "3.11" and python_version < "4.0" +seaborn==0.12.2 ; python_version >= "3.11" and python_version < "4.0" +six==1.16.0 ; python_version >= "3.11" and python_version < "4.0" +tenacity==8.2.2 ; python_version >= "3.11" and python_version < "4.0" +tqdm==4.65.0 ; python_version >= "3.11" and python_version < "4.0" +tzdata==2023.3 ; python_version >= "3.11" and python_version < "4.0" +win32-setctime==1.1.0 ; python_version >= "3.11" and python_version < "4.0" and sys_platform == "win32" diff --git a/runner/..env.swp b/runner/..env.swp deleted file mode 100644 index 20cdc1bdf71f9531c655a6a79af03a6c5579ff48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmYc?$V<%2S1{ExVL$;7*%%lKGBR^A3kp!gv2l`0Gjmc>i_FlBz)-4}npcJ)I4Uq2 L0;3@?U?BhiV@?a3 diff --git a/runner/.gitignore b/runner/.gitignore deleted file mode 100644 index 4c49bd7..0000000 --- a/runner/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.env diff --git a/runner/Dockerfile b/runner/Dockerfile deleted file mode 100644 index bd6f3b8..0000000 --- a/runner/Dockerfile +++ /dev/null @@ -1,36 +0,0 @@ -# base -FROM ubuntu:latest - -# set the github runner version -ARG RUNNER_VERSION="2.304.0" -ARG ARCHITECTURE=arm - -# update the base packages and add a non-sudo user -RUN apt-get update -y && apt-get upgrade -y && useradd -m docker - -# install python and the packages the your code depends on along with jq so we can parse JSON -# add additional packages as necessary -RUN DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ - curl jq build-essential libssl-dev libffi-dev python3 python3-venv python3-dev python3-pip nano vim - -# cd into the user directory, download and unzip the github actions runner -RUN cd /home/docker && mkdir actions-runner && cd actions-runner \ - && curl -O -L https://github.com/actions/runner/releases/download/v${RUNNER_VERSION}/actions-runner-linux-${ARCHITECTURE}-${RUNNER_VERSION}.tar.gz \ - && tar xzf ./actions-runner-linux-${ARCHITECTURE}-${RUNNER_VERSION}.tar.gz \ - && rm *.tar.gz - -# install some additional dependencies -RUN chown -R docker ~docker && /home/docker/actions-runner/bin/installdependencies.sh - -# copy over the start.sh script -COPY start.sh . - -# make the script executable -RUN chmod +x start.sh - -# since the config and run script for actions are not allowed to be run by root, -# set the user to "docker" so all subsequent commands are run as the docker user -USER docker - -# set the entrypoint to the start.sh script -CMD ["./start.sh"] diff --git a/runner/README.md b/runner/README.md deleted file mode 100644 index 4d13458..0000000 --- a/runner/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Runner - -This subfolder of the project adds a github action runner when started with a docker compose. -Github Actions is the build in CI/CD functionality of github. Runners are the instances that execute the actions required by the CI/CD. -Github allows runners as a service or selfhosted. Since we will not get accees to the FH-SWF cloud resource we will use the selfhosted version of the runner. - -## Configure & Startup -To start a github runner please add a `.env` config file with key value pairs for the following variables. - -``` -ORGANIZATION=fhswf/aki_prj23_transparenzregister -ACCESS_TOKEN= # -ARCHITECTURE=arm # Value such as x64,arm64,arm -HOSTNAME=some-runner-name # A name to give to the docker image. Will also be used as a runner name. -DGID= # Group id of the docker group -``` - -An access token can be optained in the Actions ection of the repository or [here](https://github.com/fhswf/aki_prj23_transparenzregister/settings/actions/runners/new). - -To startup the runner execute `docker compose up -d --build`. -Docker needs to be installed. Additionally you may need to execute the docker comands as root. - -## Sources -This runner configuration is based on [this article](https://testdriven.io/blog/github-actions-docker/). diff --git a/runner/docker-compose.yaml b/runner/docker-compose.yaml deleted file mode 100644 index 8a7c4ff..0000000 --- a/runner/docker-compose.yaml +++ /dev/null @@ -1,14 +0,0 @@ -version: '3' -services: - runner: - build: - context: . - dockerfile: Dockerfile - args: - - ARCHITECTURE=${ARCHITECTURE} - environment: - - ORGANIZATION=${ORGANIZATION} - - ACCESS_TOKEN=${ACCESS_TOKEN} - - TZ=DE - hostname: ${HOSTNAME} - restart: unless-stopped diff --git a/runner/start.sh b/runner/start.sh deleted file mode 100644 index 368646b..0000000 --- a/runner/start.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -ORGANIZATION=$ORGANIZATION -ACCESS_TOKEN=$ACCESS_TOKEN - -REG_TOKEN=$(curl -sX POST -H "Authorization: token ${ACCESS_TOKEN}" https://api.github.com/orgs/${ORGANIZATION}/actions/runners/registration-token | jq .token --raw-output) - -cd /home/docker/actions-runner - -./config.sh --url https://github.com/${ORGANIZATION} --token ${ACCESS_TOKEN} - -cleanup() { - echo "Removing runner..." - ./config.sh remove --unattended --token ${ACCESS_TOKEN} -} - -trap 'cleanup; exit 130' INT -trap 'cleanup; exit 143' TERM - -./run.sh & wait $! diff --git a/src/aki_prj23_transparenzregister/__init__.py b/src/aki_prj23_transparenzregister/__init__.py new file mode 100644 index 0000000..8569c5e --- /dev/null +++ b/src/aki_prj23_transparenzregister/__init__.py @@ -0,0 +1,12 @@ +"""A project analysing the german transparenzregister and other data sources. + +to find shared business interests and shared personal and other links for lots of companies +""" +from importlib.metadata import metadata +from typing import Final + +_DISTRIBUTION_METADATA = metadata("aki-prj23-transparenzregister") + +__author__: Final[str] = _DISTRIBUTION_METADATA["Author"] +__email__: Final[str] = _DISTRIBUTION_METADATA["Author-email"] +__version__: Final[str] = _DISTRIBUTION_METADATA["Version"] diff --git a/tests/infrastructure_test.py b/tests/infrastructure_test.py new file mode 100644 index 0000000..cc819fd --- /dev/null +++ b/tests/infrastructure_test.py @@ -0,0 +1,8 @@ +"""Pylint tests.""" +import aki_prj23_transparenzregister + + +def test_version() -> None: + """Tests if the version tag is entered.""" + assert aki_prj23_transparenzregister.__version__ + assert isinstance(aki_prj23_transparenzregister.__version__, str)