pax_global_header00006660000000000000000000000064150446605660014526gustar00rootroot0000000000000052 comment=d079d0de6153020873844ae12caa138c6f83eaf7 packageurl-python-0.17.5/000077500000000000000000000000001504466056600152555ustar00rootroot00000000000000packageurl-python-0.17.5/.github/000077500000000000000000000000001504466056600166155ustar00rootroot00000000000000packageurl-python-0.17.5/.github/workflows/000077500000000000000000000000001504466056600206525ustar00rootroot00000000000000packageurl-python-0.17.5/.github/workflows/ci.yml000066400000000000000000000025101504466056600217660ustar00rootroot00000000000000name: Python CI on: [push, pull_request] jobs: lint-and-mypy: name: Lint & mypy runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python environment uses: actions/setup-python@v5 with: python-version: "3.9" - name: Install run: | pip install -e .[lint] - name: Validate run: | isort --check-only src/ tests/ black --check --line-length 100 . mypy build-and-test: name: Test & build (py${{ matrix.python-version }} on ${{ matrix.os }}) runs-on: ${{ matrix.os }} timeout-minutes: 10 strategy: matrix: os: [ubuntu-latest, windows-latest, macos-latest] python-version: - "3.13" - "3.12" - "3.11" - "3.10" - "3.9" - "3.8" steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Python environment uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install run: | pip install -e .[test] pip install -e .[build] - name: Test run: py.test -vvs - name: Build run: python setup.py build sdist bdist_wheel packageurl-python-0.17.5/.github/workflows/pypi-release.yml000066400000000000000000000026331504466056600240000ustar00rootroot00000000000000name: Create library release archives, create a GH release and publish PyPI wheel and sdist on tag in main branch # This is executed automatically on a tag in the main branch # Summary of the steps: # - build wheels and sdist # - upload wheels and sdist to PyPI # - create gh-release and upload wheels and dists there # TODO: smoke test wheels and sdist # WARNING: this is designed only for packages building as pure Python wheels on: workflow_dispatch: push: tags: - "v*.*.*" jobs: build-and-publish: name: Build and publish library to PyPI runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: 3.12 - name: Install pypa/build run: python -m pip install build --user - name: Build a binary wheel and a source tarball run: python -m build --sdist --wheel --outdir dist/ . - name: Upload built archives uses: actions/upload-artifact@v4 with: name: pypi_archives path: dist/* - name: Publish to PyPI uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_API_TOKEN }} - name: Create a GitHub release entry uses: softprops/action-gh-release@v2 with: generate_release_notes: true draft: false files: dist/* packageurl-python-0.17.5/.gitignore000066400000000000000000000002401504466056600172410ustar00rootroot00000000000000*.pyc /tmp/ /build/ /dist/ /.eggs/ /.cache/ /src/packageurl_python.egg-info/ lib bin .idea include pip-selfcheck.json pyvenv.cfg .Python /.tox/ /.*_cache/ venv packageurl-python-0.17.5/AUTHORS.rst000066400000000000000000000006001504466056600171300ustar00rootroot00000000000000The following organizations or individuals have contributed to packageurl-python: - Philippe Ombredanne @pombredanne - Jiri Popelka @jpopelka - Thomas Druez @tdruez - Jono Yang @JonoYang - Sebastian Schuberth @sschuberth - Tushar Goel @TG1999 - Haiko Schol @haikoschol - Paul Horton @madpah - Aditi Rao @aditirao7 - Anton Grübel @gruebel - Adrien Schildknecht @schischi - @juspence packageurl-python-0.17.5/CHANGELOG.rst000066400000000000000000000232271504466056600173040ustar00rootroot00000000000000Changelog ========= 0.17.5 (2025-08-06) ------------------- - Remove support for getting download URL for qpkg in ``purl2url``. https://github.com/package-url/packageurl-python/pull/202 0.17.4 (2025-08-05) ------------------- - Add support for getting download URL for debian, apk, qpkg in ``purl2url``. https://github.com/package-url/packageurl-python/pull/201 0.17.3 (2025-08-01) ------------------- - Add support for getting download URL for Luarocks, Conda, Alpm in ``purl2url``. https://github.com/package-url/packageurl-python/pull/199 - Fix Incorrect download url from build_golang_download_url() https://github.com/package-url/packageurl-python/issues/198 0.17.2 (2025-07-29) ------------------- - Add support for getting download URL for Golang, Hex, Pub and Swift in ``purl2url``. https://github.com/package-url/packageurl-python/pull/195 0.17.1 (2025-06-06) ------------------- - Define "pkg" as a PackageURL ``SCHEME`` class attribute. https://github.com/package-url/packageurl-python/issues/184 - Add support for Maven in ``purl2url``. https://github.com/package-url/packageurl-python/issues/177 0.17.0 (2025-06-04) ------------------- - Fix qualifiers type annotations. https://github.com/package-url/packageurl-python/issues/169 - Fix parsing of names and namespaces with colons. https://github.com/package-url/packageurl-python/issues/152 0.16.0 (2024-10-22) ------------------- - Add support for Python 3.13. - Drop support for Python 3.7. https://github.com/package-url/packageurl-python/issues/160 - Improve support for 3 path segments NPM URLs in ``url2purl``. https://github.com/package-url/packageurl-python/issues/167 0.15.6 (2024-07-25) ------------------- - Refine support for GitHub /archive/refs/tags/ URLs in ``url2purl``. The whole tag is now captured as the version. This allows to properly reconstruct valid URLs in ``purl2url``. 0.15.5 (2024-07-24) ------------------- - Capture the whole git tag as the version for GutHub URL in ``url2purl`` instead of adding a version_prefix qualifier. Note that the version_prefix qualifier is still supported in ``purl2url`` for backward compatibility. https://github.com/package-url/packageurl-python/pull/159 0.15.4 (2024-07-15) ------------------- - Add ``with_package_url``, ``without_package_url``, and ``order_by_package_url`` to the ``PackageURLQuerySetMixin`` contrib class. 0.15.3 (2024-07-09) ------------------- - Add support for namespace in ``build_npm_download_url``. 0.15.2 (2024-07-04) ------------------- - Update GitHub generated Download URL for maximum compatibility. https://github.com/package-url/packageurl-python/issues/157 0.15.1 (2024-06-13) ------------------- - Add support for Composer in ``purl2url`` and ``url2purl``. https://github.com/package-url/packageurl-python/pull/144 - Add an option for ``exact_match`` purl QuerySet lookups in the ``PackageURLQuerySetMixin.for_package_url``method. https://github.com/package-url/packageurl-python/issues/118 0.15.0 (2024-03-12) ------------------- - Add support to get PackageURL from ``go_package`` or go module ``name version`` string as seen in a go.mod file. https://github.com/package-url/packageurl-python/pull/148 - Add cran ecosystem support for url2purl https://github.com/package-url/packageurl-python/pull/149 0.14.0 (2024-02-29) ------------------- - Add support for getting golang purl from go import. https://github.com/nexB/purldb/issues/259 - Fix the "gem" type in the README docs. https://github.com/package-url/packageurl-python/pull/114 0.13.4 (2024-01-08) ------------------- - Improve support for SourceForge URLs in `url2purl`. https://github.com/package-url/packageurl-python/issues/139 0.13.3 (2024-01-04) ------------------- - Improve support for SourceForge URLs in `url2purl`. https://github.com/package-url/packageurl-python/issues/139 0.13.2 (2024-01-04) ------------------- - Improve support for SourceForge URLs in `url2purl`. https://github.com/package-url/packageurl-python/issues/139 0.13.1 (2023-12-11) ------------------- - Add support for Python 3.12 https://github.com/package-url/packageurl-python/pull/135 0.13.0 (2023-12-08) ------------------- - Revert changes from https://github.com/package-url/packageurl-python/pull/115/ In above PR we dropped namespaces for a golang purl and stored whole namespace and name in name itself, which was further discussed again and decided we will like to keep namespace back. 0.12.0 (2023-12-08) ------------------- - Modified `PackageURL.from_string` to properly handle golang purls. https://github.com/package-url/packageurl-python/pull/115/ - Improve support for PyPI URLs in `url2purl`. https://github.com/package-url/packageurl-python/pull/128 - Return the "gem" type instead of "rubygems" for "https://rubygems.org/" URLs in `url2purl`. The `pkg:rubygems/` purls are backward-compatible in `purl2url`. https://github.com/package-url/packageurl-python/pull/114/ 0.11.3 (2023-12-08) -------------------- - Add support for GitLab "/archive/" URLs in `url2purl`. https://github.com/package-url/packageurl-python/issues/133 0.11.2 (2022-07-25) -------------------- - Remove deprecated `purl_to_lookups` and `without_empty_values` import compatibility from `packageurl.contrib.django.models`. Replace those functions import using `packageurl.contrib.django.utils`. - Add download purl2url support for bitbucket and gitlab. 0.11.1 (2022-03-24) ------------------- - Add support for the golang type in `purl2url.get_repo_url()` #107 0.11.0rc1 (2022-12-29) ---------------------- - Apply typing - Add support for Python 3.11 - Fix minor typos - Drop Python 3.6 0.10.5rc1 (2022-12-28) ---------------------- - Fixed `PackageURL.from_string` to properly handle npm purls with namespace. 0.10.4 (2022-10-17) ------------------- - Refactor the purl2url functions and utilities #42 - Split purl2url into `get_repo_url()` and `get_download_url()` returning accordingly a "Repository URL" and a "Download URL". - A new `get_inferred_urls` function is available to get return all inferred URLs (repository and download) values. - Add support in purl2url for npm, pypi, hackage, and nuget. - Package URL qualifiers can now be provided to `purl_from_pattern()`. - The `download_url` qualifier is returned in `get_download_url()` when available. - Usage of `purl2url.purl2url` and `purl2url.get_url` is still available for backward compatibility but should be migrated to `purl2url.get_repo_url`. - Include the `version_prefix` ("v" or "V") as a qualifier in build_github_purl #42 This allow to infer valid URLs in the context of purl2url. 0.10.3 (2022-09-15) ------------------- - Fix named arguments in purl_to_lookups. 0.10.2 (2022-09-15) ------------------- - Add encode option in purl_lookups #94 (`purl_to_lookups`, `without_empty_values` is moved from packageurl.contrib.django.models to packageurl.contrib.django.utils) 0.10.1 (2022-08-02) ------------------- - Add ability to filter objects with EMPTY purls in PackageURLFilter #92 0.10.0 (2022-06-27) ------------------- - Upgrade virtualenv.pyz to latest version #85 - Replace Travis CI by GitHub Actions #84 - Add black to the CI and apply formatting on whole codebase #91 - Improve url2purl support for nom URLs - Improve url2purl support for rubygems.org URLs #89 0.9.9 (2022-02-15) ------------------ - Update version to be semver compliant. No changes to the code have been made. 0.9.8.1 (2022-02-11) -------------------- - Fix generic sourceforge PackageURL generation #79 0.9.8 (2022-02-11) ------------------ - Do not create a generic PackageURL for URLs without a path in url2purl #72 - Use project name as the Package name when creating generic sourceforge PackageURLs #74 - Update PyPI route pattern in url2purl to handle different file name formats #76 - Create generic PackageURL for code.google.com archive URLs #78 - Capture more download types for bitbucket URLs 0.9.7 (2022-02-07) ------------------ - Create a generic PackageURL for URLs that do not fit existing routes in url2purl #68 0.9.6 (2021-10-05) ------------------ - Drop support for Python 2 #61 - Add support for new github URLs in url2purl #47 0.9.5 (2021-10-04) ------------------ - Add support for "archive/refs/tags/" github URLs in url2purl #47 0.9.4 (2021-02-02) ------------------ - Fix Python 2 compatibility issue #57 0.9.3 (2020-10-06) ------------------ - Add QuerySet utils to lookup and filter along the PackageURLMixin Django class #48 - Add a PackageURLFilter class for Django FilterSet implementations #48 - Move the django_models module to django.models #48 Replace `packageurl.contrib.django_models` imports with `packageurl.contrib.django.models`. 0.9.2 (2020-09-15) ------------------ - Document usage in README - Adopt SPDX license identifier - Add support for GitHub "raw" URLs in url2purl #43 - Improve GitHub support for "v" prefixed version in url2purl #43 0.9.1 (2020-08-05) ------------------ - Add and improve URL <-> Package URL conversion for gitlab, github, cargo, bitbucket and hackage URL conversions - Add new purl2url conversion utility - Remove the null=True on Django CharField fields of the PackageURLMixin - PackageURL.to_dict() now takes an optional "empty" argument with the value that empty values to have. It defaults to None which was the current behaviour. For some use cases, having an empty string may be a better option and this enables this. 0.9.0 (2020-05-21) ------------------ - Make PackageURL hashable. - Add cargo type or url2purl - Increase the size of the Django model contrib version to 100 chars. - Remove Python 3 idioms (f strings) 0.8.7 (2019-08-15) ------------------ - Add max length validation to the Django model contrib. packageurl-python-0.17.5/CONTRIBUTING.rst000066400000000000000000000020331504466056600177140ustar00rootroot00000000000000============ Contributing ============ Contributions are welcome and appreciated! Every little bit helps, and credit will always be given. When contributing to purl (such as code, bugs, documentation, etc.) you agree to the Developer Certificate of Origin http://developercertificate.org/ and its license (see the mit.LICENSE file). The same approach is used by the Linux Kernel developers and several other projects. To ensure formatting validation on commit, you can setup a pre-commit hook that will automatically run "black" before the code is commited. Copy the "pre-commit.sample" file from the .git/hooks directory to a new file named "pre-commit" and add the following line to this file:: black --line-length 100 . Now rename the file to pre-commit by removing the .sample extension. For commits, it is best to simply add a line like this to your commit message, with your name and email:: Signed-off-by: Jane Doe Please try to write a good commit message. See https://chris.beams.io/posts/git-commit/ packageurl-python-0.17.5/MANIFEST.in000066400000000000000000000003321504466056600170110ustar00rootroot00000000000000graft src graft tests include mit.LICENSE include setup.py include setup.cfg include README.rst include Makefile include MANIFEST.in include CHANGELOG.rst include CONTRIBUTING.rst global-exclude *.py[co] __pycache__ packageurl-python-0.17.5/Makefile000066400000000000000000000047031504466056600167210ustar00rootroot00000000000000# Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. # Python version can be specified with `$ PYTHON_EXE=python3.x make conf` PYTHON_EXE?=python3 ACTIVATE?=. bin/activate; VIRTUALENV_PYZ=thirdparty/virtualenv.pyz BLACK_ARGS=--exclude=".cache|lib|bin|var" --line-length 100 virtualenv: @echo "-> Bootstrap the virtualenv with PYTHON_EXE=${PYTHON_EXE}" @${PYTHON_EXE} ${VIRTUALENV_PYZ} --never-download --no-periodic-update . conf: virtualenv @echo "-> Install dependencies" @${ACTIVATE} pip install -e . dev: virtualenv @echo "-> Configure and install development dependencies" @${ACTIVATE} pip install -e .[test] clean: @echo "-> Clean the Python env" rm -rf bin/ lib*/ include/ build/ dist/ .*cache/ pip-selfcheck.json pyvenv.cfg find . -type f -name '*.py[co]' -delete -o -type d -name __pycache__ \ -delete -type d -name '*.egg-info' -delete isort: @echo "-> Apply isort changes to ensure proper imports ordering" @${ACTIVATE} isort --profile black src/ tests/ black: @echo "-> Apply black code formatter" @${ACTIVATE} black ${BLACK_ARGS} . mypy: @echo "-> Type check the Python code." @${ACTIVATE} mypy valid: @${ACTIVATE} pip install -e .[lint] @$(MAKE) isort @$(MAKE) black @$(MAKE) mypy test: @echo "-> Run the test suite" bin/py.test tests .PHONY: virtualenv conf dev clean isort black mypy valid test packageurl-python-0.17.5/README.rst000066400000000000000000000072071504466056600167520ustar00rootroot00000000000000================= packageurl-python ================= Python library to parse and build "purl" aka. Package URLs. See https://github.com/package-url/purl-spec for details. Join the discussion at https://gitter.im/package-url/Lobby or enter a ticket for support. License: MIT Tests and build status ====================== +----------------------+ | **Tests and build** | +======================+ | |ci-tests| | +----------------------+ Install ======= :: pip install packageurl-python Usage ===== :: >>> from packageurl import PackageURL >>> purl = PackageURL.from_string("pkg:maven/org.apache.commons/io@1.3.4") >>> print(purl.to_dict()) {'type': 'maven', 'namespace': 'org.apache.commons', 'name': 'io', 'version': '1.3.4', 'qualifiers': None, 'subpath': None} >>> print(purl.to_string()) pkg:maven/org.apache.commons/io@1.3.4 >>> print(str(purl)) pkg:maven/org.apache.commons/io@1.3.4 >>> print(repr(purl)) PackageURL(type='maven', namespace='org.apache.commons', name='io', version='1.3.4', qualifiers={}, subpath=None) Utilities ========= Django models ^^^^^^^^^^^^^ `packageurl.contrib.django.models.PackageURLMixin` is a Django abstract model mixin to use Package URLs in Django. SQLAlchemy mixin ^^^^^^^^^^^^^^^^ `packageurl.contrib.sqlalchemy.mixin.PackageURLMixin` is a SQLAlchemy declarative mixin to use Package URLs in SQLAlchemy models. URL to PURL ^^^^^^^^^^^ `packageurl.contrib.url2purl.get_purl(url)` returns a Package URL inferred from an URL. :: >>> from packageurl.contrib import url2purl >>> url2purl.get_purl("https://github.com/package-url/packageurl-python") PackageURL(type='github', namespace='package-url', name='packageurl-python', version=None, qualifiers={}, subpath=None) PURL to URL ^^^^^^^^^^^ - `packageurl.contrib.purl2url.get_repo_url(purl)` returns a repository URL inferred from a Package URL. - `packageurl.contrib.purl2url.get_download_url(purl)` returns a download URL inferred from a Package URL. - `packageurl.contrib.purl2url.get_inferred_urls(purl)` return all inferred URLs (repository, download) from a Package URL. :: >>> from packageurl.contrib import purl2url >>> purl2url.get_repo_url("pkg:gem/bundler@2.3.23") "https://rubygems.org/gems/bundler/versions/2.3.23" >>> purl2url.get_download_url("pkg:gem/bundler@2.3.23") "https://rubygems.org/downloads/bundler-2.3.23.gem" >>> purl2url.get_inferred_urls("pkg:gem/bundler@2.3.23") ["https://rubygems.org/gems/bundler/versions/2.3.23", "https://rubygems.org/downloads/bundler-2.3.23.gem"] Run tests ========= Install test dependencies:: python3 thirdparty/virtualenv.pyz --never-download --no-periodic-update . bin/pip install -e ."[test]" Run tests:: bin/pytest tests Make a new release ================== - Start a new release branch - Update the CHANGELOG.rst, AUTHORS.rst, and README.rst if needed - Bump version in setup.cfg - Run all tests - Install restview and validate that all .rst docs are correct - Commit and push this branch - Make a PR and merge once approved - Tag and push that tag. This triggers the pypi-release.yml workflow that takes care of building the dist release files and upload those to pypi:: VERSION=v0.x.x git tag -a $VERSION -m "Tag $VERSION" git push origin $VERSION - Review the GitHub release created by the workflow at https://github.com/package-url/packageurl-python/releases .. |ci-tests| image:: https://github.com/package-url/packageurl-python/actions/workflows/ci.yml/badge.svg?branch=main :target: https://github.com/package-url/packageurl-python/actions/workflows/ci.yml :alt: CI Tests and build status packageurl-python-0.17.5/mit.LICENSE000066400000000000000000000020361504466056600170530ustar00rootroot00000000000000Copyright (c) the purl authors Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.packageurl-python-0.17.5/setup.cfg000066400000000000000000000040121504466056600170730ustar00rootroot00000000000000[metadata] name = packageurl-python version = 0.17.5 license = MIT description = A purl aka. Package URL parser and builder long_description = file:README.rst author = the purl authors url = https://github.com/package-url/packageurl-python classifiers = Development Status :: 4 - Beta Intended Audience :: Developers License :: OSI Approved :: MIT License Operating System :: OS Independent Programming Language :: Python Programming Language :: Python :: 3 :: Only Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 Programming Language :: Python :: 3.11 Programming Language :: Python :: 3.12 Programming Language :: Python :: 3.13 Topic :: Software Development :: Libraries Topic :: Utilities Typing :: Typed keywords = package url package manager package url license_files = - mit.LICENSE - AUTHORS.rst - README.rst - CONTRIBUTING.rst - CHANGELOG.rst [options] python_requires = >=3.8 packages = find: package_dir = =src include_package_data = true zip_safe = false install_requires = [options.packages.find] where = src [options.package_data] packageurl-python = py.typed [options.extras_require] lint = isort black mypy test = pytest build = setuptools wheel sqlalchemy = sqlalchemy >= 2.0.0 [isort] force_single_line = True line_length = 100 known_django = django sections = FUTURE,STDLIB,DJANGO,THIRDPARTY,FIRSTPARTY,LOCALFOLDER [mypy] python_version = 3.8 files = src/packageurl/__init__.py show_error_codes = True pretty = True strict = True [tool:pytest] norecursedirs = .git tmp dist build _build local ci docs man share samples .cache .settings Include include Lib lib Scripts thirdparty tmp src/packageurl/contrib python_files = *.py python_classes=Test python_functions=test addopts = -rfExXw --strict-markers --ignore setup.py --doctest-modules packageurl-python-0.17.5/setup.py000066400000000000000000000002261504466056600167670ustar00rootroot00000000000000#!/usr/bin/env python # -*- encoding: utf-8 -*- # SPDX-License-Identifier: MIT import setuptools if __name__ == "__main__": setuptools.setup() packageurl-python-0.17.5/src/000077500000000000000000000000001504466056600160445ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/000077500000000000000000000000001504466056600201625ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/__init__.py000066400000000000000000000407141504466056600223010ustar00rootroot00000000000000# Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. from __future__ import annotations import string from collections import namedtuple from collections.abc import Mapping from typing import TYPE_CHECKING from typing import Any from typing import Union from typing import overload from urllib.parse import quote as _percent_quote from urllib.parse import unquote as _percent_unquote from urllib.parse import urlsplit as _urlsplit if TYPE_CHECKING: from collections.abc import Callable from collections.abc import Iterable from typing import ClassVar from typing_extensions import Literal from typing_extensions import Self AnyStr = Union[str, bytes] # Python 3 basestring = (bytes, str) """ A purl (aka. Package URL) implementation as specified at: https://github.com/package-url/purl-spec """ def quote(s: AnyStr) -> str: """ Return a percent-encoded unicode string, except for colon :, given an `s` byte or unicode string. """ s_bytes = s.encode("utf-8") if isinstance(s, str) else s quoted = _percent_quote(s_bytes) if not isinstance(quoted, str): quoted = quoted.decode("utf-8") quoted = quoted.replace("%3A", ":") return quoted def unquote(s: AnyStr) -> str: """ Return a percent-decoded unicode string, given an `s` byte or unicode string. """ unquoted = _percent_unquote(s) if not isinstance(unquoted, str): unquoted = unquoted.decode("utf-8") return unquoted @overload def get_quoter(encode: bool = True) -> Callable[[AnyStr], str]: ... @overload def get_quoter(encode: None) -> Callable[[str], str]: ... def get_quoter(encode: bool | None = True) -> Callable[[AnyStr], str] | Callable[[str], str]: """ Return quoting callable given an `encode` tri-boolean (True, False or None) """ if encode is True: return quote elif encode is False: return unquote elif encode is None: return lambda x: x def normalize_type(type: AnyStr | None, encode: bool | None = True) -> str | None: if not type: return None type_str = type if isinstance(type, str) else type.decode("utf-8") quoter = get_quoter(encode) type_str = quoter(type_str) return type_str.strip().lower() or None def normalize_namespace( namespace: AnyStr | None, ptype: str | None, encode: bool | None = True ) -> str | None: if not namespace: return None namespace_str = namespace if isinstance(namespace, str) else namespace.decode("utf-8") namespace_str = namespace_str.strip().strip("/") if ptype in ("bitbucket", "github", "pypi", "gitlab"): namespace_str = namespace_str.lower() segments = [seg for seg in namespace_str.split("/") if seg.strip()] segments_quoted = map(get_quoter(encode), segments) return "/".join(segments_quoted) or None def normalize_name( name: AnyStr | None, ptype: str | None, encode: bool | None = True ) -> str | None: if not name: return None name_str = name if isinstance(name, str) else name.decode("utf-8") quoter = get_quoter(encode) name_str = quoter(name_str) name_str = name_str.strip().strip("/") if ptype in ("bitbucket", "github", "pypi", "gitlab"): name_str = name_str.lower() if ptype == "pypi": name_str = name_str.replace("_", "-") return name_str or None def normalize_version(version: AnyStr | None, encode: bool | None = True) -> str | None: if not version: return None version_str = version if isinstance(version, str) else version.decode("utf-8") quoter = get_quoter(encode) version_str = quoter(version_str.strip()) return version_str or None @overload def normalize_qualifiers( qualifiers: AnyStr | dict[str, str] | None, encode: Literal[True] = ... ) -> str | None: ... @overload def normalize_qualifiers( qualifiers: AnyStr | dict[str, str] | None, encode: Literal[False] | None ) -> dict[str, str]: ... @overload def normalize_qualifiers( qualifiers: AnyStr | dict[str, str] | None, encode: bool | None = ... ) -> str | dict[str, str] | None: ... def normalize_qualifiers( qualifiers: AnyStr | dict[str, str] | None, encode: bool | None = True ) -> str | dict[str, str] | None: """ Return normalized `qualifiers` as a mapping (or as a string if `encode` is True). The `qualifiers` arg is either a mapping or a string. Always return a mapping if decode is True (and never None). Raise ValueError on errors. """ if not qualifiers: return None if encode else {} if isinstance(qualifiers, basestring): qualifiers_str = qualifiers if isinstance(qualifiers, str) else qualifiers.decode("utf-8") # decode string to list of tuples qualifiers_list = qualifiers_str.split("&") if any("=" not in kv for kv in qualifiers_list): raise ValueError( f"Invalid qualifier. Must be a string of key=value pairs:{qualifiers_list!r}" ) qualifiers_parts = [kv.partition("=") for kv in qualifiers_list] qualifiers_pairs: Iterable[tuple[str, str]] = [(k, v) for k, _, v in qualifiers_parts] elif isinstance(qualifiers, dict): qualifiers_pairs = qualifiers.items() else: raise ValueError(f"Invalid qualifier. Must be a string or dict:{qualifiers!r}") quoter = get_quoter(encode) qualifiers_map = { k.strip().lower(): quoter(v) for k, v in qualifiers_pairs if k and k.strip() and v and v.strip() } valid_chars = string.ascii_letters + string.digits + ".-_" for key in qualifiers_map: if not key: raise ValueError("A qualifier key cannot be empty") if "%" in key: raise ValueError(f"A qualifier key cannot be percent encoded: {key!r}") if " " in key: raise ValueError(f"A qualifier key cannot contain spaces: {key!r}") if any(c not in valid_chars for c in key): raise ValueError( f"A qualifier key must be composed only of ASCII letters and numbers" f"period, dash and underscore: {key!r}" ) if key[0] in string.digits: raise ValueError(f"A qualifier key cannot start with a number: {key!r}") qualifiers_map = dict(sorted(qualifiers_map.items())) if not encode: return qualifiers_map return _qualifier_map_to_string(qualifiers_map) or None def _qualifier_map_to_string(qualifiers: dict[str, str]) -> str: qualifiers_list = [f"{key}={value}" for key, value in qualifiers.items()] return "&".join(qualifiers_list) def normalize_subpath(subpath: AnyStr | None, encode: bool | None = True) -> str | None: if not subpath: return None subpath_str = subpath if isinstance(subpath, str) else subpath.decode("utf-8") quoter = get_quoter(encode) segments = subpath_str.split("/") segments = [quoter(s) for s in segments if s.strip() and s not in (".", "..")] subpath_str = "/".join(segments) return subpath_str or None @overload def normalize( type: AnyStr | None, namespace: AnyStr | None, name: AnyStr | None, version: AnyStr | None, qualifiers: AnyStr | dict[str, str] | None, subpath: AnyStr | None, encode: Literal[True] = ..., ) -> tuple[str, str | None, str, str | None, str | None, str | None]: ... @overload def normalize( type: AnyStr | None, namespace: AnyStr | None, name: AnyStr | None, version: AnyStr | None, qualifiers: AnyStr | dict[str, str] | None, subpath: AnyStr | None, encode: Literal[False] | None, ) -> tuple[str, str | None, str, str | None, dict[str, str], str | None]: ... @overload def normalize( type: AnyStr | None, namespace: AnyStr | None, name: AnyStr | None, version: AnyStr | None, qualifiers: AnyStr | dict[str, str] | None, subpath: AnyStr | None, encode: bool | None = ..., ) -> tuple[str, str | None, str, str | None, str | dict[str, str] | None, str | None]: ... def normalize( type: AnyStr | None, namespace: AnyStr | None, name: AnyStr | None, version: AnyStr | None, qualifiers: AnyStr | dict[str, str] | None, subpath: AnyStr | None, encode: bool | None = True, ) -> tuple[ str | None, str | None, str | None, str | None, str | dict[str, str] | None, str | None, ]: """ Return normalized purl components """ type_norm = normalize_type(type, encode) namespace_norm = normalize_namespace(namespace, type_norm, encode) name_norm = normalize_name(name, type_norm, encode) version_norm = normalize_version(version, encode) qualifiers_norm = normalize_qualifiers(qualifiers, encode) subpath_norm = normalize_subpath(subpath, encode) return type_norm, namespace_norm, name_norm, version_norm, qualifiers_norm, subpath_norm class PackageURL( namedtuple("PackageURL", ("type", "namespace", "name", "version", "qualifiers", "subpath")) ): """ A purl is a package URL as defined at https://github.com/package-url/purl-spec """ SCHEME: ClassVar[str] = "pkg" type: str namespace: str | None name: str version: str | None qualifiers: dict[str, str] subpath: str | None def __new__( cls, type: AnyStr | None = None, namespace: AnyStr | None = None, name: AnyStr | None = None, version: AnyStr | None = None, qualifiers: AnyStr | dict[str, str] | None = None, subpath: AnyStr | None = None, ) -> Self: required = dict(type=type, name=name) for key, value in required.items(): if value: continue raise ValueError(f"Invalid purl: {key} is a required argument.") strings = dict( type=type, namespace=namespace, name=name, version=version, subpath=subpath, ) for key, value in strings.items(): if value and isinstance(value, basestring) or not value: continue raise ValueError(f"Invalid purl: {key} argument must be a string: {value!r}.") if qualifiers and not isinstance(qualifiers, (basestring, dict)): raise ValueError( f"Invalid purl: qualifiers argument must be a dict or a string: {qualifiers!r}." ) ( type_norm, namespace_norm, name_norm, version_norm, qualifiers_norm, subpath_norm, ) = normalize(type, namespace, name, version, qualifiers, subpath, encode=None) return super().__new__( cls, type=type_norm, namespace=namespace_norm, name=name_norm, version=version_norm, qualifiers=qualifiers_norm, subpath=subpath_norm, ) def __str__(self, *args: Any, **kwargs: Any) -> str: return self.to_string() def __hash__(self) -> int: return hash(self.to_string()) def to_dict(self, encode: bool | None = False, empty: Any = None) -> dict[str, Any]: """ Return an ordered dict of purl components as {key: value}. If `encode` is True, then "qualifiers" are encoded as a normalized string. Otherwise, qualifiers is a mapping. You can provide a value for `empty` to be used in place of default None. """ data = self._asdict() if encode: data["qualifiers"] = normalize_qualifiers(self.qualifiers, encode=encode) for field, value in data.items(): data[field] = value or empty return data def to_string(self, encode: bool | None = True) -> str: """ Return a purl string built from components. """ type, namespace, name, version, qualifiers, subpath = normalize( self.type, self.namespace, self.name, self.version, self.qualifiers, self.subpath, encode=encode, ) purl = [self.SCHEME, ":", type, "/"] if namespace: purl.extend((namespace, "/")) purl.append(name) if version: purl.append("@") purl.append(version) if qualifiers: purl.append("?") if isinstance(qualifiers, Mapping): qualifiers = _qualifier_map_to_string(qualifiers) purl.append(qualifiers) if subpath: purl.append("#") purl.append(subpath) return "".join(purl) @classmethod def from_string(cls, purl: str) -> Self: """ Return a PackageURL object parsed from a string. Raise ValueError on errors. """ if not purl or not isinstance(purl, str) or not purl.strip(): raise ValueError("A purl string argument is required.") scheme, sep, remainder = purl.partition(":") if not sep or scheme != cls.SCHEME: raise ValueError( f'purl is missing the required "{cls.SCHEME}" scheme component: {purl!r}.' ) # this strip '/, // and /// as possible in :// or :/// remainder = remainder.strip().lstrip("/") version: str | None # this line is just for type hinting subpath: str | None # this line is just for type hinting type_, sep, remainder = remainder.partition("/") if not type_ or not sep: raise ValueError(f"purl is missing the required type component: {purl!r}.") type_ = type_.lower() scheme, authority, path, qualifiers_str, subpath = _urlsplit( url=remainder, scheme="", allow_fragments=True ) # The spec (seems) to allow colons in the name and namespace. # urllib.urlsplit splits on : considers them parts of scheme # and authority. # Other libraries do not care about this. # See https://github.com/package-url/packageurl-python/issues/152#issuecomment-2637692538 # We do + ":" + to put the colon back that urlsplit removed. if authority: path = authority + ":" + path if scheme: path = scheme + ":" + path path = path.lstrip("/") namespace: str | None = "" # NPM purl have a namespace in the path # and the namespace in an npm purl is # different from others because it starts with `@` # so we need to handle this case separately if type_ == "npm" and path.startswith("@"): namespace, sep, path = path.partition("/") remainder, sep, version = path.rpartition("@") if not sep: remainder = version version = None ns_name = remainder.strip().strip("/") ns_name_parts = ns_name.split("/") ns_name_parts = [seg for seg in ns_name_parts if seg and seg.strip()] name = "" if not namespace and len(ns_name_parts) > 1: name = ns_name_parts[-1] ns = ns_name_parts[:-1] namespace = "/".join(ns) elif len(ns_name_parts) == 1: name = ns_name_parts[0] if not name: raise ValueError(f"purl is missing the required name component: {purl!r}") type_, namespace, name, version, qualifiers, subpath = normalize( type_, namespace, name, version, qualifiers_str, subpath, encode=False, ) return cls(type_, namespace, name, version, qualifiers, subpath) packageurl-python-0.17.5/src/packageurl/contrib/000077500000000000000000000000001504466056600216225ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/contrib/__init__.py000066400000000000000000000000001504466056600237210ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/contrib/django/000077500000000000000000000000001504466056600230645ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/contrib/django/__init__.py000066400000000000000000000000001504466056600251630ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/contrib/django/filters.py000066400000000000000000000046061504466056600251140ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. import django_filters class PackageURLFilter(django_filters.CharFilter): """ Filter by an exact Package URL string. The special "EMPTY" value allows retrieval of objects with an empty Package URL. This filter depends on `for_package_url` and `empty_package_url` methods to be available on the Model Manager, see for example `PackageURLQuerySetMixin`. When exact_match_only is True, the filter will match only exact Package URL strings. """ is_empty = "EMPTY" exact_match_only = False help_text = ( 'Match Package URL. Use "EMPTY" as value to retrieve objects with empty Package URL.' ) def __init__(self, *args, **kwargs): self.exact_match_only = kwargs.pop("exact_match_only", False) kwargs.setdefault("help_text", self.help_text) super().__init__(*args, **kwargs) def filter(self, qs, value): none_values = ([], (), {}, "", None) if value in none_values: return qs if self.distinct: qs = qs.distinct() if value == self.is_empty: return qs.empty_package_url() return qs.for_package_url(value, exact_match=self.exact_match_only) packageurl-python-0.17.5/src/packageurl/contrib/django/models.py000066400000000000000000000134521504466056600247260ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. from django.core.exceptions import ValidationError from django.db import models from django.utils.translation import gettext_lazy as _ from packageurl import PackageURL from packageurl.contrib.django.utils import purl_to_lookups PACKAGE_URL_FIELDS = ("type", "namespace", "name", "version", "qualifiers", "subpath") class PackageURLQuerySetMixin: """ Add Package URL filtering methods to a django.db.models.QuerySet. """ def for_package_url(self, purl_str, encode=True, exact_match=False): """ Filter the QuerySet based on a Package URL (purl) string with an option for exact match filtering. When `exact_match` is False (default), the method will match any purl with the same base fields as `purl_str` and allow variations in other fields. When `exact_match` is True, only the identical purl will be returned. """ lookups = purl_to_lookups( purl_str=purl_str, encode=encode, include_empty_fields=exact_match ) if lookups: return self.filter(**lookups) return self.none() def with_package_url(self): """Return objects with Package URL defined.""" return self.filter(~models.Q(type="") & ~models.Q(name="")) def without_package_url(self): """Return objects with empty Package URL.""" return self.filter(models.Q(type="") | models.Q(name="")) def empty_package_url(self): """Return objects with empty Package URL. Alias of without_package_url.""" return self.without_package_url() def order_by_package_url(self): """Order by Package URL fields.""" return self.order_by(*PACKAGE_URL_FIELDS) class PackageURLQuerySet(PackageURLQuerySetMixin, models.QuerySet): pass class PackageURLMixin(models.Model): """ Abstract Model for Package URL "purl" fields support. """ type = models.CharField( max_length=16, blank=True, help_text=_( "A short code to identify the type of this package. " "For example: gem for a Rubygem, docker for a container, " "pypi for a Python Wheel or Egg, maven for a Maven Jar, " "deb for a Debian package, etc." ), ) namespace = models.CharField( max_length=255, blank=True, help_text=_( "Package name prefix, such as Maven groupid, Docker image owner, " "GitHub user or organization, etc." ), ) name = models.CharField( max_length=100, blank=True, help_text=_("Name of the package."), ) version = models.CharField( max_length=100, blank=True, help_text=_("Version of the package."), ) qualifiers = models.CharField( max_length=1024, blank=True, help_text=_( "Extra qualifying data for a package such as the name of an OS, " "architecture, distro, etc." ), ) subpath = models.CharField( max_length=200, blank=True, help_text=_("Extra subpath within a package, relative to the package root."), ) objects = PackageURLQuerySet.as_manager() class Meta: abstract = True @property def package_url(self): """ Return the Package URL "purl" string. """ try: package_url = self.get_package_url() except ValueError: return "" return str(package_url) def get_package_url(self): """ Get the PackageURL instance. """ return PackageURL( self.type, self.namespace, self.name, self.version, self.qualifiers, self.subpath, ) def set_package_url(self, package_url): """ Set each field values to the values of the provided `package_url` string or PackageURL object. Existing values are always overwritten, forcing the new value or an empty string on all the `package_url` fields since we do not want to keep any previous values. """ if not isinstance(package_url, PackageURL): package_url = PackageURL.from_string(package_url) package_url_dict = package_url.to_dict(encode=True, empty="") for field_name, value in package_url_dict.items(): model_field = self._meta.get_field(field_name) if value and len(value) > model_field.max_length: message = _(f'Value too long for field "{field_name}".') raise ValidationError(message) setattr(self, field_name, value) packageurl-python-0.17.5/src/packageurl/contrib/django/utils.py000066400000000000000000000047631504466056600246100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. from packageurl import PackageURL def purl_to_lookups(purl_str, encode=True, include_empty_fields=False): """ Return a lookups dictionary built from the provided `purl` (Package URL) string. These lookups can be used as QuerySet filters. If include_empty_fields is provided, the resulting dictionary will include fields with empty values. This is useful to get exact match. Note that empty values are always returned as empty strings as the model fields are defined with `blank=True` and `null=False`. """ if not purl_str.startswith("pkg:"): purl_str = "pkg:" + purl_str try: package_url = PackageURL.from_string(purl_str) except ValueError: return # Not a valid PackageURL package_url_dict = package_url.to_dict(encode=encode, empty="") if include_empty_fields: return package_url_dict else: return without_empty_values(package_url_dict) def without_empty_values(input_dict): """ Return a new dict not including empty value entries from `input_dict`. `None`, empty string, empty list, and empty dict/set are cleaned. `0` and `False` values are kept. """ empty_values = ([], (), {}, "", None) return {key: value for key, value in input_dict.items() if value not in empty_values} packageurl-python-0.17.5/src/packageurl/contrib/purl2url.py000066400000000000000000000471521504466056600237740ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. from packageurl import PackageURL from packageurl.contrib.route import NoRouteAvailable from packageurl.contrib.route import Router DEFAULT_MAVEN_REPOSITORY = "https://repo.maven.apache.org/maven2" def get_repo_download_url_by_package_type( type, namespace, name, version, archive_extension="tar.gz" ): """ Return the download URL for a hosted git repository given a package type or None. """ if archive_extension not in ("zip", "tar.gz"): raise ValueError("Only zip and tar.gz extensions are supported") download_url_by_type = { "github": f"https://github.com/{namespace}/{name}/archive/{version}.{archive_extension}", "bitbucket": f"https://bitbucket.org/{namespace}/{name}/get/{version}.{archive_extension}", "gitlab": f"https://gitlab.com/{namespace}/{name}/-/archive/{version}/{name}-{version}.{archive_extension}", } return download_url_by_type.get(type) repo_router = Router() download_router = Router() def _get_url_from_router(router, purl): if purl: try: return router.process(purl) except NoRouteAvailable: return def get_repo_url(purl): """ Return a repository URL inferred from the `purl` string. """ return _get_url_from_router(repo_router, purl) def get_download_url(purl): """ Return a download URL inferred from the `purl` string. """ download_url = _get_url_from_router(download_router, purl) if download_url: return download_url # Fallback on the `download_url` qualifier when available. purl_data = PackageURL.from_string(purl) return purl_data.qualifiers.get("download_url", None) def get_inferred_urls(purl): """ Return all inferred URLs (repo, download) from the `purl` string. """ url_functions = ( get_repo_url, get_download_url, ) inferred_urls = [] for url_func in url_functions: url = url_func(purl) if url: inferred_urls.append(url) return inferred_urls # Backward compatibility purl2url = get_repo_url get_url = get_repo_url @repo_router.route("pkg:cargo/.*") def build_cargo_repo_url(purl): """ Return a cargo repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://crates.io/crates/{name}/{version}" elif name: return f"https://crates.io/crates/{name}" @repo_router.route("pkg:bitbucket/.*") def build_bitbucket_repo_url(purl): """ Return a bitbucket repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name if name and namespace: return f"https://bitbucket.org/{namespace}/{name}" @repo_router.route("pkg:github/.*") def build_github_repo_url(purl): """ Return a github repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name version = purl_data.version qualifiers = purl_data.qualifiers if not (name and namespace): return repo_url = f"https://github.com/{namespace}/{name}" if version: version_prefix = qualifiers.get("version_prefix", "") repo_url = f"{repo_url}/tree/{version_prefix}{version}" return repo_url @repo_router.route("pkg:gitlab/.*") def build_gitlab_repo_url(purl): """ Return a gitlab repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name if name and namespace: return f"https://gitlab.com/{namespace}/{name}" @repo_router.route("pkg:(gem|rubygems)/.*") def build_rubygems_repo_url(purl): """ Return a rubygems repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://rubygems.org/gems/{name}/versions/{version}" elif name: return f"https://rubygems.org/gems/{name}" @repo_router.route("pkg:cran/.*") def build_cran_repo_url(purl): """ Return a cran repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version return f"https://cran.r-project.org/src/contrib/{name}_{version}.tar.gz" @repo_router.route("pkg:npm/.*") def build_npm_repo_url(purl): """ Return a npm repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name version = purl_data.version repo_url = "https://www.npmjs.com/package/" if namespace: repo_url += f"{namespace}/" repo_url += f"{name}" if version: repo_url += f"/v/{version}" return repo_url @repo_router.route("pkg:pypi/.*") def build_pypi_repo_url(purl): """ Return a pypi repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = (purl_data.name or "").replace("_", "-") version = purl_data.version if name and version: return f"https://pypi.org/project/{name}/{version}/" elif name: return f"https://pypi.org/project/{name}/" @repo_router.route("pkg:composer/.*") def build_composer_repo_url(purl): """ Return a composer repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version namespace = purl_data.namespace if name and version: return f"https://packagist.org/packages/{namespace}/{name}#{version}" elif name: return f"https://packagist.org/packages/{namespace}/{name}" @repo_router.route("pkg:nuget/.*") def build_nuget_repo_url(purl): """ Return a nuget repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://www.nuget.org/packages/{name}/{version}" elif name: return f"https://www.nuget.org/packages/{name}" @repo_router.route("pkg:hackage/.*") def build_hackage_repo_url(purl): """ Return a hackage repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://hackage.haskell.org/package/{name}-{version}" elif name: return f"https://hackage.haskell.org/package/{name}" @repo_router.route("pkg:golang/.*") def build_golang_repo_url(purl): """ Return a golang repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name version = purl_data.version if name and version: return f"https://pkg.go.dev/{namespace}/{name}@{version}" elif name: return f"https://pkg.go.dev/{namespace}/{name}" @repo_router.route("pkg:cocoapods/.*") def build_cocoapods_repo_url(purl): """ Return a CocoaPods repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name return name and f"https://cocoapods.org/pods/{name}" @repo_router.route("pkg:maven/.*") def build_maven_repo_url(purl): """ Return a Maven repo URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name version = purl_data.version qualifiers = purl_data.qualifiers base_url = qualifiers.get("repository_url", DEFAULT_MAVEN_REPOSITORY) if namespace and name and version: namespace = namespace.replace(".", "/") return f"{base_url}/{namespace}/{name}/{version}" # Download URLs: @download_router.route("pkg:cargo/.*") def build_cargo_download_url(purl): """ Return a cargo download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://crates.io/api/v1/crates/{name}/{version}/download" @download_router.route("pkg:(gem|rubygems)/.*") def build_rubygems_download_url(purl): """ Return a rubygems download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://rubygems.org/downloads/{name}-{version}.gem" @download_router.route("pkg:npm/.*") def build_npm_download_url(purl): """ Return a npm download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name version = purl_data.version base_url = "https://registry.npmjs.org" if namespace: base_url += f"/{namespace}" if name and version: return f"{base_url}/{name}/-/{name}-{version}.tgz" @download_router.route("pkg:maven/.*") def build_maven_download_url(purl): """ Return a maven download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name version = purl_data.version qualifiers = purl_data.qualifiers base_url = qualifiers.get("repository_url", DEFAULT_MAVEN_REPOSITORY) maven_type = qualifiers.get("type", "jar") # default to "jar" classifier = qualifiers.get("classifier") if namespace and name and version: namespace = namespace.replace(".", "/") classifier = f"-{classifier}" if classifier else "" return f"{base_url}/{namespace}/{name}/{version}/{name}-{version}{classifier}.{maven_type}" @download_router.route("pkg:hackage/.*") def build_hackage_download_url(purl): """ Return a hackage download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://hackage.haskell.org/package/{name}-{version}/{name}-{version}.tar.gz" @download_router.route("pkg:nuget/.*") def build_nuget_download_url(purl): """ Return a nuget download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://www.nuget.org/api/v2/package/{name}/{version}" @download_router.route("pkg:gitlab/.*", "pkg:bitbucket/.*", "pkg:github/.*") def build_repo_download_url(purl): """ Return a gitlab download URL from the `purl` string. """ return get_repo_download_url(purl) @download_router.route("pkg:hex/.*") def build_hex_download_url(purl): """ Return a hex download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://repo.hex.pm/tarballs/{name}-{version}.tar" @download_router.route("pkg:golang/.*") def build_golang_download_url(purl): """ Return a golang download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace name = purl_data.name version = purl_data.version if not name: return # TODO: https://github.com/package-url/packageurl-python/issues/197 if namespace: name = f"{namespace}/{name}" ename = escape_golang_path(name) eversion = escape_golang_path(version) if not eversion.startswith("v"): eversion = "v" + eversion if name and version: return f"https://proxy.golang.org/{ename}/@v/{eversion}.zip" @download_router.route("pkg:pub/.*") def build_pub_download_url(purl): """ Return a pub download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version if name and version: return f"https://pub.dev/api/archives/{name}-{version}.tar.gz" @download_router.route("pkg:swift/.*") def build_swift_download_url(purl): """ Return a Swift Package download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) name = purl_data.name version = purl_data.version namespace = purl_data.namespace if not (namespace or name or version): return return f"https://{namespace}/{name}/archive/{version}.zip" @download_router.route("pkg:luarocks/.*") def build_luarocks_download_url(purl): """ Return a LuaRocks download URL from the `purl` string. """ purl_data = PackageURL.from_string(purl) qualifiers = purl_data.qualifiers or {} repository_url = qualifiers.get("repository_url", "https://luarocks.org") name = purl_data.name version = purl_data.version if name and version: return f"{repository_url}/{name}-{version}.src.rock" @download_router.route("pkg:conda/.*") def build_conda_download_url(purl): """ Resolve a Conda PURL to a real downloadable URL Supported qualifiers: - channel: e.g., main, conda-forge (required for deterministic base) - subdir: e.g., linux-64, osx-arm64, win-64, noarch - build: exact build string (optional but recommended) - type: 'conda' or 'tar.bz2' (preference; fallback to whichever exists) """ p = PackageURL.from_string(purl) if not p.name or not p.version: return None q = p.qualifiers or {} name = p.name version = p.version build = q.get("build") channel = q.get("channel") or "main" subdir = q.get("subdir") or "noarch" req_type = q.get("type") def _conda_base_for_channel(channel: str) -> str: """ Map a conda channel to its base URL. - 'main' / 'defaults' -> repo.anaconda.com - any other channel -> conda.anaconda.org/ """ ch = (channel or "").lower() if ch in ("main", "defaults"): return "https://repo.anaconda.com/pkgs/main" return f"https://conda.anaconda.org/{ch}" base = _conda_base_for_channel(channel) package_identifier = ( f"{name}-{version}-{build}.{req_type}" if build else f"{name}-{version}.{req_type}" ) download_url = f"{base}/{subdir}/{package_identifier}" return download_url @download_router.route("pkg:alpm/.*") def build_alpm_download_url(purl_str): purl = PackageURL.from_string(purl_str) name = purl.name version = purl.version arch = purl.qualifiers.get("arch", "any") if not name or not version: return None first_letter = name[0] url = f"https://archive.archlinux.org/packages/{first_letter}/{name}/{name}-{version}-{arch}.pkg.tar.zst" return url def normalize_version(version: str) -> str: """ Remove the epoch (if any) from a Debian version. E.g., "1:2.4.47-2" becomes "2.4.47-2" """ if ":" in version: _, v = version.split(":", 1) return v return version @download_router.route("pkg:deb/.*") def build_deb_download_url(purl_str: str) -> str: """ Construct a download URL for a Debian or Ubuntu package PURL. Supports optional 'repository_url' in qualifiers. """ p = PackageURL.from_string(purl_str) name = p.name version = p.version namespace = p.namespace qualifiers = p.qualifiers or {} arch = qualifiers.get("arch") repository_url = qualifiers.get("repository_url") if not name or not version: raise ValueError("Both name and version must be present in deb purl") if not arch: arch = "source" if repository_url: base_url = repository_url.rstrip("/") else: if namespace == "debian": base_url = "https://deb.debian.org/debian" elif namespace == "ubuntu": base_url = "http://archive.ubuntu.com/ubuntu" else: raise NotImplementedError(f"Unsupported distro namespace: {namespace}") norm_version = normalize_version(version) if arch == "source": filename = f"{name}_{norm_version}.dsc" else: filename = f"{name}_{norm_version}_{arch}.deb" pool_path = f"/pool/main/{name[0].lower()}/{name}" return f"{base_url}{pool_path}/{filename}" @download_router.route("pkg:apk/.*") def build_apk_download_url(purl): """ Return a download URL for a fully qualified Alpine Linux package PURL. Example: pkg:apk/acct@6.6.4-r0?arch=x86&alpine_version=v3.11&repo=main """ purl = PackageURL.from_string(purl) name = purl.name version = purl.version arch = purl.qualifiers.get("arch") repo = purl.qualifiers.get("repo") alpine_version = purl.qualifiers.get("alpine_version") if not name or not version or not arch or not repo or not alpine_version: raise ValueError( "All qualifiers (arch, repo, alpine_version) and name/version must be present in apk purl" ) return ( f"https://dl-cdn.alpinelinux.org/alpine/{alpine_version}/{repo}/{arch}/{name}-{version}.apk" ) def get_repo_download_url(purl): """ Return ``download_url`` if present in ``purl`` qualifiers or if ``namespace``, ``name`` and ``version`` are present in ``purl`` else return None. """ purl_data = PackageURL.from_string(purl) namespace = purl_data.namespace type = purl_data.type name = purl_data.name version = purl_data.version qualifiers = purl_data.qualifiers download_url = qualifiers.get("download_url") if download_url: return download_url if not (namespace and name and version): return version_prefix = qualifiers.get("version_prefix", "") version = f"{version_prefix}{version}" return get_repo_download_url_by_package_type( type=type, namespace=namespace, name=name, version=version ) # TODO: https://github.com/package-url/packageurl-python/issues/196 def escape_golang_path(path: str) -> str: """ Return an case-encoded module path or version name. This is done by replacing every uppercase letter with an exclamation mark followed by the corresponding lower-case letter, in order to avoid ambiguity when serving from case-insensitive file systems. See https://golang.org/ref/mod#goproxy-protocol. """ escaped_path = "" for c in path: if c >= "A" and c <= "Z": # replace uppercase with !lowercase escaped_path += "!" + chr(ord(c) + ord("a") - ord("A")) else: escaped_path += c return escaped_path packageurl-python-0.17.5/src/packageurl/contrib/route.py000066400000000000000000000174671504466056600233510ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. import inspect import re from functools import wraps """ Given a URI regex (or some string), this module can route execution to a callable. There are several routing implementations available in Rails, Django, Flask, Paste, etc. However, these all assume that the routed processing is to craft a response to an incoming external HTTP request. Here we are instead doing the opposite: given a URI (and no request yet) we are routing the processing to emit a request externally (HTTP or other protocol) and handling its response. Also we crawl a lot and not only HTTP: git, svn, ftp, rsync and more. This simple library support this kind of arbitrary URI routing. This is inspired by Guido's http://www.artima.com/weblogs/viewpost.jsp?thread=101605 and Django, Flask, Werkzeug and other url dispatch and routing design from web frameworks. https://github.com/douban/brownant has a similar approach, using Werkzeug with the limitation that it does not route based on URI scheme and is limited to HTTP. """ class Rule(object): """ A rule is a mapping between a pattern (typically a URI) and a callable (typically a function). The pattern is a regex string pattern and must match entirely a string (typically a URI) for the rule to be considered, i.e. for the endpoint to be resolved and eventually invoked for a given string (typically a URI). """ def __init__(self, pattern, endpoint): # To ensure the pattern will match entirely, we wrap the pattern # with start of line ^ and end of line $. self.pattern = pattern.lstrip("^").rstrip("$") self.pattern_match = re.compile("^" + self.pattern + "$").match # ensure the endpoint is callable assert callable(endpoint) # classes are not always callable, make an extra check if inspect.isclass(endpoint): obj = endpoint() assert callable(obj) self.endpoint = endpoint def __repr__(self): return f'Rule(r"""{self.pattern}""", {self.endpoint.__module__}.{self.endpoint.__name__})' def match(self, string): """ Match a string with the rule pattern, return True is matching. """ return self.pattern_match(string) class RouteAlreadyDefined(TypeError): """ Raised when this route Rule already exists in the route map. """ class NoRouteAvailable(TypeError): """ Raised when there are no route available. """ class MultipleRoutesDefined(TypeError): """ Raised when there are more than one route possible. """ class Router(object): """ A router is: - a container for a route map, consisting of several rules, stored in an ordered dictionary keyed by pattern text - a way to process a route, i.e. given a string (typically a URI), find the correct rule and invoke its callable endpoint - and a convenience decorator for routed callables (either a function or something with a __call__ method) Multiple routers can co-exist as needed, such as a router to collect, another to fetch, etc. """ def __init__(self, route_map=None): """ 'route_map' is an ordered mapping of pattern -> Rule. """ self.route_map = route_map or dict() # lazy cached pre-compiled regex match() for all route patterns self._is_routable = None def __repr__(self): return repr(self.route_map) def __iter__(self): return iter(self.route_map.items()) def keys(self): return self.route_map.keys() def append(self, pattern, endpoint): """ Append a new pattern and endpoint Rule at the end of the map. Use this as an alternative to the route decorator. """ if pattern in self.route_map: raise RouteAlreadyDefined(pattern) self.route_map[pattern] = Rule(pattern, endpoint) def route(self, *patterns): """ Decorator to make a callable 'endpoint' routed to one or more patterns. Example: >>> my_router = Router() >>> @my_router.route('http://nexb.com', 'http://deja.com') ... def somefunc(uri): ... pass """ def decorator(endpoint): assert patterns for pat in patterns: self.append(pat, endpoint) @wraps(endpoint) def decorated(*args, **kwargs): return self.process(*args, **kwargs) return decorated return decorator def process(self, string, *args, **kwargs): """ Given a string (typically a URI), resolve this string to an endpoint by searching available rules then execute the endpoint callable for that string passing down all arguments to the endpoint invocation. """ endpoint = self.resolve(string) if inspect.isclass(endpoint): # instantiate a class, that must define a __call__ method # TODO: consider passing args to the constructor? endpoint = endpoint() # call the callable return endpoint(string, *args, **kwargs) def resolve(self, string): """ Resolve a string: given a string (typically a URI) resolve and return the best endpoint function for that string. Ambiguous resolution is not allowed in order to keep things in check when there are hundreds rules: if multiple routes are possible for a string (typically a URI), a MultipleRoutesDefined TypeError is raised. """ # TODO: we could improve the performance of this by using a single # regex and named groups if this ever becomes a bottleneck. candidates = [r for r in self.route_map.values() if r.match(string)] if not candidates: raise NoRouteAvailable(string) if len(candidates) > 1: # this can happen when multiple patterns match the same string # we raise an exception with enough debugging information pats = repr([r.pattern for r in candidates]) msg = "%(string)r matches multiple patterns %(pats)r" % locals() raise MultipleRoutesDefined(msg) return candidates[0].endpoint def is_routable(self, string): """ Return True if `string` is routable by this router, e.g. if it matches any of the route patterns. """ if not string: return if not self._is_routable: # build an alternation regex routables = "^(" + "|".join(pat for pat in self.route_map) + ")$" self._is_routable = re.compile(routables, re.UNICODE).match return bool(self._is_routable(string)) packageurl-python-0.17.5/src/packageurl/contrib/sqlalchemy/000077500000000000000000000000001504466056600237645ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/contrib/sqlalchemy/mixin.py000066400000000000000000000076671504466056600255020ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. from sqlalchemy import String from sqlalchemy.orm import Mapped from sqlalchemy.orm import declarative_mixin from sqlalchemy.orm import mapped_column from packageurl import PackageURL @declarative_mixin class PackageURLMixin: """ SQLAlchemy declarative mixin class for Package URL "purl" fields support. """ type: Mapped[str] = mapped_column( String(16), nullable=False, comment=( "A short code to identify the type of this package. " "For example: gem for a Rubygem, docker for a container, " "pypi for a Python Wheel or Egg, maven for a Maven Jar, " "deb for a Debian package, etc." ), ) namespace: Mapped[str] = mapped_column( String(255), nullable=True, comment=( "Package name prefix, such as Maven groupid, Docker image owner, " "GitHub user or organization, etc." ), ) name: Mapped[str] = mapped_column(String(100), nullable=False, comment="Name of the package.") version: Mapped[str] = mapped_column( String(100), nullable=True, comment="Version of the package." ) qualifiers: Mapped[str] = mapped_column( String(1024), nullable=True, comment=( "Extra qualifying data for a package such as the name of an OS, " "architecture, distro, etc." ), ) subpath: Mapped[str] = mapped_column( String(200), nullable=True, comment="Extra subpath within a package, relative to the package root.", ) @property def package_url(self) -> str: """ Return the Package URL "purl" string. Returns ------- str """ try: package_url = self.get_package_url() except ValueError: return "" return str(package_url) def get_package_url(self) -> PackageURL: """ Get the PackageURL instance. Returns ------- PackageURL """ return PackageURL( self.type, self.namespace, self.name, self.version, self.qualifiers, self.subpath, ) def set_package_url(self, package_url: PackageURL) -> None: """ Set or update the PackageURL object attributes. Parameters ---------- package_url: PackageURL The PackageURL object to set get attributes from. """ if not isinstance(package_url, PackageURL): package_url = PackageURL.from_string(package_url) package_url_dict = package_url.to_dict(encode=True, empty="") for key, value in package_url_dict.items(): setattr(self, key, value) packageurl-python-0.17.5/src/packageurl/contrib/url2purl.py000066400000000000000000000575301504466056600237750ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. import os import re from urllib.parse import unquote_plus from urllib.parse import urlparse from packageurl import PackageURL from packageurl.contrib.route import NoRouteAvailable from packageurl.contrib.route import Router """ This module helps build a PackageURL from an arbitrary URL. This uses the a routing mechanism available in the route.py module. In order to make it easy to use, it contains all the conversion functions in this single Python script. """ purl_router = Router() def url2purl(url): """ Return a PackageURL inferred from the `url` string or None. """ if url: try: return purl_router.process(url) except NoRouteAvailable: # If `url` does not fit in one of the existing routes, # we attempt to create a generic PackageURL for `url` return build_generic_purl(url) get_purl = url2purl def purl_from_pattern(type_, pattern, url, qualifiers=None): url = unquote_plus(url) compiled_pattern = re.compile(pattern, re.VERBOSE) match = compiled_pattern.match(url) if not match: return purl_data = { field: value for field, value in match.groupdict().items() if field in PackageURL._fields } qualifiers = qualifiers or {} # Include the `version_prefix` as a qualifier to infer valid URLs in purl2url version_prefix = match.groupdict().get("version_prefix") if version_prefix: qualifiers.update({"version_prefix": version_prefix}) if qualifiers: if "qualifiers" in purl_data: purl_data["qualifiers"].update(qualifiers) else: purl_data["qualifiers"] = qualifiers return PackageURL(type_, **purl_data) def register_pattern(type_, pattern, router=purl_router): """ Register a pattern with its type. """ def endpoint(url): return purl_from_pattern(type_, pattern, url) router.append(pattern, endpoint) def get_path_segments(url): """ Return a list of path segments from a `url` string. """ path = unquote_plus(urlparse(url).path) segments = [seg for seg in path.split("/") if seg] return segments def build_generic_purl(uri): """ Return a PackageURL from `uri`, if `uri` is a parsable URL, or None `uri` is assumed to be a download URL, e.g. https://example.com/example.tar.gz """ parsed_uri = urlparse(uri) if parsed_uri.scheme and parsed_uri.netloc and parsed_uri.path: # Get file name from `uri` uri_path_segments = get_path_segments(uri) if uri_path_segments: file_name = uri_path_segments[-1] return PackageURL(type="generic", name=file_name, qualifiers={"download_url": uri}) @purl_router.route( "https?://registry.npmjs.*/.*", "https?://registry.yarnpkg.com/.*", "https?://(www\\.)?npmjs.*/package.*", "https?://(www\\.)?yarnpkg.com/package.*", ) def build_npm_purl(uri): # npm URLs are difficult to disambiguate with regex if "/package/" in uri: return build_npm_web_purl(uri) elif "/-/" in uri: return build_npm_download_purl(uri) else: return build_npm_api_purl(uri) def build_npm_api_purl(uri): path = unquote_plus(urlparse(uri).path) segments = [seg for seg in path.split("/") if seg] if len(segments) < 2: return # /@esbuild/freebsd-arm64/0.21.5 if len(segments) == 3: return PackageURL("npm", namespace=segments[0], name=segments[1], version=segments[2]) # /@invisionag/eslint-config-ivx if segments[0].startswith("@"): return PackageURL("npm", namespace=segments[0], name=segments[1]) # /angular/1.6.6 return PackageURL("npm", name=segments[0], version=segments[1]) def build_npm_download_purl(uri): path = unquote_plus(urlparse(uri).path) segments = [seg for seg in path.split("/") if seg and seg != "-"] len_segments = len(segments) # /@invisionag/eslint-config-ivx/-/eslint-config-ivx-0.0.2.tgz if len_segments == 3: namespace, name, filename = segments # /automatta/-/automatta-0.0.1.tgz elif len_segments == 2: namespace = None name, filename = segments else: return base_filename, ext = os.path.splitext(filename) version = base_filename.replace(name, "") if version.startswith("-"): version = version[1:] # Removes the "-" prefix return PackageURL("npm", namespace, name, version) def build_npm_web_purl(uri): path = unquote_plus(urlparse(uri).path) if path.startswith("/package/"): path = path[9:] segments = [seg for seg in path.split("/") if seg] len_segments = len(segments) namespace = version = None # @angular/cli/v/10.1.2 if len_segments == 4: namespace = segments[0] name = segments[1] version = segments[3] # express/v/4.17.1 elif len_segments == 3: namespace = None name = segments[0] version = segments[2] # @angular/cli elif len_segments == 2: namespace = segments[0] name = segments[1] # express elif len_segments == 1 and len(segments) > 0 and segments[0][0] != "@": name = segments[0] else: return return PackageURL("npm", namespace, name, version) @purl_router.route( "https?://repo1.maven.org/maven2/.*", "https?://central.maven.org/maven2/.*", "maven-index://repo1.maven.org/.*", ) def build_maven_purl(uri): path = unquote_plus(urlparse(uri).path) segments = [seg for seg in path.split("/") if seg and seg != "maven2"] if len(segments) < 3: return before_last_segment, last_segment = segments[-2:] has_filename = before_last_segment in last_segment filename = None if has_filename: filename = segments.pop() version = segments[-1] name = segments[-2] namespace = ".".join(segments[:-2]) qualifiers = {} if filename: name_version = f"{name}-{version}" _, _, classifier_ext = filename.rpartition(name_version) classifier, _, extension = classifier_ext.partition(".") if not extension: return qualifiers["classifier"] = classifier.strip("-") valid_types = ("aar", "ear", "mar", "pom", "rar", "rpm", "sar", "tar.gz", "war", "zip") if extension in valid_types: qualifiers["type"] = extension return PackageURL("maven", namespace, name, version, qualifiers) # https://rubygems.org/gems/i18n-js-3.0.11.gem @purl_router.route("https?://rubygems.org/(downloads|gems)/.*") def build_rubygems_purl(uri): # We use a more general route pattern instead of using `rubygems_pattern` # below by itself because we want to capture all rubygems download URLs, # even the ones that are not completely formed. This helps prevent url2purl # from attempting to create a generic PackageURL from an invalid rubygems # download URL. # https://rubygems.org/downloads/jwt-0.1.8.gem # https://rubygems.org/gems/i18n-js-3.0.11.gem rubygems_pattern = ( r"^https?://rubygems.org/(downloads|gems)/(?P.+)-(?P.+)(\.gem)$" ) return purl_from_pattern("gem", rubygems_pattern, uri) # https://cran.r-project.org/src/contrib/jsonlite_1.8.8.tar.gz # https://packagemanager.rstudio.com/cran/2022-06-23/src/contrib/curl_4.3.2.tar.gz" @purl_router.route( "https?://cran.r-project.org/.*", "https?://packagemanager.rstudio.com/cran/.*", ) def build_cran_purl(uri): cran_pattern = r"^https?://(cran\.r-project\.org|packagemanager\.rstudio\.com/cran)/.*?src/contrib/(?P.+)_(?P.+)\.tar.gz$" qualifiers = {} if "//cran.r-project.org/" not in uri: qualifiers["download_url"] = uri return purl_from_pattern("cran", cran_pattern, uri, qualifiers) # https://pypi.org/packages/source/a/anyjson/anyjson-0.3.3.tar.gz # https://pypi.python.org/packages/source/a/anyjson/anyjson-0.3.3.tar.gz # https://pypi.python.org/packages/2.6/t/threadpool/threadpool-1.2.7-py2.6.egg # https://pypi.python.org/packages/any/s/setuptools/setuptools-0.6c11-1.src.rpm # https://files.pythonhosted.org/packages/84/d8/451842a5496844bb5c7634b231a2e4caf0d867d2e25f09b840d3b07f3d4b/multi_key_dict-2.0.win32.exe pypi_pattern = r"(?P(\w\.?)+(-\w+)*)-(?P.+)\.(zip|tar.gz|tar.bz2|tgz|egg|rpm|exe)$" # This pattern can be found in the following locations: # - wheel.wheelfile.WHEEL_INFO_RE # - distlib.wheel.FILENAME_RE # - setuptools.wheel.WHEEL_NAME # - pip._internal.wheel.Wheel.wheel_file_re wheel_file_re = re.compile( r"^(?P(?P.+?)-(?P.*?))" r"((-(?P\d[^-]*?))?-(?P.+?)-(?P.+?)-(?P.+?)" r"\.whl)$", re.VERBOSE, ) @purl_router.route( "https?://pypi.org/(packages|project)/.+", "https?://.+python.+org/(packages|project)/.*", ) def build_pypi_purl(uri): path = unquote_plus(urlparse(uri).path) segments = path.split("/") last_segment = segments[-1] # /wheel-0.29.0-py2.py3-none-any.whl if last_segment.endswith(".whl"): match = wheel_file_re.match(last_segment) if match: return PackageURL( "pypi", name=match.group("name"), version=match.group("version"), ) if segments[1] == "project": return PackageURL( "pypi", name=segments[2], version=segments[3] if len(segments) > 3 else None, ) return purl_from_pattern("pypi", pypi_pattern, last_segment) # https://packagist.org/packages/webmozart/assert#1.9.1 @purl_router.route("https?://packagist.org/packages/.*") def build_composer_purl(uri): # We use a more general route pattern instead of using `composer_pattern` # below by itself because we want to capture all packagist download URLs, # even the ones that are not completely formed. This helps prevent url2purl # from attempting to create a generic PackageURL from an invalid packagist # download URL. # https://packagist.org/packages/ralouphie/getallheaders # https://packagist.org/packages/symfony/process#v7.0.0-BETA3 composer_pattern = r"^https?://packagist\.org/packages/(?P[^/]+)/(?P[^\#]+?)(\#(?P.+))?$" return purl_from_pattern("composer", composer_pattern, uri) # http://nuget.org/packages/EntityFramework/4.2.0.0 # https://www.nuget.org/api/v2/package/Newtonsoft.Json/11.0.1 nuget_www_pattern = r"^https?://.*nuget.org/(api/v2/)?packages?/(?P.+)/(?P.+)$" register_pattern("nuget", nuget_www_pattern) # https://api.nuget.org/v3-flatcontainer/newtonsoft.json/10.0.1/newtonsoft.json.10.0.1.nupkg nuget_api_pattern = ( r"^https?://api.nuget.org/v3-flatcontainer/" r"(?P.+)/" r"(?P.+)/" r".*(nupkg)$" # ends with "nupkg" ) register_pattern("nuget", nuget_api_pattern) # https://sourceforge.net/projects/turbovnc/files/3.1/turbovnc-3.1.tar.gz/download # https://sourceforge.net/projects/scribus/files/scribus/1.6.0/scribus-1.6.0.tar.gz/download # https://sourceforge.net/projects/ventoy/files/v1.0.96/Ventoy%201.0.96%20release%20source%20code.tar.gz/download # https://sourceforge.net/projects/geoserver/files/GeoServer/2.23.4/geoserver-2.23.4-war.zip/download sourceforge_download_pattern = ( r"^https?://.*sourceforge.net/projects/" r"(?P.+)/" r"files/" r"(?i:(?P=name)/)?" # optional case-insensitive name segment repeated r"v?(?P[0-9\.]+)/" # version restricted to digits and dots r"(?i:(?P=name)).*(?P=version).*" # case-insensitive matching for {name}-{version} r"(/download)$" # ending with "/download" ) register_pattern("sourceforge", sourceforge_download_pattern) # https://sourceforge.net/projects/spacesniffer/files/spacesniffer_1_3_0_2.zip/download sourceforge_download_pattern_bis = ( r"^https?://.*sourceforge.net/projects/" r"(?P.+)/" r"files/" r"(?i:(?P=name))_*(?P[0-9_]+).*" r"(/download)$" # ending with "/download" ) register_pattern("sourceforge", sourceforge_download_pattern_bis) @purl_router.route("https?://.*sourceforge.net/project/.*") def build_sourceforge_purl(uri): # We use a more general route pattern instead of using `sourceforge_pattern` # below by itself because we want to capture all sourceforge download URLs, # even the ones that do not fit `sourceforge_pattern`. This helps prevent # url2purl from attempting to create a generic PackageURL from a sourceforge # URL that we can't handle. # http://master.dl.sourceforge.net/project/libpng/zlib/1.2.3/zlib-1.2.3.tar.bz2 sourceforge_pattern = ( r"^https?://.*sourceforge.net/projects?/" r"(?P([^/]+))/" # do not allow more "/" segments r"(OldFiles/)?" r"(?P.+)/" r"(?P[v0-9\.]+)/" # version restricted to digits and dots r"(?P=name).*(?P=version).*" # {name}-{version} repeated in the filename r"[^/]$" # not ending with "/" ) sourceforge_purl = purl_from_pattern("sourceforge", sourceforge_pattern, uri) if not sourceforge_purl: # Get the project name from `uri` and use that as the Package name # http://master.dl.sourceforge.net/project/aloyscore/aloyscore/0.1a1%2520stable/0.1a1_stable_AloysCore.zip split_uri = uri.split("/project/") # http://master.dl.sourceforge.net, aloyscore/aloyscore/0.1a1%2520stable/0.1a1_stable_AloysCore.zip if len(split_uri) >= 2: # aloyscore/aloyscore/0.1a1%2520stable/0.1a1_stable_AloysCore.zip remaining_uri_path = split_uri[1] # aloyscore, aloyscore, 0.1a1%2520stable, 0.1a1_stable_AloysCore.zip remaining_uri_path_segments = remaining_uri_path.split("/") if remaining_uri_path_segments: project_name = remaining_uri_path_segments[0] # aloyscore sourceforge_purl = PackageURL( type="sourceforge", name=project_name, qualifiers={"download_url": uri} ) return sourceforge_purl # https://crates.io/api/v1/crates/rand/0.7.2/download cargo_pattern = r"^https?://crates.io/api/v1/crates/(?P.+)/(?P.+)(\/download)$" register_pattern("cargo", cargo_pattern) # https://raw.githubusercontent.com/volatilityfoundation/dwarf2json/master/LICENSE.txt github_raw_content_pattern = ( r"https?://raw.githubusercontent.com/(?P[^/]+)/(?P[^/]+)/" r"(?P[^/]+)/(?P.*)$" ) register_pattern("github", github_raw_content_pattern) @purl_router.route("https?://api.github\\.com/repos/.*") def build_github_api_purl(url): """ Return a PackageURL object from GitHub API `url`. For example: https://api.github.com/repos/nexB/scancode-toolkit/commits/40593af0df6c8378d2b180324b97cb439fa11d66 https://api.github.com/repos/nexB/scancode-toolkit/ and returns a `PackageURL` object """ segments = get_path_segments(url) if not (len(segments) >= 3): return namespace = segments[1] name = segments[2] version = None # https://api.github.com/repos/nexB/scancode-toolkit/ if len(segments) == 4 and segments[3] != "commits": version = segments[3] # https://api.github.com/repos/nexB/scancode-toolkit/commits/40593af0df6c8378d2b180324b97cb439fa11d66 if len(segments) == 5 and segments[3] == "commits": version = segments[4] return PackageURL(type="github", namespace=namespace, name=name, version=version) # https://codeload.github.com/nexB/scancode-toolkit/tar.gz/v3.1.1 # https://codeload.github.com/berngp/grails-rest/zip/release/0.7 github_codeload_pattern = ( r"https?://codeload.github.com/(?P.+)/(?P.+)/" r"(zip|tar.gz|tar.bz2|tgz)/(.*/)*" r"(?P.+)$" ) register_pattern("github", github_codeload_pattern) @purl_router.route("https?://github\\.com/.*") def build_github_purl(url): """ Return a PackageURL object from GitHub `url`. """ # https://github.com/apache/nifi/archive/refs/tags/rel/nifi-2.0.0-M3.tar.gz archive_tags_pattern = ( r"https?://github.com/(?P.+)/(?P.+)" r"/archive/refs/tags/" r"(?P.+).(zip|tar.gz|tar.bz2|.tgz)" ) # https://github.com/nexB/scancode-toolkit/archive/v3.1.1.zip archive_pattern = ( r"https?://github.com/(?P.+)/(?P.+)" r"/archive/(.*/)*" r"((?P=name)(-|_|@))?" r"(?P.+).(zip|tar.gz|tar.bz2|.tgz)" ) # https://github.com/downloads/mozilla/rhino/rhino1_7R4.zip download_pattern = ( r"https?://github.com/downloads/(?P.+)/(?P.+)/" r"((?P=name)(-|@)?)?" r"(?P.+).(zip|tar.gz|tar.bz2|.tgz)" ) # https://github.com/pypa/get-virtualenv/raw/20.0.31/public/virtualenv.pyz raw_pattern = ( r"https?://github.com/(?P.+)/(?P.+)" r"/raw/(?P[^/]+)/(?P.*)$" ) # https://github.com/fanf2/unifdef/blob/master/unifdef.c blob_pattern = ( r"https?://github.com/(?P.+)/(?P.+)" r"/blob/(?P[^/]+)/(?P.*)$" ) releases_download_pattern = ( r"https?://github.com/(?P.+)/(?P.+)" r"/releases/download/(?P[^/]+)/.*$" ) # https://github.com/pombredanne/schematics.git git_pattern = r"https?://github.com/(?P.+)/(?P.+).(git)" patterns = ( archive_tags_pattern, archive_pattern, raw_pattern, blob_pattern, releases_download_pattern, download_pattern, git_pattern, ) for pattern in patterns: matches = re.search(pattern, url) qualifiers = {} if matches: if pattern == releases_download_pattern: qualifiers["download_url"] = url return purl_from_pattern( type_="github", pattern=pattern, url=url, qualifiers=qualifiers ) segments = get_path_segments(url) if not len(segments) >= 2: return namespace = segments[0] name = segments[1] version = None subpath = None # https://github.com/TG1999/fetchcode/master if len(segments) >= 3 and segments[2] != "tree": version = segments[2] subpath = "/".join(segments[3:]) # https://github.com/TG1999/fetchcode/tree/master if len(segments) >= 4 and segments[2] == "tree": version = segments[3] subpath = "/".join(segments[4:]) return PackageURL( type="github", namespace=namespace, name=name, version=version, subpath=subpath, ) @purl_router.route("https?://bitbucket\\.org/.*") def build_bitbucket_purl(url): """ Return a PackageURL object from BitBucket `url`. For example: https://bitbucket.org/TG1999/first_repo/src/master or https://bitbucket.org/TG1999/first_repo/src or https://bitbucket.org/TG1999/first_repo/src/master/new_folder """ segments = get_path_segments(url) if not len(segments) >= 2: return namespace = segments[0] name = segments[1] bitbucket_download_pattern = ( r"https?://bitbucket.org/" r"(?P.+)/(?P.+)/downloads/" r"(?P.+).(zip|tar.gz|tar.bz2|.tgz|exe|msi)" ) matches = re.search(bitbucket_download_pattern, url) qualifiers = {} if matches: qualifiers["download_url"] = url return PackageURL(type="bitbucket", namespace=namespace, name=name, qualifiers=qualifiers) version = None subpath = None # https://bitbucket.org/TG1999/first_repo/new_folder/ if len(segments) >= 3 and segments[2] != "src": version = segments[2] subpath = "/".join(segments[3:]) # https://bitbucket.org/TG1999/first_repo/src/master/new_folder/ if len(segments) >= 4 and segments[2] == "src": version = segments[3] subpath = "/".join(segments[4:]) return PackageURL( type="bitbucket", namespace=namespace, name=name, version=version, subpath=subpath, ) @purl_router.route("https?://gitlab\\.com/(?!.*/archive/).*") def build_gitlab_purl(url): """ Return a PackageURL object from Gitlab `url`. For example: https://gitlab.com/TG1999/firebase/-/tree/1a122122/views https://gitlab.com/TG1999/firebase/-/tree https://gitlab.com/TG1999/firebase/-/master https://gitlab.com/tg1999/Firebase/-/tree/master """ segments = get_path_segments(url) if not len(segments) >= 2: return namespace = segments[0] name = segments[1] version = None subpath = None # https://gitlab.com/TG1999/firebase/master if (len(segments) >= 3) and segments[2] != "-" and segments[2] != "tree": version = segments[2] subpath = "/".join(segments[3:]) # https://gitlab.com/TG1999/firebase/-/tree/master if len(segments) >= 5 and (segments[2] == "-" and segments[3] == "tree"): version = segments[4] subpath = "/".join(segments[5:]) return PackageURL( type="gitlab", namespace=namespace, name=name, version=version, subpath=subpath, ) # https://gitlab.com/hoppr/hoppr/-/archive/v1.11.1-dev.2/hoppr-v1.11.1-dev.2.tar.gz gitlab_archive_pattern = ( r"^https?://gitlab.com/" r"(?P.+)/(?P.+)/-/archive/(?P.+)/" r"(?P=name)-(?P=version).*" r"[^/]$" ) register_pattern("gitlab", gitlab_archive_pattern) # https://hackage.haskell.org/package/cli-extras-0.2.0.0/cli-extras-0.2.0.0.tar.gz hackage_download_pattern = ( r"^https?://hackage.haskell.org/package/" r"(?P.+)-(?P.+)/" r"(?P=name)-(?P=version).*" r"[^/]$" ) register_pattern("hackage", hackage_download_pattern) # https://hackage.haskell.org/package/cli-extras-0.2.0.0/ hackage_project_pattern = r"^https?://hackage.haskell.org/package/(?P.+)-(?P[^/]+)/" register_pattern("hackage", hackage_project_pattern) @purl_router.route( "https?://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/.*" ) def build_generic_google_code_archive_purl(uri): # https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com # /android-notifier/android-notifier-desktop-0.5.1-1.i386.rpm _, remaining_uri = uri.split( "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/" ) if remaining_uri: # android-notifier/android-notifier-desktop-0.5.1-1.i386.rpm split_remaining_uri = remaining_uri.split("/") # android-notifier, android-notifier-desktop-0.5.1-1.i386.rpm if split_remaining_uri: name = split_remaining_uri[0] # android-notifier return PackageURL( type="generic", namespace="code.google.com", name=name, qualifiers={"download_url": uri}, ) packageurl-python-0.17.5/src/packageurl/py.typed000066400000000000000000000000001504466056600216470ustar00rootroot00000000000000packageurl-python-0.17.5/src/packageurl/utils.py000066400000000000000000000043731504466056600217030ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. from packageurl import PackageURL def get_golang_purl(go_package: str): """ Return a PackageURL object given an imported ``go_package`` or go module "name version" string as seen in a go.mod file. >>> get_golang_purl(go_package="github.com/gorilla/mux v1.8.1") PackageURL(type='golang', namespace='github.com/gorilla', name='mux', version='v1.8.1', qualifiers={}, subpath=None) """ if not go_package: return version = None # Go package in *.mod files is represented like this # package version # github.com/gorilla/mux v1.8.1 # https://github.com/moby/moby/blob/6c10086976d07d4746e03dcfd188972a2f07e1c9/vendor.mod#L51 if "@" in go_package: raise Exception(f"{go_package} should not contain ``@``") if " " in go_package: go_package, _, version = go_package.rpartition(" ") parts = go_package.split("/") if not parts: return name = parts[-1] namespace = "/".join(parts[:-1]) return PackageURL(type="golang", namespace=namespace, name=name, version=version) packageurl-python-0.17.5/tests/000077500000000000000000000000001504466056600164175ustar00rootroot00000000000000packageurl-python-0.17.5/tests/contrib/000077500000000000000000000000001504466056600200575ustar00rootroot00000000000000packageurl-python-0.17.5/tests/contrib/data/000077500000000000000000000000001504466056600207705ustar00rootroot00000000000000packageurl-python-0.17.5/tests/contrib/data/url2purl.json000066400000000000000000001034571504466056600234640ustar00rootroot00000000000000{ "http://central.maven.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar": "pkg:maven/ant-contrib/ant-contrib@1.0b3", "http://repo1.maven.org/maven2/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar": "pkg:maven/ant-contrib/ant-contrib@1.0b3", "maven-index://repo1.maven.org/ant-contrib/ant-contrib/1.0b3/ant-contrib-1.0b3.jar": "pkg:maven/ant-contrib/ant-contrib@1.0b3", "maven-index://repo1.maven.org/ant-contrib/ant-contrib/1.0b3/": "pkg:maven/ant-contrib/ant-contrib@1.0b3", "maven-index://repo1.maven.org/ant-contrib/ant-contrib/1.0b3": "pkg:maven/ant-contrib/ant-contrib@1.0b3", "http://repo1.maven.org/maven2/": null, "http://repo1.maven.org/maven2/jdbm/jdbm/": null, "http://repo1.maven.org/maven2/jdbm/jdbm/0.20-dev/": "pkg:maven/jdbm/jdbm@0.20-dev", "http://repo1.maven.org/maven2/jdbm/jdbm/020-dev/jdbm-020-dev": null, "http://repo1.maven.org/maven2/jdbm/jdbm/0.20-dev/jdbm-0.20-dev.jar": "pkg:maven/jdbm/jdbm@0.20-dev", "http://repo1.maven.org/maven2/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar": "pkg:maven/org.apache.commons/commons-math3@3.6.1", "http://central.maven.org/maven2/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1-sources.jar": "pkg:maven/org.apache.commons/commons-math3@3.6.1?classifier=sources", "http://repo1.maven.org/maven2/jdbm/jdbm/0.20-dev/jdbm-0.20-dev.pom": "pkg:maven/jdbm/jdbm@0.20-dev?type=pom", "http://central.maven.org/maven2/ant/ant-optional/1.5.3-1/ant-optional-1.5.3-1.jar": "pkg:maven/ant/ant-optional@1.5.3-1", "http://central.maven.org/maven2/ant/ant/1.5/ant-1.5.jar": "pkg:maven/ant/ant@1.5", "http://central.maven.org/maven2/antlr/antlr/2.7.7/antlr-2.7.7.jar": "pkg:maven/antlr/antlr@2.7.7", "http://central.maven.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.jar": "pkg:maven/aopalliance/aopalliance@1.0", "http://central.maven.org/maven2/fr/opensagres/xdocreport/fr.opensagres.xdocreport.converter.docx.xwpf/1.0.5/fr.opensagres.xdocreport.converter.docx.xwpf-1.0.5.jar": "pkg:maven/fr.opensagres.xdocreport/fr.opensagres.xdocreport.converter.docx.xwpf@1.0.5", "http://central.maven.org/maven2/org/eclipse/jetty/orbit/org.apache.jasper.glassfish/2.2.2.v201112011158/org.apache.jasper.glassfish-2.2.2.v201112011158-sources.jar": "pkg:maven/org.eclipse.jetty.orbit/org.apache.jasper.glassfish@2.2.2.v201112011158?classifier=sources", "http://central.maven.org/maven2/org/eclipse/jetty/orbit/org.apache.taglibs.standard.glassfish/1.2.0.v201112081803/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803-sources.jar": "pkg:maven/org.eclipse.jetty.orbit/org.apache.taglibs.standard.glassfish@1.2.0.v201112081803?classifier=sources", "http://central.maven.org/maven2/org/springframework/security/kerberos/spring-security-kerberos-core/1.0.1.RELEASE/spring-security-kerberos-core-1.0.1.RELEASE-sources.jar": "pkg:maven/org.springframework.security.kerberos/spring-security-kerberos-core@1.0.1.RELEASE?classifier=sources", "http://central.maven.org/maven2/org/springframework/security/kerberos/spring-security-kerberos-web/1.0.1.RELEASE/spring-security-kerberos-web-1.0.1.RELEASE-sources.jar": "pkg:maven/org.springframework.security.kerberos/spring-security-kerberos-web@1.0.1.RELEASE?classifier=sources", "http://central.maven.org/maven2/xmlunit/xmlunit/1.1/xmlunit-1.1.jar": "pkg:maven/xmlunit/xmlunit@1.1", "http://central.maven.org/maven2/xom/xom/1.0/xom-1.0.jar": "pkg:maven/xom/xom@1.0", "http://central.maven.org/maven2/xom/xom/1.1/xom-1.1-sources.jar": "pkg:maven/xom/xom@1.1?classifier=sources", "http://central.maven.org/maven2/xpp3/xpp3/1.1.3.4.O/xpp3-1.1.3.4.O.jar": "pkg:maven/xpp3/xpp3@1.1.3.4.O", "http://central.maven.org/maven2/xpp3/xpp3_min/1.1.4c/xpp3_min-1.1.4c.jar": "pkg:maven/xpp3/xpp3_min@1.1.4c", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar.asc": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar.asc.md5": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar.asc.sha1": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar.md5": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6.jar.sha1": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6-javadoc.jar": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6?classifier=javadoc", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6-sources.jar": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6?classifier=sources", "http://central.maven.org/maven2/org/apache/zookeeper/zookeeper/3.4.6/zookeeper-3.4.6-tests.jar": "pkg:maven/org.apache.zookeeper/zookeeper@3.4.6?classifier=tests", "http://central.maven.org/maven2/javax/activation/activation/1.1/activation-1.1-sources.jar": "pkg:maven/javax.activation/activation@1.1?classifier=sources", "http://central.maven.org/maven2/com/amazonaws/aws-java-sdk/1.8.5/aws-java-sdk-1.8.5.jar.asc": "pkg:maven/com.amazonaws/aws-java-sdk@1.8.5", "http://central.maven.org/maven2/org/mongodb/casbah-commons_2.10/2.6.1/casbah-commons_2.10-2.6.1-test.jar": "pkg:maven/org.mongodb/casbah-commons_2.10@2.6.1?classifier=test", "http://central.maven.org/maven2/commons-codec/commons-codec/1.6/commons-codec-1.6-javadoc.jar": "pkg:maven/commons-codec/commons-codec@1.6?classifier=javadoc", "http://central.maven.org/maven2/commons-codec/commons-codec/1.6/commons-codec-1.6-tests.jar": "pkg:maven/commons-codec/commons-codec@1.6?classifier=tests", "http://central.maven.org/maven2/commons-io/commons-io/2.3/commons-io-2.3-test-sources.jar": "pkg:maven/commons-io/commons-io@2.3?classifier=test-sources", "http://central.maven.org/maven2/org/drools/drools-guvnor/5.1.0/drools-guvnor-5.1.0.war": "pkg:maven/org.drools/drools-guvnor@5.1.0?type=war", "http://central.maven.org/maven2/org/apache/geronimo/specs/geronimo-servlet_3.0_spec/1.0/geronimo-servlet_3.0_spec-1.0-source-release.tar.gz": "pkg:maven/org.apache.geronimo.specs/geronimo-servlet_3.0_spec@1.0?classifier=source-release&type=tar.gz", "http://central.maven.org/maven2/org/apache/geronimo/gshell/gshell-assembly/1.0-alpha-1/gshell-assembly-1.0-alpha-1-full.zip": "pkg:maven/org.apache.geronimo.gshell/gshell-assembly@1.0-alpha-1?classifier=full&type=zip", "http://central.maven.org/maven2/org/jasypt/jasypt/1.9.0/jasypt-1.9.0-lite.jar": "pkg:maven/org.jasypt/jasypt@1.9.0?classifier=lite", "http://central.maven.org/maven2/com/sun/jersey/jersey-archive/1.19/jersey-archive-1.19.zip": "pkg:maven/com.sun.jersey/jersey-archive@1.19?type=zip", "http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.4.11.v20180605/jetty-distribution-9.4.11.v20180605.tar.gz": "pkg:maven/org.eclipse.jetty/jetty-distribution@9.4.11.v20180605?type=tar.gz", "http://central.maven.org/maven2/com/github/jnr/jffi/1.2.10/jffi-1.2.10-native.jar": "pkg:maven/com.github.jnr/jffi@1.2.10?classifier=native", "http://central.maven.org/maven2/org/jmxtrans/jmxtrans/251/jmxtrans-251.rpm": "pkg:maven/org.jmxtrans/jmxtrans@251?type=rpm", "http://central.maven.org/maven2/net/sf/json-lib/json-lib/2.3/json-lib-2.3-jdk15.jar": "pkg:maven/net.sf.json-lib/json-lib@2.3?classifier=jdk15", "http://central.maven.org/maven2/org/apache/kafka/kafka_2.11/0.10.1.0/kafka_2.11-0.10.1.0-scaladoc.jar": "pkg:maven/org.apache.kafka/kafka_2.11@0.10.1.0?classifier=scaladoc", "http://central.maven.org/maven2/org/apache/axis2/mex/1.6.2/mex-1.6.2.mar": "pkg:maven/org.apache.axis2/mex@1.6.2?type=mar", "http://central.maven.org/maven2/servicemix/servicemix/1.0/servicemix-1.0-src.zip": "pkg:maven/servicemix/servicemix@1.0?classifier=src&type=zip", "http://central.maven.org/maven2/org/apache/yoko/yoko/1.0/yoko-1.0.pom": "pkg:maven/org.apache.yoko/yoko@1.0?type=pom", "https://registry.yarnpkg.com/@invisionag/": null, "https://registry.yarnpkg.com/@invisionag": null, "https://registry.yarnpkg.com/@invisionag/eslint-config-ivx": "pkg:npm/%40invisionag/eslint-config-ivx", "https://registry.yarnpkg.com/@invisionag%2feslint-config-ivx": "pkg:npm/%40invisionag/eslint-config-ivx", "https://yarnpkg.com/package/@invisionag/": null, "https://yarnpkg.com/package/@invisionag/eslint-config-ivx": "pkg:npm/%40invisionag/eslint-config-ivx", "https://yarnpkg.com/package/@invisionag%2feslint-config-ivx": "pkg:npm/%40invisionag/eslint-config-ivx", "https://www.yarnpkg.com/package/@invisionag/": null, "https://www.yarnpkg.com/package/@invisionag": null, "https://www.yarnpkg.com/package/@invisionag/eslint-config-ivx": "pkg:npm/%40invisionag/eslint-config-ivx", "https://www.yarnpkg.com/package/@invisionag%2feslint-config-ivx": "pkg:npm/%40invisionag/eslint-config-ivx", "https://registry.npmjs.org/automatta/-/automatta-0.0.1.tgz": "pkg:npm/automatta@0.0.1", "http://registry.npmjs.org/1to2/-/1to2-1.0.0.tgz": "pkg:npm/1to2@1.0.0", "http://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz": "pkg:npm/abbrev@1.0.9", "http://registry.npmjs.org/accepts/-/accepts-1.2.2.tgz": "pkg:npm/accepts@1.2.2", "http://registry.npmjs.org/acorn/-/acorn-0.11.0.tgz": "pkg:npm/acorn@0.11.0", "http://registry.npmjs.org/co/-/co-4.6.0.tgz": "pkg:npm/co@4.6.0", "http://registry.npmjs.org/d/-/d-0.1.1.tgz": "pkg:npm/d@0.1.1", "http://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz": "pkg:npm/functional-red-black-tree@1.0.1", "http://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz": "pkg:npm/json-stable-stringify-without-jsonify@1.0.1", "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz": "pkg:npm/ms@0.7.1", "http://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz": "pkg:npm/validate-npm-package-license@3.0.1", "https://registry.npmjs.org/@invisionag/eslint-config-ivx/-/eslint-config-ivx-0.0.2.tgz": "pkg:npm/%40invisionag/eslint-config-ivx@0.0.2", "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz": "pkg:npm/fast-json-stable-stringify@2.0.0", "https://registry.npmjs.org/q/-/q-1.5.1.tgz": "pkg:npm/q@1.5.1", "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz": "pkg:npm/remove-trailing-separator@1.1.0", "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz": "pkg:npm/wide-align@1.1.2", "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz": "pkg:npm/widest-line@2.0.0", "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz": "pkg:npm/write-file-atomic@2.3.0", "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz": "pkg:npm/xdg-basedir@3.0.0", "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz": "pkg:npm/yallist@2.1.2", "https://registry.npmjs.org/@theia/plugin-ext/-/plugin-ext-0.9.0-next.007f41ae.tgz": "pkg:npm/%40theia/plugin-ext@0.9.0-next.007f41ae", "https://registry.npmjs.org/@esbuild/freebsd-arm64/0.21.5": "pkg:npm/%40esbuild/freebsd-arm64@0.21.5", "https://npmjs.com/package/abbrev": "pkg:npm/abbrev", "https://npmjs.com/package/accepts/v/1.3.7": "pkg:npm/accepts@1.3.7", "https://npmjs.com/package/@angular/cli": "pkg:npm/%40angular/cli", "https://npmjs.com/package/": null, "https://www.npmjs.com/package/abbrev": "pkg:npm/abbrev", "https://www.npmjs.com/package/accepts/v/1.3.7": "pkg:npm/accepts@1.3.7", "https://www.npmjs.com/package/@angular/cli": "pkg:npm/%40angular/cli", "https://www.npmjs.com/package/": null, "https://npmjs.org/package/abbrev": "pkg:npm/abbrev", "https://npmjs.org/package/accepts/v/1.3.7": "pkg:npm/accepts@1.3.7", "https://npmjs.org/package/@angular/cli": "pkg:npm/%40angular/cli", "https://npmjs.org/package": null, "https://npmjs.org/package/": null, "https://www.npmjs.org/package/abbrev": "pkg:npm/abbrev", "https://www.npmjs.org/package/accepts/v/1.3.7": "pkg:npm/accepts@1.3.7", "https://www.npmjs.org/package/@angular/cli": "pkg:npm/%40angular/cli", "https://www.npmjs.org/package": null, "https://www.npmjs.org/package/": null, "http://rubygems.org/downloads/": null, "http://rubygems.org/downloads/macaddr-1.6.1": null, "http://rubygems.org/downloads/macaddr-1.6.1.gem": "pkg:gem/macaddr@1.6.1", "http://rubygems.org/downloads/open4-1.3.0.gem": "pkg:gem/open4@1.3.0", "https://rubygems.org/downloads/actionmailer-4.0.3.gem": "pkg:gem/actionmailer@4.0.3", "https://rubygems.org/downloads/activerecord-deprecated_finders-1.0.3.gem": "pkg:gem/activerecord-deprecated_finders@1.0.3", "https://rubygems.org/downloads/ejs-1.1.1.gem": "pkg:gem/ejs@1.1.1", "https://rubygems.org/downloads/eventmachine-0.12.11.cloudfoundry.3.gem": "pkg:gem/eventmachine@0.12.11.cloudfoundry.3", "https://rubygems.org/downloads/ffi-1.9.3.gem": "pkg:gem/ffi@1.9.3", "https://rubygems.org/downloads/jwt-0.1.8.gem": "pkg:gem/jwt@0.1.8", "https://rubygems.org/downloads/ref-1.0.5.gem": "pkg:gem/ref@1.0.5", "https://rubygems.org/downloads/talentbox-delayed_job_sequel-4.0.0.gem": "pkg:gem/talentbox-delayed_job_sequel@4.0.0", "https://rubygems.org/downloads/unf-0.1.3.gem": "pkg:gem/unf@0.1.3", "https://rubygems.org/downloads/yajl-ruby-1.2.0.gem": "pkg:gem/yajl-ruby@1.2.0", "https://rubygems.org/gems/i18n-js-3.0.11.gem": "pkg:gem/i18n-js@3.0.11", "https://packagist.org/packages/webmozart/assert":"pkg:composer/webmozart/assert", "https://packagist.org/packages/guzzlehttp/psr7#2.6.1":"pkg:composer/guzzlehttp/psr7@2.6.1", "https://packagist.org/packages/symfony/process#v7.0.0-BETA3":"pkg:composer/symfony/process@v7.0.0-BETA3", "https://pypi.org/packages/source/z/zc.recipe.egg/zc.recipe.egg-2.0.0.tar.gz": "pkg:pypi/zc.recipe.egg@2.0.0", "https://pypi.org/project/widgetsnbextension": "pkg:pypi/widgetsnbextension", "https://pypi.org/project/widgetsnbextension/3.0.7/": "pkg:pypi/widgetsnbextension@3.0.7", "https://pypi.org/project/widgetsnbextension/3.0.7/#files": "pkg:pypi/widgetsnbextension@3.0.7", "https://pypi.python.org/project/widgetsnbextension/3.0.7/": "pkg:pypi/widgetsnbextension@3.0.7", "https://pypi.python.org/packages/source/z/zc.recipe.egg/zc.recipe.egg-2.0.0.tar.gz": "pkg:pypi/zc.recipe.egg@2.0.0", "https://pypi.python.org/packages/source/p/python-openid/python-openid-2.2.5.zip": "pkg:pypi/python-openid@2.2.5", "https://pypi.python.org/packages/38/e2/b23434f4030bbb1af3bcdbb2ecff6b11cf2e467622446ce66a08e99f2ea9/pluggy-0.4.0.zip#md5=447a92368175965d2fbacaef9f3df842": "pkg:pypi/pluggy@0.4.0", "https://pypi.python.org/packages/py2.py3/w/wheel/bad-wheel-name-any.whl": null, "https://pypi.python.org/packages/py2.py3/w/wheel/wheel-0.29.0-py2.py3-none-any.whl": "pkg:pypi/wheel@0.29.0", "https://pypi.python.org/packages/py2.py3/w/wheel/wheel-0.29.0-py2.py3-none-any.whl#md5=d7db45db5c131af262b8ffccde46a88a": "pkg:pypi/wheel@0.29.0", "https://files.pythonhosted.org/packages/87/44/0fa8e9d0cccb8eb86fc1b5170208229dc6d6e9fd6e57ea1fe19cbeea68f5/aboutcode_toolkit-3.4.0rc1-py2.py3-none-any.whl": "pkg:pypi/aboutcode-toolkit@3.4.0rc1", "https://files.pythonhosted.org/packages/7f/cf/12d4611fc67babd4ae250c9e8249c5650ae1933395488e9e7e3562b4ff24/amqp-2.3.2-py2.py3-none-any.whl#sha256=eed41946890cd43e8dee44a316b85cf6fee5a1a34bb4a562b660a358eb529e1b": "pkg:pypi/amqp@2.3.2", "https://pypi.python.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl#md5=5e7a4e296b3212da2ff11017675d7a4d": "pkg:pypi/click@6.7", "https://pypi.python.org/packages/f6/ae/bbc6a204f33d9d57c798fb3857a072cd14b836792244eea4b446fdb674c6/pycryptodome-3.4.7-cp27-cp27m-win32.whl#md5=78b341de1cd686077745cd9e3a93d8d3": "pkg:pypi/pycryptodome@3.4.7", "https://pypi.python.org/packages/bd/e8/ea44ba5357a0b4fd16e5fb60c355fc8722eae31b93d7597eec50f7c35a52/pycryptodome-3.4.7-cp27-cp27m-win_amd64.whl#md5=f20bb847322baf7ae24700e5cbb15e07": "pkg:pypi/pycryptodome@3.4.7", "https://pypi.python.org/packages/1e/75/8005d086cac4cc41d3b320d338972c5e5c6a21f88472f21ac9d0e031d300/pyahocorasick-1.1.4.tar.bz2#md5=ad445b6648dc06e9040705ce1ccb4384": "pkg:pypi/pyahocorasick@1.1.4", "https://pypi.python.org/packages/2.6/t/threadpool/threadpool-1.2.7-py2.6.egg": "pkg:pypi/threadpool@1.2.7-py2.6", "https://pypi.python.org/packages/any/s/setuptools/setuptools-0.6c11-1.src.rpm": "pkg:pypi/setuptools@0.6c11-1.src", "https://files.pythonhosted.org/packages/84/d8/451842a5496844bb5c7634b231a2e4caf0d867d2e25f09b840d3b07f3d4b/multi_key_dict-2.0.win32.exe": "pkg:pypi/multi-key-dict@2.0.win32", "https://pypi.python.org/packages/source/d/django-contrib-comments/django-contrib-comments-1.5.tar.gz": "pkg:pypi/django-contrib-comments@1.5", "https://files.pythonhosted.org/packages/40/90/df4cb5541c4f5016bbbe04dd09135c7f5af294efa3421f9ab6332cf30dc2/zc.buildout.languageserver-0.6.2.tar.gz": "pkg:pypi/zc.buildout.languageserver@0.6.2", "https://files.pythonhosted.org/packages/b0/42/cac00d0570ff45c8d3b66aa32bf1aba7a527e5908123b0164e42f6af6ae1/zc.buildout.languageserver-0.6.2-py3-none-any.whl": "pkg:pypi/zc.buildout.languageserver@0.6.2", "http://nuget.org/packages/EntityFramework/4.2.0.0": "pkg:nuget/EntityFramework@4.2.0.0", "http://www.nuget.org/packages/SharpGIS.GZipWebClient/1.2.0": "pkg:nuget/SharpGIS.GZipWebClient@1.2.0", "https://www.nuget.org/api/v2/package/Newtonsoft.Json/11.0.1": "pkg:nuget/Newtonsoft.Json@11.0.1", "http://www.nuget.org/api/v2/package/EntityFramework/6.1.0": "pkg:nuget/EntityFramework@6.1.0", "https://www.nuget.org/api/v2/package/MvvmLightLibs/4.1.23": "pkg:nuget/MvvmLightLibs@4.1.23", "https://www.nuget.org/api/v2/package/Twilio/3.4.1": "pkg:nuget/Twilio@3.4.1", "https://api.nuget.org/v3-flatcontainer/newtonsoft.json/10.0.1/newtonsoft.json.10.0.1.nupkg": "pkg:nuget/newtonsoft.json@10.0.1", "http://master.dl.sourceforge.net/project/zznotes/zznotes/1.1.2/zznotes-1.1.2.tar.gz": "pkg:sourceforge/zznotes/zznotes@1.1.2", "http://master.dl.sourceforge.net/project/zapping/zvbi/0.2.35/zvbi-0.2.35.tar.bz2": "pkg:sourceforge/zapping/zvbi@0.2.35", "http://master.dl.sourceforge.net/project/libpng/zlib/1.2.3/zlib-1.2.3.tar.bz2": "pkg:sourceforge/libpng/zlib@1.2.3", "http://master.dl.sourceforge.net/project/xmlstar/xmlstarlet/1.0.0/xmlstarlet-1.0.0-1.src.rpm": "pkg:sourceforge/xmlstar/xmlstarlet@1.0.0", "http://master.dl.sourceforge.net/project/wxmozilla/wxMozilla/0.5.5/wxMozilla-0.5.5.exe": "pkg:sourceforge/wxmozilla/wxMozilla@0.5.5", "http://iweb.dl.sourceforge.net/project/sblim/sblim-cim-client2/2.2.5/sblim-cim-client2-2.2.5-src.zip": "pkg:sourceforge/sblim/sblim-cim-client2@2.2.5", "http://master.dl.sourceforge.net/project/zinnia/zinnia-win32/0.06/zinnia-win32-0.06.zip": "pkg:sourceforge/zinnia/zinnia-win32@0.06", "http://iweb.dl.sourceforge.net/project/findbugs/findbugs/1.3.4/findbugs-1.3.4.tar.gz/": "pkg:sourceforge/findbugs?download_url=http://iweb.dl.sourceforge.net/project/findbugs/findbugs/1.3.4/findbugs-1.3.4.tar.gz/", "http://master.dl.sourceforge.net/project/arestc/net/sf/arestc/arestc/0.1.4/arestc-0.1.4-javadoc.jar": "pkg:sourceforge/arestc?download_url=http://master.dl.sourceforge.net/project/arestc/net/sf/arestc/arestc/0.1.4/arestc-0.1.4-javadoc.jar", "http://master.dl.sourceforge.net/project/intraperson/OldFiles/intraperson/0.28/intraperson-0.28.tar.gz": "pkg:sourceforge/intraperson/intraperson@0.28", "http://master.dl.sourceforge.net/project/pwiki/pwiki/0.1.2/0.1.2.zip": "pkg:sourceforge/pwiki?download_url=http://master.dl.sourceforge.net/project/pwiki/pwiki/0.1.2/0.1.2.zip", "http://master.dl.sourceforge.net/project/iswraid/iswraid/0.1.4.3/2.4.28-pre3-iswraid.patch.gz": "pkg:sourceforge/iswraid?download_url=http://master.dl.sourceforge.net/project/iswraid/iswraid/0.1.4.3/2.4.28-pre3-iswraid.patch.gz", "http://master.dl.sourceforge.net/project/aloyscore/aloyscore/0.1a1%20stable/0.1a1_stable_AloysCore.zip": "pkg:sourceforge/aloyscore?download_url=http://master.dl.sourceforge.net/project/aloyscore/aloyscore/0.1a1%2520stable/0.1a1_stable_AloysCore.zip", "http://master.dl.sourceforge.net/project/myenterprise/OldFiles/1.0.0.2.MyEnterprise.Source.zip": "pkg:sourceforge/myenterprise?download_url=http://master.dl.sourceforge.net/project/myenterprise/OldFiles/1.0.0.2.MyEnterprise.Source.zip", "http://master.dl.sourceforge.net/project/wxhaskell/wxhaskell/wxhaskell-0.9/wxhaskell-src-0.9.zip": "pkg:sourceforge/wxhaskell?download_url=http://master.dl.sourceforge.net/project/wxhaskell/wxhaskell/wxhaskell-0.9/wxhaskell-src-0.9.zip", "http://master.dl.sourceforge.net/project/a2freedom/A2/1.2/a2freedom-1.2.zip": "pkg:sourceforge/a2freedom?download_url=http://master.dl.sourceforge.net/project/a2freedom/A2/1.2/a2freedom-1.2.zip", "http://master.dl.sourceforge.net/project/tinyos/OldFiles/tinyos/1.1.0/tinyos-1.1.0.tar.gz": "pkg:sourceforge/tinyos/tinyos@1.1.0", "http://master.dl.sourceforge.net/project/urlchecker/lu/ng/urlchecker/urlchecker/1.7/urlchecker-1.7-javadoc.jar": "pkg:sourceforge/urlchecker?download_url=http://master.dl.sourceforge.net/project/urlchecker/lu/ng/urlchecker/urlchecker/1.7/urlchecker-1.7-javadoc.jar", "http://master.dl.sourceforge.net/project/zclasspath/maven2/org/zclasspath/zclasspath/1.5/zclasspath-1.5.jar": "pkg:sourceforge/zclasspath?download_url=http://master.dl.sourceforge.net/project/zclasspath/maven2/org/zclasspath/zclasspath/1.5/zclasspath-1.5.jar", "http://master.dl.sourceforge.net/project/googleimagedown/project/v1.1/GoogleImageDownloader-v1.1-src.tar.bz2": "pkg:sourceforge/googleimagedown?download_url=http://master.dl.sourceforge.net/project/googleimagedown/project/v1.1/GoogleImageDownloader-v1.1-src.tar.bz2", "https://sourceforge.net/projects/scribus/files/scribus/1.6.0/scribus-1.6.0.tar.gz/download": "pkg:sourceforge/scribus@1.6.0", "https://sourceforge.net/projects/turbovnc/files/3.1/turbovnc-3.1.tar.gz/download": "pkg:sourceforge/turbovnc@3.1", "https://sourceforge.net/projects/ventoy/files/v1.0.96/Ventoy%201.0.96%20release%20source%20code.tar.gz/download": "pkg:sourceforge/ventoy@1.0.96", "https://sourceforge.net/projects/geoserver/files/GeoServer/2.23.4/geoserver-2.23.4-war.zip/download": "pkg:sourceforge/geoserver@2.23.4", "https://sourceforge.net/projects/spacesniffer/files/spacesniffer_1_3_0_2.zip/download": "pkg:sourceforge/spacesniffer@1_3_0_2", "https://crates.io/api/v1/crates/rand/0.7.2/download": "pkg:cargo/rand@0.7.2", "https://crates.io/api/v1/crates/clap/2.33.0/download": "pkg:cargo/clap@2.33.0", "https://crates.io/api/v1/crates/structopt/0.3.11/download": "pkg:cargo/structopt@0.3.11", "https://github.com/TG1999/fetchcode/tree/documentation/fetchcode": "pkg:github/tg1999/fetchcode@documentation#fetchcode", "https://github.com/nexB/scancode-toolkit/tree/develop/plugins/scancode-ctags-macosx_10_9_intel": "pkg:github/nexb/scancode-toolkit@develop#plugins/scancode-ctags-macosx_10_9_intel", "https://github.com/package-url/packageurl-js/tree/master/test/data": "pkg:github/package-url/packageurl-js@master#test/data", "https://github.com/package-url/packageurl-js/tree/master": "pkg:github/package-url/packageurl-js@master", "https://github.com/package-url/packageurl-js": "pkg:github/package-url/packageurl-js", "https://github.com/TG1999": null, "https://github.com/TG1999/fetchcode/tree": "pkg:github/tg1999/fetchcode", "https://github.com/TG1999/fetchcode/master": "pkg:github/tg1999/fetchcode@master", "https://github.com/TG1999/fetchcode/fetchcode/src": "pkg:github/tg1999/fetchcode@fetchcode#src", "https://github.com/NEXB/SCANCODE-TOOLKIT/tree/develop/PLUGINS/scancode-ctags-macosx_10_9_intel": "pkg:github/nexb/scancode-toolkit@develop#PLUGINS/scancode-ctags-macosx_10_9_intel", "https://github.com/NEXB/SCANCODE-TOOLKIT/tree/DEVELOP/PLUGINS/scancode-ctags-macosx_10_9_intel": "pkg:github/nexb/scancode-toolkit@DEVELOP#PLUGINS/scancode-ctags-macosx_10_9_intel", "https://github.com/apache/nifi/archive/refs/tags/rel/nifi-2.0.0-M3.tar.gz": "pkg:github/apache/nifi@rel/nifi-2.0.0-M3", "https://raw.githubusercontent.com/volatilityfoundation/dwarf2json/master/LICENSE.txt": "pkg:github/volatilityfoundation/dwarf2json@master#LICENSE.txt", "https://raw.githubusercontent.com/LeZuse/flex-sdk/master/frameworks/projects/mx/src/mx/containers/accordionClasses/AccordionHeader.as": "pkg:github/lezuse/flex-sdk@master#frameworks/projects/mx/src/mx/containers/accordionClasses/AccordionHeader.as", "https://raw.githubusercontent.com/NCIP/lexevs/master/lgSharedLibraries/jettison/jettison-1.1.jar": "pkg:github/ncip/lexevs@master#lgSharedLibraries/jettison/jettison-1.1.jar", "https://raw.githubusercontent.com/jgallen23/routie/master/dist/routie.min.js": "pkg:github/jgallen23/routie@master#dist/routie.min.js", "https://raw.githubusercontent.com/jquery/jquery-ui/1.8.14/ui/jquery.ui.mouse.js": "pkg:github/jquery/jquery-ui@1.8.14#ui/jquery.ui.mouse.js", "https://raw.githubusercontent.com/mariopacio/projeto.dprf.info/master/assets/plugins/xbreadcrumbs/xbreadcrumbs.js": "pkg:github/mariopacio/projeto.dprf.info@master#assets/plugins/xbreadcrumbs/xbreadcrumbs.js", "https://api.github.com/repos/nexB/scancode-toolkit": "pkg:github/nexb/scancode-toolkit", "https://api.github.com/repos/nexB/scancode-toolkit/commits/40593af0df6c8378d2b180324b97cb439fa11d66": "pkg:github/nexb/scancode-toolkit@40593af0df6c8378d2b180324b97cb439fa11d66", "https://codeload.github.com/nexB/scancode-toolkit/tar.gz/3.1.1": "pkg:github/nexb/scancode-toolkit@3.1.1", "https://codeload.github.com/nexB/scancode-toolkit/tar.gz/v3.1.1": "pkg:github/nexb/scancode-toolkit@v3.1.1", "https://codeload.github.com/nexB/scancode-toolkit/zip/3.1.1": "pkg:github/nexb/scancode-toolkit@3.1.1", "https://codeload.github.com/nexB/scancode-toolkit/zip/v3.1.1": "pkg:github/nexb/scancode-toolkit@v3.1.1", "https://codeload.github.com/nexB/scancode.io/tar.gz/1.0": "pkg:github/nexb/scancode.io@1.0", "https://codeload.github.com/nexB/scancode.io/tar.gz/V1.0": "pkg:github/nexb/scancode.io@V1.0", "https://codeload.github.com/berngp/grails-rest/zip/release/0.7": "pkg:github/berngp/grails-rest@0.7", "https://codeload.github.com/eclipse/m2e-core/zip/releases/1.2/1.2.0.20120903-1050": "pkg:github/eclipse/m2e-core@1.2.0.20120903-1050", "https://github.com/nexB/scancode-toolkit/archive/3.1.1.zip": "pkg:github/nexb/scancode-toolkit@3.1.1", "https://github.com/nexB/scancode-toolkit/archive/v3.1.1.zip": "pkg:github/nexb/scancode-toolkit@v3.1.1", "https://github.com/pypa/get-virtualenv/raw/20.0.31/public/virtualenv.pyz": "pkg:github/pypa/get-virtualenv@20.0.31#public/virtualenv.pyz", "https://github.com/pypa/get-virtualenv/raw/v20.0.31/public/virtualenv.pyz": "pkg:github/pypa/get-virtualenv@v20.0.31#public/virtualenv.pyz", "https://github.com/fanf2/unifdef/blob/master/unifdef.c": "pkg:github/fanf2/unifdef@master#unifdef.c", "https://github.com/joebeeson/amazon/blob/master/vendors/aws-sdk/sdk.class.php": "pkg:github/joebeeson/amazon@master#vendors/aws-sdk/sdk.class.php", "https://github.com/modelfabric/yowl/blob/master/bin/yowl": "pkg:github/modelfabric/yowl@master#bin/yowl", "https://github.com/syncthing/syncthing/releases/download/v0.14.36/syncthing-source-v0.14.36.tar.gz": "pkg:github/syncthing/syncthing@v0.14.36?download_url=https://github.com/syncthing/syncthing/releases/download/v0.14.36/syncthing-source-v0.14.36.tar.gz", "https://github.com/torakiki/pdfsam/releases/download/v3.3.2/pdfsam-3.3.2-bin.zip": "pkg:github/torakiki/pdfsam@v3.3.2?download_url=https://github.com/torakiki/pdfsam/releases/download/v3.3.2/pdfsam-3.3.2-bin.zip", "https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz": "pkg:github/yarnpkg/yarn@v1.3.2?download_url=https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz", "https://github.com/z3APA3A/3proxy/releases/download/0.8.11/3proxy-0.8.11.zip": "pkg:github/z3apa3a/3proxy@0.8.11?download_url=https://github.com/z3APA3A/3proxy/releases/download/0.8.11/3proxy-0.8.11.zip", "https://github.com/FasterXML/woodstox/archive/woodstox-core-5.0.2.zip": "pkg:github/fasterxml/woodstox@core-5.0.2", "https://github.com/adobe-fonts/source-code-pro/archive/2.030R-ro/1.050R-it.tar.gz": "pkg:github/adobe-fonts/source-code-pro@1.050R-it", "https://github.com/cassandra-rb/simple_uuid/archive/simple_uuid-0.3.0.zip": "pkg:github/cassandra-rb/simple_uuid@0.3.0", "https://github.com/djberg96/sys-filesystem/archive/sys-filesystem-1.1.4.zip": "pkg:github/djberg96/sys-filesystem@1.1.4", "https://github.com/freedesktop/xorg-intel-gpu-tools/archive/igt-gpu-tools-1.23.tar.gz": "pkg:github/freedesktop/xorg-intel-gpu-tools@igt-gpu-tools-1.23", "https://github.com/grnet/synnefo/archive/synnefo/v0.12.3.zip": "pkg:github/grnet/synnefo@v0.12.3", "https://github.com/n8n-io/n8n/archive/n8n@0.23.0.tar.gz": "pkg:github/n8n-io/n8n@0.23.0", "https://github.com/nginx/nginx/archive/branches/stable-0.7.zip": "pkg:github/nginx/nginx@stable-0.7", "https://github.com/swagger-api/swagger-codegen/archive/refs/tags/v3.0.25.tar.gz": "pkg:github/swagger-api/swagger-codegen@v3.0.25", "https://github.com/bareos/bareos/archive/Release/16.2.6.zip": "pkg:github/bareos/bareos@16.2.6", "https://github.com/hessu/bchunk/archive/release/1.2.2.tar.gz": "pkg:github/hessu/bchunk@1.2.2", "https://github.com/downloads/mozilla/rhino/rhino1_7R4.zip": "pkg:github/mozilla/rhino@1_7R4", "https://github.com/pombredanne/schematics.git": "pkg:github/pombredanne/schematics", "https://github.com/jgoerzen/configfile/archive/upstream/1.1.4.tar.gz": "pkg:github/jgoerzen/configfile@1.1.4", "https://github.com/JetBrains/intellij-community/archive/idea/173.4710.11.zip": "pkg:github/jetbrains/intellij-community@173.4710.11", "https://github.com/knime/knime-core/archive/analytics-platform/3.6.0.zip": "pkg:github/knime/knime-core@3.6.0", "https://github.com/renozao/NMF/archive/hotfix/0.20.1.zip": "pkg:github/renozao/nmf@0.20.1", "https://github.com/apache/cordova-osx/archive/rel/4.0.0.zip": "pkg:github/apache/cordova-osx@4.0.0", "https://github.com/sehmaschine/django-grappelli/archive/stable/2.13.x.zip": "pkg:github/sehmaschine/django-grappelli@2.13.x", "https://bitbucket.org/TG1999/first_repo/src/qa/": "pkg:bitbucket/tg1999/first_repo@qa", "https://bitbucket.org/TG1999/first_repo/src/QA/": "pkg:bitbucket/tg1999/first_repo@QA", "https://bitbucket.org/TG1999/first_repo/": "pkg:bitbucket/tg1999/first_repo", "https://bitbucket.org/TG1999/FIRST_REPO/": "pkg:bitbucket/tg1999/first_repo", "https://bitbucket.org/TG1999/": null, "https://bitbucket.org/TG1999/first_repo/src/": "pkg:bitbucket/tg1999/first_repo", "https://bitbucket.org/TG1999/first_repo/src/master/new_folder/": "pkg:bitbucket/tg1999/first_repo@master#new_folder", "https://bitbucket.org/TG1999/first_repo/src/MASTER/NEW_FOLDER/": "pkg:bitbucket/tg1999/first_repo@MASTER#NEW_FOLDER", "https://bitbucket.org/TG1999/first_repo/new_folder/": "pkg:bitbucket/tg1999/first_repo@new_folder", "https://bitbucket.org/multicoreware/x265/downloads/x265_2.6.tar.gz": "pkg:bitbucket/multicoreware/x265?download_url=https://bitbucket.org/multicoreware/x265/downloads/x265_2.6.tar.gz", "https://bitbucket.org/robeden/trove/downloads/trove-3.0.3.zip": "pkg:bitbucket/robeden/trove?download_url=https://bitbucket.org/robeden/trove/downloads/trove-3.0.3.zip", "https://bitbucket.org/efotinis/deskpins/downloads/DeskPins-1.31-setup.exe": "pkg:bitbucket/efotinis/deskpins?download_url=https://bitbucket.org/efotinis/deskpins/downloads/DeskPins-1.31-setup.exe", "https://gitlab.com/TG1999/firebase/-/tree/1a122122/views": "pkg:gitlab/tg1999/firebase@1a122122#views", "https://gitlab.com/tg1999/firebase": "pkg:gitlab/tg1999/firebase", "https://gitlab.com/TG1999/firebase/-/": "pkg:gitlab/tg1999/firebase", "https://gitlab.com/TG1999/firebase/-/tree": "pkg:gitlab/tg1999/firebase", "https://gitlab.com/TG1999/firebase/-/master": "pkg:gitlab/tg1999/firebase", "https://gitlab.com/TG1999/firebase/tree/": "pkg:gitlab/tg1999/firebase", "https://gitlab.com/TG1999/firebase/master": "pkg:gitlab/tg1999/firebase@master", "https://gitlab.com/TG1999/firebase/-/tree/master": "pkg:gitlab/tg1999/firebase@master", "https://gitlab.com/tg1999/Firebase/-/tree/master": "pkg:gitlab/tg1999/firebase@master", "https://gitlab.com/TG1999/FIREBASE": "pkg:gitlab/tg1999/firebase", "https://gitlab.com/hoppr/hoppr/-/archive/v1.11.1-dev.2/hoppr-v1.11.1-dev.2.tar.gz": "pkg:gitlab/hoppr/hoppr@v1.11.1-dev.2", "https://hackage.haskell.org/package/a50-0.5/a50-0.5.tar.gz": "pkg:hackage/a50@0.5", "https://hackage.haskell.org/package/AC-HalfInteger-1.2.1/AC-HalfInteger-1.2.1.tar.gz": "pkg:hackage/AC-HalfInteger@1.2.1", "https://hackage.haskell.org/package/3d-graphics-examples-0.0.0.2/3d-graphics-examples-0.0.0.2.tar.gz": "pkg:hackage/3d-graphics-examples@0.0.0.2", "https://hackage.haskell.org/package/cli-extras-0.2.0.0": "pkg:hackage/cli-extras@0.2.0.0", "https://hackage.haskell.org/package/cli-extras-0.2.0.0/": "pkg:hackage/cli-extras@0.2.0.0", "https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz": "pkg:generic/lxc-master.tar.gz?download_url=https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz", "http://apt-rpm.org/": null, "": null, "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-notifier/android-notifier-desktop-0.5.1-1.i386.rpm": "pkg:generic/code.google.com/android-notifier?download_url=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-notifier/android-notifier-desktop-0.5.1-1.i386.rpm", "https://cran.r-project.org/src/contrib/jsonlite_1.8.8.tar.gz": "pkg:cran/jsonlite@1.8.8", "https://packagemanager.rstudio.com/cran/2022-06-23/src/contrib/curl_4.3.2.tar.gz": "pkg:cran/curl@4.3.2?download_url=https://packagemanager.rstudio.com/cran/2022-06-23/src/contrib/curl_4.3.2.tar.gz" } packageurl-python-0.17.5/tests/contrib/test_get_path_segments.py000066400000000000000000000033711504466056600251740ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. from packageurl.contrib.url2purl import get_path_segments def test_parsing_with_quoted_uri(): url = "https://github.com/Hello+world%21/Hello%2Bworld%2521/master" segments = get_path_segments(url) assert "Hello world!" == segments[0] assert "Hello+world%21" == segments[1] def test_parsing_empty_string(): url = "" segments = get_path_segments(url) assert [] == segments def test_parsing_with_one_segment(): url = "https://github.com/TG1999" segments = get_path_segments(url) assert ["TG1999"] == segments packageurl-python-0.17.5/tests/contrib/test_purl2url.py000066400000000000000000000332251504466056600232640ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. import pytest from packageurl.contrib import purl2url def test_purl2url_get_repo_url(): purls_url = { "pkg:github/tg1999/fetchcode": "https://github.com/tg1999/fetchcode", "pkg:github/tg1999/fetchcode@master": "https://github.com/tg1999/fetchcode/tree/master", "pkg:github/tg1999/fetchcode@master#tests": "https://github.com/tg1999/fetchcode/tree/master", "pkg:github/nexb/scancode-toolkit@3.1.1?version_prefix=v": "https://github.com/nexb/scancode-toolkit/tree/v3.1.1", "pkg:github/tg1999": None, "pkg:cargo/rand@0.7.2": "https://crates.io/crates/rand/0.7.2", "pkg:cargo/abc": "https://crates.io/crates/abc", "pkg:gem/bundler@2.3.23": "https://rubygems.org/gems/bundler/versions/2.3.23", "pkg:rubygems/bundler@2.3.23": "https://rubygems.org/gems/bundler/versions/2.3.23", "pkg:rubygems/package-name": "https://rubygems.org/gems/package-name", "pkg:bitbucket/birkenfeld/pygments-main": "https://bitbucket.org/birkenfeld/pygments-main", "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c": "https://bitbucket.org/birkenfeld/pygments-main", "pkg:bitbucket/birkenfeld/pygments-main@master#views": "https://bitbucket.org/birkenfeld/pygments-main", "pkg:bitbucket/birkenfeld": None, "pkg:gitlab/tg1999/firebase@master": "https://gitlab.com/tg1999/firebase", "pkg:gitlab/tg1999/firebase@1a122122#views": "https://gitlab.com/tg1999/firebase", "pkg:gitlab/tg1999/firebase": "https://gitlab.com/tg1999/firebase", "pkg:gitlab/tg1999": None, "pkg:gitlab/hoppr/hoppr@v1.11.1-dev.2": "https://gitlab.com/hoppr/hoppr", "pkg:pypi/sortedcontainers": "https://pypi.org/project/sortedcontainers/", "pkg:pypi/sortedcontainers@2.4.0": "https://pypi.org/project/sortedcontainers/2.4.0/", "pkg:pypi/packageurl_python": "https://pypi.org/project/packageurl-python/", "pkg:composer/psr/log": "https://packagist.org/packages/psr/log", "pkg:composer/psr/log@1.1.3": "https://packagist.org/packages/psr/log#1.1.3", "pkg:npm/is-npm": "https://www.npmjs.com/package/is-npm", "pkg:npm/@clayui/tooltip@3.1.0": "https://www.npmjs.com/package/@clayui/tooltip/v/3.1.0", "pkg:npm/%40clayui/tooltip@3.1.0": "https://www.npmjs.com/package/@clayui/tooltip/v/3.1.0", "pkg:npm/%40esbuild/freebsd-arm64@0.21.5": "https://www.npmjs.com/package/@esbuild/freebsd-arm64/v/0.21.5", "pkg:nuget/System.Text.Json": "https://www.nuget.org/packages/System.Text.Json", "pkg:nuget/System.Text.Json@6.0.6": "https://www.nuget.org/packages/System.Text.Json/6.0.6", "pkg:hackage/cli-extras": "https://hackage.haskell.org/package/cli-extras", "pkg:hackage/cli-extras@0.2.0.0": "https://hackage.haskell.org/package/cli-extras-0.2.0.0", "pkg:golang/xorm.io/xorm": "https://pkg.go.dev/xorm.io/xorm", "pkg:golang/xorm.io/xorm@v0.8.2": "https://pkg.go.dev/xorm.io/xorm@v0.8.2", "pkg:golang/gopkg.in/ldap.v3@v3.1.0": "https://pkg.go.dev/gopkg.in/ldap.v3@v3.1.0", "pkg:cocoapods/AFNetworking@4.0.1": "https://cocoapods.org/pods/AFNetworking", "pkg:cocoapods/MapsIndoors@3.24.0": "https://cocoapods.org/pods/MapsIndoors", "pkg:maven/org.apache.commons/commons-io@1.3.2": "https://repo.maven.apache.org/maven2/org/apache/commons/commons-io/1.3.2", "pkg:maven/org.apache.commons/commons-io@1.3.2?repository_url=https://repo1.maven.org/maven2": "https://repo1.maven.org/maven2/org/apache/commons/commons-io/1.3.2", } for purl, url in purls_url.items(): assert url == purl2url.get_repo_url(purl) def test_purl2url_get_download_url(): purls_url = { # Generated "pkg:cargo/rand@0.7.2": "https://crates.io/api/v1/crates/rand/0.7.2/download", "pkg:gem/bundler@2.3.23": "https://rubygems.org/downloads/bundler-2.3.23.gem", "pkg:npm/is-npm@1.0.0": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", "pkg:npm/@clayui/tooltip@3.1.0": "https://registry.npmjs.org/@clayui/tooltip/-/tooltip-3.1.0.tgz", "pkg:npm/%40clayui/tooltip@3.1.0": "https://registry.npmjs.org/@clayui/tooltip/-/tooltip-3.1.0.tgz", "pkg:npm/%40esbuild/freebsd-arm64@0.21.5": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", "pkg:hackage/cli-extras@0.2.0.0": "https://hackage.haskell.org/package/cli-extras-0.2.0.0/cli-extras-0.2.0.0.tar.gz", "pkg:nuget/System.Text.Json@6.0.6": "https://www.nuget.org/api/v2/package/System.Text.Json/6.0.6", "pkg:github/nexb/scancode-toolkit@3.1.1?version_prefix=v": "https://github.com/nexb/scancode-toolkit/archive/v3.1.1.tar.gz", "pkg:github/StonyShi/reactor-netty-jersey@ac525d91ff1724395640531df08e3e4eabef207d": "https://github.com/stonyshi/reactor-netty-jersey/archive/ac525d91ff1724395640531df08e3e4eabef207d.tar.gz", "pkg:bitbucket/robeden/trove@3.0.3": "https://bitbucket.org/robeden/trove/get/3.0.3.tar.gz", "pkg:bitbucket/robeden/trove@3.0.3?version_prefix=v": "https://bitbucket.org/robeden/trove/get/v3.0.3.tar.gz", "pkg:gitlab/tg1999/firebase@1a122122": "https://gitlab.com/tg1999/firebase/-/archive/1a122122/firebase-1a122122.tar.gz", "pkg:gitlab/tg1999/firebase@1a122122?version_prefix=v": "https://gitlab.com/tg1999/firebase/-/archive/v1a122122/firebase-v1a122122.tar.gz", "pkg:gitlab/hoppr/hoppr@v1.11.1-dev.2": "https://gitlab.com/hoppr/hoppr/-/archive/v1.11.1-dev.2/hoppr-v1.11.1-dev.2.tar.gz", "pkg:maven/org.apache.commons/commons-io@1.3.2": "https://repo.maven.apache.org/maven2/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar", "pkg:maven/org.apache.commons/commons-io@1.3.2?repository_url=https://repo1.maven.org/maven2": "https://repo1.maven.org/maven2/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar", "pkg:maven/org.apache.commons/commons-io@1.3.2?type=pom": "https://repo.maven.apache.org/maven2/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.pom", "pkg:maven/org.apache.commons/commons-math3@3.6.1?classifier=sources": "https://repo.maven.apache.org/maven2/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1-sources.jar", "pkg:hex/plug@1.11.1": "https://repo.hex.pm/tarballs/plug-1.11.1.tar", "pkg:golang/xorm.io/xorm@v0.8.2": "https://proxy.golang.org/xorm.io/xorm/@v/v0.8.2.zip", "pkg:golang/gopkg.in/ldap.v3@v3.1.0": "https://proxy.golang.org/gopkg.in/ldap.v3/@v/v3.1.0.zip", "pkg:golang/example.com/M.v3@v3.1.0": "https://proxy.golang.org/example.com/!m.v3/@v/v3.1.0.zip", "pkg:golang/golang.org/x/oauth2@0.29.0": "https://proxy.golang.org/golang.org/x/oauth2/@v/v0.29.0.zip", "pkg:pub/http@0.13.3": "https://pub.dev/api/archives/http-0.13.3.tar.gz", "pkg:swift/github.com/Alamofire/Alamofire@5.4.3": "https://github.com/Alamofire/Alamofire/archive/5.4.3.zip", "pkg:swift/github.com/RxSwiftCommunity/RxFlow@2.12.4": "https://github.com/RxSwiftCommunity/RxFlow/archive/2.12.4.zip", "pkg:luarocks/luasocket@3.1.0-1": "https://luarocks.org/luasocket-3.1.0-1.src.rock", "pkg:luarocks/hisham/luafilesystem@1.8.0-1": "https://luarocks.org/luafilesystem-1.8.0-1.src.rock", "pkg:conda/absl-py@0.4.1?build=py36h06a4308_0&channel=main&subdir=linux-64&type=tar.bz2": "https://repo.anaconda.com/pkgs/main/linux-64/absl-py-0.4.1-py36h06a4308_0.tar.bz2", "pkg:alpm/arch/pacman@6.0.1-1?arch=x86_64": "https://archive.archlinux.org/packages/p/pacman/pacman-6.0.1-1-x86_64.pkg.tar.zst", "pkg:deb/debian/attr@1:2.4.48-6?arch=amd64": "https://deb.debian.org/debian/pool/main/a/attr/attr_2.4.48-6_amd64.deb", "pkg:deb/debian/attr@1:2.4.48-6?arch=amd64&repository_url=http://archive.debian.org/debian": "http://archive.debian.org/debian/pool/main/a/attr/attr_2.4.48-6_amd64.deb", "pkg:apk/acct@6.6.4-r0?arch=x86&alpine_version=v3.11&repo=main": "https://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86/acct-6.6.4-r0.apk", # From `download_url` qualifier "pkg:github/yarnpkg/yarn@1.3.2?download_url=https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz&version_prefix=v": "https://github.com/yarnpkg/yarn/releases/download/v1.3.2/yarn-v1.3.2.tar.gz", "pkg:generic/lxc-master.tar.gz?download_url=https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz": "https://salsa.debian.org/lxc-team/lxc/-/archive/master/lxc-master.tar.gz", "pkg:generic/code.google.com/android-notifier?download_url=https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-notifier/android-notifier-desktop-0.5.1-1.i386.rpm": "https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/android-notifier/android-notifier-desktop-0.5.1-1.i386.rpm", "pkg:bitbucket/robeden/trove?download_url=https://bitbucket.org/robeden/trove/downloads/trove-3.0.3.zip": "https://bitbucket.org/robeden/trove/downloads/trove-3.0.3.zip", "pkg:sourceforge/zclasspath?download_url=http://master.dl.sourceforge.net/project/zclasspath/maven2/org/zclasspath/zclasspath/1.5/zclasspath-1.5.jar": "http://master.dl.sourceforge.net/project/zclasspath/maven2/org/zclasspath/zclasspath/1.5/zclasspath-1.5.jar", "pkg:pypi/aboutcode-toolkit@3.4.0rc1?download_url=https://files.pythonhosted.org/packages/87/44/0fa8e9d0cccb8eb86fc1b5170208229dc6d6e9fd6e57ea1fe19cbeea68f5/aboutcode_toolkit-3.4.0rc1-py2.py3-none-any.whl": "https://files.pythonhosted.org/packages/87/44/0fa8e9d0cccb8eb86fc1b5170208229dc6d6e9fd6e57ea1fe19cbeea68f5/aboutcode_toolkit-3.4.0rc1-py2.py3-none-any.whl", # Not-supported "pkg:github/tg1999/fetchcode": None, "pkg:cargo/abc": None, "pkg:rubygems/package-name": None, "pkg:bitbucket/birkenfeld": None, "pkg:pypi/sortedcontainers@2.4.0": None, "pkg:composer/psr/log@1.1.3": None, } for purl, url in purls_url.items(): assert url == purl2url.get_download_url(purl) def test_purl2url_get_inferred_urls(): purls_url = { "pkg:cargo/rand@0.7.2": [ "https://crates.io/crates/rand/0.7.2", "https://crates.io/api/v1/crates/rand/0.7.2/download", ], "pkg:gem/bundler@2.3.23": [ "https://rubygems.org/gems/bundler/versions/2.3.23", "https://rubygems.org/downloads/bundler-2.3.23.gem", ], "pkg:npm/is-npm@1.0.0": [ "https://www.npmjs.com/package/is-npm/v/1.0.0", "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", ], "pkg:npm/%40clayui/tooltip@3.1.0": [ "https://www.npmjs.com/package/@clayui/tooltip/v/3.1.0", "https://registry.npmjs.org/@clayui/tooltip/-/tooltip-3.1.0.tgz", ], "pkg:hackage/cli-extras@0.2.0.0": [ "https://hackage.haskell.org/package/cli-extras-0.2.0.0", "https://hackage.haskell.org/package/cli-extras-0.2.0.0/cli-extras-0.2.0.0.tar.gz", ], "pkg:nuget/System.Text.Json@6.0.6": [ "https://www.nuget.org/packages/System.Text.Json/6.0.6", "https://www.nuget.org/api/v2/package/System.Text.Json/6.0.6", ], "pkg:cargo/abc": ["https://crates.io/crates/abc"], "pkg:github/tg1999/fetchcode": ["https://github.com/tg1999/fetchcode"], "pkg:gitlab/tg1999/firebase@1a122122": [ "https://gitlab.com/tg1999/firebase", "https://gitlab.com/tg1999/firebase/-/archive/1a122122/firebase-1a122122.tar.gz", ], "pkg:pypi/sortedcontainers@2.4.0": ["https://pypi.org/project/sortedcontainers/2.4.0/"], "pkg:cocoapods/AFNetworking@4.0.1": ["https://cocoapods.org/pods/AFNetworking"], "pkg:composer/psr/log@1.1.3": ["https://packagist.org/packages/psr/log#1.1.3"], "pkg:rubygems/package-name": ["https://rubygems.org/gems/package-name"], "pkg:maven/org.apache.commons/commons-io@1.3.2": [ "https://repo.maven.apache.org/maven2/org/apache/commons/commons-io/1.3.2", "https://repo.maven.apache.org/maven2/org/apache/commons/commons-io/1.3.2/commons-io-1.3.2.jar", ], "pkg:bitbucket/birkenfeld": [], } for purl, url in purls_url.items(): assert url == purl2url.get_inferred_urls(purl) def test_purl2url_get_repo_url_with_invalid_purls(): purls = [ "pkg:github", "pkg:cargo", "pkg:gem", "pkg:bitbucket", "pkg:gitlab", None, ] for purl in purls: with pytest.raises(Exception) as e_info: purl2url.get_repo_url(purl) assert "Invalid PURL" == e_info packageurl-python-0.17.5/tests/contrib/test_url2purl.py000066400000000000000000000063761504466056600232730ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. import io import json import os import re from unittest import TestCase from packageurl.contrib.url2purl import get_purl as purl_getter def get_purl(url): purl = purl_getter(url) return purl and str(purl.to_string()) class TestURL2PURL(TestCase): def test_get_purl_empty_string(self): self.assertEqual(None, get_purl("")) def test_get_purl_none(self): self.assertEqual(None, get_purl(None)) def test_get_purl_unroutable_uri(self): self.assertEqual(None, get_purl("dsf.example")) def python_safe(s): """ Return a name safe to use as a python function name. """ safe_chars = re.compile(r"[\W_]", re.MULTILINE) s = s.strip().lower() s = [x for x in safe_chars.split(s) if x] return "_".join(s) def get_url2purl_test_method(test_url, expected_purl): def test_method(self): self.assertEqual(expected_purl, get_purl(test_url), msg=test_url) return test_method def build_tests(clazz, test_file="url2purl.json", regen=False): """ Dynamically build test methods for Package URL inference from a JSON test file. The JSON test file is a key-sorted mapping of {test url: expected purl}. """ test_data_dir = os.path.join(os.path.dirname(__file__), "data") test_file = os.path.join(test_data_dir, test_file) with io.open(test_file, encoding="utf-8") as tests: tests_data = json.load(tests) if regen: tests_data = {test_url: get_purl(test_url) for test_url in tests_data.keys()} with io.open(test_file, "w") as regened: json.dump(tests_data, regened, indent=2) for test_url, expected_purl in sorted(tests_data.items()): test_name = f"test_url2purl_{test_url}" test_name = python_safe(test_name) test_method = get_url2purl_test_method(test_url, expected_purl) test_method.funcname = test_name # attach that method to our test class setattr(clazz, test_name, test_method) class TestURL2PURLDataDriven(TestCase): pass build_tests(clazz=TestURL2PURLDataDriven, regen=False) packageurl-python-0.17.5/tests/contrib/test_utils.py000066400000000000000000000063621504466056600226370ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. import pytest from packageurl.contrib.django.utils import purl_to_lookups from packageurl.utils import get_golang_purl def test_purl_to_lookups_without_encode(): assert purl_to_lookups( purl_str="pkg:alpine/openssl@0?arch=aarch64&distroversion=edge&reponame=main", encode=False, ) == { "type": "alpine", "name": "openssl", "version": "0", "qualifiers": { "arch": "aarch64", "distroversion": "edge", "reponame": "main", }, } def test_purl_to_lookups_with_encode(): assert purl_to_lookups( purl_str="pkg:alpine/openssl@0?arch=aarch64&distroversion=edge&reponame=main", encode=True, ) == { "type": "alpine", "name": "openssl", "version": "0", "qualifiers": "arch=aarch64&distroversion=edge&reponame=main", } def test_purl_to_lookups_include_empty_fields(): purl_str = "pkg:alpine/openssl" assert purl_to_lookups(purl_str) == { "type": "alpine", "name": "openssl", } assert purl_to_lookups(purl_str, include_empty_fields=True) == { "type": "alpine", "namespace": "", "name": "openssl", "version": "", "qualifiers": "", "subpath": "", } def test_get_golang_purl(): assert None == get_golang_purl(None) golang_purl_1 = get_golang_purl( "github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" ) assert "pkg:golang/github.com/envoyproxy/go-control-plane/envoy/config/listener/v3" == str( golang_purl_1 ) assert golang_purl_1.name == "v3" assert golang_purl_1.namespace == "github.com/envoyproxy/go-control-plane/envoy/config/listener" golang_purl_2 = get_golang_purl( go_package="github.com/grpc-ecosystem/go-grpc-middleware v1.3.0" ) assert "pkg:golang/github.com/grpc-ecosystem/go-grpc-middleware@v1.3.0" == str(golang_purl_2) with pytest.raises(Exception): get_golang_purl("github.com/envoyproxy/go-control-plane/envoy/config/listener@v3.1") packageurl-python-0.17.5/tests/data/000077500000000000000000000000001504466056600173305ustar00rootroot00000000000000packageurl-python-0.17.5/tests/data/test-suite-data.json000066400000000000000000000305261504466056600232460ustar00rootroot00000000000000[ { "description": "valid maven purl", "purl": "pkg:maven/org.apache.commons/io@1.3.4", "canonical_purl": "pkg:maven/org.apache.commons/io@1.3.4", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": "1.3.4", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "basic valid maven purl without version", "purl": "pkg:maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid go purl without version and with subpath", "purl": "pkg:GOLANG/google.golang.org/genproto#/googleapis/api/annotations/", "canonical_purl": "pkg:golang/google.golang.org/genproto#googleapis/api/annotations", "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "valid go purl with version and subpath", "purl": "pkg:GOLANG/google.golang.org/genproto@abcdedf#/googleapis/api/annotations/", "canonical_purl": "pkg:golang/google.golang.org/genproto@abcdedf#googleapis/api/annotations", "type": "golang", "namespace": "google.golang.org", "name": "genproto", "version": "abcdedf", "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "valid golang purl", "purl": "pkg:golang/github.com/nats-io/nats-server/v2/server@v1.2.9", "canonical_purl": "pkg:golang/github.com/nats-io/nats-server/v2/server@v1.2.9", "type": "golang", "namespace": "github.com/nats-io/nats-server/v2/", "name": "server", "version": "v1.2.9", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "bitbucket namespace and name should be lowercased", "purl": "pkg:bitbucket/birKenfeld/pyGments-main@244fd47e07d1014f0aed9c", "canonical_purl": "pkg:bitbucket/birkenfeld/pygments-main@244fd47e07d1014f0aed9c", "type": "bitbucket", "namespace": "birkenfeld", "name": "pygments-main", "version": "244fd47e07d1014f0aed9c", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "github namespace and name should be lowercased", "purl": "pkg:github/Package-url/purl-Spec@244fd47e07d1004f0aed9c", "canonical_purl": "pkg:github/package-url/purl-spec@244fd47e07d1004f0aed9c", "type": "github", "namespace": "package-url", "name": "purl-spec", "version": "244fd47e07d1004f0aed9c", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "debian can use qualifiers", "purl": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "canonical_purl": "pkg:deb/debian/curl@7.50.3-1?arch=i386&distro=jessie", "type": "deb", "namespace": "debian", "name": "curl", "version": "7.50.3-1", "qualifiers": {"arch": "i386", "distro": "jessie"}, "subpath": null, "is_invalid": false }, { "description": "docker uses qualifiers and hash image id as versions", "purl": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "canonical_purl": "pkg:docker/customer/dockerimage@sha256:244fd47e07d1004f0aed9c?repository_url=gcr.io", "type": "docker", "namespace": "customer", "name": "dockerimage", "version": "sha256:244fd47e07d1004f0aed9c", "qualifiers": {"repository_url": "gcr.io"}, "subpath": null, "is_invalid": false }, { "description": "Java gem can use a qualifier", "purl": "pkg:gem/jruby-launcher@1.1.2?Platform=java", "canonical_purl": "pkg:gem/jruby-launcher@1.1.2?platform=java", "type": "gem", "namespace": null, "name": "jruby-launcher", "version": "1.1.2", "qualifiers": {"platform": "java"}, "subpath": null, "is_invalid": false }, { "description": "maven often uses qualifiers", "purl": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?repositorY_url=repo.spring.io/release&classifier=sources", "canonical_purl": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=repo.spring.io/release", "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": {"classifier": "sources", "repository_url": "repo.spring.io/release"}, "subpath": null, "is_invalid": false }, { "description": "maven pom reference", "purl": "pkg:Maven/org.apache.xmlgraphics/batik-anim@1.9.1?repositorY_url=repo.spring.io/release&extension=pom", "canonical_purl": "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?extension=pom&repository_url=repo.spring.io/release", "type": "maven", "namespace": "org.apache.xmlgraphics", "name": "batik-anim", "version": "1.9.1", "qualifiers": {"extension": "pom", "repository_url": "repo.spring.io/release"}, "subpath": null, "is_invalid": false }, { "description": "maven can come with a type qualifier", "purl": "pkg:Maven/net.sf.jacob-project/jacob@1.14.3?type=dll&classifier=x86", "canonical_purl": "pkg:maven/net.sf.jacob-project/jacob@1.14.3?classifier=x86&type=dll", "type": "maven", "namespace": "net.sf.jacob-project", "name": "jacob", "version": "1.14.3", "qualifiers": {"classifier": "x86", "type": "dll"}, "subpath": null, "is_invalid": false }, { "description": "npm can be scoped", "purl": "pkg:npm/%40angular/animation@12.3.1", "canonical_purl": "pkg:npm/%40angular/animation@12.3.1", "type": "npm", "namespace": "@angular", "name": "animation", "version": "12.3.1", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "nuget names are case sensitive", "purl": "pkg:Nuget/EnterpriseLibrary.Common@6.0.1304", "canonical_purl": "pkg:nuget/EnterpriseLibrary.Common@6.0.1304", "type": "nuget", "namespace": null, "name": "EnterpriseLibrary.Common", "version": "6.0.1304", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "pypi names have special rules and not case sensitive", "purl": "pkg:PYPI/Django_package@1.11.1.dev1", "canonical_purl": "pkg:pypi/django-package@1.11.1.dev1", "type": "pypi", "namespace": null, "name": "django-package", "version": "1.11.1.dev1", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid packagist purl", "purl": "pkg:composer/guzzlehttp/promises@2.0.2", "canonical_purl": "pkg:composer/guzzlehttp/promises@2.0.2", "type": "composer", "namespace": "guzzlehttp", "name": "promises", "version": "2.0.2", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "rpm often use qualifiers", "purl": "pkg:Rpm/fedora/curl@7.50.3-1.fc25?Arch=i386&Distro=fedora-25", "canonical_purl": "pkg:rpm/fedora/curl@7.50.3-1.fc25?arch=i386&distro=fedora-25", "type": "rpm", "namespace": "fedora", "name": "curl", "version": "7.50.3-1.fc25", "qualifiers": {"arch": "i386", "distro": "fedora-25"}, "subpath": null, "is_invalid": false }, { "description": "a scheme is always required", "purl": "EnterpriseLibrary.Common@6.0.1304", "canonical_purl": "EnterpriseLibrary.Common@6.0.1304", "type": null, "namespace": null, "name": "EnterpriseLibrary.Common", "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "a type is always required", "purl": "pkg:EnterpriseLibrary.Common@6.0.1304", "canonical_purl": "pkg:EnterpriseLibrary.Common@6.0.1304", "type": null, "namespace": null, "name": "EnterpriseLibrary.Common", "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "a name is required", "purl": "pkg:maven/@1.3.4", "canonical_purl": "pkg:maven/@1.3.4", "type": "maven", "namespace": null, "name": null, "version": null, "qualifiers": null, "subpath": null, "is_invalid": true }, { "description": "slash / after scheme is not significant", "purl": "pkg:/maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "double slash // after scheme is not significant", "purl": "pkg://maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "slash /// after type is not significant", "purl": "pkg:///maven/org.apache.commons/io", "canonical_purl": "pkg:maven/org.apache.commons/io", "type": "maven", "namespace": "org.apache.commons", "name": "io", "version": null, "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid maven purl with case sensitive namespace and name", "purl": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "canonical_purl": "pkg:maven/HTTPClient/HTTPClient@0.3-3", "type": "maven", "namespace": "HTTPClient", "name": "HTTPClient", "version": "0.3-3", "qualifiers": null, "subpath": null, "is_invalid": false }, { "description": "valid maven purl containing a space in the version and qualifier", "purl": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "canonical_purl": "pkg:maven/mygroup/myartifact@1.0.0%20Final?mykey=my%20value", "type": "maven", "namespace": "mygroup", "name": "myartifact", "version": "1.0.0 Final", "qualifiers": {"mykey": "my value"}, "subpath": null, "is_invalid": false }, { "description": "checks for invalid qualifier keys", "purl": "pkg:npm/myartifact@1.0.0?in%20production=true", "canonical_purl": null, "type": "npm", "namespace": null, "name": "myartifact", "version": "1.0.0", "qualifiers": {"in production": "true"}, "subpath": null, "is_invalid": true }, { "description": "valid npm purl without version and with subpath", "purl": "pkg:npm/@babel/core#/googleapis/api/annotations/", "canonical_purl": "pkg:npm/%40babel/core#googleapis/api/annotations", "type": "npm", "namespace": "@babel", "name": "core", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "valid npm purl with namespace, version and subpath", "purl": "pkg:npm/@babel/core@1.0.2#/googleapis/api/annotations/", "canonical_purl": "pkg:npm/%40babel/core@1.0.2#googleapis/api/annotations", "type": "npm", "namespace": "@babel", "name": "core", "version": "1.0.2", "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "valid npm purl without namespace and with subpath", "purl": "pkg:npm/core@1.0.2#/googleapis/api/annotations/", "canonical_purl": "pkg:npm/core@1.0.2#googleapis/api/annotations", "type": "npm", "namespace": null, "name": "core", "version": "1.0.2", "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "valid npm purl without namespace, version and subpath", "purl": "pkg:npm/core#/googleapis/api/annotations/", "canonical_purl": "pkg:npm/core#googleapis/api/annotations", "type": "npm", "namespace": null, "name": "core", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false }, { "description": "valid npm purl without namespace, version and subpath", "purl": "pkg:NPM/core#/googleapis/api/annotations/", "canonical_purl": "pkg:npm/core#googleapis/api/annotations", "type": "npm", "namespace": null, "name": "core", "version": null, "qualifiers": null, "subpath": "googleapis/api/annotations", "is_invalid": false } ] packageurl-python-0.17.5/tests/test_packageurl.py000066400000000000000000000315651504466056600221600ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # Copyright (c) the purl authors # SPDX-License-Identifier: MIT # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # Visit https://github.com/package-url/packageurl-python for support and # download. import json import os import re import unittest from packageurl import PackageURL from packageurl import normalize from packageurl import normalize_qualifiers def create_test_function( description, purl, canonical_purl, is_invalid, type, name, namespace, version, qualifiers, subpath, # NOQA test_func_prefix="test_purl_pkg_", **kwargs ): """ Return a new (test function, test_name) where the test_function closed on test arguments. If is_error is True the tests are expected to raise an Exception. """ if is_invalid: def test_purl(self): try: PackageURL.from_string(purl) self.fail("Should raise a ValueError") except ValueError: pass try: PackageURL.from_string(canonical_purl) self.fail("Should raise a ValueError") except ValueError: pass try: PackageURL(type, namespace, name, version, qualifiers, subpath) except ValueError: pass else: def test_purl(self): # parsing the test canonical `purl` then re-building a `purl` from these # parsed components should return the test canonical `purl` cano = PackageURL.from_string(purl) assert canonical_purl == cano.to_string() # parsing the test `purl` should return the components parsed from the # test canonical `purl` parsed = PackageURL.from_string(canonical_purl) assert cano.to_dict() == parsed.to_dict() # parsing the test `purl` then re-building a `purl` from these parsed # components should return the test canonical `purl` assert canonical_purl == parsed.to_string() # building a `purl` from the test components should return the test # canonical `purl` built = PackageURL(type, namespace, name, version, qualifiers, subpath) assert canonical_purl == built.to_string() # create a good function name for use in test discovery if not description: description = purl if is_invalid: test_func_prefix += "is_invalid_" test_name = python_safe_name(test_func_prefix + description) test_purl.__name__ = test_name test_purl.funcname = test_name return test_purl, test_name def python_safe_name(s): """ Return a name derived from string `s` safe to use as a Python function name. For example: >>> s = "not `\\a /`good` -safe name ??" >>> assert python_safe_name(s) == 'not_good_safe_name' """ no_punctuation = re.compile(r"[\W_]", re.MULTILINE).sub s = s.lower() s = no_punctuation(" ", s) s = "_".join(s.split()) return s class PurlTest(unittest.TestCase): pass def build_tests(clazz=PurlTest, test_file="test-suite-data.json"): """ Dynamically build test methods for each purl test found in the `test_file` JSON file and attach a test method to the `clazz` class. """ test_data_dir = os.path.join(os.path.dirname(__file__), "data") test_file = os.path.join(test_data_dir, test_file) with open(test_file) as tf: tests_data = json.load(tf) for items in tests_data: test_func, test_name = create_test_function(**items) # attach that method to the class setattr(clazz, test_name, test_func) build_tests() class NormalizePurlTest(unittest.TestCase): def test_normalize_qualifiers_as_string(self): qualifiers_as_dict = {"classifier": "sources", "repository_url": "repo.spring.io/release"} qualifiers_as_string = "classifier=sources&repository_url=repo.spring.io/release" assert qualifiers_as_string == normalize_qualifiers(qualifiers_as_dict, encode=True) def test_normalize_qualifiers_as_dict(self): qualifiers_as_dict = {"classifier": "sources", "repository_url": "repo.spring.io/release"} qualifiers_as_string = "classifier=sources&repository_url=repo.spring.io/release" assert qualifiers_as_dict == normalize_qualifiers(qualifiers_as_string, encode=False) def test_create_PackageURL_from_qualifiers_string(self): canonical_purl = "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=repo.spring.io/release" type = "maven" # NOQA namespace = "org.apache.xmlgraphics" name = "batik-anim" version = "1.9.1" qualifiers_as_string = "classifier=sources&repository_url=repo.spring.io/release" subpath = None purl = PackageURL(type, namespace, name, version, qualifiers_as_string, subpath) assert canonical_purl == purl.to_string() def test_create_PackageURL_from_qualifiers_dict(self): canonical_purl = "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?classifier=sources&repository_url=repo.spring.io/release" type = "maven" # NOQA namespace = "org.apache.xmlgraphics" name = "batik-anim" version = "1.9.1" qualifiers_as_dict = {"classifier": "sources", "repository_url": "repo.spring.io/release"} subpath = None purl = PackageURL(type, namespace, name, version, qualifiers_as_dict, subpath) assert canonical_purl == purl.to_string() def test_normalize_encode_can_take_unicode_with_non_ascii_with_slash(self): uncd = "núcleo/núcleo" normal = normalize( type=uncd, namespace=uncd, name=uncd, version=uncd, qualifiers="a=" + uncd, subpath=uncd, encode=True, ) expected = ( "n%c3%bacleo/n%c3%bacleo", "n%C3%BAcleo/n%C3%BAcleo", "n%C3%BAcleo/n%C3%BAcleo", "n%C3%BAcleo/n%C3%BAcleo", "a=n%C3%BAcleo/n%C3%BAcleo", "n%C3%BAcleo/n%C3%BAcleo", ) assert expected == normal def test_normalize_decode_can_take_unicode_with_non_ascii_with_slash(self): uncd = "núcleo/núcleo" normal = normalize( type=uncd, namespace=uncd, name=uncd, version=uncd, qualifiers="a=" + uncd, subpath=uncd, encode=False, ) expected = ( "núcleo/núcleo", "núcleo/núcleo", "núcleo/núcleo", "núcleo/núcleo", {"a": "núcleo/núcleo"}, "núcleo/núcleo", ) assert expected == normal def test_normalize_encode_always_reencodes(self): uncd = "n%c3%bacleo/n%c3%bacleo" normal = normalize( type=uncd, namespace=uncd, name=uncd, version=uncd, qualifiers="a=" + uncd, subpath=uncd, encode=True, ) expected = ( "n%25c3%25bacleo/n%25c3%25bacleo", "n%25c3%25bacleo/n%25c3%25bacleo", "n%25c3%25bacleo/n%25c3%25bacleo", "n%25c3%25bacleo/n%25c3%25bacleo", "a=n%25c3%25bacleo/n%25c3%25bacleo", "n%25c3%25bacleo/n%25c3%25bacleo", ) assert expected == normal def test_qualifiers_must_be_key_value_pairs(self): purl = "pkg:maven/org.apache.xmlgraphics/batik-anim@1.9.1?this+is+not+a+key_value" try: PackageURL.from_string(purl) self.fail("Failed to raise exception for invalid qualifiers") except ValueError as ve: assert "Invalid qualifier. Must be a string of key=value pairs" in str(ve) def test_to_dict_optionally_returns_qualifiers_as_string(self): purl = PackageURL( type="maven", namespace="org.apache", name="commons-logging", version="12.3", qualifiers="this=12&that=13", subpath="this/is/a/path", ) expected = dict( [ ("type", "maven"), ("namespace", "org.apache"), ("name", "commons-logging"), ("version", "12.3"), ( "qualifiers", dict( [ ("that", "13"), ("this", "12"), ] ), ), ("subpath", "this/is/a/path"), ] ) assert expected == purl.to_dict() expected = dict( [ ("type", "maven"), ("namespace", "org.apache"), ("name", "commons-logging"), ("version", "12.3"), ("qualifiers", "that=13&this=12"), ("subpath", "this/is/a/path"), ] ) assert expected == purl.to_dict(encode=True) def test_to_dict_custom_empty_value(self): purl = PackageURL( type="maven", namespace="", name="commons-logging", version="12.3", qualifiers=None, ) expected = dict( [ ("type", "maven"), ("namespace", None), ("name", "commons-logging"), ("version", "12.3"), ("qualifiers", None), ("subpath", None), ] ) assert expected == purl.to_dict() assert expected == purl.to_dict(empty=None) expected = dict( [ ("type", "maven"), ("namespace", ""), ("name", "commons-logging"), ("version", "12.3"), ("qualifiers", ""), ("subpath", ""), ] ) assert expected == purl.to_dict(empty="") def test_purl_is_hashable(): s = {PackageURL(name="hashable", type="pypi")} assert len(s) == 1 def test_colons_in_name_are_handled_correctly() -> None: p = PackageURL.from_string( "pkg:nuget/libiconv:%20character%20set%20conversion%20library@1.9?package-id=e11a609df352e292" ) assert p.type == "nuget" assert p.namespace is None assert p.name == "libiconv: character set conversion library" assert p.version == "1.9" assert p.qualifiers == {"package-id": "e11a609df352e292"} assert p.subpath is None assert PackageURL.from_string(p.to_string()).to_string() == p.to_string() def test_colons_in_namespace_are_handled_correctly() -> None: p = PackageURL.from_string( "pkg:nuget/an:odd:space/libiconv:%20character%20set%20conversion%20library@1.9?package-id=e11a609df352e292" ) assert p.type == "nuget" assert p.namespace == "an:odd:space" assert p.name == "libiconv: character set conversion library" assert p.version == "1.9" assert p.qualifiers == {"package-id": "e11a609df352e292"} assert p.subpath is None assert PackageURL.from_string(p.to_string()).to_string() == p.to_string() def test_encoding_stuff_with_colons_correctly() -> None: p = PackageURL( type="nuget", namespace="an:odd:space", name="libiconv: character set conversion library", version="1.9", qualifiers={"package-id": "e11a609df352e292"}, ) assert ( p.to_string() == "pkg:nuget/an:odd:space/libiconv:%20character%20set%20conversion%20library@1.9?package-id=e11a609df352e292" ) def test_no_encoding_to_string(): p = PackageURL( type="nuget", namespace="an:odd:space", name="libiconv: character set conversion library", version="1.9", qualifiers={"package-id": "e11a609df352e292"}, ) assert ( p.to_string(encode=False) == "pkg:nuget/an:odd:space/libiconv: character set conversion library@1.9?package-id=e11a609df352e292" ) packageurl-python-0.17.5/thirdparty/000077500000000000000000000000001504466056600174475ustar00rootroot00000000000000packageurl-python-0.17.5/thirdparty/apache-2.0.LICENSE000066400000000000000000000261341504466056600221770ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.packageurl-python-0.17.5/thirdparty/bsd-new.LICENSE000066400000000000000000000026231504466056600220150ustar00rootroot00000000000000Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.packageurl-python-0.17.5/thirdparty/bsd-simplified.LICENSE000066400000000000000000000023151504466056600233470ustar00rootroot00000000000000Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.packageurl-python-0.17.5/thirdparty/isc.LICENSE000066400000000000000000000012701504466056600212310ustar00rootroot00000000000000Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.packageurl-python-0.17.5/thirdparty/lgpl-2.1-plus.LICENSE000066400000000000000000000634621504466056600227030ustar00rootroot00000000000000GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it!packageurl-python-0.17.5/thirdparty/mit.LICENSE000066400000000000000000000017761504466056600212570ustar00rootroot00000000000000Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.packageurl-python-0.17.5/thirdparty/python.LICENSE000066400000000000000000000226311504466056600220000ustar00rootroot00000000000000PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python. 4. PSF is making Python available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License Agreement. BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 ------------------------------------------- BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. CNRI OPEN SOURCE LICENSE AGREEMENT (for Python 1.6b1) -------------------------------------------------- IMPORTANT: PLEASE READ THE FOLLOWING AGREEMENT CAREFULLY. BY CLICKING ON "ACCEPT" WHERE INDICATED BELOW, OR BY COPYING, INSTALLING OR OTHERWISE USING PYTHON 1.6, beta 1 SOFTWARE, YOU ARE DEEMED TO HAVE AGREED TO THE TERMS AND CONDITIONS OF THIS LICENSE AGREEMENT. 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6, beta 1 software in source or binary form and its associated documentation, as released at the www.python.org Internet site on August 4, 2000 ("Python 1.6b1"). 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6b1 alone or in any derivative version, provided, however, that CNRIs License Agreement is retained in Python 1.6b1, alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRIs License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6, beta 1, is made available subject to the terms and conditions in CNRIs License Agreement. This Agreement may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1011. This Agreement may also be obtained from a proxy server on the Internet using the URL:http://hdl.handle.net/1895.22/1011". 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6b1 or any part thereof, and wants to make the derivative work available to the public as provided herein, then Licensee hereby agrees to indicate in any such work the nature of the modifications made to Python 1.6b1. 4. CNRI is making Python 1.6b1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6b1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING PYTHON 1.6b1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. This License Agreement shall be governed by and interpreted in all respects by the law of the State of Virginia, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6b1, Licensee agrees to be bound by the terms and conditions of this License Agreement. ACCEPT CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 -------------------------------------------------- Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.packageurl-python-0.17.5/thirdparty/virtualenv.pyz000066400000000000000000220521041504466056600224200ustar00rootroot00000000000000PK7QYOvirtualenv/__init__.pyfrom __future__ import annotations from .run import cli_run, session_via_cli from .version import __version__ __all__ = [ "__version__", "cli_run", "session_via_cli", ] PK7QYC^f f virtualenv/__main__.pyfrom __future__ import annotations import logging import os import sys from timeit import default_timer def run(args=None, options=None, env=None): env = os.environ if env is None else env start = default_timer() from virtualenv.run import cli_run # noqa: PLC0415 from virtualenv.util.error import ProcessCallFailedError # noqa: PLC0415 if args is None: args = sys.argv[1:] try: session = cli_run(args, options, env) logging.warning(LogSession(session, start)) except ProcessCallFailedError as exception: print(f"subprocess call failed for {exception.cmd} with code {exception.code}") # noqa: T201 print(exception.out, file=sys.stdout, end="") # noqa: T201 print(exception.err, file=sys.stderr, end="") # noqa: T201 raise SystemExit(exception.code) # noqa: B904 class LogSession: def __init__(self, session, start) -> None: self.session = session self.start = start def __str__(self) -> str: spec = self.session.creator.interpreter.spec elapsed = (default_timer() - self.start) * 1000 lines = [ f"created virtual environment {spec} in {elapsed:.0f}ms", f" creator {self.session.creator!s}", ] if self.session.seeder.enabled: lines.append(f" seeder {self.session.seeder!s}") path = self.session.creator.purelib.iterdir() packages = sorted("==".join(i.stem.split("-")) for i in path if i.suffix == ".dist-info") lines.append(f" added seed packages: {', '.join(packages)}") if self.session.activators: lines.append(f" activators {','.join(i.__class__.__name__ for i in self.session.activators)}") return "\n".join(lines) def run_with_catch(args=None, env=None): from virtualenv.config.cli.parser import VirtualEnvOptions # noqa: PLC0415 env = os.environ if env is None else env options = VirtualEnvOptions() try: run(args, options, env) except (KeyboardInterrupt, SystemExit, Exception) as exception: try: if getattr(options, "with_traceback", False): raise if not (isinstance(exception, SystemExit) and exception.code == 0): logging.error("%s: %s", type(exception).__name__, exception) # noqa: TRY400 code = exception.code if isinstance(exception, SystemExit) else 1 sys.exit(code) finally: logging.shutdown() # force flush of log messages before the trace is printed if __name__ == "__main__": # pragma: no cov run_with_catch() # pragma: no cov PK7QYzvirtualenv/info.pyfrom __future__ import annotations import logging import os import platform import sys import tempfile IMPLEMENTATION = platform.python_implementation() IS_PYPY = IMPLEMENTATION == "PyPy" IS_CPYTHON = IMPLEMENTATION == "CPython" IS_WIN = sys.platform == "win32" IS_MAC_ARM64 = sys.platform == "darwin" and platform.machine() == "arm64" ROOT = os.path.realpath(os.path.join(os.path.abspath(__file__), os.path.pardir, os.path.pardir)) IS_ZIPAPP = os.path.isfile(ROOT) _CAN_SYMLINK = _FS_CASE_SENSITIVE = _CFG_DIR = _DATA_DIR = None def fs_is_case_sensitive(): global _FS_CASE_SENSITIVE # noqa: PLW0603 if _FS_CASE_SENSITIVE is None: with tempfile.NamedTemporaryFile(prefix="TmP") as tmp_file: _FS_CASE_SENSITIVE = not os.path.exists(tmp_file.name.lower()) logging.debug("filesystem is %scase-sensitive", "" if _FS_CASE_SENSITIVE else "not ") return _FS_CASE_SENSITIVE def fs_supports_symlink(): global _CAN_SYMLINK # noqa: PLW0603 if _CAN_SYMLINK is None: can = False if hasattr(os, "symlink"): if IS_WIN: with tempfile.NamedTemporaryFile(prefix="TmP") as tmp_file: temp_dir = os.path.dirname(tmp_file.name) dest = os.path.join(temp_dir, f"{tmp_file.name}-{'b'}") try: os.symlink(tmp_file.name, dest) can = True except (OSError, NotImplementedError): pass logging.debug("symlink on filesystem does%s work", "" if can else " not") else: can = True _CAN_SYMLINK = can return _CAN_SYMLINK def fs_path_id(path: str) -> str: return path.casefold() if fs_is_case_sensitive() else path __all__ = ( "IS_CPYTHON", "IS_MAC_ARM64", "IS_PYPY", "IS_WIN", "IS_ZIPAPP", "ROOT", "fs_is_case_sensitive", "fs_path_id", "fs_supports_symlink", ) PK7QY )6KKvirtualenv/report.pyfrom __future__ import annotations import logging import sys LEVELS = { 0: logging.CRITICAL, 1: logging.ERROR, 2: logging.WARNING, 3: logging.INFO, 4: logging.DEBUG, 5: logging.NOTSET, } MAX_LEVEL = max(LEVELS.keys()) LOGGER = logging.getLogger() def setup_report(verbosity, show_pid=False): # noqa: FBT002 _clean_handlers(LOGGER) verbosity = min(verbosity, MAX_LEVEL) # pragma: no cover level = LEVELS[verbosity] msg_format = "%(message)s" if level <= logging.DEBUG: locate = "module" msg_format = f"%(relativeCreated)d {msg_format} [%(levelname)s %({locate})s:%(lineno)d]" if show_pid: msg_format = f"[%(process)d] {msg_format}" formatter = logging.Formatter(msg_format) stream_handler = logging.StreamHandler(stream=sys.stdout) stream_handler.setLevel(level) LOGGER.setLevel(logging.NOTSET) stream_handler.setFormatter(formatter) LOGGER.addHandler(stream_handler) level_name = logging.getLevelName(level) logging.debug("setup logging to %s", level_name) logging.getLogger("distlib").setLevel(logging.ERROR) return verbosity def _clean_handlers(log): for log_handler in list(log.handlers): # remove handlers of libraries log.removeHandler(log_handler) __all__ = [ "LEVELS", "MAX_LEVEL", "setup_report", ] PK7QY/ygvirtualenv/version.py# file generated by setuptools_scm # don't change, don't track in version control TYPE_CHECKING = False if TYPE_CHECKING: from typing import Tuple, Union VERSION_TUPLE = Tuple[Union[int, str], ...] else: VERSION_TUPLE = object version: str __version__: str __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE __version__ = version = '20.26.6.dev12+g393bdd3.d20241018' __version_tuple__ = version_tuple = (20, 26, 6, 'dev12', 'g393bdd3.d20241018') PK7QYA\n!virtualenv/activation/__init__.pyfrom __future__ import annotations from .bash import BashActivator from .batch import BatchActivator from .cshell import CShellActivator from .fish import FishActivator from .nushell import NushellActivator from .powershell import PowerShellActivator from .python import PythonActivator __all__ = [ "BashActivator", "BatchActivator", "CShellActivator", "FishActivator", "NushellActivator", "PowerShellActivator", "PythonActivator", ] PK7QY'"virtualenv/activation/activator.pyfrom __future__ import annotations import os from abc import ABC, abstractmethod class Activator(ABC): """Generates activate script for the virtual environment.""" def __init__(self, options) -> None: """ Create a new activator generator. :param options: the parsed options as defined within :meth:`add_parser_arguments` """ self.flag_prompt = os.path.basename(os.getcwd()) if options.prompt == "." else options.prompt @classmethod def supports(cls, interpreter): # noqa: ARG003 """ Check if the activation script is supported in the given interpreter. :param interpreter: the interpreter we need to support :return: ``True`` if supported, ``False`` otherwise """ return True @classmethod # noqa: B027 def add_parser_arguments(cls, parser, interpreter): """ Add CLI arguments for this activation script. :param parser: the CLI parser :param interpreter: the interpreter this virtual environment is based of """ @abstractmethod def generate(self, creator): """ Generate activate script for the given creator. :param creator: the creator (based of :class:`virtualenv.create.creator.Creator`) we used to create this \ virtual environment """ raise NotImplementedError __all__ = [ "Activator", ] PK7QY ;< %virtualenv/activation/via_template.pyfrom __future__ import annotations import os import shlex import sys from abc import ABC, abstractmethod from .activator import Activator if sys.version_info >= (3, 10): from importlib.resources import files def read_binary(module_name: str, filename: str) -> bytes: return (files(module_name) / filename).read_bytes() else: from importlib.resources import read_binary class ViaTemplateActivator(Activator, ABC): @abstractmethod def templates(self): raise NotImplementedError @staticmethod def quote(string): """ Quote strings in the activation script. :param string: the string to quote :return: quoted string that works in the activation script """ return shlex.quote(string) def generate(self, creator): dest_folder = creator.bin_dir replacements = self.replacements(creator, dest_folder) generated = self._generate(replacements, self.templates(), dest_folder, creator) if self.flag_prompt is not None: creator.pyenv_cfg["prompt"] = self.flag_prompt return generated def replacements(self, creator, dest_folder): # noqa: ARG002 return { "__VIRTUAL_PROMPT__": "" if self.flag_prompt is None else self.flag_prompt, "__VIRTUAL_ENV__": str(creator.dest), "__VIRTUAL_NAME__": creator.env_name, "__BIN_NAME__": str(creator.bin_dir.relative_to(creator.dest)), "__PATH_SEP__": os.pathsep, } def _generate(self, replacements, templates, to_folder, creator): generated = [] for template in templates: text = self.instantiate_template(replacements, template, creator) dest = to_folder / self.as_name(template) # remove the file if it already exists - this prevents permission # errors when the dest is not writable if dest.exists(): dest.unlink() # Powershell assumes Windows 1252 encoding when reading files without BOM encoding = "utf-8-sig" if str(template).endswith(".ps1") else "utf-8" # use write_bytes to avoid platform specific line normalization (\n -> \r\n) dest.write_bytes(text.encode(encoding)) generated.append(dest) return generated def as_name(self, template): return template def instantiate_template(self, replacements, template, creator): # read content as binary to avoid platform specific line normalization (\n -> \r\n) binary = read_binary(self.__module__, template) text = binary.decode("utf-8", errors="strict") for key, value in replacements.items(): value_uni = self._repr_unicode(creator, value) text = text.replace(key, self.quote(value_uni)) return text @staticmethod def _repr_unicode(creator, value): # noqa: ARG004 return value # by default, we just let it be unicode __all__ = [ "ViaTemplateActivator", ] PK7QY|NN&virtualenv/activation/bash/__init__.pyfrom __future__ import annotations from pathlib import Path from virtualenv.activation.via_template import ViaTemplateActivator class BashActivator(ViaTemplateActivator): def templates(self): yield "activate.sh" def as_name(self, template): return Path(template).stem __all__ = [ "BashActivator", ] PK7QY^Gn&virtualenv/activation/bash/activate.sh# This file must be used with "source bin/activate" *from bash* # you cannot run it directly if [ "${BASH_SOURCE-}" = "$0" ]; then echo "You must source this script: \$ source $0" >&2 exit 33 fi deactivate () { unset -f pydoc >/dev/null 2>&1 || true # reset old environment variables # ! [ -z ${VAR+_} ] returns true if VAR is declared at all if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then PATH="$_OLD_VIRTUAL_PATH" export PATH unset _OLD_VIRTUAL_PATH fi if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" export PYTHONHOME unset _OLD_VIRTUAL_PYTHONHOME fi # The hash command must be called to get it to forget past # commands. Without forgetting past commands the $PATH changes # we made may not be respected hash -r 2>/dev/null if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then PS1="$_OLD_VIRTUAL_PS1" export PS1 unset _OLD_VIRTUAL_PS1 fi unset VIRTUAL_ENV unset VIRTUAL_ENV_PROMPT if [ ! "${1-}" = "nondestructive" ] ; then # Self destruct! unset -f deactivate fi } # unset irrelevant variables deactivate nondestructive VIRTUAL_ENV=__VIRTUAL_ENV__ if ([ "$OSTYPE" = "cygwin" ] || [ "$OSTYPE" = "msys" ]) && $(command -v cygpath &> /dev/null) ; then VIRTUAL_ENV=$(cygpath -u "$VIRTUAL_ENV") fi export VIRTUAL_ENV _OLD_VIRTUAL_PATH="$PATH" PATH="$VIRTUAL_ENV/"__BIN_NAME__":$PATH" export PATH if [ "x"__VIRTUAL_PROMPT__ != x ] ; then VIRTUAL_ENV_PROMPT=__VIRTUAL_PROMPT__ else VIRTUAL_ENV_PROMPT=$(basename "$VIRTUAL_ENV") fi export VIRTUAL_ENV_PROMPT # unset PYTHONHOME if set if ! [ -z "${PYTHONHOME+_}" ] ; then _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" unset PYTHONHOME fi if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then _OLD_VIRTUAL_PS1="${PS1-}" PS1="(${VIRTUAL_ENV_PROMPT}) ${PS1-}" export PS1 fi # Make sure to unalias pydoc if it's already there alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true pydoc () { python -m pydoc "$@" } # The hash command must be called to get it to forget past # commands. Without forgetting past commands the $PATH changes # we made may not be respected hash -r 2>/dev/null || true PK7QYr#X'virtualenv/activation/batch/__init__.pyfrom __future__ import annotations import os from virtualenv.activation.via_template import ViaTemplateActivator class BatchActivator(ViaTemplateActivator): @classmethod def supports(cls, interpreter): return interpreter.os == "nt" def templates(self): yield "activate.bat" yield "deactivate.bat" yield "pydoc.bat" @staticmethod def quote(string): return string def instantiate_template(self, replacements, template, creator): # ensure the text has all newlines as \r\n - required by batch base = super().instantiate_template(replacements, template, creator) return base.replace(os.linesep, "\n").replace("\n", os.linesep) __all__ = [ "BatchActivator", ] PK7QYh(virtualenv/activation/batch/activate.bat@REM This file is UTF-8 encoded, so we need to update the current code page while executing it @echo off @for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( @set _OLD_CODEPAGE=%%a ) @if defined _OLD_CODEPAGE ( "%SystemRoot%\System32\chcp.com" 65001 > nul ) @set "VIRTUAL_ENV=__VIRTUAL_ENV__" @set "VIRTUAL_ENV_PROMPT=__VIRTUAL_PROMPT__" @if NOT DEFINED VIRTUAL_ENV_PROMPT ( @for %%d in ("%VIRTUAL_ENV%") do @set "VIRTUAL_ENV_PROMPT=%%~nxd" ) @if defined _OLD_VIRTUAL_PROMPT ( @set "PROMPT=%_OLD_VIRTUAL_PROMPT%" ) else ( @if not defined PROMPT ( @set "PROMPT=$P$G" ) @if not defined VIRTUAL_ENV_DISABLE_PROMPT ( @set "_OLD_VIRTUAL_PROMPT=%PROMPT%" ) ) @if not defined VIRTUAL_ENV_DISABLE_PROMPT ( @set "PROMPT=(%VIRTUAL_ENV_PROMPT%) %PROMPT%" ) @REM Don't use () to avoid problems with them in %PATH% @if defined _OLD_VIRTUAL_PYTHONHOME @goto ENDIFVHOME @set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%" :ENDIFVHOME @set PYTHONHOME= @REM if defined _OLD_VIRTUAL_PATH ( @if not defined _OLD_VIRTUAL_PATH @goto ENDIFVPATH1 @set "PATH=%_OLD_VIRTUAL_PATH%" :ENDIFVPATH1 @REM ) else ( @if defined _OLD_VIRTUAL_PATH @goto ENDIFVPATH2 @set "_OLD_VIRTUAL_PATH=%PATH%" :ENDIFVPATH2 @set "PATH=%VIRTUAL_ENV%\__BIN_NAME__;%PATH%" @if defined _OLD_CODEPAGE ( "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul @set _OLD_CODEPAGE= ) PK7QYzЙ_*virtualenv/activation/batch/deactivate.bat@set VIRTUAL_ENV= @set VIRTUAL_ENV_PROMPT= @REM Don't use () to avoid problems with them in %PATH% @if not defined _OLD_VIRTUAL_PROMPT @goto ENDIFVPROMPT @set "PROMPT=%_OLD_VIRTUAL_PROMPT%" @set _OLD_VIRTUAL_PROMPT= :ENDIFVPROMPT @if not defined _OLD_VIRTUAL_PYTHONHOME @goto ENDIFVHOME @set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" @set _OLD_VIRTUAL_PYTHONHOME= :ENDIFVHOME @if not defined _OLD_VIRTUAL_PATH @goto ENDIFVPATH @set "PATH=%_OLD_VIRTUAL_PATH%" @set _OLD_VIRTUAL_PATH= :ENDIFVPATH PK7QY@%virtualenv/activation/batch/pydoc.batpython.exe -m pydoc %* PK7QYPP(virtualenv/activation/cshell/__init__.pyfrom __future__ import annotations from virtualenv.activation.via_template import ViaTemplateActivator class CShellActivator(ViaTemplateActivator): @classmethod def supports(cls, interpreter): return interpreter.os != "nt" def templates(self): yield "activate.csh" __all__ = [ "CShellActivator", ] PK7QYky)virtualenv/activation/cshell/activate.csh# This file must be used with "source bin/activate.csh" *from csh*. # You cannot run it directly. # Created by Davide Di Blasi . set newline='\ ' alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; unsetenv VIRTUAL_ENV_PROMPT; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc' # Unset irrelevant variables. deactivate nondestructive setenv VIRTUAL_ENV __VIRTUAL_ENV__ set _OLD_VIRTUAL_PATH="$PATH:q" setenv PATH "$VIRTUAL_ENV:q/"__BIN_NAME__":$PATH:q" if (__VIRTUAL_PROMPT__ != "") then setenv VIRTUAL_ENV_PROMPT __VIRTUAL_PROMPT__ else setenv VIRTUAL_ENV_PROMPT "$VIRTUAL_ENV:t:q" endif if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then set do_prompt = "1" else set do_prompt = "0" endif else set do_prompt = "1" endif if ( $do_prompt == "1" ) then # Could be in a non-interactive environment, # in which case, $prompt is undefined and we wouldn't # care about the prompt anyway. if ( $?prompt ) then set _OLD_VIRTUAL_PROMPT="$prompt:q" if ( "$prompt:q" =~ *"$newline:q"* ) then : else set prompt = '('"$VIRTUAL_ENV_PROMPT:q"') '"$prompt:q" endif endif endif unset env_name unset do_prompt alias pydoc python -m pydoc rehash PK7QYVkD&virtualenv/activation/fish/__init__.pyfrom __future__ import annotations from virtualenv.activation.via_template import ViaTemplateActivator class FishActivator(ViaTemplateActivator): def templates(self): yield "activate.fish" __all__ = [ "FishActivator", ] PK7QY  (virtualenv/activation/fish/activate.fish# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. # Do not run it directly. function _bashify_path -d "Converts a fish path to something bash can recognize" set fishy_path $argv set bashy_path $fishy_path[1] for path_part in $fishy_path[2..-1] set bashy_path "$bashy_path:$path_part" end echo $bashy_path end function _fishify_path -d "Converts a bash path to something fish can recognize" echo $argv | tr ':' '\n' end function deactivate -d 'Exit virtualenv mode and return to the normal environment.' # reset old environment variables if test -n "$_OLD_VIRTUAL_PATH" # https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling if test (echo $FISH_VERSION | head -c 1) -lt 3 set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH") else set -gx PATH $_OLD_VIRTUAL_PATH end set -e _OLD_VIRTUAL_PATH end if test -n "$_OLD_VIRTUAL_PYTHONHOME" set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME" set -e _OLD_VIRTUAL_PYTHONHOME end if test -n "$_OLD_FISH_PROMPT_OVERRIDE" and functions -q _old_fish_prompt # Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`. set -l fish_function_path # Erase virtualenv's `fish_prompt` and restore the original. functions -e fish_prompt functions -c _old_fish_prompt fish_prompt functions -e _old_fish_prompt set -e _OLD_FISH_PROMPT_OVERRIDE end set -e VIRTUAL_ENV set -e VIRTUAL_ENV_PROMPT if test "$argv[1]" != 'nondestructive' # Self-destruct! functions -e pydoc functions -e deactivate functions -e _bashify_path functions -e _fishify_path end end # Unset irrelevant variables. deactivate nondestructive set -gx VIRTUAL_ENV __VIRTUAL_ENV__ # https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling if test (echo $FISH_VERSION | head -c 1) -lt 3 set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH) else set -gx _OLD_VIRTUAL_PATH $PATH end set -gx PATH "$VIRTUAL_ENV"'/'__BIN_NAME__ $PATH # Prompt override provided? # If not, just use the environment name. if test -n __VIRTUAL_PROMPT__ set -gx VIRTUAL_ENV_PROMPT __VIRTUAL_PROMPT__ else set -gx VIRTUAL_ENV_PROMPT (basename "$VIRTUAL_ENV") end # Unset `$PYTHONHOME` if set. if set -q PYTHONHOME set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME set -e PYTHONHOME end function pydoc python -m pydoc $argv end if test -z "$VIRTUAL_ENV_DISABLE_PROMPT" # Copy the current `fish_prompt` function as `_old_fish_prompt`. functions -c fish_prompt _old_fish_prompt function fish_prompt # Run the user's prompt first; it might depend on (pipe)status. set -l prompt (_old_fish_prompt) printf '(%s) ' $VIRTUAL_ENV_PROMPT string join -- \n $prompt # handle multi-line prompts end set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV" end PK7QYN~)virtualenv/activation/nushell/__init__.pyfrom __future__ import annotations from virtualenv.activation.via_template import ViaTemplateActivator class NushellActivator(ViaTemplateActivator): def templates(self): yield "activate.nu" @staticmethod def quote(string): """ Nushell supports raw strings like: r###'this is a string'###. This method finds the maximum continuous sharps in the string and then quote it with an extra sharp. """ max_sharps = 0 current_sharps = 0 for char in string: if char == "#": current_sharps += 1 max_sharps = max(current_sharps, max_sharps) else: current_sharps = 0 wrapping = "#" * (max_sharps + 1) return f"r{wrapping}'{string}'{wrapping}" def replacements(self, creator, dest_folder): # noqa: ARG002 return { "__VIRTUAL_PROMPT__": "" if self.flag_prompt is None else self.flag_prompt, "__VIRTUAL_ENV__": str(creator.dest), "__VIRTUAL_NAME__": creator.env_name, "__BIN_NAME__": str(creator.bin_dir.relative_to(creator.dest)), } __all__ = [ "NushellActivator", ] PK7QY9 )virtualenv/activation/nushell/activate.nu# virtualenv activation module # Activate with `overlay use activate.nu` # Deactivate with `deactivate`, as usual # # To customize the overlay name, you can call `overlay use activate.nu as foo`, # but then simply `deactivate` won't work because it is just an alias to hide # the "activate" overlay. You'd need to call `overlay hide foo` manually. export-env { def is-string [x] { ($x | describe) == 'string' } def has-env [...names] { $names | each {|n| $n in $env } | all {|i| $i == true} } # Emulates a `test -z`, but better as it handles e.g 'false' def is-env-true [name: string] { if (has-env $name) { # Try to parse 'true', '0', '1', and fail if not convertible let parsed = (do -i { $env | get $name | into bool }) if ($parsed | describe) == 'bool' { $parsed } else { not ($env | get -i $name | is-empty) } } else { false } } let virtual_env = __VIRTUAL_ENV__ let bin = __BIN_NAME__ let is_windows = ($nu.os-info.family) == 'windows' let path_name = (if (has-env 'Path') { 'Path' } else { 'PATH' } ) let venv_path = ([$virtual_env $bin] | path join) let new_path = ($env | get $path_name | prepend $venv_path) # If there is no default prompt, then use the env name instead let virtual_env_prompt = (if (__VIRTUAL_PROMPT__ | is-empty) { ($virtual_env | path basename) } else { __VIRTUAL_PROMPT__ }) let new_env = { $path_name : $new_path VIRTUAL_ENV : $virtual_env VIRTUAL_ENV_PROMPT : $virtual_env_prompt } let new_env = (if (is-env-true 'VIRTUAL_ENV_DISABLE_PROMPT') { $new_env } else { # Creating the new prompt for the session let virtual_prefix = $'(char lparen)($virtual_env_prompt)(char rparen) ' # Back up the old prompt builder let old_prompt_command = (if (has-env 'PROMPT_COMMAND') { $env.PROMPT_COMMAND } else { '' }) let new_prompt = (if (has-env 'PROMPT_COMMAND') { if 'closure' in ($old_prompt_command | describe) { {|| $'($virtual_prefix)(do $old_prompt_command)' } } else { {|| $'($virtual_prefix)($old_prompt_command)' } } } else { {|| $'($virtual_prefix)' } }) $new_env | merge { PROMPT_COMMAND : $new_prompt VIRTUAL_PREFIX : $virtual_prefix } }) # Environment variables that will be loaded as the virtual env load-env $new_env } export alias pydoc = python -m pydoc export alias deactivate = overlay hide activate PK7QY677,virtualenv/activation/powershell/__init__.pyfrom __future__ import annotations from virtualenv.activation.via_template import ViaTemplateActivator class PowerShellActivator(ViaTemplateActivator): def templates(self): yield "activate.ps1" @staticmethod def quote(string): """ This should satisfy PowerShell quoting rules [1], unless the quoted string is passed directly to Windows native commands [2]. [1]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules [2]: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_parsing#passing-arguments-that-contain-quote-characters """ # noqa: D205 string = string.replace("'", "''") return f"'{string}'" __all__ = [ "PowerShellActivator", ] PK7QY-virtualenv/activation/powershell/activate.ps1$script:THIS_PATH = $myinvocation.mycommand.path $script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent function global:deactivate([switch] $NonDestructive) { if (Test-Path variable:_OLD_VIRTUAL_PATH) { $env:PATH = $variable:_OLD_VIRTUAL_PATH Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global } if (Test-Path function:_old_virtual_prompt) { $function:prompt = $function:_old_virtual_prompt Remove-Item function:\_old_virtual_prompt } if ($env:VIRTUAL_ENV) { Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue } if ($env:VIRTUAL_ENV_PROMPT) { Remove-Item env:VIRTUAL_ENV_PROMPT -ErrorAction SilentlyContinue } if (!$NonDestructive) { # Self destruct! Remove-Item function:deactivate Remove-Item function:pydoc } } function global:pydoc { python -m pydoc $args } # unset irrelevant variables deactivate -nondestructive $VIRTUAL_ENV = $BASE_DIR $env:VIRTUAL_ENV = $VIRTUAL_ENV if (__VIRTUAL_PROMPT__ -ne "") { $env:VIRTUAL_ENV_PROMPT = __VIRTUAL_PROMPT__ } else { $env:VIRTUAL_ENV_PROMPT = $( Split-Path $env:VIRTUAL_ENV -Leaf ) } New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH $env:PATH = "$env:VIRTUAL_ENV/" + __BIN_NAME__ + __PATH_SEP__ + $env:PATH if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) { function global:_old_virtual_prompt { "" } $function:_old_virtual_prompt = $function:prompt function global:prompt { # Add the custom prefix to the existing prompt $previous_prompt_value = & $function:_old_virtual_prompt ("(" + $env:VIRTUAL_ENV_PROMPT + ") " + $previous_prompt_value) } } PK7QYM>>(virtualenv/activation/python/__init__.pyfrom __future__ import annotations import os from collections import OrderedDict from virtualenv.activation.via_template import ViaTemplateActivator class PythonActivator(ViaTemplateActivator): def templates(self): yield "activate_this.py" @staticmethod def quote(string): return repr(string) def replacements(self, creator, dest_folder): replacements = super().replacements(creator, dest_folder) lib_folders = OrderedDict((os.path.relpath(str(i), str(dest_folder)), None) for i in creator.libs) lib_folders = os.pathsep.join(lib_folders.keys()) replacements.update( { "__LIB_FOLDERS__": lib_folders, "__DECODE_PATH__": "", }, ) return replacements __all__ = [ "PythonActivator", ] PK7QY6-virtualenv/activation/python/activate_this.py""" Activate virtualenv for current interpreter: import runpy runpy.run_path(this_file) This can be used when you must use an existing Python interpreter, not the virtualenv bin/python. """ # noqa: D415 from __future__ import annotations import os import site import sys try: abs_file = os.path.abspath(__file__) except NameError as exc: msg = "You must use import runpy; runpy.run_path(this_file)" raise AssertionError(msg) from exc bin_dir = os.path.dirname(abs_file) base = bin_dir[: -len(__BIN_NAME__) - 1] # strip away the bin part from the __file__, plus the path separator # prepend bin to PATH (this file is inside the bin directory) os.environ["PATH"] = os.pathsep.join([bin_dir, *os.environ.get("PATH", "").split(os.pathsep)]) os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory os.environ["VIRTUAL_ENV_PROMPT"] = __VIRTUAL_PROMPT__ or os.path.basename(base) # add the virtual environments libraries to the host python import mechanism prev_length = len(sys.path) for lib in __LIB_FOLDERS__.split(os.pathsep): path = os.path.realpath(os.path.join(bin_dir, lib)) site.addsitedir(path.decode("utf-8") if __DECODE_PATH__ else path) sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length] sys.real_prefix = sys.prefix sys.prefix = base PK7QY֜2virtualenv/app_data/__init__.py"""Application data stored by virtualenv.""" from __future__ import annotations import logging import os from platformdirs import user_data_dir from .na import AppDataDisabled from .read_only import ReadOnlyAppData from .via_disk_folder import AppDataDiskFolder from .via_tempdir import TempAppData def _default_app_data_dir(env): key = "VIRTUALENV_OVERRIDE_APP_DATA" if key in env: return env[key] return user_data_dir(appname="virtualenv", appauthor="pypa") def make_app_data(folder, **kwargs): is_read_only = kwargs.pop("read_only") env = kwargs.pop("env") if kwargs: # py3+ kwonly msg = "unexpected keywords: {}" raise TypeError(msg) if folder is None: folder = _default_app_data_dir(env) folder = os.path.abspath(folder) if is_read_only: return ReadOnlyAppData(folder) if not os.path.isdir(folder): try: os.makedirs(folder) logging.debug("created app data folder %s", folder) except OSError as exception: logging.info("could not create app data folder %s due to %r", folder, exception) if os.access(folder, os.W_OK): return AppDataDiskFolder(folder) logging.debug("app data folder %s has no write access", folder) return TempAppData() __all__ = ( "AppDataDisabled", "AppDataDiskFolder", "ReadOnlyAppData", "TempAppData", "make_app_data", ) PK7QY<N##virtualenv/app_data/base.py"""Application data stored by virtualenv.""" from __future__ import annotations from abc import ABC, abstractmethod from contextlib import contextmanager from virtualenv.info import IS_ZIPAPP class AppData(ABC): """Abstract storage interface for the virtualenv application.""" @abstractmethod def close(self): """Called before virtualenv exits.""" @abstractmethod def reset(self): """Called when the user passes in the reset app data.""" @abstractmethod def py_info(self, path): raise NotImplementedError @abstractmethod def py_info_clear(self): raise NotImplementedError @property def can_update(self): raise NotImplementedError @abstractmethod def embed_update_log(self, distribution, for_py_version): raise NotImplementedError @property def house(self): raise NotImplementedError @property def transient(self): raise NotImplementedError @abstractmethod def wheel_image(self, for_py_version, name): raise NotImplementedError @contextmanager def ensure_extracted(self, path, to_folder=None): """Some paths might be within the zipapp, unzip these to a path on the disk.""" if IS_ZIPAPP: with self.extract(path, to_folder) as result: yield result else: yield path @abstractmethod @contextmanager def extract(self, path, to_folder): raise NotImplementedError @abstractmethod @contextmanager def locked(self, path): raise NotImplementedError class ContentStore(ABC): @abstractmethod def exists(self): raise NotImplementedError @abstractmethod def read(self): raise NotImplementedError @abstractmethod def write(self, content): raise NotImplementedError @abstractmethod def remove(self): raise NotImplementedError @abstractmethod @contextmanager def locked(self): pass __all__ = [ "AppData", "ContentStore", ] PK7QYOvirtualenv/app_data/na.pyfrom __future__ import annotations from contextlib import contextmanager from .base import AppData, ContentStore class AppDataDisabled(AppData): """No application cache available (most likely as we don't have write permissions).""" transient = True can_update = False def __init__(self) -> None: pass error = RuntimeError("no app data folder available, probably no write access to the folder") def close(self): """Do nothing.""" def reset(self): """Do nothing.""" def py_info(self, path): # noqa: ARG002 return ContentStoreNA() def embed_update_log(self, distribution, for_py_version): # noqa: ARG002 return ContentStoreNA() def extract(self, path, to_folder): # noqa: ARG002 raise self.error @contextmanager def locked(self, path): # noqa: ARG002 """Do nothing.""" yield @property def house(self): raise self.error def wheel_image(self, for_py_version, name): # noqa: ARG002 raise self.error def py_info_clear(self): """Nothing to clear.""" class ContentStoreNA(ContentStore): def exists(self): return False def read(self): """Nothing to read.""" return def write(self, content): """Nothing to write.""" def remove(self): """Nothing to remove.""" @contextmanager def locked(self): yield __all__ = [ "AppDataDisabled", "ContentStoreNA", ] PK7QYaYY virtualenv/app_data/read_only.pyfrom __future__ import annotations import os.path from virtualenv.util.lock import NoOpFileLock from .via_disk_folder import AppDataDiskFolder, PyInfoStoreDisk class ReadOnlyAppData(AppDataDiskFolder): can_update = False def __init__(self, folder: str) -> None: if not os.path.isdir(folder): msg = f"read-only app data directory {folder} does not exist" raise RuntimeError(msg) super().__init__(folder) self.lock = NoOpFileLock(folder) def reset(self) -> None: msg = "read-only app data does not support reset" raise RuntimeError(msg) def py_info_clear(self) -> None: raise NotImplementedError def py_info(self, path): return _PyInfoStoreDiskReadOnly(self.py_info_at, path) def embed_update_log(self, distribution, for_py_version): raise NotImplementedError class _PyInfoStoreDiskReadOnly(PyInfoStoreDisk): def write(self, content): # noqa: ARG002 msg = "read-only app data python info cannot be updated" raise RuntimeError(msg) __all__ = [ "ReadOnlyAppData", ] PK7QYҡ"}}&virtualenv/app_data/via_disk_folder.py""" A rough layout of the current storage goes as: virtualenv-app-data ├── py - │ └── *.json/lock ├── wheel │ ├── house │ │ └── *.whl │ └── -> 3.9 │ ├── img- │ │ └── image │ │ └── -> CopyPipInstall / SymlinkPipInstall │ │ └── -> pip-20.1.1-py2.py3-none-any │ └── embed │ └── 3 -> json format versioning │ └── *.json -> for every distribution contains data about newer embed versions and releases └─── unzip └── ├── py_info.py ├── debug.py └── _virtualenv.py """ # noqa: D415 from __future__ import annotations import json import logging from abc import ABC from contextlib import contextmanager, suppress from hashlib import sha256 from virtualenv.util.lock import ReentrantFileLock from virtualenv.util.path import safe_delete from virtualenv.util.zipapp import extract from virtualenv.version import __version__ from .base import AppData, ContentStore class AppDataDiskFolder(AppData): """Store the application data on the disk within a folder layout.""" transient = False can_update = True def __init__(self, folder) -> None: self.lock = ReentrantFileLock(folder) def __repr__(self) -> str: return f"{type(self).__name__}({self.lock.path})" def __str__(self) -> str: return str(self.lock.path) def reset(self): logging.debug("reset app data folder %s", self.lock.path) safe_delete(self.lock.path) def close(self): """Do nothing.""" @contextmanager def locked(self, path): path_lock = self.lock / path with path_lock: yield path_lock.path @contextmanager def extract(self, path, to_folder): root = ReentrantFileLock(to_folder()) if to_folder is not None else self.lock / "unzip" / __version__ with root.lock_for_key(path.name): dest = root.path / path.name if not dest.exists(): extract(path, dest) yield dest @property def py_info_at(self): return self.lock / "py_info" / "1" def py_info(self, path): return PyInfoStoreDisk(self.py_info_at, path) def py_info_clear(self): """clear py info.""" py_info_folder = self.py_info_at with py_info_folder: for filename in py_info_folder.path.iterdir(): if filename.suffix == ".json": with py_info_folder.lock_for_key(filename.stem): if filename.exists(): filename.unlink() def embed_update_log(self, distribution, for_py_version): return EmbedDistributionUpdateStoreDisk(self.lock / "wheel" / for_py_version / "embed" / "3", distribution) @property def house(self): path = self.lock.path / "wheel" / "house" path.mkdir(parents=True, exist_ok=True) return path def wheel_image(self, for_py_version, name): return self.lock.path / "wheel" / for_py_version / "image" / "1" / name class JSONStoreDisk(ContentStore, ABC): def __init__(self, in_folder, key, msg, msg_args) -> None: self.in_folder = in_folder self.key = key self.msg = msg self.msg_args = (*msg_args, self.file) @property def file(self): return self.in_folder.path / f"{self.key}.json" def exists(self): return self.file.exists() def read(self): data, bad_format = None, False try: data = json.loads(self.file.read_text(encoding="utf-8")) except ValueError: bad_format = True except Exception: # noqa: BLE001, S110 pass else: logging.debug("got %s from %s", self.msg, self.msg_args) return data if bad_format: with suppress(OSError): # reading and writing on the same file may cause race on multiple processes self.remove() return None def remove(self): self.file.unlink() logging.debug("removed %s at %s", self.msg, self.msg_args) @contextmanager def locked(self): with self.in_folder.lock_for_key(self.key): yield def write(self, content): folder = self.file.parent folder.mkdir(parents=True, exist_ok=True) self.file.write_text(json.dumps(content, sort_keys=True, indent=2), encoding="utf-8") logging.debug("wrote %s at %s", self.msg, self.msg_args) class PyInfoStoreDisk(JSONStoreDisk): def __init__(self, in_folder, path) -> None: key = sha256(str(path).encode("utf-8")).hexdigest() super().__init__(in_folder, key, "python info of %s", (path,)) class EmbedDistributionUpdateStoreDisk(JSONStoreDisk): def __init__(self, in_folder, distribution) -> None: super().__init__( in_folder, distribution, "embed update of distribution %s", (distribution,), ) __all__ = [ "AppDataDiskFolder", "JSONStoreDisk", "PyInfoStoreDisk", ] PK7QY."virtualenv/app_data/via_tempdir.pyfrom __future__ import annotations import logging from tempfile import mkdtemp from virtualenv.util.path import safe_delete from .via_disk_folder import AppDataDiskFolder class TempAppData(AppDataDiskFolder): transient = True can_update = False def __init__(self) -> None: super().__init__(folder=mkdtemp()) logging.debug("created temporary app data folder %s", self.lock.path) def reset(self): """This is a temporary folder, is already empty to start with.""" def close(self): logging.debug("remove temporary app data folder %s", self.lock.path) safe_delete(self.lock.path) def embed_update_log(self, distribution, for_py_version): raise NotImplementedError __all__ = [ "TempAppData", ] PK7QYvirtualenv/config/__init__.pyPK7QYW virtualenv/config/convert.pyfrom __future__ import annotations import logging import os from typing import ClassVar class TypeData: def __init__(self, default_type, as_type) -> None: self.default_type = default_type self.as_type = as_type def __repr__(self) -> str: return f"{self.__class__.__name__}(base={self.default_type}, as={self.as_type})" def convert(self, value): return self.default_type(value) class BoolType(TypeData): BOOLEAN_STATES: ClassVar[dict[str, bool]] = { "1": True, "yes": True, "true": True, "on": True, "0": False, "no": False, "false": False, "off": False, } def convert(self, value): if value.lower() not in self.BOOLEAN_STATES: msg = f"Not a boolean: {value}" raise ValueError(msg) return self.BOOLEAN_STATES[value.lower()] class NoneType(TypeData): def convert(self, value): if not value: return None return str(value) class ListType(TypeData): def _validate(self): """no op.""" def convert(self, value, flatten=True): # noqa: ARG002, FBT002 values = self.split_values(value) result = [] for a_value in values: sub_values = a_value.split(os.pathsep) result.extend(sub_values) return [self.as_type(i) for i in result] def split_values(self, value): """ Split the provided value into a list. First this is done by newlines. If there were no newlines in the text, then we next try to split by comma. """ if isinstance(value, (str, bytes)): # Use `splitlines` rather than a custom check for whether there is # more than one line. This ensures that the full `splitlines()` # logic is supported here. values = value.splitlines() if len(values) <= 1: values = value.split(",") values = filter(None, [x.strip() for x in values]) else: values = list(value) return values def convert(value, as_type, source): """Convert the value as a given type where the value comes from the given source.""" try: return as_type.convert(value) except Exception as exception: logging.warning("%s failed to convert %r as %r because %r", source, value, as_type, exception) raise _CONVERT = {bool: BoolType, type(None): NoneType, list: ListType} def get_type(action): default_type = type(action.default) as_type = default_type if action.type is None else action.type return _CONVERT.get(default_type, TypeData)(default_type, as_type) __all__ = [ "convert", "get_type", ] PK7QY5mvirtualenv/config/env_var.pyfrom __future__ import annotations from contextlib import suppress from .convert import convert def get_env_var(key, as_type, env): """ Get the environment variable option. :param key: the config key requested :param as_type: the type we would like to convert it to :param env: environment variables to use :return: """ environ_key = f"VIRTUALENV_{key.upper()}" if env.get(environ_key): value = env[environ_key] with suppress(Exception): # note the converter already logs a warning when failures happen source = f"env var {environ_key}" as_type = convert(value, as_type, source) return as_type, source return None __all__ = [ "get_env_var", ] PK7QY2um m virtualenv/config/ini.pyfrom __future__ import annotations import logging import os from configparser import ConfigParser from pathlib import Path from typing import ClassVar from platformdirs import user_config_dir from .convert import convert class IniConfig: VIRTUALENV_CONFIG_FILE_ENV_VAR: ClassVar[str] = "VIRTUALENV_CONFIG_FILE" STATE: ClassVar[dict[bool | None, str]] = {None: "failed to parse", True: "active", False: "missing"} section = "virtualenv" def __init__(self, env=None) -> None: env = os.environ if env is None else env config_file = env.get(self.VIRTUALENV_CONFIG_FILE_ENV_VAR, None) self.is_env_var = config_file is not None if config_file is None: config_file = Path(user_config_dir(appname="virtualenv", appauthor="pypa")) / "virtualenv.ini" else: config_file = Path(config_file) self.config_file = config_file self._cache = {} exception = None self.has_config_file = None try: self.has_config_file = self.config_file.exists() except OSError as exc: exception = exc else: if self.has_config_file: self.config_file = self.config_file.resolve() self.config_parser = ConfigParser() try: self._load() self.has_virtualenv_section = self.config_parser.has_section(self.section) except Exception as exc: # noqa: BLE001 exception = exc if exception is not None: logging.error("failed to read config file %s because %r", config_file, exception) def _load(self): with self.config_file.open("rt", encoding="utf-8") as file_handler: return self.config_parser.read_file(file_handler) def get(self, key, as_type): cache_key = key, as_type if cache_key in self._cache: return self._cache[cache_key] try: source = "file" raw_value = self.config_parser.get(self.section, key.lower()) value = convert(raw_value, as_type, source) result = value, source except Exception: # noqa: BLE001 result = None self._cache[cache_key] = result return result def __bool__(self) -> bool: return bool(self.has_config_file) and bool(self.has_virtualenv_section) @property def epilog(self): return ( f"\nconfig file {self.config_file} {self.STATE[self.has_config_file]} " f"(change{'d' if self.is_env_var else ''} via env var {self.VIRTUALENV_CONFIG_FILE_ENV_VAR})" ) PK7QY!virtualenv/config/cli/__init__.pyPK7QY_virtualenv/config/cli/parser.pyfrom __future__ import annotations # noqa: A005 import os from argparse import SUPPRESS, ArgumentDefaultsHelpFormatter, ArgumentParser, Namespace from collections import OrderedDict from virtualenv.config.convert import get_type from virtualenv.config.env_var import get_env_var from virtualenv.config.ini import IniConfig class VirtualEnvOptions(Namespace): def __init__(self, **kwargs) -> None: super().__init__(**kwargs) self._src = None self._sources = {} def set_src(self, key, value, src): setattr(self, key, value) if src.startswith("env var"): src = "env var" self._sources[key] = src def __setattr__(self, key, value) -> None: if getattr(self, "_src", None) is not None: self._sources[key] = self._src super().__setattr__(key, value) def get_source(self, key): return self._sources.get(key) @property def verbosity(self): if not hasattr(self, "verbose") and not hasattr(self, "quiet"): return None return max(self.verbose - self.quiet, 0) def __repr__(self) -> str: return f"{type(self).__name__}({', '.join(f'{k}={v}' for k, v in vars(self).items() if not k.startswith('_'))})" class VirtualEnvConfigParser(ArgumentParser): """Custom option parser which updates its defaults by checking the configuration files and environmental vars.""" def __init__(self, options=None, env=None, *args, **kwargs) -> None: env = os.environ if env is None else env self.file_config = IniConfig(env) self.epilog_list = [] self.env = env kwargs["epilog"] = self.file_config.epilog kwargs["add_help"] = False kwargs["formatter_class"] = HelpFormatter kwargs["prog"] = "virtualenv" super().__init__(*args, **kwargs) self._fixed = set() if options is not None and not isinstance(options, VirtualEnvOptions): msg = "options must be of type VirtualEnvOptions" raise TypeError(msg) self.options = VirtualEnvOptions() if options is None else options self._interpreter = None self._app_data = None def _fix_defaults(self): for action in self._actions: action_id = id(action) if action_id not in self._fixed: self._fix_default(action) self._fixed.add(action_id) def _fix_default(self, action): if hasattr(action, "default") and hasattr(action, "dest") and action.default != SUPPRESS: as_type = get_type(action) names = OrderedDict((i.lstrip("-").replace("-", "_"), None) for i in action.option_strings) outcome = None for name in names: outcome = get_env_var(name, as_type, self.env) if outcome is not None: break if outcome is None and self.file_config: for name in names: outcome = self.file_config.get(name, as_type) if outcome is not None: break if outcome is not None: action.default, action.default_source = outcome else: outcome = action.default, "default" self.options.set_src(action.dest, *outcome) def enable_help(self): self._fix_defaults() self.add_argument("-h", "--help", action="help", default=SUPPRESS, help="show this help message and exit") def parse_known_args(self, args=None, namespace=None): if namespace is None: namespace = self.options elif namespace is not self.options: msg = "can only pass in parser.options" raise ValueError(msg) self._fix_defaults() self.options._src = "cli" # noqa: SLF001 try: namespace.env = self.env return super().parse_known_args(args, namespace=namespace) finally: self.options._src = None # noqa: SLF001 class HelpFormatter(ArgumentDefaultsHelpFormatter): def __init__(self, prog) -> None: super().__init__(prog, max_help_position=32, width=240) def _get_help_string(self, action): text = super()._get_help_string(action) if hasattr(action, "default_source"): default = " (default: %(default)s)" if text.endswith(default): text = f"{text[: -len(default)]} (default: %(default)s -> from %(default_source)s)" return text __all__ = [ "HelpFormatter", "VirtualEnvConfigParser", "VirtualEnvOptions", ] PK7QYvirtualenv/create/__init__.pyPK7QY0!0!virtualenv/create/creator.pyfrom __future__ import annotations import json import logging import os import sys from abc import ABC, abstractmethod from argparse import ArgumentTypeError from ast import literal_eval from collections import OrderedDict from pathlib import Path from virtualenv.discovery.cached_py_info import LogCmd from virtualenv.util.path import safe_delete from virtualenv.util.subprocess import run_cmd from virtualenv.version import __version__ from .pyenv_cfg import PyEnvCfg HERE = Path(os.path.abspath(__file__)).parent DEBUG_SCRIPT = HERE / "debug.py" class CreatorMeta: def __init__(self) -> None: self.error = None class Creator(ABC): """A class that given a python Interpreter creates a virtual environment.""" def __init__(self, options, interpreter) -> None: """ Construct a new virtual environment creator. :param options: the CLI option as parsed from :meth:`add_parser_arguments` :param interpreter: the interpreter to create virtual environment from """ self.interpreter = interpreter self._debug = None self.dest = Path(options.dest) self.clear = options.clear self.no_vcs_ignore = options.no_vcs_ignore self.pyenv_cfg = PyEnvCfg.from_folder(self.dest) self.app_data = options.app_data self.env = options.env def __repr__(self) -> str: return f"{self.__class__.__name__}({', '.join(f'{k}={v}' for k, v in self._args())})" def _args(self): return [ ("dest", str(self.dest)), ("clear", self.clear), ("no_vcs_ignore", self.no_vcs_ignore), ] @classmethod def can_create(cls, interpreter): # noqa: ARG003 """ Determine if we can create a virtual environment. :param interpreter: the interpreter in question :return: ``None`` if we can't create, any other object otherwise that will be forwarded to \ :meth:`add_parser_arguments` """ return True @classmethod def add_parser_arguments(cls, parser, interpreter, meta, app_data): # noqa: ARG003 """ Add CLI arguments for the creator. :param parser: the CLI parser :param app_data: the application data folder :param interpreter: the interpreter we're asked to create virtual environment for :param meta: value as returned by :meth:`can_create` """ parser.add_argument( "dest", help="directory to create virtualenv at", type=cls.validate_dest, ) parser.add_argument( "--clear", dest="clear", action="store_true", help="remove the destination directory if exist before starting (will overwrite files otherwise)", default=False, ) parser.add_argument( "--no-vcs-ignore", dest="no_vcs_ignore", action="store_true", help="don't create VCS ignore directive in the destination directory", default=False, ) @abstractmethod def create(self): """Perform the virtual environment creation.""" raise NotImplementedError @classmethod def validate_dest(cls, raw_value): # noqa: C901 """No path separator in the path, valid chars and must be write-able.""" def non_write_able(dest, value): common = Path(*os.path.commonprefix([value.parts, dest.parts])) msg = f"the destination {dest.relative_to(common)} is not write-able at {common}" raise ArgumentTypeError(msg) # the file system must be able to encode # note in newer CPython this is always utf-8 https://www.python.org/dev/peps/pep-0529/ encoding = sys.getfilesystemencoding() refused = OrderedDict() kwargs = {"errors": "ignore"} if encoding != "mbcs" else {} for char in str(raw_value): try: trip = char.encode(encoding, **kwargs).decode(encoding) if trip == char: continue raise ValueError(trip) # noqa: TRY301 except ValueError: refused[char] = None if refused: bad = "".join(refused.keys()) msg = f"the file system codec ({encoding}) cannot handle characters {bad!r} within {raw_value!r}" raise ArgumentTypeError(msg) if os.pathsep in raw_value: msg = ( f"destination {raw_value!r} must not contain the path separator ({os.pathsep})" f" as this would break the activation scripts" ) raise ArgumentTypeError(msg) value = Path(raw_value) if value.exists() and value.is_file(): msg = f"the destination {value} already exists and is a file" raise ArgumentTypeError(msg) dest = Path(os.path.abspath(str(value))).resolve() # on Windows absolute does not imply resolve so use both value = dest while dest: if dest.exists(): if os.access(str(dest), os.W_OK): break non_write_able(dest, value) base, _ = dest.parent, dest.name if base == dest: non_write_able(dest, value) # pragma: no cover dest = base return str(value) def run(self): if self.dest.exists() and self.clear: logging.debug("delete %s", self.dest) safe_delete(self.dest) self.create() self.set_pyenv_cfg() if not self.no_vcs_ignore: self.setup_ignore_vcs() def set_pyenv_cfg(self): self.pyenv_cfg.content = OrderedDict() self.pyenv_cfg["home"] = os.path.dirname(os.path.abspath(self.interpreter.system_executable)) self.pyenv_cfg["implementation"] = self.interpreter.implementation self.pyenv_cfg["version_info"] = ".".join(str(i) for i in self.interpreter.version_info) self.pyenv_cfg["virtualenv"] = __version__ def setup_ignore_vcs(self): """Generate ignore instructions for version control systems.""" # mark this folder to be ignored by VCS, handle https://www.python.org/dev/peps/pep-0610/#registered-vcs git_ignore = self.dest / ".gitignore" if not git_ignore.exists(): git_ignore.write_text("# created by virtualenv automatically\n*\n", encoding="utf-8") # Mercurial - does not support the .hgignore file inside a subdirectory directly, but only if included via the # subinclude directive from root, at which point on might as well ignore the directory itself, see # https://www.selenic.com/mercurial/hgignore.5.html for more details # Bazaar - does not support ignore files in sub-directories, only at root level via .bzrignore # Subversion - does not support ignore files, requires direct manipulation with the svn tool @property def debug(self): """:return: debug information about the virtual environment (only valid after :meth:`create` has run)""" if self._debug is None and self.exe is not None: self._debug = get_env_debug_info(self.exe, self.debug_script(), self.app_data, self.env) return self._debug @staticmethod def debug_script(): return DEBUG_SCRIPT def get_env_debug_info(env_exe, debug_script, app_data, env): env = env.copy() env.pop("PYTHONPATH", None) with app_data.ensure_extracted(debug_script) as debug_script_extracted: cmd = [str(env_exe), str(debug_script_extracted)] logging.debug("debug via %r", LogCmd(cmd)) code, out, err = run_cmd(cmd) try: if code != 0: if out: result = literal_eval(out) else: if code == 2 and "file" in err: # noqa: PLR2004 # Re-raise FileNotFoundError from `run_cmd()` raise OSError(err) # noqa: TRY301 raise Exception(err) # noqa: TRY002, TRY301 else: result = json.loads(out) if err: result["err"] = err except Exception as exception: # noqa: BLE001 return {"out": out, "err": err, "returncode": code, "exception": repr(exception)} if "sys" in result and "path" in result["sys"]: del result["sys"]["path"][0] return result __all__ = [ "Creator", "CreatorMeta", ] PK7QYa5M M virtualenv/create/debug.py"""Inspect a target Python interpreter virtual environment wise.""" from __future__ import annotations import sys # built-in def encode_path(value): if value is None: return None if not isinstance(value, (str, bytes)): value = repr(value) if isinstance(value, type) else repr(type(value)) if isinstance(value, bytes): value = value.decode(sys.getfilesystemencoding()) return value def encode_list_path(value): return [encode_path(i) for i in value] def run(): """Print debug data about the virtual environment.""" try: from collections import OrderedDict # noqa: PLC0415 except ImportError: # pragma: no cover # this is possible if the standard library cannot be accessed OrderedDict = dict # pragma: no cover # noqa: N806 result = OrderedDict([("sys", OrderedDict())]) path_keys = ( "executable", "_base_executable", "prefix", "base_prefix", "real_prefix", "exec_prefix", "base_exec_prefix", "path", "meta_path", ) for key in path_keys: value = getattr(sys, key, None) value = encode_list_path(value) if isinstance(value, list) else encode_path(value) result["sys"][key] = value result["sys"]["fs_encoding"] = sys.getfilesystemencoding() result["sys"]["io_encoding"] = getattr(sys.stdout, "encoding", None) result["version"] = sys.version try: import sysconfig # noqa: PLC0415 # https://bugs.python.org/issue22199 makefile = getattr(sysconfig, "get_makefile_filename", getattr(sysconfig, "_get_makefile_filename", None)) result["makefile_filename"] = encode_path(makefile()) except ImportError: pass import os # landmark # noqa: PLC0415 result["os"] = repr(os) try: import site # site # noqa: PLC0415 result["site"] = repr(site) except ImportError as exception: # pragma: no cover result["site"] = repr(exception) # pragma: no cover try: import datetime # site # noqa: PLC0415 result["datetime"] = repr(datetime) except ImportError as exception: # pragma: no cover result["datetime"] = repr(exception) # pragma: no cover try: import math # site # noqa: PLC0415 result["math"] = repr(math) except ImportError as exception: # pragma: no cover result["math"] = repr(exception) # pragma: no cover # try to print out, this will validate if other core modules are available (json in this case) try: import json # noqa: PLC0415 result["json"] = repr(json) except ImportError as exception: result["json"] = repr(exception) else: try: content = json.dumps(result, indent=2) sys.stdout.write(content) except (ValueError, TypeError) as exception: # pragma: no cover sys.stderr.write(repr(exception)) sys.stdout.write(repr(result)) # pragma: no cover raise SystemExit(1) # noqa: B904 # pragma: no cover if __name__ == "__main__": run() PK7QY@R R virtualenv/create/describe.pyfrom __future__ import annotations from abc import ABC from collections import OrderedDict from pathlib import Path from virtualenv.info import IS_WIN class Describe: """Given a host interpreter tell us information about what the created interpreter might look like.""" suffix = ".exe" if IS_WIN else "" def __init__(self, dest, interpreter) -> None: self.interpreter = interpreter self.dest = dest self._stdlib = None self._stdlib_platform = None self._system_stdlib = None self._conf_vars = None @property def bin_dir(self): return self.script_dir @property def script_dir(self): return self.dest / self.interpreter.install_path("scripts") @property def purelib(self): return self.dest / self.interpreter.install_path("purelib") @property def platlib(self): return self.dest / self.interpreter.install_path("platlib") @property def libs(self): return list(OrderedDict(((self.platlib, None), (self.purelib, None))).keys()) @property def stdlib(self): if self._stdlib is None: self._stdlib = Path(self.interpreter.sysconfig_path("stdlib", config_var=self._config_vars)) return self._stdlib @property def stdlib_platform(self): if self._stdlib_platform is None: self._stdlib_platform = Path(self.interpreter.sysconfig_path("platstdlib", config_var=self._config_vars)) return self._stdlib_platform @property def _config_vars(self): if self._conf_vars is None: self._conf_vars = self._calc_config_vars(self.dest) return self._conf_vars def _calc_config_vars(self, to): sys_vars = self.interpreter.sysconfig_vars return {k: (to if v is not None and v.startswith(self.interpreter.prefix) else v) for k, v in sys_vars.items()} @classmethod def can_describe(cls, interpreter): # noqa: ARG003 """Knows means it knows how the output will look.""" return True @property def env_name(self): return self.dest.parts[-1] @property def exe(self): return self.bin_dir / f"{self.exe_stem()}{self.suffix}" @classmethod def exe_stem(cls): """Executable name without suffix - there seems to be no standard way to get this without creating it.""" raise NotImplementedError def script(self, name): return self.script_dir / f"{name}{self.suffix}" class Python3Supports(Describe, ABC): @classmethod def can_describe(cls, interpreter): return interpreter.version_info.major == 3 and super().can_describe(interpreter) # noqa: PLR2004 class PosixSupports(Describe, ABC): @classmethod def can_describe(cls, interpreter): return interpreter.os == "posix" and super().can_describe(interpreter) class WindowsSupports(Describe, ABC): @classmethod def can_describe(cls, interpreter): return interpreter.os == "nt" and super().can_describe(interpreter) __all__ = [ "Describe", "PosixSupports", "Python3Supports", "WindowsSupports", ] PK7QYs/2Vvirtualenv/create/pyenv_cfg.pyfrom __future__ import annotations import logging import os from collections import OrderedDict class PyEnvCfg: def __init__(self, content, path) -> None: self.content = content self.path = path @classmethod def from_folder(cls, folder): return cls.from_file(folder / "pyvenv.cfg") @classmethod def from_file(cls, path): content = cls._read_values(path) if path.exists() else OrderedDict() return PyEnvCfg(content, path) @staticmethod def _read_values(path): content = OrderedDict() for line in path.read_text(encoding="utf-8").splitlines(): equals_at = line.index("=") key = line[:equals_at].strip() value = line[equals_at + 1 :].strip() content[key] = value return content def write(self): logging.debug("write %s", self.path) text = "" for key, value in self.content.items(): normalized_value = os.path.realpath(value) if value and os.path.exists(value) else value line = f"{key} = {normalized_value}" logging.debug("\t%s", line) text += line text += "\n" self.path.write_text(text, encoding="utf-8") def refresh(self): self.content = self._read_values(self.path) return self.content def __setitem__(self, key, value) -> None: self.content[key] = value def __getitem__(self, key): return self.content[key] def __contains__(self, item) -> bool: return item in self.content def update(self, other): self.content.update(other) return self def __repr__(self) -> str: return f"{self.__class__.__name__}(path={self.path})" __all__ = [ "PyEnvCfg", ] PK7QY,virtualenv/create/via_global_ref/__init__.pyPK7QYV[[/virtualenv/create/via_global_ref/_virtualenv.py"""Patches that are applied at runtime to the virtual environment.""" from __future__ import annotations import os import sys VIRTUALENV_PATCH_FILE = os.path.join(__file__) def patch_dist(dist): """ Distutils allows user to configure some arguments via a configuration file: https://docs.python.org/3/install/index.html#distutils-configuration-files. Some of this arguments though don't make sense in context of the virtual environment files, let's fix them up. """ # noqa: D205 # we cannot allow some install config as that would get packages installed outside of the virtual environment old_parse_config_files = dist.Distribution.parse_config_files def parse_config_files(self, *args, **kwargs): result = old_parse_config_files(self, *args, **kwargs) install = self.get_option_dict("install") if "prefix" in install: # the prefix governs where to install the libraries install["prefix"] = VIRTUALENV_PATCH_FILE, os.path.abspath(sys.prefix) for base in ("purelib", "platlib", "headers", "scripts", "data"): key = f"install_{base}" if key in install: # do not allow global configs to hijack venv paths install.pop(key, None) return result dist.Distribution.parse_config_files = parse_config_files # Import hook that patches some modules to ignore configuration values that break package installation in case # of virtual environments. _DISTUTILS_PATCH = "distutils.dist", "setuptools.dist" # https://docs.python.org/3/library/importlib.html#setting-up-an-importer class _Finder: """A meta path finder that allows patching the imported distutils modules.""" fullname = None # lock[0] is threading.Lock(), but initialized lazily to avoid importing threading very early at startup, # because there are gevent-based applications that need to be first to import threading by themselves. # See https://github.com/pypa/virtualenv/issues/1895 for details. lock = [] # noqa: RUF012 def find_spec(self, fullname, path, target=None): # noqa: ARG002 if fullname in _DISTUTILS_PATCH and self.fullname is None: # noqa: PLR1702 # initialize lock[0] lazily if len(self.lock) == 0: import threading # noqa: PLC0415 lock = threading.Lock() # there is possibility that two threads T1 and T2 are simultaneously running into find_spec, # observing .lock as empty, and further going into hereby initialization. However due to the GIL, # list.append() operation is atomic and this way only one of the threads will "win" to put the lock # - that every thread will use - into .lock[0]. # https://docs.python.org/3/faq/library.html#what-kinds-of-global-value-mutation-are-thread-safe self.lock.append(lock) from functools import partial # noqa: PLC0415 from importlib.util import find_spec # noqa: PLC0415 with self.lock[0]: self.fullname = fullname try: spec = find_spec(fullname, path) if spec is not None: # https://www.python.org/dev/peps/pep-0451/#how-loading-will-work is_new_api = hasattr(spec.loader, "exec_module") func_name = "exec_module" if is_new_api else "load_module" old = getattr(spec.loader, func_name) func = self.exec_module if is_new_api else self.load_module if old is not func: try: # noqa: SIM105 setattr(spec.loader, func_name, partial(func, old)) except AttributeError: pass # C-Extension loaders are r/o such as zipimporter with <3.7 return spec finally: self.fullname = None return None @staticmethod def exec_module(old, module): old(module) if module.__name__ in _DISTUTILS_PATCH: patch_dist(module) @staticmethod def load_module(old, name): module = old(name) if module.__name__ in _DISTUTILS_PATCH: patch_dist(module) return module sys.meta_path.insert(0, _Finder()) PK7QY_`:'virtualenv/create/via_global_ref/api.pyfrom __future__ import annotations import logging import os from abc import ABC from pathlib import Path from virtualenv.create.creator import Creator, CreatorMeta from virtualenv.info import fs_supports_symlink class ViaGlobalRefMeta(CreatorMeta): def __init__(self) -> None: super().__init__() self.copy_error = None self.symlink_error = None if not fs_supports_symlink(): self.symlink_error = "the filesystem does not supports symlink" @property def can_copy(self): return not self.copy_error @property def can_symlink(self): return not self.symlink_error class ViaGlobalRefApi(Creator, ABC): def __init__(self, options, interpreter) -> None: super().__init__(options, interpreter) self.symlinks = self._should_symlink(options) self.enable_system_site_package = options.system_site @staticmethod def _should_symlink(options): # Priority of where the option is set to follow the order: CLI, env var, file, hardcoded. # If both set at same level prefers copy over symlink. copies, symlinks = getattr(options, "copies", False), getattr(options, "symlinks", False) copy_src, sym_src = options.get_source("copies"), options.get_source("symlinks") for level in ["cli", "env var", "file", "default"]: s_opt = symlinks if sym_src == level else None c_opt = copies if copy_src == level else None if s_opt is True and c_opt is True: return False if s_opt is True: return True if c_opt is True: return False return False # fallback to copy @classmethod def add_parser_arguments(cls, parser, interpreter, meta, app_data): super().add_parser_arguments(parser, interpreter, meta, app_data) parser.add_argument( "--system-site-packages", default=False, action="store_true", dest="system_site", help="give the virtual environment access to the system site-packages dir", ) if not meta.can_symlink and not meta.can_copy: msg = "neither symlink or copy method supported" raise RuntimeError(msg) group = parser.add_mutually_exclusive_group() if meta.can_symlink: group.add_argument( "--symlinks", default=True, action="store_true", dest="symlinks", help="try to use symlinks rather than copies, when symlinks are not the default for the platform", ) if meta.can_copy: group.add_argument( "--copies", "--always-copy", default=not meta.can_symlink, action="store_true", dest="copies", help="try to use copies rather than symlinks, even when symlinks are the default for the platform", ) def create(self): self.install_patch() def install_patch(self): text = self.env_patch_text() if text: pth = self.purelib / "_virtualenv.pth" logging.debug("create virtualenv import hook file %s", pth) pth.write_text("import _virtualenv", encoding="utf-8") dest_path = self.purelib / "_virtualenv.py" logging.debug("create %s", dest_path) dest_path.write_text(text, encoding="utf-8") def env_patch_text(self): """Patch the distutils package to not be derailed by its configuration files.""" with self.app_data.ensure_extracted(Path(__file__).parent / "_virtualenv.py") as resolved_path: text = resolved_path.read_text(encoding="utf-8") return text.replace('"__SCRIPT_DIR__"', repr(os.path.relpath(str(self.script_dir), str(self.purelib)))) def _args(self): return [*super()._args(), ("global", self.enable_system_site_package)] def set_pyenv_cfg(self): super().set_pyenv_cfg() self.pyenv_cfg["include-system-site-packages"] = "true" if self.enable_system_site_package else "false" __all__ = [ "ViaGlobalRefApi", "ViaGlobalRefMeta", ] PK7QYɋ )virtualenv/create/via_global_ref/store.pyfrom __future__ import annotations from pathlib import Path def handle_store_python(meta, interpreter): if is_store_python(interpreter): meta.symlink_error = "Windows Store Python does not support virtual environments via symlink" return meta def is_store_python(interpreter): parts = Path(interpreter.system_executable).parts return ( len(parts) > 4 # noqa: PLR2004 and parts[-4] == "Microsoft" and parts[-3] == "WindowsApps" and parts[-2].startswith("PythonSoftwareFoundation.Python.3.") and parts[-1].startswith("python") ) __all__ = [ "handle_store_python", "is_store_python", ] PK7QYyQQ(virtualenv/create/via_global_ref/venv.pyfrom __future__ import annotations # noqa: A005 import logging from copy import copy from virtualenv.create.via_global_ref.store import handle_store_python from virtualenv.discovery.py_info import PythonInfo from virtualenv.util.error import ProcessCallFailedError from virtualenv.util.path import ensure_dir from virtualenv.util.subprocess import run_cmd from .api import ViaGlobalRefApi, ViaGlobalRefMeta from .builtin.cpython.mac_os import CPython3macOsBrew from .builtin.pypy.pypy3 import Pypy3Windows class Venv(ViaGlobalRefApi): def __init__(self, options, interpreter) -> None: self.describe = options.describe super().__init__(options, interpreter) current = PythonInfo.current() self.can_be_inline = interpreter is current and interpreter.executable == interpreter.system_executable self._context = None def _args(self): return super()._args() + ([("describe", self.describe.__class__.__name__)] if self.describe else []) @classmethod def can_create(cls, interpreter): if interpreter.has_venv: if CPython3macOsBrew.can_describe(interpreter): return CPython3macOsBrew.setup_meta(interpreter) meta = ViaGlobalRefMeta() if interpreter.platform == "win32": meta = handle_store_python(meta, interpreter) return meta return None def create(self): if self.can_be_inline: self.create_inline() else: self.create_via_sub_process() for lib in self.libs: ensure_dir(lib) super().create() self.executables_for_win_pypy_less_v37() def executables_for_win_pypy_less_v37(self): """ PyPy <= 3.6 (v7.3.3) for Windows contains only pypy3.exe and pypy3w.exe Venv does not handle non-existing exe sources, e.g. python.exe, so this patch does it. """ # noqa: D205 creator = self.describe if isinstance(creator, Pypy3Windows) and creator.less_v37: for exe in creator.executables(self.interpreter): exe.run(creator, self.symlinks) def create_inline(self): from venv import EnvBuilder # noqa: PLC0415 builder = EnvBuilder( system_site_packages=self.enable_system_site_package, clear=False, symlinks=self.symlinks, with_pip=False, ) builder.create(str(self.dest)) def create_via_sub_process(self): cmd = self.get_host_create_cmd() logging.info("using host built-in venv to create via %s", " ".join(cmd)) code, out, err = run_cmd(cmd) if code != 0: raise ProcessCallFailedError(code, out, err, cmd) def get_host_create_cmd(self): cmd = [self.interpreter.system_executable, "-m", "venv", "--without-pip"] if self.enable_system_site_package: cmd.append("--system-site-packages") cmd.extend(("--symlinks" if self.symlinks else "--copies", str(self.dest))) return cmd def set_pyenv_cfg(self): # prefer venv options over ours, but keep our extra venv_content = copy(self.pyenv_cfg.refresh()) super().set_pyenv_cfg() self.pyenv_cfg.update(venv_content) def __getattribute__(self, item): describe = object.__getattribute__(self, "describe") if describe is not None and hasattr(describe, item): element = getattr(describe, item) if not callable(element) or item == "script": return element return object.__getattribute__(self, item) __all__ = [ "Venv", ] PK7QY4virtualenv/create/via_global_ref/builtin/__init__.pyPK7QYbby7virtualenv/create/via_global_ref/builtin/builtin_way.pyfrom __future__ import annotations from abc import ABC from virtualenv.create.creator import Creator from virtualenv.create.describe import Describe class VirtualenvBuiltin(Creator, Describe, ABC): """A creator that does operations itself without delegation, if we can create it we can also describe it.""" def __init__(self, options, interpreter) -> None: Creator.__init__(self, options, interpreter) Describe.__init__(self, self.dest, interpreter) __all__ = [ "VirtualenvBuiltin", ] PK7QYȈ, 99/virtualenv/create/via_global_ref/builtin/ref.py""" Virtual environments in the traditional sense are built as reference to the host python. This file allows declarative references to elements on the file system, allowing our system to automatically detect what modes it can support given the constraints: e.g. can the file system symlink, can the files be read, executed, etc. """ # noqa: D205 from __future__ import annotations import os from abc import ABC, abstractmethod from collections import OrderedDict from stat import S_IXGRP, S_IXOTH, S_IXUSR from virtualenv.info import fs_is_case_sensitive, fs_supports_symlink from virtualenv.util.path import copy, make_exe, symlink class RefMust: NA = "NA" COPY = "copy" SYMLINK = "symlink" class RefWhen: ANY = "ANY" COPY = "copy" SYMLINK = "symlink" class PathRef(ABC): """Base class that checks if a file reference can be symlink/copied.""" FS_SUPPORTS_SYMLINK = fs_supports_symlink() FS_CASE_SENSITIVE = fs_is_case_sensitive() def __init__(self, src, must=RefMust.NA, when=RefWhen.ANY) -> None: self.must = must self.when = when self.src = src try: self.exists = src.exists() except OSError: self.exists = False self._can_read = None if self.exists else False self._can_copy = None if self.exists else False self._can_symlink = None if self.exists else False def __repr__(self) -> str: return f"{self.__class__.__name__}(src={self.src})" @property def can_read(self): if self._can_read is None: if self.src.is_file(): try: with self.src.open("rb"): self._can_read = True except OSError: self._can_read = False else: self._can_read = os.access(str(self.src), os.R_OK) return self._can_read @property def can_copy(self): if self._can_copy is None: if self.must == RefMust.SYMLINK: self._can_copy = self.can_symlink else: self._can_copy = self.can_read return self._can_copy @property def can_symlink(self): if self._can_symlink is None: if self.must == RefMust.COPY: self._can_symlink = self.can_copy else: self._can_symlink = self.FS_SUPPORTS_SYMLINK and self.can_read return self._can_symlink @abstractmethod def run(self, creator, symlinks): raise NotImplementedError def method(self, symlinks): if self.must == RefMust.SYMLINK: return symlink if self.must == RefMust.COPY: return copy return symlink if symlinks else copy class ExePathRef(PathRef, ABC): """Base class that checks if a executable can be references via symlink/copy.""" def __init__(self, src, must=RefMust.NA, when=RefWhen.ANY) -> None: super().__init__(src, must, when) self._can_run = None @property def can_symlink(self): if self.FS_SUPPORTS_SYMLINK: return self.can_run return False @property def can_run(self): if self._can_run is None: mode = self.src.stat().st_mode for key in [S_IXUSR, S_IXGRP, S_IXOTH]: if mode & key: self._can_run = True break else: self._can_run = False return self._can_run class PathRefToDest(PathRef): """Link a path on the file system.""" def __init__(self, src, dest, must=RefMust.NA, when=RefWhen.ANY) -> None: super().__init__(src, must, when) self.dest = dest def run(self, creator, symlinks): dest = self.dest(creator, self.src) method = self.method(symlinks) dest_iterable = dest if isinstance(dest, list) else (dest,) if not dest.parent.exists(): dest.parent.mkdir(parents=True, exist_ok=True) for dst in dest_iterable: method(self.src, dst) class ExePathRefToDest(PathRefToDest, ExePathRef): """Link a exe path on the file system.""" def __init__(self, src, targets, dest, must=RefMust.NA, when=RefWhen.ANY) -> None: ExePathRef.__init__(self, src, must, when) PathRefToDest.__init__(self, src, dest, must, when) if not self.FS_CASE_SENSITIVE: targets = list(OrderedDict((i.lower(), None) for i in targets).keys()) self.base = targets[0] self.aliases = targets[1:] self.dest = dest def run(self, creator, symlinks): bin_dir = self.dest(creator, self.src).parent dest = bin_dir / self.base method = self.method(symlinks) method(self.src, dest) if not symlinks: make_exe(dest) for extra in self.aliases: link_file = bin_dir / extra if link_file.exists(): link_file.unlink() if symlinks: link_file.symlink_to(self.base) else: copy(self.src, link_file) if not symlinks: make_exe(link_file) def __repr__(self) -> str: return f"{self.__class__.__name__}(src={self.src}, alias={self.aliases})" __all__ = [ "ExePathRef", "ExePathRefToDest", "PathRef", "PathRefToDest", "RefMust", "RefWhen", ] PK7QYm=NN>virtualenv/create/via_global_ref/builtin/via_global_self_do.pyfrom __future__ import annotations from abc import ABC from virtualenv.create.via_global_ref.api import ViaGlobalRefApi, ViaGlobalRefMeta from virtualenv.create.via_global_ref.builtin.ref import ( ExePathRefToDest, RefMust, RefWhen, ) from virtualenv.util.path import ensure_dir from .builtin_way import VirtualenvBuiltin class BuiltinViaGlobalRefMeta(ViaGlobalRefMeta): def __init__(self) -> None: super().__init__() self.sources = [] class ViaGlobalRefVirtualenvBuiltin(ViaGlobalRefApi, VirtualenvBuiltin, ABC): def __init__(self, options, interpreter) -> None: super().__init__(options, interpreter) self._sources = getattr(options.meta, "sources", None) # if we're created as a describer this might be missing @classmethod def can_create(cls, interpreter): """By default, all built-in methods assume that if we can describe it we can create it.""" # first we must be able to describe it if not cls.can_describe(interpreter): return None meta = cls.setup_meta(interpreter) if meta is not None and meta: cls._sources_can_be_applied(interpreter, meta) return meta @classmethod def _sources_can_be_applied(cls, interpreter, meta): for src in cls.sources(interpreter): if src.exists: if meta.can_copy and not src.can_copy: meta.copy_error = f"cannot copy {src}" if meta.can_symlink and not src.can_symlink: meta.symlink_error = f"cannot symlink {src}" else: msg = f"missing required file {src}" if src.when == RefMust.NA: meta.error = msg elif src.when == RefMust.COPY: meta.copy_error = msg elif src.when == RefMust.SYMLINK: meta.symlink_error = msg if not meta.can_copy and not meta.can_symlink: meta.error = f"neither copy or symlink supported, copy: {meta.copy_error} symlink: {meta.symlink_error}" if meta.error: break meta.sources.append(src) @classmethod def setup_meta(cls, interpreter): # noqa: ARG003 return BuiltinViaGlobalRefMeta() @classmethod def sources(cls, interpreter): for host_exe, targets, must, when in cls._executables(interpreter): yield ExePathRefToDest(host_exe, dest=cls.to_bin, targets=targets, must=must, when=when) def to_bin(self, src): return self.bin_dir / src.name @classmethod def _executables(cls, interpreter): raise NotImplementedError def create(self): dirs = self.ensure_directories() for directory in list(dirs): if any(i for i in dirs if i is not directory and directory.parts == i.parts[: len(directory.parts)]): dirs.remove(directory) for directory in sorted(dirs): ensure_dir(directory) self.set_pyenv_cfg() self.pyenv_cfg.write() true_system_site = self.enable_system_site_package try: self.enable_system_site_package = False for src in self._sources: if ( src.when == RefWhen.ANY or (src.when == RefWhen.SYMLINK and self.symlinks is True) or (src.when == RefWhen.COPY and self.symlinks is False) ): src.run(self, self.symlinks) finally: if true_system_site != self.enable_system_site_package: self.enable_system_site_package = true_system_site super().create() def ensure_directories(self): return {self.dest, self.bin_dir, self.script_dir, self.stdlib} | set(self.libs) def set_pyenv_cfg(self): """ We directly inject the base prefix and base exec prefix to avoid site.py needing to discover these from home (which usually is done within the interpreter itself). """ # noqa: D205 super().set_pyenv_cfg() self.pyenv_cfg["base-prefix"] = self.interpreter.system_prefix self.pyenv_cfg["base-exec-prefix"] = self.interpreter.system_exec_prefix self.pyenv_cfg["base-executable"] = self.interpreter.system_executable __all__ = [ "BuiltinViaGlobalRefMeta", "ViaGlobalRefVirtualenvBuiltin", ] PK7QY<virtualenv/create/via_global_ref/builtin/cpython/__init__.pyPK7QY||r :virtualenv/create/via_global_ref/builtin/cpython/common.pyfrom __future__ import annotations import re from abc import ABC from collections import OrderedDict from pathlib import Path from virtualenv.create.describe import PosixSupports, WindowsSupports from virtualenv.create.via_global_ref.builtin.ref import RefMust, RefWhen from virtualenv.create.via_global_ref.builtin.via_global_self_do import ViaGlobalRefVirtualenvBuiltin class CPython(ViaGlobalRefVirtualenvBuiltin, ABC): @classmethod def can_describe(cls, interpreter): return interpreter.implementation == "CPython" and super().can_describe(interpreter) @classmethod def exe_stem(cls): return "python" class CPythonPosix(CPython, PosixSupports, ABC): """Create a CPython virtual environment on POSIX platforms.""" @classmethod def _executables(cls, interpreter): host_exe = Path(interpreter.system_executable) major, minor = interpreter.version_info.major, interpreter.version_info.minor targets = OrderedDict((i, None) for i in ["python", f"python{major}", f"python{major}.{minor}", host_exe.name]) yield host_exe, list(targets.keys()), RefMust.NA, RefWhen.ANY class CPythonWindows(CPython, WindowsSupports, ABC): @classmethod def _executables(cls, interpreter): # symlink of the python executables does not work reliably, copy always instead # - https://bugs.python.org/issue42013 # - venv host = cls.host_python(interpreter) for path in (host.parent / n for n in {"python.exe", host.name}): # noqa: PLC0208 yield host, [path.name], RefMust.COPY, RefWhen.ANY # for more info on pythonw.exe see https://stackoverflow.com/a/30313091 python_w = host.parent / "pythonw.exe" yield python_w, [python_w.name], RefMust.COPY, RefWhen.ANY @classmethod def host_python(cls, interpreter): return Path(interpreter.system_executable) def is_mac_os_framework(interpreter): if interpreter.platform == "darwin": return interpreter.sysconfig_vars.get("PYTHONFRAMEWORK") == "Python3" return False def is_macos_brew(interpreter): return interpreter.platform == "darwin" and _BREW.fullmatch(interpreter.system_prefix) is not None _BREW = re.compile( r"/(usr/local|opt/homebrew)/(opt/python@3\.\d{1,2}|Cellar/python@3\.\d{1,2}/3\.\d{1,2}\.\d{1,2})/Frameworks/" r"Python\.framework/Versions/3\.\d{1,2}", ) __all__ = [ "CPython", "CPythonPosix", "CPythonWindows", "is_mac_os_framework", "is_macos_brew", ] PK7QYT(Kϵ<virtualenv/create/via_global_ref/builtin/cpython/cpython3.pyfrom __future__ import annotations import abc import fnmatch from itertools import chain from operator import methodcaller as method from pathlib import Path from textwrap import dedent from virtualenv.create.describe import Python3Supports from virtualenv.create.via_global_ref.builtin.ref import PathRefToDest from virtualenv.create.via_global_ref.store import is_store_python from .common import CPython, CPythonPosix, CPythonWindows, is_mac_os_framework, is_macos_brew class CPython3(CPython, Python3Supports, abc.ABC): """CPython 3 or later.""" class CPython3Posix(CPythonPosix, CPython3): @classmethod def can_describe(cls, interpreter): return ( is_mac_os_framework(interpreter) is False and is_macos_brew(interpreter) is False and super().can_describe(interpreter) ) def env_patch_text(self): text = super().env_patch_text() if self.pyvenv_launch_patch_active(self.interpreter): text += dedent( """ # for https://github.com/python/cpython/pull/9516, see https://github.com/pypa/virtualenv/issues/1704 import os if "__PYVENV_LAUNCHER__" in os.environ: del os.environ["__PYVENV_LAUNCHER__"] """, ) return text @classmethod def pyvenv_launch_patch_active(cls, interpreter): ver = interpreter.version_info return interpreter.platform == "darwin" and ((3, 7, 8) > ver >= (3, 7) or (3, 8, 3) > ver >= (3, 8)) class CPython3Windows(CPythonWindows, CPython3): """CPython 3 on Windows.""" @classmethod def setup_meta(cls, interpreter): if is_store_python(interpreter): # store python is not supported here return None return super().setup_meta(interpreter) @classmethod def sources(cls, interpreter): if cls.has_shim(interpreter): refs = cls.executables(interpreter) else: refs = chain( cls.executables(interpreter), cls.dll_and_pyd(interpreter), cls.python_zip(interpreter), ) yield from refs @classmethod def executables(cls, interpreter): return super().sources(interpreter) @classmethod def has_shim(cls, interpreter): return interpreter.version_info.minor >= 7 and cls.shim(interpreter) is not None # noqa: PLR2004 @classmethod def shim(cls, interpreter): shim = Path(interpreter.system_stdlib) / "venv" / "scripts" / "nt" / "python.exe" if shim.exists(): return shim return None @classmethod def host_python(cls, interpreter): if cls.has_shim(interpreter): # starting with CPython 3.7 Windows ships with a venvlauncher.exe that avoids the need for dll/pyd copies # it also means the wrapper must be copied to avoid bugs such as https://bugs.python.org/issue42013 return cls.shim(interpreter) return super().host_python(interpreter) @classmethod def dll_and_pyd(cls, interpreter): folders = [Path(interpreter.system_executable).parent] # May be missing on some Python hosts. # See https://github.com/pypa/virtualenv/issues/2368 dll_folder = Path(interpreter.system_prefix) / "DLLs" if dll_folder.is_dir(): folders.append(dll_folder) for folder in folders: for file in folder.iterdir(): if file.suffix in {".pyd", ".dll"}: yield PathRefToDest(file, cls.to_bin) @classmethod def python_zip(cls, interpreter): """ "python{VERSION}.zip" contains compiled *.pyc std lib packages, where "VERSION" is `py_version_nodot` var from the `sysconfig` module. :see: https://docs.python.org/3/using/windows.html#the-embeddable-package :see: `discovery.py_info.PythonInfo` class (interpreter). :see: `python -m sysconfig` output. :note: The embeddable Python distribution for Windows includes "python{VERSION}.zip" and "python{VERSION}._pth" files. User can move/rename *zip* file and edit `sys.path` by editing *_pth* file. Here the `pattern` is used only for the default *zip* file name! """ # noqa: D205 pattern = f"*python{interpreter.version_nodot}.zip" matches = fnmatch.filter(interpreter.path, pattern) matched_paths = map(Path, matches) existing_paths = filter(method("exists"), matched_paths) path = next(existing_paths, None) if path is not None: yield PathRefToDest(path, cls.to_bin) __all__ = [ "CPython3", "CPython3Posix", "CPython3Windows", ] PK7QY4q-q-:virtualenv/create/via_global_ref/builtin/cpython/mac_os.py"""The Apple Framework builds require their own customization.""" from __future__ import annotations import logging import os import struct import subprocess from abc import ABC, abstractmethod from pathlib import Path from textwrap import dedent from virtualenv.create.via_global_ref.builtin.ref import ( ExePathRefToDest, PathRefToDest, RefMust, ) from virtualenv.create.via_global_ref.builtin.via_global_self_do import BuiltinViaGlobalRefMeta from .common import CPython, CPythonPosix, is_mac_os_framework, is_macos_brew from .cpython3 import CPython3 class CPythonmacOsFramework(CPython, ABC): @classmethod def can_describe(cls, interpreter): return is_mac_os_framework(interpreter) and super().can_describe(interpreter) def create(self): super().create() # change the install_name of the copied python executables target = self.desired_mach_o_image_path() current = self.current_mach_o_image_path() for src in self._sources: if isinstance(src, ExePathRefToDest) and (src.must == RefMust.COPY or not self.symlinks): exes = [self.bin_dir / src.base] if not self.symlinks: exes.extend(self.bin_dir / a for a in src.aliases) for exe in exes: fix_mach_o(str(exe), current, target, self.interpreter.max_size) @classmethod def _executables(cls, interpreter): for _, targets, must, when in super()._executables(interpreter): # Make sure we use the embedded interpreter inside the framework, even if sys.executable points to the # stub executable in ${sys.prefix}/bin. # See http://groups.google.com/group/python-virtualenv/browse_thread/thread/17cab2f85da75951 fixed_host_exe = Path(interpreter.prefix) / "Resources" / "Python.app" / "Contents" / "MacOS" / "Python" yield fixed_host_exe, targets, must, when @abstractmethod def current_mach_o_image_path(self): raise NotImplementedError @abstractmethod def desired_mach_o_image_path(self): raise NotImplementedError class CPython3macOsFramework(CPythonmacOsFramework, CPython3, CPythonPosix): def current_mach_o_image_path(self): return "@executable_path/../../../../Python3" def desired_mach_o_image_path(self): return "@executable_path/../.Python" @classmethod def sources(cls, interpreter): yield from super().sources(interpreter) # add a symlink to the host python image exe = Path(interpreter.prefix) / "Python3" yield PathRefToDest(exe, dest=lambda self, _: self.dest / ".Python", must=RefMust.SYMLINK) @property def reload_code(self): result = super().reload_code return dedent( f""" # the bundled site.py always adds the global site package if we're on python framework build, escape this import sys before = sys._framework try: sys._framework = None {result} finally: sys._framework = before """, ) def fix_mach_o(exe, current, new, max_size): """ https://en.wikipedia.org/wiki/Mach-O. Mach-O, short for Mach object file format, is a file format for executables, object code, shared libraries, dynamically-loaded code, and core dumps. A replacement for the a.out format, Mach-O offers more extensibility and faster access to information in the symbol table. Each Mach-O file is made up of one Mach-O header, followed by a series of load commands, followed by one or more segments, each of which contains between 0 and 255 sections. Mach-O uses the REL relocation format to handle references to symbols. When looking up symbols Mach-O uses a two-level namespace that encodes each symbol into an 'object/symbol name' pair that is then linearly searched for by first the object and then the symbol name. The basic structure—a list of variable-length "load commands" that reference pages of data elsewhere in the file—was also used in the executable file format for Accent. The Accent file format was in turn, based on an idea from Spice Lisp. With the introduction of Mac OS X 10.6 platform the Mach-O file underwent a significant modification that causes binaries compiled on a computer running 10.6 or later to be (by default) executable only on computers running Mac OS X 10.6 or later. The difference stems from load commands that the dynamic linker, in previous Mac OS X versions, does not understand. Another significant change to the Mach-O format is the change in how the Link Edit tables (found in the __LINKEDIT section) function. In 10.6 these new Link Edit tables are compressed by removing unused and unneeded bits of information, however Mac OS X 10.5 and earlier cannot read this new Link Edit table format. """ try: logging.debug("change Mach-O for %s from %s to %s", exe, current, new) _builtin_change_mach_o(max_size)(exe, current, new) except Exception as e: # noqa: BLE001 logging.warning("Could not call _builtin_change_mac_o: %s. Trying to call install_name_tool instead.", e) try: cmd = ["install_name_tool", "-change", current, new, exe] subprocess.check_call(cmd) except Exception: logging.fatal("Could not call install_name_tool -- you must have Apple's development tools installed") raise def _builtin_change_mach_o(maxint): # noqa: C901 MH_MAGIC = 0xFEEDFACE # noqa: N806 MH_CIGAM = 0xCEFAEDFE # noqa: N806 MH_MAGIC_64 = 0xFEEDFACF # noqa: N806 MH_CIGAM_64 = 0xCFFAEDFE # noqa: N806 FAT_MAGIC = 0xCAFEBABE # noqa: N806 BIG_ENDIAN = ">" # noqa: N806 LITTLE_ENDIAN = "<" # noqa: N806 LC_LOAD_DYLIB = 0xC # noqa: N806 class FileView: """A proxy for file-like objects that exposes a given view of a file. Modified from macholib.""" def __init__(self, file_obj, start=0, size=maxint) -> None: if isinstance(file_obj, FileView): self._file_obj = file_obj._file_obj # noqa: SLF001 else: self._file_obj = file_obj self._start = start self._end = start + size self._pos = 0 def __repr__(self) -> str: return f"" def tell(self): return self._pos def _checkwindow(self, seek_to, op): if not (self._start <= seek_to <= self._end): msg = f"{op} to offset {seek_to:d} is outside window [{self._start:d}, {self._end:d}]" raise OSError(msg) def seek(self, offset, whence=0): seek_to = offset if whence == os.SEEK_SET: seek_to += self._start elif whence == os.SEEK_CUR: seek_to += self._start + self._pos elif whence == os.SEEK_END: seek_to += self._end else: msg = f"Invalid whence argument to seek: {whence!r}" raise OSError(msg) self._checkwindow(seek_to, "seek") self._file_obj.seek(seek_to) self._pos = seek_to - self._start def write(self, content): here = self._start + self._pos self._checkwindow(here, "write") self._checkwindow(here + len(content), "write") self._file_obj.seek(here, os.SEEK_SET) self._file_obj.write(content) self._pos += len(content) def read(self, size=maxint): assert size >= 0 # noqa: S101 here = self._start + self._pos self._checkwindow(here, "read") size = min(size, self._end - here) self._file_obj.seek(here, os.SEEK_SET) read_bytes = self._file_obj.read(size) self._pos += len(read_bytes) return read_bytes def read_data(file, endian, num=1): """Read a given number of 32-bits unsigned integers from the given file with the given endianness.""" res = struct.unpack(endian + "L" * num, file.read(num * 4)) if len(res) == 1: return res[0] return res def mach_o_change(at_path, what, value): # noqa: C901 """ Replace a given name (what) in any LC_LOAD_DYLIB command found in the given binary with a new name (value), provided it's shorter. """ # noqa: D205 def do_macho(file, bits, endian): # Read Mach-O header (the magic number is assumed read by the caller) _cpu_type, _cpu_sub_type, _file_type, n_commands, _size_of_commands, _flags = read_data(file, endian, 6) # 64-bits header has one more field. if bits == 64: # noqa: PLR2004 read_data(file, endian) # The header is followed by n commands for _ in range(n_commands): where = file.tell() # Read command header cmd, cmd_size = read_data(file, endian, 2) if cmd == LC_LOAD_DYLIB: # The first data field in LC_LOAD_DYLIB commands is the offset of the name, starting from the # beginning of the command. name_offset = read_data(file, endian) file.seek(where + name_offset, os.SEEK_SET) # Read the NUL terminated string load = file.read(cmd_size - name_offset).decode() load = load[: load.index("\0")] # If the string is what is being replaced, overwrite it. if load == what: file.seek(where + name_offset, os.SEEK_SET) file.write(value.encode() + b"\0") # Seek to the next command file.seek(where + cmd_size, os.SEEK_SET) def do_file(file, offset=0, size=maxint): file = FileView(file, offset, size) # Read magic number magic = read_data(file, BIG_ENDIAN) if magic == FAT_MAGIC: # Fat binaries contain nfat_arch Mach-O binaries n_fat_arch = read_data(file, BIG_ENDIAN) for _ in range(n_fat_arch): # Read arch header _cpu_type, _cpu_sub_type, offset, size, _align = read_data(file, BIG_ENDIAN, 5) do_file(file, offset, size) elif magic == MH_MAGIC: do_macho(file, 32, BIG_ENDIAN) elif magic == MH_CIGAM: do_macho(file, 32, LITTLE_ENDIAN) elif magic == MH_MAGIC_64: do_macho(file, 64, BIG_ENDIAN) elif magic == MH_CIGAM_64: do_macho(file, 64, LITTLE_ENDIAN) assert len(what) >= len(value) # noqa: S101 with open(at_path, "r+b") as f: do_file(f) return mach_o_change class CPython3macOsBrew(CPython3, CPythonPosix): @classmethod def can_describe(cls, interpreter): return is_macos_brew(interpreter) and super().can_describe(interpreter) @classmethod def setup_meta(cls, interpreter): # noqa: ARG003 meta = BuiltinViaGlobalRefMeta() meta.copy_error = "Brew disables copy creation: https://github.com/Homebrew/homebrew-core/issues/138159" return meta __all__ = [ "CPython3macOsBrew", "CPython3macOsFramework", "CPythonmacOsFramework", ] PK7QY9virtualenv/create/via_global_ref/builtin/pypy/__init__.pyPK7QYc7virtualenv/create/via_global_ref/builtin/pypy/common.pyfrom __future__ import annotations import abc from pathlib import Path from virtualenv.create.via_global_ref.builtin.ref import PathRefToDest, RefMust, RefWhen from virtualenv.create.via_global_ref.builtin.via_global_self_do import ViaGlobalRefVirtualenvBuiltin class PyPy(ViaGlobalRefVirtualenvBuiltin, abc.ABC): @classmethod def can_describe(cls, interpreter): return interpreter.implementation == "PyPy" and super().can_describe(interpreter) @classmethod def _executables(cls, interpreter): host = Path(interpreter.system_executable) targets = sorted(f"{name}{PyPy.suffix}" for name in cls.exe_names(interpreter)) yield host, targets, RefMust.NA, RefWhen.ANY @classmethod def executables(cls, interpreter): yield from super().sources(interpreter) @classmethod def exe_names(cls, interpreter): return { cls.exe_stem(), "python", f"python{interpreter.version_info.major}", f"python{interpreter.version_info.major}.{interpreter.version_info.minor}", } @classmethod def sources(cls, interpreter): yield from cls.executables(interpreter) for host in cls._add_shared_libs(interpreter): yield PathRefToDest(host, dest=lambda self, s: self.bin_dir / s.name) @classmethod def _add_shared_libs(cls, interpreter): # https://bitbucket.org/pypy/pypy/issue/1922/future-proofing-virtualenv python_dir = Path(interpreter.system_executable).resolve().parent yield from cls._shared_libs(python_dir) @classmethod def _shared_libs(cls, python_dir): raise NotImplementedError __all__ = [ "PyPy", ] PK7QYszP 6virtualenv/create/via_global_ref/builtin/pypy/pypy3.pyfrom __future__ import annotations import abc from pathlib import Path from virtualenv.create.describe import PosixSupports, Python3Supports, WindowsSupports from virtualenv.create.via_global_ref.builtin.ref import PathRefToDest from .common import PyPy class PyPy3(PyPy, Python3Supports, abc.ABC): @classmethod def exe_stem(cls): return "pypy3" @classmethod def exe_names(cls, interpreter): return super().exe_names(interpreter) | {"pypy"} class PyPy3Posix(PyPy3, PosixSupports): """PyPy 3 on POSIX.""" @classmethod def _shared_libs(cls, python_dir): # glob for libpypy3-c.so, libpypy3-c.dylib, libpypy3.9-c.so ... return python_dir.glob("libpypy3*.*") def to_lib(self, src): return self.dest / "lib" / src.name @classmethod def sources(cls, interpreter): yield from super().sources(interpreter) # PyPy >= 3.8 supports a standard prefix installation, where older # versions always used a portable/development style installation. # If this is a standard prefix installation, skip the below: if interpreter.system_prefix == "/usr": return # Also copy/symlink anything under prefix/lib, which, for "portable" # PyPy builds, includes the tk,tcl runtime and a number of shared # objects. In distro-specific builds or on conda this should be empty # (on PyPy3.8+ it will, like on CPython, hold the stdlib). host_lib = Path(interpreter.system_prefix) / "lib" stdlib = Path(interpreter.system_stdlib) if host_lib.exists() and host_lib.is_dir(): for path in host_lib.iterdir(): if stdlib == path: # For PyPy3.8+ the stdlib lives in lib/pypy3.8 # We need to avoid creating a symlink to it since that # will defeat the purpose of a virtualenv continue yield PathRefToDest(path, dest=cls.to_lib) class Pypy3Windows(PyPy3, WindowsSupports): """PyPy 3 on Windows.""" @property def less_v37(self): return self.interpreter.version_info.minor < 7 # noqa: PLR2004 @classmethod def _shared_libs(cls, python_dir): # glob for libpypy*.dll and libffi*.dll for pattern in ["libpypy*.dll", "libffi*.dll"]: srcs = python_dir.glob(pattern) yield from srcs __all__ = [ "PyPy3", "PyPy3Posix", "Pypy3Windows", ] PK7QY virtualenv/discovery/__init__.pyPK7QY0virtualenv/discovery/builtin.pyfrom __future__ import annotations import logging import os import sys from pathlib import Path from typing import TYPE_CHECKING, Callable from virtualenv.info import IS_WIN, fs_path_id from .discover import Discover from .py_info import PythonInfo from .py_spec import PythonSpec if TYPE_CHECKING: from argparse import ArgumentParser from collections.abc import Generator, Iterable, Mapping, Sequence from virtualenv.app_data.base import AppData class Builtin(Discover): python_spec: Sequence[str] app_data: AppData try_first_with: Sequence[str] def __init__(self, options) -> None: super().__init__(options) self.python_spec = options.python or [sys.executable] self.app_data = options.app_data self.try_first_with = options.try_first_with @classmethod def add_parser_arguments(cls, parser: ArgumentParser) -> None: parser.add_argument( "-p", "--python", dest="python", metavar="py", type=str, action="append", default=[], help="interpreter based on what to create environment (path/identifier) " "- by default use the interpreter where the tool is installed - first found wins", ) parser.add_argument( "--try-first-with", dest="try_first_with", metavar="py_exe", type=str, action="append", default=[], help="try first these interpreters before starting the discovery", ) def run(self) -> PythonInfo | None: for python_spec in self.python_spec: result = get_interpreter(python_spec, self.try_first_with, self.app_data, self._env) if result is not None: return result return None def __repr__(self) -> str: spec = self.python_spec[0] if len(self.python_spec) == 1 else self.python_spec return f"{self.__class__.__name__} discover of python_spec={spec!r}" def get_interpreter( key, try_first_with: Iterable[str], app_data: AppData | None = None, env: Mapping[str, str] | None = None ) -> PythonInfo | None: spec = PythonSpec.from_string_spec(key) logging.info("find interpreter for spec %r", spec) proposed_paths = set() env = os.environ if env is None else env for interpreter, impl_must_match in propose_interpreters(spec, try_first_with, app_data, env): key = interpreter.system_executable, impl_must_match if key in proposed_paths: continue logging.info("proposed %s", interpreter) if interpreter.satisfies(spec, impl_must_match): logging.debug("accepted %s", interpreter) return interpreter proposed_paths.add(key) return None def propose_interpreters( # noqa: C901, PLR0912, PLR0915 spec: PythonSpec, try_first_with: Iterable[str], app_data: AppData | None = None, env: Mapping[str, str] | None = None, ) -> Generator[tuple[PythonInfo, bool], None, None]: # 0. try with first env = os.environ if env is None else env tested_exes: set[str] = set() for py_exe in try_first_with: path = os.path.abspath(py_exe) try: os.lstat(path) # Windows Store Python does not work with os.path.exists, but does for os.lstat except OSError: pass else: exe_raw = os.path.abspath(path) exe_id = fs_path_id(exe_raw) if exe_id in tested_exes: continue tested_exes.add(exe_id) yield PythonInfo.from_exe(exe_raw, app_data, env=env), True # 1. if it's a path and exists if spec.path is not None: try: os.lstat(spec.path) # Windows Store Python does not work with os.path.exists, but does for os.lstat except OSError: if spec.is_abs: raise else: exe_raw = os.path.abspath(spec.path) exe_id = fs_path_id(exe_raw) if exe_id not in tested_exes: tested_exes.add(exe_id) yield PythonInfo.from_exe(exe_raw, app_data, env=env), True if spec.is_abs: return else: # 2. otherwise try with the current current_python = PythonInfo.current_system(app_data) exe_raw = str(current_python.executable) exe_id = fs_path_id(exe_raw) if exe_id not in tested_exes: tested_exes.add(exe_id) yield current_python, True # 3. otherwise fallback to platform default logic if IS_WIN: from .windows import propose_interpreters # noqa: PLC0415 for interpreter in propose_interpreters(spec, app_data, env): exe_raw = str(interpreter.executable) exe_id = fs_path_id(exe_raw) if exe_id in tested_exes: continue tested_exes.add(exe_id) yield interpreter, True # finally just find on path, the path order matters (as the candidates are less easy to control by end user) find_candidates = path_exe_finder(spec) for pos, path in enumerate(get_paths(env)): logging.debug(LazyPathDump(pos, path, env)) for exe, impl_must_match in find_candidates(path): exe_raw = str(exe) exe_id = fs_path_id(exe_raw) if exe_id in tested_exes: continue tested_exes.add(exe_id) interpreter = PathPythonInfo.from_exe(exe_raw, app_data, raise_on_error=False, env=env) if interpreter is not None: yield interpreter, impl_must_match def get_paths(env: Mapping[str, str]) -> Generator[Path, None, None]: path = env.get("PATH", None) if path is None: try: path = os.confstr("CS_PATH") except (AttributeError, ValueError): path = os.defpath if path: for p in map(Path, path.split(os.pathsep)): if p.exists(): yield p class LazyPathDump: def __init__(self, pos: int, path: Path, env: Mapping[str, str]) -> None: self.pos = pos self.path = path self.env = env def __repr__(self) -> str: content = f"discover PATH[{self.pos}]={self.path}" if self.env.get("_VIRTUALENV_DEBUG"): # this is the over the board debug content += " with =>" for file_path in self.path.iterdir(): try: if file_path.is_dir() or not (file_path.stat().st_mode & os.X_OK): continue except OSError: pass content += " " content += file_path.name return content def path_exe_finder(spec: PythonSpec) -> Callable[[Path], Generator[tuple[Path, bool], None, None]]: """Given a spec, return a function that can be called on a path to find all matching files in it.""" pat = spec.generate_re(windows=sys.platform == "win32") direct = spec.str_spec if sys.platform == "win32": direct = f"{direct}.exe" def path_exes(path: Path) -> Generator[tuple[Path, bool], None, None]: # 4. then maybe it's something exact on PATH - if it was direct lookup implementation no longer counts direct_path = path / direct if direct_path.exists(): yield direct_path, False # 5. or from the spec we can deduce if a name on path matches for exe in path.iterdir(): match = pat.fullmatch(exe.name) if match: # the implementation must match when we find “python[ver]” yield exe.absolute(), match["impl"] == "python" return path_exes class PathPythonInfo(PythonInfo): """python info from path.""" __all__ = [ "Builtin", "PathPythonInfo", "get_interpreter", ] PK7QY9bb&virtualenv/discovery/cached_py_info.py""" We acquire the python information by running an interrogation script via subprocess trigger. This operation is not cheap, especially not on Windows. To not have to pay this hefty cost every time we apply multiple levels of caching. """ # noqa: D205 from __future__ import annotations import logging import os import random import sys from collections import OrderedDict from pathlib import Path from shlex import quote from string import ascii_lowercase, ascii_uppercase, digits from subprocess import Popen from virtualenv.app_data import AppDataDisabled from virtualenv.discovery.py_info import PythonInfo from virtualenv.util.subprocess import subprocess _CACHE = OrderedDict() _CACHE[Path(sys.executable)] = PythonInfo() def from_exe(cls, app_data, exe, env=None, raise_on_error=True, ignore_cache=False): # noqa: FBT002, PLR0913 env = os.environ if env is None else env result = _get_from_cache(cls, app_data, exe, env, ignore_cache=ignore_cache) if isinstance(result, Exception): if raise_on_error: raise result logging.info("%s", result) result = None return result def _get_from_cache(cls, app_data, exe, env, ignore_cache=True): # noqa: FBT002 # note here we cannot resolve symlinks, as the symlink may trigger different prefix information if there's a # pyenv.cfg somewhere alongside on python3.5+ exe_path = Path(exe) if not ignore_cache and exe_path in _CACHE: # check in the in-memory cache result = _CACHE[exe_path] else: # otherwise go through the app data cache py_info = _get_via_file_cache(cls, app_data, exe_path, exe, env) result = _CACHE[exe_path] = py_info # independent if it was from the file or in-memory cache fix the original executable location if isinstance(result, PythonInfo): result.executable = exe return result def _get_via_file_cache(cls, app_data, path, exe, env): path_text = str(path) try: path_modified = path.stat().st_mtime except OSError: path_modified = -1 if app_data is None: app_data = AppDataDisabled() py_info, py_info_store = None, app_data.py_info(path) with py_info_store.locked(): if py_info_store.exists(): # if exists and matches load data = py_info_store.read() of_path, of_st_mtime, of_content = data["path"], data["st_mtime"], data["content"] if of_path == path_text and of_st_mtime == path_modified: py_info = cls._from_dict(of_content.copy()) sys_exe = py_info.system_executable if sys_exe is not None and not os.path.exists(sys_exe): py_info_store.remove() py_info = None else: py_info_store.remove() if py_info is None: # if not loaded run and save failure, py_info = _run_subprocess(cls, exe, app_data, env) if failure is None: data = {"st_mtime": path_modified, "path": path_text, "content": py_info._to_dict()} # noqa: SLF001 py_info_store.write(data) else: py_info = failure return py_info COOKIE_LENGTH: int = 32 def gen_cookie(): return "".join( random.choice(f"{ascii_lowercase}{ascii_uppercase}{digits}") # noqa: S311 for _ in range(COOKIE_LENGTH) ) def _run_subprocess(cls, exe, app_data, env): py_info_script = Path(os.path.abspath(__file__)).parent / "py_info.py" # Cookies allow to split the serialized stdout output generated by the script collecting the info from the output # generated by something else. The right way to deal with it is to create an anonymous pipe and pass its descriptor # to the child and output to it. But AFAIK all of them are either not cross-platform or too big to implement and are # not in the stdlib. So the easiest and the shortest way I could mind is just using the cookies. # We generate pseudorandom cookies because it easy to implement and avoids breakage from outputting modules source # code, i.e. by debug output libraries. We reverse the cookies to avoid breakages resulting from variable values # appearing in debug output. start_cookie = gen_cookie() end_cookie = gen_cookie() with app_data.ensure_extracted(py_info_script) as py_info_script: cmd = [exe, str(py_info_script), start_cookie, end_cookie] # prevent sys.prefix from leaking into the child process - see https://bugs.python.org/issue22490 env = env.copy() env.pop("__PYVENV_LAUNCHER__", None) logging.debug("get interpreter info via cmd: %s", LogCmd(cmd)) try: process = Popen( cmd, universal_newlines=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, env=env, encoding="utf-8", ) out, err = process.communicate() code = process.returncode except OSError as os_error: out, err, code = "", os_error.strerror, os_error.errno result, failure = None, None if code == 0: out_starts = out.find(start_cookie[::-1]) if out_starts > -1: pre_cookie = out[:out_starts] if pre_cookie: sys.stdout.write(pre_cookie) out = out[out_starts + COOKIE_LENGTH :] out_ends = out.find(end_cookie[::-1]) if out_ends > -1: post_cookie = out[out_ends + COOKIE_LENGTH :] if post_cookie: sys.stdout.write(post_cookie) out = out[:out_ends] result = cls._from_json(out) result.executable = exe # keep original executable as this may contain initialization code else: msg = f"{exe} with code {code}{f' out: {out!r}' if out else ''}{f' err: {err!r}' if err else ''}" failure = RuntimeError(f"failed to query {msg}") return failure, result class LogCmd: def __init__(self, cmd, env=None) -> None: self.cmd = cmd self.env = env def __repr__(self) -> str: cmd_repr = " ".join(quote(str(c)) for c in self.cmd) if self.env is not None: cmd_repr = f"{cmd_repr} env of {self.env!r}" return cmd_repr def clear(app_data): app_data.py_info_clear() _CACHE.clear() ___all___ = [ "from_exe", "clear", "LogCmd", ] PK7QY{ virtualenv/discovery/discover.pyfrom __future__ import annotations from abc import ABC, abstractmethod class Discover(ABC): """Discover and provide the requested Python interpreter.""" @classmethod def add_parser_arguments(cls, parser): """ Add CLI arguments for this discovery mechanisms. :param parser: the CLI parser """ raise NotImplementedError def __init__(self, options) -> None: """ Create a new discovery mechanism. :param options: the parsed options as defined within :meth:`add_parser_arguments` """ self._has_run = False self._interpreter = None self._env = options.env @abstractmethod def run(self): """ Discovers an interpreter. :return: the interpreter ready to use for virtual environment creation """ raise NotImplementedError @property def interpreter(self): """:return: the interpreter as returned by :meth:`run`, cached""" if self._has_run is False: self._interpreter = self.run() self._has_run = True return self._interpreter __all__ = [ "Discover", ] PK7QYdccvirtualenv/discovery/py_info.py""" The PythonInfo contains information about a concrete instance of a Python interpreter. Note: this file is also used to query target interpreters, so can only use standard library methods """ from __future__ import annotations import json import logging import os import platform import re import sys import sysconfig import warnings from collections import OrderedDict, namedtuple from string import digits VersionInfo = namedtuple("VersionInfo", ["major", "minor", "micro", "releaselevel", "serial"]) # noqa: PYI024 def _get_path_extensions(): return list(OrderedDict.fromkeys(["", *os.environ.get("PATHEXT", "").lower().split(os.pathsep)])) EXTENSIONS = _get_path_extensions() _CONF_VAR_RE = re.compile(r"\{\w+\}") class PythonInfo: # noqa: PLR0904 """Contains information for a Python interpreter.""" def __init__(self) -> None: # noqa: PLR0915 def abs_path(v): return None if v is None else os.path.abspath(v) # unroll relative elements from path (e.g. ..) # qualifies the python self.platform = sys.platform self.implementation = platform.python_implementation() if self.implementation == "PyPy": self.pypy_version_info = tuple(sys.pypy_version_info) # this is a tuple in earlier, struct later, unify to our own named tuple self.version_info = VersionInfo(*sys.version_info) self.architecture = 64 if sys.maxsize > 2**32 else 32 # Used to determine some file names. # See `CPython3Windows.python_zip()`. self.version_nodot = sysconfig.get_config_var("py_version_nodot") self.version = sys.version self.os = os.name # information about the prefix - determines python home self.prefix = abs_path(getattr(sys, "prefix", None)) # prefix we think self.base_prefix = abs_path(getattr(sys, "base_prefix", None)) # venv self.real_prefix = abs_path(getattr(sys, "real_prefix", None)) # old virtualenv # information about the exec prefix - dynamic stdlib modules self.base_exec_prefix = abs_path(getattr(sys, "base_exec_prefix", None)) self.exec_prefix = abs_path(getattr(sys, "exec_prefix", None)) self.executable = abs_path(sys.executable) # the executable we were invoked via self.original_executable = abs_path(self.executable) # the executable as known by the interpreter self.system_executable = self._fast_get_system_executable() # the executable we are based of (if available) try: __import__("venv") has = True except ImportError: has = False self.has_venv = has self.path = sys.path self.file_system_encoding = sys.getfilesystemencoding() self.stdout_encoding = getattr(sys.stdout, "encoding", None) scheme_names = sysconfig.get_scheme_names() if "venv" in scheme_names: self.sysconfig_scheme = "venv" self.sysconfig_paths = { i: sysconfig.get_path(i, expand=False, scheme=self.sysconfig_scheme) for i in sysconfig.get_path_names() } # we cannot use distutils at all if "venv" exists, distutils don't know it self.distutils_install = {} # debian / ubuntu python 3.10 without `python3-distutils` will report # mangled `local/bin` / etc. names for the default prefix # intentionally select `posix_prefix` which is the unaltered posix-like paths elif sys.version_info[:2] == (3, 10) and "deb_system" in scheme_names: self.sysconfig_scheme = "posix_prefix" self.sysconfig_paths = { i: sysconfig.get_path(i, expand=False, scheme=self.sysconfig_scheme) for i in sysconfig.get_path_names() } # we cannot use distutils at all if "venv" exists, distutils don't know it self.distutils_install = {} else: self.sysconfig_scheme = None self.sysconfig_paths = {i: sysconfig.get_path(i, expand=False) for i in sysconfig.get_path_names()} self.distutils_install = self._distutils_install().copy() # https://bugs.python.org/issue22199 makefile = getattr(sysconfig, "get_makefile_filename", getattr(sysconfig, "_get_makefile_filename", None)) self.sysconfig = { k: v for k, v in [ # a list of content to store from sysconfig ("makefile_filename", makefile()), ] if k is not None } config_var_keys = set() for element in self.sysconfig_paths.values(): config_var_keys.update(k[1:-1] for k in _CONF_VAR_RE.findall(element)) config_var_keys.add("PYTHONFRAMEWORK") self.sysconfig_vars = {i: sysconfig.get_config_var(i or "") for i in config_var_keys} confs = { k: (self.system_prefix if v is not None and v.startswith(self.prefix) else v) for k, v in self.sysconfig_vars.items() } self.system_stdlib = self.sysconfig_path("stdlib", confs) self.system_stdlib_platform = self.sysconfig_path("platstdlib", confs) self.max_size = getattr(sys, "maxsize", getattr(sys, "maxint", None)) self._creators = None def _fast_get_system_executable(self): """Try to get the system executable by just looking at properties.""" if self.real_prefix or ( # noqa: PLR1702 self.base_prefix is not None and self.base_prefix != self.prefix ): # if this is a virtual environment if self.real_prefix is None: base_executable = getattr(sys, "_base_executable", None) # some platforms may set this to help us if base_executable is not None: # noqa: SIM102 # use the saved system executable if present if sys.executable != base_executable: # we know we're in a virtual environment, cannot be us if os.path.exists(base_executable): return base_executable # Python may return "python" because it was invoked from the POSIX virtual environment # however some installs/distributions do not provide a version-less "python" binary in # the system install location (see PEP 394) so try to fallback to a versioned binary. # # Gate this to Python 3.11 as `sys._base_executable` path resolution is now relative to # the 'home' key from pyvenv.cfg which often points to the system install location. major, minor = self.version_info.major, self.version_info.minor if self.os == "posix" and (major, minor) >= (3, 11): # search relative to the directory of sys._base_executable base_dir = os.path.dirname(base_executable) for base_executable in [ os.path.join(base_dir, exe) for exe in (f"python{major}", f"python{major}.{minor}") ]: if os.path.exists(base_executable): return base_executable return None # in this case we just can't tell easily without poking around FS and calling them, bail # if we're not in a virtual environment, this is already a system python, so return the original executable # note we must choose the original and not the pure executable as shim scripts might throw us off return self.original_executable def install_path(self, key): result = self.distutils_install.get(key) if result is None: # use sysconfig if sysconfig_scheme is set or distutils is unavailable # set prefixes to empty => result is relative from cwd prefixes = self.prefix, self.exec_prefix, self.base_prefix, self.base_exec_prefix config_var = {k: "" if v in prefixes else v for k, v in self.sysconfig_vars.items()} result = self.sysconfig_path(key, config_var=config_var).lstrip(os.sep) return result @staticmethod def _distutils_install(): # use distutils primarily because that's what pip does # https://github.com/pypa/pip/blob/main/src/pip/_internal/locations.py#L95 # note here we don't import Distribution directly to allow setuptools to patch it with warnings.catch_warnings(): # disable warning for PEP-632 warnings.simplefilter("ignore") try: from distutils import dist # noqa: PLC0415 from distutils.command.install import SCHEME_KEYS # noqa: PLC0415 except ImportError: # if removed or not installed ignore return {} d = dist.Distribution({"script_args": "--no-user-cfg"}) # conf files not parsed so they do not hijack paths if hasattr(sys, "_framework"): sys._framework = None # disable macOS static paths for framework # noqa: SLF001 with warnings.catch_warnings(): # disable warning for PEP-632 warnings.simplefilter("ignore") i = d.get_command_obj("install", create=True) i.prefix = os.sep # paths generated are relative to prefix that contains the path sep, this makes it relative i.finalize_options() return {key: (getattr(i, f"install_{key}")[1:]).lstrip(os.sep) for key in SCHEME_KEYS} @property def version_str(self): return ".".join(str(i) for i in self.version_info[0:3]) @property def version_release_str(self): return ".".join(str(i) for i in self.version_info[0:2]) @property def python_name(self): version_info = self.version_info return f"python{version_info.major}.{version_info.minor}" @property def is_old_virtualenv(self): return self.real_prefix is not None @property def is_venv(self): return self.base_prefix is not None def sysconfig_path(self, key, config_var=None, sep=os.sep): pattern = self.sysconfig_paths[key] if config_var is None: config_var = self.sysconfig_vars else: base = self.sysconfig_vars.copy() base.update(config_var) config_var = base return pattern.format(**config_var).replace("/", sep) def creators(self, refresh=False): # noqa: FBT002 if self._creators is None or refresh is True: from virtualenv.run.plugin.creators import CreatorSelector # noqa: PLC0415 self._creators = CreatorSelector.for_interpreter(self) return self._creators @property def system_include(self): path = self.sysconfig_path( "include", { k: (self.system_prefix if v is not None and v.startswith(self.prefix) else v) for k, v in self.sysconfig_vars.items() }, ) if not os.path.exists(path): # some broken packaging don't respect the sysconfig, fallback to distutils path # the pattern include the distribution name too at the end, remove that via the parent call fallback = os.path.join(self.prefix, os.path.dirname(self.install_path("headers"))) if os.path.exists(fallback): path = fallback return path @property def system_prefix(self): return self.real_prefix or self.base_prefix or self.prefix @property def system_exec_prefix(self): return self.real_prefix or self.base_exec_prefix or self.exec_prefix def __repr__(self) -> str: return "{}({!r})".format( self.__class__.__name__, {k: v for k, v in self.__dict__.items() if not k.startswith("_")}, ) def __str__(self) -> str: return "{}({})".format( self.__class__.__name__, ", ".join( f"{k}={v}" for k, v in ( ("spec", self.spec), ( "system" if self.system_executable is not None and self.system_executable != self.executable else None, self.system_executable, ), ( "original" if self.original_executable not in {self.system_executable, self.executable} else None, self.original_executable, ), ("exe", self.executable), ("platform", self.platform), ("version", repr(self.version)), ("encoding_fs_io", f"{self.file_system_encoding}-{self.stdout_encoding}"), ) if k is not None ), ) @property def spec(self): return "{}{}-{}".format(self.implementation, ".".join(str(i) for i in self.version_info), self.architecture) @classmethod def clear_cache(cls, app_data): # this method is not used by itself, so here and called functions can import stuff locally from virtualenv.discovery.cached_py_info import clear # noqa: PLC0415 clear(app_data) cls._cache_exe_discovery.clear() def satisfies(self, spec, impl_must_match): # noqa: C901 """Check if a given specification can be satisfied by the this python interpreter instance.""" if spec.path: if self.executable == os.path.abspath(spec.path): return True # if the path is a our own executable path we're done if not spec.is_abs: # if path set, and is not our original executable name, this does not match basename = os.path.basename(self.original_executable) spec_path = spec.path if sys.platform == "win32": basename, suffix = os.path.splitext(basename) if spec_path.endswith(suffix): spec_path = spec_path[: -len(suffix)] if basename != spec_path: return False if ( impl_must_match and spec.implementation is not None and spec.implementation.lower() != self.implementation.lower() ): return False if spec.architecture is not None and spec.architecture != self.architecture: return False for our, req in zip(self.version_info[0:3], (spec.major, spec.minor, spec.micro)): if req is not None and our is not None and our != req: return False return True _current_system = None _current = None @classmethod def current(cls, app_data=None): """ This locates the current host interpreter information. This might be different than what we run into in case the host python has been upgraded from underneath us. """ # noqa: D205 if cls._current is None: cls._current = cls.from_exe(sys.executable, app_data, raise_on_error=True, resolve_to_host=False) return cls._current @classmethod def current_system(cls, app_data=None) -> PythonInfo: """ This locates the current host interpreter information. This might be different than what we run into in case the host python has been upgraded from underneath us. """ # noqa: D205 if cls._current_system is None: cls._current_system = cls.from_exe(sys.executable, app_data, raise_on_error=True, resolve_to_host=True) return cls._current_system def _to_json(self): # don't save calculated paths, as these are non primitive types return json.dumps(self._to_dict(), indent=2) def _to_dict(self): data = {var: (getattr(self, var) if var != "_creators" else None) for var in vars(self)} data["version_info"] = data["version_info"]._asdict() # namedtuple to dictionary return data @classmethod def from_exe( # noqa: PLR0913 cls, exe, app_data=None, raise_on_error=True, # noqa: FBT002 ignore_cache=False, # noqa: FBT002 resolve_to_host=True, # noqa: FBT002 env=None, ): """Given a path to an executable get the python information.""" # this method is not used by itself, so here and called functions can import stuff locally from virtualenv.discovery.cached_py_info import from_exe # noqa: PLC0415 env = os.environ if env is None else env proposed = from_exe(cls, app_data, exe, env=env, raise_on_error=raise_on_error, ignore_cache=ignore_cache) if isinstance(proposed, PythonInfo) and resolve_to_host: try: proposed = proposed._resolve_to_system(app_data, proposed) # noqa: SLF001 except Exception as exception: if raise_on_error: raise logging.info("ignore %s due cannot resolve system due to %r", proposed.original_executable, exception) proposed = None return proposed @classmethod def _from_json(cls, payload): # the dictionary unroll here is to protect against pypy bug of interpreter crashing raw = json.loads(payload) return cls._from_dict(raw.copy()) @classmethod def _from_dict(cls, data): data["version_info"] = VersionInfo(**data["version_info"]) # restore this to a named tuple structure result = cls() result.__dict__ = data.copy() return result @classmethod def _resolve_to_system(cls, app_data, target): start_executable = target.executable prefixes = OrderedDict() while target.system_executable is None: prefix = target.real_prefix or target.base_prefix or target.prefix if prefix in prefixes: if len(prefixes) == 1: # if we're linking back to ourselves accept ourselves with a WARNING logging.info("%r links back to itself via prefixes", target) target.system_executable = target.executable break for at, (p, t) in enumerate(prefixes.items(), start=1): logging.error("%d: prefix=%s, info=%r", at, p, t) logging.error("%d: prefix=%s, info=%r", len(prefixes) + 1, prefix, target) msg = "prefixes are causing a circle {}".format("|".join(prefixes.keys())) raise RuntimeError(msg) prefixes[prefix] = target target = target.discover_exe(app_data, prefix=prefix, exact=False) if target.executable != target.system_executable: target = cls.from_exe(target.system_executable, app_data) target.executable = start_executable return target _cache_exe_discovery = {} # noqa: RUF012 def discover_exe(self, app_data, prefix, exact=True, env=None): # noqa: FBT002 key = prefix, exact if key in self._cache_exe_discovery and prefix: logging.debug("discover exe from cache %s - exact %s: %r", prefix, exact, self._cache_exe_discovery[key]) return self._cache_exe_discovery[key] logging.debug("discover exe for %s in %s", self, prefix) # we don't know explicitly here, do some guess work - our executable name should tell possible_names = self._find_possible_exe_names() possible_folders = self._find_possible_folders(prefix) discovered = [] env = os.environ if env is None else env for folder in possible_folders: for name in possible_names: info = self._check_exe(app_data, folder, name, exact, discovered, env) if info is not None: self._cache_exe_discovery[key] = info return info if exact is False and discovered: info = self._select_most_likely(discovered, self) folders = os.pathsep.join(possible_folders) self._cache_exe_discovery[key] = info logging.debug("no exact match found, chosen most similar of %s within base folders %s", info, folders) return info msg = "failed to detect {} in {}".format("|".join(possible_names), os.pathsep.join(possible_folders)) raise RuntimeError(msg) def _check_exe(self, app_data, folder, name, exact, discovered, env): # noqa: PLR0913 exe_path = os.path.join(folder, name) if not os.path.exists(exe_path): return None info = self.from_exe(exe_path, app_data, resolve_to_host=False, raise_on_error=False, env=env) if info is None: # ignore if for some reason we can't query return None for item in ["implementation", "architecture", "version_info"]: found = getattr(info, item) searched = getattr(self, item) if found != searched: if item == "version_info": found, searched = ".".join(str(i) for i in found), ".".join(str(i) for i in searched) executable = info.executable logging.debug("refused interpreter %s because %s differs %s != %s", executable, item, found, searched) if exact is False: discovered.append(info) break else: return info return None @staticmethod def _select_most_likely(discovered, target): # no exact match found, start relaxing our requirements then to facilitate system package upgrades that # could cause this (when using copy strategy of the host python) def sort_by(info): # we need to setup some priority of traits, this is as follows: # implementation, major, minor, micro, architecture, tag, serial matches = [ info.implementation == target.implementation, info.version_info.major == target.version_info.major, info.version_info.minor == target.version_info.minor, info.architecture == target.architecture, info.version_info.micro == target.version_info.micro, info.version_info.releaselevel == target.version_info.releaselevel, info.version_info.serial == target.version_info.serial, ] return sum((1 << pos if match else 0) for pos, match in enumerate(reversed(matches))) sorted_discovered = sorted(discovered, key=sort_by, reverse=True) # sort by priority in decreasing order return sorted_discovered[0] def _find_possible_folders(self, inside_folder): candidate_folder = OrderedDict() executables = OrderedDict() executables[os.path.realpath(self.executable)] = None executables[self.executable] = None executables[os.path.realpath(self.original_executable)] = None executables[self.original_executable] = None for exe in executables: base = os.path.dirname(exe) # following path pattern of the current if base.startswith(self.prefix): relative = base[len(self.prefix) :] candidate_folder[f"{inside_folder}{relative}"] = None # or at root level candidate_folder[inside_folder] = None return [i for i in candidate_folder if os.path.exists(i)] def _find_possible_exe_names(self): name_candidate = OrderedDict() for name in self._possible_base(): for at in (3, 2, 1, 0): version = ".".join(str(i) for i in self.version_info[:at]) for arch in [f"-{self.architecture}", ""]: for ext in EXTENSIONS: candidate = f"{name}{version}{arch}{ext}" name_candidate[candidate] = None return list(name_candidate.keys()) def _possible_base(self): possible_base = OrderedDict() basename = os.path.splitext(os.path.basename(self.executable))[0].rstrip(digits) possible_base[basename] = None possible_base[self.implementation] = None # python is always the final option as in practice is used by multiple implementation as exe name if "python" in possible_base: del possible_base["python"] possible_base["python"] = None for base in possible_base: lower = base.lower() yield lower from virtualenv.info import fs_is_case_sensitive # noqa: PLC0415 if fs_is_case_sensitive(): if base != lower: yield base upper = base.upper() if upper != base: yield upper if __name__ == "__main__": # dump a JSON representation of the current python argv = sys.argv[1:] if len(argv) >= 1: start_cookie = argv[0] argv = argv[1:] else: start_cookie = "" if len(argv) >= 1: end_cookie = argv[0] argv = argv[1:] else: end_cookie = "" sys.argv = sys.argv[:1] + argv info = PythonInfo()._to_json() # noqa: SLF001 sys.stdout.write("".join((start_cookie[::-1], info, end_cookie[::-1]))) PK7QYa!virtualenv/discovery/py_spec.py"""A Python specification is an abstract requirement definition of an interpreter.""" from __future__ import annotations import os import re PATTERN = re.compile(r"^(?P[a-zA-Z]+)?(?P[0-9.]+)?(?:-(?P32|64))?$") class PythonSpec: """Contains specification about a Python Interpreter.""" def __init__( # noqa: PLR0913 self, str_spec: str, implementation: str | None, major: int | None, minor: int | None, micro: int | None, architecture: int | None, path: str | None, ) -> None: self.str_spec = str_spec self.implementation = implementation self.major = major self.minor = minor self.micro = micro self.architecture = architecture self.path = path @classmethod def from_string_spec(cls, string_spec: str): # noqa: C901, PLR0912 impl, major, minor, micro, arch, path = None, None, None, None, None, None if os.path.isabs(string_spec): # noqa: PLR1702 path = string_spec else: ok = False match = re.match(PATTERN, string_spec) if match: def _int_or_none(val): return None if val is None else int(val) try: groups = match.groupdict() version = groups["version"] if version is not None: versions = tuple(int(i) for i in version.split(".") if i) if len(versions) > 3: # noqa: PLR2004 raise ValueError # noqa: TRY301 if len(versions) == 3: # noqa: PLR2004 major, minor, micro = versions elif len(versions) == 2: # noqa: PLR2004 major, minor = versions elif len(versions) == 1: version_data = versions[0] major = int(str(version_data)[0]) # first digit major if version_data > 9: # noqa: PLR2004 minor = int(str(version_data)[1:]) ok = True except ValueError: pass else: impl = groups["impl"] if impl in {"py", "python"}: impl = None arch = _int_or_none(groups["arch"]) if not ok: path = string_spec return cls(string_spec, impl, major, minor, micro, arch, path) def generate_re(self, *, windows: bool) -> re.Pattern: """Generate a regular expression for matching against a filename.""" version = r"{}(\.{}(\.{})?)?".format( *(r"\d+" if v is None else v for v in (self.major, self.minor, self.micro)) ) impl = "python" if self.implementation is None else f"python|{re.escape(self.implementation)}" suffix = r"\.exe" if windows else "" version_conditional = ( "?" # Windows Python executables are almost always unversioned if windows # Spec is an empty string or self.major is None else "" ) # Try matching `direct` first, so the `direct` group is filled when possible. return re.compile( rf"(?P{impl})(?P{version}){version_conditional}{suffix}$", flags=re.IGNORECASE, ) @property def is_abs(self): return self.path is not None and os.path.isabs(self.path) def satisfies(self, spec): """Called when there's a candidate metadata spec to see if compatible - e.g. PEP-514 on Windows.""" if spec.is_abs and self.is_abs and self.path != spec.path: return False if spec.implementation is not None and spec.implementation.lower() != self.implementation.lower(): return False if spec.architecture is not None and spec.architecture != self.architecture: return False for our, req in zip((self.major, self.minor, self.micro), (spec.major, spec.minor, spec.micro)): if req is not None and our is not None and our != req: return False return True def __repr__(self) -> str: name = type(self).__name__ params = "implementation", "major", "minor", "micro", "architecture", "path" return f"{name}({', '.join(f'{k}={getattr(self, k)}' for k in params if getattr(self, k) is not None)})" __all__ = [ "PythonSpec", ] PK7QYo*??(virtualenv/discovery/windows/__init__.pyfrom __future__ import annotations from virtualenv.discovery.py_info import PythonInfo from virtualenv.discovery.py_spec import PythonSpec from .pep514 import discover_pythons # Map of well-known organizations (as per PEP 514 Company Windows Registry key part) versus Python implementation _IMPLEMENTATION_BY_ORG = { "ContinuumAnalytics": "CPython", "PythonCore": "CPython", } class Pep514PythonInfo(PythonInfo): """A Python information acquired from PEP-514.""" def propose_interpreters(spec, cache_dir, env): # see if PEP-514 entries are good # start with higher python versions in an effort to use the latest version available # and prefer PythonCore over conda pythons (as virtualenv is mostly used by non conda tools) existing = list(discover_pythons()) existing.sort( key=lambda i: (*tuple(-1 if j is None else j for j in i[1:4]), 1 if i[0] == "PythonCore" else 0), reverse=True, ) for name, major, minor, arch, exe, _ in existing: # Map well-known/most common organizations to a Python implementation, use the org name as a fallback for # backwards compatibility. implementation = _IMPLEMENTATION_BY_ORG.get(name, name) # Pre-filtering based on Windows Registry metadata, for CPython only skip_pre_filter = implementation.lower() != "cpython" registry_spec = PythonSpec(None, implementation, major, minor, None, arch, exe) if skip_pre_filter or registry_spec.satisfies(spec): interpreter = Pep514PythonInfo.from_exe(exe, cache_dir, env=env, raise_on_error=False) if interpreter is not None and interpreter.satisfies(spec, impl_must_match=True): yield interpreter # Final filtering/matching using interpreter metadata __all__ = [ "Pep514PythonInfo", "propose_interpreters", ] PK7QY5ǭ&virtualenv/discovery/windows/pep514.py"""Implement https://www.python.org/dev/peps/pep-0514/ to discover interpreters - Windows only.""" from __future__ import annotations import os import re import winreg from logging import basicConfig, getLogger LOGGER = getLogger(__name__) def enum_keys(key): at = 0 while True: try: yield winreg.EnumKey(key, at) except OSError: break at += 1 def get_value(key, value_name): try: return winreg.QueryValueEx(key, value_name)[0] except OSError: return None def discover_pythons(): for hive, hive_name, key, flags, default_arch in [ (winreg.HKEY_CURRENT_USER, "HKEY_CURRENT_USER", r"Software\Python", 0, 64), (winreg.HKEY_LOCAL_MACHINE, "HKEY_LOCAL_MACHINE", r"Software\Python", winreg.KEY_WOW64_64KEY, 64), (winreg.HKEY_LOCAL_MACHINE, "HKEY_LOCAL_MACHINE", r"Software\Python", winreg.KEY_WOW64_32KEY, 32), ]: yield from process_set(hive, hive_name, key, flags, default_arch) def process_set(hive, hive_name, key, flags, default_arch): try: with winreg.OpenKeyEx(hive, key, 0, winreg.KEY_READ | flags) as root_key: for company in enum_keys(root_key): if company == "PyLauncher": # reserved continue yield from process_company(hive_name, company, root_key, default_arch) except OSError: pass def process_company(hive_name, company, root_key, default_arch): with winreg.OpenKeyEx(root_key, company) as company_key: for tag in enum_keys(company_key): spec = process_tag(hive_name, company, company_key, tag, default_arch) if spec is not None: yield spec def process_tag(hive_name, company, company_key, tag, default_arch): with winreg.OpenKeyEx(company_key, tag) as tag_key: version = load_version_data(hive_name, company, tag, tag_key) if version is not None: # if failed to get version bail major, minor, _ = version arch = load_arch_data(hive_name, company, tag, tag_key, default_arch) if arch is not None: exe_data = load_exe(hive_name, company, company_key, tag) if exe_data is not None: exe, args = exe_data return company, major, minor, arch, exe, args return None return None return None def load_exe(hive_name, company, company_key, tag): key_path = f"{hive_name}/{company}/{tag}" try: with winreg.OpenKeyEx(company_key, rf"{tag}\InstallPath") as ip_key, ip_key: exe = get_value(ip_key, "ExecutablePath") if exe is None: ip = get_value(ip_key, None) if ip is None: msg(key_path, "no ExecutablePath or default for it") else: exe = os.path.join(ip, "python.exe") if exe is not None and os.path.exists(exe): args = get_value(ip_key, "ExecutableArguments") return exe, args msg(key_path, f"could not load exe with value {exe}") except OSError: msg(f"{key_path}/InstallPath", "missing") return None def load_arch_data(hive_name, company, tag, tag_key, default_arch): arch_str = get_value(tag_key, "SysArchitecture") if arch_str is not None: key_path = f"{hive_name}/{company}/{tag}/SysArchitecture" try: return parse_arch(arch_str) except ValueError as sys_arch: msg(key_path, sys_arch) return default_arch def parse_arch(arch_str): if isinstance(arch_str, str): match = re.match(r"^(\d+)bit$", arch_str) if match: return int(next(iter(match.groups()))) error = f"invalid format {arch_str}" else: error = f"arch is not string: {arch_str!r}" raise ValueError(error) def load_version_data(hive_name, company, tag, tag_key): for candidate, key_path in [ (get_value(tag_key, "SysVersion"), f"{hive_name}/{company}/{tag}/SysVersion"), (tag, f"{hive_name}/{company}/{tag}"), ]: if candidate is not None: try: return parse_version(candidate) except ValueError as sys_version: msg(key_path, sys_version) return None def parse_version(version_str): if isinstance(version_str, str): match = re.match(r"^(\d+)(?:\.(\d+))?(?:\.(\d+))?$", version_str) if match: return tuple(int(i) if i is not None else None for i in match.groups()) error = f"invalid format {version_str}" else: error = f"version is not string: {version_str!r}" raise ValueError(error) def msg(path, what): LOGGER.warning("PEP-514 violation in Windows Registry at %s error: %s", path, what) def _run(): basicConfig() interpreters = [repr(spec) for spec in discover_pythons()] print("\n".join(sorted(interpreters))) # noqa: T201 if __name__ == "__main__": _run() PK7QYMMddvirtualenv/run/__init__.pyfrom __future__ import annotations import logging import os from functools import partial from virtualenv.app_data import make_app_data from virtualenv.config.cli.parser import VirtualEnvConfigParser from virtualenv.report import LEVELS, setup_report from virtualenv.run.session import Session from virtualenv.seed.wheels.periodic_update import manual_upgrade from virtualenv.version import __version__ from .plugin.activators import ActivationSelector from .plugin.creators import CreatorSelector from .plugin.discovery import get_discover from .plugin.seeders import SeederSelector def cli_run(args, options=None, setup_logging=True, env=None): # noqa: FBT002 """ Create a virtual environment given some command line interface arguments. :param args: the command line arguments :param options: passing in a ``VirtualEnvOptions`` object allows return of the parsed options :param setup_logging: ``True`` if setup logging handlers, ``False`` to use handlers already registered :param env: environment variables to use :return: the session object of the creation (its structure for now is experimental and might change on short notice) """ env = os.environ if env is None else env of_session = session_via_cli(args, options, setup_logging, env) with of_session: of_session.run() return of_session def session_via_cli(args, options=None, setup_logging=True, env=None): # noqa: FBT002 """ Create a virtualenv session (same as cli_run, but this does not perform the creation). Use this if you just want to query what the virtual environment would look like, but not actually create it. :param args: the command line arguments :param options: passing in a ``VirtualEnvOptions`` object allows return of the parsed options :param setup_logging: ``True`` if setup logging handlers, ``False`` to use handlers already registered :param env: environment variables to use :return: the session object of the creation (its structure for now is experimental and might change on short notice) """ # noqa: D205 env = os.environ if env is None else env parser, elements = build_parser(args, options, setup_logging, env) options = parser.parse_args(args) creator, seeder, activators = tuple(e.create(options) for e in elements) # create types return Session( options.verbosity, options.app_data, parser._interpreter, # noqa: SLF001 creator, seeder, activators, ) def build_parser(args=None, options=None, setup_logging=True, env=None): # noqa: FBT002 parser = VirtualEnvConfigParser(options, os.environ if env is None else env) add_version_flag(parser) parser.add_argument( "--with-traceback", dest="with_traceback", action="store_true", default=False, help="on failure also display the stacktrace internals of virtualenv", ) _do_report_setup(parser, args, setup_logging) options = load_app_data(args, parser, options) handle_extra_commands(options) discover = get_discover(parser, args) parser._interpreter = interpreter = discover.interpreter # noqa: SLF001 if interpreter is None: msg = f"failed to find interpreter for {discover}" raise RuntimeError(msg) elements = [ CreatorSelector(interpreter, parser), SeederSelector(interpreter, parser), ActivationSelector(interpreter, parser), ] options, _ = parser.parse_known_args(args) for element in elements: element.handle_selected_arg_parse(options) parser.enable_help() return parser, elements def build_parser_only(args=None): """Used to provide a parser for the doc generation.""" return build_parser(args)[0] def handle_extra_commands(options): if options.upgrade_embed_wheels: result = manual_upgrade(options.app_data, options.env) raise SystemExit(result) def load_app_data(args, parser, options): parser.add_argument( "--read-only-app-data", action="store_true", help="use app data folder in read-only mode (write operations will fail with error)", ) options, _ = parser.parse_known_args(args, namespace=options) # here we need a write-able application data (e.g. the zipapp might need this for discovery cache) parser.add_argument( "--app-data", help="a data folder used as cache by the virtualenv", type=partial(make_app_data, read_only=options.read_only_app_data, env=options.env), default=make_app_data(None, read_only=options.read_only_app_data, env=options.env), ) parser.add_argument( "--reset-app-data", action="store_true", help="start with empty app data folder", ) parser.add_argument( "--upgrade-embed-wheels", action="store_true", help="trigger a manual update of the embedded wheels", ) options, _ = parser.parse_known_args(args, namespace=options) if options.reset_app_data: options.app_data.reset() return options def add_version_flag(parser): import virtualenv # noqa: PLC0415 parser.add_argument( "--version", action="version", version=f"%(prog)s {__version__} from {virtualenv.__file__}", help="display the version of the virtualenv package and its location, then exit", ) def _do_report_setup(parser, args, setup_logging): level_map = ", ".join(f"{logging.getLevelName(line)}={c}" for c, line in sorted(LEVELS.items())) msg = "verbosity = verbose - quiet, default {}, mapping => {}" verbosity_group = parser.add_argument_group( title="verbosity", description=msg.format(logging.getLevelName(LEVELS[3]), level_map), ) verbosity = verbosity_group.add_mutually_exclusive_group() verbosity.add_argument("-v", "--verbose", action="count", dest="verbose", help="increase verbosity", default=2) verbosity.add_argument("-q", "--quiet", action="count", dest="quiet", help="decrease verbosity", default=0) option, _ = parser.parse_known_args(args) if setup_logging: setup_report(option.verbosity) __all__ = [ "cli_run", "session_via_cli", ] PK7QYϖ virtualenv/run/session.pyfrom __future__ import annotations import json import logging class Session: """Represents a virtual environment creation session.""" def __init__(self, verbosity, app_data, interpreter, creator, seeder, activators) -> None: # noqa: PLR0913 self._verbosity = verbosity self._app_data = app_data self._interpreter = interpreter self._creator = creator self._seeder = seeder self._activators = activators @property def verbosity(self): """The verbosity of the run.""" return self._verbosity @property def interpreter(self): """Create a virtual environment based on this reference interpreter.""" return self._interpreter @property def creator(self): """The creator used to build the virtual environment (must be compatible with the interpreter).""" return self._creator @property def seeder(self): """The mechanism used to provide the seed packages (pip, setuptools, wheel).""" return self._seeder @property def activators(self): """Activators used to generate activations scripts.""" return self._activators def run(self): self._create() self._seed() self._activate() self.creator.pyenv_cfg.write() def _create(self): logging.info("create virtual environment via %s", self.creator) self.creator.run() logging.debug(_DEBUG_MARKER) logging.debug("%s", _Debug(self.creator)) def _seed(self): if self.seeder is not None and self.seeder.enabled: logging.info("add seed packages via %s", self.seeder) self.seeder.run(self.creator) def _activate(self): if self.activators: active = ", ".join(type(i).__name__.replace("Activator", "") for i in self.activators) logging.info("add activators for %s", active) for activator in self.activators: activator.generate(self.creator) def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self._app_data.close() _DEBUG_MARKER = "=" * 30 + " target debug " + "=" * 30 class _Debug: """lazily populate debug.""" def __init__(self, creator) -> None: self.creator = creator def __repr__(self) -> str: return json.dumps(self.creator.debug, indent=2) __all__ = [ "Session", ] PK7QY!virtualenv/run/plugin/__init__.pyPK7QY%¶#virtualenv/run/plugin/activators.pyfrom __future__ import annotations from argparse import ArgumentTypeError from collections import OrderedDict from .base import ComponentBuilder class ActivationSelector(ComponentBuilder): def __init__(self, interpreter, parser) -> None: self.default = None possible = OrderedDict( (k, v) for k, v in self.options("virtualenv.activate").items() if v.supports(interpreter) ) super().__init__(interpreter, parser, "activators", possible) self.parser.description = "options for activation scripts" self.active = None def add_selector_arg_parse(self, name, choices): self.default = ",".join(choices) self.parser.add_argument( f"--{name}", default=self.default, metavar="comma_sep_list", required=False, help="activators to generate - default is all supported", type=self._extract_activators, ) def _extract_activators(self, entered_str): elements = [e.strip() for e in entered_str.split(",") if e.strip()] missing = [e for e in elements if e not in self.possible] if missing: msg = f"the following activators are not available {','.join(missing)}" raise ArgumentTypeError(msg) return elements def handle_selected_arg_parse(self, options): selected_activators = ( self._extract_activators(self.default) if options.activators is self.default else options.activators ) self.active = {k: v for k, v in self.possible.items() if k in selected_activators} self.parser.add_argument( "--prompt", dest="prompt", metavar="prompt", help=( "provides an alternative prompt prefix for this environment " "(value of . means name of the current working directory)" ), default=None, ) for activator in self.active.values(): activator.add_parser_arguments(self.parser, self.interpreter) def create(self, options): return [activator_class(options) for activator_class in self.active.values()] __all__ = [ "ActivationSelector", ] PK7QY@00virtualenv/run/plugin/base.pyfrom __future__ import annotations import sys from collections import OrderedDict from importlib.metadata import entry_points importlib_metadata_version = () class PluginLoader: _OPTIONS = None _ENTRY_POINTS = None @classmethod def entry_points_for(cls, key): if sys.version_info >= (3, 10) or importlib_metadata_version >= (3, 6): return OrderedDict((e.name, e.load()) for e in cls.entry_points().select(group=key)) return OrderedDict((e.name, e.load()) for e in cls.entry_points().get(key, {})) @staticmethod def entry_points(): if PluginLoader._ENTRY_POINTS is None: PluginLoader._ENTRY_POINTS = entry_points() return PluginLoader._ENTRY_POINTS class ComponentBuilder(PluginLoader): def __init__(self, interpreter, parser, name, possible) -> None: self.interpreter = interpreter self.name = name self._impl_class = None self.possible = possible self.parser = parser.add_argument_group(title=name) self.add_selector_arg_parse(name, list(self.possible)) @classmethod def options(cls, key): if cls._OPTIONS is None: cls._OPTIONS = cls.entry_points_for(key) return cls._OPTIONS def add_selector_arg_parse(self, name, choices): raise NotImplementedError def handle_selected_arg_parse(self, options): selected = getattr(options, self.name) if selected not in self.possible: msg = f"No implementation for {self.interpreter}" raise RuntimeError(msg) self._impl_class = self.possible[selected] self.populate_selected_argparse(selected, options.app_data) return selected def populate_selected_argparse(self, selected, app_data): self.parser.description = f"options for {self.name} {selected}" self._impl_class.add_parser_arguments(self.parser, self.interpreter, app_data) def create(self, options): return self._impl_class(options, self.interpreter) __all__ = [ "ComponentBuilder", "PluginLoader", ] PK7QY/v**!virtualenv/run/plugin/creators.pyfrom __future__ import annotations from collections import OrderedDict, defaultdict from typing import TYPE_CHECKING, NamedTuple from virtualenv.create.describe import Describe from virtualenv.create.via_global_ref.builtin.builtin_way import VirtualenvBuiltin from .base import ComponentBuilder if TYPE_CHECKING: from virtualenv.create.creator import Creator, CreatorMeta class CreatorInfo(NamedTuple): key_to_class: dict[str, type[Creator]] key_to_meta: dict[str, CreatorMeta] describe: type[Describe] | None builtin_key: str class CreatorSelector(ComponentBuilder): def __init__(self, interpreter, parser) -> None: creators, self.key_to_meta, self.describe, self.builtin_key = self.for_interpreter(interpreter) super().__init__(interpreter, parser, "creator", creators) @classmethod def for_interpreter(cls, interpreter): key_to_class, key_to_meta, builtin_key, describe = OrderedDict(), {}, None, None errors = defaultdict(list) for key, creator_class in cls.options("virtualenv.create").items(): if key == "builtin": msg = "builtin creator is a reserved name" raise RuntimeError(msg) meta = creator_class.can_create(interpreter) if meta: if meta.error: errors[meta.error].append(creator_class) else: if "builtin" not in key_to_class and issubclass(creator_class, VirtualenvBuiltin): builtin_key = key key_to_class["builtin"] = creator_class key_to_meta["builtin"] = meta key_to_class[key] = creator_class key_to_meta[key] = meta if describe is None and issubclass(creator_class, Describe) and creator_class.can_describe(interpreter): describe = creator_class if not key_to_meta: if errors: rows = [f"{k} for creators {', '.join(i.__name__ for i in v)}" for k, v in errors.items()] raise RuntimeError("\n".join(rows)) msg = f"No virtualenv implementation for {interpreter}" raise RuntimeError(msg) return CreatorInfo( key_to_class=key_to_class, key_to_meta=key_to_meta, describe=describe, builtin_key=builtin_key, ) def add_selector_arg_parse(self, name, choices): # prefer the built-in venv if present, otherwise fallback to first defined type choices = sorted(choices, key=lambda a: 0 if a == "builtin" else 1) default_value = self._get_default(choices) self.parser.add_argument( f"--{name}", choices=choices, default=default_value, required=False, help=f"create environment via{'' if self.builtin_key is None else f' (builtin = {self.builtin_key})'}", ) @staticmethod def _get_default(choices): return next(iter(choices)) def populate_selected_argparse(self, selected, app_data): self.parser.description = f"options for {self.name} {selected}" self._impl_class.add_parser_arguments(self.parser, self.interpreter, self.key_to_meta[selected], app_data) def create(self, options): options.meta = self.key_to_meta[getattr(options, self.name)] if not issubclass(self._impl_class, Describe): options.describe = self.describe(options, self.interpreter) return super().create(options) __all__ = [ "CreatorInfo", "CreatorSelector", ] PK7QY "virtualenv/run/plugin/discovery.pyfrom __future__ import annotations from .base import PluginLoader class Discovery(PluginLoader): """Discovery plugins.""" def get_discover(parser, args): discover_types = Discovery.entry_points_for("virtualenv.discovery") discovery_parser = parser.add_argument_group( title="discovery", description="discover and provide a target interpreter", ) choices = _get_default_discovery(discover_types) # prefer the builtin if present, otherwise fallback to first defined type choices = sorted(choices, key=lambda a: 0 if a == "builtin" else 1) discovery_parser.add_argument( "--discovery", choices=choices, default=next(iter(choices)), required=False, help="interpreter discovery method", ) options, _ = parser.parse_known_args(args) discover_class = discover_types[options.discovery] discover_class.add_parser_arguments(discovery_parser) options, _ = parser.parse_known_args(args, namespace=options) return discover_class(options) def _get_default_discovery(discover_types): return list(discover_types.keys()) __all__ = [ "Discovery", "get_discover", ] PK7QYe 3 virtualenv/run/plugin/seeders.pyfrom __future__ import annotations from .base import ComponentBuilder class SeederSelector(ComponentBuilder): def __init__(self, interpreter, parser) -> None: possible = self.options("virtualenv.seed") super().__init__(interpreter, parser, "seeder", possible) def add_selector_arg_parse(self, name, choices): self.parser.add_argument( f"--{name}", choices=choices, default=self._get_default(), required=False, help="seed packages install method", ) self.parser.add_argument( "--no-seed", "--without-pip", help="do not install seed packages", action="store_true", dest="no_seed", ) @staticmethod def _get_default(): return "app-data" def handle_selected_arg_parse(self, options): return super().handle_selected_arg_parse(options) def create(self, options): return self._impl_class(options) __all__ = [ "SeederSelector", ] PK7QYvirtualenv/seed/__init__.pyPK7QY#virtualenv/seed/seeder.pyfrom __future__ import annotations from abc import ABC, abstractmethod class Seeder(ABC): """A seeder will install some seed packages into a virtual environment.""" def __init__(self, options, enabled) -> None: """ Create. :param options: the parsed options as defined within :meth:`add_parser_arguments` :param enabled: a flag weather the seeder is enabled or not """ self.enabled = enabled self.env = options.env @classmethod def add_parser_arguments(cls, parser, interpreter, app_data): """ Add CLI arguments for this seed mechanisms. :param parser: the CLI parser :param app_data: the CLI parser :param interpreter: the interpreter this virtual environment is based of """ raise NotImplementedError @abstractmethod def run(self, creator): """ Perform the seed operation. :param creator: the creator (based of :class:`virtualenv.create.creator.Creator`) we used to create this \ virtual environment """ raise NotImplementedError __all__ = [ "Seeder", ] PK7QY!virtualenv/seed/embed/__init__.pyPK7QY\5{{#virtualenv/seed/embed/base_embed.pyfrom __future__ import annotations from abc import ABC from pathlib import Path from virtualenv.seed.seeder import Seeder from virtualenv.seed.wheels import Version PERIODIC_UPDATE_ON_BY_DEFAULT = True class BaseEmbed(Seeder, ABC): def __init__(self, options) -> None: super().__init__(options, enabled=options.no_seed is False) self.download = options.download self.extra_search_dir = [i.resolve() for i in options.extra_search_dir if i.exists()] self.pip_version = options.pip self.setuptools_version = options.setuptools self.wheel_version = options.wheel self.no_pip = options.no_pip self.no_setuptools = options.no_setuptools self.no_wheel = options.no_wheel self.app_data = options.app_data self.periodic_update = not options.no_periodic_update if not self.distribution_to_versions(): self.enabled = False @classmethod def distributions(cls) -> dict[str, Version]: return { "pip": Version.bundle, "setuptools": Version.bundle, "wheel": Version.bundle, } def distribution_to_versions(self) -> dict[str, str]: return { distribution: getattr(self, f"{distribution}_version") for distribution in self.distributions() if getattr(self, f"no_{distribution}") is False and getattr(self, f"{distribution}_version") != "none" } @classmethod def add_parser_arguments(cls, parser, interpreter, app_data): # noqa: ARG003 group = parser.add_mutually_exclusive_group() group.add_argument( "--no-download", "--never-download", dest="download", action="store_false", help=f"pass to disable download of the latest {'/'.join(cls.distributions())} from PyPI", default=True, ) group.add_argument( "--download", dest="download", action="store_true", help=f"pass to enable download of the latest {'/'.join(cls.distributions())} from PyPI", default=False, ) parser.add_argument( "--extra-search-dir", metavar="d", type=Path, nargs="+", help="a path containing wheels to extend the internal wheel list (can be set 1+ times)", default=[], ) for distribution, default in cls.distributions().items(): if interpreter.version_info[:2] >= (3, 12) and distribution in {"wheel", "setuptools"}: default = "none" # noqa: PLW2901 parser.add_argument( f"--{distribution}", dest=distribution, metavar="version", help=f"version of {distribution} to install as seed: embed, bundle, none or exact version", default=default, ) for distribution in cls.distributions(): parser.add_argument( f"--no-{distribution}", dest=f"no_{distribution}", action="store_true", help=f"do not install {distribution}", default=False, ) parser.add_argument( "--no-periodic-update", dest="no_periodic_update", action="store_true", help="disable the periodic (once every 14 days) update of the embedded wheels", default=not PERIODIC_UPDATE_ON_BY_DEFAULT, ) def __repr__(self) -> str: result = self.__class__.__name__ result += "(" if self.extra_search_dir: result += f"extra_search_dir={', '.join(str(i) for i in self.extra_search_dir)}," result += f"download={self.download}," for distribution in self.distributions(): if getattr(self, f"no_{distribution}"): continue version = getattr(self, f"{distribution}_version", None) if version == "none": continue ver = f"={version or 'latest'}" result += f" {distribution}{ver}," return result[:-1] + ")" __all__ = [ "BaseEmbed", ] PK7QY#virtualenv/seed/embed/pip_invoke.pyfrom __future__ import annotations import logging from contextlib import contextmanager from subprocess import Popen from virtualenv.discovery.cached_py_info import LogCmd from virtualenv.seed.embed.base_embed import BaseEmbed from virtualenv.seed.wheels import Version, get_wheel, pip_wheel_env_run class PipInvoke(BaseEmbed): def __init__(self, options) -> None: super().__init__(options) def run(self, creator): if not self.enabled: return for_py_version = creator.interpreter.version_release_str with self.get_pip_install_cmd(creator.exe, for_py_version) as cmd: env = pip_wheel_env_run(self.extra_search_dir, self.app_data, self.env) self._execute(cmd, env) @staticmethod def _execute(cmd, env): logging.debug("pip seed by running: %s", LogCmd(cmd, env)) process = Popen(cmd, env=env) process.communicate() if process.returncode != 0: msg = f"failed seed with code {process.returncode}" raise RuntimeError(msg) return process @contextmanager def get_pip_install_cmd(self, exe, for_py_version): cmd = [str(exe), "-m", "pip", "-q", "install", "--only-binary", ":all:", "--disable-pip-version-check"] if not self.download: cmd.append("--no-index") folders = set() for dist, version in self.distribution_to_versions().items(): wheel = get_wheel( distribution=dist, version=version, for_py_version=for_py_version, search_dirs=self.extra_search_dir, download=False, app_data=self.app_data, do_periodic_update=self.periodic_update, env=self.env, ) if wheel is None: msg = f"could not get wheel for distribution {dist}" raise RuntimeError(msg) folders.add(str(wheel.path.parent)) cmd.append(Version.as_pip_req(dist, wheel.version)) for folder in sorted(folders): cmd.extend(["--find-links", str(folder)]) yield cmd __all__ = [ "PipInvoke", ] PK7QY.virtualenv/seed/embed/via_app_data/__init__.pyPK7QY 2virtualenv/seed/embed/via_app_data/via_app_data.py"""Bootstrap.""" from __future__ import annotations import logging import sys import traceback from contextlib import contextmanager from pathlib import Path from subprocess import CalledProcessError from threading import Lock, Thread from virtualenv.info import fs_supports_symlink from virtualenv.seed.embed.base_embed import BaseEmbed from virtualenv.seed.wheels import get_wheel from .pip_install.copy import CopyPipInstall from .pip_install.symlink import SymlinkPipInstall class FromAppData(BaseEmbed): def __init__(self, options) -> None: super().__init__(options) self.symlinks = options.symlink_app_data @classmethod def add_parser_arguments(cls, parser, interpreter, app_data): super().add_parser_arguments(parser, interpreter, app_data) can_symlink = app_data.transient is False and fs_supports_symlink() sym = "" if can_symlink else "not supported - " parser.add_argument( "--symlink-app-data", dest="symlink_app_data", action="store_true" if can_symlink else "store_false", help=f"{sym} symlink the python packages from the app-data folder (requires seed pip>=19.3)", default=False, ) def run(self, creator): if not self.enabled: return with self._get_seed_wheels(creator) as name_to_whl: pip_version = name_to_whl["pip"].version_tuple if "pip" in name_to_whl else None installer_class = self.installer_class(pip_version) exceptions = {} def _install(name, wheel): try: logging.debug("install %s from wheel %s via %s", name, wheel, installer_class.__name__) key = Path(installer_class.__name__) / wheel.path.stem wheel_img = self.app_data.wheel_image(creator.interpreter.version_release_str, key) installer = installer_class(wheel.path, creator, wheel_img) parent = self.app_data.lock / wheel_img.parent with parent.non_reentrant_lock_for_key(wheel_img.name): if not installer.has_image(): installer.build_image() installer.install(creator.interpreter.version_info) except Exception: # noqa: BLE001 exceptions[name] = sys.exc_info() threads = [Thread(target=_install, args=(n, w)) for n, w in name_to_whl.items()] for thread in threads: thread.start() for thread in threads: thread.join() if exceptions: messages = [f"failed to build image {', '.join(exceptions.keys())} because:"] for value in exceptions.values(): exc_type, exc_value, exc_traceback = value messages.append("".join(traceback.format_exception(exc_type, exc_value, exc_traceback))) raise RuntimeError("\n".join(messages)) @contextmanager def _get_seed_wheels(self, creator): # noqa: C901 name_to_whl, lock, fail = {}, Lock(), {} def _get(distribution, version): for_py_version = creator.interpreter.version_release_str failure, result = None, None # fallback to download in case the exact version is not available for download in [True] if self.download else [False, True]: failure = None try: result = get_wheel( distribution=distribution, version=version, for_py_version=for_py_version, search_dirs=self.extra_search_dir, download=download, app_data=self.app_data, do_periodic_update=self.periodic_update, env=self.env, ) if result is not None: break except Exception as exception: logging.exception("fail") failure = exception if failure: if isinstance(failure, CalledProcessError): msg = f"failed to download {distribution}" if version is not None: msg += f" version {version}" msg += f", pip download exit code {failure.returncode}" output = failure.output + failure.stderr if output: msg += "\n" msg += output else: msg = repr(failure) logging.error(msg) with lock: fail[distribution] = version else: with lock: name_to_whl[distribution] = result threads = [ Thread(target=_get, args=(distribution, version)) for distribution, version in self.distribution_to_versions().items() ] for thread in threads: thread.start() for thread in threads: thread.join() if fail: msg = f"seed failed due to failing to download wheels {', '.join(fail.keys())}" raise RuntimeError(msg) yield name_to_whl def installer_class(self, pip_version_tuple): if self.symlinks and pip_version_tuple and pip_version_tuple >= (19, 3): # symlink support requires pip 19.3+ return SymlinkPipInstall return CopyPipInstall def __repr__(self) -> str: msg = f", via={'symlink' if self.symlinks else 'copy'}, app_data_dir={self.app_data}" base = super().__repr__() return f"{base[:-1]}{msg}{base[-1]}" __all__ = [ "FromAppData", ] PK7QY:virtualenv/seed/embed/via_app_data/pip_install/__init__.pyPK7QY ݅m m 6virtualenv/seed/embed/via_app_data/pip_install/base.pyfrom __future__ import annotations import logging import os import re import zipfile from abc import ABC, abstractmethod from configparser import ConfigParser from itertools import chain from pathlib import Path from tempfile import mkdtemp from distlib.scripts import ScriptMaker, enquote_executable from virtualenv.util.path import safe_delete class PipInstall(ABC): def __init__(self, wheel, creator, image_folder) -> None: self._wheel = wheel self._creator = creator self._image_dir = image_folder self._extracted = False self.__dist_info = None self._console_entry_points = None @abstractmethod def _sync(self, src, dst): raise NotImplementedError def install(self, version_info): self._extracted = True self._uninstall_previous_version() # sync image for filename in self._image_dir.iterdir(): into = self._creator.purelib / filename.name self._sync(filename, into) # generate console executables consoles = set() script_dir = self._creator.script_dir for name, module in self._console_scripts.items(): consoles.update(self._create_console_entry_point(name, module, script_dir, version_info)) logging.debug("generated console scripts %s", " ".join(i.name for i in consoles)) def build_image(self): # 1. first extract the wheel logging.debug("build install image for %s to %s", self._wheel.name, self._image_dir) with zipfile.ZipFile(str(self._wheel)) as zip_ref: self._shorten_path_if_needed(zip_ref) zip_ref.extractall(str(self._image_dir)) self._extracted = True # 2. now add additional files not present in the distribution new_files = self._generate_new_files() # 3. finally fix the records file self._fix_records(new_files) def _shorten_path_if_needed(self, zip_ref): if os.name == "nt": to_folder = str(self._image_dir) # https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation zip_max_len = max(len(i) for i in zip_ref.namelist()) path_len = zip_max_len + len(to_folder) if path_len > 260: # noqa: PLR2004 self._image_dir.mkdir(exist_ok=True) # to get a short path must exist from virtualenv.util.path import get_short_path_name # noqa: PLC0415 to_folder = get_short_path_name(to_folder) self._image_dir = Path(to_folder) def _records_text(self, files): return "\n".join(f"{os.path.relpath(str(rec), str(self._image_dir))},," for rec in files) def _generate_new_files(self): new_files = set() installer = self._dist_info / "INSTALLER" installer.write_text("pip\n", encoding="utf-8") new_files.add(installer) # inject a no-op root element, as workaround for bug in https://github.com/pypa/pip/issues/7226 marker = self._image_dir / f"{self._dist_info.stem}.virtualenv" marker.write_text("", encoding="utf-8") new_files.add(marker) folder = mkdtemp() try: to_folder = Path(folder) rel = os.path.relpath(str(self._creator.script_dir), str(self._creator.purelib)) version_info = self._creator.interpreter.version_info for name, module in self._console_scripts.items(): new_files.update( Path(os.path.normpath(str(self._image_dir / rel / i.name))) for i in self._create_console_entry_point(name, module, to_folder, version_info) ) finally: safe_delete(folder) return new_files @property def _dist_info(self): if self._extracted is False: return None # pragma: no cover if self.__dist_info is None: files = [] for filename in self._image_dir.iterdir(): files.append(filename.name) if filename.suffix == ".dist-info": self.__dist_info = filename break else: msg = f"no .dist-info at {self._image_dir}, has {', '.join(files)}" raise RuntimeError(msg) # pragma: no cover return self.__dist_info @abstractmethod def _fix_records(self, extra_record_data): raise NotImplementedError @property def _console_scripts(self): if self._extracted is False: return None # pragma: no cover if self._console_entry_points is None: self._console_entry_points = {} entry_points = self._dist_info / "entry_points.txt" if entry_points.exists(): parser = ConfigParser() with entry_points.open(encoding="utf-8") as file_handler: parser.read_file(file_handler) if "console_scripts" in parser.sections(): for name, value in parser.items("console_scripts"): match = re.match(r"(.*?)-?\d\.?\d*", name) our_name = match.groups(1)[0] if match else name self._console_entry_points[our_name] = value return self._console_entry_points def _create_console_entry_point(self, name, value, to_folder, version_info): result = [] maker = ScriptMakerCustom(to_folder, version_info, self._creator.exe, name) specification = f"{name} = {value}" new_files = maker.make(specification) result.extend(Path(i) for i in new_files) return result def _uninstall_previous_version(self): dist_name = self._dist_info.stem.split("-")[0] in_folders = chain.from_iterable([i.iterdir() for i in (self._creator.purelib, self._creator.platlib)]) paths = (p for p in in_folders if p.stem.split("-")[0] == dist_name and p.suffix == ".dist-info" and p.is_dir()) existing_dist = next(paths, None) if existing_dist is not None: self._uninstall_dist(existing_dist) @staticmethod def _uninstall_dist(dist): dist_base = dist.parent logging.debug("uninstall existing distribution %s from %s", dist.stem, dist_base) top_txt = dist / "top_level.txt" # add top level packages at folder level paths = ( {dist.parent / i.strip() for i in top_txt.read_text(encoding="utf-8").splitlines()} if top_txt.exists() else set() ) paths.add(dist) # add the dist-info folder itself base_dirs, record = paths.copy(), dist / "RECORD" # collect entries in record that we did not register yet for name in ( (i.split(",")[0] for i in record.read_text(encoding="utf-8").splitlines()) if record.exists() else () ): path = dist_base / name if not any(p in base_dirs for p in path.parents): # only add if not already added as a base dir paths.add(path) for path in sorted(paths): # actually remove stuff in a stable order if path.exists(): if path.is_dir() and not path.is_symlink(): safe_delete(path) else: path.unlink() def clear(self): if self._image_dir.exists(): safe_delete(self._image_dir) def has_image(self): return self._image_dir.exists() and next(self._image_dir.iterdir()) is not None class ScriptMakerCustom(ScriptMaker): def __init__(self, target_dir, version_info, executable, name) -> None: super().__init__(None, str(target_dir)) self.clobber = True # overwrite self.set_mode = True # ensure they are executable self.executable = enquote_executable(str(executable)) self.version_info = version_info.major, version_info.minor self.variants = {"", "X", "X.Y"} self._name = name def _write_script(self, names, shebang, script_bytes, filenames, ext): names.add(f"{self._name}{self.version_info[0]}.{self.version_info[1]}") super()._write_script(names, shebang, script_bytes, filenames, ext) __all__ = [ "PipInstall", ] PK7QY6virtualenv/seed/embed/via_app_data/pip_install/copy.pyfrom __future__ import annotations # noqa: A005 import os from pathlib import Path from virtualenv.util.path import copy from .base import PipInstall class CopyPipInstall(PipInstall): def _sync(self, src, dst): copy(src, dst) def _generate_new_files(self): # create the pyc files new_files = super()._generate_new_files() new_files.update(self._cache_files()) return new_files def _cache_files(self): version = self._creator.interpreter.version_info py_c_ext = f".{self._creator.interpreter.implementation.lower()}-{version.major}{version.minor}.pyc" for root, dirs, files in os.walk(str(self._image_dir), topdown=True): root_path = Path(root) for name in files: if name.endswith(".py"): yield root_path / f"{name[:-3]}{py_c_ext}" for name in dirs: yield root_path / name / "__pycache__" def _fix_records(self, new_files): extra_record_data_str = self._records_text(new_files) with (self._dist_info / "RECORD").open("ab") as file_handler: file_handler.write(extra_record_data_str.encode("utf-8")) __all__ = [ "CopyPipInstall", ] PK7QYN9virtualenv/seed/embed/via_app_data/pip_install/symlink.pyfrom __future__ import annotations import os from stat import S_IREAD, S_IRGRP, S_IROTH from subprocess import PIPE, Popen from virtualenv.util.path import safe_delete, set_tree from .base import PipInstall class SymlinkPipInstall(PipInstall): def _sync(self, src, dst): os.symlink(str(src), str(dst)) def _generate_new_files(self): # create the pyc files, as the build image will be R/O cmd = [str(self._creator.exe), "-m", "compileall", str(self._image_dir)] process = Popen(cmd, stdout=PIPE, stderr=PIPE) process.communicate() # the root pyc is shared, so we'll not symlink that - but still add the pyc files to the RECORD for close root_py_cache = self._image_dir / "__pycache__" new_files = set() if root_py_cache.exists(): new_files.update(root_py_cache.iterdir()) new_files.add(root_py_cache) safe_delete(root_py_cache) core_new_files = super()._generate_new_files() # remove files that are within the image folder deeper than one level (as these will be not linked directly) for file in core_new_files: try: rel = file.relative_to(self._image_dir) if len(rel.parts) > 1: continue except ValueError: pass new_files.add(file) return new_files def _fix_records(self, new_files): new_files.update(i for i in self._image_dir.iterdir()) extra_record_data_str = self._records_text(sorted(new_files, key=str)) (self._dist_info / "RECORD").write_text(extra_record_data_str, encoding="utf-8") def build_image(self): super().build_image() # protect the image by making it read only set_tree(self._image_dir, S_IREAD | S_IRGRP | S_IROTH) def clear(self): if self._image_dir.exists(): safe_delete(self._image_dir) super().clear() __all__ = [ "SymlinkPipInstall", ] PK7QYxx"virtualenv/seed/wheels/__init__.pyfrom __future__ import annotations from .acquire import get_wheel, pip_wheel_env_run from .util import Version, Wheel __all__ = [ "Version", "Wheel", "get_wheel", "pip_wheel_env_run", ] PK7QY 8!virtualenv/seed/wheels/acquire.py"""Bootstrap.""" from __future__ import annotations import logging import sys from operator import eq, lt from pathlib import Path from subprocess import PIPE, CalledProcessError, Popen from .bundle import from_bundle from .periodic_update import add_wheel_to_update_log from .util import Version, Wheel, discover_wheels def get_wheel( # noqa: PLR0913 distribution, version, for_py_version, search_dirs, download, app_data, do_periodic_update, env, ): """Get a wheel with the given distribution-version-for_py_version trio, by using the extra search dir + download.""" # not all wheels are compatible with all python versions, so we need to py version qualify it wheel = None if not download or version != Version.bundle: # 1. acquire from bundle wheel = from_bundle(distribution, version, for_py_version, search_dirs, app_data, do_periodic_update, env) if download and wheel is None and version != Version.embed: # 2. download from the internet wheel = download_wheel( distribution=distribution, version_spec=Version.as_version_spec(version), for_py_version=for_py_version, search_dirs=search_dirs, app_data=app_data, to_folder=app_data.house, env=env, ) if wheel is not None and app_data.can_update: add_wheel_to_update_log(wheel, for_py_version, app_data) return wheel def download_wheel(distribution, version_spec, for_py_version, search_dirs, app_data, to_folder, env): # noqa: PLR0913 to_download = f"{distribution}{version_spec or ''}" logging.debug("download wheel %s %s to %s", to_download, for_py_version, to_folder) cmd = [ sys.executable, "-m", "pip", "download", "--progress-bar", "off", "--disable-pip-version-check", "--only-binary=:all:", "--no-deps", "--python-version", for_py_version, "-d", str(to_folder), to_download, ] # pip has no interface in python - must be a new sub-process env = pip_wheel_env_run(search_dirs, app_data, env) process = Popen(cmd, env=env, stdout=PIPE, stderr=PIPE, universal_newlines=True, encoding="utf-8") out, err = process.communicate() if process.returncode != 0: kwargs = {"output": out, "stderr": err} raise CalledProcessError(process.returncode, cmd, **kwargs) result = _find_downloaded_wheel(distribution, version_spec, for_py_version, to_folder, out) logging.debug("downloaded wheel %s", result.name) return result def _find_downloaded_wheel(distribution, version_spec, for_py_version, to_folder, out): for line in out.splitlines(): stripped_line = line.lstrip() for marker in ("Saved ", "File was already downloaded "): if stripped_line.startswith(marker): return Wheel(Path(stripped_line[len(marker) :]).absolute()) # if for some reason the output does not match fallback to the latest version with that spec return find_compatible_in_house(distribution, version_spec, for_py_version, to_folder) def find_compatible_in_house(distribution, version_spec, for_py_version, in_folder): wheels = discover_wheels(in_folder, distribution, None, for_py_version) start, end = 0, len(wheels) if version_spec is not None and version_spec: if version_spec.startswith("<"): from_pos, op = 1, lt elif version_spec.startswith("=="): from_pos, op = 2, eq else: raise ValueError(version_spec) version = Wheel.as_version_tuple(version_spec[from_pos:]) start = next((at for at, w in enumerate(wheels) if op(w.version_tuple, version)), len(wheels)) return None if start == end else wheels[start] def pip_wheel_env_run(search_dirs, app_data, env): env = env.copy() env.update({"PIP_USE_WHEEL": "1", "PIP_USER": "0", "PIP_NO_INPUT": "1"}) wheel = get_wheel( distribution="pip", version=None, for_py_version=f"{sys.version_info.major}.{sys.version_info.minor}", search_dirs=search_dirs, download=False, app_data=app_data, do_periodic_update=False, env=env, ) if wheel is None: msg = "could not find the embedded pip" raise RuntimeError(msg) env["PYTHONPATH"] = str(wheel.path) return env __all__ = [ "download_wheel", "get_wheel", "pip_wheel_env_run", ] PK7QY5AbGG virtualenv/seed/wheels/bundle.pyfrom __future__ import annotations from virtualenv.seed.wheels.embed import get_embed_wheel from .periodic_update import periodic_update from .util import Version, Wheel, discover_wheels def from_bundle(distribution, version, for_py_version, search_dirs, app_data, do_periodic_update, env): # noqa: PLR0913 """Load the bundled wheel to a cache directory.""" of_version = Version.of_version(version) wheel = load_embed_wheel(app_data, distribution, for_py_version, of_version) if version != Version.embed: # 2. check if we have upgraded embed if app_data.can_update: per = do_periodic_update wheel = periodic_update(distribution, of_version, for_py_version, wheel, search_dirs, app_data, per, env) # 3. acquire from extra search dir found_wheel = from_dir(distribution, of_version, for_py_version, search_dirs) if found_wheel is not None and (wheel is None or found_wheel.version_tuple > wheel.version_tuple): wheel = found_wheel return wheel def load_embed_wheel(app_data, distribution, for_py_version, version): wheel = get_embed_wheel(distribution, for_py_version) if wheel is not None: version_match = version == wheel.version if version is None or version_match: with app_data.ensure_extracted(wheel.path, lambda: app_data.house) as wheel_path: wheel = Wheel(wheel_path) else: # if version does not match ignore wheel = None return wheel def from_dir(distribution, version, for_py_version, directories): """Load a compatible wheel from a given folder.""" for folder in directories: for wheel in discover_wheels(folder, distribution, version, for_py_version): return wheel return None __all__ = [ "from_bundle", "load_embed_wheel", ] PK7QY< 9<<)virtualenv/seed/wheels/periodic_update.py"""Periodically update bundled versions.""" from __future__ import annotations import json import logging import os import ssl import sys from datetime import datetime, timedelta, timezone from itertools import groupby from pathlib import Path from shutil import copy2 from subprocess import DEVNULL, Popen from textwrap import dedent from threading import Thread from urllib.error import URLError from urllib.request import urlopen from virtualenv.app_data import AppDataDiskFolder from virtualenv.seed.wheels.embed import BUNDLE_SUPPORT from virtualenv.seed.wheels.util import Wheel from virtualenv.util.subprocess import CREATE_NO_WINDOW GRACE_PERIOD_CI = timedelta(hours=1) # prevent version switch in the middle of a CI run GRACE_PERIOD_MINOR = timedelta(days=28) UPDATE_PERIOD = timedelta(days=14) UPDATE_ABORTED_DELAY = timedelta(hours=1) def periodic_update( # noqa: PLR0913 distribution, of_version, for_py_version, wheel, search_dirs, app_data, do_periodic_update, env, ): if do_periodic_update: handle_auto_update(distribution, for_py_version, wheel, search_dirs, app_data, env) now = datetime.now(tz=timezone.utc) def _update_wheel(ver): updated_wheel = Wheel(app_data.house / ver.filename) logging.debug("using %supdated wheel %s", "periodically " if updated_wheel else "", updated_wheel) return updated_wheel u_log = UpdateLog.from_app_data(app_data, distribution, for_py_version) if of_version is None: for _, group in groupby(u_log.versions, key=lambda v: v.wheel.version_tuple[0:2]): # use only latest patch version per minor, earlier assumed to be buggy all_patches = list(group) ignore_grace_period_minor = any(version for version in all_patches if version.use(now)) for version in all_patches: if wheel is not None and Path(version.filename).name == wheel.name: return wheel if version.use(now, ignore_grace_period_minor): return _update_wheel(version) else: for version in u_log.versions: if version.wheel.version == of_version: return _update_wheel(version) return wheel def handle_auto_update(distribution, for_py_version, wheel, search_dirs, app_data, env): # noqa: PLR0913 embed_update_log = app_data.embed_update_log(distribution, for_py_version) u_log = UpdateLog.from_dict(embed_update_log.read()) if u_log.needs_update: u_log.periodic = True u_log.started = datetime.now(tz=timezone.utc) embed_update_log.write(u_log.to_dict()) trigger_update(distribution, for_py_version, wheel, search_dirs, app_data, periodic=True, env=env) def add_wheel_to_update_log(wheel, for_py_version, app_data): embed_update_log = app_data.embed_update_log(wheel.distribution, for_py_version) logging.debug("adding %s information to %s", wheel.name, embed_update_log.file) u_log = UpdateLog.from_dict(embed_update_log.read()) if any(version.filename == wheel.name for version in u_log.versions): logging.warning("%s already present in %s", wheel.name, embed_update_log.file) return # we don't need a release date for sources other than "periodic" version = NewVersion(wheel.name, datetime.now(tz=timezone.utc), None, "download") u_log.versions.append(version) # always write at the end for proper updates embed_update_log.write(u_log.to_dict()) DATETIME_FMT = "%Y-%m-%dT%H:%M:%S.%fZ" def dump_datetime(value): return None if value is None else value.strftime(DATETIME_FMT) def load_datetime(value): return None if value is None else datetime.strptime(value, DATETIME_FMT).replace(tzinfo=timezone.utc) class NewVersion: # noqa: PLW1641 def __init__(self, filename, found_date, release_date, source) -> None: self.filename = filename self.found_date = found_date self.release_date = release_date self.source = source @classmethod def from_dict(cls, dictionary): return cls( filename=dictionary["filename"], found_date=load_datetime(dictionary["found_date"]), release_date=load_datetime(dictionary["release_date"]), source=dictionary["source"], ) def to_dict(self): return { "filename": self.filename, "release_date": dump_datetime(self.release_date), "found_date": dump_datetime(self.found_date), "source": self.source, } def use(self, now, ignore_grace_period_minor=False, ignore_grace_period_ci=False): # noqa: FBT002 if self.source == "manual": return True if self.source == "periodic" and (self.found_date < now - GRACE_PERIOD_CI or ignore_grace_period_ci): if not ignore_grace_period_minor: compare_from = self.release_date or self.found_date return now - compare_from >= GRACE_PERIOD_MINOR return True return False def __repr__(self) -> str: return ( f"{self.__class__.__name__}(filename={self.filename}), found_date={self.found_date}, " f"release_date={self.release_date}, source={self.source})" ) def __eq__(self, other): return type(self) == type(other) and all( # noqa: E721 getattr(self, k) == getattr(other, k) for k in ["filename", "release_date", "found_date", "source"] ) def __ne__(self, other): return not (self == other) @property def wheel(self): return Wheel(Path(self.filename)) class UpdateLog: def __init__(self, started, completed, versions, periodic) -> None: self.started = started self.completed = completed self.versions = versions self.periodic = periodic @classmethod def from_dict(cls, dictionary): if dictionary is None: dictionary = {} return cls( load_datetime(dictionary.get("started")), load_datetime(dictionary.get("completed")), [NewVersion.from_dict(v) for v in dictionary.get("versions", [])], dictionary.get("periodic"), ) @classmethod def from_app_data(cls, app_data, distribution, for_py_version): raw_json = app_data.embed_update_log(distribution, for_py_version).read() return cls.from_dict(raw_json) def to_dict(self): return { "started": dump_datetime(self.started), "completed": dump_datetime(self.completed), "periodic": self.periodic, "versions": [r.to_dict() for r in self.versions], } @property def needs_update(self): now = datetime.now(tz=timezone.utc) if self.completed is None: # never completed return self._check_start(now) if now - self.completed <= UPDATE_PERIOD: return False return self._check_start(now) def _check_start(self, now): return self.started is None or now - self.started > UPDATE_ABORTED_DELAY def trigger_update(distribution, for_py_version, wheel, search_dirs, app_data, env, periodic): # noqa: PLR0913 wheel_path = None if wheel is None else str(wheel.path) cmd = [ sys.executable, "-c", dedent( """ from virtualenv.report import setup_report, MAX_LEVEL from virtualenv.seed.wheels.periodic_update import do_update setup_report(MAX_LEVEL, show_pid=True) do_update({!r}, {!r}, {!r}, {!r}, {!r}, {!r}) """, ) .strip() .format(distribution, for_py_version, wheel_path, str(app_data), [str(p) for p in search_dirs], periodic), ] debug = env.get("_VIRTUALENV_PERIODIC_UPDATE_INLINE") == "1" pipe = None if debug else DEVNULL kwargs = {"stdout": pipe, "stderr": pipe} if not debug and sys.platform == "win32": kwargs["creationflags"] = CREATE_NO_WINDOW process = Popen(cmd, **kwargs) logging.info( "triggered periodic upgrade of %s%s (for python %s) via background process having PID %d", distribution, "" if wheel is None else f"=={wheel.version}", for_py_version, process.pid, ) if debug: process.communicate() # on purpose not called to make it a background process else: # set the returncode here -> no ResourceWarning on main process exit if the subprocess still runs process.returncode = 0 def do_update(distribution, for_py_version, embed_filename, app_data, search_dirs, periodic): # noqa: PLR0913 versions = None try: versions = _run_do_update(app_data, distribution, embed_filename, for_py_version, periodic, search_dirs) finally: logging.debug("done %s %s with %s", distribution, for_py_version, versions) return versions def _run_do_update( # noqa: C901, PLR0913 app_data, distribution, embed_filename, for_py_version, periodic, search_dirs, ): from virtualenv.seed.wheels import acquire # noqa: PLC0415 wheel_filename = None if embed_filename is None else Path(embed_filename) embed_version = None if wheel_filename is None else Wheel(wheel_filename).version_tuple app_data = AppDataDiskFolder(app_data) if isinstance(app_data, str) else app_data search_dirs = [Path(p) if isinstance(p, str) else p for p in search_dirs] wheelhouse = app_data.house embed_update_log = app_data.embed_update_log(distribution, for_py_version) u_log = UpdateLog.from_dict(embed_update_log.read()) now = datetime.now(tz=timezone.utc) update_versions, other_versions = [], [] for version in u_log.versions: if version.source in {"periodic", "manual"}: update_versions.append(version) else: other_versions.append(version) if periodic: source = "periodic" else: source = "manual" # mark the most recent one as source "manual" if update_versions: update_versions[0].source = source if wheel_filename is not None: dest = wheelhouse / wheel_filename.name if not dest.exists(): copy2(str(wheel_filename), str(wheelhouse)) last, last_version, versions, filenames = None, None, [], set() while last is None or not last.use(now, ignore_grace_period_ci=True): download_time = datetime.now(tz=timezone.utc) dest = acquire.download_wheel( distribution=distribution, version_spec=None if last_version is None else f"<{last_version}", for_py_version=for_py_version, search_dirs=search_dirs, app_data=app_data, to_folder=wheelhouse, env=os.environ, ) if dest is None or (update_versions and update_versions[0].filename == dest.name): break release_date = release_date_for_wheel_path(dest.path) last = NewVersion(filename=dest.path.name, release_date=release_date, found_date=download_time, source=source) logging.info("detected %s in %s", last, datetime.now(tz=timezone.utc) - download_time) versions.append(last) filenames.add(last.filename) last_wheel = last.wheel last_version = last_wheel.version if embed_version is not None and embed_version >= last_wheel.version_tuple: break # stop download if we reach the embed version u_log.periodic = periodic if not u_log.periodic: u_log.started = now # update other_versions by removing version we just found other_versions = [version for version in other_versions if version.filename not in filenames] u_log.versions = versions + update_versions + other_versions u_log.completed = datetime.now(tz=timezone.utc) embed_update_log.write(u_log.to_dict()) return versions def release_date_for_wheel_path(dest): wheel = Wheel(dest) # the most accurate is to ask PyPi - e.g. https://pypi.org/pypi/pip/json, # see https://warehouse.pypa.io/api-reference/json/ for more details content = _pypi_get_distribution_info_cached(wheel.distribution) if content is not None: try: upload_time = content["releases"][wheel.version][0]["upload_time"] return datetime.strptime(upload_time, "%Y-%m-%dT%H:%M:%S").replace(tzinfo=timezone.utc) except Exception as exception: # noqa: BLE001 logging.error("could not load release date %s because %r", content, exception) # noqa: TRY400 return None def _request_context(): yield None # fallback to non verified HTTPS (the information we request is not sensitive, so fallback) yield ssl._create_unverified_context() # noqa: S323, SLF001 _PYPI_CACHE = {} def _pypi_get_distribution_info_cached(distribution): if distribution not in _PYPI_CACHE: _PYPI_CACHE[distribution] = _pypi_get_distribution_info(distribution) return _PYPI_CACHE[distribution] def _pypi_get_distribution_info(distribution): content, url = None, f"https://pypi.org/pypi/{distribution}/json" try: for context in _request_context(): try: with urlopen(url, context=context) as file_handler: # noqa: S310 content = json.load(file_handler) break except URLError as exception: logging.error("failed to access %s because %r", url, exception) # noqa: TRY400 except Exception as exception: # noqa: BLE001 logging.error("failed to access %s because %r", url, exception) # noqa: TRY400 return content def manual_upgrade(app_data, env): threads = [] for for_py_version, distribution_to_package in BUNDLE_SUPPORT.items(): # load extra search dir for the given for_py for distribution in distribution_to_package: thread = Thread(target=_run_manual_upgrade, args=(app_data, distribution, for_py_version, env)) thread.start() threads.append(thread) for thread in threads: thread.join() def _run_manual_upgrade(app_data, distribution, for_py_version, env): start = datetime.now(tz=timezone.utc) from .bundle import from_bundle # noqa: PLC0415 current = from_bundle( distribution=distribution, version=None, for_py_version=for_py_version, search_dirs=[], app_data=app_data, do_periodic_update=False, env=env, ) logging.warning( "upgrade %s for python %s with current %s", distribution, for_py_version, "" if current is None else current.name, ) versions = do_update( distribution=distribution, for_py_version=for_py_version, embed_filename=current.path, app_data=app_data, search_dirs=[], periodic=False, ) args = [ distribution, for_py_version, datetime.now(tz=timezone.utc) - start, ] if versions: args.append("\n".join(f"\t{v}" for v in versions)) ver_update = "new entries found:\n%s" if versions else "no new versions found" msg = f"upgraded %s for python %s in %s {ver_update}" logging.warning(msg, *args) __all__ = [ "NewVersion", "UpdateLog", "add_wheel_to_update_log", "do_update", "dump_datetime", "load_datetime", "manual_upgrade", "periodic_update", "release_date_for_wheel_path", "trigger_update", ] PK7QYuzzvirtualenv/seed/wheels/util.pyfrom __future__ import annotations from operator import attrgetter from zipfile import ZipFile class Wheel: def __init__(self, path) -> None: # https://www.python.org/dev/peps/pep-0427/#file-name-convention # The wheel filename is {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform tag}.whl self.path = path self._parts = path.stem.split("-") @classmethod def from_path(cls, path): if path is not None and path.suffix == ".whl" and len(path.stem.split("-")) >= 5: # noqa: PLR2004 return cls(path) return None @property def distribution(self): return self._parts[0] @property def version(self): return self._parts[1] @property def version_tuple(self): return self.as_version_tuple(self.version) @staticmethod def as_version_tuple(version): result = [] for part in version.split(".")[0:3]: try: result.append(int(part)) except ValueError: # noqa: PERF203 break if not result: raise ValueError(version) return tuple(result) @property def name(self): return self.path.name def support_py(self, py_version): name = f"{'-'.join(self.path.stem.split('-')[0:2])}.dist-info/METADATA" with ZipFile(str(self.path), "r") as zip_file: metadata = zip_file.read(name).decode("utf-8") marker = "Requires-Python:" requires = next((i[len(marker) :] for i in metadata.splitlines() if i.startswith(marker)), None) if requires is None: # if it does not specify a python requires the assumption is compatible return True py_version_int = tuple(int(i) for i in py_version.split(".")) for require in (i.strip() for i in requires.split(",")): # https://www.python.org/dev/peps/pep-0345/#version-specifiers for operator, check in [ ("!=", lambda v: py_version_int != v), ("==", lambda v: py_version_int == v), ("<=", lambda v: py_version_int <= v), (">=", lambda v: py_version_int >= v), ("<", lambda v: py_version_int < v), (">", lambda v: py_version_int > v), ]: if require.startswith(operator): ver_str = require[len(operator) :].strip() version = tuple((int(i) if i != "*" else None) for i in ver_str.split("."))[0:2] if not check(version): return False break return True def __repr__(self) -> str: return f"{self.__class__.__name__}({self.path})" def __str__(self) -> str: return str(self.path) def discover_wheels(from_folder, distribution, version, for_py_version): wheels = [] for filename in from_folder.iterdir(): wheel = Wheel.from_path(filename) if ( wheel and wheel.distribution == distribution and (version is None or wheel.version == version) and wheel.support_py(for_py_version) ): wheels.append(wheel) return sorted(wheels, key=attrgetter("version_tuple", "distribution"), reverse=True) class Version: #: the version bundled with virtualenv bundle = "bundle" embed = "embed" #: custom version handlers non_version = (bundle, embed) @staticmethod def of_version(value): return None if value in Version.non_version else value @staticmethod def as_pip_req(distribution, version): return f"{distribution}{Version.as_version_spec(version)}" @staticmethod def as_version_spec(version): of_version = Version.of_version(version) return "" if of_version is None else f"=={of_version}" __all__ = [ "Version", "Wheel", "discover_wheels", ] PK7QYMY(virtualenv/seed/wheels/embed/__init__.pyfrom __future__ import annotations from pathlib import Path from virtualenv.seed.wheels.util import Wheel BUNDLE_FOLDER = Path(__file__).absolute().parent BUNDLE_SUPPORT = { "3.8": { "pip": "pip-24.2-py3-none-any.whl", "setuptools": "setuptools-75.2.0-py3-none-any.whl", "wheel": "wheel-0.44.0-py3-none-any.whl", }, "3.9": { "pip": "pip-24.2-py3-none-any.whl", "setuptools": "setuptools-75.2.0-py3-none-any.whl", "wheel": "wheel-0.44.0-py3-none-any.whl", }, "3.10": { "pip": "pip-24.2-py3-none-any.whl", "setuptools": "setuptools-75.2.0-py3-none-any.whl", "wheel": "wheel-0.44.0-py3-none-any.whl", }, "3.11": { "pip": "pip-24.2-py3-none-any.whl", "setuptools": "setuptools-75.2.0-py3-none-any.whl", "wheel": "wheel-0.44.0-py3-none-any.whl", }, "3.12": { "pip": "pip-24.2-py3-none-any.whl", "setuptools": "setuptools-75.2.0-py3-none-any.whl", "wheel": "wheel-0.44.0-py3-none-any.whl", }, "3.13": { "pip": "pip-24.2-py3-none-any.whl", "setuptools": "setuptools-75.2.0-py3-none-any.whl", "wheel": "wheel-0.44.0-py3-none-any.whl", }, "3.14": { "pip": "pip-24.2-py3-none-any.whl", "setuptools": "setuptools-75.2.0-py3-none-any.whl", "wheel": "wheel-0.44.0-py3-none-any.whl", }, } MAX = "3.8" def get_embed_wheel(distribution, for_py_version): path = BUNDLE_FOLDER / (BUNDLE_SUPPORT.get(for_py_version, {}) or BUNDLE_SUPPORT[MAX]).get(distribution) return Wheel.from_path(path) __all__ = [ "BUNDLE_FOLDER", "BUNDLE_SUPPORT", "MAX", "get_embed_wheel", ] PK7QY/(6virtualenv/seed/wheels/embed/pip-24.2-py3-none-any.whlPKfXxcpip/__init__.py=Pj0 +D.[6e0DIm$e%?%G9QYDb1U,y*xb` p﹓?,Q>3++P@(~{#+xFA fH9@AjbE=S}=4ق Bt#Ҝ˚D&~lH2V;;i3*kVՙ}JW+:qd6PKfXo׼Vpip/__main__.py]RKo0 W9Kw-vC阈- #i( <tEo8BYq9Ft .QD|\~4 9UW&4@=Ƀy`fyJ~Dh!E!s809R p_4xS[á &tY{U|NGG qvN[G1e.!؟1up\pw)40٭ǭn`U0m 3wOӨm'Cmn1ILVE8E #+?׀rzCǤ!hmeb!{@q7I52/\_:Y>AX l6ڮ1{m,@EX aFˈ0D XL,.Q,CX$l]~7S PM݉P*=@dQο_bJ* =3NބpwX*\krM M V { I"妟J*M@M|7mh27 GG9ɧӳy^UZɌ8~}tDRseDXLoOK262[$DJT}Αgҏ[V!5wǂ1EES\ 96^{?pȆ1p[K3N;^tiPÄ}o-! ٛ$z4EXmY![SB/CfV!R2}$^pkRNԉ0FWe,=6_PKfX5 pip/py.typed%N0 E~X lo@b6i-%v8=N-sHaIw$QFvT+>OI H.3Q<̧f,t$o Ƚ9ŸX| hdr1hd7*4;#)!*W|J߱7g]R915nPKfXS)`7pip/_internal/__init__.pyuQN@ +R,H@%*Xت ]'t;U' n:JP2+It oE)kgI?()q~Tr9wHgܙz( ':Ĉ63BH€fuoy1sOu}(@rQgCs .PZda #ƵEdkDq[!K2OmIBЂ7`2| o%r3ֈ_Z/W&bPIROX, w.lEv BƶÁUS0P'e_؎Rrŕ2C&ׂ56I|}H`X"RHZB y¢+B& 0=!1V&p슊pPk)r#`ј]♥Ly&L+4g9ky{Jqp$ 6keγ:=y \E냎y w:T 8#3Jٮk2V"?i*=Eh#>0`R~  X&xv'kozO[qHWXem .~`T-47ų aCqNu_7"J߱of5{A|KsbD\Gfh1iҶdl:H<ݷh#o՗-iHX" 8,3ipn!saXKJ1z)R r̟O=B~M,rvH+T~42 L(4Zz2SDʼrxNjwo`a%J|u#:B&zQB{.*GC!C hhGC)gL1ʉt%5_)mg$= !86[?VC9TxHgYM3?hwX]GT=>$yX\-WfNInu>7@/nĔݥc61t\)~L?3drB ^$u)7Bf\x2i~Nt ?XvBOj&4vF}1xZjNu+sF*XkTWYQUPJO XisΛٕ饽d43Clmd Fi 3 d 6ԽP9 [>Q==ϧsTyQP9 >voFԋs{,eP@,쇐qWn-pV|/3Xzx>ztXa]"t繺|?puyy0F &8%"u'`(ΚuTC E,hMC"yXݧ 97o2X]$8IdêrA;Kx{hqq@-a"_xv˳;N<Ю[jY˨#+Q~ăv[rx1H:h};S>y@±+eSlfָi+?*M .jn\ޔs ($E8ǕIhLڇgbдb{hZ=잦|.m?\h@3 )0) Rؕp<Rgk2Yܟ bſ^5' ݑm|4j-/Y\\]bhK ̻YI:HRFuѿ{3UwF=Ceꔂn(Fk txKhFY|>oaLoG=-5ps( 1:E?ðµEvzCoxm`9ёO2'VōkEKEm3jo(*>)Uԇ򔢪N:/ޜ' {h"u K)gHOC7:KEԺYD]QbmYx~-߬_}E?ۜzhu,c}c,K#jo`&ui^qsV<+UgBBn2 GS~mϜE< ޔŎ=M=}W hb}[V~'f&nCWI'J0fbqƋ P` |N[Fj~BY,z9Z!͊`d 6= '!3UYTw(|%8EDckֲ?ZFH k$4K:}yjC5ys0pcs22Q8C6~9nK/7//߼|wuN^@Ln~0'hw1\?bx[ʍd(4p6P2[=߾L9hiV{Jdq8! d7oݒڋCSҺ<_ Q ?XPKfX@ (pip/_internal/cache.pyZm_U`*d^b8n+@EK;ÁX+i}p'+E{]K\ */>,o:>e.jr;NޗEeN]WGSnum 3T^ᇿã˛q.k;"ēeܪ<-IgVnMC΅έJ;^GnUe@.YKr-"k a`0V֊mo'S*{3[GvTe&Nu6! Pewt~Ӭw,=#Zjl1[/pԪώhɍSs diA؂LKT%[e_Xd6/$MKƆ\8IF$`vmtsel5>u Aʔ0;cQl0D$۪cLN; Τޗ&JA$7heT)+ e4ObB妮T"Zk^9cz;PNL5Myt6wS3il%y )VM8 U)!sAя ԕ$n.hnBhY_g vGYk*HS8#< WO[£4B۾YW#$|)"KvE',{RdTij6U> l,^a=CTTRs옟s ZsZAW:(4Y\\l!Q<BS+sGy2iQg)V/`t۱{餤89NgpQjkC'LV=uEzAF.ad"Փ9Li} Vf`=vBgjAҶ]7^ Pt)YKb%.-â*zv&(cqIM>'1s)ʀZEYo$j% [ ztX@N&]9Ѯ^̫GœWu&5(7<]5,4Y&z:xٕOBA– ѕ1M‚of0;*IJ.pF5 wUEs6~DԪkgA/a^c[BקVh$ y-@O.wojUo,}/h(vL.(i\RA%r/QV-Ը(YO(p*'!؈Q235'IdAC YwʮD窱,l܄=QS)SiSl:p^CMwCy* nk^fv,%vBw:*RmsQI<CtڋeN t]rǗ߽||xqy*yً˾YB8&{~evI`3ƺ> ړ1&mXE Ӊz",!Ot1=H/0貅bniҽH|KIox\S3s8}-4GƮwSIN+AL Og+#]O6 3ԅ崶Shl^+Q8_AjveǑ" tPfvzаg2ӸC%Aax=*qHA2 z,+Nm%jS#mx@$WtJƽ:g`]]>n7EM} CsoL[A}v;M7h;i_uf ݽ]4d)\0zٝԻ )^Bq2;@X(dvkWU܄u+Cflbn\ $.ÙA~)K윪YB3)O_Hս<?'p-ϝϊYϑ/@%m9OBB23'"ӦߌEZ 9J:+C\Ud.yoEyF/!V*/cwBPCVϊ:Kٴt)j_'Lk?围KVUJK{ت5ևԮ~5<ӿaGvv򋯞<`@m)OOf48>1}o$z@x0n9&M_o?z+6Ýju;0Qv[m%ruq t<3=d`񥳱,3.,tlBV5PKfXy6pip/_internal/configuration.py[mo_ '3M[=j;;9;ŕņ" .eG5gfw]}A?bܝAcқmiM7r#Z(YoHQjEVf9P*k4K$Vi&UEqU跈*i\DܥZȁ,wXt/Ns"_* dCH& J&,JLJD"ղJFܭeҠfiĉ(K:zUQQ)6[ʸRϲbg~+vjDD+`0MQ 393yaWyI(T|ؖiFiMx/K˔<Bx;8~,YrV?"Nd2MieVj*.ˡ:7ond}'T-rm%#`4f44YDbI,/q~N}Bd4wXvi"]YB̔o`t|)۳#x++vY z!>@?@%tW2%sV<؂=R.UoO8<7YqgzNr#~Ik.O>RV68M"gy [}d.>^RW,wA"Å)((㋋2աcj3ao?<#=txzrEgl |p4XQq"hvvx&Żk) v*5ζBEߒ A+LJD ;fqo{<z;z( b[%o*XoTRآb;!/Fœ@$dK|D:yLx%ԚW:jEwƩꏳ ȳ(+ ~(P!pT#M}*#0C>+|Y,:A5^ "E`BF gI!oGQHF<ཬqĮ؊;`I/aK`[SwcIa*x=1VF8Ȏy`ȃM[>FjtV,jp,TU>MEM jEH&&=,Tz0&?hti1_:z!d< /w!*9q`2m0z}vU B#˻0|!9uO!M;KwUՋ:~XK[f0X_L$Xj5x_< &8}Ȝ@ !/~fRIa*"Zߟ+#!?lHVot 3窺$]@y Zˍ/.q؀b`.=pn D\dGSV@*v s!c#njAQap"X`BJ<5%콑u!VS.2 H\3EYͲ?ZPU䒽}hږȓQf@$ȓnƼ}cC'<_{޷ J&FHnqB)HCa"j1"/rIoF-Y_"m?f0+){}m}sMZUŚ( 0 {_eOyu@M|JE(ޣL0kS0ބATU|pMfS"WX]=MIϏai!# %^kcVd`rް5?iT;Xi@8aqKꄬ*T+32H6*_Pq(_tv𙝓$ؗJtɧby3IJF}2*$(eneRUC|x`K6&"I>[1b* pEPCgjPV2B/W-TOTG 2{<] A}O\%q]dj[ iƄA+ ljw"YƪRT[ՔׄݯyH0Ukob PU:Dz{sdTX4Vw\sBqYL &T*r[ꮴ&y'|!ѫ^n鞴L1xSMIJ : 5ᾺjnWF8WsͷYZ7iɷDH}CF\fF@[|!AO MCV>M0n(9YeVn2ctWWx9i +4 Ѡ{o杕Qw>lZG)eu@,=`JCӵጲK꧃3GӪVBZI5;K=t07Dz䝻ȃr]O8^xޠ,G/O}{/\<}ܼ#/jL|472Gpi#+CɜۑC)j~h{NsʷR}Mn?-[sc']a4d;A;F^g>1Q~uuzQm ئάEO[Y"Iu#rb+5! uܨw_W>"( ^<9T`_PKfX^ˈ:cpip/_internal/exceptions.py=rqclRKI\l_:-VuHڳ]:! h -ŪTF!o'I UyI3=====c&"*i|ɏqjӑ,8,CPW@"VH]```Eh1( ?r0gNM>π" UY)=npF8^h:CO?FHH0`j#z5wGLs"=ՕWX dKH㉗̳PtmxB[?5ʓlj&! iݟ\jGiHVȋz RLa͑V> /U¨L" |afcX(@^vM"2G)*$Q&R"*"!/'{Ȍ4.˵A*JV^شn3 ďdMf"L(,JX0yFl-Dvb< C",t Z-xpݾcnF(-ꆚ8F:ྦ}{[7ы@jur6[aM% 1TǠR=$}YE񫂍Uz KT³Hŵ^\Z#m7R%`~Ӱ,cGQL\'5l/Rh-fQ~oA@ Λ y0nyA@B7|bӜkoX 鎝FiX} VS;I _[XVkMkVmɮ[_--u[] ͶA w ~r6nn-\؁;{ӝ}`)([KΞY'wa8[0vcalo>=7Ӛׂ9zb~$ ,]7% qZT:#ւLCYGm|5vcO6i`\0'o翀zoϨ4/g1R~?7Cxz 2yAs-'O;)ힷ }[ZC^n)Jݠ:M]j\QK2, WZ yLiAyFkpYh'N3K[Ùlt4*+puT3 Uyroe^}EO'r{.<b\B՝]$tE ^r=e`q!3Z_MtqG>X[ލ-’tz\=v>li.|jm1f&"x(6hm!.Uwx++$nSYW4Rƥȭ/Ftbb zŝ8x(k s؜Amz]$0V NVoc0ޕbr!~o $6ŒeœAd̒ή ,Vۡʳ#A07o]6yMoxNGwImwn(HK%wWק6wߎ߿153@I%h=b84P"|` dUqwy4;12,<#CRZp` <%Gaqt2k1|WN$t"E a`@ڛR 9ϱWa.5&a)tmk$ O%1L:x.PiC ^dvATARG;E%Kj #?8!](/=+@qjL DK VS6a;D4tuXw,ٶ`ki4gNAǘ6ݥNIJr!) I/LSoq%O΀ #RrK^[^E_?˗$ӈL Hx|P8$JD߰"e)6 oK뽩{B-Ȋ(OFP[ nfO p( P3hs]0 L?19'EUZYD6\}42~B (ITqa$Uh+j]M`GOİPUf#2Kwk(Vd(9[NQᢐI^)+_%CTեITґTJw|̋{3x{s}}@u3ѳt"jh;{w>!-ǚdUNl"Glӱ#Q _l(5]G>f4oזr~wc M9[Cٰ40/_LZx73j`OD=5|JR:kW~!e5>I~"clD2} Eҟ;ZC`MgYYJT-kC̖J8K򁢭:A`U"DGZ s}TD#ɧT,( Cmܔ 9wDHett8awo#۟L5àfY#K}HEFE|Ap }^!h|-Bge;{iEuK!ljtǝd-ԨSVCtSOhpn;[,l=Ra ڻlhl)oXDZIӍ׍qoױRXJѹX~*M1f' i1W5*U-k3  <dN*K4JÀ Z39l@*\L[f7y/5ol@պ%# /F)` v)Rf&C,EkάJuoxT%;G&pX]!Φ%uLuWW;E2,&W;q$džPz~%5aTyڒ|(gK. Ohr58Y=_쑌`3aAEOo8Fy M@WX)dv{\`x \:m6h946DK@m?{Ṏ]fQ/ˬ 9)&2YqmsaJ1z+EQ#IX repN^xv@:F6t7:> <4\NP@~^IJ 'JX,HEfΪ8/r!قŖNX 0镞&4gXK ,]Xp_cK\vt)q87P_W,<`B*8zQkSJS0Ax3Lנg$~̙Sgbc D\} J%C*eCZP 0̟ %bvXJ,&t+ hH5&m)yWlYB'HC5d:Ln)j8c/YZUWB>Pk(Ӗ?'8: z;젗`qI% }eS*3FN2%,7fD$ln wףDj핥 MI4h]r45uO+&- $"3}ÓswZbl zx|4AlLҔr:_6oLb4Ps fHBz:yTh<Z1'q-oSԡȺ[qNzjܵ+p"- ;8>\١K0#F|֑g@IQ9|vgc" qhYȊfhw`*xW̨ZHlLJC OxJ^1IJ;#g:T^Wy Dhw9^qu_~z9zS'lax9Ml/v%Ɔ¶:ҕb4%ef/ F@9g^uu$X(_% yʨ&ˎ|<|oEQCB?QciE$ZP?E d1hGyU9u—T0TL;p>A1午A^}ɀvoA/5m97(&1eJ]Er Es*@iE5ڡkwVR!WR,!U1''詡p4. />ŕ /AX_Yݎ9_zBz,Rԟ.'̖y-hTq d8Z%%~3ӳN\WNwgoȔwr/'&ﯯE{}v ;i]ULK##zn_|@`.[p_L B2끙H;,,!c;5f}M)a?AsbI,[Kos7~@xKW7mK[k= lPq@UjC;_d>Pu&aDJhA A&XpR)P@`q,]顚ք1XoR) N[aLϖ,#-ՠxB/UD3<<00[[CQ!elvks=|kpO3]|hQߊ:gؘ!E`c9ՊgxaF%j=YuΈ'c\8JYսα16GF)"c'8|ե|ƜjoKL8gO*k2y2Xg`l[t[CqU7Sp[m\T>:zr?N߃*\^~=#pݰQklre0:ٗǠ RI uYBLj7F6nExX2;*kt"@k PEOdR{UE(:OT H SA*O*~o]cww-т7-dtm:\0p|;S, V=iU/r>/r˒`I0v-PW9v@}ե=Ե`eAEh)&Q{/NeHru :ex/OHװ(Sշ_GtC?&haVk):{l(>=n.*#K12t~)b؛G|O|eJnE؋zusT]>uڹEl jdV@4WA껐 t/ezq8lu"A-drx'Xy'5 5cīzjS%t(n v,r;Hu,i}?p;v jq!z0m)n9p]ae\i>vƂ4w\?Fk/;aDM(΋tqE2HQybtx$&sVk=fuLq 9&x5*ͣݻl@}x$}J@RpG^iXV+qզ> h׊сt,=HKʼMvCW. C^5!x {4@ ,Es ײTLN1Tr46۝6Ǟ-S|D۞{6uA{R4d\S-+ -vpޡqo<ָHBܳ7wlR0E=* ag0paQn?'Bo)ߕnN퀫sx؞_?PKfX'Tpip/_internal/main.py=j0 ~ }l lǝv٭&J"pl!)y)HH?HV<\F%q9R~2j{.59 J<ekhg",(PJ+YKBNMh j]%ȼۚ*УEJEɌ a$x8^_ pŃzORlrSsȌrEE}sPKfXa|] wpip/_internal/pyproject.pyYo8~B>d 8 0=bݽ`[``5'IdK}@bHINi$hlf)~3ZXFVx%l5‰ء.|4vӡof3YYho6{f/M1:4L4FH'b,JXR2nFٱdBRh]Y>}M s)$s57 OVz_^Ozل5UN]yd+;a7:`Vm4Uos-*ոja{2 @(m)PpP3g7J+ sV>#-/|Ob kq-z-Q.Ŧ_Kr%x0R/>)^_l\" Js? !klլۻT*[̧-VkSg!F* }q!77\`<% 6;=(W],{1,Me#Is JeKol-0/5: Xb RPZ1Io#3{n+箑L'JYKQ41{UR1U+s.LH7 PBjH;~qիF^ĕQ"\b˂\vw*(FX"٫0ij#v+Xjo/s8X'$p%"Mlr򕚄qȈtk(0L2}XLRP,۝G:]dsD|qmDeRv*<4:$@4X1VQT<ԤV٣5x[ Dsx} UJƻNpod~kXvd ]+́,J^, j 2Չ(u ((o(uzy8UX9LX_ y W<6Ľbrѷ9nQ&xj E{荥VmE'pXFкڪvI ]sX/%w-ϭNoj9'H^.[K@K!`!ވ:e@j\D,^hi$ VƳ@YrpћDB02 p[YfNy'>&A(Txvv{//طdKc!)}OZ, 8tH70?cKUZ!ޤ1J_`cd` QnQsXU)_,3T<1 \Ei L@"B 6o%˱9KBb +V60x+l^8 pwkB lX fc q cG[1w# m#0`ڼol݅7 rPD>j[ۙu%M4 wPf}[N/K$4Kpv Zb[,GKR-Jus~ G=@7o~30쮳|}K@c}QK8`̳),k]RGNpH>S^"wxӂw[ Ը6I+<ޣXk|m>@8A.?N#ɦb_$aM7%1*GLކi !L815[印aT;@6G&`;D4Q#=LAȌռTt.EٻÃa c!?La<.Q/IL+?^1=ldNV7_m67l2BYq0dfQ/GC9ay8R| TMYFIC7aQ3U~i{@!{8GJ'`pdp5'GG{ɘ' tYD@cH.}+*jqzj9pї Xqt`5/f)}1Hox8nT@Q\r\ЁlKI׷NYD(7Eg2ܣy4ue.1eɄȔ;bDؗok.BXM+E7xI7W(G}k48qfEpT Y! i 셷3x6m <+*5L`Ye;^B|j*T:p~ _/x8<$%gxaW=2s}L>QV-(EH.E'Ulq93;Rj-}Bl?~Qk^fE[*UOJz^-*)x%-jS\# -/_4Ѻ75KK^脼k5 m߱.-n)21hC_H^lB4J[}tKmzH ڲG@5fd@]3oxs{dz⳼=}e琷LS4GX3]sq)-k,(YRŐ5hJVp))0Ȩž!uͅ؂ozO߾|qpC[=eaJ(2r<j7Iǯx |4iUmRlXqcb0蝰Qdyb:?d}rHXLӸ{mX`d> syC,jAr_i -ۯrI+(8oCAxJ4/]BJՆ>{ea%_d@B31W|/(, y}>yJ B n0Ҧa竓gI%5Rlm W@k0$7{"jLA~} MxS&q9JHדID㙔Xs] J2¸?>ߊR+ů.~ f0h} ڢ:"r-=Wi0{@^XOq[8@OO tL؁\ OXV8p"Zs<&E-F@&҂XST]ܣ|]K)@ڏۛoë}[zo|Xb.X #h~dG ":fD#d)y`K_Z z-Ĩ5L=q6ł=Xy'ɼP z@ o4 !(}GZKF}C?l(aRѬs믆oz3A2G%: sh JwKQ<WcFؖxtXy䟉O{՘@׃&>”{D^W6̌Ù<ڶěąKo[z;\`Qh0P%Q!t?o>/Ɛ]' -cy~mض YԂwҋM6TRd-Fڂr*"+dOCC@e >wh( O_MQw%3BA#JRQeJfm6-$;);hE|]K—[ΚMr*aٌC|ݶU~AI^)Tv);|f0QP(fugJA=rUXUӷ#e\ДcղWpִ+]CtJOЎ w8VSZ#TjN6zUޕF3]TAMXV%.~FzEޮ%ЂRd6ݳ}8$73RƉMn!wy-Mfx@̈́4YOcT7#?L 佾 tSmi`#|؏>`Qxf.;XP@5dSp'z [V$}1Zj-k;p ~/҄Gs\J,V x;κch o~~Q;LV°ilޮAFz1'3)`Q G.S[r7.1YWE nW:PKu񁕲X)$ gG[;Լ8t`6 ݈)dyzfxA d[(Gc_?-jIpŪ_>fLQ#ipzW&U\ AUKAeH~,\> ?-fΖE{LYw 9;iwu! CpQIcݎڶ82I-DL`2גf_#&aPKfXYT .pip/_internal/wheel_builder.pyko zU/:~[.e7m_65vh+R0m٦ٽ;SD9yU*h^t0çX{-~V ?|jӜ< ?Qqdn bR˲j98/y{n0!<^ $a{gѬvЏP5=`{ ,%#7-(M`4)lE峯#E٣!3s]%C 1FmG d{y0Ul<8hHF:h#!2/@={cA,?W1Īi3 o@$F2 P;N}_Jϥn6iCﻓ<:P)jyX"=?d~{wz$(>z~)bB)%P6&48Pa> +W I_|,zpАP@Rي}*xJ=dcjPOsR7/ojnwy?,ۂټI 8btTW vH\4;hܨU3^ -L1`ElYE7kqN#~sj5(ahlΟEPRʜ(.S@i#b+D+UG-\F|W@+CcEz3NwABF=藦c p4&] 7 \$tE_8" g@wiPutTZv QtqϿj;)s3,Rc >׏EvY:&lQbS)<2Χ([dX}>3XӢ<&xY۔>$P*J}-fTBٯ/qgwKBԃ-_U! P^ 5 i{R4iu{L3#b`lG\e`6jA` aA%ʙD-Z)pG/n^Ȯ>f~/||m/^6cTb+l~!h:6&܅ݒ!υ(tqB ?NMA\qdd:o 3ưRG%AdT=l> O-(0ARz&QIcͦJMh4ǷbrDrP)3.o@.fU]'Z4QPuk%OH7./:ffTL6-.O-uTm)^|KMiSzcp)uC!m G_|±vIF:1_R'uZGj1g#~Z*F& 7 PS|9NDfi0p"_QIb/PKfXw4hpip/_internal/cli/__init__.py%1! {^"E|b>HigFs~Ǡr(nAbb'H0d<潓UC,x6*Ju),4g!n{Eu^0H>>[yPKfX})#pip/_internal/cli/autocompletion.pyYs6_cLNeɣLe=I:P0YP w@Rnrz`w؅, xMj҉&8u \JӦa{x!];vwrebONwT*6VAI-D۩vO_:>weIqذ%^fa)@-nxynQB$U,8hz՞ 1qs NL=3xbڳ]KўXnfyAn&>һV y|Nā) taWdU7S2Gu%zYcX:VoXi8Az<||Vh m鬲JG2QjEN!TrrT2#LӜ>}}ajECpZZ-Oji+`jDT7e ,R "Uh^vMEO 8nb7LۑSYqk>5IV$\"K5?/ɳ5}}ٗ x;c;}xzVA ~UrF36 r'p h+l+g9]K63e>[^XZ əqn7Rr."b?vKPF¯]F2zPFR"*l;F;y՘eAf YPKvݬo¥ˑGh칹 7[2oVoooYq @I.4:aJ=g16dyjE\\Ʊ<0ANV~IS Һ)i⡡Zz' %U$κrN,wR.??<ׁ3q?߀@tЌTb;^T]n;#Y?|sP,Yl/4wu4vy{1s ^sæټk/ۅyHfM_PNm$R|C0X Pj)89 #iOascr& 0 Ӽɷ0}z3N1>Ϋ+氚oupc=~"oa:2XmݡD 1&jja2Mj(V1XyR#. .sDBK> WrۤCǿq40#GLcχ+ذ"k#zJ0v*6 UיpF&s X=w WާiDjqy $#s*,)PW؊D:Xy{He.eiλ,JȣZ=:I~mMq v9e.qcu'|Wm#)qnO0v*+$6 Q04\pV w0LF &6!>:BsNIXPă4Ljrܣe.! s2M7@3+f`hhP/5ศBFq P /PKfX緐 a !pip/_internal/cli/base_command.pyYoۺ 8k0oHxyN8톢 hʢ)n&LwQA\ +;ۉ4fQ"2z52_]*6H2mrF0Zգ:3a܈HDu6zWaGAH5sl>ewYt*)[Y"G2SYȟekm5Fz #_'b2*ͥ0JT4)eOJ%.xGS/g",=yKܻ){bmZInI^[+b>1<7wSzpq~ȯz[O_w#_-t4RBDۮ+Jĥu<Ǎ1k%6UT@B{mrzsF>+]ثB%2Ԡ8 *\ +Dz[ܯ-N2}c[?3+";olT1ȜgFo,%'_tz5Xաo6Drdx z#,Vi9ӮI{P8JP$5+1M w,}np(K뤶- L/qZ}o6:StD7p$3 I` &c%.kP(+vAkIQH3f)0P< cb "_sszop HLbnB_A~dFZ4IIŭ8f\ ܱ Z eUq8#"464B\|C"W-d7"#YX ߡHɡGgKSȮ^چh}e4cfJ_ԓT`/"BI DCo$`Θ*|Oxx8 ڀ+m)&+uOtD_=z^_dp秴UT](1]R#wǰo EոvɁlr Lz%pD)pR{cCֻq,7ڠPlһDeӣpq~- !\P!}3HTqXzaUBj9鴮A`35i iB3l4'&{ږNA tɌ&؛>XGv~~/ݻGYҦ[QJBa;2-8=ph KAᠩX^eQq;s]Cw"-:Q@h.NRS [k(-SDBpkA:=hAokoيz7@Z$+zUa]3YV6\D[G~n9[x6|оw{xr"9jwh7XNZd9o[Z!Ql87p,B ZOF hUQa?!#NSMWRo] ;Ly)k; U_'So$`/2*HtQ\ ڷ։؄铞#/Pt?EthĚmPKfXD6J upip/_internal/cli/cmdoptions.py=ksF+f"K"q\)bֱU\JD\uoLuWX$03ӯnFQԩIgXiW*gjQu\-Zi>MיVK]jV.L\>E>5yQYyU'y&VR:$Y[V*r5iImݧR%SrMkϺjYn@ug{sNJWZk:eYx}:9.s@˫&ݺN*=URSVkhe˼Ȳf *]q',v)uM @`ԫ0 뭊`Ej7jގ`Fe:8/4|ͣ 7x(R^:K^*'ѣGt~<7F8IbAMT1]Okj@)5*ך &D%^Uz[y+c~ry"\#/aq5T^,C!8=#P26Ʋӥގg ƥfW#aiG{ZH((p済úJsb0ަgIɩ#$(L#7:K -Kn0y V(6\+ ~o{ۍ*f;6u2IViH267؛yRnEmq|6߃e>G;ӨϊdV )o3*RA@e@M9ԾLA)>Vk=MT/5+*d["@&@ '3- EZ$A`ZRj%bԝ_= 6=ݺQ`C(Y68BP!% ? aĚtJj8̋!,O+HC#"3ۦ q R7nI(Gԏct^:-7% ;3KQ0m(Mdېza`R7yvA|ppDu c*b3X i<^qL55N@ݡDpZ28@]w =ፅ7kИ;Zrvho秗V&/ " {Q}ӋyO:w#7LJz5 ƠgRgȚKqc A+qOC""#x].ŏ1<#)L61Z MgHY8.7ڶ'f؛;k8| uY:(M]3rT: JZb% zv.W%%@W}HړߥeC.)S\ cd >oJ8FJM H&ah8C'}2SvLN >)J(sJ?}w%o6 n| K 1h,.3; qR'j d ê,=0ǐ! P:GRśׯt\ UV}%xiԋژ9@̤;} `3iA~ez vzS[s6KkxN…vμPuҕ-/@?pAۣ CZtYAtO"nTDKUڠGȝ T9A͐S?y̷QAɃ΃~H+"jM&XsU `!v(4g;DOBOhYP.wl9-wZҍ N),h!a6 G:]MA5O+Rц6E@Q1} n{0xmr X Z@C@J5;PCX!eCeЅgtG|/]ڬTYM;WD\X[REf3H~e8-ck2Def1:Y4<%Pw,@Ba8v;51wxCaiKF"~ep <Gom!?I gu=3%nD 5/;iY8 3>h@>}?]I%1bbcIpWb瀬;2M6y? u>{c`ѣI,Ԙs7[4Zu//_/䏰.r.4ftc>d9_%4iBӰK0Z`õH-# 7( QBW'|!V.;vq%LnǛ2;!ru=/I?_n ..Ssv-35}Cш` K.4$VJN&KR$ UdlQh>MtVfi~[1:tl36@(so##q% KX!A &*\œeʈ p% FH1I9]w@B 8U=cCI׵~ rՔ_46ef] 8w=wh#0-$6 e(nˍ2jj9Z4q*t/.!og}s^^9QL⧤hFGtS(}fTicoVIN52ڒD_]]_6QqƦqq@vy&o'f3wHi#HI`j[4(zh}5*b2ěeqs!8bBPCT\^<Ihɍ2'=3 {'U5QhbM>eհ݄! ;{U[m~E3jAH&5VԵ$ɨ8Yu4$5A=ci,Z7 ]C;ap߸M@1AzmQ4ҡZlIEg]ؽrVdpש;E*w_ b툒_ŝD .ݻNP5/1$A"|k_bjq il"-,ZIrӎAqȻB#e XfXc03llm3^YC3qԲ#'֓-z ۵"AZDWh:}+l ȄXG;Kw=-:%W4BTy7tB)UJb%v[;9ו+JiLk`:lc|#,?E`"* L;1hLr0k(HfNq m`p(ʦ^[j*N'iM4b- jT9ًA<z k4ݘ4m֣/Qq^"l*0ʛ3Rj }[-:z8݋Ug$k.VrGbIÍ FflY`iI۩B68p~5a1~+t* [ 4L5&rzXk&\J=0Mv5)kM1vƥbMpt€9{2^|ѹ^/"ҒC 7/FX}5=<1j߁ "M; S ia3,PN[#/ M+MثwJc9~&x*8]ܞɢXa2`6M_}^vx@/U/K0h/(rYأ#\k(>)^a~3]yc_0l_쟇f:v{|ts˭&!h}: he#gD9pBcHv8wA7td]lfOמ3CRpLe}J#-X5&Q!Ȅ~Gx)$̛F9oS;~Jdc}8 Ķ[%iTN5j}rW~ڕ\ed재ܓwxۖ(U(2qJ%NNfd8+ꡑ3 uz:KmZ7 20*A$^Uh*IVQlI0ƍϧaځy핥= m#@w_;P߷?nn% #i&. kQxc4NJ4zE &M 5;Lv=lgs_gRe0s[mvyyU}@d&~#~<_ W/< a[l%5 ^7G4SlH==X *TiX+ʂ@ %Seb< B@ =^i`el|6QQ]h@*kFazۨ-=T&nC{}G]Aq3( ډ ن;hsRݮK.<ɕrveg  пTKr@iB&D"ŸOR'h|;~ČO3kH<ш8rc:[+'24()QyB.֏&7U23 80:ƉÄ%^ M9?;eԋ ʚ  T fہD Dt)V|Zs(my߼udu^[M-9qr](,Ɇ*0J`po;v5< 7 L[a*%*]!xS'SE>9r2gEԇ%=dBM,8c R)dzW%Yd_FwoAy$g3~cW&B]9p \,g }RΪ@A$qX@g xX>Vtmֶ.[N"ۖY-&CHz|xcmkK.{ <{5؊*ٶ[e,.J3myPCOIDfX&ЪjKLnc Vq~0 ldf1'lf2Z8zc.Sat[Bb@;ld#˿&{.XH?'TILA;عrA^'jP Aʙ0 766x5^54`C*[=%iV!WO2PQ3K6ď~PzE$ c&ߢ(p+\K+E΋z- Le+ݦLlZ`FG8Z%#N0tt@LIli#a1-ݱMVY ^F1`LLsz!L+Sﮡ̀IGsO{ *@C7J͡ zC:9HQ=qp >4`5t& F lrv >k8NG25%L7A%\0c6a:4aU[Ut0 38e@c$A~cm#]76>`\Sue^c08 4 MloFg4PX+vjsW#00¸1j,[aP;< ^4S"d,7k|]$_ULaSro&@(֎Vehǿ]OW?_Я\Shy smnp-m/d&/v ?Pr ` Y5&ц} 506nr4O`_˕ c bDX~ޏ0= =`A]ٝ+,MgQ!g܊\si~09di.E#8n04 H"6qF9oe%ܳG_,&R8xRn5+U4${ H݃ڧ+0"=x\}Ea4$5NX=x.,\ _/KLGXXdf5'7PKfX"GM-+$pip/_internal/cli/command_context.pyRN0+=A|&kLzxl nci0AΡ3oエD[પ-?qXI# Gx (ɺϬ]"c"mDgJeB˵lGW#͖qW\e 5˘Wk`j0ӀH][T?GX ~MC {/6y;4֕F|DOܾVAzR(C8#<'Q=px>{.O6WrA͊t.d)!fPKfX8K0"pip/_internal/cli/index_command.pyXko_Ax>lݢA]tIgf'IZ#6YTI*[\%YEEj>ϮTe ~ϫ%7Fv|deeiwWxPWvNJ؃lςIk"l W@HŒe2WҾVښQGf nSV(;\(Z܊)=[*Z*ʽVee_d}/bFK@mT-ʄohfLն쯼l_ǚ }ή~O E -嬕ef/C L s<'wC O_H}|fS[/6CÁ;c%)f6[aoݳEU|/l9 aYN91XEwBD%[<7l@X8Eh2 /7-OwxjGiSIGͲ's}94ľ>jia]Ϫ-PV-SG5e7J8vຂ?g\3ʅ;&N5ev/Ǻv#=[x ~zpwuw=gW7ןA0-/cVi§]z -v7 )NsI#D"yNQm? Td[PȲ|,i}qJe #ʍc>!ȠeHD_2&F  Q3(F4 UFBҗaJRf~|~"-j)mUՋ,&K 1>߰JYOzE6T14C=kP୙(}4Gh:"A1AT &?oJۑX6͇>D$00h[W8<͐T?!:vg[}^ $ZG*jp[r0aB֤>aƑiU{H,, cu|tuIG}rrTvbyVQt? v~{aP4rǝ 4qPp#J$}L"a(n[ޠ6;Pg.'4ʤ5-Nz>^dN E0VZg5fB&(F܏|ɩo)ylHb \(Qሸ_ϗyĊz kdto*r0u49SS-G/twO{ܘr8|6D}Oʸ5pd 0.]=cܮIZ'\6S%NHIa:l#%s@UEf 3+3-Rp_'cr&fi4( /0&~J^ Dr@ЌͥQh+ԣ q֧+mih];n3R!_NK Q3,\PDE7<T -3RtU↊'_ E"eoO ޽´shZ%;ҭD2V$ha>DD*'(;Ogsn4pF]/EFvk8q?[bI-K+w1c0cޱ3( 0eky`͹[p})n't kQ+QvsGAD$⽦:3m8Т/\Y:U }n BhN|^-~w *(2K }\':o?@$%ޔ t:_N)/?)Ӊ܋npSPKfXG, pip/_internal/cli/main.py}Vmo6 _  w7@;t7CQMZɐٰ4 IS;BV A&` ey`]Ryuty叧A:D8؈V~R, j(+Z #K'/c#ږzW LaM={i:{,o@`[MpY!ѶBJ [r7i?n4̮(jp&h8Y2^!)!rkde Ddo A^k`nT ]_ r+8ى] C_{hm=8nPeYhXvԍ8X$ZkH' vt$jh;x 쁀RH<{Hjr遃[p *ORܴXhLY\ MP<26EP]c-~䬬{&`#Ñ7roULfA=֤gVZL cu}3pgh^w=g`VC+߇A@8KуΏh4[ͨmWUl]UlM=Lz٢Ze9 5æKs) \|ZsMFNES+/aYKNH DGa}|p@Z/P1Rmtȿx9n+;SWa vIRvE"S|iEMn'ud(b߃֕X4JR`}ҔbU}YJ#8&W|!ARgqIm9_Gsִ߂.b{nkwvzƗ6^ʠ;h]MU+^ zwk4x5ebGf%(>_!=1k|@r)?߯?7_|_%@K! ;y>x 3Lm]b˕B9+![<*ۥ 3LgKWdl2܈%b IsmNY8ZM w8eC۱+fglz2N\K)HWq&Vj5orpbʉ0:3ی߄I&PKfX@ze pip/_internal/cli/main_parser.pyWmo6_A,cs-k-QH*"%Qh#sϝ(h.#MEsFJH.6 aOD-b)J35h6u#!R'%sJ?sm1\ Z%m*64ޤ)WEăz`&St_ t6y]H{bIQC٥$)(wVҶ2OV5RԀI!|w½gxk^Qyє;I)9ypkxӚ< dLiI:fYF*Țl\1jX)κD w1fn ˏ[+gvR̴ t) @t / U_遭wx3#ٺWEAN>f]x1l*8}Yp{EpO7U/ۧ.ytzwx+LъxУd%&L'H#1%-G!^GX2DVT[ˈTH&\qU-lFϘՏ?gg_T/Qڄs 1cg7Jg#u&K˥퉭+F*./.bGvɮor:@;V \%"PS{z ,⧌) j@ /+ ^k"aѠn\uȚ6M Qxb]|[rXq4k&|=k}j9ZHvw3E3lܿm !S11(QOmLg g~ "dF̡16«+.K4SGVR4X弦=#GْQgN4"K]>Tbl}^9 cAEpڍjNfPKfXVG ;*pip/_internal/cli/parser.pyZmoܸ_A(,d%_i4HҢ[Y+"egkw/)юR!pVp87>3T$).Z^H.I~DH#v;-PkJw/xwb_uOm/->hqCLJ^;Ľ{sW*'oYzD\ƒZ\סk؉(9ëjx!U,+Q3~|сJ쨗<}qBe*%(!Uą j,̩1^?K˲VIP)ɧ)u;k7?PӦ6Żf HV'. h X\B'쁜l=]h5ےUY5ۜ!vTAjLqa,I v~CbNL\[ Q F x{S4>Bv.`پg [ K3F [[.tnzU-n}/ h@Kp˘>b .(V,LKEqQ[9a!fw,AR4.|Сq-Bf ٬lg Qʗ4䢫޵X:|bN;DuQ9fCSzkG*#{$LP[x.yV=+lg&JGcN2wtgW^EuC7/yut*fE|'P_Z0CU[Aʢ>"؊y׏ӿvxSQS W l]g y˜c ]vjօ&lqlNzaL!4մšrdT|kIMgT PNH9;b؄j?nu H=..ل]-olBcERi^x++ts eЃG\+< PcL>Moi w`/2UЁLԞY3.ö\g?-N(ێ4 4+ZN''R,,i :(.TM^D@=5;Bǁ8F{S532NqA$D*vS 7Wp;o0+k8VVo3ll6,#] H4710m]SGbvz@^׺9xbإx%ЂO ݖ3ifF)<_ [<⍷ QeVo#OWi6W%\d npSxg3@wB7{Kx?NGB{VPH:FLBZ&7K w)u쇏W(4w<"PsR4v'w)K)j=wŽHIE=C9'xLF{̦cHn;ؿ$&xƊ #ܶZVPȸdh+O偶S(OIIkɠY /-&ߋ4qv~~evENc2"S}ր+L#"(M+29?OO(bLjrk4'uuh@U"y] hMZ' (XGjl@*@P6!yі9^j9>IAO=+U?0<2w[`^z;M. E& aG|kkn so/nzݹZJ ,_P~j%#G&^6Zoxuj5 `CtкI ODQnցԁ># g2@"RƞBI àS-Ef;]`A~)Vl 5/KsnbOԂGW 27uJhB/Yi\+ԑsR?F1gd}p<_@N/T274g̡o *)ΕkdE%]Wq6@ik\jFH+4p,:JغzV3֏k&2`OE“ >7ɃsNHpKZCv-ˠei=3{J>6u i@y{zЇfV܇`=^Cc`zۍ4Gx[&~9tY~#}aq_? )*,C C!z-^?Cч:0<]9 ap3_meLw(EFD1oiPKfX&7 "pip/_internal/cli/progress_bars.pyVK6W 7!I(bwo!f&^qE SǙo^Xu+or wqIm Wf 5ZWO^دzFsc(LX#Z[YƚE">K~0=hZ._/e`˯BfE_|xPxR ˵>48X!*J FIʵ# Г@yGrD0ZPncGMъ$IPv)cd=!*rT &zI9CZ r; xnJp>ߍ'sHF,( HN3Hҁ;V 0Z]`Rp24 נfsEDgu7>.$vJQH,Fr/KdiץVS~^[^I̯Tֹ>WlrWH\C;eOg֡닯~9bl7f#5IЖ+EqX.c#/\R*rWv;`?0Sjc:t>^$RJ hSjOl6.>s]aPf3 ~C[jgw{YZK=bwtb\0{0K/5):m6 jպ#Rc8@!~K(6AJaB4`ou-3yUqܐ"ʸ3Q L.2guC&y&_ 5>%g5me<ӷe*MOk04P a hSpݣo-5DNgߥ't~ P-o_P:2r~d'VTtEFvT1Th69re^,\8RȾ.J\*Ns+ AGL)KhVWՊ|_V\4_ /y%(t\?/%84 \M P>-6C}Ғ*b>,g)R "WsQokg!FzmQ*d/.i'YbU!b@7UM$d{K6&LXP1KEUITGQrnWԒh3#(2*s_ku=o!xƮqNeqZ]4qMSxA|f)/q2#;ݶHX?۫W߾&7W^'7?]mOcѷ~uc`h{f>f}\| +\V[=c{r1IsF\KߠC^F3 cρExJ$!e] xhJJ2X|dIXih6 + f?\a6,~ )MT 8VDhز_YzтcoElؐ" #'f݆O~Y-0# Eif㎀IBe|@Y5d3XUBGMmlt 6+|/ΓD@{C͘+EqfN ϴ4M9GI܃ǩ)lO+fo%mj14e鐛UXe]4ܛoDF/\zG\%L?}ar߀cxzbn;@>'zĦSJs-I_nPX]u^rJm4)OnF(^ YĹk<%h#b `q<)ti;@{ e4Da!RMppGOEA ?Z#l:aLuur1D51؃Ix4{5gh2u",/FZ jᱸfv"0I#hwLQa?+CP.'GS|tx$?BpV,pemN,ϫ @`SJG84Pm7fӺ7Xtѩ> _^(G lg2&@6W|f Jz`+r`쾬r؉FasG޵KuTÎ\60`& j  DoMO˓ {oNDKpWC!@MߎC2fl1h)x[S !`ebx UQf-{*Y?rolPB?MN[ƣu_hh9X-7Pu6$X[g?&>}DϙE_{JYI]ŽH7\wAM_wJ̬!ǨiU=A9 sH*Ne V{^ay;`YX[*y l{z:).G=xyB;6IdSrMzЏ&t/6L an= c>sx&p0>|`Ix|&߅gw`Y{&枌7J̈́_I-'=_MLt>n9b׎kzC&0eNEf"JpBLo)n݄ՏαbAVC< IƷEN19D8j)v^2XD:=ҩ# 2_H"w{ JzeoRT ,PEnk74E9,w:,}7l]`v̓ -s qr8y |-;7KS* 6+]?/E)9v%(5{ z@otyr bq<dNklO#M8:鿅`To~ўUakw:s.:JHU#S w9h޹ʒ/la}WVʾ)zὢ'x+PKfXYɞpip/_internal/cli/spinners.pyXn7}߯ diMu"q `KI)rKre/Z[rEr3᜹ -ɔ|-V)a .իW,k"vS$*=$JRނCZZZ.LUAmrrb7{4_0 IK$qtIe{ w~?Jb ILPcLbN3v|r6'ab> LHsMaXU! Y~}H̹fE SKsL_*5 ,aМa p;kޚmŌ jV\`ȟ>ކyh-'7ckXgT͐ eS0_+R7H& \o<7̅BgAxp4 \WMs6MթvF{t(*ʁ.fpG C* K:M歨q~s>gp ("yxO&Vʃ؍[NvS;r`ưpu.5H?ä98FwU5ݺõ-sw4vL-?WT9:qU}.WVfWݬ8 9h$$ s21à.KbX9x],}Vq( ɬt@exz#0J)KA=Du t@"bFPyf:Ggu}6@ŚnLe-9_ڗavU EFM "zy޹}3ɺӴ"%X}|gESc(Hg(6w$ VoKcf6V#v3QWs K~a:uY;12D"VэmqX}Sˁ 擷קW_'>=ean1q`Ajhm ]XWpA%\G~: jsf*!%Bi)P&m!Ȏ4% %RF&J0fχVY1ȴAE)F~:|ɉ*Ѣ8xƢdF  0j\l :.x1Ɣ̌ɋi=yZ(ڗ;08e;Z@+ݶ7wш2[A9HPKfXzKXt!pip/_internal/cli/status_codes.py= 0 \2@D$(iʘ6˖RB0Pv3ZjԜF \/V@\ӆqPKfX1*"pip/_internal/commands/__init__.pyWݏ4_1 6\iCJZui:vgNZf>4MY~`{V %ЈIuTaQ78)vIit2R lj^ a:EGUWN tZpgؐ^ŹOrO)>lRP[3+mx.Jctpze2he0PX9oB2KF_O֙Di| RTR<ϟ>]6.ԛ}oجg.#%Rb.^]O1^Ѫ/E1r@r潊4"O?xӠ/Q2V^c7FX ǫ˃HӅC@M]0ZkDRpN'|BP]#>Eu"W"# vz2}ט燹R~ǙZvSUT#}ky8**~6Hؘ1g-5N[o^-ؼݠ'S2=>k eٱJq𙖣!NhkK$!"QPO)<#3FdBva.o6b\|A)&} Yӭk@+Dn 4H±΁ı qC%SW{hv5~…gXC[C} \ެ |A),"åcF$3;'_(:qI%3woo|oNn KX7x 7Ƹ9 }sЖ{dr vDH,"mv{p7`$4}F0%x!m>wkE 9$3ßϱKZ׹6']6Fr"ehHeRY,il`?Lv],{29ېTFx/PKfXpip/_internal/commands/cache.pyko6"RVvw8Prwiݗ\mIUM I<lrf8JYLIk}rɲ.Jqfv Wz/s;ߋ)zw˼\Լi<^'+ۥ"Xg1Uu)ʢ)&eKzǜW2/nSE UwGABn66 +L zE&Hwg_ɤޢ3]}IJ6^Z,è4}W5)eŕB=ň[ӗ|#4dy]5xR[APefZmVlooo{Zm|Q2fi%RGFx[|\W;SqD2LtۃʜiS\mej]Ex!n\3Yb3gD̈E_- 8Y$J6e~k.^5=eFsEF8QuuKYc \J= LH/ ~2!.ld 1z,8{T܊5hsLaФ5(κLbe_ 2ci3Fܒ{_F܆:6n>o;uYo7KOhFHmVmS[/cnG* 94VnkRbGfE' 0|ADc\Ͷhvɶ˄)p-hVDYCn*@ rN&Z\Ƴ5~ggNVT -GךƺцN`#Q #*(=r ͦ|qg<IN]vpc+Ekk9{RmR>WRG5l8f{1;+{l6n%|)#!tLix8!I? |ʵ#33ru?q vEv~%bF.1*<˂hb]S{m>#cp2q7=afg #nj)}*!A$e(DRH ϟ>x=U7 ϏYҽ:$b6yS떆{l߅G|؝v@5ñԭ;(?=Sǘ;NU&i H#J# J]5 ]ۨElS&}w /6eo!˱_]64 6c8{v#{>{(->"-:zej9Ķ/,-m }7 IAˆ;t T@abl`̬JBfaM!C-ҭ+Z5Ch._偭vCZ^> M偺4VR g(7 ʕ]$Q8~c`x I֍uM1$GѼ_{&'a(wIHcu[gg#l3rA<,! pG< ϩpDzڜf|ZR=@ݤbca@XYk7X?nڠwƛPKfXpip/_internal/commands/check.pyV[k0~8 6dfρ%ln} A(U<]Rw8K'uw>9MZ:n@"̥Gܹ% KzC+ڜ (.B-B7 WoXǝTC?>|\Rd1FJ: U- wB+G,^i#,utmpr86,TbK-T^7-urR3s1juk='  ܏S)Cw2xeI[ nS:|gjzF#3L`@kO#PbDU9E&] Q+m}ho:vi,' gVRv#*֋Bo枳dV 8 \D֊0F4}>\ąQ\s})^8E +naclq]>9ۧRݣvc7%?#FTM$ gWJ&@o杜17 cwK|\ < 4awVrG7Ќhf$EA_tpA'J` X&.fT`PKfXΚq_$pip/_internal/commands/completion.pyWo6YJosbưchD;\IߑI#҄KbOI#'`ÓT $̨sms̈́)KŒ򘄎2I8(&1!2T,tc$ 1[*'ԛ>.n> a = =riH%Kb@\Y*G(`̯f 7Zx^cZ;ή?& M}pnW~\6[&(zwX}iv5~\ޔ0\",}!Y(~߶v*>9ht\vX왊><`M?BDŽ]vauW|>/-(GrA릻6Z A*•̮ aBd>ׯAӸ]E.6)# S<ԗsO ᯕi(hYs!G p .B ؝W;?mX+ISe QgS-`Z,VhA ÒWbIX,f`-pilٗmWr'}I'" DDЂUd0*t՛QKqC0{ʂ!!7!nS+,9Y Hbq8rYN/Q ?3bp2{P5@(s b V91F+Z¯jHL~FI%mLR4U60jlJٹPV>bjyCǮ`\*(96s'@B I;MtqB)pإvE :e 4[ IcԨzkw x|}[2.rj˷7zKkŹ'c-H9[ _)ɊK2q/ %bAYhN>{ndGNYvau7._OIU} A![@cضPraŬovdY(V5}%a-8 xƟ5Mh M`|C 烅ȕ(_kEF65攤\cvJ.;ډrf [F [Qo?~1oB[m!xv7g+! *4d 7Hȶ}ڥ'm3 .2%x!LWg_[voKAtqG:v֡{5 X;Z(>28&ftӘx֔PF'P hԤz0ߎP+$ ݆ 1@@БGΚ鲳oգw=-qsuQӥj]2t1e{7"Ud #hލB5zk"")5=nFcv-LbyI42%$霠,:rf){5MG=an@s\D7.µvr *EQNʱ%j%Ψ\|PQ-;tZ_6}L1@c.u=ϫ<fX0)C?ᲛtB3)G2 Rc(!"^ZW(qε -AE!ר\"{ڷ2:)f\Q~|S& C"H; wFEp&no#%sLwUEŒ\d̸PpLhá5RGAu 9]3;L¿<9֔ Ghjpdk"v.z30R/z-z9k g|FF6b!a៑|9<9Jyx` | 69P8 PVԂ𝂊KI&28䦪Jmٓ ɿbv$+Oj3϶3mzNȿ`Z=Bzm'pO2`xN;8@?~J,qrdtuwͩt Qu%w@?fsysx:-ps= N" / gQM̀c~&֮A9NAz}O~c/5Z:w%$lَ,-!@p|pǠm eH|d{NZcl  .NBsH*~[a:2pgw*'gvu=gƾ<gHN?M†2huOs{}{4؆F7$ {^e%H%gd^ %ט*šLX7=b& ֓'womPKfXBpip/_internal/commands/debug.pyYo8_ӢB}Z.sRno=(WIԑTR#~3(nC,3? etRR˂|!·NUzQ)ٙ)͉'{̡:l]}oai=,ɥ(̒\ 茐-Nt9}m)+#*О\c?r>; v."@SVJ}02@+dӰ \SԎ;ë 37wIVb+f"SlS\ 7dBɶ9Qk8 l-5k٫QXE[AVϳ4B@3"9P\۵Җ5lX"z/#t+Z ȻljA!碭d+F'Ki IDAƚy>%_%%Z@cw,Ǔ0ȐiÿHAABqf0j ^a5{4L|^abV|=$i!hC:`Ԣ:?Z.|o@ N:+HEt_L*ڢKD}u6"Y`0V!s¤  gxS*S#* nҀX8ok57@b$I[?4lк;7r I'(9}b.gp=۸N u~޵oÝ%[N`ڞ<: %ЁM4fKGߠB #$1r%y̨HO=Usje5u^y8^p3F21 pTq rcFh#K *&jEy[yѷ #kǙԫ}c˃U4:G>Wڋ$E68څ ͣHU(E` '23CF9 A F4ZiJ[u΁R=Tmߖ5/Zn4;Ӛ`rJ+R_]Ma,*:?{cT \F mGI@N_NNγxhq*uoėAf;3j}}阨eNWޙj@Bk,/_p9,` [c-N, >vUDZp4{x=aH% CJ>2T4qYT;?Нxy,,!sށb2yNYڍ5 [@]`||^KrL=vYo'[ |5 [n br 8j}pWY0b[0bJOo+"z30o,Ax0Ewՠ:NCrV"gyw5dM)vK |Ѱ!am 6e^z/ؑΨ/2j>-pCT r/{h>`Z2qwԁz[01-<[:)EzF"+KRjVo|#Mx .ie1 ptdߥK NWoK2k8ЇD|_z?L0FtT 1/=ݑZw;o4ۓKiïǢHHˍ:}1 A /m^7]o,kh`rGqPg-D ((x>EF^pU:x)LLѕow^\1.gq X_33oHT[<|7G:;6M ^سp2͖?q `23SoS'1o}qez֮S |ry}`pi$ݟ?9HnI3O?gr\#'~<:G{_+PKfXԔ-"pip/_internal/commands/download.pyX[o6~ <[A H7`@1Kח `ibC*I9U)J"m9=B\i^5R"~R/vJVD6aJhLנ@y˵Y7)U3Z h՚RUL@fJDqTiym77Ru !6b)EߺҚU@jXiMZHVx$Z,˥Hر=Şf{I)-u_@HmI= |A '*19#r8b WѲU9,C, Z68M o={-RxN 0ݑg#)a*\ڙ-;ApFY#y= -y87#g4mT7E=ugEv4yaE1\AVdsK5xe[,N'd*liX0tZ]$xl-ib{!Lv_Lu ZtW6 v*b+HKKT [qA\Kz֥Z]_튽;`kk?KX-V3rrS,G+*FձMYl9qzL! k$*#r ɖK$6 HZ,*#nOMz+61/t=w@G%i ^[]"6gѨAT[;hěs5 {|vG_S{9 f?$B@W-|?(a[a'8E#疏v6bl[J [ Bέc=X0[!nq6]zrDxc"+iOskq2e;&F'ɢqnf//EHW h\?AA%9"{@+}$IΙTT9)f፯"uB !krp$EdYEْ7P(8C* fcJRA w "Ɛ*c/ i{?n xqOv/_b1Z:}rjVpx=NNXą˓) n Qz;~ ͓94<{0J~P ,tZ$~|MPzSҁf{w"tDJCbLK9fs\.8>Ysf^hj$rؚk62W;s5rjIpԣʰQ4o|{y'`BE]C>Xji@OqPKfXpip/_internal/commands/hash.py}UQk0~ s d렴t}P쳭UeKY.ӫ SFFg؅5?Xg8@"Joq>Z,3_1ˢ ިae&1sAx ]P ~fQf+!91s8%Mk,kc;JQcCiŠ;Pc)v(39'"䝚bo{7eA|GpR{MfC\W@B^v  7V [E݊͟6orWjPz u,܏Mpy6 km+C[pEPȂf8U:%HS5c|Ti\ThK+ :jmŌco>_98jj} cgܴ?#r8X /Ibx8JX3]ǛY4xS:>'exHs4B&PKfX1`{pip/_internal/commands/index.pyXmk8BR_siHzGXbkwu%W.!W[k'4!fF3ϼ*PeV^XH=Lz'_!G|ג]PrW3ܮ,GOz q}Ev9e 䂘n'BUͻ3[?/J !3^_?''77V,${^E"@ kaKbϚXӼ\+Hn$\599_Hݠ^ےZq^Pv7_泮"V/=3Kj,|mo/6t㷯`jI'Ea#j?wyexQ\܃ raԍYbXᾎ? Hj(>Q PUpG*[Vu缗΢/[|$1L q!:#?`BVU :2!1.H?PL{=Aj2ܧ?{wȥD >ǂEi*q)t%gd9YhgozCfmDjlt,{÷0^Qᭌ k54 }Sta+QTm1mAUv[ؖ\CG ̸=GNk$9P6& ǘCSdf6Yۋut|T##6G,dr ueD F0CgO`[~\At4`ˎ@3FA BC=b~؃iP~Ew+QF6u -b\߷7ftȮ$D%{J )]$()B)iRoYaƺkKoUz.'P\ro{>x5 BC',ԅ Oͨmڡ #,yYR8 ~j'W@ۦseqML/\OxunwЍ`Z;ۘd~4SM։ XC+tS x[pH}m4jx$*jsY tQ^~ݓ<í4X8Ͷ:*(M92] /{\^l+.H#z<0/嬕M)1qe)~ <)nKX 3G>e@` Q1?> ++ $x>DDiXc THu ՕA.mfDL,#ԼJy\8}V0k<۝u_! ?A2_DAfK/$J2=soyt78S DR^l4塀VqI8[NyBnn̶c^y>3riqi:,!'z.}Hj8r \R BAiz2.# hy,%]\‹Ǚ-g+Xv tޥv`ꐸiopXf?4EJO)(/ 5%%DFOw/ebU qn~AH)HYYҚ^ĉ;%1dXbճae41O xޗ -|6V7-6lٯgh0>[g3Õ̬iGS K*tf,ZY}yxƾKM;1 e?P1QcF]Dlb?] 2~?fIK5miu,q':nWxC8CƯa~E}g?_ׯJj^3rAN=* EkI0G)60C/g+DF9n̰\=#ُ̞BsLUڞyB/^ NpY&:lpfF{w X~G5 ]y7&(' P_X/ҍ2&Ivr8%U1¿nqX_[X ӱ&EIޗqYDPKfX۠S6r!pip/_internal/commands/install.py=ioH+jf$3fLv3cznM%Tx߾*VEH0B#uzowU Yeuߚ߫Fk6/̯GBvԍo޾z|.liF7|7\޵yU&7(eV.I?$̍&eUiR-2q:Ot]mLk3YôQW,o"70lo&F} g|qƻ}{M8ۤtHʲ}&oⴐIGq6iΤ͛okϞzOtW>몞%[ 6GA*M1 zEVIZy]xoXUDM\K}Co|0 Ѫˋ5Pm +M?+Ea@sAoc:ІF@֏STkJ,bb I}ȶƊ'(4%?x^뼐;iVwie7u&BY,w.('//6oRR(;HXlĻL*ᮮZ 9R9| nūI]:2N*s\uAv^;/vIlb)qWfV U;.xST'sE(sڣYeUm;ɒN,m cq<;::Ji4*씠o}zD|B(e A |Lt Uݏ.LaOa#h]]/AM%U opDSuu*ERWЌ*߉h*t;Dd!#|0d`.nPy&i2i@x{Vj%{@Ӫz%D2 .K a4rx lą /~ ´hbE {@ p]Y?ڡpv$ա>?ñOLcLEeZ~,3QJy݀효Dd$J*@W`LmWKr>2cL "" gyx4`՝4{]9wK](WW-]UyjO`o] S`BЖ7("G{ \5R\%boJXo`Z6Uq-H;[5a/{F19xuRî^Aۆ`??zQ罞P7g\V- mW$ 'p^H=YWpXhj#-nS'DQ;F{^l;m_s%w> w^2Fyۦ&i1&8}LE(B ﷑xjJ{jx,T!Y\1@8(/T)YP H/0% e ѠV;ɜ]F,5,|(d6h^U9b 0\w4y (nzzN5G& x]XX^(f2!c]IiWi{+P4#jǟ XX0̿aI2=o"Ig+n0SpoJ`rQKA/RxEFW̖ƴIDhE*{/X}6調Q<3&[x1m^}S@6u$ gxYfԚ4wkߛZz&ֿVjPmbFyNp4?,Nɿ=`w 98THֽAyb,0~âLZn>{iRŌ)@Q}+1ub »Z/9kL,eXE9* TǑX+[|T]uޤ^I%~“O uH0j"5/zo|`gB⫤W?MJ{ό ;)[,h!-xSW%5[E%JDiuN܂nvn_/g`A/cg"3wEXI_D8@nPP3Yf/fnaqɷDxê(/=!@ L9)@LaZt.vLV&yUb@VrH+@6DV._W$pGMnW)b = TU]/,yIEmфu9YD2k73:OvOHt:as4N=ϨvⰕ#EtH}(\|"8ǒBÅ}k,&j0n; JrT1b9TZi ٛWO_oO_=s\ tDJPeU w #jpisF(Ŋ*V D+|poCM$*=P ΜvK!uMt`S+2>j;Y]P1Qqw垩2balK-j3 X/_s?wB`UVhae6.S "ZDxrX2(mZLH휻ގbe!qO1MM U/Gt6d_fX&Mc8R뒯SS/{T}]#Ψ+],{0.C! xZ $hHdḑ+AFGbmOE^^)Gfu#V] G*QCOfr#5bfIl% NFcŢ#Y-يe \f, Ն1cStK`Ҏ`v+1؉CGAXuc<5_\nAC%FΦz^i3(ʻџ<*B1J8-7TzeCt~ 7¹pkw˥O;hOCxQleŦ2F Wǃ(~`ˏM*NeZ rY`upqCs-`XZW#dlSAwj)O-]4Ei^F)1D%nʢJّ UMW$HF VU3aF6.$k*V?#~LjacH뭡Kvݍu'Y`=zq4~X:ƍRc9-`Oͻ/ Mr6`c|jL/{V<[<# <5/&>T Sܳށ>L~Ѹ9H9UosYsBBƫS(db49,PH}:|0Yv87AkYC'sl)ũ U:6Y@ n.1 U]x"*0Y~vF#P"_Qi% ˠk׋?3ev A]qO$M\=Q*1j1-D"~>͹%u뙢rNSj.O`uLu>ɿ@?S@?"~2/8S!Aoq4g]xh#hJ,G(XxaM =xXF"1sCxL5h%)U8? qt+ %.fOHg`͔:$б+̖iMHF#<95Ru')Ѐ'k=~O(lN-Xv* ԓS ʜxXSTuzoYmvcr*~ ܻZ ]:@:c'˴蚲W~v0Dn.]2I^V@!NրYWX 9~m^\[Ar:鞈Wq .Ez]MvCՀH:kJ{[0P#)?hnCgIQng;y;6{Ekے(3Uy#sĮ*yu8ekUM+LW+;8k>Gcm*?-R4A8=C:i)I<@<ճS0AWG8I^XIYH7d$SXݰQmk)GݦTxP 9cڑJ*)q1"pf@ 2.ub|weoL_5{*B 4p ԓ["-n ն97 $x<HRǍjNUӓ hnѮ~@jڜfp4Ƈ \v%]/buաIFժ4<>n|MO?fY f- Jr?s##kЃ{rjOf3G`Z$9H#Ce4IM@t֪K{fv0:2A_֟ȮĽI rvyuxyEJMOK'Y3ekM(L=S `τ%q^`p55*!Voͤ5~V&Qkԁ@Aes aj/!{o0Kx.)_>t $] Q |$DOL}*\ +V, VC mș\u0N `0(_w0JFX'` &Zr[ xc̰pvWx]1RSa0i`zg;ޙdY[Sy(: F%ל!NO.'T3vlRjvC(JLa:UVqB5*Ǣ8/ Z;} ʼn4j88x0FQQs F_" ͋.:pTX\Ж;Joy$򢵗^f:^CIBR~B_,\?nHB5gn]&Lv< 8Sz{Yh I;CKtz$U r,z# ]zT_s5oߟPNBLpfC_q|·\S 'NGEu'ǭHСC &h;~)-U) xYL:H;cy_+ӿqw٫wv#q < 3`6₿xúJh曫' ʵ2ż&L_7쪎j":N@<9e7@g :Q愻. nb"'am,PKfXiK\ 1pip/_internal/commands/list.pyZKo8Wmaj@so&l0 6], Ca݌բlw߷/z8XW%C+dG>)ќqovg[)D]KbN=Sf;|^^oVk+nE޶ W=OϚ [}[ÿ Uݙ6/XS tsKxAڈoh?vj 웟aMJhvœ7{(7pM嶽WR학Xڭ: W_WW/߿6̰[/rnǁuu GB+c]ɚ;.Es`M7KثUX6l%w0$*tVZZw9H۫벽ݝrj6tt״[c軶.|fHj}Y`JGU.hXw/-HCș޹RDYw7^7[U^$+~Hg 2&lz [:IɖR'aIy]5#h*R}G7H41-D -%r#{<C% ΥKs-Dv `EU((E *g$zsvv Y5豴Ա,3Xfq:N:qU ǵ7u bV0 e*fY3kFPH aoPy ;ԳˁI!+'D/@kd{snALO N&!/Z)vچOb[B)x6#?DS!+4{"YF.5f E:HgWZ+OYEPɾ~~vO>;߆1þN0YSk[3Oz5Ni!"Zi bYJFtuI2dVNjiXsdu+&'V]L<_oHL: žHK4 _hBMUբEDlNS9X `"P4d8L~ srl<fIdv^uhhzHyl%c~R"ɞ&s!5&h" %Բ9hS- sQsHs]|ozCx&gb07 c1`ɔ;!1I[ ǦdFs ξd[tl{5+!"Vcusui{3Jw!8H?eշPudv{hy]qUF"VJ,}$*g߯$CpJ31md' @}t~ o磯!;"_Whz9H@0XCZ!|7WnOi *.|%Zxua WܗGܲBh Qlzjf"M y<9ͦɺ^6"gvt7_U'o[ vpz=\R [oi2Ckް*Oq>JHQx(gSTqWâA:Ёhe/[K^`6'(PrNiEI˘NAJGQ/U]̴VY֕Өǚzd9TT j>]/XSxCJ82]Wb7<05CL vJ\{ɡWƅ zrՋM4s2[^KaFH 1>-G0 u氵[eMk ca1g[!%R2|ks 6 KfB}x: =CH'֫ *  ovX=\#q d1q@A mup̔m!S7FJy܊'?ѻQC&WX >E.}o@*oQ';X㗙$d6E~kq>r cdaֈA1C0wT}[A{ &PJk2UN~ίV`1Z@AlYiK0k1SQQj3N, - 0wܻ"XqT?:a;eը;~lS`@ؐfF'fkgz\X')tl]&vi餿M2lz%Qkh˚;7 1'! /3g4 ya]QNOl1=&'8:Cšvt =#fQ͏ݓY'C=F⨂ n?yC _8cI^xHBe@HzotKYӸޒ{@#׋F=KrL!g# XnJLSF[hԏS'𑄳ow%ub'8]޽fajleT-X0"CV$!II&M.ATS03B N,wP32pu hu%;k8ü؀'}^akJoY1<:kptd4H'Ťrf7^:לy:1OI4zS5t ߹;4U649Xћ?*״~4x׶A*Z Nmo?h^HΝuerN_BAD83TBd!w5ߖo)˃TE-m;7`[V:,3|:asDY\= :4E8iS[]$h'M(%x5D?F}X痉Nߐ"+FW3[=~hyӷGƮ ayĀn\\^lq kn?/lߊC,/PKfXUQ pip/_internal/commands/search.pyX[o6~ TV[ś ti up iL$ w/()sw.4?$/v;.v#n}y^;*ٽ,:LV.5/"Jnd7|hRT* yŔ,;OOO8mLPĘsW%*,nEL[&6LKLѷI ^5*ݶ.4K?Q Z/~}E/]9S1^{.VJ yy]^@8۫7c2999χ5+spjO,ǁizنmi댉[. qϹ f*b=lV0}WϩOMfa!P4ċTgEBg4ˁZ՝eE ÷!ʦgS1f[u\#-"|=)QZ+8cKZF#I2BZe(9 ;ʙE!9b u/3Wh2|s;ɢ*00ISY 1q:&T3ц?WPeݔT1MC mq]7.r.X A4J5E@!w|wJ< {9TDf>ťE;]܆Oǎ}Z {*gvTݪ7ȁ^ #ܜ>l|tc`5 r i:r>^ZkHoMՏĥm]L95"]Hyb3QC1"ذJ2*T$CF܅f(;{lrx}~~fJ+[&qab*YLi)4 R^S|G@D3q=mXL& c3?ñy:y<(j:Jk37uWai3ĭi)Nj ;,6-}p} ,3zFB^" fjܔ1YF`HgOOhVJ({-?^y9_s/v.  u:lc5-|+Hg-u `(r]kq: 'sr?V?&qADp}G/ISp[=0'pv1i#64iS}p [#q:N%7~*'DɹɁLiccS,'?PKfXڞ Spip/_internal/commands/show.pyXo8_AXDd=܃q*&{ i@`$F[~3$3&̰>ݯv;=#6#Ԟ8@gv~a-Tt<%7=5LkAXyqS/ꮥJI>+^Y[u&ҵt:yBXUD  D,RCZr}MM[An3gV2 <1Cϻ=v2Gw=ɲ̐*t^a|dJ,Ъ*x`.!hMrV$ݐ9RHc׻(wuÆ2dȣZ<-̌6 Y<$ލMCH-sZ1ƄSIVx"bϻL$.|le4Sch !b ( 9]H E:{t#y6ap$k]1BWssY8#o՝!EPg}Q^>& dJ*4k<\)RS70S|hNY;1V#+w+p$9I&Wqer;EyzWT0}8ț;s٠~ O]2(^tZEA.Dʣdwζxn*qL/@U+.%*$ Te~65c !'BbIBUjH.,BL|X7E5B-!,pXAkrFlQ>0dPty|E`Yge1E#lg]I%R,*YT@y *$[ImRҿϺW9%@h*Ң H:.SDƶڐk)W :sر9#p2tY?$2ݝeBhfa!EX/~m'iCJ:Ɍ%\e~([eTNelڨcY+YQ'H:ul}-Y/ȯx9 \ ZQ]ZTb?O#/.xt aA6|tHL:4U//GL&b=./ۈɹ=$lT)`ì.yVE.W_y#jU%5C'Hn9M~KJni-X7VB?B28P· O XY<>lS5vÇ$pj"D(MjRg2my!CSor6?Lw> @US:jky+?9+#w G/):89acn)q?O֯S.uSN~4o!MߒckAqZ6dލf& x]ΠjOLl22Y&aOdz:$^*C>^iHȹqOvNG8/ɌJى‰q !yLm73$|YËxs\c W&y- ٓF 2\%m[YxN ʄ'G_s/O/PKfX0u4#pip/_internal/commands/uninstall.pyW[o6~8PFźa@CЌtdHxE%Sn I~sjmzj(@׮"/Q6h;w,[?ʵa^'KSgBi%3Q+QU*FelZ+YX䙮*}"U<h-XR]Nƒ|xc [zODf?=}FPh=H3M-@luz)3R*\_}XzS*il זV`55O=v^f Dq@x=E ȅ)5!8Bduf=dFF59ϧcr<` A 4lQxG8cWOcWhn |A<0 r,@9xbwVcFYvfX[/NnG\\RCpi26@d^GX<.DSizw&M<{,tjs ZxSIIwZ6LbfrdUd}Ȋp>:[zsOqOx6ymK9%hu@(j4UhFQYXbKy1߽8ֶmgzk$*tqCӎN멶չt͆YwynYOG2Ohk*R 20ͻe'SNsSm)50Il‹YGjĘ}?.W7Yx̋Db#gs zΈmCf^O@ZqUoST9BC8ߐqmCk’8Ojki|U3= 8o+'ޕ :_NigV\Z]z/quB^Knص_+Gb?agfmΜ=+^: *7P-hv͡A ^ZI]yA;=z#1jng߱0@!* K b#YHx pԳ/ ÎбYR\ 0ϑu?' ":1 [a:MjN18I?ѻz/OZV+ .4>ǽ;=| XVLh5唨{ y8t 9bfIMyv'B^c!PC<*@ASv )/sZ|㖕*5ׇdqPLhb`˪(vK%`h~g~>l~tx=b(%Kqr)R^ yjp͋FzP&ũhUni:L&d//HX67nu g. L;U g{v11)0A\wP-f1]̫w._Hu}Y0ߔOdu!p,$˫=Hո]MdܲCc9f;z]+#ηl!fWŢeVmS1 f't3sG5}~்nq ,$h5:u3֮2YpWoΐ\9yX2Q):]I:X4ڝ&}gZvAI' 9Rw<-M'0U5&saT}tD $uat&= +2Tt'(x>B3a -lݻ2iOZv#]H.}Coub/G]@&wbN6Bg%bڂ?n;#fi;zwz@elwXK G2 :7]e"OcWyM'Zr?"7Dvfw/Ir AQOt7_ctLv(rQW* wAd/  2Ċi._'aPt;2C5w$Dlw ar2=%YɄ8qvw~qwtc%3}ĸ9!_F~ ^;Фtwy1j=:nF:G.1^. 0oO>>T 6muPKfXu .;Z'pip/_internal/distributions/__init__.pyRj0 )DwX ]`;4;'QZQnego?%i6J 9O5pS V"6>+G8K!]腪o1(>\%GD nrA)Ua >b 9Qc ]<=' bв!nB8 mZUta"w:iCy VQ2!:xl\%jdcuHWgan^Bhůj8|@gLy\`_cPKfX0#pip/_internal/distributions/base.pyTn0 +\? @]úbeGD,4?J5zZ)>>>+2B@$χ%|7^hdaB(lyqY^2= (lCTŧF9ϤOؠY&1usnXu`;,p=C~,*ɜ뒘_2:Dɯonafk%Z[3e,gD`֋]==W":H_J}t+8"4P;8RPtÃb @9ew*m-V^Zfg.!k)(֌jYܘt'اSرT 8ݠu y 8;*e[L RU%-`OGl>l T(Uρ/S>`|BV GmTNYBv9c mb*@zhN<$5XCA;"|Qz{ =pA;_"W/u;e`XDEDzg֫gӇfZLF^ :ָ T4 .q5v6CT32_l4RryE#Csz &o#c$|t~H6p?߮{4%ᔞ5F|!pZJ]:OL[PKfX?xxJ(pip/_internal/distributions/installed.pymRMO WLzMV~cEfL3-d) {؏5 xo޼y:C-po j(Zb;!(^i.#Mx0)#,6gە䤇 }^l]vAbK")CbRnEmdczLإW^f9}钝i|]’h+^.KKmJY hLTu+"ڋ^VB*=uJKnIJ\?Wx;$ʟDYbQ³V#0{ ; 答0ݐSEHQ \RAb#0$ ZWgvlB%tt"M)rӒ2;P558<4m|%;"о \oF5OLr,Cq#UnոMGa1DD k"6iPbJ ;7\R'yɘ qg扯T4C,pGmÍч%,U9zwK5XwPBeW$Vr|Ǜ9rR`tDX ڳ箆*mjs?3I0a،Cj_ x<M#Jq1'y8S=MU'PI27r!>ŘOxqZC1u<Hy>D UK^|ВO4{v ; 2TX> eת~.05Z,GdeDdȈzY@3) K뫼s^Jwdb3KtP1\ ux|d>`GG/"g?YWY6;bcڎ}3eAЂ6@A)0ي!%Ưe+|~m6q9hCꌾgŗK^;JWj.n {⭲u;nnq˥0ҩ~Ӵi-5OE']Аx{` F5#$*w ˹>X "_v#fs]0q Z~ iyt h !Kb^bë {tOPKfXï/%$pip/_internal/distributions/wheel.pyuSn0}WH!(- PR*yɮU6ܖmsf:{7zys\|cߌZ1e]5#*mmXTZ^H7Li%Z&_lq]*GKp5[TnO7Vz3Ϧ"Һ+!эcwD)x@ AY|IH#*Q쵖u{II[ L!PKfXC?K pip/_internal/index/__init__.pySRRKIP+I-JL.SHOIRRRPKfX]B? pip/_internal/index/collector.py;r8 SP4hK[ӛK'UIc\>NdXj4ђG\yzf,3Ih:i&雋LQITKn@OٕKWEJMMTV-S/iVV,U 1.%T|6Ii'k9zB=GDPR*UcE4^}/,(YH{ eSE*Pb55AXn|R1 hMX8v$ ǩKp ~>ʤ6eٍGT=Y@TV4;LACI~+ ~hn#;6Hlf^t"jӌۂ=lvUՑ+]'HQGsT KP`n^4Uy/d'[Ts#7 3ȍᩕo3J'\+>\ѲqHRH _WK WKP"+NGQ Mѐ<dӶ@]r ArkeV67 <,2fV($k ]QJ /Z#AEO6k;_ rfCĄC䩃JQ >k*!k4I z19jxv?D 18$ͣhc>2V'\0N-2wQxh2ԥͧ=?\~}*о MEs]Th6w[sewy˩+odOx& PW/ZqH+r6kȷr^6&g)E˘^G?g!EYځP!jodi1ꁼc,mi;@䶠L7ҲQe]HB@7[y|qG: ?ފyRw V1XNrWԨZ:b;TS@d v v%$pUj8@>j9u9Ζl)?MW-t)24FEtRmh6n&0 )9GͲ]1<Ҧ`y]e໺ sʲ2 #>=9zo5 eSh0,_ ,ܱ`-,u "qa` 9u B^ycajX!@\CAa*>W%tɪ\BDՌjG0L8*}A,ݴ4ADhGb0|yvA"U䈜,Crs4#.n~0QVY!ooZ7&A>Pl\@A[9@Q4 ,9vq}`wip5еE@2@@=pLlyp6~>?Yg! d%0\DIk`qvL>'_!q\ܙnJBn.1hH0!((&s.O0%C# ڱц8'`)61T{ \T5EkZ8L)`],`rew'0O?5(S!L2/{AEVv82@CΥD BmVVB)IGc)9'4&㻴T>/훸l:&VMA8Dy[~[fÄY21R!)C(0aDĄf#\I 2M9CAR~RLIIKu A,d:@^Ȓ"rW5Q/U9&&K0Df/` װ_2WsyZҡcrAŶʛa0qdS71Tu@d(X)oÙݜ5p)sJuF`"Č4;Yвac'h-Lhhix4Gtwhg{!t}gV~{0ڤxڀ5㒾cͰS թoF-(H[=YA7w T(487mmiSP> N<M+gb>Qۺڮ΄cqqlWzcp(21H}J`-<eFSˆ DE `ϑL(*Ip4r+垃.?}G=%D d^L m_@O-a'[5x6S>[3~TϽİ[hVp?H96чo10&$ b`R)>FsbmPTӄsi﷤v,A%iJ9T2)hdM$A=r6'}0>>2TIߑkp2XHq ]ኧ`Xs{2]fCd+[ؽ€` ρ ϕ8궠ka"}yV#}ao=z,r4:N@Qcqh0S/јG'' L|aay 1!![9>I0X#N Сr'6}jl-ٍ*FHq`п'`O:e7DX/JGqǖL)PU. #cƒcS`e^Iϻb3`\~9W?a:AL,6htDY.ͣQ 񗿽rGDz0g^FNGyjG)y=HJYx-;)*0 *jmxqu?dZ\K+ fV[G(SamqSYUqÖ `:s[H BOW,hvt%14_5i/pW3qW+ HfT9G<ʬ3^RZnuxY@{8 z 9P3PY|ktx?Űl9TG?3j[V|n4xux 7ז=GkVzRf3sah6 F} 5< 6 jڸ- ΩAѮovCȴRO>Q1јFop)@c-W|y5UѴG/Lwy7Zbko7@&mPHj$)3I9 a_ό/o޸ Nz958^J ; {| (u,07E5^-K9qh>jLKC , XszAD+H)t1՜sǩ׽'\z8=`MbVX߁7/9y__ oo?/`/C7I c8h<- 2Ŧ!nu' H_SC1qy'o8l_hqUߕuSS_z~2cFPKfX@,F#"%pip/_internal/index/package_finder.py=ksF+& &NnnoGN\M\+ȡ5 0hYq_?=R|W[Wr$04&ɏ;jىVn^D߈/DU;M&jk^zz7ͦ^ޅMsqQg+m/ꖹ-7OI仓'y3m~K3xby3jr3tt{?p!]^i]|S^8vrY+v#0xcMvYM]-M,r+z$kYWgu 0(;R.iH 廥$j#e׫?޴\]?ljF h=6ZQRj#|秺!Ύ)!ek5bϫ}qƶ] ȶYMl*`;iIL('un˾X6u6 )]}Gz#z.#M;Yˢ[6;K/Dx]+ם.RQ/ r)]|AF^l>4ƭ%/[Y<i#k`9,V?NO{^ݥnnL[pm-u}Y7rG$rhn!8_?|c ڗsZay]w;Wfݗ(`^B,[%T1G7=^~AOц& E1=:i2?,Ra&@@zud0"qŭeEVr- \|;sZ,)Z7]uQ7 a9칀rӁA)'$GSٶegɦSfC'xt2pY ΪZ C K,ǗM'iYB9hAhȆI%l1c6xSiAAw ͛Ly '/}1ĂrD~o(qoFz vbhL (5% tpv8ɓ 'mXWl"0і99.l﮳_|=8nA[~L-@h Eg}K-H)!Q:0VAp@̶),K4OKJ\^rwޠ%<ГvjY!ZKЍg P nK-вқ#gz QEa"kQձͭ}}zms`ڦ>_C|0$eZi?j| $iMʲx?;D9RƻaC 9FfY!{0g'HѺ^e{}_@]o7p#IDnHmg=C =g E63r[&(\3%rg\s@5z%]fFv(s*=JK , =h&wݑz Z(+xSh,?(EE6IГL DLà=UBk>vx?o7m[=B]:P7z%L۔c`&&ؽc] ?2i,찞F za >$hV}&z(PD.$:/Bmjxדa{DlJvDvz ?.϶\6ݻ&8P/ݑL_,᣸H3!ʅC64"Yi˺=%;cwZ=͛6g*#yFUl$߰k|r w y VEVrjc`-m8gX$DX&=7dMT>v^HޱtmkW6;*,8݁cuLQ^b8t9UBM80@<%DE]%}*EQ h P(E-=d D!Ф{­uMv| -aSKV;-\7UfW3f?`ϫSx]cSɥB^FD㥫Y!͚r: wHMX~rt@?*HkY$F¶O+)2Y9(sEjFɩxs)kB+Ն H!!5>5+fhФjut TK2_ɮjմO<%rI/{-ͿL'OyANVU,[⎺qeٛSS]Gٚ>/a*o$X8]\(bU].gE*ns*kow *]PV P,A"t A8n>w:SyaoQ~_ЮHvvȍö! -{^v^Y z/+VqwcXy^}'RTleahp1C˿.MZEkՙ`Nna|֜lM'(RD\V,M0!D=p&(9D91B)-I9b֛^ԓt`UK0ѼJ֟mv;'YIUzYĮ bch#ULF$4*ќ#ź %*O( oBK$TN3B%o)i`3͠CൗfSwx'KS&ze̓ f\Tfk{<)[ ** !RҘ3 ŭx;jX2,\\# V- 쇢1L-[f= ȘgN0~hON?vVD+x\DYr1 Y31ؗ-lZe&2sD1]̃ JA;V}8{j:=|eaQH 4L^"ذ0v'`qXn0<yx"jpyPm63x4G#o[a i'9!~rT:PʩK 挄ty~n^DfrBF+h G' ) Ӑϐ!R1}<Oo貗cd`^tnJe P4˺e/UfCEN04@?8͑mh9Slr4~sY c3?\/r,ö YT0 [0 5S. 0*`i\' Oa.a{T?ӦUiN3Uf8{+\ kSgܹ8Qq x`:7Δ!$Ÿj>- -yn6(/bdd8:FyG`\ Pg텠mt@?ܤD'<ZgMxُNj`es.Wȝc3[cfN2Ob:p jΓUzKUD~m$q#LO7V:=Xj|Sx!inK03^B7d jKڥΆ~Ri`|?$:=ꁸ+ ,Te_i ֦l5% w˕[NlyUգKpU8ԙwi"boDhL`t-panG:E}tD 4.#·Q®>2`X)}fruRXmAHI -Q΁x렧to;O4hv <<޽v;S&6QX %.WEnt^_ܮU/tvzO3\YUI034d.Gk*DEn(E^NÊOW鏢@Z)Jӓqdads gf%/a$}TtnL|py)3Bn.tbۊK ,U~)ZlIŏ_%M@𬰪#e"T=$НAku)lm 5\Eu[Ioߢ/k;ϝZ#nP)m[" EWg8͏KODYu0rZ%'txc#nƋ[TtXջzK F ahS<|'/G%sCp,V'W0'Nn/^>RugW8%3 ϲ,2I`ą;rG<* RWW[wq['^`,E&kGV̈́E3"`ZeLON75_2Iq4@ٷeL#Zf|LPqzH(Ӽ1ߴ{XKmw $zx9L:(0N9~8$pT8Zy 3HSiKp4^Z?q:>Az;B|N9}S^>#K}jcT9taS&tP9z1P274\26͗eU|,'j8x"ƴ%ZT&dl? 1 eX8d7ȋUjiܕ?8gL掱=8bj*@_XJʹNj),SU,럾*IK 2P4@7fAfӏ# HM~r  w8י_Oyi6edښXwgJHp9J7]8pD뀕K+**'LCJ}HG?:E?$zPH% V'<,_EoJ@%M-*ik jcΪsq?ee}]i4e a橱.䟱 w}-4@tkS96<".r%9n^=ϵ qn>8slx R?#i{ }9<:] K8|=M- zwF1hZl/2s˛BGm(c ʄ7OST~Ǧ5ZH* az=E"#*>e-!/7UY/H+ky|$:m* \4@u|TvI `]X9ȕphKF`u`w*`"V"uVM*I{__ClW*#{Xe)s @MC j>(3FVsѩvM4O7:.F,-CLiP"x L^bvD5!F7[br! oeh?Ӄ<2ʄ K[7ѫL<ь7vmbج$5qLNx^!{;K]n\~w7Dig|Bc ɑn&~68L&?Z$xwz;y.$i22T7CVfLCjUbO[mNpN+fMBٮd;>v#@Ϧ oJN2DԻi[j[~>F< W'P/^U3i$}R X|<+#{~[NDr;)#Uֹ >͈qM]Uj)텫FPK>%:taENŻ$>W^=zdF&uy?7-THlw l KF\rzltr|uEFh TКrs.kj#?j@:F&UͅG&נ:UQȠu2D(hQhޓ>wv&ǁNd^ⶌR5ijy^jJ.VGvN>XN}P@}ށM2p PJj"UIı0=Xi!rj8A'!./7 /`a֎2#/c[zU.aa01 CpPPKfX{!pip/_internal/index/sources.pyko6b]>{s]Y7i0dEm.(twwDQI;lywJ* ^r=u+V\7 RVJnY&gFRz+tW\d"j_E^!= 9{0Z#sH<T\C(dR$!5FN:NSTSpwr8@Us~!ǫt@~{}:i fcwUU@ƍ0.ʦ)bp(H"M4|E Q+m< Ý% vtI,ea,ӟ-1ҵɌNzvTu{wt?ۥ 7<}Ƿ!6^HRkʼ;/V>'4uMA9tS ,^Q<(%V8E[8OI⥱ȈIˆbQ6Kb&xP*R|FN[^^D'vb,CY;sыs,yo*@|Jw1ʒwF҇yk&6|k.TC t/}p2taۑkhm<opsVw-7җa5UJ 2ZhH`J]nHZΧ+tԑF-4h^n`]FeϿGKx>eCv\ '{;Ê4Dw.C[;RNY|H[ $"yƭI+U{m'\(fE׏b͚A- li(~ylЏwHgVO6*/[2NKV`JAiP_QUi? ~hd&6%* v:R yoPKfXLM:#pip/_internal/locations/__init__.py;ksƵ+P2![ l׉5[Vbʲƒd\ Kr#`$6~cwAJvs֓Hbq+\ey!fe:), I6tnf*.ۯz,yggKQW@G/^I?Tq}nU,,W+ #2G2DzKi]zs8/}qA- N%`m_xrNjۧrIw쒜nFE'2oe 2<2C/jp.Q}^\25ˣJ5\=$gה2}x)oW*d'\j^*5NӉ8IH 'zԑ OԜ\EZ Ue2%։ڊ#ٮȳ@Xt:2 ڇֺQщO.OO^ՇBl""0hO*.~x쇓?}8w4ċ>鋃GxT@3YL{t{b25ApPmv*A1Rb!MRdHء_a,.LPkLYu_OƒG S|PYI (TрTN'keQoi<{Jױ\@'Z;c`XJsU,1`^a.Hc2"Ӭ/@1!KS,_4VI<1 + 9$̺ t8v:{ Hك+I@K vN PtƳ'"F yJDl(>NxB\e< [ _ۣWo㟎O=ُi򾽯_~Ѻ$ˮukWYw YRTA԰{v[$bӹ1OlP㹌SR|o-l\u"s|E_ԭDX&FV'gG >ו_(SuGÆ`IO\}~7"n"W\yWV,8WBAEF`Y BSR]M|xqWEoo @3+*0VOm`~@r'gO Ts6W֣ >C'9WUL}蝯SEcR w)ke4aOwio9<O*3Ϧ2Ĕ(~pZ/dǂ2p7KkqBQiQ,"}GYfö5Rm"uM9X`n1egteʱSH5=t h8 B.g$I۞Lأ&,ш%y'm<M6/=z?9#Iِ l"pAtJQV+IO)kY V)eo=1@![a'LBNK fg2^Aƿb |cJ1=;F}N4OvkSé,rz%4Yozv[8S@2hKQm5[,-(Eef\nC/zY<ºL/| V]/UQN{c2^aԷcu-F+0aWW|\c `Ä"5c4H81CϨlZ&e]s4FZE. Z…hi.HMAF7Df2m>!\_.4b?{fe c;b~]BةSCcr5ŇQPo[ 5r_08CQZ{286ϰvL$)ഁ'K*Hȧ#TsLIfʾĊ[Q>۾' 6=`롦Aؙ)[c\j"@PWD#iuX`. ҢUQRui/+P}/p1>txsuZ*܁o9,ZP nUNmd20KП&NbpBaJ קC}$E"ӊU$^ <^r %L?<ҟ$PcPGep=`{[DI׺R#6@dQ_U3uԞ8寞s7_Fo$+xGrJU3/nf@mQH&V: ^gE9:B,?WCdH:rnCn 6Wb,Sm; H$磪3hV?=,m(EycXm|չW@W{}b^_p2U 9*5 HOotx 8 5kQǧF[f$mHG~W[ֳ L5_&VKqbaiE-PPaOU 0env>=ᲁ?WqU):&W{1 1CKL~"6.h< T ]BͥȻc5kЗ5vZj]^GNr(:;(BeɣoiS5O=*ZECg'~m%$KH_YCT`jXr}g{IBppS}fD/zON e?Uzε/G8cPØZT19Ǫi6C՚:i$D3Y ]HIA3Ljϟ65j;6Ӽqݔ5i!oS }<1ܯEzqkɻ6N ! MSwW̱==)agyа`zJ~A%* vx|O6𴮐07}YeβRٶ;#7-˛? Mcvݯ5Uﴭ陑* }91{,/j!D]6U Urzx%ݭn~Dͷ/86o;ϔZyιgWCwH 4- %f|́n=v^nm\yu"6:DCDQ;j4׳3i]뮇k Ok+;uSZg鰾W:Y{fhl.hlʏ7Do\S*c(|K{Ofbm01W"o@\b ʍ;CC (OJM6E[ a3o={|P7L6sU 'xigt*9o;%67q ݄znmc(6^W[U-"۵ܫY?;nkNQ'Xp8~3)fW g5vsnp 9-f+rg]j{ B[PK.< -8:G,I sc*7 pnjRCv>fαa+@qч3Xi-7WRT*s{)sNthL)<1lxBWE;fFDe!)Ԓ@: J;/|>axW~>ŻR^LK'nIګލ'b1#Y_=AMS 041[[n.98=u*,ƝMh1Lt5\QnʔV#}> S>We|6_,PKfXx$oy%pip/_internal/locations/_distutils.pyXmo_A(("EEZvsmth-@%,H*d=IvjLÙg*IkUr+Ukn#`;ZiVk1˛uƄ-$NǍdӨlאnEk٨J0-^TcPmļlȡfKhײ#{xs3o]j԰mb0ʆl}{I=a*Q7m5_Dia$LSnhV-%aT+jǵh6r KjKN!,~WnN,oIr-:g0N{ '&6< r) 픶E&b˯Tg_-2Vrcg~ [!oU%hr#1KA;`>%=x3>I]0rQvG{Lr Ó?d=: MLe$69?o9]0SSAn10ܗ0L3s'u~B r4*DD%!?pL'JYK1af2@SW>^\ԂZUT)*7qO0Tv:4^A&c~*IϠ8 :y ,d?œ>vxEx4^&Kk[Fp+fdxG/9wlJH{RW4L;ƃ54ׄj>qA+~yt4tvYnr4,59'T?о'tEkV)<5:z0\Q5Nt(T-M=8.vjcLg_h̞xv-Ё"saΘ,vgSKl_."v7m(H(܋gM\JױQ$a~W-RG; eh>dW-S&BQ1c[Gw̙,3V@KP]GS&'e .Hǭkex2V*wq %7czT v h'T/*IIȤ~a K0=" ˯ YrVth|C#v:~(zЊLV@}u>rQr v꒬sgR.yAإT}Ɔq1H%=#@ fn@lQ/*ÆE;La5phdJT x9-DB=G5])Ѣ9KXy!VQB3 PtA) ֥EŢAZAyP&@~{r|r:Lpxac>)"Jёjx[[6N١5]eXJ q$Mi!% FnH4´ᬵa곉k6!KrM`YjEnRE]-) ]oT?@y1l nm|r8qȣW78r:1_5i^w W* HJ*#mEln3 [JCq֒pոQ҂XC)10)[FߑO>#{xg0dNx@?pWvo7eof4coUB[eOy`HUQ shR120|)њEmڬ#~>~EF 9c!;r=fV'{}sēH# ׽LyBM)g1/ p'HШY1t7#\Pf >'MJ|eLx~XGpˤ0Ȇvrxݡ&\70m ` s +8%J3IhZlo 4NGQ-YW舱O*Y.V.ӧq0 CM~Pv@d)JSjR}sWYt v_CKlQ$@QP<61[l[8]ўD ] C;Uԏ2v6ld/lhD9y'{?G֕S5zWmB@=ԽTaqwU_F/cnWw7&%g M07#mvv6Xy(?uR1tJDʼn],X^l׽CIYWlm Σ? >hIp,G~:v&9mZ\vWM8@|r!+qe2%^p{w1Clnqjk>0F⶛iv3*]r~՗G1"<~q2Ol!Rő FP@!ػ ۭck&ӎD5_@}jy{7!r[ޡK:hW4=}T1Ƞ֔m7~DaY#StfG"i.E½ W.䴧ЮxiJYToCp4ڼyLgmm`Av+V$Eyf/-l~澧d7۷}{FII|>2'Uڔ'F8@*2^flӫ_@\_mF6f{rJI?Tv(}O F۱8-OC߆D?PKfXER pip/_internal/locations/base.pyVn6}W ˭#b H E 'HhkTIʗR˛-x3gnBiKRVPL\ea XhBq"Z<V(i|%eyDk_+[ V{Vh[m#K)))eur<]E.Ro> w7Yryqy|yc7. t,](p4}zBF3MU)AҴuXr!<#h9=gKl {n41a6^rSR\̝ r']d#$n6p&ٯN8 aϸ-$μB(-`WeSe\]ѕ9~zca6 ŵ-m'Khl$x伖lS?Vv®(Sy,բ{[@uC%~_غ .\~] ق;TO 5Thn@u-6̑-)vN iʁ@.=7oBfjg5KizSu[c+T `߀3H0! 2alUY9? X8d:?PFÊX*r# x c+sA*Q}e5h֟E/QAۼ><!t;w-ۚ!^"kv qE6\/A 5Jd!.G~ctTB?V:Yqq :Rkn^;5SFBR|~P,#@8cH>m\Xq؈'<8?P>B{! ՝Ҿ-d9 =v pef+D\D8sG>LhS~鮁֔<=;&^")Gy Rhܱ 9( o[`xbBV\NOr)ՙ-.ͳ˫Ż_o//b ͱa#B,уv4\ (~TFSR\ SHhs| KnkqW5HHaX cYY`O w6P}a8U{;t:t? ST0]bh·sJVu>Og> SqXG|tj= aO=O( ?@<`:i!?n;3ΌQ>#*7ⅉFQ^1DøW=|ONLB 019}bW pf}87"nR]qkqbjEkfN|E ێw1SF^$yc'yS/'/sZ7>`Dٲy_/V']u9w*)&jC}w#$N`jEUDq@IGZ B)>E ,QH*2#1xotY3,?7ƾ(lsn(h^mJIPM.Ǭ;@~AicYk`y FEiU}(<a4A Q|Hp!T'u` ZϤh(u#tҎ:Nt4ve_KU oZ%3h/oK  sgc!*5n.}*l%PLG8NO?P:t Zm_e;V@"^~[fNT=vA0Xݷߧ vdO&Z}=)~%_En~/z1_2٧ѿPKfXiAT pip/_internal/metadata/_json.pyV[:~WX XU=R쪗M[u%"ld l$ձ 7f!?JT0F힙%ne^ V ͨ紡L (*)!SD2HEۢ{@k}l5L#9o"`™I6|X|iL#ngZADui,!~ J#GZjNl^S^4V,O_Kjrs- kTUT1i.:q7Mjy*{QA,1SlKAD8M!ԕإz"\R ~`z$rw%՚aW3:^`\~mi\P4+Rf,:=U%(L2w-q͈6*$?w0ZqI)^Aa@4aWֈE g[#ndi}*;Dl$&P/c"+dՉiXۚrf[DPZ~v7wiƵ/TD] OvE>ҎoDcr݆wuf9#1O2,<Xԗc|G}UyN~mSxM't/1 PrCNN 5?ːjOjӖP)gA0Tx~ұ: Z@$z{eSˎ [rVNF*Zakx<@F 9ʑ5p4Clކp u ݽ̖egf-Z`{ Dx/t`l3obpҴn&&A,n&qò5mz%mMɂxng6[)rjuPKfX`bpip/_internal/metadata/base.py*n֕32DVI LqJCTu&ٍi~G(Qv}Elji$U4N'"3pKo] 9waboo5'M,[o8bqjZ 7R۫GPYiU"(A{LeU?Jfu##-e^/J;I I/ 6iG0\?4.m9ahg 5XUKPqʔفy^!fa^1'>=|L GRj-{apa5s!3M˯ё0h0A"JrMOC#r⟏_M-^Ӕp:}37(#`q5"xJǍnHEt8AZ: .P*O*PL6cɊY!-SPJ ²eL;Mmh#⎜:CuX 2.&00BG=_9Hmlb_+BACHl=]֫fDKa-á!4PN ě7oyuGy"A滀'k/ H}1zzrP`qRDMRezUj_6f9'Hf PaoGp* gݵR),} &rՃw 61c ,A*~8ڵi R>2WXrzn uAJ D`.l@[X{,eն@/[L܁a <1fC =:H*nͻ77!SEѐh|a)wĨD[Ĉ8p_b`76C:WZK o_:FtE(lv*dj2I ]!\6DdKQ2CqF9S*ߖK 8r?X~-A*4ZjM$Isd h XMvě^ |q@F3.qQ ;hث&A+j̊/ m\SQ0d"X4Α ynwAB,FcO,y[Fr)nѓ{Ȳ.+NV-H1B$K C`8K44M1g@f}תa^TG3Y+v躮jTvygYϒڪ7_2Z2ςr 7 +/O*XH%I[h+>X{`QKВ^&J1nl-q|;eّ i4/Lz(6, Ӛ~5Z8Y@^Ȳ#P8HT?r / /aE"^:mI`Vsw.9Cc?ӮcHZN"i^ `x{>\ /|ݳC~4F|FG|ç*|rY: `6cfJ bYb~)4aGw ؠO_\TǷ_ 2-Kw\d QljhO00)AZ+cIj3VhFGňPWo/_8= -\Ѻ)7A2I!</ґʀa2Z+5edi@xDCbIMnv wBU+W?18?wo/NO5M9E<188gΞ,e:}R6[tN+qQnI3CMP ]qک_D NV @=GI*eЙQqIM΁k=+|4&n|56)IvVZbڙR{CSTѥ49mC o;OPZ@.n)o >#^k6NlA/EQ0@a-UɈ}:SaPZ pagq'O>ؓ1fHo􉘯JJ9fh?872@S#+P Z?& to'; -׵bP(NWUc٨6H`BC[e q$Ǭ=N_H$Otd7s<[ɥ)A,|~:G|wh%:‘;Tl3d< zOAmeQ iR=+(^磽c}w,wrq-c^)[T2'QQoМkAu69CF:5=XX584oGr1gŝzNM0٠D e[F9N`@wę 2Pס`?4σaȜNJ?n騕򸏗 .C[>&:w @5Y9:L:&յYc[wK\ Nwh B^gIo̽ef欕.qmSj &%Y- <*osN^; 6c?3uv9Ηqn3 ^rz}>tr>*)9XO17Y@(OV{Z,VK{!dtSĪQy u~F65aq0qA.A$k"n*bmU|e0ruzm]鑎l\(9Ѥ3 㶣`t"OT.#p$Ɓ8⏎(?j7{tϔC)>'YF{hu v.e{fzh.Zݺp2G=C"ыAr7hG{ :8 0re*r?}QvanJcz۪7/ ˡ%D6+HS!򰾥RE{[ dh,ߴ!4lmMF*RiCl>9eeR9.@Xa1BQSKj zۗ,E▊ |dM-n}CR~3]{LTȮպ'nO`>O v SY H/D*qXA| 0pm0uܮYV.L=8nP2op7Vm"Blqx9!mFll{;r~F;kf f!5m+䬫o/:;μ@u eք ^6gpBΚL^uYO7B2b^rb?{׬A_䲑{XAHB,Ym.mXWm𼲋rO|٠7[I+.A7pj4NbygnT/ZӮACQ328eq0o %X/jֵh/@7d`5ES2c z75b]fi<[jx9H*}o6f.m,{CoI%_y6ʼnRLX=ۗV'" u[m,tmQklb#*@"%, !{7VĠ@7R/e韾_Fӫz W\WGO^xPA6ytm/8zc*1 &J 7I|_HX"o{ɳt?\oT7I1k6έM$[X X?0m5z}Tҹ5: 9<3QFg[]f|s%XdܤS`:PcAs[48l>é>P^vκwʹs#t {=)sq[Ǥҳ  fPKn\_A_JZ=!OWϜS~䍂4~rL%]sʥחt}5`Hdao@CPKfX+: .)'pip/_internal/metadata/pkg_resources.pymo۸btpt2,6CKu+ PvȢF9EHz FV鎉-uXe˵ڽf#[*㞞eXڲ&J ~~Tu-NfIwSڮ~O7EPvoEq׺C?E[^4{)0jKa&#KI-;ݹN{ϢBzjdI^Oֿ7 u1nC #5H-$Iӣičx;VkPgcv-nvXF.6͓E˻*ys7t*iښ5Nȴ> TF);-xemdAlYkx,Sˇ`mw{UӛxVxZY`6yu6Y$DXrX 'zw7ޥXQ`{bQ6:b@(vrծK]s#JX(Iso>h=o;CFrh\( QlT%JUa S d ODȲ+fX"5^/=<=;aڋN.Bnb{юax0=q1N71@C9~@@E%~rRH3bo3 O"]6h`)>^+-ڙZ &|vhK7籂g9fƈ'̬]C1r(E]H7 ȥzӹ3`jEanwMaJ-ۮbYIj!pt6ܐBHSM%תvWs07VgY^Ix c$?W@!c>v[Vuj\}rvdj䯭VqSE8s\҆ey G'USJg$H 0w&e169*zᐁUC Ҳ6hKr0ر!#el?k٦F";YW Zp͒X9Հĸ]|x:jJv:D uŞRNG޶(RJ#ӑi%/B`O,&/$OI[uLh 1MOIl!DnHec`%Vj]OS^EBq}vXW}3*N`RiRGr(BaelF/}lrڽ܆`|w#!CSy7uaxhw\w6ώ/'cw/5-kxm^61q}ä8vlQ  H`}wK_1s^kR9CE˽ٚ;(lhـIյF':9APNNf Ү+.ݮg]gv/**GR5|ZCG.xYGG:A#QA 6j+[ 2*`pKHgpؐg0YhaiB xҥ>> seieZ;ٕ, `䎰<ѰJaOasElĵu$ D\8&8"a1CYAW<ՐoRl57L6a9izXwp _Ā< ނMF ":az",.FIcGb$@KɟEkwAяNLF0Gsˮծx8 tlF  Mӛ7ҕsy!@Y hdB 3j9 4֤#!t )A(.v2EY')$3u`K%?$/Snzdt;8v+Rju@s0whuaf5C}dl}o[>KĀA)Ðo1/Li09x$[Ad`ϗ=d: R%U+dit:6)@{ npjWBIc) Pثg, >}Ǡi X;ZъM)NW%6 -3ĨƨŞ7D2h8?ҧi nRN8zcAaAwKx:"n, W&utv%hi& ԩ*:9Gכ4Ǟ!8'/;y;p@1̙I? Pd,1c1oc2& _kl<xj}f?&Ѩ:h"Lj٫+/3AvMEA&|M`ƵW+?ntf0Dhǃx{ Sk%H|;i籉H dFbrD4A&ͼ ߪWRشֹVɚfwRԃ9tM9׋y1Yځw`? l ƿ>kDCczv-J1fb }}5^5&.U{7$#sҵԠcuɌbQ~ Ay?(eg1PipX#'wgfWB0]]҄b4gT@uf}BW͟:GystZZ5x2k@Wzq?f]˲gl)}_=|IPKfXyAha,pip/_internal/metadata/importlib/__init__.pyK+UЋO,.)V-/*Qpr2JK2 RyeEyy%\\99 J~J: JHb@ʀ d&)qPKfXb3Uy +pip/_internal/metadata/importlib/_compat.pyVMo6W t֐pQ_)>0\eMIy$% €wf͛Ƒ-wf%qM[rC'v5o,,3eS-<] 6>s2Y. +>)aǣF%YxљP]o5)3>Pya*]Pa-sl"d!Mk5r;hόнIo㕳TiՀ"zq','-?Aa0GމzIt|=rR`mA A#ɏ<ඔd xNk?8@q}Z8!mp "ubA<9 hxpUt Y 4\<}8)bHQJB;k$-P^8]I00Ԟhb{-jڱom025,=ZgOV(I8\4 $ǐ94oec.;z= fN\%yq7+~;itRH5O(Zv9^jc:&@a{&$H'vȒ(SSп1( Ac(gB#.O"/$AE%'_ޅ&s ofx6M|Z<.J❄ ?XgbWPKfXҸgks Q*pip/_internal/metadata/importlib/_dists.pyn_1B4tw"z@]#k6efE6= 䐔?8|j:/ӿėVTYw-EgF6IUTyg= IܐJ21ȢV%/?R@+QZ)L_ o WZ0헴{;\VCS"etֳs QJ {=p G8y+QrwQtF58}X HI)uhUN);{aRhM#&ͥro- ǯQ *U S_Ja%iV \tEe_Zb*w."r`r[0{ Z[Σ;VD-=}wGr33?9# Wn =A3t\ ]^!;+[Y5 pضVhWUB䚅{AʰB4lޣEXV70Y!^n8of'gl H8bb]5RL3(հq8Xre)84ij} (q+Wo,\J\Z~#dYȩ:#VlAG⯐ +H5 <=[F. Zy/+{ Y+WK G1Î'XC,G |D%aQu_ )J҄ foۋ7(0" 0B'nCJnf2z/6xt?w`CD쮎&;~6gֽ&䜴Ӄ>-xIQ -2U´BI $!ՐY]"_pr8g*~^)(Of(b:dz{DNpFᵚXDFh.cL|wJA!d`#N%҈kn`$?>G$eD^CEQ1"u9\Aky}G-A=l˅Žc - #zx$O+(иNO7mB4|o.`ue{ BhnZ@!5C3B>CPCa45c< pNi0]"IԀ6/N}:,3ShVv;:+m8q4[ c'ycݡ[3%[?|ήXCʼfŁ4T|'Lc[^F1m\^i̋O7{MGK. % :;TQw߁0a$]{DKn7tW0d;YÌߠS83Ay !l8>[.]3Ghwi9m'axmwJM7[ & '\KBOɉ5=.+~s{l9Uɛ.^*f״ C#=$e.R-2m-$P.֣M9\B;iCv8dEK7Tlֆa_}lm;V]S+aLtC>:䂵 TЪ R~'2EcpfR$,s5/y_V׳$~E'~tܧGK2/! L?zZD#\T@lì8H7/藿$|ixT"qn.fP,*D{P%X#gBw l~:GҲ݈McXR VI H wP+4"O&% H?]-DL:.Kg(M\}j>ʬZRXCK !OыCU Pvn2hH[{?PKfX*g )pip/_internal/metadata/importlib/_envs.pyY[o}_NX6'SA'.E CH k٢#u.vHPhݯVZNJʜ֥]"W=?I'rDMUR wą=|VuJ} Osx-EI#6[^Ye?NJ[AU& _|lj@Z<}U Ev/C8UF(g߈02QJeUZU *p|/젾Q7Ճ2:-"\?,;Oa62DѽHЩE??^|xM+(O3}Zi@?[v.!l+k+|B*wL&oq15boEie-'Oʒ"{,H~.;&&y9۾h pJa-KcEUU.M@^#s:G<:kʟx$Tή ʲ?ɓFB7U>`$2=3~LJ1LBJȌùYx`~)#HGO_Q<(m6[&$&ה`$ofvV%JpĄ ̑"$2gQ[z AوKSFțS݅r \YpR '2 FvOn"g/!,4rB]]@OGB[ΑCuTPR&gڲֻX-HaLENU+"@}yӘe C 'vl_ViP@IF=oϿ Ճ1kN$gg"\ڟ?t4OpJ>="/hw 5skfH]@ߌ,Ul)z%A3걬ldum'4]xTh1|`}=8RFQ[vDVZt1]CwWrg(AC6 2ɖAFT"뉑VT20p1G1YzAnʶmW]gxL.njgs 6j*6H&yyuUQZdۦ(Îy+%-elB6,M聓:k%^;{턡Kf%\⯏`Bh,,C+k/D)Lt3&pBg3gﵙX5Ee~[2|1qH) '9J/>>Ƅ# E"zafF}Bp?1ޝgH!oe` 4Yb6"Zv\~ox$Bl[/~矮Wtr;'|zߥ#;E 1al}`9a{x'C>ÁhHcn t7^`dO퐦*!&жxdw Qi.ГQ-Wu$a6QK.C'* q^^Z} rx]3i0eGēU Z5ò,FfB eX '*]~EN4_ Kn6["ޭ12^6qdh/0U+kӷo1Zː Jȵ>۫hIoSƀ!`];c }K6*kaf?Xq$7k8R%zڈb[v*y-s6D#K-咝ᯌo5oPI: @];I䙥zuYbY3t åhm' cNi0Gj)'rxpx F?̬UfBB˜Ғ*p-3!$MI<lG\8H@D~`Dmh`='k+߁v+lw7BkG+ztꀀ̫@P 2F/fFvڭ7?șrŶr dؾ%je+&srrϚ*0Id$58~))<ȢS͙cҵׂ XT ;?ϡsOGl*rEŮi7^A!3BC.JCmmdBʶj`Ch._]h}:{|>%$'}VNԺ?%Fe);2*_R£2SPvf6N\h N}r/:ۛɝ\a;#WMS!c> %ݕc-{88CF{V^Om'i2ѥk ыp)]=^mI r8fj-MCb[zc3Kn?7$hfmnvffv}<ì{.2pU|@3&I>HPsxBY78D:~!C8>k,BW6ЈT?a4utoq|X㢩Ʒ1%\舄>/9CL){Z9I`x95vuS0 _ t u:5a<.7 )Fз}?.FypNw7a[l-f0<~ -h4)kTo6ZȉLBD5㩶g7ݶS 4Bep#ǘ R2P "9qaʞPKfXG] &pip/_internal/models/format_control.pyUKo6WL؋*UAz0ZHq z =:YN5ܠ/YV6msBH~3:wZ&C9QoDוvPK7MRwm_m& |*a $o|Da  ZCD>b&Pq/Dr!xQ>rhدHX8-=Rh5*gwRS>.𓢜TS ;>=@Ӵ/v8!5ND:nT~f h[d/Hߑ͖ Kt3!oٛd8pշy]BTtcQݺxf̜|2b^+~PKfXߗpip/_internal/models/index.pySMo0+F H)G{UoP:w ! ["7ol1$!9ghaQ3Dp0ͫy{ǮyR0&$L`Cb oE4d1i* NHMkrIk_%% (B-PlwV!In݆^8[zZv@6O* e~hʪpU#aT=U?\):˥9f*ѓm݅<CW +pip/_internal/models/installation_report.pyVmo6_qpĀ$'+t km@Sę&Y+ﻣ,YRVa<>+gZ+Ƚ5.oM,BuErV,?.ˬ(v≎e{v|J4*G{`FZN 9?ZA(՟'yQ(}%a#Ko@YCʤ!ϯ=*h0~3R!tycMyk$By2V6]AsL̓.L=M#HAYiZQ$P-20Y8²!{e >no?ot<j?)t&\Qv5E;"'XQ>XB,*(DQ O2J= FklC mKB`T.rDA:%m aa\ Iz&ˉͅg}fW \z 35'9 6mV蘩p}eQAu" b&h~8UBiIo^?Sh M+zO;? baB0Zw;8I f$mca$*Z1 RyK;M^6:/r8sPn YHhZ 1 T#y^开:MiT0eP`fh}f[[:3ӛW?ޭϦqoU<<1ww]o!LɃ JQ07x<*M#C[ TEe[Z~+V᭧Ø~3s=7K)iWs&N:)Mc?CwGF #KV>bF}1s:<S/0.o,/hNl%?/00U 1's2~oެFwta݇ TjE^sMn|v$r+ƒP ͪX6wʑ'^jt!g}mEtU $vHQ!5MRS<Ҵ HMfx$Acj]-Ffp妣,i_*JBdmFżk"ZzO_޾}3t::ϋPKfX<(8*Rpip/_internal/models/link.pyst tY?72m~}Ӊxϫ+&^ SVUs2LB D.j\O  T98yfOZaSx|t|t˰8)¥ b{db2 .#NnW f 17  f- !ڈ,{<)dҬ,GyƄ2r<hdKݴ\Xx,!g^U"8I0H)ad(b6 뢊`Gm9ELh~ Ԙǔy`[ЪHr{ԕ84jŷYs%psY-[Y$8MlpJ2s4+%byNP+b bs{@cCek[YyY7 vK+٠kԂu׮ePCS``J\"i-@`QllۮiG&JLypB(# V \"?uM_g3ٽEw3A8tS@6{ ɢm;i1Fr, EPW ;(2b9h0cHYt_bC? p<< J .9r‚ZOloRyPjLPæ.{ ߉6߀0U P ez貢jgl2T t&l@z ~F2 --њ 4*ڨ[* =Kkh-dv5N]e`@c`%*`hlDK.Y P}Ͳ]UipWL-H́X6B(E)nq"y:%Va)Rk࿆W/q_BDwRDE" NJfX;|.n!&hx\fW`; XB&yݡJ]&>T8if8Z ̋FbGrȳix ]Vr58vK=Aw'857ٲ\GԀ -;+s 3GEqGK;s lQ`p@#>@AZcܣ&VZrSa0{ (kwrL?:&Q$/Nq eⰔ>i]D(2CA&iq^zL%bg Q(ۀD"+yYl$(`DjJ\B4yC L"*ڢQ3 $] {㪥o6[b_=gф ň{ ?:xrA pOɚR :S͆ɒZqL6+U/E%v3P)7!<,d?'8_@4]k=%ZS҃ vّO)|_SFQ]$}59c0|%2TG|i+hGWT)IFnnn)G̗ۜwDM \lGNagRpi"Tu+")CC(No&BRmESj ZYu35" B.'oLTܷDݪ T`Pg~i!-vUCOy~vC75uzp?CB9#ܰm8tHEc?qͨ'fDcn{HZ VS[JF q1P1 r4&\|Wvlҟd'4R#K~N;~x'*et[YdR1TSmyמFk jMɫ}KnKLZzPr0"g7 _bTDe@;őMtDw>i~Isq{DZZ:JUs#RkYuDKC>քAq[)ӼT_tJY8+YO6(MYŸk+Lv])͚n< R;GwW"E-\P+f1ʢ9\#e@1]"%5thAW Y?F+F):*! :4?Px}ڃF|R1Qt߄~A(p$ÄAX>!fZf 説[:>{ qB&o9 PL/:p $˼XqJ.BÀH5:qF+!x|jȅ6LȀw/QDhSZH'k;'A}Mq"d5?z5_D,pmʿGžQ= ju ⩩9AN6x3srY4GZ*H"h}8᝘lK3&Gٟcw~ɂe{<2?N=yk7= fHtD +L\٠Н)6FS@:C[ǜٜj}f I}~@wh_r֫"@\@H;j2Eg$;:t1 j(oCA7nu4kJyh2MTNeV<8Ĵr:X7Pe}0쨣J-H-ey<ç=CUZu Bk1/9 UyqQ>^m5ƒp "#GxzzFغjdTdQNQjOAŵ:<&4gx G|||ɮrhpa0(T~O`ܑ/xR[]v覨Fy-zxv_y]}|Q+kUyE"ٵSkV[Q)᷍3GVp-6ՠ't6?xʔ9 oSG&m%#M֗˄ &(,O񙿅 ֞7r#7^zRF!> Ta|Vլ|S:Fa[aA5|#p/a !ϒ# );1baK.\nɚ۷/t#g /M"kY xqܡ[O\DxI8gƪ?fdܛB\a\ W=-i ]л: N(wF66>6&eU9&{ǓO.i䢾IO631ew.ǧOt_t Ikc6!Z8ĉme褠1LKڸRN/ c&mA z&7֟ǁw],Sn[c'+[X;%i86GK |AT&R` jQoj0n,Ll*1W)ׇ%%ٚoC_]T}bMU{X%wZK:{S(o!\4X1lw3%>bD}uM 3N0|1=k141g,8gw$Z7LZHE|5VL5t.!^X-궟_5@":uy~UEŲj,[܏MsAWVPxM 1 V_(> Ue5zDX㉎ݪ cAQMddAF>_IV{#~d)<%׆Y 晵WX 1hW#>8TcN0I>RbtUN_X1S_yBǀ.en`-QSW0>K[0-GfZֲ&A@768?\s_|G!r:VFIu.mL(Q4KPM+5Ux&eu'3((p'pQay3@xǷ2+Q>JQ*JCEtdP{F{I4;JPC3a7-o~A\el=pϧ=:Vԉɭωqww~GK;]Y}CΓu-ʡ$~ KY!unT^(/9{{g*½ Ojb ˰BANz7דFSPXXl ,6N7 #5k CBTyk}J`$N:Z>'DԹv@u7ȬNHyEa`Q xE4UN;]i `3'[:kzr8=e0k^UCR4 /̩X fWJvƿq2B}ff`Sg'sT'RI LЦiGlB~+ SggKz^XN馏+Aֆ8jY08:\=%[PKfXJ?pip/_internal/models/scheme.pyeQKK0W o "EDl:Ӧ̾ݮ]L4+YȠǎP$ZJ:(c b5$. l%qGX\: V]YyK&ʦpMlH]"' AV+ 4lƖkqIjz*ϲھ3\¤Mkybx(\M!r[Rᔮ ~,KuW2xH[hgaRFx;҉_n^'u;KR\g~!{ bNOZMxsx}=!Y4wtɷ17af}cbt Sb>~:Ud8{gbRVY'^}٠~Y)Nl':@-$ uur]J)#9qv3=-=ݰJL}rZT;iD9O;OKfC)>GB/E,b}GFJݾދy.D뱐GqŘbZ]X[N8ZJ7Øw퇧PUfBP|a/x?{8mKvˢܹFs5 =ќj=8'lȢ!nn6{gm5"w:@qtPe/ DvHטw~4]qur<ixnޙ쩺 mleԍ"KQɇc>t+[ 9бJٚlnZ'bsyagP=axyPeSv t dZ?!j \.+U+/36 'pip/_internal/models/selection_prefs.pyuUn0+!)z(MC4YS$KRv%*EfޛqcT n|je~8Ϩ-`rlC5sZ)X!P-GG,< < "ywbv9ɚS ;8#B A paH~e,I&+Ln/]RnC@>5H;>`E*7hKz[>\o1Uި} ɒ.vlux=cjM{jzPKfX%(%pip/_internal/models/target_python.pyWMo6WLCm@KbrHE7fZZl6)T\u3"ͩ:5_73UUat: HT;/,K ⵬Y"T yO?W4 XdiY;ytm:; ڦ{'" PЩөҹvVf6/"YVYɭ zhY Z^eMɝjkaG]wmV$J{ oC~𵲎\_T9NMR;_ӓlue (PJ(ojFVEՙsZWOas(pRI^NJ,zfOLH7iD9{L^U\VѓP Ozx%*56j6ZM a2p>mG>AATE bb1:<\9l(XC=tc79WȦQ[A0:զ眾c\UV8Rq*c6 r?͋|H$Ba m -f]UrtnosL%z΁Ϙ3,8n룥;o,`,ԟ&(6gm2^faH3cK4) CRW↿-`}p-Y[7p@=W9"/|bYdTEI1ӈ̆|$’6!~ޓ̍؈Ba_4ɰ`hƺ2{D].7@ ݩ۽j+=+l\)YL&Y$N'o$xX"d{]WhO׼/ go$||ǾOf=u1}{"~ɤƌf}k"^Cıx0[^ &4MpHvg$ :b%trikrU%ܔHhQ.ͷV*C|h4 l$"<~>G))I2;rh?-No;OE1c/oTwA~O}kUsutRҵG~Uyvʅ8%/~E8sZ*b1pD3aU4k<1_HeQ>CϘSR($+6u=H F򓬥Vq%B-D]ǼEy`xEv)ڶ\XD}ZiW8[TMG,Ɖ!58J==/ "|Yg:⦳ي:?ʹNNʭ6s.j_4ԉ['/_zqѢQC$hWy^t&o!/Ŷ*i@ B#B7Y\2̣0WRR?Nŗ^ebŻOz-,70}nu9׶͗Roiwos^_ۘƞVx׉ܥ\5cTM}l}Ќ<հL(V փ^x v 0[ơV 㞧Z*6D07vr]SBlGF~w` ͂v1FQ ?5/:7ϰ_^\.> dpMNWbq;%d `{4+,6ta630{716| /38,*1@t: Sx 2i;Ż@LYP8xP uFJ32N o*6y?S}В{؎_2)r F웺/y Rd;7.O5?:jh+nk-5GG??W/S{T6vrbuhfa~Lf H!O gvx FxC +0Cv`DWCQ -šBrq퐏UlM@.iDt֬f' gZ9'wbk'Y](4iEG8ZoZ'㫡i #1bZ"|kikG/K{s_F:똮uElxh"pi0 SQd9;Z*zےČE(F秈a0"x۲e:iۙ%ĵF$eS=gE1/Z*dšY(6yA⊆1 W9\GӻSkU XKz @ `i-^.Hu'zJ= i0Ic|ý] K5(nʄ~|4kQb]3gB=D/ }F:LqYqx<@/<=FTǹTKd|=o@(ws ̺Y1Z7Fp=\B j^u;y܀3JٞR D&-C#cNDF_I ғw9-:^?JgOzgoE3 pj1<hdw~D@rŠjҢZDYC[v\jSGRRf{o@Xiy΀ yax"yFى)OZ߷)hC> ,CŰ$UpѷڼÁc ff,,9]ŊR,(i/*f QcU_&'/chY'{dnXۂҔ Q-T Mj$-Q*Y7?=%at4e9D^z'%{eR?1Xȫہ&6L^/f}ƆZ$ 1c%(Lm@DP`d$ӡU$`e|O $}p9)q=su/XO(#Êj []s Za{y@; fuIUߖ:Oaή AIUFxEb7gy ܰ~n §koAt9ʑ-:.wPG,,\ UYrjsܮض]UIwdțl0C[L@W1d5>>[1gg&Mv35F:}l~ 4̠39<04ρ`xnKZ OV%SP/%^3u K>tXe<[Bߎ-s<- :xW"$wWgtޥo:Yn&K98Piѝ*DȢ$<= 9#Ów}=.fئ=k8cAC Ls?t4(GyyV"rGp+_6 >nU6^.ĵ2׿g OrI:7m5@Nr_y_יM+8>P}U)!N_J} c'q׽K?Kߘ !~, o*zP;fnoͯ-q~3"cFg8kݣr[sEʾúAdp1bph9upRk䭒3//9,o*8?=|G`iYݕ-KعZӁ$ cLJ A40e ۯAH%.%#=YXu-;x72Q^0$lثS$[:! ȡO\X%5Ni lD7yc6uI&:Bg! "xo[7>lӘ RBR?DZ#uJ\ 2jx bة?긱a:]7"~BnСly ;6((RxsZE嶑D5 7BU4XJrڄ]%n rq+27V'pC]f KSЍA8vt ;6C=(.^8S*]JfX%UuZ\I[,&;<'s·}lVnAܪ;nmSSbky].BsDI)B&(h>)t>Kz :Ճoѡ҅@mt=be$=u$ kiI7#"[PKfXOѲy_pip/_internal/network/cache.pyWK6W CF>..R E$X4Z1+*Izx&ma-oAj-ld׷ءrIdZ% -j@ۤ6R+ĝ %nJ8tfvݱv{)07 pdDEI8>QU>dmtO3{K]_ xS9 >`y+lZY\-I#C|5ڣu؍DQ$u30ط4J'm9GeJ$I*Ayf1m(n ǠQV\]ڡ*ml]Mɽ~oBTm5Q}I%Ak0V'= q1 UAo4|Bn@P^ ,EU>:C$9Jl+ Ky3-zAlދJIVz{',CAUdxhdP8 E=f,Rf,I#tvP`TM9F:&'A/PaqV,(!!03(*ãYAMKv yV*rD+/+9lCvqVf(Rw֛en7_~eaD'@K[Y E؉;r]~53$v)XzdEW Dä`-1 =3^86JAf3e*x&j}34Qկ|x[KHBQ!qKcUZ-*Hr=%2rb=T:,DOԞ\32jМN4:f Py~sgRbdU4L)R:,o =;vŶقu 5sR(h ci#Ycl&$zhu>E(|y1.~+:}ϑ"~|}k%`0wʠ0&є?@ V LeSQ0tG?[kYL@bP\`ußF؆R*Lz1W ҸH5G0Ӭ֧*ݹ) .t;ɱdI/z4O{[ݣ: 5遅:.Ҷ3fq|2? v?'j: Oޣ4|\9; -\7:0jQTv^&?tx/oqhır2ҒyOOBۀɟPKfXPS !pip/_internal/network/download.pyXmo6_( m.Z,k6>@KE5N#Eiw;:⦩-ɚWLb#R7%/ReQQVHMXMyհn{Y͆7X}˔{!T&;$]UlF>V3rk+-o5d*E*T|dH􂲬xWTz y9vb)U`F=7B^M r*gPvxs喞21)~o 4Cק?͈\|-d4;ov\)FUVsU8}:WoJZ:V\[E8&!/wI7fyFQT51[ܛ{$4Jɳ`r$; 1kζbe\*l6^FĂ$j ^l|F%Z$o Ϭ+SςӉ0 WY+;]fUR޽Ĥ`Cg}#}Gǂr $? ߒ/?w"ᴉ&[0^ TkGr]]j72(- vOGq6\`PE,S:  m$v1F")ykRiX:;Zيb4՛[Zw];wħsTHf6e &Nx\\05`0.eMj7DB~s ޽և hbZ44)r^C{UީIY<&5/7X!=PB6e)3ӐKF~[;Ԇ81#kZU+Z\A$m?f \~ !T!UG6o!)J+Bn0TWLC'%CuLY6USPHo UX%nry )e% CoYorۦ,gg[Ǒ%H(~!tq6{nw!jՉ9%Y`jO7-R5;@NK?bƬ^^zT-i2h~QxAWT-xWTzXWg8wpI?j= ?ND@iy=ԇzeW9:29O>A&'8nMhSyPm gbwJ2pe7• > Q3SEnB?Ed]@Se!a(׆aMRҡc6~_chY8 nVq ;g fw33aųj[:w\G<{Ce~ϸ`hIyz2KF̱;Ԑ<@t:>`z(D׽dcvLJABk+Nx2^ z$cӿ2W1מNy,PKfX #pip/_internal/network/lazy_wheel.pyYo8_AhVޓd}\) Zl6#&bR"%iD7C&\d7ػAfI‹"I؊[q+ |.u[וjDD,Ȥn\Uq'Dg3miyuCVe#Bn:͞|+jľe!:|/;:7PrQ])((M"LMȪEںc-Yb-8&ʬRqqBn*e ,=T&:Wp7>%>oUnRKhx xE/#W'*b[جeєR4zH:e| .\~PI^D7i5|c]K][>l\kBWOΗ3?50c&r6Q!׈GdZz iU8ƪWvS~;H7|>NjւJr ~.XU&ݑđ .K.ꆉj;%kbt&p%XY5qRHxDٴ"Blv Zń>s5{M\'Vg "΄"Hy2eQZtoXJ"MV~yusE$e"@YbIȐX1@8R !#?}JL3Jzn4P}2W3uQȇRE :.T2YIN[DV(<٤ǧ˔ՈCUZ(0bw7k͊R6]i J I}b( $,ѐ%&I"·!vP`t> WNVF"{ $)Z_ʼn\0mYGI+D@XaȪ:.MM,Ip?R&}8h+SވW9ȒL-~DB{I`shRd|wb0Hq0-4.JН"zqN`s0-݉!"CWC}Azu6A\j7q0jFHtRGMۖ1S\5,t`4mC) 546vd]j'r ܗcל Wh p j ]D~cg ePAnkYd/Lc^ns>LِA)X[qpC" \j0 x6Jp8TZ=,_X@hy5 ,egK7G j3VkW ;[O6X)!x[4smj w矞%lt.V})d]Nhu vY"( &]ڠb[twt_ :HpG>a-&&vZӝiSVZ5X~W lYXvXDrqz-dhWH"$XLt@4D/)]%|7\H %To(=bT1A2G#<0Wa7ES.Ԡ z`OFPQzor^HH:[E_X9vs3sB蠺0f3Ai=1C`Þ.FR&CН S$astv9]y>-/4~t6etH}p8#ؒ.{L(Dx{Pv"u?͕%0!sm-1(LkhӪ>x֟~9V"/;?77K@f…n`f TKJ 챮K~mU >1/Ly#Z-FzyLǣ^/=2{@h 3vpx`;oLFޟ} b$mE{<$Q jzU&bBnlޑ-LV&[yFźznY Ź/t1 ( Up>s|tzL ;h0 ]ayb'+c>?PKfXv5I pip/_internal/network/session.pyi6pK-w{ U~*븪I[)1I|xB v&b<"wh޴^C)p ؘ-Ye ;.P%~9e^ AWuZE"{emDV N%K=4(ڎ}KD(S\bY;/+jJM9gxC<%3gjXC <`UTjZlGo<7R5L>l?)#di *5h奯NH%% xFm?"oxW:oth4B }3C`KjGQ7"@ _Xrw hSF_V#ޑλR|奰Z\*ZdVrx2*sU#åLlqH%Xn6,^ i;w#;"{SqNbj[-)YN0qUU-d(w7M8N_g"C_G>9y~E (roALpH_bwl$4GQZ(@'3GG^JHAwN3::KpP^+r6G^ {QzhA@kXup %!P(4՚N( ~ KgYYSuKTpH ߂ZU+YͣbW#"GR)?l]m훋o槿\^܀ Ϋ_G=?,]d %(~;pؙ,csKe1eeh(4ܖ*h0 "1l4h~,T`R<ADO:w\ Πci i:6=w<{ֲ6u _sa9p)db -DHWpr7"0`I.eBv;` '"wXjl7FMJ[hGysQWiYGV7I? \F`ɲJcCGHr:kPhD h/>R' 6 ep>#ѣ48~ݧi;߆Bng0XT q]P4@viȰHֵAo<l (ZTYծ!+$,,ہ1=ash B‡GҲn[0ͣ:l5|>F"==؜L&>ɨ{$#aC70_ rҙV;;1CCp /2 &6#6lxZn| 4U-64':I4@P@COVv nf@n gw .jH3b\3 Uë닷G]_`uA  ݓOBq (& 'u .`]:PNr4$fZAkO+}hD2@FAPUXf8UE`Dy]5R'6384Pse9sܞ_Jn@/$:wLH𻁞^\и2洄V{*Ьgz9b`/_WT:X'@!˷8k!(6.85fҔA,,γ81V 04Um1>?rFw @D$ IWRdu%%`"4-)D̉Pnj)}s.:}&hCqnXKP3[u_Ǒ3 zS15SJL/U vj44q .1U#yB Aаl1W'v|qsBy 1vkI7Ls^MM<П{$<M (} u 霬v`,RbiޡE@}>I̙M(^8 fn6|l!*`؃:UF8>r gwr?͞5(˜r`7%ٰYpF/Jv IP ^ Zp::Vf ?bLB16 m`02@t>ViUg7y"?s16mPUVJ  /GptW.Rs{nVgޜ?wk˜ ]g[@p~X͸٪ZÜ3钫!'̱qh1 @e`$HznpGҤ1cT|[BQ{et$&GO(|@W|@z`rUS-4աF +# k2N9NW+}UIj-y0`jqh(4p0EEakN'O۽>hr,m 3$?إ6P>0ELwmj=oȴCTU 0.F|0٧v\]`6H[vCnX{dcRɝEaD8[գ}%̢KANJ`8ʠ%gd^o{889}bIѷj0`dGL{%E@Ql/]L'+.8ShrB_tW~5n1%n¥?5̴'K+kңa'i2'`@Y= fZ$ cFxlΒ&M숰r9;ؽ?aEPPF? ecMw Cl)FK7Cq.7}Y瀽M<^!ZMd J1WB"GJh(EHU* a.p`qL-EL勩qE:{ӪR|ONWIå .49{=+`ڋ5ϒT^p5_fpWgOo30pm[Di("`VyΣ~|N (NY=S5LSM̳5FPgV7=e/0A+]aU jx#x +kSju[`1FNy-߅ުб޴ O/14"xB T k"^tp*횊xtM00^Ĉ(gi^'RNui̳1x'vEZ,I"PzbtS\~1ETV,f" Fb3[5}yhQ6 s(*H#Ύ/'W8HfJD*]F ӽ2!myEU5hH )"ƄRW!mL5!{znS 复VQ'ҏ|y)ڹkfmn٦ICDڠ|e"/T($DXi S dE] :a22/N譚}$ Iek@VЃ*{*.k5\K#9ޭ͢›4:Zf\*9 ِ%^Vj $OvK2=!b"@3{LmKy }͜5wlh_>|%ڊM#el*AMP>;\"#ƲdTA9 3\JfC=e:}b$1Ư)aP'  01~$_O5{s<|ԓ>M|h͐˗09zE>3~!򪮜b=c=9]qtFG>F,UEН0^5^_g2\}ote"lČk0a߳iw':65oI0s{C1I˄ў, (=;N@FJx4\ފ5/z/+MJop'Eh/ߩgL_~Hχ$FK.6!&wvk5Q}yBϹld&-xV(.LTbj %acwX8˨}4]^|f녚gC]dCӻh)W!{Iw1s&bbvR; j1AijNR''+Y}_ 1#zI,dy()ff|Q7֥Wu*Mp/ o K]-|?>҈`MOׅ\ylr)(zEA7. ɞHH&{ܾdg^Lj4|p l0dF\4d0h4jz5{>D<2:A Ȭ~A?o `lb9vJ8:E Bi;"l^'h B'YѫZɬ,U~洍47^#~ 9cBzpa'DQ({ˢ&ܥ< x'!欂6˔8T7lq@\vyM΂M,b{K2[ߕ1d-̣g!4xv׭rǤW˦k#w_5YPSڝʙ)7Ku@oC8LQWdە̣ΞKUЊ:0GݽT+YjM 9PKfX pip/_internal/network/utils.pyWnF}W [$] -"vA ,ɡevVޙ]^DJT2˹Z-3@.3-\5UӉLfCs4 *Ĕd*5)!S:YIhWJ/^4Őofs/~$Q+v+T%րH# ("V3I5(5Rt؂La&Dd|4>'Apzzp:0ƇQtBn.Cp*"& #rJ5yC^ ~"EЃUD8"L1.2CX4ag<-VbmHE*T sK(CrkmZLH!N6 dg^ CJ!dXKDX9=.3ri z#gQ['0*Zv8ܩ!4T !ajWĴo/Pi|+˥aUYY}tQ J*Г&rIa=jJ{FeWFbBh~KDzVshp4rI>@Yc,Xڣ}^+dxI蛡l<H9FxC1q9 #p*3UT;$;y" ;7חW&n~4V>|Aw2N?^^M_ݼczk/p0u: 48H }j`+RyO:T106"H_)hidJ* (`m8 rr kDƃ3]SK(Flȇs+QHWWTR74~67Y,V!F D`ҨW]). Ͱ:z]ȟ— cc:^%wO%_߅bZX픹;eq`GZVom *Tࣁo6׉;!z|Vz"rINkw~gkXPOpPڼ+[8<]IyXfP /`Gw\ W,Ǿiv_CL."amb4eJWn>t:f XQ(fH.ĺuvo)ܒ_ M`Lp`,>ö5qgMM-"o)ߪÅɗ-2W ،?X_jO̊v \-1;MA~AD=]4;JlIKGcKY`?݄e;Dk̄1[~-m U u-gXllr֤DV-~խچbҘj[nLC҂6wMzH?"KK&m,&& Cvrsslڂ(TC3_O^CF殛&͓ PKfX".pip/_internal/network/xmlrpc.py}UM0WXVjW*V U&vv[϶Cgg{q4=iJ)0\FGġpZ%i& ԻP5җ6Xc"&"$N .gww?InILlDCP±Ʒ`Gp/JAWZԂE#+jÞ ֆY$E=al=hS9a=oCCk/޴u &I<`Ȫ} c,IRrkCYWYl],* lbs,O 4WAMR,cYD M$֙tb-'2E+,VkD2r x aOQ6Qq`6a0:p6%blz!e[_|[AoVle ʠ 8Gxv& b+lܖ!ZS6XY!\5grEM4T ȭX@.Bz0}=V.a2d? 0"; (0 $^\& 3pw{mI3>7F+b4)=0bƁ)hqW2jN\?W>DX3j{g!fuP3MGG6ʨD/%&@ ɾSt} 2eϫw[к2A/-f;}d=ǜIvjIZ[ JK^A*0sg zc'(u+& n{ncՋ̚g_=gb 23dL7~]eZI8.;؝ |kL p$u'&JM2z qAPZ Bmw`Du@yQڐ ?=[q8_ٴtwcjݬy"]q7uAA/D{sV}|ᣦcG(swֵ0 cl)v8~Sq8IݾN/R M'{ ` _OQvVQćpȰ:J6 7<*Q&?p} .޲[o׶'LsX[6 V ^zOg)!Lقۈ,`>da&'s|l V|1f\AK j xdp8F{ms0O= YW蓗#&~gl %¦'}`䍙pPԋ]#TF#&5?Kc J n:S7SY.OAGATҦ04~m}ysndZ}zǶ|ŲU%вPKfX6@ &"pip/_internal/operations/freeze.py]۸ݿE>h.)$M ƻȢJһ,w$Rdi Ʀ]#f*u)j(R%no*b+ŎC̭e r~)sdµ7?m*X_K YZsS6ivu!d3ӽ.+ZeΫ d5yR!7=+>U̲FJs0u/nU B؁׼Gd_=m\[j=D¿r(;jçtd RAP?E2u++Toz1{jlQGZ%*D WYO?}E [PXqdRʯf-Όb,Y,yŕb+z+ތa$C jeo_[_ >u |+j'Je+—y۽9N>T 1hվNc0s٬z4' DϽsқ=Yc,%^ZyavȌÎ IZd3Y9Z?.ٚh:qOebn4t!KUuNRr_!ؘ$|==x@xNZz\w;IW8<,;$L.>;&KMrgz/k( -6TyyhԝW# 0ؕmh aHD$Q.4LKLl~'} X?~FMR1ERʜVZZP;eHSY9rl{4<4=yGemv7 p .wR*M.^N1qDT d\JQ{D@{iWT (g zj BgZ8K8O3JF3 s4S^1!>C nqS~? d%Iq.F3"B9Ͽ'W7'C `-u> g@>H+!ZD(’قdJhua|y̱@T7q- ¤)CmR56ëPҒڐY¢X>˓]-`kcb<6SyE-"z0u8&?ۯlIaŠ.v@Tߋ8!%rU`4XyT Gq`L'Vvl L븖tKWʺ;Kt^]:TW^Ҹg9NK2zޕFXg, Oa#$`/$ -5=_im}i2_NL:.7d^[8ⰟtiEO;YL1xM?߈irJfP G`cQKn" BfGoE3:bS4٩xPuQ(R"b?y[nBMM=fX*4'#i#f-r{ E(dH@CS7h\ED73;W0֗j(% uw{4 D< x21qK3|5s`֍͔lu46sFjПIݘ8k;o' [ 4bɠ^٦0L#xiƽN"f83(dfq!jQXvCXn57tܞщyxU{*09f~tqR\Z(]EǓr#ywvB[_}]ke,-&?dL@F Y7O߇ucn*~@sg `^~@#CFݘo",QX0\9RŖ~5{x^c56`-6b-Z_5Itiʕ@i I{qdm4dyt^?ZQ=\%=m74G'qm"Ne5q̍S+8M j ".1r0%&y5 EQiRwTMZ_>B(0`Ÿ#M` 4:/]*,Nh|Tɞboݬ[+'%Y;O1P1 ,BUVf>BX` ct4#PoJ-OCC {ϼQwLZ߷UVN\,RPm{"꿥O`%>`tĿ64RA&b:?uI"$xqƸ&Ҙ]6ЍlyݺcapcُV1݁E'˾d+eD i$ZIsX=u`^8=:+s8^W؟Q襭Fij~P4B\,GnCS0(uQKg?w X4&tX2а9i77m+L9Rv6]Nǁo$OܚkrCzoPKfXӃm#pip/_internal/operations/prepare.py=koƖ+"aef/ݴI4Hv"P)idHCQ=yPvRtXu-qyL&{ٕTJ }: UۈmۋQCY%~q6LN³noZ^6PPoJ^%| Wpa80cwzh;\Zɳjߵ ^N*EkR;e}۽ؔCKGt尫y>?A媖s1͝iXUW,odi+kPnij]orٔ{Ol>}^.'KRa_ 0~'BORhOq98Zvg~oR6se޹o6ƌyӾo{Jf n7-XG~Xd#ܑf#?hz?gen^LT\\aiF˂k7V@-~nf۞WW{3}bNJ G0M{mq2>_~.ߧoe2sϷWWߔ͵|\,Րpmy6bff)xorEcu ^=1"di%-Q,֪`u~-d5"J9 R_C,2RyӣҧVd8صOQ;>e_u|qJ{5gÚz)a=%yw WjiwJu؄?j"X8Od$FnIvy>c|\}3`w=nZVϗbն띄Cy6(K2]EN)W w>СG6S{F ɗB4S*%vF!v!^ ?.:fܔ0gxc3DGyLyB`LxYMӌ \Jjb.Eݮ5KĹU.0:CX!N$|7D@KZyñXAbZfosJaaC?fv/<:7~g |T>tVfAdu7V](ˮ;V5հ\Nz4G GO:l i=_i"w>GSޱ6闞q̟)gl$ :ìUPNAn\]5Y\&UWH+: XUu/+f9~tOjbȰd)?HsٙYg[,^ddq=xZn}hMם`<}>C^fE5DNL9Z!MG63)]<4X6Y&E5(iq0-p5L"N!0Nv;? Y!pp#F| R +AS'PX|ymq*4#X̒ؽ@X+6 _@wB~ *+/Pry/Ơ g;'rhpey5V4{)~{8Dj-epQ>ڔ33&a 0_CN>%Ys>ܣOs'v?4*uIΌ!R[8lq-)"BtCV̏Y2-m$c#=F=[ɉ+t#'d ! !od ڦ>riVgxܼ)[{){$t%OCz̖*Xo9/#u1'lSVٍ%~z[Ds3ñBg7{+S MTP]rglU18P,*CcȤ0m-x/mLCI3"έ@jY$j"DJAԑ5cJ)fN'1dn6fUx_7Cjc> LDזO.b>y@8U! O< 28X:d|bt>bb{ {2DVaTS`cz 1tJ&ԩ~z"?c9pT 2^=êv"Ȕ ,. wvP` . + Or ͐ nM$_` KPg I M T%4 熘"D8ti C GH 8[-Hvo|/徭~G|Xf$j=Dx~_̘o1I 8&6iBx.k\Fdt^d2L%8Yq2c&TImI(832` ?4#łzȀˆ*tሸD:}nb7h1+Sy>]Ek~5v<ܹTgSjq/7fdEt-Q怜j קîR(NrO,_u}ńÇe;Y:\VWp$ ,~=XI(LMiKf6)6ś;OL;^ݤg3]S6sLeqgMw{v0EP1FM]G4C n{KJtH_ƒ:qx"g 쭪xkw-ӒDJZ9f)MIfd=ih~ӍQup-j1H٤v"(S+ٯt ʆv]xaV0o.^h7 j}WQieەv[(+ilv1MFa UF>̖g@K/r<0e̸$:`HTC_`OԳ8-C ye?XI8hH κD{+$'0bd~(MNH!+uX--<g(} z 1]b o^xPVv+IS_f(4jW಑؈²d%zfgSQ諹OF`N4qfcˀ%O.mjFq!Ε/X-:Uþ}9pE!pcs3(!tĝbh'lmLg0QW-%K4IsCQE!}r}1Z"3*P0puΩ:UPѣG{\ l DjSd}>X.f xN~4v7]\!,:VqbנԮ#*ɭ)Ŷ\uayj{Ȑ{<qtޢٰK_C,ͽH o(0lƷQwh ۟%Jl%&l z+cԓ a#n=|6YC&>1m\]ihގQ t)7[jM y sq맯?ovɓq3On1:aK;ñ7 qq dC0DNĹ3ȍش Op +XV#WyȅB@kmEׂ$"raL`,:Ph둯1F*K bxNs lcռ+ cjv&dAbc 25Irn4˙ uQZ+˧W6ɢ[C|OvK.MfEʔ}*fܥ.SuI("3b0N܈;U⢉Fr[YbDؖ`̨F]o+l6Q'-]+Wzn,!PbS2~w27RfITiv3j@r3ՎDsDF_P]] 9tKjLGzpº{`3~OL(Gw=!U p0QNӕ0ڕ&*NjL:视^i)J6Ёn k j!*nK$Q.57J2\o+i[_m-V_K?iSC^<4y8;rCmҝv!؝^% }J6 V u'`+9x~&gKͭhҮމ` .)Z8U(b೟.Q qA:kߜ@vwf~K?稒:h{y |drO]Ԏr?~;f)Tbv~ժ6.BU0\p& N̶aBQ[~{ BpZ'{:E S?hl:e:VrA3pԀ {`[^y֣= ЄA=\\Q*Qխ225Zڴyүe)AQbee8'\<$zs; iDhn-d0q Tߖz{tň@% {G>8k.Nt^-y;n~BɐI|t]hc $^ q+?}VGTJ>YN)ǟ;: 7W[mkyS6#޴جf|qM0WpA mrra]D`?'moCcv ONC #H !ܩ`d3?M}4r+v#``Ơ%Đc"aSwu}u]AԮ >.BIG!P-k3Lo g-OpƯ'Ѥ4 U#j +~QYً~9fϾs35@U}ٳ ҽ|%ߙn m#%Jd 8PE/5?gO%Ǟ M#FU#2d)K2G~ |61rg||WP_kcF ǽPNCȱB_<=]xM ރ@}QQ-nlHsM7ff죽u2ƣ9hш%c^(EF-WvrB?؊ZN$9yBξ'd)I'b^}KWw'"a\s} #g$>ѥ[>AXrPjnko[V`?[y&D?NC֩GӶo% ggLupE'Ȅ*1i,A5TluUveYYLWxn #BpG}B|D~J R;m=0:A/jW 9yIMj '3$*[j -BPHؓ>HzK }{ޱ1U2Ɨ3|o.yoQy}~O(ho/RPE83}WhEL8Lxq΍u@)i-th~gn"7ˀQ0 ={/^Gհ;*ؕ{T)u_z~.NJHpo'EN~TkG|?~w1#x'lVU 9uAtT \/Gf*O`^\7%1Kzè鯿K P'dG'W vӕwPكi ^ޑy^}MtMG{Ƴ=M.f8xSokx26滰#ͧC xӼ3f&2RU]!s%!N!hSNk d3uG۩F"4Nٺ`(/,˴F5b_KoFT VC&UaLH 3 DT@L3; ,xs[po SWo*$pBt/|Ĕ*:glNTsTab s(a>vp E 0/?r@C[k *dv+s6`-F.NN'y?gAiz<Q;J?2vLvԸ+?)BRkLޤat?Dh[r{e'm/C+/W9 n/{8(Jl*1hLߝ^!W$ (^n> -@1C  4w9_F*KnB=]YϦ,FOꕻj^.\wSW\IRﲹ᲏{e*tz yáW 5/vQq??PKfX*pip/_internal/operations/build/__init__.pyPKfX;/pip/_internal/operations/build/build_tracker.pyXo6~_A(&= 2m!hi=BKF&UJ_63vw}w8Vhăj&Û-c76ݣ;}yix!VZ,܂)0i`Njū#8 \-̈/UY<k# 妔'+9R]wi+y>f Peb͚NBi/^[6.uf^>@qVz9c9n6Mi:x>;x *Y2Ń()sի/@ { e.}j ﯯWZkS>(3m&M!^%2" x(D{?3F'zpdtv#7RTeV3v!,R(6rC]VW1#G?>RSQZ+E5GX[+)SH# ?'FVe.+=h ^dqQcNˋoߟ]$ێ0;{u\-+r#ta_{/p14V$!lCLn;9 #RM+$俢d!=ۘ6!S{H 7L叢<iZKHWog]>cH>=0/nc,*USc )([_M8K\n얿zk =\K⡔(n;a 6/Zt|Z9˲+Ru9QTƁ_%uұ:P̗Cf4 {&C8enoܘfkZ||ߥ /*Ő.j K"bZ /eI@#Ek6Fs] ] OD'8ȅQ%;vtʉT"7ƨ>y%G {z {E/=[ЇGS2@v|l1dJs2,g5KAf}4nd2QȌh)nmsW"G?AO;9v|G_xK7_]h{j6RtOOG|HXQTd* c<ڎCF{?Ռz@-iZseڼcp⚩/.U=\xn6K-mD*Kb` կÀ3@]w0]X_(˰JLMAXiyK3嗆O1H ԓ0VPKfX~K^*pip/_internal/operations/build/metadata.pyMo0 w vݺÆbP,&fkK$Ϳ%i6.>zH(A5:h̎:LCP䃣w}#Fk\:3%۴{ʸ3w؅7D=0;'i94xE_=9G%#|ЦgRv.{plzqu:0CzbEҀK~RI}@o4y_LѶ,1<B97j9|3<5l25(V\}?$ >@]IxR= ۛ[xC#/ 4O')5߯ݥ߆F"%ZQj>\԰̆/uhGZqVbqX|0fhZ 4!R {>ϙuh{`mv#5/昣YV  =`yPZiYO\j~!S5w"zqJPKfX',l3pip/_internal/operations/build/metadata_editable.py}TKo0 Wa6z; ;t Ŷ![L֖IN?Jxm^G(ZV0a-8=AHVcr2zЎiJhۘ{Z?88r7 #s}4h}`Km28 rk>x꽇ȶ>%159QcA>GYRoTmHECϙ,oƪXT唘MO<(VmVF= H>2CAmv l #泙 _\傮]>rl/l`XU'&u^>ª cˠPKfXe3'pip/_internal/operations/build/wheel.py}RMk0W [AҤPk)BkJdI.uFiFf޼5: ei.zwOtswt>aKbos8#n&>Ǩ 9DJ]LbSh/Bd1K?f_-# 0:aQ 5xRM6w?KЈ$;IRtǞ?.2; 0=~lsLUU9?XӍhd=D>,gyD $,@6nj$1?'ܷX[QuKR=G:e 4-RFa!U6E28W\EO鷷)z^CNvM5#*X7Qj5֤XKlVk%0-:|EaWڣ'4ve[.%^({2ӓmOş2uid@PKfXק>0pip/_internal/operations/build/wheel_editable.py}TMo0W"za&ʵ,816M` h}=oy ARP-i-i)z?8$bU OX9ilOף5OKf6\ ttBZjңVhg<3*MyhDXΘ=2VBjl }C(RbNpo֙]ܖK=:^sY-@a?ӾwfЏ}eY>+<#=\!<=D&u((F, u4Dz c5ǘ({4sw`o:=Z)_J5cghP<@6%q 2gg|;&)9 mwgcR{Ydsr1"A/Z6M6¤ :i4a PKfX} .pip/_internal/operations/build/wheel_legacy.pyVK6W0* HVHC\ B̄"ZXgЃm <8 &Lt]DݫPPCJ}D*OW,r.r \a 01/ⵘQSrzLfoP VQd!A͕c岜VȾe-@@bB&@۵,yCYQ5n%$"YYY`F#hɢܼ5v%;}r&}\zIP5Vd ߵq]45xȆЖp=XӜuAS R`lm[5}{xۇwF ^/-:㴝%s:R}Hb3]/e7`ljU}a#(Β@O$DdUɱ(Gl WȭLϾS"=)IJ1V47p؞r|iľk9f{Y[%-M+y& sbR*_y}5tN|$G&qb}?-%S8C ng{ Zupف!9[*Nw.:_Z ʿ ʓÛ] i'{wɊi.FYF=R0n˟YM*zfPpdQu``db?qc'C5 %j[;2渢s #Uy|a>c}{]`!EhwzfVٙ=k_ 0 7"9Է'~$Y'KI7m`?vIa)o9vwgH2Jc?Ova[E<k%WbM/3tX k4"l9)ǣjMI|W8aL ' A?V+;8[ZtdcYlAZrq,G?PKfX{53,pip/_internal/operations/install/__init__.pySRRr/RO)I-V(JI,IMQ(W+.IKW(HLNLO-RRRPKfX$e 3pip/_internal/operations/install/editable_legacy.py}T] }WMf`bvM2rUȥk]E="̲ Z^J6f>umaB7TтJcؑ"Yd`.B)OCD+WN;oLcʕT=M X-s)l~JO+iND 3#3wq0ehy弨6~&ڣG>2߾MPNc%og7(U45ą\xvwK>ùR329JfeU括i?X,%BlcB>4!9i66yVM2}/#d߄dn!}`*XZDD$?Ƴ/lKp@c2{\=;iKTZ=% 8眇v~Wr}8 Ll1ZQn'k8 Q,]@^Ā1ԟTߐ:+Cx8Q_B߁s5X @U9YvafL{ tGιὍ!@`Xש׽NvI]q?JC":L$Q=n󸁇MjPQh^@>}B61pDa÷ۣ/:F$Cj2=4aGpD])ةKh&had3_aڴ#w# F՛p=+XBz2a]D9Md7Д@nL | Ƣ L(oXE?AsadEA_ bɨ`^sB.#hSEsn_lƱV2T6AwYKۤFӈ<"ƻG?Pl(xF}|)5U[$ ٖ:(sHsXdRzVJ 5U m֋C*2uZ ѿ9ω`^} -t1G.Z9P 3صt%yThhd6`:r30vœ*39z(P`MJ=u;o3M#wyӵP"AL`l^d&6Rd#U\bX*oMgLa\2Us'` f7RK|zբ Ra"#@>:/-QRh4!΄.A'_<~xyz?++}59QV*9&X " *CfE'mQg :kLJf'ZK;Gţq%[^zECzqQE4"v ~ѷ_?;_k0U93quffR14=uVeoR|1Ɓ 4 jC%j`̸:{At8>8胧9ü۪<ázfuyz/ed M)LaOP!|aSg,H&ǂdu?-?Jɟ'7ĥ/lڳua]rvpߤb#'L72r0*⏌y3E0 3H0r aF7l$;OY_NY5JO$%qpcS˥4wL߀^K,8Ql wixkCS?|VNZ3SAa)Nz1> 6I7~`{$Vyp_`R]%GMǩ B^Oi#`I*cME lWpSXfjJ}'DКJ LRP1VmBSu)YٳRQeK2 0TsT J_̶-0 UmЭccE>%.^ P]&ugoyz" :(_Q^E^^lsӂ0V:P#%+!/78DS6Q$q z͜BEN}F,l8kru7g i)?J՗K#ImG듒Do[9M3bW.+gM.:Rku?le6/&iհ~l57 b<rG&0h00}?}`'3>ÐUDGq DC1<"mZC!c*l W -E :ŃLxO]f7Md񳊎˫ȗ&%3e`6nA&(q/4O gH}[Ƌ_|\~\b2[-*ZW@C'pp-\j.EMW|8|Ԣ R㠗y΋`r,v*Av*S XpġRQ1/@E :q?wFxXn&Yö| .5K$`*F~\ATL_7 O-#$x*"'&)1d4D֨ #皎.lاH kϫ_SJ׌.ش?YH#NqfGB)P8%‹K`V$W>"$HI#:O"y4e-X\K:l=k^y .j">4B4~0ގSJyyx:O#/+";2߫+9l?[F*=q%B.K- ;l ^)2E-teC^T o9t0M]^XA7;el g;r' pxn=_n6'*5٠]dub8mxiH>I^q`Kv৤J((w?vGyL"/_(ޝY7I7Lă!ɋ0^v,w4 ?,|R,D>ØM&Tlfz90rH;y9R4H{jw߻O LdoQFτt 0ҚLOÓ&zl Te!%f2JlV=0.ǀYq"1Fς+<i]5Bfm]i sA=a[ g;%E^ sA19nHVRFcBRogdV]*q72x60v$0{S poJ> ;I߰ʈvpۄ~VJesro ltrFFG. )sMVt%ݯ<|}Bn26 ]iVwR3k1ם9C_vtݑbpiB˲.CuBzds3Q4ZE1U: <s0GgLy23e?]peRo&,Sx{  a,^3&#ǦU;X% [SKu EڋcLobس#\_u/eG0Ei<1˸ξӧCL iS-q4|ဈnh8)S]%3)ޣp!}]>겅ᑭ03;nxd㗓{Hև5YG}xO\L#'.a߉wKû{y%\}Sc礪" aoյJŧQ﨣Sw;Vf.HΘte~ A#I랄axj&߿ӆR?w][|pÀc?o{:,Xey3mE6!ftG7  fthtT͂R7>GT>R5sAW1|/ixgғMQ=;NBPe蓡kj{@uE_U5#BVBa.~KA#gn/bZw欗f8ᒗ e9=xwI2)J,~^%ѳs ݂vm%`#t;J"=z fT1UȰ^P"4enF9hc+)19.K͂J_X ,!կ\w} /`NROD)~3v#'VwOೌcoڧ7O7!yIoXgJB/xj^krdՆ~juhsD|$iV|}b0O$,i=Kܕ9Ȗ4* Pdrp^-tC;6y7KQAM_%|Ł;C.n L)}tW T)lR=l w?5z8-IGmIixnB0vدk>Mo`6 sЍ:56%MNMv,u <Qf8Ր8>z͑݀\2@Jn2]Z`s9~#mSA֕묄54$qG-3,DqEcbCg xE|i00'Pi=Akg3ue7Ϟs{!ܣU`W9K։ k=/NzꙢ+"T[[ٽaSQ1= Q՛/4AK|ᵗ?:G'GOW^5Ǿ胘ɂzx'sa!{/'M/-'VBWLYWl# ^5w{ߥ7-<߼/tCͽaqhDB{ekD{H-)5޽X Xo1ߒNroI_pqX>z[o/^D;ǯpDZEFyDR6?p'`72h/ۤX]|c?T}J_SZa*/A1ߝztJ1PA.T*)>H"(mr|}KWJ lnN'Hv:<%V-e`ƀ!~ {AfVrcssΙ< +} Hw҂FP[.L12>AZѦH. : P\C`4 a ؀w`R!!얀]>HfM2hF/ iI# )N`o,T(͒$y=U$ś|Yċ}+g0{=za%cca}Cd"!'}85JXXeHtkD * ?' &'VfL%Ա=͕#/5fa]ˀÞ:2A|Dw!Z)df#Rʆo'%5WzOJAc៦[ݵRms~墮K i.U{SGz)M"G Pଓ38Z=IX&XΏd'0"U@*>4oyegz9>d@7˹ц+lT: w7pݓa'/tS|IlF6S9 'nL8/tp=_9ֽ5xȢ0gՋVNvo,^42O?\%~&PӎٳHYlnǽa`d;[Dkum,6&-ҽnB9lCC%6_rqzR)Vot?nw/\qKe ~1<t\\ߕ'U||ύ1ݬE`G@3n/ZDINm-[~@?A: hZΦ/PKfXcG!pip/_internal/req/constructors.pynaRHM#,ڌh+>|#ʒQ1{[ۘ}SH]2f8\~@ b nXQ*MRdHXϚ;A-]e,r#1s.N5_!ჹ]T mX^\sZ39԰=h@)G35p Uz7(/ 0=5Y8͵Bygwm✠RV fzWs}! MC*y\Wza[ަ9vMٓYg.mE ܯPl@c1xRpA-."5J-'o^UiD͛ },dfoX .Scd2ĥ܊i5zZ.D&h8uޅM0y77]._.beDjWQqSl^aqiO=Rzޘㆷ]S bWs=oZks.f5h5*KQ6\uNeRIJ#1hC+ܚ37V!5+0" |a,s&a Dz t[ .c{pc"]SP$ EہڝaďdF5|'Y yx t-RTwӕR^^ *vm[W5*>ujd{mVAxsp۲jißE?@J,w6e o}5SQ)NFwNt%$PCvYo#D[fM0).&'0-3VlD ] ٞM4Zf!S" jP.KWh H2` OB 5("U1G&xu>=Oxq?XKJwcFxe (GE> }}X}sñ^}!TEZc=-w^l_7owBf٭ gXu : f+'ѵ}Bu: -cWa8Ae3f\.a!W8 t~Phfb,%hxXNP&Vt8бwm?ë#NsyMJ iZ<@&w=iBjm){3`au,'nGO}!@q2/Sqh*h:*Őܼ tL`'/S@eTX)Z@AgS4T0Hb zҲ 7꓉&bNy׭Ʊ̡R ^g% do> W2 -£YSXXͬAF9.ިPhra}]SjwlP-AtMR.qtOP/6Oy8dop8LUB%iA/H$#>(6n HXݚ3ᇘ/#S!SI "DswuV== ź*'{g]eԈUPG @vs{Q$ADÃnܰFu2ksѪ3( T }KQu:(j_-zw}E%U {8{A D횸.`]w!F伂 vH N" s&;b<^dX2С$CvI9 7sMQ!"9# (I*LZ['8{SFW_.{$$IzA ṅPE;ݚHrz0)z50`E\p}lSLϘ2\e{ɆŹɣgڿD>u6{8.\ ,Æ;0Rڡcx@EoR OC`zW"tɄw.ZIW6 (*.?yF$Sx2ПlIl;{098N, φ`lRfjFŸ7@uy\Rg ѐDIasXumr$8^mpӈxt`Itҁ]9sPyK6uWՎڧGiB͒ kY*!`}ͥ#܁Ɇ #=Lt$̓Ե `B'yHC^e4$&#fc6wQܺ vw!P2(O 1KwdAS7 ΩHdXdZw_g%DCR8g ˀٶLuW3 ތgƄ`wTގ*Ff {LIMsv ;h{$ aM36Tk &kbK P4O۾cN>결_cw ȑl]L߶Ќb(T#ꑪvaFQ}¿`z. DW?ke2ݞI1U q'Ӳ@E_Ij" ; , ;ꔽ[)J\P"׾ jBŀ.>up6Pn L .cdɪ97R P T-!_rL(e Y u Du?w\2tMѧWV$iǠ b쇏^$ɛ%à6r2fh|;xcL׾&f64Mb~l_ ⑱V\t6mn 4vŮPv [ju$R Cև&y&z>`g6*P%(+4U=o?WFvm՚4Se9>/0rtkۭj@IĪ1Jv2]U|ͥ̚G}*HmT@ *YJRF!l]}fCQ>3PjGq p9lU JK(FE.T:֜vwO  \aN` a/zJ^.p`_M7/kGAaWחM=iPi/c@GN gyrJ~Z Ⳇ0-[Ec{lT}Av(ɲ 46xSS>:U1])ƙ8=)F yP0q.[SdtBEЫ5g^B}eN9h UOIff~ɢr({2>[l(t8BZܒV׃A)(+6) O ْRJh11pxMފMz ǰ`=8C[Hj+-@KC0$n&MnW*(\tn蟕0#nFZE:8$KO} Ԁ:'FzS0N {47#aOiWzjsŌo%Dy:AvudˮBzK7u:f.lF v4t38ץ8FLȵ[hkM50 9B*OQ`)Im@RTB';'|t<7|R=`dyuGyrqddjJWpi*gLJ/xYRq{FBM}$ao +O` CMWWt\c"H6mj=jc@ږxtUŜ>>Qs c]_J TN/ezxn!y!yi߱ɦZ4\uTn&]b 4T|[N ڜU!B6M(r+:CU?Fz/0x>K:R<+gtgpmLhczd8SGK?N8 /v[:ӳ'ˎT JqvFsw9L^Vc&Ho_̢0ϣVPKC%CG+z)MwYREt+R薊_]myG) Շ5s:#*4z O<%xopjF3Gޙ32vAR||2R UH \ģ&<Ǩ#g8QLYN:b $|Plb,f;u莞9D`>p~Oi\2C8JϨYz^&2HO9 ԫ=߱ `e4.}nOO$HS4M?O)wnZ?oe] 47BS.ͩuO¼7y80Wt}:Qt8+LNPgy^9rD 9134GE˷[%gMފvTlXY`[q-[kĦGߖeqNL9/{.d]k`0]<9]d/x~Rыj'_^e_\~*|Wͻ|fo o+utE]:0ə5EfEE, =vUSGk?-+ᬱpѶ0Er50Cu1zK M&ucHyFegXwtղ^9TV 9p}{F*l]~oxVCU҈=΀othy &k~/8xM''o.ޝGz%R|;9Hꀽͻͫۢ+ĉm;&Ê=ۿd?x7vWtm8Xo9[#5r2+yDS*n PEI$=r D哔o 0 uYwW]NxXnŞ=}}l {{X(hg}.~\~wDᇋyv~:ūٌ°2Mө-+@Rt30La ԵyeeP$ p"se6d-SE1.5}uM׼W&mr2um/:66NeZls0 E^ղf׸.BNׯMY_e>"1vL }8ūsƿk~T+.'hP1'{8;G6I='-Q?JS~4d"Y]J7{CeIghY802+gA ]I|9B4ښBdZf캮K[v A.q3/\!WpL<u. @3C׀4_~3Kh|,~5C8Ckl\e\oQhBU=c¼vEK=JWB*>V#SfKiM^pfM&hsU]=xt }਱C^ ω_B+hRR#r<P"3@ZV=8) q,QINz$~? @O ly]qSA8 ݃_IVXEIC Gmx _m{ [NAp0+mBz= GxS;+[k<.>Pَ}'xbJ(DOj)d2&˛QR+ G0hF#쯲If|olu%\Rd |,# /ǕoD jzw=pZqr6'NA4Y ~Ɏ!U4;F]՗ޕqCֽ&iY&X8  ~{뾃ϕeyiWcY\]Q%*]%6Ƣ |*a駓|U> U&xK4!SF#ɻ-=m{ z14鄴:G%̒@%f49J)0)̀Su7')Ebjh]C\x4p- Q(P '|.tի ~企TÇ!LS^uC,F- R9%1݈Z8f _h8_ kBd@N*jtJ`E)(L(S9+^ NgdF1~` 5)8D(j"h[f&*.3}Bs\{fI+.Tq.qI 9|swo/ك|i`P1uUǁijT3s?Gg= K@:ޫhZx.0l{yG?n_iU(dQN{u.|܁AQ`1Afu1m&HHT:wWB</ yu/O2 }(|F)%T2s#K m[4dsƏC@ `IC/vMʼpp|GX xʥܞ{^߂&⩶i8/.9^m {z4 xꖓ/G))Uӈ0EvAl9aTn1Eo1 f gG\?4d 60m8dȑ2o9s|NKmm3h{[:;{a}u$XG P +/TNb "5h NX7WyYxw&3O]$9nt <4"ql҄OӠ&m&6 &u8v:<Mݝ>F,_.{p!L&b~Tqծq6t :@P<ie" S^GJ );ʭ ycFBݑr=qZ<)ԈPG%q=1l3x"ГrCp@SOtjhO2xf4rd*CG;qfhkJC)+w9mh,o D*sv~O੔J.P8o?Vwt݄eݶ}R-&%?rԤ$x22gwEN3YNYmdSQJg9OƇqɯ_;V՘row BL u|셾3r͇eP$”гKip5{\C\ANiat^6J%(=SuG0'mËS+c f]EY]ruSWKo*:DQÉ KX꛺6V=bXr\ۗPt/KC< z>-Ctoh6Cf3%>W $w W_Wg 6Hk077m7iÁXqߞ???>[Ҷ3:5{UH>d۽^;䡎靖ac{ǗNc9%=0C@hyhQjv B+0qy-U1[`N{Ũ&m f 0$-XMutC'  x ;؍l <_HMR?BZ&5rs/t@tF0ai$ZbUV :,E9d, ( : Z{LZ!*,DȂwn+\#uZP@Ck8ag~a{m"+PpA.3Y3A Px|Uz=7 g^[NFC:.*yYr2HRjtWB=(/FMI5˥LPChMs槗<_רHBZJv{bpP͘`Dz3ozo#*f 4s yUxd"9B f鮫,AIyAFdy+0kפmPr&8\^mæ@軶"YPqˮ/ͥUwݢ@Ij_q+J;Yza$)(ZE`w9LciУ,٥ @ 'P  ]A}x_@)JbӔjul,`+e{]6@㚔 \ۅ*w7=i-9' &2nC@E_@-OTTcU`Kc8R*M/wM ^RĬk*d6.+[އyɍ@q Pqq7DN(&v gR8 `6QhSA`; WCpS5"E3{*Y%􆉉.I2|(#v48E]jq~7 dO[g~r߹I ʢZA7#shk<QC!t'/_݁m`7pJ ]wV424?Ʋ$KQa`3ѤzW6FuЪpijUo}JBM-V@mY5v P% yKz4| _A0/؜f i)% 6.FDY*$2u3.5[=s&@$F,J h,I%n=f`Zj 0%#+n U+¹Q١M%`%^${Ջi mF5caDvJKPhW"bn@CX͒#{*iYP6 %3CС؋-IJ󃛉@~D7z8A* O;r$鯪HmʝZ/]'ԪaC8m C$VLGJh3t7 (o48zWø*dFB*lsͮ'}O^]p1I.Ħ5\kg[e*Z5p/8/? ;p^Ec\jRܥV-쪊*+@ʆ9'尹T,"Z (Xs<@PC !}CPՖQ|#3$6e&^Y[Nv6vJ7m4*[WPV/9WZ{Gb<7{{6WU6:Glt+DeثBO=X!MdsCgőSvifahv@m ZE)_׭Tp=Mo.7r cpk-t=E%.i] dj=.p)^w'V NSN eW0r[= ĉ%XS#躀cƔa X,ҟ{l|cfZxn *IuuߖErA>C1&Kf kz5f%V⼜GV-+fIŽqtKXϠu|H=J}DXEСkz.`r#GQrl|5RUSw7KL'QXqwo"U*mB[G؆ yF9fKk9?@|]Γ^MKy-_Eb2Չ> \ˮHJJlm203m ncH'F4 ;ecwG-ư̈̄FUI'HkŇiQOARW)Is95L 4*+QMV0b_S< 9A3^(+5[j@XQUk6ktXe=2W:|/MW1ʓrd2MJ܋%1#k]!b|&{btp\`ۢzDF9%[9t줟,fpkI*gAs`7!g6+̪_r p0leܜDi8&瑦cbS Pg35mH]͊Qjfܟd`oLBTj[YWXVt$fG|dk8%m4# 1aU.BMkeL ?%نx S,? B=(cHkt<'EUP~]UB\6nD<ɏ?hG#Jx%Z3/.ւbf2Ȑ,,˖-gS^0Kv~Pe ;m[5pL^@돮-;20F-Cg 5 N]I_{sU!M.--2P m59x bbfº3;Ts -L^P@ 5,Kz,`.)D^F `=TSD6[lmU\y⩊&c{%{ 5 a}nirP%T\NB{:Ml,P\yF-n0A2X,K6u/Γ4(t:{f]ę?&j{K7ɧ2$SOGόMikE]* m`<0p &T"~ғ;~pc80uPS0#'!y(w[kDtƽp׈H YD(p נyڃӑ3c|nw_\bQעL#:  qbq,tN;M`Xp"q(;*Ok* [\Aɗ]8%yJz{ѩ綳ЗT"&VbX*%x2}kw;6aiW>5џ_tmGew*\_A4_PH >Yp]N;H 0\dxx!p d+ QSs%/Fs - K⁴i?tacm./hv?y!9?] O,,~+1RYi)MdzW󢒃ZХj nvo_-sSH;Dnm p  B#R]wRg#$Kn|w;K$Y<4,I1v떊KH@9<Œp0h.$dआx~_1~T(vLTEp<Yyp]A"P^h :|zs{UXt"ؽ8~.-8LHfaqey 4i؞[DULvķQ/(? 늺mÀJGQ\wM wʒr"w99=aȜܱ,:e, ˝?' t kus8PDEACB[NǷYV!!k΅-=iD|KsԞ$.cF^e_,5^Fka|I$I]̀WKuzhj x,dK1<8ܰ1XזF˗; m(F[:l;#B+ÜAÉLb# "ȡ}GrN U6HhTl&|Nd[UceӨMs &O:\;Mm2H^f&>v)Mf)0X9LL4^ʠTL1;Ev2ѩQ(闱;4;dm'pZiE>>JNiT)e#9:{2`Я0H7: `tfF0:9sJ̙"Ii/$!k0%7_b]:RBKq)*>awP]龜 :,Z(Z B=[é6 E%b6!cu;6Idppj/W~۞2I?zՔΓzz8Bk>}0Jh) xEY+;ei R? "$zCz T htR2Tb8p/9Yx{txSlhxL 18:vMz!O|HA2DhzS8"Zm(F9 O ,weƍX*M  g%XyJ>50i$ s* 3[(ZSfϹlQɓ?!ZֆBdaP qt ]AGGg={|MK?zxčza0 GQI)+Gqj9cr&"@ނ"Wu7]\׿foS(s?ߺYۋ(Et) u7CO^aF_GL« ߘ? mP%͝q"s}k'%(^Ƙ`0;صy|koӗ[Q:M/f tOPDĐ3]LN甄A&:E>&Fq9ɷy1s:UxxoPx!.YI|0\hzU"TٮIk?Zdo3ê ݚݒmp.`u?>8DCE%;o h߄`~7nRź=sk Nbe3Jr[,bn,xJ}f$~z'Ξx1gg- sQU1{<:Z$CI= ?(!C%Ojj mJiU: ]-%.h]սx C -O;GepnYw\6%Yi O绩A +׃gDv:ٰ#sxF#Yiak:A &]=/9&},?99J^2Ȝ\ԥ`ZS@ u:~oz1[sE5i1t}zb;<`s*'zRۭ/u |"~; t;ʛsaOhy Q4tMV#:Rӥ PKfXE* pip/_internal/req/req_set.pyVێ0}W yJDb%ZYn2mͺv];3I:ir&9g.vQfAi2(k(݇,FR(aL@g.?zԺs~{p3t gh'IRj=D_15ʤGAN}Y[D簲VSon9x 6_iu(%*(8 (0+&(RƨY> 4|F0%t9dyDht{#IA|edk9Wz>AEiwwM>Bݪl7?5WiwRHV8evc1F+4#i9uv)A--6?sO2No;yڰ^Wq/<MA˻"Z} ::d9a`:?+V؍ VIo7nkg앇+Pkm+\FV#}wxeJlˁF`> /"9.r'9oq? ϶iq ʯ5ЇM~PKfX4Oq-]"pip/_internal/req/req_uninstall.pyW, Oh͚+v*]5LfEꂍ7wk y!aJJ[s|VOg5Q: Vk2aCNX 0eEY8t6z w''}wϖ _,SՐ'!pI?UBD*<߾:M@`.Չg\Jpf>ڗsD#`8/EєKB--xi~ՁD#Eg-KLrkoV/bS v)!9 ] vA+8:篿[ڢ^d;uq~+7%(dm>W;[yGƜIuq8AjPaER'$8-kh ]^e d,sRk( pcpq ɯڗnjFCd=D -؜+#@&ʦT4A(x VU⯾&RUsyq+U QKS>2E}"vr 0&EpE&"1i! ^L%j48j ! .Z,;F.R0љmQdPSԺto7RP%^0}.jY܂n7I36 FD.~*w.Gnk"xHLŹ_9u *C:d,{8=Pvi"Dۇ#.ax;h6w`6Mہ3WE&8{ÙMFvP \u 9s;DqI& Q@RHP o cRܟ7`p@@rm$ 6ZIpRbBw+;<{̷J9y]r?jnX &/G_I|,- ډ%2&6Bs:/ KފN=9&k9zpUg \;cg}.MTCbQ@RбeŝRV5YM ;aƨ;6c% >$]Qv82pp)Iyl(ZQd3@~qޝ5g9j0@0zTFDhE0>` H&#tbvl@.}j%;J!YFϐh@%4jx琛c>s4fM![?mUtidrn3ff{\TݦpF`vuAޝjD̢;rr-ϥ%/r |*Cf#?vwVuQ-N_Tـ֐O%ݪ?U/ďf0wxc2*6w4Jpե:2您6^±+aa4PRSg12 Ŝ }S bW 0{J+r:Y%[6D$"7ޣݝEIY?'ǂKXm@#M8 J!0P5mPUE6Ldty@B4 pU5vָzQ?e/PL VO(B)OTQM&>% qC+6Ī2$8QVI^>"!$1g!w?.)q`·@F/Fa:]CkDhR+8`Oa P]ҁv̨بM1_Jx&/ AF,piW~}A"D ,W`s8kih VsHF{SQK6#88}`!B8Kv\G/\^9Ca ^99iK.8l6GiIylwL>ZgsDg䥚_>2уlw |7USLh;U@.I N3̄Eud1WJ$p5#' ]v]{[#@dEŌb71i21/h$6 uoxs]{ )zn_Q"//-T# ;>{'<bUr%|9@&XGkNQjMQoB@DM+m 3t By r kFB& N*HGБ#:xP-flm l߶LL}сPy4s` f9 Pw5kH>a7f. DQy$Q ItA{fD@HIA#őL;'5w#gdw\"<  EC$ʣ{R`6M9lslxį閞UnAf`BghE|@nQ+y1h^۪ bj`ŁR8?t ƚIgl4 dZ~^$2qdX/.c{kݰC$MqHx|@A@JQ+j6HVzWl)uXϕH4] C+`A_?p4NޒG֠# ? ɗ$4z`<9t]:srf:OڈٵG!$;(/yFYяLrlb1?޵aA6qVт~'MS)j{r/)FZny 괠mܜW݈/64Zٌ Pf(̠Q]6:o4Wf414t=ET,!&\6n˭ˀ(̹ݢE>o9mcZa۱##R:uk&r9M7VL#$iؘ4أֻ(Kva,f'3@dŝ!,|g<V~qOd>^1ę?tV|Fh lw.!ODb~=_ mGaYtz؞6WcEGS[6e٧OHIB`=L$Hώj/XI&JSAa[l+<{^F3V]`\:a[+ҭZkW0[%"b''TʐdrTW,W";Zw@`& bGM1HrƬS9}.~7\N2*̙)u|= nH.p[@R!)4Zfb4P@r@b$u^e CǬ=CP7i+HyS49$$ V!Xnf V"Ô!|y8ϩ;!s%Q?e)GSV!F~26i A AJҩe9DBc􂲎Ε <.7-{u@Hcs~[[o"H)]h) k+N*BC`hYG(c!F]嬸ͭcJ聊M,'2yH(?JףyKϒsන$'űmF1Vi>e&m ˺Z$gћTL_OĝBiA5Pz슮X Tfhֆ Ѷ^~ynumrZ%& )xn3 MMnVr_VrBAlxhnI8`.鲼%=u~nHˠPEw;rv~߾:F#ʛ7;4Sm}iBӞ<;ht$k6C($D5F`q\?i[iU#xXojCvmuwllD*R{4^v@j[V@)x*\Зy*y q5es!E LPO`˒.(N!?x>ΒߧcY'?ؘObbhsl=qJ%ݹ\zpoA<ڴ6A3c#ރjwjܺ 0+ M$?%YlwѺ腯w}D{ѕZ.?LTn!SXKZv=N]D!&03fif`(>1Ep3zi_oQ>4ܝaC| 5dOv<н[$'SzCsNx +~52[4+,# ]jw @$_h x $~u-aAQ]#p"nVk9b+Sw" yfntv YPG՘UȰfd63=ͷ$5tb|EF5xA_jyՆ$u7$қ*ỾOk8NtAEU V'KVoák5R:D죦go6GM䜮ʚ`}01'5&Sf@nsW!)?LlTbA BJ A%ғUv@edKlX黇z{xPܫ)Y<@C>< +| `59 Λ`8ږ(@zx:?XҌoW!n~ndDX ZE[ck3 lmqy^,@QJzXzTc>bk-rƨa!Z,6Sel6@8¿; ˢQ(d Li`*0#eeke!oPfTP7 `)@G--({q 6\f͡IQ@Gd-İⷮ9- ͡ctZei'_R{=82ۦCͺB +lSD[X1H@W\'΁h+ACI*΅ |y(I2:gG7?y}$߃ka8t@|6` xb:HSQ-c?P A|Q?pOi)T+ZIVMN1~-zYP(,Z$͊c.VsI\xa+$?6q(7!2k_tqL~@W,"i3i7Q M:Ɋ* &ypPY(yFgmNXy9ubs GIbϋ*g9YHcywf%jz^UKj{Xa<3> Ҏd}FENv4Ppp5U^>yDC!H./ cO@@!bu<4wp H wnVpVS>DB+7$F.c XPDP#O0 =Qa#t񞌞c4bZs<X,Gۋ{,X; ϟhf=ʚv@/&H{Gty5U#1 tlP!q'AԘ5`Jb[09Cy03qd6 ]* |hZc)ػ O_\ GAd߃yzEA sw6'GȜ?HF$/ !cB`A xWRv"ǟ,E4j' .)>Aa f&ؖOW$\ Y;[8PtK#%q,̍c~}MT,eҩG 'v5 'BEP9W6꿞4[݈%{ E|(0a@Kw?'"%hg[ E=|$sp28uNg+ZJB P`0g9M{t7|s9mI\(X!Zd9 r"2lK-$8Tnz}!_2 F/'K(v ?<3 #>M'Ym8۾%sDN)O0[勨go'"OʄxlP?9ZM'm7QCb_ 1 $0!u`TؠPpyV`L`]MI.s#ýF3p>k4C4BM(:bAҜ[3$xynk T9Sdtfmׅ@bZh8I+R~K# TX̎H>_&tT7&7N+1uZ0[ɁP |z ^ոpPp&aw.OARՃ?,$(&.\ŨJS ;5h:%a|8#(dR!;# %#3N$;΅R(ir(3Q$r󧉕]_.r{.3 %(hU;e€DMS0gg)Rj^ׯV[b#A/IS|5xx0mR5u8j;M=QDpb*?k:( π3+2M^5Z DG)'Y9ZŦfZ+OXߠ6= &]z -8ДOFOJ"4)Dj 9Q^u۩"!jS)wЙ/a 47T,v@xGS^JW H;piq`'t=@*zyHřDw NN*?/An !TKcaV7`{ ḵt<@X4-SpPyy̅=>B8 !^qY$ ?$Ԗ8ђC`|ŁwXHl >Ch $)Ci=E+PpƗ)*bNXe/XFf42>'+}n;o{#!-iWa ^%`iRN;st.!A<"-@U+xF'm]vxu5S/dP ˟yw-JPe]_ |TC p}\$PDC:ͷ7R, H hMMr|*25|}GF!;DԬĖx|ym5ǐX{D]^ K*TV=9z E\t Lah{'AԆĦiJp? )Ӳv0͵ۓ$eh}*Z6z(ހVb7 ^ᦋV ѳ^zY09]\|dwQɏ =ޒxD}(X{2r1Q9 ~ u!X+:$8H )l.ug}j6؞D$ٷ>5!{zDn󷆎lNy ة/M]a#i܀p#6YC*㜥/(9Lft 7.5(As#ҽDAW@uuhl]gDT;Drw5t 9(F{rՍ.i)3 ye1 ?g[ur|BXi+n D_ڂ5pܞ{)3)jėK sxg.7z@}4&32=8jJ~l. kmt"8X՟N<\,d#>oyCnOU< F|[3ȧOFZPOɩxUy_4Մr8%L/]kF 2Xo\$9Rm1o5G|eH Ǹ{ISuz:z0s5]I~}bEqC/ Jx27B:^=~q N~#3=SQCx/|*ӛcUo["C-v,K G8ۦ@E; FnxNN5&?} I.zy=\v$#GP*ϘӇaʁvPQB.%siVήgmED^vsGY\93|2GҞ6e*h!+fq3gZ_śQܮgMy4wy+?YMaAQjIIښG }M5P~jl#O<_%G7<|-%]Kb V F\%=ٯw8. u EB\E+1UsNK&/[iB/PKfX/pip/_internal/resolution/resolvelib/__init__.pyPKfX+pip/_internal/resolution/resolvelib/base.pyXmo6_A ~ Cm CaSFJ#)~l l9ޑj\^\kL{44lzݍ '09;7m 9!;z[H`/|yuPO{D#@{zLr0 BRy+B}pLMw1Qt _e .Zݏ/whD0GBg +xІ=^36bjW$xW $.z֡Q_aEX[^.$a gz%?Ce; ||b9c?´QG4fCQ`1o%%|iY.4ԙ͒HIy"#: 5׷jYb;8(P;Bη3z PF 4wf-dm[XfUti.]f~4 ώ*235?|G"!iF~#mgG"Bt̨A Qo7,VReih=IvdnƤƝٝ}kITy~+mkAWAf䇴LRQ$Ҝq Ê'9:!_Ta/1&H"eaQ屜yBqU]n<[X ,R 'ak6V+W ^i]Ĭf@0Zj?2VWIYk{IpqFefESr'&yM=& k-nC< :J7(j;.4!iaUnzC[#)E0D"0Ac\Xٰ`ccx}O|6 HlBza/۝n"$Mk #RR&`H5 բiBnnH4c2ҬcO+QXD7px) ͢(%\Q Z":iHሷqГhz>WJ,4::$ %j~3ocN/lX-cSH҆(~z2U\;0ePQ9s*(ůVw/^̴U?FpI&7"U A68No w#3~{Po @ٗm¨j#1̣ɺH r?D)=z2"!)i#(d#}S ;e|^Rt^dHrlBVh= D{F#j-*wpVa^Gv`率.4ԟT'{S$1 sݠʚ+% uliw ^j'uSݻjRwO~ܼ\U8ml{NA{wnUQ" {7 F?ɯ%[*@A`{sKw/{8WqQ7,$(xtMC } 2g #95f \Gfms'?e?UHx 7b[_{'q,D~5_k~\_D@A6@duK~rmD?9ZSZ/cJK]޻w^lid .(Eq1up6^ISu@Dsdy7U#J)3% l[@ y0Fj_Ax#QP||]';.3Iױt# </ͱ: G0BpKspoq@"tց# !(pH,/AdͿ;sB-P` GID w-Y$ox/v(+pS'tBic٬{.H\x.*fyZ~UUET~6xn^УR#B!"񻣷e&f 8vxz(Ntm4,)Fn0GV&psG V:N9 8|CrA0|Ғi}7 6c>~Rha*'8(H̜?4fQgꔌߝxV4S=X;8{Āy"h]{)fʶ 8Egg _FSHlya}кbؘ1`#tzOa'b#D87!ޡ@.4;**67]{#kCQϙ 񑜍D?ֲ̀er)MxeH8-sɴTX댭dw=BPkNp.=۔dr!hPۂ3"O bp!tP?7v@ n@.3\+jBWLKel@KK"At4} A,}p2I`K{ĎAi .06ezytxWN[emYTiFGf SωI^#͗@^\VIFa㟕ɥ@B\w9tfo$PenА kKkiU&rlR{7}s?Ͳl\Vxpe?dQ|TR#[5փ6 tLT"`Y(V˙]zP sv_? ~8]kFqhs_ܩgv.`raG:;y`:ѐzu#&Vs.#JylG<;TPRB8YnYp{@8S#U=Vr MV `'@ų [IQ V:;3L#M4:1I35: w*u׉NK8Ģ.'rB6}d&*9E-۫+m 6 XzQAd"L_pýjz#Vɡd#? j(6ɿh髏8 C,rr/'_,#e*3 4~n>/ܳF&ONq:d\^ x ,[C ܶH]l9v˙k6rzK_Ƃ,\dw٘RF!&/}a.1gq3_3tXE iou:d5B9:۾?[ɽ`&6%Mצ*>II B}5N@qz j{l #aLP AUha>Hg/s؟]5}C̝@0-:ArHJnƆ bi!gtC_u+ױHc۝Frˀ ,Vi$xҫGwo/}9eX<rv5Qfţt΢ \ST减kF{_pЧ5=3=pаC6?=#{Hv${NM40}~zأg9L *+QA #wd6 Y=|H$J)5p [i^ r]6&q -Ή\߭2֘.+ca/Gyg>>NP#TJP!Z˺N$ϖwtW'$}8^@v5˞@zZRu9RGc[@&7Xí:BܦM wݯF_+slBӯX,!>*'>:P'#'9%Cd3>brJ9|>J "-0-u!Z?4)ilL\"*C+ӄ%0MRc\?i׊˥r ,mY?tZiaT.~{ >Ql=c5UI({QenƅOw-\5i{Ohu#)G<1<鱆F_}q%p4j ܭq?4dGrͧW>>yN}b^fPKfXV ~.pip/_internal/resolution/resolvelib/factory.py=kƑ+|K:\v%u9^r,Ū8V6[0.W$e'wUW*[K`_3e7OjdoC5rI]w̢\Lz:o5Z*)g٭ʕXWf(E{_]0֭D#n #Mp^-M2ոۡ^^8ưFI=h>XZe UJPM}%gK\ʪ]0F?fV.B%h?1:VpPQ}; Má[K%ˉ6K6ڪ>JTfAO`a_5ko[TK^4ajxP^-gYFA|Z4(@z&|L\~$~UfJI\A_=,i '+Α->4!ڧP,[`$ӈg⇱u|znDrtkڐcYܳz&S˴K(Z'1y2چt]ޖ ?>(szؾ0&4BxY5R9z.^?w=lM,~|3}'nA1*ZVte~NUB?6~46>cB5S".GPJ Dd:=VޢgTV *j(  ݜSFkRmhS03ndOJ@g`'@8bw}&jNgٚbDA@ &;u = c brH@8`z4FnȶpI`eGt8pgVc|7g "e2nHAn&.NmsW %|F7 )O*zAJ=I1pB=VLh铀SPqHGz N[]3NhԢmk{D߭OsLKaYm9My:MFd%陞fͅWi/{Y>2,GWhA3{n[RxmӎO.`CƁanx3j eX"E^QbXHqYǦ3‘\5 DܢI~'#D~r}f='iT^d#LaL3 zG tǩÎrMp#yz]DtxX HW-mw<{siY.IY`/a#YRf;W/^NRbBa>?S(O1 3,(f@ i)5Bw Tl3`^h{ lv$.ܚ|" vq/$K(X`3= EHT`dCdT PnD6//E/Ct5hЬ YUfNMs hoG2#fc$u Q[$'NVR~pF y%2b+P=Doo_VAգ A*jt£PO8qàL,I?mg\MVMCu2_grŐ 3jL 8c,NN`b p&/R{L5Kg j]^RCժLh2$| Q>dsUV9v腎m(mnpmlPɠi%)xQ^G"0^^tJ~2Zͮi@ŷ?V]=l -_=DW eJ+&`:IIc$ELN~ U\qnr8a|1q٩ݪ ֖t}6Ͼ;4U\Qkh#$iJoOTu;N`#. =)@oB F ]cC, 2AB&Ю"!BPo1i9+ArGn4wQWtuY,HG:jszn3KPI^|'Y ߑeேZ4EyוhUAw=QĹD7XM$GcLaLa;UAT H!hJ]uդd'7 h͉?'9ߜucPFH3)B8ø!귋?uЫ5ڕ9j]1~,+ðd=ZwΔ v2hR~@!Qc^jfޞWEccp{'fY j]'MǽIP|BfPDCYRMa^nq>݃nH+Mi P=l^v%C/hl^\}q >q%j O;޺ pD'T TL/:!eUmF,iH^Cays 9B-zA5+O.EX!U>\6&y:,Fz.I c mV m豣=*&&C{e E8YoiSIvK>~a瓧1 ڴ㐖cD tbl)JԜ vFwL>DRu=:E\/#ƲQyspWᙫ~OM7Udh[OZQq5u<ӵ^WמP-cp;ޥ&3hbER GT(HZn V qQ.2hu%&UtR# %'uk *nYq ˤS:wd&8|M j>.2-9ӈ(Gz$P~YaWlթ *;l P:qrrXWAUZ [[ԨFAL3Oo`)=V9\4ɴϐ,hp,ǙC:Fg7PUIUNGj6q,ǁ{3#5c7.$: y29 ved; V"]!:z$v7Lͽnjz Lj쥟6)+eB}l` berucт_xK>OPJKSin! Vp|&r͍or$Z 9 'À?en]PDH^cY}3wڔߌҰ"rҥ3ܴ^G2*q6oEjgV&Cw!T?QXKE_%p3*]]ØF NҌY4QbgN|ԟ8E,ܢ,XbNxL_/p9zbXWy}N::^j_3z]CN AS 6)]+3Ljn?(/W@m,^BIT~!x ,JYL0au|hh SK@5$X!xnEdx+* 0\F.:ay_KÛH(lAg4NHqtͤpM\AT" f0&;ެgMvk Hg/m([P$.&цչ#&Vc 99HE~YDw :`9!Dw9C&LAF؈8788 L?'8Rçzs.H6E$`D2n^9i񌏅rdn\?u&J(}O;bc{1ߥQ Uڟ@?3`3bo d YjlvHxa'ͥо(Q%XuD*(xa#*o$Ue]XЩqvU&i灘q׺h=MWȋwc C¶hѾ{t--ZnB - oV-XqrJ՞ⷈ(ᵉlcVB]ǮI1gAW$X ?t""۶G0W .Lӭ@r}/K(m4*ą4QǂkXi{֞ұCxlz e1kgD_q ԨoLPgM ~[3 ,1D B>YSX7ԡ|*Z8M?] y"U$E~E(f֜s}yA wԔ"P:*,L* =PÜ]E$ݗh'j)4ZdAjy5 v|fg,GS݆N/ܘY+)fz~|obd3wsC- MNź,GBܴRŖ!K4NO/އ,/qrm=*f9d<3i%O^e*`uWdO\d1[,Cdy聵^ HG#cs 2y5:iHщ搸Z܃j9>9O#"K)u\dPGaKhAKs>կPKЫytSuhszG'7;95HfzExݷ=/(,-,Q1la'Ϟ߂y;gzr/O?_)}(~ɯ|IoaSic%\t$i>vǮnCQBX zbAI@bjWBf&fs8G'Z MTʰt0&+sdԬԭхUtBK( <#Ņ_zv} 펢h^Ix5/TPN6Q4@kpئjJ$!/S@R!0Ih 6:ݩ*KʻI]**锗L 9,,5ɂ#u>e=!1,-E=|{R"XrQ>yO Hf6_xI}2uue!E 7 8EyF'j4OɆT0/Iؿm%$97~-ŶUfRzlҀQbCcV^baC~D'XƯ"D)toXUX&}D.cl*wMw#uuUVXLT㕰!gOc1h>C!5GL.`NhZO2tX"Rԯ o!G5;#{$k<mvf9bq_)MkK~]LK.'U'GKG<(,%T_^oMR>:rDǟ`1P6ƑX+44 i='}B m>|yw*zOrI>g'Z$)T[ڏ#Xt*II7bS(T>H a#FLqr~Hy|sHtb`t *cVE=3,óKMdӕ0'y%bf.PKfXb7pip/_internal/resolution/resolvelib/found_candidates.pyXmo#!8)PZlνk4w-P8ƚYVWSظ.)jbX6yZ@y5#6%@(&K+c J9C!+ mdឨJ%,=l0B<ȝ(C9 ⁄)!7uʯD.ѵ'ДDE4^L6LD!.ae ?#nQcG^ v8^Y"ҹ46ų"'DG4W_ZbA K9Y~%{IL^;>̅VWsxe蝵.7o//YbrRGŗ.왑bWq!"נ_j % kQN1ϒ$)h%2Nc*č[tq}U73yOл=Z)~ t{!#s_b]TK,|0|@Rޑ^))T}jԑـ~i2j/4epl1R :Mo#i$߱xi8 1f| 5/ؖ88t]7o/":o'1r]DNm.ѭMܒb%;T骩E T>?;eL')_zQ((8ݬ؈ns}%{Nǜ^h g$z"2oNd'v 68C%ջ4hi~W{f?;⢬.o>}12W1ۨ́#_H@κtAz"/O+ksZV;-}]DN]"LЦmeM%*/oz0<ؓJ_b` (* J5 fm0on 6;!EP6\ o%Kbl.*mkM^9|)x9ɦCٳ܃~&yt7>܊;v/1%BƏG hv8=ʡDDAEagr}¦?JlES!)n0!eCm SQпNI%. @7 ߭lhp> 7BYv]:D,cԍBT<_ePP;QjϷJ#Bkd1B$c%STmKh#4P7BǶ ɡ㵀{1GO\f{2G4WEEe{ZۤD o#t9f[4Q=be%x2${TU5_=TT,Od= _LzF8!XLȢ(ǥ:a)*.ztםqΊUY[ziI+H  nF.u${nP#@LHD )'^}xTmzx6*Nqׇ*ر9BrM{of5PPxhqg*͚TRXܫd:WjsΩtq_ oN&/s*51SLPM^$HF%DJP3 xE=C`ob=a;03TZb<9:\Kc\f2IDe]t ;ٜ.0\SIoh>尬!Υ#=`_8jEn[]R|~u%?vΆ nroX#m2q o1{2Nğ_<iC%;:HP{QI9p{;e^bwns%E19gy@(s9ohKZQfc+^PPȾy'b7m8wԸu0OZ՜滩 z]5?~.A =%mݷ ks0t7$:M̜[j ;'p#fˁG.Lz|>`bB4L_aǘ]  wl@3]hi4ڟsRwVwyinN럣5^siinrhƞ9f)ZOLގړvs_V-oz59JJA./fB*{W g+ OdZ.7>C1j&?㦺pibdD/t$uX(Qf|\|>7>ĸ ibLm:MhwMOBF͹k"T?Ai>~:RehP$·N{ʔsd3tX7yx9dRd2,2;?:\S6><*/t&ɏVص&aGpޜ.3tviD ?^kYM:L~3^{vvq \/3ӹ{7`Q#2 B?}C}Ə?lV? źolؽA# \onilm>?q2?aNxj4}^&?PKfX4ٹ` /pip/_internal/resolution/resolvelib/reporter.pyV]kF}h جR)le[RE+{ьvfԄ=Krlҗ`3s=QaMIQ3/v$XO9V>_2ۭ~Gmwm5]=T*NYƖQ#?4`߿:𼦏KpBt9[%jXdJ8G?˪^AܔRKKǪX7OX?43fV"[Nq:o$R.FdR18LGsr%P&s*!<&+t65=v<<7= )fzl̔rwd)Ce\LZȊj=K:/_{l "UF&;vP1nj*vI3!ʚ{QVBٞ:6<+2[>ur^gp*Kfy_<W"AX |J2k(l5t3GX !FP ]y-]VSpfhJČ':'èy=`ġ>K 5cYtx d˾z YTN6vRf|xSBg.Zx1[ rj4K跠hoK.-4cMy͡ЛB&CC;AiRrh0P =gh|\㑎j{nbnp4͞ދqyT3ek` iJۺJi3+DNW7:mc#lVOb0 7iyvW_mxq_伩KL^"^(zG+Asx1㮩.<4fDh_v1l6->iD|ZEX nlHпp99CNZ.a2aRm3a|ϖs . h%"y3q6DoX<97ŃGRG}PKfXc3pip/_internal/resolution/resolvelib/requirements.pyY[o6~ϯ` Sa` ú ]vCDlhRnsH]Hrm ۼ|<>n iOkfmxEdbVzo!B`x+x#`p/=I37 '?l 5 ;v*ѴJ=e[q.FpڰG4#loMJWs$}X}[lʼY®`}~;ntv>0 <4\ J?6ԑ5]krh ɍb1`2wd!MH9OK%PZ.f5mKb"%$˲&@ȃ4Lی.sCa$ZT½hIE)fVibA% qګVBYy Z z<9c`Cc^3Hg:M:vĩ-q@ 4J}L yA-Llyu?{v~46>(>)B͎'Y D͍>PIІ]X#u8Mi8Y|vrX=/hryK4O'|UѴbbQa ̹|%@#ad,Y!QVѲuZZDiT\!R12;δʬ ErVfkhO5 w^>M㟞l%]_VW,V7]]ȤigVR$}ʼjZfKVƋdY:JKyT3eNQ}UJⳤW!xofbڦ^'QYg5l2I&?(U<+SCuL*|i&Wj$$uj٨a:yTeޙШw c7X55.ɢHq?`HsI tg}j't¦'y'["ujbM^_0e 2|f/qB3D=QێcG3\XNñ4ĖW-y7,sVęc$Lb>XE: n銶9|w}_Z7ٌ xK|m2òB"DҪ՝S{ ~+D\3_yU+*UNW tE7r)4Qnr٬"sfGp$evY<|=0(oUxfuFInyceը4W5 0ĭ HMZCUG&ANvW+Ӛ`豫Cq$InnR٩X&S-Jc@dU}m|| ٍ<bhSfxxM=a\Q_>fd16e aWig؜!%Z1_DSUDήσAe)PI%O.v-w;DCV%T@zlZ2&L#[p؟VaJ GnL,X2*/1:d/WO_ⷧ'Oٜh2*4櫊uT[jZ;1guP0ߛ}>wDbڦ6XBAˇ.ͪ#(C:^`2*h#qF|7E b+s "ՇL䑆JTT8s'GMl|j A壖{,r1FjQfBiL_{@8JÈ;=h+Jnʴ{Y`}M P9gz5FՍ"I0%/0|VCM].%J[ut?Tm ^ 6b-T0âȺÆ&a,& 9BmWb"56 2{+j瓭 !Xnqک)`6IKYcFax$#bZ}XsG.Nc]:?ͭ&=:Ce}D7L!㉎{'`BZF°AQ+Ů{L,ك"]1@XמRMs`jzVi/ny.۠8GF=}_7M7]l1SsؔJ/u4&Umߺ8 7n;W$4΄ ? Aض:Q[;dvoـ>|xV-ĥ\B#*=Amܹqc{V 8/sO&$6摈/svnLįf*"jDlz;?/ {#0itOd|T ` s|4v3 1;V XymրWyϟ,/0P:r5m(sNrߜh4,PO">I̫du4vkpE)|$L#+k-iqGkO2BDmbgNYN oV[-/@{&"<%~7/c_YR, QI?*)xF-V%;nVfAf%vqmӨkJvv3YN[W;v7g>?S=,Z/ AQ2AHA`"i8Bv@ d"i?%c41kH!ǚ4X.4: |'(jklBm! . h6I슂ĝW(P"QoB[>'2L^LvxRl5H8F= w%mյKmŠQւװtuJro(rZjtO-"ZD̏aHܷY3< c#)Ԯ ?pE3E2͠5rܾK`00qY8X` $de~VItSeBOXzgeH@N"uxԸww9nRQ7 W^ҕ뵔і豪)zӯrw]KF<@X7 7Sg^0Aw';fNݖ# %Ss4YGHؤL5(R B:gT9Ҧ+ rO#-n 9Nzj$1:E~.]qz:*_y7 uQU0! ,IAbxRϺ %o`edJW{*BF_GaCknc$ŀE<`i>>`dh>>򮤁Ʀ@_KA}\<bB'*qa9I{hnLAnWTJ66c5yCo̫ϮR'r}Q|(]d)}nVDT8{Il"xM=vҺ&=U?YK_*OG=$[Y2к+Ir;Y33|K3jB)KW6BÏq<=:6Uflg,K Y)yY^@ ^*ao,AbT9912Jȿٴ. t% TL%! t@+f%GE?C<4A 5`je,~P%l@=<ĹS:\`Nңޮsuyŕx4n^ Q~X\".H_\<l'ǧ FQU8_l5V XQ%:Q=l("~ď[E˕g#y=&Yu|XjCmLï}g=:4ILn9'؁-=xЮH 4 Gk4gz9>j|SeN$R)&϶ KFnO!.4Ar"W٣3D\( cZ.!` \=SG/{ k;ݩWWHSO4q+h+r|ONs$3۷\˷o_m~emr"BT־[/EլgbC`a7 J  Qjl?r4PKfXpip/_internal/utils/__init__.pyPKfXiy #pip/_internal/utils/_jaraco_text.pyVRF}Wt"Ry$[,%%P0Ռ 8_#%,ӷNsFբhH?ICsI頑/Myi!N_InȮZ[Si&iůϪ)TEU5T| Ne<ߡdtYY)IV6ZP%2]+iIy`+IЫ hUNoLe -Yekt%#B!``eIYle PJ3VϽ%TádY2ʹ B5q,uAX]QP_zDcB9[;*BuQ !g=kzM8hA?o9aΔ:[-\\w)$u vp. Lc˷\lvTKavmris5_ܪWR§\1l@hY'xV%ɾuNYjh }.O+S\#d\HɕSwHPΗ6(ښ _Y8Xm*Oc6HBkmM>MuDOi?ƃh@pOqz1J I8Joh|NG&I480 G 3SƗq tLL)]FIY<;c i&iܿ Mx~Q<:O]F4+d}M/ᐩ 'lǓ$~x8 <`Yx6Z*8O2|]c$E" OGiO^&nu<| x Sd x'vCM _M pʁtx&vÁ; PXn#1t%˯ -#1.pUu57$l+W~.EoLUR`FKJ._八uv ЌqgpaR5=p&T]^ o`6vrqx\RWb.AA w)m*~hDe҅G{TZjǠs7FC8oI ].&Y!(d 1B`dm /)\yݛ ;}{sZy.)0I`f-PTkx4v&G=}o`02Vў]RfKn ǀenb ^aikw6%/i[ma\(v rw齪Әؖ?zn~[}K&놦cn_ۉ]ks4?PKfXJx9?pip/_internal/utils/_log.pymN0~QT%\*J ZiLSk;Pyqh?e`'m+TB +ܣ6xŜs^lCw gL(Q0/#%!k)  t$etڅG b&e w6nb=t0N%iX؏@;].G-;t 73{[<'\]3Ƣ o1: 5ZYru ws0fXˀBL%DLI:'$[:ۮ:ʶMkWьt,` 6Zaˠ/ )9ܨ%R >Ԙ\AzE;K PP`㴑_op> )/g&Ll lu7 5g%zԃl?ZU!Jpy%UUI[3nff.+?PKfXrB—pip/_internal/utils/appdirs.pyTMo0 WR[.;TcӶVDI.b#Ez5Cn Ckg Ў5ExlGw;^ bu<B;+&J L8; +Y.PmR9+O\(4=s ].#˂8 d"R{oyu)[ O5ۻAӳl|y1í? PK00(`d_ߟW(ׇ>= $[RyXz[j#`K$GҦUUTY1x5u]@z*_طy{a4uQ29/ Tx.4pߘ,aO\XC%)9FumUa]%':Qe2ݕ /7VALSуVLAL4x 7hҊmZ<BMNvuv5.V9k I6(MK4YlNQ ZJ1 ~F5~aCJ7oJ֘BSU dXQPN՝RRWLk/`x{,sZ rԢf^͗˙k_NAb:,/w?x-@ $^DMA(@ ^c[c*=6luݨj*6HFU- "MVk˦T_}{e.3*KFRSYzF$Fe9:l[Y45v`MD1Ib-.: 2V e)V1"}t0>RAYa"}]g$h3 m ۃ痡y_{t4M[>P SFҶc'8- _zNYVY9K6Toy.|W4C2/Z"W۠d 0:mQFʊBvDO :E7;, PKfXs)pip/_internal/utils/compatibility_tags.pyXmo6_qS>LB%N۴50 ؊} h$ "ewGꅴuGȇw=w<:_yk92a+> ^]eQ1-D.>GAFde- лJ+hGJc,Y>MY*N6dW,f+\kDV#O;_V26C}H[rv2+&RgDU3)YG7K*gz)(&auN1#rAlāW29R&Z&̤ѩ%j!EAzj9eFqh*RJJ( b3i *E g1^,κ5$19/iKNGFlFȲ3W, "M¨_H J4LP0™~(S[kA[S T\^ )Ű29Y@0W-3uz9]cR?Zq36`ktR!ǁ]?cFɂ5%`.ygX(-$F wpa%eFҩy!7 LcZde LHM5(0{]r{ӡ 7c2lJ[H C'V sX4t u+)nW]v\ln*6cBnIfIJoXk-ef3vkUпaMB*  ҼPch܁B@-[ǻv]rDK,3l/Yg7 x]GP҉6u>G['  07SJΰ{SOR{Q/%be@ұ׷|P}xp̎3ފ<ӏ)=[kA65Ӈ5wڼs쩇l`J |Xrnrv=g [!>oѰ8ۭ1e ~' =UѯWBqT!@ܶE`vo#ZJ֮T4{sG\"EUMߞF!!W3`:eFzgΏFD"伿&D_(b a]t^E4d}Yi&N¯7%6 _ɠ{!r``k^ &wV vܫLU?ʀ^bLDxnry|{6I=t &yLtzd ?BCFO&{.Z3Ecr o.L$`⥺[?Й kK/,V8aOJ3Mؕ* wk J8 yt7zHa|d¢"zݠ~8e?ӽ1r6PNo68h]Ï0VsMsPgZg^~j6 !"(a_6|턳MUJز)jBEΫ; $x2u1Cvp s&j[ *֤˴M=94kGa; W'v8a?i6t(E+gK$6;mY^(aYyT.^pqTGIEs`-\38U^ݮKW~.g !HJz$y' )[Hz@#I{985P~b} p.(rDގ3 .5Q~''>5ڰƜ۔NEmC\ƅE>ͅZ%ωv1y x-It{Z`0)8%Y16KxޤFH9 ↏t]4~b ҹͨDhs9nT%ܰc{-GUuB^vy+ٺۄt1#_gJD")]e&GoR`KsؕZ)g.k6'[u<ꉶ-DHw:c$/s{`Mw"rx(dicpʙV\c3Rw8+A ֖(NE=P`u #p~o`t Q&U)ԃ{:nG&Q] $Pgz=˱AHGD1Ã;Y\?NVڒi/\ҶnrT=y4weDZ~/^P0Cʖl+ uŒ;VC ='Pjb ^o6y^ 0;f;3 B!3zcg$t\6ϱ}(zf`مϷKM.DdƯ3S m ?\%Y1-n<{΀`dS^25;;Wx.z7Eܷ6P?PKfX+@ pip/_internal/utils/egg_link.pyUm8_1jSvKZ8 e [FeGE2y~#ٲ%ۗ?$3g^$v64F3<C+T{6Z1Vy!rK1ؠhYe :pk;+$؎InG=S):UDŽ](]4R̢4IY <0MSH.^H8A(x Sl11lV֤xU/n9a-epdjȉ{1f>k[y !-T2Zԣ@BQ.g*e겧v޸6:9Jf& 치DRp L)NnMZgӛ3>K{>(99@r0𦘃aRi# !Mi/[0"t 9ɊF誢Ac+Oq?\6&D]^H 7PL.ɵ0@ӥ5o;w(\M7꒣9] \UL=ʕƩ1I*}sಭ<Ϭ2yo#q[k^r-p*A\a3>+èB_vGfeښ#'҃IquSt+n ^ 7`)Q8 3r=6˙fJ0#IhOӫv\d\od8>t?C͌A€T^WT#VMmBfr!7>,ʊ3oPKfX/4Uy'^1;tk|NŻ7o?^]\K(ik~~|!##6JGDk>gmk*䣗]X=iFi.ezߌғ^X鍊X Gą[7)ﭩO0cl"}$XZN}pgq  vici[!"~ꑁwyXUb-F8U$* 1e[YI25)ʱڂ\og, i2֫t 7RY %3+@g"SyUF``&]Wkz>c7k"Jx ʡJhBUNuKa5aa*e%bu!hʦ>H2l?RU,V:UzVf&qUZs?\f߹*kv0ڋ{dκWݓ|-lbWWR^-߉nxɵ^'&g!&aZXMد}Yԯef[Ux\Z\ ѶF+zXD(sw޶FfX6hAydd1z{Tl/XiS6N0eD#oU% /3St%$;k{T)v8ϸsN%€GUJ [ƶiPe5eZ^X 9vaanfl#f!#RxB}mŝ4c+h7b[ "p=pY%_A:BVzv޲Vh(FKh}- bKEE̘5&dR#h%. "(I=c pp#2הߘƳJuz ۡ/DW{b\9q"нWENvj9/?e7< ؠtkdS)]Y 5E`_GDF[^8X ۵& =0֗׸|.zPr"oQ6 pV "L/zvk<XadNB B;ܗP^h+Ɗ<#j_vŝBJv{OO)>0Z Z%^0ѢL8E@Ei P(Us2>vuUA*GUsMEb阏'KUSnt@)ujI%R^TPUH2ʤjfqXMZ],zJ<l_xZySg~u^XN ig=fjYv8Caj .ZIHH'A7`:1B숞 KXUт!$jщ4ɪvZih|ѡ#HMKf4V#^\PpD:%22XC =dIs^<~)!C%#{*涡סZ!%Ur%)cjrH̴ʬ3y&8y??!S&?~xD6,Dz Aћ\V`"޸7<>hۭiS:/_}?M0M.brΏoii1E”3i&ۏbUF5j q;G~OW_:!CU:Ɏ~'rCe!T$fQ i鑭<6rAn4M=k@# H4r͉k}i{bZ^-0GI*0h/j+56&8O'A:*OzPoXlnnJvh"Y.nF^?b 1&-5@HCy`8r 9D&H7!qIʑ7dz"Aq2qpu$vo,-KQ8Gi8Ӈ,6,| I [x62y`w8T\~@|D ˒#}cu4`87f9atq@%q*RPEvXǵNG!|aJ̼#%4=Sz 03CPg[@$8ǰ:!%H,Ga_Q8&y+ %;ynٺ.VuA5UEOUz,hox#*L9&2ߖX h0]Qon`2 ,hˁ;hhM Hso'STQjNϭ# J h'Š-p59d(ކS`d' 0u<"4!WN_PKfXݠr+ pip/_internal/utils/glibc.pyW]o6}p9vVNJF:4iP %6JD^w.I9J<82EsϽVemGƎTxSjUm(.2 ݴѨkhxɔN~ſ.FڦSN%d2$8j-[[ӱ?mrSۀ9H;hT)e)+'xx1c9,w$ArɆVT\N?,)]cKB[CZZKZJE4g(5VV,Nf tNn:ZY/.B4AEZ 6MI)Z-/ֹ^fmYݹfyiz^eקMqf1_ϊS9/s1糥fW'3oӽ/ox83sƯF էo\_~Oay$-[8}Ps} Jm].kG@ɏMc>_LJoBaqzq__>|)~E%M t`i^K~b>W| 3E4=%IcKg0bQD OQ[^;iЦr9MG /"P)ZlP /״VZVx8P24~_Puc6(QvSy[HMainYIj6L"n-yjaܜ"wg:P(SRZ$+:UX&,;Γ m{;b9Q١^wef#-A)0O} "0$<9\Lb>a0:2X@]/5(a4SFe *EHsH.'-j FB2W'castއs?ؤظih ,}S#F+WYYYVp!6)+P^NiINDZ5&OܛLar't Cسa ⶸA(/^)'0,'?^yk+ \@ǠMQ:0{܊#?|عCJ`[PQjzӅ9;U  QS6eݿ VYCsq/X^;MLo#B6bS+4_f"bI7NJ-TFNj)8LX|L}7>496 = cyqC++3ҤD-*IU3\w5HW^ޣ <Jh"F1f> ؘ]ny0$ oE! l` <^1خM2^^_%o9 ̖?{}@ox. U@pZmn1S{k| rcxV15nyBC X{} um3h b Tv V&w' {w@ LKٞ(BP#PqwԸ'lDŽltZծr/ _2i D$ i]zbMIj9B YjfB:w81L-ߋaDjKR(cBK)E*kQrҝW(CʠNgdV`<> h]: ,ľ䆦ro0`"RTa(V4| (v4HTo+䍝~.Tg c]|' K%B 3Uf}Fp_zxb6!MΩR`i(AIT 8KNsK yh,dz 6m7† -%($>5q/S-VpھD9E]bLW Ydҋxv[`E18BqU@omlG}ab<%Շ>Q-D ֟eutT<@U:W)^b*!,^B/р)Qi9*P>zOkی'f/#Rﴀ JnY?gF7T7p_e)dV F;{t_C$:'N(>rǀs p{> woVM1~_i pQ G^fwY,>wTz)UᮾS Ol/B,Nd6*?!C]<ѹejD_Yj~!S Gik d)eC/AHVsigm;Etw'n!z[bJbӉ' ZPU`ES~FgO?0w$woC$c݉2 6 ?ZGSxL]O˓ t=8o_PKfX2c V-pip/_internal/utils/logging.pyowFTt:*$Nj,۫WhqO-H+B}"mkh,߽{_'eE^U&#WDY}Ȋ;uLʮڹժ<˲XW|qb-iY@M7Qh Nf}U6ޛ|7foϼ"% Aj.6,r)w#j#7qr/(R.V1G84ZZDp܂6xv)TUf}ÁQ4@Jޭ2$` ;fy`cGxҏZ[pk$uT%Z rJf*N 닫1 ENgߢXo#0x*6Xpԍ雓볋䧫 <;0T W.Er4BUJic h,B)xRRA4$*-jeY 3&d)AhRɥQn`bQ-kLNĮv%A_֧(KH [D"!"'5\ G k-F{6/L 4:L.?2ge V "g7mƌ3MjLϙZ[VoW ~%qx{ ZUFM7jUqQKjy9/L3=L&̊T2% 1銸8#' dBk`lѱ_Jh.gh&JG2 ATN,y0iLmh@Y'WU6,vc& pQA>VL@ 8䑤k,%%8p}t^89irx,8K\Y%IT"[ ^ށcVuk ,~1a1|ٗeIAc<'ׂ2vwN㒖77 c#9_;ŔW{hP^7 ‹ښ%vA9ʖEAIׄlLTn">K,t=@9|>^ly㤤 )E `܏`W *| qڹaOgd0n_~mZ9עڰ5t! 3/lu~H,4g}f}^4TZQsTgM\]5(]m@#6 eLAUa5L.Fx[?3q<?҃~o V1zWt2C&D('HS]-) FrMູsyߊijz4*={̓_9ƎPKfX.c}\pip/_internal/utils/misc.py;T p4z[OaS>FQ*g$]F&ЦaYF*D )7ЄZw'^zwJĔAʈ7" `.Ƒ#z ,Q|Q 58@:&?pV;/1$ (\ sfop)`I~a v1q ,j;u.+ 3cr.}N/"KwsT8:Z}^K598HPXVO£єh;J Z Dnv9Yf 5h>e4F{;;?#ڥ? ;ۏl:@%r\ #Gٍġbq}lf:giYkp@d!zL_5vP&R.1G gjdoWC e s<LjP\D]sQî'J~h],,8CR㖩dء~?`]$tt_e12__)>;8u'&Yqs^3gwo[Fq>BnLKczk,ton$~]EE"}#=ttofS+kDL/|Dôp䟳[B`Fkh-RR**9Bd%.K2S 50d߈2Q:AY`J.;ntKc1r(J2$ߺ:rdbRL,V7Ur!\ÉMRK>b.Upas]mD嫋7{1a;+fqyp `(ɉ8U O˦o #kA[@uAL})W`vhoΣ7opCvj; yo,+ 1ħF*1z-m2nwIXKuC J"oe(`u( R0;9pxZl@ ʖ8čNphS V eS1m!r^Y L 9%웎 tٮrL붐sy 7V3Ŗw*Ve~0Pyc],bgiڔ{U_1L61#~zgY_t{@D^Q^4x63B!Hu)W{ (H]/T O+H D@ J8Bx5EgYߣ-9js u.0.p@]?fRIg9uqM@sqtxxH9 f=w;PG^`\q3 Ka,Zm ѧIPUrn[ } |-5DFQ ͉J1)fQ&`hy/`Ʉ_=EbrW @@.8g*J }ӋȀP|ٷǿ=vtzBD\RF_K*o|C~8dpb\ps?F9 8J R3&C4&Dr<+mӛO 'X3Ş:jO(h=rYyf>`[,A~{V<;FnXI%V"qi kx2[#fP|X p-> uJfb*#F$ DmƝ'Q2'#(L)Cҧ aqB2ejS{RfqWL3C x"_h':u7J`I['B;Ai*gl%|}j3btpW*H:Ҁq>qNq[׭BfMQ#n&THy$}Dm!9&Ȩ,$LT};e &iji$GƠAn*' Îy~o160`z;)6CtjtLB S16f"c 0xEi<0cagbKk0-SΛxv:޶{<Q+gTgyy-Y3sX1(:N* E*o3++,%8oRYAxNuSv#zW;vr螫R>6Rv =iʯrARƊ|w5Y94YZ:.֕ۤkwE[:Ztpv 0QBsp#tCd_X_yL"f1C \ѪANWRVr0󆩟)▂cV(@@ #" %L9ɓN `(iC%2Ԧq>-D6>/-L?dVX-L__|fᦳ,NI+2Eе#SN0 n$eQA{T6CX"`@9P" a7뢳aACMGo! /8GoA-ԧݴIpV|ډӜڎzsQ9#^JMsm&h)uQYGdTO^1Mɯ`(2 cr Mz{{ ZADa) #4ԑ*:вmLLC~ؤ"arp`ZR o[h7W2WETHtvl.DTSၾr@A w*-dpi} 7Z@4; '}A 6Z Ƽ53>)(ym-V)ػ)2XqZXa q,>Xz N;l ߤcSDnN;2"5 $Zהx (GmVnj5ש)_Mϐj2@:ΊXuN4QVv,rp +:ҩO31aӆkii!×niuG08 솎'yl*eh ;9$Fc(Zxaj#9p ǁmP]F`0(@p~.A< B ]ixDK"=<]ZjϪ'R7]@W; uQEXl~aЀw`+WШq0tbn_oH1}q[,r.}77LD{ű;*"6p$Q'kD7oԞ[&r=4ǞY,Ş: O{ ,Y1|"bLuyU6sUL[%*Q;F|^ ]o :N-+tAe׿ P˹S i^x:l 렭P:_[)U^8KdS&kWd}UsA`Q`c } 20kr>[T':' <%6HW'DCD9g*/!9aRq0-H(ij

VJD /E#s]P3[->S-WQ¿h^{p}R;'J2gEW+K<\EA0+(H1©"pA}[٧mM yEU,DC&MU/;Н7 Mhho޼|_y?}(WKŞYx&:<r7e73.vDn$`qu#7d *yN!J&9J~}[Tb=k%PS~4bá C^]22E͜55۳LWZ:ŗxG4ts 2O&$gDvB!,c=o3xb>|xwV9hs:kG,+lۄWH8Ԕ:p(8Y$0#Te˳+J`5~KZ] lXp X<_CgD<߈o;8Ga1#0upq-w_7m-~~jp[A>ejmSeS%tȯOæSRU OV/5x? kUC*0g]*f1-m$e<4X̨e>8MG*+K<*Sҝp64ykZP]q\ 3Lä,ɱ/L鷵@2`tr"UV<9d)Y_CD lOch9p9I,J[R59aN+,IpN-PsЃ|6o3M z4?h>oM h0ЦhTL?Qtّuid$Pb6t(?%,+-k&$5/JrLW[ 9oI*ecɢfw\KL˖ +*\{Dy˔n`^i!!CZTET+A"GHʑȃGVgnEvl}ȆLE*j mc>|4v*5s* PʢX7zŲ-hlkt+:\ln'z1}zqg=T?L|^Obdx4JRkd'WDcP¼8ϯu -ȐCc15}ӳI,N?2?P"_! 䗎"7CV ) eAv83 6LSRU.mޕJX,$ŭvb˵@ˠ$Ya#! mŅ(/lpYՂ0CX0tLB0[Xw{9g<8s/,zgLJWزE!iKW|{> UjsSppip/_internal/utils/retry.pymT0+b?K@M{X3kQYl#qID bf4ޓd0̪ZK VOD RʐNʓ-I"Po(%%М F*#L#k[-}xRNh.hqe˲/فk>8e= `s _ 5znk=IO` |uL^KXRLP؍Wg$uHn>u"y̵>a2Mm I .m)1Ģ 8fRvV9FэMcQºgR+':[aO .Bkz5b=j8TῄIx_Sa}S턪#X^\aJ{D}C!h zfT#;hsُUZ 9ַQw /6u,$hL۩bja%g8rUH>My{=?/`,_\] qB.ŀPKfX\a[S'pip/_internal/utils/setuptools_build.pyWmo6_qSQ,a5" tKѤ؇4PhdsIxHI / Xֽ<q`v&ãw0F+6JpY9(p֨2͞VRu&Xmi]Z2M;Ҵ%)H [sKo?^fGi,+"wKAL+0.sX#DW?~hlJ;=|]$û˷W/o~$π~(<ӻbzKJV)8e1_XdE1Zu(޸ۃ*4΀3eqX*6QZ=w9q];Yڄ;O6Ft%{9BY&[q{S<f ZA8lQ# |;D[#EU<5ڠ{IVw5ZuF鿕[]{-s.K}`a}:;d֥;qfpgg>BAThYDpHY4o &]ris ܣQԙckOW!3xᅧMɴ2-'x ^ ҨKOS ze׵EFa-Z 9gu$\tO,/]92kU;!|qxZvZBj"ܚ#<97dhȌ["1QMRYpm'۔%%lBL`REj?쪛g78![f70(Rg6*fk:~DBШպ. 4vUJ _ ݯgtHNlSsfxr;)TvrIeU #vcg7a4[a1eA#XzS) hpq[hz/A6{&휉i'%QmB?( d8 qs:7)m[*[~KQ\Gѫ2w?$Ըw|,F@?:h(oF@O]/V:fDsSCW0+}RZJSB; .jMr2QO!jwƖxlR6ظVt$uQ9vGk⚺콅wGռC*j4=4Kט B?KhsUA(U/iDrm9%Kgs~~=g9|u8Ϲ({=9a ~bv{MeB/}r!RWOœkqjIeax2N Upy:$[|`sl i\à%:f#.)c{!)v1uxTM* Dچ_`t!l޳|M?}sWTbnja_?H[qZgLӃ/bXxBRAc ~<;?1P qKc@NՔS%q6=pm (QjaQilckA`8*,΂eoZi@Է]) g6ޝf${EJ3sFZε̻s(a$뷟 Ŗ76@3d w@g47|E|2(CiŃ&:ܣ ci_E=/Iq#|A[hl9e8*΅)3hb=yA#PpΆL[ֿ̓[hk;~@%D"R*r '\p~y\/B]Qt) } h1M[ĚLΟfwRP8ulc@%0:@#!y,bptcKP¸&&a&E, >L̕ZsG$qȤw)N+HPlFAo`  &7$ا^&|]MAБ?H> ; .g𯷈. /m7Ŭ#@w:ህ.&hj0tdQO. ^#8#9; Nvgo ϠKX2n-&Z;Id[ʋ z޴ |"b%!d 'b}Y`VlE*D&ӮG7q|C_pF[β_U:|BE3~/J :kH~V2u&H+U4A[Ymí2I.Z Y^LlxnRhg0OEx  +܊^C R yuX#^|S wXf]=*n//^VPo'7|uJTyXYd/M$U_0Z%4[%[a/,M+i KΦt6Xj̇)N*7Ldk>ܓHa*"9+fk뷥ڀ}Kg< #`#+Y˯_[/G珞WSQ~y\f< Oz8Z$NS2$ {{jD /0sh6g;_!}{Fx5vr ^Se~t1`QC)ʼ}R =l3"-+1,0R;~- SitfDYѨ8IN5 R.JalV%K#$ pjDqK+d:ۓJSa1rhܞ,(B{c LMi٥nĸZFWc`z Zp"$~&bYI# Z\Lj0j , V3 q˧LX`V 1ʓ'A9AmL6!:V|ƶͷ{ȢK!F+&*ag07SxK̝F/`!7S= 3K<kKt)'1l{]Й3grbc\;aQ"r]/}CZy̵}WC 5ݺ6)J>ޅ2 |K[n+E]BifD;٦^'iU~&vE=X-H@FAJ٣~@i:PKI9^aTyݺ\GU&4ՔTۑh!iK@v=ڇZd8FmK FD0!)˥љ_wh`<Yr ;O1&cG^RC _B(GGM-$8{lGԧź5ڴ\I'L`i]L6wLS'3R/a wݑ4~e1RL$6='Qt&qXzI>Zw۞3:.FzwYD:Z[Qa:`@ qiYaJɷ15lg8cȭPxW\a^1>CxMǾF^墍8qf0s0apy%8þ;oZs>$Og @g܇N}65p"VASJo9$ZhBJcH.edTIP}T]3h y*?7/n4ۙhw6GN'b#F:Mv V ]b'qlug)='8F,lv-eT.¸*I扷eK!פeXyG3bTo `BtRǫ,LYy0s"thnq7k$Kî) xocL߿ VJHE|3jh ax!LJ:7&'Sq;W7z9Sh3wLd\e1Ϝ ?;f&J-"_cvz ;/,*Fj jleN\ESQ8C@ߴwv (ݶhT:A^AI 6@eϢ$Za/Z5>N~=}jm+U) rYРUWY,I RV2__i1G>X> diTl/,Ϲu_=M=;CۇS.-w0igDCv>s ^B~w.{ubot\A̲:f TL=~< qG)/qZOoz0ԉoIˁ}d·X݉b'Gi-hp2gƪооAԭ1h|2(V.@j;͏<VȓL7:ESo=@~XI](l߰A#G8@߀"lŚCgo˱>Y9&E!'_n"Y<\1 Qp(Ng"X=]Դ@+e]j{M]J7j98 <"n[]$? հ_p85r `{BLU˄]aPKfXn s@ . pip/_internal/utils/unpacking.pyZms۸_ғ (t\/Z&87L! pH m+iۻH@dNI,e A𾖙PŌ*]+Q\EUX,dԲ[Tj.3a_?ɒ^Ubt֢LK1{]ֲyǚvYb;KYƉ́M*hjI]Ɠ*i"h#&'?zwջ1={kC-ھJԮ+rT"j4B[] Q0IrIFw߼y乳L`6j=!VO;`y7>A72҂gDj㙘60@b֠2,R3~e":l^Tͺ^9{?}ZԲ'D}*IcOT'Q,h^t 㮊 -A]0%dM<R"jn?Tr`T%8z >uТ’ lE˅;a)g,08 /z%9gSx>3ނ\3"6 ͈i$zѤ%kvGSi_Hl̎4G"CwNqL%zqya$'G5iC D:-DMj BYF zUPRC&"E@(pHҧv6 ,zIo<^+8'n]\k!VJy"`xC( ҪGJ((ׇOp .xj7Z IM$5\ds^Kť3fh6Wvlsw*l")`>^bس >ljG_y߭1CⳐ#*w'0:>Ͱ e<@+]6GFP26U}6Ux>%u}/Fy9<]TbkCO/efT>-whyz`d/ƖMYnO[--|oʵ:~ktr jf0-( M X;830Ej)~;4Hi^ x]jpWvdMW9hOq_xV85Z\&%S} #mi[=>'@tc[7aqO vpt1X4^FP{s=~xĥpkQs9{R/¥FFiбEP t \p8tP.#GPƲXc<'rݎcGNkWЁ)K'a 0!hT0ll@?GБGo=`|HaǚL$xn*"5 &4kȒWL|"b8 >&/A{cvp<@p ''.І?TJh̞w縣>66Λ ;VH\&HEBNv?µ+Ge3pYץ. 7Sjv<~wȋJ_ dH l6|"+$ʳ6NB&i ;݇?ޭ5g7\ d4eK셶(-lCT'HȐ%ȫPC V[uNB>`XV75ѹQʺlg;IZZjxj0h1A}K4ny}꼴,C5ư3gxZ|XpT9`Zs0׾hE :xs8Y,r {Ld@4݂q HU_WFf[g&oO4,lp)]G `!adۃ萪k;a-yn]e۽t7a뇖.껵PRp!7ڙjڜ9Nl.ѳӧ5t;5mMu,UiSp] 10;8 3+Dw0Ϯw$>c5PKfX?pip/_internal/utils/urls.pyTMo1KVM7p(+JATTxYF3͛7o-3ݏ|pf3F?t^=[sS>dYp EVHg.?}βljfpN#%3/3OghiTkJ,nהּ1`) G4IEZǩTq}J<*,: 1 ]Q DmG"gD(+d(>A9:gtFQLIhL/TwTz>+Mq+Iy>Z|*iYC$ا Rs=FWO.2U`5dƼ0A2̼50Z t iQnB rgpz|n QՠmXBNu!) NvſaH۫YuUd2^tyˠѾ;}J6+"M>8nja ))FG Z#CM6. \9yGiz2tƳ)>Yv+r;I{\*Bm11[ԈHh7̶rJ  )*;[X I?"zNp䀅 FRFoOxx9GؐhF.o2M/;FL#ߨt[H_i=7*aΝ~xm  ~D99GА7uܾ֞.=>}x1 PKfXM !pip/_internal/utils/virtualenv.pyWmo6_qS?Dl64(AŲ6hRlCWtʤ@Rvm}wbGI Dw<#76*ZIdxն}2>Y罍J75mn oj'UW40oݧ+tW~-2%6e({/ϛoͫEv}qMvry0zS RUSbqqxZ _9&?_UϝiRT'q42(Eae*d[TdԺz揉r' ӥK*u#\N#v--ɠB ׋kɏ TR([i\#*jٴ=0䇮1j9Ps&)ăP*\|\ ͕ұƲr밀tk8 8GqrlXam'H>-Q3v#Hee ҙ fhFƉW@bEfwfy*Іvz:C[z{3DH2(Z9P3%o)WH:T(B "Z:@Ix |HM),Z0$y3U`EֺY)4Q5O}FVn&7袡sEO!mn_SH^{o>K9yf3|@*̼ߥ wc[¢99Fer |F*s(Zqni\=s #e7ah֗6TTTUPp30^ȕ6gT\H#`b^+`hE -]ovn@s0Ev!vuo7-S VsIDŽ (PJxq*@{vH2paE)57_(k)[>OspZvdw ~Υrȣ:^0Vݓn)˝Em]*vd 隇U[zQV@i ls-VgѸ'[潕RM#|-bȟKieؗK b6 {oN6?9!xCg]EYØ:'7A# k)FrAbR8SC6=E 6M-8Ee?ҺsN100w=pr4pXa7\5 3҆h'68I׈`#-:6fQVeϸ]1<Aіk US6)+Iw<͎7J}ӾR@5ZEϋ'aQdٺCbbz9sJ0x[`k;K\mL4_[;jp oOnThPZ3xObW:6\<=g߆u! Ir }D- I,c˻PKfX//Tpip/_internal/vcs/__init__.pyuQNA S4 $ēWb.ettB$oL>:GB&^ 3eª$S0 \4[ @7{C5AF!)BKԑ,:ՍOJ0Ԧ]3|3#ld/ՇpV;7)aU{8r[ cZϖ nן<+]/e)jOD^#+1\8{۱`wӇ";N*~3<W:ډ?0>7EqK6Bb5`\/PKfX4 ! pip/_internal/vcs/bazaar.pyWێ6}W }"iР nb-QJԒN -gӢ~p.3(k-j~kU{?u/]brIZ׬ESQYa*n&.I, 0d'Z3[\_m]Uʍl+*KVe5Z+ln!5kZna {*WK7Kee߫~ZnA1~ś|MzZ.嚬;=NRZS ZT2W1NE3`&}ӁdBwj^+ګjV0iKn@Sں-̜ ).DT2oeV%|~<'1éބcuDV8n`MzFWdtaܦqpAs yѳ򻝌wv{JA}Ps-hNQ ]ӯx8UcK9BT0?!ydb$lW6\Nï(ꯛͫ#_i9zhA"b_#r;89Zx`uS^hz({ .N2cv< &;1@PGjlF0DnDU%O!yz1m" Iє[/GAqn[!*džA3<][j0b-f#DR&%ed',F"{ۍ,Jċϋ_8}LD|`%0aWcG\_={^B\zhGw[JLN0auYN<}@BLk缚n1=(> 6wp4"aAKn'Ӳ)%| x+d8iaq;O;@+_4íjXPKfXyGpip/_internal/vcs/git.py\{6>kH[<>t6k$`90a7NGU]B"*9yVyj{' >r2[VlRgy%΋y*/n4'\d2`-Q;V jY`|J SDv#&35*QFf \˷ބ_^gӧ(l'2 OzV<Xh ;`G×F)^y$# #U$۪D>-ح#X_t5ACLT0D}s] ;eF9|}/jrE: q={gx ӑƃe$O}K6hӽC֯@/ +|F'~7l+87nAS(CxQ0TQSo_ӝcK`F>FC9ٛ!wkpV5ZΖ7.c32a1 C;D"^DiH̐dW):%itl滪` FFyiB $djIUI=X}|ptwK&4/KXa訉EF*xoܥgZzm0#XBہkGL@ѝ&ʳxWTۆda=cfV{^dwQJ1g sv3v6mlip]? :Egtj 7ɢoZ'꽦9Auy YFd o&HD*P pe܊Oݕ86ἦY.b)W!H$ȅ q#EV!eDu磧R*OXbguf1vY fQ)LDQ4Ab{,A8 O뿮[[v4!Yc$Fzx,i(n¬ y;9~`q~*do5 LEi']C9EZFvd~[U 1& 2AC Py%~ȝ ŶF/Qs j%.d@ذ1RTM",Y-D-tZ'zSS7Icȴ$e2B55*/.T<4:[7j89yD2m{:9$$%%q51+ qؖyHH=r l g!MjRwUxmh/6j]Kfh(C%uB_LE1-DS03O+AY>;>0!H^sSFZ"r \`ry&KJǭh8P`y VEqf^ʫ2i{i_sLጺ\i-EJ[PmD,/ZfA"hqe9bNq>@?͚Z;챞j<mpYNJh(}^O\dK4No:VuF້z?!C? ZTj}'ehވ4+pN9w:Ä<SH5w|H ȊoXF'e xa9(76)ǏbvEEy82F*0F|)JTUPN Vޠ'mԪp!m5!ݸe(ixr o1nz l`K)z|:$tX rOKt&I8,}qzMt^XMLHY=v(Q #6䴓<t == S׳ӻt-;ζV) a'b~L&GY,6MGT#jgZqV|1v2u7ngE;dl19dZ2 ă ]}jص=}w" >OofA>uTy;'ySc%Q Sky#lH M=eGI5SA @L`ÐN}bA3h$:P1+-ȮSmhn9]1/̤1D2[w}WUutnW[辞'{ޏU qnr(~L:Smh:& 1ao#`MLA1K絃wx8agD/A@y)G\F06:,.3d(Lr1~hLfņ7Кs#|_g$Qȑ h,?Ċ$En-禒DaR*w&ʹ + ]oabuSP ) 6򥚈x*![ ʍ1NaXO;'c]*bJFt¦DĽ)%ˍ0&*``ʣ/D|("X5l$ 3;D ELESc z[hl*ٵ:Cި-;{f­N*g7䯏wWbMexVY*<ǎ\6o_23mjzݶz2/5o]?W6pbj[~U &fzH՜},}1Y @Y֞d;TΫj(Cza,*?4r+~]YfV- NW ϷzDQ}C3)s*| f)q!WhXF"{ta؆=Zж-'̲V 3)S"8k9v OӼ:z8s1k{kli;j^8Fqj}|"1vhp?H9!A=?vԷ͔tV?p_4C"K9w[ڹYH|t7[ RF9/o`7? o>:YuFn fg F*%%3U%elIn?Tsn_ς٦"uAbsOLz&Rf!,϶5_bd.y:}>Z4LOFzAO?.3mje ^[ :f{vD5Q j2w٣MJJ҅C06ԮT7qOcm<50ηᓋڐx դyz\;s[,_T d?Vt$Vn)ZB`טt~k${^$}Q|x]-Ge%ØAhXZ;M}p <]aoXע^4r|v׃.uN`%L0Z}XH}8B%&n[u2f@078s6s9$<h'3'葹߹,QClFd2m MҬ܉F0[{LZǘ{'mnog.Mu; x!1F(5mm6v-?)2GAniQhqQA8hZ52 F;A B%y|&PKfXacpip/_internal/vcs/mercurial.pyXݏ4߿ H`/* 'HVmdyٍKbgľ7oZ )]˔~a)bdC̱]ʵYRzItm O6\P*82=[4LKІ5?*%՜Z g^ T亭ّTui,@j4W2_Þ@7ǰ/tQҭm(p* CVl!EC_^J` PTfhoNqVɴ()v[\ [vZ b/dmUƴ3[dOt XM?L%K:l zntݞ2)"ڨ|p|x)A Ү?%QLQQH 8KYE(KUHqEI sjԞ@GrI"Frth|s/gI$߮U$d[:ŕ;<-0;&YN ĭq!/35<ࢄMKPiҰ}8N!dƮp<FzC1-ڞFrľ>px6߈СRL;ɅC[ܗ%tF?^ R)p]]6܇j|bo3gFKZWM^S?VySzsJTNw4'(^1%;QQr.`4X*䰂5gzް9fsȳ/p8!T1+[V$d?)qHDPKfXe-pip/_internal/vcs/subversion.pyZ{o_bK#0y% ]-^+g%% E{gA.v;E }7J󒋊d|N$_I/aDzJyA)ˌM2-(-*&`*4a'}& +}5UߓTG%6z$Q 3ѸJK Y,0Bh]m"%*Xx: fMַ129-7b-$w P#cD LHPp[ u|\+r^xEN.VkS?ko5I=G$+&ȹpͪj̏,`U$EtgQ-H0X.XiC<{˧wՂm+! VKf0>%ΖDS$Eyp{ï3D8pKQRPjB 5i ;6gKӔ uc.=C1_+.jdųg0;DOo@DxAR@B/x,0hԃV 6`XܢJk{D 뗭:NZ uaOf7yz oli k[̷YdArQK= :H^a2&㳸b?Q)m~GjC C9@Ƀ[V)J4K/@NeѹHQ|vg hzZ[daHK=C_!jLP# H@}M6)S=By0B ?aMa-D<*L:U7ԥ is$>Deo `c.e7]ڹ`0"h htCaLާ~h숺'k 1`1_w.s`_8bqPz> hE}jqҊc+'hGLBB@<є99 _37 SMFrF:ąxg pqCM`` ާ6t/^+u-tšk F0M 8#άWЃ:'/IfG OLcdz&ѽ;s/M,'çI k ȗ,[*}8qXAF.Ew?d,덴r[69o )1]tʁAMkסt@ 3sYB C5CUQnaF0+)&=P"D=9b]kv#IĥKwWK"؊o"@3x`_9 е 뷜a@HqV~. zrˡ*XQ]dbφ5ˢ~-jdWŦn8+-3 uzD~xwPw z;no߼sK%h5yHek*< C"^N1qXaOh&zNP]oYXy+zRd,'"© th,=-1;-0U6,"ir\ȓ{hI>I|z1O M]O$޳'!꣺~@cM J/H}>'V%2~On} c=~ vJdL+h3=D[CԵ:'zaD0; kuKʤYAZ} $,Z\kL m #hC5]}IqKzy9JԴ\8fgwBfH @9p1۵_ݘjv_ % XL#Kl,'~,.Fr픖i~!"HصK] XL6c{\.Y"lek!H גE=0 kI'䎁B|-(䇤/ߢCi#YCWȺxSiyCA)!P~h)Tu'+qQq\{Ng$CBOރJ;LUO->ہo8ǮnDQ\RI֧Х*x. !xI)ӝHς\GPVªbwH9`A f<09U҃eP6TP -A [Bހۺ`^+Hu3jh #.9rfy8B0\i~_3VeWUOXt/X][HG+cBs 3$64VV=)y8ב Q^v?Ȥ"ql*pzR%kQT.oFsK'C6lIh0V3nHF4`Z'ި}O G;q. c g4sͲt4 Ę5$XEֆTz(i{9l[ZB95+hӒƾ.#kc{tI,f3z7Mξ>$KWD]y+jW; W2mni @N hkf ek7k4'A*N#z#Z7d]qA)ҌM%J>kG jD,$D@EQzx z!؀3࡫Un dBM`u@뽧PJQ&8jTƼ$dUJƣZ[:$7f o]^!0.1L:fmsXU$"^V™YD+R4C(ȱSg. /1VX){B`^ԍW@%Ft$!@b4SR9u )[ ɢO|F֌FƩ.O?~>V1MJ<._mÄ@pU`qDD6 Ԁ_"Qu*F1X,z3FC<OB+[S4*V}[cTt[b[$)w̒ɞHN 7[S%(63[\W'$r(q^0>lq0UԈCjfdfTZom{GY&+sҎˆopƛ{/-RxwXMWVG#`ȓ'vHmU2cm7a??upf"ՀNKV-(k+X_? VF/J|}~vzJy>Lh; =tvvD%::+ȸOJ@%{|6 9e}?V㦭ۏ[ߝ0y gypI1ivܤJFI͊ouQ5ň-}p^Il.P7tN|49;V$up.BaP9eھA7@Qx[SΫzҗxII1?.|:K6a{wJQD2ri%*;~x̔Pu:Ц8FFjUgSFk/(C4z᷼y6mukxaiWN5gU??xt̊HpJpEt_-\_{U_U:1F)1TO[u5.(YSzTm̯Vk.̾;+H;7QWrWJD~fb=0,hiGs/*`pN\6a wJ64꼱 CﲡfPjmW^'C ?PfogOV?*pS"y$UND+2(v\%Ͷܩ_HvMIdkS_0~~J%otnyY` -(^bJǫσ;>hȪRa(QVмý`o:$ rʖ,1@-=t%p!3 ~eʛ{in_:@.dgj^4)ѹ`Fuwa8<{2K{jsyHIi?g> Srs5B V2Q>%KM˧WiuV,)E=YOOupY_ DQ}/M(rX6,e\&64Q5Xz7*1k?#t!l@do?.f!\=*x]Hm~ ѿG@ c wAa-rl8JLeE<.x{Ի~N#r8>B1w@ʦ:^~7PbQp ;,5 +Gͮ:Wse}Kʵ[q˾auʻj6mp)*p@ߡLh~䦀y!| ,oH[̯2详HO%A>H@6RCd,;X>`FMQě(r6BQ{sh6DQ¾4.);@;VttitAWT4ņc3!WT'M\5p EfE"RX#ɦLwi -VogEm1:11%bD^V],(Uadp.+fn"V]ϷuYipb?c$c7Xx].g~ܲ4VIpEF_JAM ?심g=g௫h|o<él,vN\VHz #dT^w|׾@zEQ$^"˲Ĕ:!9KVg[@H2?Ϭ.gE_ٟR8𨩿KҘ}+*Վ]qmBoCJɢw_QWJT *7;;-q`GvOrc?V&c%1V V-gXiQkM s hA[C1"rQO*PKfX _ pip/_vendor/__init__.pyXM6WΡvhm94  !4D}CJ6hQ-oPX,NuivKmaPNODA~S+r”Y-Qjq9´™|"d[$y4֩g]mz] KPM{$$*;%}WH%sK)ҚFd& /,eYRggr=e9IJ۸%#qim@ Fj{c*E-o m>1vްlRxyƳ*PE<+up\D nH,[ .T:ի|{u)^׈xvkAbx㜻@)p@D4Z26"4!TޝPږ@*!"݅D0m])xr/K(&L"D}\ gHY_]MceR Ȑ^.y@q`L vr|vlh ,[@%*#k$\r~~Z![I1Ec4+Q*^hGR(/iyb/o /{qqQ)_47-ْ^X'Ek}Ï?!x"g)pn.,ɲ&]tŸl(,lE .WL|_>]c˩M؃GXwr$h1Ȉَ\,Q;N:\Yd8t pBT^4$њ|-MZD x j8SjsT}"PC\/_}r,\c:҄a|XG >xE(QЯ굴#NRXO(j[$t ù)tXFOS-4{ p2;АsʎnC `E<~sx !H 7H$ (߳NEXgv-zf/-cw dbt &51mEf0} ó34{]I!`Ԗ n̺`:8dƮSy :gG37b!{|J{n&vZznM.MSs2u8 a Vb:0kj=9 $ O_0øϥ~|DY]cqZɗQDzK"yM[ :O9 uk;Ht}Eu#+T8 vBk* QVq^q: N<މ4j`5,7ZS!6Z=Ȩ3'UC.)yn:7vN:F.h3Ls`lx' ?d˔Dbt[ynt@$43- A2uzVr vx7kLkUC}.<0qFT "gV'aaZ?>VЦ:9QN uTqݹx=ݝ1VXſ >Smi/bWgÝśF_A[-8àPKfX?{6xc  pip/_vendor/typing_extensions.pyisG0x,aYg}0& {vc Q0o󪪬APwgwE*ʣ\֫6Ϧ{%֋E1m˺j^ɪ-޴i|U_54#6?s 7jOUnʯעJ}Hc^}z>w\ectǹ_m:1k^ciu~}ZN[yjV.mjWiϦU3q>l 8x<>sk,ݴEI} y>nQmy5K>r\|q.|f*N(V*^gBW Agv8ͧ&*y媘ꦞvm l;j󲊟Y^Y@Xyp`>Tۮllukf a,X$+V6ӿW̾I_ ޥGA4?^y=_j!Gu'+caM_~>y짣gO}([?(“¢r*hYT SiK] ` Ub6n^pB@^e>Hh0O?&/ 9ଘg d2hs4duL.իb3aA `{{jUkE^&(L,a ڸelh +l37 :N>$CB9{bK|oݿSحxm;p߰d݀Dejb1ў^L3q0w0Aڰ+@- {G}8jC0{ߧJ}/ŀJR~bD|p]xhU{{0 &"%l9e 4aH `SA**!4")A,1q04(J{ad^*ȟVjMt(i-KFX< =Ȃ 8.vt/R4ɾLZꩇZؽ}Pz/H\+cy؂c[% |gM0a}j-2E=k5ֺv4*"o & XA)Α?j-Yp "_ kSrθͲm&F2IziP8s LU\M@8"U@?Pj=c<-Qܺ Ϸt ȃэ8c8NE^0`/鴪kI; xh{'Yϸ>i_~^ (ݠFٺͮ Yb^PmUQ,= 1t2V& U eOYE.?>[FvM|N&tdZD#!~m4 )0ogs"ΊjD+Jh6ѬU1ga`CXFos"k=yU=FxhlMJqh/ s#P3 K` ڇST\O8I["vvmNO-:tG;=EOQa=6,l4Lj0KvQv׉f^oŲMhGxU)p-6Hˁ:Xucsju*4mHn("=ƬFu;҇WRoV!s  ѕ;JZ <Ϯ ,(1Hxh'/_li[| j,4'qDMkSbDL7054XQ8gUű.<+ ؘ` xdsnu 0D.KIFO4]Ag ghȥm7ImH犎xup*ýr;PBk%AX^@Ǯ9"Tp/R=b@ubf*xNrrϢ>G :/fS^7'GX[`hW0n9E[BuzU+3Uv׈{d xdxU\@5֑6WsLO, J2 >)8sn~cWQl<:ժh5F)|}!޽38Y}37 u:0v ٧[G{{sq2i}d!n>SLŧv!6!+mh(t٥Si1Bn(嬛tD^^OfˍcAIFxQ{,W"TϼqPzUver{vh\_ֳ5av(8|mheUTݞPy7Uq B:55hʴv :y)4:@@eVwj=`yv}Ԣȧij /QD/id蚚\i<[WȧJ&U7[c-1 = 5җhjjӷVG/OeUWtfr\q>52^ :@%ڐB}0 H^䋬Q-br߂:+LhW .  j9^|_ke6GC &P(B8~ &jN&e2鍨 DrLQ`7/Cwt4`i=i=QT+g2v%ԀZpq@ҥL_k1ŔeԵCXFK*I!Y1ag,ظӼv[ڳV[sk:> F J=zpTmf"bB֔d (;n sKhXŕ[zyGYŊQvD U@Aals)үm&Q4BjUNvu|);h.dP24-L h].ln-T5T6vE`MM=»?dC_4ؿ/ |6eLRA[% i "XҤ|GmoF~}ٜû lk*! [W:0AB+ZA; |'^O1n-uz[<֍>`V_M^!z{l zQ,\Ҋk``Oؼ>~^0afwVHo!~BCy~`m:zW~_NB!pp]ˮ]7#7[mvwZ/7b_CƱslm} kG#MY]/NF {S<wߢ{{|?DkzV9ōS|5OJj$od=i<''w \5O'\t?ԩ`a'v N{ïO=<>:%qkJ xG^^ĶG* HyZ@9"[Khb29Hs0a &¢AΪLн -C7 X mvY7\RFJ'B@UA,e7;:/AmrU͘Ё İLlg'PLݘ5nzV,ۋGSęc1G>a <$Wj!k綻%DqyQ\-6v]ÑrRȬ'Ѵg0 '#s嫖sʵE^s 5Ƣy]"Sk0iq̓P{Bdh ,'q_@8JDiMA_*K7mʓP2CS~Teji(ʌwY7hAnǭNt(U 8r \Яs\uUS@|U ]%_;*i$#ܟ3Rd/R 9$ƽE^ IY;Xa!y-zfpW]_1TU&+}{c9'HsCmVŢx F-d[*E@Rph9,4ǪZ ?x'7g&|5Vp}0y/;m FY'R7}ڒ֐cV4%k#$ق5gPvӍzv=0m%ʪq9+'@# v:ƛsjLJ/6Z(B]*n@Vm|Ĉ8:,i#SQ%=YAuѣ6'y`(D#na4JeҪ ٺi~ ksm?e=)]xP#FNJQv|H=np'~vØϼ睬tLhʰݚ@95O P!e÷OwP/;x@nn#Pf@8FP0DeCt]^f /L4A߮pf?l$ʸw2~Ĕ ;`"DIcb$z; <& 6iZR==>ǜԇ'l"Lmd5DC{5/fa >wq|bl0]Qh {"#q3o|}5O9ƠyŸAv p41FZ"DaČ0`+f s?=++4qDg wŔc?TB%U\m ⑿h'w/[>}xmx ZҞA$yW>oӎGK: J<h-#"Zv) /x]4 .,e=6Ee6r趾@-Ԛ+0?.zYmg0Qy(btQ䠉84Pvمi T#ͧ R`t WҗפM ѻR,x-[D[͇JbMMExx`&8;\R#՝ $cץ;jHߑrw,ZD *%#KT[w@Ό÷*i"qf[6 ,ⶠL!n׊B;LkMU9˞%F|S2By؈k"K׌˫;p<9ZF'»LNavƓX&Ir4~(}66[*j<tuQ4C%2+4}/!Dtه]*6[{%^{e4^cz׌zBQQ@aJ0P@8%;jǠ1}ŌE$:ȉ.l E32kCe]t5rc*̇ .`k'UW=XXS('7ǁc%~ċ_TYՠ1^ }>ȶ9raX7ES/{q@is̺jr.9Vh*Vh-dZNӷkIg?! `څDaԏDз?n2#q"ҽh~HA$xSL)٢niYdTNcU4w%m=b;qcWWXGG񩙸OC;1} ~iZ*zˌj0 ؀O`P6σQSgIB<Ga?SsxjT!mU5<)4XPP?C:D.6(C5p ?hHi@0oS^xvwOlf83:YR0WY< Qz=VneŒډJYO(T̪@rE˥7(9eZE$6mh z" sG4LHo=H ކ(9Ȼ jxﲍf2Fc{xOeo_x#"B< {~Ve7'8wkZVhbmҮf94xHn,vp`]x"UEaoNaD9xEpYn0Қ7&uA&2M&/ wj*W*6fuVjd4pYo-VCļz~w~Ӫk+QBܲE <I[+vb؟}]:%:f8I bL6dd):GZg+4=2ZR@ ~m1LzXfx6U xݍ#|z~9~/<|]k6_$^v^4fQ8.ϾܭscRZT3y#VoFs#BІbJf"0X+ y0[._Q p8J+0CQ1z@YƶE\ ’6SVCkr'-fdl#e? (lSY$ڨg S$M [90_YN܁_XGF6E(%1a :>抩[#Y;7Si@׆^2ٞuHXo?Tt]UXGOǕ)?d`v?o fwU.0gة.;(̧rlGÃ}>/U>psBRgz%0ZHtt7*P g6r cCe=؈T10MDS +E0o;yy gT70tnPT-8]f"5[Y]}GGDS[L!9o 栗[Eai'$z9`3jg@r* F꾣uM HcR9qb`zwP%kIupa%4XNЅ6 palyO;!;cGZbzwTع~w;d2|P6x|QzT܁ws¦FdxQw]cXxw]f"z UA8%|MB(㷎LkG9ZF5`Bk;T0Y̅i:P"6$pn@TJNJ)9(qZ D8& tkR\|Ì~\]"<"Zd Hi' c۬9\Wzۤ񈇂nmqea65cnP3Mhz#KB;*4,VbE1 H Byґ,zZJ&-9OMK#õe1wJSO͸:_1Xv!iuY,%ҏY$Kt`o> >T zֿ{=g>ߡ'YN^澍ZФ37Н! );QAʾUO$|ۼ6NҼ.sRsIƴZ8K6 e#y2o JߩEن[ oXkQL/$2PIQxV.g\(7+e2D~WRhn@zozD mYj(8ƛɘGC' a\1{aQ}F lGWWOq9Ξ{tRuRyb2aFAɀ&7d]Q_xOK)^`z?5[!?ǒ"ek86΍G?n^ Onw c޻MYCC~#Vd_4z3͵>(c= & Ą62t9=ern[5ʊ8@̌~0QWbٌ Q=g25Ə"IHԇ1)d[?Oae{'iQ?&zKSz(;I)k%y*1z"#L4=N#ρǃ>@e %rT6J6&2{97NmN ,El(WwbGe4oUI2怹YΡ76*by"FcvWC,0cYk\㾻Vn-K!1SGZA]1Q(VTjC=ʁi>}䈾Tީ@QQϵq]1M\G[دWϗV-'٢S{\5Ͷ"~JZh1(S˧~^V2BslfR&]!KJa}#3郄/(y0\hݤNr0!S8qa /[j8)#d`֖t̀s#+ (씧t0men2zVOJF`&Us4I1> *(<hgi#%iAK|lG݂'ٿHo=y&%}JGB rTL1t6OLucz<ۤ]{‰[ iN&* p -9Q\>l)MG\{P펤IP9t5`ޑ=d@#aE3?Y_(on ;|a_h`+A]D8Bb4ȚXa$zU^?]7 uL/`UghPerq<ȞIuFK!mqe>fB-\k"rH1|]&W!! CjtҡQ vG]Ӄޛ̑]+[oN>2wB[4/6Z_~5Jq;>otD"p]bE/<~uq `J<НwGϙ"|}I61L +<11HD8]:؜$y\-is>S1π rdc} F@P=^B'_jb܁=[uKh"I !Ҭ6H'p=K'uHwO>H27<պh5gP*U3@%r4X.蟊cJa<IPk؈8z XG]4&^!gR o5c3UB+2yRG@Lk[gsNlϞsn݁CovF# 'j)4{eI4Y\&B6POLQ(6&I^wmAh)ng{Q=ZN~sK园# %n+.%(F]9PUI.{(Fth#͛g[?= BwsOP_'v633Ӓ 3Q;dHџ䜐eƔlXl]l8-]ͽ(Kc]<(f1}@9`V5Qp9hո*BaWa9QY PHGqÑș3}1It$I -lS69XfJdm͊S;S>I`G恄:Ulk0Ǔ>|r[Fpx}:|F&Dwf3$^a+R,'~ԛci 'lEMޫ4ʦG'wՈ;bo, =)AD_*=G7_N0OýJ5F)ıy UyFS$㽥AU=2[9` ֲ2hh[a߄ `}!]YTRM#YY^ & ˛ӆe98w"mm'NΊgU?2vp{7=md3[\sbcqxF̓ ~M78҉Y[f[z`ͯ) w0XJoL k" `'_Q0F =TDG'LgPq임PR) ݁Je i vM͛B~NenQ ; MD[]"3-ZQ!c%&*uKu=ʎpӏ2Ne?ŋELUtR)'6~1PVؽ+bd ]eLlj P6VeltD6\tO2A*XD uU{1&BJipʡa.2 KxQH >˔B(˨d<(V .fٵtZ$,2agA ok>K  J;N|3v70G ruat"ɔ< Qc7bE44;n0kE9LWxe3`6s="M3 |r̦vuH3>CH`{wJN{+ *9ƴ>p{>.VwFLOt!-J:[3M-yz}S +B3&-sk`t!BH협͔OX4U@/EmjsS(C TqWb:-qZy˭^X[?ƺx?jLwBgȺ}mߌa <]8Fs욠RH-ԕ ˇ&6DLjh:f@.?y=oJ0GwӭS". MYq}̲7?E q؛w wF/S7ipF<`+'j4NDUA!25/dmÉch<\gJP3eG u 7 9XM8ɴP<$/?"c\pAG0Ru,@oص>Kb97qflsmoLW0YS&БQ0]Dt)'KPcI >”"Ðnlˢ.,M{*߭: I~t0]B ?E,XW܇3^;R3Sr.Ŝg/wՐ.KT3q!]MHA 'K9ryR+ۋe;tlB3(u'B⇮ɰ̧id2\=,|a> F yTrKW]uo8C-vbeB6\ق}|6EF*i|QR)3{dg(HG ީ,-ǒkli,z\`&Org7aYQ,UE^o.aV ܈cAf l^2V _ld[J*&MUR:߾?ҖM%".Aܭjp Rֵ` y4J }8c!zg1NT; mhH{[@o"7scX{|+^b@قܕv z'?`Sqq;NOۄi92S{ngg]9M5<AcQ/S(:0]J6bBϪWo'NSDBx'~Y;SbҠÙ &]h=njeO5-M.h1R\8jY`Ea\}IsT4dDmlGfSR<{2(JiݻT,Őآ;hBq]/*p~EΜhV[Œ & nHvbe|{. 6 ItTyIW.N422]M >QDpڔpj]*9Tǜhquy)At]t͘ l;+5y$0:<== ?=u'Ob.CHX^:X:Βz`bQ7@0N,#ɔlg:F Xu%nf-@# :Q+ ʶgɢ>9|0?p/((~#(?hyI3ølrTǙXu$g|0_ϝ]&h?J6  iՋotfo΁l %g&D5"C </ҷp6iX]@#90(9x~T骤JJr7B 7t5r|pI  3pCW " [Hnp5t'x3-lsX+G/$u&p%:B@9)0B}J̻^DV;Yd̼(歘]>2ueծ8%Qw挸O ~ET(; ;%30g9@׺{?$! (ﰓ;M@dN=Y=+.rI;D|?p8N' 'ݚ^AH){<1a ?{!κdY\tw3&՜ozf(O~\ili͋8~\mNbKpe@ĚxO&{\s\t)ئ>|KF ;HۈMIMsbG'GWYrK'ϛ 0z|-5?؍F>v 6f5 2.r|pw&mIk*k_-00ljHZ5+^9zsn*s raGLRDtWV^Lm9lW}&w;Y%¼,khR(40ӫ͠'^9:4 0n 꽗~x(}?fy~jnSj'Y$GH#K>tn,~Y{=#kY6^4^I#sf_K=n6H0웟cP"~x]Ţ*uԖBn[j 0aYQ?gJBÄ$Ο;0pI!~.˓"۝FE5ApɎ2 q|X;nHQD<ጲFf?4N]h+,3~G"(+j> _u iz| f^a̍`n'/6.t'l|-|mM6Yo*6n{t0͘}ձ'8{X # ;W`2q3* m|Eo#n. T7 ȆJ68 pe4嗾FvfئJi 4q|{)'\\OM{P߮2~KNx6{Ee;CYA5h/!:ӁjǾ' ~_aŞ[74an9u3e.p`/:0  eTwŚyWT֪mg? 16fV]G;2 =Gq e;H<=;~SM =*s8K؎$ED^ߟ)} xdC&ǜӋO< 6=l]-1V¨ 6h5\kh`A򲒘,H'>m| O'ƅ{Ԟ Hq]]_A''|!FXp65$Y.|E&6!M.GeE,GͩX`CbYk@ع;qpYNy%I llʴ-q #dt#䙄Q ȣxVo{xo=ixaOaM 6DQtLX$ք?x'$~^߇Jw - &9&N0Hʩ/;5ѣNiNy^@g 8mRν -=:t䶉͒`8v>ºo՝>[@G%A~.d+RyX֙k΅Xm v_DR,_7c&>R# kڌ7dtw#{Ke<Ԁ꼘ҒvL cp:VWe3a9.%qJ3zi@܁Hs4\_[s% ~x_ʷQ^ifDRIGg>M+)yH T<7Fs+(#v?/p>&fp9E?O`m\teEd1VJ\渼!1պS}ݦSD-uKaqCc\qyPB0?/FQ:'@QbaËTJ`ӹ^ ќWtu ?({gےU/]=gab)b<Ajl~0WQ{r@ܘ(B׫mu2`o=iLdB;ϳlKR(bXx?:[-BT7m=rUD(ak!!ff<1zwE>ԨpjV !w`GnTDO<$ͫ dI.VUwj`'AwR6yTz^ N4^3sa7Sy݆Wpn}Z6iCkRLdL10N$ةrW쓈JO+6*/;9{g.{+ hQ{;AZSkl~x\x@Mm)'Hq*ȓWK.W|ԑ۾]$ydwڳss (}`D􅜗HG몈ؙ iK /T~SUکL8;/`t]W9`Vj G8#9EzCA@„UAW>A E}z{E,i4޺2y%O`+*$*Դjx`7멽:Œc{<]gE׍[NWUկ }"y[Ecvdc= y~Ηza5t[xw@Y[MNĶjױ<:n嬽| țc.-s2m?&۲}ڢʰP"۳IW|b—NߍzvzdrqTT}exkI Mȼ)>,ɘE5 .^we* GbOV\m:ExȽawbRF!/b{TXaFxecP bQZmSuh mfR!IcY qɢl 6pey zzmeh7:ӏPES~nJjO|엣O~{g/~&?ĘUxt B[# oÜ (2wxBtĈINw?](=>Z>0.=IA3$, 9yd9UoB[~޵@ lچrS3e^տ$휀fAe@-MHuJzr@PZtԔ<+*~u5AӂۊC,D*XD_ɨ(|R#Sf)Ɣ P( t-#hģOi-ø QƓ#ȓ^t0JZEc)HRz{YZ|wёSQz^$Qټx7)).b60ϊ޾JǓ#&ǩtV'릭/Տ>a^6co$ čura-B%-{aX}QAǀ/xb{lBlj<̥"gzMNDD,}Xj$>cCnMoѸBe ;l Ty.G 7zfrwh,9,a TP03QNAVe}{OxL0d6Ѝj|C^M5)I13:❅[Bx{I?K G\?C3-6YŊ!F%[z-gFAQ#Hz/RWlc&YYElb8D =DdCa`#uf["x;"t_U@9qGihjmށL枷;Q>*P#x2TjȆuGɾ!CI]"W&*Oth jjVLE1/a$%w*z RjvxíM;&|g<#3&vSE7)h˦n8ĕp!8`6n1 r\Y` zl޸ɷ (PT:\9/Ųè<[7FFdt^~BCRU1+AS#1f[=Ik ]*XSi0agNίj$*AjK˿bZޮ62) HM #w}rɊw;@Ks}Zv7 mɚh*ތh`coCp<-ti<J׀xI-QDa]DiEyN1|"l4^Wn/FD7;Y.Bh Wʛ9+gƁyY4D pO1iYK+FEv>vDNo)@3V{γ^'JQH7{TKQG&D=kF_(f- DzIJ$Bptw!ڳF75{օѡ[7DDʞ9[.:p-ljJgg1>0^pfֲ ]9VI (It|]s=8(q蓃)бԝ~ E#M'<(i,IaF:u1`zfȆ'5~8t/yƯW%WCEN|Cr>Y+]R@"AL:vc4̙;3.S |gif>ݻan&vXz 4R'MQZ)%VVur|#*Ȍn-X r0]51c]F\俜ŹhHuK v<U{<{UZinLY<}Qoz$BzK#[v(ojYyuv Fh"((MM͚3 *\:?GE} $Bmٮ%K̂1 |'bmsD IՃ(Eu8+Q ™p1Bc\6ـ\bSBarˉ_ Bri#8?o,2EQDi&M=naAL=Mew q{a)f=O႐myD21Q?&fC L^(p:OEGFxĩVq8D'ډ&.:MƵ 5P3y:x:&9@T.:ڨ|c1UCE*AJبWgNs2 $S2 UpUMZϑQfڽ M05*(TP'!DJ& n;?F;kcOoaˎfa _9Ev!VYw +˼-C"Pyqտɮ/["Eg-HM28f2pH/?ca0mI;;?6VwSp )$Ml#4]궆 0|n#Kk3mPr. K>o'.RJL%CT.tX@;Sa^bnǿ {~Du-ٍ,uOkD$ه4vgIp0+:2!I"=t.9D&aSAQ^DUqU`f9'3]i ER&d~RS;oɃw Vl",?:¶F|^,,WP śrZ y_/O`֘hP6Kt$Ҳ೗&@ ~(*-FDa|d;?]B,\+\ĂNmbZX&;{oC.,=~ C>LZ/ą6i-FJnLa80Gi Z!I]Z4˪^t7 Df[i{Hސyo~Џ>fӨj'($uՍ̸ݘۭMX@\}@3K|SPzHܪmqM/NÔK TcDwͯXOkqGG`:]pJ`e/sE\5'CG|Ϊ7Am<1 ~gYc+B%jlDPFaaɨWi% wMnu:IJ(kJS%:ձdB"H VE㨎ML+Sl ?`8˺o%cI1lh.K#tm"m|ؕ.|1!bl?8߼)IZ'+3KNԠaV\ՎP^pwIQLN ͎i=Q0jiWoBzPr߽KH\>/D 1j3HLg1du‡3.׏D%9A&>gaeD}n7nF!жƐ ?o^ȷ_F˫Es{zIJthր|UXQب`w9U,t &) .Gl#IMQ]ǰ=>+>–;IĸnFST=j ؈G<I#sM zqRI`'Exmlfv\w{=Ԍt_ I1p3,%-_(=ń"=hr'G,6bR!lmO %&!.7oQp}_TP<ru TWhAxvwu)ElAMF[)n9z6nS[vD=2wKh[p y" ykуI &> A b9=2TFbiF*l_IQq+K!"m팍HZ"VQwiGC9h7>*(85*)gFUWHR7r7E1pHe\7&}ְöM:) z,Ph֋&H{/]Yg-9m@9mM,e#Vډ,`2x,+) |/a->-=ȁҰH:? =:2F،~Pe󖮴CagQAogoZx5~ƖT1dP퍚M[V%lW^֏Tl hcWCpPp/-L,'ٷ}Yo]nUˆ!zIx`cplz@i srSkP=AX^.Ky'Pj^Ga=-0Bus߹hת8z4WƱR{*)*ejdb<`5Ip]sH8H2BB lo7|Q#LtlO)pX?AH؂ʏA(Vty$銌l,m:}c'9?HyBSe೮ `F+WD?û T&ߒ̰@T&i%ZZH@WlybJirc#1Kcڨ.56 [9ؚD^Y{5/^5ު4 { e}썖13ńC*1_Ws]~m $>s/R:Ox!zK<Pgx`$`wcRD*R.C2a3)ìx Ҭ1k!Uw /?N3lUȁnW]C|}i$BuV8;[>|)l^R"-H)Rn|H5R!۪Ɲ,12\GLL*aҋw>z]`k:c[k5Es$^{SR+'}#-h""f8 Ly:u b+=NYG(O%9*;3c/Bb/$dH) "ݪI -RIGFDDNj2oȾzqG@3{i8+Bgժhu5#PSOl:;4L8.;_~&.{"HS4dã7 *ggUt1͕KY`ʜJW6NqnJK*;źĢyHFyhAo(@(6\x~6" z alcnCh4 .;਍oV{zKQ0@TjҲƛ(-n`)_'lTҨ _"\;ѩŤzsS%ra7 AXzA3q3mzbŜjjts`uk<%TvjQJjJgi\tcT<EdbOx^+UtAt`9(l-0Nln|{*\`?˹L#&~3~# MֵIjWu[4F"ĵpb?#3&1uTDmbTGp|eRؘ {ZI{1^(6Y T2 5QLaOކԹHס=I j `1 .PHͧb$ wQаҹe^7шgPӣ88,=1X޻ٱW=15 O?*mlCY$#G]0|eƤf͗BَXgAXE o;t8%ށkK6cN6dKRI7Gq0!>l$W/W~۸a"{]{pf3F2lCa_ b,oy~HI[r$O/SҏZq{.ӣ{}h+Ω$x'3ޖK]>5Z8n[7+7H rAc*ݪl])6ĄrЋqzY$<~n;ЂZ@p\)[GZ3]@>Mח׋SnY3crVH.a"ڳ8]l;+)?,Ɠ[ _l 1Lև~kxޮ0J 9.?aF9rMӬ{kiGF4\%bq?*WJͅNqfj?(Y س~jYJ haMd| `e9 A$C *<{aR]n?rH}E;J 3~ښI"pvhS~X(sB8rF:'"=ѓ aeczc`sd/4O)I PKfXJoJpip/_vendor/vendor.txt%An E($j2 Vs*M< qĂ1e;f&L!8+S!x{[J'--nޔ4X#Δ~;⳾:CsBeѝe7Y GI͍kCIIz}X?.Jr!ЊrmWk?[jUrW@ڟ͛ |FLR4aqD* E3THxəֆJi2;,|' M\GMZd -s1BzK.ZB6=+qô ƓIzsC[ Qf@ϸԶQRXǐx$eRœE7^x PKfXoOM pip/_vendor/cachecontrol/_cmd.pyU]k0}М+AfmYʚB7-iܮg⤁28=:{ >L;s,ikKtqZHZ%dL+ZkG&mWLn+,dZ=?2Kl꤁ RGYfъ32`]`u [>ZozH/2ZXRfrgqW^uʸA쳳%˧ȵ&rYRu0H4ݷ$XL=ҭ֢<;KQi:A^ȶ*^=P"2.'ZL)#P稷fTp7N福0$ }f\\.jyrՐD6fC(@p⬺pN_F[p#\.vFinm! fیّdŴaޯ zɀm7V\o mg'&?#y B"Lmx iROmY{8!OA݃O}Ə71#Jh41ilX?ԅ<=d(K2kBEwBSЃNF$I[˾y~5QaE|E!^DwDr:} OlO# YG.F7oaW 6r'OW+oբ2M~@P*'۰3-V\S5u^ 4Zh`=p-xiGBXPb41BdS^f/6>w,wc{]ol[#[&v s[ݾhg[PKfXK2&aH&pip/_vendor/cachecontrol/controller.py(Y/Ւ-^Q.@,|~6/m;>?8gh}xQKJgEC V=SVyYYVM]_XiVUd"~/8nt>\ <ث(.CbQ??N|vO,y죟ʉؖGkTVEUN2{> 3ҪbA eWeO*yqޕzPa7u\D/x﻽Z@Dyx)oϗ́|aibLP(xNtx[^]гj l2 $e˗?~;[~| 73t3uˏo?}^]?<;^]] Ι^rwrU]DSd 436Uuns@g> oQȦ hQ-d[E)hd;mS_;m%+jʺwj2X6M@gLaA v0^ z\ }RN_nKH_{Tl,8Oʦͫ[W.y߾onA g3S!-1,[H82VrJeu2=.GVQUՔm>֥I?to,i[ߖKβV\]Zm`/rd!nuo6͖ Jh3!eӣ6d/WU ʼ#0?b+{ڶ4z$# f'4+i.j |e–tyL2hco8{vV:|CP$)F4ɏYgQΏig )8x^0:UAw"xS,i7mT lu^:z1bJO+ABJ6PxMp㜭9Ѻ2;Uc0 =X  ( E 9 ZL]R[,_t&׷Ix2ʈ e1~J%PX5R٬(=픬 yEAsBXilnwi¨@ߓjS%,W/+/wU,6?~sP Y[,wɎ0^cY oQ`i6 Ȣee27ybi*<6I]V߃`^QԢ""{?roZ1`%EdHoERjqf3Keu$YXK#啐y3 |NL|ZH<擖,*r q Z1<[oHpU8@m0!hMݰYQdEн9߂B ]tب/DϳgMnS3!dzG!a*xIFi)1zYT\/cTRRX\Ȼ9-k/_?VyJhFZUn/pbrϸSigY y18f1K,Æe;&wlfҎYl`C*ӝBnqQW$:EաH{?1z!q (JsY v(QEBJQ+R0ʏRM ~Ҧ=1a|0tt_Yp+0-E $IKH5"iyo#tgͺZiN˒ T})g0UR'xı}:_0"Buf.VM:K/mc} uP_^Rxڦ ԂH|YI D\8ʨ./j.R&S7c>NKт+ _$;ܱGCقR4mm&eq?2 n7οZ]r^$~ w~О(I)x3` rnBbfua\+Qe@ K [9M@gV7wα_59ȲMq4AɃ+\hMX=<̹_0 .T e Q4L@)5HbY9`"*"tO#΄T"( =9m6ef!ZtLO sYL7zklAYTwz $5W qQ(_)-@; ,+(1xu,V.{ -8/$CGe-#1Q=Q}ŏ+±lpN%'nop>M8i:t6]7chP Ac,@ <&)t-= mAi+IKR;8jo@qDd)ylrn mFsID.VPP!eL -ebp7ikwS#_tX2+1x1堺&D5B97~0L6~L (.%XR" 3N `]co@h -'mwbs .)Q,<$CNĿ37cSo<<7g$ <9 σp\La>3~ 2]-MDMwKvyϝM*N^W6W)?hώ rE^H׼Q ~HYuHmPKfX0['pip/_vendor/cachecontrol/filewrapper.pyWMo8W!6V @ȸ3m3J6')TUQ%s=q,__}R=>mTpΛ&>kw7&WΎ.G},FSsu|CwͨVerL8Ea4յn})AboYT<~:]czor?4Uwv7U ]Uz)G`616Y^8 vW:[ uWAj^)]k U(o*)z!.)-P,OȪQW.c¢WH*(y` XlsA2$l$ocfڤ^ 6`(A1Oa?m X_S" " "r*xҼAsÊ?;6p[9BGA DbI[HpHh#~PkA0:6#Ś#x#wI`9s.a~}] i0cgPHnn|\~{vqI -PVJd(F65\9J0.~'@t:R+Hȣ0/Rck~u?yzqHNCe2D,q%6["S#[]s]^ smxXmpNz DYLDiT GhSC`IwxCTcJt+:u, \+᠎ `&'kIҨP Ttp/Oa0c|l)]ܶtWLgp.yc3ə=謓Ap5 FKZǛk.J< ̰T|;kn-D^Ro]m}UR*k )S_>}PrVCHMkiPKfX&pip/_vendor/cachecontrol/heuristics.pyX[o6~3[ńe@&M]-Q1JH*"uq$wߑv7 (#yzd|4С!:B)6Ґ N"*S"|tpIoԊOPĹ D prl3FX )#^9i=a w<"$yL:+-GXA.uWȪMFk'60x}|wo 7-?%܂E\x`.N|#XOZapt6GC:,P33sޞۭV+"1"댂#q~;(=4|T+xj(z)_u?aFD K#MU8R GEӛ5W*z=8%dXJ;JECk"pt%aq~vO akFkf9Ce(BWK ^*߹T Z9s(F$Bs+wD4OKR?V&=JTqq=\ ELg;{ޞ7C%J J5a4mě"~ Mfhs+yȆx %#uՈхQe]zъ% Xr7k~~C4o+Ɛ,jS3ЊO@U "" (mi p4W&A Z9<ʛET"hZ,W9۲~<'9s-^Cf}f!®%i0UOaҶ Qp۞ާ ޼֩m^hE :qjDchHTä^Z.ᬯSx\t喒^/vTg~J?Wpݾ_^$pGӘ7Ў&v1䒦Y*ë32ǽM?`<[40&_k#fVmtLj3!O)2`4.^SAQ7]4}9?:'~ 1r6nrǏw{r3b0YPKfX!pip/_vendor/cachecontrol/py.typedPKfX`+%pip/_vendor/cachecontrol/serialize.pyXmo6_qS>  4݂um#piȔFRv.}w^(銽x=翜?+7+s?=xΕH%Sɑ~)R.5?ȸ4"\%b銟>LrUakS+XXW2, 3z2iDͮ򦕼xկ狳~xC.YEbL;Y*^lJ_tv+[͵ѱ6N;ݞ9c_FlsZX>nxuu /FdwK+xƭO&`Z[+[HsqT4f< &v#9dSyj,&| wdp~Yf;^DB8&#g:plōn3t_1'm]K K`<6PayBFEVXf{sa.2f@¬P[ȱ`dVp"FEe}-l9f<-i) ñ[e=V^R9FQa=7fP|̈́.9m}:0B w>t ۱w#"ו9deCcm d,d OosB6 &X.kؿjRr+DJe˜Jme??fݷ1ߺGpm?VajeFɜP~έ~`=Rk!U!4!)kN % 53S#/ixbÊ[l qM"e0ЁE;Љ;̝(?4/%0X 9A>3* b. 30v1ϔLa3SY-K_fnE-IǎHQ5ba)Ja\K8H;b/o Wc^Gg0^/9cV;x_[ mΕy?^UYMMʋllq }[ B\A3|~Z,ơ=n/6>uۡ-*z~*>tEj? (]ӝNJye Y\R?ŚXUh4O6i%bo4:©;|EIxó(:!,A- { =NvF>WkjJYtJDDwLi=1h!!rkgY繝,#Dg˿Amo0sSz&;@LW՚%2QACuor v%O>WYg-N|?|Fpr2~?#_QM7}֍nu qߔ;j`KǨdMSΓ<'PKfX<e#pip/_vendor/cachecontrol/wrapper.pyT]k0}ׯKbpsBRQXHt]ڱ?Ųx[bs:noV_X ;gAJs<5 n 4g-lڀ&d׊ ڻ]ֹZ<A%FIʼ*%lv&+V슙݇ö'cMR[h?)k9ɭ[e=`2ニǬ]]6,z؍aZ~_ruר[vi_G:"^8?+lٶ< 1#L `ƒ?PKfX%N/+pip/_vendor/cachecontrol/caches/__init__.py 0y%ڢ/AAԃ B m6Aݙo&vyL;ӥ VL Y?.Ƞ nJ*BkScgC!*v-x򙺢-g󌳑]/!5qWNfq[XR:Gt(S87Y@Ϸ<PKfXeJ.Ŵ-pip/_vendor/cachecontrol/caches/file_cache.pyX[o8~:+u'ٙ t0mEA,62)TŢH~(LU-;coO#;"eW\%GG#J _f {_QՊ%I^ZC0K,BI3w7E)P٢kͫfk)m*!||>O~=?D~m-o(̈j<̔dyժfn^L-T\s Ti_O/A7ݮ5!?19jbӌGݒVo/e ߍF rH) .W0c W*g!m̎ƈ>,6̣7Sܰ5YŜz0΄ 3&, +&-Ұw<__};8bkQ,d$I!Uxa"5N >g 7nvΘ Ro Hymd4!1`8ͭSK.|ōaanFuM{~{w돊y`9A٬J! Pi@4YtmJO?yDqA &tg!VG C8'~Ѭh̟Kv/k_qAq\ohpya}~r]KxePŽ 3eR }tQzG%ʲJw]Um˥S f%J+̓/p%?VGaQ̓0S4BLb*Nk@5$!4s (^P0M15 (ş()أ0S[Af6 eXU.o qd:RDPwPӒ#qu'"W<o NKXwef e b\ Ļ&#DHa$j(I;ʄFCF(CLE|Taु4jokNӟNOҷ۟&,$oxWG4]ѰK Q:}e+{"u˚N9;#hG<%?ߝ%Tg$ $ё2Qg?`w4c? & ? N-vlUߵ<i8=Hq7vb+2E1ы;=C2}e񴀗L,(\Fە}0rG!=ke/T-=ls^N< d<~ B=ħſ]?   ܣO!<5\&hU[ lGN;1I0B ;i &j`2A<Hӝ>~]ւhjl<czw  ښv2G'Cf$^&s֫V6qې;}׌ iPOjkqԴI$*t/Jp \ҧ/KT< ۛ=AqrGW-cOΥcdnAf:m7#lpY=!B~KlQƿ.5|wYoH>+պLJ( QP/IM803ll07>tg±jsPƻln'7.AsdqSûPKfXFj.pip/_vendor/cachecontrol/caches/redis_cache.py}Qo0)%ZkL%Ґ61M P%µ#sdC[ξLJ6{Vkp~ ,*Z:oM2M1Zh<ί*4j.w,8?gIaQ4Hc,IR$A$$>_ |>Y12>X\.n>uF5x@SY'ऴq+K$siY+{ɗ`UKHV\2"G=-p]Q*B$\d:oɵaŕ&uفyg[#|kC2ĩsYijYG*IaT_9P^yebLyk^+ڇE-(är1BNۤLw71xO:+Nl4kj4 ]Mٖbkc$^^\ol|˅\%D"BjU;7f]‘4p'n) ȭGC\nu{ck~)-B ]k93\3@SS{ gԬ3sY{^23>ceԤt76SU] nWT ݝ'<"%wfp+Ge,{md2g|2Km5;) &1ׯZϷ-Mԅ?nhO%^&7/" ~c}޴E?}783@q|oZY~+Q-IoVuwߪ"0̷/]TpycţD6YwH_IdP |dAU,^ˈMJ-p7eK% o`rAo `b$Y SC4^Đ߀/o)1Bx  BIMHohYrVzCh\Cf ѥ+w7׾"\/)$򹶇L3<;:cDT՜kyF%= x>DW@J([ <[Vp4q]Jž(^>P{݉}y[0ɷk<}~ ^EWuu-0o8)8g&-q.SQ7ķX z5 "Yj)2(f?O/H&ooX! n:"We3ZfQmB*gW?(%VϬE;Y)]f|J6q,Cr:S,Wu9w fb-ޖNPF]nˍ)_ohv9g06;{/ 9Rmܡ<,mPT7]ތzo$ylO{vJ7--W;9z.ɱ$v"1ԧ67Or<ΐVq1*H?/=" -_G|3xşz>eIM>ׇ :[{;HIzS3{rjS'aʬ^rbosZg{ m?N3$4{"k` 5PJLAJ3y&Hn!P`VFn E.3}oi38dE)3l'9q)C_hil>Wd\|cG] UdzD>(._4){ 4.W鶎Z:l ,?x6 fx0mVQ>V`iDݶ:Uy|F" 9 @9 'q/8YԦf{XUf+U"kB?=wޥL}N!5z"L#ߍCszj~uIsoezɉIISM4T^$ L8J%2_jͶ;'\PE0iCdck3|oGF8P_47,|@njA@K2kv/Qc 7D!Mml&vN4P&7(Lߠ4Nnj'7@tntC`9S,'N_b< &&78mb<0rb AO8k`[5jyJ3Q4>MH\7Nʨ Ίb\dj;3ϪKj~E@.x&5gHQu\G?ɶ5>2lb7x Hx}o%AB̘HRU9{`bq4aH!؝j4bRʻfasSb p4(5CeC\wN_4u%j PGyIjEY?'}.E$(I^!vА0>QVfkd1[sŽ?A&^Xe89/>$*\Yn[T77[ѽ$~I\%8@0} . Bo"Ox :/b*ߏs Z; Nr`j@֫qBg[wX!B԰ >sZ8z?K@8 Syv \w!R͢? >?Ŷ/ѳX>m^,HWuh BeGэL+;q)1߮۱\(e[NoB߈CڭBdFu AxD[U-_7^f)vam6&¦'M8ʃy|+ٿ[Oz+?uK%O ۼJ:!B /,蝓 ,ɝws HսpXȨe^ Ua ڟd' 14j1mgnQNquDMGh)3{'=nZXƸ)'1KJM #@UF'pIB㪟 Nݦb\#Kv:cw <,bϧnڧPJ6xjW2:잤> q E^?ۣ'4sG qG vw:] 望j{<& jeUNt,][_vQ,ƻ%Vnf(*zDu4HpfO<~;ĝ2.m~oRo{7jQKN| Snkх!tś GB3Q} y_ sNkxgO&KT~gF|Zx˒YC˭J?ߑl_|(ɿb_6zsFeHi,Ѝ~B?I"~/z)=<,e 2ȁ/m6&ڟjz 2cq=׼E.r[/^>{0Eg/-KY"݀@׎UrsWyraK^xv V[.#3!cE-;vOCF"6|u:)WSa*K<^V&rosA޿}m+}ٖblkP`LJL>E1rPF|Hv<;g JtQ7(BpGa`kb͙~\WgИa(s5fvHh3 ;qM4WJg*xwV*` tBW*9O=I1dۺh$Lrվ̓6:^tlx}W!j{J1C^nֻc ;6h ɓVm<< CNaMx™G@5du<5֝JJ`{-t&Zr8]τ)23)iΌ m(ZZh6} HWqq#Їy(P,ob16&ݨ NU\p a^V.vwO6.wR}R'{)tryGqV ˦zX^{|(xΟ}IIk~a u`nmςOwRW=*gQ6&֗0Un 2;9gօf}_'S~|le[{K~9ʍ1g8y09BocuV\C<T&)U:ԗ=c*1Ú?Kh6iPSͱ0)'W-TTQSQRw|ɜ=˷g <8XhکUtဌ(+&~[KAwؑ҉v=: ({002/q3WYɏ]^<a-͘2'ZSQ|> %.<'Kt.F(! A#S C,F @dD&L{C_]hw! ˤmt!^ċ2piOZL-`!%? - _2UY8r#W9N"-e/*L,i-4ȁQ֏P+*JRcv~xl&˳u,L4v0vPP3гLeq7wHV[z .뙉zɊ Tƶ0U蚒Ķ[hKs(.;intH㡯pX.H~&ӏ}<;Nz!&=A%YD8QwC#-/`I(= HfOIQ=E)@rep嶹abj8{B3Fcx2vncNx%Qx -`83}CFJCxx*3 ЯqUyDž.V3i&[OD]9]?<7z+%FƬH$j6z Wi֮\C̽9ηW®.W4)p;]僖FMi1olM>!1,e;By[*ی5~}lYӁ9exr4ޖ[LjkB{YQhؒ%}5cIsFͺhd#[wC)-,}g#G0Xow.523&R∇r'6Խ=K=b ;jߦ!ԙ5;7W>:){{}\Pˌ4 @Y+l>o~X%cYAIONQ/2>Cob}3 ۷?$zJjY>}w5+zKQS‚g> ^f`1@!aQ pF@:oJl E"L{"L%8$zw͛/\#o3JvSlGKLRH-FHDov,qa%fae,N&"f.i@`"-]h1# K EFM r_=mتQO!VY[%Xi{a+ jza+g_@<Е<<:a/>x##OsY_%<5xj+zB8Qg} s?syП]߹Iښ -Ie\52>fg?B;e?m܃Yu[fWo״gڰm@tf PMQ{ԥ Hx;S `1\փ&5O0T3J,ӽ; CwqULA5wNh%֬bFLsgY?-"; u~:t=K;"wpFBy|mTw 8Yج>r3s(օ2? „c9O"f]B4\` :Lz&x 1hF wDw96eMhc k{喧= s'<Y_RKR8˚Cw }3֘Z^jbʭ*vp{=1h"Z괽 #?V d\xD_O>*)Y2.ԓNy+mrC4Q Jqur[aFa@%ZGS'?^M:k A ǿ i7&q<}qDWA}C?ی.0/d Á%'L_pP2 v paQj$Rrt`*ƑKhpRb0_f$V#cӅK͒u,N/H| &4Nxc*ZšhIA{ tF F,闑l-B G=bsY̡PX1$)Ĝ{$8?i|Nا ,NH`Aˋ!m?ƒ%~-}%ۨf{xSXD̔k<€Ԋď =({ YβXj8B&[*^ΰP߫gyޘ`YQ8u6sۘVɮ X΂鶴dx#4ƹ\| (w3Zw|D]{Xźd2.YHL^:q4Pϧ=uYe=fގ]иI[_?0@7;#~xb>b܌JF㯼]FY;pt8Po47a&i#ҜLh<>dٮWv Ԋ#diͬRWfW'51^'/$Ĝ'A.Txcc@zr)<ҟ,$ȦRSUr f?~k_[Ev<[s}ǘdl^1%'n} i)?RL<:QwJz}\ :|oڴHDH?~ cw+^1\ZN+&^\O8}W--hĶ%nODߕ#_h@0&KX9.c .w/?ʻŴ"r)n/pRфNљ +Ѻ  R9[^XVyʛ@J5\v:al7Jhõk$ג EŮ[[4tiS1G,n,ut7*N{v6E CgJOAd]XـF nL0pS'Ηl9"D:\,ԘgAAv]ӕmqD~[clUY']9ٿ&fB[IO0Oe'/$pdqoCVņ[6J{li}Rs4 y pb-2)6{}9܌GRpKcm%H|mšB4g37ka9s]>;x~[u#^pTN wAz^XHrkΥ SJ2kqvn!'3ɆNxv=;Iu'*%xmX)_x͏wt7Tb.sY =P>fnLiVsB[pm1')! oE{=oqh}RH/iLpZg79SvNuT3[/ܸ^*:">GD;у\*x՝d'U0-0:gޭ"pN%fsȊMoCϣ?c/,>O&N!N! 4E(BR3S0eK/Nqf1'b^7f ؆Bmx@~Մ_oL`V, N^fb`07% /ުI& %~%b_\$,]dAt^'OV  h +k4#3H-uf?qPru e1,#AàW>}uzyj1*G(H/n|{a!qXc;/)[ }q Wj_YeXE^B<罼8[-"H`K<Kw;7IM; ;Bq7'55̓d: jDSu"k2dSB"v'd+h4"}u;2N箫:*0Grqv=z#2X! =q񢬉Uh<>kAG5hm0nSM:,!m0_C @ȉi ):?x$< QTmc [WfhI%<$X=*#RF*ǙIFﳋzF1E4Ic}O)ne_cQz=0!5qC:kۗzrX>=Bט $W7>u+5Jǒc6XSyM-4hz uj\Rni*!EѓHY 3\ф⡼͆ž:|k)0|*hYsLߝOdּL8á(nXbg-4\ޓMUt$Ղ9#j`Kl_u ^2f+۪ݞ  4q>?k,Et~hC&(;iN<Q+O 7 >4Jţ O1Ҁ==5+ڨP >7w0Y&k|/|?U$ a"qBA ) 0h WqdI %-t?EE, *GK@l a ̂dA2hH-@Z]ul!DERԂ@.YW`Jk…1tȗGZ2^d9=@p^4 H{{Fj Ԗ^Ňn}$"LЦ׍"Js9RhbqJNL}/P/mc(*veg+GLCS3+:]NW?O5 w/UP#Z1'8vSSWS ®ۭ}2]޻*εZ S-:=|ؙYlw7G; <̏ѫJ;w\1xUԠ'sN:ݦtCF. nK=VYIjĞj,w5 H)p:q&˫#{zj <(ouION'AĠ|\`=A"^QD(fw-~@,9Iv$vO{*QsIE ?IA_IՈjlyˍ4.`?E%BHl$gӓΓgLPS|W'Mq-hE==Y.r+Mx^!g(ѨGt"J m]%Y'#F}/\Y8G>\$(?1d]CZ7O$ˬ[Rc uoYacu9i(c5{-ߝ΁.=+J >mS霧|ݑ}~\| bwO+xzB[ޞU#F_%kjSbrWOҙUTѓ:1cveOcu/ϑœ~oR=VEOGҘΠ4B$B$ (hyYb`pb.ivQ@}] ^P%x ,RxItΟx!h|GOf@QR]RXD/W@Zb/#orřxL_"ׯZ"T?C"?#@e=ȹ\_=~_$/̊j1}@qU:F+@%/#pfwfMА7/mN3X|<%W} q&ʼPƉ1}~<ȶ+6])TTyS\UyqӾ@U 1ɾ蚆(  +qYbґ|Íˎz0UѯhڏN Z 8mF ;gxQDcOqEg[ܦU|+JuL*Pw0avk7nQvM]51/]َ%PRt?jNL\%VJw@≂4Uw 6]KUvn1-m<'5~{AkX>[٩ugpLn iD'9s|&$qJ$AO j9ƒknظ#50:AZ7{=MbÊf'ꆪ^;nZʉHf$<[A-rfޣMt){EwF",X H|c:r;xk A޿wW ׍:jnM4kY x(cIq^;_-N$^Elz ~DsqTlĉt {O (d `65īxSW;Nֳ~qN7}q,3"k@sF~31pnHSdپU| rrvh)oh'(a-NX BQ(M"Rktg~$_T& Y$4R-VKqC <gʸU\X`4ŚruRT(#R#½Ur:̀Kz^бӓU# ;Ҷ*ձs,Z J <‘q'Ts[O.I g$YThcmsY̽b ] &PeS}/um_6_6bxϨ.009DOQ+Fmp@ `"(v9"%C7Og H%~M&^^Q>^j>PnSr(Ɏ!^ČY0Ӆg獝xi[*rOjyQkJ:} 'pa.57trR^M#<>.zoő/ iJ%5I"ZјbxMmRОIHA:z` JxۇJk'(bN]TPncd=.5)X%- Fih/xpi+>2"GyhItĬN01Rcj&E&N.:OׯPI&cj6w!z28>7I󀆛ވp;!r1*AyUO.cm$1tLx1s6NZ9e/P {3K&Qd|u pX`Un>ݹzʌ{͊^YꨣZi k @Nsuv:1KE kKig]j92DX!Q!ݳ*Ы^rGkCUJa6WdORSi,RŇ9]}Wõ4LmCYy+YUc-b^(@ɂϩ%yg R/rۅoga%r@Cð~[ o,`ѿaA Aq7f8&>He㲣qp}*{a:0 ۝ T7W.Qa"FQR=z ?$g(4gY/ʼnMa яu*]v ̯3"Y_5g'[ҥAz2=2J]suSEI瑕 !- Vϒ|5WGYk#qWdtq _jr. &i݊KL\-cս]!u͝t,7ET&IagtJk[*#;_1xr).Xpg][z 4;!lx(tWO˯w+D9iŎ7:t3H4t*DS"ygʵstʈƑ ]J3y^YC9ad*gyӒ[Hid6 fp_}W~T R?N$$RTRNHn(F|Z>-,d: Mw3=G! >L{ 7LvRߣݏDKm8_v\_GȞ ={Gbq!h;SQ[6hV0>}AiT(Dqs|O?Y@9g|j[@eg (eoRtXЁ62z;\mek^[lbD,2v}3biw]kW.)pkWEg$3M/yV"jU[3 {x{\tqҁxkTJ^OlIf[sm 71m+ >K;F:汑,OI\ݙ.H UCJ ^) *Qp+C0+V|C.1eˆDm|T%sAnf-i eHg3z7J?_o[᚛O4tכ}9sxtBd粦佊b O%,C~y' ;yN-)=DO^o^<rIz3{Rejۓ |*TJ;>Uǰ^~I~S?}WRu<\x`w.rة!aqrQ^ vw ZZSϘdφ7g؉+&%6dg.5 -L@ EhZrg,6EGxCWAI^BC8MTMj CEd!xv}d6&ܪ,uRgֽ8h [0:YbiHEV@ LcN<&=BLV=|?WYX8آv 4r,c??O'Q#HDHI`!7\`#)$(O.B5j1d]fC` >>/Z`o-0b=%=!Nopi|Lco tF߲8!n߮뀰}"~uw [+Ӊ-f-l>1E}+3eʟj)|i{O}soߔ)m:'mtxt !q o0n{[~Ǵ¢"u Sca\Wz,dӤeBm΍2ႚ}}f@1P AY"dr?gP 7P:Qliϸ,1fəx&Uú'PVoivJ$BfyhbFU㣺@Wn\ f%}FrЯt|fntEvW[;c:"He*a5%drQm?XŰ}~~^{?1G? L( RChza Ja/f{ ztt?7%17b!(F/hN¾4{n;m ^SoE-0#}ܖн+bo޶ۢ{p.v+^ho3=C8t]˭vs]꡽={.3/J =-XW6I#*hKa?o[*aV#?mQ>Ja[`a1b [WX^' :YR{%1Uv1)k΄(`R(XSz&د+Ծ_) ׃.ĔEӯ/I|v/0!vKiB\ c|*Sܴs|ɖ{ɞ`eɃC_6% Js"nO]u4_HsD/z@ |m\U۱H.+b4!=NϤ9/31 (Sьwi MhJbiLx1.> ͣby/ 볢M ͬ#(M-; 6oDz ?ixj aqh d ޸j>݇_* sd qR,gh{!ZK<0m18a8CT;"s]Au836HHj8s [›l0=̀\0n %uaш; Be9@<*jb pvaczܥfO!si>U5?gX2m5EfwPt4I$\Ks4?\}x{qpBA6_>\9Y%}/_G֧'cw.}{I AI@0p )6ħE5I Fmt'y=lGc8't^BlnLmv7=@m'ٻ%B5D>d =[t~A 4Hd"c-j!Jmw2?,&JnB DOdyQ-z+_m WȄK(n>),/t4,—CC}ϴߥwΏ_^VoiLulmdcd.GH`„fm(u)ɪՊiG|,e1*`Z\cb_Q==_9 I.! p HueTR%~1br .̱cz+Q =tT%| .wt \+ Zr+) NY#ώ쉩Q*denLd.Kpb֐Ag+JStZXq-!x=]sm ,5R28L7y8>M$āFT0dumtm0WZU'ʾpccK]!QڣQgjk dѩ 'xA4|6FyNSa Yc9xм Uo9Z#lƒ06%AY [fp_c<9LKӟ;jJ&&exWkO{AbC:5i^.˜` Dz"3{QʎLeyzL۟&xt8efK߯hO|^yHM;NR/p|BҕǩlV:J4?sP̶;\CVº^x ibcuA5;!n$%G]V4̀_ûFo^eBcb#t"2~r&M IrD Jun_4668)\d2k@ ̀x uhvS;٦dyQ{j.]wK K8xݙ|xkXo'@W0a9paZn$f㬐..{˽w%g{=efUaO:o^R9N= jNb`Ď(+?<;`YZ `sQҪU3R, ~$zg>}7VX" XytK&DTQuEќ=qH.fp}1qɰ)UTm䓀82&p5DvS[ d>WY\+yWo ^_dN.J*G\cmXxW)}·X, k!)Q%Q5,+ZYaW:+ ua jsJK/aTRy cݧ *̑ڢ=de(FFs!KHR 91,/(*s5PA/]cwolx/|V#-Nɾl/͞_/=C 0JA){+m'NX$[bsjWۊo] E }nG"3'bhHޒ]c%O~U͢x;Kh(=2tgЗ+]HNw%2Sr_tm 8  ~m)[B@:of/p\n1)u:m>ZIڴ\f@e}MC"śQPG7 E WUs=W'=Ik/mY'ݬ`9ϛO `;>?s9$3zWJ,_ V ]Rz9Z=AbfnFU=ʴmӉahM,99Q<4 M#gy{T\*^b%}fCM'N+IC#aNj}nXspR>2q!CSمW/³dyQq4K x~;gwOcԽMb*_<@Q?<癥yO;V_tۈۉZPR_WϮ{\$A Ea%Q>U1Mww,."K}[h{,!% \ߓHpy'3e)킵vvm}旚3&F臭w!uYp?WEaE;9 n]^CEwD;v{s&&.?a[DB..bn9Ι=wyupa1$8kR9Tpnq}~ (<bX(#_Be!-oӞ累i=*z1.stꋴL]Xo[Q}>b`iR ^t{m~Ҁ)ni*rb)z")CX~;_jwu^gිݫ~~M@}Eo8}Ms,B}]_}cԓr>wc{]GH55N9/\ɚTQ@Fp+s.2kQn;zG5-GiDcZ.tHWG]nTsG&٫0p )E8=?2N`#5aGCM2#DLT<8TlAx9+ BH?ץZ" 钯kf%,=:%~)Eu Db+Par3IO`xpI|@miq:]tsYn󟩗3ՏЧ]PS7!9X'J*>uG-2rr7< z;Lw TqJM 8X6_SlG-]IẺ]d 76G6ނU<Ϝ'`w?-x&փwn?|>/?N.ǏWOԮv+,~6|3J4DAxgM-^me \K51|;=RN?(L'1+3EjIP}4=./m^&̪L+pz׊fb r[Z8"ppOQp`Gzr,B2.2 ZDc{E1zv;Pcw֔jȩ΅5_U Z:Q}C+ሄڭKai #yccY|1o) pOĘh80\B :lKDpa-r0}=u:p~imyV|&`8;k@'zY'BՕ%G.(/&0ٱԔwgjo˝BUpOe_8Aj8Oli0aR_z 3)קS0~RL#QJQRbk[O<[Gqn{âc tQ pqnNŔs.xGP:f.i0Ohf/"6;0u|Ҭ=Uf NmW=%/ "Kcb%?9 ՠ.VVnLGB8ЕqiҺ+cR 5E#VL;ULȰ體N߇(회%nSA`{)'`>dBA% pE?xpɞ/];~7\o,%?1^d`o#nڂ@ ڝ@h2[Tϑ~1In1nXF-={I>={q>7 2LL2 6_ @+6 ʼ}f^#nѽȰY,{p)14EwL_Xx[ϚjoL6~s{_W;DWczS^|o|N>7ް 15S4_|!e_=Wν"z'@wq&?~$_լĜܺZ'lɗ//vGֲqG4tzA] pgh/3w '<Jx!?,۫ݟ_%XG:O-8nAY^cB<נ9jE8lgs⫒^s It,׆16DuxeE6k٬Qݭ=q?N/񗸒 6K>Xj[Bv޿_̜X/ڄ,q 7ƿc^ZĸeP|%Ъ H=0]#}x|#Uf`" #tHG6;}r̀*Ox_.Ћ-MHB:ǚEvC 0uxEfƟ cf=7u: BypQ$'>+ U_=Ń,]s#`nW8!Y=; i:dPb%+epoè_ށ?,' N,$ oЋQF0yA3^o,ސ vjݱ Ow޵);;Έ;j2ㆊ۹KiZѵaox)Do{x#+$}w3nCz-Ye#7' ޢG oyoS*Ccdtӟ=8\x}Uۭ'W d^~xq{#Z/ʣ_>Dۀo+FηJ釶 ̩6co;{s,~ˋOy_[,M:0Wa5;'*$` $NδrEA(:.ۤn:T '\Tv DnY2c25lZws͙{rx%SЊہQ-3yԺ~:T1V,C+9&.G9Y2@D[C)k*̭X*fk&l|JWׁAUէ "1鞋daD{hu!^x3[ɱ,o o̿t/ME,3sU?8S끪cKMw3"t I6_K@yP,`:.&Ax=@D',%-&`r lt9rTfSY|PWp>ʘi2A$wզx4s2pwrXztM?P]hzD=7nȨ >o Ҫ5 ,b)"-EG;y!D6S;@ ƻ_\\;sl7(FjV)zxQ* to Ȑ]wn3^ɅOseZ3jEEoy N[5mSFysonoh,㿕 ܴgKX>wc5&ޓW+S'6B^*.gDC@iWn_ ?2eRoq<5IЌLcNvS1{BjZ訸2TQͿƺ8K+3kq vBGDK{{^G7&oQDw?@Esgl[i~ uEpW3={W B_"RE_dB,cYlr+Y;P*w5HSOt?t^N-&,קJNުp<_^u5gy"'W1#hBHD,[l.1!,S)xRkJ0Pf[;Z8lW1b l>Ŋf'MgKPh}-;._:i )k~S{4<=]-Ĭ;5dxRڟܲ%e>ni K v`*u?ԮP|K ͱ|ٰ`> 2vhNʿAQ=M RYOgO c={77cƂ0Uf&=0 YEV G%x4127LJS@v058L;Nkr U"rwc$ny\U+bjL峸sNRPV]ܶ7`)Wbm3L,|7Nܲ&(*d$*s !x A5:"Z/zL5QC=Pj(sk^'3qgmGH"7ZQKn?1@nQi&f1WxȚ1un a pA.%x6\2v (jP).9+Y@3Li{ޡx9Z4:v1&Խt*<ſ,1|[+H:M\?9cĜB|+ G3tR1TN謪 ;92pq_'`!J겞OY|!ò&qN2e߂L1O];ɱC/=eZS8nVn2>~nV/Wј_G7},)͚ĺ,w~Es<|B̃% ~`J]u߈QA)Q|^V^{/M/K8,8NM$j ZK" nRA>+B~:8E F6Th[E ?$,>,{z^dG[z5'ep bcv Pq/iw%^T78E{t @&]lt[L=q\}6 +[ WiRIUֱdA+H|Xj4O G~[ h1\+O$`!J/ 0$vxsxD;(<7Fʒ*Ӳix]\]R|oI}:[a% V#AҮ :KyqNG+WPd[w4o&~wGkΏ]qyLH밼Rx7Z܋ehuʛyOZ_x s7U"vgCO tjBidiM U]vi`,.(SmBdX^n8s냰"0Vxa9"{1Ȃ~<F ?0M244 hp }sʛw{ K?憡~CWgI.} ^i!M=/)<3V=; z;m5w{WVdv괺%?I#?xe#!cP9,~߱Aeϰ9*w */3sfcF{j7~>]1(lU5N_H8`{ ްVz ]y;jӻP&ۨbMLS[ X{2DR+Q'Q)e/NܩD5XAwG϶d`1" c[?tyNRh5˳S`[2E=w?g8,nPa "?0aYgb~wռ'OR/D]Gs&4R2BI;)H鞇@Hspqw1C$VHeVntSy~]晇Ƌ0Oi~zMǘݱ{^aB1lo)Tc_DDB- x۞Dǹ.Fi͍I̹tJx0\;$u]|w 7ichJ6'o\»ބ:~_S 6h>{LZ>4F'j CC_/m%ЏOW},/+y%DZe Ǥm3W.LU{UuYkmebN^i, 'Jջy1m|yz%k>wALn)2JhP!"sl=GdOʿ' nఆbL/M>L"8~zob{b6{n{nA@-E:G]5wtÜ/i2rQh$k+e]G=ʼO_.ѸR:{皷2 khCzI BhT5 s$iͼ#gA8=x=VԝsӑZXζ3wcˢzs:w6êtx=ޙyTV=aj02jPŴlUӛ}yE;߅z q죕[C^gDRȣ7j'th/CEUZhU ך}k>K]PsyO˫U|Yp18iœ *d7Qؔ X5 yF]Eyy˺%ȭZv 9$y聆g/{Q?0>mε;11=1ubV{9?3Y?6m@b 揧1,I `4k4M~jI`D떏nl#:&@$n}Iu_ǶV& ]\W>:E7/g b"о\IW&;X@nŝf(] ޺ $ < '?BL~`wlVb6:BL1=1߯@Lx1%CD:]nc u '^G:n~y W ]TdPfJLTF'ch]69__ju)fJ$\©jcǧ!l:ը}YW=p$y96g/1È|9f-KfcjPp#g݅{B2I~ہ-1~+^_HS`#HpU5|ymb!@ ?\\NUcVs/{YG-#0U]R/CgoY<`ޯ  ~d$f㇂&M+Qorat7Te`]yQN gu{.d_ o%jD(<9޴ w[pt5_d}cq{+a.,!hvyuW{iZX[>&' ?apTdMO PSl;]ɛ( Tl%`LV˓E) wJ^=!k.;!@C],`n+gЈ]Q/حoA̱pm|?3 S' iē`ra ?0E X"Ǜ ΀Qf!ٸIٕ%(TD `r^V6yU|,T ЭBzt_Q9d]d@6 =No`.nh7d/}??"1ao _NA/qb*_ QU@_QUa3s`;S65bu7v02K58QDÙyݯk-]ˠgCĦ5_ x^ړ'MjW}C^΅Bs^MF!_#&Wl Q 'uBYD5ΨW gT9ҪOc75[c 4A~t|{b_-(ҘFυa7H^lؓ[4\`)v( ;TJG}`~'ʲS5-ouh~&`;nxM6ܯdĽ֡cGEM@Sn+XX,&nR`G}t!.:t2B/9>lt/={W~dpjN0]c#U(9]F^NJp?TJ:~!N:!6iw>L9D}NwTDŶ)_g᧫ܳeg#FozYH?nw0z5`瓾ըJ}ah.ǀG2J%@r#(R[^?tHA:DwBqtR^xx#\`eI.KԍdUZByvqdF(۬" 6qns4'硸{j^X42.W}"Y4Wίk\xj:wܝ2BrNJLI)W'ݓJÄSQ*]@>(㮞zW BnGȉDl~Vu3e &FT9c{=ǧb݆.*mz/yy9|GHl=s#{`zi N=؁m&h0j}6b7o G^F$쮻F,)CT/ )$xi֏U74u/jv~#}R`S`iv~{ӫfeVa{?q|,T4[Ymn2rw$43؎+\C -cW73^" w욿)b"4CoiQ<50UEpq-3Db8hxsiZly]XPCQ`je`,c `Q(7N$6z3ʁdxh-~]Zr[^lShٖ& !6e Q߁r&u%}qQ@Q\u4F9藥k)~WJ(EC f17xSPF+#P2÷njQBߟQd쿿GX<7gޣCiFcwUiD,!HqBUK?YN؇ up|]ntʒ߮/L[lX됎4A@<xb0GzeW\fx6:'7jjcpIQbc2{p#yGS߸+w\|27e.蠨i"PzŻNō1ILҥXI<+a}?)dͧRN؇/y,Gt.#0 /LЬc?_| Ւwʌm*x#|7}OO]ħ NmL%edw Ɂ\z9[!E]/L_d`$k`ۦFZxkX[X(7#"$ۤP/0Px"sWA^'D^1 7 UF团{MgCMLopQ?H*sZ)Z!Mv|N n 0wr2WÆitS'*cؿz2|fU ȟI^ѽ`KERP>S-||?N ,>kB?3$v=5UTr4E8O?{Ew,ʐSK,!Wn%sd$itwȩV'Z2H|myJ7 |HWqoVoBvDV7=Y (Ye@ ׻@\rЋ(#J ٘'N @Asu~l`-`"!~mBu@?mjQӺyؽٱr %gI;>XRo= ٞPEgvU]`'#rC p:cW˔E HG&#zwQT.S,ܳ;#_t _&&&ۂydɍjF~#nT2=^o?1 4X$d]! ؝Fjx qNtUI92'BR<p_ߋ]grhIV/wyoȸ7nH wiE [ag'@z|/_&іY7ڕȂf@*"`FK" DlZ6kt5-qdZ׵Mnp`~nbnP|ve@ `qWI!]xH,X*eȀtި >%2f֯LlO\h > "Zn(uK9n3j_@؋> &,7!$) IvϗjV l?F,v?4Y>Z70rRJ*eN'h98f܀Uaq3n"d\zFZ cy7Y )A,=; Se𳞫ЧR,N\<Q}y~)=Vr1 aGfZܕٵ\#!_{-Vjvn3^ 5RmH+18:eWXӖZroe30ev|y?~?Mn"&*™.r$&Dns6eR$z Nh1m*~WQ۷m#ջ+]cqhێ}ԅˉz/-Yf8vjOKʓ%KNHjk ]˧uئY>@SRTl|sD1nK|IN0˒Z߷.ޤY!IZ~*ZB)?R i)a@>ߨOss>0bG [)ʏqn}7h h#r8E4I╵3 w<6 l ']I`oo}sd5$n{} קvzV=Trq2a]XBK\aL2V-0d>42_~쐳4>cPqsp0;0^ (ç!=*7*M>Rɳ:eD6u;},T-bkU;-/Y KS|wvz(/TO 'P4"أsDixK^|X2"tue,5J,; ~OpO_y^ |K%糇݆Z4M.vh% ƻl\֪×zG:gzq l,ks~ ǎVZ;3hӫz# 2r$;Ƚ>޿OQ^f97&RV;m`>n;٣3^|i>~<qCZ !,Ex,oҷÚ}?(j1[EHuKD6*rx/gG#EYQ LQ@ֈ1)IaY %+U@xR!s}Q$W }ˎ7m0n}59tSnD4q[RؙS#`>WGB7Xk+g|[>%q  /8bI^2V@2f.7}2izўD"?/ i}y*!;;CD:dӽtkWKi5 ސVo->Ƀpmu41oۓ; (6TwX"ؼ ,uoY2f䞓guHYB z1M_ISRt[Ԓ͹s R6v}F )DnIgq1#/:Nٰ@Kp}urP;yʉy?՘i./TGm?wuc&Ɏkb]lDm%<1Jr NHGV7rt_b0@~Lz18cCZL)tr*H GvYv-1K?eʾ9"[LH 043x{x 3^Gy$\~P,c؛)Cz0dvN$_A*fķ+ U=`D|EDruPf>sLkNG{&Y k}V.x "E罏?a8AFCף6>,OV[\K%/Jl)ڸklubJ*Ϥܤ-y϶7{s:ӡ Q]VN%;&pc<3eP9z*+G>A*y+I1wXR54QJv=oZEa@&) o0GnXB0ߖSڤ>VVxE @1~pZ0#rŏh1zȅ-k盥?t:ѵ+N{싵;v'uG%2&12<3B\ۣv|K4:1\E݉}GܞфQkI[rLfJt"UDzuۄ-7:}]2;MKC$5p_ |Sг ͩ˺g0?A(UOEW8?YG)~,O.өj;ŶST=k]kDnl }P'XS7t묯%cl7 TQ U5]B1pyiJNT9}Xbs؎,8 J@xmH=_'H4!R|EDE3BqƟjodM಼~h{l%wc&0?ᏻف[^e1" O*}zGV| -U0?8窿/Ksͅh<0bCB⒓-Pr*Ee;׮5jRYܚhVżQ7e-jna~ |8>ؐj/LJDŽ*MVD>2 |ʔFVH]ƘT! zI?ʘw' H QVӃ.Nt; Cĥޓe (CvkΦhҳ\S(iϢ|k{Ȫ6;9YO{m@8(%LtdXa4ɈOlA ]5-CKr@0nڽ钤Bժ2i7]j[Ӑy3a=UƇZ{/rܽEf*<Ɏyd=+$(^W־4h u44o\EƙOԛm뛪g q"qGiwt3^4z-8r^?d-+4TPswfmHx>qbEhmc'"F?4[է!]$Yt$LȞeJڏbrj9swѝ2'@ w.y/R3v[BQ8+qh@wMihp+Md5{HVnr;.E f>iZ?-X?/.֪;ypJ/h e۬ FA4 P[Ok}!6a nA,/VnAG3[6v,C[~=j/`mVM7fͧ"@7RDbibZCbK9?oYSSiz]Y3 >[\GT6ʾJg ˺%LE!H|1V؈~3?7#ēs*lwF'$8jIUYi]o'd2X7ޱP<{ pt~Oߥ(uݵ>hNwz[]b3 N8JK|}Tr,{&AťTtKwӜ }) 9LeNG66Igؔ(;6F;c} i vh1c|<äL38(liVLm,Er (#[UgoTId=)=R艥RHA_CEA7T|3A$YwʨBm1/AB ~WqTbT_Mؙ'&c 6|s=S[-O2MuY 8 ξ*ߏix:i0aW=lKZQpo:&N[a:gx=tN^,2bwu D7o+hRQz X=p3Tr50kNI|99/ϛc=؊'>*[7מٮЙvzuE?x1*ՒՃ1N(zi M]HnWx̀AW2:Oo֔{0rnpzF YGҾoztj%$lD͏AQ' 8^=^;<ׂ EE|?pyh|z^v3FiDޭޣVMdžseYw$^7Wha92sFɋo>]4&ؠ{w},^*)[\)R6z^\ꈄ9~ @BauQv9as |tzW2aFj"rH=!ОހΈv ?09&S}Lz里Eݩ~Y*&PۥI^xlY;ښVMp+g5C'nvQbi=ev8|ԈMCeI(N(B%Wt[lgR`-~s'>vY?Gx*ohxʞ%|GlH_w,x¶@]YvFE ZJ^Q31ۘFeTIW2D}{ elVHZܣxϫSq }+"d[8UO{h2(-ߡޞ?0aW[!@^ZBO!1݆eIv7;0uf @JO l'c0SǷjx@Xpf5M`/G~Ă#zr2mDۨ IlzQrP%hkjF"pDă qr\>;6c7G ǐtпJu;>G o nٲ NE?Z^ F>[?Yٲ>_:Qs5K90#eU8Jo^'sUϦNJJӮJXStÅ1o*`J^}zWK"n}uӡx'hՑ?Er ;'9܅u=6ɋBE']u魅6gC`-DP N W*&3Z|oyty ޥ'\>0/62h$:TуtЮ|l2E: w"! =zƣN`|/4O_2#&Qros{M8Jy#Y7Y1kdȕ%Lc3W;f.y_>m=+xW| 0}S/26V71cl_*Rr|Ow#U:b>=mIegOd(0#l/A:f闁<oeEͷ .yMA&e-Sn"UȂ%rVן}Cc2ez0٣$_+Kl n9- ~ خ8q\b$AE_-vɽW 6/g(rv\y-QtXCoaO/5\/i 4 f$F$$6?ğ fW"[%Aq+v+f30 $V^L!݌P(du`m*/l  zr] FKMz26kUPhuFtCr׈mĞClSڕk>QGS@m-wWli?_?LPS)8Py<,4Y[5襗y<_`?f82QBnAT[=pT&Ի4Oy|7VvWE:BI!bޡTDb\%C|1ڸ~9C@ ՠ7 mQsbٗuMq[.O 5.}ԏ{AZӴgQTi7զC.YУ|(ٶ,x5N-*w2eÏ1R-|d4ZtDf S %?c3YJ/Aґlt?d7fA}գ4=3 Qt<@Xr>B㼗̫OQz|ůk czx:CZ0ߍeG=Ђ&2vCٙfI^\aSa迺S~ods,DHa%Ʈ -`" A~@&Flo*j;U'^?iB_xL}ru+{f7[_qqD^!7!@tv]U{܈{#L&d̙c.߷(q_\iݫ°Ɲ}/U^v-i=/͓=ClUa zyQ}G+NWG)nAKW:$e$ {F^/3rK-ř> ˤ\bs-8#sRK)9Ԕn$'_nC)eCxfKRU +wBŢg/T Xcu%|{JUFGtT9VՍd֮w70 +DI7.>,H|[!q ӔYܲF+:6m SNh\r˵kޣ3R8cD㽚ke ,W][꜒Ikw}}SW2{I[3])Dw60c!eH. 9a~kȀz\|vWo.x bo .m:unl9&.Ol`NR2L.PHt銪 1LfT<@^n #*M7b(;k}> /blrNTtWz&cKCZ{/b#3y z Dqg2v~X>hO\TfP s=7׮Ex{(ɶKYC-5C& ;vnq~A7*0^{BnVqX&2BTtB^w(<>Z;1^) <; l{0Ee2jC8=NZOl`sQjvUSى>*FY $$6O~5bĉ⅁>a)6W5NI}Wcƽ&rX pH:3)KSԫY ,~\$[w2U oCagoY6#Y!ML\QF1];j42/6:bX{8NSݿip pK! G -nGl֝s&GDso©Oq09OlXG{$6<{uO#9; E}2ߡՆt"TwqEE6zqX[XD70*QJdE:5XortKI^$rM {,m'Mq?#[Ȍ{v)A|&-A_U:^{~c$LbP%q '$q@&G" u3a@G ) EJ8IBңrNLThZDv+H<9'|1ܖ [AQCħW˧ 3mCk(ܧH˅ .$w!]~(F/M#gxh]~.?hwf PsT/2 m |W^?~h(Q<;r|U6 !7uc.,>,KNSoܱ \xxBt)֯'DcXyfDѶb]:7eq,t H`Wgcb ;\/c}NQT|^0T<.zRRHQhW\sU[I+pr1nIΊ+7gz:E2sӎ Xm [UhxZכPVhrw;=-6iAx`s&z1xXd"CŔ3^%U92i8"tO}%GXyCucw, OjF8w8YJ暆Z*7EhrF r5y.L9un{Q U]]p ߔwi^l87AS'0u5'ow'c%6JH/Xc."qw҂M<0jfnylႣ|6j(낤k\>-cBHuP6ܖ=̫㾤]d;oH]ќ\g$g,fRY\xF$}WЩ ȯwqCm"9E+zN{V%Ts"뙘<׾)-`k+{NX%Em0`_ fjɠcvL@UozةOֆUu~F_V2f4`2Ga?9Mxg mҴa0-t83+-T_%-D3-<21-gHs7}Gx$c8~~ocG}Dylgc@3>1@!Lagϔ|FT3SާLsd? ?fv 33uV/ F\A4*M/4њA4 Wgx#43Vfzňg/Hl!ndYdۊo? x}B/z;*nټ|1ғ SV.zY6A'(pҠ/"}fTK籆V渣Mtf, 'o |1hs{~h}zإNjŝa،m ;%@ΤL<:PCu=tu;T( 9]RrC^:CfѼf?GŦt v(rGah]]upAț@93T{i6(l5+٠ ʤc>b2 /c/rac{hٺؠEm c yKy!=0t"1I1¹ =In,ͮT54 3._Pd{a:ɦ́ L ߺ~W9p^hs \AFm7ozVI^ľ?bh V[L4WpЍ kk RҰZFVJi"f=0@`~o7w{%s؃xra諮\,d̄k+!8":xpt3'PLkE*BL8Sf>ZW`in\](E{+1x`z_gN>taﶞѻZVУ|>sN1W&*xή#vzM/92) "Yj_GϐZ%(!={n;,B:nE`rHǁNa.!1P{R٣9OG4r w_g<ӹFɗ|@\1G9+{zkջR0^vUK̀~Vg C1t[mR|n<&E +<@m(a77]ot oIh4DsR_+4UӁ'}V>Oc2nK*6#ܸKM*ESWY6 [~EXn雹pԕVJz'dE\*>}i}%ϑVq˻&-rnV%6zV گ.b! gX'ݘiQjR"v,Y`ny5L>9bc\]f!A˃%-U:D]=[ҟ_ͺ?`Z%uܟmߠtR{G{~) D! ) GM0IA8 BSƣ' }~,[W +y 9OEHwnM>)~ԜGUjP N#IG-8A#ȑ3>ǟo0z (Y{q\ѣT:ݎz(U$[s?f1=TF=٩Ԇ|m֡P#I9?odq{˗hzw9ҳ_L4{,k,gkSثgq͡0A;/?[pCx6ՑI )+# 3qwQ;aj mR}s)pL_36NsIAL}Eᲄ=fc8[=:֋0{} Ob Jк(F|YljVꏑ(5 sGs/ *M޺!IKn׺X.QG+T (Ks_ԑd6pfh~{|,!">*W/',VbT.DzµjxDM;m4ΉؿmuJRs/OL. :Y1n9q?(,JU>M;auzJFUM`Nt!o`]-Y9W!,^Fzc v}_ nQ.#mo D.Ɖ}&j99sNH6^ ( ƮD:CkHњJp4yq!!Tsda@Ы.JiP=~oMX8ϩ[\BJ+:Tb/Ծ_)[hz*j.3kBYU`Uц8"O^ʦda 1I}ě{>_DMJ$ܝL"u. d^H4 c('_p/SDՀ z]pZfWȺ=v'Ω*>#;+lo<=yMz"ɞE `\wגr1r$JNEEo449l^ FԪ}w0\T ۣ L0nYwVP3g:A.>sMЬ&"zcԮ AЀ/{W/1-'8ceV|+V%x6S]ه:qBרgs/GJ)*0;9J)gG:pDzvy"9'8 k_j&BnH4' @G"|zGj Y]??@ K?RϏg?\|7p{UiM¹я_M|&튐lw}Y9eOL K*bNλo9/.p6,:Sy􎟑b50מ3LZmj}ԕğ_:4O[ ryFt.B OiyΒK鸕45[M)b*X~񸭗EHHT[#$Ν l]Xж; z%7rg0-6;RsW/ \5ng i|W@Sq}l$LW_?m|ݴ.wuSx)t%Nl l~ ''JxEVUītҞW4EW V>t'ѷg@@~M<ݙOZLS55d{bR& F&A (M-8A+U0.$9z'OdP1_͐jNѭt"14jMFE6?F]jT-|2Xզdܖv㷥f=q8x0=>~| B}^~o%^?^8R !OW\9=uTvw0Puc_]= ;/bIG߸CDWׯ #jy8ʻawnI==vI(wp [ P%$)9^Ϥ /BԵRϒBzEBch6DCKsw-i8,<L]7$ZbS,*WI"z>fꋂBK6kv0me6CYKDºX,"W*p LE.\4NU7^1% gM6TwE>=`2͂ٱR(J)-u$o@򜿹bSnߪV k ~ܨrkY2vƌuUMt7w*+\fn?Ȧ6wd[ TΌ60'nbjT)qU.XuM4~Go9^lcK X: k F~ċ7"o TlW趛ߗ nh`E34wR\encކ_E6dr /ޟ93 uw_ăټUUZP=[V>yK((`0 JuJUxR.7 l. g)|vV mIK,ݹK AtwuBo@U!\M:_@Ī]! [AQgK橭_f.hTjXAkPxh.5n뎕Ox4Z=-Z-䁪3DOG&Agc%WdfRh&iS_0~A~U77;WfoY693T~PBb$@Qvo$0 XQ4= Lr#C1ap8ϳ uoG2<~TcAbq tS췈 ҏ\xC?8X_`|RC,zHG{?>~$Q~& T|bv;.127SD8zư[9goϨ>0u~UIU}᬴YF6'hF> >^/}$[X‡Bkfw=<$nr'>N)sE;Ǩbh_.ӜvMŕSzQ ҀB}8)D a_CS]6ԏmLW"2c-og6G%p# /Bi愻C/5L)n-V177\FBkpӀ'u2ywQp%yrO1o^9}mP]X}AyǐMi^rśFCE }rҕ+O'ZQ?KBo* Ha%[+60>AnwC/*zG&҄Ev#Z\Xgadopwސ%8SQ ݊R~CU4)ʴ;Q$ɁI{ɹ cbeګOR~>ba(]59 ˜zH ~aDi'iqh206CPPi =,g.([ O*"~";dPĸ.,oP,K[)Q[X'N<^o1~\QZqzqWJ3$Wcu.Qt|_Yc)\g./]6ɼ( (qlU{YJg[m %jb>?`3ZZLHF;T͔' iIm84Hxb$CU)WPz42[ =)K f]+Ń9Z\/J9yNI{Snн"L&$IXl %^}[)KQKtc2X+$yO}mv5E P~qAy"$4 .oH98 '?GU~}/QHAé#5#Ԏ0>ZhCPrK CGD~C|(o #ëPǚJBO+p_Svg"C>9];^I#F/$P\3D>1yp(DJ.F3:٧JރφZSGTmaTcT3j(U.smM.z DwM OhY3ߙKzƷTIu|U{S%TgK𹇦EG rqi+h6ΗG֖<ɉV'V\x+?KLg%G[\)-%zZp>Xz$.b{U5PI)zLfH rJOR 1hg J}e΍f^~: \  1MGa<],?CfJmS($pýim7@7LXsse5r^ eV- Q[ZGPs*k=[ nL:r~Urv&1OW5.'1`oYBoNJ!Y5^U$e&" <'$[A0W Y@QW#ӓ.3 ̹N6u0fc "9ˋ8G8ʜ`"4S?k| пEUKӵ|ѕ s!)푲75s V o~I=Gyvh;p{Йj kD {T/I4J0M+^,pi$ x'ݘJ`U3aב*1n˕w }ިxwI;U˗ְ0g3jUx%ǜau=EI"_ݢ~Ƌ>3n%9ѥgc#n`U(F]3ɦ޽|ʞՇg ]ߢGOk(3~a1Uw9r]BJ9c2^ WzAb٘Ae7fښkGsA [7q"݌w* a *orQ.48VB?ci>?A)>!.I`YRB-;2.FO{A(,S?~g$WUSq>p (;9L\ĝqB\&B4(jJjܾrZ|r4+&m%SXkdڿ(^ ck6=JF6k; D4m't=JX]7ĥd/l'^Yx@ d,D:;Ū XAR+/j=uֳs"FFZad r\VҴBG=jnpxilsqv Dpkҝ3f$Y@ *{1՝Yu2O߰L4u=%]pPeqcހWv*#&߷$;x'avf%zJi.YȠ=zn֮2>௺za v׷6f^D[BBs}vy%pNcKH2/ !a8jMX԰Exr]7X) K&W'=ܣ|7["GJy/1 *P7<ÔN#LhpM^:[ _ΊNx)-7 `xfEb\Ff92qԕe_om4jN/:s"]|Mm#O{()SuFN/ 8DϊϗdD|, ouTa+AgR f2yE?oܹ;8$N r/Ϣ~ HPswvsdRя5)bŎ7я&!r-)^)F"I-׳&_`+e3?ͧ/oY!82C[?Dw~46_ufk^'Ɋq-( SQ"v 2 al9=, zcՎUț9O =w'n8Աڹ hF 0>M#Z_t#aL nc¦d|Ox~ҽ0q& >߰/U ( Wp!}~J$cSQ=߬Q5QH1M%gFowvÖ> ɣ l?Ew-^c 5}Gv0(2GJܱv&]N:͸CG埂Tޱ 7~p{wh=J=+qEb %];n"[,ݛe&͸]@:'ͳKLE'N.;Ά}|xdjp"/\p JPxsp_X읯D;'d|f"$<k p]ϕndT}3{PO ,}q*^;4~bMjIXϬ1R.]u%TP2'W(#QF!E5]u&~C&nYJ„/x_h7S+±ãZ_6y~{KuRu6昨8X,: N* e& 3B<$$~nNPL? X>lJ?frRB񊫎 {X-f{[|=Ki-ĻO-fbި+E }%EAZCmeRg+/Ƕl6ccS,G)殦ƾEk<' [aKJ3Cs*;GD3"?Zcɉtn|8׾8o I :/ =R|r펱N#HmIS B$&<^j+@RR-90>i7>h+BW7,0ˇ-ʩ L>[*mD?~Z^{,Xw9dx 'd_DX>gxŊ:;Pȣc+mܝ2a[+-\؝ ,! (Xr\ k/Rbu=QK lReTeZ9X[&:;HZ F[[  t6hj`ž(͌+D'~8HGPNV|=.g;/d^FraىvWQYlfŦ4 auIUx(Nuu!K N41 ꥫJ7b4i{>#.>z2ጣW!m`Zs}JWeY+ePrTTR ;|@67=ƠU3uu[‹[xuk xsh #l)\^-t48bc[7vt*計(ɌU: <(~}%Nt9yC'S㥆`82/F#X년;|ǎJuXոlI,<O_K(D0Hd@`0J3zP AwAi=[!ewG;|8cIĦoU܁]հ<߷aݴND8nlg ~7Cݷww ;wn6^{`x[Kﰍ"j[ƱtNĖ_b)֛W:6M .hԟz=, aK-!Grge ٠yyg~(wܶ|.Cm c9 __yl?aR߼ȩOgGv<Cwݰ_="g#z_="g^& 7Dva.=]Q2BIƕRXi8O$ ɚIWh$ِ9X֨r^ZMz캳.ީUˇŘCL}E]r9RV9Y5V$2LZuNjQ1{0Oq¯K_BpủsKѡ_dR|)&վwKH?om1TO{!U\*gOĨll[p걍w|WڕFő@.·8%R{Nƻ$NޙN k .Yv7*uy<{0Fя.ɞn{uޖBqI!FB  rzݭ2乳πt?/\&*wǡ-eoWgV$zPHVd3pp6:j39 P4? Vo93L H4HA(2BA!ޏKWw y|k<=;2`hRhd+r*ɡg|-pO[HCw/ qڼ o(:r[ؕĵ+DBkPw~1|uLNWXƵUMO{>E߮ BY&\r3HO S۝;Mиj,I4W0G+7 6:nLײp¥M\{(Ź|-~ FcAL04eyr1\JM4e eJU}) S"54DK b>RP.gXР!qL%3ZXD_{xz%smx^m5sXy1`ft#/cQW Ib0aJ$5 *WtiPea)Fq*Tr+HҾb ɼ>Hbw;wkB(4Ebڧ~:[a]f5C~c}ێ/! IFA$mq#ǟ<6tØ1r][ZLRw F)A<9Sl}+#VɈP;I+v>@#B[v;|R+.'}$#xٹI_Dd_QrhT/K4M$^Wvpb]_ٹ6{Śta?} ܮwdE}h/׉Dp]Mpvd~LJI;5=|'׵M>_`zLw9/#ͷ */qrV ^1kAW6]*<E4$00$"}<PӧdgO>ѧt5Ɠ*AD=]]? =a9nR̢44p |G# `tE].%2|HNaquɄ$Ai49WCd%v#Mڇ >:Ā1ݮZAaY3#/:h6@PؙzZdmd%N;Phf'(>Qq>'+|09^4\!cM}c3k#ݹC@6 ә?JNjk4{_Fz.;t*.yŨ}~ @6 S&KN#{4\;&OE pwpLFht˓B7& e?d _~HUCSSMcq}4=.t$Jjro ta SRВlJ>d.EEaurP@apEx>nۂyE.l&5l=J|4cՎtK{Wr=$ %;{Dw9MEkH4ÕwTO~u{C@ە# tDt Vςij%YfDg|A KheGb JY堃c#4vʥBgA`:E }'T6 DVI/1X|-v !_q3l=x3 Lg(޼kX9jX VH*UKDĸ֝,!F0e&8,\N+a!w)B%`qP0U[nÒBc)2mmC&uRB_(..wB.RGn!dl_0Fۏf8K+'TrW KrпS|h󣛼KŋG8:ϩ STqg+'i1-dqSZmJ_F&(RvZӵ$x\\E%܉F]<;y߆aovaF( % 'b8E"0DhE[(2ߑ\h $ZI 𛛙DoJ(࿃ww⎢``,n`;- h~<`F!!|:dm`=55ȑ&_vBuh%3w+anjӹz#_U/_~<7/{pknUmיπ'꾁F+B*}|#: Zn0;0>vۻ)隆CXm63H~@=up`G7d3s_)C=A>:8 \T ' `jD:uϗrؼxRS?q 8_k_??dU&݂RYz$FP0HmH0 N Q(P?\-Л!e{w{6{Ƽ7(o~vWgpD8]t哧q^4tXٲ띒/EOVh]/Um>HMkmqcהwNOrho󑝹 ]ߍ`6_ҞG@hN(Lcl)I(8R*+tZ^D2ΐj3o|p { {bG^:}"k s6ll|pV4GݦW6f 3~6ߝ#Et9R~|/'<.!2n  EuN\Q-8,>wy) qBP$/#i (][,Fy綶%s ϿZ޾!N\N;CJHKdbt~D_uf5 9z8ځ֒Ad]Όݱ- RNa%OJ<'zni(RNj)X4N^BГyB|korunm=+ݼ ߭}/"0E0"( # ;N" #{){wBvbL?;;J.RXjd{[`'@-+)doUdG۪Ԉ=ݙ}xWMw nkfo1V&϶jo7 ޫvB8l ]Gٿ2B` zqꅷGGhmiGdyf7Z|X4^) alc] 2 +ª]Z^?Gc9X3ʿ~gFa9L]+qHzrwmRkl1]QC즹`9mDPKPl nW+m ;VSIFaƟ^or!0gɏb g lI+*L ^TؗC wnאfP6vwBS0]@b\*;IY5 2[WF2 #ܞS/McJZWtwWRU4<]3_GҔ00NQ橫r!bBUBGE9:7SOҸU*XY7@sHjgi{K ::QIBl<ܻ@Phx rD68-IŎ Kk]s`:7 kARn˵/ij}4&u۶nP0(b~B82| T˫jN igVKwKul:˂i^9m%3e&ӣ^M1{6l.u (8(q|ܮ4P#BuۛهbF_uYTl/^,z.zUQ2P&6iGǀ(Mxsu2T!:~P<^$jU5\H^ޝjFzӒ9yF3a5Х\d۠Zw~^]Jᒍ,Q?\"gE>D|>肌mbL #KNgFQ@vy}2L)>kx0$[ee=y+/ԣ@4"XRGSѫUx.. 1M\h1*v , ߬ [px⼭".HgG(Ҷ`=p^8$OB8Vljzh Z~* . E&vFH\:KKH#OӑnfU*nd/h>.XpwDɢ<30ؿDZ϶$PD*ꌱPx4c/|]F|#}C}8PJV+/ }ɐQ#|Ke!ohz7hԡ2O͝!1)\+Õ\31wt} 趨]# Ɣ\ӓz,dg_5ci?r0No% UUicpYQ2V})[2u|*|m%R啀)ώ>t41ę c;DA+߾i|%e )Y5G4Co4gzF˃"ɫrS^ /N~a!`uSP075|r#àͦE{7=lik a.VI4rX'`ʉ䨮'JzDD8@5n-HAkN@7z% ly e= EvY8]3coC0݇zg;E}qsX0.¯P!Q;[*kCΧˢBM;rN'H5|3 k?t $HkBsMoNp+t[y0@G04IPW*H4dw탴%Inpdo*I )z*nC\[&I\u<I1"]YȯSᩥDq),M.+}>8w>_&F_rnℚ/Go#\_*TC\f}Rׇ'72$3I C<,!"Wrbί̩L5 ɴ"8ɪrU>G[aa惿y9}}V[ǻ@gD8"RRfbJ:7|VO~4KxyWֳC [т::ރhe))29Y'S`~P[jDT\QubA=Q9CA{ܡGq&&F\Qڅ<12(LJI ^OQg%$G@m z[i˔kB*:tZL,nݱQ/=C{9FG*roT`@K$Mk(Af<8JA AW PB=NEF^/{%JC=o"ߴ8qgl@wPAş xa<@VUNE2Y o2?3[vfNRC]K!NpxzJ)Kۃo5 7ۙK@m) ܾtj3ުr4<=OA;AA_}hn;OQAQ_ )!jm;"6T0 Ax. !>m?MMU̧C2C) /o8ï&MBjoCkeor- 썹bL=NjdbN^9QIv I f;̈́w9f}Y6%gقfаL3a/)ǎ@j.f\y5B^~1 Ō-PIyQKvxg| I;ԥ8qkr*ʴ R `VBU`6ɯY>W&sZcGZgWo<י N*}Yӳoo$G . <=)IH|hrYZYJ YIOczTWxwm?˳u>Pډ8|̆!E[V/k[ U>OU8.!-nYPew0u޵ ʪ-L,&|MjopA0rooa`[p?. ۹}O{IB-w"L.r=o |)Q>߮YI"?$N O-nJ[cwO6[J %oZuK.nsJ=3J~U|!*"P(1wk~VOml1w\qf-ea7q3bCT.L'w>X__ZokS _MW3)S92geZvږYNnsyb ԇJV;ll Y^-/R'J(rO}a1ԯ̨hZ;!Mprmexu4Ë4 0^#$ yDȹLT?iGNP35. 87T=DD5 6 oX܈$N4]& ƹx$ơ~ˆey" b|f +P.u'HF!Ḥk1\Aju-jo#)RxbpUo3 "X7fZuJ0ڜ+SnMiSZ] q7^6>ЇĦKN.elH5.7`:J2^L}{8˖ Ut^Xsq]<1*@mڒf?@?auKNc-9+>Vh;|#sm8Z|/Q,?}XlЬ/NQϬ[3|O|2_/SRX6غBu _ dqt^{ ԭTop(h /!y #_y>\}N.= FNνWɰcd ZWOݡ@ U;7PhChGubK1,<j:RYvIr\8az›v$} #2Y\̺k%eSgyz$+ggvq"rn瀙tHcJlR.F) yKt&hP:87 }e ͮW;%Suf)@ : 6P$;zC006ed+S[Ydfwk[d6u'(w1M۠~B8mHP! q?$DoxK⡝{;;vK}~m\-i~;ڲ]Iãw'Deovޠ+ 7^yNI|nF9Qno2Л{BMitٿp:{.TE->cvaaKGO[ 6v͖FW*K4v0[ [oJ~~Z!T6Ȼ h}Rtt6*3On/mo0d_DZ B ־VUsBNSrƂ]LY?wLqPHd%WvO/~(<Sv|ooO0!߮CH!bky!(i."qR_7T˵r 4nXk9lait2!A%32!Z!*rH#w0YQ8Ј 8M[b81Yr ~O8_uyw).eݦQďcg1$.E9PTxUҸlUwP K\@ O:ӟӴP@C%c0g{ϟ iqVe8c+$L sRah^|u?<fKF#p5( eUQ@V~EhIXsT(ؔNW.ďe;HCwE:2_^ A9tIr傠<df #sT G;p>{Ё\ (%0+̂/z j*[;#?URe4Ehۀ(eQېgg$5 =4螭“ +zԞXNG&${fAXN-tgd29GSA n:zdw"^1[!-槭ޫ#os֦J֬C]O]MF3(Jl)!&E1@H@ 0)~X7 )p[fcvDm[E-:R]6ﭪElr㳛;VcUO?UR8:I+3|ih̬u-!tTcӃ Z\Ε{o{ϥgaƝjq ˼ap1WeH@|^VsdFq j;wD`4r Dю]G2qKN|e=8g&/)L%g)Ι҄=bpvX<}WOV@,g] l·y@r+1 h,颣ݣ,/)qnԅ$,1r{O NaYZ` 7v"\UWږ,q \% p3Z7y]oj$Ej¢oR,\ѭ#{n_yC`u YE{S-[oeSs/gڭ 0D˻'.Um \^Yl j{݀ fS1m,edž}j[p(/z-n-%LW gsw;6g_fH=]a%n=MdK^OO-QA~bGhe9y~ci^{(snd~~$Ip-* vPy8潳}}.<>e[~]:K&CamͱMiVX#q>sCtkyeg(LR5gJFIG ױ>ɭx⼬jwbĤN8rl şи{>d!8<LJT&𑾂;L.Z% ܃eW0x2P u\^76T;U3? 僞"(GF2\ *IVU$ (]9m-䮲^?%kҩB*c܀Xָk]3B h-H&KKG1|4cg4|>$,rʧUb!KIXTBX:n=^^S\KD-?^LG<,M0u˜=t#̘R&eNDTzi_s^~+{xس. 'iJ(퇨K0!I c5N;;;6!lOWsOvn8Fw{:蛿].ޒM DHmې;b'dVm پ[ YL+ޕ M?);'vd`17۷rh*{D~Y]1OID߄?̽Y-ίw>o*<D+ x@ @v^]=F8J$}Ҝcfu8@NK5^ HKt9E ؿ5 r#nznA7ڌ(l^CEKmnw^Ǣ0mlBz{rw7`Β>4 llKɋ=]k6;Vu?oȿs?oȿs?oȿs?ow沏Q{6bn543k2{hmok,Z(B<`kJ}AuG=VPryHc7#>&}ʆ6w۵pBI9C!-##TWm|ą1oBtqς y7 O4 M zbOrlx %$'Ct#;2 oqZxT}ӻ!IQ4lĞ<էjT.p`MNM+Np,V\BDaFh7cOhtrWH,Z%*- TfQ{j=%p4IF $ ffA*6rp{@/x>m8Z,PNDDrKo车 /v*u(4źLCA1E2=/2)^Dec*Up\`-B+mk 9S`%pKƈZ)3?`3c[3}~*6۪Us w}B|2_0+oVUo FJ)=rHU',;߹1ЮnGVɑVpLj.`!TzJZjago Mhێ9-n69(X}Єg7zilj^Un(UQ}ګldy3j0! @g#Orbϣ XPE;V:iC3b8CćpoBAS=x~XIC>dbĻytח W%5YREIW\՛cQX"D)YȠ\ZKt.x>Y_2{r@\xt?8c!@P@ٯ:H5-Llݧ#{4wd %{hw;di)N_-=xAG<7LP;ތG sj<[{7{Pvo7D=6 pGGZ#x.<A}/ԟ( 6k{XcCO ߇;)3,7t>P#|41ޠ^/ڻg؃{gcsv\&W1Obiƻs9`q7ޗU? |4ǘ(qe}D+?.vq_UX}$! ytcAĿr/#+9`oH{ bclaQPD볽K1.ozX1͍Xw{֣}=Uxڜs'taT2{:w&vܩИl]G'5{}1(^k|h1JÔ@fM}'r8//&; uRazf2깑+ѧ]%%DB[zE;K43 ޑV9}X\ kuKb\<Gi96RC;)}YQ轵nc:qߚ l8tgo_߽J(F(IH"0 ! &haS;3z'M>T=x&V_*h`'6%* zrE(+Iu;B'3B~aib7;恼uT\! Y6-Lfo~^Ч鞧,I Ono $E-x'̕^3`U@WwcB YG|dPwفױo_άW 7 !k^>k\6 l3wJЙLKSC8ɽ);#݁tQi)46+53kcV% RAy&گ'mGOuWd1SH&EǩnK] 2EL,<'&*tn[y⠄69$Ior &942,j\!e X"(GN/ (l3M I' 4i(Çx Xƃe|0'(,z΍0ՔfrsxK0O6b 5xt9֨Zo n izlAXV h_nmlD]te3>h*^BOa T-|kG, 9Րa "XF\Sa /9Q[Q3+߾4+{驍/eh@<㚴G G㨞|syA`OO6up&P)*^p qhY@R|{ p-2865 D ʦJ ]<#pYpٕy@C_[a(.>rյieJgʡ qu+OtQ]Mܳ:IM&0YȠh)E7-NkΝ<m^zܞyHgڻZ#ӾEJOʪ6|(4=DŽ@}Iq Ij6: To/0>֧c9U `MXk.F~1Э%b譲3pd<66vsJ7+`ue_z3G}'z&+/Zմԓ4dH资DÂD 8ݜ߮3Yo2_:Pݩ<>lK&(@69l<' ݌r;&ظG}܂gt*p{KiRͧi{!SF z{4~~" H(dCMEmic8FP$i]Q {MFS/] ~'t6Lro}ޒAݾW ;^Qy˽pnX TYqWv2.ݐ݆wrg$Md{^ ƚ}v{]V|N:]kbޓ8X~shnADzVvTW>6h2φhS 2p-^;Ѭ|9ꞽV;3. G6gOZ`eqp^ΚD>␞K@\,n<.6Bx@WCKG%AĺXk0r$a EWڜ2~;fpI%CyBn/<|Վά>1Ԡqq1 P]r2sI=w@mb;c Z|L8WE>7V,*Ai6`YdK!?TLDqMZ@3 {I8իR, /SHzt;g-P囩!ns ~ʹ$ID ma_3|JB# yI+R;MĀ5 .ݏA0e쎚kSx9U I}N\x.'jL8j`Xnk#$jGœ.l/Z!0DÜyd]E֏ z$R9F}33n]ڗZ)CA~ӡ PO PN(L^ hlQn߳qRo { <t :,sB~) :c{-j6f0蝿@U68dz}#1w9Jz;ṥ^}'ۡ?:ŝRUL/M_0w(ʞ6ڡT$g\o+[טm*+2y+$TF($3hS6:Qa\WzTSWP\kT0%}gs2PA[h- AY]08QZkۨޔƁR]-,>~QjCg?in;__47rVsCչ17D=уN[ԅT @ϞlV[)y]m7L2#NI5',, ):pߟ*i /̘;&a*z#2R?)=Xch<"|>^dԙ^]xD>m"7Dz[==Lv3B ^xh6T@ Oj@?qWv7QX؊TJA Ӝ6J@j#d?{tX\3i|,'u9[ǤQ8&s3 uAr3P}m|dtu9DYv\c &xZ{v142M>kfrak>^XM•}iVο` ց\ khKq;!9x?S׾BUZւhÉ~*5f̀G278My G9xO d%.V,AWh1%MQ[@̟X}_l$TW9pu"e\MylMm K2').G×Ҽ=nE_k6=H4iBHٹb`]+Wݭ|^2pji0)Aekg@atsC芓[M@@+]C#Rj69/G̙/I{uwޞtS$Fg@k.-3_ .g&k׿6oH>xOufI ρJh)!퀏FcF4Yzؓ]Flujud"oR_O!R*ai"l<#QHI@=Y&$9̀Vhah{s,:SZ~+C{+WARYؘ( 31 WU ;#(086Gܙm8ntRPX!rYti:Wɴ7 hct5SFE,%`\k é"C+0xF'_NKh gB"\w2~zhEpj;*;HR_nk1ũqy ɔ2+攂ý$f?V:?tYaG*O}VUB k9dtm}8۔>dS9] PbnA08C?a@p?.7= {iT$#VW|pWWw`73h9.au7[PA\Lr 9݋t4.Og^xt*8k8I͋]ǹ7.jnc9`iE-卍}K%.Խın}~lN`Blp Kz?_1ۗ,IgC)4;+Ga'@҇W)|F쨭:X?hDI}\ڦ3_URH˔eQxg߅Z=pJ$6ie8Y8wV'izā~SD7{*ﯘ'h)p FG:iOܥg^iOfcaM-/O$һۃ*b\ @z"gT 5h 6<_,;E_$_ypQ *|I>ȫӶyz`\Cj,Nmgڻ0ߚ]vf]I'ᖻ.G=sy=R:duqOhQ=~Bd~e+~ii nx?(do@H ޫ[QO#8n`d/3{4$|ߪQQxFgnhju{HrÀ?)]}/J :{|`pbϡПQ#-{Jp^{ َo-4xp=vhoWQFJF2ڽeǟ;T]m ru&w3`N,JD{{5k,EW~M*BoJ_ϧ}gmDζߎK}?k|bf]?~DY&Xx;(/hVأc2O/G}D96/ߜ+ȶI7K}ACm⧡<7][|Ţ_ &)\ 4Dl2p_r;a6Z?s.0r =/$׶G?zFR6sE]A"#(q Q3)6GDzӽsFM˖gPe@[W.<ү(@Z[46~;R 2Y"({J/e2tz ,CC5}e]Zt< xݠ6s0sZM̎A)^PhovǸTCը+8=̗+Ѳ9W$򀬯 lz>95!U$_eqhg.Q]|IE1XXTՍQ=3"݀r1CV4aq2jry}:zis{WJ۫7OQR2QM_nùnP/- ڇʼ<2+V"zN%ټr5xb9`E} h rZ6CfNX>uO\KV%#H{56dZޝvͪt=>^|6K!nЃO>]_djgq&ȕMURx6yj kxW6[sD;$Xxb*M~ezz).Od(3. U4Lt'K6>jBbiJsyYrP7!W]V4J؁$SC@$fJJnPRBط| ^/8L Y!1s/(rgX ̟(tKf+*Ljvk#,K~ ̫pQهn2W. O7̹ 8 /bۊ"gR$w "Ya+?#8e@:"7Hq1rm=/]V[Odt*{w֥41U#3xYdC]? ?"?@CI`I&0 x(m*ۻ6d{ &Mh' tG_d'Hػ;k6Ը2cm)tAȆ~ wwU{K.ibŠw0|Wx{o1Fp>n =W4~7ߪT7hQRBw%}i pGB`aG#,8O` ,Q![p7{}^|+ݩwԐ[CuPR/BTq까-g4&q~#Vsj%| dR u1 ^%s}uIm<%e~Ҷ[cj6/0殟x)fdc|umWbെb 4A5+Ík./~]S@:yx"ŒIqY1+si>+,_F*Y 3 Ճ8Vs70='#t[Qsƙwqor?[{sM  $Fc(lu黱"W8 6Si6?/~j7 ڵhOȮa-^o+my7п2rYP|E xTDv|iٮ|WLwd;Oޙۧ{Ihx2ybŠI_Ef6\ښitd\'"~5v'K8Vvp|mf,1Hep'l]VGF_:{i)iS1f/~gV}~g{dg4t7i=An_:ZA`/<ޥ?/`ePŅg0@z7LKeqHnvMn7 Gٌc'$Oѧdv:3/!E'4z)ٚdɋME՞t^Z\`h]'Fkc] \>E[3 +SShCYAC듎Q`uDJ"ʮ<'Wڋ6)/&oir}`CKdmwIr$|%9L^{ <0R\ `" ;2m OW%]BklV} h$t?#+9ƠH|qYZlmk+m|r%?iCs;EiM9#7Dwhp^Κ&Pa J 3s7[7+ܚ"9{7ދG s @a#v> Y2VYI0w (Fl{$8Pgw6no/rwC;)~JyKЧbYuN:bbW}~Eз.gLUD+ܸCd-`^ϻ ܯ0wT+y)jٰ"mOm];FK-oAM,]R6.ο ͇vsoKB=AQJ3@[fKY&!支왲9#+tFOD1+EiGּ  \k[ROp_/󤑄lm\YG5 D [[$U/6]6V~qka?WP; |?6$IL$alFB!i%?՗v)nߑ؍Co] $ܭ[s}}P{[D}}EWAWGWf9ރ> v^FIqv+ijO[h屽C1}ox+y;8Nb'ϳ$isLk;|o[D in_V} T¿kW' {ٴԾ=/Xꫀ'3H 4Ov%9E"]ɷyMXKx{Ca ۓ_c+=v윈E %ֹ,]8X:BwR1,Q(CqFAC"ܟtnYh_w/S#T QHk_c8d6n #6I[ZߜSi۝> %ښ2JQV9h'p*v*3.Ktٚy 0"$ǡ Jy9<ʨgA# S1[Ի&rh})&"-D 9Oµv tJo5=204 C s\XDvu Xa}5`\P5@E*<׮Gu]0B:vqqYunml^ᦗ5r$x9KƪgξDi3}T92q` a(gυӌptbC - ȣkZ'nˇȞxOIۈ1 RC+Ttϴ՛ac0? 3-ב0$v5hFsnQ('B1nٝb ȋ@?|S/=JsS.pnG1[ᘡ5HPj=jv9:V E@'y#) K?e6( 9OP8!S@ktzQG ,OdAN@&ݫGS$.I9Po}9 71Z\a[~yZ҃b=6_|w^U5 qN~IPa?35 =Mq ,z^v *_DՋi|yjYڒ@U习9ƅnzmJ_xL7§N(&rܜiI0s:up]&YW,)_lO$j}F"#>՗ݳY~H M?`on;QC(c61q?-g JOJ0B7\'(07k;o t'C [ ~![P=x7NO& ~~]`q(m,Y{=? Y=^%^+/B3Q;*_?+0\}g[(6F|{;OX ac}T֨p<|̦ojyaUce`&>oX2Z~scF"]B@zq['i;XV Q wF#ĭK6)`3qW}+wu6 Mկ*& 'l>ODbHGy|Ľ١4SU4-5>LeXcUbYy./%/׹y(|,!}#7O|{g3sL"!m-#_N7eDΘˍr<:0Ic]'vaOqr}UeXsD5z,& x1NJ)YCSUؕQPf]pfۇH-Ȅ&=y 9kChlkt/-3~?ߝ;zlH&]-B0 c[$)P!?U{Rh'ؗ2tEAv{!hVLxP{hڂyvn_Vܞ!$" 6[}%{#XeK'mzw|ExFQtBJʂ7mm!k H(Iy&?Sg.!z+~w%,`j?oa{*2_C^o {4oka[MDƼlFƷ| [rz Dח9m 4&mQ-SJ7GL rWc{\XQ\5v4P5Ϭ"@V_8@%H);* a[\L\Rzc RG*t Lyj#A-F̵]GVDDvK,I>9!a_rE-vRđim}ɨWbÞĜ"V/(S%RG?N=vo* ] *2S4R.ыȃcm"i4xp!4LSBcԣ/dGsWQ<4("~^f~x}\1-.qQ;;a,/MtcU>i4j‘r>"C|FRE|%׀VͰtrD ?];{5&V6Ώeo G& 8iw'#Ses2@>̅Е1>O5wiYz|`vS?cf_ZG2O nN%!Ubh&/izҡt͢&4Pf&Zv/z:pOrWiU j❳ŃG>*cu|$ +Odev^{<*2/-/\4ch_WDE8f֍yh5a tL.N3_jvQ )=HFy͕s~0RWJAȥ>^i&x]9*Sy!yK-4xUWGVp~d;m WR,WyxtK57LY7=Fa^fyHK%SVujO.Pm`=3ϖEb%k '.-ZcW,Zu<<͂$n8tGZtГdb`w8 SN?0I'nP_i߻{+~@LCB8JGh3q] Oō}(t.5/ɷ.0A>ELWBhzl ysmpCTQλf!x/1_?@;!b>~ eo!mllvlar޹^3~CL6-.ثu c ! ĤI:H$ޘesw7%uCJl |W /w2y3݀vtݹs v{p&:cm{ehCB#b+ғ`7 S.6*~!-GNPN Q>A1?u 6'bi{ŏA/jQ.{TY PG;` {yx;!o̘1ooи,=0)Ҍ-[8ݬ#T-(D5̴"h{ʩNDqeUC}qhLǑ:%3>’XZB^UNQ&w5jި:L/=O>+NΣBzvtf5z$uPddF`GwOB#ڽ斦&!<uVӪb4s0Xqona:cⰂS_[)yoo?zu>g;)S60XTZQYD PŘ9 hMM4\&q\BgXFT֧CQ:K,}H̿i|`55sG|7ьsC t|U}l? @u81 0;UۓpS͛kXxk]RcOa: 'fSbBu/ge#_Y#=p{$P-!Cu/mEŢMG~IRuRYe{(B_b^ZX<˦pr 1s$憦0Ġ{yu 4 EU9lAB$gB&'ʚ 2ua;oL4A]>> ?gMƙ":fsLk0elyV6snqV9 ! cLxLuWGΧaV8r5GĠ'ns9~dX0yA8`hIHᒌcxzl՘L>D*,.SB |535}]TCSoT>\\GVF,GUϥ4\zIPR JUW/ܲDB9Ի-koy,X {&`9 QƁП{/;| U!MS 0` n0 H?mxӮEavTI[u*wosr$%w =]I8ϳI UQSY]|」=ɷ t9C'< ɬ]*ێ8[9{֍0/_l罟dZ9tq*D:}8;L^R3nue Oז)zKbJ.tL?v?GTE=I_Vx4l0g 63'n,[hfC&OH ׵X73ќ=[vN*OGFIy.^u)--Omf]ipwh\^Z"(?oQ:.1aX3U5f:ǎCB!p, ȴ; l=]y#Rܸf)+qzf*yL~mT)*d EI60qEnJ3z9΃`랊E4{[Uѹ=iAM*Og bafw)7\a2\#?85Zku~+nWz0t̴/ _` he7p[Uv@^Kw=mong V$/sVܝ(rcbLy4:\dҡ@c| iٮu:u>29Mї2/nx\< q|EK$w0MΣ>$)b$Ք=!Q,3.^ϝH OFbdJ&Ċ:h䃢'x0&">$XS6z\LEuF6 y@ <_Xx |n]~qW\Wy8WKw.*. Q"{h12Sۗ`?h)׺BҖJZ_a` ;l_dT ?SdRBY䍗 *xQAONbu./5j6ׄwT]]=RͮR~/i~wDya'QˮgE2M1&C^uR>'Ϣ8A7T a7{.z{F>KmCb]`إ=)D{F.z]&`NE>=D%_ɲC{JoKxWPnA57}} 1v]twqDw1A֛=.Vku3Q<~߀ 8іuݺvZ􏆔w`va.l!D3{ ڛOmDZ!n{DcV^bM@I8m*u;3GLת0ϵ}u@R]oyG:ZX}V4ߚN?o( 7qȏWГ$@%pbd)W E ,lCk0\Aw7GenPvw+uH!ϐ\:quq}>ꜧɗzƧ::BS!usխW1"pCFxi`|5; Ox̑NĀhdfE᳴ٲ+r@%yK=@/vZdۧ#%āhXVˌ?pЭْ^7-U0'a\~#WXCA i;/ :?_8uDbq_wYtƹ|DsȽ%=-3P V?6` mR$EA0D4BV}$nLߝo&k$^ }>ݸڢJ1EޛjnBwqm_UzMR!BGam$/yw4AԾxOPlTӮx Zn{dն`ߗo{0~r9t^>C#[gsxwA`1mo7'skbElQF3-cWo,_=_wYf3`sy?/fiz2aD &WӋŁj`#ʑ !-^1^8"4vDEN rWP( b&x{={pyՆn@m?Y`ͣH+9/|M}[z:gɻ,®8j!=egX&FkJ/MZ%Lt{n_2(~銚kRzP (8*x@!\[Np{տ$ dBp޵ Ea0!xK#(A[w >-Rxb[ 轠{|Ep *B~ 3[n=ửzm7"r[9M?[űw7_ ,DamPcThv&r'u 6׸ׁ#\ "{V5B\<{Z`:/oﺧ˿x=ܟ-~BwK V!PhQPrn'^ vHJk/,ɬ5箸+|@O9 ,N=1{Õ+H4@h qљ5W礰*vnI{ju #g6W6Cўۇzbd-~Ro]r:]r#dvv# k3ĩ}HV.>";:+c;x>[I>ȷ oyZs w9y]r )P,rB[JDb"-(sm7keOpU|eX޳!Q- 1 ^c 0-K_tWp9ŨȑUm9I8".`wi .<̊aʏwCz=sQ\"-\R~"='O`-2SnvˡbMM;j5vh&ҵ c4% v#{dsͿRfnpᑟ߿#K ~_Ip ޛV&i#)EI4鷱@Bv4ޓ{k0譳~Npu 𭽄ty+wdJۏ_Ŀ< .F{~4gD$ dىBHa{g ;tOl9q|?cdxtփ#qLONa[e$;+le _mF"nݔou6?E'XޏsOQ8 G-~L";!L~;uk,Χ0gq)߽~z}Ξ?~y}n8 wmksٻ\ka52'83FnNS+l@;OTӂì⤁&l)¡1-m} ۘ]>4 rkdԠdu+Hl\zI1W4x}QhGӈaKC܄w=ۺ1Z8 Vꬣ*-\ӴE6ݳ(Wdаnm\RU1Zy~` ֫`x AS%r\+*J/9Aʌ0!zxA2*8ST%zF|8#AoK3@ZE@@:RmD%U3ԖU9*_fC`F龀28F .Ϯ>qNJjX}6 e$T}KN5uZ5(sbx!pZt.ε2B/үD-nPAKQ29X'}yqvcR$U_XRю:3r7XvO)>úQ}/*{g,D YvˆFP WQ޾ɂsZ۝oG5噗q,=a~ٞ| !9.p/;ٌk¿BUpe&g,M.jT. hiMeU~Z}(|0HCeBxβ[4Vpfkdoy'^ҌGÀId{c t Vн@g㊥mBWʕ Rpk؈UsC֒uZ@k aV\ox݆e0^D$mtshFF h"CS\'U*hץCp^׏9P));El@A  HUzn|7P`ۥv ջOn2>z Yfh^#ãuq7^o睩;LZ#ⲧv&ۚ7*rFߓd) }D 2Ⱦm5TShh~k}{z>aW'fֽ}k_%ǰbqoN?D}Fqh0{ i\qЮV5dL_JV-Ulht6._e~ 7URvN-o1YG:ߞS;J;N kbyg1Va=AtT1㝴/a_?y>{}~ LTLI"a?5z] OC|QA!z%WmT&@ &JD_Xg~@C9=sѢY)*6X<"@5$h-J9 ZQ_jvG(uR\r[n@ ZёƋ+h]6dIƒr5MLYaZ!2:}1誇c ->g.h'ڿpG @izd&u_^?ε!hBc)-YSʢw MN`?WDU' L=tGrMlu5ؕ?%&FPs3j.ߘɕl b}<ݷ_-8y(B*ӯ#3MKa*شq^q$!QdT΋O,t'ҋ脱9 ҭ!׻W})+^3O]6ZzfV @Rk׃ʦ]m/Bkt(hz{)Y;> -J=FKs4QEd͏׃0z&&q)UxiTSyp;gO#a0ƁR8UD] h u:ÇH"T`C& /ƤG7&HhugN !;D0LL4$B屙^Ψ%ۗY׹z#I @R.{F1˽`"6 ^x?R<׹]ӜKF1#eRt]t)l&|KL{e-_h]Ae^Sb԰V ES8'2ʞVLNw*4YA?o@{8e>`nq|8ɮt zrM^chMA'zХwo1;n0Z?PCI"H& n$B>ŷ񻰳{Pe (Uxob N]o )tWb0y$wCd |[2m'GL,E߅2x6FTr?a4x[8;&1צ.R mo+TޮdҤ *W,q_+U{*#;^]F Օ6_'xa35^~{~}>w&r~T KR ? ]v,+,Uɲ_5,{_Gyߙx;.+,'#c.^`oXPm-ui| 貓1\dhڿrБ._-0<FmB Ycr%!a+]|tW^z8dUsΏg3A`n2 ϟQOuz} 5<;'tuRU16(Tő}!Q{'_wb\* RtXxgqm',DR|ՏIب᷏qaoD8FM"Fdhb0q@?U[A ̄tn)w2T;{W۷PEϽн2%~' ݵCnQ7ڃ!=( N' )jvB߷߇4#ex?E}0{9j?YǪ2:io# GǦ{ wh "5}iқJ>̬R 6 g:b,e0cWi%Wc^VӚ셇ӟq>%>rͳMI= -u3l#y0 iΕ0c,jp|4// /\&#b ~%EbTr2PKK]^?Pǩz 3{eq\_WgR<1xYF V-V]̝(L7N?`s`q% UDSI\:>]un 0wQY&>mFS{,tjlps(bup#\*B/#ή+5&72ٞ*_ֻ5F;SP)>Yۯ'8}2ϕR7 ;RL 0tzӕ#p.Bh UAMIRprqD Z/lqv^)FWa]Zb)~&J|'$xS]|ɞ랑73$i8o'kCSԓrLx0џ!єbSX0!tIL[VՎ&%DɠwV_ WrREHºĚYDS ѱyn_ EH_J5Nt2I)|PŚKg;Y}8%o=N&#!Ar;0 <$iS.Ca;h-QLpj'[q]/v6ƌQ{&Tv7+w_d"AgHzݔDԁ7{{4mއSf;%2 eT[#g:Z2Ht W}>?;xqq߉-K9GFDMcyeQw@=T>>侒mjg^ L`B갮ƍ~^G4v?Y4ظO1i{<#'"?:n'(`0r?zG{ڎ7>Gc{m>"pCoBa9O{LQ{r.|kzao~7xOv#_ywd/ao{GW i|{m1n;zŻkH[]tm.߲pf"Ej+sȫn'ᛥ[8P-kmzz?`E䩶oZD"le?죽sk.HxfpWUq% kelH*?՞Uʴ K), | +0_ rLolu;;U5SF5owί)hu^y|iiDxBiGW~Ѭ)/>O.@:Y/,ȕkAR\eZ"AnHAJj:>~MKT/d g*jˁKC|m{t~$YP5I2ZL2fV@fU`œ^uf3i2-P܎ a`:Fg]M=sP|L^` N@f:' ţEMm\XE[z˯& y>-` [;qj@8ti:L9C> ?> эw-19x]fA( ( V'Ȼԗ8f(SQ?Eʓ1BS2wF-4_XVJZkz4Oy13,zE{w +A_g;ȶYc<{#V_Xy s]H:2^ZyH{Bzq8b'MrZX;֜Txt6qZ}3o{W՗C^plja'_"jj݈`=B\J[ͷJ;Y}BBpzؕ \Q&M:Td#m{`t 1H5=4;;j='dbyw7,j[~ _ϯN2PAiW߬ Nj?bItX$0!`ϠVJۄ-2e.v)9vg{)az۳ qnlYUv{ 񎤐K9It~7%5 |o9v÷WL΀dya-F ezmUq4יwl3*TϿ&;mϿ#FVرʅM,S;a%ec,^SX蜨dl}i'DtV( 8eڮ~t%k%XqoӭQ$2>eη煰gl}r6=槟Ts@>m`5}f~UQDX&>%('V˱.L"_^&1@no5|Chx9;*N|$kKV~a0+$TP :a{̡i%.VHU !S_{+-|~54z%ЍN*&%v#nЖ?;Om*qFɹ3Qt]<mS"BAx>qQ(@|S8*;R]Q(2^Fs%u&"ăӃ{Fd:)iG3~zxc`L[9=ف 嵆"F/}:=Q 5cstK5p[a痈 }6aם-~k~Ưߝ3%TrS8G}.Y*F{!q?1hG0Ӫg\xftOj }i}H23P [bF0X4|jGrGeX7 3@p9ڜp|1QH)UUhB2|i?{q-`G"!HD9xT=?d7-2՛:*U55o$p󓌬w.+y$3dI C+y=[t_P1O2}=prU7T*2YSb݉%렫U:htz]g`INpzt%O/)w:wKCݲ?W* J BA>XþL~9I]v ^2&нAwЇ$vG/~#{ @wem({{`+0~5(ŒbE}xo胓{Bxw ~oQ׀W~K'*[XYTR$UFX+ iX7fo U=~TP !f>q?-t ??ADu/Gu9 +h-MP4buGV] hU+)E$;b8©KO]#{:`Av9[)l빌cIgY\uS}] uE^NS0I E 8 0 E NaQ$n@ȧ.G7cc{:D]nX*a-{K`@L /9y[=weQ_7 ~h.ߝRj; ;՛p'w8%u;?2: JWϛ=UhߘVRƫK;94߰ OoգzIŷ`[mA,uն`T5dK4=4_S;F%`2)[;tA5][4 Th4[m<}j]0YPm1,"EeoYا]Wӕ2G;1|0 #rU.}S\xM('dF}{·| U6`@ȸ-?zO=ܥ宇7%7s>x$XU{nZ"위qYrX`}p,_ qt>d@ܴq&{:⏊z.` ztOt*F7E{,J13ԵA=EhUӌԞ Э8=V­%OJΉȚ@f 93rV sM I=OzBc*SHlsqi Ca9.) ALGVW ugmSf ~@F}! E/7^" `~uN{;)fu ah3mCr'Ñk;µ)xZ;ԗ9u8DVGkSywW^F+ME5$N2u'G̉*h *>3#wLK@z*_(s{m~_5g+K ֒ @pQS쎡}u qokUΙXT`~="[lGR0$:┍U^._`4_| AрD㰊$QB3p'q⼮OT~u,TAqfl4%,R8|ĸwN~pr':~HI/P#yLր:}5`DFC*ΔVZ0dhxw:-{#J>R̻ͮ!5YNW"q[Ɋ L3e dd`dm%WxIvl} t*#EY?abYB٨ v$|Ov3h?-#@a2~f6y0JtE\Z*:[ճY1u_5eup,myy@x|ܵu"!v[~ӱ?t7$Ow\SnΕ C#Hǻ<_1kA=: !+THS,Lz [es4)0˳p|pnoc@IK<XbucֆҾWwvդUX1iC፭ohׯ$`!ЍC AzԞLw& ۲# wU(ړ;zx97ܻ(,p#o!0&&?aP.p~ ߵK+\`Hv4:) H؎+NL|~Psjc ?V0封hW0  >A}r}^* ~$M"ӌL1jtiؕэ6nUCymIJFSe?L^k(/[?Xa08IFA %($q# 0F|8Ffp7]Bwމ'P`tO8nawM?Fށ;]b໷'=n5ܝw]BrL vN[V!{rxHlo7CFv}4~G7nogjO]O!rAJ̦55?7vh@2p/b+7%jI_אn;uk.'Q8ooIH[k^D0ejs'}%zX {Ƃ+ZX6χr.%I; yx'v75gZZ$29T9V:ev^! =8,ayUE` bBsH(v@nXhC . xpLϞ'p'\pS q㋅5m%S'a}p_i*mlEF5Q%Q+5^e kM _Y|(}GS/ Ю~:꒫U.e Ts*g%Li/‘۶-C? z>կcMf\"P BpyWb<#B*.p/lm9\I2V=N :t.x0l|USaxs:.D|cv wrԉϸׄCBmOZPdBڹ#z)~6e1G kޖ\2j:E.91k\`%*9n(;q<FwihyE 2=JI/ 8qN҇Szm,,n iz|䥕| 'QYu3@Yh g ~b5pA>U)R4|Ñ_t W Mn*bOK6L]BGd =xj8e3uY txSF>1Z IZqMjnk5^dxpp6y7X 7hd.a~wyą"`ګf@!__s^׻{|>ppJ-ӄ T1pj ,W2]ka BEme!\P:)U~i ➜x FJ>k"MeRv3iILjK=&fҜKJ7Z"He5L#.ɡXZf@›fg+gx-h9|0ٖc\c~vCU8tb! I" YyHz`a ߃f^vh;C! 6qLҊ__EM9bpΜ B_A(sEBRȆF HI(CBO !&mdo!0tBm8)|Nw_w l v~- owtz f 03o*[B&0 * vRk7q7̂jbNX=_B)k% 9zF\wO = |+d> W-+b_?<!ҖfXz:yd j7TNMy 5kMn<[v@SUH4:h{Rc`tAB[u/Xc>=@`a*r}`dw=-F q*RZ?V j 6NŨc*}jf7se&):9GU<Ҷ3.ID1c#cPÉNVMHD&\-D+ʘOC߼q'.~F{Swglc=[5R[Ap}x6:nk#X?{*8`{rm'^m>½ ڣh~N[o=$^2iKJýDt>~j\\rԁ<{yq<{lto|1{H챏(% S%36ɉ`uPmuf$n>&{=G.0kV /߃[3K9}ՠr2g_riMMRu&3'`czgfsӇ~=ՓMl+r{͗ZyOL[?iju}؅ep*cߺiVzlb~pC26e|r)iN(F`?ue8(&|W]$- qZ8G"~I"z[BNݝ*aD~Fa=P?c N\*n5^`7^ȩj`eo`.E<6CQef@}1'dTquqI jש|y]i>;;]Wtlč$ԎW5-D 0`NHsP$Nv*Ptny1Ⱥlv#`=trIƣb< kzApRDlm)>G9HmHaR8//׀i,b"l3rtӗ¼FFB>CҘ)+uC1ѡI[6 3kfV^&qNsq^홻.P. dGUkx0E!h󥺺\OehUG7<\K +RR*h+2:P5]U,5LpM,;!Uu%+-'Qo(za}PJb$qn>B٠, k\>~^9ǟ=k]W iKӤ)\Hr5a.Ѳ7P5P`(ZbeQEI"fugCWDaDys_3rӲN{H0ydhwmYR'!|FXx ¼kC5uɣEW95(9 SqC{I{U욕c;%DjY qjp~)}Q<~@mNw]DlXK'U6 7 qݟH5I@`J^ )?5 y[J@}KL#o Ч2}'5zۍ{!z7\;MngvDo½1s{[ ;x .{2az+)p= &kVxw4|77og9Shtϕ6k,-3nںQ{,lX )XphalՊ&@6Y`o_O{~hm'6qZ&Z o,ળ?lƾEc(1^ӭ|7V~EJfsY_+K&KS 3=+Qo/(̠ģL,.|bk®~!OW/d2V[?# M[(Ol LDI9>ʧrV684!$ց8R~aJ *OW=R(@0t85@f' l#q,e&r򁙝,Ep^3FcG|zrcDaBU[A_x|=@΢{CpƔ:FFdJȷ& !Ah0 QAn_ۃ!Fp Oo6żdh> |-bN+ih ҝI-tƐع;n9I{'0-L' 1go`mӢwZs;yO.{&t qݷ i|ډ >%36V1}"8<iLDCgiVmiJ4門9dK=Ζ~,\#m*Nk؆vb n?[q6r/' Y|9aM|dLϴKk_y ka61ԉv36Hn$ry;hb0XIH aR9IeQWF%n6 Em'JOMS>}8!v)wYBBN\I}U [īEUJ#P@<3|5ȹi(t^V#s2r6: (-67x#~wO gܺ r2','"Z]1ì gT?% kn"N WnI,T9y)lH[ίdumAY,[nKŽtd)EhU''!j_L swD\1$& 32VZ+K gw'z ,~~ilU}Au$R mYz'Xpy;l03ѱ҆D]U0`%{T3LUrTMA5ba)t8iu5W!SKZ&樜im]n:PUy]s!ޜ8\+ʱUy!)z@XrahjIRѱET:UԎRiSGXj8m-EyU NDiu\K&L\ jO57a\UikֻA,p!at\q>W4J\DGz%l@+kѰСB\Zސ"KF":QxKĞ]6,a'ǘa[T1;~Q1k!u/Q)e>~`9KGgg|Cʶ@Sڬc!AUF؋L7v`' ޲?72 䧊q_Mhx`3%pz0HvQ^ 0iч|WLBj[Pji߀VHܛ7 ?]sx~ƠTn޺0, 'н[O@ ],z vi72y1R{ Ev v,;w`ܸux[E;?wIqтQ"*{e ;OEXa} ּ|_ܷݻk='Ȉ7 T_[*o2;Ձ=cvLR;u5.J+%rWmvS$6TF57mWۈ~xDE ;e t7 w CPĵRkY_3tE:箚B,K;,lO !^ra8JU S.Q b=wzJ@CV2|X܅`BKT&6%ńۧݲ!XCS}@hnf)QEy@R^HyMgέNv8EMUN3MY$=Y,KĜV)0ьB eSYb_Zbx/kxxP}D D"ʡDFܤ1.f>2_ux4^б*_˃1>..L/J4:1!Qz;ZgNbJ(WАn\+Nѳ,Fh<ެXKN5!T.ud[Q4ܮ CA5SvS{# 4HRܡAw +0?X)T˽|cyt-ͦpY8%"9C$ z`pȺuOel<tCuVm_"%4gt~;o[HÑ#.HЃO5mfz^"A:nir}HN`:bn:)H#:w@s.fpރ싍EO Pr~P`DmW4r7h!SB OW?w3_{&<.Ǖ7<3k |"hƾlݲ'̈́v_rTeXTA)L%"pᒟZve<@;qYAqDX8prf$"jvZ0LǍYhZnƝGƑ/,)̵y(i5ٜf=h~7; Wj(;}T~#s8퇠QOVqP}H=-H%llxf=Hݒ\-C^`}rMLvC1ղ4$( ӅfXAHX?8&051)ˤ~DQ'"?̤KWtC;p붫>ߠ_,#*$p", ! n07S0}c(3l$w$oު;]<{moj@x]&}Oov.A|NBot\U@u} ޡjJx!wl"v˘h{W=-Jsn] :{BPZ[)$ SЗ 4,L1!7,6h10u{ hw_pwV D{*raEB=I@Uhqe9{: c9 oCx Kߓf&vVK$5Snp~%Hce(.,ssju{-b,wä́Vw:,c8E 86~7VfQI40*jr+4Y u p)˴a=!3 # ٨n>ɋSw0\PW8:Vla+56 s,Pҥ\yݣzx#PM WW, T}dPUm{NyE$O>2/Sԣ* q?QzRe#g/:g{Xg3 GȪq~/Qwχ'*4KHN -%;~ p?KyƸBCB@&!p(3%٠ЏTʑG^_ eW2z wsW"zX.zbr]nΥhAu[Kc \ >sj\%sbTP %S &D\[!6x]Z&v87GIj{#T XύfWi!p.JK y.7@I1Fg(h1U\,j8_q._Te!hc&+R\׫} )eO |Sp?{Y=toFS>>k/ql? [nLK\iogXk kq6.x6Q@Ch k TqUb5Kvh¼!Yb>̩̂XP;0{2r u^2xaU<st|9FˠbE,JSl5V(]Xs _Nr?ۓ~{Ua0ǣLМb>+&^g'S!s9l9IzsG82>r5Aq t /S咡~BbkȋTxY< =s(!&:co@ll(mm_T4 c}ȃ$zhP:+*L^VW rp t&ʛ惸U]){Ei 1u*뽥H eZ$#L̵yl3-dO5 "( c1z(ݐchtLP0r.:C.NⲶ:"EW*D^7SߣP8ۂqbOpeb 0H CI @ $PA0@ ?~A'ho9~oP|kRȿtרE 'w7\/ 5q߶TdoNl  %WP-vPrLv¶4wLwp_{=HMMJn+oïP59׏+}lǠo|H&~zY&v7o|~ >Zf%de/3%=KJk*D_@"C.BhnzrΡ^fyXVq^ )Cȝ~|2UݨM/tms{ʁќ+dUFvk$Й Yh!U8<ԦɦSYd!C>)& , !*pk:C^ ܓ*3 SÓK6\ 1|Lق/iϮrnD6j?ߟ| xUդI.q?h7n,iXO!"J 0IbN,v^Av F۪4y낇o-BF>v#xoB2J8#6=bmvIBNJxO8b ` 1-{v;xOřhe ]"}]|m«WK>05%̎[@«(~]KA8XͽUt.S(4lvTٶ{ Nk^B $re\2ܪʖn"ŜwC~R|LW=D]KϝH/$u[XT Rcu&*| 1V$+0Fds@&Vg>^ۜi + XW:UZ]\#)`@w9l+6X_#pgm}euoorAEBtZ Lp"{We9@z

i&9oe3:]i\xS-\5=S2⥯"_^<m~ݟ_0pw# $AD oXofoʦQ A)|;~!7+r{ oC\zt{5~_bđks/<{/ 3ʚd/F}jJtjЅr,U=$8Q~Lڛj aK;܎l󧳑/\~ & }pb*%tЉ Z}0&gkW0E6֩Cnjtp$&Idv)I'UeC6>y oO_ 7R>IdɉLQO?okQ& ,e;5yi /zwރqu؆Rg_qA{t K\-=8ֺTr~NxהvR6n_tPl$@R}o^(EC)ES(nAMbub$L`4tR,7L%&C^p />?hU]гEÍv>^Se; ޵A;6G*񮾿X߻_hDDz|&=V:{Z|;7!t]-"k+-9'snSXϿ.7t +5x_/E՘t1v`?%yfqp)T' >J `fGA2:,$\ʰ4 .K<:>1Cl:L׶<8>Ricbqґ e ظoIz[q/^Y8̲Qy{~SwF٠! mV1xD )p }l/I1k ^S-bT:WY}pO'M*R6&oANoSǮ4@qE'܌_ /'<(%sgc Qj#0 \bd2Pͻ}R^H]{>K"lDB]̺_K*? W=R3NZS.F=蝻{O9?^"B3@B;[`t%ʃ(ҝlMKָz T ;nl.k qiZ\ِ+I +6PDqC@7r2<9vS$QZQ d5E8cYFy^rX7!x6G /aݣه.u?2Gq -#=_lEEw r/eƝYOŁY%oϋlqN^Dg[s(N1|k0&c$9TÅ[YA~_ZTSwtS?&8f *"B&pੳf~q["LݍS= ;J~35ٛpXsPG7B sZt7g_[Coy0N z?MĶّo$R\n}P5 Ǻ> w4֔h{Lzyg"'9~`L"5ނ T9 :q!4KޯM&95įX!R}y[*vc' GSߏNQ$Fey4MQ$D0 І`b@ 5D{l/(׮@*=ü.vēmNf{!9t3|OR3izXnCòh#v<4U I7@F"G8߳1'6QҍўA_‡CEzO1{V:7} a|uzlHOsHdZE|ӵ_~,{t9tVEGL)KE1YjHBQ9/Eb tޅ@S؞t'W:mz|Qw 6X9mh8`w \^`zWn( pxnTo4B;tC# }? ~9ӐG"ʤ651v)RJ-nȆ EPRK^$;+)e([fW"YZqG1ʠ;Q/&~ a֖[sd֋M_R̶0[0^=3';7 Jhb5ܲ =MD\1{N[9'$D,_/nۚI{ wmuA G+Q A1I ]A;8KEҜ:8ѿӜ7f!$+QrlHᦙ{x!w{t3~=?R/== {ntL:-mc;n{/w4yYAvل-`1ObEgH6ZTk"O輙5""Bepxpdme ]\cQS6M+s}B~GKce7/ -FL!37aًNL73E;72P`k8w9>Q`_Kcȍz*] 8y}ytUW֌Arav^"g A&`㌖ h9ջBD/uITe,\OSg1|^µnޝ2QnN>q yL;"$\{ BTnJ#G \+"+@I܍D,ZsSMg K_ +4M9De?r0:&n,n7a\Q󛻖C;G0~z}"j^;~Ԅ \0DS2ԝ As!<*}R^@/ķFGF+ cKhQTa]^APŊT +עJ5 9f tIOM 9Is(;K'˷|&/?*S4:D :͂vjˇd~߶$M_[FeF;ܹV6p ϰo[IhB4LbnaH:220we{m<|3j/Tv_ /{}*Jx{w[ ڍ5 r{y>@!lWRKqޅzHne=* }-[ݷ=şgMCy ܱz;iy6 s7"xEZk{^90* l.Oq׬8*e1ἱ'g|?4?r~e-8.-;Og/N:cl9Wج-|JN8_#;#,ҥBQۧPXK~riuU-N+]Tϐl/1KNjT gNKrQHܔ vRo/Y)Av$5fS=T>ĝ낺lL~3 oS!zX2ЭAaoNo /&kV{CK_sTv]\{*:gӰuCp)| 4u8wmq,mkd?х!BX"jYWUg[މݲܔFɂ }䞰ߙ}ghl3J44iI sQv wwg j(@Ls-YyuՃB=ju)h<9:A# "0?s)֎}5 6b *7usOÇ8㎝&םPϥ,[iX\hP]ާ$j.VQCX5׶ Zed9tYZQTZB+DDc}u'vFu\ݼ<ۭ}֙IHyzԙLOBfzU~E⹐P,lSР)]a5NhB,{^)EäwCy'Z/bu!WVRiߙFYd6PƸNW^E,- #A{j& sr+KOwJG ;^љpɅtMt$PKiP"|h&|9Zı`]EP. b(h噓^V= ~yþGy^H vO@^@z̧|Zsfѳg W~or {mW ֪kn:"S=e@dv.jNNNnwbbhi>`,) 8e+!+٨c%X h ډڱNCF:)ttG7ó?w%lٯ ]<ce^!{iFv wuuީGN=TWaGv(I!| ;4rRt$03tՒC,xsd>]h9~Bݎ;XIVRV-tDiD~[mkOT򣌦,?gL \bڏYS3r)._S,J]F@{ʻ_zs4MfcC( Pk϶W4Ȇ4;D#3Gpz6<+T*LbSzjgu͛,ǦT >9hP"dDnN.°pqďwJc9,xfL{/y%!,vo<,62A2bM'g} dhɿiꕦFlș&^a jHp0w&mٯoT2Ef C=cD|4>Q|اdg]+ '$sC=Kq`*KwI&O,',F؝JosCP{_ t0g}3+> zqj߈J(K|Wʥ 7mpizۜ7;8&&lRpwWS_Ҡ.k ࿃v` 'X鿃h0S%K?_ JqA8`C%gP%9in;$JH@e-sqw$e⊬ }|`ʛuAbuE,D!"qMA?Mk^DBY. 7 ;Ay@%O0xu Nb7W}1kj}f p^Y<Nbg˂#DMzYzkJ]]PBE ba(b٨G_pt TI@oa\ġ[=9F7E?e=n[~ڥȝFma:Xq^VE6Yhdz-,noQ̮؝eѭ{0r{Fmar{;=bgWQrSd?S_FINxr?X3V03 YCuS([xKc8?>K\}lLp;ƘKoiHKSʏ`rkv{qk;SnlX<7OfӪ^` ޔdX%9z?O3`oP9Be{܇S؝/ʽCtR<8)I`X18?Gebԭ8y1;~y}}{ˡ크w0k~kC tEm$!FPF>%Mq7 + ltϘчh?렕ڬxC{L]]fHt(h:ΏdGi"~^5_<#W }4$c{BϪ]8g l`x+Уr%!^57 BS>؏?ouT2WpIbC{ R!&x\[g8CH}v16}C?~;ә?Hr&YOw)Þ XT 7kcە$V l|ͤ۩{2jk^N˹T%/^M_˴)o*a]LF[@;*յݘ,Dh]p56t.deY{Я 77 nvF@93*^ˌߊS̭G!nfYfltMu/o1'm0AD큹bޒ9&Ї6 3P,B?Sz%H:16UJZ7*D+Y s m}4(kX3 M='ibO!,T%X2yޕ0JoYStUpjf* :C(4OMt:hLrd=CeMezD:Jrj\yo`BX$tsWZt5m+x 8 ku?PAޤLϑ&Sb+')Z7I}`oz^TI^T--m.9:Kļޫ̷BKj~,.o097'E}q7/lzI%9ԕe=spqoM^;e1Wsww|~L2dm]Oxn3<\S]$ISOGASP#_IS#i%D*pi[F)[W(s.)#[9ڽgO;0~Cl&nX+a3`gvzz}?F *< u#:)%e\g~\|. J*XҐU1JаYG8 ڔ8|%_]|m3:22Oœ ;wR9Eokg.H3]98x N8l\rQઋWk a:ycl߾{72Іr'5þ?27!MR($A`AS2a/ega]5?r07 tPpWe6aGo.!:9ZIDPO@ ?97޽0d_N lt67;a6fS{'?wmgbJ=pb 5̏Sk/aCPoֿ nۈrIPU Oߴ 0ϊz_WWCkgp?O_W 1x`\][aNrȯ$O\~]'*k9UR'̇D9H?d1Ji%r.n'L6&&3Sqb|}y!O^Sxx@Ԝj){J> Jo &=O 8'C48mIr,/y˖+h#̣4ם;ik(6F}24xl!nխdwxANo>&t\noVB#D]"t bav"⭜&{Kv6AUBz@Ѽ_]Tv8Ro+Q_C53?>Rnئ|ܪ` ^~ ktu%Rfgg\L/.{nukyrW)+Mnυt+H"R4ŀ9 ^%wNˮEV,4Q Sym UFoy!Gq/ 9nq!6J4{=LOƪqޖ,{ktﻑЮjQQ-xnGY DJ|x*WoG1w7J;M>{䞧㽶=)}7q7pN!Ibmaڇ{l}uxfߎѤ0 a[b b|ytx.8/(ۂ^PcQ<Ɋ#tD{xQ?^Jm 39-@:_s78$yT^ԞNW}%L<{8O9{Ac/UC/8 g\?KJ3gp stL#o#N,`unґ/(R{ɐ:2CDυ/5rz5€~* OՇ{yߥY#(} ^_R{h#4 B`4a0oHhQA@wz"{#/{οFmXGN=,:ڥv|Omp{k$L2훬{T$ C!$5d_3p=px_NfoY}"vʱ/9v> [}WI}tkj]ط~Ukط\~=tefb_H}} )o.;pk,bcW&Ic wo+,a:Ĺo 'Ц[\-t 23MaZV=LdDZIź YFgRnpc )CfKk/Zv} _Z+:{}S?)bRosO'!9ԸeRI}p>?zZ:3je6;vn>6anU]֖-c]Qmj$a]] 37:O>`M24xӻ-$S4 Y# Nm84{T,=`{ػ`{(brO mdxC[~gGI{/EG|(GorG_)敖-=p^Cd|k8ۃ#qJz64މ=9wvZEm>Wfg|YwP2Kڠ/g!2`?aŚgVWg7 }5w , =TW'qBmCEߜ3\pM{gUMz;c>R>_g pf|gcń,A*yb顟Q7LeZRQK^\@gj"52aMCt -;Z^ %!>SY e@ U`Xū5v*C0]7)jdS1a =##慤`֒Cj7 *dggѽ`';JV[3d$^/kCZ*t~@_i(!Ɠٲϟ3p:i-u;$V4yƝW:=`+>&:OS8.+PtUn}ʤMlkJ^3ejO$I'rA" U+f'! =$6> un;כQkh1Ita{p_[EyNez2mMP{mB#tTyH[b \فr۫)$$\Mx"2*7< 7IޱbY?gdGhʺ+28)zdK:|vf<_FDXؠxE-ks`k[KN|إjՋ:H/B/[Q5{+)_J>8`rY^n:/&670&Z6-$ӭaN2W=Rq&Qr.prz[p_ ?˪Œ7}$3(7OG ߠARʊ>3Hh7 ;cQ NӍW`pw{=939c{zp/sKB 2 vߟ]/c??;+y? 'P x|DpܠoN(FB#/˛7ڶoa ^8ۗg_C'h6B혨86E 2IӝakAn(7jЁ6Kc'{5"_}cСލ;I !jlؐ8?Ղ}pF]FT6`O/}=1ʺ߄/jb-V;2I|%͌]~ӾI;JXпo~I/o]-\M`|9-:?0/-ݪk /Eg9 )v,p|`|o\^g~Be0Bh inwrڣoFK0<bq^cTSS M'i<?2ܿJ}Ի#Jw o^jk0> @̑U:>y~ kj>1"B/W֧*pvtDM9Cqq;e662+nuվ1ȼVՊCѭ>DHY`E+ܐP{i5󅡫zajvM(`>W%&Ob /Z(\}dy2[[ôJaZY {Nߎ)2dN4~+.}]&ne'LKÝiT4m԰/g~/oPE0$B(2#Q !d!yf >I7NᡍPl(TD.?J+:?6ܔF6nNvX2v\xS6, e^m BmA,ESEA:>}v):'lpLYyp?I8`#Zs,#CkI`A}T?Th@3#%'Ag$D>S.Z̴`FL,;q@\`5{IR*ib.'+9n6oZpQ!}nK ?q>1hGȼJ#_LJDUȥ^"ЕaQP^ĨPٌħӁ\<"l_S`\lš}BcytsIܱ+u)HQ{\YQB=@%|W%LHؓjCslAu|<*5Fguc,x;g T @: @NӾUuͥ,-CK>vD78h?_n:]G?#&{%a׏"Ա];c}p/qC'OlUpX/ Z\[PPAm.2v Yz%e=/{$]Kg>4qøeR@](Tӏ L5aV7~>L ?aguah]G>b4[_vr>s,{J}Fƀۙ/ ضqߎV|pQPxM+ yĦUԨMs8 mSuXޣ߀νl,9c&|Zw'h ^Xr}#N{!5{ñRk+uJzDyq6ޕ[XAu::-SgqI%r:Yxpb{eϚñ S1H4x<'Yf`|@•;JriӀޅ ްB^>CgPpG5Q<^qrfIQ g[% L|dCJK?_c)O0^?;.'r뽑0F4D0$"}jH5$+P{j 5K)voZ r+P%:m2tX^dUu|7ȶ1(>F-<}hh7mhۡw m乂zQ t0;H89?V91NQU7V+;$8ŲkJ ˲+ԓh3GM`"+h;4[f3[xZr+TGFMY,:YZ.ߜ,Ge]) u,, z<85Vk55]L8W&t!0u ވ^EaPQKfOq6 7O8sszn65uyQǸ,E`BT6(N[.* KOśpN>z+ i :֖W[́UTo^ɔ \aHNz(j^ 5IUKMR~fir;z2,熖 XA!|19]284P08 yf=g[VrA ̾iS _1Op)͗i)5{وK!9#b)7v ܯĴ2TثfW7Fǚ.qןʹFDac ΏNp! WXpWob;-O8gݍ~>W#m?S F>"ۅ {eY@ ѷ#>9Xz1|y~ NWMeܔWw@e^[9}XO2KڟEZ)gu~o vDкDz(yS!޳@L~[!o _>/ÄǡTA$:Uщs'^}R,w_ޓ[x$nw:_P1,Sɨa_5f X. ! g*) W>L%g xkXtQ|Վ̊yAX; .PuN"<_ɴExd V1TcCĠj7@G_槙PW(bO̶."ҶNnZ^ni׃B_ S+-t3Fw sr[G+jb|1ȷAZ=>Ew7=`#b'Z[jqֿ2D?c4D= $ԧ4_D3^~{?s/.f@q^żGk^ý6|^:o"Iu ~lj2irTQe^mSC|\*f杉W\ᇉր|r3ىt2p gq/+?\d_Y\i-n$r44}?2;W)".A!D @c ٮf mp{,ސ&Fy)WXd#U8f8H9:,֏> 6pye ҰVkݍeq2٭.ǿxͺqxغn__)rDq_^?{$M$Ja80!Z !^Y|vRbd%۾Ln6& M}.J*hǴ-jN">DhQ}֢:U&*$xI0t6b]ouI#|S|q_푀Rۺ=M|(uU̅7o|g6ixt*ɭB P/I`᠝`fЗЗ w>׋|k},l[ؕJˏ^Pi@P)vgw U_{ c"ib/{[=|Fo"d>edIrWͫֈ.UTbnWeg&q0 %>ҵFDu B1W\s{#}Iu Lt݌DN7R۬?1s@Vż1bzzmFnb;Ytyx?AG&TӞ׳9=z-Gf;,xyXPuTG@W 4 S(#$O JBޕ%MVo|ص[;:bxXz`\7z[˰mnN]6PdO٩joD+rxg+-FM%_3O㷂 )5V،Ѝ1gcx%n- ,7DELsO. bqKQKpy?U_?)k)?DUw?-;Y ]4hex5>+X.{;E@CqFjDuI䌿 Z1j5Д l=⩘oQw `qp(H>w~^y#> n<#T|++d4Uf)H|6) ac  Zzy(47NEOch=^dž,,KEGZ=Chh bUbr8y1)$\hΜ"Ž6'i:cuq-`P78AZi8+L]"h$=Z |4T“ j 2oFN{6QnfPxSQ3eGhٷu}((L狙F, ;mɔ/}nB\m`Aeކ[^뎨HiȡQy7:S1&(PVxs:K'KM ȁC6_oCOh#bd(W4t+Q8m C>z?P~}FGZ#q}uIesc.;EnPhm/qDŘc3z4̉w6(㝺oX|PʫSZt1֥VWu'LhΦ)KA1 1OKgJZĽn;ϰf>zCr:h3DWk[>̼tނlxFGYl0r92դjX PZ]ϳo,[ Ϸ~_ۣ~+{ߘڿ9bI#Br1P$ lCHOSjd`ݝ]=%6%G#~U/d?rnEJx|Y n 7J֋ɯJ]j\װ1Ż^t+B񍤥֚72r7^^{oHl1IF_pI̊w$J/(߭pNB9]|g[} nܫmue1fbzp>s1GoU^/Xe7sy//CN?m>e+X}yr +1X':pA@O03[}<46Iș XPVPT5|' Y/ '%+ǵ >YǍ$Kx]?IoㅊE&^HdM7v#֒ XN^b cD4(i)y,Z @0{F09I$--8[ޣC-*~Pn)!ߜPaS-Rz#(uuQ&l* ߎGߑW4Ul`)A88d9%f݋\QMMrłKT[4rl#E#0(ď `FY#W<=XbF_5iz6lp ַѣMW=>[#o)81 F?m@yI`'Szx7\P)ؓoB\Tu\DZo:ebE;`9ܧd8 U (b4ZNս &8Bdyi%ZA\Z'[Wk^uNJ;6&hh}G>6y#bN| !azv!I!G1C A>ݛrȯ={|&nm):0/a~o#֜"ҭ%n28X{Q~pҿAb+OwGbbŭ7['oGEG&[$ml.wdkߡ{,ߵcnğwp@)e wߜ:8Fɀ8ȿd hەNQ2p?d;QTդA Bh{| Z JKi]3!7D r9Y@ nZʀzƚN$Zk.'L,npl3LbH* lSQmzIkttܿBk.vDAoaD~ 6Zk[^6NQO(CDa$( Sk]ֳ7ҧXbHopصf\iݽţs.$Z': 9nIV>_7'h_厭ˣM1f۪͊n~NJ>nmY!tO"]迭P[ Ş[y]*=,Ⱦ ycBX|msGMO!_=˺wg6$ܑoR hد 1 T 7@%5[BJ?;zP=]*fؓQl?c`elid~BL{[3_g.9@K#qᇴ=hUQBt6H;8 2/Txh%ꍧqnkp wߟ^YD8 &P EHF1AW# OnhWLm*U$ۆdцO_rQs75bJn3׳|[zYwxwƾ6Uo%\y]WS[<CzOm%ηlwߺcKٽwax%ou?`K.e U6 ̛ y5y z{s1wZxcIli6ᬥ%3Ȳ 6Ԙ2FpbF+>Y Mp;aF  +{9B9`칎%LW{4 jB(ܛ @ݞźyZ_sx KxR) Dt3^7r"pp ʐ!3,$ϋqc?BCԧbaM'^Xi:/8y@;CCk؇]{',\k7YW3H{3[rG(>Wpus߇zX: EzU[-|5'%=u~¾j8˰{ŵm).I!/k|~gV25F #,3Pdl>Py|H"![2>x`>X"Ɠ3C^z'cIj׻ɼ.x$yp< CZiN ]{z⪸{e $DxZ- Lr#n$H x98j$) : L P^4Q(K>Ojʀ:h;L^y5~yBnaLk[\a::gKN3=AR{ҢQ;(9/Aa7*)4cMqS#844lF΁3b+sI$֋ R )|dy30|&=}]ьVEUմՋ#!Nz3"j} }a;^Z&iS(^tCtfoz sIg@ *C{cFzdbu{>D/_ĕ@;R%s)EQ w#@]`.]Egxw[LZA<AH޴d ?Sq%NHB')}eཿ/Eea2+Ay4h>|`ŮSOTJնF!aVlɭZry|s1R]>Q|1J _޷{5e js8`FY҄V}!*RI@ĨKt-PayO~oNe-Ŷh*k y)+y8I!t_Q\K5f`~x^WT`hKm *YDK3 ZgKnIG &_ƕ&u ArUfss"e1LVRW`fᓌQ6*xx%r!dK8\wtr?Mx2w7\ =(7o* {9\$.χ9˨hWbwאybz2ǩ g+(b՘{Xxcԕyng:EGA`9-$ 7KzѡmC)&7d?43mw (W u"83TF!i8)=3kG@(Rb$!3YJs6ո.UR3t6K!Z# ٳtq|(8K6ꓪ_yOr- LP5]O BcVD:jaK&n0MQ5F).e>I!(/G̟(Y#/ xe*7ëHZv|oQ_S~v;vX+#l|~AZcm68s|y%8l*}*՗yq@Q\zRp!Q]éԶ ᇮWDp:Y. sǎ06ߎ7V\isrC!1{ds>K`e\9Omm`ϻ<ւDe,PZߋglK0B^I==TzvZ^3>|V&۔[IqC#:583#|Ѻk4J/4+,8HƖ *=G.K$cBcBW#5\KZCԱ|,aSs~'3w ]]ⁱu*w՘+ R\Uk1 |htAh"ĄO+X/)2qPGmsR7@8yu_pgwarD0 fDCDoD1E-F{j[VnSjkg{Jx#dɗ>ş;܍vM|ZB7}GP o8ЛlWS~inTh+f맨t7$zѕbÛ4܄Oi(ݮ3۩[ͱg~JD6˹3\xoF٩ܗ2m f;av9gvƿrb{ )'EOnŤN#K; ;r<<>9d>HG(kR龭j̏w['*vX9ʇQ[ fVIrYdcשsC=JJr@Lc?.;=smGĬ԰ W_UB fs8-|=uqzP_;2c5qKpjVzX~Z.m*2xJQkBd+F<1rS'ܐ0]1 E+/ѕp~'o󡳒[}HX},n񢟭o{Rkm c(((S$`Ċ&O}h \VAm!Io[AAo([(1fNF\a}af0A-mlFfӞmznJzՉ}b= n'Bzn7>!*(kq оA)EmO/K" d쯐wA5ߡ?c0Rn@Uw¯oZU1Lۿ؏g;4/ 99)R-[zy7Z)i^gta▨QfRjxLoX`Qux*(«|O^|g',4%o|:Epk橳H]5gD}%hB57Hk;~2*Oc d< jwUtRy ^6.&9vEP55k0!A0;87sn~B{otߤYFYɋFeCD?LA+!0J$aOidXT|HWq7s|[īxߦ/~h)NWZ&KR+.wW|_Yj Ijj&*dD~[Q +%`Dm1+td[ݗ mQ#<1_MRIFA=>H"\v=۰9R8m?joܤ t zƅ_鎁P&WE*At31>*b~SӠ<ߌVZ $C4*HK ¸@[/o[BΦ/Cq_7(݉?pA|!Er>j^Kjhd%88@(mYQAokw+m"}ڐnImұr/JWVŐ=gbuBA6{sȶӛgZcwÔ|O4Wd fQrln++vLlP;]~7 U.|Kf_2}388B .܇' ~I5~=V lP  ӞFp'}:ygG .j D9T# vW2Sì4w8׼Mdʼ:eh,GßY囧ˌo¢е/3i3tbWD{ȗ!\#1$qP+$z,84!#;Z" hbqUWĉgkAdD7ňc1Lr]ͧ:uRv^@ۙ9{U9~Gs~eIX H,!+sAO 0iA w2GP Ch\/mn9kef!{IE: >2-BT6ppv.>f90jqD n.7(vx+B$ApHUF1;=jZ?o,e  Z+:-=уv:JJIZf*͸8+ޑ5  ?ڋ~yo#xpyY[LăOen{[~qJ泬,i}f;:BEnaNнLRh(@I ,6trvg$ռV29'oS %럓_ Ƅ4 dh ?(EI S!4u8[qAA?MXb>\#ҏug f'(]{.pQ#{~,(s,hvqsnUpr `5jHGN|2CC>˯ É& 8z5T!9_3" 5"wnKKEE,"L&-Rk.Bhz%jZ9K"(o 9vH#tIzUTTvUmUq_򃆠Vݓ, E$沦gD4k2NS> N]kڹDvc*Hra *eAQ|๚ noatH;E]Q{R\h6U0^LL[ewOV>೙@] Z3.8RrӫXTvV¶,S aZ>#/hɃU>Ǜ~:o7q+Pe)$SқQ{Us\)ҧlt7I+ϙݽp"dƁSdU.yW@\SPZikhfe5uJs}@R嵋Kץ\F]F'c&nIKGŮ:VEŲ%$*XIi3P&0X|ߪBL"|whtJ+Yd$_bY&1/)oOdMVFt}X(+(!{,srX?rį'z_ 5 =n!TMJA%BF]JcU~ia}~ħ~?>V plf^q? E4:VEGea2v~Lk?C#J?g?ٱu4^#uL3q?GKD~n㣏yoxx&ʀS΂;+oc̑$*cc]c׹a2_b_n ȮS>;b/'$ Ō |yN F̠]o#o༱Yiٮ}NKpWEJWEe2 $5Yd.#-1R9Y3nwjTHG؞cDeTz_-cSk!Ҡdv=x0 %R8S3r;^"u7uȠ71wϐ4-%sbݿOuOX@l^Z{絹wb!juё{H9tL}VhA><I/B)5տ0.lnV o_9av=k] LhƗ֞\j\VУ:q<X=V:SGIԑ W5^Sը 2_ ޹_P4@^L3N}*g4eXhBrWʽ\Lx,͈[7(p=NaoxM/cEΠɟ~@dJ0&l/JOtQ߇@{`F;D_Voe$h!;u^36j~ 4-`\,}},r.^J4[>nt CT1R.,rSkʮizI3B}><[<~Yd\Ua@(4xiZ) I *$}` h ܼ!KY0PG,u 6z(XR 3>N{shYu%b8WdwZ1[l,[UŠqeLqE@/暁6!Wh^S2pm xOO{(Z`.8U$ ߠGg-T!>&<:2.3۵vLɔ8"y3\vɺ=uۮdvL=!䘦ckxkp;ΔS9i$;|^v;8}#/Mek.~aNEhľfrcw[|71ѹgi9{9/W2-+ J` b{uuWO^GHnp6s=v]4Yb/˅MiwcPtOGM$/}_߾?Փ}4-2F`#KZ>}2Q_+, m%=Sƚ i-IH֧|f$W&b^(Ҫ:8S5Hb!l?pE^t^KJO:L놥->lmH3v9CKq:F`1}~CA 5DQ7t:[dV? ˡ8 Od"@Q$=%,5>X(GP[7\=7c~).QԯaLC.NOw\VaJ4ebfp5W|3eچp֗`=a8G p wm膗y|t$XC O3*?8 7 [$}}OdeJ|uhMJSi@IM̱|#d.bwu3}`4{&{Xe{XШGjCS7Xw-SK m']v_Uz]:*xg'^4IE$&&{5 +iݪhTJaPa{6 [veKҎ̧s=I/~i5sPKfXpip/_vendor/certifi/py.typedPKfXVdqpip/_vendor/distlib/__init__.pyQn@ +,1T% $TEBP5:'6 BnKpl4k5PXL&/d4On>C?Lmm @x=s,D.oMhSF0y y$ Bm֫e€O ڦn~ZPxT#W*ǰ8R*)ui4`~_\D-,a3/yF6~X/DRaUB"GsԤJ:P Í;}.&:b)fPt`a(}^V)B͸vgos,uZ{aya^[]a=)iz]vqW?PKfX71+pip/_vendor/distlib/compat.py}v8?V(LxGviltۣIf"$eGs5@%%=s=,BUPw޾$+nIJrF#q>6+8~!4{iQhJܦ- q^ΚJŋrY$Qo%DM]/t :OSIؼkDT$śӯ^9ά*b:-eN"/ _el)#/kJշvdkU4hGGX;8]4~9:bW,fܧub"^E #fj4+f+{?(Sܜ)$<1mV:I5- ؚ" lbߩ9zMVu6,yU52F vYe~ R/򬑏,ϮRz ~^ gJ@T"jnh2|qr EY*Ώ$A=:ҐY j"'c 1Ti!H-BNg:9ԔyѠK9/.^^ZP:-ۯa:뇲J?끽IJFBJ[ZqyK#Թai5Oy}.IH~/-楔d=gXd Xϫ`y/ So!gMZ5e륗zkxmgQ^mo݃՛"Pيբ|qkE&5HU<J.aQzF1'mY7Rw`0h ˣHrlD# bh {Q#iQ" VwRa\ៃpo7Ñޫa9:6sG+ u]\*s&6,`j-,7HiuӥPGmS fKi1Z3AB8ZvЂF1tȫs %`Mk&njej ~{XRteO ST$ Ώ&en~8A%5T3M1K ['G"/8Vd0Q²O{ М-k6Fshf(Ey L_p&,:4q,dm0|W O؝F> KG q:N @%O]XoՃ6`ઠ_DROnp:iH<2I_.P2Q,4 rEބaCFcG~W0@y%l(IQw*=)@ K˴VG[ L$φ?!= ON rUF a6 #`I 1:O<.t6]ڄ7ijBhTStS2Gvjn0E^j4x"31 -] KlOFR̢,_KV4 ³eAK!ysmR1dZ,ʣ4fco2 DaB "Hor|bzճ~xsoOߜ<(H'ALh:( O2+h YvBq怞Ђ y?Knyf2U\=Z_,x' r9DV $E99 +/Ȣ4;g~AEDr:XKh\mc3?zGq]}z>"@[[v+?Lb(%z?66CFf-tzѨ>S?g`m+҇3,G`uUKD+^q9퇔زH@uk+[/Acp6ҏ AI_&n08VHW/&Xidd hk00/NvvEa8&Y M"e`(Ƒ·b3#erL< :yubz'_}Ɣ/`&{ \D" .֞tP",'pä,x]h! z`cODui\iaa&p~D(?<#/Й_(~DV=m* 2Dk0"b@VU!JP,3*OӒ]q]H'wQ SD43~$<<3܏L@3eF3Bc.ǿ| P 1FAګMQ0+X@FC&黬njh="A* T|JX$i@)B>VJr0P! 7a'ΗI* m4yJq3Ƹu\eV$0g:~ =d4qK D?kJ}Ŀb3H8WDINI:],Z"U CV<=Eݡß),85FЗ(ì1p|2n{X3FH/hȾ*2Cc '=#ѱbtFOwcTJ,+Cn&幈0'SҶ\VˬaK d@,ch#4}RoAYL yqɅ։?Y0C\(* L8o3T?}@jKnW_<;+iksۋO~w7 UZ% }OȳTK'AN^.jXlY `NĤ:.Om(I-h4hAf\O޵TD@s&\8^k%I [wm %Rd(jEqA"rXGY˭*V! 3.Tήl񂰮em '8$)t~h<_E pj?26wæSVp* ]N53fh F@u=mc;) B0>zg P8/a:ݪ߀JjNpT!BLhӂT5Ɖ !I7?AgP*hApM_ I$ꄂ{"ΖqjQ~X܌S  HNmܬ0K0B'K<|zm+G"-D ߿VOc,k"FR6;F-WlšY ;1=.7 um٨܇1!Q Ǻ-e5kRG1_j2.w4#GPuI1 ()ܭe7d"8df9&/v xĵJ39R)f0wX\IE3nR\cEG،Ցe+/b8!Y6vOA-=?9? ה|$8ő&ki qm,F|2EpW;*.QⰕi%""d V줯>\IU7Tۜu7FtBH6ϖDm&tdrKlA-XJ^ 馱˻$m`̩B2Rtboo/^|ɧBz]=KUlxˣ^pCxh` |LӜn]̟30@69l5*-ÎA&&1e[Y1a[a0.ᕎUY` 1 4@/U'+l & HY]hRI!`vpm@$Ecp׆+lu.s䙛1v]4PKyΉ[q^Gi{ʨԷ2osr)_.Ur"^S,\yU&bDGX8dq>o@@ot@y./甦zb";z8 .j^F Bq8&nd$J`6vLs."ծ +t{ u,7tӧH6 ^i!t\ h$W",Q !cN0Oƕ[u&UmXX WfO6b#"uvCvjCΤ3fxZ2>qato)j(cA*e}ihGJr1D xBWa֍z NfE괬uS.Gu\x[N60;qz 3ˊd8ʫ]\ZD$Ŝ)MŖ@QKU8+:˳SrSw`X{8 SOO/uD~GxϼFyVS鴏ݽl֊n؃ B9T2 x.Gc du`(lI(04.Dkq$0,!S{ \/C_RN6#Y\[9L6o"ZI8XwEЮ..=xZD_JLz]6S?Q6kU *RWqDWZJ5Uysy}ϗ5 0OOs:*T>Ⱥ\c-!ǜ=0tY[^TKPC_>=\Sk/Uuc(u:7 ⅺ`zZlqI'6Aa}p -GҸ J%P N89衱#:0GSVu2 MAgE>rRfѡob { F\@pE&ԯ[uղ(dfv;Z=ԇEp1th&r.tEcfhGuZ05X<3o'OZ:c2=#R"d3S[ڵꌥZ lhCS=]P5XPt WP=Ed1K 5#0Ê .1 ,}0 ˈrڢUp)lgBl5tγ2FŦ->Kg`zOqv<Բ&g@ +h* jcӂ^ x&jN%iYZr ]`L&1-v)F*t)! z I=YNNp~'ד !f$X.(Sᎋ7T * |P iI (2ݠzշkta)^,~D}C$ޣ{T#]ESɧVHH.1F] /|i|2ʄ7[abY:A=ic um`Dw)&j*> c;&rxnsZz Eok_ȿz a8,y$سHb-Є$K*Kդ?Vߩz-c|0F^/q? ;k&2#Nub!8o)6" <%{_N^܁rܢxӌ wYQ`0\ˠl =̈́44hH:y%uw+mVvz'IYjSu+.j %+phfNRˬaqY-03~nf{Dd[aT$%_` TW`37,}e%)V%׍hw1Lc&A9)eF DipW6ńF.dCǽS!ZUD6N@+d{윁 |# Uv&T:ʫ+Uẓ_ٝ\LxXɳWR.s J(34|D";ea4O[(spA }kGV+rߔyТ&{ZMէGo@x⩩oNW'_şN*\jϪ$YRT1C!γ"›A4>።Nc9>`訠Κ 1\/ҽvJkM1-cqp>[ԘH4mQgtm`r\Z\ uÚ<4<o\4srm&IxT EF{W~|dcO&_2̮&+[3h9z@ "׎IH&d4k.UVMGUI[h<0ǼK!Mtveb#>OJ,?>̡,lDzœJ2l|kV›aWʝaNu4ș_~lgjۘ)Z%Qf#C-3):_ޯ[Ɇ;-4G;қ4͝- RmacR,azn@hBwmG6OH-0t̼_%ӷc_^8S֌m: _XO6͞Wy* '%2 ܖ(wG"*]'6K=N }{u1LM pGo`=gOfBn%/[4#}NѾ&%^.!+bG͘}{QцObgTE&,2n ^gJ3Rk@jgwvSV^I ; a-Z2ڌL9 }.Ìt ~nX3${\i{lyLl7Eb7XTH4z7 O +xK/=Xm2K/Cq:t eԑ1uzwNhAQkՇ &ۭzFVDC)kAP`O u*OːIo(Jh/:6~HpԇdH^ Xz!S "m'xph(KX8Y:oN”k\eB}W|JJ=V;7 h W\7hb21C$nŧ0_LֲLg87.cbTVhFUk^ֹz)vkPEzU + RhKB@Qy[[UW}>dѩ.ew-Dh%f1!ܩԢFl]3ѯjn;ym,fau}YxLҼL:6,7G1}g1YHahUG`VK{9Ӳ66}Zl]kb }Uz]mH;pL+52N{t3ڎYU!t{6EXk쉸l}+ۻv,4gC%}Ywѩ1;.knUuL+1cHu4n{{To- &1yHTFԷ|S <Дpx ==T!ʛ7\E/@ݔceo!7&ĺUBQ~Gi%?kK=f.d[|UYszxp㞽9mGև`6 ]XjwdGd nװ{/ykCo!E!vX[%ҨO}?QXY'y9lj>*+Uxb=t |sR<,ޟQ6k؀ 7aӛQKFNe[^`-)_`o!߁,URvӓ7/L'_L~#e]f j|Z`UxH/7U)^#B/ŀ+iJ"c}_%8\6~{5_i'GW^JY_};]=y|O9`M2HGcJrAS\|-$K z;_^`Wnz?cH*UkƻgrU(Q}$*{YÆ vm{-C_`0xf%`xyFجgQ!khN1عoobbK4'{IlF7 HhlM#,sͤX܇'4E~$SeKvf S͆ <-~1Iߥb܂FE`Qk]}رu`L|s2*N:I-[c81q#>٣ 0%QD1?o񵔴`jyNȔ ]^Kd1\;[/}N&Ԍ,ۓ-[9)w9%8_Exdfk SX2i\fT Xם?mƢFΤ`g;MXLYJ|#L|ռ=sEZnM)U Ts(3r?Y~.7ӵRoaC13ڔq;DjΙ cQP.\-"Ȭ&vxc;Iۂ2F&9-T;*ym)S ~Eۑ`v뒐[˸HWelԟ#͓@Ԥu}U_m޶O7|;qPS&lnCPXn@E/|cbQN' JPKAmToZ{> z^=?!niƹ[ZQY{ nuVw0T 8 P6o?fn[Nzt8pBs#h `ԯޒ&Tmű^?cU,wwuӧ,PKfXF\0pip/_vendor/distlib/database.py}isGw) p@Ȗ>[D{k%y Z6fn<>}]ueUYãl,8ˣ?gzۖW}6z6Ξ|'="p%Ͳ-Z}lEїM=^xv鴿볢^d޼ş{| ݻgi_jcnoN}RK6*.=C5?y?>pOM*k g#bfAoG,IYl6DmJEUvZJDz.Hԕ]V7 0c5ȖM `4 ۝`F_kDof8JXa8}X8[ee%7abG8w@׋ł:>%KtbΚbpLo+*yLʯV.,O~Iͨׯt00نQkTx ,cP|[k`&@ParfzFY\PF6rNX >z|@خ XC~m)ALaOM$ aj :7-r+} ೢBi(@`Y˲&ŪFbz9EYԏ_}7t)vU5l I`7X2[@B"꛲mjdCO|Z+~-zAҪ_͠ ˏy8`d(M! &E8H=^Z]d%ԥ)m Ke8,|@J3+Ҕz~}R1WPiz$8SLjz4XZIؗUu8Ŝ GN d)0 R}h=a}9NndYx oU`Yc3 R ƴÜ$g+OO0+Ӆ\rwe:Py+⶟ >`CgJ=?9!&0!>rld#j) C/v>DYu(ߑZ0"PD{UlrPL-19 ^Nmָ͠553,AwNVeGPG`~]QsB:jMYmKõ[KFڃ3Y[X5 p`h1b쀔U TXRkK®*{>t^q2eDp |W t A&挋Z0)&$,4ݖ;(IWH(“ͧBޞ=˯n%w R6~@+;$6v' Q;gMQFqWWrG)|"@g ij5@)lc-ۣv5l=4ڗONCУt\tۣzC[ܔxT8/n 0Ϣ]F04)O;Nly H}?Wwf* hWiaF`:f"û3=X96Z'WKC',76cOڊ>lAzC!lDs2`w7YM|g3VTz\+ }THMܢ;l䞍H9%L*P:ݬ - >%&Ʈ󄸓N; ݥ!lrHg>@f$tirVŽ.H'v~O4ůqyaAbdqRull'$ѧtzHx n$D* j3'w }i&D 2$!YNa-NiIn-I~M3["}? )X=?,q)AUK .pos=<tKFnlnnɛB0 fO nf*!>yĜN} /!fٕy9tvu4[" X8ůT_GS(n:1+dߖ]c쨶|=U͜l`N3}w}[tX,J̖`[W[-!4k5#[.b1۴UxYW>CӘ&y*2"HYηj?KZ܍^ Os'xh Ҫ%ȩ|W+zFM_WŶ3G-( jFI FyMmuL#qj(JBrƗm RgHuTv^WD[$_}Q5r?">{V 58kW 4i0RV .jzЬI(FoÄjk= $©ZLSId"qp8VPluqsjlgS[pꦛ`p+6&S[֬wviaR#c/eƤj X| IlE8* )fF^U}nd #]\fɎ4ѥlGaӷ,AbkmӘY)531UzijCt V7kHa"ѷC`M&[tJk=|l*vj<I[E39ठ KC,9?((}9[L¨(h;vKF1O{Rֳ sԬ{wC}p 'K vú T dVa|ᑠI:2wpY.;YGGXfӄnr8?%!ѣC2DBf (4UBSeGb,YHEёCX!ci@U`I࣭Fj;3-$& fi"­f 8uЋO2a+Gy!],9ڠybjgTyV G$Ko P)OUD TPԞt2o༴GluhQSuNM%jxNupś?9Utף )x*\-dU֬]=œvhnG(./:FD)w"ٱQAx+$[6 ע] ړ~dvM߷S@CWEBt(Hi0$2N|ԝh> #nu1Nw4E+}5&=qEd^.`oy2){ԑ.}vtls8+>HAmLf{Nj /X}- ^˕ :Ĥ8(j\Ы39 ${ "Ž(?YRS A">ۣvSgl`=rI3pLHglicw?_tTûwv?q.nh7%F6 Ey(KOϑuP+wF9ZB:dYсyWvt  +!/G*K~]}yU~y_ GRE&I w@n>#8 deA&n-W ,@A˓mO1c=f=xP;{]w0hY1hPiq^eF n.I>0j Zt)^ݖiaQ˚sd@3ws9z R"g顡멮o*چʿ)`P/tՇpclE'-əzBh3j7EsoCh8CJN4NeZTnnAH3yG\DR!ċ=k{gy*#_iep,:29WAF_HppljϪHyzRT/Ũ Ɠq<.e6H%OWУ*m5<ZjPNl;Qf$H:uq¹8FCA(F<)# -Z8/}jbZ ;qbZʦB`]I8Zlyp6@rd;(am@2{[uB\bY4*DUU\tWY.,p2J]UJ啛.XU^(fhĐFoT/Lb{IAeE 0"s FEfw4-7 Byy1@<}Wjx[[" M`c0nԺCF q#7o 2D١T;P{:NJ7:M1 БNSv*o(eJQR#QM7 ZAb[ҨӢH<Ctf3-=*}!$)3]v tc|UP*+l#xIM*Oސvn6DCJՏNOЖ8M˭KYԃهt!Pugt;F6N#TAY1 'tEKt nDD'M8Yz["#OBO< eʾU9982QUQ 7Y2OcKbv8\==ݫNSx,t}|Nø04QD fx61+KZz2lL3IfWI|/.,$<0}J4+NCG2+8͐ w'{>*jtDmu"< XBwF(Z0JvŖ=$7ǜ 떥|[^ _V)DӚ'Us29EbbIϊB4-\&S5e,[Z3<[X+nmꞒtD\C2V 37E= 7%:EVGœ]n(pl<^,Q\Қ.ڡNRYes-Wiz1੐|yBp"L8'PQ񋧍@=s"A)9(hbaRZo{f.S%f^^ ,H3}oJT*)G_D'1]<_JxKC`J CcIͳl({}_rA6m>bڰAŧhHC= jF}}~7ڭ١Fǘ]裯UL$#p28umna9H̛@>أmv([8Tk7‹ޑd.Qq[&iAY\UĠ<`vwӾTZT\,vS+^Yd^7a3!f:#t(x}S-J8K,C&ΎݯOM~?*4VKH1hޅ8+e}LE0-P*6_.%@oay:M%a^H":3N9U9nsa!TU6Qo5L9qX&H$!oZ킚fHOŒ9Ȯ3@Ⱥ n *]i9qǏWM=m "Q ƨ!p0w~yUU$'>WîLX˗i+.^gւj˥C{E)L&.xoYF5q~߾=[=`8JJ%ES=R+)ea e̗akq(OgR͛˺TB`ݝcZVlQ}7+%9ZQo?.Q."ɜBIwq*ɿD^O?gLc{ٶf;?wR;Ո/ &x%ӈ2e.0ǪC'pRMAM{f\tɵ+%O_Rta](o |V"N%yOeQ:(iL]%'XDTG%ٶQffeU% +a͋^ҶS9R9.D!7_;6)ס{2xݫp4&<6Kk\!8 XGNuthR@Ñl`<w:; 3I~m}R|أڶԄx-[t$ʦfp.|iMNYNx.CG_|ld{M'I/D-Km6;={@_I>m7LxN 9#LʑhA__F+z-bXt>yB'qfS3@#cWvw;tsHPM7@=\SsJnff+7r-O<42g \еE-M&\WdY['OsKMY6\V!4?:`H8T)o*ܷ(gvq֋\{f1"MJۓ Ͳ΅Oqh9T.|Um)/kw|wvOH(=LA2 >1B M~,A BM5Fp1;uqmg!rݧ,YD|6>y#ۿD="%7f}:Z߱}D+-/`{lyNȹb%T[%FHĦvQ8ЪpU%)8TX]i$jD'ĿLW 9O7J``@1܆q:(CJ@xe@z.mKw-:l.wlzLV}aMn--!>Xg띒1psr*Neq$'SUte'4R/Bόj$HuU_X~njg ovё\ƒ-W*8t\s2^=A&H!C Wd9\ڤ-0AcdAh`,2t:G,ӐH+XRfX؄U]DhEO!{~~T-m mAKE-`Qt:_@~U,Azc`?#GYܱĶm#߱֞ 1X¿?XC&ː'mڧ¦qB6.rяm+"_r+Td[_\Λ iYghLN9[C/9-=tDVhFS+Z]jN y `ɇ5ko9-kӼJtfyoaO`*Oͱ'׼ذ/ ˖oCtuz77Ϋ]Uqn ټYoՔkju/BSL{BsvMyUάxeQ`[ȅ Jݲ-'Fjn nܰ31Ps0vcTCw&äSd:n]P#y6)81J,iJJ4f\@=aϐu.:.9}EzVlY;f5ˍjCez^Tl3xw!tġ(<6qwk%ዋ+d{'^ hɌK;)UX_Q[c"+1suHؾ%jc(4pCIʤ*6LDapOPft ^,ʓ\aZ_5dyYҒYŦB'%z2r= b&\Yu}jO%lOMnj9"\BCFwD/-rz +Yo!V > v͝"0C֝'OE{Q) Ҫf%s6`26nmt!T@kL4ZǛ'-(Ժ?AJu(ڕfNI uUQH;j;ĄR )oMQ.䇂änI;./9!#R! 42b] aD*|&kxQ-n?E)h1K*F̗ՌLHt@FH %9)>aL{#y;"seHre %eY]|R<<ٲCmEeEߋۛ2.9ߨaTn˷HfLU&bKB /S[KQG/-u w=͢A%8jQ>H,im$!R麱={;ڒn3Xo>F5*GDum%Ba3=ԣ(kTiP'DMB(@O8u,G]##E8kkI 6j >󔜥O) !V"b7W|w[zv'ɶU%6aI5?ޕJW,Tɲy_mJRyRDZ| j 3´'c$J\Kr5(Tކ3 NP\o>p'&OM D] y"l#7 $zQWTeYM~}jʸ ZEJ9:Iy^ȌNWB3>qЎ  Q ⽰rֲz< r>|{݋wnW/46UUO]Z״|jD)o6\+hG?_$jE#{IJ+Y(YBJ(_{ dJqTh &xojisl9UK%:::WOCJ2sjJxgҐE&a3UE28i pK`f_|d1ZAO1 %Dƚfj¤$.՚s=Ep0&XANGvsUҶ6 S*ͣ)dVmUNt\ZZJ[0!\p?Ճ0L(簞.sI2AēO~RY9I HFe1H2 z&U4 byi RiKQ&mȥQ;RаN+:(P::R_!gv NZYڻEoJ-# ̾jsRnzF(LS=,!0Y8 "z]TNFB lSJp|ѵ5Ƿ&.;VxNSEn-g'Y% E&)*ˆژKљekfJVf ЀC36i[N:=h+ȽFkcAHtQb 3v1E^iXVl"XL˪b Z+F`s4lk!HW5=npGSt '{ǘm~[mhgcnik+:zK=kK 2ѸĴpJsJRb@ahT-[4K |9 ȸapzI\ZJ^̰u ҺMp\kewμ8Q7Kxu4 =Ўm`2oDmƘuΈViև/˸WTǘyY8ٟEsm &+zN?7ץVtI.a10ԾbƁlyhZB1BSB^ w$aEVo@uk HXX~n(&UYID2XbOu%pZ6'fk-SS.M>0\3]18#M>ISFKw'y!n;PQWّa"2 UL¹ϲv7j JnOȏM:A^;>t*N}$\HtC|zPam4my1mLnly:?IW` 4?};m'ka9oD9%4J"p S ZZUho5s($oyU%S&։u&I  *^/RhOP,Ks%(v $J'MvrFS3)49 b]%MZEcak7b ^.1pcy!;ȁNWCdobBZV3AI{}x37ysr:hkZ :q=d,?πPYуE` _}GkgcH+ruF^ D!bw xQ*tpP1tjM;:+$ &P /зX B9I\ SʎiW%M$j=F՝@'6V%t!|)I DSꨶ̈:VLTA!B%X `Xҏ9̡Lݘh1{4u;Kë9 CmrNРB 9m'˃̀R =G;_zڊ*zqn h瓭o6;XLqE=2 dO7-L5i]xS K˴C `1 4=0Z =.Bg'Br׏d\̎$ȏ+Mxo]zA]RRo04CvW\ *r$UgF㥽ٵ^=h\fPE|DG ;TB|ֶ[k )H]}Z&Tێ:9vIw(Y7PJI[0]nyr!V MQM[ &n䊷+abv#~VF=!!? s2[QF,d{ubB~Smik(|Srޝ N^@Z#LXރG3= 8EUhNwmͦT\H; 46Vz2G6jAm{`|gzMEi}:j?4REo-4a([PsL~xZ#uhzၢcrxCSKCVZTm^[눉l[+b,H3!X?dA3 Ư`Z 7b#7@R}*9>E/.ښ]U3!UܝݍG-CvX/TWϦPSu`j9Ӛ8J::siY!b|NfLgcmw4SxֽՖi,m&]6yƴB\8 -32" r&yiَ&m$ahsJkhF\}; !3ibǡK?s؉k&MKhJa]1No6SK'̈́6X2XwYQq] ЭMKBN)tyc_=Ю$hmpOiFxf[|*R5~Fo'$u1sټv?~XP}[,&D ``eףf#)ynnOc8Shh O~ ^P# մU>7IS<2"mJڸQ}DWMyjMz5. $x!)@+&8Ǵ/nq,"mpeȽɎz< s ]^T:ޔjU?șF a&{b8J힮K* 77hSW6's7w֯amߟHiߝBwḰGnr ##$|+ Ð4 qZ 3 }[-K<# ۹@{h[?<~"YSA|}!N=0Pf@6:L t^ oBfćĤTQ5F 6=65+\(Z3{ӝRF=U Y>=o?R׌X?bӷ\iS TNI p3I=mLwzꉯRe{6_oO; =Rxѓo'}c-=|']Aȝaecf'0 NwpQ.y>tCg,GSv[2jj uZ%Cֺ&mv54!K :32ڱ3b6ƨ#k1:r ^E4/{rh|]ΡJ4}rۜ?f0R=FXʰ+߿z|=^EvǴAŪ7; W2pp[YRRT0txnDJ\@N(7-jj*$340v1ȑي* !7 >hE+`~QL[2NiHcXeU2ϦN|ll`d:B sECyxI|(IUG-#k5|}3"iuUTP pCbX\I{ť:sd$Iï3K8.HWЈ3`qTg\sMF2Cjׁ-T0{ѿw+zjnV٤p,zb&ށ$|~Sr% @Nf~X*P0dE6Zu)˛kfۢ@k1%i8(|mՇqlz4g!i{V tEmy kP~SWW*[&]xu,gQB  ZH1/w/_وd\!gH2TkEJtkfԸxxӱzthP% ?0{| 6Rܲa#WYV_,Lc-lvcJs@f8J(URu`;QXR8͡!FL(qQX\d]2 {2]] w\'0_s"OXUVú.Z*K,1֛f4UNt,*%`)(`º1A=Gĺ-{+/$4)FpH2 4ҨgX;ds1@'˼g:N5C4*P\WArl22dbMLE'13M[G[OƇ iv1 N]g)N45!hQEr'+s@*#^L͆|`rj5ra6yw,nx_lE T; p:%)ol|BPЀTe<rR`r6N4Q="ߖ͋3䔊—dTVg4W"^ Z^) HK=cc!nd *8`cj&0{Epms0? f+4?fS!pTk]\{Z}~8j`fݬI𼢥UF9Z~* h'\OK3.KM-2%j5E+?ɍ鍰 yQir۽XnKy2$s^O٣}A k"Ӗ¦Cc YղM_="g{Z Kn*`xigrZd"kkuNg᱁Xxmz̻P} hܕD7hi@X)%K>+Wݺ&HaoGX.{ j@|m?监Z3M.5.[P@p'+x3k.Z_\~>K6?=@jU(Tb$J["DZ$VGr}Xqy`)%yKu}s(ՠMp2?ivg 5Al2 د1(K'T{iӠiDVqm+@ ַm,{34 )5 ŢlA#3W,n5Q͈Dw:jxOLC-w`}s sWF+E`/, 47ٮ;X)ji a*c`B{Fu;\a2lt @"N@ɺƐ~*X9CK dՈ͖K^ꉦoI}&7Oha95اf'@o'e9ZY*S2ʗ8֨`>F/I? b]]oQ+"fG'v5 "-FD譶vDx,QP6^:\Oc mBpX&fIp[y#+o`Y#QQQ;YFqG%ej~e*:8Pe*c)zsvE[U^)p!Gݬ!$n%eDG&Mo =\jς3(t0Fc«+\]qϳR@oޔßwޠpU4Lhyre^-^TO(X@v~mךٹ@PrDoU=xT[IFEU*ޖuaaN,VKETvl{K iDQ8V(HaIꟷ;.bNqESUg00ȅH1VHh@`; z"`W,*.lis;_)Ӕȶ#ݠXS-yUV[}suJ631 uk-(bҳ}>6575•q|8afJyPy?G>3b$۴VmC BTq,k:EH粄gwwKGd-ƣSWf6m;R8{TgHX$FP~zth1Kˈv[gi@t fЁ‹/H:=XS;&"mP|c/ɩ x:!:7QhS?SF;G6 hY1 @zhs l(s ~Rs?ָsHd}Y' 9&_:9 N:#@-䁆^m罁|T6PJGu)GTx~Rt~G{a)?_/_\V;EWA3wa* *:%˞vFYO9m4R"#|{x7S|cG*w Sw򢧳#t|}~iuUaXZ$ T@KX;ֹ/;1ԎQ:C`m3ǠOiP8mo eOc3D#p4BsA&]GFlbT_Az ҋ+b%=T%HkG-3ęOf*/rosk8]}1~kZ,q~Nvt?e`q㎎pPR:êA * g_N54I>bܒ.]6z-Mi|Ҽ.yJҒvW3y5Iy"7*|CoY;q[J8v k94)tAP7oQͶt(sXڍR<L֓3@ 6?cBU&.iqxk+-*+I^NUDI-|T8v8{0Dv1Ɯ!yq3Gk0ʂ*[YN<_4O Za2!̅[?nr2N!YR.ܢIfр?/8IDAXe`nc=S1ŞV1Pa/&/?w?凣w97! ɋ'scoGGJD E;}b 0ri}Jf|nP3| hP8Ex|E~ڟCk۔,9*xZzUo4Qh 3ICf k]Z3/, H" uHۂIM4j1/>?OLίGIY!hRºІ)mt!_M2++C`6:/>18E[R)RͪmQ 9o-Ip^~|f4!Rgp78bFϣqZV5C7L@SX@ Q<6$Q5ٌEh^R=cD=IKpcTD ,aO,4[j@_m̺WŚ5uz9d20d( zfh K5Yp5,lSlœ/ܷ`p~6*<}$^pucT]N,A5J&=Gcj>H6JȆvxIctGe0Oo5@'.`m<:{75{74@Su?mç "Iqg1T3rI/oWaΘ>K_inf8rf[^lN{O~.x»;ߓwd~:?~^"s 7'ؗ5=d ҩ>?/`̴],ˎfE9BgًJ%SdmṔN"c%f%xYeT>143s}L:̠)sC4bi:d˕mZ܄"(K hpTs8VKO+]ZYat)sC}u` <皕ȹBݓ&fNH"$766e.w1; _yN),zk{lz>1yQ͇"AKW|'%1>߮:J=yݛSDD)egIQ?3nNv%նIE0|%aG̜GG|gWI:s]3$:#=38|64_g!\Cq (zQш x%S*ʱ ߆]ݡ?Vp_k827WNC& (go|t)Kk/"Sʛ;?aij cIcF^@ϡ8'9I'F\޵r\Ыrr_NYNJnƙ#\ pQL$YZ*m,f>L*q4;gHoe0Qp– E:|W{$ | 0Qj7Mw^Gi{)e%zy7Bt{<\saÃnz9 ջÛRZ&zr[B3,`rzGwU:_+w 1n :#:'|X}_L6+&91UcJzl]6}7w_~GD:!ٶ ܀k Yu i߮u6GapW͂`tPj߰ %aq9V[#o)LzoDMVE ev ԫϓzQXNh)]w rjɄidh}d[YS8ӼԹNޟ$rt6,@ئ7N<:$mG7I.j&Cc%* JE'Wot!ҭ>P?I"\e?zr)r?çsdlb65\ .o蕗v>O]eM-/?OP",!nR>s!7o/;H/W=(=[TM~_^|O龜 ʰ";jՆ}Ё/eFɾaJ|UlHwO81MUNAkFc=< F\\_ZF# 8s=ZWy8]YblfoH]si}'Z=H1b~p|)\D[C8j*{I=îeD]Qd}4ߤ[Jy Gtrb͂3跠 k ?K <<~]ˏF Pz]T8+zR }_v9Lf 4$g'34: ncc\CjCr fN'u&F aAbr~ƈu QrXa Ke0b [}H `_Q,f;SśK)Gǫn7%#S(ܡܜ`G7+e;p.#ǩM!d.=&ٛjI%-KӶȯM`L%.n3 "MΒ4 I `#NL`{} >_O`8-`R* 7R4ָ{ X.GS"U*|' C|joOcUوq6duYp`ry=ԼeŢS=Ѣ0/& _ў }* hZFs44 Sw |_S7HY*݊q^eI;',GW:+TKtԮvt>v2k$]})=fy2—daxNQs* Ȑ9< oE nB.W1.cgSbm瞦HKnʪʻjIj1zXխݦ] /}]~7B=/{\{)?:>DiVaL-e{FEPiu{·ov@vB.\uiy?@&jjyx/?y8!C:Ks7)kVڥILZ{Y*}@e!9y&erDm%:[K0%!F̮{mxC˧4u/tJ6ă56KNŻRE\J k޸ ets(gUS,@7FN*q Oǝۖk[LҨS>WvYw~CSmGoa>[.pޗnl:ᔎl(U {+䒜> ZxtuzoSnj8y:gRA]Aӆ6b>j䔲qk֝!H lK :j߷wMFffc@1 2bG3%mP{7).+͆u[= .x9]cX?̫;G飐+5Q!~.Q/cK*ȐBGUZ=&&xj|!ǰ:#sɲGׄ+g$cB:MxxVP&5/8uEG0'޺D͟YyBya̹s]l-lەJ+S~7A6+ wUTܻ+^ۂz4zӰ%@K'SXgg:F )֊!EN˻dԷd/Vްgxd,ʯ(PCm- WW?WWCq0(2k6zd1]>`3/hG3,Ɏ_Ҏ(f:B77 MM"I8<"ޒogKOf6 %O!pF@9z'" ڒ@3_&s:}GK\BͼN8]h5ۂy[QHսx@6^fOZr71 aj'RՠU^Q%<6tހ;xYiFzpF@kQ\2~ L6v X?_b H,ZL-1E%NjIm\{!]αT) kwT.zʜ§Ӊi\Ne:.DfX=u zFo`dW`KSy\FK=$@p*Qp ~? D6OpM0Z-V ,]" Uy%|fmc¦vLZ m*=ogcɕWzeNÏ`nU P(>WWF4,!ʙGyFaeEPĜeݜJ"{|,O促3ZhSt:, U]*5\/8Ln`.duL=N!UӬWwrloaiyr5y' 7t;81xM&ck J6? &X8H[Џp/#x-I`1f 576-a.l.֧݊>/>NFR^J05Y+moYW!px3}yS,AQ?T.&|,@xu$}3P0ư^N۔i)/)Ԥff5SLbxg ?Pt-+L#2TLg-du \lx& :Vu+<]a ㅠhv䊗1Yl$1ߵ"ie-u'cX2o"n)r"qTd\Ȭ ʽݺiR565g2A;zDy-C>Hcv{jld&ީa}'`;tMOr**s?yhL;S`Q]iڛÍLJ1U\h(0 EJJ%.-.˷> gV)Sl*$s,AdogmZnpc75<8"U`r}1Gae{򥢬N3XA5|vfA12>=oIה6p7?=>"B}0pxZ,K(-7󎗳dm qN76NLXwG#ۣCدЧ)5@TSSJj!>in^1-<-ng;GPKfXn :X7pip/_vendor/distlib/manifest.pyio8l!)(m .8HC)YΗ9<+V9KY01e$% Y dR]]VTWL^g\LR>,"lLl(B'4 3=l&/;=2,̤90AD E"y`00Mٕsfɔ¹ 9k?GzA.xx`ȮTXM֊z #w 88q08ۿ<d+2cLڂ %jTFE{" 6luZ'w,QY]pz|x~qtMAn$$T\@J4yTxj~|R&ie*rc4_ ZGrq]'&dZAVV0D=|@<)<ńOD569Is%0n5a pApF('Q,Rr~6O+`>N$~w&y 5{Vy^( w8_es"؝ǘ!fD[vVN$bgGu`>@%6CZ$t O N>V,jhV):~U"88?'?6rzfB6E\Q_%NAW֋k:Z{yO~p)A 4wRffjjS+J8T7ΙZG՘93`C0h%1O!&p9_;޷Z: jh7sQ1#%A$Pb ʶjE.-~)ר3/hw7Ug])<۟t w^CSUma&Y*se&=+3i~PA0߁>cNaA0]k (` Gz%j1nkp8w7󜃳5DlYB{da !sɧYGʅ> Zpa&~iZAԶ2092A ,j"wPAń#Lw$4 D /Q LIjJow9n`;g mM٠Pgd®o ~;-qP*jQ9SRh Y*&a-Nwt͏9 JݣM䤸2`FVD+ukۑqb+&oP<->vy*Vbzö}Nv)Zej6ϞD,fb6:PYr~&;pG@d^wVTg4lgoq؋3ԉ]&n P3.`mV!64M|C%E|8Bh7ve?J|No*k(YҔ*j^WBQ>e K^, TZ {fvdֳ_@!No,cyIMf~L 쁨HUQ M˾Jz(|m l&E8IהgSS])9TWp(uP8f,ߑŚZJi_.:ϐbΌbGCeR(',Heg: !G~y!2Lv(:\& J):D#Bnu!N5Q{d96&O4 [3b$J~Oh9#vzah$:PV4H}TcĨf/Dn@H r\ϧB;10Ǘ>Qљ D%ENZ(%dF<؋/FgG_#fi ė2bxq3B88;Q4 !/ # jS3fZX>E>ڧJ`֓Kaſ4;bp4I[+2jCiX7 ҠȺu^vģpgҬT/lCジDZ n JխHAUQev6J1vt% _Ih[>;=fh7{AR[Ns"N0Od;V 8iȂ!M2ևvP`/1RK`7)j jc^f<%^dPbh-ϱx#bY2+ݞ, MSWF;X7{7(nv~aP=_!= ؈Ոvj(R0j)t*q}\v̚/ol/@r v#;rTm[(dk_Cx!Y iCaL:pibUC_ 3RGWNy^)tVݸyϣR\LWt`vWWU-$*#:i$쪸;EʭHMTuA$ڐ4$E{ E}+#lkL[o9zS ]\@mx)A#T+Q\wϨʀ}TA^{ xk1v!p^6t;v*J B8R P <_v[ FeW;H_G'?oɯ7(|& lw<ݪ!TdYj#CuwI}O/nbJ?~ ho/ z@\Nqwo]_{.kZ ^SXPKfXnpip/_vendor/distlib/markers.pyXko6_($0s.u`Y$i0 \FmT~._2ȊHl<#L* ȬgxYj+ VUXBP,n\J:^7]uCm_&umdԤcS¹,+5{UTXJU#>ᷟI|bC%HxD"ir`IOhovx*\ߖ=dh;C`hoc~mO&O~#~u>'?u .B(C VB пuhH$V ̜0SR!b"vklղbɖ4Ah0էN !]Qh, w{#h_D[)v}9yH*'رAve ?,̍[{z&cL趹Ұ1C~"V%zCk&:T]qIRv^_ޤcodGh+~ I##}L(ci%2+esfIӨȪn%]SSp(l$xSs.ڜVpf mKhfdfOߟw(鄱p0j*cWY1%l J!CjW''>" Qxs/v}磋~&bhL͖m.Êqte]7X-dntX^},x~G ս"4 YC A$^ N[P(Fr"m @#J1zrg)kh伿wcJ=٠ ıE7 wb:~mUI`2]GQ/ot٣k|?Z&HRnwCI:wld>`Z pCH(Rp;2Yw»[$moIN\f:xƘ`:K f]e{xR(jTàU("Kv_nbncIњxr"'/5p4_xdc;Insnܹܵ:fδB #Vbo~hrKۄR'׸iwOi%c;AS'x3- B ~oDFgoip]}YڹuP Y&qOi( c}J ;?{;J=sP'ho9mSmLT!hzWPKfXBf% pip/_vendor/distlib/metadata.py=wƑJ萴D;UUl:ы-IrTVaXI@@jffH)^%ݝ]lI_e}1/|Ş2Y|&;vrۻqqQ%g/euZcht9{u|zx<ןj {w'o!yMYqj1EQ:{;}[76EQͭ;!?xP'1vqQsEzY(bAe5x5/ؐtVf|j1UEX]W-Q@bXyVuO?1nxY(ug|תq]ȃ7CVѷ[jj<.j0EkYXe.wCv눞Ɂ%F>W+!ͳgӣ7tcGK?YEy<,*=ӪӲ,ʰIL>eZp@Zh3/tV\|Y]@q€oK`R%+L.wyge' B]~SQ>_y 4YM94Ζɖu-0@Jk,=vn! ~MtpM4=|7÷Gӗӣ v3ͅa f; h5V Rт }$BD.oXfMA>\%O:)V3 ˞>_ P8BG@ѫ)U8xD()9S@> >L|>|%O_ 'vW/Z)>LD>eGoFa 7 swXfeJ-ʤšs>ZKɥ6"a*0γzrFҿdtP9.d{6+d~s^y,n҄GBU^v#Y@:Z5hvx؜Ab"/V5'qb?ZWS$yj˅4~Ǚ53V|]m6y&$j2~bDwOzVa6Dm!0$6j0R-KƬ͖h)%iƕ1 e˄9S) q& 0Um0 T(!ZF` пzPO4,|m7/BZkbF1ࡗcZȨ'7۞WϞ1Hg(Puͨ1~l8Ps+Su8 Z-Z fr3`>UXA@.ڇn*& Hr@ +VX#$~ AxMf  5Br/%;ɝ5YI#R$_dM$'k#i 6_5|`$'M=+eub h ۲>i1Q'`$ 4Y&}D2:%kI^DcU-:mig`b a ԝi;>/phn;7K!ՉE_6`AK07p8P8RӠJYO@_S+18A*ډvT;mnǽքNX&RaM^ $E6a.hcka6a{=k yIM_lerX,E>Ŏb Ln=AI!ϰ-gW lvUo[sC_}: 5X7eqs&c;9p[R(ʁ^5N b ao08jCI"%<ʩ0`pUfXʖm01?s[M,Ƀj`jg fr-Zgc Ҭf7TK WgbיL-]ˡ6ܖ$:"\L`\!:! ;x\}vhٸ(/$ɂ/*g BV\ )?X?NxѠ((Ex9hsKdT&yC| `Iܿ.~*jycm`78Pp셣‰]MGh;*CnloeeP'~n܄CWEa;Ҿ1mÈz'޾$X1chż7/l&ƶ;ؙ-αU/ q`]Ře F"U<PR(3$)7}oS-U" 39 w:&q<!sRǕ|U 28  1wMV+~! 2 IU1kgK1ukȉٓGM$D NBgP&TqukB=Pu-YyЮgZ+a!o9v.'lm7(L<,J . [=15 AΡO!E;A֚^$o[1UC!}5L%Z6g}1",@!]eQw.twz <8e10Yh-*kSCuV3Tj%mlk#babZ G dQQ0PFk .7)'iD,kˊ{P)6"e`F~(5: jP =o>4gsP7yc0o-lOxcK`EY,B!C<1Z ׄx\h6 DXt6d>5rEcNcIf\cʁdE3`8%a<0aflƼlj/#VK(\"6],A?CV::\fɌ}4mEJn[b1eEm4m TP%u@`~۳P~tĴb?\ģc"j1)!FS#0 V4_rKڭ$f"L<.2r޻'>v޷ka`^:V"~[a0D(mVRT.m%%H$#H?M$v:!m*='W_6-(}H094`? R|Y|3.Cw nZAM\5 NzV0gO,#PhK,#ؑ;aUeuPՒC{YV5^G4lR0sTnvբqg{^7GamۏJ8S ^3+JxgK|1NA_{/_<ЍRʥ_ZcsWryZ蒐xʀ׷qyYؖǶ=B0󘢍 GZX|H ʈ G`]tUT{#n9~_qB; 0fE^ %# hvo2XBeX' Ulc >&qUd=popR4ٕF!~PiTJ؞S1ZZl.56Үǡ"7l$%z$,)cN܍-`)L>:!L&Jcz 볾jn\BN&Wl^ VFp{x^,jj>=0Gt 5 g9b+h&! QE`fv 춇n?cE(媖Z~᝹ y1 F_9.{VY(CuÃo/VWy-s>fZV&p+ øNΣ;~7xKR"RCG q VDU# o)n EYz -@[ĿUK#IdhP ͒z"?䜋蓮(4Gb5RLw'\2*BMl9BBiJ)%)&YdM(k5WJV'S9|Vreֱâ8 A63m0fb)bhK5BYki $n.G4F @֚ADaXsud>9'`oWVI|5faк0uؾsD* ZW ]!XErCNv[ ԐLή@IEɑPozEBFO;=j^1;x{u\iot{B%>@q8>H;aAjs,V<~яNkPL(fz8=?y`D\G}E+}7XO 2i|x\ɳv8Ǜ,$$:ꙉLBq/ /Hn|- L>Y!%.;/o na<*8пΗidTAy\"pA+7)դ0<<}f1MSk%aYW bobqUct6ImlФ}$wFQ@f9RX z?H<;IK~^[Er'\ NdyVAk o5Y۩$^ #MP zT &|#I|FTI~ 2E\gM2goD0;2GYJqŬ#oOBHEC$xYCfl/S n (+ :%M+HԵ;k }h5ZF5PPL-^H=;C͐Z[ DcJ;H2C;7;6Un*ejޟ\&0R]@[b:?e *q~ߊ6mSnC.7u]~5eV2Fu6XQu+c~iaG$-? Bڈ7L?NvSOsŧWeUUu}0\qR9_E){>^)jp׵l_Z {N;Yl)Cqեںkvu qY,%geOhB]cvY*Q9}UWZ3-v_%e/=II S:j(^D[?4L;kǧ1؊Zz*qn|B[봺`/joPPTSmϻ]O._w02 L45p nÑ㈕I QFApx9W 漪c J~ :o><=fcuJT[g=6$ɞfP>O ]c8D,;1j1@D") ,s`u_Lfq ح\hgGkdjlSk 2#Ht'4g16+[&UK6*sֈ;aI7XZ#6YowT|󚯽$Vo'^z>@O 77+|=">vQa>=nϏ(Sool1|lYbY60r/[o%VsN7ͿN#[=&CpU$>qGFp ,ATIJϨsVQCN,x?$VНrw7{#=M٧6M35{ZŢ7s$e`ֶ|q`H; 'F\WU̫c6oK{y֑LD7:M^ǢK OpT_.cNj:kqU9΢hw,iM}Xm p:9TK;z3]G[4WH{7Ens3bca]w"gH.JBj-hGȗ xVNHl3c55$z̤='aS2uA8|?̙.d^_Ɓ(V&.y2BGEM*cMS'HQ`3mؙR%0.g 3+Al϶IK^@=Ef+>!Q%͈X)H&F-<9U٨kJǽVu`;IَW)x^ebT4SaXŖsO7Rvv•?8R`Zuq ԙN,+:@ b-gX&he)"gQZDN!A0w#"SCtAʠc]V諞)$UMMp`3O"=QH 6EHBa[Q'*;sWιkh@M>9y%|+QW֘Wu(HV \+Zȹȍ36_M+ΊML3;c|Z\ Z@{n:g7=^_A:3s`|iJ@h*X8[^EV#z@d,aEYv4WGvP=sU8+k34U y`+D;\׀JD3/I nr%"1*i%N /nq 3;0.1 <[Aa7j(&[U{ 9q!۬XLg_>]VOBI]mgzLAJrv{HU8ShCv6ҬAm}GydaYeiL!MWML|E\f} Uh_neY⡆ i^&qy\O ߂Ea9G6[v_SiSYu&D% L(>l!l{PB Fy~9IH6a` n CIj&x9 1l8pW.` $@ ,YhI5~j%-m Jbi>iԚ5ғx&n ;\TwYV܋4tBf6wXymP$: <="ۅ=^Gn+3Wܸb7.ó@`0P`B7뽀RFWZpuLNT @c.a K Fa MN eQFQ h23)ѿazB۳x bٜ].}Q40~`_!6 ZnJwla an Z`iD7WGql!H-..yUU= ґkGαat|\jj!p5gX@kv~[d(c?YZOjh 3²x͝㣆Xa6~AcOC$r2m: !p&$Yq_ڨAؽ ]>y4 _CuzaZ$7ucGzdѴWK)(wSGSӭQDCNxz5 ]A$~UUEOQqb4 ZhȥThB+6ܝ7hfAcn{_TO{SC0+FT 63'S (O31,:,ϓnw37r X./ 8S]gu;K1hҵR 4֓/$vʕ_n 8n..2WcWS(@dƮa# ߋ5DxC!ѝW%n7,SSßZu}Ah<ɳ~~&b<؊=|tF D̼ GF1kȞ?̠WW'Z@&W݇x:37 .#φmg-A|c[KusMˋ\fK"?<TG*$njXe6YT`8)̮,$5:iI1KwyX'?b4S۸΂"ڻ&p03} {o/쩭{"69@k00LQML<:э~;U9wR4 9[z#XJ7ͪL10iU7~z eÛ0?)r3}7^ 묩 &?4>%Ez zC-Q!KN'f2b{}nnBܕyϏF-tJ%-U{$?2GUbGwdjKztf!woH.2݂uk87tKs0>iI,zo50PKfX=`\Ipip/_vendor/distlib/scripts.pyκxl=2w~~5?j 2\P.|gQ2]Az_Fp ɛۓwgy^營1Lx= wt} 4O?v~ie0?n'bP ,O}upwe0\_~hɭ,O"O*B&9`Ww9 *|Dd0` bK"fY͔L oKE( H(6Kڍ*/bɅxLDYuCqܥ<":GE [b? wKKYCCO  63e}$,cr:%m"g0$4Y9=O S9'/OAOGI~~\:܌^`]kP}ҽC΋J<RX3F :%xǤ|).D1sK~ >xto@}$CQ${jP2m(K *EgZb*Ь _|g+)3q<.%)>̶Y8̢l 1$_Dy07!<2hTJi SY+I\c(=ז`>-ݮ[ (\]uxNgZ[ɯ WǥkCr&n#/XXeK`,U<57uȇ(Σ\'7_t-(D w&66^5̥G̢(pψμdTT {qP0;d~ 踎6VOts4uP14\dT检$6$'"!x1_0+3i62֞G5y ̹N_儩3`5y⮜ T(Y>Q`n͋ϢT+9"5G4H4LB CL$/xhGГlN_Ϛ!Co4ϷHF崼X>FKנ 6YpU ;9ݡ@u_t:} E*{vP`ȻPFle$CP% LFOk cTD^y<זV0:|0B^Fc0}j'o0N4|uj"1'9bl7"Gُ,A! cpIzF!f'oiFZl.L6[PDGhZ8Fp1ygD 3J=7~h"|">SA:Q;$f/ijjtEJq^&KDq8nPa47UH ס+ćvBVg:$ %CATx^OlZd%)/z$Ogf<̿9.KU` 8?;XZU~-v(<!e\,A6Bغs(~ I[ыcbp>Wyy(nEЀDN^1@~^@\n}O[OqӔ|ݨ1N7OS8-:`E, $o;oݸÍ*8-x>D!lel}!)]]ꃈ(اt6G?N)mVZ&d2G ! G j 4JEI^#,:0&$IM+qVhBQAexK钫PWkpf&|!]ϗtP-! Tu[ f dP`·ՉB &1Or"@Z+daˡ>a4 e *&R#6(!1l倝%)8K%P|C.Q,k;i,l3zb<MTJbyR,XƱ8+K_Eʕ{"\DHD A0ؽ^3Q\u6vD ֖)ԙK[TVM; [l}(,VZM#C֪Ƽб>1+%ToRަgޜ]!aL_Wgvz0t斲L<3.+j)Ql3@bE/}$Io#T @O\ق`5y7yp"0;ArNm<L:\ٺn%}Xhk6*t&'-rl߿QTg{y0. ߳i=SpW~'K6HlV Mn|*XӛLB2Mל٫ͺLi8eտ]e8mAr?&ͮr^3Ksfx/l%\f:7NΤ𪖛 T H=JUlkp`3Xn{ ;$lNqfdUjSt'U?qoF\[E5yQY+MM#b偣d`ULJSM8yVˈ.JѮ͵2ߞ%<=Y?jMR?)w_S;I}5_-6NcSjb,O"ԁɛd|yYlc,C@7@z_}nU[l k[KFJE@J W㚓ڙ^墼(C(-]z gj`DjDd6\!YT5!4Qk{P6G\#Zdѥh4ZeBjh{IwޡS10acpk@'(]<(?* o_V\2h;w<GjџsJ>@a*zLD1 FL|=H.Y%|a1% Cs3CUF2aW!%C-P h w(RMTq|)m8On@T!E{`1nHd˨](;рXj#EUג Ϛ4Wl7׷QHBWWcY碤h G SL#,phhQ/փd[yAh1@Ri๡ƿeN^Y =uzN1]60+V3DP[0bKMnGjw}6N9͖(+-qiW̰`j=-Nȱ%lA>~nDF){b<;m☝9YgNQyRR7"4`@jJJQlD;3rUw}#n$ޖPb+9KAZ!|3ڧaKm7 H&ͯeLv±lan(NZ2 3l h2MΜT㡺 4&r9oz0pʌ!&  g"ǚՂ4T6TXVUo8S^II#/6+úQig2#Q7l_ ~\TZNf4LnU 쒃6Y:Tpnԯ-ەާv+SO?b:1k,#jGwS-RѡP4" uDěhʜ tgEm"?hVolHQYVuvS)*ZGkWJA2}~[5m޷"ivVZؗJ3hqϖU{M[#^]Wtu5)8 RHM:>]Q *7SWEkyu~EӠ;䴘rIw!b3 a)+FɼşXC0 㙈Byz翧ͽn(4CWvhm3 w95 |!ZSU3&J5I0υV (Hw' AfsyWP3^55` `OAuc1 _ pWxm1\Gr J(e1;Twwyv7^,cLZ.cՌQ7{?NH"θRPngO]0Vչvj]i:LfNcRZ%ktM!UW5 _[ 8oXJ%_CZ6WKr:HR5ZpS(CGNfF ph\H.3Uɺeŭڱ bFIa |to;5X*YvJC[.*;0+{4?Y8PKfXJy~pip/_vendor/distlib/t32.exe{|Tյ8~$LrH #52C`&JppdI|`b8J d,X{Z-R[le' 桢FKuCk(!HΙI!kk^k*npg?M}Ly%{9eLK\v[k_]+Xpu?Pok <;sZoesZ; bt/Ji/9P<|ڏ)=ۀ/1~_7-1qݝL̦,뀗i1'\ePƙ{5f4\{FV皸p~1#&n_&={&?- ?Fw¶Z@[ux=h5wb8FV݀M:,pkVh3wV85u>Nt.rT)+q;.+~$wmh-մ2"|a+?xspdE\-?ڂ&-rqjEqQ$?+oxIW'KÒ6`I4Jo((I-\EYye)G("N؏Ijj"\nR|QsxQq 1ȧf̰ߡ:DWh*<x )~Mg>xq=YZɇ wZoQ@+p|e5j+0OUvE-D0pgPXݭB90n*/-˩PJf[7!TKrD“ E:a1}Lb+r HjIKEgi?X^k?1D ag/hZ:b_?$UjҔmA̎H`g Wp n!"kx-S#ZH1]Eqw!`P]5z|k4w(R<*+'&:OはXF 't{ =-RT #'4qmjksaB/TQjuVuĖ>8*WPCa!r1(&1zlaoLg+nlXDHlO6ø/ F O3G ;Tv_G^,* JL`"(Ve  #>~bgysP >߉>i)D3Y˛c|Hi~q>8i\1p͐܁% . ~ H{1W; Yj.P(a+ԉ-ЫNk״Vkj*f(Aݍ>[Fɳ YM`.Jvc nRON5@$An_˳CRQp, ?_o]^+oPr:PX]%$)6o:A+pp^M3!9X^j-6)}4 gذ bm),)yԌ~ɤB7z>E,S[(y%]GjWG.\-p91U=g#u ټ,*^nվ*>h lD.Pmoi}P p>0qh %!! dUsj8N؛ۍP!smI3;"J:|;-ȭhg=,C][+;JW@yTD$P9|@Zr  dzH=Sj'O`E"6 d szU2qCK_nR ZSJClg бZV3U irZn&5>T.q0A;IMJ}+OL<5!QffI|qw½Vآk,v8"H.Ӗ{Ve,SXudlp>KXl:nVOC̖ObJ8ԍ%+:@bTTA},<ֻIL 9w㽶d;Rr,C4Y@aٍ,H<3e,l2Ku<>e;ޙgWhj?j_BN0VԠ'&d_Z ֑" u}. Ġzi͓JEAT #b  m.qhZ1PC' 0kU^kC٢C&.j./vr 4PBG(0O|WM%n%帎f cΠ9,^"t $׈KX` |lf&Rb;q4I3јk2 D} ԟtD@9?2`eHo@ysЧHalE Ыd|24 xșPN0x;:%NRaw'aӨ;@C3dxeud@(sV JeTPS%hvLR΃  *v(CUKB;2*zV]n7Q^.خ BSPC3 oMMj#*imZf`zNOPlQ@ ѐ@k{]; O?/j|5r4yū!™89m|{2dr}˰dcCJG!4)/f! `1U+<Ib-e6,+ڗjj%G-(Kj3;PGWQF`O;.]-:ӦOcTȔγ^BjkYʕטS ؋Po i`+X1joE {N9.[Nܾw r<)9VaՂ0%FsP'惖K?s)dbLÜm^RPUjEBk۠ͅk9BELA]Y"IWm%i2"7@ ՃxuB!췓6ʪ>`qjȟ\Ζ e'~ Z=2E&>e6~ca҂WTG#xLVlf@>dm<kWj_=ԜHSz^rJ5m>"ZYxn dv#Res\CiOLc;l,F{PQ]uS׏W.jk>V}5.q *YrKOCDȭ#GnBbk,mCR2ZlRJ7i6kZQ34Sv=!y+xDy.~*K2 m^9[( q,ibLL=UJfֺQ~ϼS-'ԀF($s Qx5m``|Zsg25wqq\s6x4j7j+jzpM;Jf|㜏?*h M֤]6TyysS-fh 9|]*$T9Օ ԕj js8xm.UH)ɗ>xAڌ`SmDH8qp\>8 ~H*MU0qiaqlEi9a!(/ESrh;V-U3UBRf+#<3r6NHԬeXM& %d>rz$jWչ^S=FP{%RIYy ĔErT*x8?PVVe ? saw>()wPyh2*UgkUar/rb.hc٨)|_J(2lT)d TDZwp #6->fe.SWww<ݍ~e}ZEgUwr}7'Nُ32^[mgQ|ٱެF+ O` xV(W܉+B[qA2t8:Gs'y7ktA ]AunU|m}órHkВj@m-+cMz=~ Q1H'K$xm+^U"KWvu2De )?Ց?`GIׇ-ђr%6MWm\Oe jv\7waUǕ*ygjQ@T2-r^yΨxBsXê6}?5"\Tm>)͟[lOOۿ+t4tNiLX:>t6l`C'~QD}Ʒwqz75]\Prm@oޤ 䩫dk]mv٨kŖp*l7׎I&& t}p"y |t˰ Ђ83압H:aK~ r`b% I:AOn[ho{2A)mo[0ݞ7?e7m WX0ZT h~_ ć zvH-dʙDpXmtrAg~v\SqYɞ>>m6M{%-mHĤEwUMZ/hf?#_hhyOb!@X΋oo9"Zdf ۔4\nhbež $'|W{C~Uk [-HQjkЅZy ͐0mjN'&^[$̌㴮gwhLގ 5թyY&gH Y&wȫDIޢX&/$瀓Qa[A?^*Y$4L[je˻cϑ]PDQPs_T`[b(g۳BsKbP@xK[ZED J趸n}%Q$͍+Tz[BF/ŚXlTEThIom0y՞;MOX9ԲjȞN  :Ƴ0 vP[A&وl,׳:QAqDpm]x`{ݩ/W)N PдHR88p$YMJyIsBMiJՉMǎ?Ic6n)N [\qYPNHE 9Z^t fg T=&=86XRܝ0Q(CԦCkǶk-,N~!S/Ӕ:'+PF HU+Ht"9T2wwW?Tuy*5;%9&Ee'N2=;v6=/S7Ro1F6]&p+-AhİۘQ=rV`sgD3F,ݹ%_H݀MTAߓǧ>^zVYi@zp ,&'mu~ ^"٤Q0 svIvT昊~lCzgߺ9 -.|7P3UbIM9Vy;&>y8y^y.),5`ÉBp/7dsxVMn h+MՈ{>Ws,y$fOب5&5)LmGSۣMMmrib\TgC?,pM$8n) ٷĵ2ٯjAYuZ@NĽuD|ٺn^+P*=UTŪchCǀ`wYV Y@DfA;_7j5slVr{]/ gV@{GhDބJטfphV` ۓK7@)*=eXJ+)IsZQ?c2nevR*ݚl!HNũO6 fhEIB(?Vn!A?3|2,ҙ $tyvcetRԲa_TVWa Mi.B+I~h< ElB @DA1*l6\-Cs>UGH Vm-L@AĀIih,&PaLq-2cqhmI&яC@}`^CGpepYWB*[@`,ξA{iG{}h~JYa%CA_dK5آ{:$~LB*jp!w/k1ȧf>0۸*xh3xn(/ !R YLcOѢ).+pƁacOOliL+tWq;.q`1 ;s>LWG–|HND{^#I1$oD˥[F-ڻqgE$R{๸" 2; (PHd/cBTl&H ہI;P\ 6NS}\sCvH't.kT)W3e;nQ^O8I tTg`zgGhQ1T8$\ -\xԍ]x-=myx˶mĴtIO?LvZnI~g.:Jk@qEc~iִ1EZY@'iF_tٱO7vC& Wt^=pC.E*{q̋*d\ޭ,O(a X D< !'(Q'^.'֋c)KJ-9&Hg;x2QUUG!$ l MMF^['eV 4c#[Ņ2Yx̬Bh ݄zRL~}ħeD]B7}VwŞf!8~yoGBc '8IL-? e#ˁP< q"@l?㺳l_{ ݍQɔ)FoFV\G7Hz M _J扉8 ghBh V%}zTRYoA F% V|At~g3lCFVӠ:R|b6a7ZZ:ho([KU~܆|eli+ãIuN'm 7p dغ$_\Rd. Q2 kRhz"Kg8zWz\0<>v?RP=9l 65[/9R2YCt4i4{w'|Գ%(5h0i>R+S-,49}$DdhhwZ<D@>wup_s#Wd=T\.N[fN%\YUQ`"/࢐e$$M5ZRثpWaR]ViAUڕՅ0uz}~z׹{{&%`xmS܉kNVѵJRKղ䆬!iK];f#N8c@jya8TxM-w|Zq^o$S*N6"քoZ.y47Q6k].)_~gٲ@E*e g8Ʃkluׄg {:j,?l夷&lBz/>ƗUߵꇨ.(3 h eqNt@y<4ƞش5vg 4C1]r@ëWjN CVnUCclj3 ߮BwMAS\2Gvruu!2M,e /{r0GrfWW(eJ5W6<:_6.Gk%U^xq>V}XkfO>'_ɵ\E גEI]ϖ6gː.f]p\sMnVgc1e;#zpu)4y|8ewn¶g =VNX/{ 9\ChNXoWBBP~PP2t4 j[ֆ !lmLԾA#3xxqZQUjac]gSHϨ=ŞL"tl+<箒fȭV#KH ^ \#~7%m/u"s2.v]wGbB,Pv_c_z7~9j1t\!l"<8o4rH5}N> {ǩ炘JA^/M7gIrސʾ $:L9H`V M7B5}i=HHi4=9ndV{l#2 :~x-hBS7Q#G36lh?(*>*7!"d.]i_JE XNk$+V$kSR(Bnju,գҭ%<רw fޕ\U8 }!6*뭸 %АoVPR:Uנ08ꙢC;4{ܗx|`Ve($?DkIhD/q '<]rq:rlM'GCkنǩ.c` * tOZ2[hUCɸJz+:y5B., (ǞK}o[{8' }RΝd-+Mh$FMt nJi­jD~F)O/Z~m܁RZC-G7wi5@WD P9 KNͱev Fzsqwq3@KL<A cny#qjdvhmC`LBWgjtD~ͮ}xb5B!^R㟹Ӹp\lFϕlJ[rC̨JQ@ -,CmiS,ަUt)KILYg\+ 9b^D1p4՟ǁBux%9ϛ^O, *k[D_t]I {&'3R@naGA҅J6<TTR) y$ي*,q[c\>@MJ=t|]*MqR{nfWmԳ ݿ R86ʲ@ͻa*8>Mz4d(#7nt 2t ^뾘d?`k=6vV^`ZBU|*Dsf[#ӕRt9C4ӆljaUMC8]SӶ4QX{koQXyTtڄ=g1E.Ol,$օ&9jnHBwH @ { 伐p$?!߁CË@+͍4Ĝ%[!ȞfIlKG3o /<~%=O5ܔ-G÷}g5,əd/+gǭkAxY{q Ե$O ۑǃ@W"}H Ǡk`ݼǪ| 9h0M]ʹ>H'ɻP8ާYWh@.3|N@JА @_a{I(Chؽ3x4Q&MG`@ܚ( S/iPW$~\F2:1~fɄASΜh@0 QJ?#>4)W m~%OʑRSe. dm!zD9ɇ nGn$}*km%˙(PK_oijZP]S#=7 O0AI@bE &^Ja<0%@έ 3#9 ;Rѣa'ܝr /wZC]Lm.RE^h+uJ܌{ߑNgG2K,.gD q /󮛤sB+Be-o,]T=*˒B6hfJB!7? ”kEƶ`PO0RkA< B=6:Tqw9rrg/[0yBAtB[HjYT'T+nVj) 5f!*i8:MBa< ;ij9.;" 0^"^.YhUl3RLPuI-[ 1zX(al-F6U4S+> ӼGmơU 3W4>MNhRAc~XKNq|o'AZT.ҨM4LΧFJY\]9QZFV6˧;{~e q q8 >~> %Oj:"B˿H'y}.[&'2&Ym…> m쩑fܲ*5]ܜ64­!E]Z^ȷק^S-rNfLWRG:c51`{RQ9h;s`^{ AlA>IM ,9{W[/uXٔlZ(.-lyf[(?@Q cq՟+jJ SVƵ-Fdj DosIKEI+DR&L\6-?Dtg#Ch{]idsoZ y/ߠ\s5C6y>'vd/!;SW6<Ϛ( t&u5(HxeYفx߹;z)_B]\:N܊%Nȅ;ޢ/GCkfS;vCNcMͨ=0qJ L䬌Slڇ:QYیCӨ,As=j)cvش;zQʧx8?D<yyFżw2HsDktId\ ~@s$8ƾ|J]8|S.V>7nVLgA9MFNR>)VS ֠)ճ1]PGڜvP{ Б{5::Q̳6!yf#GM.]֎[J܁4(|9`؛wS՝JSٍnZP`PLd@MxxA3<RЦw|;x'\*Մef3Vs\: ˩'uaD[#i|:0:: @GSo+[(ՀfEyp֝l;07R1{&KA);ƿtw6O5[:"jﴽp&cZ_?<D<̣+VдwIh:׬ $o hIkP>;fBR[Y Q3)^HmID{+x1ǹVs]cKF {.pa4tIBA:n7Iiɐv8@?[{ū/F\E9ψep#նx˶4~EM\,Rt^hw6M}39;^}ZmK㲔r 8AD6< #ֆ-eq)-س"^G91X34ok?U74e,xHVx/8BVf}a[}ϵSݴfeu{O蓝C*QTNߺ)(Q-Ӆo)$ 1qE/e`{Ubfm⿈lIP`N@NGVa~dώ-5J}ߦ˒Dwa / .Jj?ٕ<;3w9ܹ8b"GhZR>873KpO,Qx:M3z\$hyH;/'Uj \kPFWqc%WRK qIdAg-]or29xwMv(R1xthQ' ={}_y xI{" [Cx`XnO aLN)_S NW;iБ )F˛&1ۯg+`i:f<,qCL?zW3'%?>1yhBK:{BGsKRȦlhZIeqӶn(BtfVwz0poYxI!_&&X'h}u6R3CWp3Æ?m?~Gna(t~~%fd:?o(.%6 C_63<  Ǘsy)y7D=2GWS3| 2~ֱxu^ܤK7)KξM` JEfH09,wNQm>Ft@Z ^2v/C0zǀcD,JAtc( ҒH:7;)Idwdu;“͖ R)O9SS c7[йlqd2F9rX1Z\%eZ=EE[v@$.Yr}"K]0{EbANI 9xf,J"+~rN"@/gHI 4ƴcIG13kUNNwTU~jg <݆m , S\ b6;Mۆ=E?2 ov=ġ>!;kRzYދ %\2E|,;ߚ*۬F6\%}C t.IwOflz1.@dcF<,[SG0`氻w1+xm6 wD.*"Ҙȥ 7G`syku?wdȭ&9fzԶNҌ7;ސ?4bqA5QZn= m.ڥf#fCobPrZM}%ih#a"u˓_õX-t(1`n=V7vEG.qjN9ZU*mٜrţ.N#ـ[DDDDHX ݬͪpzL=[cK=bMnVq9sEHDs@KcO>O7t(4?eY+e!Vs,4ѿ+k>Y{sA xj{4a:WEFކT53A3uBC*b)B~4ǻ;Z 4]Bd\ލpm8##9aא95|W)NU8ol|Vw^,qC!KYS͊3+r),`xBEж\|_6W7?~?ԫ`Ji *Ўm)4 $tONr JJMm꽹YhaDX ;3C8=u%Ni%E'QGo]ܿ%0zb]]fe\Z}bHSg[Ͱ|:F6tY Rf6|,V'j/'|ht+OQAϨ;~tSWx\0QQ{A楥(N]zi&$::Iѯ i1(lY>̻]48R504*FH}@0p*l0*EUngUgʱ* pcXƚ˙JUX &M+:V%t*uZBxKʅ!Uü]:y yW{;FUcjspHVUC)5,'P*lXc)*$X>C^U1Pfe7 ɫ톒bѯPb*vT ..)"|7>ĽtP3njʥ~qGgW*I>!4 =z_]۝[Q܆;#E%6iO:*=Q9o }i 1K̳I^VV@~ˉQZ| "PdӃnO_ g$-`:dq|[!ܥK(UF5^FUW8hxѨKVjDhl3hEi*[-[H h69GcugQqu`J5o+oz74|3vc?y -~H}^ǝ6qm[{qî{@ m c Uڵ2Įܯ[j>q]Y ſm jb.ļd?Z?i_MIm6n^#a#ѧ!-N6 o7gHh o m%70` P<6<'h)wPkb852P~^h:B eA,P|,*$#ʼny)I71Es22XGH,^]bYNGbpLK,aIJ8,n4,_>rI,//,@XAbwcKUz}0Q6vq K*Uwh ğ"B{X?Q&To>?$tζM"n^#"j0a+,yMX ^A ^q\A?Լڞ \y \A}u|(jꏍt3xXImFa+dݲxQ "P̏U()OmqfB25MZe$ f4g, U8Y a`Ճ,b. KY$x< fnisű,p@?eq/'d,bX8) fƲ \`~Ty^{Xӳ7l 9Jz]#l O|9ךVr7\YSGX iUdO{Oqm<ڒ~ƽ[^ah{6b֚QϞo#1*xm4zpRIǘe!lrs(UE*T]i1N+ o9SQʹ1Ii#e НuOTi&NFK6K "~etGLo2񽷗SAGYjvJxa@0v}s^q^{B&jWFWW=?jvu[ݓ*wsu=6!QV>{;Ezǎ$3W?\S2w,'Uԃd%5p˒ز4Vnww_9 26\m)#RxP0 @"P4JMuROD\$ ]WƖlt/cMeS\IA)O{w{aͬ:8)Ԙ_髿rr$tk};AZur RIk9\32J?,;{WrqJI{Ag@ ՠmQG(:mb(d OƟȓM;Jݔ A^'Ԥb-`C!BPM'qyn,ux["{|s]+ӈ$6eT$8:77bTJJŊ:=n%0PK:(񮆪}*zcud/.3 R^JKE. m= NqBDWe텺*ZD3~)PpEk\QAPVz4nd}q)F#ݘ^(z5tR=)H&l{ey릠h?iR_C+Rn4Z 6%mǤLoE":U܄+ܖT!fn{ǰawq%osmD}2*;kty"cUǃ::O#~SÉqΙJR]9\ric/8hkn3ɶc0K~Uӗ}ԛ)H1$Aaո{Jl1q8AJzi j[n$`,dOZMn_:kn̰*( z9$uٞr߰nj!Y֌@sAoR¬79M(*3VGBqP\ymZd71˺7E+1"2((F%BQwI6NڨRy|E"s=Z,9]8ZL~I(EUIP;]TkI ־Vn1:w-A%H'Ax;1#zB|zp F>KV'WTؓ\GVe*IV*5Z!׸FU_eÈYDX\#sIXj|Gv3j5YZ r\=h4pPũU@%8~Y$9 u=R:_[:~b}De@CIyŸ$n/>WU/BCc+I??k4^wӪؒ .jعya;v{d9VaTw'GJwasfNR;DW]c%}ۙ 1Vb\A4$o.o>򛖉ѥomqS:n[\О|ZeJ՗ 4&B0BuaD )qJ_\9GWXYBS,0GlD/E8} ظ/u2 ~ ~jyu4*Biap倈Z_g(Rӗ.h}l2,UZq[;};?h|w/DZi8&.>U]_2QcSƘ5=:5.яmcqj҉(i>-ׇ;5e~rUIwշU$*/ʳ"VFwsҥumʯJ)n^Ɋ\g#$Y)$2OUeI/D NHN Hxk|H2JF,t}E Nm'Lsq_z.v.ė}(Kq!ZwwQL4^!l_Fi׵1b\_i\} <-nP.>?Ers GYPkDG8a \q\.Y =M\/BR}M XMM>vqGmê8R469豾UF[NG| okg Ҟ)nX߽m]SRn("V M\@yk; g Oĵo-jNe#$Kv5]n6EB-7I7^iMv3'YWSHԻzzїם0)⾰VδJA9 SC{G_c:$zvqt樉?fqI\c^i]JJ*uڥ\4= *|K˻PHVh岡P pǝ!h 䦊K\8Cq ʝPp|J+:))tۀBrJDeKZ ה@): :e[78bq![usQ)3fΙ9kn4K>3z]d|K98wyoF8n|DQmi㕻[!^TÒgxsטBBK%J(( ^ HFB}"i^ y%4EB/KI[b#dS]I4c5@hrω+jWIe׸$FՕ\Rw1Ap@OQ/!E gJR:)V |V(gkŔ\%}t~13 j$}-̮g )'^ NajKB9XzNғ.=,̞ҟ9ZZ#̱ė)V*fPR04aN& s4Qqœ'f4T@aIY(]'L2)@wJo\?ծѕJg)J>L@n&硵~u؇Rdh۟Dػc1 ;vj۟Qe+wTjwpHwb޶9˅U \w#w)wU>rKxƽ:Wn%:c~֞I.iKs~53VGҵ:S=>'z9 U:ܣowߓ1~]oJf3dJdJd"d֒YGf d6Hfc֙ooZDYCoL.*5lmXcŝJ4ANjgj|׾|?WrNֿ!?A]Lw|GQzE4pS4ՏRBW^(PS8 %y&2 f#&($p)'uO2 &+] "8ɤ::2dj׍\FfW U7| kۭYݵwuuŅ Tՙ \T(;.>$%2[^+ttt&}1z$ [IY=nfMjSۦѣE鎉Yjd֦wYt.ЗieqԢ}Iƪ"?x`kTBAZ^OxDQP|:4ldH37MLoΗvU:{!m7;$[85Rώ4~c;pڈAFo|Bĝ5O= W 蘾z*UqAgkO]9>vNG[\3ILĘ.]MTΤcdIVtw%uvvq1ҵC^+H7_§NZqıT13j_s:*N.ÄJiTL׬7%6v- BjY5\7xV{\.TL:V{t@r9B3G^o}V}2'L~^}mEL"\#W*\1ukE6OT&Y'P4js S ^EsvsfׂO'Q,/P5%6Rj'Dm\Qdfz|edb-9ʨd-5d*m:ɾ"vB9!;y0zvE [ډi  O^*ާy޳ }+}]7"^s}{yynT+; ast'uԫQnmT)b%J.I *jTz%veB7Dw#k\vwqЊ]d4]oTJ{RPjL+.{m, ;|Jm @8|D*nLblIf-~7rEX?v{KP*St+]R*z'v}M}; 4+oy_y} 1]!%B>|SlkzQbGk 6=.J5K/!ҚA'mt-0%y"V(d/:û ǖ}P{>BG >Bx1Q$"2eQ( ]pntR_d!"pU$>q,l$/^Wchgu[۫$Ƹ*gIA42PQQ{))XwZb@}}&E,1H#XQ0SVĖPQP*ɩU\NVoSx"[,DnEDs8-:&4%\ױY/ѯ}keHkSgƦcqJ 2>έYSpM '( I_|D> Ag$;Y`CsH~;")Տ9M9^K0g4VdNL"޺N~?\`85& X%&*$YGӄ ӄUx"U+G Eyu(\Zd'iFU `v<,/9q8]ʃp1"۹@>F;?,gK8lEo3ww`^h.,CӂVRnUB+^¼:etE0k4}?id$g 4keĹq6M ɆU =CɮTEhG_KPZ؝\Q:[+[V4~Y;Pd&.AhBh8:k81yoE>|'nr:L,6O!fs#n)mИ482LD=cITKee{ @$L4Y s)N젮4kr9)z*4MXο:eYm)oRNO_Ҧr RU9HV(M//EěiFjD6i4|"UYh'HpI3b7hr`w[,V&pvV6rJXҭ>hrx>Vo?mV3}WsրŖ\D1QրXI$]  ?<㔘y8RՋM424 5 P4 }5έ>#Y!!4A|9\ bs HDСgh834#~C֍(&%׫k=e\}n&qq}BGi͚O _5mFD]T#V6T#jmF|K5^ Ո1IQhVT#F)G(oRT#WT#j:v+SBSPn$+G| 1m]9 И/-#~Coy)G&4L[TD/)=/\r}^_Q#JS9"n(G|j#.L9XYƈR8\Ԫ mϰ qWՎU-0Y;2hٸQhvDYfDgBeNi¯kFT 5#~\\i5ZjFT 0ՈU#"W()zM/WߪQ$w%Ոj_WKP#@ǭE)jgj;{ED6"jm"^"mJFňeW%2cxt(~]1&ň3.Sh7͈?~͈hF͈^f;~hFȯ5͈Ҍ|kF"+iFCQ(CT5#BiЌЌX&͈oBHr͈^l1fS[QZl]RsBm,o&r͈zF[s&gnLh%@_VQO͊֎X4-!8I0C"pl%ц`]Y- kZۻfbNmHMe]lSM9(-&>ӸY:Nz\{\F)|и {]l풥lj2NÝkɘ-0=Ǖ=lyΚԄC<lڅC2){Iw<}Hh+fZe^HaZ4MMk1ڦON1R¦+ ʧ '\ӏKjq2st!U ݃8I:g4ttDksܝE[ݕ sdhS3:KrJ .2uŮo(eyXC~cO2~᧰‰..~#(Nn_b8įs|tٽ"^`opw2kFH꠰S]O`ʍ8V{m5өtrncc6a?i;Mog흍t8#*_|:cd|"r{06vU7˰0ec2V-i*vQv Gw8%%-5WSuJsN$NٺF ԗHI:wrr4ܡ/É!Y}iWޅx )5OO-.Wpqצ]n]έ{)G=ɂrVv[!u/pu_0l/gCDe>CLӴNEq;av: riA ]h!O\izwʲ*@3eܖ`kҚ^j&K~k:/;g嶓F nae+K; _3Ur".=uT,𬋄M?ͤӜs_,Q)Rtx6mJDeVRqa#(0pQa{i$U&۾l#eDmݶҧ4$4ΜyiR&I:LwaS[RrIR*EFܢ)9y1[6Vl@K7 Q)w/Zjkw"tk{mC}aj\8eр )6*z<\\\%u|s)~LJl4I8W/ԗƂ5`xIIUrktNÒ OMϝk?{)BDenI|,U]5!>iזk+ 졆Uĥdm<8?SQ%Wa!k:|=Myg殫KqK%bw&>%ebұb Q\ŠR_SC~Y#I4,He\,&cf:9d` KhY<bZR @ +ّMo*g'VyWP$8(~UU]:X(ۃvNo17}NX ;N5׉UR$ggr֒u9'Sx&c\_iY*n_uIgye3O9.uzdpF@pGbZY(ꦐlȫ"S">_S ?H#BMO@G97IOQa9PMN7ؿJ ϖQ"p[+fO l_iحqь?ۥ>>ߍCjsw7渭Vէ3W,_&MكۣTaVKoEɲ]ybHP8moRV]ftm_E^JƣVî!! `.uMDNz &KL0` &԰! NNG0JJ t),xVu]|CPKp@Cz &O0`` $A%Q:k` A<; $x5=DQ4}5RcGM,Aǯ;tY|a$SQ?@<4-"rΦ &6>d,ҙ&x&XGcbCDLo03P^\c}p0,c,Z1c0P*&d e#w%BrE$=O| ']Hs8f}jPYX(-+/58x8y,t2(=;e*16O#l-6NPIsW{EOGM[MOMGpc/S$#$z ,%% \dLMkY`Y<"*wR}[)Bm_h/Ci$EEFZsDfX̷3r|a|>EH i >"Kɰ٭" am)ni|2.ے C]13lxpv+=fjqf68*D~yE -5#.yy 6ڵر>5]v=ކ>}00tЍao24|G5:rql-Lcb&'ܚ4ir)Ӧ͘y۬s˘ Ӓ0;'wQۭE6˖;W,f1V[`xm񆕸BeR @X؈AVgttdNBadJV|&'OFO%N!\n0ф,; C Bj2[HsM-CHDYA@E'` ABSZ>/ݡCj/Z~h93C`+i"}C\WHyrC'^P)\;B.teA (7Dx ZN7 PJ2Y Qz3Ւ8sdoXŌ8A:[͞Χ6ʡ.PWN=LZd^%2aW׷ūc(iJX=>r RC[wEK:=t8-Lc 5]|T (০ިYKWng7w.W(j .V1@-67w.Re Go9/b}Pnc=(K7ns>6beSd3ztFJ:)#ZU~5/s坡QB}Ax-͸U?WB<:[,m O].p/y%@n=rSH9"AN*U,8D.)jߋM"D6X "3MdBL;d /&v=db~zL&F7/6X2+ϙ(21v,%C&v#_Md&a4_Ж*d*bX䚏ɆLRCcc+}i-~oQyfO#NnAs1+4Byydǿʔ3 l3"A@:6*<<-9 Հ*cyalY2zt0 Oמlr%//LpU Oo_jECqE""VeMfMQy 1R  ( Ȑ%n9MUgn._ؖff3ȖI95@Z]aLoe־@ڄw aE!,,..g}Ӯ p8<(ZMSSbS6{~?c_Zd>0a3QT峩BT4(gqa%]dz3slm7)`4c1ԗli=oljb o0]?C]ʍWzeaaXxtƍr>/[OFarLWimWGZOTv^KoelWב{ez:l]J,+1gLgO~Ħܿe9Esz{s+efb[j ch֑ #/P5hXb=G.+3(\k3LB#ll7(2߾pŚlQa8 r{+ꈹC*˥:~Ogђ̔œ;wWi& NMϧAj&@yf"df)W’ v%3>&z2v'TlčIflu9 T.yh6ػiD{`3ڋ7xjdn*Bmx^6-x}5L(~iTXA ʳ.c)yK!71& T aQ;r,Z,CM29 B:\.!vS<`r#b@&WH.**,P>EݣH8qQe$xfEće ^DLfB(geȞL  vYvɈ 3O9l+5Ú)MK}2'gɵӴ,i4!j;ȵ`zw3׈+FtyX|k\?.~XaT^ULcL 9({uN1+~U+)nrpPޣ=Y3UqOQ4%JybWl#ǞDybVQg36O,2>Am>ߎLٿmxuPY!>ZfV/_Gq~+lzִD[(|զ m$lsUV('O<ك|RzrV(lSrtQK?{> [)d~&K`"K0`8A8A( 4ԙ)qcG>&8H`/.J ^%BJ%6~OayyI`k2d8q"KKKc999nZRB%d< {7Xee%O٥KQ\J{2KtcI`ҥwމ|=ywt)ޥn9;ku(2߭/=k@F:GyoqD#)FCaz~ezW_~9wGU翢sn\q9KSgSa'Oy!m^vğ _wޑSex;8aQ?F⿞NN>}GVL_pdη΁;fMOg|ӎӑ~1 .c+{A9U]0 rBD9]yũ,,,(EM23g9s氕… Ynn.[x1ZB~Xmc^YidfvQ =b5VaU^5m{Vvp";9q8gc?l|٭G9gEӿl-8SZ9Naz='`O=_|mݺUȲ~~>Z}]o>C?=z}#O}ׂ/jjjXط9eW "1buo:PcD aQ|ŧv *OYWߗS(HgRPG)(~%?(mFQg)N_Ro)~ ?My:7B4~u4jjuf0ƿa/1~+~Wߗf-?SZ99_CU#+>kԔ iŧ?4kϦwP(kcKfQCc0j#ZxVQ7K{?W|I)|⯣)+;C) (I_?RRȡvQ _S 9iguS8;w;g8;gqO)MşJP%?DR?F^uJ tS>Lo3(-G7)&f|h%?o=ccbƍM)t!'SS'o'Kllz 8Ѡ'$ŘQq#@}(I  % Ʉp}uC)c7)q 齺t& NE#rLB]t!} d'n]t5J?&ڥ׭ j7">.:iRB9!|uLDOߣYtcI IEbIInM A7%29Zjc@)?0cq9!I!rP˟Of F tB<#MC͔$aBOO?S9!6JyBoAD {}/|\zRzRY2Icj5')(XϊO|zРvM8(&%#Fj5"&nj#vM`M(b0SΝ&$31松uLrF›GE{C#ƛGi>M|,›}ɸ4csŭ@c6xu<7uT1Yi{<VcfZcثŇWQ{iLAr.SR ȼ#<{1qFyf1VxWx7cT>Ƌ4Vصk7_o8qnv)әbl?/ D.x١82::jPG:{{u毲a|;ac/zŧ19Sg~0IM?ϢS)ce7sg8"z!>u=:{zA:@|ֽohԑ{7p {h0ֳC{ڙt}>`qNJq]өcnAk/p^C^t04wM@ߡxzCtڷkFO}{/EEXϮ b(B z҃o}_"m-k <6\ׇ<pE9{5 \;b+F޽{P8N9]v$YNb*)$Ρ*^ex+GO~ӧO?~O}7?OU]]i8vK{qi4cUh Vo)?5:k ЏLUUUUǏ`r=a+uLj\P]Z-<v @~o;jÑƨQ?K{7x~_xLI#p?Ix̙3 w(M_~?o|_Q^輗aVi<<U *NT*]@8{߃uuZǾaΝѣGE|8MPÇm>`vsåKCȽԆo-;wS7$zSs36G}۷Op߻wh+Gv~C;A~rqr>|CĜ|{?wϝ;LmoBBBF~KԇQuaG`G/o?S~¹#΍8D.o$y79_wG $=UPBN/i_r>1 T#f!S5ruOW}}=xymDDD_R@p-|[2Go4gM&o\aǜB!F9yrZS-Ds+|P@.TOלO"'|*ud©- yߎ? A 5:mrI=Am4|y<`&^' myNL3 *tV'q~Sw&o/0 $nr>8I3=όU>=C& .ޖ4ImOv}IIK:tG_?t,d-EЀgN 3~uwOrW>ɟ_>?4?I44PޠW$akOmmChs**-A[!'?G4p@Οz)~l6vZѮ !w0j c!G1|i;oxڳ:xHi-o:To馑YYYn|I>yd+**>4/@?ҁ9 h</D\g9%Mc%2eI@W_cǎu&%%oy[@m_l6~뭷1»+WԑWj}>9ס.ЦE{zn϶h=q#W<=Cby+mFޯ_?>h Nck @РBKZ)5m.3Q,1??"ow!>L}> /--=azo6'ʝ敂@n%-X@? G#1DDDaaWӟ.ϴ4h* 7x#_tڎJ/0FZws̟o\C/m\jh ;3;4y/b_'Lh-dɟCBBF`{oKXošn7&&L&>dQGt[jPM uoNv/Dڑ#G2,E{~w (R4dddD[7oQocl XmmB(`v풘'jG\/[Nc * @2V뉐(S_~o}weM$lC}䝄Nr=aOq`7,K,^XVj|vv: C#]9ы~Wo^aon Gh\ؿ{K}:% СC~@֡?ek~Xچ[]Ǹ g|}}={c͕O AoAvw>;2 /+ѢyP7pC=PgEoPSG\u.u:sB ^q{g4|}'sN=A]E=2rG.^woYu Gh Q]_jM7?D/eҥ,_tq&`W15 S"}|KX1ljW1Ssb+&M v w<X}ε/_TZ `S`Xx?d>acݘ"/8_ qذo 7Ws>C?Ir%@kO??Q4t9&y[Crɥ4>ƶ4a}iqz ;BϨ~|g8KE2|=]k+cKgI&&7S|ow.|_8bQ[ooիWgw}_{WE9dW|oqCTX>&h,$$$L@A wB@]*\. "OYKF50DoOӓ_ouU: #:lt5|Y) Q?z/9m;cR(-xO#EA _=iVکK..*'h?~C9 Y8"]1'rY#Ǣi(GC9߿'PI~nz< ?|`)"|0rA88= ~ ? ;Aǻgˆ'r">WǏVv1X0&c Q'+/(U1|bh>cN_cz5~cj8h)SmqFކ*L."fxHbm ï4hPѰac& ^}?c1"/ Ɏ/=/ qzձ0(_]Dn0rd'&^_)jZ+AK.5=`Hp&[Ik&ǥ+W*M?oz# D.#G@/>ކD?x㍉aBǍ9{ 8{l2ұcGѷ C| K\r%ltm&ψ#>as-t]`̐ \9^T3Lmoz+>'{TZZ*tyEhN޳gς_ضh퐮R|+VDO.rЍ9l[v ^>8d/%0֮]mɁB@aljhkW+˖sMj\-+Q}_neI~#~o̙͙3+Q'ϟ܂ .;K.=Iu/^X|OԚ;wnY6b<q&?͛7#=q,1u i΃ɿzXT6ׂL Se=&&"X F[ &3Gc_ I&߱sȤo?"~EXEXi X+brv_,|3M=8b/~wZw‡O~Co ~ќ@?lP0g=z5"X:m1GƯk׮mY3$|w;mD]N*ATwn~yy# 09l)ʊ^ء= ]>XvIzc7DV>^>YWoܸQj|m\3ly<`9I v!N@d=~X 6$܋8{˖-݋2ĆtH5c3GpMq#!Ց՞[ l,kIX+`V7_X{$Q턕jǮL]2AVG[^&g,AeC?F!xpc[UO^IeRil"\W\#K%i!GJ%R&]?z]%M"_o2 R),>Ϋ~d6}[v~KUW:W",!LcUCСL\_$5eV+Hw))!)zS$at%DՓ[|Ec;Z-}>{QtՏz?:5/E$T_%8 IxWQXx?jUpNaVEai";Sn]]Z.-k]\hg P&fsJEnSM^V?,ڴ}tg8'i~٠MiNJN9s~$u$%g@NABwf)m??1s3 9M=27_h[m/+o{o6ܱ}F}th^_N%Di$*uhw9t:ފ?;SOzo?ԟPx):Z~X%o?O+|9_ϷDoo\ ܹ+r-CW4n~!H__Wk fn'9зX7x ~m,7[ȲIrɓT%]*JmvNjIjϨbuA}WݣQ:?fizv> };z>A_e]hc9Alg2'Ir0o2gW? .ֆ,̆ {gg-v';eNjsй&O=]'$]|?MD.{S_Fy(􄞧76Zso# fam${,wn Cేn{=鱔e~__gKHupSWެ>fTvsފqxלng!Obm^M b|ov\ogtrrF5,m6yzZ~oSV`˓+Ed6WBJ*PT);)!TDLwzHZsUhE/juI:` 5$u\WnN^A+&gX KeYz^,V>Fύc1El)bul=Ķ kzaG;Kn-nhbn7 #NSvݍdg%v=}=Ү {]׹i8N7sʜC+y^[hL7,{$z /y!poWUokZVk嗔PKfXzN>pip/_vendor/distlib/t64-arm.exe |TW?~Ly֙h'IHjknB_풤խKU'PZ3_j5ZZmm%-PkUh݄ L0sνPoao<9ya&ƘhgSiΟNc_=+˼ZoF׽}ʵӟ&ךiWç]7Qgyg}: 7ȯ.\p]w;µʿ=ƯucR nXrw73vO(i9YT-w%/M{$ŮeDşյ dvYn-qM5$H3P ^G>|/ /^X3HH4"Z1ULM7؋i2 jF5~y쁟L,_|n1~oU kgC/6v]ߑK넉R~zygk~<1)xa7h=` -N nhysu&w&YQ<[o]oSĤf&ڃcj;:zkXZMsK]Ôb={VR\K*|jj\H4ڲ-Dm3uu6<ɫE\݃_Gk늡Y}2?y'<&ٓkR'qO~bɵF\D~v]1Ap0wk7wӽu/\O}_[wny;G&oMܼ4vx-~.WR<s1c.Q{Kּ, DӻF&DyLBymtG;GNsF{p%z=zMa1|>>2zcF~}}v6;vue|PXnUp" &?6Or<3;h4'X;aQdx4sF-% XVٟ y|\C~d7A~7?Lw98mƺD aO:nj3Nng4@bL{Xd"y{#<''[1ooEw*l饏t?M;'PN6+E]v?~aj%Y֔(Vk+/{3fJOwլ\GZJqqAmLQy,\%Vg7C>CXzBJEl݆w%[Jz5SFNB޻Ψ{:oТ"Mݱu4s9{WYU!_~[{< h7wh-Ms[ ސj_Ҽ5%k9c{{.df+O#ɝ3<EuԍkSz ]1!Mn)HgMo:7~ҙ=>S[ipL\8)?ܟ]c I1>>KAae#&q|'k{`y9[ܟs:ܷ49tL'ޫuwD "kW/`e͌?5o3Y$5?,(I /3yeGgi ʼFD?^ߛ^޿^mםO Mhۣ&8>T^$)#p7}c3e s_Dr~II/VNx9','-rkMT w?ם+Qvs] O(ˁw-KZ1VtW %z~T^ZK`o٭v8 *I߭pc;,gP ʋ[ءl⫎Ng8ڋQ+דt5Bv_%W-3aG 5B#s, ncǫ7yg\cbEt[lEYoPPeC{[Dy(/KF޺AN5!?KHD an;#V9-ȇ-l{Et{vmUIjkSFUT0FxNwewrZ(q*Է$d|ɣ>\>Ï}v+ `V`.wF}:Oi&l׎ب?r6lv4>' $3L.E6x=%,>1݌w|)]5E Ļf'ծc :ϣTNܻ #{Hx~xn㣸_}r.;L_F`e~4F/3F&q}30}Ιvv*fvT[z]C)m!-,>7aIu<;dHx' 6vrvYwv']64G5(|Qݽ ZAd0o?4ֈvtX2M#/ 3=-..o >|t&7ާ7hʙjnyq3xS۾\ .dcSyl$=.?KpUBV^޳8 ֬@]oBv"vOU#wylid7jY.7|O`y3!z^űD9 <-ف0 =[ t>(gό%\"<$mjiɹ7/_!5y+fAFF i7=~HHjW/p|mh[&}<h2+U":}#5RC~? -My*M+kܓ@M(_2 Nza uC/*>Dm"=b`5lLoGޅGk<x\i3 ve62j{w#m'~YhwўDٓhWrnF0*bqJ:ΏXz~~>^/iurY!lDĻB=⯸=L1`5+r#bZy)d^d-KN_utKv^tRK=( <CHbN /M}G ].{Hu-?+ڒ<})_yS5r<}!؀5(^?c<6bJ{vxv-WKˢ?i80oxX&o᫾Qi^v.JW((M+Nl-o+ kUJg嘵/H ܚ%e) b}k%15CHezS)0^ gV~?eʼjί9DsR?!>2&_JXFWfĨ|8_SiTO+mm,fe0-Wt@wЏPUk5^#@,vjسa=䯮3H*#"XY ]6)V;ߑʮp2B>gUn./ypU [%y!rdxHu%_rbzNC̚$v*Ж|g4Z*XgɅt_٬ EB|]p+]y{ށ./w賭*Kq λ'R#GRHt/*Yǎ pQ7]*o>x<%_@R^yve>ꥥif1ڛ! S)Y_P$ e/*?a;DZNOw^رEZRJE qpv?XS.K ~Ko踐ߤE-72?5B~=*/h֔b>ԏ8=Ё~A|9{r<(3nrXV7 >өHzoL)g[ HO먻=Vws|H]IS5#)')VJ^\>,?bC:^wO+FgXڎ<8&8P[T/Fk|dc(AVW9;\Ee6-&U=uxuj2mt5ʦo7P= ԅKܒɦթOe=hޠ2h"k|Pm[ ԩRP4!H;Կ\B)pj4KW=u*ЎJܣvd+,]֡\-:;x&)w`2>GhL*ѧ=;jfwɢ6;KK+s+ƻ%VۯV)H:ee}É/I ^ٖo6qOjxȂx}^G/w!j3{.2ڨOWWLcdmxWEunď,|'dրT?E4 8uIsb4Z+|]U#秋dD0; q;1|DB>36\CN#d+W3{@{ߐKV(&=҇  S9[H ZCdLO=Qa*}D?MQu<ګV_G2K3f +)~w=|n-'SF3#nKv <\O׋vH=~IԖ{z^uS㏚YO7hitԗJg( /H'_V X >F(:~>O n> qq>I> |=q vb/t\(n.>kHd^ĸ^E'x3wfҍz kvBT6GNj/xQf#|6s<5AlxaUⱾ]\v:nzx)bgʤ?w~R yFHxfPlNs=>MKбŐׁ|ǒSyu͟>xѐ?_6I3X;JAC87|b'l5L2>Lzd#qB)9`-5KoZ?:;̛ _7;$AUfaϯ]m~4ji)Ńd>V)t-}jMn㦷~t0Me/Wr | 4{qˡ~F&|ͱRryi>\$~/C惠L xP ϶ v -35ç!{yϬӈ!]lt]Upsd4>xϗK1\IJh~;"4˲x(QSu=SIǛLi 4nA?J"'}rfB:/f$Ps*]2g}M KgP-IiS")zS_pO*Y]kv~쁟_Xk͜w6]#pn@Ym BOF#;D>?L+{%?SxƪZfw ~߿y#cmgʛF L֑$v,#JςG!*:O'F3wFڅ֓ک͒E; vv* d:*-xWSWCJVhrF~oC(gϵX{G4Y <63&yy06@r6˴={ tX YJ`s_$q7[wo}Vk>i4<P0-Ya_?xhZXh~3wd[7oQ"[lf1>,W ZAdFkvsF}_6vUC>y.*f(s2gV#?aeYq-pLؼ9,'?d€yFw,KTdI F\/gSsK?H}諌ǙQ_9Ջhz 7_x٦@G+ghtgKGK'ݢ0ԆZ?-z[U֍sW}W?hҐg AgyԏCGqXo7#[}j@fr6 l^~.: nS%|Bfk>/oB:IsQ|8\%kr"_"l0\޶OXn.SEx0p k g0YB=7~qzCC|bY~Kx'f@&=HڨME;y <˓HH?'N4#9D\c;hQ<<'7t+~+裤Ți'bWحy'c߼1p ]m@:ԟb`?a}_ݡgkc;bƙOgJ0լ=/$GfFcfn1/ Z:|{ty?2[Ӟ^F6h&! C[-`/Vw]a*o Z[mbƗY`)Ў{,:>.=ѯzf'`%6Y>BqW3b޾5R;:i!A,BhhQ/? {;9"^򛜱Ǐ11ɞZX"<?{bt]\.D!Y,=|h+&_(-:E8٘ ޓyҐ֋?C<.!JmdÁ^櫦:u2|ĘqdKqz֖IFNzqsy԰%ehd`Dvt.k\)cy#Cs&Ʊ\|Xr$: _0<&sbXW__5N ;6/'UBwl|.]BGX',U|bj0Squ0DVZ ]$ruC\LD&1LJ zp98kp~&q11Ze/ ӈ)f~[9K5Y%dY͗Qñ.F?gވ#7mM}'zT293Jֲa+Lv BC#4m8jF׳p`htyh$5E\#F@9\9{>c~<^G!'hGF3+1o9h3K#&퀿zLI*}%57bߡj)I}'WMWeTM4ׂfFl1W:|]huq&C?Ҽ8i/wo!^bޕͿIŠs˟''TNdN5ߋl >SY:|f9v#xtk@[I}N|^FM#mY<}VxNsTxyxI?^ k)}utf5֯JNΡ9gu4n m* 8:-/auVS^WzuR~WVD4'*{g̔yl~)%y%WoXUJ W~>r`f՗Y&ǽXWO:+n2MV\ Pu^4gd]i;}ۻc.#G5zi|Y 4+pqKo IڷUrtN蜊8ީ;p׀Z?;4} ߆kFo4B)qބcu2F2xo\;5xoO@w[]{" ,.Cx 0,|Zjx>cŻQi *}X7q`ai ļ q묘] O|+C[ײ Yj$>jֲ|^Ƌ١TNs!tRBPw*/)/.^k^J[@S<5 b|̈́?4"(__ e濘&/b*sZю7Q;nc|}6f|3[A45!bI7_x_Fאχ<|~ }>{41R^Y >o,4{%{!53|'#WD\IîH|u{ﻉ% eVָ{zıhfkYyp92lCR6n 5QfmaxC,uީhRS|[ٰۜi EE}vUBaEsb㿿+bGc_́iBR ͲT\-i1kh2(돈uPujddG#ZW в ,KISuxJW-iX4@H,<7;FOit~`ˊc\VJ eūɊBR;KL׻Q./^\Eph2֣5~,=@eLB| YWLMNfr"d)MFdߚ,# FV޿t6{41VsG^zm(};B~6&ݩm?X >l&j/z>j!?6vm \~RmM ;Bf:!;~\l$;?`kuiD /''3!'qr}INV䏚TDmj2k:-yk\<{_~eԕf#\ܟ@.| 8XvȅnWdhbA~<ِu?b^ْ,m=SȩHAFZuoMCg 2b%ҙɶDJ 3?lb_lmdVK]>Gwuno"ZbgKg-1;XsbE>דxo|LSBVyS{H+~Ķ4WZv|TGIrc3tϤq\&\~EAm3c JWգ,a='ԃ-ǐ6.u\/zS6C i ?%w0M Y3쁣TJ(מ*47;?*ʫ%|oPnieATW6q!.xv*q7`i5-u֠2Eh=Y+dE70g&<"տ 4'أl$փ̿xTŪVqYm}=Ċ $a/ = q\6,5:>5UuX[<^ק&u/b!)mK2̷˗K3bhG2+74?% vM5ƿi5-L?|3/=ƿJxX *M/i<<2婉ˍ ˿)1bEZ9nτg2q݈{iM=ONbWisJ].4ד;Mk9h-4ch#@>ѾV<{!?`Tg&iqX*/mܡ5ќ|5]׌$^^Evc^H?R9),_uSm>>'V4)=bKB+.Jpo((W/Y }}÷RMAz yHj5i>Z+ $wk 8:>y|IYvT塾U~Gw[//Iw V_-.F8CLFD]YI~vp XYYGH'_tVj0d6H:d:nlt3^,@W됍Pethۅ2 +ԹO^˕&ӯM&ަ8+ tz6Mo.|$6Y7i>&n.٠wҥ.}ԻVWֆwqzW$e.k\|;s4O$O\X.KY\ot~I]RoOԥcNdv&[dNӵK2K[4]cԥMwKvI6=/$5ҍa7f6q~]TCqb+/U["DO{SkCu,NFOxf񌭇=TM ҹ뮏ِh7+?y|GOI ?+"Bhs6! cUnKmuksѝ|oRʷ[׊͖U4FԀnKE匛N@}-߫әl e 0̀ [#]=`]c Xo&%4\ٚ4W\sv8mυҼ خzj5rz:N9VQϳݐHjC[t}gfrw|Q;ג,'Aeͥx|들Rk =ZO^ dj2A{׷FFgN\/sY̞$;|9@+Sg/[L>_F>I>tZ]F>VeGܸ>K{ntD>mYb4P!N5'Kvw"ޖc%~ QN&%o7ÖT\YF zxO{ܢs)]zEoep`jDo\E{oFIX|ޖsIAhp`<nFtV[FsBs6`] _ Λc o[AOy?euR gYYJϛ֑ SZz1Zu-ںNGlU ~8QX:|t^"]7vK[=D)Vߑy)(d _-v\;UZAytbzLJOO_mPG :%A]YV2U,64.̐&/J+b*+gRB`gP$7Hz7M(: -./u[ ~4Ͱ[W[FM,L>#Fvޙ D糨\Ke_d/%xDo_hm6vA+.b(ɕ^{| AijDtu^i$x6޴Poϣ:S>^,V h)~ b>,:hg5i_ {uz6{\MWbι~i9PJ4,Wx\bXdwQ"~OEfhDA} _+w㚠D.ŹҲfh7C/mm%]YhUri?؉v)d-Ak4_Ct 1V) 6?[g hwI>x4 ʊiW={zXHUd-5Ѻ2F|FQ/Z3Lk~3]1[jb%:;~}V8$^&M sfsZ}ӹkтq?I6ϰ6` $;&p{W}Fϓװ%*>VNI.hFLԇFeJk)gW׻cue5U&MtcQfs5:W)jtjVў?iu<aA|t: !*hw,2l- 8\B$smoYJ}-jCy˝JF}h/Z_~1YBB˒Ywp#$qqݘĺk3˵L3CU _ =5B?5.k:O³48qp3Ngq=v^9Cl;#x5 >i2^Jyh^c?U}btoz=n2e8bcGace[#XG_o2t:6Y":NǤӴ}<579/.=a瞊1~Wfh%JvziTڋƕ7MqAOJ{O$%=#^s6<̋x q,"}.U5>|*[ ƚvjgVx=;9=._ Z%[]#oH Gn!Cm+lz<.HuGcB}4:p4~ rhOy!%&fGqOm>؛Sdv$Twn4 Tlar~AvkCѝe(%g[:D[:NbET&;ݰ!^MeիGԀE̬a3w<^DŽu wڛ' ˬvd;kڿ/1De-~}G?kt΅,D:_t"hdeD.Sbm/O6֢) ,@{Z:; C'K;5:7yo#czMG9tӷUM0GQcvUS쾱BJ}*ߵyN~' _4z͔ym^O9\B:[b[*OXkq=KkGE6.I:ͿO/$Ƀ0sL]-Oy| =.O'kdBIlky֮?'$L+Zmy~:e:+`=_T"z؀_PnMv?Jtg2ofr? m"EW,맳^*嬬,_ڠGioΊ|@}S iiIcUھCC3κ^^b:zL ؞tQ' Uf\ |3II0-|SԍCNf %UbD_M|g4+e_= Ab6~ڣBoK&cIs:WA; Z|*8ΒmpO y-;Qeʬ~S>l1;t+?D 4}C <>,1z8ߑߘKjQv4MrR2VK3|?}[Q֝eQ#=fg/i{Vw9;|AvTh<2$qXg{~XP.aeQ`* H~6CYy>۵{Jά9S'ς y$}&U/xZHO%K2d(/)VܕNRiϧj~#^l".}Q[Ni>~O;/4@ޯ5# nGvr/Łz{'{/d@;޳腎մv60ga}cE` {m$;ܹ}ў $JeE }Mhέ{IY!շ( 3Џʜ2(!:GĨŷ= 5vُkd>nBX({:ۦ(+AޮNڀ;RƸ/vvVؕ$O(vEl^Cá -G y1{U:Tm6R R?;`?Gk {zQN{%nJ0Oۯȋ6)04]؇MO1~}ϕ/iM%ك=2=g>h48!^ woj}S}hؔlM+ ̪Eq&#Cz(OfV /9h׺'Ʒ ~gFٕ"311c|uPIY%sř7R_Q{-fY㲶7E?g\bd0k>Sjsգ`R4L|6|E|_c|.#E#):'PXߟOQ݉~eQ+1ASO!/'!$SԧN9G_+aJB?,JQvn=c>9H_v^' N> ΌXѯe!dːhΡ,g%P=TBKl"#5D}{AOGK}a/s8v/"hGp@;Fi$#xːwFrtc$3#]{RNk H-F: :ctϣ5&Cr;P#.N2fl.ffl]^mFG*h`F勺Ë:+q~>S ~^[ S7^$ehj}0Sm9\C{>nG3ޒT 7>3{̵\9JKuTY;O"W~ yGP\oO}Q Z2ס1qx'ۅ|~:'v}4:Ho> ~({'YOtN*t>*7{3`g[(~-JGG-zFG˱ #åTMg8إ+ҡ$VD{3Q,#uSA1v✕q=CxݪxAtqM1؉$eݞC2F+Apv\])||j*IлX/ޕo)TהUb* +,zvbz9ǿ"1 |rq=άz Vn#˲ն^wk*ijsvsE*#|'[J縯"Kr@go5+Q7kqS,pqcne&&u;@0e&+8s|^SFHY :>=yJ b+Q_))v)?4I;'61q.x.оbii;wCAQ?y>ވX Os-IƱG:o[1Cl!<|F]yZӢU=?W@t=88==~y ;<i׫1=jM*Ƶb]!?hFc_ʹ9>]שN)yiT0P+GG}ei*q,t4:ihwP^2^ZoҌ KmtVCTc-|K|Z `0?yWk4UHOrˠ$7=j W>W3lvڍK4҅ plEq&<Ğ'æPOXY>a#L#W8ˑOvER~'lZɦ.p^CO- tlИh_iԟ@]Z^|m*i$xQgl !?!}嶺ޱsesi~ Ikxd/_*1>CYMZY3@j:fx&,Q?O*YlpU Ë48M8O g: C2uFuHkJy!hQ#Ew-"g]0Ǥԑ=V%eg-o#/6ȝ}r\UF $|C/ ?ھ_(ζݜA}(%?oH8YצeߎWeR)gWN;Ek/RC5qmfn f" 5th3AVV_j ɼ7Xnoɮ r?HmC4~Im\/u /ԶӹKEf2^n<~pbkb~=rv-}3fu|Ec'uT3qH{7)qS8upW;ދwxם)}i>i7nX [^`?@-i?fCsɅ LC]"O!P!|#6}I +3yfl/6O*>x1GJ_E8(e~@QqONhKA v~ӞO8F-%:nI"ԔʿSaz=YޯzzpC)eq=&djV@s%1r~,'bA[phLgOso@toe4o`P|&`xϙ\!+Ơ?cld-CwJJ0mSۦSߌ%GB|:s#k]-?#17&&п izImrkA03[GKE{]n|2![iu]XKQcϺhq 8N$k\C R~Y?o[g4>khHuƪORx`V ~rw*G1q.?0_c5k5 };'{Uu=\@!C z{ |Kc$zΉ%*&@/ -شdVKPFk h+@I Ȁa~ϳޙdzw'{^w]b{Y?Mix|?~gg-|?g1Y5.0|d϶ܷx*hs`HAXa6-%]e]%yWk$c#Τ e$(˚hyvtCZ+K:4ob1I'.2k78zƠLjȻIar8H:}sלuogG*[8.wcyƲ<"#tdO?Y/%{iQ\(9wfj<爻Zۤ{w\-ʼZ< E׌ss-wΑvҮkv<mhwſlT;{?m9[Ў'Uxxvң}6I8io s5sH75 /ʗ׈hR7o?YhW4E\|;;Ӆp7:m ;θyR.{l*w7e_i?kIC&KE%|^WeJ}`Q7mw/H9su'<_Ohm^d J|ܚ)8hk$LֆHhc nppS>Z\9<}_޸gl,}Y̭QY#׉8i-ԃ 7W1vl>׺pbiÒ5x sA][Z#{pt&oiq;k,%qiYȳ9BMti'emXO<^” .Z&i{27q^6{S%qmfJ) Qpҹ/J%@RuVݡ\=^k{u9(~X?^y`L=o#y^!o5\ڒQ!wwF;)bq|z'6ך޽' GwQlwyxJ.ֻ:^7c(I\<'dIQ8ƉNGD҅pBXєג 6]Yk>q˅mTdCOe=%N)!=_#ĺq.Z\,\N]M]G*;_Z̸mg+(ӅzNA;Ebl桽$}V̿r@9`g4X/b=및:Qַ#Y k֚TSRg KNqCo`5GHMy2'Kyj?h5r:ʵ"9A[v.lSʶai<3auVi3^/=׭:=rU_/'+[I~Zq<;y3DVXV"x?amDp,X7潍p< xp~0OE0;"* 0 9.KRy? o?` q B噴?k:a]c9lt*{LM]aqцhCV-Oyĕ{Y͹~b ۈ3? L[Ѯio} y7;ޗsOK2er7%k{t+p_B3boPmUWa1ۜ=} uQ"mkd}.a&c3vH)S_M{2X:l=Ȝ;ۜxMlg6W*fgfwF>46DZ~v1ݧrܷ~e_KyB57%ip-FQg"y@Ѽ([k_qƔ:Ҟ81/^,ǹѲ9Ys2Wɼr; SWO 83w gn{>_#EXmv,ڟ"ڿ/&ǜ[JASv.ʵIJ=3;q7ķ*3!v8Mn%k~4?k#S޳m/i$Ew!. q㔩tyG~~3n7&miYthav<ׇj`o8*b%c\90Ll!e-)pgh?4'ϱc OK vbĈ1T:krma5׸q,&x95l1-+pP[ x+*~>MagZ1!>_xբkoSf>N:W=,v ȶҷtCygh]ux,ٞL$*E +,bMe 3! [םVK۰$,mcFG WiR>v,#|Y/3Nx]V;}c#oxW>tߒa>Ӧw!i+ۙ("Lޘb?H|_x+9v]8aRCs<610|4k"X^R953z!ڞ0Jdi+`6A־]k}s4c>vmE W &_jDFn$%oFSWO߶ 7U0ul^ۃ~BsF;S@uI4ޛhof ۧƢC]gcQw Ggx&] ײ[4,c׍W7W |ثxjd >0&1yD8>U|9O,z!o<;g˖yk:T uӗbr6oNSL쯡gJՐa@N!4u Y&O2ƞtr6¿R&/Zh7b-3v'|YFLiVډ>S o-s[f=ez}Pw.AVzcu$VK?=η Nt11n ȏii(\vMs=YPƦ"Kko ɸ 2~u\3BhF|cf&yk#Oy0RKwC:d[NʻL݉Ѷxmk6v7͋/0.2o0He"5_ 3[wVͻmh<ŌGsnRƣ4h\QG Y hg˧[]a}Ud?%9״g;ՀA^A/%\weh *vXD=c91PQ+6[uI(| kHp qeE,2*&# ;E_؎#t\K~cfK[Xyi_L:A֨FfLJ sr7)88j_t>O8&3`roo@[Ƈʘ\qGI^u}l2ڗv/.[۾,ߣ 2P?(fe4?Y|\]w ϾcǖWBmukk><rm(G@sB 譠s0εK0nsm 쥝xƿQ>VM|9b iՑ:?[Kdr}UQ߃3yKZ=}JMUs9,% NL oMo Hq]M?}]#"0>pmڟbȵGNUɻKB~CT"VX.;I]%m ˝=/#A]JۼZnsxv&ϾҘKhsTkj{_>C>ڐY’5'vlmLHSki+5d糖9 15xK;r7se%C~#KQsbG{aPnw\+U.cA[/´3;k} PV)gI /m¤p7*yc Rۍyuvď?H=Pz'Fqnk.y>!Ӭ27U:8}Ʈ^6˸Sǎڤ|_Eߏר5ԕ5h gU Ak޾mnwY}GNL&c.5ff- rtX}~o6pX1 be>҃WEzp<6 tszp\}e,}#hg'wW>zzҚ&ޏsO8M='Q~ %XdF˧>::n 3n9%[3N {2Csa9ڟm8'j z$y9 ޙ4r9p"CS<uXč!,jD>`o2E8~ALsj25s)9}3acNƜnƜv-<[5tݘPgVTHd?:]NcƜnXuʈZϫ:_gb(Gjk2Oˈ/,W7|O~u<-#y7GwE$?ӵv9D/*}~O{ gOoU"DpaϟVPpp~0|4cz ~Ůpo˘ "4xGg:*);d/v׌/@LD)7I6'z1-H'ş}rUv4;x8Q=h'eo'glaB'ͬCG=ר)a )xo+\phlq趞 ~86 `8|,ۤ_ ߌ& ̡6;!̓r-<Y10o!;CYQ+*q>MfRd%o|~w@Ɗ]džʼn]3u [[d?vc z\0t7-ңnVb wXʋ,ԣ0mlz:}3@0? ! { ( h{φƝǗ18Oe!!Gig.~4s95ȳ' xWKD%OǷ8]:$j +d` w̻x"5ݽ#AϮ!]Vcݨ,<vXzܚYE7Ҧ59Ưb˜R1/ 9mI Ȧ{%"|mf2-)D+Ildbxe1hET^,&/{Hjl:ԀK `rh'q/S\/vSOPm}i0~{̶ZZOIUaQ߸0At[ض{;܇~{?N_{Ej-/}C|kYNƃ,(F9.ctanͽ:48IXMǻ̱.A|grSK3}'ї;Yǽ\e4hn L/.>'Ϛ(yWZdP?ޏF#Gp91=c4bkxK9|:[z hS]~i1E}2msF}}VWx|`ޒo^N8N8%QU^|q%ltJDOI^GKbbh;{@Z}}XDN-GOɌ鷯p+mZ{=/|g\D,I%$ OZOMKvzDISx6Sګ=Z+CCmOq}{pm7Fǟ җ-^2YkXg`:Mi倍K˪cQkZ_Z384񛴟4%m*"/lcmDy/d!>GS~'Ny4VFg[Ͳ~FT 3|ޯMg-CsV[c;yy{sJy{l}_@k7z s{j=q@}Я2WH q Et&I[co~> ڕ5gkQ{E@J.Rg+Mi Vqe=x_cZۇd3y ϛ7 FxQoOPm긲1z8_DOWq݄ aEܩRi|yd1 / Vľ7!s54H_ h a+1W&Z,ʯb;tsʰg&w0:7 & BbL?h0cX2GquС.fs_ʅv< m39AFסBe^M7-׉w]ď0^Vͪd*TRWfzl/pRݍqL6YSx1F3Qϒo9Ƴ|IGٵLK8mص|yX.KG0mrys[3|jpNEkDNXʧKf(;:3}M/Sŏ.sWdo``7u:3hlLXSl= L f~TQ9" l}/JSm^Ea{C*е2o` 𫦮t4PlDt?*wD:2THpLo?ص3c1eZ8`g&qR /gko-~gb-עk;Pq tǵƚ\v51VO&zĚߵ1ksuLB)iJ羳ʜa߆-]< ߔ[ESn;Q%i0v0h#u9lY^6v6߱u~WX'}_ v.K2@+/}>p9κIh3 ,>4צMj}mL_ӃbN>$)oOԦA甌Vb3\_//sӕ gr]h>89|̏WDuCbtg͙}b|X:δGTŔ眳|ACBϒB_|g능/ X2Zs4|^[W~Ucxyw5'"͚q8y ؊)x_]=(ejkMhN'3LO^#5E@V9|7v`ۘS 4z?ڣ>b~2_O$3}/>ݏt72Z.{RV+Հl`@gy;A1 2֚uO ˭]iJ >3|>#~mjq'2hjuQ'd[喒`bsr! ~:_rGb ,gF{4gX\vu(;c,^g=3ˈuR@sny1+4GC;/1F;FsvxE?=wgP?.{OcaB^&c0L!euuQV>,W _JUeN3]vM┸F{06WOn]e+bD;1_c3lTہUi{j?bx>j N#Y)Z٤3(<?Ӑs^e,/.W4佦B]a*~,^` rv 6yP*s*c13cy<(4%hZg?(ǔDUݧ>|5 E)U(C'X$8 MJN?҆W2ss^F?qöq.>a؊SaS_L^vw+d_Ἓ 8-ݭrO2[涛~>3fǍGwݭqއqz-<}og x߸zM'Ż *axL/džYf&m7Dڴg3xX*''{,wSwjkCښ"\/{ (K^K'+DŽM0&XyM7gv*;CK9Tsx яR~]Q_gF}i+˥Y" Od\%t#~~1_ ui|xV 9YkV֋=Y8(멩aA_hNk/:HLubnc_Qh~ ѾMKs %_^nF9w^B:r'm]osՠ^L8p>Tt+?v`1|3x,,Ǝ8o*qM(mt9];7Ɛ|9.eBo~=5/o8']4;(!^ Ʒъ6+j'GfLApb_oG=k2hv2o#ʩ2ghTw'G;(Tu:2\D %R Ĉ4*ܶkLnNku|8O~9\d=Be7rbGs˭۸G|',D?ԘĦqokΆ ܟMWf2tXwcOd/|M5Eԃl6B|q}Qz'mwdHM1kNPKhe{XI^ϥ끓c-m|yhN/e5i}y )kgVY6b fB#kMLh:tjp-wjuÈiu]tAytY(# ݘW?F,ׁ0(kvFbk(K#å RWm@4Y/ zla$;CKԕΊZʼnEue.ݹs"=hp>h0YtZϘq <R1nF<ؿgeE~[Lco9dԓK,~wN2lkkypN{uԵW?;[H5;hf1?5C}k1]?b)x&n. g%\n--t4ŝp"jj.VN^'YTf등ahn3 }P?Z[+U{XbnߪjC}Un-Agk?N$*Hl@m颾}Lߗ Z4 4)}z[CE>pQ\ WT1#O\&2mee߼cK=q `\WEkBxz#Ƴ0b<&C~dz*GrnoҿK7ӿ^~0VO>2Xqd5a^RJݠ Ns"]fR63JxGGK<` <|;nvG˕_q㗠YXHó|O}cn`{ ӍxR{J9mvC^EŶ+}EÈc\ yN3o~zXeHXT@0&O]noP "d_qo֭QpȻ45O*Nĥx:]T= z07I< þ$÷BS+V@7lj]Pu(}GCmSRE70YUKSD!?Pz՛U,7߶nT径g~^NVUY63|Lq)QO{;}3Œq sx&||>5]֡'nUt7s?{w4^wKJf+ 2M5K".sօ62m?hysE)km? 2%RR&@}R:Q$+jda'Kv/hk}ikU=bLgPqP|Pov1v$ cqgnxYuXRXdܲC*lw!Ʋ's~uWʼnnދwҶ>ʶ~`kA^Oubh ނ6L-7k]!9?+#w]w̤ 1ϕKS`]y  v,4kADz'd^vӽ) RT sNû, ]n]%]w}r. [wsnn**>w+x7?J s"[~7߈S2NC;c>&Yk>Ϸzggh7V|~H|)`6{lGIiƽڜmV˂W˂O˂ظ2ƉBop0"S' lg8h` 5~*uq]f(юԋg4vkvyҚ1hDy"y0Ƽ\S6SFMqߍzE֯/fhhGaqoT y_:ߞ66!VʸӖзiZ=_Yn-FߗdҖ`V`c~[uo+/ioy^C*זds}xPŨQ|%OvݚCY2X\7* {AѼ_ˌD&ϝnGږwۄo=/jԽuۓv^1~Z˔63wZoga9W`]CN >c] : uO7YFg[cӃ;yׇ]:d=oG 2U,ȇR$Z'U:mkf{qG׸KHK*nci]u|oJW1־5}88zA{b /'7O'_hO|X4S yl M@NWRhq[NUoŎѱx<diS*i6凱+C!j3>?وF9:R~OM&_<*zgU-WN^igng1Gaek ڢ|3}JfcܔK,ndIoZ<{^o/Er[d|.y |n5}P8H3~H)7'=Dڹ@tL1c #WJc<ێ+yFSO`lgy( s/쒶XT[+xde/u . Ѯ~w=m)]~&ct؞k4A> 6\swC 'A /Uv06y:[ss*3QwM>fOFޗ;R]-dzo2Ƌ"q,2Ic3~2lt?T6鏹߸ז3&v+";׊8OphdDSoG 1iOon8w6e4/ ::al=}&0f u9*N_ 9y'7lI|Xyyt}usCZK rk5Jyܗ>u3y(T4;@k35:~ICzoO;aZs'[Ec2Z@^V`ς'_W_~Wm˜-41s_yjssD}Pk \)g\܅a-m q;|/o>ꠌnL-.[? "k3ZzJh;Ts} Q_s d0NޙS'lq{Jp`O D}~ei^wP/(h{fh,7Ak6 HLQ0`0Leϼz= d[Ѳ.paߴkցK'ж4(Jgh9Nzw6ZǏ3&J>Wg>conƢp>Y1g.Cr-ߔڢڛyi3.5M/VL˼ॎ-KK:|]-d>}|YvMlZJ S2N>zw!XTn`ٮ]\;%fG63'/ʩہ_\5pqЖC'a~W?2~ނAR-Z ht }FwaXkX>ߙ۞9ЉSF[&JD*.dɘeU18aCZl |W/lH3hJ>q.T }N 1_ƶ9e03fs/К:8Vg<`eU&QA`0+Ϭ#L-0K s3hzԝrih+`:cCJa`g15Kw.gLހ5Iw2 ȓiVp&Tcd/Κ[OK9Ľ" yBXVVʜ-&{e!_}X+sWcmpހ~>7,#yg]_0?t9p`gyy[.|$yb絟O#g1Gp^{aE絿^ N5^[XF/G>X{r3lz|8V ÉSϝ/yιfüE6QȶsmCs 6`.{ч;Q_֧d3[>$ªx<^a~Q+ IG.W1VbSpva=28qzl2*R~z 6owू.t͖6s_4jG.<[~26HqGm8"߽wQ>[#'q(X*zx#}AX]h!$~t3D=}6+kFzWoa\Vt(|i:E i \ Ɣ3(ƗЋ㕿5"Ճִ5**v'Sc[Ѣ;b{Mmq31Oӂ9 tyF:i N`Ę>bD?vEuJ?Εwa̹{Mk_>n{NBtw\'KfH4 K:7I4樧~ P[yUĶ;Gڦ}1>fZ[=%iCs9Z `I]ˬ-3rZX2zUפ|BՐz'k3uZ|Nkx~>H6+>I`?2rwNE;@?{%A;Dg]:6UN r:,i 㽙C|H+fQ,:02Vrj^yj ]pnAY6I-\ZVϓ҄Jyk9w-av I=q6^±Te(316 geٜf1'NJW Nx' 54tD Jj7U~TWF_2c( pKȵ/jg)=RehhP4(}7m_tHؿz\קQx ?m޻1N<׃8{eܹx_qnj7SXzeEv+ĺ4[dMvQG~ڔZ*xot ̗ \ x2}D^Ɯ/b.DQK㕎p9|]lmM"n>7c2-Y9]7{#^ŭ}sj^3Ӫk/ \~el}8yMr+Ѷ3\}عUH̹7yL횳D4gE\7`Mr8)&]W>Oڄ:یy6{QŻ Q옷U6\g[O-sQKcU62*HsϺk˹!]2ujkL?eIwqLOHtIu̍qa128}ۀUf2G,oG1^n^hi!YKc޵?>Шz3-G5Ǡ㢞%4[}u˻hd| 3<|~W(W:e;m]#쭥ZAi#)8/3107ōyDLxtmCr]\Q7ݶ!-n;ig# N]glb;ژʳ[i^~ٌV6ՁvG_c݇zk[x >kEM? ˌqVEF Bg5^`g< hY8~ƿ9U.?(}iyc~<¹*\՝^hrQ ~Lԃ]8 kCdǛs{w{5(_svaƭku/SM{޸yPzȽD<(͆o|8Gs~5A鳨HK6l@SE}EQ]d_ˠkE2nEӼCFHKl>#f$W~`EF0ncx~\,-?跊$K!@;V:4h͹ DZfsn&%6XqNw 8-.4=ۏ6<)vg7mzކttiH%@x~0o\|;GWht M[c7u߹%g͍%IqLan_ǹ%KαZMt%w%kOْ$,oݠ&y =.pjflPQ۷oM 㾶u\۶:iw݌רe-is0?8Pg!e,}UF(AwbLgv7˥7ꇧG,H "ǂ ٘W±j?9Pa#MU&Oy25~[|DYo<ηiV[.7Zr7O?K߸v'@9 i/dw彛@0XSxQpw)C:g'e~ԻvVH m]nv쉁"XpO_׆CUWZT?Imtr.ls!_IΕCE>&jquۆBU>hkBm"5$}SgKS ow]ĝU VrqʱoێQH{UK$^;>^han<瑩N|Qk:,Mi7+nťhld'B@Z3+;~6zj'hTb.L/jǦ&]A/hzĆkx5i矅ǽwMO)!|i cЋckhˤp͉yr׮maZq$V%VY"K UY?Y(ZUח!(ZQ"Sъ}=Z1uIWVLC+NzV0~$E+.aUo=ObA/b #h~h￶^-)X? xZqb~+Td79+Bcz[BU? ja|CY.7n bsrwPۇw|Q x_q@6D}!n% 5攨1'iu3ۤmLjwr({9"mzDc.=8@[xC(RacGpKK܃7jn/&K" \y0%h:CΦhΘtBP>jXAp^q{ܷ0_' /$Kʁsuڽ"[<&o\E3ò|eZ%sM' {ӵt 3!,ޘdbGn`r,D8rc/l˶jϷz_xq[=̥bɼuᰮM;:s;kJ[r8^e{q+` :j߆?xF{*}p-rXǞǕ>{MlNŲO{k䕑ewN\3wPe欀9 2wcj? dTDqK 0qEDdAF`A62MKL勴Yiia`.)ZbRRiYaϹ73O]=wyix|:JyOS[9Ȼ`[C Jٶ%~OY}8j?xaa'qsτ3 N&\|Ǚ|jm7teŨ^|KV/]ŠQ/Ӌ?Q9tMeUDõ\ npH͸fo+YWZ"ֳWw5(/N=}c df?|D`|0p et84N9' p}Qz({oks+'//>fhCؖΘlS]Úzl{V_'j2Me(+Q4~=^׉=k$ɻ)r0z=p_m?㌁^kisG>+VaN6w>bd`fBg ws vX~Hh@ ghwa\?9 }D808wF_}ݗk63|s<qt?m_ϾE; ]:/~>.}⾏{7` :] @í/io]5pO(_c~-m~/?͸3M!{}|>_.tGYa]c{=7r/uѾuu<<p9 ў!]^CK,J-Qm[-أ^LOgܯ\Idq߬_pA ;ͶwS2"w/m5(>Sg%,g{]m-,磲\q eʒL[ h!{Ѱ l( -1ߒ3hgp98_y,4]} 9:HғZ<1 aKnTE窐8'gGcTwTO}(|/>7Vb؞g6 8xځ@ mnO;*}V'}pM|oQ{N_gHB|.?^s0lKÚ +>8·!,X?6ΣW[4CQ5BC%5|9^$c[n?D1O<_60'Г,[:wD(x#EοŴ^"hh_.1ccs/ c7>viǎmԱX4V⾇/Gв#b,6Ň K2{9,ut#c9m(~7%c7>Ǣ=VwhƙB#b\*v@ sC swluÚEX=!?xLEh: ~W2>Qmz:kܡyncgʮ FMWeXQ+݈7Ti<m"NaWwyXi#+ g^f_wj};>?;w rY1W|9Ϫ{F] QÏ6}#WqTytbj?ʹ^e1<'V5>c0\^հasb>qʯ"{s߃Vk."qn:*"EܰfK>~s ]6 1s+?wPa/cy'-ðgVt~79vEюqqlM߉2zREwo=Wإ<>}V0p(qtúYPh3a c1Ƀ;u$x֜W؎{/ްn2tS<3x7EǀE-WcioxG:&50.H~<ZR&~Wh6쉘ybNϟ5{8RZM\m5c0-PЀ? [ CaS΁!PRn|:jJXsx촰_= 5YQ2sjtkaɘ w=q^l]tq]ljPߦNk ysy4=>rK]G'xbH;!hȓw>c}9l6EϚQ}9xCF3`~~|kV%R|-l⭴ ᷁aJ"LI{p+s|J\ FQ~A @;? 8$mh+|=JCzE( Jp{߂ŃJ- U1YX O!`6 wD2GRl>'J.~kW餦;ݯtGx):4),غylmOҋ|OpY7Kx/z5 hBZNެc@3!u^{R= J u}ʠΖT~leƯQ:^bgpէhUW:ND?gdž9[-A g`Cyzo/_R=[eCA\8V]VlK[xإB6)ԓOkhhU]8 ƃaL9->lTiC`s؊k٫rOpJ/C;t>>,ߴkW7tnk?6r*n^-sao\Ƨ.:>f|j@FGT9b4q)Vyq_]d?o)Q:ˣ9U3Si@kgd+p6-S 3"pߚ=}S7 {(|`L4 [Aκ@܏V?Rc ʵ)%TkIkцXZ úϠGL47.zoܛa"\V;Y֣wD|˕澉 S,*Йon)Up/k3*w3ro -{W0H͗Kz:;奷]!:r?`˹az}`![q~,k;1pb;)=iH a]Ӈ2J 0+t%q8)O\mhWv2?VO^gkpcZh=Ws< t@{Gyf^nӸ8'mEovQ e\8Ϗ|[u+[Y c@q2ቶʞ0M~OAۘ2\|F^vC_r)]qk[?y0)wwAxm@z^RlboM| }'\Σ q=gΫ2 y/-؎ph58/ Bw=wI;{(s{'rA{G+ոxc`x?Jp?p0\+px*W~??p y k_3ϩ-#=貌t&:[(ōq7{x.L{ۙi3=Myo0#e<~~;&[ Ck?<p`^}:vLtfSlS;"Eݤ]o-&~N>[ ,$î0]H"o${ ;ox&^b/v1W{8O>0seޣNn6͟ ]PJ7peaý_A{^_:F5u|1j<!/ٜ0Jl|wO{d@?^]r%oJ<ބz8eX"pN뇮yGؐOlm G>J˥=,}ƒ>[O| #߅UV˅LG?ܸm}+×4'@;]ex 5з4<6ۼ ppgV|WgYRMC:aKh fa,3}7㎳dC]cNWw?=3o_&^䫢T d>qM7}]\6^S?tؙ:a< _ugoV-m j.,xt.ryUZ3$5$G]iķB1^x ^-Z$^8^U"~ư+v t#obCXx 8 =RH$C/a6D,c1T\I|]d#| POEY ~!$ߌFƃq@(Ksd9Rw߳nji|W,~{[m-EA&, b{?ÓQ,VYmHKq53vƣt$Ù8+m|;"?ǀHweAt%)eؕWe+ 6TVyAï3 _4z;" pmym-lfO,M R[<Ą k_z v%}WSʑ6"5\;U:0ת~`;uZ>iڿ?p)/,ey_Ʀä)% {ǯ7zuu 07Sh dH0ex7q7@)KF qVθ,7_gwmM[suC>o+َ+v[cm?xqzQч}5D/m&hl ZFt;}D@w͂Mh&T3L%MD!ZM"QtAv!ڗp㉦%zMD"QD64h$QDSfOt)ljn" ωD[f j ItDDmD#:}D/H4X Ktݿ;3*x;WyFG' Z1J>J^//:h=|1GO7RZ>2} o* į%܌E?;|=p~4Gwhž4qf\ .O_ք_OipaZ`gj5E ޢIG4 : E _j0;l8^?Oח(A4iHx-Nkj5_ ܕpLp)0o"|P"VR_'IK{xIwFtN;pK'Yq=[w"M{?p/O/:宯2]W'\O8Bx:25,ф_´ƽ~qEߴ}kmnCxtݜ)8#Ӝ d0:L*vd[N3Lv+kpۤ ͕`L)ݢgr8lC%! \,9c1X܆Lsaf#>:Ɖ #3nC/0L /T>}DE~Lh 70z'`n"c<4 w'f9L$t F%`is~tfia;LKaVɖP-YpsA+^Ci,SaÐo|{˖ut5!t-FU!~S\0(MdZ s0 d>نEQ\o(RZF~AqSJt 3QhbJҒSSUqXe/!KϳZ XiN%Z"-d52gR,gh΍AhVS4 @1l3dA0Oor,W\B&w]}qڻ#f6e4{?3tbp3MLFU#E}I~0lϰY \4|v_Ж!:TL)2 yMJ Y7$@\M3Yyv^QU]X]i$Lcnr,/Nϓ~^P7 u߻P&=s <!rg˃=\筑Û]4ԕc]/ 'u۬^ϻmLbm|=k\uiu\۳l;\]N\ZS ҶG&|ڼbAsmެqZn] װFF(kz3AXiO] Y.Z~.;tkÀ]c?+4x?4xo`9O!ۙcv򙍙/:`,66ƯI X^n>wӉDSA+HI+oi3~h9';!Kyw[ '\mgtGXLW-Pޤs=Qז"mE| }0±(N2Fos=9&l$k ɺbrG4$dz?MAz9`og+{QeDk~AM#ZF"BBh ыD~>a T>ЎLw.?/~? \㲿?%*~.e@\b-!v?k]ȿͿ(`;&(w rK۹k]/\lƤE\&DczNV@Xy8?<$*4Su,뒽e9.a&xMu2bXjӽ?%- ti9usǔ䳺ikCX%T^+ Rz;_ms y%S`$ ᴌfNcscrs3d~\fW{c s- RͶ<Մ'|!`ĦT64E?,ړh@s W/JF5b˟7\/v?V*Y%K=GV|t_uO> e7=s|s /+[^}xs~ݝUz~q՞OӃ/~yN9oNj~/V?z):Ofz_-ZoԦm!:v 3tҵ[zջO~ 4xQCo6|DH)=#Ӝ5+2;'7Ϛ_0fwΝWT<w93i,t3*vOH8)irrJꔩӦzGPq˭T]w7?RA']Lv7|k] =S OhK4cŚcdE)1p |hu -Lͽ"#G OH'h6\DD. zD-'h%}D=B(Dk#zE7y'a'D#QɿD5M":h6Q"%DW-'*+v•D$zh :B̩?Q(IDӈ-!ZJtѵDˈBt;JUD=J(ӑ|:w‘DDf-"D_$A2=AS lb4s&K.dcmbr_?xA8;kw]hFhxiAx:yf AΘc&' ef+dp6Lˀ7wK^-8LSߓBBN39V-ᬛ+;cW]?S42=HCÛY:Tc "rj:6?8$.E/]F9<|ނry1/I˙ y1LT$B4/v'zÓ~"Tb@*y𿝩 )|>٠>$L],/>6ϣ;Sgu\ϩ',YrJOXεnA85vO$aiEXڭ  Gq%v %F8p6aiZ@X%,hKsX\ ¡ve w&#Air%ai\EX&,m.{ '܇0 A=! L82J8p4H´ q #K8h %FxlαxE'.!,y)IWqJ4o#YpQPI: {!I8Lv(A_''l #HoNHLpKi[. Opk> $.#܆mKn/G8Dp6?H}$%*C8LO C.R?J&O?d 'Sp?^2{p0~  Ex8ƒ O'* 4w '\oz!&zNPy]عu5B)u֟to\og|;C?j67l'8s()O[9~A'XDE CEsr唨DN&,XU|f*E2J-?8o\oz"r)WѮk;:ɥpf/(U߮5z?1BO1jzrSZ^~g>\I#!Wn\)B9n ƹ?6ʦtʙcgGG?Q-O?73=Ϝ'T^1ו#M]%tT, /#j>Ot]~Sc"j].$_|ǻ`;Q,kK~E9XD?EG"(M9%E*?>եyOv "4c'[yqnc))j~LT458%vn8Υy-w_WvJE9O,">-rI^1‘_%l$\F8#JgKW^Ax32;? \IჄeG"d\E^nOO',Wku/ :q_R?ߔӬ G5k_Ьn'Y4UIGx OXz¯f'Y '.SYnj"gOx: gCK %ICO[e~.Ea\#\)C0a*e>$E+_H}D6»>,?+A%§> \#Am> |\?R2'L'Q_X'A_7hUr:\&\W (r\ ]A\FM'ل庺\/(}Bu[i J1k i _>:\GNEsoȿ\wQ_LXIH; ,({\W_,-h;&Y݁S',?%JOđ%,G&ua>Ү@ڑzɟܰp!Cv*Ua9n#[v-0ai *[GcLr)^]L8qo2? o M\bMuiWӎp)qit'\NKS9Jv3Φ3 IX?H݄ o$]^Ok쌦 ??C8ߗ# o!ai$혪a(C%N=/%,f~% &E2?;ppa+aiW%&ai3Xbe@8 K;-iUDi-#RZG.Jem'~U'|#5z+p0פ> WH}vQq yRǚxD_wf E}x_sW\<$.vys4;?Z.v|?e=e~GߧK1_lQQ|ƕX1FNYR$m2R1OfRa;z3iUą*yuY8L tU^3}'nt7gZ|%p =~߬Hlwó\GqV.pɟf ip] 5s]9N\eQYb'KO3f7?g,6EԷXq'iR[:ڭ+Vjbͤ_hQ!bԢ#9آa>[,U_b+Gm9~GHa/r~+vpx.Dz~ug{yj$ֱ<lG HyĺU?b]YiP}8\;8.P*ǐXxe6UNmS]#Xqخ_kvb@rXr#5Vz?WMO窫NF ws5<^mdAgKݟ'WTp+O_vjQxݸ5b]*Xw# ?k [g/j01OŅnW_s94m =ҷ\Złˍwz_{uq"ձ 3zf||/ھs(7#idcKnWn0ِ&Q3Doŵ/, ]CfT€?vgךlrwm?weo1ndD$^C'y[CQ7_L^o=6_Ŕdؒr彏^z3lQ\>%9)՛?8-0hԉw wz};=7t̀&?^N=eC|[ ik8MOf} o$߃ooMWoקl 絭5?X)/|yo˟zU> d勥]0wz{SoC[~xy/;,TWO ).|NcxaUmGϹe뒓>;fbv_]۩ ّ=Fo}⇘EoD7/7u9P2~jҴխm= V¼u돍if' b-I_|J7}/&|7~Mqέqe1O{D7{T~ʏ[6twZte{^mOcתO~35pW5_ }O8CK:O&>P=eז 6gBb:: KިtXR[yGg7 n9{ꬠǍ (~r@Η;L܏j>ت?^WwB[q߼e_~}kz|ldT___iЩQvfکWy>ۓy(.d1w徃^&#÷6oׄUճj_5lKO[1+KwZł{szG_i nkȃP]s{^ ~-=6~-?KM}z#4vt#:?}-(55ORDW\kʓO%]zǽ_uďgkV<>t:얮_l?/>~[N$%M=?q/^}Cw]q1o gSmyrxΈeg-J?pBqo^Wǝ݉O˧4*sY7] UqƬC>˚tzG:. U+O{f8>g^x޴ Lw?Bν;ܾiXKi^,n~p{:ooUwYg+|8*jyN̘]J?{w!ߕl;לc7W<۫]|^㧟x}3H|Ϊ/GUcߑGY3m^ 5M [m[xicwWN̹'û׆~'׋a%9|D=wĤ~g_ٽ滎jgԲPًn> F?קyv-w<3nZ״4}x=lEɰ7YiݞݞMAQz8Ӈ)-fL,鼻3f>7y&3O;gs j^ȼZ,f^-W0VXV/f;Y֟25;'}>mVŧ]\)w(!?(~|t~:a?uX 3jJ_ _'Jɸ񉣙U^_Zx4Nyop[z_T"-I~}{M@o%/|oK?Giegrqӳ85&</3/|黇8eU|8-(ǫ}iɅq>V ~mW<#G9NrH)~+%w6Nkl;9-4;Ӳo8NG󿳘Ӛ>'rZY4ݗ<ҩYN85_h|2֌\T?/( ]5Kv=;J7ѝOۗ[7=:2%ӣW-[^a>{k>1z;Yz{n}yḫ_/?1Ԁ?]}kSqUGG:rBځoٯ,#zONߚONtg>2-'̩j-xcn|+V/xBkG6rz{feFvaAc5zţ9+zdWGGbkim+|çʋS3quj=U3y(^[nyjoB1O9zJʯFLxqË8wktn!B><<~6+yo!폊[wx Uw-`cMSl%VCКmbnl4?WST`p΢o^HaG @=B}wls s-V3Ա\{|e[)9ѯnn3[5Y/15h[4$ޙUϾ/}; w6 =5XVWK2<#a8d]ʑ4??Ѯ]y]L3 a vmJ>QO=4! E߹1772؍u}uD*sdy^:T5L&3ׄkQeJ3-Xj}]vhhM\_;Q|v[ psy~)wS׆p+ X%TLxwP.oddF!U&vaj5nn,)Oxl[҄_k^8:ZP>|@fom)ڶ ¿e#zGcN=v֤Y,ccC |qVn`Swz>AGw!>a̧@o33\Mm+?$&;Q? H{PXH7uJ.Hޅ6z1>T*7?dGPnF[eC}C_~][05jHc g,+>}o!pg~[gb<@8`4i=sζ=뮃_+*vY!e<A qelݙ!(.!.Ym42q#^Lqw'C.aʅd뤐=n&At0oϒ=TgΌ`iPVU#|lwow#;}g(>+; nyL6!h}i+,u#/_2zr/ӛH]\Oak#z򵝧>p55C!=o> NWʧ2)Z<ڑվc~Q5ݶ2Vf軻*/*lQ pϦ:qmz>MaG'&(tE#@ Qg !P7K_GxƮ\y EMYOw< ]S -O~oؕ*t $ ?=ׁ,ɰm,R>z>.ھc}qG߆ic s=xiwf\W;GZB ;M:>neM\Qۈڈ>DD!zh4A@4mDg]Lt2ۉ#z]nnD3at.чn"jz @ ѾDO4h.n"}D%ZOy!D#"J4|K>NtO~NOD$2SPH&M'j#zD};D?'z/OGDǚuP*DGƙ)8\XoʟzV{~9aˍ+;t秋Yd\i(pÅ$#{<CЌ}4ojƪ\"0~c[fYd$N,gf]Sy"iV10aU0OdcM6YŘLM0 %185kP)\HtL[bsfpE^ı6mA|[4~=W̪1xƄQu0ęaR l"iVϯ0&9qL}3ss)seG8N6*J)0gLc Ci1ItX=|ƙϠ?COўe>N>iguX,?avTLԡ <7Jx39Srɲ|*WcBR! A{1W`צd;dYzNX*+W~-k A<yo|jo z|hJ{8`P6?^v~㚹~D&%^\HNwTz['.aY!ޡV"oQ.]噄Q=l#a@R!ޢ_ ?D}fG?5Hڣ=:{ukݫ:=ahC|gບn'>M'J? u(u)}MܬpmG@wQ%~78R_ń|N|N_iz^A5KyJAj;K6V:˳*K,7V+acG~]*Г|klêIO=VAQB\)`C_?crIyEjB qڢi[TbMsђϠD7MU *hb57Ϗi7iJ9y4D 5TNᮉ1SRcMx}-қ'hinߦ S&ƣ\`[Н_{&qM$zݭ{4ױjJ.%Aw}_!__b7`1 POi+M,EAẪ&ֳ=/`qMugM4 hޚkU?29:,j"~&ДT}=5ɽ4wL}4V6Քӄ, =/P倎=7Xލqb=QO0U>귅j*pA YP~}e;`Iد߇^-@/%&ДI2ڤށab܌y U -)8I7MFhQ(pUѺ<}b4}S'_D:dM|(@ N䘮O~ha(W=zfb~9U]ch[KhY)x?HͲCKS5ϖLt\80@O^ صXks1MחJw7ev(2q>K7T"r)%Ѡ7I@u/uhS8o Mצ75gn>KkKM'y` MF q_|qDwU{l<w:m\`o*ԣ_lsJ깯m>S%W_vW_ud{\ -wLU*]lMe};|EK]xҵi\{\.\3Ϙplrs)O~~&\*'uE W/y~O͞ ׿ "j&~\7ܺ 1wyl6d>Xr~^@]Wݗ*o*ˌ@WôGT쳕uѿVWKX?r_{3EMn6_@ 솬ل5g9W<+&4d7FM[H깇SׯݺubĈ駟LǓDNNX~O?T8qVϭ)֢M(gȍ1łgL*@D1ۥ\hߝ؈?vb}bȑct2m"!ȴFY)\X$?#-GR9J64rz?T?]}m۶SNb~ nذabԨQb'&LO=})3}EeKSŪ~b",^]8VlJw_|XM^ۤx`]ߕwߗR'Ǻ@(b<F}NޝD߱S6:ڵl}WzTs)^ }}F"H\ &P\t#ޒ^~-ZSybƍmxT~ҋGj,欷ɵ :#߼v0l9{}I=GϜ9ssb^zСC{4MԷo_o'OzSÍévsۮR<nj gyܾ} 300Ћ(?D,uчO>-KJJjy߾}?WtB>v]QQ! uMGAܹz ?'|رcO,>{FG<Ŷj372y02ebdoam亼4fȼ6g# VЉ%aΝ~ 9I#m6TmPm8|2KߌL_pa.\3{-[H\"fV6gʂoRߤz@^H72NVOH>GʇJ.);voIM)fID?|}m&F6da?b'c_I9\ʀO2)IyFʘRZnM\/^./{衇ZAwi;2Pw1gS 0c);Zw@6[/=Եǘ! Ox$s+eAn|Ʃg{څiL#HxL_/"o^#3Wʗ)"ZʑǤV!e(yiЙ=>6ݞ;omwϕ臜u֭O=z]:2kv_6|-SRvvX!)s{&N{B>%xhQVߪUZqwr<0dA{ߓ%sd*xX?ѣ:=Þ铺~[o /U|XJak > ^ǃ+駟ܰ_g>>>=xh^G|{,!8qqe8\2<Ե'/M  r@W)\c.J+=I7"$M@ ǻ#-P 3yHuCyxj|.<*zߩ_381`v8277W2.2Lf',{-JXSn]` oB='/L/)~I,xX1H?tA?z yyge^^z0x!n7%=e x=$ÞIW~_a9xx<z0:PJcMߧOv%&&P5ȎW;>rӞ_wt'<z|\b CלTaÆL2}J{ ̟?__ג !mٮ=IWH?eD9l{1Yt5kV-Wj2aOZ?:^H7*BG9`=˜)k~|#mV=1J='E֭["yԠs=bbb?Q%T9tP9bC^Rp~OzÐS!B@Q Ou)ƘgWBI5_}]]_y 6%Ʉ ~U;(} 22ʐqø=Ц=C]ǞlZ8p(O^^ZrZaN[6M5JnZvA"Vچk&F 3uʨur0>1yrӿ&/>(/?ddɒWX!-Zt&MRy%@ |ki+\<#Qv䥞}t?DڭVgy7cL6xر={ cm~c͗sBmP9f=87FۢCR.\14$$DΝ;WɁ<pu2 F&Ƽs1{IH"oŘK٦Mׯs?B?uf#]\s9s߀'tĩG}e؆G+cX޿Pe=zh>\B{~뭷>QQQrȐ!Jk9&ݴglJaM; &X/}0h ,SwU)=FK?u~e|@*VyKQcXOe베@ }~o{c\оߨ?q9ioBOU,1yd[aj|~zH;]R&ʀ>5߬2<8_ %ewcl]^OW^yEkKu^s 5~/ƞKAXxvƍW_Ul0367:cgf':.0dl>byFz[ŠiOZ`_J1~/1_WX4(ޣ=9ʌ{ ܃"/m?sU]d/L"|we^蘭v}LiWOԮ_8v9dS.k|Z1)ԾxiWSwWwW_ƺOElb`kx>BǹR^J]ihu?xX?w!{~MV=S7r+\Z',z[O/Z(꥗^E;q~c}5cY)|ƿT^/;sZs92]cø5q~WշtqY:[GT>}}̉2k(ܹ8}G}_W}~rNkQaPI ǟ-+'50sMho}O)},ڸC}:O8Zjq){uۈg [Pk\:k{cuϹGý>1Q;}?{uI Ss"m{ii>=ӇXgNyRʕ+GLo*&5 O,toF~k+̙3eO/ν|~J}6;ˋ J.}m^p=`sj{E\ڸ\ &yc=˟1ҥKV^=>sMZũ}CWq]5׹ֹ@ mс}꣹w~z S۱O{*?+Lp}ȹbgzOIG򡋗ۿ1?2wgqݻc?]kB½%as%^x!^Ž!ØW 1qK6Q>Z1ܹs)66]p~ȑ;"X3Ե3BƵR cu0cs-:ȵtk>\(6}&ܾ}(/[,*%%e1禜IÄ dN#ş“O>i,>0x/sOq;xX}m׶_w uMӕo໪ƺ"ž&ȼUlF0bu5k֨bF9{m>1_5bpڞ/IcӦMh۵_( }\TTD;X*?[?i_oWL5-leeov]['\ݮtbhG}GtbsΝ8sU,+]k圜Sn`9تszsŹ}w`1bpMps61xu˳UxcMƺo^#tP~GVa쇊])rO2vgyN6Fҁ~Yj(KKXlG獫巸'it՟C=Nΐ?uzJY>\)4eT5 "۶m*V3ǡfEyП¿9?7Ib]'>#X72Ӥ/WD8fs=gs޵keL{ 7gWFFܔ5H'篙Gx+xųEN_7@Pz4 7SQ34uJtsQѓNcFS9}Jqѓ;O7}jԘM;*~rY]ۛ'GM1ʵ5Te61}fXVרV fN1y;ӣD+æ͊=!: @Dϊd2k3+uDMnoԈ[}M}kcyn*$,2*:UӼ,iaiii4[ZR=($,"*M{-~at[zR=($,"*]dxd3,~a [FR=($,"*Cdzd3-~aL[fR=($,"*Sdyd,Y~YaYY,[VR=($,"* 8aHas$9"GQrlls%/;,;2ۚmNʶgedeWdWes%/','2G^ʚcIIIα8rsJrJsrs*r*srs=sr->~A%yyeyyyyUyy"=#3ߜorܲ܊ܪ\gʳyEyy[sd~l5?!ߖowWWWsW ZP`+H,H*H.8 J J * * D{GgЫRSWTV^H2ПĴ4GZqZiZyZeZu{gWOzPzxzlzBzbzr#84<2:=3+'#(#<#6#!#1#9ÑQQQQQ,,,Ϭ̬t ϊJJJrdgfgUfUg;<^G#Hp$:<;JJG=3+';(;<;6;!;1;9ۑ]]]]] HFPJ 9NM&&&:r!rȶ:RDb!bȵ2s4 H1L\)V_yyAVAS,d8 Rȥ2q< !000QX\XZX^XYXMxD"e{=KJ{=3+'%(%<%6%!%1%9őRP@g /VJ:Rnx@/,ЉBk0^XTXRXVXQXE:̠C}n[~0{jٓ0}.*HH1XRRR"S){JQJIJYJEJUHH5ZRRR#SԤT{jQ*}W|H粤s[V$"x2xko ˍ̵rrE%86<@k%([?&^LuJK`"=  >l$e#EI,"˨'PKfX\epip/_vendor/distlib/t64.exeyxU8\%MY&"&. "R-Ae FTLf+=Ό긼oPYX*PPM,R9VwxHw]Ͻܳsn޻V `?*N?zCv^Ye rGzJJz'S硇='=>͜yE_iمˎcc_cOÿVQkf?-Z}GI%C6*!՚Oj|X*z&oZa>__(|yEY3{EO UXd,2}Yjw^|gl0vb\% *K_[9+𒧠Df%}L_)D}vF 2 #3G}ʑN9d T k F75XQW+Q]}FM 2S2seV'п@]o?rdUg4G+-#o~łQ$= s9_#j% HlGҠ0de`֜o"Ra}%IMXؐD?}cj2-lc{L')fނC b/1c,?dmݱTn`g۵? B@,P߷&~}.>y0FW@o0>0r'k_ю(w} U!=054 oȩYd  4Q:{"B1CB^EA!}6?oqcJ_'CwDgOKU],ٔ¬ qiVӒ9 qu~f~m l)<>-a~i4*ǡw#f$s-bBt2IZ{@پ&,3^,ޮ+*`:7VПĻ\hv\|eZCwѻɛKHCsp/dlPN5Ȭ򘭰WU=>^*)j}d+i52K/lR<"·~-m Uԋeei 9la$cլ7}1v\&m ZaP ;0i:rYGl@5AA*ޭs=Vƍ..`gA xX\Ӱ(&Cžq0q]*;xz ,2Ƅu"c0#Wg\&; iG[ M(VWBI,DxKji9ԥX}a }i' = 8.s?s6"ui؛V  6dSNN4?P{% +2ze۹]D7_K&yq6 Q@!*@zdqnY ޜv_؉H/4b1b>Hb" ԭV.A08E(M"u03 Hd u+Ë `Z%WKw"ɋ oTl\f=(0x[-KWIJ%E6jdocIꇑnqnpaWބ$nVVwH# tm<~ wx((f *΃Pa?ԞttC\)λ)nf" Nw+ ɴPJ;HL HǀkusVO*3*9@FBhzhjkVw;G]gG[8Z'XA ɼ"41v':zBp>=>x '&NX@ 0jg#kx rj`Acβ[rǞ`T&z?Sz.J@t3+Q/jSgR=P]m0;@Ps0hņ4 v0AʃE='0Rܿbqt7f (CWqGa5M2e^R>U{V=sNHl+Kհ(C$P=!mvD$Pf/Q> .fN62Pm % ]mBYԎM£M֮ͩGu$2 tޛ H!Zt  pSȭ@_H @*ND@zsĆ\}'kkzbo2@Vk`Xp| !jr>0 fUv#}otKa|b.jD~2E,q- Eɻqu2P?mY[5*(ރM4AV MAN>D{mv_$} j[Bo2V>cLzD$(nդ*˗qta RzV  +plm5Nd*iSOdYe+kDS[,a>X@ X%KbRNj*dX鸬߈ZxY]-; @7=!-|oC@k% WlOWn= n:u#o)VwX qU;)=$;b^mO ЋEK@YoJZ.Ɨ 5l8'IGVon#؋a^A;z|lA?q 0a;4sY ui@QuѨj<g),zj5`4"M6eV\הM J_h-v._&Yw?|=Bm ^3 |ImARs?+o'I!#ҾI<Ժx(dN [:'Yl\n|N.j܀Bt(/Dvg eFg~o63SOȃ6rX1RdJN]%V!)=}g&4@`߃3Xd47aSbAߋ,M$c^>mmrVcT &JѺ [*Z?;-uҁnomz >z駡ypUA>ż{h}r[fpۛy< %J`4Ëq)̉gBa 6 \Eڍ7@ufG3<ͥ E.# =\SD, YC ]%#I ڜ7w0*AEps}ek 7A-=lvhw{Jst+G|2/lyA!C,KXn3|܄wNxZl$>>2jW"3LD _jg2V.j&7K 7;w%p \5PAIP}Zpl ( &FNUKe ^XS]l؉I(\lR7ߌ2UHPbK'*t-(6PaW!Ʉ ;LP5> pAh(fXឹM50cqdjuąrR֌H%FDr$#誮Wsdߎk';]&s44\+U;{&?+~-t^&p s'Sv dZJ;0"(7A-Ho$[M8Do0H 2}E׋{_6ItKdXҒ(^١o2qv4,?Зy+cА|m$t7rDoڅj)*[((l0x [ٗ b٫,VOl=΃wT_I2j|IxxIh ߻>CM^_NO=A.<@En95>@.}2DKZ@^|oÁs Tܰ/ !#dQW 3iM߇qmxMDS2b/'m} / P,2e8֏Q֑F|GF ͸\!'sPH*]眈ޟ] q[ Лwl׆(r uGoP;S5(q;F*)RvܕBmE h L>j 3sHE[|uQ`N ‡Oay@oH=ﺌ#BCy-># z]A{]+wA,hvkjZ>[+}0--Bl4 {D #[2bH7̃퍚v3?bF~T.zZYuOi55|bjwB~)4}_Q*r$O @- 6w5zcGzt՞-\ p?ƅx1nr Apj:KYЬO%$HN pOzjkB(fgܺ_5E= jό[P2>L,%]/`$3se~"׈aQsAx Wb&Wf.3siE[R<-2Gm]E@X $d9'u F(i (v[臡j>DZJ7"VlEy,*ʻY`eܴ"R,x|)B'T#ܫ8DPKQmJ;}cWwД̒zᨢjm~$'WNaQSb\mSڏhظd`8K/zzeL&em5{D^uΉQ;-~28okC?y(ޗ82EREЇKue0|:pJirCA&X X55{ mŗF8{u^!Bb-GP7%pIbRv[m }-<rա[;E >F黏M^zdu($ P`(G561R#2ZHZWӒ!tF+6mx 0M9mX6 R)+Dh#dKB'hMVX i(OƹA~O xZMer ^hVc: Ґ DB uT[%A&!bZGi!l+IA ?6B]#WsSnM7YN(7\Jn3i' &C*2 g& M=( cvK@F/B1d[ZoqBڵm}=ʞ0eWދ@#+z\poF&js1t(tx}j^/ E/AګChޯR*-Uqh;Ic6#+~qflh,bDI-Ƣ%@Z4}stV9Eo&(~폙eP{c51h^hziD ḁO# Ep+C*Oq' '@|CY 2rB琲Cϵ|}T[C%x%9zg7]edyt9%Ct/@E|T2f'O=m!Ж~*2 c5_j SX9n'h]V2?~v<<Y1|.1ksP;_c i3\xQsv'fTRf:[X+cs3y<#Yxg7lMf+s : AvLf 3E?m7j9j4Vϡɑg7(Ð3AB(`k06J3B'ZC SM}<F?Ν6id6 n$|eB0>`8 p/SzwH!I$O  (ޜyC Gg:c.MfZfj;ti`$!M@Ɔy!MKF\s.>cg`J- y}2^ . }0h^UHN$G8|/Grm$-Oߵf7pY]gl|ZoN8zvqϽvbtr?n{ :FltHmss?,%E]7M[> }gŰa;ޙ=u#U6_,IK[XNyNԀC2M` "+,-","f *"SxgP|y9bGss$S% ůq"CJ 0ʈG"!g0— ƛT:(ξ~zDv MV4%xޟkqѧdJ֞vgNrWtK_ǏTNcwli}RӨWlכ!{-hAG6)Gl*։\0EHBf?Һk9fv z&4(ĺ{:ң8#QE5hTy ߺc#9G2r\\_4MQꀭYTz:*P;,OJG.S^aVbmu+M~: Y.n}7S_[2]|1ɠٳ(r!.HRĚpO[п7#@"ц8)-@t#$2'3\gtYfmoa~<]2Ed|Op4WٲNIi)e!,'k8R\BE 7*ܿsB( h;!G ʧ `]>6&4vؑPWC yE dҤaVzrމoEHkvVK\reD9G'í<8v<nq+29Z*Js!;>;k$$#ć6#>A#*4v\mVƼo+2󿦾F;hD*e2//>@|?;+ܿp!V|^PETHZ"_{#pXf0[bor7;ni9[E&mrQ\$GQ%M5g y`%FX1e?m~$O0AXֈ?qbE&:"tJbE=9C2=ŊtO0[$dX$w Ae/+XR@w +^s"I8I/Sf`Z$2vOup͹8b &a PoxAH:`|O= +Uu&W+HeEߨ}6VQ/GպXlKxXM,ˀK[ )iXtr, s O2X xTn$ſW9'`QR H\ج} F {q,G4Kql6@6}#8|*N 1r9 pb/Z>,>?9#II?e0D_\*VQe}ڇVpD~Xq,䧠Aq)Nְjd PCp$nH[mr2)wF܋0 qJҋ$Rñfԯ@ݒ@ +v!pGnҭ[c(ѱo ­JBzCZi`Sè#%P|[>( |)-~v[got 8+Vm~V6V&@TICęEv7zGˈ1`.dnzց4l4Tt 4.V[mv c F?XqʤU 3&VHM*mCPBk]7hgvaX}uyhVAD怊#ka>>T`C'Vn 1L7ڡV/AOVXcM7 F}1ϕ-CGņ@>eQsth4R} 8ux!EMDž/yUT'FW|BC)\eu@@bl+MC2!m5I8ilһ?!G̓e~Pf@éM0sI}d14H WKZ3-'Y\vwQr}} FGG` n_qªzzaMWtÜ%m?0QO2vHŀ)R,+wjg@v.V /!dZ r(9)/7f-]!cٌ$XRso 멊c2s%2ψCf` 7hUק "aʇy#<^ ZE $wI'2v$C4m0ܦ$К6A '3JnYEbHi$3X8#w`J5eC4A |$or9F,jcO 5|FlZE/EH֧ṶD@Kc>~~ } "LFmG^xrar璌Xߍ$&*zhDl)4ۚת7 O٨"9H* 4Ht8П,~鎴YB\xGFϢ;k۰T>9.ߺx aq'F3X,'H;m NR>&axoGI 6lS#$Ku.q~ D^Y{v,Rr_,H F؋8F_c Ү7r4: QQ*-kl˝^|}{wF-ΨcUAN݌į^c )$@J*-F5t+v/z<p>A|O|]>DT}{4h/Az2)&:-\SqQmf}l;KQ:z3/x|c(N\9/AW"-񱺜&H XEWQqhcq;^>~Luf{ݝm+aJS=&Cyձ# mp\u^-A'~|h`\JBcv}c"~5u`:OοΣa1w b;мubT1@bEfҋ-Lfz{a^.1G؎)Fr 2QDW5J[kwJoa7JZclJN vxGWa 8 m6¼CCH1vNWRݡ6mCۈC f`]3&ِD+g#%!vg5wj78Oˏ3̾1.IihqަPa],j9tiŊLzIש$8>DeO**K"^МT,U6_h_N"Bak7xXmB m#Lq "k|FNL]x@!q<KPA?UC8!L, R;8Ă(Z(.B~Sha*~ :R6"rmDM=f\5*͓h'; Ym(ȹПJXeuE'ѾYޤj~f5u e6_Z= Bwo4:,KgqY* Vsi,vxُK8BhI  ` [ВfXƅ%&)6 g5>4ńWMTdvYb3?35xWz|0>=oh)_y۔2C `9NLgi칉.c-6fmƕ U#p- z!d_JތDAzaLEѡvOi![8ee2)|ճ֓ښ(DY5;7ʹ;^A}d.ďt@4>!]Morb`o쐉zg)Ļ( ҧ>$ QqT_nA}y~AT *\rk&:x#bt-eN2Z^tEJ "ޣa>kvԇlЈblzor+ o*=JBEov"%H<5~oHߜΙ度JK(CՑ/BIZX xhU:gJS V,wJV!Ko\  Pm+mH>/ _kЀ \GRjb'k]KC>d:gJ`ϑ5.Ym+HZت=@/hU,hs1jFt-G3@fJZD\WC=-Kڢvd+9$.}*݃U|ԯa3ht9_c*I|nVÊ>/g$>2ߡqN:~G2f&ьz]4l=7^&B._sm|6aH=1'V~1d1}S1ZIt bt͐asJO\r0Gٕ*@+Ct|{5cEWdu$pv4(^(mu8};I tC8d>xqt#Tdb_nTa[ԙNMRtp?Ԍ |.xmșkp+P mp=Ir'[1!Qt́N_&="Vsk)7r;Mv`W4կx#{{JKnUkNKNnwDVaf$Z.s}roBWS opeӄE,_ВdcIS1MHZ|v\i}eh\#vO HEn^J|-^>81+&Mxe`\Nb3(ki%X^O.[R`V@w+6 @&Ci(9T6U;4"_7,;◊c]khh$T8;lڐǐZ  Spi>ΡYQE"ޤoa;½&ӉZ,HGnx$y1)zUQg"pMT𺅟7Rܽb (u;8+SMDŽ7= ;U)gucm!EM\lyA܄CRnÔ_x8Lwj?|[6f/N&0oE̹ ?5R8/G`}Bug`JKBT~~3sP *ɯȎ_AXc?[)6<;D8͝kTcӌj!Q|>FSKX@aDЖ>74޻XmȘ"A.:C^Kfzˏ勌%<8a= Vǭd@၍lg$}yas;i⋔:!~d|,-VPk;񑍥[Y҃yJCbA_hT y6 +BWyb0û]F0zĥ|>3h-ZIDmEpRI=t]@g8R`<VUIlԺHzW S2 e1~(J~܋_PK4v_.+PdU ]=1O]S`LqIZG1Uwp(ӌ5nqzWUّ;$ N()eA,&"DgyGK%hRk.@yDmS(f.kx3z26AzM0kShN.@'[nQPJ/9U_ mS"儯 Lst1_v2y @BĹwj!8 wA;g$4 NR'32<fw_+GR/{yH Q}DrŁZo+?cQ{bi},KpEJ*Rѵ`a VAY|;> V~8ǿ0HyKhv#:z1F=tx!P 8gJϠ_`_@ЬQ+17K-,y Mq:T8vxtYtlF .s0Ω:-qrQ=r4 T$Dagqjw&&.kx0ȭj<>x͙GCfYr2B}iw&0:ֹ!T*f{y굄 w22C/L+ Clm.oa㷉OCO E)grφ6nդpWzvrx,ݕkOoyЊW M29/*޺zz 2'i!K9#T-ʂb0825A-RtQyݙ3Y͏/ntkۚ:l,q!֣3i9]80/ oI\D^q%^.$.0 [2r8pwKnȋnO Ċ&z+VT vBmnvG ,{mK.Vo }|7EoZ`q߫zC7,p#o7]OxpX`n\3b~ XXKoFRp{^W&I=) ۣ Xh%h#5 qtUESpK6QIߕljkJ`M]X4 /d / `0G7clE Ҷ?ܴ: ؃7Yx3TO?F ~BJvW)AuPP{jKO~w#35ga hwBqȱ[`b 0kToP[A]cR x㶷m09#C.jkyĝklT*skt|cXa5.;{-2#x>䩭_VP0uZۉTkD`@H򮈢; %akO@' h8'VPƇ@Gm[av1jOrzK= xK 0MäɰlqJN24g/zJ+c5J>} ky1J \sz,-7b Wϓ`VqɶBP[o ĒBy%^lʀkKqg8ryn{8:_B?Pޅ?4Gp w B} :C- nA U?|kц液L!6"y$qjm  dlZjU|1F=)#x䨕My-2-x6Wt$){\ v& Bd3neik$G1$\J1|c1Feo͒ɹR:'iF28u4mQVi}]H kW$#ƸG:h(s}?y M5e>/炆cYGʞYh{t`!Vllo0!AE١]@(`Ԋڦ'i/wS*,F7<VjT{k͢Z֢/p:U%zֺj[|N079O=k ]z3բ8`P^YA,)Ƕzr/+n!Hm[Hqb \w4c Z&K ~ۗUr+xܜJz7?"BBȇ{~-I[yK;b^aAAi-sA= n~z)npܤK%9W?M(pYC_\3#FW7EǟZoƿk^n b+Q?( oji/< {߷0!zZ֢55ѾJm~WP vBKKsyL A= -hEbʫ?PoSP({?(M_kڧ5 #ί3Ļ@7*{i{>(A2A+HAц5nwHHU|Fw1ߐV#C=Ὣ9X _㗢il¨%j(g;Xbo1Kkt_ ي1{ǭ4Ĵ?}x hUp'F m- cFn'b7G04x,k<ؔګފrBkroHmh/q [w可2eN܌Az_.@ 0TCaU[*!2,%hz4Y£Of,@*>oFh_A>~[F>x<>{9_D'u$^閯90Mr.MFԾբ%+~CPVxtA_"h4(i%?Vf&cHX]$o|Ss/UCTf"bpvO2r) %VkΥ~ O8[bk٢NDz yxoAo-G@Ʌ\fsC_rR5{^ ?FJZҔCnlD 16 LKd|+w"&⊿\5H 4/%~;QA֊X+ vj0mYh/!kvh (\%$3_-& 3`C3;ٽ3Pz ޴%0C73ŒF w"^H +z >F+;\A-y XyT[`f8ɱ/x5!H+A? j 08娘$.(Z(Z32APiR.l}啕|enm&hhY/i{]2|7=ܙa3[7x~Ͼ}~${55[ey{||zw:ݑ?S *?ý QBCF|q CT| tJ.7mLE1Tx*Щ߫36:U*Pg20S=g3t67:.ѩ~A0?Rrڝx>QPNUl;r*6 >5wyP栿 vOq)` *f:0ϧ3M@cOz{z RUB~vٻj71t95(JPPUbs| Sei&SaB+nE:T{/FP>Jդ,T='8ɕP>5Jn&L.[Ŧ/tBZtB' JѪn*: Nf>Yj,(ЪkmB*T΁]BUe0bxh]))=퍮a=3WX*?jW#nb{wPUyMkQ&L9֕W!VAXpo5 vjaM;5 ujaHa5WBX"wr/᫢!RF{*$qW M+W5ѫқp =qWWv.jENѫ jES'<_AE(}ˊ풊;@WbajU+XμtjO),b3 I&x|*E&~hQ6Vc]I3]@ ܽ@ш}x>ZSaDb&>M_m}ϫ4G TzQ$)gmԘ=m4Ӑ\rgq\CVyRH X~p$7nМ5țWdvN>RdsMfzĬF+T/ǜp,VAk= J`X!^g7PGЎ&줥Y:}8HS"߆]j+XZ%H;G{g#*AzmӳQY Y^u JuǮ 7FFpk}qBZ_^q6naQ:_ĮȘdu ^ U'a/"W}ݯz |= 5 ޗ64aj]#мUtE>.#\I%d&_1ŧ/jD`5v(*ݟ"(PI ˳:Z]ѮJč4Hh͙4XEgRʜNȒ1yc1)1JT)AK#x::)TC!.%T~.E)Ɋj3mjDӔYQW6_E>M;]ZЎ2VZ\wHh?x76#Y:kZM6⯠j5X+}vf܏ Caq?woً$xHI |+V3MYhл05` =Og(ąɸ&} 'pSYcCTN~ޅ֔℅b FA-bO*QS?I_¬+otHǛ\a! `B"Fz{8ũbgL!&Bܠ {n{4m'DG@t  pM }#YJ=~LG5&c0O܁GPcA ; NEzj]œ%N_A:M_s'v)]cS,}ՎB٢BWUgj$?Zm+xܖP 7Lh۰1x?\9H"ȺEWwcT"RЀ/5I: ]A  sSbN"_#!s,M!|56vJDTl`* >뀻w4QstCS:6w>Ǟ˻Oai&0v#%w?D4ϔ^|\Bǫb{)lΰ85UorBU&f{N'"JF0E𭋫.D߭ ޭ 5oY)tSzc8gVYIdԎk9ք@}Yz褄_aRWp bjU!B?$/eR&Xԩ@Q5s ~}((ۤi8FI: Ӷ$9|h*מ4VM*6'uk[MB]J[yW p*ov;HЄLJ:)&^2 ċ6 ;dBXM9$ E'pfU:fW?cA  P]IRatVަ=6a_?O_z,KJh>o 3I]&#WI#}"C"Gځa5e<ݔP-NȩAw+QS=#F̻5E!"-@HKФܭU eF~oS~Z c{\o {\y`/n_?DI'izf) %2ؤzAP@(SS@ʇV#!: sER|ӎKLbyK mN-ʵuPC6f*J;&8&vEIzL·+BM+F~r\׿n ۞6NinO 9 y?ز֫szjױwH ߎIdw3\eldS_m99Ĉɸ|fw']lSqaC$Ǟ!Dt:F3uMEdUrpRM-KKoLn漱  30֦}iVJK9 '\omAocROXNՌ [:߬$f/dpxV >(5rhuco_4FǪxS¤/f!ae!h ƶş(gDlh+b`ӧ}!x#08;R|ĬÔ);P jFn50z5 :21Dq>)_|5 Fz Ti隨UIjCcGK`l&kx`è8ڒO.\c+C,=5NvJ}CkM *ꕦ~ ظaƛ\H0<2 LZ=m\4~0{$8C%f w԰umM״C$LyKѵs?&CY+m4zO+9c{ne2ät%QQc ]://07E7L`-D۹Ed=Q[]7Oq5CT6y UL2'2<-;ݰ|ܧ‹xDl 세hkoJIA M)ma Kq˰DYRZݜqP}(!el`YsPe@i^R&s 0[LFro6x^'ݞ$Kg4Vi>H5&1>bTxzט}J]tY!f iRqnz8aq+S"NDI[ew3[ ЗW=c9 t>ٳC8[9R2酄xzY>lL#>bĥm6ܜ^ %3jCN]@:`dJO9| &|(H30(m6|jq\* %qRYZvu4v{/&:떨Є^jI[9QMt(/ii,nH쩦'3lt cbU"NqLxJ.2P=p@rKYDLVj.a:3Xx&Y'sPMpJ UPuU>#lGE,j7' [vJ1;#ǂv`eѠBJuJĂ 79@| E-"EZ0üu,C_1"9s$)_(oqCus! 8A%* ֑S4:rn[WCr׋q݉ț{"'xtK<0XHUdj&QtrMeV\ρZ/wS"*vp/4q}Sr7Vj8xz'㣼܍XL0( #v+0[Nj%K8X72Bs\ϓlOl G @Zj|w@T/h:Zkisa@RȖfDsf5 0o~j\ 0Z@JSa\$s`3R\S1]>7!⽷ Jx4Gj@PRVo+o3ɨ`QN^ċߜPԧ1cvًFآﺕ(w2&ReA^Ęhy>cbdIL(Oa 1&Eɘtyc2Hz˗oaO,?~]Ao+˟3[ؾnq? f<6?6c7#oa.#+a~`<}ѥx-X8\1ʏ2Sr17!/2QsBoE>ۑ73gFr<6'OhNʫ|>[`|*[g \Oʑ_|0㋑'@,(3~ ߊoG~7D6.Q xz!! smbt1鄂N&YtAt2@-(^mK$X,F0t|N44ȀN۽T4ӉcΛLGF"3LcoN9Y:NQ#L4wKLӒn@u9!͓#r?'psB#gKȦ[vԉU:Sg@+ cE?|GpY&\tW:^]qt469'\ NϬ S)Ъ_> gJ "Zg Yà}bK/ Ie\5v`f<&yN9>Zaqja2Z>@p3@\k@ķP ?Ž:Yf-EȤ[jM(4j}xzQn,Ck>qUdiT !k2ʂ8D%Gg*W&SrEw(J/İҋAbpE``:eޡ3mzy t6K;qT{/ ,h8I ӹ㸼 [p|H!0Ej&4NG}q5$,>?}PQ,(bOrt;,h6ӅkDB+T l[FӤ!01pVf锈טa5}_~sg)vEN*uvyƵ ݛ>I B/6DL47)אg̯d_t!.Pxz4߇Ku~EmQH̺ѓU1f6ϡy fj? K$$6Jf]U-E2,`觿=p?; R~;u2e?ҷ2Q@B@7(#IM 7OLUs~Yc9ʨqb )A?c>,  Bo% nAGDZg;njL=p3(\&犞6Ї"090 HδJѻ|TԄBђKTE[a\<ž7 TZOwi c1f})3Tstt^'ko}jYJ+΁1 R>9ޖ}4Rcq䊶O1Uh+m`6Ϫ zSpNʘڄ'ɩpC }օuZPoQ;}zdb(TBBDKw< '-(ۋ#պ,cvxE_^r!(|~s5G@/mp4JM!Zad Si6a2\#\5 (_1j+)Hz ͔Hڔ[x@#(.ģR-u;7p[#8f QOa qG`3k`&&Ie"noIM1}eRvT~^_e%}W\ ~xPh1K1}P59ʬԺBF7)@l47 uV7> x Xw.)WC8ҫTNkjĀiRpw=Sk(`"ZHW bB7BFYSʓM?p]ew`$qd[*qx _0 f pt (r`J3Ï@`pْ #QaB*7P|jN Ѓ#tZ X&(0bj|r*|p)\E <0tNa0Le;!|w“S ҦQF [!\ASَ8 Bj(Lc1N EcVoЊI>dvWﬣB$B52E ֙c*KKb/^gNh[#!(Ѩ0IX0% q/Ǡ]Xz9KeV2ğm}g=wCX*$:S"yG\ xiyvxKyM F1Tח+4 i*ǀcWPC⪛6o Z!oͳa`FgGقf & qvp/e5xFmNB͊ Хu\ 7ަ-^J$Bf 'Ƞd)rNրEC!BoP׶l\U]j} eԚ&Il$͂,M lZ.t2X*A{1ҵѐ8z3J_߆8.})}iH#K칶1L_.ވ},|=G,}χVE*Q'zI(?-zL\ {30ӣLR=/ oIzJh 5{| 0q}@92>:t*x=:s<.^4$/"<ީ|Y&=RfO&Y8] X3!ޠ6iBiise;Q䬅P6ܵ?w:)Gd+9IApN(buR/D_+RK UAj蔅OT@DiЗ>H3=$5Ji+ٙ]I'&P2\9Ƶ0 q6sf$7mx5Z_?,}53똵2NB!t~*щvEy6UA |'DŽp#i΀|1DآOH( fϺA#6XF BAQ7=s1} O8~v eu,{4# yzi4o3 Aywvѽny%ai}y wM >NA|<k&j sl#N9חCA<k$V9s`A Bi=Ggt/,$ɵ2clxdgrr*> B1qʿQ]N!>ŝP"Vʕ$\Y,Mnadt#_Vϝ(¹N9\;O H>6oD ! s ϿiMHXqmٕV%C _2)?mY?]sFSm*[6 %>BL ",@h>D4 0تϔO+&%&Wl{+TzWjϜtå7;5z8&#[+?9--(8W74G}bE׭\e0ng?:ukvZc߷nSZ w_u1}/iB߷to >}R٧iArB]ήޟ먟U|CsoV25J[ TA/<>rN+ך<4]p6rc EY?[Ap=,FS#'U~&e`[fX3!bQCPclx"+-`E> ^>4!;DPhqCO*7Xh;Av#TP:D*~Tw2 <&1ye8'PPl!r 艱(FP7CJg @ηJGZe 2{zcoC>o($d{I*/YӅweT."{|TG\ĕt D%VuK: ʁ]v.hWUѽww<4+oc s46+;BVKCN ?,Vhˌ o.V g]e[ܡxj :FX"D^vA@_b3/Hj_(Eٕ ]ESN[օ.dE|)r_8 g8%i49RNQN_pc4QNBNrzshN9FF9t 7s Nt;93qk"rz3pZ郜nt;9釜~i38 Q8ӹ N7qmINʩ5s*pz8Ӈ9}x9z^;9=޼ߖFHx&'ю?E_|m?MșHq( _P igߔhM#d:MzXI4r3D2r eQq`jGX?Bc sJNg&6 Y ;7B `[3UwP;ti"N"0Lyo2Htdٶt3lffUB~W_G7d^tdgR;8tU_F <'" C;hNi||~A!=azGٯl2tXkGD_72f1ccǍ0'MN2ƛi3Yg̙;/5m[nmw,\mYtYB"ѹbwݽf$Б*OLqfٰt,eA;@ ld D>wdf9huP{ ugyQMQ,Pftcp6Ȟ\hbIhcXvme ѶCʦz9n.LZl@74+ M%u9Q5\c0vXhRnS,e4d5FӴa^bmDC_*JB;NeN8>AhLㄭgMg.p!R(j6/=(KZRdWz˞wx~E:+T^> B{X1bP_W)&?8DIKx1+Oտ\ISzzUxfMtg%: @?Ij7"꫍1%Rqd˻B]ͱU\AIo/O+;Qe~7y+Gkn#u?"?Cʦ!zy]H$o2Qt__c6b.jz#c۫>uQ>mDz:`8Z s)|8e-j=rU)\=:7qu/6ruon aHsu?6puTz~S_[z^ SzWz\g\}?Ց\pukS'Ӻo`Y̧}%3@IQZÙgUnc!S<m. JJFc(IZ>ηCe1u3?XA9'>ڤ$?MТ!>%=@Gn]g"̀d}t`N"#n9?3tvu6'@\鯬6J4W?SsWKwv\Gٿ_K?ß쪓^}}H+.TTn6Vw~-O?sx/W^?7vڽgoλ5x`mݡ9z>ON~z/o|s/\tMh_wo_ D~pW}jj|{,q_ԛ:~djeA1`PbpE`XWs3s3|Epݝq$콆w RSg<=S7B!,ʵ9&QKmPhllYN1sqsV 4ρ3d2`1:dlCp9` {C&Hyņ,pehȡqypXWDѼ&^dy2TِHzMjc^{WGՋTG]a+Lu^>Gwe|CnfAv)[bDCVaPckC: ;EyEj;0;H\(^?a={1[GzgH l!g /uX-?="#<ݠ]|r;~BARH vDT2q= $}C ` t7j|p1c >PK 5A)ӄ z>>gcpC`a0D= ,77A[(BOT-6Џ YRBjb4ԡ1j}Hx~czAȠ ;gu=ǹO?ڵD?!dz|Er>EWO`ܠ=t~#U#'d|@'؅||mVB7RJdCyLI<Ы:4EH""" "R}{X? A`eBHt>W,S o; {GUfMI1lZÇ ױ<9 3~c{k75;5^'hP.v0*j^?tq2r0a''^+ԫ cgx C?ۄ0xOWPe`:)Up;6VxYꭅ"w!n-^Zm/-5!z0(ECe׳ l:<4-#d8uee6IKD }>daRm! 4-՚k/Wm|7(] d3ư}u=8#(6d8 $h{@4`|fwzwlWxh['" 46&ADBDB~Ad`}oʺA͞P7CnCMځ~  @ Z/t^l'd|)D H_7G6ieM / >/~CtWDOA{ wП @I^`eJz'|0YߠVm> D .NzkA9CzUiz!54o 5;w* | ߛW{7ӧ'}O<d ~vmoOl"';\ەL@W y#}˾$_z>& ˷v)u>WwϏW}v7ⵞ`6^5{560 Li'Ad> 0w~} !~4f|АH(_SdGu؏`3x.Kfp0,١=`OEшG7qmĸ "CEfhvf,P@ !Z6"vrg kYFZaٔ 3$F;φ )bTޫ3 \$M]%d-r 5d  ۘU1-)>z<'ٚ cQO,̶Olgmz^h9e|b޴բ-pA^-17A?piGg FI- }2*%ڇb'-!1G/`06EDёl9mTp Ds*t^' lܳYIsoNƍOD0sm WЌge- IyYdjz1-f2O.0XO|[}Pބ-$@9yb^Vf< -_-sS|M+`+Ilvn}|-Efb%6GVAA!e+`Գ.sڧ; hD Ҹ(&vA6U"9)µݾqQDUQ;L>}R)zd!C̲iMCnL/B/36r橪[PEKzJwj.X >b=lͫk<)CT,O2ȷZ;/fd"*U~߹7d#K4$23sӗ€܆@6Cj /%UŒA?Nۋe<]֐EmyjSD[}Ak-YȤu6[TJ5/5$rv(%gQ.z6͙7@;/m^y2?ӑ H&3ɞrzg_cs& ı1X@3uT;J~k$]?+:7ӣ!9*9₨͗S9h3Y}niF%O5(bJ{S񿄯+9}*8 =3ɷֽ랦P机㔁,:?8EyBƭc.EI23FNpNc9i$:N[FN?$ri=uചӷ8NsG9iYp*ri s(N 8m\_洑ӓ6pZi59&NWqi rͩHNC9qJ8m2̩i#'9t;[8ݤm1W9T4S:N/23t l?ofkyy_dq#k@Nt|4FುN @ x;d?]0bmC @秳pӁ5gŷDj)Z #B=~зKEPW&݁:%oXY@ofi4}`ЦlfO` aqCjan_BPM.x?#TFg<%//e6 o>}ZѐW@}Mpy#̟@@gSLsS|N :(P |3?D>|tw`!7< Ϟ`~>@k?2#hAi~:0>h'>҄L@~R/ Hρm@M?0q} Gf&  xhc xr~;x <}<瑦pH2 \OGgtG:'XBŸ (nej^|qU72Ptkhx菆xB } .ݫXoFn4xvoF? }\;0)@ hc4uP/ty`>ܣ<P{P]U :_ѿB~46|bd7f2c `GN'+bWL}Q /={j'6—eP4*__L+WcO/\f ZItL?Ƶց'p +Q-j:?)r5ͺrWӵKL9V՗y>_B5 v3:__ 8G?35(ұza.;T-hNϥ [T]h Pu('Ar0t'_)[ShEac`c#fҋgȱnvLSVpN!GMot?(mD>o 5^ӇN2c?[0 c7 |Pui=ow7uO)&| O`< Hrr27o뮻MK/DvAe?&~[xƈ$߭yws`(]EYkH²g~YO~{\Y{۴ws^h;g+u#޽-mY<iߞs bGai>]ILL %SN%&X,ws!'r ɺdɒ%dҥdpcڵiM廦%%IdDD~07K&W-dףvrYe$ڧqrL<)GB?TȬS sZ!E}۾SHVBRYYIx#+;}"BJb"MK^S}iD-143%&RBiѧ(KTְ6"|}_w{9k5:dX`XxHMM˗/ׯl֭"l1*$v-+/:$9"?.N<) .k$Ξ=+ŋF%$ ۷xkV+<^ ؅^G=.SXO:x]ޓ;2|73|"U1bb?u ޏ2OfU 1|ßb"0-GCo= yB^ :S.*\-ewexN`f0|XQ ??b% 9` Aq-M9ٕ2ÿwC2K|m1?UD6[s&w66k~Tqz~(hbA)k#i ÷an ߟ>1Z0<ϙr/0| u+#Lx ?g2 uE[2nMwumv?h47ukԨAΝ4Ν]Cї2 4p7 IcQN: o:B}׺.:7}ujr|vApj%]]`᯼\F׎wyA]q_QZ&}CAp' P˱fͿ aw*rA8؀󆠐`1$(Ĺ|Q9~@H1($0kNh|c݄u|Bq-h7, 2H" x`s?`1:uQ_`;p? ;S'BmyCUxC˝%u:i߿E٪=}CC4,m!#*QΡrwxo;ΣZwa bїy=[V*[`>i`]n`xx><ٖ{|#EnR^$ᜂ\c$YsD>Ν;W,ZH,YDe˖\aڵ2/d}gbٜ+ڵK|w2788w8|_ŵ27yHMb5?tWg=r L.g@7,t+DuZ'6ѓ+RXM8~9 :2< o Y A ߏ3T_k~/?s))_>o''8֒/vrlRS&ժTy[xTVݩnF՜==Em&nu*{T k6pxk..nM<*V|aTE'ǚM u;^F=<1<wu%}uW1* ʊG㠻g^8ĥD?[exNkoxtggg0lXR%,OxU<{ jeq_(+#eҥorRPPo ǞsW\7n(u'Nof888{{{{h49jQ IY#0԰az|ֱ_~mW;6Ѵ}v_)=zTti7<@gO_dZ>|;vh)r£'5V:>GaI\Ν;b~`l1ڶm1^}͛M6I/\@?3 D7oe[Xuo۶-~9Of yH/x3d)</o26Jx0QDmCrӰ K"/OݻwoϾցJ?/o"GdXm%j4#uh!"mD}6tyf˖-]Yßh.#X;xAof`h!ڞihzg?*V~R1s<"t{(=_! tCAa@};`dtJCǃD[id[x}''ǟ}qJ Zag-]~88} ;6 N3 ALC*M}߉LTWt'{.ڼ54wDDoD QhAgoe{ p՞n4{dğYiP ='5QcwG]q϶|6PăG\?џ>@Lr!mw/3 Do^3|LJ =eIn[0!peAu{:E h~Z4H7 /ѱ?43 ~atl?ꓼ[Iz[Kgnڕs)~G h@Σho*/9[ h_LhGj!iX4l]0n\,tưL=k9Fm} ! awE |?=5Umh&yfa}R{ہ,L=}RJ?|/Eh`H3FSJ9F3-x3>x7x+c_j}4lb֍c`ϠѰ@a6h@S0 )i` >.hx@ CrJ2̈́HuLJO#h䶴u"i\g>$އҜX?O3IL8>Gn.HgZ>CX,СhlsJ[a0 Ҟ$eϩҼ8?iHf>bz412P" 1^.:thߴil4Q-ߣ;>ًhFg4i4(=eMq_򋌿ߊ?Z9ߔ={cccW#l ))IҠׯGؔvlW-ǀ=ٳ]+1}.] Zj̽L>Fe$:J |ҺR3PyT>͞={NjԨ q9!!FA3gΔv}Iw G FlB.|4#Hegc,y6ߺukUuoڴiA82Q)D=z޽{LsΥ9sH|qBс5 h?"b]3g[6a1ʚc&ǮL-l(11&߻v*sݻwK}2Rz{X ,`ii,=l\|7eM+4iBGr@P{; ՞/8`#{{G֯=~Oۂ.M8h4رc@>}!Р:hP^Ő_C'!Ц-T}ɿׯfݺux%77=#GJ5 G͚5ryQn)PG Sm_HmڴqeN=嗒l֭ԭe˖Ik7#7 ׆`>qLqttcvڕ/5 Wt˖8]X&u1 2<ϙ^I~|)qUu.laԩ>Ki}n~ 5:p]K.cj2ew*g~O /G ı[SK!C.簡^GX{ZpoM͓]w#.o.ׯ9$C/@C<nذ.\(Y0:V{ț:3?+[waMI2AOMM ׃6 ݂- wOW< %*w ~TM2/B-5(y3%Qkd.믿~yh9.G56+#:zMRvn839o~WK9?7qn;s`<М+[d E{:сD0<}=]kϵsso~Q3Eu.W'oVZ3I"̙;aX_\y 3ZBxPĞ6;ؓGqc kX^/ U{s1/hDy7e}P+[WXEV`r~<'_W.&}dmKֺisֺ@3b _#8 ߇#.?[=0cO^͏Kֺ'mR6xQ։:[J=j~q^ǎ7nޭY[g%^"sWԏߴG?FZjLG/A͏G_+l>>ʺ{MZc>j5Ӗ>NX`A = 6쩢= [3Q<@S??1cĎ?~ o^aLއ:C11Y/`s'EI>|X߾l_wL.ԊqG} Y7N;M>=baEnx8=J Q¾Y^`V8!24FV?PUk;$T ?/L3:x 40ԆV PzM:]+#;vlԩScYfI]?[_sr(ۄ>Fje%͏}X_-kaJ6P*< ~:PG>>-ƀaӓ{=,.<W61 cuYJ6m۽\"֣.Yԯ_?Ie⸺}%?ܜ\B-r8 >\@H=d'EGGf]N vc53xż=dȐQoAkm]顺GD9VZ+㚳oBC_G \ mL}Yt5 i3gΌHKK Skn8 <ݩ{7CzK\fMJӤ>Ɛ3H$>_^BTҍ&NЍ\4S[ =JE^\v9Șc\cc:m0`HdLDBӘ t 1F5wunG<]}^="~d!"1FοGɳD 982vR:(AmEvƿ]#cG {/2edՎ""]}=prGQWoC'??00{>}B.%Pv)Th^-=4O '5/5?Nj444.i}҆%MK2mSڞ;iM&Ņ#`j fgHX)#'cO3w2bv3{~.Ps!8syyyy9ռҜmd114ϘbqxZ,~.PK˻!8Keeee%ղҒmdɱYX-;Y1ZcK[gW_fMyw2fgJZ%J!Δh`fmoJ54e6rL{LMyowL"sLwIwKLJ"n WoPKfXӔ Hpip/_vendor/distlib/util.py}}6}9RL;Iv~l쪴D\SBR~~g (kc`03 V;.. /7^\{Up|weYGysTiM(IE 54xh7nn )ý8?<‡PI6ULi:W y:A@u Eږ-ɳ3yyd#*?P"+.ϲVwI9gƠrr6OnIΟt{dj3Vy\̒͠(#iEՠ|/l^hwkT:M:ۿo*?\Vi2^>;5nA i[xl>᱈UkZQHӤQθ@߇A}h|T8+fQٽ!Le:Vu&dQ<-? \6Oڛ7yZ 'uSŢJ\'y5Mo:O}8|KͿ5 =Ep۴/-="1Z9y(`mDl Gr v_@'{_?foWi, ŸIv|pR? O=<?ʳmwۇnn}ۗ֯/~mONڻvK׬[VVI<+~ò:9WCOwvBɑHߎw|x]Fb{4x|u/>?odtrd0OLstFdz%αy4 R_eshɝ~B:r%WP@J{:Q蓸C:;2p%'ab),iIDZ몳=N׊{KrtI'QSBe y h*O+6;A3;ҙҁAUy]w3}cד@@ۄs(ZcpR/ /(ӏ.Y^yBZ0cU \l @cZv!4Pl2ШAۡ\Ԣ b {>ƦvupT( ܀oB& )ϢgA(PZ~J3dC-mY ߯Ӫ&V2YGƊ S,kX %o,٩1\>d.+NQwEEg뇊 OgI{}{DU?DAZiOÇiOr6K4'g{ĘzGCB_T<7Aք(>Q?kGW%V7wӷ_khC3h%^Ep8|àEiݸEre`NTi&ټ=_ c|Zu`&y Z25` F//E>e90R ]3%&&.&/' ^}ƂW㋴+O=R"氬ZZSkgA;Z!ct_v Oze1*=Oo9a9\-z%yc486Q$O02W%"Gx?MH^?4j̻,'@g!bY<0T{ *Y{\& ef`epCPB!^\ />Q3$#s>5Rhmҋ$n^9|n1fi֚=g l@c$>_[2ZK NlIhV^ں}!(Byyb1;sنgunMlueq7#%_[R0:K'艊qشIg}qsðufkQEr*[ ^3Z3mG[ߌ$EῶB\^O<¾BqבߏYb<ec\إp؞ի4i|> !ԕ^yycc>7RE:xȢ-'7hLtIc*zR8I9.[2!!nҌW]R[hf| ƺEzgM䰛#@@"_-SCO}B#x~J_z9 Q,AP4}AXD˭Jp,:׀<i~*|ı |pVhB}~+qLPE2Cu:XS+&aQ~*Ogؼ5:TtBwӂTti&rR v8kY9qXr*W1I5=Z )I[!czs&,zUMwFWwTU i-@M_@Ia1h V~MbXaZ*:c3]Ou'غ=[ P2b$གྷ x%yçf\zabjQeu&'eCTZo2tU@ZREP&&u/Rݥbw} ?W}9i~i gbcO {Z_ҘpKB1] r}}ЂSTɾWÀ'S;6jeh:zDVm(z%dY{hgy\xǣ)MQݣy֠2YO֞a,)W@4A) >Ϯ'4Bq#@EvZXk+eE{PpϘ=ʑ.8piYw>gTxz_n\-oPM\-/okRU:%Vf`Z42K+J(9+ΐ1* `"R &a!q-$Ԍ[\*uCE(tYf4s8iq='k8AEvPv \f-XF03:v#IQW ՐhReTs,V4vU bŮ::vW.ЫaQU1KB@#_4D$4{_6 Zezľ)<&@Z!GW6'+ЕP15W, iO++ QM\;(vؔPdC*KMÏ KJ`WD;d+v@/dmat.a#i(&[CUqcd1j|$H$1Q(`O<~֦\u;3Z#<^z:ϊ+nO 5aJ3Ԣ3w6&d5p@]J/yR@!1ǵ'б#AhG`)/;?c=0]fhqo)SŤT3u!"ę^|<`G0$gF&T oΜ;LLrre:OE׫ AG}03,Ô%ġ;U(Mg;jVmV04h3wᜋo'(\L)"ҩb]bF"PMe`%ՐU iP|߼U|:a1b4z_Q7I6Xtƣض5YH=<^=*(knH8gFdIc!YX"NCzꏈ!t)*V[c4OfgSXtfvFaQ~"/c&{ r<{ qXvOraE [bگ5 Ur֯B1ʽG`4¦{t?98tv聱APs'98:Z?SԝP5fLg2"nDrYƘ*KCbs+"DOfu7b;TB"J|0`G߹SrnEו~O,Ku,pO2qSѥF@x?W?.;LtLU˵JLy!7C5OdN'gո1`FhN*蟔L$*iRKJx̆@1J@` UДX 9

trT 0/O'ӓgIGNg[?֘A4ʶdf|V0i<}=ȏl"'bq:}ƒ-z/P,`95dR. XC6ClI0lq-@6SVoxijRE-@TjP,|SLi#cUwtus!0v4, z'ёBe+SK3qSGw7%Hf:=?j@mBtO>g:J&>L u#Ԫȫqa,r:" Jby7`B;o>FjPLL0z1HM:bǛdX RDgA#U vatL - :,Ek[ZW0 voV1arq΃"Evw;JT'䀾 Cfԡ߫ͦ9}(Ձrt08HN^N̄%i=ikaR[anE@ꑕŜ(옎øH@s-#?G7}+Ѫp R! ^@vDkJnVL1K"8MnNR1"(ehrxA/꬝Kݗ/"%EƋ Ql+Vrs>f'F\ 4+ &m ~fӶn{wx~xcIuR(YecƧϣQv?ǧZ8 {#U6N'W'ӯKӈ RPF tg rZ uB5NmeAL *@ @U!MRAeMPܯ ZHVCM@55l3%eq0D 1pP_G3Đ-:ʉˀC9BJI8lqZOyکQ'g0~ e4ύ;i rTpL:տ8qw<YZ7j`"NP)+',>GctcX%eǔVqtr ;`" _~:XqEt Feތ 0B"kY rZhUxH3Sn4[:Rإ/6P,oB:BBN,E1no l{Rr[!6E^L'5ͯ^'$@w* IF+Z>[̲w,Қ60k(sgtiy8MC G B< 9y03ygm߶ږ\@ĹO^0v&Xe͍ [h)]ylcV'w ء[ڼ PMd@B&2VW@'SpQ`K8Uѩ&R9jH>mf+nJ<:FHi+k?Ŵ?i-drN1Gg"ޑ]okSٺ(czhU1 ħ:'bb.s-s^gZ+ʵQÁ=E{&rF%-ZuvK=I v됊AwFa5[d3B/k82[@jS-HVԠKϠT eD<5LJ!mV &!tgw.9g[DTn.4˙ۃr٭5m-Avgo &%X3>2)6xO?αem3aFt"۹>NDo9z㛕T~W50t)SBHPU#\}T5Nrtu sT!9$C}i)= wli3.>,?]Leg{{JhO> } ŏ鴇5sw/$;ޅ֟CRu DF(Favw-ЯGLSt0_\׋3Ls}ύkPgY^o[t(n|O}{:EZDTJQzlQ) F#=Ee>BCYpsa:,DPc(b`t~o?\r%)}m:8%E_$x[kοC+TQq@2;+B$"<QJDs4jA.Ӡ)fЪmC9@yc<+Rm{8_1!$uߗhTղ ^i@3iKoI8fvSC?}2yw͆t+ ,%`y&>fp{q!'˔feLI"vE1p?75 '&7tk{HŸsc©U.Ϻ܊QZSH~KRŽH/zU Zb& +Jqb09*+#|F?ER<\(,G)FU=R:)sT9T[OUQJ5JK5:b1`CSXH-\C*b\I wThWZ%]ՅrU.'S[ΩR 7 "WqLDT'x/@VSr;Z\]]FR$duI켬2a;zT?YG+'*"#޾fP|>Ŝbw*lnیxPPAl atB9\à FkP2 C@X [$L MZligM"ӮxolNC}2Xzm)[2vZl.x$cdwX:KʪSq=!a]C XnY~#0iѿGX}"cY<ռ?!:o_|?r$v2trv{j,B5:K-mf w8ŠtSjhgo!T\CM&| n06k(sT#,01v0h+G75 IGQ@2[P˗D}˘!f8)fϠ|y_U9t?Q:bAY~GJJe[c&0fbfV*=$9Hn]ͫfXtm#IjlQy Ґ|r,9WeP g ȭ;b*FFY F@.v}.U*`ӌAɁ1;<2t*չ]BW_z &/N p1xeERZ:`Jۗ|RYK SCg- UK: rBbF@!%d[xW.Is7۲XXKgݜ$]iubª}1YRq1#l}񟃰>vB4X>ޘenۋS/j-:ag6Jˀ7d6w.͓yM6SL\]`\[>fT[R_"5I%zk#=w„D>buޛ !@[9¦,]1(__3t§8 Ssu6: 0t|a)JXm%F&y}KT܆L=+bUzڀ_x\r\*;}#xӝxv9$wX:?j5-nTZr&`>= CcJ.n^VVX[W$Т.hƏ{mB=ˤpucEmKzF x1"Yc5:ӭӴsר=!OxGYOu3ܿ<dwOC*4q֤YV}4`DB˳Iý7o͝pk4gtڎ·#]~Z?9zzo?n14y{ViӯN~WjM]PָGW83ÿy=62yrm㇯;r !<6[(5ʳg+ qub0AxX¾V$nҤqՔN{aWW`GeS?RXe˱~j4wf&횘EGcij贫r1H _ D(VLCʞ|G'pcei>%0V\Y7KCL{Fhv6iV%l䲯C I7+͗fnjwbݖjJd|[:oR%.%[s}SJ8sKI;YR/1Jv˫>3yWZb4 rܡb $zs||p:I3,k/]` ꎎa 3]SpZQ-p;4`:I,v$IʗfC2}DS$$%dSQ(`D`䀬130|[2yD[ڦh ][sO]R2`u!8F|T rtp,X{i/ "'>.[)<>:z"ypv ϯ_.f>_FbjLm!2n|If4 F' Ӟ'R3rsDlؘEF,L0x]@K[c!:_wъۮ|RnFSlY3437i皒E𡨓Ud TtV$t,,Q2ӡZ"˲Ĭ-u I;{U@ ukei\۵ÃIjfMW XeE,4(%W 2`kÔbukOsӆ 1EYe|\&p0H-R<iY|ng2nABF [[5om_ `#X}k=G0p[?`5k+7@qtXɩ3rkhdf3y:OeZʖ*.|>]"hU<߸$"EUB$3mFCJ1MA}|f9l__سMXT9&Es&T+ 眴z$G&|R_EO&.TȖC,Y| &"d59ީ"i)Sb2H?6 pط 72=JӀ*B FhA]RC6!%}-p.V&:6Tb}]m>Rd b‹!|Q/'gr6&f7ACquiiA*Nnf U :*J l)AmtCІJ^=8Y#(~n/thׄ./7R|wҹbPֵ%0FWdI ptnz6\4܌!;(!Dk,c|f= 8.-[3Nd75: BtNUJ"}TEmNڡЌz]A;%DŽwte\ $G'Yפ/%{!Ï^}>(ТpmP .RWO0XUaAs/9껶JAK=Yٶ.> Z&q?luYt(S R ȐVI$le筳TCUC)$-n= [Zҙl9'P%2%vcYIyfwP5FX UR6(G'azЩ_KQ<_ԗ ];. L[4K Xu2z-Le|@ 8xˬw{%#+u.֗Qx1}mv됖ӺLI ugcł$ V- XŢOIFbD1#/w]z.~΂by_K,5Kl슔[^ O݃+%V.#4^Yۀ뫺%xb X1hk9"+gt%o&zA/VI^ߪ`e+u AWeV・=mLʑGR&?n #dǥLń6^kRгd0Fޫc96e:r@@ڬQn<ѥE_F I̦Qjʊ31@Ògu׋lr*X9BpbI6s3­Jk Wt']{һ8t0v^fG$0mK,?-xGr'SN2I =} c3f)~~oGFqg`ԂyZbڔ˄>}+8[VULʹ"@T .ujp0-L-@˥? {ɆléCykY)`"/(・}`cyPw`OZ [%|*I&<<7o-韁f'{ 'FMX %f+7~J7}AM=%&JM7{ݝV!EaeH҈:_)(VG(նC2a"..krnKx29% :gh`VJj.}ι8Y߈k mOlK,lhAB6 1L03 T6#9-[2A uh z6:(Fl|퐩]c,+ 67irU,\MSu-նSm T%SOOjw¡:]&nqFS|MLSVLT? Sy1PZ@HX$ϘCBT@ť$[L&j&pC'1=nP_"Ɵob!!xWidET8rWhFTʱO|~WzR%4k/E8eҽ1*< 31&+֒OOϲFׁl'WIpg>{Eegi7BԫPڢx:LtH9 `b|[a2U\'S-4Wa1B]# >;@@(ruT(PsuFS, EI5H.>cLTԔA9XdyR-ܴ"oߏnnE25uVW(ӯF=cpy -b5Q0/k\X1W$gє_ňa6Ι]2Ae}98!BcvE &=ϓk4?䝃rUË!05M:`H,՜unIChxbBpޤ \ |NTst BX9@H O/Wx>3 eej4"`lomCK` tGH".4zr(%4@ѽud[kkϜ0Gpt}\+O뵧 &RC"[i\ֶБhuW0KΊG$i:X2Fmsȯ4^n:17EN'B+7Ngeq,(B2NËS݊ԋMDWۧra*xח/>/^}A%/_ƫϾx矿b چ]J NYr[g#5+%f,I5Z)1V0,NyŜd&דN8gcGL|eá;1L>&w\% J;YN O)1yG3*b Wg<3w S;/%m܅,֤:'&Uƙm ]V'{`魨h41M_'4\*_ǰԘТ Bm5/4啧Γ᷻}Z!DSHjw[P06MHꡟF3|a[jtcPRY̋4Ƽͫ(yλлc&zH61*FO%;}PKfXkO\pip/_vendor/distlib/version.pyÒ~gM4\^~a0 Cvq6Lbv,k/d^& =9g_{{rz~79‽/9B^js͒"7<슧r,/[UPfNҜ-N:O(j 0 硯t N"8Q\BzMyHs &˳}"x]caXS,M04ɋ=AE = U c7fNԱ A5M{t,ުJ.Z"{q䌆Y8 8cf5?L"xPC\4+{=M X].I@8L&`DVieMc 1gr'5 P*4eGOk;n.|S)(o<@]zl& acR)_=g6ܞZ08URkH8;>[$lN $jpYP҃gU r4LA+E)$eW(QY bVCCE΀:pf^bKk"o5+(Mf ô{`8 B)QhNuS0<3'_?  -d DQ c[˩7 5ڸKZ7}L, V+ڏ&6!d]v۵6Ћ5hsw8iv}-pJ'kB&0W"3.H7eAAb!Jh*$w}ģ7K^ˬaU+ly4*r+܃HIdN}ֵ޴\ol۸KXNOB΅M]5B=-^[ʇŸ/?]z[伋5v#@[#zdD]#.JBGDѿ\…}֜^W6rJ!0L= 5oP ̶z39I(T}Q2kQPe(H6aTIv%EZ,^kۍQu7D N$Zlh~LU30Ôaμ25tܟAO!*,D?ַ//2)gn?Y5 e| ]S~8=QwߞޟM)?S뇫$8x{ocޭ/$ۭUȯlv^i{@IߦйiYo{A;^7SDY{O`w$ߡL[ |{ +(˕\4pUuB'T쭑ܗ2M6kDfGMYH[!x"Lf(3SB۸76Qv}rl XJLO!EW*PzR>2FY|b*WUY:CQ%>XeTaLAv蒎v[D[tZ6'能/g[3}͖HX:b( BHN4+m Q߆`MPۊ-Bl( bFQˣ;ek.3(,ME} Uu|\&g OC_) }W dzk̻J G0`d[ LAE.or26*Y N=״40 %̧Fir kVlT~.DbEՊ5BI)qEil_,XjͤE0YB[!נTe5cXÜm消Y(i\ KuSW4,.Pg"ԥ"];~7\ep-߀v@fvWI(ܡV끾@:z*o;RWݣv+XJvB*f:iؕ-Z ;J U8+Zc r}*ӣJ`z "h?46U[VbX9F=* ?nxx\-Rq #[(G3і \ː8Zb_S}@fᏰ%f^ ygOޟ|=x99=&g񗏿R ;ښ:K [;7MJy ƅN 7]#P\/O1ϭ|˶N(BL:eShO!d8&[H IzTWҹNY7oGrZ(*zfiԼ^UKX?Y39UKgEy^#i#3{GJPfjqgx,uQ#4 Q4#/[@0&+k+fn黅6@qK]!kf Cs!02B- X[]CR*J8 c;YM<6,m5Ъ)s88jJecĵFt@ b1 c{5:'@۴FO\.f mھH" W_&}o髝*]嚞*w)#<уV{P[qāܕl<Ȕ\^l}2;/;scqweZ=O&k=/ mӲ:|(K[-`(ld @~woggO7cm0*Jf䠯 2դ:ߋT&R{LSw@HVh"sS000T_%(2ERLQ'WyX q]hf8E =APN DA ӕYsjL69ëY g+JI(k20XTlF²)ZFg}=Zo9EMSyisX;- ut7 &#M)Wk;]Oi!SLvinPBvNXqPR'4 Q~ZxfG^yKߒ~j-D4(vT*室7,CDH (/.Аcm_@1 3~ ڕ`W'L!Zo=/DgNO` `޷ [mQK8& 18Yڡ݆:LP498xLWt1h-9FdDky P9$'˳JQIaXO"(ѳ aD̲`ߋ>ɝg<*3oRyd ?۞sWcf.(D l^.;~ch Cf?;t_>e qiTh(l9"-36y=A_ExcGϏ௑AL0XvRs_f71 Ժb]g~\-_EtH_n<v  $/7X9puޖSd22l<5@:hWI(: ܳmKxH62Ln2QJ/qK2À̾v=h׎Vĭ=S;FSaRD4]kKYdVжKC Ǖk Rxq )`_0i=hć>>gp[X aP=|ЅQ^22qZLљ^@fFL?ڶFSNZ}HAtڲV"€bgf e{=3bOD%DKو=CT9ɼ@Դ_?Nęt"NBvr{.;/>F"nl)am@uxg1L+or𪲓p)[NOO-{Kq 24^z 'n+@_aXZYb>) <;W(\s٘;;7DŽ5BXNBJ0BRf]U;ڤw`B1Ik15)!T FN=e/dYEn1- ERىl8n:} KYaA_k=< ò!X^m֭ 2jK{5;3(X/tFtЁ&갏lxDq(ԛ0/h69ueC u>Arb=6$5a$17}P,D1?[2K(%/H80~[%=C X*ˏ^|@A͞ Zy%+FRm%f= iUOgQ#B 3r{ Ddɹ%u:Eٛ(^oA,.h(0ڎUL$;"s/I7xU"q;G+d7V)fD *)N*715;KذS|^Xסq3&۟=5X쀭kEiGd1qI1ڽl^25x}v"&*E(#k!:YW>^pؾiȒ"+WEUJV lqdklߘ+i,!Ow_gMXȣ%1жb J//~@hĝJ1fNqSiTy"2KyeTJq%h<<1BHv3首2ҹ^_󳭷dP]sDdR%Ώֳ|8I4MX\fҽ9$mziO5twn`=ZBMWs@vB^b7ŵ^-]mXK[(ѥP̣2 ikUc(r&h5qn붏USwW2U@ {4>o"UޢomL6&Mē =Tt ERVp'[T6P>q$.6ͺ|:?UAWƼ~ďSִLMtb |+DAY"?eN>b  H&ħ\criA:݆gX20R?lsGŀ}]~2?ۤw~Օ7%<Ǖ+wΠQ,{kɬ.`|蔣GFL^_uv5}DBSl$vRcJ ?5]&?yxN~-BYcg06.|#0\ܩBy啩ouƭP6F'kLj~0qȯCTxE[]_ّvlm8, |sr^P xtQsiώyg >zXuMס()<"KXJ ס颺[wͣ5ؒ͡$,hf7(j@Ÿ5;j\B2!S3 ޽GN:u9Ujo}11 c?Ueq˙JR[4,U;6nj' ]^_66qOa͞»ݰ"qiw|}w/-w?G\wDߛ5}Wx/(7wNߛ;~G|n,7X% YL C7Z aN*md c7B#$;) ¦ީԁ403 q):z61m<tX|!L!veÆfzۯ/rWj`̺0ƠW6ln1|ӶBU6a]Nܒ>ݗNF[dً`X!ū-=Z?0acV 0j6jGxĉB2bgɕYFrܪ` CWAKFu jժN"Of3L!J/E<_$bPes3䒉 #nO} +x H$#6}>P%JUT@"5&~[(qG@3F*$Z{g0̓XE>wMRc 0w x~RFVX 5w9@)]fx\2iE\8.z9BCX~e~=`X"Z 8T765L:O*9eXǧW9VLqdt׬ \ n8iei^|bӼ CRw* n7gFEJ2Wᆐ+>Hp JXB.)%m{>X~5Z/md-sᙶunTm6n/cMMpyV:n:x}A/S6 \=C y@*06$9i:/05oF)b( X qiQZ'_Yif};;,b8x#@j>L>-<_co.Gd(U~r,7#0jĨYlÇHί!nzZWшtcrl,7; ~$Kz?褴y}d Ћ08!8 B7ك~ FQN7y_+1µd¨pĹZ”Z76B#۸.x˥@>O`P=8+wsHqN6 GV dSe &6&T>H~2jq"ܷ!s,|R"9Q>7OA_IS՚P܁M ռsCI) X 7i8|1yq_p5$>7V:ҵ0 9l0\0 +؍-9鑂=A3GKC/#$ht7D(߇o 0EsCs $=|I< 8z=}>> c7 j^|^F2D?޲ AZ(OJsPjKC'Y!>JBk ~.r|oSԼې`C?N{j2%*=ߨ*դ\CbxrDGY c(5 ^0J~Г*YBS3CX79;^Cw!C\ˊm<}-{'d 3_ =H qI+ʟ cFȁ9HVzzF's0ae2*d/K$ `z) R} pg˿J5_TlELR"._T T(FP~3#cͨ>O"#kD`њ6]58Bڜ̂b4h eJ@E[:V3C7׋ f@b 暕@sc`)EMFe7!"l-3yVw`XߟBHwƑ\/Yij(ٍB)I>l`ksޮqMe֦2Ŏo-dlM4۫ 8jKcx={|j `< h"`&]_4Rd%Yt ڍ]xMez3dx0w?Jh|(r{M< e*~7X3X2 #bd!6(eȃE[A8=c_>S(ֆfI_}6rhȼޭ{QLSXmY1lvg2u Rl4Dǥ`'0Un)R4唆n a΀1_zɳߣ,דi=:O5ߠV!Od!5J<>>FH~̑I0Lh~Pycs| $K G!Щ@VjVl}p\a!g6Fs(`X՗9BHceȃ^SvmzsI mduQpAMTVQuR qCU6Ġ&hsu4`K3# ( &j;CWpX2r[yaM󟆠[Qdөb=ۡ')s!^5K#CzɗqB> }q>5_7jh&;xz\l3;kC_Ib@'M AIQ5d/(Hg VxX]@n%&H;9hƨv&>XY_O%YAu4LX$aߍL* Pb`j+|r~[l dr#>IK=կVA4DĥRc 7cs, 0yt] F%Q՞@WsOmXNYAsc <RftBz1WK= M4v.D{scո a n4~!g!v-FKiQѼ!+T,dd,XhH$-A ?Ճ4jj)kQO8Ju8L29EiKr5z}b9 #뮂24_l;*Nf9@GYW(ŃpiZWf)H>CB~[Ӏ/JH}z]@4 DAYDw;C]1 %֘.M^ZОyEW*4o$XSE'^Fe7FKV)5H@'-9Xx)/fDH鸶:x34JWC%6Ao)[e)E&%7:9f6eo"]9g#y@+ L5JVUꎙAxnD1lsmme% -hrGaF9-06SU#Ph]!ͮ}fLjQm硕FEVH[UEԮuE֡aOܕ)5\& +|)sx<5}/cez0:d'63oQGFvΉߪw?a f[1гQɑ^|ZӨ-QFCKF<}&$wH+T |{RԮk q8۹)Iehi3PA%.!]*ʌ%}?Ts8~#výe<=M.nD;} qh7eqPk7KkƆBl9.Zl@!Q  sZ^Q1!YhrlbʃY+>uS.]D'8%mt*+Vrl2T H-Pm!MR\tmj0@655)ۑu:vQL ¯J+Y* z}r +&`~"62|.覓)֌Bβ*CCe-b`Ve?GFؘ;TiSc1ʕk@Ip,@A:_-k Jy`1=*Dkq1Eo%a6,24Ƌ?>1!7zva83^~ 92$ %]GEGVu[^(ԤMW$&@Ywu%"/a =Lo5@nRAp MչhUyMϚTINBZ>P+r`mblJT̷'/ =eL//+(v>yť!aR#aĎ$Dm|mKH E;LhfBhOe VʇI r=\vQq-4 (P+P B.֍sjʠ\RÿjH%䑆f+*괍=0)9 {`!{Յ\7WL`9iR.H i A)tOtO+G_OWuz.L_x ^O=J5e9TmBfR` )ԃV)mCҗpAt5ty ^6PUz'UEubdIJyR$G-!EE%Xfepx {Fk\=ӶcP1ժ35 a7#1ytޑ]6"rS8Q't Q5Mf}?)`# |^XAʍccE DD b._/1Ru_ž;w̙3Q53 )tah~W8255<˕X_VH^P0~;!UojFid`77%/c8}L[;tfV*P02٩y1gA)qZ%RlJ^ 8,,PdJ`0`H CTBU(QM7<-L ۪xJ ('pV1\nRADR3댕 çXq}ݨr뱟on_ȦuȨ:h@KZqaʗUnA-Dk<%kK|Jk*#Gl8@!VPo:L(P@R3"PglfkSةVE43:V( dyPd3Vja}Bj{J6%z(D1*XuYuOA5 FPT; 5eba+FmuKYddQX܎^ YdC.]MDɅ(BA "Fe30,B#l֊;XFX5짖%h"՞VL@ d]v:BuVnOh ۜ(7vB7w4m&Z=##i@nG_;dBr 41$W7L'4HZ(棴MG7OjsUۜL6!GwOfD>IW2T5#/Ϗ@'ƧO+`Ԅ{3ϗc4]DZ ';@շkJon$i! nT gTڹ3ݾDٖ)[Uh8t{\=LLOēD amOTc{:,cX iu>lAV&X0sv:]lT^1챢Y51ryR׿沅Sdj&(|3$Ab#4r]F~0sLwK9f#I5D3*RSgՎoȕֽ"9lN?J% ಊmL4~ִg({Y>w8w |״dw1UHhZG]+ =Ya7dvg#"`_듚Wo匤361K:5VK֣Ưl \YVOȳ72̞B p r%n2AӵaB5q>tĶLŅʅq>p)UIr:*t mFeȲp&tvJ #j !(t( `ȽY!w9>MKjK[er4+TMĄK)I :@>GD|hYWp6) Է$j{2|\6zt@M1Y )tV`84`^CD Rvk^&PLmhWg RfG]GlQc߀OqxDJ~)B[(KX)Зҝ:;FsrThӹP yHN>9]S*IK1xX@,К1i -;^ nGD%( 2h#ld L*TR7t{-"\n DZ#7P,/#2H/F $)0nr[unWL̚nB~ r]&inJ'rT}ڽ̭Y;*o$4 xS=y %~r/ݍYSbM*{>sZ>K Y^+{!}M˧/K.}ͶVx= /O= r{*0LTb&=i`vcY3̄cy%]`vө=zh7mt\,baѵ .f'<iu\Z^m`/*DP%ƷH)%J|l):aP2^@IX0j+žzQ$D vp-\qNr-8HKT$"/ 6ǨGozjQ'wҭĘzF. B7Y1hoU*dHrxW*'4.8xFEpeEY뮂ycB=8iՉd =ϸ7q/G.lPY].x3\  kRL^:,Yk\+ܖ6 =X.,.䀙3:aø2w)&ld# TT- ~Xx34\zMDuBпUK.U'*+.m3K m@ѥx"z.6緥i,83ȅr! eZܕAuwHvaqmm1 ,Ǔ/xfX54,_t¼ou{4R9z3(?, o@-8WP1U@H'Lg"mej MI-i=OBwfi=+͐7R3Rrt eympz ?axoCU_m dF\:TSfE0[%9tH;7-f%ìТt/T8+%*5xK%0K*V٤l!+x}T]J6U&!W= m[u)?kjW&$uO7yͬq6/ f;vR \jvNs6j[h5< y-I"Uf¯V^`nABQэz+@(( os\&r\o75 _$]XjU*îuQ0Bdm.滻bye\7t', #!q+?ޯ]R8.UEZU,4r Mʵ :7bHꝌ:]+//_}{J2REAsEy&82;|+CֽhfF87`+ 21†GQ]@ fКAZ0Cy,4NR{&Ɇ{E ͐q;а\|9$OD'e oGk;E" ~ʪG @R>AoO}GR/m),f3R0wG?eWS+zVA_Pg䩲iR"Vd%udkW0RBi˦f9'P1,pd Kz(@&Y+ӅbJ _jnl jW2I=JHIts VCZE d-qdCTMqF[Ym(w*)&= 4T:G{B{xa1r,sA |{$ m }wvXMl#قS-EVb]kSrkEm7yr4`)3Ꮕ?! L\V:U܍eu.A&VNSVQp5?TD=XP&ƆƇy[8hmW]BzDzX=&Y>Z[a0U6=im/,o UwƖmx̓ ,9>L4XV}q\}*IXuZ+ !)-ٕy: uuw2)7v³G=hڅ'uJ]Ҳ 0aLLp^څhP- OQw n|kdc<ՉBP@_~2 aM \PKrY;)VsxD$Q&8ȫAq@г7yHfUJS2u>uy'=BMJN$uԂw ȕEPrC BkB-TZz-TBUZhZW݄1w5~& hkVx{oiwZwyg'xQN]Ts,x[ԍ ą/c^δ6VzN {7Х1?W.Et la^e<,GSxBA, bv,Zΐzx'9c}@1J|**5HL#҉.zr= d" "9w3ȇG-(jW䎡v>Tܰfc|ZxʖmPXZ̀`\,?S$f~HykoלD3Ӄ4`SC/)IIbiYJ;OlY?2*x#qWY =8 Yq,ĭ¨r;tbVNzQMkmd8]--a$7o['G٘(=Ԯ1jl 'M+ sC'Z+x>Lr3  1Or Tt{؅ F |Ni][2n0b0QiH0%)m=ܢ14Bc.g%M[ [3LV*wZ1XZjSLm NC[u2=Fy_r\SF<M-Ow~oP-\߇6u6?Ip_zѵ0%LQG4UK^HZ)4d^Gd ݍyg+@#M3Oaẑjy,΂ҽ͕yaX3(đ0Dư.mm) pT $[:F9J^IЍۀe2ϱdW.)φ/Ure8j/=^hrI/ u }h^7y,ܸ,m&܃8fRͮ g0R:z\|\ 4wvHBwF)UiA6ۿVdݻC"[ -_ʍxji#tBǩns z-=<riR+(u!Z/_]/ؿQV>Cuޗr42w c_F᜼LA*yX$mfuPT) TSH\[%k+5&'CA:vE! zK\K%D[80$3ωe %zqA Y8Mm\}+8q_P{rBMF.%n{Ypt )*9ijݓO=S)bh/KV NДrd] Z[7cB#V>Jm,}Q:S +> <mġU}:/( \su_$mߓ#'^xcaDX!H)tLKO~*tvcKc@h;bqQ843;&>E( Gmj5+]:9u!"$`Q@qtA\3QQĪAD]YpA-4 Bg[|O^O~jv~?2V@F ^we7yq7ndC)2O{ĆoCL- k3 v?&*ZjhG;5"ӡYP \@ ~<mh1Fi &j.c<΢%!~OZ@"/=158 7ӣT:j5m(w~^=_ᚐ6WnmL-t> {,rV27fVk+b]^Rj1x/![ZA}xky+CWG T"~ UMjί*7s1=3cT9C25TL36%V]%R3nn'˪?ZrqD0oFHuF2x"xQ_c}bj9Wuo31Mho3ZY 9mx "FI] рtag`>ەf`ܩʩ8u4ٕŴV%͵E'iWܼLu% J6hT,,;iI<%XkR!Ϻu.-1ȗ}6S"z`q*b$^yP%bxT6qɘg;W_[EAm;gD`=кn?ϔvCK'ʱ.amuȵ| y6O@XxPDYnW^r(?IӪ<@C~mgJ/y.J$}E>/b#8-V5H:v9E?[3!(=,4*x.G]aK9J.Xmbؖ=SP+uqT_'JtA% TW-J=tYMfPQ9H^jBq悦.:ɸkyt:!צ2+f\ܹuT;xkI$ y3*Jxk; kUB|t鈴&Z2jdc!\+=Nj#`\xwܤՠt7ՉqMfh,'UA*g̙\lOw`i:7ЛRmM#Lk̅t߿K&]sf#_ʜSˁF tv0^S(hnLإ&TMVBr:?M+Зܶpq;ֻQsqmtC@"<4q-%e vMLĚSS\ۏvR-LU.NJ-rZp&J'" S .AOYp_;pۯ;[6='}m֤Wg:#^K#0uC^LR~8K`:4qS 9`s>RӒW .:rj'->Ր,/7W(;V%D k5'^9tvKH0>$}]]} X(n {O3{g}i|>;~ 0S:Um:\Wv߶FN b4^b<{(E4&Ц_io S ɣ")DbE>\p?fCxv?ͽϧ ~c{Y/~wP,7';+ T?pi]giL S-CYLI/;͡x)zE15<~Ry+}+<&m!˻.a 6EodmN}>BkN|a3Fw#pܮ^>x_4uRI?Zǽ\|!p-c2~Z&s^ (h/]Yzw}o ܣWqKqxG|[ۀnȹ'`rG c2%hgz F:O#Ftm@XܛCKNfriB/%A"ARB i,k9gF+d~&bb\> UqО]i-×&>nrhoTis{gi3rB <&\^_1#a!탕#Ƶ`0օźe{j~+yJHV%AhDOxratLP*3vF a~GG[P'b_ud4t"=7tchy ύ7r?w{"do M#G},Te`fKlC^"'ڨڧdQF=dN23D).Ƶ<3K'>.^q% Ѿ|w\Z< )Wm,帒!ÌI1L^vGwo GA0ϭ:-ӶS~"^ X~H#+WaE"0Qh aмexN Pg:ҥH$[BeB]ƤzW>ײJ"CPP1o[[}w EG6_}85iܑ XxRiyӓ0UРh~jIqC] f/-֋| z;K0U11E"yHH9$.sih0^FՐ6LC [>y "%#.;\َ4S ӚB9 "Jz(I>AkmM JxJǯL9PSmL gSVKJO3Ep&=@< :a/ {|`9pb%m Kci|'b*0Q=^PL&@6+L{9j o;?RaaѱpLFZ&>¥2-E(pћ܋*MS~NLv.Sƿ@'%t D;ӎQ{RVG O|AR тڈZ^Lf|nVMf]oޠl$4b *6{pq52U3e:*@JAMm6,꠨/~\p]M\^wt [菓9[tkmpon912R Zv ӂ'URxu䑬QUmF; fnW'k.]1愋n3ބvw܁HQ:YK>ByTWϨaLL[ȹϙmJZɖ!Q&ضQPɿWn(w w#F WfF(V r!r\s :WD;ZuSd{A=>^y/ք{e>rc]#M>>F R%ȇ5ԄV{}nH޺pf;N*EA? u6~2,&fHyլ]_UESDPI1zӟQU?e9<2V~Oq[h?JzEdC"[.}^OS-,!0CøV#ITi2Ӽv\f3 E3KS>_Ij(I7?/];4ǵ\ъu0v刯*l ˎX7l~ΐn6x :;`ago0?WmuI+nY<ǂ y:qC ;6?0a!#Vw%xI0S_aYYQJqLYTh2kʕHwaxz>a8% CW~-zFڱAI@mkSwi≡2T @RO> ­lK2E g rNLRJhc[B*3HË4Bmߟ iK:;MF*G忩a(v/i M82xȿ OE]IlZX2Mg#]HS8n FH&QNJ汇Rwy5Kx}+~.,Miմh/WB5(+ոDZm5uW5rNPq j4em5TBP\)z yKpܶDepɵ2 9޼0CHTάP> tixQMEsXKqq44-)~%/:f@# {a-ܸn 4C=ȯud 7-OgKiޕT&#  i׋J > 07 ֭EXQ c& b˦}]GLPBn7T?̂k $$ (xB$4,SMo}s%r<1dk]ǎ3\=iE]Jp +&cLՓ>ḪK]r>Dxxk@5n!=^/N0P8i| %Ojק{tܙJK*&2wdW_rw`܃[)n5ω]y _v h:@|Zow o̊-xFm1Lۖ/_NJXWك.[WjO֎Hv)D'!վRm`1Z\dƊ\41z.0~ec iT6.m*W/TA#sT7{P (Sn -h `IZ= r6:M$NṲt)c.QZლk&&W+urDv9E;h*@#\si^LW6rMOzK$[=lajF胘K;sb~\rv7pY-{j\`xXgZ)o!J^lO |7U UKH!M's?FçަvG !1}0Pg 6xF_vGP ]fg7o@%f\GA#=㹆X3fHwU8f74  WvTsZMyV,B_K*N9uy:0.7N/q656VoxZvFFf7 1,L&/Mp*@oW] :(ta싧zk0A=y L^9iFOZr]]*??Cez\MdY1QmSL.0ᬘ#W#ssArZP\#%xL3*/L^L-8j"*EQB@סTP +VVC j9d!*)Mgs.gkkϮ+k*xD9gL+Y~:BVwZbZ@p||  uN.>n%zO n0S0 W1TvV;+XCq0+`` \~/5 ܸ5TыysΜ{ռnKC7WCV;m vsSy3][75*VYO qi'\2s*~-m={҂Ox\sU v5#R#vU> _pNQKkw=L{]cfM-9j!o{(BfWhy\>>͍I3}/jk;Һۣ(ص~1#ǎ8n/%r;IJ/P/}PÜ uhs咿#?8/r ѻ%]+u1dX  &&$ !K<|LL 2+ȼ@2+ɬ$̪bW  JD%@.ԗ߻c)04U5±GbkUZxWA?ίt?t/}A Wϓj O|<',&X4ԥӑ\fc7D 4?y3\Xh5>I8(=:=yӎxݎVd"-"ӋLO2= ӃLW2]kʣB0 IC u! y5V#Z*_s >mmqi/OsV-B6JB@EN>\uW{ {| =4|\؃(gޯ"LХչ T|Jw]upت4^C$PCc+ =^]?h uIVlsR&a$(ԼI U >*>`WK >B$sww݋CUmqy+RFn+cRԉ_RN7_k`4K^v {n<ݺ8꫑iQ#ӜQq1F$RI͢o%p UIR֎0veŤ~@e_n^vHRozEWsqM:kgUڀ D>G6ESOߎ_^M:l<ƃr[m>y6wA*2͕<:\RrsaVطNJWL2] _|~5ml]STFX]cwm`?w,>y٣<ӢB"-9Z%eiR;y[e繞]l-Vznl5Q_bQXQ}L+sۓ&f޿v1o) >RڪhbDo[c-}x,busP=]A9 "gK-[(:@պ2HֺW%M?8ACo v ĨXgxxf8.ԣ^"W?T>w~@>tʜyU֔<GyhŅW@ VIITRAyhĔ763oe-1>G)Qv_PB<88y5oԤC.֭81iV+YϻƜ:=3JAj)0C ZxUKA;Hs'+Ǥ1]\>jF?Ў [b#W(,ҙU}ؼ:m̪ŦrlWb'`UX{(mT4ff+|2)`L7+?魜aݕOUGf;6+ -rEYN!r6ÔelF*ElF+bs2 J*) l&*LQFiUٜfsr&hJ[nVc*Wp&|)؊>l}փl}l] ;l] gC8qÓlűbb28K@>_CJ @[V j(؊ZFVL)٪څ?2ls#Zӏ6U2lcΰÌlŌr옧qFDy-`}`}Xq \zÚn+ (u[q2aV ]k[ꥣ7g _Ro _k׋;p$ Hpuntzk5 ֚ HpyQ"k3XڶLED+E=HSv Ї Ho!]|ag8Oqqw1F!>_CY?.+sbktGSX5_=9}rJOW[D>{fV Tw}Ӏӫ)1)VNf2++6DkcP1C&|lp9>9ӆ*ƭ迡' KsX!}v++=^YЙ }>Z՘vvE\›\XHynyl]p&oUV݋s}٭Őf ׿܏Z x2f8Lbk`1kqƒ?Eq!na2=Vmw}Ȗy|n$Θ|bϨ q` f +)*z䆕z]T@%)T5ofya6Y)Ο_X[.p̅Q_`_M[K9b%˯(. !hVC^,iN1h%'obNs+@b-7,-9 |aӰ(fjcDN=ou^ iq)-*oD@XcU0ĉYHw^hR#8 |:X%^NVׁζ~~{KIq.qd7堙L2#Yz{ZE]YYs;ƣ?lL/S.jY8޴(ԿO \Iy[ 3XJ*iQ$[@]aA(. ߀(.@]iDUK4 ]e:l.D 5OMCv;sbvmW7Nduvl*&aد U!H^ l*?VvvvQE^.m*({Rt-ee@S-ulp,ƫFYY7Rr5UTe]M]*ʩ@#Z>ۏTFKcM\2|c*xR+EL;+/Fx &wM.LFtq 4owUc76  _?n }B zJ4);hj<򸑖5iIɩNҍʏKC`R^`Л[l9[]LXz"5?;:Z+Xԙ"1VuNmL :CXef %TRiڊa }>YOwwC=a}BHI?Xښbɾ] |卯zsSj-.~n<-g[+w*{WNUϑGyڮ:4ƹ6jzMh'Xl*M྇XpK[r}Oҫnxncm.yڞBo5_/ZL0{u-j^+&~/oǦH5)ZQ4x6-.RĮڭw#uWqW-[#mYW{Z0=W8x\=n6,LW{Vޮ kzݩ%W ;mʞt|r.=]̷Vm&T^p,CU˟yc-e~Z]jƫhxeR+FX­cXC[[]a*C'wt鹜eyx=ﰛ%"l=֊1-l#l&>T}v# >M03M}aL=`4t9Tp+ol`-BhӦ &I^Tagh/F,f1TEM8} }FUYͼr'+'Fzu '0Z}N9vT5d|Ϳ,mn $@C-e$JWf'y ~w̽Yw.vEP?&9:6RZ/.CVLhaws㕒 Zw?8Uf!9wTSؾjڎ}mmj>Bn'4 g~3V;cW֙{wr Wyqt-[?B|qaϪR>n=\0x, ssA59Q[T>a.{e^٫aεBsU Wf'O/O;̔ٚ]b:q.(ax Fv٥:qE/6"%1Ճݵ= yXUQaʘZNFo8Ke/cobxߖnZ.Ƹ6o v[i`nm9C1e;Ƨ wJVۭNz&^pBfU]/,CiXYѼ\.T\,`0c;jyys#OuӊS=]8,tZT{ktHkAvV ZBXzwEPU$O=C}c%~;r[y{~s^ۯ>,G*˻qB=<|Yx7*TC;NzqRV`smC5zڛO'lL%jp>il,غ3PZVXI4zBnD(h~:[6 TSZ4XjFm% KNoTYepsY KtZ.K.go3fgWkOqamL9 I#.1nNŌGy5LE̾S#zF5\;}"⭶(LAٹy_䲐uʅewSa:UlvnE|"Ze%0{곧mɥÝwvnd/]zwW2mY- zR'C3Cr\n[3zWʾyy節M,%5O6VVaP(Qbc8!}'~U4$.U^S=8U{%tzf͟ß2</3-= {ۤ@doScVLcnWսE_9YZY#R&05_ǜT2Xn;ݱU./R0o( ¡M==v1ŵ8}"'T WQT,2)79*XWn^:S\̘NԵG'/T؏NzOgrSv`gXAf:/fnݎEo܁Φ*fh'RD{3#ڒQ37THBBml p^%8hիm#`U]W:ھ'w-l65%_{op~m ZT<|3Ϋ6vm_#c,WUR^$^'k[{^(1SA2feeL׏x4"^v)2:ͩfjSW6։#XU2 'zأ*EXc`n]+Fԣ7cq=o/nx{Yaq)wt9R>䑟#eG<Ñc.\:o _-Gץ\d7 3h~_̓lu\ُڿ@:nɦs%#cp\ӹ.mf)׉ ?fǂh܇"(aÅ[o/U\rjv8+v1ξE]#l']  ]?vإ/wx+e?ߜ"lWJbrVyOpZ#r&djoo>pnS,^WTCi'TRfnp5Smő~7챹9-oWR״8D8Uq|[J^$3q:mX1ؚOw!LicBmK~%Cnm_jK4hy(vb YhheC\H]‘?wfU?z6k%!`IQ`U\ĪoIibڀ1'#Jg8ʕ ~m~#emJyZvY{)oo|r/,fu$W\qD{wڦ* *8j"_f9}ʟTۊ||!6TEs*W`E/)# L>QZ-EP0#y| vFn\vD+7?=wja6ǵg9[:jN(\v\KG:'[fiמG]ʂz|0*My8.Bq2uXQSB߿$V +h̏hk|t>g_ 1Si!.C8oːއF5E /kIʎَcߙ!vBIPnp>վ4],E f8Pl{!;V_$5ʀ/d%f6w5Vַ~T˷;m6%sLuGpxSA\WL)j:ڰEەԣWNì1kڐ%RPSYڅ 4Z*@?|aȘXpȘvPk BFߺȩ]4W>`*MT}HC!*}I)gKK>e~z3Wkp r.x{rSk\L 86"9w8W}{jܯ^55~ g~ E] ~Ɠ'9ႍ1X5R9W]Y{ ݉akU~+LU!94JiH7m4vݾDW_%exAPlWHҜc#c[l?]D]== |9j5kBU;ssl2cbFg[6*v唿i |;ɶl5ƙG8im~vt<4M^B)~KJM]˫PwN{㹺[_kxvKsM.j;rt<}P_Ol N 0IFp/K ^$XO3* <*hEЅ`0A,A?t!$R%7!XK4}B &X gKTkDYTE ~m))F Mddw*M!jrȖ@9$,rI8kBoOT@RLroDㇿDߓ4͔w3ɩ[;B1/LTrwUq].S+df/%p:z0me*I"͢E=HdNF~&ɩ 3s'qɮ2qLz~ ae`nM!Z͔B{:*zN_8Z;"Wwh-__Tg2PrQ_:N: V;n8G'i\wmyS7oSxrVWzFzĿ^_GzYSw:ϦP6 9$11IsZ{ w&aL;j,u[S b̘%d}oTKͱ&:4#/5SJd~'hVC4ף)栤'9xJõא?7|2<M)C15ɜjQ[,zOfn%u,05xP[vd-Ȅw`(RGf3X9fN&λ"Zӗ̶d|f5Ydw2ۓEp@Q [f&@&6N&FJe#i-~V>g&Ԯ"6B۳Fz7<}M^54⺟9~kyS3PGqG׈mF 9} ; 2Kދ{i.,uU.Ūޅg8a1Mw]bg-8f97ԴXKg})<ֻEWQKGAO[OWMg#m=]=M=ē-F6'*Cwhcp㒒:|ߣø5===n=>==<:u@ G"=QaEꕘk'MD49i$$eYu [#G-32(+;0!{2_Ҥl[B'!Gq!Af!GX1 V[vb14;mSl9[\RbF2ڦڢ23!Ʀ VE8?wݣaƞMԼE˛oiպMvܡc']v=z}_? `!!CG5|DQ1ƍw /aĤ))iO̚cM1sΞ37W۵a\ﯠ>n~4`a"%/]ȣ=ēO-gW< +_\zK/}^{k6nλJJ{ࣃ'~/ߜ8yg~RC?|__W~/7W7Ooo?niՈU?af ;``_j/315qۆnhj|ZdX>.9#ƚ`M%$e4=?ĩa"rAӓ3lY즾ш(1aJҐ̙qb i=&ލ5~oW3lg7pi 8{K}x6!v$zܗr=B̚Ià s /yyCykF)RE-$ݺˣHt42w[G%>3+kFVV1#0sXh#F31jNi:ʑ^SFu+E M&C3ͩ[$)hf32I3&۬ ҡɀߒ) ,HS4NJH4'ggN%\tfQF%S[iFs̟ȜdLQCɌ,Vy-){VjƔ$Ybjxͱ&GR3L;.GRvv=~c4o6jee7u a2s:st)d PBL̰fgS2ӓ:O$Y)KSəIds>Փx/N3Ir/m O,*jlP\SRfJ<ړ+l9)I1=5#iszNqHI&d%LN2'$[l9ٽ&fJʘUXKe)̌IVGB5Jʞ|P=2?TjFU53Ǧ`16D;#՚yɱ&do,9C1:xӥgc\5&&qm9@k=_oN] 1ׁG]ksmPeO!ssݒS͔lNeuәD" MM( te&LM=KtJSGG2` n[GńtuVL'|zW[(&=͙K:khXs&NJOO 9 3JdL7ҡB~n''^R- wv}-vϣNPZ}{~_?ߏo^;Dj-3k ^-zx]zό7G]޾ck~?P뇷_ߖǿ/I$K$N~:r-\?772).V}FnG':"|wvSk'rNw VHjĭ1IP)qb{`21 K"S'ec~wB0V &׸TjӓBgEPNN -љI{rZ_b?AH0) U-5*3і44 SwHuR1%ʖnM2˚4:3.51)8%![LF<1PRlY' 2t-q^GLԓJTC%DS;k}Uw!@̄DyP JFJ=;83#'3=)ؚQn&E&$5!#39IZw34s(p-3lpƯstf!&?K"$) ^Qzzvƍ"h:gM )Sq")ƚMA8PĄEEsVRCaA8~K~L= 1CȤI׸M SJG]dЙh@b x_g𜐤I)S))W]˯.j:g F:(#1&+5#8F?TD̍$Q1X'#$54#qCюaw ܃7]x8GX dC"|3 NA/?Дznq) Sj;'؃ y:"4 F'ej"$"RY(ֻƤ'%e.Q:eaɊdUH5bhuQ Gq _[cQoWE3xYǢ93&Rҏr:~ k9%{V5i*zrf!xX '>QL>*IURk w"9 M !dsPDװ$4$ լ$WbSي1jD8WKjU0[X9LuB{1N:־z[!_7jYrL`m4HV|w{hfCl}klvIKsz4{ͽkZQ{fiNܧ XÃ5` 4y4s=_^Ń1URg˚f ϵU^ x` %XJP@0 > c FDDXt'&hoAIJPET!8F aV4tn&L $HЍ+"!(!x`Z"XJGNph@<.|E#8Lcyx]mQ?$O),1žl$Fk9mεÃcv{1RDs՞>tym2*_en%Ï HS2g b){U)W%99F&WN"53ȤdOT;'^R{2t:Kq?\z+q7W=z}pGd!!NB!󌶈es}CZwN"ŭ=k4}\z~/YD]߻={W{lq&~WS 6LʼnTa ˣ| SvϘq_sUyU3f̞ 䁪C%=3:pI3뜬J3fWxH.}!JONRsC*;nũ;_E\5~=?p.C$:t]w~բU."_5!L={!YYGvfwăYMDsےEۤVOpϿo"KsgK{gnj-9kd1mܢƏrնc߻K?]N?({{)\4ݏ&OQ?ܹbРA"((H3F)bccŸqĉġbʔ)"--ML:Udggs1g(^{`x{nȟ*, d[7&Oe]-_t*ER%EN)bA)&|$E'R}\'!sZK1~b޼yH,[L#q'ǏZ;{LUSN\ ~^B\tes/j/h@BAv#T؛R6˛ [#,9M<%-<קH}) IQ)~l&Qg)Lw R% (7[ _FQPF*u;Z_B}WAfB-#<3M Y [P)|*R), ¯c ڵh*Y,mH_q R&!S  $D?1MElҙ|H+Dw#rڳB.[/[{ct 4$ D:{wekА𐐈ݺv=lX'=pLd  3k#C#)!AsQ` zv_dDT m=;v0wDDx`D[䡛K< B͛V3̈́d#-7{{aAޢwkEށ(||`PЈ6u[nӳ]$R(~(65<ă վHTHDhTHڴ(DPmm޼9yp| +No:Qhlr3oE\ڞu&t1GGjXFgHp/WFõUxc"<޿WNNCHT=设~ ]OTRVO"Qsu@\]_OQF>27iCxy`05T<,6랞+C:saK{ZfOgyFXB\R^u~{uOK^ϐt;wnp qiqQ^^.~G/X7!]-z?򻡞텍+wQCGrdjfQC05t/fr-r&e+|Dwtuk^C&Mnkסs^uMs0óMڴ^=<5tsdjڠ6h^^[;wֆnVqF PйK;JAnwJߧ]|zU>>>>|v`Cu*$@ hPcE{u|^^׭goї40wW/bl߾= v. 6%NATSryW4?GΝڞ?Y2O\pK|Wo޽3p^Mx|+C^aK.`VǏG~S?Zn۶M~SgaJ8qBR[; ZQ2\iii!COXsPk# `חa ϭ;uT+ߚ}`q]wu~o>JO;ٳgw}'>,9t0Ͽ[s6oH\eG~ݻٳʱcP@PNGmR&2}JCܹ.e)GճRvQ*+ [n]ݗt%T_"? yaG7 7 #_QʐϤ|,e!): aw ]H=)|%eUUճuBSNP /qH9옔AARI4d|.*)H15qC_t ϯ#Bh|9u# ._4 D/M1ԣRzş j$vr"/ W qB7Q.Ĝr8A?sAHBRvxYΝR>,A9CR w zĞ2 2h%$o|vt:ʓwW5#F#OJ3@)ӧ#rR=6:-uщ3UALeRh>!e$<HVJC<0{P#tTzԕh~O}v$^  ytZV -t.9rdDFF>20w\(_'0Qjz>C@y.sGއ!+ºt"9}t ףzyu҆7P:ҥKK]vr͚5rNNZr\kw E Fۀ Q<z&PctGyuZy^JeLѣGrG9^|E9b#O-D;!㗁Eojcc,zn}lz!3ՙ/Wpwol:Q^^x_NТNKSޯPb@]}SC !Pa.sPS./u<~@`ڵ]QHW3O'?m'Gh;c9{>|;|ԵǨOD?;ٽ'ƺq 4BIP^]mǚou@2m3fT wy5pƌBV&aE34SCS if?fJtLtLf@LN0k1`}n:"\_;fTj VR4 Πs9E_WJ9asl Ɯ;pP~e\hmvQD}F:oTߖQ#KI?t4ҁ7AG7M9Γa,|X'<􋔁;9T4+Z}\:(՛!b̙b\_8b? _oh='A3EУ`>̕mksqg̙3'8߭0[971qDc{q\-yhs4gZ?C1Ε֞.xi Rcl-y L4y5OS?)aF<6&̷aL d֟pEleu eW̚5+#7778 0n^:0τP#0/͞Ssߵӯ=\{_ 0W1Mqq̯`n縴$崆qЁ(gEYD9.̏W!0662%8xXGc(([<@iہ'{ rߣ<~nx o|L%Y={ L~aPCY? H8OO?2QKӃseKm 90 Ee1^{.LŇˢeřOo?Gk<>3wcccO+SSSE@+?y<~n~YCdzdGHtǐuyv*==} rH؍>ڃW)))0ǃ11cHר]vkDtڪ+)Pl^GoB1y <6Lm۶ōQp_xqʕ+c>78L2EÇ3n>?h͖764Q!>ɣG'31^˘SN4<v_{ 8&(;;U_5F|їbڜ>ҡuzKXNJQ7bISisHGo!KWQyIƟ6oެi;近1P3֭D(}oןo>UO:{ =ƽpB}z}}H /E~^f#/Rz_?GqdN~\WZ /l}78?6 Le3cx̧bw$C!oR$KuT Ϝ62 Ng2,L3A?Ԛ>km0BYDF]0'k6nB92UpwBWWr sw?}en885B>;S: t*z 0~|a|Wt0>|BA}PַA׃ ]ן-8#<ƍynaɝ+妼Aܟ$ 4bNH3ϰ>5"WC^B^jKױ?gC?jœm)?I`1_ bHu"ظ?_5cP?Y8yVIFoh sad&a+rAbka6AF?srv޾f6| ?4c_21 <,>w~(/ 2+ ϟSR iEAʞ( ,.* .,Yؘ`^N T<&P+ X|3^#|(} 4=VMGb<?7pi%靴 =JAp32gra\i6n[3κ"v}$9N:e y9\z1"mdo&an/+Dwu݉lw[rsr7h-bxGD9DNf"USBUDg]j>ZsO;@Uh5Z6wnԌZQ 4s ܀_g8##H ɧt/E_'gVeGlNGw2{]ofcc9ԑNSLcWגROSt^KzTԈ2 w'cH,'Ijt5]G?-06 5FيN1Ne;Ȅ$ϋDe_ɶz)%Z}=YO3=z~H/я^Wz@Пc^͉qv7-t;WMH̪zt;]Gtsܠ{= ~ K.DH"(fRQ&rJD\|+N2Sȧe%ϮRHRݪ3u t~DWz~^ׯ?>_Gq uϋOzP6o7z3R{{;ya"?e {P z B\=8d<w%$ 'Y$%_XKЅ.;~z1̿OoLR-VFvaQ`Y>{'F;_W?Bb(^oŇxU7$e|QQ2x\7 o R AU0%x&^ Q_-LO!O#%9Au`!6uf/o IpoqG|FP^U~Ao֕޲v25֠]( YAL3[lkUv^Q#^w +>_HDvDrxqMg)3ԪYg,N؋vbsY[–Y{{>v7GSn[~5x &oeG5T-P+o^'Eq"ĩ&H/:>E7m{:̜mV+:^ 3Fk,b0VUiUmkx۴-<{ho&{n:Xf9l>̿mo}ʎa>fEn%hq7XU_8a,F"sH%y'ofr#6M7Y*۳h0'U\'GʠZ)PU{O߭1ۻ h?:A[#vEtz:QqZtTʥzPթ-ꐺBKu"ķcaϥ=Q|7@DBߡhd9B9Y{Ylvt[.<^ elRjQr WJ\qǑ:"N "YQ.1Ab1[̅(V)Ek!fPI{ u g<FkAbH$I)!d;9 %)?hm+XaU20_W0~QVj%|6ڹ|>/Wj^ky |-_7Foyf~1~B7Dh'Q vv3<lO @ 0(LJRb>QxT"5Id!oE)&Sd(Kd5ClkzI:R3 :YTG }!cC^՗~'\.r\.WPKfX-D -pip/_vendor/distlib/w64-arm.exe |ՙ?~wfIʝIA@I͛%Kڮ 5\Z$2w7Lukh ҋ˶5mb$缓y3m|9y<繜G!lB;~Ѩg 1Iӂg[~ZPoؔOj׮Oo_sW-7ܓmwλp_e8}o~Oǟ7co|S/C=~_(ĝښػPf/|[(7ׅH"~guEL5)v7" ȳ y+|t_f _Ў5 }[DwhPP!1eI~~4>`\/p/x/ 2+ĿquHt 4f\5Q-WW`D ["܉_Fukkۍ' +*ZdЃy5ړwO,ۓk\A~qAkwI^}{q/>Ӻ&Mm> S~~ƣ_;މ|U۫J׼)I_ҹ#ä>=oPq Wzvp]k\/nN\IGAɠ5?N֠qҝ%IkҜQК5$GAxx_xw/M[Rwx!TEhG :߆v`G{p]t#o 6-tѦ޴BGl١~[sCmyZ} m>I5FWy&6݄2oD7e M~tuM(~ Xl+^m\S~'[{ ?n~n'/~{4-tkY{)j q̰'?أW[Ź'_F)ݙG]yR%8`T!tqL,-υ<>fa /~f;fV=tqakceܷp$Z }rn5p*p yikǬi Ga.s M+/Ge}:׊%!YˆJ#":i8 )ݖC~o~q{ezYxޗFZ%˵/q r+}4(FGy4<'OHOs) rc$|ໍ|6#ƇvYq'-G3&^öXӞ8?ˇQ}X}ow <.ǥ>vs"bM5mky!8u'HmJTSW#lsp6}`{kOL S(\2=?]UV?~HuEq5)u\mB˚5=73㪂93LI/z__~0;ҍF`yZ M*lfgO/y_M4[dzRJ8@߾qWC3uТrsp黪 BB9U 11pK7"cg[nwh˦]rw2$e^6"*RR3KwjblBKh/ޝ_SFlɴZ#n;G8 ҈g7 ك϶n&/.`D))oYh߄Uixnj@,q<[PΦl=t&߃>,L`>(.}מsHk)GM^pz#!Cg Zd7eE;K>W8}S;f|q_j4|-u<|Yh\cF-*ҝm-' #E{?=lW]CkE=..غL^n{um[]w`9)-2uWe憮-37u)v\7xc]fZ䚸d]XjδMc$DQ޾5)A\kPk=4=砾 %᳞ZYGY=-!`Y(dqYbKnoG?bѥ!GKMt9)=r|$ӈPX_BXﱋb#lAнuAZ(y]]<~3b(o ˈ.20? oҠPN.{_dvIF T8Ec @>s/mH7u-+XehЉMYY>.#R=E ]bk+"6M:-%mHc}GD`cΊ"R77TD-Dh5,$+R]}TJzۦʬ- ibXv?e,2'ӭԓS+SR{\+uZ tG߂y}])"/]I9mLO#6oo#2k@ 5_l[ˉa''S<-,i}S2 z6|R$r{U{MWz2썝1^TΪ}'*Q.q ]Vx<$aT2EZtM޾S=#QfCF"/C/P7 vj`\z*FCpF&g)J.G΢nmRU|g!x :'Z?~v]""k)#qLj]L.Xy+Q ֏/<'{wĈ~jwv .L:8i>%¬'D,﯍t iO>>QעҖJya/_^Kxf~ZZ4RjfrV`D銏L!/RȡԱ*^pv=y{R,]g6mZwFFydG~b3]O~ ye/62D#5UБ#:行0_}v%D7EkCm}ЃCJD1-߼gY.8_Vǚzr~k}1{RmlA}{͆qd);SGp~Wmq~8@]0p Qw &e͓~5N&]3N<䫻o6ލzq}E[݈32e}M >C-gLc,{YwN%)-/o]ym={h+Q9mu]9\`DӳW{𵩗Yvstz`.OܶLQ7|qXg38~oh=b.M BHƳ9KvDt#^i;ۏX2M qv̀+U!z_T">OKM%\1A҃Uf^w,KרB;t"0?_ ^lH@ŝ*x^/.K~0S~a["۳g(B>||qpPKJ9}!cF@.3\f%*􁒇}5fvlJg(+Q? OږJo.( Yā#.w֬98iw~C8[; 6gUfS}"|/33N2owY0X+#-6Qx퇼m~QQ잣چ|W?GaY(Hµ݈Eˇ%"`Z?X6گ`{QGxA@s데mi@MXBK[_Xj!,p6"FKcEH-2ͽ<W9 ҇Vg抢`\Fإ .'ց+}yF/ٟI?+)zIK'd3Kk>EB.z! ,Wb?;9Ϻ^g_]V ƫh2c\"WFdSGߤAoF^/Oe*/ImY|V=d}YFf1RwA\:g]?4v&>Զ yCA=}dT>9~ї|}+ykyURz AGo`0؏(c=Ok6t]Jg) {gYޟ91χϴϨefܾl]LGi~|mQl1r K]/dR{Bhs^gٖ=޶jrZ=ohb퍍Ї65q[c]"&.2暁LXB#\i^͹h;u35f߉U}[Jdmi ڨx2^s5A% hCzl1 `lke\rO] 㨉39+r,QcEtI^)Zm"+aʞ[3[CEvL]9wOsaLVk,~\]p%;Dk?'=&Uٵ]jig+:'g{6n/f">`ܞQՖ_!WLeKO܄3[Q Ӿe/oe[ .G5Y4Ws::wf=WA&[]-9v5u&?\Mz29{9Zw&&2O[e&ͦ߬9Oݺ#^U=+iG{P@e>x^أƱ?vx%-4FQ}CnmN]PWD6*S:@4ޡ8SunMbݹr)3[Aҳߩ)nM1«yJunu_,#<Ž OCOH2o[--D[]^Jw7 '╢Ibu!VIɵ #1i!,*aweY١fhvB#r)@T?ҡ^ !/ܞ"2Ymÿ9 v뷥3t߿6ס0tpðǤm6scZjBm y'ku"_s%hw}!3pgҙ oxPXNDG2z2/N>4!E(`'ˊ~u>#,Ҁp:t36pNO[^ {I_;g?}My9Fi FMa],h P0 k;_ga$;|4: %^>P㎱WrBkMCPXwGUm|DYe'Y^#RS!Yu^E9+^<ks? ~].c0OŘ/ֶ7kƷ>~ :>bɛ|c)L{̓O'Gf_y `0gD; 9KH$0ԕwyFq1c#3__XuƮu:cj-56rӮ\cgi$WˉISv<`*wVٕLhsI-U Ҍ3sF= |WFRMngʥ/fwZ,%-4bl,9N=,9/>c|:v"4u8LlQ 5ׅm.&9!HvG@*B1^LOXsSJEΧ [q M|F[dB\4g[ރ/N~qKsrؾ&#t6Юi?Lo95ΛsTd}_y!fX/8_ns6+~/s-صp#Ӎ<Ќ"(aƻrk"ԝ)A#אv9Wu %B,;ϔai56KWw~!_2QAJK߭ʁwE"H? =:P|`6u@Un;FphY輬+>Ajv2}* cNuhk=#<kw g~w~J:kfUяDDYyh\ ;ӣ 놂<93'M}QJ`{ȕʁB-yR圗_q V(6wm4ßjJ?HM&q^AihWS<|c |gK ޷i |&wF{[< @`([{a 4ms.gvC-Bu6N hPT?.ۇJXn 7#[7S/L^iy񡽣 IryOtY=]Ƀ>nL8r?Uf]o|MKl@xk8xV}3j!vMݴ;8q/X]<חL(_@,'N Nɱ%⢊^M,:@6boK y\3i3xg藁oUM 2hk94]'g)o)k;bv8.k;J2;<<>[8j6 2|ܶ?Id.ǰyQ,)w3r_3.<Ɵy^F3NӨ܏(;7Uw?l7͛#H܇`.hIқdvHʦvE&O^Ձ?3qUy"qh7t^s*YG;޻L Pǐ!l-5vt 󑫔4؋<>g/?K<=jmt,8 }JK(uMEg^F:^2'/ψ}X$k1^~IF-|b\(|? $阇1X}aR9OyPX'֊qh,09Vte z6=K|7w9[ND;j8g]fod?l7VD\M [l7NC/oG犦j\5e`$:FቑHr+>nudmS5S'ہ?e۴is`9O*8/ .͈ QH̰x\p"60v:N'xW̳{ ʙhLLX hj,IJmvm]>^+ܳC+D\n^Qrpv~1?5&ZR<F-EpL 1Mdw_=eE1 DXհ px{Mw+iF<޹--Ks+G\_86xA[rCھ:4kk2Dt~ c#3 dH8 \OI"??UbG9V128bNo>gv}ch7ǁ*g6yZ?CXGwGdԛh7mа!\T9Y(L.AYЯ_2/7g6.GOj[v̈6lk׊.F]"=2]:iM]xˢ!Mys?>m=~z~q`]p 8_imxir-,1A< vigc yKj+#w213ͫ]Mh#]6C@O^ۯͪO$1u >(]9)|ޙ=&$|k.>̋ s^4}ޭťY  /R~ߏڱN їhf,n>ɸYrn;۳^A:wru956sۢpZGWR.],6犆gfubx NLg{<Ui~UjN%mٜk^0vs~`L/[CxUת _3M<5QC8vM㼯ຮlglPaNpyue9Rqs!NJD24Q3hK9KK>8bT+sQy}f?lL-__HsyID "㺊m/:uZ+v}*|V:mwƷ{%]|}wW?h".\r=q7]&F H?I 1=o3<;/r[p0ȝ$ڤwzw15w+.xo\;L&o1HBww{2\cNxsіC KùQ׬涽Ny,Jy ~Q ;St4{|"!$nǫ E ""H\c7"+Ep%9ΥNͳX6h> 8OݢG\KsVOa7ʹ =>2,2qNvO)6@}Hh䘴oRDu^5nO)䧴yuڣG_享oY2}mï[Sp9EiS{:QǻlO:\)|WQfcaL܆\ mT.` dY= L2"P{@c e_ɁׂH/}t:q'D^ӕjsn=wkj_qqny!ncY_Z[)iu vq=6HSp)5V|Pk<^{A4-5'ٿheSc;]x kSk\ʿN 4ſ Xw(}4TQ]??\q}u}QMq΄7+2G/vT*98=y'<5 mߊ@&סg\: ~0tU^}./= 6Kډ Moz|r"*kpN@>.^7˺ԢaNG!+ʪDkrΙ%N1=EP C;yD|9j/ud|Ƥ$a}+bH%řJ-5Ei-57ӿ,*]O[,i>paErQ Ӏ#qw"Ss}΁XͰ10~͟{??~G6TyeDƎW&ʚys$dz`YIIL蓜$,W1 ׳cm.mu(jiKҖmf`%/z%lKajKM~-zK[[ےM4qf𭎚Q9S2pE;\t.dmȦڐɷlCm(M}ن޴ej6PgiC͸r|;ޖ|N(W#VHQ5v3$Ď*-/Gj\{JͽVᆚ3''dx^ϣ^,R'AȺur \JmYkGià|>.E ?6ǹΞٚ6# Ѫ-LcW-XQc^[$cr5ܵű^{s^@}'齭^ xg>`&tV56hsګ SF/]~P+hlEl~j}F(f+Z9f햴Hqqg_ŵAehZj#r5ʊCMjc~S&u;]2{zޫ|r#'E>]꿔||A4Y#c8=ό[ro=k[Wm%Z-A$*7g|}VƹV~_ ~'o}4232zYdܾ(I]:*S eYfP' /˽8>Z+z(#j slY /ق:RĊgl'7O^!^iU Dw¾h"Ѝb.p~ԛB}P"жT滒U̼nW4C<ښ 8d=6n$,\+دٿ?3_ۑKy"S]c\(e G6UgRtW YK{R!ϸ;%C?}rǰkvj >>^~H+;E=9-cZٗiaCNj%<ϧzo>cLgP[hK!GMPEjzlIq2d2yr\,2iDoݱH_.CoO@BS(WC]m\ah+;V_ӄ&iC)}YfR__!f^}W7<`qЇ\b&ԡ6Elh@țʗ=^sC-ƕx{|oZYѴeZ\N! |_=!رDĿ=^nyԁZuS,xi__om27SvɆӡousÞV3BMcw-R_~^SQ}2پ9[E[NDm"LߋkoM3D^5S߃'rו`Y?O߳ߙo5Zk-1HY/ KF< %~Vp8`LoB_qN\)6Fc8/c$$]}nGѾ|RFCr,羖rn+6u(w=CTtV g230-d}+eҝi rN{ǣO k=z$_7l0z=9Bm)u)jGmJuYoیP˶\u0GS>Wp=!727.9t?psC]Y3j.5U@ ǚl33nc-͛aoeu?-q[8|lL~i:~]hcMoqŻqyЀŹV:^@tlqXo:Zׯ4{2Ÿ8K>ssh@\@\TT&xX%j>:cƴzV\1;!jOE,i=Υ Gp? RgInkb-ĒZ[QoSDNSD삜fe)w(-LΣn\ssxs-g_:!*XF*J5\B}1V=75a99 KG|fe~S$ogz.]=MAGEB559~L ^Ȅju_$@$6q,3HOO{en'[x ?v;=Ӹo{Θ}؉;AN4dw;{OȹuVEnM; ~ڛkܧHWv0Ž_\H&Q'#,tPw?k>yN\g sO[;pZr.9(q̡[}{ 'ߙaOB;H }M\uL4+9+_GLyI)ysj}2a9gQ_Lp~}jx?!ʃj"ǺOalM<וS~\zu8oΤ]dODK?#=[_elrh+=jȇnр{Es?X9,Wϖ}mwp.m YY=^<rgeV<3?-gM \O3?MO[Y+ŗ\tR'[l%VCz8M}3Jv]tw{3$_λ'V^cc.mꊪm g\{QY43CnZg/\5>:[K5ZfW<&?Mwb>p1'|;6g&ÜrL&za }u7Hǽ8QFnvf2|}/p$[:tu};[׭Z[Ͷ?{u7}wŽ ~ei)#U68h9ʗ̘r=v[ŁعvY{;'zLk3.Fy//ty!}Mm=*MoWE$MYق!9x-c(;aDz0Ocq(_s7%ůs澀YB>""9#Q([!YWr0 NDzTŴd=q{!\{ԥ[nAܱݼjkI\[Li)Ə>?E~\7Ǹ :NOQGXKb)/%^vftg}Vzq}>S9wf+V]~O!0og򌜽zb!і3gAo=' %?¯[=3bxϽ?vg{.SK,AoCWmSk$O4jOLz4x!g絪y @ ۽3zxˀS[ax|9oXj`C1Ө5Eی??~ 2c{'v 6^]oZogYN8>&J<->Z5^bַy;,cZj*F}?ݎo/.^=1ɽ{_rg:7YG&8P sKW6 F}}bے&;SԺAKθ]5#>ιkpV] ;¾}b<HMر8~Sv; F.bgHWtqL{msZGP/mrsy f{qos0υ j:]~9!~f̡oޱ;oKp`Y <]nܯ"]r/կp$9; A!0r[OvQ>kc[gD?"YW6PN):M:w cs Ew[@I]bvEzQ_"*&$?Fw'q7ҵLm{% w$&t'8Or>eD!*Zzy,.w'Ґ,&j?c pk=|e>hO'/#gQde]PV)PMHun'Y Y\9ks= QW,Zn4|> ]g opMVkc wGnYjO!Fϥ4-φ!#j.x3mЁl'vh[ONrBo](6qm~ME/GqylwLeH[${6Vkg4&])zpOqi{QrUYɹ=\9W68qx}4*&,iʲ[Kc8j ,r븏Lfmxœyy_<Nέ?%zaA%nC|,S?0"m/^ˈjח}.gDZa6`2p肟)~:T'b32c5U眺ޏ?C|^zގ]e.7lKc̱oonz0{:6qr^!S}26L4OZAϱO?oob)gT:nqqԛ'8RSlx9EөpΧ-7U:udlr'=te8wGy9{$%ƒuBT NvͪYVKGԺհY1m;ZOS7 i8{] =8*ym>+EjWmPKn+{sTh+ؕ؜h'j-5K( eszmݓqiH!pn ZS@ 07qj s ܮfؗ;U/C^>-wK{nm} 7PScV/~=TlI07{r"u͑{R^o?DwB[tI6ǥFPS?.s{|<ܫ~&oi?b)d-K 5~i>ch[oVL4O'1|39tk>%om1ߐ&_@xhiM|:1I |#?Vی&os3{>o<$e^t5=XtZgy^oFњh<2 3q Ҷi]O۶鍏elSlיnGG$ r޹~-u Vic,>9gyV KQ}ZH sOQs h0\MzftoJ|24˔7!_A-Ψs[j\8!,P#?=%q7-p sYr {8m˕c3<` k693=g$ZNgFuzZjց>U32yy s}g7<"'EsP9eٻ˼YĶuy=o"66 yDcHg_P..rܘ"wZbF м-yB[7ppO4L̳܎EGΑ>Aڵ8'7dM߰eƅJ`:e*0,I7?C:6l ;gy4#g9L)fMsu^syI-b; CJw>0ƆcW=xy9C,\6X!%ss p(1Egsڌٴoо>K]輼z$M6ў't:mS`^t?D d})&l-= 4sKHC{8}~cJoLt= T_,jݖnn8 9|),Cߤcni[ږi}$ei۸ g$O.x +i#ٸC6vt4S}M0?zc:2imPK<ٰQAӋTwy{qt*ڴh]U Ծe} 5-Ϙp&m׊vM2ҋ3=3et选dt/tҺjUZ29VDZlA9c!җx,&\~?8({޾^sz}3]qu^Q57k Ml#13ߐ|+= ,)ޏ.q?pdMxz]1scSu^O̳rwڼ2P?Pb6طF7^&5u8ouE}f7& :X-jX:@0R^#f* sV;Sx$s2gWm8_Cz!a`>ӿ3cF6w_JrhM>ىlsp*%[/>ٺmߴZhaRTY^C\΍ [tk)J LHN}QW7teFCZKҳK < ձE4_9Dt9!~f[~OMp.Sa?cA]˚*V {sph/\E:=;gTfyp ;Zlu_Q8(SaTV .E3Y3zl$wBcQ*խ?,o|܁/vaq/X@/ŝ}3]8Ӣ[na qCrf,BKs,3HhߣhO⾥=vcP ~Ur3fZJS}KmG-.@,GD9IfܸU3U(_D)y脖n&ِN݊truC_XnM͵A⻰ L% ^㹃6ilky-oy`$NC֘Vkq;&'yvrD) Jƾd]Ns,VSg _,LNDFM2 &S,T(/ s3?=|k;|L[ӥɐTf3a]8|CI"|H Oh_Y׉8+¿C.AKgEY;s~]ޛx#t9%w' ͠;DM13UyS+E9K9_rp,竁ˍyj`{fE>Ύ˹u9]}"uki ~k渱S-&Vq/ Qp\&՛#I@}kc}Ёǭ=+tko`TiZT/d'"޿M2/V`Tww\>\,O/oYaKydžyD?Rذ3y_u(7~㽇ӗV/q5UѧFOC#>}ozvS_WzVȷxfO?/|}q6Faz[#~u܇gHP~,2u` 4&wȞqAc?SV/ X}f$xw(},3x7l_;Vtp}>R1p~ucvnϚ9a} bPwmى-K.8l+t"}d>e쟪Gw^<_-,h?ҁKqPl3N1QԖqDz&cL \`veXVΦ|{_9,ᜫXclXSs:2*('~F+:nu`w>Q~FjqóY=|0?g0& #pܔE\/8&;S ;SǘROxW~nWtPe}ZA:?[D1^ rCV]cc>|H27l>=tо.lQiyF@Cq PT}F/R?^F?t?/00G=qzOK|S˄8hE/%yv ZŜF54\*(mi./gI!?PmRtٜ2{XX)71#A;t3[QQV,%Y+t$P/}aӇ6GfYJcFE,i/Ϲq+Rzw7 Zgljyhn=XSBȖ Q 8)ligߢIҦ5VfI5CU"YSX2-Me>d6;Ǵ;E4xX⋵qlwS[ݞD>?<(> 9F $&n#TKu`4Ic &lz,zozUsO<֕ΨM~Lr@̃9`2zMzV|(_3n+.163$x^W6LtHigG:Dt6H{y+x<]IjxdJiM~ t[X1 W%c˥\hRK{vcKz;Ma8#vĥb~=wfu#mwZe8Hf0)yuNzp.𣹪X{TJS _' W~= eʯsf7ϡEq3Y ?'XC#;E{_pߺ(qx.sW%_]!S57JxԮxr,,^yM?Bk*s%wD+YE|p*tt @I1sɫhB$6oi-Gq<zKizLyL}NVgqpjv6kWCJ$ylλH.Y$#.j^3FfEi!8)퍔-K4W0ئw[{)Y7-'Y Kg'l2a 56B:ɸ[q0?_F,UL[][`;埪g:}P%͵tGF0؏~Xkc7i-&ӪdCvuā$}{Uܩ ,zX=M1Ňu;7Y氈~W-Eج4s$=>M},GZ2'albih0\qF8MfA654VepẎm5<'[xm${TϣoFgZfjlؽ4v!&Q C}rD}r/TIӺ8L}̢et)r[gQ{t)iLLSz6x &4=aSk:z);MzFg~t+_7Ǐs71 WrlVd4}/ۚ3D1tL)L)t$duo IWĸOnwLz^S=+bPuH{lXDܛoIq?<;YpL|3Ok5nBЫa5q1ȭ}Ʃ^1w[s,aNHkƻj/^ ;8Iwz˿:uLq$ lo\VBs{]՗clX{6AoL鋆O7noa}|ڼw$BnMufm;`5: Vʅxwk̄ y |ו?2+x6[*{'j n'yԸ>z^#Od\Ġ)m/WnZlNqg;=$ewNX4Olpz?"޵?\q}j%h.-fmR ޷F-RJo[ի \i1dPZWu5.>|G"0 YC8S}ٴëǃּE%WYXN8XL.wV‘]pv恏JU ͥz>Km5˞kywR8`WG~G+Kİw==_\pWGS/Xr2"әө"/0>,,|D웣"zeewdE WB!f}S7㘇TfYύţcx`65r=,0u!ֲe5MW \d䊕yt"͌ՒtS>=%%4O3vI?uNˣqk [I"zO y8'!|sg{e؜zb[̏ VmX#?>|(d.:#=ޠry;دX`(EJ}NZO64In'u$?rF͗J%9Fް%>NP^ĽTĊr,46?lwp~|~tK?!,r= Ty F=>i6¡gy$>Nv Z,Mkָƾת)lEINq/ɦZլn?4^*M+ii5n_4OFmǂS}kOwߤ>Oߘ[w8} MQH8l;]k6ak@'nG(lqgS@}:=I<iČO Eq~O𮚙l6ߩBlz_5N)cք_~AIۿ&OsDlءJy؉-rH<mp[y퐡Wc 1&]߆,vq2_+q?2u㎅4}ٮajW -vM i@H{JCڃF{ woZ 7oS|qo ~\1yy-펆 4Ō˒#u iHz :S6{If3,wtg^i cnx#Ӽ<.-YIYFy&rStA? IZbbt}=sn/|ڸU;[׿a#iGp‡f^6dҝPEGsAI3FCiZhҍ,dG|c9dq2^}'r*G< 5'NN7j zJǂ|ư|x@b7 j-ɬeyg!yqg\lw3_': =fOe冤wz>!o?1u=2vrDءw'3_}4Q&??Rf+;Uݿ,"w鋼toX,yTNF~?="։!c?U?NґS}w 6pBj4A4ޠ>qLm3?^ZrذSL<_ 8@YEr}ľvXztR9iX>_4-&-[b?NC'ӳMxF҂3;=5Lz63A,|Vgӳ˃rl=[|vEL 7N?U VIevB8s'p bQKgX~c}T{0|{aFwy/';^ kVyeRUF8D;t2x1l?t[GDߐ/2!>L|X$x)ʄ{ژsqٷ!+v{V`NNrq̦V;l1⦫ Fn>۩c_vճ~qΧuL8_}V-f8 Mˡr}chg3s;'HKBpREMwS9~|OmبU-fWxgKsRs970χ/h-gnڎ;W׉E" ,QQQ߭x8;ĬiˀK)2(wnm W\Fidi6AejIgebE/8:5P..!3$чsMe8gʛFyA̋;*GKZ/0PQ#Pw!??O*S HD[Ӊv&>|dO59<50H9~hh_݁Y̳u=^1%髝.x6?; 1) 1ɓk )gmt>yP8ov,v  eX.&]`M,X?\˾Xv5["垻>~q }b !q%b챊8^Ptl8W/AJ1lI8eܖ~qÝ[Ӏ^!FG8 1^6p~M1+E}am‡(;3Y0?vgpgirJNȿz>ٔAg [cmvߌ>ž 8AXikK.:Saσ\M47lkk3U~̷{w1JewkirBۢW1'p ^LR8x>{3I[sB~qc_ϯ~w/y sSY&H%]pJ*"~?/_ b+bQ^%G21xD}q18n1ԎlbḲ/ fMBq.]Β]bT< vx`1Y hW {Tb <buImcm|zk#kqGm;MEiqc/O<|YBzrdv,l1loK-#+4ؓ5#9|y:-"zæg/) 8NS2O{zıQrIxM6v 8vYO?YM9oICz {XґZˌit$j4%~OU'c8Cax7Qdv ?K|>]ռĺ"J)c~gZMS?8ȶy?`"戙'gWERμ-K} O&N7UǀcK zVe"?=O?71#=p(HcJLrUagƘw0S"\bcU{ǽxx^%H)oĉ[H#zмorJ@J,kiM$S/ %yYy$\V$(;\v%/73ʥ# e<9ItWw _Tk`C&cshW7ҝ o2_X܇E5ū`/,}gMI(ٍ}7=/[iW0?V/ ~ 񴝱JWo{ĈE,Q̩"=UbY1, ~(f(UJ+z' g`qi_"$H?N]" hY2]@gn}ʠxNL?Y> sO†Ъ>D25(?hel A4+M h"H77Qg n8+̘7+  bs8GV+bǯؽH8}g=Ci2d2ګ y3z!2~hIifĆ) 1@8Sf%vU- >H쇬uZ7^'O6 ސ"o1.їLJ!+.LJ~9r=}~Hoa/4/H\;cTr۝g3Bz*]\>0A49Mmv+It\'*o_,;x47\5De v4ǰ,jwxOu8EzY43U9Vr?$q/IΜ9}q]%`HMd[ʬ͢{f=Nv;jJ~GϱM%{_|?"{xSf*wELҋƴ2i)c<B9暅m>/BKb#lּeQS .sx{uz2? IcccV}3(ϥ[b<;dFRlᷲ΋[Ni͢x&j0/6Gs:VGϾyysT7d;R,Ɍtii[R܂jz i @w'5SЖ|2\w׬ ,+6F~ܑ(w9G6 ~vqDFy6ncsjguQ;ߧ$⬠J(a~ʔ/ZƞE|%yϴd*YہgzeWad_] ?No#WD;vvet%+ ]3x|j&ST;Z'l+.L("MYI[y?1-U`yAR81?;}g}(^nr~V#js7Qu%]eԞvzWĶ^F6$W,u⌓xK,ud\gڠy1Q=(]Dk\-|˘smSQc~`nFΝu6|A@{h|iOO,53aBҌqX)rV;7,up^[k,ܜpl EjqJ3|V}-XnB2z=8{ʣG&iςbvZmaߒ/! ~lziKq6, Yr!q`o6㈞嶙3YF l1oy81 L^TwDbyxq5oͯٳwXf`bH6k:y?b'Z 5{ʚޯ2^f+e֧l=?)`ng9\݂7qB $۹X壒MJV#_݂KrAij-m6,rY=Yv|MIΣhp^K)ui?7V&5M6ך>xeV #Bq[7}  DbM[>kc+.y˨ξW[ciQ.`#qme˭lzd!%4$S1g?WO)z z[F|1xݴV>]dψ)B:}K'_RNret: tɣ$^[~:T/~Mzo2K8 Y=v7az~r`kGx9YoHWtRkǝ ٝ B4L_&DBvѢ=N{غ,5Wr3Qu7֠TR=֊\1࿓}glxE-wZԺ~j-o5./t-|'flk:4Z oKwϲ]UOraX&Qj&l4{oP Rzm)? s7ꟃ8)O)!Y _'iWȢQώzyX0/[{Pf)=r+G9Wx~;(*֍u>a ?>>?yJki{78!c>2C \ SYZx iݘYL8KY}M2eLBkr#b+k9Rp^T5?rO|EjsryM E!x/r0Os%}[O~/[Z+E˿/zj__Dt~a_#D Kt_4J ~ڌ{ܛp$Ě6Hm:E␤5*9smGL\rҜ^q W%Wi!"M +xA^FǜWB"M iqb=B W<+%^Г+6\@ S'S:I5C=x&^}w=Ob/2MA~DcҺ^aߣ4~[o.Ə d'!yiTgZ-e͇ |b"AǃZ8T YR|꼖o1El!xDDw1up30[\٬n8jj`*y^ ߾J{q(ZЖD|Da)ei fZ6{Z9Fkm%!&g3=X2kX%rZҋsرnwki2xZ+j!΍?ǷTmycΦ2'.loͶSka^s7^""6|3xMoSϪ}S ?3>UcrF|D[jbUzw88(ބ֔xS1?6E CxO)1ԯXSԶ&)}>8Mi8蘆;8M)(a3=jSj]k)zG3qMb8EM_|}ǦzX3Osb_YA,wi1}ahCe!+J\ k*pQy/Ԧwb^xw^뼍>E&v g1l?h@FuڶM.ob5my;VB|ԡG~Nk+cbF\[Rtv-_/%1V2mv\ >cpYPO;CIEsȧ}XqڴmF-z—劍U# ߭B˕HF+2ڽ\Q˲E-8$O2{_AK Znɠ}HOLliZ{޽Tp] yR< [Yj"}J}[NOؚ5CgqHINS] y]\`56dΕw۸'b %X;=D0EQݺG \4.ďߴƇϙx^Mu.ŝ _Ju7`vRjvZb<'+<;8 w!ܼVRĎ-&^Y挣Ix0nοǖgYruެ{dv\/+!^l2) m婡ٔҸ7Sw-gGG߸i?"{-^ҽ'0-gR M{x2)GumV}}g?q1?d\8>m)Ml5Kc5Wto|Y!p,v%ZyIVu2<.晭xBQ Yύ'=-Al ޺xO{ ycf/`CK.`a?h\`_?g+๿k-Aۼ8}&l 3% 3IGuMoZ: inKt;ZG},'yN ;1"m_B>fz[I=T!sE8Z[yx< mW E`Ef]fi/l8k_6t}u@"u\^Zcf+7k.k9.hgU/e90(ʻ?(OCO6)}t, ڼ6ڋnks"Εhφ>NMuf=ϛ>5CdN'aM-t^GM]3׿{x;V3cSD/FSEcIkvj=^sߌZGH׀5ֺ IˇJ($m+$]VI*!e$~vdU{1I-LU/`YNjxq;~d(?IR/`^%]鉱S:&Xuթ1Brlm K9eeԟͬ&.F3$aX ͢o4jk*f&mf Kջ a*7N%`=m}mJ"Y&!dIː2'pFz!2eߩ焬/xUi6s=psIV$miW $VՑL?L{*Ax9z.YDokIQ> d'zIDiOa'}=97>>6;V>N}nl*i #.i}%KH+~X~=P?CߥK_Ǵ{V؊oC{Ǵiߞ4jj+Eߙ)}@t+ƵUmq̫~U3<4¾Q`zSf]*9 7j^EyYi EnXfddV-2-i})-LQ1Tuvp7Y!s~w'm޹MGWiYS evÍ ٍ*(hR*G],8N̢_/Ry޿yϻ'{nc)RƱ`caSN xsfq=tK!M?{4i?+S=qWuOǵ6,#SmkX[))'y%qe7ܡyvL{% }RWKn+5 =?Pnh A[7E׎FA؏R'[ݍD\c˼ -&y%IwQAgKΗMSwֲR|wv W{ߩkV?mi~)uj  Ol=<Б^Ht*G$Is_Z>h\/  w;F}b%;uَ.]yN`xގWzn폸߼o7gg<ԖK+Aց]j|?X7[Key-?G"hp_c]Ï>+ ᑣu" } ';yp5'h:&82Q<ºq0{Zo}trڼz+o/_M|ȍ@]R&|  0/ J̪|.Ap7acl?Ա0w.;47"Һp>~@ >W販 /~=W}MЗ\ 7}k Yw'CiX}(Qk6aFk&+XthmX?ᴿ:{gxht "|O6:C">' j/?1]<҃6 j~p^=1ܟw{p#OyW MWiuk'Wo*W q}Z hQ mϾLaNa0),4NaQ~_>t=zXj8 疩tAAF3&}{3׾ )|0(;m.XhOo>]>kg4tv 071=7 wL3}`y=7B 9Wqn_ヮu!m=|oA>OtzShFSz]} 1;b)La690^]"l 8>,5z,|>{(W:& ~`z7VLe*]K?sƛ*;1++g |#2Q~ }|N8<)t 7d^[vsɭwPtǪKuG#y^%Ͻ }FtOOȶAND>q}t wEꨁv@{5FzkȺ([&@x:?Ϯ|)!릾DֽFi: E*O+oUQ7]sl^֙nߥ2娉.|̞G@rt8 ˧Ew=;Z s82i!$Iuɑg~4<v%~>>PYn3-)x_51ý51QZu < |O4:T*Z/>P:DB:Jj:vqSEFWvc掁DBz\U.jeuE|CƔ#@@/x/sg| V#A6 j$㽠Nz;i, gPݴԶ`k$`>tl07鵨g~6ΐگڮaϊ5g؛ hV=F6IHϧZf-zO,+l Ui?\v8jaAv( x ڇȞޟokۂikgA@g#+Q#׫s _Zu7t\%>uI fe w'GV47U. Ҍh+Kt7:1=CZ_$9iﶅj506it+>p.P $_vkӹ"/ ܍룉QcZ/H^{>FO19?~ t198 +d=d$7Tw/ AF1.yǀ= gq>auo^N]p#KB!dj_n@>Cwm:v"̕oƓunn.yyIfi<7|Gܟ,kݧut|uyi{Tң<p>.j=NTvQcmtqn=NIGݾwnc+}ۤG[|6qoggw|t9s;;(']5 +Z^{#oRpv"/6Crnw/qk~})үG#/R/F.lB.jD**;L˷B^_W+1EZ?uq+ ~Y_Uț 9*w*W+x[U C5 W|W(HEPI;\g"r="I!**OD~D5+ o@.! rDI\{dkS%@^zkz7\!/~UC@ȃ~ݑ;BV̵}w_ٿ)'b/XRRzk>nϒ-hu,XڜbC-"B@o FYo1Ͷ`qenYF61&&}1dHe\HiA4&C[j2 d<|jGHo>zg}<^`у{A(CxdAd(wG 80p 4 $Z _@>> ~4$ >Il,?iqS' I|!'Mh6͘I-LDbJw[LvZAD8..HjH۳lhRrv -mң~F[rn~kZh|}.1&}!j=;׏s.nmbogéa4mF9,4&)z!hs)s;mvnɏ|eX T^4}h\xJ}ވݨ>nW4 d&#"Ko:I[[a>bPd+Uk"rͬH^EDCMқrL9v`5Ckw7gT;_5ح􂫜<нT7qS͙ )z:9otvv)lszg{RCYmP o.ѓ8!pHߚ+],ȹɞ5!=>Nṭ݉oP';_E NR|ʕUp"3\M$ 1|@HDe\b-9)7vw)x7"1h{c8^x?rn~d;HzK1W#z!zIRlz}1>ᇆQÐG 4q8ż0ם?#{:(=JCԼ1 = G,ACԼrF0Q!G ACԃnjDGϟ` ML HOllE $Y5-鳜>g%,F1_/i\-̀4ȭ'\7:,,4%}?N!)`Yyhz+ M[wyJђ>y@/T~C 8 mѴ)ք <"BؙE[RVzD[Z zRӡM@> oEO% #LgӜĵuP3@\֐W⺅"/Wr=,,Ch bA*ez!McQ>9Ϟ`a)KdI CX>$LC=L斿@V٭P{{?˝~ӟG?c\'׬-Zls‹K^W^}mwFٛڳw|Q*}/<\}豯>^{7=}p.ύW~otϿ߸L$GOOvwױS.]ֽG^}ۯA2lFzϘk') ̬lSyj/_2o}/Hj]e>.;#&N<%2j13bg'̚='qGD(9J??s'U[("N'B)siyVH.9S# ,T ,RK2B!L4CLzxO AXʣb&#fTn42nz qbr"V#"6 ^E$U8O /b `đ:H Y6"bR=Ո UM8菨A D A!"&!!! #V V"V#"!6 6"6!/^D_D@Db엮 K/#6c=#"Mdz$C*IȰ#ۨ,UO!= k0y1KOA^\s*C>y9i+ EP|6:s7 y#rѳ6!yUItu_ E\y/!(o\y,r5$^B|Qyv"w /Ayr_;1??yG:䝑7""w?w !&{ {A GA[yw +ʏ(?Ay(?A#F|( Ñ!(G#/E~7r+߃ "oBE> r:Ð"@|oD}#,QȣD}#*4QȣE}#|o䱢9|osD}#W7rh3Eg#_.ʏ\"x>{"/A2+E^yw7@?@r CF|,$ZQ g"/F. U)rw=W"B^yțDyC{kg"A. ;Xȓ{!7#F^-"ݐ{B䏼Z䏼N䏼Q/n/b}wCA>y(r o#{!ODMBsuCy CKx)#OgDzFHXG^* fRG^+`IGGb{!D'QCӦ<4 do` k# GQH9!Ͽ0^r3r3Ʒ`e`>V|FEpD†F7`|QOBv.eX\c7RO4/&ʅ?l8)s BXYm|ey&_rԗ?W/'k`$쉖3?G;᥋U+?y| .?ogᲿۍs:I8b2InzwdvGyr bDܮhvvr0X\+ag6;8j?Qn?Y\M .~T.~^Nr'Va|1iyk>[ʛ L׵^^Wg:;Չ[u`d2xNzF8{r;+xoe?%~=os\Oǟ$7#]Gy?LQ߳\*3T>+lD)+*8Kb\_"bI(E$r37 /A^|-䇑! y_G^|Aa5O!E.] y?W"ƯĢyL^b^b>.B+AL;|_]y?1Wr_7 \C1o؄rюrNC<vb'嫑yIyy1O)ﷂ"y1KB^)D'=<ȿj/BQbUFo@  ٕ#*|3ȟ@^'q?)oDG~B"?l_b5b^M-DX Iżj1z1.KQ.bs'Ŋ1o.+Qy-W7 ߅ op6r#S̳Pد Ewb?b^8y </ĺB릘|!F<| 1N+)\ۊu bB%ʟA^\<ψu b]CuZ̃y&.b[&N}?!@ ?\KoA.hF|ЯXUź':'Ey2P~?<&b]XUźQMuV(OF.iu](OB.4D> ĺ&cD<?r/9ȋG" y"Ÿȷ " q%?'Γ!=v 7΍& r)g!x Vؗ#_?8_[olr<ߩKX)N-YN;|>Y_ebJfc7zo*?q2|ƹc]o*6`pYr.s>=1Jc a O5 (B iWf|sn=Kv[NSr A'ӝ nQ|nNl~Cal/I;ڏ.hC?)[Y#M8G>?-G|ˑ?-vo<[nٸ s\&?.۫IYȒ鷸plW=\|"-r*8sGy8V>)=?|BnrH'8"z]uwZmn1>wX .w6m8xdzb m.r|N,o[;Ýw=|'VpK γŹU?renw_>}XoJe8m7 ƙ L{o8XxS:±sEÓKl ̪S==^J?X .e-)oG0|&3@ v/}?mx=CTThԏ)UG޶[5/WG~;@۷'6W}{j[zĽ_\6n꽮[׼1Sڌ= lԝXSZ]-.RCol_OyxqX~ynEW{^:{;ZG{0q.}o4 6E^ri!9n;uvZz]}1/mÐ[YaGh}~M?NjuK9;Zv=_?wܦO;ؾWoP5ǬhCb?BCzgW2|QǙ~¤Ӱ{yPUغ?Ak,8w=-0Ky3fm?J7&M|>Nq(}M?[g`/&2ΒE_D2t[rvqOwE=+O?zm_ƺx9#d=8eO.wKsw[@ /坘ϫw?^4F7܄rr oM̰Y۽j۾ُ?c7L|xJI؋C64T8ϳ'J?=kg9Zy.ΞKfܷafdgˈfw?>Æcz  ݹȗ1Udz>.̗v5ٕ|y>?ז>F[;uwܩNz,fa;Nc2y7~{ߘJ.(#~,L}iγ۽oxuT3gj]#mg|6kZ?ō K!5)s}/ZKǶsψMv%]{ʹΧ6.Cց~᫯zaG탂?2Uߟng^(Y+}g=؇%[Qvh{Ms$\EtK ~RS7 }/-?ۼB~z5/]:6?+gYORNȓ?m;tq'tN\]S7i1ģ}~h{k7};'dԛ>~hZُ=Z7^~ns׿޻;6Z}Cճ<3!ot;ș#OvsU ./ϋ6~p6/8I ߳kȷ^y %{?&tWC;ߚ] ϐƯp'7|=y-4uaKϪ7cz^qВvڞi3: n{0712yiqmmw~헇|>ró9#?[ƕG'{ﰛǜk}!毮C_۽g}[v<~86T57ߎ.NҢr5w4(.\T;>tr՞aE_:cueqnHV{ߏ(g4`cUDž_25ߎ |.W'DzWr_í+mj>,qiC;G7w,;z/:ji}b{>)FM߆~W󸧱UWjwmw 'uuA>-?4x񳋊^+e;Kߘ|o_RvO8`g]AUm7Sݰ֔&}u x٣}~J_-=/NһyK5g=Z0d^ح?w*%}ʬ>zc5+ˮ$9xy<)Μo|ھv荦OS45f3a7~.l2Q+"^?}6Ƿ>AI=֩WLҗ^VOmURN̩wԥ3vgs؋N-z(s桧_þ+?sχ3^Y>?>vً=/رi^.j{_VyB G/뚳xkR#yuG&g>鐓%Ec;MpQ>'&t w/"#U^DُM=yiw$q#>FN<ڭ wIHIg: !;KKe,yJ%$nG%?I>ݽT>=|z~>6w!%IDޞl(ocʰg-?b&ףb-*^a5!o0<ÚƷf?.C2|xłg>f|<}' Wn;_?gUKSr5O?x50Ezc;}# Ic_3{3=Âk_?+²N2L?0c)~s,c u a`Xׯk- ,2,,w aw/2-h!13TPs [ghm񈷯-I.,|;=zy9XTy^y+6_֦v)^c֎٥IYړ:~N=u~69wuz~mE1n ej}vlmzy~]zNw_Ղ4mlQjsL~swڞ@&=[XB6$G|_+r $#ߺڌoJExvvÜݙYOzo[^>cCtI;r뗾p~Pzufv}C7W&kCt^H>Cg7ek~gm:KUοD,!D{ڲlmq٦y}%'J#_2hg>Wqqq~O6+'}? BsHVe!=. V>`6madLL4d<5[خa+1*MbަLX+LhݔaHd1ːhrƐgHW_`;ebyєћ4z3DL4tbE<4KN6jMJR+I$Xxj:RDJ9ɚPMwԤ1p)-ǒEK>}? QʭILZm \co9AKp3X,7 ʩ]}5l E7Fcv5d)cH1,9Y )5`zN74)9MN,2Bw2u2oLfV e3 e|S{gg'Dag=$w>W t){x7o?(‰{n9?nwCj& O\7/k[Wd <u>mBq {*s* |.cj YA}Ef>;0NƝ\С%v_"Nb[ 'هk<0:|QgL+#-"c#sgBN>goTjW@iBFb-;ssy5hzm: sB{PK@vIWn'l$m(w#!BW]_=5xxuU1O} ?Fsy<Q*kYIco/gj|,jVzio n[U"Wᓈ iAFf}k~[hs=:H$O[\c@S?CB4gkkȣ{WȣvD.'o}p?:0Fe?wo8rH7;)P4q1XٷH(I[l$RjWaԺ,n~nm mm >ur@5"kǻP;&0G{שjru%7ZtE/>oB=X }LkCx6ETI6-$D?ӹy'mNmVG GzF{J n!ܷ .[iԾ$=x}x=ī^`{^ r- x^-w +--?zAhF|qb)b91D##ދXmă_##0X q bb*bb(b/DwăO#^E±/D,%7 nE܍>1ˈCя#uq#ZC܄X1b iB ND q6wFb"]jOa(SZr=`1Ys 6KV$ C< <125'Ϥ&-jA2`+tM i ͓ FM9ە#OYtxGX# bqڳػKw`6It{o3$1"24eOOE66E{n9z*٢chTFSz1)$Y9V<~/#dhCnT⳰T E9F"?i]l{h5$d{8`2Uaįybrޢ͉E=DiA oXo tf AnP=fH9zLfG\%\/Q&fʘ{fcnNoB~gѳBr0XA++?ӹX[,1N)&,"gbiJnz.!GH(s,ڏ`HKNn#Cn'%hvk5;ܞfX".G=ΰ۠W~} /tV{P_?q^1<ivm1|˙}cw[K#igUmAwS)7<4!xv U .څsS#6qߜʿ?n( }ѮK>|[=\n+G/_](7Ir W+z#7{ 7Z:E݃ K!OiEu{a0ķ!-[ [k5ط9yI Ypr[=]wa o2 &^_oN7ц*  8u5yp=E?xr Hl{, AI]JH_:*!cwt#}@^tR^/ylD4kpzӽT 3Uо nh:R xU\/5kt4U@w VT'%RD=bь<01\=٩#^9*n& Kt/OTJK \]-IV~ C+w,+ H1Q/#9TF0: UGmu7:׀_`g^JH~K]yslI!?)Ytɭ0j/FLSDs{c{Ai@@NטBfҽDH`oAG^/R^;z",% T,jY)q63OF9=$K PyIs/kDΣ{֑B@񽏐%v9ˉJK4f1#E, XEۥ^e5Lc:0T)*T/68/5!U礊%ҽqR2hAOSuQ~,UOߋ^z)EBUu^RE mɒ%Z_qn !р[y]Xd)^~5^K%5BupR:! _{JvҰX6y"IA%N^jzg!~ nyoPj|MREsu$o7?vwJuyO7ΥIz_o-^/!{|2v `EpƇ~OIK\4?!C)S9sHv;ЂW@kFG***͛7 a@)kKV%?=柯t)ssUFDGw: 1R_}P/oť6 y1˗.`77ߘQu&65531?U4~=jgz@Cun 8}#Q0s |OsOO@3m9L>Ǔ%K"m6gƿkrZ\'4y裟?J!A}G?,O-x',yȦMHII yWX{'GWf'C/9r;v߁ .H_k }SCo6Hҿ?G }-? CKgHSm}\g.j2+PR0_dx)$() %K7v 3s RٍRYifR>ַ{faBD{홙sp\oP >б9 X/ X1<'0c>yT_O3z/c] Ꮻ8JA{9"3 oaTJG%V6ۓs&6a^zΠC PhS yI5Xо#*x c (g3|>Ûo3<Ϲ0gFy{yTa%`_Iq)g'r~)?!獤\Gw0<~g<_~/f*xOnc;'e~,3_gS|LЄ~}zx6$4:**<<:,88$>=]b!!aa ?61Ѳûkzx?::*8:.{yuApXt]SNA#cz"rONmbb"\X(QaCBnpxx>aDW<<:G2@1&:Co(>ʺC;zD9zr1ɓw}i;wN_5?ﻠ=QX`,Ɓn!g9YδYD;IT̡:lUQd(XW ?0J_'OtMrxP7>xls7Mnzձ]g'W~n={򵝽z+}!3_[޳_rŏaݼӳCmoשSoΛ=;hvgO7to7о?W>wgNwo/]߿OA_wnתgOݻ>'GϵgIvyđu?zwǬ_<W_~uL?ކ2Z9\dLdYvwZdg;˼G|,G։aǧ~*d_66,yv{ !C~Mel~نϟ?O>mF,sY0y;*a+5553hN #{O?$Q[DVM~8ѹt"*wرwC9g y/x3d_9 |x;DD hpӰ? "׉]x+~ .e! Dk>faH4cQD駟˫ú4~G psz5@h"gNB?"˸dd8O=@{{ӿ3H?#Bws^A7$qv! )_4D;aL5ш4-ܽoϾxM>}ag-]~88u;6 >'b"SԚ/?Lgt 94GDž hkɼ(^L $&ŀO\:3Z;N{Oi;m=ßzȐ!>W;{;:hh2C/g4=-у.bM`"?Q3hp@$}'dzT8}+Ө'/⁔% U0l Ge20 $3 ǟ:i =' z&Q?׼_%9 g[G>tHZ@t O4JE%Liuu($PGq='EvɞAg >o'wag/g5v ;وmiH*}bg3 йt' Lo=G9'}'2 5߯:t(+?"ЀG҂ke^s^A[rFF4Xkg߶|tL=r !ȑ}! awI |?=5Umh;kLë9#|(3 OIkBh㡔Fgђ̼CՂu1Еc\B| pNL1/h7`*͋3h0hX뢡4<J+S3=BЀ4Rc }y@ CnZf"2iN~W~9v-Nۗ2 l 0 e.{OK3RaF0=gg3LSL2a1Ӏc@.g^Zz)킞!ilݾWhT4lc=3 IҞu^ 2!ixi+p(|R*xdK5jT_ip%Z~"}Ezku\D\Ie& \4(ZM'p_)oCL4):==] { u%r_c5)m1`sٳ[k1}dd$@"B.j*?~# -ђL6žfSAA.K d6 q9++ΝKWv \9Z7b|r!XZ_xah2X+}NY?`a3fH>}IB&NHSLos=' I0zX9<Nyz4R1ߙc^̎W\=zULLR^}Wl(;;&^#[B;p^Iy>9 lZ3Amn ׵FyFڵk>v2R\\ՋG[ \lCACUٙc >̤Bϝ;nCaa!X̚5khٲez!5k;+.nÝA Ca+؏:!G@K3 j̶8O<xaӒӂ 3ގ狵kmAYK.vM-r ?44h4u/bȯGhSr*\Ͼ{yg%77=y #VKryќnIېG xqYeS8k>Z?U?X/-qn=Mbx,a~"(x i&*--1Ļ:mp\ĸV*κGk7"C7 e=DZZl"@` 2OVCq!#œ7^ iwպan7-\g8nMvA&BkÆ cp W{#2g~ /6G ı[S !C.簡B|oZ#c;-8b^xA跚:tp^]^rɇ^"_xݲe B n7 ߡ3~>M6:Q6-] xЅAnw;秖k\ؾs^!_-"co'7N<欓a/uQ܏(x濓}lP&rܕ 7_ވ:+^glUe˒{8 Gu"jSpѦ]ƃz'Q8km@QBuUr~q^/^1u[8". {>z~^Q?~M j}1Ap9?uԽ\] |~'hMq>ƹcf:إnu:1?֮]sCqDC {/`Ox W(qYkMީy… ӗ,Y o^a&އ:C1U_Z4ٟ_*pX}>{-ؽ Z,]aO{R/ jqb*}~S#'[jUK/[z9.nzUm l syѨݪOL.</}B#V ?]_7lug\u%.Є>s?SS3!r~uE]T3:LXP[8j;y晤_~9!C}?94oKdJךȱ-Zr4g~~~@1яуln8+V).xb^{-LxkM,Nu>νr9\\ܗbTz8I_ }%ޜ>?N-H}4,GA'&L3vZv!ə裏H?{r{1[- ^QAm,:ur{q\[98Z"+p3g;H{R8N\5kL,ΑX_iMb 5Yq^K=#Ǫ_OXx}~JqƕZǏ1ہ˅b/u ؇/sΝ*Q_zu^kn8̜9}?Yu/p_MsК&xؓĠAmG5fE/eT3 /]܍a$233or_A7|,W99sbB|F|Y·5 yI~ c.ؚ\sS5q;;hlgn8͵vWV Z VɁ;D ֝u8^Xa݇ug; [hX _|svsOXbuS"B\&r]7/c`x@~>sÇ{%wXO"wGގuNNj9!2_֭['A#d }qūwƜľ q\~ 59? c)Ɯt'PMCO!ɓ' OC_6Цew_/~ǎ"Wo#^ n]㤺p_Gx:k,V wfs e6a؄Gg> =IMGgOJ>w@_MrSgj&OO5;=y,౷v謅 =kYRӒN˜5{fLJ8&-)=uFr8lWmcȬi2S.t}_2YfO<39tD6l'¿c|~<9W3/5d.6wFҬd_MI.?&8h$l |/?oq@`4j~@cQk7&SBXn4VkFeҘMZS)єa5trSTk7)f/h֚c͉ s3+ZsYxY4@kIdXr-RiZ-JW(H[[XQ[TP+*/,.-/iXZk5њa͵XurkZk*^ŚbmqlqbqFqnqAX)*єhKbKK2JrK Jt%x`t>8`|ƩXy2^ތY_¸e3vyEJ'ͳA5,OK$’c)Xm*[`{AH{=Şmϳڭ {^go{:~ G#ޑv9 VGQs(ǢѬTԳxvfIJVdFtr[Vk)v/hc {+Z{]qx94@Htd8rQv:JW4T[[XQ[ZP+-/,.-/Uʼ4eeڲزIJܲ2]YyYeYuYmY}XuZ].Q\WuKX}>C/J}V_W ^!Р5 \CAg(7T zbb>3}f1FPc$,0H>15ulU~lQ)lKlKlG9okG"ulPKfX.Npip/_vendor/distlib/w64.exey|UܝN:, a Dih&6h Z:Q4q@eB5X#:ϙq6gsy:,(&@! b5,@R9Vw}~HW};l[5YL&td09_UI*YԲ>Yi>̳rcOI{4iO?7''':>z'd<ОL9=ogwu=g){~I#-EXߕ}59cޔ`2@ct78TM{dS"aeHeQf,|Yk6 "ɚwͦǡEgM5-g2-?|J_±[/ϓf2-GGMy;y6S?Al2_KyF#ՔW˹pYa>Ӝܘk{bɳ+aUL_iP~/8ۑ6Ad7$fhI$K\v̹ g" OhKA+Mr3 % )b{MRA)ҍI[u M02$RLhv3f qeٔXq)rMкvȿvƲޱXܘOc%lbX~{X~|tܾcY//ƲE s٥r<()'Ҙ-GP+ әzIcj0H4)2ۑo6~^K̞KZdWj%6ϕ!)i'Ens%v0tEsT:<>fٶjHY7jԕ=.1b2U,_mbh%VtɛY;P߄cb\ V3Vm:< mXzjob+0aP{K,?\hʶ5 X z}hj} 7Vc8YfF7Znz7o˥@T@m4 )<: R5&{VnVDk*p@t˾ 58@oq{jFB߮¦ "H.-rBna\vF#d`3C\9>ecG#|qm8 }56;zfcp&LJ;B Vn.Kl_f#';K.JJ`:?ǝ;"ܜykAA֢ Տ2q/¼VEl(գfuWK7^Xrb#'(]7I,ow4jR#'C?Xj^Q+ʦqXWl@Lsٜ٨;_H+Œ}PEםiVw,LBY&qft&)8R{IݹKƗM͇kπ$_wΩ%LRSJ=Mrs-JHE{nIyOAt{7X,=.Qm336NjGHJdL; r$%!)%U<\@KjF׏hzZҖ@|p^oO-r=]m6!49fGX$$ ?$ ԉِ1` bOZ;̦CkʠJ0*}v_!;O@f3m/,=ͭ;BۦX쫍Yg 3 VwgХu%?GyԩcuY=Ha14F/Tle}]NJ]= ;yT*d =` c at;#(%Op4&"u`!<]n,PLb~ɑcDj2@yqފ 8.)CrMA#5R6ehcRD- +SzлY]GGxt3G"^H( ;Kף ;%*B+͙P 06b"ۃ] .)c8 yo]@]ΔQɚdk x%^$8LkhyْƘMԙ0k?ۗARr nY6(;YI kP1vC?9e#~ja$n\;QBZQԝYkĝ ߉ U$]fdrⰈ{Ԃ4+ٷT4mg$Ai\pD<J\G%%-aF D9䨇/s6d?Vr؎\|CzPq@2ڣVijԭB abpvԼL_M Sq K =` N46 |kآ 'v)V HB-7df$>Jc ftc?$Bl#/AXHL1c#5N9›u!>>5s%O88 vnX?  p|ϋRH6P¨ҷHMRMF1gkFG5(RIؒrߛyRdAެ4p&D_Bxڡq9@,7XG ]CΛ׫;#%Q:Z[6Zg ^\C3t✾9-D  _pzl*vjA(FIArЂ mǩHZ|{_Rj`qUb5յF$f|ք0:d$Mv5y)#mDs+7L&|կ2V~E[#񌹙 =bx/V(,W@3h17`S܇ O^ǡ(Qe@%l _&:Ŕ) \R(Ysa81b$#v\/@SAx٭894]xh5eʟF*suxcJ"lr㘮rxF!ȁ}xX:U2vdJTm S6&^K {ҒM~b<#U1%f`ѭБ"Y;bΒSvҢUTݏ P+\ 1Awʷbb0N|\F5jhRgl~*ggq$̈iE ,ɫiIC-'%Qk |vL([ GI ݈dZ{ s_#%,R+ar" XRS z;,9׃Of#= JF\1Dl'o۪n%P *QrS^?c:@D\hu4aݹ8cX P~[ SmwcVub dl>EK8!"Aie6yz$fE VIb2f{givyĦ9XeK~ūTک MK1s9+hk@hSd٦\-QoD W^~1>%7_ zz9wIB; ba>ZԦ!tRT'EUos @np[:V`OIS(( (DJ%`) P^^E7+CI7%6Hp6Jr]&f?۟m[s# g]O4O*:?4܈}"o7 X%\$fT:~JWU\Y( .#b M+vH^ OԇH|2`z"H!q'ܚCN}aB6G##"m3HUm6e <lZ_+7T!B ބ,|+4 {k0u%&28HrR<IAfI4.[f[Ph8*ːs&$5CNdH56Q>f(-nAfrAU#raz>k鍁Ϡ>R}wT4$S69тṳ ?z1Ǹ%;a2޲G6V/:K5 ljw PZ"MfdD̀|#mP8ԩW'Z\/rRwN)V(TJoӧ &s@ulPU"@:L1g7Q[˰65|-<k͑BK/%WOkY zQٙVrAx ?Bǫ2u 2gj|kb wsDWB! ?ijt[wgҠciJGYy%CUtt VϛP>l B9<DV㴤tꐊPb]"Ah_kzz' \.X m"i8 H_,(ٔ:&-Y÷ $LSbDRyCY~5*:)Rhf[q6;'h>݁d V p 70 ( hRC-H}Ӹ ~H*WZ07+K<DžJ|i|im>%_5/SZæ}//4d粮\H9r\֑Q"EJҫDG$|"VҠ: o$2Qu8HZ>;Wc_wLOI"&zL+ru %JK %V!Q篰{KYB*`}=^n~~ξA݅3Huݸ.:?ER*0m~-mRzCOT ҽV y$ >Ş{$+:ZLy-nhB:iFp/¥<'DŽ'G'T\Eڍ 23%MJ 8vÐB_.LR&@fapS &WW1ȏsl9V::_ҁIǓKDl+ƪ$aΝpklǩ vڶ\y=-.'bfUS]lZ2ԛLNEt^SM SճaA8^Ԑ/m\;R~p ;FI0b<>[~d27ʉ c-N5qa ,avb,\W% !-A풌}_*B?AXES~~v=)vʔtw5lO9udѩǷGdTs="5 +'7(mFQ)ukM=W6BrhMvk|o#K6hO%!c$+2L[C3CPeIa@72UPg}ex '32[ LaK:y:t<Ɓ̐9 4#׵F 8@FG(;Dq@@>z$ {'?|L<k3uuC3Pڥ9BQ븇h#RIf})0X1E\2rdrQ=Ef8͢O3&i'c~^ǫTOLk3UIR0fӌthşU;fCo`;ջVV_jXZQJu_Q1ɒ^F^{Է~ďQ,/VP6)1SRT\'fٰ;ɨˉOP&Σ}5H@#rnfnPO}+[&ڒ0g]pr>tRV?gqjxxMMдGQNNnE6:TU,ZW Nky|%-nZ z[,W3oZ\/-{Q2n-+JTH5&X&$uye)Hd$ZL +~WCVCj,y k^{>ֆ20H@.ڑmq"sH>~Bν%QnZ>KہfزςRoZ. ~!Q#X:uP Nz0j@'QiF}רUc,YЃC Vܪ'/~Fx fKU_"b,D~x;ھFqTdb @UuPE?QZOe BWC'X7)ޒ%ʑK)0,_O$Os!{f$F`#9!+2"kw]I v  `ȹmYYҖ\yMe]1|cSpPiS8g:,!™OSl|4dgQ~(&@eW6˷C۷Hbl' ؤD'F맢%;V>>O 1\u4zs[dprhz ݩ'}GOٚyP(~ R_{㕉1h?&gT*Poy|[&a {0'zeWGæs]ntڰC:ȺcT4멯 :`֪ec*cFJkjYcc!*oDTm5J!8D R`vkY(Z*G[hVx . k@XY,hX)̈́)`G!r~{Egśp%"w&~u?Ӗ*Jg[Otο }"{ $虐e <\So9ćly=Z@PCҮX:͐T8CI؞'ϲZU|VSuo|Ofߵm6ޗΩ݆]z,^ $C@nD ~gV+~!ꝿ"JiF Pq? q-W_f{}f7N & $gKʋvs`_ǁN %`_@gPRt}I Ew(] ˔EvK5@&XHGJ6"lt pyDr;DWGuH(ľŴƉ@S#VNH0AǤj\C=9 C! MU= &yK3JB%M8yeIiU,RZ'bkqm,Nj&['";l 6i궽$ &;BC!M֢̿B8)6{ CR5w/,pDsu8o ʚ&O4osP.:@ T:/11,ه1W Dوjf]G1şZ^]!9ﷰ4|˺sQD&$sU&%)go0pJyBfl/8e]Z8u`TގrF7 0'9& :?:ȂwM1e!FPx-ZCkxh)⡕< Xl|:y2Z%hlO~m" ,&5b+UQ1Ł-MYs00;aer|.|N1m@Mve!|T<ʏ$Z^Ϊ}58YVc #Q7UMBYMnbd)'E-l2|t_( B8 t5-5P3+R@G&-n=uo-[`5}sg5 4m՟|}nz{!RBdQGu4)fTop d~djP:By\BG2,b-l ~}SvD}Q;ߊBfF-꽳q˚1e6qʔ--& : BIM4ןЕXmt}4шr 4_Mɗ 8iY~΄7ki;hg<0jdsE-@1Ç菄9ytmԉw:Oae|雥]R:/ԷQU:^(;ص=(1|KVO޼tfa343  *p ȿQaqǘ7 ts.dkMXf/Δ69oQYS+D5#֌`;sܛX+ h`{偫箲U xo):|(B`14#PP'8?o-8>`ΟN^cUfAe,ȯgP(ɑ[c.3˾%^yOzw%7*.Fŧht)Iej\1u̕Idе @׸k ϯ󸖦3ڍºa]ǽq`1IdՀNK4u<{J}̚nvwR/œvöR^9I.E(ҝ#/F<9V_KB(t;4watM vY/w$A0Fvŧk<#e8YZ\]1?6k|x5Р݅yo*PN9t MMӒD ZxC߈^b|qض -|d~m/;?GoG`iCڈ:qܩ!Tmzb`00>M m6l1ϩ,;2@ -|=HSoeM堬'Gmɗ=1}m\ѝekM&3KU.v>|rj{X&޶Hc9Vm}ԯ*!!a~lp/[.c;է҉m;ޏ}|l)6o-|Rt źڍBt6LHmA|#ʆr1D̈L@,j G<ُ҄_جy<&JcZ*GVyNQZmXՊnXTa ?w'yv|.^p̤ͅÀK+ +Wm 霧'mgHf<> f~lo։fwӊ*=݌m'CÞʣSVyr*YNsz>|h`UUY[ !h^ A5 wp.4-'67J[%*uuiJu}U\lp MZӬLC%mԉ{ϯ>m+(>n{7֢Q eEWgjFA|so_> Kt-^GMG:@M4k6$ڃ |7 mS"{f8 `~6j߰/0ꁐeg舩e%fk/2jR-h>ێ뺖 Y`,w02㪿"@͖ w OvJdo=e3/N(8Ц%V0sBش8`'VNr>x;{V(1EAIYIo7: }RѩM/kf1rl a{E)W3. ]^wIF0K^r{FߖH<2$|ċQ~l9)LrOKLtQ%'1{(VQ YJOӻtll*$faDq%ANue<ը{ bp0eA} I26 bS7c>NL{)> y tea+>׸R"gAzo8Ⅽx}x{G;H'[Gwjn}Odw_\Ue| ܔ:^4#'p)r` :^R~DңAw`OTRE,JB}v'or㍶qXetZ6|wGNMIZ2erXMRE^$5yi,q Cv֒b G :%Mu*8W(iCq£9 7 NE}Xd(L?!O@̥ } H8R<l-둩߮`;:(E%})PtNHa>_`FFObn?P/vԋx,>?OxVĎ#GS=h;Όv꥾F;s^th(騚v¾F4$XPwNqRYEO +"˱z=e]j"d>A.nb %䑧՟#4u֤jOG/3Yz1m29&pWBe?(_n6ہ j]ش;8-ESfs@;~eL\}{YڈTxڭ'چip"; 琓]u/ֹ ;3a 50k3N?|?LOL([M{ؠ@7T~$VZLOь^A.m8 ,1Cy(xt:fTǠoYx[Dmx*r9nk5 '.}qHX2/G6RF/FM Fo,ˣ__G*ѽоנg`AoK+zue^Q.ׁ_e1Wyo[I ˏBFziJM{+W-;-޺nN{kQ_﭅Qo2{kz?"-dT) r-n-[ҡ:(s~7G4řցf|:j O 4oz ??k#bg"˱ϲv-]ZfKv2.Z9IX'Z6-L~l ˂hG~}/Xv6 lۑete _j˫QK5 WLW9\<[C6 hoBmËK P!xӆ?$)< nFK<dx )*B 9B)ʒȉJCZPL `WZqjx 1@݌Y؃q&Sp=r'-oP7=,JM `JH Mڀv-REC k-#iqP0H5쮗& UϦ$H΢К]vB:etÓ b?}]XGG]AA|PS'}5{ "\vE9OʯYKEӇczRwG6{xs,.HV_m\Pފ%?􇒏꺯F)F`t>b6Ix&5 %K oE$ˇP34Ⱥ"ťJo#fyg͒Yb*1'ŦnQذSBQpj;5*Gz쌶K-0Ɨg#%[ݑCQ5^BV`El;R=urR)kJhHv3r"'VF'a3;_2ʘe"eDe.ZB2OFX$T s,$}#"b|7)sI2C{]PY(K I7r.Z/%)[wJ&?u މࠋIx SQwPJ bѝ (gح E_&#:Ur4@NÄj$'A/m7!׌w} ~q:##.f雍1*e2z+^(FEJKGyFGj^+L>@"&lu-F4-z\ /,5+cVҒQ}\=7XftW ]+Aom_&|X @ @}25SSh6GuS %f MxwUVڽ(YZO*V.ĬLV.XWށ5ha~:3߬"O=gOR=lk.C0n/u^ԝ)tK?w΅nܵl~=]ެZWeHῑ_RnN9@r!I_"P:&oF%$;&>/C=0c xHi"WWf Mr Jj5_7r/K>Y][u=rSk w&ӗ\0 D|Yr_\Iv@HW12"zV~~Vu3?Pm) v Hu<8 Os#u@ (mZ̸ǸqGx7۶\-QyD^SƖ-a?;ƛBT'0)0^80|/BXH8HW|h;yn^G3\btٛ@CD<>5%d`gS&&hi,塓MIԵ=rzi kقX; EBv}&Jew鲵]_sRrj>3~|Jꮹ6M l@H&wx.ch;T*骎^=/nC^ 'L赗vZ'E_Y_-WJER(w5xw,t0*.䳏to[u5A׽hIs Qaƴimpt"ܤ[B85{/oI:jeǞ# x" ZXN/u~{YDD )T탇ޗ^uIf&lE"Q鲃$F/j\gn<vϵk^ZIm9M(^BILJE/·JB۔/\oFddq-J"oJnaʿ:/;h x:;^ST%gG+  '.,|nk̓qWujyϳVɃjqAxL Yx*|;6xol%H^tFJfAXIVΖ/Pm,8uY^7ZA I:[_/|Fah")D jH"-˷y\dq=/J"ܵiO ݖX#8c>U.);Z'W<r׼P_ZgMQRQsP> IUPyHP`JqVWa0x-Lr{7fT()%o4\`㴘`\=^!iO%I*?@}=r|.f-6 XPj+|~w6p <V/7c2쾎;THZT.5w0떢;`w;;Z78v;K_!  F㴟Uf(/XDK[[~BRVNO1KtJJ,_qwԷ;Q6fvbm[j7h`NusÎ':%/cDaCug 2XKQ, X2j?sDRwx$ J ITܵG;F0t}tCLr;- bH&K6 +)V, ֟#ciJSk0t?E{QZMw@ua0AB$j._kI*3SE:]NQ]{ڻ#<#"}>TxBi8Xq?XE&Cق|9hG/~N ҍwK6\;B|,O[vfKj5pu=S @1/ol:lV:},s >gAN}C=w4;-J:YIkCG(wͅ=>!K0<ܿHE@D P8URD&RWD]͠c(>]F"b|HlݵJhG|FWN/5|J}Xv78@ʶ-[\?yo8S@PK[x^-M$?ɚKf {+Qb!do75n囁Gś>HP,ʱ˵9VV5}JfᵙSjrVM&KEޚKEơ +Zۍv?Y!x!t)PnuKW|އOT|j:6:Fa;@2;qtA}H/s@J搅@14{("a]5.Ovj|>ң-|ӛެvÎ~Ȱ+B6 {xF(wHt`s:%r>~e|BE[R|=;-8,EH2v .C=)N F*(K;`!꺡)bg>>5 ^?+|r ΀Q f@GzxUeW `~t޻EUm{x/Ǩ>P(Q|ȌLZa0cftE]+Yʺյ_e"֡eZ{33 T?{Zk<{9܀AQk]80>}A0BVyz|qYj!(*2ʲH(AeӇ#7}D'^x>}HOA~}k{:߿.m(]t"+Ϙ2jH?L}gesrK{PY^Wb5*Ku}zo&ڗTQ;{=^IQ'Tk2TѮb݄4 o !*G+4l]wS{:Y'qSa{8yS=6݂)xw8猊)yءn15S^rzs`ŔWlLJ _:JGjiN(6Zʗ1"ݔLoޘ!!5t6ddbO+ʓG8`(t^ L\^i:F< >稜]I[Y"OHEcq\M okſ 0T wS㇮<=fW͓7p8vMcSݸ;=X94WZ |Li=%w&e.mkЗjh >7zNsXnaPn4DIz¿λ 5^K@CD-== 35v? p<~HĉلN`y'8|Q8S{:vZ &O+N&.Oΰwbz1P(O᠚тu՝(G۝a߯?I>ӡϙ`OLV"~F{:\7 ȳ B1v%nYrz8 3Z;}2"oۭ-κس"a VU 0 PùbNv;$C\+x_(LW"4vR T f|:8ꙵ 0.+t˼pzBcҚAԴ?]}I˚*Ԟu?ޙqa7 C fv=7GrOORDC:FNJqk:;'$[,NNV`3հ3GgJ>eT;df`>}NY&HW˵y4E[W\QUSvvm}vmvG_WkIV\4}YHVu#BCo{1(ڑoص&Y2H?M~s J`Ge:XگN鸧>v:~?N'~xn ,Ccp9@&~[viF/vafjuo%}zmJN3}`mh>\^*OA  b#ϒŭ/<a)% }K5:A&ܩ $g͢VHj⧨iVF7*V 8|E+4ܝۑBwfh:SL29W!)ODS 9AkM7+z4 >M(pŒC| ~װ)TS2k~ZǟG.ۤD }8ydpn&wikxPӥ AQƘbS >}`Fj(akbʵu1U5aUI\3~4 (H} r)J<!з y1IjǍB>8KC^㢱U=~#Ԑ'Lcuf~ėYP/k.1DW_ us -q`sj9\l\XEUW=%LUikbů$G4?}򙕡K>+Uo脯^}ڛ Y"]Z?^4M`C΃2s^ ͽWfq +~囪 uأQF+ֶ|;\l3闡1w\eLdůu{/1W07JS<˸h I\f2ȹreZiTU?0K,cxc;0S}˛`a i-}j.4xϮ?rd,Kx5(? 9)א3OF!IaIwmJ]X&i6W^qLJ7?(Lґe&ڞmF0lP7]kXdV踞2H)'(&@p-&`Vyn2?C峡ٻ4g2 . K}^{n0c H0/WOD{`H7zTYOWzk>1Umx-R(mٝ:@HUԹˮRZ):wC} c`p7PGewc ]tvj(Y|&n7 P1"Nvc^D{0m;Lt c0Vt ꕘHeҳ h*۽<  I.TwU+q w"Qva;2P >-0.EUj)z䗖O$beQYL|v{LJBvvXFЮ@h aE{2V@XaU> : i ;^6PݭvۚUyÅO q u=s?t>ov "F]ÅcƄƑءNvAU9߄>  Vu:vdY!W{Bo^tz׽j Z[D30e8TL-OHe6. <26@fl#nmHD{G~uW}}(u'zVpD#{.E긿cZ_i,%ϧf)}?z*i6?^VRd0#䭧i~`=S ZiFoJ>Bp T~lM~OkG:K;sN МOc;lO"^ ז: <$q%ݒ~ wpPn^ؕHpP]y{ᆲ-?M Nzq/K"owݖ|^V[k1P]L7JɠڌTg_y?[Y}L]yk]HEo@F{Ⴏ6K4  {A;v&cv.a0Ԯ:~*Y Y8ja:Qح$%sxQHQa%yo/U'Xʄ 0wNdB46_ +T{,-Ny`>u0 ?6zӸPt00]D2$^;*:k@(Py8k?x&vׂ``336:p!3z`12?8ÏZüo鸹p;'e髻 {|Q|ka“S\\=I3ڂB-3hp1}~w\){hZVa'o(\}^gu)>-~XPwz  ]h! >fX)El؆;*`ǁ feVX h@8zK VTqT#H^64pԲ^8<փck>{/IR|6 dxjn5 FTנg`Q> ^h7;~P]υV`?ԐcT`6H#B-wzSr۪%P/b\bb_"%"X/Jx<ă.ɃƛWrj.1 ә^\CBD-p3@7Axi0,Jg]S]bk).o 帉= & j }_%pVE;YtN4̡Js;,~ȐH C@v+ΐxE0 !Aw3dX͐,q CR$2*f3L\bsiM [D 1b"Ñ/bͥ4^pdpzñ]Qx%xxoKla8d }DvMq+@qqUxY,g8Ufg8L ČRosk51I >6r4Q}K)pT**^%+- i7 Mdx> ߆+ ߎ6$]FނxÏ ^-2Y oC<"w >]3+dx( D0*uqyYIa81܀Njh9/A| ó|kjr5 /Crs^7 nb&5 ߂x"÷!f8"CK萖*lQbC 0 -JI`6&lf6Mf d2WMؤ3NjhۂѶDujT 6'rf 6GM:&flMf3h%f3f a6`57`ig6e`8rO%f|I;"7߹ ~ѕtdQolt92?`YBI9̏ Մ60;j%:Ŭ{ n pa7N_5s*Ty?wV\!De .{%1V7;UhJ{qfc`>OȣqBqA ɹZy^OWF`S}cي9K=a_܃ynD >cH7-.P0Q:hc<.}\ǑדGK~⊒W3Z 0`aY>h+$w!`^₌@- Pfs2GA(4m]`+ðxqv<˪]Fv2X» y+Jxg*n[d%l U)@V(;mA?HV*i[< 6{ݚ{V)R]?:? ?CG:Ɓ7z 5ApρR9ݨ{+Vo, /5 saS`^Q:6~VT33>ud^wJ*򯧇r>&1L,Og7&'W2Mһ=CUKʯ1܋j^!-UIxUƫSs䲦cph&S/NJ$ޣZpG b@6|}u ji%ekii1Ms|qH7pLQV6"ĈE'NUvRp,1 }5v .(bjc#I oVJ쨦~NbD$vUo3D#_^7Ը.|΂՞QK&u_@BЧUM(I|+ 3p;H&ï.Oi/a?BPU@&j sfNnmBKhza13/ڸ_ApP#]xmMRTC]yQB ]!T:fy">h7JgBuK蠋IQfx9vxNUvyVqRg»xxGk4ax;W6{\3p0j./%FL;MۿU WC~f̗bYJ'1T^ׯN&G=* ɗ񢄓f 8NGepL .U5*9}A5ٙIzg?D+.J2 P_ptqxf!9Вލtx -,~/Ẻg2fި2ur&&]KA:&Mjl@U*g Gc_ٚpCW;P flbw{Qc˘ý}b2|^2xh{JWB|ۚp̝ s Ҧ?i˿*~ښiϠiגTU(b̃1-T9AtyUzq 9&n6nsY_L4Yۋ.]C}bH_Hu1 ^qCvEf+ֺ=-K(i 纂d'Oŕ1ႁ*$ߝ#+GjdY)mYP]\i"FVT~  <?Q"Mr)ߠy|qAUӞ;:&FIse!FiTv*wrwuNh MꜨ뜘tN$jddN$aOzjdEz#M9a2nm W4.1{W@B@MƳ1P e9cT%ѬrX1Ɲ]+zO6wc_<8sf]=CzHBmv}iUi oNC M~Lx۴%r,kw)I\2[ZU\E,v)UUGk=9LE]\E"?p9a>ITv)-vU^\+FkT+h׊1" v#ӈ1jQpx=5[~aZVGz4z:Nov<77d?m5WNA!j炌0辄]Ln |*1/ :#@ ?Qr_+(CU;u^3LJ.^U9.Ē=x^؞i2)jfxQK5h:=ў!`ʇ;VUQuDTW dUMPU@u9]e@hLSB?E„4 G/:l=*gԢK sqA`hG&sLLᄾ 0HG0S'8Zr:LdX*%ըNbӫvv+U'>W'CBt|8B*GrJ9s9]:R=TGi+\&U\;1W^㴧F 8v#pکCxYcw|/-ܑ"IwNICRX7ڭ9bIZ#J oŭp<ۗˆRDHua3SfK(:PFʕF MhJo pN餗4ʈ=㨶sOXe!PoN&o"EnS~= q.90S/jZ#tb!<q_YeբpE5Sť2"Ce.*J{$t/>wiiҺNLL颀yG:q^myҸa l h["sXЩ9•ZP?՝e1h7eۋ.FsUvb aߦ뷠G$SwBm@鴧47G``# 0 q. q90y1ڧo}<K Av֖O-t@׉UtS Q[Mմ+pRFڱ@'RG\Bs;!4Bie*?l쓲PJgtfe6u٨Ɏn! Z5'WWK8`fB[Pcf`p@n3>gB~ @LdᔕKf#υVʥUZ%"Y@] #_ql? QD~YyʸV?%s:G;\CI&ɱNϽ\3 Z`[!K.ҫ?&]yvgog}fa9`VmN >Dmns9I$.uE#X62!`5XhksyOkE*xPlBB*T6Ġs| )j (Uծ/;BVipOKFKDNl8%O=u0F'0QIjyUu5˗c\C!/nZ{Ǣa&vm$|KIY?͋1Rv6AlF7e&IuHHNDSd Nw'83vqݒO7\AuHŻRh^qJFz #SAB zM;6$q_2ʋ-4aJo|9fC~Q'OW;}rQE>=݁e1 D6pHz5Ȉ.Eg|6IW͝ϫ^SA&&'?HؙPġ:@I9& K"Y@^7TP]UѺ ZUuvŘ+Ru/:ǾH4oh2Jˡv lRq]Ϻe>ܭ$mA7: ֣wYi3TEf kxiJQUmpD'"=4'b' >ZO0lѐ|85QUGCh ;6HɅ宔Ѓ.ܟv3C p j x%7_ƓwXLɍJ2mI^crjcZ}-J ^T;yMJtpQ'|$>p/:Ha:?f 갡>OrF# 19К_clT?"Ùu*ѷ !VF  $aozau˼Wy_t'/PQě1ivixq Qg[6+=Go<'7d@2}*}/;:IPwp^58H;/F, ĵbgpnx_Ԩ q-zY1Q|u%xvO6ױH?SkL>e>ԫ`96vWG$_G8D>m<,.CiRc%q3髗һ?Ou?L2k`qFC ђ)N%1JXHo6Y >q+Il: č8 T'P;*'&\R mKsfIUe(^ڊ`˦S}D{犟-tKOaX^ĮFCY&|ެ\Tfp@`R(;Ce`tW$O:*Sp"qi$w9c4H|-e7*wgB)G!镲,0 éFFXq<žԒoBOuv臚$w<<@;l؈/^=9pGz^àD(ݻ2@*VFȽuoB+ k蝷f/UU}.P+bjOT0zPnpĿ =oucY[&P  D}HB2.5~t,MBUAFyl%Zz$TO70uyv2Dkc! TIcGUpu:_C_X4Bf-`WUm=e$~#8[lM|[lpDY ~܃^ầ-A)S/=e ,nqOfrSpBg:$uOvy{*EnM$Ow~QKLN ëzMXcn񲲷qHcVn?sg9Gsp>a9X~NqrMLp}=ӮAJT-fАyݽ' e5[>@A%RbӗSm%9RuRCJXo<%սkt _9I:I#8uĄ\7#I!ڈ;)-D 0^5B)L*B#79}B}fzOmƁ->u@n1f 0R.ˣ4|Q)`[J,\abLsRpB _ 7d/~sǩ>!+YQ.FKFlK},/L[S9WSz?Y6Y87e@$LBv5JB+MS4(A9tl4-n!u4Mf[@ٳ'ʻBةlSn-!+˨dKypS<;ue[<tx\.%{XWѓo|i[r$h/d:Z8W L'MK3aɥxe')Y%J*+dɓ~wyT!\髟Io+`6J=F3?#?cʥ "K6MX\dʥL2bXV0P jڻY԰0WȋKltziXr|2}LGreZT4%PUQ# ̐ "XY\qCny94.XֱQ (:ik,s-UΖe6GŰb\Hi#M jt0nO?T_ۿq=wǟ:/t]K^;?!O:{ܷ 0>z3{zza=x fsFxaqAqnɪl{>bVKXWb+9p7eڵ9gv1Y%e,d:000>tց W3sP?W<ۏyz_|zT'.WSR* % DT<+/" ιCuu5t||yjy C$mL[^SDTY+21`vS&-37 ,%{|թW^O6 [sBf+ զlGqN-c -j{j)V[,9{By&^tσUg1, z|6Kv:VR!q KT*oV-Y(򋱁[Iq.wcgS&ABq9JP^PS-Ӏݥ6~[$4hU|R{EQ4O/'+kG(Ť{9FsR#+y,,,Y1toɺ2\im Sf`Z iuіfY --(g.q5w$rɀ 2`HHcp[+?k8OBCT~D5)68 U`[d#C)-СEH6*DCHDlhr}*mG@*!s :vk1| 0bU)HXHU$|RhG#J_jƵ $jA9m Y xdH>2$q/xk |1% υ >Z(/)/dK']rU47h =vHO?ˏDMh?0xx| kթ| oyVG_CI4S4S}R$!!x]XLBt:U0ƻódGa~$ 6 %40K7Hx|A$DN`)^$XF` #4OԶWEnU f22 -aXWU<i&+zESw$PPP\ 2v+aO=y >yq>|.BzB-B/$DF j`@vqa *u֟ r)\DCaa~^o24-ߘo`\} !r8 r?D#ъ$ר$:jBj } M| Ul'[}e~|EȔlB̋+>j&PB:IS_-na?P}KeT 2 2;dv O6Js7}rS V,v' ":<۟ Axw$ ,e8H @4 i@?ŽCYAPa؆A[ UA,o*W+y r4om.' K-$Jwب 2,)2LtQL~PgCB8(?C{)dCC&E :~_*cJ*c@Eb#mְ,hQ@}Yީ^Cf|r %Rءl;(o Du,Jn޿ t@B?[pp*׏^<"&+0}]x(EwoeOeW?"R }#P_"A"'A@Kx,#$L^rA^nU^Z~;E7\In#mt!>N@4穬CEږFf(';aSɟOYE|D X#?/d*cz!'=Z7@omW<~$^5ɇ$Ie3 PX6WCbX0f#rC &Kdt/dtdG5v aeKAȒn{%Rߓ^g?s{bަ&a/&q> -m_Lցsyn2"Mm` w3l#)6ha! t1#<}gg//0j22hKK s i%Hb6%dWnHJIŵw*/5: - -7dߧd(6; V-i% r-)6r+Y ++[LB4K뢤%d 2 /!&/֯͵nDym*<?c.1'iSJKK -)v[! e#7S{f) lŸS+‰__p$|dWŲ޼VH7+ԣ21}.SDg)JV/ [`)*YIfՒ 672*dXj˕4X%v^Ke=V`/.\rmd\aoehDCL_U\}YŊ )yyߧTgYXbK""} heVAD;SI u& ]蒒m;l(zNy M^3-^blva=-]h-(N)q@ &h(LK,cB i=vbva)Z]谐ѴP6݈&ZXAZG[8%!f*F$-m!b.JC;!e~*'ňkS`1CӛRTҶDqeEgab%M)fH^b4bPE6S^gᠹg8+4hԾrcVj3K(3sXr! gOl.n)^RFZ,&2r ,p0am%3d/t#Y<($ fͶY\| <(VKËI6sɝǸ<SBHb?db=vu}p-@񻾺]_yGC?58B_>w\:97&@fų [>'{s(s{lu\$:&޶"k ùS|I+F j֕S ~>W\fPпO?~9}_Àg[NI[OL]$d:2)۽?p7qa Z90C:5N0D9a,19a$T0xVѝinpvpÍph0c%>C80HvwrM6pXa9eZ90%rhPa<*9H7"7rvpXá\384pP׸+fzueNjY0#J^ށ|y|3yckΕʯTe🇐=^.Y=הW.6[kzt.砂 <}%> x1.0X8~:,\p5Ӯ)q̏~O8;y U@3>VMļL: ~x :?I,,KG(sN`|F%2? Ƃ>h>pŵO!Y\4$wY`ߚJYXᵂ~Op3C\~7|aKvf2?7t|XxZ7Ao9𖁟ϥ0{%:#`o0}:_ 90n{S`D遴>a1g"qX,~o.ÛPx 7gBFX=a'o'i,=:iO|My](-*3*oxl \s#0H xs0>`RF'`86+0 ܚRPxK6pxNx>nhc,L,-`ylw? pPg"%7X << px c>oP~ Vqx0fx<0!^0Q>yY4:`ns9C#nxSg|a5KvCi]60?V2<xOpBKO< x!UV3>rm[9 cOg38#{O62Y\garA, &6"|/ |Kb6~͏@{}`8x+X$,{g-?}?B o#<pϳ|-8gE8Eh>ƣ e3c> o>H*w>a]>coj^7 X po2xଷu!on&GIf&' 3A:1Vv]O~m) pq.o9yGf V,jex'LƲF>XNA `6Li [~ #,BӐ/W\{So ??h988V#f8=q9by@ʼn #+m{}VO+ľwDw%#~_TJ@IGAOb]+)Ş-]iv"oHm}wa9^݇}|/>URiD ~hnsF)f_^֭>m|̡ns 6ǞRP`Joyӗ rG/^jOMW>Ǐ's!/&p-/ri&O]vF˗/zC=˃yժxXRyU֬AI/^f0+Uh/3GnK̽/_w|zF /Pnb(S?3C$>I;LߥOi7\;x`'@FpWo>xQ>_1;Ѕ_'w!$恚?us_|voH'v]:\H_D?}sD)Ȝ?Uʜ)}`.5aҰm3Ay* kxܟg}ʉ^oxU;LB9{rHf3Yp!ۻxCCyg+Be>"gΜqɹlz}?;!%d=Q;g&HŠ =s$wLbm$Li]wnN$'y5鯗s.l'Tx0)DK~W

)f>L>hZb4)ϟO-ZDnFtR.w6Y|9[IQQlXv-y1uɤrܵ"l,ђmFT|bٱJyb}["cHdbDfȵJd!d/D柒H)_J%&eg%RQQAjkkɽK|AC͛7-['|ɫJ۲7ady!=z?~8q|g3%_Phoo'?~ Ettt .PYk03JAnti"YOVKMҽUEr\:*$~:7A!r_&:¿!1#h7Ax;?@!w#пiAo~&0o:B%<F։Dl>NFo%RNjDG@xv3Zxj_!1#P%|t& J  A~ρ+!| ?_{ a)wzWrD@h?c! OAw ݟLxZ(n&vT̈\:ܔ3qcƌ3gLAgg7e]Qsܙ@^9K9=5b8w75ڹ] t7#ӝȹ3;:rPB̈s0<П;8snQbљ~͌0 4ƌPC".\?z1|]>`JY7Wo֙g*{@cǙB9 =pQb~f ҟ$W͞=`rϼ/S3ACgϦIrOQh&1sV;[?3Ӝi6y*]{)R&(o+NrϜ2!4O3@ 13A'x+1erbbJ=3sv^r?MDF;2/9_)3A\;Lo^fyf2!c bH_G~rBJ3A4ꯝك>ƨÙ{8KR.U6H4ks{y{˕=s=Ns ,u9e3HMlW6#[`Lc,>&<y֭[X__>l|< 0Vطo9t3JHv3=FZ;!!Qv$@T@T6hk$U!-"D$ TR,l".+DPU7<$3ssy޻WΞ={;?OMlpQ_Y[NlDuutѩ^N"9fY#RL/EW!;6zS?FwYzb=-N-NVZu7\+""Z-ZjT暿VV:"zmZuU wn _7⦫" XV݈_U/7BC֏\uzj׏}WUXڕVW7"RPMU*_zWUU֟+ܨ-7~֩nZk^=wͬ^ݜ:#u(xi !e$L;[a;׬c\JxBBB *~]J4i B-CW#:{YhYf|wTmFJv) +~ˢׯnҺuFk׮_=}5XUkUk?~,?7(76ff͚>i&Yb(||r޽{oٲe{4F=zEXl n;vݩ]46~70aƒr ˺ ÇEc5jh4ܷo]Λ7oO?1z׮]矛spScsT;O?W;k8qB~ß|Ɋof+)Ϫ5Q2bx' v;a_ sTOKޚ| Sׯ7#}_m΁P6B3 ;3gj'S|:|1Q7dy浑c&ᇲrJQF?x7]ٱcy  =GGD?iH"Dw+{E;Vr!wz5kl1|Kap^h]^;W_}e&9^\DbliY"6*D+ {C$ SNx1/o兝'rW"iMEqH.rH-"[_~A'5j(Lea8(X#`, rcw5g3ݭvQX[*MTnRwO,g9W!#ꏄ+^ WȆGΐ{ FׯER:߶݇CpT]zk.~SkժDa[JY/M?;q{TGKíRJ_3LpQOJɓe,;0 Zcx[gȝ_Uf>glR>}nʧjqK~ƍ=I =rYGv~DDIRzEeHgç.}>7&M6g[u. bW?/}jdaQ2oHkQf)x)`>cn~WH=pPPh$W]$B,p&[|}t[c:}~V38X}&]i%~ qV;(IG,.e#[-x+yy0=O;ϝܶg&Qj,.5ԤI0Q?v#2<ڸ 7F-d␯8WV/G~_.c♬edX8Aj{c4ȿ“ }nl;>#SmMad⠺>C~Cv2;V2zjp``Zb&o, |qsꫯ qn'Oefj⠺36){PFF˴V&*O*c#0{aU\'|R,X`)-L*+ϊ6sڤӢyVqTVr4:!Mj1^_~+Z SOGY>}J^=\VyKq*G >&PY}9N{:lV08B]ƍwxԩ2f̘>$%%k^id  6ą~G+##y ށK C+htnVJMMOLtP~}2d>v, Kn}@GЇ@}gsg"o򯲔=zN: ۵k'ݺu3plK.F|'GdܲELjKYfͦK,Lq)#Ldz35Am߾HÆ {(In#r=@7&m_IM6 SC|MnapΝ;ٚ3gZCs^7z}bSX=@ +gtq1 69OϾҕI<[؂>(E> {l=; M/c|5AkSڶGW{_ߣ`U39G8 FgUNM,llo!z^`Y/`7+bݲalx!CEmlvrv[@~ȉ^gϦƘuW\,_=],  Rmd _[BMol A_G9:4/lD ą#5zHy#nu9>mDY~w'c?u#7vҥ /y:o['ny*Tw`/1;)'̬,s?xq=/ Ƨ.QσXTgp5Oۿ7lOa%Ѓ`=.Δ csxB|O9}9&w1v;*s.#~wSDq/?>.|ŎiNa%ɻ[@gpDUhP¯V̰3sg}e:5Cr*ə!Cv9N!Q_]c1t.1(`}׾ǵAcx?F#G8PTϊN"></rNG%X``}#wJHHGX,' f&Ṻqw?>kbjs nL7碿BMZ'GD ~.W7;=f̘iӦ/V݋ 臘M<= O9h l~O˾zeKT8g هg $olcfk=<7}(=~rLS487'ɦF=ݟ}'6#;|6z<#=*z xܺ|?eĈnr$d7D{|<{41!oݟ+  c?;W=rp\ǸyL1Og<)~ƌqn89ȠFM5ϧ^gHz׆NtO\1lذ#Gs^ `P_הg__ L}~Fu߇t~˹o3gqӅzF뽦Bn5y'NK/"WZ`AY(I]V'>|x㓡ɓ@sqr`6ՉyLj[++k| ujИJu oO"|,vVǙ}_׿uttқNLL~wdm.L>~LVmk36YTٿ R6m4{ndd*#nr T!Ji?o߾F} ~_ݭgDQ} l8l\h?kAoj t臻 ,5kLvף0?iҤ8sg`ӧ]we`u?: K\xq3;Qcs-<ænj^p-/2=vŋػx&?JKK3gUm]~Ak&λȽ죶1Ed֬YVmd{ٟ}EK2FӲesw1婁bg}y…W?wM^D.dJBFE :绷 }g nhp? )3g^sLmԏsyα; ,8kWz͕V~ZU履n:'u]*GCrcգ9H}AEk|=sYjkib8X–=/g">ݪaMwω|0{k6'rǂ|9sGu.6GjQjL {s'GWrrH͕f(\ZɁgߗ3:`3 '"##ly'1 1pc0ċkY=t#A?Ϡ|Voko,xqYxƆA]e&$v'n'o wp٣NJ3gxgDK%0/X#z :S`=9(UhIDd[{; /Z#n5Fn_z8mb.=uk|[>ZI'6vY}HifhAԓ<߽aÆsedTZжN:eL{M%JNhhUkO[ĜkWg_*8+Hu* 5;W*9+9]G[{UGn.=ߦo^ywh?WkouWg$:)N]-Irt_igtlN;k r5NSh,UWV u:'N_=Ows+ߝ?ZvXze>@Y5ou꫞@qSŵ~:ݵNC3#ͱy/`0\+&0i@c>8z}g}\ eR&`G!gt/TN==^ R*1E{*OfI5륕 a 7"Gy9|r+{$ :lPZJ}$'L޿='OOn8 /adX 6( rwޙsPZas}'-a %WI }ҋ?t|P?9apBRhO2c iaς&*nQQQGEXzҶK؎wޭ:Whn]rn--Zp|A;w?4oߑ_<'SD90.jVVym+ۑ+(/tAtѕյRuQ]1K\u t]!]TTBuH%󨧯'333ݓYYY)yy{oeoUo7[mvvv>M>..nxwxwy(N{ݲfMZ#+8;2yvLv.ݲl)9s<ɭ[578Rߣ}sSsʝ~;PKfXX :*pip/_vendor/distlib/wheel.py}kw8w v{rI%c;{8I8 Dewd޾.Ow,Q@P Bayl޲~7;;,_UO#$Y)C("SʼJxoUzg٬ZŅgtW bh/d2vYi΄^>=yuvV+/Nׯ޽=}g̊lElY- E^ȳ tEDE~Ew'_ '??{ iF'PCٯoE S>VlJ w3_Q^dZKQE2ai$>ceNPX3,++)'_WaOe?w'E;;8`Y.4^PU &/VW"R!b +a6"z~z$,X;/E|~n|y{oЎD0> OM=Ok<~[( aUComדJF>F7qYlUfWjĿW+}ṳΛCa5wyU`_wse"G&oi,<Z;ɉɏ` Kt!Q9elpw!*Ő`&7"I acA \"HJZmufSgn\ws,мu'FdC{쁬ga8th N$ `ǘ,swnQ{V*]ث*^뛿9x0כ`'Wc_X>ap_B' ajhWߞ<=>;òzJ׳ׯ~l/'O_jy\ߜC!c>a?|{o/| Ax›+>wa7~una)rb%<ܰx{١f rF]{<eH\&WI*gCwv%-YY)NPdK 6!(I:]ycQׁ[xw$dvrg M $%BDo׻<|pM@ ᣇBu{Wb_Aţ2[1B{Tu_]9:\bcS;ķԂ". 3?u5T И*f!弒I`zfL\kTiE9Q]k@ռAle~qj)J@H1*#ףJcZeU BE9B(Z )?hc.D;(5MQ~ǐDWYv h.`o>@2OILMUr!J/xs{| F4wk3˫FԣC\G9Z x2[7c^s xs'ND { 6FB'02ip-ӈ.Ct!CHwOߟza/)g)oVL8]7 Q (LVRT rX}GH7"Pj T@UneVL`9$¿h 9 + sOuɘdn5ԿuQjƬԁޖv9Y7-iSp/C#+t?Miz0wY6޽6>$1)7t9D! ~י9z)r`@:e^&'T`5®AU(R) f37\7qdC}cZuHv1MV>0ՁlAǢ!.LF xY$F$ȋK&W5s국-нrܑ)V=Ӈ Pgq aqW;& ܧlN\Ƃɦyt[Ssv`PŗQWR2} WEsQ!|qsu"`0kI.J(`S1rhN srp`s5hF䇁 .*be{bSAN.4mkZZҭj_\'_fq 5,k}ٜo[@vs[\E#3jIZɀƞYQʄ_~lNcU@Qи tSPs;C-[jXjSBl^&j*K|hN~Ӡxnp3wV=P#V=؍>cXq׭$AŚ4.JYZ?HQY5K! JʤK(RmO%{A9Kc}<0==iq0 ֈ|kiy5&&MN6ܚ2fu;hoA4ଜwpNHwFw; 'n16|ghi56:Yi4č ]%`ڛq}"xmH7 DF|AeV]H6*%~#_ 8 2\2hc>pAX`_38 q9IRX C[_JAFƆKcetIuw_ $CܘKNUUGhv5yAc!6BrhEB>.tPdUJj>^IfQ#">5GEYB~4'^92·^iFHA0yB3O`d/e?>ex$ _1+InlHrXɛSMXoK"*#f8[jP -[d"SpI5$,n H_;ypL+p2+J{[=ͧO(˼a5iD(GQm܄^ekUWdSJb( 3\۴leim삚Gs\܀$se|#jTmE;bӯ**f+NqZ"].<@G}1ߦHv l<6(X]mQM"}qxk\=͊5 \~79l#E_9lYy\y2(@o.pXa㲺h' 䅊d=@ ;w|Z涭]6m?$"$ o3P.JÒi/(u'[/uv@M@Wg_8y_~9~{BMM-qmm+]sm'GƂd{U{ޔ$1;p#I4lH! .0V1ύU7$ R _Xtk/> C}]|mjɳ ytԻsSa DVZ<>^IaxRx*"aVl'&P>USK̉LEd[a(ݫ410%–5jҦ]KfM.Qe\Q1URqY,bEiaPG v[5V=⃻f2t+s$Ff&߃aT"shXFzMw-ZA1j8AѦy~e$g˱v)4-Bu1p`Aa,X{aspAv*lcT/\ODg$++ݑ^wY2=Nl"ej)3|A"0ОeK<KnȺ/1_cʀ JS, zUNUt>Er)~n8c*ةګ]]$tbh/ &IT0kUzRz!ŶecUbх3VȝSQіZH/$¢&)þ-5(O'<Ճ4J5Y;XFuKlwLc4S\W v0UEP;&H7>]FHJ )p,T~Z2,D`>ƦtiotF:J69Gem+a?Z]%|݀#MYטiFSٌ{snLpNͼ߉N !5)l]SPt Vt.Ҧǂ#hd¾Pct9hm =Pfn ddT3]PXƳEzd2á $hTdBn.Lѩlh;ER2BGLoi8Kwqf!9_2XRC̀n.cSYPtLiv΍aLRfߠKFrY bˣ|SJܥ̰{ 4tX2=w=%=; *_cc!Z`XPӮZ[iAW+FR. OL^*KA,bo..ɚ1la;Y49[uOSsR_Kη$ȁ%%{+`b3V%^1ٸ ZC~6R^2Bp;X'3\rlfa#!mD1ʩNS}:OS7bfoϯ/B2]VSr?&}g|z7!'_œ!H(<{LoB[9lӔ"뤬8ơ[ MEF1[ҧ nonn>}RK{=L=DAB%:T(z:+Ϛ.?]"d](E_ݤ9x?BFxk¹uA x5-r;_ӯI &L:oC/v݇͛L?0b=IaC善`7AnW}i l=jߓrH[IjɌא#Pm{Xw}2>UTmzSCntd>e`r:QWqz)(gMRnļ?UPt"v`&EI㨋 S d3C=2Fmw#b8Rʡ&ɵŭ=]J{[[U_#EQ[deLc+ q5;4m-;v4_tH !-[;]k4MPJfy6|!~30LCjnJ<@dɔca3xχdb.{lmlp*`0091$W}:RZ喭CaF3P-$TF[F:U[BJ%jb)0n3Iu!Tܣ!\Z. odnk[!YI6+Mnx]z録}fgʮvŜvџLlLOԉ"hCfWxk]Cmuuom?`6~|OK۠qJ/줄f 5O~j 5 ?pYXٹir#/Qyyxu6w$JMʈ/ML3K-љeJva1O$[-tm|G8H֘O“be oTI{ƘZQ@i[W8vnu;`Ѳ}%7e&EZ,⦮OZ,;qR"P14Ej|4^- |XfgtE_<Iz\9 #ٮ *L`υ Uo%[[.?}Z*^y&0ЙF6ӣ!^Wj+iդbY'z@l\&u_{ &V K,Cf:N?  { W\9@;-h_ͱ86GU<2w^-dP5#P0%eEQc&mRփFI#bdᡫ;oqMʕR#qWyS휠DcuGq ąmhuhdm>(a)Dqͱ?ȕI|4+l^߂- \̼' 2`bSBPX1$oCݡg940+̻9(_?EKn(Js|Y1Wd6;R̳tJ͌LvL撡̑a Nw# AQפb֥GxoxзlJ778Hm拨BCtU6-"m^2 .:PL3S!WcSؤ$[3x,|v#G=*C@?~Tsy(X#uLcOG:Wʊ]^u :vDC(gTfH8$idi #@xU3?4t圑WHDnsm3Zdp[xC@FM1jĺ7ה R NGhgŶ/r GdxVaC$@*[*٠#۞E'`jCwޑB rްS/]5z0*q8\$[V2T2D9%{v'- J*ZUs\ ^;7SLowڍ wxt-㐳e)Gq`t e)WJޠC4YS"Qa\LQиGYk]yǫyd(v&B]^Aw;U{ӭ跶ۨl·]|m8,0l͐úc'GF#sXИ5_=өA z`"WqO< je[rfb!(BҎ'Rbc+6IaV/ibNS۔oIYhEkn-@Us?P E)f2/[d:wnIeA%,&;Vwq$ܑ-Z ߸ 3qtw _ $vl! |d$(_8Ped7xi^ఝPGhvfbX^,-"@!kD8cd;ӗo7oOGkK z0p_è/t=skj+;?#9 u'B:Nr*CKp $s :X 28z w#ҫiaW{?{{w? 7ng w1 |簲fXR X5'2~'|wXדo=@ifҵ=\{wfh$MfL|=Y*>7N8|Gm]UyT[3/j67xwfںPKfX`p#pip/_vendor/distro/__init__.pyuN } 'MTl=ī 6@o,02Og_dDh"6Td燮}{jicmSI7#⛇r*`cI;F`MKp+*GZ#:KhSg궪䞼_vJ*.2 Eg;! C]O6Dʹ}$3Zjk^3-{a X5ǿТUPKfXTi<@pip/_vendor/distro/__main__.pyK+UK,.)W-/*QMLSKMWUP+Yq)PKfXJ:mk.-pip/_vendor/distro/distro.py}kw6w ṣ3mnMVe;m& 5ET (ys:ZI`_$X"߻'u^]у;xCqZw(4ʼ3gGd /,ţaH}b%ZE-Vi%i&|3Ze&T۴f@S(&u(]N$5!|]qBEyu?B',gD)cZ$KeL,E)R·@\o˴N󫁨y}Ҫ.ɪv1TI.s1:Git \ǧ'OFxFS|?:y27$S$!ΥtPtN_*x-#\dJ.:MS^E{zW\^ YU4_O4-r_,u:^C'IUsXefUi-T0HcA`  z˃R&3DDjkŭVsЗQ q!3{%S O5GH*͓lo\|:5B3xlc|)5;{-؁E\$YZcqTj@%D@9MRr kzQ$Ii,s  Oϡ `MWY+3jz@G"C¯֫&jQ)o-Tbq^Y6(aJ$_is&u:Ks7,&.0maJЄTxɣG{_@ZLVWUR"_^iq\A߃Q)JZyLJ_*wV\\Ǣxu7a57k'޼,^/qo=|=?'YOOiKf9~:)(aBGRWX/^]& a{JȏqY%W g.U0Pso_$@; zJ~LsqJ8_-&R0G0A鬩jF>gl OaOF? zYT1hy؋@De=\w?K'X||vx coQ$L5 򽡸(x.$Iq&8WlR'^`AҴn!4Հ@=aKSb}\I ,H OM0PsV:I,T~đ@]hFY-P\"4 =߇PjLB*y)n>>_:,# fA<)$iZ8R3A+@ ]\gг@12`+z_ _je__}xw~Tx9?~y %f}$)>|?GhbO zl=hU\]W=?Pi AooIs(r= ;:t^`7mq'Z_z;3<+,[oϥ(O_`g/IjYެU~*jë1N@T ^\/ѳ߅FuG44 `r YownpnX$i@")gK9}d sb0s{U9olN"_+_7 +ѫr C04~GJ&K͂U2d/`+ oQ (I.8O,ǵߴHjZtGd@'S"?Ž(SkqyKg4Zmyҿd:^V(jCuUh.ì2O2ԐlVꢽD8Pmڪ"Li\lYUuM]˄:/zjp`PU}kX8IAM=1+my29HPͶ=5ՎRU%:(HT RZWs@P,gIPlر21_&48I}YTZ"@ᳫ/pYA-h`CU Ÿx᳅ʣo'1g9qC7L|܆/B yVMU%`+Q1#ʬJlpiaۡ7TUU|caG*WfhzT3;ŰS1<۞ =j[[VV ϏUpj7(WGůh rBs<ڟ)[Ee֏YlϏqo@|O 1?-dPVS ,K ܼ^@?g?pxe xO *ɸP\Qm]G,ҟ{L3Έ?K/ji1ܙz9Sωvpw)/ Ĺy177s8?{y7fA ~}岶>YORJ7h-Y|'3|tX:}cq88m|{AU /iA:y-Q/e+K F(btcu"M<?3֮6.#P\juh 3%r +%v,Fc ?-R\Dfm!>U}>ӲYGnyRf"y^f*{AI*b 6ּdO EoFWTﴌ6t&PeDT`S 2*}oИ)'rNkd=l}rE'ULŁ{z^i'BG"_&>9b/1?L]T+@ fQ\&Nao>07[ r% !uh 1BxYKp _ ]Nyw9b#_\s>!iƙ?9Jf/t E_e$!F~3ܻQlYJ/o I0V,VfD FACm䘩hS a&jk+)_YCp'I,b!fz٨ b+(inw#뱁x18 f6M7@Op~$0 PT5 (*!ư9M{G.t[̢UNFā ڭjBdMIsxj"JQ&4 rFAX^CE w+ςIR]fg,Xc͇Ln3Shhx,pLU8"=?}o# 8u:WM],̗>yQC ^d_:bQ][638^I2RA;dMmC'E-`1IKI&bVXq`z^Oǟ5R.Yg7e5n|lk&i:}h+TjZi8n;>hGvv>4laYjԼb!Ⱥ֛`-'Ttʻ/-Upk@\̇k5꺸uxq* ]y GCnh~Q ??4qR2쨺Wy_}VtX#2(oQc%( jho5a奍 gXT$!ڍ[)_snL"i!m‹uNIsB=[1ܢ^6;Ls]6wQ[6;-yn+fTh.]Sw[:0ꛝ=ٰiIK7RTZ IJ&vز¹ فX,` ﷦ =#:g=(2]Hh?z[R0 \ջV (-'vD @zo$" knݹ,C+gLYz͹n0?c♑7^^!0}X )?TYޙ[xGTn]eT.tH+<#t*9QaN`e [x{4^8ׯ͑"C Nij1r3b/& +{PWE>L"/es3}}h>IB>>%-*WY1I2E{ cWt%¾TO,Y:e#?+7_RK%B^C7 p?-qRݞ0C-"@*c,Cyl=P.ٚMQ-*w viWiR.o@g ̔ɫx݉38GC6jZc\y(-(rf&zﴥI:ˠF$x3QdIl5c64y_`l''zSr=Rb:>Y ]t+$]< ң *7 ta 9~ں+qb5m8AU %r#x1:۲1utE33-4 lLYtR%5^-~(Y?7܅GyҤD9[Z&*Y/ KZpY In-a>]L& Y e.aX{ؚ}&O; 7j.t[<>͉<Jua ~h|S4-|@;h¦; I`ÒAU"ɮp‚fcK2>`7,|7/4+9/VcrqM M x¦9vn){pB҆Y .x; CךM܄M@R+ȶת.Gёn}[Ҍ#N-s2GZTI3XtFw4/TAMN 13;El i ?V ,ƀ0#4 ʜ1+,ٮ! cAH~xag,l.*~I38ӀƊ3i͊df8"tVlhZr.fۈc{oҔ PĵS$hZ;.bCx;  g v$ foK vRDr(FdIy[NMQ˴qzS}*;ڭ,m9{=qrzq!Dy *ԉ}=yp>A0vb*\*Ą)͚|]㞦vA龠D_E)l\hq](`-@(‘X-9ċ·f&X_H;oOP-4C{u@Jy.Q؋FG/:j.6qE3M'@dYL!0Y9̓;myS Ͼ4!dž,)@ؽ-ͮ:Maeqmt5o̕yQbxY-2+4Qtp>i?"VzzG<-4R>^T_B,Q7*И{UݦJjjm8UC?}:Xat f{ټ+h*e 1!qu ^Cf(5an͕986 7Iuy84Zg%y [A1As;b&nC0)17zzDUh B(liwӱMl׏{HU(O A2|O;^tf5ΛP +Ԧ[{"3hE9~F mz1lڂ4ڋ4Y2oO#KݠArA_ޙ#jAЌ=^1gq'd[j{Q.AD;NP=ؘm.T?U=CKU'7io7ސ*{K}jО=mQ<Z!L +[uL\x-pgsDE9_U=^t#b#Ý\G7F.{8% ar>\2t9S 'I᭓O Bګ3aݺ>| t#r.q{}xj?8+|Q zK]~iA:S!q[CoRmPN9SDzN~*Gk@UT+Vwyw h4 ΚY?y_c`=M8oW0>2x:?tgܲT6vgVT,V˪׶@d@ՊH ߵv1lf$Q;v 4v^Ywd{ǝ|a^~CNwl`o_/et+;z#Z.mLEB.aś.X \4ƪU9ltʝi2 ]4g3+5=锲5cluMPׁd7E֜4 Q_D&vrm04VQ|/ʊN6ڻOhܝn@moqviWB0PSYOGzre'W9mqiZ#ʔC˱sj;eObQ(?t x]˼󺼃\(&1;kӯP3߄;fFygH MZWM=x.dkJ l~hko|i f2%ؔs![/v-/E} (R?'=|!3S+)a[J؍D><y!yk'''T׷8lhfL{:ލȅniDcѪ|][ŋuXPo*?=S(v [o ;$WyuY-|]0;ƫ;iq J⛃y(WG-۰ZpaOgWWL1o/oJs?E$7qGd0b6NG5Ebu-V*~9Ha(eE#ݑ6cX 5y%uڒ֤tN`z+އۜ ՅE償=hဤ4bQtr]k}{FSG ntlVsD*W;P׸S]ݞ%L'9a\/p'sjeWmTp)nQl /1 6X 2]^duW~o堪g?J@͘@HO*ǓO6NJV?%@Yb)!qW^XsLI'g>ZtwTm["-kj63տPuP|aXUX&ֻ衭fb IQryMg ^26hض,`*g_ݼ㖤Gmel &yso_?f{2rnLԷs~ilЖy3[a'i|ppHڛ ݨ6ɵPM'% d;[͡1)B]۴đ݅G00o˴-4p?rv &i-20|:<m=MIzAuzF粬0ݮcn{dwuWſ^Vy>x9{"xfg;aqK˚mTZIN>,  Pf`Um ̄#K5[5f7W5úN7;ۗZ;TgeD7{Ѯ֔& 3@k.Rsi@ OMm4'xiQgO(F) ݽr8ѵ\=]vx%;Eku@4Gt]-ޅ[**IV-ුk}^+^UԧOU\fI=JރkwEqGۄqC,( ~AIJ*<펇fDmt'Z*I,D# 3E:c K.w{;|?<!~wGߞ5>¡Є0j# sy5< ߡ+ 5#^fm\j]*a➞iLqS)(,Qu ^0g RDe!֕UxB,\ٺ*Ix[_φx3yWȒO"鱍L4Ek$H'Ru lE [|Imfadql|L ƵcDSòxMYM 1@wJ9 [8W>8!;v" L5QoAx<w:qOESxz5 d5~}?QGa{@Hu&.3ExC rXoG?.>5ӓ xЏxފ_ qWZvW?PheIu聵a' ?z+@xS,uhoCQ))un `wUJV\]#4SzWTq1B[H2y:Az-[%2 HJ IyEGj Mge8ɂMLe0`41i̖Le7_L0]2˕U2̉'I%_3ge +mLQV(YL;]8hR3wY\3QP@L 1DV̎Ods-c=Ԓ)Ŕ,a(>|UlPKfXpip/_vendor/distro/py.typedPKfXxQpip/_vendor/idna/__init__.pyuN0Ř総WZc+J[HMT8bOO,ԲDjբW};`#A$Ff7VPGyɍO`CEwI< 4rڔ7kplٯJnp^<]@\UT{T3eZ!(.hƉ^ $[-VYcWMǻ,AWJJ D9ҏ=51>8Z5GΙk"? J {ӱoZН1mC=2`c9ԎL1Z#)6|R%W 4j]?kv PKfXW w1pip/_vendor/idna/core.pyo6w\,46w5]nݥЦpa2es%(q>HJ~֡g vDI2̒J,'|9iG?ϸ`A^>193'd")!I|Hަ9HM8h`VL$);=jc9 "*9';SiBC31T6'f ^e R7T Sq?00M _@vUyX0A sA(p'94"䀻e|O#>ľ VJ\@v`P"\Bwž/l[ DYH\K 'Wp&cXwZ ,}98 *=cbպz&~2 E>ҨP>wq`I3,C hœbrb*dG!QA6Khdmx[7Ha}D"~B€3a!}q|Ppq)xb-><<ZQkJOG,^ˮ|(3t"ĉ7> Ojehh$ImV0 1Eقly3!$[⠹0 {Q,Yp7(Q(-B G jI=XD",I1B4˜d*9m:mVHHHRTJc#h,.V,8=$GUs<ҊhΉ>=yhS(=vخ Oȟ? I. \vLޣ5y{y-o͚%qiFH2^x.jpKYc䨳J$`RE5,dE7ٵ]otg"7ӈU]w}T2DiX6r$f(Q|U#Wu Ӟ@l? >hh}r'}kk/ʥ֚FH%_,^"JlrY>qY^Ϯbv-Pqqs%jSj#t Z(5,9? Wsms1@3/Oi\Xz_F$IZMMQ`ߊ#ȧdx/snuMLU-!Zo*ϗG[UẪ H ,3*fgIT'>IA̓E-L趣.A)nim[x<:UBϼ%fH;沠8KC|DTzGV25ˮ6Y @ZX-bVEF-7.t@D.T  JxO³;ݶa Ǻ9U{iWSrz ǃA0?̆fc0r@/9>]#J?]#a(,ٍv[萨?]#Qu.Ts\,7'6%LLvx,:%kjxߥP#rg1ziKjߐ9 fN& 8Nֻ[pAg̰ HFz3t!l0`m )l^ pȄexfra698lM:jgcϦ3rw7L DSO gyؗA8Y*H^hxun燳j5pgiZИz> }OrwkBص CZ/%C Co*a|-iv2h쒴p?҆m 0{gVF*=?4ӤYrUxNo麫̄X"{0 ګ퓂FxJqIw*Zիo : =&?'V;rqPa*E11~7qۛ۫om:Lɬ͋֜]y&(clp 5vcǷuCƿR:owN?IK@-ډrq(HB=1>z){=jE3<{rTKyFEQ Zbyi摙*:͓DIhr,Nƣcky,(gv;5l*NfSӹg d_#A'Ѧps@PES,ڛEӵ&6c̺Ƃ->F lie M[!ED0)g9[Y*h5ҡ;b6l44vD)G*ĿlkpYkn=SR;f.Nӌhڝ'+ȋ坈|~2'UJKkn{b}3ӊn\ zy/E ^iL@^{dtD %PY &nI'(#nvK:~7eI6e9d̅umMΥ40HJQىVrwbT Fv ›\ix e,QFެTf60|a܀ {T)@KJe xۡP9;t-QH͒I]Ta)8sK=tC̤Ca W˵1E@!&/1̗l=_(uL%LuB6n[DxR:R_Z=T{zM9g]iP62weGְKծ[XRmO [QTs7嶮 进dZ_\'3b$$ٗ?q?iח_~?/~\?w/?/ҟ?__?ÿ_|J3UnVp:܇c=8DwygswjG>$z}ċ^wC} ho 9>-ŷi~z79 oLjݣxWyGQj:J|NT}.q7?6Zii1khQgU~YㅢㅢSE:Nu,:YtTgѩ΢SE:Nu,:YtTgѩ΢SE:Nu,:YtTgѩ΢SE:Nu(MnZQ=6&ؤczlRMI=6U-cТI=6)ߤ|7+߬|7+߬|fmfccRqJQ:)%jQ[ohꐧ萧萧萧萧萧`щE'N ,:1Xtb`щe*5*SkUhUVR^K{iu/Խ]w)ߥ|]w+߭|w+߭|w+߭|جhlV46+[i#uhוߊܪUgMΚV5X\uִ:u:zOuZMjVSTS3;k3!zT]*R7[R7[fKltKY*RqKcli0ugeEUMbV'[Hv-N-.-ʛ5skּͭy[6mnܚ5os{omr[iuoĭGg{Bex--F-J֢>ft--N-.-8E%ey^rAP('ʪ_Q&?qOeԏ幢y,蹠N9[[~U3\+W5UMrB9 >cUMrUlIX W5 7G??#G?#G? 'O? 'O?3g? 3g?  /_OT+UW_~UW_~ 5נ_~ 5 7o;w\M%i-;=eˆx=J|[(zټe\A[& e:]go9 {3f؟ag؏c[}W`_}ڧgS }a10tG:# 2gO? aa㥎Rx kVN;,.ݲGYG ? ? rGY` /f273({T}w}wx п=:c6qͿ~5M@FY?1_6ob~e?'sb`b`b`-'U2|\sA 647¿&iz͡yeG9QN(g eQ(Oe]W:,:2wwwww?/?/?/B{6oamG{.ox??௹0󭷼{/q˸W;;P(#ʰ/þ 2˴]w{3rC/_ 7o 7o~ym_G{{G{{G{{G{{G{:?i@{ОZܲQfm:}3Jn9P(+ eث/=KϚӳ&WHɎ ;v vOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuOuO+#߼"{o:62gdc;N~ 9;r:tؔӱ+c[NǾ9;s:L>a=c=DY`JǶ["- {(7CرQտ2??j~׎ꨯꨯ:>] o٣ {twMe1k5O(W5sW[v({rF\Qn(w2j߃={߃={rGY޿¤nj+`yŢeԽO H2I`?۱vF\;߀# | @'zp<rY z@7t$hfn#:nZi^hF͍ KGu+"D @%x+?Yb ѨGN`auT>o]c'^ @" @# "}Q˽PG=pQG=pQG=pQG=SwyaH2@;l&AOA @!P 4 0 ,*DGHI JI`E'ON7-iMw7Mc>Vc>Vc>Vc>Vc>@T]^s"4(g)"<(#Nj:jʈLgbDIwxg|*MwdU 4 0 ,x"D (|lM oZhz=*MM-t^T&OЉ_h:A` 4=@ӑIxX5XsXQnP $E_ *6ɧL>e)UsY )G p| 1hǦH @#Mߨ7*q l[::(*FfڑiPP IdwٝD*XdwAIdgYDv}CL| f<l?"ۏ#S{EoﮈI`{ e6-L'\fde[feeX拜1u;.2+*2+*NJ[6+"Dv0( & `*P*}*}*]ҥ5t [cՐ~D (hآaXq\nq\nq\n@$d@%KgvmgvmgrQ$n- $(r"Dr%J(a"+wW~%J/rotF=hԣQF=hMMjn["D 3&E0)ȓ"O<)l}z#FrɵMl;붳n;ԣSN=:ԣ-ɖdɖd1nLF!۰6, o۰6,k/k/Fl#qb8nXdZlņmZ|_6]vMCM&9CM$ $LN`M#HK#-4HK#-4DKk.k.-rp<@@rGM/'|wD@.s*@c7&~n[nmAlP. |wn @!-\&kFf8ᨇz8ᨇz8ᨇz8ᨇzxᩇzxᩇzxᩇz=8 ?mpm6-?.z'y ߱e~zDGz`Rv9̍_g.\ H>|N`M˹uOl+Vd[ɶm%+wWPpK] @vbSYSYSYSYSYSYSYSYSYSY&E`tG=pQG=pQG=pQG=pQO=~ݰug7lݹ@  $@!P 4 0 ,ਇz8ᨇz8ᨇz8ᨇz8ᩇzxᩇzxᩇzxᩇzxGzGzGzGzGzD6[l|U 4 ;.z O LNt$M#P@=#P@=#P@=#P@=#RH="#RH="#RH=sH="#RD=H#QD=H#QD=H#QD=H#QL=2#SL=2#SL=2#SL=2#SB= (ԣPB= (ԣPB= (ԣPB= (ԣ@lz'D@&PT@'0L&@=pQG=pQG=pQG=pQG=8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8c8.ԣRJ=*ԣRJ=*ԣRJ=*ԣRJ=*hԣQF=hԣQF=hԣQF=hԣQF=ԣSN=:ԣSN=:ԣSN=:ԣSN=:cPA=cPA=cPA=cPA=cRI=&cRI=&cRI=&cRI=&XcQE=XcQE=XcQE=XcQE=cSM=6cSM=6cSM=6cSM=>w_/_?|\?_|~>gߠ_fe||޿u/gW8NgUfpWx<^o6Ωvj3nv;۩vj3nv;۫j7nv{۫j7mv30 MnPx'Ea{MRE*TѤJ*U2JVq2*LUVq2ڝv';֚܁fwVٝlvg;YfwVٝlvE.fwQ]bvj {G`آ{XjV5VjTK%ivnV;MtUntȮF+nzwCte9Lءk 6ÚM0C9SLd&iߨOaհ.3pˤZ*22X*7.x[]nmuZޝ6azo{>*1KZrGyGyGyGzEJ^#%oH[5R)yEJ^#%oH[5R)yEJ^#%oH[5R)yEJ^#%o/H[5R)yEJ^#%oH[5R)yEJ^#%oH[5R)yEJ^#%n>^cQ[5XFeeGZ5x r9WSYΧ Km,`iLu<2Ex!MD`B`!X4X B#TZ]FXv^ர=rMjA[`}>Xkm탵A[`}>Xkm탵>fQmHNSy٢UԨ7Z5FzEQhQoԨ7Z5FzEQhQoTGQ9#GuhQoԨ7GXvǢv[߆XvW ǪT{dGV{F#>#>#Je1r96:ǦR5[#v7hG Qhv@;vjw75Gc7oj0=v{ġv[hA|j0=AhpR8\7CiU6ʸ]˄5.v˄]*;QhN~'Z߉Dw;QhN~'Z߉Dw;QhN~'Z߉Dw;Qxv[w;6&:&>j UUu^Q*ц*Q*ц*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*Ɇ*I*f&a{*-[3Pzפml66i]ml66Md&S5ٖ1M#\$N`e\5LisN [~ [>8S}pNmSi T?M'dLME% _Si3>6H:5|͗z2Z'd,S+=qFiYҚ_tpYǸ!9j"jv @-%Z/Bkϲ*^:5ekKk~ٚ҉eUױ*m vۂf-cmzIl>ҒTn:Smrkm5k؊k{ZiNz$[knWK8:`U::?,c%RPn&GcQG-h{,}h'p8:4< , `}"1h:ͱksͣ0ٽu:X|r49?X rtX{j2G#ud3TK eUMy=3#3?mo\ }9ir_<|5?#R&34q[ϴLg}Xo Ig'B>o Hγ gJ%2a9-z̝.oǮW|}oB~3uJМ'{]AZd1(<qչo8cqeb{D"ܣה?d9Yy-#}_5pͩ?MC I's yZ_6]2l5p'ߑMthБrٟe)nCo(~m7p?jlq,Yx}h3릮»ƈ ~k"#g=Kn!/|a81[Bzfjt:F?e{sH]|:{DLf8htgh3a;;3Ѯngcvf?ڟ~wۙưǰُ ۛɰُ ۛ˰ُ ۛ~lg~ُ ;;v0`o`0#f쏰?G?hmF|ُM;%ُx`'$v2Qb'Nf?Jl6ҝ~c;-ُ;/ُ ;12ُ~|[ib&v1Obc.f?m.׶}#^ {Ǯ]~l쯰+v5+f?)w3ofG<{s=ݞs}&k&k#t[tCܸ醭a#xpa?~lGܸ-nOicɞf?ơ{Oqf쟰 /ec<ٿ`6Y{/e/ؿ~2e~nyf?l^]/綗ms6q>Gcc`1f{h#mlOjڍZqعc㾃8rf@?gn B ׭*s KGe3ݧ>q%{x3Ӟe~Af7`3ofo 7nwa7;fﰿw0fa??a4qlOiO? ?a4'fٿ`2_f_ /moؿvl[{{ٻ}G㐯_5Yؠ{:q3NKWõ?]?plD-.K$xG\Em^c^+y{y'A(|]'CRx >{f[ H&p1ږ޷(ޣuKaa _ߴDͬG ^7;a8You^~d'؟ٟ`2OfO?g?lg؟ ٟa63f/G#xUq}5^BpƫW5^UWj`3`3ofo ?)=oRk<,:-#dxy ށ'e_fgD} fgDf} fg 3zZY~k? bgAY,h?g}5,h?gyl,~ςXY~k? bgAY,h?g,~ςXY~k?KGZٯ-  pv.vX;\*f8vXZЮkW bgAY,h?giV/ L;ag7;;t[ﰿwga g@a 3̞ {34}&y~ _v/gAe,L}{^'!-W]7+6$"QžLcC?Ǫ=4zGTv{(}f{[Tޟ=f'wag7Õpvy{;mY՘g8'p'Q's3*pcn}"oe)h{K9I{Y+!M>{D~sb<}D Rx_ luQ_[Tr}U;x?'";ùxޏJxTR竚SWvss<R^ސq@˒ҹ $;QxѪ;@sl.Oܣ_q56 މqN/nze*;~y=:G00M>{\<{G8/?_BGd\y 3N4vbSDplȱO4Hvbpnfr V Ã=<܏{ė/P?"Zt*٭%dۯNOs Z{%(eyq8|I(v<,snݴ[%C^݄p.-; ;gaˈ^/$h꣱>#?9>6*/b8{ٱX*w{.\Ԓ].E^>~w116xozN-Aa,OӇ7`''03l0&Q/`11y{l8d*}PRo_ Dlz3N|,Vp v|:ت~k9Zcp '><ہ?N;'>*7[vw܄>$z o.y2Xx n؋>{ mMƮλqm [=#> <[ FؗL~ZBD{)'l|| 9?o{gZ??t4$1[/dYKfI_M?PKfXS!Ypip/_vendor/idna/intranges.py}Tn0 +l14e. L"@A\/64z^oꢸM$Qv~:$8lKM\[y_ƍ/b^#<{Em o#>CCm siݴOrQ5m'5r߷}0ϟ44ix'(ِSElFoxƒO (HtyT ;buJ6XPLIĀ}h%Vp o7$7Syui&'Ûzk*Q3V>۴woe;'ωGh~$Gh~$ZwֻD]?@BM4!ք&T5!ф&5!ՄLkB "5?u͏G]Qk~5?u͏G]Qk~O2IՃ&Ճ&Ճ&Ճ&Ճ&Ճ&Ճ&WI{ J JA" ڠ%^S3mW2͢O~ɏ 1N$kesiI^ }r42Ru%B]HߣMu{dZwT={;&ɞd]wB=;)޿x${=S9 K; 7^d/Iw;/^]d/$ 񽋒. r9^dqP!!I%r"ɐUII-98}CIG%dpZdpzRp:_p\h#Th#Th;]h;]h;]h;]hkShڹ).sShRh\hgж(5?J͏R(5?J͏R(5?J͏R(5?J͏R#hCuD| 0|?Aw])hk~m~oA|o$_A~ ?s ?s ?s ?s ?s ? ?膟y膟!y膟!y膟!y膟!y膟!y膟!yO5DK5!4@o`BNny93Ԋ_bJt#bNt#O][ DV6$ѵ "(]O>Bt]OBt]OFŒ]OJ&+ddccell 1Faldd+F[lh"dd+l~~VO2&TO2U*IFD *IFD *IFD*IFD*ID*ID$g~3?:HcdtL1HIt?? iAd5c5o5? x)W2AMA[4kZ3Ly~Hj0z{'ѽ-liҚgDzIͳMD7yLB36Wdlꞟn'~V1cc{9&S7rCNd"^NGƤԽMÿэb!©LJd~ML5H[ Rh6_c RϱMKfh\MMNL*:Htc 7!0AJ !0A#L0/(~DFG䇙^PxEL IkK':xBCZ09 l Jpf3%8C&Ҝ ZBnu]kZ߭.k!ִa[뉮"wk#5?Cnt^*K뼄&"xFN'Ft#'o ‰v [{np}D7rB89!x膟':LtO?gݯ?Htoe?Dt]ռ/BPfSruՍ")ikCDSo^!:FU׈)q!Oo&ۣDcD<O'9$=?;dR;.R;DIt;]DMt;=DKt;9g=l$v̢~iXDĖȵG1^DXP=ƼB[mbޢoJ"ԐGtcwݘSԎ'"D&"8 wo'&;'n7D&'PwQ;n(& ! ulBE%4U>*S!:_̦.-B٦U[xKVı?򕞓$\z GicĮn%mDc?J?ۼeKN{iEt?&=D^{Gt/DcA{'CDr+-QXg ѽ\?"gD =?JtϮD=?!gDl3'}6ItϤ#6vw-1㪝C;":C{_OtC7Do!:_ObE7F]ݣD3qlju9wO]1r&c=Kt=Ǩ˹{zQswz&QsLc~,YX%bV1Vwz{].'F]]fG`d+;NOg~}H ?k2 ?BGcf+{4j=BGf/3u#wѬmJRb|]7rJԦ%uO~\'~Jh9a%})Qs)GX=#{g6X7#{gvX1#{g6(GΔ(G.5D;1Fٻa{d2O3[c33;c#{g gbl@Gl?:c}:jc}~%Ɩ4-Fe}xzcK}u%v4t,'F}oLP}CDk͍"NsondM&F>_ODhbDh5d'M&F>IOvDhbDh4d'M&F>IOvDhbDh4d'M&F>I90Fl>IOvŨ1OvlQ]t줩.OvDebT';ibi4EDh#g~(}"STATAѵ*'>c'}ωq){sy9{?s?Gt}N/ډE=$4bD]*focU3*bb>Ӑb8Q= LA{k]JM{f*,݊ ٣1X35fP!>ĝZSaNϜ/fiۚ&F&CCF1iCCCCCfM#5656mƝ1i1ixin˘ԘԘ4|6ĬM{ٙ111Y1111111111e1eY'̘̘̘̘t*z̈́su S8Wi>Hj8dBfd5ic2c2jzBȌiyffu#U73mԌ uRmB1e3c\ff2q2ˌʌʌʌ;w03(3F~VXF@FX[~C1% cJƔ4Ƥ1%X aLIØ 4*Z1#\a IìƐ4!i$z05L9TìH4h#0Cø 4[0a܂Y5̠lA0ae$I.7r50C FieRNnwnwnwnwnwnNnNnNnN^ߕWtaFn97 kqs31fbMnDrSg:R<:Z0ct5oh7sF^]Kn97Zjnt57}s-[G73͑#ͅl./L0ZRCy9VV*L"Y".Va l~4(q(Ѥ N ЅQ(}a*  +Tz(Dl}%t64ƶDH=h4y0:֮^iZH=ؤ4F"6uiY@GզŶX4MWNT Xh*a9wUg)*/GC"pz4DbV# 09с^m%6?ܮ_7o;)͒G/Bɣj+SSj[(}4y^_mt+ުt+ߍnE`0ט223AflEfAL_9͈#xm6) iS}M3Ximh 4`SG2mŠ}b>,ЬМ{HL|5MK 4 4iu>4Ӭ#'hGO4Sm0m ,HR*)Q`_ҬɨwQD nd} $J^'H #)!F2 Ì`H]a$MKϱ5VUr$۴DeP4,OLx{jAbfAb ?1#٦ɉĜ[HVq$T31 11G2ʙCX\UI!0ɼjMw j6ő{hNmn&lښuˉz`loݾW=̠n]^eu3U躩hq$ _ԾWւu*TJ.GWY#6;5(avNOJS+5 3 e-+̄4mDƓlDӠ7_eh`_*:Ф->ѣ pSvɯc `Cqݾ&٩@1Hd#1Tb d7# =}Z4:grunB>G9ʈ1F|XiR!dD#B>9ÈYF|1"s!  0"s!>Ȅ|.3"3Ȉ#B>ÌɄ|2"s!`Dg!QF'g S]z6lpa]IE6]޲8~thӽ޼t4g+ͫL*ӽ¬`W_1+L^QV1'0L96twj75-c{t0;]n r{WgnV va]1( |r&H^=Z.|X6rjcԕ.W0 \+"YQ:uTE2S䕓Gh9d씣5Pt0hC Gk#TgjZ9VgmR3m>PL1E—qE<ቾtN>F,P>);pAoc1FP*ymsU  x|sN>)!g 3S60 \N>)I{{y|1яy>7ʇ8pF?e&Z_@K+ԍF>h`0u{zLaĞ6S73bA'g afFq?g0u{R @y#ρ.F,=X>|0b>3b>f9|泪E(Uqr֖-{ e~.B!@> ˞\B| =L,TX,{Xs XvYDBXFBÌ؁ >_e9|Έs$<ˆs$<ƈs$E~mő6ˑ60ȩ66_i~{$tQ|foO.*lЅX䍰gCg6x"̆ߞ]TC ao 3~{TtQ|fo o3~{`tQ|flό.lEU=9 >}K*ٞ]T>#D=EH>ۃD=KH>㤋D]3gӼ֑>$f` F>BټQlQxɽQϵKܩ= e_DOߩQ6oP(~ő Q6fpP(~ƑƎ$Ȇߞ;] uIFR?t$DcnA!2BGã eSlϏ.DoM HB湎$4MHBӥ eSl썲)6tIMٜ"7ʦ:s$g6Ŧ# >)gL"m7ʦu$g6LBdFMO/cSܰ|nclYB>)nX>716fgtC_/fٰ|ƉScl1M?Gb6,[L+(rg!# >4=yI-ٵH*=Ŏ$̮i3ʦ?o LlvQE.yӼ gϋ]>}^LB"zl9ٻ|fޅ3E.>/vķ3g{wQ >{Lu,$ȆߞA^BlM`Gdo /D1~{ y!ۍE)Ȇߴ Jh_3k|x'#Eb2jQi(m!qiKʈmΈɈj>>0/.Es# 2"# 3"# N2"v!7-.Eq2#8ĈaF'^aD|UF'^cD|"YVvUM "8U%S< E8p$J&x@mZ-M.MGΣbˊxgNfvPV8;JHLMS*RD&xU aUQݛ'J'@߄>Q?O& }|_9ߗ>|_9ߗ?|_솫R'.1 jg^А>W홥쟼bdVOW+38B0?z-+ -e[O?8=Ӻ>!梆`LSG`nj.‰t ^A ^9(/!hNc!m7]8}S^f`iD9tSN Nj)˭ T 1r?vtY?< 芐M^#FQFZ"~wIIQHyRxO]$Rz -cG'Gt2g #M`C&m.b e'2Y/}6[s$=^t_0̈^mFCc T.&H~c0f:ZHUrc0a Oa@G}IG#:^ =}u^zmpN3qr[ͰVuCGŪmicWLmɫEtWutϤ՘O3=ӽyܻU?a7=/0kD`2#2ݏΈ-$Pk!Z ZHB@j-$Pk!Z i6D!3} >G-ӱ;h1su{d*{!&=f{0]LGo) L\ JsU{?HmF^MA%Uy/U 06:r #^=^eWט L_tZp$?DV3aőtfη7 o;ּ%k-:HrƏ z,CU?kdL|C*\^h0#3P[=򷙭=XVH"!+[&`Dx]gX :cĂ6# Fy-VUY(X]>ʘec . o*̇8yU[Xl_l׈ڊw"StWTD 2hDV[ѽ~~)/.-&< f˗FJIKi$FJIKi$FBI+i$-Xi-[9i!椅MC;Gҝ:ZXg:5pw4 Bx{/Fm j꾦2Yψ.5 PO cSHsSDL2dd~@Vct?kLCt^m x1oO*oC&P_?1q arƐ|6>S?`/^z/D bh p Uh B21/LЦB HHRXRX+jBL5)P̨APF 7j&|q\BH p*|M!` RB˕ ֯R~Bo(ZB _+yK! |0A>(yW!oV!^!~XE۽9$^d$^b#^f:L3īLkL 遖1yKܒ=:+E~YŃqo2 L}^o3 v ӽ`a} 7L-ӽ`t/X wq8gEǨaE2V;XsV|K/ccy1 JX߰Ռ '>aEg}Æ3ַ {XP}mgoŢ g}C% XXP®}mjdGi=10OP7Nr1:9tqThu$=|S\d$2.3 WJ._cYH#)QF6<Dvy,/O0Rd7 AZF u@>@>@>@>]@>݌@>=@>@>|70 nd3gp #`!VF|1"䳝!dDg#B>È^F|1"䳟!- B2B?L-jT.eĄ9>@LڲQ>ÈIY7B1FU#z7#)n`mO&Ac!9a<FH$O3vVm +};oaG6u,=bn:\ClM'P)x-DcF Y/eJvAs1F4 r$؉!֦aPvClMàPtxu4 '0A8[d0(g<bSV|fl )&-lug=Q(,yd9|>͈s*|TMiOcH 0b >_b9|fjđCl M{P5x=tӞ(g<bܴ' "'7IqӞȑy4Bq!Ҧ=Q@0gӞȑaϦ=#lM{"G}&j9pD0~ȑ a6#AlM#GGa#do9 ~ȑG$Ȇ=r$g6# >7}I <4rg6Q(G$̆=r$-_d$x {#8L4 ar[:#i>=M됧SU_%Y#2t IH *yz_eІO PW2#2' ;-[6Vn )$,lIaN a>{LhaU`aF~{c-#3@1Ɉ7RgdE۷U!U Iad4TLIF2 vnF ׼|gz{5ʈL/KQÙ 8ˆ̦]Tg #^>31Rrg ZB|kf ș-G2g? ș,GΜF8rF ,^#gNf?9?"+%‘3XYs#ekEF AF <`5Φt3P?s}gdggFl"f #Ϙzg|## E_ 6P˪PE`AyF|f{yd/l/FϮAK@o8avw#8av F*@=lY`v ̈A:)f/71n{ ,X8.,]F[Uf/_|8]YbBs[XlWhc$š 1F@xcBs=6)4׳- ;^> indB)Qzq/νD@xC*u%͝(mfB{;#>r&}@>y.Aꤹejus%J09yd!<3JrxnD2y6(y5-li9V|iIm`BseZvM[. aZVW$2 U[Ǫs<\az!4ףޠd/^^a[\/+?2Nslbn=%$ֳ#sY۷~OHCew="5wys'y!)5wvϝf Anj 6qM7uG}sQlL7w"lFyko77Ajn "&sobM$̚og^|]<Ӛa^|R[=9^>Xpf=@<#5-zg|wo_u#%?ˈa%H`Q(raGx"K?ZlŐ? wϟb' Sʡ{z7<;_(? z_f*{ Hp ȡ͏hDuZ#6?~ e1^J{~g XQ=?i1vIP=?G-Q=? 8$KQ=? erLf E6?t%jSufɑ[:YXEmʨM>(Zd]}S;r) ,7߉LISALc! Ԗ#y՜nn@WDm~xC0]k~$^(TZFzs#(>v3AKF+t d;Aˌn #=v3WAR;3"͈O#O'8:(#OzF ldDg#B>|:0t1tneӹȧ#Y:uȧ#%"8d#OiF 3@>]g|x"(f!S]<ř]Qcǹix8'/14F|{ƈsq# 0E伶?;2#z;N"tV!BjJ j p# 8J)BU!X3"kn0pզCPzu=\T9*W|p#nfwGAmv,D""Yh*i׀C_wD":GlfgO(v}x8#"RliOÓ |fbcgf#HO_3#*W՗S DeB}O.{"vP˄ػLl.1%^1bCP̾*bP0/zXK;V,ŽKcR/ {( GPh @l 4r6z9 BSg &;̋Wz-xY.^V+׼Dꆦۏ1auClLP74uClQ74S;vOAEKԀ 2lP~*#~'ctngb`tat`o{;x&DOr'/`!;؉Ao^;;trAh$0ݱȧ`׸|:1t[X Ҡa1W +|x̕B>j&tYw 0qəDžYWUow_<ΗkynEGO W y~[1ސx#.p?aRX (vqB5.Ns"  >?<|r " k%1,yTUGV ^ZЎEW7³<ɱ^a]zR誁lK .V@60^~q|W%ada/2B؍P"v#42v^bQPyfD1fr!4[SqMG߂ t2.&7UWtu`>QK;~gw KBF83*s'[)(/2 FB v? n*:$;>LЋ# MZf2j`\(ž&B)ԊB).…:,?qe͆qqB=3Ml@X]QucJyPvڼP,./QnF2l opTqEXKzc'qR|Ehĩ(B#=5'B,B#?1@MĄ/B#.9R%pn2_!b1Ҷ`Hy% *34s@^ĉ; n e؁i` j`j`8,j`X V7 )@X5xRwRIUy"2K㗿fÆ=U_d CVEA~O'dS_^#ڛ xQX̀3ʐ!B]w 7MH-^j Gt >]Bx5tiGzS}{Ț/y!gu^:RYnB pVT@W.EA(nА(nА(nА(nА(nА(nА,nИ,nИ,nИ8`k3 &Ҵ a R ҵ  R Ҷ  B#/^~ ؖ/)|AY勗߫4^XHf+hY'M~o#ӊ#ݣƑb\ňpHU\ÈnhH5\őR\Ƒx3##6}_#9V1b\|sEy#=X>W1b\|>sEaF,G| >g*|iF,g| >g*<3b:gS`ss$n?s#u ϦH`~6<7G)09XM9͑j]MF%6HBlcAq$6HBlcL/Gdcq$/M cvj ibE <Έe d2AwO3bxໃg1LPT^&#f0$%F`H"aF,"XEuF&n2bY'\u{׭gw1b,\F,ֿgodYn|[#u|[F,ֿgaYn|[F,ψp3b,\X> ׭Muɵ["\~6uK&׺npZ-[?\%bl?ܪsbs@#q(#eGp8#;G¦߫lr5ly;)9HK|zRwW'>պÉpyp"Cl^; ݡMX xEAY 4g;`@Z&[Y3 ;S xm}ۊ#P s X#!|cI}̲G L]Qs԰# ޳+jv${aG:ή9jؑ+jv$lQiwV :~m9jؑw23׶0ɽ.F̷ub.x&ӜH:aH8HVې0[Ts^#AE5:>3M7x~t/_3Hռ)CY-49֑'b{Ub5sjZkdښer+ -1>YfüzCHsÖzĤɃV\il+ث*ҊWëӴ4i( 'V`+4ߘ\eLa'ڡ!Ǫ2w:#3sd l'jڏ73`}V59L4;r4tr4tr4tr4tr4trLf[N1N[ݢ3ӖӖshv#Xm`=o\d͎в4͎\fDg!!F|ˆUF|1"J/o#B>1"3Έ#B>Caq8շȧo#O_;#O_#O_'#O_#O_7#O_#ȧo=#OF @>}|آa9շȧbY*䳕!mM|v0"䳓!]fDg#B>{Lj~F|0"s!~F|ܳ%>=RY&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[&[ú2qM3Tܑk0p4>S"e*S:?]Uv:M 2Fq0 DC$ak8N#shD6'sNJsvc'spZB:T߃v}=AT;E:;{<4p#8HL;#8FpPn>FЮ#8s#8qsz0|B'#ORǹwt>_n3W2v73Qg3#8/ F A;Ş#A>5`F*K A;Ejf3v}Y F0Vw0{Yr==}4@Aiz^v+(hT~vF`8=Cà gzXQ<௱$c')S*3.egv#s" 0yn^>a4k̮e^c's ;Eh&ܿI6 ᘙdG (J9fY/bw +"!pxv},_c돨Z]l"gBT66ꩈx CTsnD5{yX 9c.j!9L8L"<*|z7^ 9KuG 7 K00/#n L5{c~su |&ٕCi~)j2P4M@a"vώVX <ʑXXƤyb?Ll7lڋ3kݰ jfVq1T[gx-Gxž~x<氫legƖٽƎ~Yw?{ #p sxlv9S/ŎlŰ~^-~zطMl~vط]!F`_aDط1F0~nbD63ѩ`/@;gBt^"!5st?#J͑}r.y5֑D%2X1t`#O'x:t$#O|Ϛ Vshػ Ftaf"+I`2)b8hfë#a8~,O D^F6/ NF9SO١ ,^bM;,Dvhf,#$df;Xb3l'cd-N:EvC8%փ}١]lDvh<%,C0A91EvHe~SdTX2EvhvL3KId3Ps-;i7١!vMmCzPs #pvPs'O5ACv0#pQdjrImP_܇~65sHA{NqQNH *@>W{ю8qv0N8sy"3$\?$qN(Agk8Bg;H%38sKU֪'Eg<[r$qC$E*$qC&8=2Z$qyfBg~=w"HhI,iǏuI"3$vę:$*IO˱,dq89Ǿ8"+q]˓:8߮e%A/'299BHOt0)M`"€++|ye%Ǯo{<[ \dc x=dkoVwm{ȬAx g|M+;N3`fϠff~<| ^Ͼeo-_ocKK ୆YKZE%׬>X~Z7<[`e5+ߐ+"3¢|R~oX0~*oX!%( :t1zlMP&A^թN4}C *c],8: مb|CC& `H.V/h_pC#~k$P ~úRoW60zC(9 QJ ~ClnzCԔ|u^= "gRς.OƢ Y׀~Ck@y]wRy]?y ~ ճ A,ɾ7IJAcbi5,A뺾 !kD<5F]ר:}W! ]QX=\x` )X=lWvԳRzW+51RszT@Q 5+B@ NX9_+7ˣjazCo QKaU@ 70zCȫ[aC@ s77+n(byأP,zԳP X@Y(eqs,77 Ha* .)'0^ׁa(BHnM1V۬Bb[4Xl"`{V C 1$m%X8XU饳VV0zCHM(qzB@ K&To"a\]88 F0q^zD@ !/ A S7Vpg]0#@ɌP3c<͘ "3lL# 3fE̷(1mMLsۭt&G֍QFMN߅cfQD&~y/23/Au1=QjR {&պjRh~L@= {_CCא_DkkH=TJ{^CC /GmYģ,5T,]^r9qb9xYgb9~U6R?yE|&XgUyE=S+ Wlnu>yb!.11*ǬQc WSwCk`bԫhU4z*=fVGe ,Qcʨ1Ke =fыY,zQc|8?EyY"] rn? H}WC@ /& ]0z~.D^A݅-f:EL\(Ĩճ_!'Fu %r +uhG+RPL!O~ 䩌wa|5kxlv^#@f+S+۹ݔ HR0=DvA߅񊾫 lEnE+ 좾+ H%uWM@.1"{wM_.wW"{m.wWxɕISAU5 A^JsS:݈+a EnTUa i]*UTwI΋y:/wZENi읺K,ZDu@"Lԯ#!#z0L"-H ʁ˺/҂z0L"-Sw- iA]H j GZPO9҂:#-9҂zћ#-yFTkɍޚi뗇nh:p#C9HA[QQ"C(N+pC^a.UY -̮ S3Q㳒" (r)'/m)+T̠3Q(TٗmJ/)W˳Jb_UN0Z*UςC $#׌%rKh;cSDc ?[#?%ޯ3%PPFY !/TdmEFS4:Xa )П"f|TD@) -]FMj2rQ\HKI!Lk3Qiy-by6|n#Edzu՝"-d)Q?+JJygR^A,e7REI}(w?#c?+ maARJ]$VѠٟ-6).Aɶ F5HUkdZ4~Vƴ X/m^&YJRQ/3xޝ^H5-D4ȳ!E<=;"N`!#;NZrg9VSp<(7T"PnA0*+#X]~pt%%:u,AAr7e^>uwwg+#Œ.{˞=j?.<\? w7blzrXX _C{iN@E`1gbzo^}Fg'x݌Ԁan^7\Qkw2g/?ӓg3fz5 VF@1Hd##%DSjxzzFmb}nf$H#zG=tz']+CPj;*-TkJ!UCoX+ވ./N1dc(p;?1|RgUZEӽx ӽx+ӽxt[zEc ?0 ?2 1ݜY$Ș5jHTHL"q1ۅl.*.fS'Tj7OR ,"7OR 5p_QVC{;#!r:v8_'_uQr% YD,QÒ^ V 3.1 Sei!I%N]T2g`@l>c@ ʇx> S U>X3 ]  iDq4~XVn,#qUZ1@iQ,5Zl3p'̿atӽLdm3 L f6^!gӽDGmBӽLpto#{_8f t ӽXc:=tbawt?-z<>8 `.C7{.g/"ӽ`_bL}^2 5{`_x:t\t?V1L vM{o1m{a;Lao;{~`~`񲠌9-{ n1 n1 n1 n1 n1 n1 n1bTZ JPi1*-@bTZ J"Q"2fOYgcnZvmbDD63"]c d\ۏ2kqFl?A4,#Fv RԡHQzl(vcڏ1`i?~ȧ#OyF|Ĉ #B>Ì\ei>Κ`t;S"V1~ȧ5'~-HRT"@2;sز&Fr;4 2ݱc;#b`bD ̽y103{Y0#BGgU\\\\aVa^a^)S.@ls-#!f(f afقZNP3H(H,jTyEo)>Dhp[)Q2"˄|HeB>=@>|PF `Crs=#O'LȇM^&&/aʓN6y(;dέ@>|:Lfm2.fjD:@d Dan4d$ԅLuEE!%Nu7mS|O]S]lq=S]l%uǹN)s]EFwV悻)!1h!ĠO Z>1h!Ġo?Zh!ۏo?Zh!}BVG YۏZn:0Y6&I41$P+7u&cax̞&3y1{0ϳ<{0ϳ<{0ϳ<;G˄ɍ<xv0dzW x<;>Gܷaݮm0n v0n7 v0n v0nw vrn+v{@ovL1aݞ)an ^ 0yx3<ě߲,]YWMs=y8y2_~@=#@=+,p{ug&, !Άof vgwn*!.78G{㖙=6i;}soƗ vg74p7WqF3G~g\"MoLƙ^B`7o) ~3_.%&MH9C{v5A3ɃEWz7JY/ ^@ϓf<872jz8*rӔ~eʍI\q)Rُ"(*1)*iB~7QɃc77QOLo^e"y_oe`T DSJ(OWq2ɫ`l/%7 8reaL:^PuU D?m$;";&;m!;%;#;mL杶W杶W& N+N+ TCyÄy#yyB?u#̷4ao0~'w0~;Eoӄ;Co;Go@oWo9|]&̷|o0~W Ho%|]#̷2aanano\ᴕGouXhVzu@Yz5V&5;\O3*{ŭi^o֫AT/ ۺHVn|(p-j3L"ebҕ aQve]v Ot7pE͇ D{^Qp2+륂8Q$wQIF,Zپ8ЏX,szŹG kW& b$a\1@=9Dt(nĉ(@_պ2qɮ+d?Hh?][qNb9IDN ؕ!'LLQJ&P*@?IueJ%+@t++LKUjѕVoT\uZKJ.$󁩥br!xte6+CnL"9d[KfrewJh>R=0=v{nCXa{ 30ae& +<aSmC+A};LXaGk<(aMcOcĘ&'q|ba>1Nc0q0gq0~w0~w0~Ʊ2(dݕ +^!vW&7Exn$B*]\ ơLE`a) K!/ver!-J*{[ez\_>*KɃ2.[9~UUŸ+ח!/teTo?fK%=x:0.uj8o}oKzr#ReT29o{?Op=[zZP2m}JN RQ}1mh Bx@Zy!j XJôrB<7 Bĩ21ǁTlRŭ$Xʅ8 HvI*wer^wZIrᴥ|-?ve] m)j$ɓ-1qR*9]?Xl%[ +m%O]hVؗeh+Y/9"LXaWKQHOG|8ő(4Dq|(;8}G->}GLCLCLCLCLCLCLCLCLCLCLCLCLCLCL~CLxCLrCLlCLfCL`CLZCL4_hggPfeddPc8q q A$HG"! DBd'"A>HO$Dv|"! HDBd'"1>yi:D6b"RG$*DdP!&"} 1SHBLDb"R/\DdL!&"] 1RHBL{[DELELĻZDEL[ZDELYcmN̿Dgh8^"}/8^"M/8^"/8^".8^".8^".8^"].8^"-.8^"-8^"7)ol[]lI啝 ' %H=R܂$ $Q*HT)J$J"%H,MDb !KpX >W*wHT7k/́k/R i:H$HBV?ҏf)#l/uHGr}D=#!_QzGC>^)D֚YkJd)D֚YkJd)D֚YkJd)D֚YkJd)D6hJd)D6hJd)D6hJd)D6H%rlӷ)'jgI&qRДVS"[Ml5%ՔVS"[Ml5%ՔVS"[E4=E4=E4=E4=E4=E4=E42PW'oȌȌȌ&RdF)2Dh"Ef4L(&RF) Dh"Ea40HnM&RE+⢉qĊhbE\4".C~N0XQM(&VF+ ĊhbEa40XQM(&QF( I$hEa40DQM(&QF#_q$hE\4".DܙM&UtE*I]Ѥh]")y+SA*ڠImФ6hRE4 hFGݕ)1,h" ȂHYplI'*z1RoPdAcYE4FQdAcYE4VUdAcYXE4VUdAcYXE4VUdAcYXE4V #Dqh*ڠmIGzI扉3EWr!&">BL'OL(OLD|)ңH+ңB+ң<+ң6+ң0+ң*011WG/S<11WDH/G<11WDH/;<1PDH//<1PDH/3<1PHS(J)%i E4DBQ"M(PHS(J)%ҔiJE4DRQ"M(THS*J)%ҔiJE4DRQ"M(THS*J)%Ti*E4DJQ"M(RHS)J%Ti*E4T"6۝=6"qJ8MHR$NS)-M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_Q"M_S"kM5%֔ZS"kM5%VDZ#kM59ZijN5Z+Ml4F+Ml;FS,Ml4ŲFS,Ml;dF-[Ml5ٲdV-[Ml5ٲdV-[Ml5ٲdV-[Ml5ٲdV-mO-mO-mO-mO-mO-mO-mO-mO-mO-mO-mOi{vi{vi{vi{vi{H)Fi#E"`Hi#EŴr1FH)#m6RO)⧍FRnG'*UʍK+ҪiƊjcEZrƊjcEXQ@m(6VP+ ƊjEDQ@m(6QP( M&jEDQ@m(6QP( M&jSETQ@m(6UP* MԦjSETQ@m(6UP* MԦjZ(( 5jZ(( 5jZ(( 5jZ(( 5jZ(* jZ(* jZ(* jZ(* j3ELQ@m(6SP) fj3ELQ@m(6SP) fjsE\*c@DEZ"\VmH6WU+Ҫi%O+ jsEBQ@m(PP[( -j EBQ@m(PP[( -j ERQ@m(TP[* E(? "ocZ{Aw7Vq!n=$ G=qC8ϻ7 B{Iwq5!%I7)1pf!>%}8|3A7 qfrA8|7I? &)B6LRl0Ia"l$BI &)b7LRo0Ia"~$EIS"B5LEj0a*"\TDB6lnlبp!mT344444447[n$GררררררתתoUC!"VVVVVVL9؏`"f?E "b?CĈ(C̈H!hD$5"fI3čGD #"i4CH!xDT$"*f3DD "bHQ1C,& "67ElTċDJmH# &YIinEĪĪĪĪĪĪĪĪĪĪĪĪ}bMbm!x?Ia"$E܇I&)B?LD5?LRD0Ia"$EI1 &)@LRD0a*"TDS!Pqlݟ+ N'1Pb #ʨ5F?QϨgT3V?UϪgUX@=ӪiUϴgZ36#!$EI!'&)bNLR:1I3@;1Ixb"$EI'&)OLR&ad@1b*" TDDS1!"BLED\ClnDبf !UPnRnRnRnRnRnRnRnRnRnRnRnRnRnRnR)U7)}E@@@@@@@@s0 )I )I )IR 䅔^Hɑ߄fiLb"{*b?bU~ĪU1+UbUq/"E"RJS3/"EDD9s)H ҋHMi}MqZ0f@D \zJ=(GJ1n6p Wz0z^i=k=7Z[/Q]#D=Glz%9Ksĕ+QភZ+}FyQ9>s|P#C=Gzp9=Ryzh=o=|.s9Qj[ A[ߛJVF2O˯/Hz~Օ;]rӋė2ߦOue]Hԕ@@?VKsq>!Eޯ|BHn8Ott159'8|| BE qna'!?GM3=8K3}8 ~B?L!>(!>9{ g?!,!@N eBtg)B䳐g!cBf> }2Gȵ ckAfׂͮeT2Af726;dlv  c8H2 !c8IχK8!>9Mp׊Z6=ڦ'R>@DHD]|n$VޕD] yzHhbk>^ĭ|n,Zl}p^*jޤsד[->_oTO~ulrK>SZ= W1c000O00/00~WwZ^Ğ&̳=`7E*'B~9+jaPX9A3qmꞬW%B\?^#qMBs?!D|b+s|v֏ q\xԏ q< !!q۽8~o'qBqk0|X!!2&GQ>> uB`> }!>!o}2!>cMLL,>ԕ9|M{\[XXXXXXDDD$0I&2yWr?+PK\JNU.?M(r6ʟ4v{J1*%JI0Q))?ڕ3rIcTʙ:њĨSl`Xu*m`l:Z-sXuRo:ZE:Zə:f*3Y`3ϙ:f||Tg&#SYLHMn/2]4%U*suK\ݘ窇䪇䪇9(W\\\\BBBBݒꖼPPPRrr /KťReqTY\X\,.U*KťJeqRY\,TW*+ŕ*v{ MVk{2 4m ԓW }v+ ԫ@VPiϪT9&$I~@bF2b@ #e$)~@rFq/>EkɏrCrc A%Cnv!7l;!7n;!7p;~ΐȐĐPa 5C~IP {! ^a! ^;`g=CrYy`7udbKBiAv 4{N4{N4{N4{N4{N4{N4{m;J fpCWu@C#ΆlxΆlxΆlxΆFs~3W qoxXM~K9ge r|Eq+jȌV\h#Ǿ$cvJiQ#Z1Bm:D#?Bc BK#v4<@AhpA!9gYݳ .k \f4OPZ&(dzr3<=Gc9*g88p =We> Ϻ;! =@9{D>!bKynu)A^'rA^G^dww:v _aY!* n~!*~*+fd¹SBY!q2 u6+L!H yla< [^#tJѣ'6^/ |on+ܡ p`;4 :CyIˠ;!.)c` Kd}ՋtL=: C+; =wjq:xH@ψG%:xmTۢ/l2A0c`\]C\1apet\wF|ĥe ^b2A䐫y80=.qtq\!<]n\?z|CrH7EGD|µyZ q/tc p3tcq?M:xOü$v:~pۿq/,攀x0s'h;C>pf,܂Sӳpv|awM$9pvxA Ax\"67{&YVi*!8qsuxv|lxfb$N9r4,vf$N#Gi!Ak"p I $ɘ 9 5RH.f9$'IDI+a?|lx&[|lx&}|lx$\IHCQV(Wo;r0AK'Q&HBBy!%,HJ9} g)2SȊԔ4 9$#I`; $pvaa֑gZG6$_v[}FSbk j[[Gr]ǜ!: rDO,[ wfg4'Y' f9y _D4Q!W {YA9$#*~6%ѳO3ƿ :O".sQFm5@[P.@[MspYOiAmʸLP >.x9H֤|YQWϑ"8EV CAm}&\֗҈/s3NW_hח ,=M&s]"[s ܩY"i#[_y 1sVhQEl}ȆPnf'<_Ki{(cZE[BvAm)qQ4!ț D66f RX<6m,WAn5ch'5ذ8C u'ԍvcXe3Zso֦ՍvrPh`c T7K1v&܋]Gg$̣C]uIډ Z7zE 9uk4K"Z7:H:FieI_iH/a !ZuMZ9|18rFG0 v; 6"!7` FGnV\hv<^o777R̾@ocq!g0 Q Q z!$F6;I6_бNW56жѸ4XƍѸ(q39DFgHcC4nt!,9qsW]q,!77H*Ent hlNQ]Ae7XbK! 7Q<­5 Q<<[= ϻ(U[;K3pkh#0: #p43# 7Mp{4G! t8>1 q Ë= q=6g,c""|ss@ov R1!sR !kh:EÈ)}{.|ߧBoyr>%: i=|&2 |hB16ݡAOD4Kzy뙌F- ߧstr@o}:O1|ˬ{QI:!ʷL$@om6W}D[>FSb|k׹k0q&!inh%"y eggBL 0Xfq nKK]%ͻ07g 8Kp;"ҧ4^EVY}a9>?#u:[}z p S0!O/ً)` 7t4ZޏM$巊2|'⻎MoN3^֎7'_כ;ގ}g4x?fYP3YԮQ"jZDmq.EԾQbj_L틩}1/ԾڗPj_†%ԾڗPj_BK})/ԾGK})/Ծg}g}g5}g}g}g}g}gw}g}ڗQ2j_F˨}/ecޙ&ъtmAy]iq4H蔣e.] Jaj<:wr hTPKfX;;ӭ9!pip/_vendor/msgpack/exceptions.pySN0+VJ^(ke5pʏ=k;S@"Ύw7b>l[T@bcMla,8#Hs`tI*?nwp =;gwhwL o9)`#l ̷05vRR;TU!>LĚy=M4U2~%S}dJr{Hg#34yV{eE-fʜ,F5~c<$\*e0.ՙvPkZzY&_0~'(BӻB~$EE֪ߖtҢ!59b#Zi}W_PKfX:]pip/_vendor/msgpack/ext.pyXko6_qb:@:I1 M[bV(dZcmT~(dۄ,:ʢ9$2xS)J\;sNE载$cJ彾~X5 `D9Ap89|UpŅV5h %rϘXOq$ +]R HxP-KvVUTq.BAe^* 3@[PfXt#8;7 ã}5-̂/ahMVjzq]JB!k: iSpRUP*r.fb0NgӰ,* ~@ֈ#,JLZƦSfo.킓8sl\/SURl }E-Q<!ς i?ua+8V*d}*R-T<[j'#yFe#tMYY5YD֧UxrѤO!wW2YBE7p;U0 ="Lw?6'M9Kln;kẌˀm=4/sjxD3y^1^'kDQuזՋp|)ã&іh"vP{OMoڎr$(RdtG#8=q.`|z0K!xSqGS=uƷ>F"3af،ݮ3[vLÜCw׽s7B5gNx2Tİ!as)cPKfXepip/_vendor/msgpack/fallback.py=s㶱@ɋt'+}_eYRb1ÛU2=~8 :$ ݥU2S=*'Ƣc)'E$)`e s*?vHjp _O<7z 6d '(*v|$iRFQYqK_} ~^YTw@T+1vgۥÅ`q5X]}<_ 9/WyjQ,Za#Pp=R`^A9,<^1+C0 QO7h=$VVy^g`,.;/X|=E,p:],.t]XBç '_N._\F?W*xyFٹ)!WP#T#4pq#UWD<vggtzv%yi9  F%L&e;e%wÒ/W`Wh#7*ъ"Î?|8@-G4$(Qp)EU}4ZE o&qf%[8\eC^>)[$KBEqi=zt{TF#B SO4s%j]_ i=$tgW֬yAI:p-Sz(!0 TMNu=i. 4̅SQuylEMt@JI),sx%+6r 4=K+ ڢۯzKŊPO8;F?ZHz3Χ ȟA= 8ߤ-peTR,N|zht|]6J|"ƙZöѡʈ GZV԰ uzܪg Fute|7G'-O˜z`tytZPσcU R@>!?o {H>k_N'AuH_j3/зƻBycS(B7rPxUό˿7D0ij&% SCyJd{Jdxi#pa]yEo0lY5̀60N<ʯWe[Mχ8l%'Ƅ|v񕚤ns.n|%$'"DEYgp*h0;0+ (ΣAg;Wq́D[&SrŢy0kiw!i2*@K߭' ԆW pI6ŮKlTS$v)KI<>o Þ2=1<5kd%y)0N߼>p)cWq؇jaW0c&Gxk,K$,}Y^H塌$qfHaƍF#v0G2+Eͫ< J v4W7l2ڎ'9ʠ )8bL%<}t dX,ɖƪfcbdt&4ŷF,%;soWzSܣ].̵,H;iM Q $"."ظncE*Gkr Wec]H!퇐 nAWsE_6Hbh^D*YfbQ*LPfȡUG)*0x ƆC;T.Nxuxux* YXK:LU'oa{.2iUQN}E5ζ(Y,LB6mTњ>4h$m S9zb*ś6|uKm@o:fpp;}X.}wݓW2z,5тSy3ˮ;0PSN{NZs(o@׀FA>)9kZǣ|U( [YrD-צ TZ{nl\۸YlBߔ]#HBF,W@bUwZ(UFHiB."@,;ӧ efF8@gh͇́@,۪ʲ"md7vb(Y"ja5Uu)ʃV j1 CBCi"$dvڽ.c[sE*E#2 o˙a`^T+׸*LI8lhy]{krQcr1k: ү5ZS.DY쬳~J@C?b8Smkz{vkmiaƿ_=tuEj1?070ob2ޚl(o!)%&&p#/4fok'_C~Oo d |/jx!xgS1rm;Gl!`d4MҕEQPOezb6`e:?m:,fD[AkUrb+>(k*|iK}.}NZ/,{!Ma \5._ _GG5g I@,>nIɍL3:HUs{{ i B~~@hp9OL{;v>{T٥ܥǶ?ģX]Os)p)rxr6R&BCW-{ { 4F,=~'v@5L^D #: %2B|aRȶuzp&l2x*}:&ۊ"u|._^;ch1Ї[:8rxs>ᘀ6G׼r i}(UH4f$4I}\u^M;!:ܛJ ->Bm6 (X%-%ý 0o -ؗBt+UuP5"1C4P};N]7ERj,`5!Phm+mʢ?Aۉ:)r2l>ucA58ѿF8 NKܴ[]f>Mq3!4nYtLK rO 篂Htj˖<ꉟ=;BVu.pQ];(|ʽ QFif[:D f&Qg D!ܕ^o*:=P2<` Y{s{R`a;"7pdsmеq]aVח[FR4ZXmt W(HC]'P~E_")ˌqNߺmr}X%7K^5"Y.yoq7aXwxojܑ(0]Y5 "[pt9|Zbw.P/<~A E$xCȊo 3TGW&DlfV纞n<.`)A#2k&^9*;G1%wVM.qW<6H7&+ zu@7ztJ^swKt2qb]--& +uU$>ΌROQ) t~'kn>4.PbmT2/JDcL݄F](CUݮSz!fL9 *!{Cļkv_?)9"njYUPkɂmMĂcx$>:J+f&S>my.oQ z[w?Hd>`m6<յTk$O)(A@M˭t) w{fcҸ%jhHw6swɸ{Nׯ5\AKu| Nw?Zknk< Ov3n=弎O$? )m&~4\)~%XlvLJm%qfY+ۜBy ">pu0q-`{i[ђ=,$qHݖM;)8Wj^GQͯL#En\ J+ǃ-ƫ]ny(l[!_HRG18'1IY( ;BN4fl& QT :!r S!`WҠaqٰaGQc, 4 ~_%v_׵AďQ wCy!}Z}lDNz>}|~Ѱ^FdOCvȾkD6xzl.&E`m|x+ҵ>knl> c$Y8gFF l3o62şî{td#5k ~S_[qLf]O6ˡkQ[Gݙӛ-^SȧWg<_cZ/cӫK]9_3>]LB_R6ǕOf7` (Α8) + WYFϺ~SZz5cR3]3֦^:ӝv;2 !ְ]`\"{Mm}8IkR_/j_z!s_aaK;;PKfX'/!pip/_vendor/packaging/__init__.pyMQKk0 Wڤ-= e 2v ^$bl?NŸKCG!VC-Z@A7z.='rɴ5|ĶX¾ܮAYh/SBV6aYwĞ:v8(FH 6 <"6z">rs9CB'Y5o(?TUO22V<_@_Y?}]OlPK:I Ji-[q)8S{IW'-2#nt !N[Y<͎AmwX௿PKfX  !pip/_vendor/packaging/_elffile.pyVn8}WꋴuK&M,- m)T7!%R$]>X+>x~M5tGj}r'}zuj0@@#Gdm&F[Iaf>4FC|Xг<"gRTe9Cs}iz'a0(SJ[6~oRpC u6xMEzB\¤qyV^ְ31>"pbWl'Y% o7?q?y+u'=;韘4f6g<''ReX%T,ͪ#ZQD, YfV#[)d]1JefE=%!v,{H'7$ "טdL C[[m&3SQ(o]rې+uH/sz:ʹZxPCaر/w^;j=i/^nE; *<Ux#kww4iR0?a} y2a&+RŶ6 ߣmĻ)>m+K(R=0!a0K[XJa}V2 Km$_ra"7ָ*H;5xNXvJ PMv*|lj2639U7Ump8]X!Qv(@B@jE%dLJaE?09(ޚ?lq& ^K޴.Wvj5+bL%`H7Q^_O.|i]Em!K1|4M^9E~+F+K/lk0OvQ@s`aZ:082KCl/h%-lִb /8O a_vP*(?PKfX]. r%#pip/_vendor/packaging/_manylinux.pyZs6̴RW$_I=׳7fsry>:y|'{>8=c^䃸g*lIɀ,OF҄y/GLLi<(^{{镰`4ck wx*x1 _)`14)kW7gYF} E ;( LC8ebVapP |>miς:*#-Z2 ևU{LD[.waE(Zx" 0?NKuб{9y/Di,qeRʥ<  "wC+C(.l0Q'Xd)Z*{,V:eIWf`VbTǑ`(2.t,"BcT,<#kVricU#”c`$wE@{01lk=v2x t7kC*hҪa(Cx=vr5}qyȀD b}.|瑦32d&xdBzDJmRSd0&D$ m9"$жntL8hx%F >#%$)*`ųeNo-b+t( LOctZ<,02&+72I*EFLi '#dmT7O`b:B%.ɂ"^ko!md 3E-;cNLr)_bZ`fmM_ZѦN,.K!ov{hB$ئl*{ Z!*ֶEYU %nGsJ?;omyP؊Q4ŀc"}g*C`t^,mj蠭Ì*K Aϊ Q֒xZ3 .)?P9Nz9@F"eAaYxѬbaL oMGd?1V,Gu> ԣt h׸L0)ZE\?귐e-j,}$1YRa;LGnܰA-4_p8j-YXPΉ(C5FqSnƃxu!aJq1 nw9ekv0ɤCU3p3r.j݆mU-C|Z#̇G1×FkU+WG^~ w6-kx:wDy)s;+|;SʘAXÚckG9c`nB8nvGg04u ۶Nʦ4Dߠe>=ggNN_\>_x.G-=Y5T`^( ZGM$ $i nɤ䠎U8(ઍbkTtf,4[%BhX%^*Lg4#Gk\ZJS?BvYW8|+|W^G|wnW 6"aorʬ2|7] Ř?f|n n$`YA z P /͖y">V//Xexwh7%(q7 YE&عT1:n~ ~o+,3hp_̋ĸxCT@QnF9rFM&̠qg7wjG[> 9nUm ]3P8hF pTř;:SO߼,v|"A7jכp=%mZnT(K&&vZ8fx'5g5/21JEט7=UR֜,E^}>׃owmc$bp)~wj!n*5I~-n,DVrp wXҫȩ?PKfX3 #pip/_vendor/packaging/_musllinux.pyVmo6_q>Lla `0a.@~q N6H*d;m $)Mӛ \u"InAk^!ȶSآ =Vd~PҺ:z77KX wjBqh wXIIXBY6-%A6^xdkz]yc',ovT5wpѷ?t0֣-ַ=]zuC8Eid߽yC$I*%x(_$@Veq(8L(;a J9w_6/g'?h htX 85d ;eq.:,\6Ys":7: +9 @aaZZ7KH94?$78,>nvW|<2 ^%AΚ.|=`uJl_Vc~y|ªbO}51a>!^84fAgW#نe:d#I=P-Z!+F4 L5Zm HrA 0zWԖA. W5l)PӢiJbL) WWr[AUy*F/r}=\ƚ- Ǐ#G߃4]3H6A8h;Fj"٬ "ڎx5Ov??\[˵Q>/SS3X<ʉJ &eS.Sݱ`DlrB ۛkJ>1?WM>TN Ϭ)عLjS[ ցca 3G2LL쟀@eڎhHY`4鸁 X0ͩ ^*j%NeJ1 i8pAB vS 䣙1]@4EC6pr,a#fIdlcb?3Cr'Wte(!EnO' ?$*$E=1Ѕe(XO6ߎ}>)P<BjDbDfLx)Tu^B0#( K ٤OG;nO|gHzeIwǒ]YyYᒝV,薄P:_эp*Yl"D 1Pb㢖1)u tpklFto 3+[)PuwFW|M6i9?,tN|5~xθqPKfXVb 5 ' pip/_vendor/packaging/_parser.pyZ[o8~h,}5vԙYiD,i()if{xHJ/\V@b9<׏$(4'[!I6$ Q0F^o}O& Fڦޣ ږIXDi4)phr>| 7YDQa((IR^\]4`F>9mi۲() 6(IqyW^b@( >uS oiAv0GMM>"  G tn+Y@VtW,7K euU"I#͟J8ayk $j 0Dy ?$,i=<*cf?Oj;f<-iG26$+2&Ȁ4-6 ZTw@}^Czz9, ~ 6V87x2 `1q+' Q#7Yi!E/ٌ p6-Ay;V?!W *uXf2xV

xxjRݔY:,A$D铥y*}-02̌x[t<]ZyiI4r)і z C)[c3bmdev}X싡vW/Ek0`lq"9 -g@)SB\/M+ =uSw K͚2 -qa+vHE hv2w!G,\$eh|:w[ ukY1A9Q~dwCub1[+7 6]a;zjd 緀]鲭3h¡ Ĝ0Ү(խȽk44)t4],;%^]~w6\ſ&kgg/`Drˇzsη#Z7B˧W$;QZhV톜ZiZk&;dRk-t20J /lOr(9 ;Xrp, }Agu5g.;k,26+qhW /=ҽnOjOjW?z9^Fspr'(Mg(T"F_X'捺ƴ1چC?L\fς|23KCetSXN]ZK:6,n ⛇}y-㸢|ѩΠ-2 ȁĖeJUlاJ4M|;+{(e+X kk[CD&j'V6e4a,_jUq ;knuc6"ʼnSvVX]# "Ƭ߇5]Y;.̞+Uz 5;+ 5cGc c*UX9#Ff$޶jfN>Ym;c(|Xvl9Q갰[szVg} S+Ot|>DzVtK]CJBCFGS@܁,!eWem6C=Sf}JÎYmw|e) \:U)/摿tVƗ#P1 (v>̖/IYCTRsU p8 Ш#>[a9eT$z3?518\Lb-nWau&n(RE:2!L~ca3wqet(wj-jNU*a%68oF>z㣟goٟ_H*%PKfX0`$pip/_vendor/packaging/_structures.py͓=k0wYpLh)BB϶"ҹ_YN?dt HQY̠V-ܿT&>O@Z|IEd  }\JeY;F"~lM0+&C6`M Kd j 4!* vIkO<ϖ,4-czԆ~TvqD!$6BRY۰ґ+MF𲧃u*NHMsӈ Q@B !xlgTZݛ]b}E?-HԵUFĚsq?Y9f9fݫ_ IU2TdKd9R pIcON?jamK5X|tNkf.5x7q/`4_rrotqѕfNj4uϼt~@sV6(7Iy3~hqDzZ4,SVfiӜOt4q3f~.ev;޿+w:,(Şu}a&GY:pt5SwM; =%w!>CrIe091/Ifdmق $l[q(*3o[9= -T);33Z jgo\yESq0R=b͂Rg~jvuU%z >Gx )k2O'`ϠPnDgm~t֢QB;GCrn_);ơ`A%OP;Z9kZYzOUfLRsZe_0QўZ1؋?CE9a2pT߸T66Z D#(IQ`Yft[ݓ;f{T-ni2MzHY|!4VydF T|6IFT Dlslz dBj[!HS8V82ΛzPH EX]zRXQBaJaI19 " Ynm#Q*>p {N"dvNIߑ`{ƒT6=K Etbl7%M)kl8iQ_`zz ;!7 c"7SJ4VZ{P.6^>w.ew8PhPI6VO=OsA*#O@K l+/HLݎ::6 /C\3AP([\epp dX)\ x3|;m0 ?.i HDCjfz GOIM):ZeA8;=U \u-׃>Dq{JtH)hT9눏pσqDͮs E˨ w^_{tEq+R- ?݄[r%4Vd:߇MNu5~w!'{R"|8)0 0|ƐřACEUGlS h~k_2JS/ 9 u},X>4cAQ+eryPRKSI:؍7{j)@q_PKfX ) pip/_vendor/packaging/markers.pyZr6@. &m/3KәtRS;hd,l՗{{{]$HQa#vd.j\"cu`FTԊnޔ<,ل]TZbtĞ''ƋvI؅4wg܂UJ$D4X6e.`0\:VڰbURU.DѣS8pk*sn띶ͮŵgM[|^/wȾkdI%4MW7zcf?H S>-ר4^Id9̀ʸfpO1Fv9߽*)u)R`&O\f5nNm@מ<*d S~ohXN@l6bKhb?d!`EرVޣwVV؈œkhyh|4 x+f|–J@6Js5)HQ]&|(-a &֨HVu0D;wξ=y4|*xsimnؔ8"nX.l%2t []A1q k %K`}Y&chPF5"NqZ^]%M_pGݮ"ErŸޞӊ̏Ol zO֎* eT=-wӌ>R:A|.a;WI jmTV«Gd0ߡ꺂 (]WK\hZaZ-kwٻ=QrM@B?>$Q%rc!V T.4 Xn.I,j4o>"SGC_pST&5A\9,nElQUoMV䭐gʸZ1l 48`,v2oRQuf ˱XBLcF=2t7oMTvxޝ%Pq'~_C TPI Abi blSyR*k!bX"~OsAkw( 6%7<@\[Q.\,zaEƗ;SMj[i4w%+Mh8jcQ 0qP6S*!:{IH^b}_b_2kVn,w yWB#O'$DFmC@josv/_-j E{=&Pb#E$T.f,,ʳwZW}>-{[ċ%f^ U'Ǎ;Dhp38" u )v:E/Zȱn@j8S ؆P٭`kD:#$l?%I2CLt 𜊘 y;f5!E5P mAs8tA5/}#KǎBgU]3aR_ cè,cBh O|PmTk kMM! tNuPc-V!=h;tC#^JC^gkL,yzX7\_,bZ&S=OÑhM-)ǣ} y@VHeO|o,"IYf72,ɒ!6;Lj䯀KƏv> _WS _7ÝQXE2&UN SJ-r>MktFIy K˵u؊f1^e%֧]Yیٚ4d⮨cpH 'Bp )jcj5^_U_0܃xᾢ$r Bwb3ύصfXދyvZ{-ϿZ 1y*eOS(! ].kJJ˵1>{VP!DUxz^R*`Emp#~tqٖfJV #u-6Pd1j,XzA"FބAhOڋf-o)i㒊vՇꦮ:bVxu^͍oZjaG4X,Vzy]Dja>sʗc$MݪNٿ_ZgO'LJ00;q;ډZP0wPKWjpWiD]ZHN WHQ|0`~'D'(vUuIE+64]{KvH9n7\)oY&f4'Nˀ5tG"?!WΊ!M܎ S{iȽ5:-pJ6`oI`HV(q $ Ƴy(E6Ҽۺ.zWia\bQu> V #-CPG B#qzu7+yzïZV-1|i,ZP  / r<~=a>k{ij A2; OOU 8 v:9yU]f蕓 *ɚuDf NP?'~mR.|{h@jҴ"q<oA~龜F}0Xcc^۹GQqLf 쎻^pDhkH~D5WL9% U蜁\^]4@A V*[fsszo`$ H Wؽ~++BMB55׎6r@8j8u9;X}V (9ؕ_[q9z*v<$K߀IlSDO 8e+L'*j+uX>*pL\! #. 0Җ`'&1ceξJ-1C 48z\ DB1zB$uaF.@Pƴ6؅tk0H.)8;t% [XΛKKK:}a ٫B{N!  PKfXD!#]~!pip/_vendor/packaging/metadata.py]YsG~(K8jtxcKh dnl`o^uv#l2u$j$QTueYiWest$uJl֍ϯUUӤWp*N6yyuBfk|ߓr7OӢHw?RN ~sۨYl2m{5ZOjʶFF-UjxݵyO7 (md]e]ΣS;ƞI|nF,<Tum^kzEѦN,*hYAG|6M~lN@UѨa]+)ph+6-j,m/iѱ:*,"n@aauf!;p-f2=tKW9&qg~mT=Ć¥~!gVEVnڶjiuzЀiGٕ`Tcax^U::~S5Mv0>LH4mQS$JQSpaw"m%DV\h2*%͡k[ZflD )q2Ziq"t'/-w>ez.E'[ F7jq获8$z6oܦnAلerV'(N}tCta7Y\+ְN,5`^i1qC_4e+2TGmjU5=r]W2i:A` e[t*6o`UGf4yPm[狮Td,f@2gOot(PD 55QeKe{?+m`^AVJZ;g7Oz"Dhqd $zmG,0*}>}zS--[Glk}2SͲazUZ_ZO6v{7)qlY܏d>N$롲d@j[U%]CzY@ܸ粢{W*Tgf(G&P.$.q6ao[CwC@SwZ(V9 8F>B|{AC<;6]ohaمM_7dhpSٰqCD]nBՁ)B޲U dSX(H.dXZ6t0Yvt&^m,z~ٓ'DOhAs#_x%*$`K06,Y)mNl Dβ4\wc-S߁uɗw7V7/**as ",O?9~G+t`GF_]hx`eW5PW6]Evq;?{?={lFS>#ā<?36Q NPhh`aŬ뷖GO/ߝXJ3:wXdrBD~+O?F60+ޮ!xi_(" "[gfIGݦ@˃O[BNOСJ*R"6]Hl3 Dm]Gg0l%};nxt?|&_0N2SE~dxvm2Go+"6vf]@`t GU 9WŨ@:-pzw\`$?9^1֚"d衬G锰]s` ¨(u$P行"`jʛA+cWuT`` F˔ɡ"Z,%{hs4 O1ϗWܜrvX5-+WK;w )xZ`ᦿpcb V[epd`YthX 1:D g'φA:zQ4'u#fw V'3D|@¢ gۨGs w' H(f ӝʼn/fwi|fb@dWp 5pthi :݊oB.RJlɠeO4 5#eZpԅcsN iЎ>, 3? sΕ*M4VU1;T1{DsGeǓ uNpP(󄫼2P9&[VWe ,P$ݵh?^b r k%0x q Lq+ +v<&Ap- m$o|^;eaMSi}w1Ũ XXX&Q|/L^..8{r-{izR#"=GF,H'NF`wglE^+25 :ja[rP .Hx?d C_`}}dbz: 9~ne$S+Zԭ)E~x5;pi -.AkpDh\-Ӯ^-` 5RrZ}dARLE1Io<3V'Ajthz}v n⢷' IMOل4fpSˠG\.VI-5/\ c,Ri> S.:㉋JevL%1*ÐNRzl1TB'*ND&6 Z p+DzXU=oaAI#QmkɁuOe2A҃BJvnkqL lu`s< ,ða0aqCs2  uq%c Xt]Easq[˛>FܒjۙR,F)ԡmC %bfdT0}Wx/h]W Br"JX9,+U&X#u uKqSlNj" ԳJ٤ԍf!eQ'4:+m>dV!<ʳ 'cS6_"tV˥2Ad C|Fz!'Cx[@ 69 Ȟ(ZUExnq+F pʾ#VĒ" ~S/,H~7PQ:uDH}<^$}9(hٞa='NIOTƴ$؛ІOMy_e#i;@{IAreʣJd( YQOk]M&iU2SI*|Ev1k \qW5Y%dEI#r]~_iLC+^DD.E;@{`MѤDahF.ˊi[8S6䔂X:8!=tL]'[zL KL[5 hsRL ?#!Ѓp c !-˵*(Y0&Hz lX&~m5]Yb8$244 s43XR~txBVN-:j8%x 䥜)宏`)@ D qJYW愊hMk@1ңi*^elbOXA1NOGar{e^p 怆8u F<H>.?D!ELR}tœ0yPRN2qz}1 OS$h@ƞ0bAf7Z:S޲er |q8}|8lVL9 Mc.%|ڛ'wP@t GN[n|S0An#bwz؝XPZ&5R]^>ƎYJFQtjCV IԦJYrVIysJ"es,<Z_v2cwߥHnU&ޥS^סgby/Kӽg2~,= []p͕v@XsHZB5Ȫte{x༎rEzfn҈ں!!⁷\e:$P益O5e,lÅ"TRjjE)"Ԧ55z)tEv+`zȧ~yӜFNjUɖ Y*v]Dxs@A1T/oDP e| ӧǪ#;GG7o35c.R`˞wmv2>J~yg.H~y~xb(G#1=]%19B岎O r=_=<9??ClbbI3Bˉ LTX.8G[娏P,HIBl n*el6X@7x;hak*75 b M )9!,날>9]T #Vو5E |nFgȄ䓇z|4+A;!N*G͢.GRdtbNNGDÇ(ԫAo yh_+&=>yDA)n~"tpخQ3}ĝ m3岃{Do./;]|ٹ[&+Σ#懩Bp- (ҥf2zx6ǰ" &]NW*0a:a34a*06 P2[TBTŭ29 ^1J$ (ˆ(βֱnk ZjsIEh0ւ !%YnP1\ԁ=VfV\&N~(傪Ƈ(@J8'Udx${M!hn`>o4Ri`{4PCŃіhf.xR.9:0y(/}KL`$DyOtW1!`NN͑ <DV謈nI!~3I9f)0[`kzpqNS ]>?L+1Nz'yHoANŰlrS0Rp[Zb|7lTԉZ{ʴ0^9 ˪D)]!YXY`u D"G@OQ= ;5߿^/;k\Qlu2S2eziZ:X C .v+鞐"/@k |1&3Q٧o0bq aԪ)̤wOj<"@7xhP'=;9v/Fޙ! C@r-73Fan0gEwpx!dϓDNy>Zէu/b9Hgk0D1>hz7gRxcq.`NfKA;S,Ђ&m\H,@HA#Cөk΀Y|ԅk ݩMP/ϫe+pdO*_#ʓd"`K$@w L7 o#|+~ $I%u;=ƿL¼.^ H(cGFh4 =Kտ&qDž-s#; ҃)5"?Ο2,,ǥ98mG=O7ӢFs1Qg,q^8p}.k}Ԅ^G],aޫW9rGdYs9}Q~{(̥;jg'Ip<-b6m ̾q΅\'+7 ܗ6tuS-%D/ՂܓJV?eCMg 16ʠt;ݩN:b¸Y.XϏxaҜE*h>H+^{&Gdh Yפ4pkw{|L+:9(ǽe6踛a2|߿2_yTgj~SOԎ#Jؑ <ZA>DI9o>36!A?X+8ag|)h :Ԯ_10vBƒ>fg%s.S9wW@NڌX&sн16GJL||%m0 nf^$g :?STvW0J]Ba' >£7XރJx*-{AS̔u*qίHޘWWmWj ۻ#eRapcY$:W/L/@ KޒYU|q1w.Ha[@&=<ճL:Ϙ;^>f[rty@9PZnGwsU9mLr<s'ܵ`2D]m~p(NGOLz\`~rD炡qz!z3*wtKEHIP1ƃ &[z$ [-:AZfs,<1r2ϩFOՂtg`QAI7tv&ރr-KKhR-fCNָLW/ݻO@r)2oq#]x+Lӹ4k90^5k7zUD%݇1пaE~/BhCE n U DA27zv9`#mCx2|YՕ]SU_O+eVP}W|Yӯ٭76tkwҚ$>>P>?e_s0fh_OBthm?fhQzYԿNp^0Gh3s3.o~o LV2c_ W494PCIJd#JM4ȏG3 sKk}m.juY§Ag>~-`á^ORݙqo -=un SKm?QJ{:r~K{zI tPKfXpip/_vendor/packaging/py.typedPKfX*- %pip/_vendor/packaging/requirements.pyV[o6~8P* P 0xuC, {b2T!muӃ%'q- TFwjBiF,Uٖu`9|Fmx<0,EP= dƭ2*'JiXͶFP6ŬjUm42bUڒ^,do|>K{(ؖkCNb6B%`GU_Pog[ZpTzkb`l5gOnдBf+QܲYbgCc)&K%*0Jl1p)Zgg@O$}&)3H(ȡ1(VM077˛_S>k>Paw(PF}>%)ָlYiVk'0U(I`S-J^Txd>~80\εX*[QFd* !w'fiKˊdavP*Jv)Db(xeXzgQ7Elֵ{ͧкPMitf=뗧!.%VԥB Xj,rbwp$pݘf,>p;ј.Ю2:8S2^9U8d[0oŠFs1n3JBhHD3m©bѸ #,̎ UF"|N" cwTaH`\h`٨{D[}|uׁ`^ 0@GΎYK&fI+!SCt$ŮeUr>9?wUjʎ\1NZ;|/ID۲&* d<8ȕvnLrHW܆qwa6嬒 |y[s3f19L-X5ɘ7Y~ǣ~uL0[fnyPjT"I¸[`\+{9/`8f@䮣Q9 il1ߚpbM֣ PKfX6":#pip/_vendor/packaging/specifiers.py=wƑ므iS8WIܞv^& P ofkvl_6|~:4?[%YSWb(ZD(UT\OVGߋJ~(>GI>a_FWBoūgjœEQKذR,*r2e&jDYu:85Uu%r08:,2]ƣϊ2uIi>W),4JˢWIJy~d<Fbjb"jUJ11IuRðH?L)P.J!!՛%̨|dY2` 7 ^?zY/9.GW5PP&yS'1Rhq-H%_&%z % w?ˀjANN?lCޑRp wRQdGGG3q(3D'tz,yU'Tw @1dޝGCJ2ף`i,uOxVE`#NRȣbY#E4-E2D9hhIp0Ј^N9=ZC,%JA:;e2`(*dFid 4ERՌq!}vXN}liUR z>~ZQ2|i ='Ѩ[슶T'U`RT8VfI'YFDobZǤS Xeh" 7BS; 뤺Hy$Wd;ұ[p9t1j)`O% Z讥Xȶ ,tґ.%`rFVH43OzmP!!;$Z='B/QI @L%*;_t(rExD%H5p+bưC9rH x\H .Ol*j2 &-U[ *7 ^$*LM3E PkBK *"И`̀|"Hq*di2 V bjQ#!4Je1őռxDn9O>= `U\2.̸h;1%QB`dxA!ZPu" *26IW/g\c1tzm24RSԡd$xKi^g*5@B윔mj,[yN\@ pC%QvKKX$pWBdn#>pHf\/uQCä7h (0I%PjXS+MqO` "Z rwd+ }z2-2X H7 j6y y. 3>|;8'cJ!H%%vO¥GVY`匰 j`ϣA O5 p+6B IE(m|*x h/&20w䓊eN8#;?*Id ۋp}oݗ{hd.ԅj)Onumpo\I@xHY{s-j͸Ig > B}&m.NF?Ɨ5S%:Ix nRo >u/־hKov։b[^.{ hޖ=H.3f:x.++-Er j;fbM& i}e32E(`*9' l +?6dV7{AHby״Pr\%^ҷh$Z{A%)4;,jJ%[f$}ZtZo7+Z);BlUh^Mnx1mi&ANaM^w~ӱ>?3b|Ͼ~] cA 3O=z h } &o8s $-c80lsmV?2(ڄ P;(6m~ĔYTE_2܃ʶa!5#_Łz~A\_[L g2S{)y,{Wd _ ;KVu)k?;;{/ r%.Nܫ4ʨ"&\W]$CYRJJ$`>P]ﮅ ^uBqwN2ZrrZf"uh.ݎV^Ʋ܏^orPģ@Cgܑ캮rrzlflʲ>/xz:NN/ξ `&pR t$. @Lg(ڀBXI-La/'桎qx&1I37⺅ꮢ"V7~[oqvbUrO:HwV6 7j`G:3T~P ]E\d+ >Gx Qէ/KZ<2I/ gLJA_)Y_ 6ZKnJ7&+8aj\/Na|VǪۉtz͋bp[wxppW٠= YN<(,p 7SUbwghCh[` qpnΙy%D档 yDħ1ts@p^Qh=e6_x.f+& 9Ǻ401ڶ֊Z>6S?Jp^s̳ǨY3ZYH/x񠆥T$/x.c/}D'ۥT 4Pi?9AڰU%y녀P!Db \9^)BCB , $[M9nc~ AE:X*{21s #lTuTҷ:Hnh2,h+RLҪNވ5:GpCO޷0* 522z:@TkTnA&쇠2"ſe-G<?Y/ [t(XIҲbN6iug^0Z_\xM 1Eev q B,Y+!.JZ, isžӢ,;6$L5xp 42"00nnf@ 9f葏J wINǵ*_2n&Mj] .#<ՇKY\L931._)FOcϞ$4Z*&а$4OL-H$N^n4h5N8M|Ƿ*h"Ux0%^|5uRbe .zuDik}\0Yp~U$3zpb[:z̈́_)nJI@tn0z*k>>W520QS5o9,Xl̹|M0Iy)Qԇꤣ3#tJC8xL 9J6tVȚ .Jed@',K8M149kQz,] y甦ag!DsUNh4zh&{Njʗ]SW8zy| <LܜʫJKGyV.jiKdBO"rqfu?m56X`^dX[IS‘&כ-Wn4 {7lUj E%t PBdhb0Bo(έBriS#ET`RS&Tѳ\jW:ZWS:W9\N2k)LbefOӪ8D{sMnީ0}/1͗](.6X6!5vY,$!RqY9k ǂ~[l@_8ͱO^+Ip-cՓc# e"2Fp#c E7Bf C nSMP٧xw[B[,4k\q.h޿a"^ B!;f Z \7?&hn:C*yByT jfnݱ]wvý:;h=3" [pس\uߋ4PU?/䅎_AM[tϥtE9 XQH1?btfoh_Tk^_SWU $f_RƧ! )tQa *%Y] Y+=iGu2dLƋw7$2Ytzڝ(~LCsNzG֣@)R2r_&4L[PNQTSH gylHP|ڈ;LβtV.,{f "ZZluB'?>J:/(LgׂIB Z$ܑ+g:3G0Ǭǝ? V8#=cǽ < NF[b/MZ&g*~ڤ"C30ޫڹ`Q7kwdv*DsʞE FAIN7*fNr!"yK$Wxg. %ҋ cpуoobuK5neW S YQAi* %3c T'm#QnNH"b5SֈаZ=8NK.Rui-ft&#~" +UԺޚyިUğfn\Cljԛ|UB6Rfsb+y48)Qwj#IFUBo\4(A(FxjC!oKKOwh$ӧB](_FQ~E沫Y< .lå @rQ)Qg?RȌky Ì#Fhr)&LyYxAZƔoY* PqٖjOc'5z e\T8S,w:X/EfX?8uq iMǽNҪ^EWEir^,T`@ Zeq]7S*ۙԵP~3!۝bTt Cq>R[RR̉NOp{Z-k=͗+r-eM7Fw͉>e=Z&uUld ]3`2TSMngT5e0D ᜼Ww4wqLtz;NjW3, T(t?oCL#TKLܠu?Tne$t~]\! (RZF ᴹ~qXCSxkE,&$z;ނADk S< Y)xpٺJzDKj)Jgb`R6R=v=M{ڏBOt $4LsY{H::E]02"y3ZYzcd<p\oepe%"< l jLՓt*8+Nnn0:+Ȍh {6cśQ=^R,끭 U0/[)uʱ0ХuQ8}a?Y/;OSnRb,<"ͭ\50.*[QEbHe/ y]\7#>~+*\-;nq1 S,3`^w-[*;7y6A3=_ڊ˖* D~KJwaS^2yyQB ehN4+yUy\hW2o-C1}Xc u-gsE-L9"lL`7æRl`U~yxwo{tn%M{}7 Tٱ(8͋S4r]R?J.HH+g vVjHJ3R*R=W~!f5^8)wLu-`AM57=RR oj\18 _:G7q攭z':VxCB:7ou/׊A}Kf꽽lPhqIUoYKh;V0 -#LSbձͨhkM>Z93[XjXطS[:"Õ\+-6ȯ[aO8-*_~XX>T ]JX.>cj;֎;)!VZn+! fɨ>mJwYw}Wq1.T/sNձ *.5(eMWYRj`Wa"WxR_pH͊ T}$Y慪1064DYQftG&Z .H 4nHM,ŗ!>uCɏ<Х,lsMpϣ@CCr)v#LkО7TR31SGTy'\74}R& zn *,ל/yA޲d6ޗRWEoI[g;Wk l1L*)3>u܀NwQ왨yN\gʵ\k8jŴ.@D(2Dc}JĽ oA

6wZ;%.]JK%\y0w!.Mai~J^6eԷTyKgqԉ8R($!)8U+ɢ/E6OWރǞ,38њ1m.?BN*z VRQ 27S.cy؈_;&ﮈ(tx!Ox*hqbmJ+܍wF]6\wI{LF,,ߔm$U%Y)F"N,%/`6ɚ{1o-UH  nV !$W^W}*&c|̴TנwKpѮ7{˱jPKfXbuIpip/_vendor/packaging/tags.py)AF$ (#.`kn!">@K$%U.X2X?dkzO@_GĊ ,hW)Q꤬\kCth~R ^#1d~ B:~Ō6#6Oh#H=OKC֬\kFy c%cc"wψ43*Jk3C;fg)@ѯ!F|vof1+dLgߏDdFo,4cVb.(ؑoQ{wA-U+p'7xUx_R*X0 (s:m+D<(ރb9za4>DhC c;>8+ڡł/J)BBdžQcMTr3BzUB8;:OzRbYQh4YY림70.S0DzǤ$*tUHu#X<#4R)^s4w^_~5dlR z&8g&U޸3aꎞTau,/TI:TEXC!쥂 8@.,CS u4@HiY`XkY3r(+. K$errtf/`^V~:# , \vM`fTڴ*ޠ$ݵ+++, O?1$9JɑAx'c , kX ,N _H_g0jL⬲P)%4 p^Xl8.Ec1y5T5{'yr?",Y 먪 @hCUQTLb?f7(j^aT ω8*-N+,Ȓ5 d B& s:X rɓ, ѓ\ODYּ|2m5={_̒aJd[&&('`q[?x;@5؊Z4^lܙaJwgRwGo%C3g߇'p݇71` #7 &֞C쬕ԩXd1QZo8Pq$NY=Xyw[88z/m\7O2t 9jrP:LE1d"u&̛aQ%5KVj2g4f8exKJ$wF/ PСw&lVxw罻E6h$* .ǵ\W(٤51훆(9>03?ՍEo)~EjRިk7 np)N7/]f¿z-!1? >@P4\(Q ?$ws=?bb6E b+liՠvSSYBZm [=ٚTQm|zlIL*PCZ? QuDQht"T!",]/WŦKZ6k1T=%{$#?08 j0& #(]K povN7p^CGA|B̝񸃮{g@bkGI/et!Л#leurfaqFB} $M7MWsFj;. 5,TA$Rg>Mg;/ϞNtAmW1bdOCOg04qu)VGw99kl Qb<6(qcv_7<>䄄 ƠXQ @]NMUkD9&m5>0te\}5Jz<98+jt]D ){`էD馬:JD_rAi/3e P_0٩Jn AtiZٗU/-螢 .]D12 YQQ?}L"lyޔ t3uB6ō $['7Rz{n;inU^GSK?%JnèYD7[$:hŸ唺[@l,.+u~(w+0f֠V}n!ZduLOFw {OvߩU[qsqLa:cWh S;`LٖÍJ'G:sяu_]KuTtzYS;@ T0Fa/o螹Y}JD] 7?/P!e@׼ ICO{(Us( U[+Q&D2iDISvFțpS|azoLQzQ2Wu?:HUyCR$̢'g$2>=#eVd GkvʮSM*B㥢rHT7TՖSL1QʠMEhTiv#:>5@&=5"X_iTΟ3FKpD&= Ofp)erΆbkNe?,_ע/nxvPOg,|UNv|Z1M%tj* 9 FBBb nXtBVX ^S}6az[|%D+~!4@F{π{}dME[=#E"A[c=,!ݗppٌNLr*A)z:܂7a'S uL&e~(߶,lovz}b #Y F<æ~H6Cxb}"‰ήdBA^Ũٹ)\=O; F':C](4M085TWnwxo1iD%t4nNPN1IyO0gƕN؇MdJYGѼCvtvӰ=Wn7;s\mTD-ߔnfeޒ&D+ CqJxh>|Iiy "lR j/Pؽp'ˇ):,ޘĎ. rJo3zԽ2A&c9 lCʍI}L9Ф}S/7Zç*h+wG߳!~SWs5P"|Xzbim{?*R尲cQI;ZU= V6묤~* [3Qjzm{SpVib煒.a r5Z{ܞS>dt{fs/ yG`\ ڵPKfXnpip/_vendor/packaging/utils.pyXmo6_("%f)yȆ4u[4i T:jeQ#8/ߑ"ؙ[(j7>wܩr 2M3 4#Y:\@B<NMN "eK~@hhLH.pt14s}mCD*E{SɄ- $$M3:Δi)KqLED9Tb(qJZi>#X^e>GLz(LXK: HAuuk+s_,M  (2@+7csq?Ns!y9#h]H= 8 aG0q㺮<`+9^ ,1sVf 6Ug:?tS2dV >ט|XJCR!KȰ !%GnB]"J;"]r8mB%%*IXb3TsUcI~b>ø3j5znxzr1t|'МD:0:pQ6k$B{wU =Eޟ;'7i RM@rqX-JD[H]LP,Y*C'bև}J|/]U LI:ꟁjĂ< Weh56TU4|BV.̵SP:W4©k Tـܫ+݊z_!'Vj/Ttj^PWHŒ-{aȋf3{ˠ2iKE;]4F AJiá0fU%V'MQSK4:GdžR݆h["EQݭAǨ$sq 'QN!6RuޒTIIVd - a'TXhʻ@GogB~-7(VL.9Zd_ HIQЏۣ[fEs*#`R Acؓ"Eyr}Q]]{T>wC7Cx_Z*YU.T50F=*GA!aTdEͮ玠<㑄-ypr`v /&&gh oSWK޷kXZ&}qΐnlv*imܷUj7s,Zɲj(&;EyW5*z\zcÝڥFQ=<7\3wӄ.iNg2n$W8٬ԃ[3Hw sG8\VwQĪ^kYMش*d ZY*qlyP^TNd$ݖzj &Te/0XhqU4O5qiZ~J8f-W7zdw @ tj] Ih[^ϣHpo` PնJM4:IaTgKx+IccY][Q .5/8P vKِ*Vጳ~@f͚ЏrS.=[/uŴ@kw[6!ꆐב1섳6+)\Ha!Fo-]ZloS GkpJyCӬ0 ))8'sOq.`\)WLH+<7\SNX.)iՋ1#Y&Z SK]ETl֨\L:JFŭ݄ TmGtmPKfXVR? pip/_vendor/packaging/version.py[_s۸ק@XЬ܃ Y=?6LfYeR,3\Y&Y-DD=zA:\|{=3-2^;F @[~7Vŋe&s䲪8 d2[+)&K4yd3bpGez Y֣twl8♏ Q 3"`np,YzxԪL SY^pq9Sg0͢R$+1fk5F6i j_J,HcVi"1ofGk>C2570)1;qxxh펂avƺpp++n:\0"սX8ѺЏX$⏨Aum/"'=#zS?bv(6\ שߋ$ 9)Y딞LB\B(y#} Hs.+ !E {)ћP&i[o8-P"A+FY $zp :ԑpC Y@g9w7\u'9So.>pzl|%*XhkgNґ+x?%r~%7r`oqoO0=o7H=;>DbBʇ|WZlf@1v4(JZDwdqaPr7K& ȕҹep ./ytZLxD sVd1Th@ TX lRK@d\QÄD E @8k1KͳU AU퇟ΏImztO,7 rN>/`y;D^Zhݲ.mhB>QaL9K#6&{b.(\ $䩵RDR6PNaa8[CaҰR6܍ Ċj+uZm5 3=Ve%wi4Dr%lxn7hK<(L}c/Y}F2(TJ]WA s0Q9cm]icB0&(G vE!ps,Ny )>p*tLIA.H;0fTvNffaFй]`:;>c_1t-]ʑ'B$sDTXzj}B9>J6ɒe rٕΠQJpzpI,5f^b~Ustz>/F([FU bЃru#"Oj72[-= kl׀2TQf<"tRo(@g4ك Y ).UWSsgiS$ 0#PE0pҲxm,$0JBBP.n'~)+'qs V\} "`6 K ɀB@`d fMM䥆t>ǜZݱT$𣖬|@ =@+-) CXsQI}>Ard?ݔ3j٦T4Y 6r1 @ΠV7*Z3f>ky=k\a]txS '̉NܮיG_ ދ;dKWVauo@rP-d{ӥ׶R29ݙdNlBbNQ8ukS!!4Imu$o9̰x|)I.̨N"yZ `mK?Vg>{5 _q$EfI&1U xw //G^ԭb?#6(fϟ|SLfA`ᴊw (P`cLjo5KȰ1 }H3w}6>6yOȰ$CI#{a8긛͓g9le$]i>SnLS*7Sh[_p9|- 91I۪,ߐOCT9xnwj^s7B,W@.H4n,LӒh^j৖.\|i>m &'Jrx)$?Io_o3_4!S~ W|R%'>yUn8ƕ7}6]Bg垼GTϸ铪ؼ z=@8gHgrc.ÂBB]՘y%8/JFsϴ@*t-< risK(-D Մ O ?u8Be 3)덄6sKnm-2ChO4b PPl%3! DỊRb+oVuMK/#0x/˻$ nv\o}-rbah O f-"8@.yszSuMFpM{vs=S(LMd k'+9'2QrP\ ~+$/BE6 {2*N|PB h"HĎ쪴 SFYd' z(bٜS{U]Hk;!7WO]I|CBnƈ!ʈoVΗR4AK%^\b}q ܆q_M{*E3bڈsuEv'g fWJuLbc8|fFVi'F[Z0t-DxW3<ޅݳnNG&Id ʒJv+Ff{s@g:'ևp6 D}_is _L#PCv%OQ \R o=,xrI.h[Fx< a8NQt ̈XH="N4YO1FZb`avXthxq d9\gf,nCa\%0 (ք̘&fPb:xHE_I2E`tB;vFWGU WW33 62W/9ˋWd/h΁^ Z+&ڂjJ(M 6jضra(@ou\-4'v)nF767Pb[дz Aj\ӣN0t<1W` Rf)gg_ ;Bܫˍ8•cmqkD_9b7PKfXW/%pip/_vendor/pkg_resources/__init__.pyvG(OQ / ,J#KmGjUp@ ѣGWȬ,3}.-U_񹛼}Al6K˼.j̓,U*IVURŪY2|Jҝ䫪N6)&Y7yߊiJk(S&W*YAu>[\b$^^U7fa&l>zlz]4OE>;;\Id^]l\V!K=J`N>5AUoU^E$orSK[B=,E^e79B(jj(GI&d@穙f2 A+69,7`“ 0ate 2_W:my /o qQ^Tɿ%OFgÃ$م9;H;y|z\KnvYz]E~[r;L'gC5~^ìzC۩1ߊ|C@{m!ixqQ^ @NFX:tߎ)mDcBzzӜ]/w:9.z] S!O<9?ժȿg96d}I*bDЌXomV0$; ~.*Usry}^s K }a~+ /b `uV5_xXVu_6HrɶV5;փ4;.)0 6yS3͖"n> L؟;sY5ܚ08xs 'cj^36mj&w7 5s$#ؙޡ?>~{4~ɫomww|J6P=a7Juu8 gu 41QW@vs>b!+yڤ3Ƹ>|6#ZbUVOݢ\ ]YU$ik"M2/:a?B =  = m jH}٩` $Rx6&B{;* ZA5*N>Fo?$[q9$22p-\]I%q hL*kLq{KCs 9MV!i*Kq0e csI,#<z~Kf\)y$osc?cȳ/ yegUޔ_uQ,q. ,WݭZ(]B,m/o C G$B`__yk}yGo^}{=|q7Nݤgo /`Éo(%vϫzDUuNۺ_lJ -gGGja俄lX ^0 Õ6|Dǖ~*!`J9Hj,K5k{MH ' ?FnzpU97g,{Chcn` Ɵ7DɉKdX25^Y99hj8[==Qq[l3)$jb oO8'4tGL=SL1qEGȃ.$s<[vo|Aj`Eթkuh(>y!}og%4 Xr'Ov4'3 SȂY*6-妒IXuƆ׹2Ä{DFX!F l5LXŔ:Md¬%HWJ搈ccz7E~G3`徸Vw1*u49(2Jt`8}-e2[+#ke`o*N 9ydЈT5,hQCMR gOcb8z^ hx`]&j$ ',m1 `j}yG WCVv-2Ճf?go>p"^.@෣5Ɣ䴙'2O]@s=t fEK*6p;"b>oUs\lI4fNnSGh^qESkenz2:͘u\̖;jR!ж(|k~cɿFK9^86a{2w~yEzT~M7R.R6YYdI gYzCv]wId|g}2JZʒ(4-pr|rHyYQ!)S X\V n\59o[ޣk{ 3h oְՊ;N6_gtgB9[_ݴHA3!w MWŊbOA, fr(18MB1N&E q]^/,] #x3dg(MduaqI2 Ĉ,p2ƛh]{i`z.i g\+cObM.B`˧&A9g.Ezê?ơbأ$٨<o!2paԌsZij`k҃$0/Ynjtc[ND^\@pPuL0Qmq~1v_>a@:6ZS,yVS!hJ(v#bº*=W23֜  D~h7Fhdb{`?څ6|8G@D^XxU T w@K.xD( 'C .R#f!Pl.4̀5M- Ke ðQ|rrafq[tC-u+Bs_hl8.B@x^ق{L؄Z^]ۨ-bz-` {T1豴Jq_TJ5)J8YD=el[6LhDcou×X(CkfzH@1FAeqtMWBW|5YS&U|Ӹ>Y&^Agڴg|0 7X$Xi女b9"^“#OE\ehCQoHΆGitNE,y|V I_mu<8=8㹒pQ5鎑A r'j0r! ɤ,Rdp`)` MaYqâfd7D5`.Kl$rޟh2MՖ=֭>~o*+P6Ŭ jR}eNTQ Hc8,>:0J S:",Oy mb+?OE*IYʜ6j[$@S"ƌPG&zY,/dDS1DoMɆͺlk&CdU tu jڢk&A7PSᾧ_<x $a}܉`/}q>Jh! ƃqbgQDd;!`D{F第:gFFNI4!6lB&Mc=ـCw4" zxJr*GyC9[q/\)L'a#EĦ&zQx˖·]X[H!lѼ> $!\q`?<.]e"8FerD)s:[3Dpc{eW(F[$-ʜrFmhTeF2yi951mGJgqhP?<NRek PuA#XMEZG5޹ O] `5#?)q]G\}K*n_hܖfMSM ]o,>ɷ m`.>zy0:{wH80bEJ6ՌWP!u5ѻ tUp}nh9q:b6#z_BYNF(52\p@YC\։RԥrѸqinjϑ(N?d|.f ׼ @W(smoIfwؒn%ȽQkl >슈E>^kͯmݛiK5߲ 'K䪀~ w<"ahiL&z3,Z.AC#f/NImSzm;6w)qjɚ3!] J:*m%ij}s*]k{avO}Ӿ 1zN*tsAYYpa_1{SU=_>lgv~.TA(ECF:/8:1?! eX͐T={ɑAD- 2y,A`iD5;o¹Mӻ43f=b)7 cא{{ȓkbd䍡OMum0H2RF, <ؽGwO8b5e2ј_bqLsX0|aL_zc% G*FB,4Z FDk8㖅L W2롶= IunU ^2$𠂶җ;X/-^ 9) {je 1Ԫpx o&h}ؠO>A?xA{:;^|s.&nNA4ab7 4(ugzBWܬ0<]VB ӳTE/hGF@:,,~lYsmP(AU`!ګLLP ElIe=?PtӽcP݆KiR^j7z H61<ɤ@l(:Gⷺ#sroeL7/ʎ=I77#%L5edn90 ꨍ20@DeZ8Q^Td4(}FC!ӂ8/bi#HD,ށ|Vۡޖ~%_Oh lE&F| 1{tψa4^dέSA?  5mV4QW nýלB:옴@/.N 3XK\("sxt!:Tl (*/5_F])D&BzU{*;J٘M޺m#Zw# ^ܺupVUllRM گh7zUl86c^Y u2 KPw(S/zr-F"|} %+P O^o"4")CB"=E d~UZ.izI?-pIPL);X熱˘gVeو/AHbs]q:˥YQϽ#.8D#y5v@ő4{# ztE?' y.>}=QlUTAV۬r{7I[uH=-l4O;iK 4a tkjb9딭lb6m\uMPwC'̄ 1w0) hq\ Ŏ-򌃈wQN\ A)1zF }':\Ѷ k$"=@oljn(aY=:I.٥7Ie% x~W&|3IxVA#6M_Eoj=iyl="` Ipwd8$nmAnhхB퐪` n`J (\99cױBTBDT`q;e$PK}%XO^'*,'SsP#ukB~NGcP_6@Xԉ׭⮲:ֽ2/|E@.i#Al?8}q7k `bFs 벣>>T̏_pmۏu-GkYu'b =劬ֵ,yqKjM.8Nq@To7DeFsaDzf:lvNxMNnh, ť0{$&*m[iKd9-bT2PVT)Zʄ5.yL.m#J\G&N\wHRKjAt-BJam,DŇ>lDo8l|cUZԸ1Eʎ"j{ MGpl|νw =JcR.t8 ̈́bQ0 n ʙ[4 @8ܠ2hä9p!JUnK#n}B"c'nNڋP^i,Д'ԯ1nVAe 7ğ}z5?"yH jpdPL2cbMb"}H8@-TWHDorOR̖UBsz%/;?,/GLҢ{xNu%jW7+U3bSo̐LMÑ;|֊Ma#'j/;epQB6WWeq_eZhp"*P߀6ĿƁ尬@r4,.4f8<< yCuzB0`)L]d,OЉ5t(CQs>^! a#_$jjmZ"B 5ÞϤ2x;G㌮s؋v, \9}Dq@m}d#r< j'~d<tp7q8+S5MSCQaPZ3n8͘u6YѢ^k(bj߷}:dE30h9QHn{k*l*Ԥw"KɀD@<ڂC>oiPZ#Abx`9ؒo-h=FdҪe@W>3Vؙj$:֏ƄuKcķUs{jŵ7(BLtKJ`i˦6~iuѠ5qb'G:D{s%|DA52c'\Pu!qLcrԝO ؠE<aC2i@hlr$ SKTCYmH-P$xqWѳ gx=;9@,k0`و 6IVثERNW$t~?iŖ׳Oh]?Zg}u'.͗LͳPKaZ5Z]E^%}e=,J|ݺNF)MS zvև~<~9mo@qq:{tQ5gBx:޾z)z~w/ZHnn$!UBPIA!ig׷% :9QԱh@) +S{hy?_LBiL}K21Bs\=sŻ#: q܀]dRoϵc)Ɠ՗kSD6'F"[,0{tg&;.y`_(lHٲr^g:htI cm-E+џB`O`fJث`(eTXg㣦;SNJ7:QH^) `)n͖>1̬=F6k{jDe=_&4 R@f!P 8TY!NƠ("c gKKޝgfh|SXDK^U7pfE,=˃z i!]qrphI ;;Cf*:K9k*;zm\ DrᲦgLAjD5>31zn챴dN|%wy𹭀KTz#y UEm-HN2w* e5'mn'y}-4"ZIoF(ǖ$Jl;ߠs>[J#wWװEfu9^MvVSս3,DtI"Ab&GDX3s-YQ1Ex/Jߌx ͹'$-˖,-Q()i>vur\K>E cdGo=q4V9*ʂX&H)icr{hnDE a ~aU .4)~v ?+~)b%3VC[  f7>=[7՞D᝘CS"ɷ4(GIkYYUmbim:SnVW֭"-fbؔ(7?&FIWqk6k` |[@2]2Jg>QmJ؉5TuVo`ĠŬ.&8t/iyR58O $)CZmvmJ[,Rb?BC̬X7L+yRi{R+|<Pqzmo,",%%q|? L+nםkV|L*tt85ZnQvt} c}coB7#<m?EC# FLBz7D)ވ)*|xXhkpxh\MIT DZTF|)aڌd*-čشr"&,cslZwa62C "B0u} 3+nUT-St͘z ;"՘ W$G6sGעBj'FpIWBsZ"jka@۶ִ4w#벳w.{N2[Fr$^x َC3I\Q0i 9׆Q_PKd?k7qqM!630:q $1'Q7 :n*7eHng侖=붝}kLCFZ¹sg9d+L{?ZG[!lZrDL«6u1AE3*rAs,xr\{9^r@sfyz,;lzVJ?X폱1rrZ ~(BRRJh9;PWbE82 zkfyV)[ '(hSOk>E.03q{ly '#?g#\oOFC1dOL2JY﷪*Uq\D)\KṲ2Ճ~[VM'tHw Lp^ J+Z_2'8~|]O2I~' D Cc` O?N xL'*)%|vwS*JϽmr_d?d|rtO_=/=KnѨ02A:䧧=;SN,1L$o5(zOz1 P0cM1a{_RB5KYK{CM.zC4.J&a8 hB~RLm޴QiOSSڪ:vz-'.Ȓ.<{V$8ꐇW[ٽ=q_b _+Oɪr&@Nqkn[$YU3@f-Z gFGGNv0 >f C{,gCҐgWPdZ֡s msw@޹fSw6ʧ" yjŁR΋t>s$xb A2@?6ӶL5oE}$H".z vs'}Y7b:_n(J[Ϸf VᒪicBubbJ*pX;v/j9v޲%@ F KpA?y1ż9Kg̚@9$o vUMۑ|S\I.7^{ujoN5`8ܙ}{ >C7/hW wu3u])/ǯ&|YVp9UqɇtƬ%kgRu3>n]4ގb}*xhoz(8b`F]b1OHd ~ttVA_u5'ih0j|zuYe]YT說Kϛ~ 02`n1VefY/&}">]Qʟ.!ˎ&.|22j,pj=tqꆷEi\qЂ}_7o/plۺNHLkgh]1re~я't$p6<\ hG5䱆b>]An=]O,+a=GPg6q ,~HulXxt';LڛT.??n.(UK]Czakڅ>u,k@KixI eYuuZƔxШ[S66@;2'hw#e0 t:\c&ԖAR\Ub$g1Y`xgMra!F?b7HCe8+)dAaL%lZ^Tw- 7AR{9 1c ntyi7Fje8s,):+xޖ{K4 Hm%.2Ǝao9{D 0 *(4>0 'C(UFx',1x~yH<ohD_@{N2~:KX7IL)Q`s^ ?:hڭء倏)' U&Ijss$\5iyh2Kbp βHuK@6gFJ|b* I_!)G <Rwd͉K{IAݍrL'|%=Q߈n3 Ұ@uca8oiݒG6+ \,H޷BKQã7*y^,S 9_s]68z')D\nTDǿysqK]CtπCǢcQVJNdY,yVT4&&!f (![:&Se,XNrk.zȻ0]nck 2@))ti'h|(u)]Wѧil5-fOC*ҧ+JqX=E@jJy3v4AL7%PN C01o ,fW,ی ;S ,q2x2J࿽_'e/0܇fڛ+*{? 5mƈe._ۣ)OUѥhKO?l].q=sv<㓧#-tp߅y:4zN H ߅PpրktB*b?j!EN{G%~THЇ;!ۣNN^~#t~:ˡXS({6LkyF,wT!'M ×M_I8MPS"^o5ރ؂Hi$`! X_s`[H?*}z((_F_{m! aȶ~Rw$UsT\&ȣ%Y)w#箅<4ꊬKз F( v9s~9Ϯ sOp̤]4yu%O \jB{ò16gCD@DkQ2 g虐i%ŃT6-؁' 43GwQy9Z槎AmrAtb]XmVHlmurUC@%Zkolvu Z]J5͂ û2WwT[i2[Etaƅ0r |*IpE|]K]#%!+Ct f(Un;EmU0&&]U@l/3SG0&b <9T$9s>3\a %&Hzj<2YVU Ah&?A0CĶHfe 2f\1__Vne-ڡAXce:*ڳJ܁aOۥq4  0fj ֱ"3PBBc)~yjVNYiGveZS0W{w]lp!-= L"TВ$(\^ꀺo7yjIQP^*TE BM(nu^@(7Rd`@ЮEm'g RԤR6mkQ],`6Fgs ;Ιr~X  ?EɦSo9Q qp2h*l!R{rk[x~dl0'r!HWC7Lл@w}݉i~Rvd]C+1f\ Uy])ݿXwu{:5t _jN}N@\F،g9#T1mĽwgcZ\M9bR"Ih ׎˥cvx>^M:_?[UeZ`e/,'/BruaĦ%)60ސwcr`Y"HU*t?e4"^ee+=z$0ǟϞ??zc|um,I7c;d˜x :t{&[v%QJ" Ĩ/?@چidDi XƇ4euk[}oy-mA8Pl'&m$ѭ5S{NZh')9lM\ v/3e{o8dN .{?-/tT" 1-S DS*_1|x&G*֮B$IőR|بGN7v1;ɓ|g XO8E&ܙiKFe[*cn1RN8ⴞ4.Bڻ 62o+im۶SeeCRDž=O= (*,@ްHDzty|uy.dOcˑXٚ LфDkB'x,0US8tD&N\"2$Mʙ:h ƀ* ϑȷpR=a6n1&dD O8нtQjطT=*z3a(gQ5D|`H%%w HZ:Xȅzsc}&i!z-(U]ke,>$A@w0R!s#3#v CiU_V?]NvKe6QF/"Y=TAZY"?~B4uO?G 4.FSݨ1Uzc0(ʠ_:V7%ugQڡm @Sln *iZmtFLh`0%֥Sg^'gAKv G'?幎rUZvo7KF7)UNSEc;0$1;1&hx[Xd?r+DU e V*gfu7\%EDԣ@ vadF7L $ A،ا ̞]sz7IumW}{oUu[ثX_~ٶPz2BzM̺2ͦÀ0L !ˈ~E.1G3o ø9a0WxEOkܾ!zAߑ6o9@<(Ш5#>6-?Q;IIEݴ:M] 63@OeS3R7y"pVaMꚎ2OG yFGz"6bu>;bY]UbSf>;k'+Ur(`:=VGჅ{v.|Gk7Xd0rơKܰնNe{NJE/0ނbF2YmMFQ@cBI{ƕK^ ԗ@KfE0105Ͼ R5|qowxp_Ii '7x ) ;W ՛# ,뗯^=u#D L"+4׹ 3al̎/ZM?"ƍH1О q3r xWmVl|7xgw KF8QQa.SbKv1!Ta0 3"3(#G$WjAaPCB׎c7'a`q]6Y}4pҥi!sSoQ=ı7 DWmc'`d-i)Cſ6MQWS$4=6QϱNƎ1\GcZ̾=h,dT| !m L!>M[2x)A7aHf0 ]fc/V±SFn`4Oͣioc/HYt,,pSfE NG?Q4cr5TmwP|+0\?qHk6*{*}N?r@+!g&9?U}k@}HsiD'okO&Ns/X@c</V CdvgdX7h(>EDi{Z?Z?Ӣe[Ay1%7ʘІ7*⦹ k?SfHԩOcƟrr댹[hz'dI>ugkGrwIJ 0K + (wBFѯ,pԡ)^[Al:V -T7p qqטGȗv/bsF.YRp.#=kUj̐Fb`O Kŧn#0!z__jZ#~A14m!Og̽lwuLc2t08`vIqQA'Ŕa|UAvDvFӦxT(m]@\u7B֊d|ߖ?gA[hQ0~Jj8&4'0 j dbkx#dWuX_h,aH{#Kr5vsP(ֈ4,!2׀H٢PcіxT=0"S)I L-:1W7WV}4Hcpkh%eWɮ50L) !Zw|qS{]J6x_GL>m'rYmeqɏoWUQQog0 ?k)=VA>V_ }˒]fl#fG7R)Av v^f),  Gnf a~!h6^-l@ xCP#OhoF̓$4p9!y':)gxb}NCm(%$!I#K#D),y|ښ"l$H_>UБ` *(guPJFl4/$ n#W< PVmIU+e60Ed>5⯊$Qa)L{՝+{U\MˎTJ,P>Y|ي7 i-~2LqթWŗ=gƫ:w/4QPo\a7_Ϸ5|KClіʨ4DVXcku\EAb?OOᖡ9k ͚ñĂ3o+t[5kePTS)-7kjr2FBI2(<qvDms̆5/j a鑠ߝVCm^Ml>UN܍:g Ud&ZO[#q Ar.R%)!#w3Fx~5ʝ cf3:"(Ϣ\ ӻ;gCŪ ! ]yt>Ӄ~*G+HEvY?=6|E8t:p~**~ծO{djIiL2s!~ͯ$&%<ɻҝLăfTŌlE 5TVpI((ew\QZPE@ c"۟ JX¸=M^e%pfx r@,@U]?}`@GZ{5_B2ŝJTK򕸼ٸ[P^*/xs?5v>}[ME&W9ź> /R Q@M¡XXTS E"4QtG!9|9r`U:5+:lv}yzzkۚE3$kޒ ܈U.MKP1m/kd\wjږ~/OK \+nCLxǠi֪c GPֶq3w-pftr#$.(qR:x6X-Ytlyx 'G{FuC_?fV|_RRpfW%EZŔ .i+i@հg57dśs[$^/;ezktjR>Nc2$3u,fEȖ9K3a*uJlp vۼ3ay6/-;~%ǨWDsi:\%M&$nxC#:QLk"0RpxM"mlMԫ>jm63O"d8&c]!P ȝ~Qg m9/uʭ"*!n6ö"VI4\{ ڂ|I!.Fb'T;LlƌĞmvҌY(PS};m>^j 3ZkoH#TT$30W`i8ɘ$tzCoې]$/ZǼ/ia&dCwAn_=:H^({A0˫3hKO?qq= !px>W7.%F/1N.d^\8%5$Z0-FYmOP> Zf^E<@D*~;(Oy7PA#(uQW^L46;SRS Hyل=@׫eX˺jK0KO8 pFW7h(%)u)Vfis_뎀X-9>ePq{;mK> *18'HoU n4)ښ%4l Lw-PiojgYhWh >ZM&cy<ĺQiS n;g[| (ze"ηPV!]+Ţh}pR Q 5B  ƜH ӜWAG^⥥Ƈ&o/DBwg1א`(ӆuW*7[nubc* >q{w!ۯ p1{we=fTrseɆ/ BJhPev7$C]V7׹ܚ[}1bvK7SZ8!}U %^KXzo]{yƋ !Ģ$Lcx |6Cfa٤&9Qg](SܕA+`E9WO!]zat.`@$:ĜgO$ s5܉R=A&w*ZZj "t̿gjl*\;5~%QOBEG;cA=o7 X\Epǻ[:Kq;4 "icOlE} cXrkWU{irU9aF C3 ,zxz2ԦG3㽅=tA#D0bx$}QZ. ((_$H:qr|L&Ӈ_zO ]\f:D\VG5̷a# !76?Z Pn K >ՠ{ll/j ^o2{{p <-s`bÎ!@9 ^ffڗ"v{!LWQ{z]8WRW0\\"MDnȏ69 S|(_,(4I3r7": $اYM15CesȯD!';|- ¸ߓ@XAO)?W{|`R 5P-œxfD- Q3_xv;d)<:Rq%^y}ahhJ\wyToh;]NS]KJi,Rp1ˌ"Ԍ+v$Sw@aEy(5U)+Ț## ZLV̰H#j^CqW*[F},jY*%Cp˾Ҧ8".k ▲NdP8 ?J P4_h֡)|dS5xށ-!;J2Hk,W9⩻J+0זςYp5Dz91>d[0nY2b$ks4Qa3dҮ;L 42ni͏y<[|$59Re&:;}6:zw74/Li&h~&7KGhz[c+KZjr5)_ *o:G P$J2 11L4 ǁ`7D s\ ]8ݢK=V'G9pGHtRǦHq!20ͦXV钠T65ыB>`;>Yf3M +F}l71ބ(]cB8cj`7:pĴ<74Z>ZCn䐆V'nV\/f!Dȇ:NJ쉼2;q[R>f3S'֚❡b&Z\+[Mq/7EjUn':TүQ ٟLC4e9AaASypPwڎ=*0R?G5`@4^q/r H)QpI"k 0u Փ9U&LAݦvfltH2}2Bokh&=jC/?~M4h\6=:Խν# P;)s'x{0?[ITTꊢ<CauCY6_"vV4 ٌ%-+!˳ӷѷ qiKC+rů;veIUt}\Lgpx39ʓz\sN-J0,hoN lS0lbh-%iA)o[mYP+PFm=W|e% rqƻ*F77nȜD(>w(K1NnhhkJǙDhУ*l?9UZ_(5RQ(0 VguvQUX |b0FL\ / {\&_J(HRQdECͲH`'zcμqwt1Ej[|;tgX)!y bhzPzʦ"4.µܚ$9-.iۼsAe?Wzu 9YudE [=۩/4NYG"wsUt& N[رs{ E m,[ڼk9GH~.6kZw 0z-Eu\T^ `U w k%hIPw:&Բ2XO:ГmjyrvܸtR^+JZ/@0rKϾ7:`$U tDcj$xzqNIwlĂB[ "nWsQ4Mjd|&讜|,pY9Q##g3a=ù|;%|MJ*܁lCx20`F^+ÒPKfXuz W$pip/_vendor/platformdirs/__init__.py\_o8SXٗVݽhS)w^[]ݝuiang 6&MrMHxf<x8_0È!IJB8&{#|Ю >ioQHq9`3J<0AJ#:g0ei\0& |aq$Pi>ca$su>=RtX_INYc(&ום86Cq4$|==_&1l,,;)c~Z`8ʹ.ҝ]P Dw)Z-e]5_>v2wL"$]$v9O2/3F4 @D=pu~|2(hÄYu=R(z7R44? / >rDO;dp;f!,//o# CSsQOϾ-G_8~"i3ܹ ~زIdfrv.HL^e@6'+צ1K #> R8`r&@rJ雊68NE,1tq,%Š#}O_-;|  DyJQ w2{9CC%gcDT?Lو$O|ܝA{c\&L xO&b2m!?)T\ d /0F( cJv T3֗=#w|WvJ/ca̧orݮ?IʁzL|-Q,FtyJ te,ԩYi^JQJb~.%nBhWT[&"k_V*cUXgo 4k >ubU+luխ[^,2e#>@{eBO M =AUX@@1o4wԆ4Zv2:5&dwPKfX$pip/_vendor/platformdirs/__main__.pyT0+6aǀ KKoۆmZF`iTIB#;KUd=NpuV ,0QڋUO>VWpiz91O8>hJZ KO_\ ׍N67^MA?k~n!fzzM:t X>KW}PKfX7kLA8##pip/_vendor/platformdirs/android.pyXmo6_A8fcd]iPq`y1C2#Q1D*HQo-v:`?زxGf9`^ĩg5FÏ 98",D1.Fü"}H$"+9D:CŎ)I<:89wogo;BS,Tj`hvH#1uh4 vRG<@rJuL=\&z)ڟJmc!{C)frgjIO (q_ ax4ITd9%aq:&H-EXAAynwPS/l^PI^Lq_͵hR JJR937ZLpNR[ k!1M|jdsjlUެk] hz"5;0z PX%NP1d];l%N?,U|yPjd=D( L9qd ao!Sz)A>zrZ 6퀓>_^-£d+waR-2|&Y  Cl2kKtMs Ƌ;po_EjV-/Bꪣo]'R }j2jypK=ڟopƤZbAݚk ?Uf'#?7uHoD{ #~3Igk`:YAoWXtO?c 0}٢ W7م5I^ ec}Cg~^A㓋^Ycѓ+ LH怟H\{ot *ا:JiK_XR?ztG!!*OM;GwPqYD젯PXNVKu6IH X^=5 ͔fHe#K55#6?c.gveP8S^-X bી-*ͭ"lJzKaEFI.5K>7~~Ϥ5L!ٌ[51 K2QU$j#u?}V{%W$c,ܻ$hdX6cҼ&hWa 0ܽQ` .e4] .@3M#fdzqlbRzY/<9Xt?܎"S,,") `mi9J̓PG $ @э v* KkHb0.tCU M}GDVI5xRKb5:Rtܶ[|} `8Z]"d5ҝ*.˔례] I ]SU8AN%yN B' AWc %ɋTq]9r-3&mr%'v{_z!F ;0%U\\'''TЅdaHx 2"SN(..pNbrg x z}xןD7?k]k&rH>qLz^PMBT `D|3ᨓ b#h($E3e1d<: KKyFS6""EԔ /?hʰG&,Ykh)h JDPj.o·rXZ$:PNnح,:bzd?j񨌅毯$J26_]E+JV12vw` /UhHVa:[UhVaKpqMXS_'#r;c܈)~`e͎kSi4qCo ,%;D f*4&bH&ØbH9&]@ޱ)!j@tmxltǭBbpdSMN@^Uf4`4:K,%©Dυ|n ɥ򄩡9%&' N\-Ť̉+ʯ0 F^ϴTh)GR(1T)˞NZI4^</ *vT-Z^o-?*Fd> KsP 3I`3bxQ3S ddž&F,u$2[h0kJNgͤ7iln+wZ)Pe %:.U^5Oљ9ۇ-JhrN;cOJHW>Ed O;ʙtn7ٿ-6~ޱt=j&]c+̞Ʃ37]9{'I~+'xTZ-Prhڪ W;/HdO^5s_DǼ *%$/!pgu!͏+?\f8YgA%Hf_s#$?dUBa>fqKDobdqeȺY[θM}_A z܎Ic~rk⑳| XVG`=Jg{̇[aV[Y# W3$pÇOʦ@E@&e[o}R]Y昦/CK/8ϻSh^.2lLC-3!_|Dlⳙ?8$ ?HXh[kjPgBC60bhU_Wj63Y>SK!^@N+";UioVlYQE;^P('Kz~D6 &#+WomdbӜ[4v 8"".4ٝHQ|'FVFuۧ'~DWXlr zQGUq=x'ΛBriB3lp8rڈXcZqF4`+m㢗w)]U b}FXB#܏|\פo= 5\ ~\Na2\LJJAR|@)-)J:xGх &%P&ᚯ .` F"7! ~h-xZ X< \@ biBG'0 4x|{zAp-~(2Li$g0DwwPKfX!pip/_vendor/platformdirs/py.typedPKfX;I ) pip/_vendor/platformdirs/unix.pyZs۸x&ҌL&pu/:s4<|C"(o.>(M"J]o_<*叾yN,Ŝa y&&4MTu:?',D1fT*&s#߅ReT~\OB?e᪴!KE03G5_DM ?C"(QPv@^8(9t⊬)W,5+3Z>Kjpb yyGX@3C੧@3v M!.M36)xEh]7mleʹm/;+q-Z^zqtLOh=JNteX1 c9$+Y_[* UB;:V;mQy>v\7u6N6;h_]ɂڶ5魏8: v{h;GE])J7=Dla Z(lPE&qcSԱ_8K%v7ªf6е&6eS03TcFvmh<3jv.& l.ۥqN4CШ1g-]8a(W$mHHi ж ISjxzTjo$lJ meZX-d࢒V6ڷ[<O_NWӳŵN#?J> ̕}4|^sLNqCdz}"|fz < 5I­s\fnR"q۵Jx ]4nU2!xR2OW7|w[;7}>DʩM}/ϐK\w;˺[Dg[!x<;-{{PϜ& cnXj2vʓ.;,,fG O%&,0]gaGSJ\NY PKC=x]ɴbӘ<(f(ڞX".oXY`sc j(ZzK)*>ӽ:4LZ( 誧Oؒrzax!Yj=[4>Dx< `(,h8,Z/Cov|5 liFn;/TrG+~9+aG.1E_}%|ET5ׯyC~Iլ= r,Rwi''Βoy[h[ inT~q)ok0+ZuKN_,v.O ;kK70PMX͢Ids b UpC02q0WH sVƜ褘03b^fp N% yLY}Ǟj"zYO2nCYɜ:ː1_jޅzw<X?Qc4/K0]\YH&M^35z$ ^]?/wRqK6ݻn\;W˥ᒥ(yF ?5騊p$L5w$6HQNw -b6/qRl^7h)Qȵ.0:خAލ 2_O *C\qw‘mϭ258:lL=i%zް2g1IPʮ^$ ͺ+bB\ܵt(F7/T| i&i?|31 { _PKfX '#pip/_vendor/platformdirs/windows.pymSH;-a #"3u5*LMThC9C:nTnn=OwH ZV{wS,?? X, ÐOmr2&$$(;.'1q8ɹ'"ϯ4-zǣrI 0&qN =9J@;_\5Y ~>u饮d+f^tƋ>td*46^b{ >}rLj&D[Stv,"bvĿ6ܙN/Ek&jR3BHd鴮 Lz=zˠDfEݤX:xBW|{:%Z]~7nn[ztUJo'2>7[MLur*`^m1x<țFz<%4rx4ϯ[MS_: 7ld/%׀2FԈkL2%y#X(Pul<̴T(JpPڤO&\r.}]-zx| F6#1daĎN -Xm#8(e/j > I^>)~;lՎQ}Q?GJ$R32ϵPM NA tCtC\uOmqf? Iյ* }oF|0aXMf /!yЍEb;|pB/s$z6Pri-3H FjJ뇏/vuuccCf2Oz)d/?Ӿ^9x^=AΔ'7^+^) gں%D.)KңKm-N5ڼwBj$;Kc[pY4uղ;Up@V#3o;dtQ|B<"^ݥ)e5pcժP'Jz__SGVzuuyy D61ZQ!3k=5Ć!m RR$xU`%WEwSŊ>rw $ 8cGfxZ*6jVd I>6*DVP9i2 @e6+;6ŠBYS&HPcϱI<'kj}nzX7ft (1j|~.n& Q4ڵ:S{"G*я~` l!؆R a$ R{BAI2EBrM+m/eJ,#tA68Ɔ|{i0k}-PKfXK pip/_vendor/pygments/__init__.pyVMoFWL]( >$iRp VE!ȡdòzo]^ @iw߼yggg#nU&Hdvʊ'ZպJVbji-+ QiDkFeQ3!DUFPSiJq\ 4c6 ma5 EV2V6ʐ] K PZY"XtΔ7tS]ͳH[PʂI ,&oQTCج ޸֓EqmhEcZ%J HlTfa|a?9QIJ!T8e{x{§'DHRnIz:!D d]Bwbο%q6_NBodPXnzjT^?ܒOUΦ# *ˊ}7E(+WR1JTpXR sO4,b?B{tؼ)$\ ,' H'J,CvA?fY'iX<:JBkk[3X-S$wv'Bk"K/x3M>˫DZu3e~Ca0 Oq7AE|MMA&o'jgܾGB^,Ww?c]4yD\vu Ov쏢aqO:c4\L&4Vs;~/gYؘѤv.Z %Na/$ӰL$J:Cdo1 r.4KYdSέ7Z7zݰX(<杰 b=tm>i4D;Wj3%f$F 4g[0_cLtCBχ\&ThߞS289Uc}x:: ׉& jt?g +e׵u0[ t r *ΗNV6@*"v=^Ct,Mͷ{}g3eW{]pGz>Om="4s1M/̦FxrC]&*x x0wl-|EoUD,nNa@QcMЬtg@<zIOdpszB& O6W$/F:? ^b`\>Xm<;). +~Թsi$ԍ^%wҩܿmYLW-NXwdb{tPKfXa pip/_vendor/pygments/__main__.py]On0 h(:xk vXHl-v!ݑ$ X6t 5y.bBoMkd@dHMp4ꍆUEclp멀 y=,,C>.: xDxz~,l3ӼmovzE9Kb*&5ώħ℺5_6F`t/j9%-F|1NNiܠ%c8ڵ;M܏*ePKfX?h\pip/_vendor/pygments/cmdline.py %Y"+cg&:,Xt>YwDyɅD<"xf2Ncۄ s)ަa xp x:0_| 45s^L$ȧzK=ԋ&Yn,N=I8սC$Sy+X0 l0XEB=)@*N$FӤMU-wEDnUkvVC~U#p7T3#3g^%?ʒ,i8$|ѧ_[q:᭩SIdd͠S.2x(ؘ@K30JCvO΋2O/=CkF}:shVjOE<&` 5hąx+B/"v)^֣!r-_{Ȍ=vs%K;{񇐯 [,it@+Bϐ]Ě\(Itg\hk[4fݢihiCǴ)rfKajQ]B+z8 ך @-Ԩ~ zʽ_E؁!44"A|[ɥj=iIw6x ,= F]cdb|dR `vCj&th)@lp*iG)=P>/ L˂|>jh#za=E&9x{V$ɥ~e!MՠbkhdJW6CRD?כ#-` 4;1| zDàn.: i')_<_8LC"LZĮ9ܘ㰩jT8 2^bbɯ\to鮣t9TK{OG nZWBA=C~$R i+)-c5`^BV8vSg7]D 44nH $p3&K/ak`ɏʕ<Ԭ,-8is4!MEO)'PWʴ:iܪ-P 17ַ{Y>g?${ "*!h9ZF 7q_" 2INE,&YUժ;AvHB[ QF"O[{ ͍=N:R+'ƉgFD 3vޟPSAϣXAΉEV# cG3ݧ+~PDʏ{-b/^9~s-$$ *(ܞnSrWΐv_k9fO&vFɮnܖ1;v~B1IѬMzmhTRRU`OAbY>PA>&'-FgLU llI0ns^ee+8*,[;2&Xl oĵiZmhNh<DVc}\j[Mm]4ռmMrԔӊ$:;SS?.G3;2{h PI_=~5:=Q`.˭$PlN0g{\}mct]г,D];YmĬiQ+ÿI__|-f\>*=CX}k͒ pv g gM! *Kx,6Q qDeac@ tn쩳85tj*AC ( KQdK?{$C*0Sh8b"GT%<ͲD`Vڴ.c#L=RSg28r|M}E#llQ<`.nmɭMڬZ"c ޖ2vdJC}+SSkj">FmjIds#n; g ^+G &0/eM2U_4f7^ı )w8IႁNc2sW}å)H |[#HS $wMQ=co2$qN(Kѓ1(/?~kyBU);{Oh: cj7Eڪ@Jxӈ1q7 QuKN>2jZ϶a΂dz:9B4˭@[WvDt؁fxr/,,.S'#ɚU_"j,InOO:V)lȢ`tnefre)+?퉷$Qm+$Č,Jig-$@-YЋBX&F ~|l'mG;ugW<,'Gg'go.߼v<ʃ"/!I2:;4.s6l)u,c* n_׾-y.ԜmT T&*b՞:2иĠ5GAZH#W)SK L?Q,,$Ud ?Q` zƽriV\ q]s/5s;V#'.ǁrjC2!i$ι`m8e+\;nl@w{58uiHGX) B&2,*`3!,HdhFVa뾒!NhɀZ$ղwTi\A[ܽBl E|m:Tq[Jk^Qi`A`icQF~LNKG\D7\ǩO:d̜ +Ub.&Rda]2M58"kMy̕Z+6$]GvZ9vK!}/qZ83<'zZȋ̍gp/8''d?- NH+[[{U"xUƨ _=ec(E%|fMHi-QyWaa[]ӵCIfj Cf3܈#$PYǦгGC՚Io۾a}8 6l-STS E @,S̒R,BhR'3hjՔ 7fAW\:D)ۣҪH=Vӝ ą8fdq oAKs,xl<Йuu{qT,bk=ﮫL;dzB}02ld^X,0A{GJan;a\E-E*}=^r7P/x @jOg2>Z4nRkY( gBn EW/Ǡ$<9xi:WwQ&.g@RǺ6 @y+!RWʲ |O6eYgyj+Ulɋ.omO"sAop>c<BmChJBqGa Fs]€Кk^аB8"OEg꾳#NXRG`5 ׯ#TǎAvB 0vRd~Hk.:@aūH<U%εByў#F.!6EvSBJ^?9\3C)>N [~<{Bmrg!$PPէ2tHYFҚvfLfAB*J )N3g痯NT%{ٿ6ʈtѭRf%9 [^\޺3iH{!U$Ɏ3 SU.t89"U/'޷'w گS/fѨDෆD҆ IUxҚg`H ZEB18)8R62ۡQ[ Odg3x=&&EWIt{s>n]@tf5[5 FF=:̍肹RN Xp^ #\u*&oB<ճC}%6{_@զ9՜ǫ5'2KbCiQ 12*B@9 ڛ:6M!vJۦUE}w[jET)BD#u$d%jQ1_U c!JWaQ+q7spԇ -'~xC<}QCA47}M }\~Nk]t\z]uu8ۇ1UUal`|= zz;;{awI@w'u.;P3c 6`5R&H.IJ<2k)PKfXzpip/_vendor/pygments/console.pyTn@}WV4iP$S=Iػ&q|;{}\Ι5!uv:E.a$x.4_cER HD1Trh1a$ve]-.Fh c$t9"͇O y!woOa%2QRC[8Gp !XNseӊSBfOj5ifӚ=%Km EљKcՒ/xY8v#`ێ) _cmf4: d궱3DD쵴L $!)]PJ-d$z$fM*V Ҥj+yE=UBmUb u= sPe\ Հqx`;ՓSiФMըV;XJ - |zy-jK@UΒ9>/CYdk[ =gˁzLy@f^ RA)ʼrJu"Q [,`GO.R- y:͈-C%΍zndݠGnۡ7ju R_E]H= 5[+_Qܾ6-qHw;g[Dנ40AxC'gS9>_C*bm4׬0`ܳPKfXb/vpip/_vendor/pygments/filter.pyUKo0 Wp!NE1` >[7,YUl:`[$7 zRY"?G|k kB;%qjJtncҀH}vgRp~vlWyFo?S k)|]_﷗wk(ІR'93Q&<0Q8|PT;Y2u恉m*4; x |ʗED΍m0 B4\dAbt…p 3$ 6d-"oA %ɂ˰ D7y[X*4UPB> #0Z**E[gFHtgeڐܣʸHcYLS቗-Zn`vlrR]ÚEEX+dDYt ṏ`rS"-1D\؅.qD457ZhҼ 4beeX?*ԋ'w/h6s{\/Sfl/͓B.+Բn?^۰.h㌛w9PKfX([&!pip/_vendor/pygments/formatter.pyW[o6~ 9-0 2 @Ka(( Ej${o9%%)wsr\0tC+wyml˽<,wTܹ<<ږ;Zyh]?/~ؼ|{?2[4ȼ9!Ǜ7~΃%KزW׿^~Jx.\B vzVJniY'|w/telT,>v!Q 7ӼnǕ9] dŢ5)c.lKʚI'\ m|+|oSQbrN&%?eys'P &a\czU GV{`FD>`Jۜ4 `NRqK!㥱V V⳰;.d0:ޤQ "Z[m6\b\I`T|UOӳk!@%i4؝8>[>2}rnHÅRc-lYU=wFEA.=mx!gaJk=aWS+e<{QU+Cm*Q%սRSDŽRhzɻ;†pv p++hVSh϶ rL]f]#.Mr~Y  $sNN%eLI  <^Hԉ3´ f'PVZ9t;"x[n %I]8K= AdFhM՗"qSJI:>bbd&֥tw )S(mR- zBEGy#}RL}' ;Ԛ={d?X&a4\tx2w{-WYO:\>2Pk:АRxʃ 52=iV9rn]$$6`Q"?$gDCUFGٚelb>+jsЋB CfhuI+:Cآl{"EûXD`l&B4njݞbd?<ϲR+|c0Ҟʽ2˃]KO ioaF#;}xPmVY"/-8V]_8iݱ~u 8 `a v0Oq5@l%8jjC9m)xr*Pa}p5̿-,!"jؠTXϬ%mq::43(8bֳlR@#rm d .Fj„$&zy5 n)b6a+MѶ6t&.%AKӆ[55恉ϼ8ߌ^&Ӡ=n3ɃݰR@i] [9z5qՐ ͙DD:8G+%>Opt'p9- k$nqŗ8 cV[X;"k̦`0K/h/PKfXanD%pip/_vendor/pygments/lexer.py=ioG+* 6(qvL@6EnN8FꃔdwPW^zw߿O]nt^WL蒾G}WZQՔ_VvWWL=5㓓o}/lV6]e>F߻.ڦΓiӬIHxvsޕ~k<_y C:7=eQN[}SOk6^鉚ow}:|TE͋-@ĿҼvdi%'zozq1ltU*}CR|4)x7zf4z>h 5^C~4`khEkԇi@=B DUڬ6*(7$V73u2=#h^fj`/-,1ė eVEQ  r+X(\^__+g6:+Z}A>|<ڬ`㶝%8#Ij2T2 M.Puڌ-A5݇THEkDg^kXM|Et!gUfI-H'Ί-n^8?K iU]kk:]*L 5T:!VWE[æH ŶLZ;4D9cMV00lXNwq"od!ЅƘ{m@m!2Ы<&! Z[]MׅVg6HԦnl @a t;& ˹7۬o/sm WȄ |lV[ 4Ӫmx I"KX_yKQ@mLAU B+ & nl ~ c*.?@*:icۦVz[6zWn0ڇhO3,--8GeZěB'Aw7=jOg2Tl`)MIEVJ(l?ŽPnP1Zn|Kc\G cӈvh5DQԡXQزFHR俢M ,#.uK|65Q2cxc'z>ʌo?*i*Zp@z>l8a2#yˎQC&vKżA%%\R^ԛtqkhؗiޖaxc'41l}>YFNͣ<;3oڼe$a77ғshУI+r @FvT߷ȬYO>Aiv lqubDV$skMp,4,c,aO1PJgh$b8X)i-0*d, Q= e]xǕ v[n7kȸ|g[ ,ltQl'p <׏oŀj%|]ۊhЙGvEitlZ(G"1aUVy6.`ֈ"R8%C7A K|{(W %9jAR#^ ]WX "R?zNmQ #dw הjTC`& v/Ŝ/7yӏM-J⠦ȕ 0֩3l:Fb $5ozHGr#̴)N|ZϘMqlq q =z;hI{tMN1E<vq r9led&e0aT D+} =-8W3%{u`z2!"qzU٣Gd:_*G`P+݁yktZ1Y_;/đ~'3n}b"㲮fLg:SfLX Y=`%D%RM`;2`G0p`c_$^} .7K$g| - 6>Zף p͝n6>fyqC [m*higqPE4(v8cߩaߩ ͺ}k'f"0_Y܊6tTSy٬{{=b^ t(rמuYvJ~ĖP}z3t [TƪAM l7QQI5 eYs]5 [af0쥅ـD"dq'.KuTWde7M'&)0V5O,p+6[߄ߣhyZm;\0 ՘6?(k"m>}v͎,mt8QC h Mk>Fm[ĎԾE$zN 7l -o8ϡ&o L a 1RA~MNkk/ =7)]ٷ Z28-"p#og71&ݠ͇U`iR?:!s"VSǺѳ1tDp4]2EdXQ iyIz S0D,88UKRY3Dz{eE DmEHf b5:-dl^\8^z^ )gẢCGBrme8@&'_&`ln[ lIWzۧ_)9\f)OK0nX؈gwA̙pҮaAM.+V2MԪiS6Pu$:jmC}i9*4o¸(T4](I\TcHkN{cظ_PBgBCX.cGDK f3"OOfw/>F{Ҕ^ԛ`;gwѦ0Nlb6S3,t kONR20u߂9Gơ*hV= R q *QJJ!:m]ګ!R{ä14Jbr$ L1IG087E*l TXlM||_ƨ+JHu1Ŭ0'eJ0 I=W9Bpf{N_jS Mw_~+a` i_5k&c~]W ҏ>GIoD7;lt2i:k֙u&MĠaN"yTuK &AE}r%&bfTύkAT5U9❆hez6[ d3?Mtf}0gϜ>*O. Cǒ~%2hsJsςy#ad[ &d~_=T4Sv2&^*D1wnI  G9큲yWG aOGA =~mtjx7vj=sP;fvqO8*&M!s,\ydaFH/ vR^Xě[apUЩl 9h=HFDHN *v2_h=Z$>]Йj"lVިƼm{]hRK%4cild|f|p[Ms\}5Ҿ} s8Dd;81[v"#.oC䭭p4},)7u _|n{K@t mYඍ|`Dag<'`:1kzML ;Ie@,E !An)oL)DqO7rG=1%;]Dr0Q`Y&*btY<C Vn9H|sc,y.%ϷQUu!$FbO(ֻٚO$MB,j'a0͒[KCQ܋ ! Dm(8GVotSaCgvs>ɘ:e6(ҟQ8S`_#eٚ)ܭiCC^KX!/h^>5-X3%ϕ }r:5!|!.ݺeڡ¶2Ŕ,FKJ*PNJ <p};KS3:$(]e5&"ۯ%2zmcLIi!$@K]^j][^f`ۊbp^9> R;o xVxyzĉ_p.r{t(h'؆ +ŢRS㱚-p%޸an٩$=Inu}sd^c4rFCK.1@Hs6WX;AdinAMY糶 k"{|:G ӯ-bw΄2| _znAM-ό8PdWT֮JGt9W}z)|f< \R0ID뭺JuTsJ "XOTܩ#$E9Kx0,. V4dʼnߏ$Y jˡSP<1@TN)3Z#o{Sq8v귢zfSW4Ykr0X.Ih["푏2[Cd}txdv"oFD5LZRn^rkDWːWtݯW%(Ixne7ΆoFa郘M#ޱ&`Yc8C+$ 'P b'*dD}c.c:zδv c3cb_Vx]Kvvx{2aa{Ir8nd= cտ vr5A P*h\*{)q_bB|:udPgzTG݋_<Ln=:›岢T"Cz EJ;w\>9-q_w>>Hj}3-;t->IILw9a5N/_r n  s5\IkC͓1IEYAЭ|u${a;o{&u5LY@p`h_%UZXyQb^2$DŘX|N Sɉ1s}N[Uxpjl_J`]6xVSSO;+ Rׅ^ d)ZS8\di[PJAcqB9܏@('%Oy.aGM(dImI\9XG5?NjYAл_a?vmmb<̺\')+xrDnj8PGH9ٿһ+Ӑ|܍ Ҝ@h (ѥT Ȧ> dN,ce'3Ÿrk?l4lqR;wϏO/\9{75AVkolHkqZfJ bkե]* =7э)8l)`9̞~R,L[娣d{i :6{\GrvW<|cI9܈k;~< xM aXh{_1u9| g~0jkͲr:k3EHt-{n-n Cё|>I!4 Y;7"Տ;_JnZYf)O7T5=0HױܫoX^QTeH4 }gipk>{#2P69@jcjC s~qH7%j\Tgv][EZ|oU`-uOBs[ < ~+x~e@>.GJ@WeqgwzhCo!tt-_,``E7'>jfUqTB/ߩ<}Jw)Pb{:XEet-^'fy]9sY?Gey/N>Όvzb,#f56^7̐bvL3Tw;eh;&~+i58[Qn{xa?S5'P1b4YA fJ9c/eS^%6]bwEvƉݖ\r'߄ p0d kL264m_zF(Q?8,Ȃ}RJA,&]A9 _9tb ɖs(O fjV3Ee.kuFH{ ^Nu#@82g "֦linc nZ* fj9tGᖝf _z\3KM9| 3DF]P&$_Vݮ1`'c󞤯c^xUg; q&gapZ [\2 똠>t;͖tť}<l겸~q;hvh/Lr\Xڷ_ëoTk*j]0T^e.PeH7+b[/@软n\W`/+$ڂ> N.kte6aש{9p1'ݒ^KN9^syQd0$gծn)6K zj4姰E,FODLOZ^I}kSNKfJVAt@DOvOSz"rD跏#o]ip٘mGRPjdhS/DrK厸wUQr7_WHhYڍsJNMe&a\C$ *4qVA:;Uس).Q;_ 5D9J("Y-rl~ţy'oC*~4>}͞s`P9'H僁%6hI<vy.1?YoInf(BQ(UV&>G7_]TOw?:-ދqXQ*S! $_FA h''.6qȎ;8'T_cZM K.L-n0;qg hb$__53PKfXk- pip/_vendor/pygments/modeline.py}Rak0_qdbwIB.hKK%>'K$0wj/i ,ɺw=n00Q7[ʚHV9B;|0w|FȺDPsmPCsu0I-;Udn\ ŷnӔb` Gjq.4h(Mt1F.+mA#cY2 p6+D1+t%(PWwM%kz8: <h4#ly|X>?pF'.TXv5mv,fBF:V&]d*^nmePOJ^ Ƴ1Føоנ^4d2/b13tQyFi8ϧd8S?ͣlzד|~&shMo6 t#",US1St)Dj׆|(ȯ&цrbQX;#;tO6kHYz~+_Sm?Wߵ7g?D*YN>PPKfXCޝM pip/_vendor/pygments/regexopt.pyVM6W Jk[Ev4XoOk6mHzA{gHJJr>$Zr>޼yr0x|xU()JmVkaC ]xr/W+xZ<?>%? <=/_oT\TAd8\d,f0:gN?M.,\v~0 f+fk|DܥG,zYZ"7=VʉDu2pݦ6rqIvH6cJP~{ȋȂnz;2r{jYϪ@dUOy^l$Ea;YB} YOf:yV3^ixb,Cܳ~lDަ#;Z)G6]yo4"r*}jW"L7+4fڐ:i¤Dbvhʆ8v:^%csR>s8&/Gr7ʴ)U@SCh CczIŒo7|=v5ч Xp=(5&‚.5)snOTԹe+]h(z<6l i/v}t檏93L5۽j.{;誣i&:~MR^Wz<\يgn!~< iA !T{e>¦]XOq o?LGuzv\[[ǭyJ<>162܋`aUoы©9\ݬz?L͜XPKfX~ pip/_vendor/pygments/scanner.pyVKo6ﯘ0v*Q8뜊BJcH*h{gH=V'i^uqq1z}Y.qm}̂Za FaK|pX@'e+Jt!O(ۃ7J|Epgc >xؠ.h!F{| \nv$'3ɭB%DPu{he*a_CmDKGs|ϊ,|c1O@qTvd4K 43K nŠ4{+ʯm WW?x}u>ue^CϏ>>lF5EX \26`'fYspGbwj/k::AHb] '{|,F$fl*o%)}*?j v= {Hᩛx=i[ WLA=ZB{#t&6UnF*5#x;HSOӅC[dWSt7W1S֢8?Iz$%*Ӫ}2űcVs3Τ^M8T*ԥHO/ Y9/OiPuVTPQA=i>44V"@BYm#\C/lҦɔ(zL ECʍ5 Z_eI&O刐̟F-r4jYg ql3/"\tzNȴ$&e5Cc?"9H Pv#@Uq;,.]@R0ΡbM䢓&<[@CWCu'Uk#WP)ҳ]'e94A=,ުj?j2ޣzX>_QqmC\!|S,`'Q/WZd( qH]Ȝ]?,bc6.o,׾ԴtN, NY c"zV[1/hQc$iXZD$LQ;+ : 7Comǵ=^FqMʹq1;W08+Ǫ֩ҚY,MQ4=s{Z.9ðΓrGa$h`˥ez8S4')iQcN3㻍PKfX-i-!pip/_vendor/pygments/sphinxext.pyYmo6_AXPJ4W |ƹ.zchՕ%H _$.Z'l <3U=ox!E$uV<']#5~BdeAdIyk&9a[Yn Ȕ+'^ұ*kpOXUH&e\gk9%Orvzggߑg"לh&̈́۟n~:j,\_7p=G$e9CF٦*kIijVuQK'f(S.S K #㏗hj;Y=p-x5<1Xf2gF?]?#3B)Eٔ6)yÙO$gBA26\Q5x f՜J_e|U`ґl`s^&AsTɎMF%At'eaynP^dJ 悶h zM1f"N2J.X.k kӘ[VM&;S:2w<~\g%[+EuR"W&*xm lh|Y. HT`eX :*y~Pi#G*yf-yZ|PiVtu,̟5Y,%ez1nAI[H<()EX~aR\^C3ۂNf (2twUv [YqT˓NWHyd%h\nBَEK7HvYM4־9LPvSy\5%q*+#4.ТCYqW35-1gֆb9*"VQ *L\.zJuHcD@gbنbso OF'u tuv1W_v 瘎PfrZ[Md /: haBY6w)#OSv |uzڀ  , ;+lK*8ܨI9Ås vQ\B& lå6epc3lsҺ38{V:6)X}P = `x`^ J>{XXcP*` q]3.k$=@GUAw2l//LǍEW_Pΰ~C =1FCD@-`M8Ej@ ݋(ф$ &L*`I9C吃YEg=OR~0[x"s7mU/ic=:e?դDl̯T?j|ucu7^?_@7tbVMWL.Q/E!kԺž.yfX'-=!Xe7v;S[(VU6ºshVerv]ITAO]NϬ. S.DUrNhܵLg9ߛLKV@1nVL vShS([zʟئa؜G@+8zr F? 9B#waoiB!onK}KA8Q3} Kc |IBf~xˇ˘w5XJ>[O9ݹ)49{Gj6 ذϺq6;ϖ~ګ73$GtSy:]~]ɊjJ b]^&_@ˮul~=,^p=A OXbim1Bqs$O33P6 .}D{WO?y]hi=2 pYL)Bӧkסl0_j?z`(>/[8طM197!0 U!=r\2!0TD?wZޫkj]$>`%*m?DIl_"M$0 4H:;oԪvfyztC|1]OWoon=8*;^.h}@?='5}-\qoT>Z"7gFdS@}5.|}=xYD_]/m.o}%{p ʶ @q~a;H@#*Ka8PKfX pip/_vendor/pygments/style.pyX[o6~ۛc8I.V`&{@%BE1^$KԠ6} H^OߑŖ%߬hRro~"tF>_~3I$1U!wn)$c$xi, BG΄Tcr{wMpϷ^$,"0X$"!ag' .$ wE'q(<32g0D(J45:(E[ʹd ^Pg*%p чZ]mX]%=>I\ܳ ~ji 7ik^IBOn$i˽4 AJSYעWBbIƤŔ MJ7fDpM^Pu YdWkuT ƞ62URlsݤp .dx)vDBnT\Y}]5ET"iTejiKUתZT%C"Z,:U a+oe]V,ZMT ]zyNnYsLiB5(zESđ 4z`G~R{iVR (V6:`+qEU>Q8s+Z2׶$)LK] -ĝ[b4jm@Ĕ7(.Q̧GrN~҃3pF%wRVS(#ДD!sLeKs(d#4dk̈́TAT5 F/zbu+ZEk$8SÎʢhDXZЖ0Z'KXؚqZȘ|)4T]M1L6Bm6׶n1?x?WA*XNMam{ པUU(v{%S2[Riߐ*簃~u'J J> RV\3PJvC҆FPMH|xRښ0'bM|Dr!+Kۚ7iwT\4̓k2%RWrp ;!Q !^b1f5)Ǣ҅'<~[<0PMlmtJ珏?SgàyS,y^ش7_cY/󁏭9= e9fi^c siՖV[LgR JLr?Վk! pd[B%7Jq׃_X'S?e3|d"c' 50q'=$7:c5er4~Wpmv̐\q-K% 4 YJ!xZv&Tѣ?Ͼ/7ӆeWhTVxHI i%"ϼk(^0d##gPa&!l"˗/c3ܚ^vSrz,QϤ\w;ORʆg( 2dd g>/s] F{wC<^ӣj5PB[\W#Iiny fwVNS( e iW%q!<@&o[rP-&  |B@bJW8%0#5$n,Adp-dx^x[uL}({@Y~OL_=ICbzGA4i[;ȷgtzzбtbVM-%#mN4z|Iyc1"ӽ܃ʽNGĥ\zdCe+J#bTrFLz|Lf0? TC Ov1&o>J2^|SH m ~gl!QP'bZ01&XәHbӨ4CY#Θ{^bSvЗ, T6Q7ߧGO#Rud5kI-DVKr݊DB% gFd1Mڱhi_û釗BE*/G@٣1B SjoyTB7 $T8 T'^xd1c~TCr=}I2Z _Kb!6j3w!^DT;e|# ToJuåD ^;ht-nGӺ/)UttYq-ӻ ;)4ۍ[hĥ)%FG?iЬ܎ٯc?=jqX97UQc`|E3+Xb7B/~:b|hMݞrjqczڢ"z l7=h#~H?E>#F8,;/PKfXL!pip/_vendor/pygments/unistring.pykǑd]іv;-c8p麒! _ve=^r> /Cz]^J]*/_gRx]>y/_|W_l81g?*u U)w?¼ٳT*'~Q\Z|w~*=zƘ'O^㬏ZT~ik6u{njGqO)OlOxN] C74ZjOxħ4Xkbtb -\ĕKYJH}#TPJV"V"HDj%J}D#z*RQj"RQj"+|e#c2Ng(}?2BIĹtN#+2b,*0D$0&(bbEhZ2j"-X=JR?i*JHZ=tF ")D"6*!Q ^I $J$)Õw"IH'U>L2e$S,K32e1ӎ J33QNEs$gνrv|K&B. _d+ [a>6 WiA 3^{.Qhx/M RW4]a*R.~LucDֽJ oo_ 3 Z]oF r%bC FPHD""ID"]ziDOoexr<'*TީE<=f;ygm㧼=g7j{xK,lAj=Ӄ7- u| ĊDO%Hb&hZmԓtj*6kHM$I3\{2UR/U[㫗OJkmwغ 9}akfJQxxI=,ʳw=N"'ɒ4ۣe{tw:a|o6zڣM~cO!7M. +=3Mb~;;6;⎸nJ hw{+;3t*bs5SZTjj]7heX,{EB-xEkqSy˓S[Hm<Gl Ұ-xꁇwv~q^[CX19gSB8 #wS8ڣtʀ p&gl큇xVC_c&:Âs@+K^y!T{)|3<@/{iWNm@b.O_ԲD" l}6TKK*m^[!k&&KL,veJ2}6ZSep\KTW'S_^g஁};#КmZ.x;gSU4ϘéY_wY~i[ܨke5PUr'c ̚#M?5͵Oén#n4P_g3jrm]_?rfW9\r*c3pdXjt8kfuZӎ?~jSQKޏ.W^~V0\Zwh{ עg9M05Q3L98R\F>qz՜x: <9XcٖQf16A%b99<ۺh-]Wѯz몯jƓ.cY+9 LI]iS֠#.?95zOjm19]Q\˨.sp:5 Nu$לru:W՛WG9R_@FŪKYpy-7u3prY[W}}=fhE'\5˳i̒ց_MOqV몜k40\R&6+iӢo:,Sg6Ц3hsj`v}bKSjGX85P}4Eujnm%ZP|f5l;Qk'N5+S.טA.Xy/K\doS]Q]^򬂬Y˳t6uiƞN]Z+Y$ SNguiB1+ W/c\s0vUHp5Jz՜pRn:YmGhph`8Bwt)mpQ9u.ڗˑƠimy95Pgõ i)u-Wu ע JZfmo4\fl3c&j2&dpm n3MpʸG.C?|^'ctt+ѕJsj5P50J U.S7ήՆY^^4tSu!\iઁS'fͩE u`e850kth-ѡk@<40 C~:wѻS>OuiA3j`c~LRu"ӵʕF;Gau^ٻ ,\vm 7^p.WuL L@|$ݸBB 4s t4\5fTS~ᅭHg',g5<7CWX];FhϕyA[- tw;XtPh /mViA=trmַxw9,Âk ?ÿÿޡ:ֵ(%{ Up3$bؓZ|.F)F.m( (qocc.DA.(<İI JBY6ÂͰ\r *B& \Q  k~ǎ~ǎ~ǎ~ǎ~ǎ~ǎ~ǎ~ܸucG?vcG?vcG?vcG?v ȓA&(%st[Gu詎 +` wGSugW\;t fŖ,̋yof|5kkkkkZhfZa-'Zpk<3<3<3<3<3<?e;Fx]<5L$0<^y`qWq_y1aV@|GA3y.擃z=J [i@!O+zZӊV=iEO+zZӊV~0G43<3- v=;6uGx;G}]+tnX->Z[~OMY______RfRTIY__gUY~9e7w~*n)?rTD *@t @rc%Φ+????[ ݡ'Tb3Pl充^XxaᅅsTNTNTNTNTNTNTNTװSq;Sq;Sq;:Q %ݩݝݩ1Oh;US;UK|$ DHx_D]KǪr]݀O7cm"B$F)grEGҤ.(Ō"ia,ls1H6"%AبH$)mɈM2 M)C1I=#IJIJ(M$-Kp;QD E^w$Πpy!K2RL ssH"1nPZ#3,'l0dblf2StAO rL9pPD]#p>bI Ez"IONE "ǟ%0FPJ8,2/pha10rX`rj׾5?93<ΰ, 2"q Ot{K-bgu8L_[ű(6sQc99p:>s=99pjuYx]"^N.CN\Y+{QPALۣ׍حWdKoCb8le+x{K} B1w9a(.Gjb磻T8KvvI(@ȧ,a>zmy#'{)FNO9^:DoOI$N߂$l ]|m{GOͪx謕=z EB`S/?`F!mS k 8KigC\,gGyxωH\OHߢDbDbD9Ɖ0CF,1,1efegBMV'A'K A})po/qbej[lA[ZBňZ2!u"١{m3++pHxmNU"YC؊lYG?ot ؜딡~m~h qs컎pQqs@2*hfrM1]kǴb;r6R5:M84m!M &q>똜ǦC]SDi3Pef\g!3SʨĖ`4ˀY7fiYsq3pQ2%FU^o$FuY^e*gXz2ܜTkQ3^\4h9IM%6GLh(j\΁sl{m6< SH'hUE±kփ9cخJ\s 7 ԆNnTQ?rmϡM(L(2SJ%,dn aۥC]S`K˛4-`Ihsqu/_g6w m H:  ,Cj[tz oQEx|SYc;f0&NζP.å4-o*c49;rM4~b:fiAY*GRXJ>,VXKqSdW ɔEUC)rE/+|YT<Ϊy\5US\5EQR nT1my>˿k.YSJ*r̶94Sf6b0_nc>Աypy <.ѭK5~;_;3h*+mp?t.9)`5#DiR)S'zoZ7([5 86d[ˡE)L٢Z-~n!-C@yNuR;~?~.J*5Jpmtqlr'fѵ X.J|[.,KM¿͖n"/:_t*Zkr ȪM(!HwpVn,=V{,wV1Ztӡ?/ttY2ZnClW8-܌XmFl7DcOhֳ-,`mr iA[Xe!\[ %e.-;9[RpܖpeH}\C}}}}}}}}}}}}܉JGvK\l'*N7Jtm4P6fbejYD/z|[ے6\8mi M,M,h[h[h[h[@á_Q:B--yo111OExƠ:? 8S36J8t1(\ysh 1 1rJݞ3|'ϵZ#Xpgx\Ky$w3<2/_ Oy4G|4Oy|4<.GOS ?CӒ^$)+Cpe !2W\+Cpe !2W\+Cpe !2W\+fȽ2ˀ5@JD4Gt=Sr?"x^. z@p7V,~so碨)w 璱8 , ~bO~ ?Oz,\7  qosY6A?p});\~thSrl?\[-e$:pF窴DxRXN W%[pY%gV +֒s=Y2~ϵiޮ+,/ RN ‰E˞FȈTͭ?ktE"QW iMVA,AZ""+]b!(J< u 5!)A;@d}(ztVn1lT e   Kд|bu:(p8F,q?|t$?u,Fs3"?)s_ ?W)Os2 ?)ßg BPlTAh-ܪjVQmooooooppppV8$$8{︍nPNbsո/p.p.p.p.p.p.pRc;5Sc;5Sc;5Sc;5Sc;5Sc;5Sc;5Sc;5Sc;5Sc;5Sc2\RN!`OBw*tG`?S};շK|$g3Z?Dl;=-e^&CUSMk3LһC/.POgPVaz֔W5w2wus'W5Cds3P 3 xfQ5FUtcq7 _'8|YgR~h:xju6UoqҙW=9*VEymMϪL4"׷\W|}(8[qw;'j7yW-G]k̶͛lXHyՉ4G+b<.F^EE{vBC#f ^jF.,<&K2R'Beq@I2ʒLXrɜhʠ>d1SVuFt۩?<3l1"1̊XAҰjt(HAFptFyэemT@{Du{ NI;ND?Or{.F$ 4y3o aT3[lDk,N~ĖUcA&%"9H mD3 }E3"D˿x<`9 s?bY #*ҝ@X5H =EUG?g'sbfg\ D;邡; 돀\= ni@|FEVz]NcϨ95M ԛúk y?>\٨7vLMN:ݼvzT7*V3/ͼT$MUoyxqWMk9oUOh+xO==.zmk8Gs/qˮQ6u5x{SGs:uԥ eLW/9\q] Ff"rOP-]fx(Ҩn+TH(O+;y"UiQ4^ 51±g]8hD!O }TQRܭUʅ;bU5vR8V~87jwhN5KhU16W7]@,b͋Qҝeݑ~q4z1 Ɩiڕ W最~=l*VUF\Ӓn@4FFIWݿٮjyi'gۢR-3Zڴⶠ`蠌si65[Zggjțk }1 +5u۠& ,dG[l3!n2m0@br-Ӟ9`L\Ù5`L\uM!"gõ@ES/Zi1#.mGY+OkYuSu\I~m'Z㪰VRLNKJG꽂 5"Cgep:sO-9|ٻrKC+w՗뜌z8ùaY1kQGs-3Ыk Ы:հHsRjGሊԌYGrsnコ'Ab?kd[(1W4rhvl#&IL"&K nL,%A)FtI7:=hY̐{UnS) eAVAZ$@jQ#[(v4`ti [o"ZA#Sbd zu'Z{tOXHyjwf@_ٚVv5jXoi篿թN9B;}} >6׽MM9) Qv%ͩL3iy8om5yW3fy89>?8+z0HǼlŒr -C}k$dfúZh]ks^ʖכ7}U SThFD4K7m~#C,VhjC#6sr/lw1\6F;vbtp3ZDjFC\{E.Z1b^P8Z0=8̍/HlQb["?khDžE?oiZ]l[iPT-S&vQqC5,a1Z3<”U4oT@sI]rMW5 aά2jL+8/O0NMFWL۔:,{ԲOSU&j٣b/LԲ'5aԌ*֘K։&s7؄*uՌT[ڱj#wvBRӢYrnj|kU;[qjnSh+c9Xvbi[zjࢆk4 ,Im46͕gr9nX7gL} 7aEۙ \V@8y#+Ш\13`D;C%-6L hvElw[t`thS8+T^%>ݧO{_`~t+.o.׿ѥ:L:L:L:L,e O\ Qcxv<;huP;Y4S>PRPRPR6%4B7OiZ+ r^\"gtOUs+zGQ!&op0].5x@Rբ4eq R4m'c̷.ӄU%E] ֪n ,dڲx0SxmSS43#R)rĺ[c\H E%rQ^c:dT6=!w?/O￵IbM}o.썦$CJ[<9b+v xؘ CyD] \N<%쵢l"B摈$:feTlrϰk+lY9eCXQ1RQ1R1YE2/TN+E"kNAe[唛ù/'{Yb=n#V:;:4[SڕFP#+; ,:,:,:,:T8+DPqGiTL?y1$uȈ},,n "zᰋ4CGQqiT>-#Ake;;ZlE:y6y#e6KA*V*z9rhг 'eXǐ;d'bqKT2%נ%j(9@ȉTU\˔")2a UhT9 V|vXvuerufE3 ъ ۣOPa'tq]6tA#1OYzyy qpUy&L:]pb}6hcX̠UVE|vC楃Xqn5yk ; %F2<G{0c=4RM;y5)(`Va ;?PƝ^sMU^.&O=mYo[rXb`KraW B*.a2¡!QgU3pB,3)f~ZQ#&@52n MTjtvnS-^O[qqP|ݍ[u~۩f8Ҩa2Jlr8"u3pܫשXc1T9cHz,N8S|kssl9״#?6WP״qԈ} :oS9  -~u]зptb}e}A*QPl2ʛggϿ,oc chۚoi,`ma+r^Pm%ۯ*22nY79@[ Er'tYuPein=I[&z%|to6I̍ŰK2$EÄĒӃ"H"It%eI6]Isi8Fͅ1`"EFO"35ڿ.\}*=ۍ"ĺ'qa)Q"ZOxlyJlN]^I__xDA;U$}"xO%lW] >J@SVFd =`Ȅ]ztYTW nT*ee4oўo_.ټ43ƅaALt]ҁCĔ zO5ARa`vI,~—)b}=!$CΌ]V&&ˎ_Pd,7m-VR{[0 , k/ cHp~{RKs& q~O>LݳJL {Q\ocLhPʐ2.R(5*"{򠕞D*x#J :gԔH4i[Q:YY ;1'RJgYb.s)T{Uظ*M1Ir,|)gS?c~::hk^ rqҾ.s9\Ϩonu􃚸{KX׽¯_|!WMi~VeLe%a%]<1'6I.&[6, {b-O4$7'QIX˻$/yN龁<;d16Dj.kyl]r}J6&0Q;ѻ$l%?ٶ4rK-7EjnO~z_D{'1ޱ=v(wy D[ol0߯JCq8( >NlM{* P߿7s|Hck}7>_5ѧD4{P!W;UƫW/eO\w1 GR|VCY |HǮ޼ڮ ?$mި 9kҡD썖{AX?!S :gT{2C;~0A!{:BT_*qLT\ɍiQAþ5xdQ[rcQՍXazIoL3bExD<,$~cQj*W{GHfUȟjA$C~%:h#nF"Vpw195vo4ܨp0U1LyO~~0ki+xЄJ]nZRheЀ-,`b8_kS}=3zj+4NI΍vX_sέ)U?0t7]n5Y=?Ц*P149zPi@˶ϲݘ-XfW:nmL ͥ%1p0;>VgPPGCqVtcbRsjXuְ.uh4[ (*1Ga p AlYPXb")a*R>dGv9 8P4(iE-b l =@!OQp8QP`K0p|B)>OH"9'9 E=V`$&g(| _Ep_C!*Id0`H>"q+6 ـZt6(سQ#/J#/_J{z&~N&?U%]p1'jsưjdeQn0j~O}tVh-в Mɞ~> CI}+,¿4_{WLYڊlu!̒kJ/Xp]BARp]PGb" PW 0=.A^_7*I~{Alj*7 V-[F `;H\1B<} EV-C=:bFL߹؅ܷ]<'DD(:UҼ¤bq=X/( "1\mb#s}naB?; 8_[p3;s}swn P+LLkTxGqVJu3-)Z3Pmw>uUѱ*u RkG7@= ޠ Iq!?)_(eoF tt:iz V4t}GlA݀Bݢ}j¼Q׍".\ @j;vFYx+27u`K!KN/0f0b"(4𯰊*~PXţwIu(ѣG?{ }}}?~%篡_vʻPTxևp~P!"_}}{ǟ|"^=~V/^5ݳw$>Iz^~sa| I4ް|_ѕǟ/z> /?٫w/^O>=*_K>F>L=U}sY<޽O z:;_/s{};;sOһ8gʃ<Ϗ|/| 3؋X6Y,߅?!ᨏ~~wmD=Gyx}}</_^һ;.xG wjI}ѭj7~/O^?urW=䧏|]޽ 8=C]I./{޿gqG={??z [{ ?)MJ{ꌳmŽwo$+{7#7sH|]V[w?}K;v,'ث/_|IOb?ͧ]~_m{$Qq?ޥ63ުՊ=5BTBʻo^Ei}_WukgПV7?1%t/˿k_{EIgW}nyx>mrڳ:̳|Ջo_ms|*G7%QVI갻Mkߣ<#߼|<wGxf (~H>2wO6)%7O?}&7Wsrcݴ`|Q]_z7/ί]v?ng/}PKfXup /'pip/_vendor/pygments/util.pykwF;b$v.Nn8 b̌ l{ 9K{}坝|507IJ+ZbqE&z?J&Sg#e3S^:>k3-{WC &M"ig^OY, Ópͭd60%Z3HV.Ҝ]|.Tsy0f:P0y _yWkvj.|I#|urq|O+w{u~k>19G%>ݝ;7;;oov[@V<|z~>o/^ڟzv4h>?||:= ']X9VAk9Kc[p^'GpFd8uE)ך/y.l\*%U'^D1Kb&3dLfW''3,N1lM4M #$!ّCxA!2FߗD3QlEl$sX:fs%#5"Ib10;d IO& R"2aIEk,b6fM%n#Dɐ 1nE; CjuK4rBhA͛+"~1=NmrM<DZwYP}o}>6\1}okok3_7'P_ΚuA^f(B= p6~۔àzx7/@ Xd?X=h>$.yUS]zt QÐ7Yv bDؿQ R.H_@͒j3L9/ݬ3%_XoD^^ѿ}0lap 8 3)iE;K7Ck(>$(FXn\ b'n)oGK>2wlÙۂyS3K7ώNnG 5{MsnŎpbcR_H*7J) 8`pd>QnH|wкr6 ݣȗbV`0dV ,ᨼHT3!p(q8LlG /e@#~ᓪlD82]W綦{+SWpC\-nE更u}Ryz7M )ƝuaU906FyR؏TrgI$dORMknWgl;6JnmT,۫p2DlbX.%AGNw[ScnwXPIwwip>xrMAzA[ -c< ~`{;Xؗmʒw"=UR{Ni^i`=27ܔMrĵX \[3O^P'M, om_ `]js r; vg0Ħ$|"7^;@toFo(*L -]\ݵ !9Ʃ9|[994 V/;_m" Ba7Jh]D #ydB{u8` $|N#MӰq/7qI [ol"ZLX~;ĬH'pZJd  h6fK9ۦLۄGj 8?:fISW" ^ ;9RP)$B5# BS>*BV{}՜CJV1mh)7Sv!AiMY# Lc`FND%'ӿ<ś:ͺKY_fiU_`OJscVeRגUJ3Wg^AӍj;-&kVG4_Kܺ-oK"46?rΡ Z^Dgnt&J-[5ޱ*]k({)]UHfrү2|HP$Ee;Juݤ2-+/hXDoٻ,&@qYmd 2Ul؍>?\kc榹g24]GX">[ڠioZJ1)Lʱ+!.\&xg ;%7G F|,[]HC-YBc o5ȿɷrŌ̙pC켇6 ~./҄[Iejy~p.Z,uHL/v}Eb:h 8ߡ>l-ג[KHԼ )>L푖> (>Lc:x*h&C*)|^\uh?kg(l\2SžT# H(Kbm7Z Vp-L4w\KE bZHp0fk`ϵ4w .=*C0'5z-3D28i6܋٣Ja'.#Q H>~ i̊G,.6遮| H7K 0  @܉f{Dk "Td}jkiA̧%+Z؀}ֱ{I;8lh1KKWC[t=lK-Ns>[UtDFY;/jRӘU?xp@ ?2*>p); 6S@g>D:,z;08zS M8S-E }Qp`?Q@XNSL(:͛j4 KH>Ufz@2-9 XVG)!`f(wI;8@&&0qwIKˏMEc hU\թ'46L4T&S- PJe6@֩#7R8q.붲{pCYڧS`ۛh$ @gkāmƥ:w~gYr)=2 9+oK'~e@G칋g(Ё_!5b -k0@ROk@t LvLFr<_r`0bޅ#)+1qD}ډ@$Mt@&O?R#Z|Qdؗ9 }\D`d7p}:Ak(kFa# jfgo|c by> SA@ȄߟSPt=2ܿO9j;[fhu)iURn $9d޾ODpY+PJ Db/ZneNZTImȦdc,+Tyzy8zKħokh&2$ 8py 倹\$-Rg|?Wъ?˲ðJ,ǁ |EĂH QAB<3^MeG!'0Bp\Y"?+˂^,UCm$i@r@!Th? Ch? 2v0 cT8IT0cCH+0cόOҁį. C5FPCBfP1 & 0F˿!_Dr&), !a푝] 6C-:^!0Oaa, 6ChLvdBa3!df"ބ!4& C7R!_Pi//WA}3v&6MBsB;D*Ν\b)KLSwr!_K ܝ\b%-KP;ČQ%N.1ˉ;//%<;*;/%P;/g7%mswr\bCٝ\b%PyN.1/q'BWwr_KL̝\bĝ\"Cm\b;/+wr!I%Pɝ\bCdC%P%P)%PٸK Gwr!_Jwr!_*wr lNv'Bq'B;/WC\K rN.1gwr!_QX-.̎:Vzy U^`P%)C?eJv#,U^e업%8 Jz Jf1` Jk9VyBҵp:7A!)Wއ)DZ^zU2S~ -MwlVN1ZrPKBjz_cl ]I0\d㋠WҗJⓠYG6&9>%}&{*h01ǫi`3 'ZB^8d2^,Ό0MIEAhLo@֒CSQh U2ىfeas}'aYYeas}'aYY+;K5 Sa$H2oFZY=-J_=d;^sG#=a"/ւo߱ۥd ,02% aNYX g/v“+۠0Ri{b2]|.wh:ܭ1:ൗ42Xy\8p 9`#?EX>Bž`R =1}nBBج$@R CXW}Mɖe¨ؒ Chқ |= 2 awR8iR!1E%5C*SS @hl,0|!~0|)>u]K.X_N*ȝ3¦m!q$FA+ͺ|Xva{!`r7C;?[:Ì7"ԞU vamMChpF*( 3FR؆ %@ CX/{S-@\`k0E~3ǒqK0*`¶P"?ql=Jf=Y tجBY5MV{ {0) ~ǀ!alg *9͹X8#< $I yN:X|aCPq S lE``{f)5Wt+Y l3.TZ\ @σTtބ ĎxL!U  m{{՚e6{#B_o(+B}_mz=L1x=ն~*tXmL~l~k}Al?B,þ^; gҏd.!hqaՒlcdΗecR;U!TcZśW <Cm aPP!l*wP8w6xG;* $1{*d2<0/tcl4#/nP; A qJB|M•'T#}故cv1M(a/*HXcTiPЗ0&*])/ثn P* T 1{mow_bmo_P%|ö`=FzcaMܱt3;X|{1 Sa1z7,l;²1.3%6 MfX!u"CC*qs=C?8o\>#0~1z&^N2fO0.>6RBRhܸkc4Z޸v"!4¨=-|-nW8Ʒ;>Yzdc\;T˓)OV|9(5˫g6L*sxMwex/M4/Z)$3 $SU:8OO@\!_6+2{27x}6w ]gsw$Z\i?9 t+ݨ=u YkOs.F9Hzm/Җm{o;vyC`>b"p>!.VW|!׏E%~0%QV\2:clؤ>{X%ލViu+bYՠZ»^|a"ru@`{,'J{WuGs' #1Zq3 [Bdr٤s:F :jL\GjFւց9P8taWɯ|nQ+_[(o+M⒝>5}Qv5Ǡ;G^%rڞ?sFu"Ece䛝l+(5O 膵CˊrkOzU5u.s>K}Ѣ(TSЬVAMVQ==kr= o*PODRM) nFm9[@\ik&"3Շ"#/bZr|MVyfß>Zi'EFv6BeHüLn8P?.uJMV!jhk>^v4 y'[밦kmϠhBR[Q^Y}4 ض:|{vfs2(..Wo}<,,]❎ ʥDko(Lw ,RElDZӼ/>+u9ubj3' +%%$.3 PDH_Q5lCP*[]fϔv&Mfx7?t߰eCjgqN`/# IkǕx\i2*و$4j p;?l_SHL}l!3>W}Z p ZhOE*nG\LsϕٍrTLڠ=u]\U5OHǍ9''O';\w,]*+BUţvH{K(zY4V#UhYa41|O{VI&kF»Jj1 \i~' a7`ЊPGԩIT=ԣJb6=;P/*Q06f=䖽cM((-郭Yt+?i:>y|vct~]V|UYY0RJ$CLֺI Zajsv!2{vW]%T6nX^4Qr"5ӪlòTO@ ! oI]jhlȴ=tQ4埣h2h0o]^!%"vJRèׂpW3ym)%\ى}1V$֐A:*RlNhG &+QȰ:y`DL 7]~woqG>SmWz<THF +dcP!̙>m)F#VR* m<"B¹]Ky %K9Q;wD(ۘ"Wd41Ǵb2k(M+tZyo٫sQeǸ]$QCqm&\~氖 kTi+MYB3_'$ кrU#*jչ#L|Wjљ\[Oi@W&>Ow[GЗ!(XwW,>>o[m>rTv]kqtm]dxT > tt8^r9JMW2ij5iE?bǴjaL?_gE/ruMcw01v6}7h'>X ykդ% @b.ݺ8jL7C]cp!\L7j˺{E-}XVzb ե q[g[D l-q-G=-׾Wv/te~PKfX +pip/_vendor/pygments/formatters/__init__.pyXKo6WjӭE 6Z vЃaH\hIU, wfHIVN@$֒37/-SvBYqkEch'?=uoݽݰ/lg^ 53Bӏ׿JJBao~so8;uGBX.+8s7֍etv_G@>*c$5mDvkY'Pn$׵TwŇwW_ᯫNHRyʪc>1ﵽЭ*(MyU);a7;ayvⵖk6ـpdu!BJ"=I*il<a* 9'W,GՅA(ӚT@EQ!J*% j*]mHUpm{jVJ^$|μaݭǿ,I4S2XModBq̷܈$׻jm2"&Wi%D \oPz#b.Jc"Ƈxe1WPUL -蘙z՛Ω^'{o[w 8O8X7 XO8Mu [z8P)p% FP-;I]dF$z-*4Hz cWDo{xNn c}t;Xo/EUПr۫sUy7_p)&#Bz "_X.hh4F/d'ITzα|<20HG]OC}"@?v<U$Ny^ֵZ. 89e,W`ɒNdzKOܲ{P0#**kAT_v *aw$%+1^+9.{%!.`%dښjPYB3(tl΂8 Gb JP >:?4OQ+ y 5Vz- ye{^Y½dkIDMblDz}Jrf_j1kM"r1NdeYFbH;`#Vv&^%Ziu n+؃h,(۪yk%fSZJ;xPi^2,ƫ,cZ z'/Aq+34u!Iv1p*/ ;NG(~@+dW[-´25,Zb/\ܕJv] |l+a\!JˤW@w|#Ńp%|MաK+)#'z.A,!A|dG"Z.eO&cP7^ E낝^UW5gKnsY7oVZ/μ3Öp:v~H|2&rcO:ۼ0}˳\S4r]QPHy qHwL_wއ:E"@rb3|OHK#xVJI$0cA{9|\{=CNX嶵Ap $ζ&%Pmg !}IbOӤ `˫hV8HuD+?9>/PKfX P+pip/_vendor/pygments/formatters/_mapping.pyWn6}W v-.Zt7 Ջ`<(H$KRIޙ$I'] h͐g跰_S2Q ,NCڀϜ+a UJ?x-^ ?5${ }J E>9/G9&cCn=l~\t~ڍ:֓i:z3?kA0R{Ua 1,VKhUz <I}$] @ZDHpo15dBJ-W%qvu^xH%#;)NhKJ,A^UK"紲:TT$ip$"A>P8Sx8<1 2!>SA%y-rS;Q˩-UԸmu5q(sY:}oO*{@"8Wic>4i0WhEHNg 2Nw_G@l$[Nbk@. Qa"nx(RgwJuuëeYLruӚnZ#Y*@ &`lPFkvy8!+|aS6r-6gS>]>3Ω$3p&7OQӒ♇7\y$Bg͍KN UGXEkX̶c6TB0l7b 4q7M:ؚ:&'*rtf\nfɸbc¾pލч& нx8Q N+uN_NgvAK@PtigNręVR|0azBP"IčpfSŨ> ϨX.pM-#]!"(r 6cWn:>8+ƌt'^Ѭ]^tCZuQJBfy۰%)o;{Se~.΢?rL'X] 9w Q ygS(p$JK0$r kEEPn\ Iri i4W(MBt]=JcTy->r?Uh퇏 kLCJ'7lGu8w:E%Fb;PKfX   )pip/_vendor/pygments/formatters/bbcode.pyUMF W.E| Hz{r i$3f[#H{Ijmꋅ|܌apcʽpN6LdbA:,5šT۝C ww?<88)SR‡?eXU*3X,#!B&P G7Xh) Uѳԙ)@ S:\qtQbLFQ$<``x@xIsa-݌ۯɌ  /<6ǝ-JoA*+3q/$UK4Ĉ2H vI7UJV!U+_ˈʑT>䆝 ت`HDOT:lsSb2ޚ:p{_(g˙o$MU*[êȸTr[H}C v\|L?jꨜ r`0)8taՊs&Ƞ ha0(%+爖xTU؟CRD_olkDr`PKfXw&U'pip/_vendor/pygments/formatters/html.py=isƕ+TM@jH$IɌ3vyͦdM`p8J}(ˤ<"wf KUd˰dQN2w?~+uZW~m/3F)N~)f[Q-^a *.GR~0a0iɬgoys*LrÌzrrWuNVa͋|)\"/Vj2$8/&MjN;:UGe$j$>\~o*I5{YMg0i-*%MJUH:FUx_H* =*FV\y&{4L__y=x+(\)r̴ g&/A`x&_ի`d^{iu{A\8 *"-auDtȳW#q>",F)[,q!4 ?+1*d.2CN"4Rm,oQ< :)MR-AQ0IJLANꯃ@T)GUm QVYeyr]T3:5lFOa}, COJb/ٴ#4 <hG ~xޛ}~e& XUQW狪ZgGGF8買eu&w;TQŠ,e0~fW?hϿgH|/NGG団oYm99>9:zOy6dKGˣTcTM*_mc d_œΫJ;,ϏZBG_ɧ~g 2F MTx%EXx1YǠ$eњ:D%NkpK\%vD#|[+=޿kVG4>}"WE!bP-Mހ'$(C<8)Wi^??DI.V Z>tgtT3Dµ$yЍMWR{[/y^faE d RwߊK/J/UIdYъb"$q"C%"YZ('hJwwtJe$dWǓ=7|d)ʑ+uRG9ˁj[&X, B*=d[fRFg JGN)nWS'h3ݡVV`opޡ [>񺤅!XY p1BT0™D?k\ Yz hL@uPj33)tQP8qM^|eXmȳ1<^h}xh\Fd6Y1 80aMRJΪd))M@HP^NJ1539 Pb&g]ROLT֖H$ʎ@zb0_wZT:*:F`:ar!4w%8L@"!JA$8x( ) /:E%XgdhF=M󍞮a$ɭ6HN4~ڙ88>~X)%HSQ))}:b$j*=Jd$#E ~dQ!Cqo D.,]Ixb@,-Fa&3!݂w 8ĔR<>n2D| aD: s2'em&d@ڨ6,v}^)'#NQl6Cr`-8ZʷYF{[TYl=S!a89B|M,`'u! B G9bsFL-*]U:@k( C]RZ:DzEs2M'̮u99αќ6GJZ~C:pEgM8Źd !!%YkbD62C4͕`HgV5i| vYɣլH}e{L  ᕴPd3[({iro=?6 Z[HhSYRR*jB&"Cݛ=XYt| !=D5bhNœL4_Hҽ~:N0ɳ=&${$ ޓ@d}xc@0%kUD 2A|y% X7eWa#A 3cgY> 7؝ &WSB@%f.²䡕>g[H0o0K5 ct&kFx+g]U~=/\&烴UY0?Wh):Ei/2_/Hp!HI!*8ar?uNDnFPi"_;tIvaeT1&wwd./᧰dU=je剒9tV:qJ<7{.-@\)kR83Xțc`0I) '{1<7U woŊ~'wD::ec%)랤z Y4mhO@WYG zUmND-[7 m\JWWIr ca<94Q`5Ϋť !(f {^f yjBX;%PMհwL)%RuRjmݯtN)M_* c9[O)9ԧ1pںܹ޾شLn) tίhrxh޺Lu;`+މ kBJ;4Z5WLR`ƥ-qD'T22O܂lfŕm%ol',Tba*`1T#?R簥 PJ]0=%DE,˯Rޢ̩3Te'f<;auQ8jt%%Pg:6ǯe 8mƀKܣ] ژbȭMū= a\o|RAp2rheUMS2]] QN<1ĜyIPV޼R+BedB\%gT0,ED멜{'B5n4 D%߫Ddƛ"}|o4ާsSO_Sz;fF<%Qhb62#EںW07ү lP> uC]%0F͙.g-ՀcmZ `Ti -6' ̨L ~n'Xw?dr;U \=; Dr%8-''F5\ftkde=4U?ߐ¨Z#r?ﻎ3Wo*e@u J]1`m \*\|S[VUYOk=^ ^0MhO n(_A1,@6"6*>9[a+pۍ[ppfjhlxw%&;ys xuBQkmPj|jӷw9h?FM[:jȶQ/Z "܏$!1zGgp3X18p)}ƣN *b_VbP<I8>5 9'Ϣ$5)BqCx ?Ģ)` MQ^"EXDdX_Ŗ䇴~XF!ee3 7"w/ܜOoGZ,rYiv|iVhL.jVjU:Ih]x h&?k;?ktvYT:E50Z$m3a;}WO+{稳ѵo52/okxNʼ0*~ #hjv(xP<rU(QufF9הp󗰝u-gSͺ-/h袥pպI[/aК 6AKwj@`iesZT<:ԡ ۛ[K2Ac Vxxs%eXkVGĪ#Cy/&^cLCx.;"Mq=p=ؿE ׼.y#$r·`Tk[& SH 1`<;ݴ7{"3]b4J[#!|+02jv@I(c㤤ThITh_oc׊i3Q3q8_42N8"[T+Cop+DEA-WF`5'3S%K{ !t% 'NCwKU :B>ZP@u4e6#ҿR:hq*0_>GI|-\i|&MtߟK*-[#>P+G-m%[dfo, |ui)y#1율t,ÓKo^Vdc. ^hac͙ {JHHh/+Ě| _Zoh\1_K @eRlU$4f g{F>OH[3'U| Iz?}-]I`CɗXV Z\T.g:4^J $T>RX(~.rOA3zzo_h#>bnqΏ+9O׼=\Zt+~] ẉ% "/=B%l\A|f<A -K={TS ƒDQpo zuTv;=3#,W@-U'>ɫ$άp%J Pt;>3TcӑC0;2;|s)>޸Z=˹*XHWcVO ]`ȑlXNJ>lpyZQWS*PeqzVaT%/[!WSV!Kԁw4Vf/M=$2𥷦ek,d}A)@EyiXco,Ԯ>9|!}Vзj;$#RdyrANT7 pwF$nA-*^v@f~a +W5[Ǥ<5:~Юx;p͚2dCn:l/'?!h Sd5 Kcx)v9kS&BUp_43B/koCQx\MI@yWV.ct\ zA?mCWnX̟Jw9<^3{ MIZQ-`~[/N+xSұIH12J|w#q*M(I䆓2nAloW&kg,=]\_?}xPW Y{!S g>.Hu꫼چk0=^dhp3BjTlV3sǡH ö刨m+gAn;vWA@B{ &k:j=e?4t\SŨ=l02^8| yUxʶU[!,~.ohkn;'t ^c|装H^q9&/?I,萞/d/Wن~$f_>j2ucG WcOvDK/&i7*݊<% >^*EToflPl7m*vn\Ϥe j bvM$h2_V38X1ڟ *dZծc\n$ۣ]Mg@}rbF[ڦڇ-6:q8a g?ɗ\W` E`qՐ ֣ nMH?GߓvU+`l7ӴG}})CιU^VUAP}z3b[ěL.Y{ö P0I4t}je# +|,7p1Af{$/G)WpstͮtCi=}m'5R = `vF}'?{ZHNOlvٟHJ"ň +FN(r~?[U VA)8/H*Pj4}O(ۋMa|Jy_$2dW`뫛턁 ^aPz"]ԒsKG Sܜǟ JsUʫ۾+aDoQ?i01U*Z;so;ꗧ&<cb3p|rHHsD" Qn'΋>rVBЯH ؂q2悀uBORͩ*V|^̵t^kt©reԬ5o{yNʸCbDF܈N3bT7)޵t #.? m%=ikemN OZ PNrF,q5j`Tڬm`+j]Zܔ'1pvPwǼ4ficq_uNMPKfX(Z&pip/_vendor/pygments/formatters/img.pyIJ숻(jE, i+ubދ[c+3a6 yp}9 ,x̺7V7 zϖE\*_ n|R*Ϙ${лIӊ%5bes'(AIv.8Lwgo#z k%˳<ſCJ|r2lA Is%`(ś i<33fa1x&f|dx<eVeOoޏ_^O^Y,<#|U&`b:;~Pg"K4U'=cJK~Y XRlh6yA6/D^>&gq#O,WE' I#~`A0#ע cعDTy$NJ[}!60!O닳h>u !x/)o?Y$UcP0|wu8\\k 3=CXAWI8y4HFc( g8$7WWۮɿ}MvUPA!WZ  ZfɝT(T!be;!p'2 j0lqxC~šiJ?t%NBBtI]\vO'I(xWKY eIR2P@lgycZX@Y!Xe\PKO~?ݻ(~|0tmת8a9#2vlhC[Z^?뜥?%G&'.?Y}ET|-"ױ !9}va Ɠp~~\O  w4$mӼhN= ^U";4C.VDEq?>]Mo[~x61A#UQlqN3}XAі$àDE cPaf()]5KjbWP20YjBbFFIר"-R ?L/9@*(<3h^*9*/=}WCfS<VedzH+TI 8ko`A: I^n!D|FZltdA~ ˛_G/ѓkH iWO^o0@ t%ϕpyU.OMsTFȣ/6K daN2xC'j:QABT}GbSl|,f[6Xw|jtUbC+.!sf P YS 58^7;-twX[xb"^Ly=a l/+-¾57Oi6a)o=}N%W dM)č<{}UA5)TMQV焐DYȦ(GcG$+$">:b|v .(E^ȬOQ8'!n߱܉18D0yM)j{!y:bOSTz.@p\.( @K^$@/Ǯ wp7J IJDՇPj dͬZ+`ZYV/̙...'Ŕ8%ZF]ɖǢ?%hZ&|bݵzrv1$lv)X-v @4ÇGYrg&5 "OIЬçett n`ʐ-sԡ&q륨3j&=;[-'8 _UI*zj|[gGXuu(PIƘμ ZD&% tcދW.Z#eƆLZP5sdemv@OǞᄗW6[5Np)@^5"p;kqKY<0TK#U?bREeFSʑdmKZVd(ݬ}[ґZ% 䒤&|(V><0Of_ !P.(,vr+!.}kab=IjO6źD0z*E}Oxdm]T֓!bkjT}uĵpH!ߤe\%̣ZBY>GwҺ*I۹!ѽMҡ:ΧFɋ"U (0H27{z;YEГSƥ}9o7z Ecԭ f~ Uaupd0yE{KRYTi8i }˵nWנ%[MYv%QKöR܇CjL&#/{_ɡ̷!'Ӽ,q>Vd֡yؾj^o_w/p BƂ!Q+קq'M2f-3tlNc~ܒrV׈GaAhBo PKfX9Mu&pip/_vendor/pygments/formatters/irc.pyXms8_#5&i y(3sP;>J|L[ؑ|h>hZw0~l*%) 2.Df1> ~:ިQv5xl8mp&KPswP."Wo>|X%Y._woO..όל)Z2`6;SPu~cUE _Y~g[..EB+EpDQ"8/ńӇ 7V1Qd\i|ɚfUSi6Fkx'MiY)5A .&`3P˚!(.)dDѲ%diV9T|&4:r=ᾠL&z&$l=N<홠K S j^v'} ɖZpF`nsFv+ 6v+_ixZR)-NqlANξg^^:[_vL?(dΓkA/%^IEB|DaW4\:Wt`:دEۃG1 KVϭCӢ1w&L<\q{pXa yhަ=5f2oN=aMvyYvG/鮫O>v^IFsG{RjGNJ N69 j?wv3'xQYJ?_{1B؅mhr9Zlbx|QO*Q.yWΦ&sF8|Wabԋ) !`Q62߲_BZ4I LPΈפ:#F[%k /-ކ[!]AyWxr Zmxx~zMOKhZHÂ.aN1(ԃm pp0̰R56"MJ{m݄Ӣ,p [>[aSk}k} G%-֑{/~r7; :nY쯆U]P>æT˒X2ǰ`jq6LVD7cY@eVP/4XM33&Xƙ DڗszǓٸca<V0USju0h^V %^Eů6%^46ll XbYյv6^Qˀk2 Õ0x|+q814NzŧPzDMoSU林kb+P,[96BJVNK7mثL 2='Y"pƦiU4FmAu|BlGGic\:̽k{dYr p|}ަa iZBzC/om'F fֲO2ͷg Zл1=(~8:c  p,\d[pڠ89]LGFdl[X/ViSҭFS\S+Kk} J ߠ-f J284jǣ [wMgk;Ne]!%җzaL]XZqbczp3M@MRĖpu>whv-`gp\ߔ<PKfX0nWjK(pip/_vendor/pygments/formatters/latex.py] op`O?it_,DVyU 9 WD7_O?œ(o ֞PRw}/}&ġL~|ˏRA(w"[8:ϊR\E~8g2]fTKx) 'e6ϢT-;+˫w?}x/_>^@81+YY̲WfAfB\?mk70* r9(z˼Q8 YVE*/dӾ'S?5FÍj3p4'?8nPv<?[? 98yց\#:u 'o:W v #:ȷO#O:d툙O>2fd>]}O>Bp)~o SJmն7̃.Xɍ'ܧadl 0[BM¦RS"!)9]Un 3[xd%T%bm H#)V E非5N!A)i"hZKB&ك {SqO8}Ԃ[cRīT.E`(3 $VP>v(F8%ZaU y}4o$b$"dq(bfvw]2 -eE tۀ'MJ&Z=nd~Ȋ;%Hw'KFYqN.&Xߩ|yU4dj,V5&|`U Ll EZ*E#=J0:XšQ5$v;0Sj@h7,2x_ocVE Y>UAKYO#DU@D썰HiqfXkp_,dJe ˥U`&İ !./2<.XMBɧ :*a-C%?ZIb_B뛶Z3"^(11o؛ab= 0˗zS:c;d泏q``]cP-7Q:{։y8zfVtpke@"Xua Ѱ̏"6"vkM i'!+n0[աf gـp |X@l4JAĎ仢c; )H ŅwovRmD;T3uOT~RQksQg!Rrn% ?XV)ǩzVcȆMզY6\/8Zy=l[1beӡH'qGw^{?L `"[wP>#M&޸Xvy~#' |̸Z .֨Sָ=Zk8p_dɲϥF|g-t" ǒ3$*a1KlvENv,HK\;"WS][gi/#F06<+fC$ /l7S>[z9:S .+x^ p'=ZdJT纯aQ%x;^vDL#EzPC.9C`pZujZC3׳*:uҪ%du0HeV=PV 2]S h&ln;-gNbu9AêI󳾫ji(f2q6XS9Hdn߷oe,ͩB~+o]-+&}w;fhȵlLNj$rWί7tpM{~F9g4[>46g̪.ʥ?wU褉XY>OBS]@$Bc'x۰ 3K475C26o҆?x%O 9I+?nmi[] <2ۭwxtWu`p1˺Q/Ζ,(1@&_w(jWU^}ee2wn.,aPt?쟿^F ?votXڪ^gv- kx'o`}[fcw"y= |8@TY|a,C}UM^Ӳ$ǡ|kjՍRJt&H.= lgFհ4id Tf&[s jZA4 nDN3j^&33N^ۆMיgmv0{򵝕܇9ȁ(6 #j*O h/MtFT/96tݏ I%tq㰿-::h.oΤ !nt^B)Gݥ:3 R{<\aͼra)-wH|SťhУ}:䖼 cGD9r[휼q(N\e.7WZ|XY!;(G,^ %JǑO\97%͓HMy.`W\O^:_lLuo( 2\rDI MxFNNdD}QT9' ZƸdwe70۷p |.e&#}.Ɔ.}/M_#"l#6Xeo?md0;#gW3*VYaY'̓.@}h̓xŅSACwvck~~5G(_]7N¿UO U0(v}yCοm+_*2WR(ӥ*EPi܎53- _u[Т bK}ɰkNeV+{S藳Ap +6J5-$Fj:M4|_WFsM++wlrf_,wOҿ;8 w;p鲲fUj^m=J{Y_s6@XQ_}Ѯ1ș tNs&ƷdS-*zu&ͳ3Bv3zHL^G vC!]u&jM&5*8\"-3Bi {Glɚ7sN@\<݌v33ztxSÁ}e1W(`\҉  '+S0URjs('!S>~I mj󾣡1$ #Uy84jd 9ݵ_$v3d'; ^^=޶=9۠ȴ+<]==|h:#h [$vL\;q[(rPX,#WC7ewd!M~O4c7w)xʄfr~u1R$cB'A r%dɗ#TItK =2(ǧӹeri0tFe=s8B˂,,cZ19%–> ;.&ՋAպ}dQ{>NnVf2T dJs*f,#knؔ,iq `.R.ӂRu@;y%(\e,"͊Og\ |HIxhXaYGZ WsjE&k ,"+4OquJc휔*6 (TLCdQåVk%f~)H3St'Nʜd:HB ykWB$`,@1BӔ-ALR@IuW9z gdBK>}<}RX]3\akZf 42S 骀*B@Bf”jl3~vV}2Yjʃ_i{sKG"MKth2;$!ph2p'_;vHLv;ݑƧJpL%SrI!J0sxkё?F;^[4m>p2\olRPl`QF]8ǿ o r\թ>-*!7p@g@on@ :y0{68 < /E䔈lI5 5PmnT5l8M__:!J.*$=êa PKfXs3.pip/_vendor/pygments/formatters/pangomarkup.pyUn0}W\in` !QJ0L1Qe"7m9v;4IdmW /s8t:'[-RFӹSf fL.T"5~_a},\9(1@&+ -V9_,֯?=} %Udi -aQjr'h3*g4Enf*7  E0k}z6%dP,Ȱ@[zSy%G7r a,[} ΡBƜ(^\w 2!xQ7pVܹ_#`2aceS)r I-n f[vnj҆`ԍnBpa f*a `=dϏU(([<$KL6"YK,0Fm%!FMl:_8-A䣈KnQC8>VJn+toq)v;TL3ǏΣfhֲ"x$VBXj{th`γΘTۆmTdLĭeDr٘짘`O1 KO;I! ]qgiMTHR%U{<}a]2[4ݣK%Nfu~И1= ;,|p--RYRv _c?!Uh`f-:[o'd*=o1__ꦣ.;îlL6"6wvouO5]OG}{CLPKfXndB .&pip/_vendor/pygments/formatters/rtf.pyZms6_SC)ɗ6m饙8~<Ed ЎI$LLž>Xj40-ϔ܆JRJ?'{֬`j*v3^K[K_.ؕfM}ggWl}00I/}&$_.y?*,*)N2߲(OS)gmZƼ"R,KozƁERR^/LmXHkuA^)}jBo*\<99 0M]+J=kxwXdAF8?Y UO!-wRD zJx-W8*;64 UR&U$>\FXAB! [De.D?NyF )%gY(>W+Ey,ՊįVuK &!Lt}घ6[|;VnyuxB̳*ha /KT#vMbIh t'n Z Ȇ,gA`+~4 ;o.-",6"ڠdU9Jm[5 |I_KK*Ce}}<>"iŠ\`T&i2HWqF"9 1 ;ܟmS,12c-evcwoT#D̿qd}üEc,KTOF04;xRmG5Bhyэ0e$a<."l$F_&0|C9`#.6x^ 1q ~׸tztT}y^dܥ 7+;\;{SyT,m[0r腓xGα2d}fCsq֏l[lg> Vk[V?NN\@e; dkD^(3sp5PRە n8gM1D=B/޵kuHGhJGo": F/)ݣvq@{en㉅2t%ſ(_pW뗼\b(-h9)-&?N)nVB ʄ^A`'m% ~{e~K }h@=A.~i,n J U/zF_na"8t}ϟ= Z=jW= Т@`2ߩ@)wAil9R:ðC½: kQS Ա!]3S@} 4s_R\|n_!ɫ,I7/pz݈b^@&"nх4A!x܇SbM+>le7f֥X-h5PNxѫ0sJPNԯ<$E3`3%bsկi&\*wOOݭ.z:_h`i{mj hLR7R'@gI0oY]g4Xh%HvAǍfDӦɉ+ i}D`JGz/:ܰs?nlsYcg]#ON{o# ȪE}60n]ђsTÛxG4z!t+u'wXNd蟪_$ǧCO=IrKG7TďHzB auIGc Zi|\۷^0qb/ q&Uabu7JPX9H옶~h.ӱ"{b(P{XB Mފv_~śbG-pKsiXٿ7zT yVz. ,n0Aja8bkI֟]82PKfX7vɱ &pip/_vendor/pygments/formatters/svg.pyY{oFߟb-Sjhl 4ADK0ewt,KR}8!H$oޏec6%O"!\*O??{tKIπ]+rQ =bWv2pt2BsENzw\2eI%~{Kܗ2(OEyF6QQDq|q[A+ufW}h/ +Rϥ-\'4Y2ueW~`Ir&"#Ϧ3tx‘b@HX0vf:%@Ʃ1 ȈS1aO-0eа40c#ר"n\"?O #u(SliP9A(M ,jX9sjR]WH $/"y"9(LmNUX(kuјkOƒXoua±8b`35 [P ڌ'1#'XJni!䇐V·$-3mkEeU\z'1}&)<`9BR3'j 컱LzPQsSeN:puМ.I\U(x< tPlaȌWB`i]Э Tz5 i<(\z.J[DîI|EW1B;6 s:߷6Jgpա&M?6W(QmhP^U+*T ī(Z.(`SlZPǸ$XU_9#'Sydv/r~X^α7tX=v7JO&e T.n~b0/~x_%Mt ~sQBl4V+ou 9| ǃ/WGt?oy(s{Bȱ9/)°qZCSLǵ;v[`dXZW)7MV.zjܦvŐk%$%ly䢱..eA1j|xIjRwsD=g_d~.gPVYF)\t9Rҵ9`:}*O+ aۦʰn:ua"W;Z+w Tj]y.Ny p[uh5JzU(PD + 9i4:tVz0FYF*}({ODwHbJ>К8u[FFJtS"B?ҪO& ,%)|0 rZ<,hx_~pus~]^cTQ?ES2x(J($.KI[r^y |<~PKQLh)q|jHC֋ƒ!$=II]>hM5םzIM*Hw /4q䍆3gNaattMlXqBUM;b  4Tr듃nW8 x(;{eg^MƼPϚ|ڗE'~Ķ\.fOI#ω'`!f'+0{^_"~p4PwC~%`܌ _mIP MŸxR% 儍A!s)U9-S +^œY^ M4Iaj(2BFjĔeQMmg 8v0/bfwd!9^,rW3)[ 5o 7fvU)*T`ˉWhaa9)TdM:t8c*%/'>ܴpԸgXw?:#C]zLpP3aW!$ܶ.(#yG+T8&.6!Q EV*H}8pl-Pݳ Y*,c,T 99.O|em Y%i͇E Sn2JzKdm 2l;N&DuM&LL|Cv> vYcdc÷}Fns=J4(pHipԍ!"|F~xԲ/8%eW+'BRLBl:tVz? vӜM;hTׂ%l@&V&qؚ+A):pV{˅I($`juOV84[l&\&4~k$煞xBw4$tP+DsT_Mܬy) hhKA<oMy+tougtkrrNU]1myldמK1ϰd7b+-&ed2G}!e-Nke Gw8ϱ=6YF˝'PKfXofK -.pip/_vendor/pygments/formatters/terminal256.pyZ{s۸_'%eKïDwLKLI'v3GxH 9v;gdי. ` 0x65Dj/dԆu9h;@־𦅱x+6[b^}zRGOm)_EObً;(#9g$^{/Ew$EqȬ`H0O#Ayl '$}`҉]ʮS[6R=/<$r%&~e?OPXqgq8{?|teK1a('7o?\%\8A>3 vf}q#ax276yp@ha0$pci2BI}F ap˙)\dbͮUb2%d cQ pܐ7s:B9 g6Р bFQg.!U"ߐ!m6^)[s"|pi/@~$A(B5 ƢfqO0jp{k=˕³mH,Mgw<ĮOX7q"1Bxo'S@fNfM|l0{,kN 27 4eoS+Lh @tlDͬ[,/>x^ /9a Y+⃲^,ˍ.6FPUAo^&@|d4`5,ai`BYf|. ;53~0_@ScTɍ\3o„d`4ohe4Q!CTA<%T @sDFgݛh0&*!upaՈ |ܮ#lg`xrr-qH eYl`ϵݚ=>~n ѐ6QTVaGa+v5kEpdԙɺSNl65Ux9M( Og_=',$>00c:FՆM1?w*;+sܪ2UzXr}WٲA/Ʊk )4 =4Kjo*MyPECt uq@*=ZT͉eB$2Ȑ l~ڤ̊yUIRQIBvE :+ʐˍ}z6yI=>(p y'[Ғj2GVbNsUK"_X5VcS!#2b1 Dϱ4uK L̲P%\Pp' 0b-b e$9Id,'H˔h,I+EFc?B2$u$KS8BlV霭YAHX{NX 8Fg֕+ ]Hj3ss(NsuWƺq>w:Mhv,iV=p`9aʌq=@UIX.n9 *(S0pRNۅY8Ad/ 䆲*K{L:X6Q6e Nǖ=v N'l8P`u+C^# ;,fnz  7^"U;61],K!$+L\fKw#*~R<$>̢]h{tPBr8B)EB$u_'K:zU9sGa$q&hة<\^L;ZjK&yHrʜճkRJ6)U*0+NT!6"$B^v:8XJ"Aѳ#pw)(hF%m(/!e-7/cLjEq. kD"CRJ^MG(/I ej'!~FScQ6?axbxbܢUPG#Odm&j,<\U4ۂ ֲ[z)T- c,1lA\Cџ HY2-5q=#8|*adƏx#^GB/miQMGcqy1hPުר)%҇D|MsaaJ6 DnXp:~^v=TsW`pNlBnϹw`Oii h+8kܠx'YsKh&465(QCK)w!g^#Q†GbOkike}jC}()Pߙbsd=[墭78VӭZJoz[zjl~v9`t.\_G0SXvA#MU*c7VۍZ0ғcz"fy2( ?.P@ OPKfXh=G S/'pip/_vendor/pygments/lexers/__init__.pyZm۸_}\[.E.Mr ɡ Y5n }fHJ}IrtĒHH'''z5i)&(=]uo.ijp)'O~#V{a_le #xӻz6udJ ??{ЍH{պMZv7Ez;)ڤunr#|''nVu]jt$4u˰?u;dXp)mVRs-VmQu^*(TܣUeX̍Q6sqJc\٫^?}'nuK`v>rFsG2tm8dY^Y.Χ$'>^g\Da ,0RqCk:MaK:YDiz!26q:['58`EV6Ul2BdEI]l>& $$$c}laK^$n?9[Celqq᥺CVl4h$VKf$k>/ztPw:|#"y `'rW7Y,ēɁC'ȶI1&-M?j>O0~kZ$3m(I@GkN~t }RRe䗩x)trA[~aկ޴]l{۱, 8(<;ywR'G}qP3rƿ%mJc[}-ה ]U5EgCMrX4r"٨KuGܪ5AO|yW]Vy.6Z/:^bbH{q^ࢆqE$yoH0/aHj| k1=xs_dA27[$ N=/q,ɨE=3Q/AALե y9熦\PX.spodf{Pjߏl(9|!EM i {Oe׎(l) )Ƚip֍FZ )u]f1il!(RIl4hpA0m6*֯I~','Cҍ8"ث랅` 'ސX'5/ʝ6#hP⠸#9E扮S}PvUqWE"Կ0޸9#9^g͐^1@0F~Zޝ[b@3`L/tZv`2U:*vlRz{d{4__?c_ zԜgpz9+hŠ/)cM.CbQ>V1b>B܄Q~n9V^/\z>Q\}Fs =K## jeDӽ~7(Q.݋oHdaSl!~V,3a+Y9MƑ!8 RE2[Pl2-P]}]كu5-H&0`$Mg~ݫ#f~bsM—?+tr{x?鋼-F>3&^TɈ:>>x;>QdvD!ߗԱ~k*?csѨ|RVW!6׾G<2ĊԄ4 U 68i01T$+mt;˱/pK?]qoCU/ 3{9H Ӹx|qE!8@ jMN9\ MGu-kǕjzYLIInAF'#L5F+XJQ4=u wg_<溕FYHdcYO]#`a }j.3&ݻ eϟsro,1,~f;8Ϟ7r07vy'yME]"hC,amQw] 1)ij_xL&ܸo8͞"yH}JO<# #Uқ,KzC߱:(qPuKyu[w~PKfX+z=A)'pip/_vendor/pygments/lexers/_mapping.py}ے7< aۖlnEthE7۲<UEuRlm[^#,< AW_B iUEeq珓uZMԥd8i&kUIx?O.OnM^]\M~=/'U,PdeۥQr?]v17==;__uVKˤjȺHˮ=ut{۬LvWRF˨+M>;DQ&pt}ao?FE{ja~}WRy +*Jb2(SWe iDE5UZEUB߼*/W95m8   # ,&/ADsQrJ*PTM^;w %9 OcI|͏#og}%6ä%"rBP#T7iXF |Q$$9C+{EXV&j^5Ղ!kҶ&38φ,DWaI cD {(JьU,3]߇FZYCM ~0:nYա N~*U0uG͋]Х*G 5j|Bčy~LP@tln]ޟQӪ_rswu;%6utM J:_lHmG/.vXZ~U-SrKϿl6a 6)}2n9lu*Ji1ӦVMbЖ߆X-TɷXUõDwzwaowrQBlF;5כ,ކDچtG_Nhi1GP_}W]VS~#(]镍%T=9biF砚soqϧB$bzL$iNWtѬ)Em,uR &gt1{JJw5}0J0 I7[3R.1}9@ &>FC쐇i.0lk2^AƭiGL$,jk~AG|vz P rȺMTVC.|DM!v0DW7 He)UMLUN<>{˂|iZŲ{6c-IT'Nu?F%f)" K*{: .n2p4oZt^{" +%+P%ןOYh7[V0*oQk{gU42ګ*̸{3m`usTW,!@mq5[qHDh\quX,dB:pFTah,@H+jTLOWk`}ϒ;g'̷c(V&Z6?Z..($- i"Z*_f]̪fYe0|eUݾs5F &}hZc# XK6DxlƟ/Nð󬅧$nmb62Uyd }n؄жz㴭?<,n49=ۈ SQd:ءJN+9_~co%RZkKJ`fihZi;K6 /78]CZ"B*yCNˉ*kgCY~bJ1DtY!އUV]ON/1m'T<'P@cZhJBdLj\geG2_I|{-=ʯM.has^UVnɝPFI=4 PF9dƛ: FqJ)&v% hB7oҴ6_ 9fan[e` wme^?8kah2N Tf:!FM%R5;߉z2o0AX_G԰VSGMvlnlBdTQטn;Mq~ԈYa>"H# 6D0F?Q2fJON P@h,Cv-$soW>.O_FAX`}̷;Ff"p3OZmO>V-u)P{}t٭L]S&t3ɪ&ׁ&sfj  Y֪Gh=Rj;E)@Uxd*߄UbhקW1ŏW*UNDa&W4*:?NY£,u.6DcmmHST#"ti}[U+h @U1"UKaT61hXw_xq@hMPJ&U/:cG\a4X䢊{ 1 jB⠈#V&No潶I]6Є*BnhA@ #++EƈD{u,AwYjh' *Ϸ&O/3д|!WYPUILmC=0bPD"e^ wa 8 ruۃQ?2 5b'l۪,:Dz`g'[R`-x17}NNVlK7Q39Mj$^1Y"S@Y`kquUgfpP!<;$P `E^ˡJoMPG '9B $(YvM1ݫ4GhaPEfkkP5Y |?}(VUAR3l("weIg_ѮTnNSwc+ Rր$@b/YsP_6%6“,;=RU"xH{j&r G=RLq蔧4tt* Ш@u쒚p P?6*%ԙ3&Wd@/cLh6Wx끩zYhIn3bK i4)TӻU/de{u{Rtxڀ n7v4,T?"hcrCN} >o_~T5 (TKma[ůص _U~UV׋. $b Ät ]2i .Q IBA$-1%-ju2Qu߻E\r/ʤE2J"o/ ZT=I & Xmܚ{w`vY 2tUgT:[ZsW*_ g6Y9CXp׿XWfHaUQkxHH ?(1:d*TeVDmLrV:BBE7%.&MTiT *i܄8?x;ꛗX@ R ZyUǍI :s­fY]-oR[V70{um꽪w5J 雟xS6eFJi XއAL[SC+H `Dj< l}s:?h-\(QgxjiAiNSބvA h=[xG'q.։HEĚwĭjk8*vA JIYovKk"rq-J,~ 4)O滦%0&8`yoNYpPpe7qNjh0g1BZ[OHD/ Y(DN';CLMoՀ[,m` \s&dCw/y0V]C3;F&Vڎ%!*D"ר  T_FM%m-FXL@jbu&@FJp31'=I /KmZa"7*%q=4 6|GHq{Q>|ݘT=6x ozi#[Q Ȳu8ӗWK!lmw<,͏BF~0 vn 3-ƚƉ{?&6e -N,8ze*BL  ͛<=j|X{ƱUd댩)q L i17|7y^Nw[ڣ;deѻзwwTh/n]sCO ց /ZeXCZᅬw^n3s#||}\6Y 0|27VΖ.R&\- 7Kqibص|ޣXXg'o\e\#d8X[ǪIN1]fkX\+1>ddR{<o,&O ;dd`_CæON:9~S^=ܿ} D9f7*gfouge[(Lj V3bc':jpS@@)搗^:3e u_T- 5ٽuzhM|U:2ߐI^mه47Qg̛vh:}A֫ 4hzF;F^b.nT2+$ h"bG/w[z$Wàmu}nTniiGuiyFF1 HIlK[Z=TIlp04FE!Ey艜.7 wk⼏<.R.hf3tN?YKŰ"?Rأ'Ȣ?_mY(#*f; /n$au)[C^ĉ#lђyMsɿYo??L?|x2c9(K55!ŲRÒyqØ `%yY`ގ~n:wB+;+n5iB.<Ui Rfo,5NBOlgWX檄45۽@Ġ乎s? 5`x#ReB칚gyzWw}LC/cmƾiiO3n!&&AMOY.1=c{"mvi3Gx϶6]1{ 4Wvߥ=W<3Ͷy!p%N J ]& ֻ; e( [uEvF4AՓ@'ajׅvo1 [ }d06ZG^,2YH5c=Aп;Ǿ ^'PyN%!O'qvZd8C="Xrm1m\̈LA,&#/nbqR(_|jW]*` і*'3,3˸Q`t eyWACjUɱqS~q'KIT7@.к8Ou٤5~Fjx BhѬQD2(K^My']~Bd"r(8 |Y8wNiP(x‹0\\oWt8zql{ E:?OUI1j7,We8W $jDTI*+KJ *QR`(J@QSer#p@RqDP1=]z1hi,s5ueVM:bf09huy(=m܏x"al!mCف`MC RZ[>daQBf uΊ|x{^]}|gt"%u֜UIEZͮ/o'ZQgE̖3k Q(iQ9 p}{X>jtQxt_bd}`NzR{;5~ДڏXL"Ea_"Y.:"+Ӹ6XEAWUF;\"ޤE`{ڀ(bupU(vaHiA]VGCդ1X%)\du P݊7G6σϷ: %&7Ts2 xX@ ,H5Wv2>o,(UPB_>ՃP,FR2-Dxđ%:#,_`l)L`hADkcU@HΘb ǖbrL3#w0~|;W]"=E?j Q NЩOo+$9Ԍӂ L[L"B6p4˵ދ jݫpGݐfOo=4KnO pSwWD6Xwy: S)GuEexZȴ\k(0NUO9urQ0*NOv=ɵ(p\abe*ƐqaŹh|PNj DZá> r vXDL4v_/Hև_bBh U=IX2;jǚ%[$fڵ!VwŒj-+gX['*}ҡ݁UM8 0'jh:F &~$IQSO H-_m⳥(&s0CenH!ta k#[\9\ mP˨bPH J@6"j O`0*tRhVf(]WUy4,XU~)eZ9Nنz,tRPE_bm3yMOtl׳\Cv#Xc mzW(%&}sLjNw,q};UM^\TB ^=ߩ}hb؏?_X{ء{ 5MV`R|~A M|OUdeujuY Ew|Or7Rf Șd#/~1< }}zNI{@˫_`x1;b\/2XlQ.!j";&c#c9F 2n1Sc[Y>v4֮ƛwZc5ڏ=W&UZ كR=(ݳsfqh=wr’h vSyҳt#W2ޤEQ jhz0G[J%hm,zN+.M@DƊ 9K~>~ !yQQt>swFH:m^>\eQR`uVe$TH7~'7;dESn *MZ Q OXG FYfe3{ikߠW,{g7vNJcrj~EIal[sd02sB]ч.+ "=i$ ްby,aE=; 53aV1](kgcTblF4k)]?5/EHkRIPPg穽ucҽ8%!?'U,]\ SGbB+ 9LqQxywV8"8a`{7K5@lVQN.U>"z6Vz&]f7g'> H_Nciz֡vhD5-Mu dNj5INNϮ5-F֍Nu{ɑtFr(o(!hi :4ݬ}NLiwR)p" UI!^F{wuj#8zH?,h9\{ՊŸb*@4F-bZdD`WJMUIA(h];e؜뢎`k.2oXEy(t3T$Q2tcJ!oѻPEkyzjnN9(rV;V 6\ei]9~[,UY~o- :ڬF<́whEg֤+7Q3:DB%JN jp#Ԙp0s'(P$֜(cӪ1ιjØ}$+)BoR¸HBl A$bb ch)li r&S"0?vYh'%+,Jt+8TJ[gNP/FT\%JR -!K :l.V܌0\BnӐ}\2&`^g=fjB LA1 0[C=mWa~Țe&Y%֕ռPoܞ $;w?0\QOX?bI.0G c6jWh7 8%4lD 2C5öضu"ζT[lBdфxd|#^_@q1?=f^rZxEIR6MYvKnik[RU2m %qꇺ)v [?:.aǡK؟ B3@3sn\=  4| <7igxyS'5 ?S ~2.KnӲM98݃;)t!]?.O'w2}>\25?{nl Djh6Uq[.ۛ󪨣P \~͛ l/l) 7o_/ows7v M]̐k8.29m^򌨈)wve|:wcQRhIVN'ot]kϚ\??h1pޅ֫b&I* Ipbi_80 \1zn+1lf3L_qWXKb1gh2M&xC,CL#Cpԝ}vs[!ˏ9nAŭt~V,5ͨe:sf]W[@ـ0TJ7]sE| L'FБ7dz"42*yJdxGuCζ4L"ºD`4 2r{XWɊ,ȍrqn@fޢF8n\M"|I 7:f6(~[[ծW 1ZI54+ո =DU[+0R IX^T]a3\\ָI%3yՆGDq8>`tv,` h}MYH)7iӑ`o҂>D)1L:4PFFc#PJz68 <@F&)4A^aʘnmV4*QAT :=ݨqN}vܭ],M + "\XjY NBb hv=y0tpgr+'Ln; )pz)j)Ĺhه ^Ž@7'x ""5fARQh`M3N*WJEb1<@i? l|}9(õ?dQȁ@f"D5,|,~|ChkIS0Yl&gk6Dw gu纅D<M9 ^1mE;T/`.j$[GYF 5>`<+ji]ɘ2ux9;(c]AM_,UwIzJn6tx] %V*Ǔo0 &3;|yG2 %mYӋ%L,"t+1KMqq F:g~gd\wqh9X]9;:u]`^iI3N]6$vǽlΉjI焨F.pDsGICl[*?+J$xNOtƟ-ߥ*L~*IiɉQTęJTuzE3er_9 z <+B{<80= D* Ivf:m^K ]-(wGT@//9t-<2C(,9S?VӵwFg/I.Hф/mA3@Pe{Yv}؝řE'.IY}I]&rv9Tl>C&0Ey**óR*( B(Հ8lUC3$7#+M1ўOLy tף?3l28gV x#iѯ'_ {KZ_^%࠵,CUz~E;9Y#**s ^SC%laG3'-*зf ۊA">=yq3Wۊx*z.j ZboJjQfnE\@m aQR=+}7:M-Q= j1x> `%(w-BkŇ}րvjPuFMx݃{;wMڝu\^E)fLf13a jxMYuNNʔ$D^-a[yEDK.kHoa'޶uΞbCWqeGQvcGhNФ20*9b*^MP SCٙe!5*:%֥xYj7Duס>lB]" ِyE 1^C=W v\oc“tĚyYbL j l!Y %`9`t x[X*0fPvHk9=h˫&{աePJEErB۩:o#b~-B6Ѝ۴Xtyj ))C{6ȿsQE@Jj%eza›ϓ&Jr f䍚q~@LZNCdNA ;[( L D -=//wKNR5y2V_rܽC}94;K;A߄5? Ai3Ò F:.?dpiPᡉOz`FA `p*'9 Ih~s"EdN Mk Q[*. F `.1LSښM C(YBjB=0Sysv<$#h+/i}KKm˜(?4,zhGJ++Tu[?IQW/| B vo*PG и`\E X^t+m>¯T-D,;7kۛߨU:.P,>ʹm[]n@  5PgYLCm{#cġ& ר8zrcĝDPm&hyvSr(6RXQ. >ULi\c@U:gkzo `- |bQŻ=E4`)c6nC44 1]6XN)M8B X@2߫3t3, W ?gg1<*ӛůH&'IfrIGT!qן?PKfXBp+%pip/_vendor/pygments/lexers/python.py}}6]Iξzh6mK>g)2EAkP Ҳf %9vݧjc$0q෸Y7d,*>bݡo/)3r8^4vbz ;MSoʄ+S|qYr_xzȘ%^B;ж;|9gWKܙ|,;`јnJl%A4&v7l.U80ӧ1O2t/ EkGA]h^ &Ak0epy8 $flνğ& ?g]B|ߺΫC!uАIL5 >ORŁ@I#gAY}tm(T ܹ3za8:Ӗ$ BqS w17sj~*Q)QcŲM ܹ㇞QvNc|P>:3}#0w/;j`3e6>>v?*q/i(rΌ"t(t (dmȦya/t:sVw D@+ y-z!%B߻\.py=`ou;}׌wz"Z[wz^~;h}%,^ӵ%bKݖZ|M{U,%n-s{}. }WTހZwF,n3 {^QI!hqUP -dE_ 8 J`*:?P` g1g x~<}d0K TB1?r(܁@^3 6H{,D:&3BVS E$Z?(9#o-{+)9sEB]2V'!Uxm.pk(s; = ^39$9$9Hc9j*rl_DB/I?}-_Hc>Ŝ'!p˅j߷b>ߤ? >8i~AS:d\fgTJݱjR!ٹR[wq~ʖ߁.pRM{5}@a\>?Z}LY'~]*( L&q_*L.SpZX2dEkmQ:hZH F#[! c/"d4ǁ!ҷȻҙKTmӎ'ILC~tv:bob -iϓVerVY2Hf?7I״g6]9m4nDAJMq#I|Qz8{ !_N/m\of'Ob OU_Ϩ.\xr?~ߋل,=pg<,huU#e9  PCW hY\ZWێI(N)N&2RrתwqJx|#Vt~EI k܄bBQ̼s k$ [Uxg 2 " +Ӑp/z" D2&y#&Yj{Pvruucq:`H0thMw6a9  O˃h̢xGRMVX "Ly~jRF֨;6r2Nvur_otO#?bOP Ѣ!O(B["j%u^ #KǑ#aߣ#~^V-'DsR9R=_H`✟ @`vmvuWR%#T'Z~:|]D[ND97iPeS7IGBYhWm5CY+ 3Pn4G4IN􈈉O-^{W6vB rPxFe6 u ^UBvX-~"*z1&PnL m0'1IȽD jQd]o 3z*T Z t=2.ml㫋-) >'&c!K!Bj" qr%Hl'G V!(*s!\"Tt. IsxOZ=CҞڽ]Ms`O`,"%`duB{@,6^kKZtkj0A24AIh政lzSR %Tymgq gA?neR&{[zy$bawfq1j+A2s9k %aOjz<qyUok# +Zϑ:YFm^Գ)`Ta<0]?Zb'S G#A1Y쇏JqiD8- @!3f@(nn#ς +!jtfAqE -AEp'@GH^q L< dA HT>=,y%ca~Β" و@Y:Ӭ~hu(*pu  :|mB1 &4O~ƒjEv/$9g OznpX.g=%Aذ;05v>g,vx;}x*@eh6xؽO&XvZ ]~GwJi/K50jB+թǤHWfתX-Rfmj'mAN.wV@-$'4N62"kZNIð;-΍^u=kU~#'ud) IQfM꨹)R鯱RaNc&eux {^ 6DmS5.OT]XIe}L;hq*))ّ =n4kϐ-gɎEzŤ ]H :m W.y䱄s+(x"݄(m!9iͼLT fРKGWG6"}t}p.t襅r62l(Q?zU_A-οy!إoar-j6Yk0)22DȆ?ؕNi [1m*fFMIZiM pݬ,K[Ϊ~IY/c=[kWX510U*<fsmS%g1_$V JV]_/re-BvϿ>h& >SJ:^\N "7bLALarXk(ԟ!1`m8N{M[ :^{ߞsPy,9T.Tpo>C 顖n,C)# /خL]ʮwt_m ΅~\oK"2ځÍDaU?#8ttvPb$Tw]&%p8Tjc{kY#A% 2)LF_C/vH$AJW%`s ^+*F [.29#xqʜ+q [<ɰo߆>Y:9ۜMwj!*"VbD HXHw/ y+%%Mf[^nb]]k+Pcj4>,VNtL7(vT˱MOCqq +X84Pht`qΰ=^nBnܩBAG=@YAAք(Ŧm㼡|@ʃc'V^4sPA4jJ+{'S5nS+mXu;EVCV[' $xΐ=fjTf"1V"S?٤}cd _-SC;AT^Ԥ_^[YE[˥K M(rk բUYU|$tq d]i`_ASQc ns 7p(g'W/N^ҟ'r^^3Na۵2TA/U+C6,ڼ2T!zi2.Z2Tny+Cu^,zex}5"5gC >}4Tm泡GCFu~6찡젡tPvP ˆ*m\8.3\84tsӰdfR7]ު9e%2/%fVaE:)`1nr@j-U F`Wt&]J+y?lōwک=9%x!`#ht6ZEԛQDJi=T]T܏-~}g_ R,7W-uEuz@U :M\PJ.լY.QK `bZXƊgmzJ7qSjoSfjU:[Tu[=qunuTۍOFֳ\3\4)GmԅZ<^-ooq^߽w`o/sn{f$ÑɇqaIe=@lii"`=_kN9Lt*P9$0D/_vQ `%,HLvr2ϫ)Ut/PqdUaͼTh U@&<=DB[xg2s+Fx~S NP嘞5~ƳfT6׾8N|/R)?nH'Ϧv.[ vneP 7N輨Qa+?E5ewPڴKʶ{Wjsm.ȶA\jVpj 'z'7[_"iK-|X\d>"Se ؊fETB))d,6 .I4ʰPbemw*EFJ>׸?o* ~g<|/W㰞y}%!eqEXPI 14 >`|JNj4`/NlN\JS"vŦ,_<ͳU!Gh ː4拤0t/er"xm̅e mUũ'@#OGcRY( Lg$? _@|{t4adO oz:]{7f/aR=& (<0Q k֓B Pȓ~W3Pze9Xp:)ddP %b=: YiGS@rtR ,TOQn[G%'ұ,b"jυE\E*8͡Qd+7)5D@nTH̦܀g\ Ѭ8X(G+i+. ?AJOeJ}%ZQ^l@`3m"b; _$8ci QN\ ųjvXx&"`>[*+$9Qo%y8!0 j&ibPmbNa*_brAi Q{xrLgxOvck4rvY$:@ *iva0V(4Yr3$6SذK`P-T&7%/e{(`\#A@P6 He.`m'xQKeL?in#1Rq)(T ˅RI e\(ɤ T?G_qx .2`w\SƾW0s$ZYXg--bD9; shLA^* X}g|J<+њBvzs"?6ԃC LCM1&}z>B46Q0tA~ #TPT>SfHς";R.nq $@!P94<jl_Pᱢ}|aEuE6f,ҳݙ旬_VH/Xi\ 6V>KQו:/]MMr,flW`" @WxRAYY-nUݑ˷UmD@TVMfCj n-h}_[78P(1BPRo(LnfiQVTsXwPKfXx@d'pip/_vendor/pygments/styles/__init__.pyTMo6WLXGErp.`, 0dZɄiR )c`;$%v6)Přћ0ЪjҚV9]#FI˸4i\BHvռڔBGWش`_߁EAI(#x` />/7J@ ZuPJ'C3h*BJ.,|ʺ6Nm,}`+jdNNDgueէ/2_FRAs˕dU8>տd{$K]ǦULAr57^`1g j(F=}kx>,?R8,/W8OVi:˱Jt&ē[iQK&@5a;wB6mZZ^i,KsB;<{|>?)&X«2In m)vdZue"9n$X8Pi,K.kjݍ_\kg)~Ϗ27S%HՁHX@H6JR|7EΛ 83zꭆkZ4(h'Guv)ƓcGNCAG_c5- PhU^jt,߱ Qt } ay6["VY, H^{%.jhcmεVPЉ_2Q(3\ <#<^qOєLj8 q78Dw+IrAM,VǽOz4a2u vl8`/̐4NaQDͬwD'GpF-LCϮͩ[ԁ;P: ޕPKfX{ 'pip/_vendor/pygments/styles/_mapping.py]O0+, Awi2Jm8Xu0Rr:.y>Iޡ E51c-* 'kRE*=qY&-]>G$ GZ$Br$265p_t|dOPHyP(lpU 3!7Xs9`xB .` /qn`|U\ĕۋ")k%n1&n:.ͣcӰWj0ީXnZd4f#9s el7#nJ!#:o87F]ߝ󬷸tv)^gшN"Ď' UY"a8_{HE9u!bLx# h=ݫ^wuU Y> q; ='}'[y}K,1Ui)>hڑ^yJS`]_J`"Y!rG91xcUg`FU._у?PKfX_'pip/_vendor/pyproject_hooks/__init__.pyuN0~/DS!kocD41*"a%cgVJ1 ?P{a" ]1'Gr>?VH)G?@,1Õ>'75zsvG4;K 8Y&%>fs#/nV4جRCO)XN_Ъx-R#/;hnmmry;94 4?Rҳů !VPKfXkre&pip/_vendor/pyproject_hooks/_compat.pyM 0 CIAM_)7(tXE(b. %fh]"3MC1KAO9n_$! 0t/gODȔ->mR$orPKfXp .$pip/_vendor/pyproject_hooks/_impl.pyZm6_K?X@¨4kk4B%jYTIjHIf;p8/ϼP$RNK17}K^YRT|K^2娤NkjZsrPMj(t̙-ћ翼=[YN.S7f&`j(ӹɬ YJWܰ %%yzOե^f>{ʚ %a"yc'A&yE2Vnid{dۖQ4J*IDyEAg4fx+ V,y>gR=z*eDQYAxI#[7Tip)xKC277YhVFќ!E/5YDC_Zsp{J8O c/g(xnjE1iIbB[s:ZÏ`柹ր0d爭4I,.ιfԋSVSDbsЪީV#_!EtնUk3r(xN ¨q~R`"Me>Ae̒ HbJ CE3&n>;=#@ฒ`NCǡZ{Ek0Mә}vi*6E7LqZ?Aҥs!57 !@k]Yh9Ӧ[m@(v5jQCer|0 [C:ԌP82C?s^@x*10Ea|\p)pn02%U2'(WWۨAVa)e9: k` mb'Z5RR%p&F4٪; d^u6u/b?=ggIzޡoH #=)"G:ǀ+CJHg@Sm 4ͯ(BcZCAVO;dq92>55=1+u3z J///P,h E"= +`TO4~ۤf\ji|ˍTשVeAX]%hإ3cYlB ۰ Ew+%s? zF]Ee|jIlwz^A>@&{EmV^4ȡpTf99(y4aE:-PԬL.>Ǐro@=܍00|?W=s`09cq?mE%@$yŋI{ԥ)\'[AW+,ݭ6Ox"ewtl#}b5B!p?(q~d!^YՇR!UQu;dJ$1|>pO]}zm-_Ɨa' Co$ 9KLJE/%K7T3YWUŀג_fvk/fkCjkgnKK[lJ f}^;Y̛_u<ᢔ 5|o< @I<71~$2l [.FɈcU7m$P|$NwX@kTce;T_ȭOT 7کMl%M[ܛ /#~v} 0{"mƃl@?,'w j=U-F-8q6@͠_b%tM#|bQ_ Ih;5~j80Yjs6ˉP˦ð=D"]`L 7{.]W3\֜ 8'lE^o~.<z L(x3A>FFɠD`:&d z#{lq*_zVU/֗;)G8D끛9YB[a!Z?i1hH6>W͵a_m;1{}a0ăv_SccT-شm)H6t7\>ut\O%X2G^Z*~K)~}={ϳgOū,QMZfG 睈Nӳ;cdױ[?Z9IbX,&E\6ƒ:! ΒQN`|ys֐ G2"ϹmT$Y,"b9/ ' Qѯv/nפb~h2oK{C+wbf_ϣLc~r5!ې;?TA7R'\Ǵg0=<]`xi=fXwG Ӳ`v* N?t~1/PKfXd"3pip/_vendor/pyproject_hooks/_in_process/__init__.pyP=O0 +2Pt;Qbȿ'mO!2p4u GcpYt@)aPNeA RN8sKJmcNuGc),B~ B'#JvjDAI;41[q仄9U;^ Գ3U_³j"_RAP?vOxHZ{|+!QT75i]^c~pbh;طi^iyi7PKfX4" *6pip/_vendor/pyproject_hooks/_in_process/_in_process.pyZ{o_bÁT*3nUIHC6, of_\R,nPTb>fgfg~]e+qK(4/ČIIJAf4MI`dZ4!S:aYBBȨ;+ ٬ǽ#R,ަ5bg-ZM8|=i$,-afk^.z(gyUFP#FKE_zLV?RTjF,^F^e.(:s-d}WrQR+151Pvf`CC\d +@k84ܵA 3&!ƜΛf bSRІf*f.A|er LG(3*YhЩĿNcvZo=ߒ͠X,/؜߆^ hT#ŪbamSUbkd@NtGejZ) RӮX7#b5d5+àz.lv A[J`E2Oy(69 FJN\)Z Ne@*sd9)Jqf>P956Khir")qQˌ]9Хh(e \B~ nmB !ZvqɠA ٖe-aeܓ5e ʜYiY61:U$ALҲ,ꊩ4qنd1h(dҋ Mr"C EPǀL7~%4 l ,Y~K tCraZg /Adc:YFdremRYƐI)2)[=-1*x .*H027 9ױd%V!YLuʄ4IՒ'W*0eF+f.EElͧUڡfRɶޡ-Ḳ2_;4 /!$[@vj3XǶ]r7 Y,S@R}DGIYY|5T,eoK=t)a]/lAP8R}9ΩuS[*Z~O=#x`Z-gBlf~`2Uѕ@Pg)S2+e}XIX-aRYjL/mkm#YSj"醝/q '?(]qҡ M;ԮT>(H{%P[*))Zvunݲp;jfCiyx::{X_Dc{_^oZ2~wrf|&KW4i`;oXͅZIexE|A纋a!& S-Fk벗0`,f&~OO gقkݭפwűYW nK)쟋E%z.0wɼ0ldЙ:,NmNDËc?LI/*`{d3_*H Z{v7;aNm~P/E}ItUm4wv?u5ʇڼ J* $wg(Yc1OWv4-UtʝL fapP*6:`J׶ȭH]Sditf8隀/̒s5Nl j<`D0h(xxsNU׆@] c rS^m[ĤVǸhf? GLN~E݆\Y$U(.pwz-:! 1]ZOa1 U.(V&qks}bSz$C2m(n.mCj{k>"qQAC+qu7l:`EU-cOSb7c_jm~Sk@if+0f z a]3w>g;؟ \A@'U&T c׉R#K:dOULt*5S΁ر^p'&,#[X.<~M|~n..x]=xtڤOEnsdQDZ"j Zϵiq?zh@s3s$maNQo'n&#kdb1Qɏ5Z W>FS{!#@ן@ob~ Qi[AhL|+JI$ПIW>4뒐 ˢbT.SZTsSd|O%eXh1'xGةN%O|O!(:ly,h"<|gKccJ<>!ˍ|jqq]_[777X*ѿDNDRW^֬eҭTn7`]rQtiQ?.nlQUIl )B +:iيd6ыqdR&^"ӆV,%ONriFɕb 4ի M*+d SQ-,|x}3ܰm%Y KQ &wjl^u>RolP#"Μc=Jfؙ?ߢQ6 8(tbྉU S.N ~awΆ_fI5W7(Pqmc=KzBs5^UE, eF:zg%΄<ϢhQfjmSr=-O^Ё0gѢ5_ЋuNwo_^\^_HH[rDHgEJnM񺄐hU@? ExA^ۏݦQT5*;W\iH#.e'GQo _͛-E%6v.w{L78+1D/}K~&:<')*Co%Lr$6\-RĢ tNbfϲY*^13/Bx?05;I|/-6NvN۰_J ~`X?V_ق^m6 9nevv?;-hu~Fl>fcGRـ@`GXlqv?ʆS۹> OAAlO zd3<㑜13JhJ9$^yշqX˞wm XD`Ӄ̽]dPzG~sl0Ts="ܩ -,^ 58Wܗ,XUDHYBHA'ӁoAGSdß<Ѓo1LhI^{|N ^f&ɇ3ā١N<( C]5.RVƦf ZN!ٝH'ʶ. wF%7|@0mzC~u1ؕ>S6A]{%PG.$Vd 3I͗Wߟ6l[{ؼSJBVPKfX('pip/_vendor/requests/_internal_utils.pyTn0+BraУZm 4m`;8VhiHK˷wI;HfgLOƚ(ҢLa<]hu'r4m`dfl-pUàU6i``BdXAI{BBmqW- ,kB V5#âVD!'J+djf,:44'I:Oҷߖ BK%z\^ׯ b9?`/_-=1ϸm6,=1<N[8OOJ{&Ijгi,N*QaRɭC Bކg (3YM&D0[QjC|̎)\%tu_Ѡ!Zv*z!iy3lv2/i&rýČrD,3~ Lf3puʪL0 Ѵ_a4 )x4'}QR:LQ+we#"8)<.&mI" ~%$z_{nW,kDѸS`P"f?"8w |p؂nz%3־Z1l*dʁt<[u$Q9 .| k IJV:>T.PKfXXz̭k pip/_vendor/requests/adapters.py=ks8+pʇH)N2Ww[Q$ 4FJeNd*7ꃿ?竬2J,ʢYQfDSɢޔU#Lwx,VCZRj@XCo h [N6YuRDQENy6Yqi~Ȫ*bmٵ*ҲJUgoq64НV雲OuUm}p~: Yuŵ̳%S`'5<yY.$>̷Iߪy^c17Uٔ }&}?Ny kd OZK7hc- y aV~Gc̰ 6Yn 3]uȪVTuLEdChJY F#2Ykb@;@ l*Svs`J.~!197~ Qb%@ӵ^`hpf7pjS Ai'4tSU4$iI5}]g0PwZ_f/g n,# 0&?ds`<5MV'gY5ƥG`[O&q$vKlzJ(-)XE6E?G[L;ŢMf{m{MA0'hjkϛĄp>fB\~zB",I y1,MHy+"NzKdǦxN @yؑ]Z*68ZsW"NbWnv%P6fi+!2X(=t*Z4Mم7D :ЦS<NYtfZ/e21jf4ìOE{@ L$Gou.E3|j!ϑH:@3CW`N@z uk]fY_㗚CC!f;8mǴZM{lZh(6nzx@%i \`t ɘ6BGOiAH( ݧQلwR NPլ#ЁQW]ՒypLk 43/p0l?3WOOWQ_&6~c;"qQ: }Á_xıJWc> v!87RU{"y \&[\5>5*L4zp bQcR6FsLDR4t&= #1yP-X^20\&s[fl#/9Vڈ$oLa) gֈ<7flR 9[mQ:_e/boˍAװ=p`$R*4֒` [qI qv7eFbuES "RQf7&;-V{38.np8k * /{> DCA _/Ec. eg&5Rqm2!JX~~aA3d3WVV)h؈+&< $~k L/LLZi;n~adІUScq8< (Kaiutߙ8N1<5_&{vȂuVqs+BL뇟3aѝ%}~׈"HbTUd8'!ڋ˞ba>qA0"О-^Gr@0,= ˨+qqpk1)1DbCc+Q/~ ^#uab0+YD( U)06" A7ǂ{i.#EfEIXV ͸K[)L%HSGL0ᥫ&y@Pu8QU)QUe`D끸fa% -.0ˮGMZy1!04GlÙg,V-&p۬Ax-$'M#c108ZDjr-eѕGc+Ľ{Ք&a^H OP݄+4腶"lCSa= ucs[GHɖmHTA5߁!"fYqcYu@$mB[i `b\0$\0O ͮ-gcآgG/B2=j޴1҂xobuUzܻ8Ŝ;nΣk#ԛ' u,-hs/ΕQRx[x77+X & Aeu 5&X?;Cq;q\Ga5n̵g6cJ;UF1JPt#Lצ~hO'3w`oČm*ܓ`,aU(U7 ^@C~ ?f6uXuV 0SE_{-{j%fT I,oa圸RZ`A;P,:;+ НE;H | јR.QƿhХV7*$*kvڶ_ 0h}B ź@4X%{z%BԈ.!~T(0H ިU#P"K7/DM5|f[X D[ qjTnC &W85q}@-vqڸY0YeZWL=Ck5zCB{WANt߈fJRv]FaMmt =̮]nj(/2?M6 &R'H)KnlRT{/.olGo$ sb| Ѹ#жAKWXjQI>U|Ld0$rcM1ױnH,XR9Qchjث4ߗ'$Q Cm'ƅva[bb) :B JW#Db2$0108LC/ Y˅E{jE SeYoRl'TZ%-p }F0o_, CA;XYرw~Z1`b89@%2J$H5,odӬ5ltO DKXG"+p}0BS\]6q5[ ֜S)sf `7'gU͚{LJtCiN1ȮB63Ҩ/׍nu_)+c m/ %g019C'H?<Ҽg[CtKT$8Sipt?jyY$2;9qQ .);vגq׎$߽}9TVMS.`]i~T]_uDwwlWz 2Ǔ@#*w03'*qfmvh\@T@ 6ё/CGv.gunҧ)G]Sէߵ:ٿCo8yDSzk@]b58ye3,3R:k ϧϒo%kh/*'>_Ǐ)^JN;"QƐŎϢ'BmUQ}lb8隸f_RWaӔ=y W 'hq_̻{pzN&65MRnkyeh~!zrN9V5gDͪ*ZL8yP7.&/Kj؄r-ldo7G-bF|E,l豕ul =|]c&}͒HglLˈKqATk^7?2(gT?3s,~8».}#кjmzO2z<фrJ<Үuq_2ÇOVV妾(Zb`;›fQ4e -aq"&Q6 P^TSYUU`aT:Ϸd7jw4n\.z7 cqf:<sǧ}l٥{FݚN[b [xbסD%NV;µN9"-\՜1>ZlMqVxlYa {9VU@ӶD>fn~)sRĴ6Cq[q; U{ygw*g+ʃ}U 9|M\xW0@,n5߯ϸJ{ӼCm|%}RC_uj\iߟ-jR-%(0'O9Y rڑ->Hyi1dj-exDgZP[}^tʲaK,ik+C ;;Ý&ŔW4~-l`OEIľkwhBѯ˧Dk0ȶ$a dgRHv{~ .l+kwGc;";=q@򖭰#VմG8a)zܨ"= ώU>Oqs@EqC0< TO{LED4`_;}L}͸VNPq˽?ZPL5S ?aHWUxw'f5hO끂Dҡ:BJ7':XKlj0Q9 o'ɓ <ӧQ9C){jݯ-8'.?$|8btoռ>xg˦~<{wGV%=s4oa߁|[D>-_$f_9 ^!%<3 ڲ'y[qǁ0m9w:bKXWe`Z>PKfXs6Q1pip/_vendor/requests/api.pyX[o6~8le{i-i$a*Z:HFRa;(I.EssanGkF?}:JUZe2/3̱ u8ǣN'JTriTd!`X5Ŗ 8nk$RP΂+TzkB6_"쪝+ŇRl8Y^#\8Olݒge-Gj ( 4X i(1P7:80w 'xAdCgq}]L& umU O<^ ;@|ﶴ"ejVc*5CJe(L\Ʃ4.~(ơG)]+0P6C\"8 >LeǜځVU>B,9ͪDex6-x &شDN 0W2YQN,*=gA~bp' &?C3?B>\yПA`q,UmRǤD"Tţ[6Y}}*@_PZ|p}_1j}xnPKfXލz 'pip/_vendor/requests/auth.pyko8O{k+iaXd6hICQEldQ%8 o8asDys(:}/*w~:9Wd!2cd"rMy3,|B59<͘Td*$9;E!5?I\2|VjqIeK3bATgĭ|"RֱqsdNz"1 mI)J*hqYEhI':qJn$)9Ndz˓N_?H~?r㛓7dD"Z`\@HdFM~y|:>DEi\J`Nʦ$]IfD]tKZ>HRȴ7 ϙ.%؝_nD`\tZg"X8 gL$,%,>^IԤee$2R`_376VxԽZJjɑ$$3*ɴ?cMO4 )[8ѝ7 !^L~bVg5`zT bHu6Xȟk}[9y2FU{9SPkeQ$ͮ(򃨷^Mzq=̾fֈ'HSŨ/'OFW׵Xk:Lnz*3.qk#<xR`ks˲fJF1!'_`<ȺJ¯'5`w9۶;L, *ݔbHH1ts7wk#nI[v '{|Gycvk8 {~g b͂!+ qC*W09(à{XZ XQ}^͛nf3@գNfo>vj),Ne8PaPi*TזxH, حG`KYm:ɍLPmFe OFw 3V ElSSi\,:;9[0F!zO4[`~_"u#Ij#x 9HT8͠zX EA!zaZ plh߹p->65 >y^e!9V b.qJ8T Ú 99: 5Y3vͲP׃hiHHtoZA8M ?7ᛪw79brc:yA*M96 K/]m)?]/??8ܰcXKw d^lJ OaҝFw~xG=LN'/4rXams"7S+!rtm\ÆUH [?b "n;(%Gc܍~}Mr'sЉ(Ԉ'.(hkw@*F'43ثm#pM3F(#6]ȇAptOww 1R<5jho[a -{v|F7]Gx:cvMz5]d: K*2}Tݸcө "cENOKDeowhsoOpo;\^Z95g&{͘jD3!vN/\")mSmnE\1C>1zfQ#1fݾ[B!6Ǜ T @znd3 b `[+z/hq2H Fa!``-,MO?L5dL1M'=ĘīOF &c*&3q$y"/nzWLTH-ze\џ@ sGdytNk> `:{v]Y*̳/#s 5ۛ_c'+tspbjDlqQ" U*aHvڕsM6S X[^AbS<\` {is߉SO+M5ҋcWj0G3#zgx\$7jժȺ)+L%m+rvz6^\ E@iFgj};- ؠPccBaA U#kQ),#|~%n#`gsR6Sl,+`8CM 'ːȪULbG C>`Z#4h<9q$9XQez CC*+ ju{w]l=P\,u V@C_k+vsjmُK<%A5\^FYb6sPKfX.pip/_vendor/requests/compat.pyuTMo0 Wa Cs+n@; !LTTJ~h;vIy2(—cV]ЬR?7&W"½)6U+06k01 *_y\";6.|~TE5&K 8<0V{hDE:*>\l4钑K7JU0zǼckr$#׉)4`5i2&A&BNz?a,"u=g6j 5e* (;.7nx=';|R&桾jR ?\9j1cԢI˶h.7d42"(ǎqLK"vqs&]>/Y?ƮVwקLJ[,}<5}C (%nMoq1ڮ'>#d({܍VpCk.zN?j u{Om7>1 kw\벆/-W"+yM:m%Ɉ'16NOyTda^*f: Jzb ZrGlT[6wgސw;ٹײMskbotu1^Z$.d,Gn:IE2%Qm&%H1S.LsZ9ϔYϳҋ0`F%"SwӞ<ȋ nʺΪM%ѝ*=Ή^;UVU!+aHەUf05}BvdV6C.NTQĢ?N7]d:X{qWրV~0,VLlyt(e$7"AwIS~he!J%0rZԨB*)o9Չ:KhAVLex';?`SF5в[=H=%,CVZ4;|duKduAFf6A __4uuJ R<ۦ%Q` >72!{@C``yO3I^gtH~Ŝ OxX w]c  #㧼bݙA0:͎T?'ܸ_zRҌ~_>0Les/§': <['xnS00[wxȪ`Op.!OD%%$ )AO!)~pfnp!ݯ'+a_b{%Q+db 髂R렌ik%RQZ–ɔB|(}n8if,0c/ uRu' KJ~8}焎(/3`aZWWRkHrYֻ~,M]^| aޑ*uZE,B .0cvfzA~:~x<-c+{݃BG!.1"j!^ 3jMPP'έf佐g{߅V1rѲ4M@mЩ,ɞ@,?Nh9o t;Rx5sپX`>RJz2Uv!8JXa)©wES`%'J Yש0Yrc~#aglu i`yP7m n-6N]h6a0Ƒm`8Cyz{?}Ϫ4%}Q&vʋ,;`3XUX/\h3uHu[nj7w|% A3^8qϔ&aHwڗ'^_8 lp%,0Qu^IpzF,Q LRiZQ iJ~&4*t(l{.2(#"hH;aϏ C5dC > E"BdZ$9fI6'=ޥٌWUenB7}m,d"c\h qʄh,`y#R-)TubiKYU_H+1LuE>y+0ap3i5O F-"p&9yEu\k[XƏwDIU1m(#nh] %sS*}Ik`#9Tsq뜰!%H =ToMohK`-bY 8Hc$=4?ҙ>huvZ5g\Djhma0_U 96@am!iă ]L^ve7ڴ~`dyJ;3 V—,A\ )AsL~+Cӫu R_zIRKn#Ï @хFbZB3YΙ._S=HD 068KӔD.t"Jsm 62HGsdZXyofSq`zF]DJnSjfxȨ ^/?"?礣_KgϜk ,PЛ$z!`8ƶkfB1&J LJʟF Z}ƛڍYNH"nhr6>vkӁ@3$Uz*Oi+FREX[^7F{yd"tX5 74u@a{h6D=G@DB<`&=yqӇDDVy{ffMtΐ;$uLjZ^X 1IL)dD90>\\%cac-}[U1)w4Ne#|<J8ЪBף[FƑdԾiS0Eu Çt ŭ'tזΌ]Gf,Z宧ryޓjlz-~lsKAag]T?⿿PA|4G~&CsD5lic;G=75(pcה/^ZoG88^S#Fi}CpT;S۝1O&$XO JƔ+QCm-YnI yv^RA9fZ YLݛ8 ?!W+YgxX[ͽ9PRj;>,@ߦd k*Bȭ: IQyrSQe1V͛%|B3mvK̛Hnq i]?36U}Bph ߤpa_6KW{1#Ukɔş&kINӋcfsǿA%1wTAiB!;m|op%%@pXό;֊t0A;AOW B7WN;yoo8 ^8rZ?4 6T.h{-F a_ƱG[TL(c0qHF˩ڃT{rP~Ȕ/b@3I~l ^WO2?a D6ɏMOAXjs^cXNҡw .6S['u0xDЪ0- Ro\9#3m9m?PKfX=`:"pip/_vendor/requests/exceptions.pyWKs6W츇 {-3=$N2I'N2mXI@!= >D5iu.}}? 2|α0 r)rg26@,Fp+i^.Hʻ jSgOhY,Q ; LV緘;+SE[p?}EɣOk>*#@ UY@ed$A΀GmApRT=?cO Ԙ}'Pͅ 0NE!5=dϡ5%H@$;ہ ?H7$EyG܌ӐS:5Q j?Jg`US!AΡϗGɯZosAdɪ u3.];؀<.3}o-G5e?iޥ-A&"K$.;Nx{4SŠة~Ah)t|dO!~y&X5KtIJ);Sk ]G$T%W*Eb6UpR1ĈB^~v =wEiؙuMB?g[D/{2N_QmP-,m)E& uQj%U@}w|45mMU,*UYUW"g#y 6D̖Nܫ}{5 /[#r9wM6ݠ&ajKXڄ@ Re3%7%9f k4.ٗ*AԵ?M!|Fn)<)V1^oUXM/eǕriOkN S9Bq;xU4;Kv% 6O-,) ^v$tDsTb4^2L5+xpǭ=zT/41UwPZ@uzUJUٸP7:+hs2tkVߨXcZ鳰}PBΕlRCNwܺ %0} y=(lQXT=vMI`& xWxM[zbjLmUޥ}ʈ]JXL2nfjF@zg'p_0R_̖]H xeilPKfX5pip/_vendor/requests/help.pyWKo6WLكm .Em$@[tD&UJDIᢨp<8CBȼ*l0 .`]=bTv(YJIoZ,JZZ'V=LW&r/\Г* i gȦ4"ˀjWŴс$UL Z𿙂XHU_'Bm6 %;a~TNSXIŤK#-wuB3śbח$Iζ!`{3\=0S)r1̎6;)/Tc&y+lQ`n-F\N0,INװĦqM k,ؘudUkJ TUskTrMׅz.Ө,sw ם©C*DP+O.z'"GۨŧHIVFb|0?zGK¹xk ukn0܆zSxejT.:|;B\ՇvČ_AV `_|揤5V>QnY}LY%\\ʸQcu'$+ rAnYrw>_Ϟ>I+f|ƾZvc5a&^| s~Crs ^rT|[zg&5t[ֺ4idOpI/"%`G] Ò3j `#@|%^d{RxNYU掕yrhu 6*~xl4Yo(B9cLQCiLF߳9` xڲcwHb bBe +60Lo ^gQTGE,UVs1PR>]9bEf(k]M̈́ڴȫL}_#G_z]n7M7ɺҦؤk]un&$zuZ SyKMQ`ɚ-]K- ֧vNk:>UEjSMڵ$lz[v&kn@38mW'8't^T@5UVα\W+ȵ]3S۪vˢٶ4~8;{۬-ϠP lG,R3~hA~6~gamph\՝v-A+$b,-G9X؞TG߶aѶ,zs;_f&はsl0ϋ%Нt 6F/Օ_^q0*,/tZFϓ:+ .}ȂC<0RZfs=Fp5 ݮqNKU{iNR`m8|[~vmsГU[yk,u],]tx$ QL*@kR Sn l2$^ع+.+`+[UYTWR \9fsRgA("-N R:N+5d+* Tpk`4K` |02/t'o_>?=;;Qdg(8W2叝r#ON*ԛ/JuV +=xٻv?tr}h^|6û0?=K(z=z[7_=[YkEuD ` / gXt jʵZos欗@% PRRALMh Зlay&/X,a? i \dW0uPE:}sSہ3tt:i4 .oZ[$EmG5-kؗHm Ը9EwǢ,QB_ma3wr XaP( w @v[nm^dlP V M lCkp'v5;ԝ۴&Rf*Aѭo;N:Jc@ef] 겓a8LN!SX#0Ffw»޵ z7MYe0a T^gVObk8Iރob:uϔ-pH{[,0Kxr _AB{{X&t?rvtQک#@[֑+Z5řX.N'SE+wuWzQA/؋m[雹ت+eC,qԩrTkC.ʸ3BnLԬ=Ӭ`E]ᾃ*y4;xsvu.j܆M 1ñGݱg0?N˞wS糳1w?JX &]jgEG*HS~Pi4׌oUIHA4ۡ=&x g2$qOoOcF:n؀4q'@ ć*8*kccG '^":q8Lg2\/YYMz:8Ųm U{4:_e(3X X]薈qh\hu(MN, XHID 3t4K`@H\Gh!-ԯ `Ä́FtnPil7\[A byE0 k _#2 IGH_Vd=uDDQW[&,ă <2㳨Ų%R|ȥz Cx]d\S'+1zLǍ]Z,'X &1j"[FoiڔG#8:Ѫ%Qrx1??RW%a[eFFI ȧF=g  -K$:D{<[^S21<م{ߛ0 :O$ sqg3u`Һxx"~`Up<$GUtyodWx&¾JveELA!BP$v^r!^o[Z֒.<-⮋9<͕WBAO5Upy]P[4tZ^\ )(!k6 bTwױk#Se8qه#H?dg,H[Kz@`W!5=1ѯcC. [9b5ǟ }𽳕 OiE K&51x-RF^!PiwqјE㮽_OSbCvg=,τW9d?'efK [: ibcC!Yls(zw3va}dPJ{T' X*FX 쑾K!n-yJz[ʖMWuVm1kj[S|j[-Aҫ&;<=C;U[wvM[rX⭤"=ک9f_Xs凋m0y]au8("h>V\DaӍOpO]M6.Xl,&1_@{NX w*ޅ(>9װiu`Mi; Wj9GaY\t8Dzm)u`4czZ4&!_f4!ci&$(Jt&H,&&R7\KАߑZIDTFd'$-B{s6$TUr&ƛ2K>Fwg%, rL\#h-HODŌȸ!@cf߆;z锆@%};A6o<~q9j1x,NF 뙡Yȫ8؀^gHvʾgϝﴯ 2h,'t&NKAdHlʶsY p"$2qI,е_i$SqR??rSkrk]&OXeZVtӹk 2ْv̮d(nbdmT{ ;/*/o9.ptmG#6gStxl cPOҏް:Ұ'O]u֡0u z5I(OR,A~yY@ M"XMA⬅Au˞ZZ~<+J9Ő"iΊ3BniER`Rrҵix ͜Mx.V}\=oaJGtO&‰kM$Ӕd99qs*[0o-XꎃAbBQdk4RF3WpCh"NÄ俧 ㌐D|[X] 4~lӪz 2,eFD16x{'ln2?š¶@SaXINlI1kcꛖs-p^ f xnQoTJ|#-;H]*feV5ց\ g-rTgu%KLi`DZ'Bɋh'Gd+k5;Pv+1cLj.15ÄTf續G$@,,sʬ*!qR؂mL R?wE'Pr!u-Fdr鮼sLHc\[-:S 4G1öR0ǜzXM>gi?B,<Jm{#xT"?M H48+iafoL.)@aH?C mX h@t9xKq!(M*xQ.~7y3x1"9z6dyouCMx3Lab~smfK%44'. =!'cM8P 8J*%s_(ブvi8 ^ B5 ʤl{M2c?ޝuϠ9by şXUǔf4(N$T@'Cl* <q3?Th!4`g9{DX:>V3ŹXГs3%ry@L>=tRW$M>4xV`P=t~;{9KҟqfJu鲜δG`,WZ;Em4?q@$Z7j]OМe8B"jXapi3K E$$Xz}::SʋJ#F0(6pTO8 = ЂC0/R-LLEIr 8?^sQ&|&bsmGQXkmӦe<''r G=AI]00{Ha.졉ɒW?a!)]sbIN= =f(yM:6Z?8R~4zx!%,y cR u_=s!u=#;H 9 2d)Z<(t}#c-6별!UҨH9&f)q- рF%Ӏ :EH t T(T nf%#FqI"\Hb2$ y$߽9yeSiT%E t`&Ap&x޻8y'q)'_ȚϹYy\XH˰AuI$g-[ F {Q706{e;$ 蓣{SzI}~,V'Cٻ"93&pHS +YI? x_\Þ'Kik ]E &޺E&COS"5, ߎ&&E5fcO/7R(rW}z% KZSB%OE~5G$QC}`ꅗk0Sھ5 ]faْJ r_-F{[R>F󕇣/ޘmB-o G3t65S~޵4Ţnh'~`)UsN[!<B)&n9_ d!_!4ޯ L_Ffe#wa!;.}(*퀰6Ma3{܋}nsRKZbpJqrvCy)eӀ0|I]yOиf2ʸpE0ߺkO~bxK$\v3]ss &YU|1[|lSⷰWMR˅7kǑ%]˄s]v4D>Bs SV@mFՠ*VHSdR kƭR 8.Չ7n82RY1eD0srMo +}{ш" 7ű9LK=ّb^G|%W3j JC 9:Ǔԫ z@e^u/tfz[QcknPD W7ګ5Hr&w&ˣab@U*ѭ#p@G6%O8E ~[>i}:U7,ON@QqK,+8ܫ* ʶapa ,CLاPu]Ơ@y/8[81gA;ev}Ɵ6EkX} Il0,r5N>Tw%FT:9u#}V=xK92-?,&9]_aAp*&E-Qh~ƺ"J?56V}( _~D{k#O4v{9ˍB$i>^=@(NEa=F%Ea!`7)1/];_G 9 *W[ڎ]\ j6$3;w(BY- JRb1sC$𶃑kmQ& Z<9VM~[Z^fx M,BO/`0'crRϞS Z?_bo7\o|㑼WCfhMQǵEϐQ{_bJ]h=zQdY/]||#* Sx!5Ioġ¸^kdޮ[? 0y)Ҫڮ53j.!eM*U(%j `Op!PD½F.E/lLg!O n0^it0\o"D 8Y3N1&tEӥ7 W4p\8W \ : B2NV"MHp\B:BلG.KĽd⥡ɺN9B(BO~XyWϹ`g@, %udEm4Rte *|D^#5p2|8q]?8;A/ a'Y*:ĩO7 +8<}=9u=1"jـ+!5Ho?R+'̹<6F$Hs{9Ftty{n>!ws$51 g+;5j†E5n?;^̥ұ".o3@JngL)Td8|PSjnV]* ⹅=)xҰeF6.8T8!֠;~v+]0/WNώ*;Zz] ?4ƏP ܹ$Z]A4ߗ\ t?$Z!&./0'3yQʙc0U_8I9䮓|>)#9VI.YDfuf6_G73QU_ N6w4ԨF9$ƗzAyO#C\'Xjuxq|]^]S^Lo9Z$LXܻWOg8)lpd' $W, rzyЬ0Nt:@sCw"'6g7d0MǘncnqbgwFџש5u˘K.kprp7\@U-js('$847#Ǣ1 ³zQT~uj{{Yx<ٞ"_R=נӛ(<΍sR5~ǫO+T-+}˶~BvW_/b= "1W}1*,cMMX)ܿk6`!n3'i)ױc\N-'oc,wJ>Cbs̚‹uug0ˠZјdo/5j"ik+>|_~ɜb *9Zy|䩿ƒ;8/=;aSy oOaӯc?ȯ74=sΙ B9LyH\|3:oQC=e Pnį;Խaw=ģɑwuGɲk>wADTI_^M4T;q_ٚ;%?XTFv̋QPKfXku!w pip/_vendor/requests/sessions.py=ks8+K)N&ݬj*.ʦ$Zl)RCvS~޳nTS@^nMb1YYą̈̄ulr6Uy-Q:.I/jUjViT]ΊKhJc܀j(LJj?ßdo֛Ui7u_lVUV2ah瘟e25P^t'uUYٍHtnk#~f[rEj !i(כmޤ +FH]US?YA_6ieI8]{ >czi5a0/JL`?Nk]]jf7qx桏Z/OE5TU)KjQԝ74ϖg+NyYI^f f\U23@ oaV襺VJϛJ]۴Z*&EvY1uC9>zL}yчӓNOg_yukqΏ_*Pj쓭]Ӻ1eKaýETWхɐS[OVk ߝzu 2d᥮}Ǻɪ/ ]W e5S YAJfrvQ.\MԘ-΀fy8W z>~Br򅺨t - q$ò3`:xR츃㧝N}:b"xq!iu_$H}ћsVL&M{l%fuZlWh꘍'S$hzT,>B4爐ReQP& D+ mP 8"3n%iv E ;prPT)y(2\Y"˺m)j8X@yU 0 ڤJF`4ecZ&24"MsyICڞ#aFS6+JqS ? N(ɗg>L:Hdfc0I∋"Abx!#Y,`⭱E~8D?럐Gb5bvh{ՠWϼ^'t'DDZdkh Vl*։h紥 s8hQCjӃk6_?zJnbl)"}>QpRL!#>|(K|y aUly1Hk7 =k=U k "V>bo`6[UEow$;$v{dû6ܳ#dQn^@?s2+#. 4k"s@2[M!$fef=o)5x)\E]mC I m@rq ֖)t^}E;ui$q=kt0PNu`0I9SC8.e , ɶ%XԀb k0@BmiH8w3L:}6wb? 4BQ7v ҩ}[7jLn؝8a]FT 0| P=89<\4+:_vۏ"`0l,Om4tS!EkXa뉗-ӏcbxF o` wP'J_4X$(q%౹#ÍYZ03>~iBˆwXF8Ez:=Kj`iu*v%p@-{TսWue 7^Ⲿo7>¬tu`AW!b|ZN/r=wǠ~!:>ۙi;E LJ,doC'ՆZ0-> WKDy տ2C*T&ZC:xҸ&8jt:`;{p>e!tX3wqWٲ1sJ;GwG=~c+.^DD&6 !7߄b6^։?"Jg*uC__Tcy/\wy|S~, 3E`7cpfO_C5v&Q n f0>'ރCij@X.i(iy((4|cKKb<ГlBip7.Hԧ7F 88Jm#Q +ZwUx 3K-Hox:1$|/-{ @1gO$_oIH ?(rL Q$ޒ|PGrnQhsb٩R(o}E,r*摧$8_`ZQB|Ķ]20)[X MVV{@c~s e &KURVW:?V Y>0>yf$7l%p_ i19BWS73Yb@{ϕ`5hhy.L%IGեfXmU{2z3^ύ(8e &4`A0ߌ:-yR~UwtFb FĹS3j1=̬bN$xJMdH Z+6VBC`4pdLfl)ɜf.ò1tANEprYSua(6G2q\(88)xsj0*~EBW؛&)U`Guy;XgKL7#fN"2R̰ )'_2O)aH^mILɥ{S^ ^(qZr5˵RVE3=M9[7kU4 ]U6F#t<[gX;+W$K(ӄIғgqpiTx#ϓG-,9nAԣUsU*hYcj>%?c ;0E^^E*6XGy7xILJ]p*5NܼړX[*bМAK2 ,Z:RA5%(e/)3&AoWr:Igi: Q/AnZщy%G"@G‘fug-0##:g84ƝFa$P@-ź[pf VhQ*~ ;R򔫏6Ã_ d4_{%04 Fz#/J156@??pӰ4haAqp>h0L{WśEu]٣´P4"k6)N\Au%j w@ *t{D +. %Ұb|`"ҝ7 EzUDnx<í &H$.yftlh jL,oXt.p2c' X~,oU^rm >Gc,f;{1 3  VYNj2zٰȾuC8ր6of;XǮPcY:.2hvׂv,Q4f󵡱`1TPh?϶^FT 'WJ uf[[0[e5`/rey[ 9B$jJ+Cd||KiYL*syR0"Fp!,Rͅ`H]4|Exǝ'9q(5XD]m5F?_SF=> md",~?rfYFh xk7L羱׎wKx1a͙q4Gv9a=ylOuv. 68o]M\9lG|{Xg=MeǼ_]vd[GqA_[J-\a9ǴM(dq11ڮD~XJb6\Cd[L7A&ض7̮"lz\X=|&EiEM9#T]norU2z'ZE \3s>PU = ]ac:N0SL7PWޞFo`JJ2`jo4hi WIJMMiUPBwSt:^"JUYڞ[.?}7C^ׯ$ё #RL/O^?{c_&"YŪ ]'IǠcdK8[o‹r b:fm5TRs+Q'BKPn8=MAsGwu~:۝8- sa@𳏮,G_?,txH 7R2]5E uPj#*xPe L\UHZ v=ϘJY_ʆ8,"5ɠlE{Ҋk֣Ee#;("EXD7D +lVqp@Oʿ_R$W{he(Xò0!9[Sl{0 ɸVAO[fVXop ] }z&xЫX5d.;H^Eir 8 +IFv, N5DlOr·y;x,upe2TlP[|>n/P,7nFn$[Z|&抪@. U&ۈ@.#!61p|K5(?jV+y~:Ұ Hxbÿ0.ʐ7$# GJ4r\86I6v2s2ړ]e#.f?k kIN(S^&3cJt_r֊._ ?o\|VW.4Vdkd4qv٭z!y0ڳ^\x\C)\gʵ-|n\-X$hXY,k,KA@prƹH |@wƿf{Yѿ{~iw r!Ax3J|Kk<_aQO$:뷩DxKښJ(+I–~-M"dꜞ뇓Ň/_ܻGNc}'"iu[>0Cs73o^Vl{]-^oKJutnzHMZbS.ӛ85î} -ud-pA ɉIw>8Y&8z}"Row 6;g^L>-*Q6brpؒ۲.rpTW}x.JE0S W 5WOň颎/ctKK]a$+;لk-fJځ6 *a Wh^@PKfXIe$pip/_vendor/requests/status_codes.py}n7_AlTjŖ1\@mKIw-ɵzK:ᒔT{9/{^1t53dY+JK0(c[kz֘7ink,۟NRY^ZՈ&F:6dRe{of UWF {[Tw:yuUU ~o޼aGK ;}q+[e> O0-]]~R{DY[=1+H7zWZ wu;+ `%J#ɏeI@8A+Cwƴ=dC?eIhacM:-ɪP 1Fs1 n$W qLtwtERx,|<_˅Jt%Ye—S)P,ҁP!J,Q/s1\u} 4{ }9E77P`aE`:1`fm!&t2LH1U[%KfXP ^xC?g M&$P(?ïN27dt{p2? q`g#Liv81SZc)+ F&8*{3elsw,pfHc).ԩyK3RD*6m+VgхgN%tl Mgp2ԏOL75ξ:&0C 1`O$I΋BJz'1mGMcȻUy8Q\6 *C`R\iIQ9j(DBsTYt#4E0{gR%F lP~qJ1ƶ:t5df,qYʣLy K^bM[&_IL= =i9 ulj6q9O+qE((^Qx 0Q4}  d5ðN=`35Z*a;P/8L̯ Mg#*-l匸랴mr\ps=mhOw_ Eœ H $a `翽ScbxE9%'4Ǘ!%6\V 3\˝][nU yvyEV;+w-ipzAUyC5&[Ir|<͑"Vz]Ioz^U_ WQx Յ7fDD7"U " ?ؚuHrGtj=af5z>?) |9-lMz>fo(ms6~ZCfi{Ş=e37:=p=po XuJIÄn8rGhw -;xE'H}PKfXQL[` "pip/_vendor/requests/structures.pyVMoFW 䃨fѫQ0 EWHxɥwV J7or6%:֙tA|K @Awh#c6R+ V VoezP^%Il6|X)쟓$)nJ'C*Q7PRNp(,RGB7P kl趺7yšӢaadH(rQV{gY!)R:-AB 7d{j𿖢 rɑnSP w= 'Mq3P32QQcRihJ\ES~:~0D2QYIE,b,uBϩ_J|Bz pwFIR2\0>r4<6LBnQ9LzĦ; 6cG|Ko{wY4$O@ы0B*J[hD#j#7!IUs 2M>J8d pVOPTnVaoˌ~X@63^!a$y tMkp``-,nL-u7;a6_cLIUE= e{k2$o$'" ]»~j"꠴~ZЪsO)h Q0^(M֌x7"x>FGy}vs>\W,Ai/#I} 4XY%-6g}YDvZ?%~k'ښ;v%K8c|BN^L_,dOc/4D,H;\?~2#=>ڍw0Vor90|熖X\aBv#_Bι>|T)yҞM4G#M:0~O _6J<ސfA#g5:>s"`ksFw-]e6agYrÉ%wԒ\3l<_)~TSFPKfX )_pip/_vendor/requests/utils.py}{ܶ+P:+ax:ܨulW䴲M-]rCr?oܵsw^ fauu66ml\frբ,TW f.IyˤVIղҩ,WGzÖ&*LMRZy2S/X6(k(Hj̲s&+̯*U+]ۧ\N;۠4f7Ig--iYa iK2եN_d+-E_<-hY` ^q9>~Y8@ƈP&ץ.~NfK}pq v Gd|MrOow0]{ 4i$|s̢D1=XC-6C`־2}އ6?aޓK=R8EɶR+ !'(Nf鬘$yQkzU~RU"O]toIym~dګ= ,PP!ۃB\YjԓK@9p *SqSAun@ucɋ1ލV-QG3A5kXBR"u8jQ@p]ujAsO$;2x&J_lF2/B-<ܣF.2"!/]4DCv hږ`5\ե CQáϑh*"ER.6lj\ZI6tڈk$$"wppW.~ѴJcD4"0 *5jCa*#8+[ڡ%TE:"#MfyTI]a ԝy8L҈^7QU3 xsQ_Bs~j(Pdv(*˫:iCP YD/`$v ZrcPPi-̋`U 0+SPRl偆S&ze`nbaaEhPjo̹I|@#`ҕ?83o >D` ԀaI#['YLy%-xN!mRɤl]7 Yb @Iu#]WofCtzTaŀY嚌IOrθBn,˜gĂso"fTDX+_#]_`9H,"#4C"bl分ҙzHր$ε PR!{D: :Z r\5! ".5!Ï$&iaz,IEF`n f3J=/a iW<Ƽ׮WRz6[+zua-ՠNJ9VCge R/IU:a-崠L@Ѥ٢l2iZ!$6f"ߪ*7̽ߡ?WeH(-!g}Be~ { <d{6^#[+  B28Z>8|C~@L`@`L&A5 `Tt6E5CAo-_tb_e W4_$e(;pDoﭛCg5VwZP+&ݨPW(sQDA/fW],pYxHJ].*]Vf 'Q5p?c]:hU؝xѰ#KKQL^t 4u{Y6dXM@4j}iO~ql zFX$i|۰RbRM񆑣a d13=Z)b߰YA e"eTy'Ou[ `2{n.T!mIhUP*JCr}&ٓ:!\w:O# Q 5ϡ $s[0, (N{2ua‚Mꊏph ⎫O=>.,u\,A~F%( o% rC59cĩh{ɓAahvǓ`T+CFV3"㤢 ce_CvQs8 V-w4I2A F~[@JR.n^FҕT24QRx@k { ZmjQp!<'xI9T1;[S4d<@.bqg['% qĪўq_艔DV͊tw gL[dWq Z2tJ`$ȸ@t€0BM%X,쭩N #7@1b32`~TD@ kV (مRbmTi$ ̶e+6NA`v:0- Nz@!T~ىLHJ}=7J E6؎f'v ʹOŠFd눜ưo"K,D7URNzȾd:jlB& #.N#gLOt)qaI!qx aIpeW0 )zW̳IPr H;閑D4.#$d )H~Γ<{;:o6/D0D@UWTm8,],UC@ج!-cе Ni󀰊H,um)@5fCJ%L`@m߈Lѐgtk /YYXx ],`ءR_HnR ɑhq"͉UNY3V@ J~,FFzfsn3F;0ꇺŚVS]?*ROP%^ `w$1B F>06dR}axh6#N1ZbȋJ0*:X=j5T!FI:/ 0 b@LlfsDn#Rp%hWkd-UdO _޾%鋧2{j8ɗ gu̮]^*M?9:1m _uU):Mߩ'cվ~u,gI) m6l 3,xƿ?O܉dKx @v{ߊj燕o r?e3{2o {%i.[%9Vf 0Jf(.}|D!0ѩ2Q`A_~QOH6Ҩv).Z#P ~wf^]oxqfYiv.P*LHa^[^{%aRޙ.]F9OAUhv6dYr0/f3EGDEG@:շu`OH2.{IǬoYL0>2%L lO (:}\|x9.QH5&^򩉖s`k6Z\ϊv^(,T[rH^h j.b9Ka8wƙnNuN%1r3Nx~O3j yH}>>zA[V6dN ط[;zݦn46쥸pB;/MXS?y\=8jQLTZBۀD9#6ďIYyp;u I؄(uLLЇuD)HvנH{ETQL]ebz8\ଝCpxfɓkn2mv>VEΦzQ1'/Pnjd8=z#zsseRj9XmT> /v 7|uӏpdeHtcj jE29SgdӶ5Ns 0S-#̤8l3/_M YkL'Ucywv^^oqxd'3NɰBIZQe8Y]t :%QEEҷ , VРWw%̏5K ne)37_y#>*{di6QkA,EO@Ɨ. D"^m2S|N;Y@l !$  cKۉu'mοb#Ei >MX/\5[uڊ^yo`woᣯo1H^,Fۺ$dܡ+aلd>}1׸uK*0Hfo?;~~xȖ䛣U+HK $IpɊr]evGTtӹ*y;AE!0,1Kx9T{shH@V-Hm}.d& T6޹5j= ~<~nZ6FZ^>!fDeS'՞s93;+SY,/kfM&)2Ɇ7V*E V/ \%SMdž,,a+X+rK]9{G{D{?Cː<2 "Q*SN`*J:(1S9`m`qKl цNԺB) =-j V 따}O2Fj`P` i M?ks^䏑, =9޹s{XFrZԂ7!ud]/ZeIvo_ʟoO}xrhHB0ÀWz`0?-\b»Iϓϝksͽ=eJ1dii|$tL/YGB]ĜU:)3Li}ͦeάƜBvhp.u/dҲ{pK)WfweYh_|FHE :vk-l |Clj#TbW_2t[hTk\Щ e+2Fl.8MЯWѹ2Kc~o%Y0jpf }GI#lп6sVGJaLZYx^a2Ib8n$HK<|3PwUHubG|oˬ(s,qP^b=P e6Io,r8>C%0  2=wxmv_G4L4.2 Ji \& TWFŠCeuYDϵ 1ڏe^I$hD+);h [Q|$̐Ixla tnjsDp歝h,F[SjF&$-ޭ'W\L0~LG}&qyQj)F至y7C9mi{2fDDPi<-<$tLK-~$k+)YOcҴF3T_^ve,lxltNL&<@|E{I|Mj-j\ąJԷE$r(&6&a+w1zzF& PZVQUaբPWfXlΘg`/ 8^,bw-ί=E_\*@gz׻ܦZCQtRi,l9K3>|r9h 95O&`哇 0u<ތԊ/>X`]k3Q<P|alWU^]\A,yl+[j~#)(v@ú\[cдPQ+q&kX#sL5x0q񅷶FB5APGJw_GWgUB&ZۻOy BK_z@7&wg?j+h !GlE7HOGYPsҽ_Jl>FnlK Y¸ov 0@/W: z|1zowwIkeL}~yKhӤNVHζTT>~xƠOo̰1>J䕊Ύ&d\&!+K17[_+0Գdo~~I[ߺ+{ku\ ӓWCyAj!dA>d.:cX;qqh:;3=3+gFj.xM=ʉ ]#*j^n+лgYB=1)獁O0>A9nV_{3z)D/0~"ߦ@vN{Q=_9_;ęY/T 2l̚jMc65h\?QOB~>::뽣1IF!.ai܉FZ{ŦTE+&M6Y{aڸ:01ǯ:npLEM߇ïtP&@Lev2.0|a,|"o@?]]8[@(Q-73p:[An>PI{O~{VDh)8 AG B52M[7/־tqenc6GV07I"+ ckh mȄ ]{mqλC3rm }_*/qcvZ>}iPSD49x]OPKfXb"pip/_vendor/resolvelib/__init__.pym 0EЕB).|-Iq'v@3ohJɍ ^T RIIۂ=ҟ [SzfȡAvr%:6vi=5j~pW> 2¯wA<4 1$l!ĝYeisHeLoR?~hN 2dSrVfLbq$;=nJRPKfXO:#pip/_vendor/resolvelib/providers.pyXˎ6+3pSAhP4AhYˢJRv="MÖ1ycCl^ߢo~r+X[ٝ`Z3J-&{+tkZ++y5e[ٞFtrõl-6*g<_M[dJriWo/;iG#a.M+v XO*k4Scװ?:ffW=pm ;*>~\>)r:'Y4V:g+zТZX$+9pVޤ13#HN+ T{ ,D (m^].9Y z<)2"8.{ݽ ӧ)oDZ[9ɝ:\}y7{xPzҎVT˸ގ.ؖ CG\7A)lڜYUb+(Hq5b=g;<>dKGQY|d%WRz˽ /P[X{}PL)F`[g"jV8JH|άV}ڲXՁbA)dm[et~SL.E("ld&䵚 h.0ȇ >ck86,LP-sr MX<}]E3y~pi:<&LbUE6%SY-7 dƒ 2; nt!s5(k0 [*$W1pz4 &qA)ȵT#ZwcC/z0c9?18*TnGd3FӞ/&LaUe+NmH g%{a[y*huU])1Ffoܜ3v.Jѣa gIv=v} 4B¥u 6; ikǾC0|Ά|N_\ȕXs-`ꑦe3hi ,:L@ekCuPfS#d1ymfytI%*BRu IIQeqmz) ¦,8|?e)fnH\;–:01߃0cF`^x_f,sR&DrB@h&6'W Ϥ<}0o=  CuC/zDaÊwBR(ǜ9qWNh+A;$@'5 | g8![$7}&S1'L$%HEZN\3E ^UU(<;lu35UX,Eט뙰 ]Od2'|Mcx4#dhÎWD0ixMJCY5Qk_PKfXpip/_vendor/resolvelib/py.typedPKfXG*5A#pip/_vendor/resolvelib/reporters.pyTˎ0 +ȱy ,皖D"4v4i5 'r8=|DO/4XmlDxڭz41, Ξ$K졷x[}"eUԃ6t_( 'Ԛ$ttP/hdn@I@(25WXͩ\K፜б^r[c_!#D@*1q!|?yT+Y ̑ t _=A lg4NhBn%ʠVo4ϮG!W3_e~ёL()(`\gr,A_NPXɿct[Cy~ŵumKə+7$K!yŶg6dǶk^hG7 0(q Q cDUQ CKxF9 r` cn2{tM{joZR/[gd]+4!HP-Aਸ%\nlfrATc$6Rn8jhP 6t 8 ipl v\է,պ ͋EN\?;{?Dh{{kgq(h޼"7oFٜqdϡ 5zJ%Dbb׌B _h1πJ( =Yy:+TesTK(ZXmLy.` :j܁bvk-Qym?lp":4P}K|wtǾoIËSf(yeȈ Jf,4͵S_ihJ`Q&bed,4em?p=};6zN&Gg[~`ӯ 3^Q+zvTѯ QatX^@{"}c\o^UFT % vx~ h֭W+q)u6.Fʾzf5PcX;=Nz^h|w{/2VhH,Czm9o>}!ƍdQZ\yjgݍni$!P@f`ϚnI8n|"&"zナ ~ \0~2c>[_.KNs&fλ/^N?/거/yVQr9=aʏVNNIy0Iv{iLǰck;i.C{Th[XۨBG/8<^Q#IcY pLw؍lQ6V^=FaA>D Gk2R'襮ٍŻJ)&c; y,q*`~^ƁrAXw 5U_:E&|/=}z)|fV6!'v6{I|̂դɂ[$wR]쑶lʺ;å46Lvu#84ӃBKVM=/܏JkoYb܉BwcvGBsnWw~\%" ߔ7po*yfpsB sWy(4!ĸެr3Y{m8@&(ȕa>bdRp= :I 2pLD@[+`sUԾ%N:y<ٲazD`<4qj¾R`^|aADٿEʌyGɗiL EX{n HNa0_ׄ3/OTFD"TMGDžV2OH5#;߸$T@k !Vnu'vG kLt47&co@QdI(Clnj(N,C^ tT2[Q.HM1iTbѩv3NXJ秝 s+ݗ^B}b%v4u~*(MU&8J>uPH؟ Kj~#DZ]"([?z߃!;L0{5~pnxͯuP:À}`(j'99~ܕ}hQ}s~ g?n"gDn,p_'Xd=iOnG%E_SMbdЅ9ljS¤abiE~&iˈ;&e@f'<]ώ|^=/O|KdC|2dTt'r'KUy xDL畃ދY.<@kon&{:0s/6cAz/Jm&wYYHF}jDFg 1xCJOdS/&ˁ?y_s_J/ׯ(£_PmNⒸ}}x* mCi:U($\SK&X?ͺMʋ2_եz۴+\+x ;>Q 3Wzt}7 l2@Gm͠R9߱kti"7+dR|S~ 6A+Q2P=˗|'ǼlzB\09۞''6^2\rf8?X@X7e{fWR&kWXTG3(RN֗/)\ xW!>5?$YS J=ziNhiub9,vSrEUh0jEvӮ[DrRhY-0"=geAt"FiqSi끟{V\M!=e*"wȓA붡,at)"U͞8 ݿU90Atl8^Ҁ!I8bv0Vֻ&!{m+4GPX!'`oiDCJ-Vn1(kx_j׀E3O^"\AuD*Yj T\BԨm[]} f4JzK5Q1^2A 0PDnFha[Fq4T_j*|.&'L^y/ʤ'~w%3 gإ2jhg v&jPvwn0 u7:[N9b?hu%Fͱ. Z[L`Nwxmצ%K "1/yl6١xkਗяpH-1=W*>I$)N yrt珥f R^oE5lK`h r|I164Ћ@/\: .g- /X[\YVRږ~?IL\BP!H[߂YHV Tx. L#q\%%KE+ݴI\7<{Ukw(T'z V5/X/Zؗ`=amK^ i2j~F}^3}4[v,į*N  #IR454vZkh:)=0[qP]5ݸuak|nh^ʷP}CdI6'}oIb o솩F3],Mǐ\8 [5:T|UgREr/ bHKE{6H(ރ/ٛ&<ex2?B ع!qYmP]OBm'5[9v]nŒLpe{4@dIMa yhOdTD}3MA+{%҅o$j{>u,>"Z!BɠBEvit dhJ7b3Jdߕ;SN}F EYߨ""m!ЀY6\R [؂ݗ* £T=ѰT] Jj<#09qU٢wy)s(8G1$/+Cx] eս"JaLդ" 2,9vPKfXV0c!pip/_vendor/resolvelib/structs.pyX[o6~8^$հ=K[aX14E dY:YKFRv }u!%'A[#(lw.<,+k.0Bq^*(eyGNyQ`dj+t"}_ ^;}R&U@81 fw(#b\ scV1ǁ"G#9RpI*=r)&?<| ?} ^%y{=^eP \WépYY=%J%7@͕!CkT;>) ~2|sP{&,"\Q`nC>˖=MHCS8l8FEv)W)M\hKl|]YFUx ރ., ߄"X[xϤk{-Q{w5nv{}<\!|%?9*`5cd`C]/+=E;:}Oh1em; Q:p[1=T-SZttx&rԼ{*4Xogo::jHgaw5פ}RXI]:C/'4œB`cTҴT\Ķtuv)eg S G> lSj3tϊL`u~ĸ diIG/ \"N1ՔJr;n?%Q\EMs{vEo6Y}ӥwnioWC WS7~xޖڏpe^] ,:WGsh:&.x*WqLjVs}}}j+1bsnjChT>QD9 7q_k5 oB¥0n)M 7hu0|~,9MK1C,XѾѡᴥKl/wiR{ΘJ6IZd?2<^N@ךPw"䝐5Co] ۜUQ鞆wev]}[p TfQxCUG~@su5UhHo&;tDZ^+\4פC)9C3HoP6buAVYrFAAcW We u%%R@IFѮazE9*-xg^K>9<:"=_>HɴnvM8@AFw7 ޫ`h0u7)c3mRH=  }npmr_,'FMC!=ǬزW^޳ijmS#uՂ߷#iҡcn##۵aCEEBJ.͛5u5Yk'jx~NLQY'}Ubs>/7>M()VٙxܽsIrTBZռ*,/k&waPKfX)pip/_vendor/resolvelib/compat/__init__.pyPKfX.gc0pip/_vendor/resolvelib/compat/collections_abc.pyOɉWUVM,(KWQP N-,MKNU*)R\bĤd܂^NԊԂOkQQ~vSpPKfXapip/_vendor/rich/__init__.pyX]o6} <k-d dd&-3YteqFU}%/[%~L fWxyS\VV[&+f !/W|6Zi˔Z=NԷ?F_Oۛ_E:D솗%ߔ"b `gGY%X ZZR,7R5g$r̷&*^zp {W /Y+m/[*f֮mep柰Uꃟ7srTfUs[sol7gr&NA;T٭J{7~ ^͝I1-fG[&JaE61+{ TX?n~0kcܘ`YU'e,Rbυ4,o:}e9jW#0#7!qf׺mA l+J7;u jwa3]t3Z|+T7>nK߫R D^\q5kTWW_ݧJlC?8oLIK:l/m*꠺kBf l͞ NTPp3y\AߠªGi'UJg֜:W )V%rzտu,Ud2.^ `p/n|F &wMFkf&ds߆tmT1`sOm 2ec5(UG\P-,̒U_%gMHf)"D*gM#Kyǩc;f,nl`po\$LZ"@[̻vO-3k"M RbBOcX^@{--6cʙjl#?`,#d=Ut[1􃋌2ٟ-#0UsEc^A*S+w 9EGs?BsBeStH=1,!tѦ b/}6 {#;uʊxu΋kGXr[>&@/N9P4'HIO ~IRӦz'&2o꺣Xb`՞' Ê=:6! %Rfkq4і,{[.+z[iPXs?Xm" $($TeTMz oOp6C(Rˎ=V^6EՃvd>hˀlÍL|dzeS5)Q [/\t\ 넴ȅX'@=WCޣB$5AKE²44;+"ޞgYFލ<t)wN8TiP>8B;(Cdb\' -:sܽEv*q<Tq;L^G;-$4-N5R*DYO%&sGR3aWn*! Lg)iGޫ.z`O ^!\u ?~yi\iv;Q*W3QЍGCof bTK'x&hzQ"m0t@7)yPo1k#rPnFa#TlGLаWq[}Z3?f Ȥyi;yCvn4C#Yd**ΈN]/Z/|?7ƢcV󺸘 :!yr$fFAdC <ֲ&HxĜ!/ h0\ ļ4 sn0/8GǴ,&p:48o`%FzL{C?gj#>$] q㏌󇧇c8CA0@=v1X5Eu$ZPStL8<#1N.ÏcۖCg3'3vb6O-I2_Ej8} {n~W̮PKfX-> !pip/_vendor/rich/__main__.pyYoοbs |>eXP`Ǯ$Ⲽ[k+w{ @dmh"NIi 46FRȿЙ{i7KA$AOWc4Q=Fҹ0 l5rCӺ|'ۣ̈'02`!.+H.ÓA$4e`elsl|ʼn+ю"rF$#&$$G Hc6DA.".8XD8)h@e8XDvs57h.c˧NIJJiY\ ·rjd$Zj'7;$+YmnA"`sGj7"]`Y&33.P-r8Vd &֚3Q C[9r!+A\̕9mO}//Z+ *a&zYG-кfOiV"!\Ho/2u`׵on*u)+72w*"tfiZs#a)N"Gw%X,,F.S5M{ BAllDMy ODxaO>H0 FA*E*0R Ŝ!nF k Bi3%&v׵g:XqDC) WX`[s ԕVeG't_|f3l7}qi6ck(s4Gm!7SiYWIB%7![rÈ1wxEwkknzڣC6 TSw]0fp s`;Eeaˇ&"[v RXrfaѬP̚@@Cj*֌Rr5R̜u]B؃Z?ؗA\P=a! D`Oﰞ#D#14r"-@NO+V1ly#l a@=&l1[ 65a.&y!1 9 '"hJU0]Z Jc&62^CqƠBSp4pSb7492ff܍͇.)J`㲁(FV sɝ7%n_}P;]x$y-@޼ͻ#ڃ~OzUxV f]2JVa0[Rcsɴ{8Px 2$o-{򼒧aZ+HBHQU*h%0ֶCO%>~aGQfhN$P8]zAV#-6V4-b2|HNPHڭ [. -+99땣)Hb&vp8g)~d?u) (?\9_SHW|ғ?9Jda 8pU9f6f+3e4"Wh9b26v&c`A/hh+++̟Vj~RRer*SMM3'j8qrGifj)暉<ue4yVRmՉzq)fk1sf/`uD$>DD5ߌ-cfv% lUb*zr*)Qp()eLVU^XbY*@DݪZX_)|> Bw0['!*sszK4qY1T9.<yTd iTKp^iš۠Lm{ϔÏNwغp++7qNɮdPYÉ 7,u;_Xcu[/Y /uYۍNj;FUy=BK,umY5sӈ)sC٣M!KKeKKYR~xz C^NQB#Z5rlfFUqr { t6qLl5?NNi!":. >w 6 Bʀ_=48޷cE3 ܷ,p8d.zЦRU?tb - A<\gi*{U[hUf{bR͈ȘF=R@CE\Ko56ejfNed 뾣UAzRЂeu}^s|>"|I^{"fQDlϾ,54uJ>z1~G5 _84]fǑ]pѭVsm"j=SBK뗕i+W;ݑaY^BMes]d#(s5Nl]׳jCe- E # dd$W IbD=}+^8FlU2`&z` g64C.- fuU,gZ#-e:Hj Lf¹UeZ!1wbمB> _pX!\%3-nPKfXj ' pip/_vendor/rich/_cell_widths.py]M9).Rb\4-3"s}s2T_=^~zۧ>o_O?~}z׿o?|w/W }&~_¼e>cD: )%W@גl{W8 ]&:GCѥ1 p Yѥ Q0KutBf]%)O e5 @?4d+i }vRȦ%•n-%kCmn2v3L5 +~}{5@~R0ڍ~'+tB%6 sȮLy@iF8p$Βrl:2q*Sa;NPrϑ1ꐲF[qUԹP2 % ϵd5K:02!n`blh lDZZ.@) )Wl'DCKa IbC.0,!KY N<J:Ma't0!e1u 򀆒Ma3..=.:[z )#>!)O:jRS7 sp.܄LyBsj@fl uNqNnÔop%+[-82sK^pzs"[y#8' 7 3Vi]bLiF2t~b>%X_z0u!@er"#ZM6bW{sm/!σ ]n7H7 a;# )ӧ OXBDs@,Y:+ B XKu@:w#< v]bcYulq{lrp^nKN>3F qq5NGb'C3wn93 \U _:8W8όv}kXt yû 73Ɠq_%8@^Wigiw7DdhU nkn9ȝݝK:jzf]i23sݮqxOUQ۞v=R5T*><~q^آռ`p=?PKfX.,q# pip/_vendor/rich/_emoji_codes.pyr9(_1gllflV=ݳffko,,2bdDV\H%Ew$I7]J$SFH٩?a',D𔙪TK f8' ?D=|GPx"H52?f AA{u0Kc'A κnNG3& @ۈ2{vY|4A84Nf@EYOxnhC>f_ f Ǣ _B^ǭH5{n ţ 1RAfËtsD%hBha8CUr(Et'x3&*]~ßcu?5Kp])Ij|.ṭ|*Tnxl2$ [Gϱ5 ጐCE_`I=nr@{ DXk:uB.VR"pTIr k%ہ K&4\7Bc̗o@ _)&H44^)i!wPKpUK%`%%~g0ǘ1PWԞb_ȥ Xe|0!:A9B8)2m~+ܓ!^aU_Qf `oF+ z\Ԁ.C&|$|@ςx@D;ίQ'hv@(728pAbWe vl}7Yvu&5af &n&^L; G+)r_4Ά1B&& :(rP%e6Eiܫ׀ s?|m_a\IdzR=ez=}Ge=v^8sb$5x~G^0xl8 {3  ʪ{['.ݏ9CO͹lB3FҝY~7Ů(I+({,"` Aqhu LCIK4'4/gt g^ 3+@g>1?`u | Z s`|%}2~ΘQ+adCN!ʑF>aV0?A&51m ckfrF-0I--PUQs n!┦ q,f4q>}G;kzSz3`XA|*p-&A2}OLc{|z\Β i Y;g  '7[uYjxMcl |mH7EXRcGbt1zƓ)ԀΧ_=boG8f ,aM|sr{[CAeXs p4{5!K#)A`MA+^!o ,c3@F; CAAdԩ?aU;*·8 jچ{Gݦ{S/i>JCa٤;da ^ @8Y__<|baK̸.q/E 8cH-cX&Z2:*?/ 1^\N.C|+ї( 9ZO 1?7Iom)eߎB6RxjG#",W:ÍDjf|#y=r:ZDS8aq6$,huf~"lSlf3@*R>7m+ ЬRe/Vpb譎sV3sg [g@LCa4g8U U,+%P;Y<6GsZH_2>oG3˵Fcʆ>o. ?!; F/}y)| ~onkqz,7 $!y<bFxd|N |P2"Y7p/T{ S=ڴ>_rX"z}4Y|+>7tW|ψ@ ̸D4S|O'!?Ń^O~ vo}`06\}'|ÌYklӑY?ʹB 8ʂp-yn0} XoW!ǒjm@[P~εωi{C_{<>+V`;s ]*t {CLk@R (Hw|8fX\'24]3IOw=t< o&û-пv>OW@/$cn wb f1]fM~z]6wnq|nrצS8݂@ڙ(I lC8߅T7Vqubˉn4JWe9w7qyR` ?!L_RCn I%]}XE6Э+A79M6{v]qȿƉ:B4%T^kjJ,wlۼܐϤC_.{_1pw3qF|lj[[>6O :w9p):ųNc,Sl N%Swt奭}BSMBt?dʧTTEj3z +8m׋qZhKl ,./2nbL+dA҆iK NoFKwswQ ɠQ$2-ڈOmd_2p 67ػ(}̇(|,o7c҂FHSD~ȁ#LHr,l;@COZGB_Aa;q5x3rwsKyZ^*6K ${֞?ЫaY;/jy;Fs=+{Y |auLn'+Qe=Oj{$O.]p_}+gu>ej'p2;DkjUHCd,AEzHa)|A?XyPFB#? M`m_C rWa@cj04n$w0)\;MPt: I3DRq{W:&' 4qh SzyR870ny߁zl%hTz;(H-<Xz^חWCKO=X=Dmٰ?`'AUv ꇾG xYr}g"H}IG:ƒ851SFE+ nxqԻ4a;;dņK/5g)=S7%IǷqNB`͢4 @mߣVKӃMqm]$88D3,2&)>"T?7a 25 '*yJsYw3}uq z^ 2ԻV\J"؈:]DM^rﱻ3^QOk#%Q%Ӈ;fk_wREnNYAj5L_ox/,sumF\>f]#*ЇkVԠzr~hNV 3; V/ʀ8@m5j^=nF#e *j(>XVe+J=#\_&)n[ˏlU~H eO(V"ͤhRܯHA$(3 \Cc7sL\̕ѱo@dx Gjc)n9Kqsb#x6P*oshˊtKJ"Δ"9^Pf˦̎W쫧k0Ի#hs.E\) 1^.`Zl`9n>+(lTOf+1V(ق8ͥp&IJ ({ *}^{ކέt7BγK" [?P.-hT[먉ު]6L`z 4V:[Ma>XK:&qyd$K_'hm>! ѱF5P]6lذxŦDt]l t;S <ۨ9j}\uycZ*ހå:uR $L-$i#Gr \rh+Tqʨk+2KuMDۂ Zt*ã2Dl:aNUvQ2k#!F$~J{8$_)LIga594ppSf`<70z>)Drj\m蠒yRpiDa [)nܐUn +$}J vG%ZY9aO*HOH9Yˏ 8ŶN6`qu}6pǮϵHYW#36hc8T=|Z7m1-GO"ɚ h}]:8GǤO6Tۺ긠8RdzAP{: !xe/w C"]62_NIsvX| nhAIfܩߖ@kD}OyU0üoA'jrZR?ɳ{}^|Ra ÷ ;)c2I97 |Ǩ(*Nd$i ?1ͫ`k01*.(DA_}򑑸(G,D4qFB\tWW%yAŖI$ۚUtՀWM Cr/7BYnBxc$P#KiOCw;wtDm.Asl,A 09 q^|.a_U@#&0.b^!POt^2ltM#|0 H}0SEOP}͇YiSFDht(}MC OIv:WiT=wX^`QN=Y`Rwq-]‰LTKQU}z%}:W^ePE=11PCB*BN נ_yto@=C3cm<UEa-eSWL eBQ0|Al~T8O7lBK"W+5IJefsÁJ| ުqy|<TM< ]7iGa <#nx^7F?IL1x_#Z"e,m"~8l-\Daυs2.]Ο8A49 u,.ʔ`x< ߚ^ޚmyg?Po[lWפZqP4O-O ŗجx=G:پ˛=֍l?1p]TO*׷ (9?B2*>4vNW`oU01 οD(;2 6Xe}ūVݍpfR 84X/lgA5$"LwWh /@Uᶫx\w71ܛLCCvaP>{dA˽R7q#C u@>.ʸG:^f]!d%g+ņ'^ݓ+HFci"EzUҹʅ0my+Xš4HEM^qwAΞg`1$=TGX" c )3!l"E%}_M!6nwR|I܃cfݲ\fz/W Uzv9և7VqR KΌw=hUc3Sψ5Ԥ_{CD?O+#A?${ۓ $$I? ПHП$/P usP58W]p[ao$J/Uamb1*(LZF!];2PlKaoz*^?յľ 8j~ǃ׺]P/2I%hMīodc1'Pѹ-2ɷ 7~61N+8>ܲ"C+Ɖ7Ts.w!r+E[%"_8~.hIB1l7֡#@Elp^k$=h\o$:3j61kU7F2 0/WKi n\cj7z M#K1mh^J(sj*u/&$ovD% mE IX bR "REE=.zaw!p+n&U O7W8l:@BcU&W^)pGp՟n\}|m Yviހp TI0Uxb $&VȀT˜S= +#g#mc#YF_6xF2mg~JgQM֠?\,IR. ˱"] ЮQT ppjQiq1'|]'浐ѧu$,9Ixf!L$&ݫ$Z q([HFZ Z-ZHO~}v)ݏ?GO*(!ԂLy^wLv^c@iy$oȒ{_ }q ]]=Vp˛b]CsZwXe ]P:<נCsM ]0pvήU]nr .<l>݉K˩Af:nIbrҷ^pi`^Ѫ PS7܄Z;R=S?)Q]qZ-IB_Iznr^V҄6J+mP}EpeI-ɰŒUs42Ҳ4,9퀢uy 50YV`k#4 ugV\z4nF q5"kTnFbud6$(jSs .-o(-2\Za\i!x6`|V*E`ӯ*3\ezy=[ٻɣq(F~cu40h &w7Lk(ޥơ092[*J)U)L<wD"C%V8:q0- 9FAÈ|r w5⩰ !n,\c̄ O>VJ׉ɑށz Ht+'7$"tL$pԏ dUdБx.(*Y Xei+MzUuXM]UN9k8_lS]zPIip^&Ӵ.mt^$rwj)+,Hb ~1犤U=֦BAoq$^@3_es%0МHѰNmX5\w9;۷v\oANZ=bʌjq~a!lqxal}roqld>6t@vMwS V50{-U l* ]p #{DN1QV<%/ZQ[L6u"o=Z0i1'I?¸xʸH>A>)e2MoU|'2'5[eOj<\>wAqwjQ,H&VP}j/z zP bBKͰ .9k30u^5M.8ƫanMA1Іs@L.9${A1"Y8!pr}Z{nxyMCycȫpyVъSʂI{mpi!;93d%nbU]僮N*?uQNSˇz+v׸v\>[рFGn8E-)p %+s)b vHZhn"KMB&`!m}p3h~prh?äe(6H;m@KZgl@rj,ݰoIm wu6(6(ZnN aXTϜA %IF$a{aHA N2O%V-EsKJzŸԵhtN{ Iop iS~.Mxp:Hv)]E]x+읰dA[1;$W <"ڼ" ?ryCw*ewa< o66g;q}ܹGsIxU.}Hk.Caлv^s 3VA!XƬ?"ӽ4Lx%nEI$H]'{.!Wػ`Ɂv4:%ZEIo?DH]1O.Vػ`Ɂ,O::܇vشɀ669,I>٥O1"YHEBf^75nmʠ{=V^ X#"9\"9IhOGetTy 7m(dߝdϝH "E:UiL*X/ :׮Nm>@} 3>u'WmKE`/{̀{F[P0G} f+.*v@1Jy^\VU^ـ']˨鏹$h*xڳ8A{&,rl]ueɀЫ-e<q痕^|3 j3V'd5!g?Fp]шG CT5H!=LX!pq!N b-S0USM)Afnf4*ä"@t{VC#:Sg?bWF{"Ǿ*\̨Ӷ+@GyՃXw&SMhN ^EIj\a`sZE(![\/ eQ_e1V^vbF- EY|o5< 2!Yn#X=Ǘq!Yo4(߽AQBY 8$j_rSUA0&@7&\4Cv:.T{^*M;˭kCU$ϜhHl,Q+Mn zQƦWaht>n"*Sv*D"g}U%Q?LK ]CR 5@Zr6i}kH p]Cs.:F!8R[(\)Np$$IB&/QUeTIQ"d( I(dUcБxMx؍l؍.Gzs_dA&RP;tnBPBXz6$eUL#‘wFڝP duS4UQD8|0]-)gX4 !mŀ$ܒҍHt@o@銭Bx6V HҪPm (yH]6;!~86s5":R5:25D|ARפg&oG7 k Lu7'!IŔr$psG-BLLMDXOfpds9R9\SJ|JHLՄgYjGR5 A u 5'!IRR- He%qҸτ.$ ,sj&:#YI,.Iɱu $'!IRa%sdp7uTdFnJ*/뎯#]cЁ0J SB`W W%W'&j#r8P)s\TL9.2Wd%i&"j -Gb D}'!IRtʼnȵsXqn+xф*mIJ$, 5ci:8(@qQiU肸n~G׏H*a "}ÈM*xF/a pN ^(3l24S797%Нo*|'s(\m _\DR:EiFR*?+i#BXuTNB8{JVPkŃ;sH:i&?,U)7To0.o>{=|=ˍ0K&fi cA?Wet~ݙ^#~0N ldAG~۩b歡&k+PLS'!IrHy&&u-[f+-GrHr钛yO$ QLT?ӖS۳OOݏN?>mxtRAIU<2 :A'&i?FPރt8V6-s7U-;nي=vG'R2+*7-#6`~W.:+@huQ QGaYSiƎ] (uDP jׁBۀ]<(*zYA. bOI z{./ YJ\/U;uёH<6 4)}ciObo"B%˂z5I8}EI(qCX4B m:0-j$h)L)<Ą>n/LzHũ+1<`He e:S7'zD/tw?P€y~aQPINGo<Y9EZ(5d&uI\Y$pTBPFKgYbnҷ"`Su5Qw? Vsitנ%DĄ$_GCNVz7r ieȅX'rFND+M$ՙANy?7ysB YTG.rrÎ 4XWilcy@6`E [Ma 7Xث$zl$^zl+'CcaNQr /U+YW8סM5;fqE@= ?xLbr 2GJItMu<*FuxگYF}Q9} XEa~FZcZ^pqJ! cB>DBe<3v)/ pʝ;KA{Wf+mS H@BbqNa?pJgm.DvgLgYdՀhÕ|rGfD`IzU;QLS]}DAÀ-/5bq;"#..TETd˃ǎҨ-Հ][G$ԨKo u1h#Uh}m1t"thab ;Vz+4R+D d?{DKR 03HBrr>6&D;ûFcVH$R˼A?#H6LC3jcʡGoU:[ڹVJE^f _N-UV]wnU# ƣ|͐y!58'SvXP%6Q9uU=6[9֑~Ȣ6*`q=}\@ccu`7QcxOPkyy&0ap T [Vq3 s?n2dY9P9A/3_Ԝ\J$W>I_]Y8-?Ä_ .삪'uNp!rJSBc#0ŀK.k0g|6o-,^s$r>- e87A~/2$z*B.-Uuq^ qd' GXP!1CQ,~CGI:*͞HkU4&JU$k f>fɐB('P/ч$b")j,r07tNM͉t/)thk=Ú<0Vm\o0ɴ rcl6NM`8≮m/0As"4is^bj0p. T·2~^6sAqV.hj*yT8:2U {`[D/oCsʕ *pmE++͎ULG*+s^W)H\mlOVFI\~7^"hx6$2awS*>[@3㮕M^ 3nZ h=+Sb6B.˯ HWBed]_e\rJK0Wx lN&>]d8#{Ifܩ739S8P\l3<D=?z~sEOk rfe"NC&2z݄j~׀?d|vγqc~qhn)AdԩG2;?t{v-_z ׄʋ&Gku"s,R1Cqb@ƭLʡR/w v#@ྉW!ZmMuƤpVK5WugW>e">y !3 FcȻ VM8fcĨu B2(X!a׼U/mgD9H?x{H-FQpiY~Fa&ⷕ6Y[P 8mŀ$= +-Dkm!];qk7h!&n1Wͺ(T-{(HꨖH}QC% ALTVO uV2\i*\Q,˳49*4:4Һ-4 e),Hb/^Z2p}iug- #k*%b1bZ; Ǵvź޾Lk&$KqT\(m\r?_v\>7 >7|n;;{\cdGrr*!҇:N ?$kBtGu A=ZATbFZIed4 \Ì$s.:JaS ˘='n&?v[ &xA@zajL]q؃*aX*=r"#=r XVGn"rBz!NZ+dG͵vk-VVaE.Nw]chۤٻM/H]eI{ZHZ~'^/~Z賅[([믛:F$/XMxA& obmf&ȥ!Zth|sĎR-]QsѾfk&$h XkO9a; udْkn肕ZXFe h#mm nnGњ]X"r jׁAE In̈́$w豥<}m_,=GL\n=X\Ey\#c&H;vv#ouWP:g԰+c2j 1o RGQЭ.̛SEJ"nmo"7tDw§Tk;TuY< /.\¬rͺ @s)+YO-|t3h=)[i13qO*qH(hٿo4 -E[)d/5Rwɩ1nSccaFqŦ|:գ tnZgq YAsw0ؑ\B'w@lQ5{00-xAV$y r#"}R4%-}&$u>$tNic$C̸x>`@܆M%:! F$ OPҧӆ!@Caiػ%HhD#T7.iЍKbWDFMnDm bNG/-m V6a+q8H6 *0x;iTlxԴ$ ]dC{Wz]Bһ4;>&7M&7MZmr3F= ՐF6rA:94J'rMbwnނKy3yAP5 @EknCb0/ ^s5A;0*#ðT6":26:r6o-!9?D祟'-h"v<>\aaC&%f8ju=|cǣ~:BE%NC*U[G@QnWnZQ<&W67 Q]w/+ $]*O"*' uZ*p2衧8 F&a ^XeBI?|h)d)…ik ytYk \8jM!ҝYxњB.[ /[ScUk Yluk˒Mk |mk ,kM!)5 [SH`5ŏSk [ܚBre\Қ"_[SJo)$ik Y F eh{k .h]r9FPV"=f}]uMϝmT=DWmWԨ"AAqQ*H,6_ (˚qswmh+p^\9fIQ/iNܼi"!kݝeV#e=ltt='Bm-G4 y}VjDm@[oDYQղcβk:̳,d]]TjEϮ^{Z*,W%6׵ǪfoyTЅ1>'Ԉ\pu9@.i^GWݼ. t'PտwC[w u|WR/#ПotI6*˺V'${D&e\b?_?杲֎( CSa{q B4(@Dٵ7e!aɸ,"SGXymvG|uj+Q5'Gz| i+G&ׅ;<ƒO/_xc~!QP#YQY?Chc\DlhRj4UU+D^F4wpSE>t:Sp(̢jDAh=/Ei,g@+\Td4>?pƻcI{?bUr) K20X@n%t%Qkf(o~һnW>?âM!ն=eݤڎk6#]QTܨkuCQ_fb6TI|Y(?5ek @66e.[7fl6;uhl?i_vz;F5c]Lѧl3.[+p {=uQLR+g ke25WbTip2N,'v::Һ# KOkoO[y)˩nRJ!O[O+嚹4͡?׽f/ "yJ*kWY$j| yØ AVtr![QS~g;婿)7b&>f`PH'X/ZscxFLl? j[r]FtT)0xaukPJ }%0@}͚0^_$\Yy#ƁԳ 4 꽸Rӈ")]n*𣉖Cu$]f\yQ;<u=(zA? ^6AȴHZ}6Rruj#\ ⪝]`"5vv(yJ+okq7c%|1\k̯(2U$n[gl J=<ⰭK\܁S廷vq&H&pxtNhщx'pzPI:۩4n9 X=Ҿ{<ƥ\V[0CnQ!wgUWȊqd]MѯŝKS*r8W.^C|4_zP>x&Խj5TlߊosaTpp!WxX:17KP<})֕qd@6L>a>Q >yGpB"V\ŘI5IqAb ( L/' -b= cc}&F̔{'`:(+l<"Ey%~h|+e|̳ z#t/L8t┫W!K NDsT׿N򝉡|S|>?\>%:7Ђˊ+ oe5$l r_9M;IuC%~b'|mmOcXoW/%CQ'^ׂ^xF 7֬g ›zM|݈ptİE,㊆OI'fهe}ķ7cI Guw=\.iy }_H!@}-z]CȸU4'3|>2gnzY>3ƣ8j=r!c է&SBY%/@nٯhXt+d7Oߦ~ꖱ;2VyRj\_J}N0r݈XvK.^[ǫw9|QHUQH{Dj|1OЌ1LT$w gr1ܾp1bꧼ$wfakRW#Vcd ꮷyÎj]3~8C\{A@ObF`և\B}A R+'"R1w$ͺ[It h؅=!Kγ0u~IїX]SWMghʤ nLXa$axI@\80^oz,1`}h#Pk' 磛snjD(|I j9,u+?m=_Q=qi:{_z5_0Rp7zU7< G 2Io a1b<__Z$zTP#BgBVz[P\E}d|. M|.PS!OC|a}|C~?]yCΓ,~Cq3ԭ? Q-r̰h!or%LƳU:#o&sqϳI2W\ܡw 6HO d?v_ԃ!Kl#l #L0Fz3 pl`;R [< t]mޓZ1X98ɡb*[V7aR2Iեőz^ߓ̑y$VQQ"w% +=.s;?xVY#?^oJ2%ZoR73uYg;#ؕ#6(&l_kxnG|i3VGbkp$> ISZ} nVfyW# = *G8E|sQWHTE}@jz漮96shU@JAlkn@ .0W`}[(CQpƌԺQťvuoi <`$SWB)-|$Ugcrf4Cܱ%}A(u/q2AHuS>f %u `n~Ac<& Psf5  xLq.v"#Tч'R =>ʓijԧWQꪑv# ISR[Rzfp3YkRZ'qK1@tMCZ[NH;bV @\0V]9Vƥ!΁#X_iӐ/3([ CҶ"W]4Rqf@2sAwXKz O: o Gi$h{̈́߉lQFpMi\XZ7Km&ȲK*b αük8rDQ}hcLcx]!&+ "qI2T@?SYq \.LĘJ`d:'NJ:z#|FIgPNcţߎ' `gp y|!ő },//{b_9Ń!b0pUNOjdq7IH4)d|GC̺n22}K@+@<*TaQC˹1nʅ|W_ θ:)˕L\tZzjwH{ʀz 6ׂq>*oz5C}rc}Z\|W`~N>G)U]P:H߅“Q2Q|M6d6;Cd]?A*ܦz߼~$k+Q+q">xxS^MqDy{ɭGǁz!od:FG/,ˮtCǐ[{v!kH'^dG&ix<޾|C|p77U\(T;` .0++2(xc&@%޽ep)#}{S^/øz'/aiUi^-]| D)窞[ݸg)&4ұH@&{>@Ʈtϫ|Cr$5 W M"%R4%Q>68ËGHWwW$9z뚮,]Kh~)Kg{Kp {n:lnQsʲ/{(gn\Pb.6NM;QN?ZQ# #7I޻5 >91I'FQD Y:~O89!?,4,M:%ƭ5A}T4@~20z#B!`m0;(h,xI!Y6@6 ;Y2Qw#jr1˭[Mf\ < ǨW9S웍RI_htT'/&h+W[v+v]$˜!FwmAX}R2/Sf\u^ uw!!лP}- /ёhdÞ%5S_{v?! ʞ'4o.DieON%)M2BG>[AH}q>p  l֌T%UIeuW ]E9, N~H̍[%Dթ42FAQ< ki^*W̵߫R& _e .w =^_ N)1 Y@st:3vK%s@xfE֪J8 aLЛOFt9%/VFLܐ$ϺH|z}sruХ)ӓc9d"O5@K<΄Y-l_G&\0'Qe+QO'&/KzK 1N_y\3Ϥjs@[a?+1oc{ 15^)}Ŀ|-=dpk2d鎰x{d6GXoIRkv ;`1Fp$zcWod%y{_lꚕ "`xpbWx#iDF?Hiw"jPNUB~%>*dSPT$k?HJmA<|JξL 6^@8mծ+* A-;p3蜺.eɕj +?mQd F(Bl9-Y\@TtS@_?PKfXy("pip/_vendor/rich/_emoji_replace.pymRn0+lg4 9ځ@+G$ h]Rڎ (rfvv cW{N U]/X%moܿDr随oL+pG2c= UgU,󈩙vK<ND1_ ON\`P\Gc0H~֒1<ȭ0ѴoUCދ{r!Zs *niC"ŵFH _Ng <Ym ]9Ma EH-"PKfXZՌ7P"pip/_vendor/rich/_export_format.pyUMo8WLĀ%yӢ[8ԍqb 0D"{I]'YEu57j~}y].׷! ^,>ߜC"S6vv!8RKJ$0"'r^L7Hmrة̚'ڹq1*悬/>5;lnKԵ6z[:ظkAG(tcRHx=ǟ ,Q?YG^J\*e!A ѓ1iA%Wڢ|_AP Kq8K! B#!AĕD4 %; *i$U"ke)r=,?  ,3/\.HF$nU&Оud# 7Qk]-Fxk)I[KhJbvxٱk{KV]B(Ͻ"=Bo|Fr?V4k%0gQOa)?=әiv+Mj0h4/xYk 3*tig 3kf"_ QȂn-EW>tTtifghFbj%8.148=N ?<2i5cF;[FH۾2QhAjŮEm@Pm\[e>4k~ dSb5+BM}F|2owy6uvҶ!0YcT_?=iuo$]^;=_֩ƻ@ ;pZ,g2sbH|~>_ܞO?PKfXIԷۛ pip/_vendor/rich/_extension.py}NK@ s&n`!`a¤4T^@ :,'hLWEQ(:Ja^x"R*8_&$~XalI3#ڭۉRK+Z+^f8C<o>?~"`kAYm.PKfXpip/_vendor/rich/_fileno.pyRˊ1+ًfLX^֐fXlmd #G *U>m C={-}T{UO9sړ5֑YZg"%M珰^ oi$@5 .x9 що=g:sU.! r\`X`_(YwrH'`3)5?-&4H"sn>B1&]~~y(^oL!{EV5%.MJDj؝9$MPx5zG?;/eJD=a{Fl3͞aj-6dD6vi؜,N@ A'uP\Z.:gE}?xȿzc8+; PKfX~t %pip/_vendor/rich/_inspect.py]s۸]<ag|w57Mqܾ44$m d 2 5sD~cpTGeyv2ViߨZŒRb.rD3/g[ .w6f{(E -RX:R^r\TjOu!ԍ<,|QɘoE7wW/c8p_FV$/,_cv/NSAm҂ (|2b(?pbEc6O]}r~ӯBK/ _D#Лjq;/vB&x1}N,ˋFYox}6K&b? O ̔, 1Kke,5r@){FX[N}:J$ BiJ#SmX- Q*I Ye\ hvK~b+AU>VRN td_DaJ!*N DYpSUC,5`,%{"#Y(@7;5ԭԮQVlE3oJU3!^2"t)Vӄ-@"ežKX˩mՈ2xn!gբZC- \\Da,AtXoD[OgYEӱ,e ˜SBmDn-)#?~-Lj %eɐ}"ⱃFWPx{g1fga̐g(KO^01ǥqXgd6HQ4h,Tb b1ᤥq+%˟|N/ӌ(Y&)FS2? Vr|Qywd6A]wI=ZNdaS40 MD(M-hD|4bt|a` M=@V@:$*nc\M@uZSQ{0l:8?@~O@چX>`w;Hi6f%"G^J5 QP4r/=.j7 a}4r‚/^nٿяoj.P $I .Tc8LU 'vVdXkZVm2?/Ma,L|O 3 P;J00=b2+2ݓdhB"dq_'vۓ~zΖ} if8?_Qܺ;-"3ogqY h@Hn.Ac$`RADIYо3b"aY8<ҹhw[caS 3IT#1s4t 1Hb]F]dzQVꗶjȰ0 *DH/ʪuQqߴa7g6lв)v`+ @ٶ$f[Wd6X䲞G#>@JQo]8[j.w)u<z oe'E~J7gBt Ck8jfi BmRXx"[M}N(wQԬ/<qkb3?\dfOHF箣R vxߡ `k$RU',s  *]* swo>JvaV$|[Ͱ*xgY]ASLRk3>? ^=&hH%^4pJ&?/sWQ)\e&(L bd\MQҠ FTwZ_lC=c"`y&m}Oq{FqL6us~t.Y\8i)u E.uP oa36`L`3b4u*|f:M}[:b@)lsh+;湫5V=q:mu^Ua53;Vc&P WqFfM>WI0J 1&fNmJn_ۆo`^W[ ZuCÉ0NjB ㅮq*ȕ2[9Ă,`+Kc(h{t^L _"`7Q(,"^лzI& FOb7ɛ5^ wɬLߋ.=ѳW:_.zˣ1w=&sRrǦ 錖4`e(O_g - A$X,supI H NWWx F}o4r;_^}L~J IGVm#a vPe/ULwUUK_}. CrZX03zM&7?a@±PKotPWWf,4>+`tgPxRӱ{ʏ,N>^wMvWWON&$m*O%F'!VHN >o w@W^BEژP(r OǤ104"˱x7oGLh/4"&Q㱉#"ĪV!N^{5ޖx<:C3z9&{KjKuyCPKfX pip/_vendor/rich/_log_render.pyV[:~_"B+z^6PTdet&iJ{w%mv>&oe]J*fF*ǛʬK[%ou4˚mܼsw ^|ntlfڑm;,˺k醉)-͜7z+Չ-뤢ܫ. wN ڶWip!kt+l !?*:Z؊s'.[/q7PKfX(kpip/_vendor/rich/_null_file.pyTMo0 WX=I㊴&T ;UU;"Bw~i95{γ= <߭iP\e1k/&DX`y T %s!q/SK&OpkR[Y^a^.:8rPCDZ6XTs.-6|S1"`LMA(7T|= \PXGb/hxdakw5ᕙJi(Y]-Eo[T9vU}{׮pKl=!Ȕ*gŏKYgϦ{4YصMƿ4q_1D;c.i3n?ߕQٸ^dyGOYWϮwQccuem7e^]hG6ksE]Z+rOG!K}nn|)L[|& 5i=/PKfXW-pip/_vendor/rich/_palettes.py]k#7F+I$zJl (%76J{ KJjQݬPWtڨc;'h4I-W_7[{;ǟ7۫nYw~w}x9z.zzٽ^n|z|try~k]EUkㄶڠfU WxjGjX5fZdf\?-,,2uf=6tD}b'P=-lVT=7lmW &V6[վ]>mwP{tiܜFOzuX۾[wWϡ{};Wn=/G˛ۛϷ?p4;J8rȡn4MZ`?-]̵ 6-Jb4p?wqai|QsNn o/_|^=#%N^Ь>;%'7֎ kzO~νeZVM juEP,V-[(WXmhn))T:8,$z,-44jhЬYCF]FFOBRaƴH5hXrBfSM0T xx( K HRC$P)B1\PP"@A9@\"220JLRB9Ȉ 2Ay[aC 5#` D D (rAt(JI(LID"&%TR %TR%Ab@HID+bRp%Rx%BIS4Ks<ֈKACS|*A0`b0_@J2_+H  0_JX %I D?K2kąH!(@"W #1PQ)|ELJ@JJ2_+)+)j _I _I.݇WX#.Ed=y@<&ʗBj8_+@ $0)Qb(_@X2_+@  n\+HuNo1VOo[6!tjk)ZJ'tnk)ՆZվ~6Zes}&}ܧ2 vluYLf貓]eC`7`oPKfXLpip/_vendor/rich/_pick.pyePAj0OqhPȥǶZJQU"jkݕ\#&!3;3Z'< ]FNȒ2&Ƙ#9ܯֿ(vhyDyuy#HgM>$@(MLPݭ,TZbUFpA ةP$LBojr?R.1Xͮ8 ,C䅎3eTP7W,fפAoh e\PKfX5+_pip/_vendor/rich/_ratio.pyX[o6~8H&o/1+v(PtCS`AesDM⤿~BQ;i0`X";i6-{ި5r`d!˥jJM!oT^6w&YUptdnukr /6=z9ƶ6BNvզ^%lDߵr zas+* E'EZ(uQ;rvv[-{BsSi.݃rNۮ]Pf|됂kS7Ҽ(\XƷUi*Sve"b6e{hg[Uo @npvC4̭48Zv={&ŘʵBn%!~kht5Π@k`srJﰺ+2PY]MvĬ] ]UhLi8VJEslo(z s¸c@dFJfX pUJt ZQ0O'_M;tc+5Z!XT V0ݣԴ.2ңFNz2Ckޅ%{]1٩*Үbe'2$~GB1EThJev* bs@ב 6,'bJ]t.t 46'T4%>7@?HZGJ҄  p]dWŎOz0s ;,1d4,y@Θȩgy@gY);V't)!cSgLkt4 g.KKB$)oQx&&o@䤦X>*Q|$q$ 򿏣V&@q74&nly:ҿ#aBFh̶C[m)-kuJdc*vMc+$Y&Ś٪*3{?r2=WH x6T Qr)Og涴Yt? ;cPqHrR94 \d'CpŸ8ut3HTwKaǯ}Xq0akմO#'~D[ QCP|F z>ʩ;/V%apm%~ Ys䪃]ԌHa3>r<Y z.y~˛(0F1l;4Q(_'粇v& AT4Yo_wz.Wq/~萼AQ&??DZ٬#Dt\fVvGx~r! g &r/Ѱ~>3?N&J0qJ4Su$P馝wU gW{WяZQcq}L $,lBW4=)YV蔘]_f6:fIz@ijૼ$T68Kғ$g :_p^ ~ i=Z]ڈi_6Y{ uDq\1o$u#>/PKfX1T_Mpip/_vendor/rich/_spinners.pymsG)fIq$!7ZaXuŕL$Ŏ=+ae$6Ϟ $*`6a[3=3J9stt4 B{#j:dQ67dJݗ-)>#ǢRTYwh#g2PNڛ|CJ~2CYY~gT{RioJfXfU--YiH(}g)m4'E)9$g6)Ir4BSZ_NVjzP$͉un@4klVK2eJZrtXI977HD#ԯ)NTӗi57$ژ\FM2N5JFY.euJVKQ;/X9s4K[rn~uUxGFRjvMWo4GY&󖖑J**_,k+pT2_:= ׷k`4aӯq&;%cR2Ri̤WYJj>s78~&0Q Khljpx%"4NHcvʤGDJty ڊ8ϳ#vxî^+#]HwyHpX>0=c禥,OvE WGo4Ú6xod4)'&Xqc4+/qI=DMDOg$MYR}kOxBiKKf~- }P:B2)*}[U>fy *̧0w`~sM`^9*簿5@}Wj![M k0u#t C4i>yP0M%v\]g-9^`NzGU8孵{AˡsKy-v/\o.ĩwc= 7w`_b]>o5B_ s f=m'+k2&ϱFa4YO*2.|!%B)[J)"!ᜐ KBP!-%B)#Lބ t5Ԛب cB+>&n)ۢ>D%n)!SCǦMq煄AyQ3AyQ3AǔP+L0QsOE](-Knclza>r, w`߅}ﳵ -Xamz1'uo~{ C۰~Lv럯s`km _]wUJM+UU'}tS~ߵq/!}WY #Nץ ,`iKKXZ4aiɪ#)EьvjN%?c|%-E7y/:_XSV ZٜqkX{߫D?YH#-;$˞:ujo#0F3 \y-lWRh?R295)}ί~/ \rΑ$ԥe?i\Kf@ }%S'%.G>9Ҵ(EjbyS 9Ձz?fLk855|IWiqƼu u;*>G{˨rz0װ`06`ܨʙd`Lc c5wR$q]mNSQN0*g->%w;w&0`}q{M˜qx?nq85Tǩ)sܺ[N%V N70qjnt ucW0zJpo;|IAɕk*]޻XVR: <5ϙ=&F#;nZiET֊JRIYًԎP {̹iXzX,=,JT,Jb$B0^[̳sR+zgcaTR4EPUb S537uvaXM)g\өs5a-{ADɽz0Y>)tA^ WK 僵i}xsWRZw%}X}Ms"H .K"HH"W$Q:ɽp{IӗK]2=S>a:~[C t }kdZyZ#hVY g^+,˓2K -~Qq^Vp>q?'kEbYM^4QK`5{9`Kc^&ˏKk%{Y-~ d5 f5 \5{q %G;^UV«_PbCƉ/ V 񥲂q/ka󪲼pK{%X.Y׃UxuY׃Ux=Xs~,|ågy=`} R`|끒(9x,%칚G4o>st}],_TxM_ח^r> _} 7}&G3O @oI?yvSSJ!9ǣihg?T?qJ<ꭼx7KxrЃB\)G6o>@=0V1i.A|nχȩegCv*!8.'W9PEb1>LYΗ-Yyzv|<>N.^,fz2v`$%{9+Ԋ Jxy"?S B ]Y# gv>,Is|%,רhHrj \|rAe ?Xg0 p2>_ܑI$id@O&K/ҐB>'/ِ~S7Rԥ{.+!z05PyDU EXH^$~  ma<\Ć\硸*fǜ&/JVk\j@G5WOjkk&<4˿ᖒv_`4.,𠴈ˋ%;wv)2 o8w`H&jSq=mɖK`fgدw',; L6"o+-e+D :|39eʰH95NSqe6-*wv~LCʂa/e'|6!$AgM(S6?ژ!, }P`Blp4cn J/4`WhG)4YZW\Lao|PVjʲ@pVf9lWgdFwfP CI斱"+alAd)'JD[Rd M! ίƾOD;mf [y+g@0:xj|㵪@7!bK!#CnK|ra,&Fxü5.mho8Vc.IO $qcNT~_l F˜툳%?\]@w:n1#i  c̓|AP!XIsv^k݈(},(]Ŝg(IoZm\VA[Pa1 JeYg Ӂ)J)qIqRb|\mҰP!u-QG3SHEJab< ')h= aÿITbp$alɱhXLL憦GJ8w ߧuw2]v{ƙGrn/K"7yfڦFhJvs~-p!mµ#Ž=;9lʭ1[?$](8.eߒ9zT#.@BMsM@=PO%6v)B(uOKFvMJ%z$ؚؗ\bz>e{?wVOv|epd7Cq@wQʊѶ 9Ŧ9E2,n 0(S7G+I] Iei+No8*uǴemG3ZcJ9"ќ%3QBRgAENޮy6{.oc͒qf-l 7:kllh{\PGFCFC1E`jl2æ-r'ER;2j+P݊Nk`S4]wn;&h;]mo8|AhÖD!Sf ;BiʀO꒺94۞iv=gmvim6fO\j+hfq6ExpO샿l.Fb׭0rˢoت[ݞPVYRsZQ[(V2"07 #w+xʬG%?-iĀ /*Q~U%Wֈ^*1Y[C}YT:k)w쓲`R*rK:wf\9HPTЕE&|SF`7|:0˫h ̤oXQG^brCoMnY4l M΂U)Q % 'qFr<+1jzՠ%)Ik'W4֚+ph>E+ d-ӯ9'I DD:*al pbr& 6-vK![8vkߡpMxz:'_d #^i~Ni-_N5=%ݫ54R6QC- !dT0tBbiCWXm|AW/\OѲUW V$^aa7쐱,};.yX1XパIItV֥#'IH"#E #FvٍWHL!ms O̊_iHƵH5a * < 1 ޱҸeI 3dMQX֬1Z ">AnmK5u P72ZiS0u{]>bQ ZbHywLt}mz m͘0ol"(,֦cI$5ߏgb}wǍv JG)TVBf'CV|B?krLyU8:\EyX.SrzR?Y*20H'uBYG˦W5Bc!?VT MU^/!-j:$ƥz8!8OJ{Eo^+֗ԟ5GdQ"jbˌ򰀯EWZ,N V**v`^ze'7Jm_RŇ (&Es ZU\NUK4(JQ'N?U#h-)&šO%`҇]>!PU$PB/8?ۗ<]F >u@t%p3k’ %fW+4UeLJ#b6$hi~T1I4;&fAI0}auE]ڠўچh3 A|f> z6>:Gg''fw +XiT& wXcGkw &辄WdHbWθzNݥlZ!Tξ@]UiɼJ7sb~ (@V#v%mr:6)vK{ ojd3 [VOQ_g)nheGR!PY}ݪO ^T=D5=Ό-ܺ 1qM$"q'wPy/l{3F;ʱ`KpJ(Cnfb;KMH8Ӧ.gL?PKfXL}pip/_vendor/rich/_windows.pyT[o0~ϯiD &nT xd5$qd;*ĎӄъIu΅r)J1҂)pE_WxPR+`.;فMҞFQcgơ^ iГq+PayqBv`t5awT(g/uиv[7uoޝ„t6oGC(X mKiG-nû,ymTs Vtˤ _I80P=oPKfX= %pip/_vendor/rich/_windows_renderer.pyV[0~W K77qv#5 Jfmm/Q90f4I pf, *XjaraInwEٌ̗6Z#ӌW`}1qk`ZP(eB D)Dգ`4H*)oMu@0"C)ED̜ݤLZ Wv]i|py4 sќhWW)I8B#% RblCwق(YiW9 XVH^Uv2-2 fdFJB ZSvUS&>\l(u2*zLVj5##{|̓p*S9>}#۝?tSTa p5uc9xx'i-\0z>z~;(l@|XQdrM=ϓ!"ЧuyN7WS5sm2l <(̤.uD\r}Aq5nz^3M,hdhJUnϕqG`t%uȢ;w{>A8 ow2z^rHO*OÇ pPcvwTx:S%*[j6|ƗI qAa IvH-RZǹc$ d *P.B&>x mv4v57n "9.C@PKfX&CL pip/_vendor/rich/_wrap.pyVK5:f(^Hi $,8qM۽s@qArq  8ӑBUynZW_U&eQ4(\(b2L86\vLamDd7Rd$~G[WMB)[OH ah. zؤT[;lAC+ruy0#svF/0}0x0!J,< qC8-!6q1u]ħ I&a9.k7 ^yNC;4Q'DI{M?] t="SN," /5}·) ."ljnϠ\nܪY|7k[}yb4 G=j}gM?~˯\k敷};գm ȃÀLdL`Rč.y7O><~]N,~-GӇ'_}_r3O+dp\>,NX{@f=>B PKfXkEQzpip/_vendor/rich/abc.pyRN0+VH%đn9&^"Qٝ4 S`EaF#ΕUKJm64!{Ax20()e){9^tI@eGPKfXcpcɨ(pip/_vendor/rich/align.pyk~Ŗpd@+AP1n^ubn5x{Jژ/){gJ' "ȝk7}72fD#jeUkvk^Ǘ9urc/xz$aoJn: 92[-|"<:G_7aJv+X .!~ۆHۑu,,528yYN=>at@GiglbxTm]WeRHrG6ுow"y i}Qt=B7j;!uMǑHW{$rP2XЪB_{f` ipX.$a;*PlE7Tzʏ-#݆u F-,Z}ܼOPt}}b1u5NRs^F*@:d)havBYolC;Fp"5` oic^ {^\[_ epdJVOcَϙ0k96\a-#\'ZaՕ0VA۞ Ks4a5(97yW$ @"1>z֭_0@?g!vFkEй`}%}#&+ȃY GC_搤Ğa`? ނ6%ـ#Sh|*yz+Q4.2_{ʵ?ImxGlKx"h )!ŗ^d/<79 pIBudUX!B|hZEByhcJ?8&}B~hFeDtRN:QQk::|%3l# =Yo])~A@6qJ:+ 嵉@F~WZ `4W, )T > 喲B.s/QJӘ62i59|F'>ޕU5Mlb ѽӍmoi=UJIQMNrݾٲ7fGL e' Bjb'%€Nu8! ͐YhrWTT )f̯i=T*c_C!R#u*͉z ږrўu!Eײ7 Snq>P`Ri^Ӆߥn̬E+U’D߲l*X?c*^j_7lׂ|y'-6Zyi5TRst8+5MB0Fն{*Lc] DZiBiL,N翢!蚣w<돩u+rg?iD6!>ЅX@~s.δ(WuC(O99TN?r6 %u3tSuM&·g$o/:(YMz918U`;,1]wJBόH3<]Ĝ˲ٜ[sAvz,O D׀<$';jO=B+A.m=@<{:m$JO{Cyx}vT'<*QOnleyqYw8t::iq/Augg.>'}K={9i&j4@A1п:_ -G)1^6@Bnf/:Yߓ/?!lMQoůvt'r_s=@8="S,&_5M30t ёIt GH]dʠݭV6~3_ش M5k5ɼEҵyYpBe?@q :ɬɽ]V%f[7[PKfXZO pip/_vendor/rich/ansi.pyYn6`?Rk\;ʹۙbhCP,#DNݶϲϲOsxOE(w.$?d7lU$WQˍ~Zr|ޤ[j|~[˼*ӢVUQ =+\z{=lr6`p[z nD.YEǻan _,?Yg0쁍AkG߿zͫA/z"m\ܷ/h80ovd՚Fy) Z"$ݺHrbp(k6bfBWKjVzE$ѳmEl:4o@*,/{ Q 2con^CYdZ'Ŧi`3gk$YRKxd㇜c%I14 @ #jTL&AdFXx M=z,ZeClLC!6vhiBs^ծn[; 〝#07 {vZC}AСOY|y0)[?r[ijat @ =H 7|%7|Wɷ4!"S[YU32-L@+3.Jv?VKE\2i$S~*؝J# 02twDIa Y/b|ľ+{g87`iYldlldgFvfd#ٹم]٥] 9C@'!CĮ]>9sd⊍sWl\bW&V{se-@\bU}[W ;K`JڜO<6aڤ&S؄xjOmcީM|l<_Y評{㑗k:yٶ㑗o>y#/ia)H%'" D2"g)IȗI4X ySξbE-]QhLd m's,y:p,WCS`i.4Hf$ n:ɪw1}Huݒ/ߦb0>g'8 p"4v6 (6h#L;⚶xvGewGԒD ;.w5}BL$KG2]*!*(RXgpᲡt/{_F#qو Һn#홗9}Dp8\_H1UDX$J#9[)5 3za4C{yA'"ҪH]Zpd486 |x@CG ` T={lޖd;Ѯ`;3 <*cMY L =_'KKV9ݜ^8g@" C >z"jF1bLɀwU'rBQd4Cf,mR]#E:"8.A/68yŔx\:UF]3NA uҁSJ7'^~(N:{aoK ndUъ-@7+Sn캑v['uƎ6}6sxOvZCujg:v/;[%ez{؆sk bDJjD@B%[<;$Cl&.Zm:*&P?%۫W˽DUİ 62k r*zyֽ f:!;="z!غnGOvx/~*\*6xIS6嫶jws- Vt"=K ;wr=R4H,sU|u83j:[Iy^naPKfXC[ pip/_vendor/rich/bar.pyV_o6ק88&epI 4`,Q6W4HjW}HJ)+] ̀AURl@ﶔnBjxTGUf\&dKl\ F+MRxAxI jN=7n{A(o(6$W܃_BٵWn^]'ؕD\DHOrFWPs 5|r ZF>& j=B 8s^8:}rqv|v1|ySQ ˟C_r. -7_[~B^;0İ"DQT\)8e$"h4rTzdx\#K\)Gl~@ u9'eoydEytf[A[B8<6)P^ZIa= 7KKyRMR k{ nn.'77VM~G7 ryePu/mmN޳羑Q6#vELoVRԼ|//OK>Q>Tn0R[_A@bKѓw+^](aZ3 [U!PC-%ѥmsY T@َ#;p\3(e˄^ĚUk$G#"V+)릌ck iX G$F w~xjh$~F DB gSaޤrs/ˁCI,q8C8=T]h'H+aۗޝ$] _z )x} ªQ]M֮{Ks@e˴0=,ˉWPKfX v O*pip/_vendor/rich/box.pyZbA8* (N{u]I+&{4LJ~h&}&M6}@Ӧh _ҙ%|tW>3]R'a$Y|7Q8f|"|^ݼ|szGޑ[l[IJC(a`;̾b/5   ``F32vM"o4,Y?q0$=6gOH> }HT`@SDVxXŇ"1{1!@&QxcAُ?-fDx9@~AY>%E` 0 ekڌX~ F4[˨fc ۝ًB0(  }=)8w䱈I4)nÃa; \M}ɀI| |BsBm[왖fu&2 t{uɇEuu.ϩ򂺼./)N1sD@|H%yb@Sz[x+%m$PR=ߤde?;kqIqKQq4l6 tj);(`qf.EӼGr*N*mf yCFʤX*H,gÈyA(A.LRi͖r xƒc]zFZPHPudAMʼn㸠tyI6AqR\xL =}ҕwJASuȓ d0 vn!- Uhb:L; =z6sL0eqnv)tlB,ƌe9"B\!+ Sed͐eN6--P,\.Vm`/ CcP;v_B1tȯs\ʰě5z*L_Xgѫ7bEB_1'zz醥#͑z=Oo+ . +Š%<ʻQFOqAbk l Qk(zj> N|R~P7<~+&Hi,amZv77PIz?n\JK-JdPuI OX̝ݽwvw6+,7+ÝnUjY_f E*&;^V4|'ۀA& Q48d=R:ܚD$LMD@hC)dg{%#yJ(B KD!Pz(b-r 2W5dci AM-^./2"n /M _P[1GBY9q2 ޒ!^mTW=Ͱ&\^}czkqKb?|)^0{p_nn|经o~p??p69mvC#(s{6,Y ,m_ 0]mysPZ8 PKfXF/Gpip/_vendor/rich/color.pyޯQLrPq笆7 >5<{H0#*|eR:œM֦F0Ȁ W|Wd~Tr%~Wm{sL,+ q xgϦ3#1NPԐMf():QN?u(%~ߧQN {MA}Ii8DQaIpWjQbK.CY3(p4B)3ˉ͍!c[P\k4iX4{96qxf= ƎxL!aߎh#hv #.O,O >D)$RkYilTy!@ DW.=1&Ld6D` "{vȖxi`8;1(ՠĐV"͒84134E&i r6Nͮd$%"} vEN{5*ז퓛 u Px&Q3R[EU&3m\ ( j> =vJF>TnS^j m73['|vTzM*+}Tb 0aR\ C5Cj5㛊+vζQ^pjbIx=iܼ"Kb%m]]ݙ"XD!h{2 |nZDO;gX (@.~siao׭DYUD(hŮ9v`m{<+EFn_"嵻6E* 4M֦\l&%()ރj_A[;"ZfKY%?|qbѶS\hWyD\xjOSUoc=6?]rRB(@@ lDE\7PA_qXG`Fno wGpSY#XE~s[y߽9)y{kf_o:&kq@!E.Ko4v}[d & 3چxH0aGv(148Jo hn:Z8xzP3Lf}l󯡦/$BAWVkVOǰ\g>Y 0p D\*"}}cFD2Ѱe`ֹ}|!;Z]8@ \FhZ(>1xesp.ny])X^]+";j-R8SBM*s|ҵ-вwTI&Ώ][D.] 6옇 ^sd͹Ջ zLǗ6[[k#◲BpD dznʿ+%%i-0Y0؂:oM,j<䲽O+ OFL.;z7PNTy7(59YYȏ6iCh7Zl\4, TdRVqXQQO=vO%Y8.KbH&tk66kf>ul]dqlG`INoO^׽QRaXMAЀn05B3~Lu.F|5qn_>=>3.~i)Zn>yY1o1F[=R awߟlXI/>G ok|-4皜`Zs&.X)^Arsڔ^o_:pZ8u Y{2]ޱɯ;nVG?C!sG%kc?ʏ%*.&8q/n 29 mjLvt]M %UcqOi_niEJl۽}q4V=MXgOST,u:b}~ʫ=VC~|{lqkΊ&̟ >ql'8q "B@mūM֥7}boPKfXiD N!pip/_vendor/rich/color_triplet.pySn@#q"D .kcY% =gMA{Ό֩kU|]jxה6eAy޲ c]h33NSxP 3D*@, a-"t؞-ShZ/)% > k}XeRڜ!'r+:΄^@ )+v**.P9gզu~?~~Żu  BzQH}:_(dbg'Vt2B:;M]A'4*(B羴w,|ݷCP+P4辤9@{y=c՛jO]VXEno雦U~^Y_-.ҍiW 72at,ov9`Ww!ag2%}[ٹa8n-.RW禰\){obeJ>0?ܭ?r PB02Tɾ`Bˊ"P/Lݗ; qpeO}tx1WCɤ˾% vE^lKD$ٚԜ)ܹYi$69qvlmDz!#(xeM6WQ3!&wRt,ࡕ;GSszSp1!w&%E'v9xYMM lpHgCc_FV@fOLo'.MKo|8"ɏj$!d$&Q`E!guf5)Q!J.Yrzؿ\0srFIQrP]焮uJxh}T:"_l=NJ(c2u> "wIf$C\B9%/\ zR.IMqV$`5!_qj'BNMo z)iK0 xYbҮ T`푀/L;FNل5-#%2>?IŔ̘3& 9d[N2kQ|fL";22>ccMwό}7աvԴgs[0;`;~nCL OT£aVA<$aws;LrX2h3~CԞ[7l_nB*Cđ)`:bTt!' ``VZc W7**#1UmS)MJl[6}ݲgfOWOʊ=RoQ=#rOY x[Aak3 ]:.jO̥H7Ffgj%l)9qB'Gro'L=| *сɷ )t mV7Epz28A-;3`w}3Tk{sL߷&9 -%́N/4ߞ\!fp]-aXފX갟5B.lzRma{\,Kqy$xYLoac藚$k'l^BKZNWRMeE(W.삙>Rsߑͩ-6 pX+}CU΋ԟĸ~F&DTsts!5f:4{]PhqO+/X|ƦFz #ș?̃OY<}~CYGi94Pʗrʩpu_P,̽&ɩSɵaR}e6>@$ *>]툁do^Pw~X+sg=[OS¦r\6Dck0(f1/4>kTz9&۠zQF"8~HrKI ћ֤q!7|^Y1,Ƕ)%f71lJ/\Jf3" o.|+3WRam6$I/Ϳ?1 B3mEsvM:4H2^Vϵ%$Oǧ"RT7iI{~b?~E=ݤnx-(BPGq6)fڝ~VZf/Ƽj/<~eq$;%pgcil^E52fˬiF5ɢȗ`(b]ڪZ Wujyޮ4һr_,[1<Ƅ~U4!~V,W |Kz*;~YU[Ō_ݬпD='zOl~j p'Qc{狃^yC_eevbҷjPˢ篲4D?T'.vj̖l~ݚ.B8T,F;4Ur^Փ]Lr\biv/wvC^7 ^Z*y:M_G>0mZVoIg= ~'_6 ER5Ƽv5j<0M'Aj$%:;vJf#gb賮Z-"̙'i~YTu`}j^rfHW GN_g̉]KD_Vr׆5jC{ qlYW1y%XDa2`㛦/ljZ̔,ۺZڲ_"n}.jc8P};xw|ѐj#ah%&Lq<'[M,pUۋ]%b$TWQ3Lro蹹աE #N#E7Iy?N;HҔv * v8n cgw3%o:2;Ћ_X iWEY\/-ffkkfױƚjSv^+gT$30N**<.S Y>?ĩ! 1) 9aEi0?5[gCXdK5TdbEU1]^o_V)x P Tc#lve .Jl)[qpŒՅtRAS`j @,J[ R[YQU6r1JF@axppqn-'<ϣ-譻yAB#ی5=ҚD&h^P4E8@9ˇH.s#wubQ54gј5N-}uo6Cv2pz`Ų.x=`ylP,PMI|2Xj[S^}]{*> [ħ.?a2mJS/zB{XK@%pݟsos1vJ?hr%)ٮ$+v6o\4+tpDZ6MO췞LjgJL 'ٯoZ-.4׹"0'& j)I[%(OO7:c[B[>0r4t1يexK0l4>GxgFbv,kڡ='Mm/Vu&9˓{ppDf ٱ)tHՔvdWL}Wwѫ6 w22h`p y.ae7\]{,)5$s&쩻GymY΄Fac1ZOcC 4 ;(_$UMHdܭVA5V\S#QzojX_H{C7Jp]l5pS;4:s6T@\qptp Yȯ^ZRDej.j1Fo?CwERS徻VGpܢ\k]**:k ?1%@Ih$\ur(0y'#b:3Q^s,ə.%X!3^e5V6T ig>dE~9<_nr\Ds}TbŞ!@vZu;CYwnn+y /Bu \QSx`:=hqr+*55C_RؙDGe6kroպt*|KS->;!m[<ءa‡0GHѶ u>󻫫.ٙ E!+?yhoS U38{hV-GR;-*! -urEڢ(/hBOM5u FԀ[Q/[נj\2+ьZ񐭈6R[PHԪG/v C۬ցwYǡ-VQ!Ooծ>S EJxI$>rSoc%vMڹ qb4WX׽pfC4]-<_n_Mag& *]Q8 NȹJPlݚ:=-0_ ˖LqvM%|ب '-a^ҭV&RMU`HV[pG*xWݕ/yuSCvB`607'_##)rdXxJUnk(xM;#:W>P6 ^TSNhtݾ+Ba7 PL!&smw! Qhhۻ rJ&}]WC9g.8Ϟ&iO>rsv]wTw NCQi8|::)vlր\(RKCC {Fj+ɥGC։^ ,'{@sxN6E$t%o`Fp;P”E,6@6FSs hdɡ A(KqnVjR]X۬q;xmw6~%2q-VdMvU>?wB.F1Q)1E0w U;bW2g&ۄ!4:P{Xtg\)[ѯ~#WO %?JsPkt%d2~!zN|VY[ˌc4xSieKba'.v=t1wvRb8s턫Z Ԇ[caړt@KH{,^girMe~b.d^r@MP,Qlݩ'q̈́0ŦE^MW=ٮ]L \zo>YTC$ΐ72e>g eA?NkJNe4+י)i ԪtR !SΫ.c*E@:{Nf{'{xћӿ8<8UkH^ț{ ϙg8AG5lB[yD]mC;  m*^F0xmB TpI5yz78S -1w74c'#U4={n䠨V":e@#NHpCf iC`nJ%-ymZP;6!+E]" 52]()8#QOZ?28q}f>(iI.+͌ (%]/f\PKaq SfCB k@4.Vvd)vSkP鬑nhc [),tRe}7x ʁ…gqLy=硩33:Knh={--Onpͽ(4sjAG:TN>[,. ﰉeQ f?״CwC6J󋵴ThQbЍ:Go(/nl@8OO_Ag %J _cǬRe+;^\1Tn#EnćoՃhg.o2 W6|Dx=ATtE=yIO~SZSX_urD%"va|p8av9fu=ջ1U< BgNa$@Q4.7֛zX`G1֫@{Y[la8TaHmP k:J UoNych65p4C6S{ o3>k("@ . ɥ(^+v v ![Q_}HGm p.`z]Ӯezz3tk@͖Y‰6u#%I _(t~$SljjX'ƛ2(\f\}c켒]!3Wp4wq|HUxޫ>ϋNG;W5f`:BHrcOtK Pt!Bm@q|xšwѰ9O w v}v#aTkJ<=n >`Y!cHrإfo]&jza{qW߿{v|Akox 6yCAYlEVh'YxaUS+2z$Fbx;qqί)8fS16`8Azv}C)II;eY!d֤8)(zȫ[EA9o`KdSLh RTˠ=HS-º:ر`?NY5,#sIчDL8p SWÊ`xtidn`^.į ֺ0vylGY>4__ :7hlOƨζ4NS4C)`Z )%Y{bH@h]P] [h@<;QY5=tIZqfpR|1F_u5Ecr2?4Xuneפ &bk{{>OB~]R>ՊLRF[*`/)ELvkUgʵӵë20 k{<+“>) QG3^߭vڶh!WCwǍ=wB9 K\3if 4mсqt|q<0h5nz 6BhgZDb0tv7&6{9 {|F#:,]Zi2\cĥm-LvCQ${=T;Dʳh)~S4 C X15FѸY|m+\3_r_i̬ .|t,ШQ݌>p:cߖHC@MM$M𦭐-x2;m X=hFH M4[o-ypL?G? |'9s.!yԡt006$ԏt(4QzGvVphlGĻ˵k*)6c'/Nn9g. ҳ xŃS^ j/@=SCws%mQIHؠbڤxP@2KpsfIC8@Z;ayYX5f*i"e}QIKL20/'̴<(|Y{*0zquˊKdjgѪF0hV3ʆ\ ؘD]J3sþgcI/@]ѳ}ZAآ8.֕NeQ×_thfD%w'] c# .Ai|'.~$W1vv +cEkCz&-(_^ @S_kfsYguԑ_gv4Fޠ`Vg,](9sYɱЈY> R1W"h:沪3$h1L%|G+(eNE`q5@ߊ ZXH op*ߗU9у+{مNXt30'gJ]H.)VtZ#D,qzaܛi-oL {uyI@/ԟ i10`l~ԈɳPړS 9i!+N6& :6rڦm?PFs]׏ɓ/ SfsYַnb2օnj-h O{j+`B},X89WP5D۲:Qj=*B\YL}:Sy-n +\“  ^NLH|>d0䃷gdSSǪ^>|7Z:clMd%ϼp8"G=1՗S h_\L\`*rsr X0Njˏi/)8 w02EWa缂0ͪѭ"-Pм-s@X@}o[-7n5&:Ĥڀ2gKJ!ݜn [:>+0[!M/):Mu='6e…QW3%q>q,$mTu:]S>̷ͩ#dOy<{-i@]Z>e@?.!Y&)o9X`y!6نm`F޲}Ip5{P^4Ji. 4$Ԅz@V\i0fj y/"4,aQWWm3^;ʄ8|KQ 'dh bQ+bp `ă$eu6f7J&l("9`v)/8ł deqwM'9sT.5&DDLg[z7&.|@E!XP|ȅN{˫msAׄ"MGc^{-yMVe=xOFV}-X[գ7u)L9-T39w MG1V}-HC?Bsɻ9ԉOhbY7b3-q{U;cUGQ7&"bH-0R`jxh|&4] #l(rz=>*)>_O8p0o E(fޠAyջ^btƆ,F qh9QAM|wW \ADU8fT+Lr=1{VVP̣[ۓ sKP0H~ "UCUf}vp4r{a+f$m8w:vgr%~,FcVe'kv BeG`L [v XO =EjƄ eP_RdU|5 D?(f ǘ1u ;e\r dv?5g`T]^ԍhIq4j-'r=i(P/W< 1hËt*O4$jsyv^aw0cjžW0\Ңj4&`, V0%1e.WY~gT2p1O%S:9¥S!a\*ogpOf3yHa{Ng֮(l@z]t9Y6RȎ#fň94ٽ(?aH8.ljQq@Sƒ9fcTy:33s`ܬ]2|Sa~F`X#FC/)?]D}IkutrLIBW( \΍ s/_D"v(R|a|:SVѣ+#[n FsO60H%Z 5prkf9 &*ܓ~mezUם@'L |_AeZHT"CP9шVO]8v"4h3LV"nYIq`[¦NvJ^48vv>:t 2n]E7|/&ޙ&{0oGq1rU^-j&h\Kk3ߝ΃* ݜ\x I+Ԯ3de&IPRxWrP[*qW%L.>9L!Ioc(2nbByiֲ8CnRYC{$PŮԵ(k$'_{$Ӭ4]zFᄂB37qFG脣\eGY7#Ys#^0P 7A;yϚ _3][?F_ Gc%SnE,fy>zjYilj ՜(I,]I-Ω]@FvY̳\j']ԙ& Yf%ɣ.9ĝ\d8Hyc!ѻ_XfY]i؃xPI04/pP}Q9츂jAD> #' O-B yK?15QWN!'˴ȧmI ˃؝h^҅=4oO>mE)l 8^*GB6C:]cq& Q͆!L"S wkc}/ oq5䤩-gڵUK٘Xm&D4%B|DnjB/ujbԮ+oމsSU98t|~'J;yǜ38f°D0У -J| t%7hR;3:P`4:60sW`Dyfd2VUsX"4G:3A?и1*~3Ho w:3HhFEBmak.nƭb;:Ax z P^<ȘHą'q"T':F)(Py_So=hѢknFB Mv'.vN_(=m?e3vcf ,?9'{ yMտL~rC4yl}NO\vǻ0phvt,O"Ds<1(OL/Z Lwal"mH" m B)ݖE۶Z3iY8H'J[z~JAAhnVllHR%乷Rdë})C>QAg_.ptEyd`ov(w)+1 ٕfKc-W$TN#Z7G.q5e!#` 93n،.XwiF5>PbB~Gץ1JRuۘ_siRkɔaq;_1u~{U)4ء85%(D+uC,*G|jrkEscSaS[tَ~, V붋7'p $ VӮ )T]=Xer|G,"#uDo䪂++:N0K 7a'A9c͸Br"Dľ^wI|jy2ML|S^׬%3@-G@$Ȓnhg}aIYhH~,)7C*M½moR"?*bUF6IMy՜7JRNkRj70=iIJ_( )6&Zyrȸ0}$S¤.g}⿿|Mwvr8C &݁k)2a7j 6͕ħ}Qgal8//'&>A%U$sI XE-ݰ>RRЈ|)r yGl6 ܘJ#K1G}D%+?J^r1:>D8GOm>QvfS?5ʪ5;q#>Wa87C_PT!_HP D5q boĈfͬ(㬨geVw-՞Y>49y+ PQ5UvK)aMÃI*rwClbN0SzW8ua~ GveYf ՘C6^D ZsQCGeb5vE'C7ǯMM|]P_>xLRm,[A%އQ1{;K(J)0?S1?Ra@?Df]f8bx7`r#P H*7f ;Fp;/fAB靵*wU&ϫzVj 3x{mVÍ *)I1|ҘaQ̧ϰ۩bY OͷsWg@tg A|BARr㇩?GɿlF[Od~V}oB3u)SCܗ G<; -[ _ZFgǽ=16xo)p'a> 0A;2 CaJ- fEH!‹:7,!909{~n[6>P֜ά^GJQ57k{tr&wE QW7&,-I\#En{ ڕI" n)kA "39 rt"_Z2 yؐ,7AXeK:캸\_ S~:GiS 8H"-$d=4ڟ8ZSqbrSfj_GRO#OqHS'6">Tm'LWihأAI8߂ b@bcdbBョmnbՊ^4(؞ȚRybdϋYK?QVHv,Z]"-k(~jN 8|@MP[E.rB`;ۇĐ "VP9n¹:߶PD*1I)Jv< ܃A $]fE-ˉ |GkuHHZ %k9g 4Q/r%njO~Xo+X|>K4þ+Itv;O|uQW ă miW>z(7h;wnYZoJFs 6%z6m$hjQX&uMC\a޾K*dAH.ة@_V$gc2tP_PMw]‘Sѷ&&*~n^XvSण`ܕsaaU u5$ eVBj">pS_л>Vv@C:̈́g/Dݑ@ M\MLJZj&P~5wKpU(܆ H[sMz^im>s%}E5YsFf9Q[eJVt@f>84fVSd-Qs^݁Rp4P“aGs )HxI| ogPOzcPqO|y맛լ5b3g,yIariKJ AH}]zjޙ$_3.O^n0s*N+Q^sef~${B0T"SɄ3ucn{{lxЗU,WP?7-bǝytK֛\D7C] ET"fDJ[1}Meu2.Խ?BcUg.gQմ&v5+N"G_7 |<_|s% 5vwKATC=|vvXyx}V7=>y:Nߜ~s(N(^}l}C7j,'U}huşSVp>̪ˇ"O}ds6Psrz?B1í4(|kbvԈz[##f{O6 V_ܚ] 29S;Ń{ǣ'`$<~~*#|>p9RfԶ*|'0|yMY.\*oSFş~,ھOS#L >Rǘ큷-|+BӟT䩘x`A‡G;"uԻԼ*MS:nnϧy[TH#N>%WgPK_d( ( |bp+|[y}L!7V_O~8;#s y>'qN,)6v6ȱ|1;|Ţ%:HZ :CG2r~ 40H7 SMe.H >5HaYEP*hɔ.\S;শ1=@& ( mc8kn(OX7n-Iܩ+S_SV$/h7 (L/@)+;j.0Y>޻)=;GH4؀bY@չ_Rcv/ r``KE4j[ x.,,Oqo>.;]ʆ΄LQlcyۅ>+E~ֳ"gtO"~ɞFdu=*!h#P `"hԔg3yBruC.+1"UH]$30u~¨(kj>t?\/LuGa\nXVx0|4c[p]_i1~E[J(S}[?%Tsu wu6;ӇzS\f9;O`lB(b Sٳ$vnj&9LQ2HĆ ،:qj\sbo&?\>t@Xjyo? 4!qNOM`ը ,4XDQ@M#pRa&Abq_dE ~Ehy)v2h0%f[b(#N3cS$hy 4+. o9%‹Q I^%Ŝ.k$_xZ`/Sc!I Bq@,f[*˵c] γեJC泬!@LY3kN*%V03˗F{Tm%:nͲEJcu0hd>˔2s({&V1?Y8 }MbS1f9O㒅j+1u7?.CC F/.~P &1 Baq@+@yZ ]cũibTJ[&.LΪe158*j.E- yREփ90)gnʵ;&Ӏ" F, H[Xy^>_ND?z[i"S.#(KS ,[%u;/ʴ쇏5C^Um[]@ yvym|(x[:xc _q;_hd9%?w[ *d~unIsw~ ӌ.REREez_,VEP7閃5;x2Ѐ׹MPGs+yzJxl.ϚU*<0w9 ݮأ8`:ΕYxЙBakT6;'QBp;'"Jk&h{M5\ێ7 P(-XiǀQ>^*$u6WGTFtK@SFf[ܻ}?YVA:=>⍌ >jhP?'!ҩ70A[1Ooy>~? =Ke=POo1v?BM^a_+:•V,&|_<0Է,js~B hBqX^cGK/-?'n\a`m򿱿0̛%Gtl%8>oUûm6<Ɨ(0W9+eٻo;EKs?TvPߺ?zXyIb?Nn2&c:owl1~=jlq;TI /f ΦcwA{Qcq5>.MOp:sO\>N'װzAPpRTr42ERWUgy>s5u+70l4z(A8dqBd&rqMتvE5S+<6'g?(HhQ OnoY|L>~P FɊZ[Y~|_85[-uqE1:0XuW^,b&>wu=ѳ o0:W#m~&ƦbF[_sP>l䫯ߣ_k ;nV䥠AX.L*2q*jin)Xpyk"p2:g_v p ΰYX9+gU=\yεwj$,&'5ԯ?vYY-|f9<*LnO8~dd`p=<$!bb? vW|f~6{x'_ϾQP}!cN3S32Lgڵv}PGdI$;08 ŸCol8Jސo*JyC @^`ALJQт=kJl^_g c76]Vږ Lf .iKX\^PR<~7 w3303o( I[jg#e!m OIj1B:`?Ț x^fJ@!Fn1:)dtˢQ۹^&9 H$ \~ yI/N|YuNxjzM}6`;ꄗ-M! ;֧zݜo:i>><8z,y[I oڷwBZ+o妩Te LyS G*FUGrP'c]ゞrY!`rM@ҏU=#29Lꂋ|vFz{P|) _CxTwBE(#nZ e5JMt{wUyR`A~'߮> =~Y5^y~?ղXj9f҂cVXuӪm䨚Tz@qNoE*u݅RG?)fd?~4N+Z A#D@{}?Q'qz8r)~~dPKfXLIpip/_vendor/rich/constrain.pyMo0'cVQFIh/QT!/ # ۴_ ;<3i`/g`S2%)/<|9}}MfВXԓ޳W&B 5IqM֬]w *%sosQ֨Ds!85f 2ńϗ|Ejۂj*?_(AvVАd4gmgk|:`e2&m*|stx2ыEQ%`wWTdٲ pvq§~<(K݃Gk/bc2ͪ CWQ!dwaF1vLH^7 3ruama論 LD1S&D.^o@$t db?Z_gJehڴX,K>e'gY5.4(?PKfX cw~pip/_vendor/rich/containers.pyXߏ6 ~_`>c +b^6`C9eX}$%r]a~9["?I%V4Vke,kXQֹA(P>Բ:ts//?|RZz@Z}ƺ}]=7~`ǽ[("Y,d16"r-h%m ξjao~X~ J^4i=^1"nZqo;} 5+7mӇ}+HZ7&p8(zL{dn5$ ƭa\ìfF0j Bً幬c#Tz gO嶺M4&nK] GV#,bLg 3|3iX-cB6 #mܳ0oX*Jvu5B0v!``xgYIEِ*qqPR:)؄I12Xe[K*z4 >ŒVJA.\/\ X Gl;.{Z$x?55Y dY;Ah!o3gQh-!Ult5'H-W-!;^(ml}xp( қs#4 W|\0xS\PӉS F|P'=qs׺ b943YDR @߻({L;7X56?#% k?݂x%Ba =*s7:>ϛ ﱏ/YuS:Nd#d1U+vٖP`n\*jXFʞñܵW(8|/ogiձǢܾU*b 5pcC)(,]VsZȹuQr">GՓsi8sB:4GqM'!a7]m>u6ցMS V{E$/@{۹gp_Jsz,sz{&dVIfffR!":g \u*0BMFߙ>hR% 0qQ(Z[bw;;/`{G-G|tz3=z(pXْWUg־ym<2)J*~bTN^Thȟ܌ rx@OM}3&|J9ӟqw]ߝc [Ǘ÷{3wWM.{M< 1.!.03>÷ÛoFy]ݿ}sb?{Lz|yuk:cxsTrʅfya7؟&21+PN'>AQ beɴeu0_=U&üiA"`Ljפӥ]+Kqx-S;ӆkE*qcbTe9 ,L Ӷ" Ul#d̑d~r\|V$?dsgð b.3BTr֝Y $gnSTZmT;Rg5r@ꖲJ?[Q`2<IɪnNJC)/D *ɂȲ)×?XhdFj~d*;ii)eBmN ^,Ί]Vv`9jB<,sLzH]'"~)g٘Dx@{z׫M8Dmyi5BCBUBj@?R8b*#8%b]\~+c2&X\.GZ-_VO,+㼰I#ֶ`"ΥHgՠQ`{:Cw+[QK8)"FTAN3{9ے+I5@zF3$ZZyQ9;oH8;" ԍ> %p\"vLLEk6pI#{ҭb*c˟BƾՇo S7Tձ)EZ`j"M2b6οyRM=ܵSM3oQWWd:Zd30g n"_% [r-\蕽n張x)m8EYД6UVLX63imM\$2_{3:+?ͳN~/X|)v,D%<sq7/b!Rށf3ĩh>x!Fb }NC<< ˳)D:bRiPKfX"pip/_vendor/rich/default_styles.pyY[o6~P&.t 0 -2TI*;ԅ)Iw~x{cI%R ;$.dXCjZN2cO)QC2rR#;hNw1%xa;,(a8PX@CYȽ|F݉w AybŽԘaNiyw}V9&GnuHx; .Vn/}h8CbXGvph7N\ `;SǘvUL1czDlf<ccd !Ī$\L`ϡ8;Em)S8M"GVP2b3=t[P$X.i/@QIcz6%zy1Y: ζ\Dg5%8pZyEy22l؟b q ,LYh7vD Uf+\)O#a XaH0‚Y볶y@,梄ܽ 3.- H.^[~\oX}wYg䧻_>'fKIUme;}苩]ut>Z \@hsaubCxv ʟ[ DT+J0@=ma\-4Y{#uʘH;`͍!\ =ZVnmjE.֢a؄ אaz+F{mPKfX9Gpip/_vendor/rich/diagnose.py}Sj0|W,ʐ|KMȑi8-YM(~b]Ӧ9?fh,N 'Tu6-!-tNFT}[5)jyvj'PGxǞ^+RPbh Z;B+08`,? ߠ3n>!>Jia !i 7u-U|VjfFX> {elLL7Bh"3x+j.: Qw"m76ۍRRͭMw|}fh}PO,̨o{xBSC?ʟzzG4AhMoJ4G fW%cnye65+̑RkYev5st$& mОkpn] n(/C X6~&BӨ̹W^{ mg-0er1~`3f}|Wq0Mi0 #&]7Yz6"iYh Ʈ C8INs24/m4㯈˻NۭhqM7 .C@!Q>[ݩ^\ƢSǮɟbO r +:C;h tu@zV?sqH0D|t!V)kxOzCMY ?PKfX"H!pip/_vendor/rich/errors.pyAR0 E9&:LwPf SJ%4!PZ7O ([1/VG:o*HeG0cs9vUUBjt'GrR~!*GwRb-0x`^Ǘ^LZfM yEx(u 1F:`s5鳋6-ySfL$'B%̘hS"`jR)~ v.J %;㷱?NPKfXjopip/_vendor/rich/file_proxy.pyuTn0 }W~1Oú m CVM'ɐd%8tJ[*i:=uB@ |)_oo  c4b_gTz8b }'hbUtQ-3IV/L(>qyH !Cc`N[e kZX4` q$RHa236ňYA:J hE6mO9Jbrj$9xWo+OC9uX4"CE;:4էE/W U ͅ1ha@{ެ\\q['+%?m'Z ق03olfΌ4pR!́ Q>7asFk& )hr?p荅gtKs4xC%Q;VH4o6wsk(J2|-/qmJf/2Z1ńƻe)̂"(E&myy%0yT#_p)+X: " ]|sWIp+}t+JFiF0,w|:MsUB(Ôߴ; j >OcǧeHdܙFw{x/_#pg7PjlaM}ܓA0#ܼP:{4mlo[ݧ9W;y6cS17kP%bdgMLۅ_+( ?mǠgF椦 ʳb=؋)Ul7͆dlZ鏧LJC% 4{%bx*jJ{b~Y-!/C՜0n3(QT ^q1Biyz/Hq/T4fhz &fnw8 0ƭ?έn}?2]my PKfXJB q%pip/_vendor/rich/highlighter.pykwFńtkB?ƨn=6I'{"D2(j}1d7ەm3;yI$I Մg8l&[%A4-~X$8:FFob}EMr #GGG>wGADݔNz¿(0҈nuD(+K<-#xBrD$a0!|GE1A?HKEA6#^޾>P45 ;崈r Rs cu0TiWcIY dm1H*IЎ0H 3RRE20TaJ,1-t*?a4̥w^UBHӄDqFP#0.79Φ8!J AK0!ۢ&$`ܛ-wCNJtPyHE@nЋ]~= 5G݂qF<8tB.3't xf"6Qx S/h1ނ^>soy6Cܜ a>vw6oq\B-fUm ډd*80ukh|6pg98٣qr:<Ð4?՘x8LC[EgY0~_2eMֿ_qnTi[?a<7O^,+/VeWpE>9>?̬If0.1BڰΛƪ>^4Dk<-NX_|Yp`Ca4vd#S+%<>O 7E ~=uc"KbQ<'WdШy!Ygal<>+Qa]Txr }Kodj} 貕o,F9R&++B3Rcji^fklhDV"Hجm,tM:qrv;{sІ9H8g$!̋mrCx{.eewf;CmH6,8\(^wq"#(g0x6S!G%bXT띋3bl,BC5K`ch{ur *Vgk0/<15Tzþ\~f% rP}nuڹ8Z+ WbN./DL)Ul,irj3U\ INVN^ނqN{C#a2?6IժR "nS XE~f b )~#DxҺFF4!<بN0SL9g66 "@}ph]>`ye ~(kjZJ0:裶UvDN/'nFlם>u MtY M9g Ű_xbΏq#]m*Qd’7QX<% Z҄Rz(cE;&Iƙ֞- pߠw)`Aрh\< p ؏V[q:-|F=n;=;7:m" g%^!97Lm D/:F{Xږ.S i˅ס=7nG09=!NxUqyxNćLWQ(IEHAk^Qv_PKfXM*pip/_vendor/rich/json.pyXKo6WLuY@stF6ŶodOB%F&.wԋ~dM˜p87#WZmavSm[:H(٭֊&rmC#亓/!kVlU>4V(>J|-϶qFуrI|?,'ha253)'Q-@sYrMN~# 4[{!N'N}o?wX=;%P%/d@BnTPr]uTņiV,)-_ gрxTXj f sw|0eE?9cedRYQPbyhwVU.NBs>5 hYμM^<ŮfkRJi48P;jK&] l L'V^6Zz fhnB'ю7.G [Srr .[ <(y<* *jNuUVdpgRSdrgrtB]8yyy?]]4+缛W?0*9")Ӑ2OqڔrPD1%>|l%T _C>Y*#fӠ0=qvX)jDSpkiqŲݣ|ZT^Pxx͵6*yUF2|.хI4w}G}_Eh8Ǯ{#[ RLę~D跅E-j |#o:S(UcKm/pr2z1ۆi t7NK-r(vb0e( HſiyD5|J$va-Xm<pt5c"s)(ldU8:5lFaL̟$2ua\%P/ui"'ZqĈ$a.rsrDH R#k(JҠ< RW!NɵΕ:X!h"qT<"́pu q{xO?8XoZVAe5po/`S⛰>9xC0mZ~ ;ڮuLH& !yeEX Fmp{okPo\UCsE45hab^ 0C-I;q1(r+J1`QO~ttPh . 5Ne 8c'5re9~{u;%]3Z:ˬq?t;hm{,qQVB0}딙QF`O>+#S-5Ɣ?X.+K*mG ϊ5ub~0 @޳J&.WQ4ٶG\[b1,!rQ[,dykzPAˉL'S{ q 1V^q6.UÛGk ek'%5JA^zWh6'>}̙XtzSAI] E}\]eebQ sشiW7¾_]Sܐhѝ3y &FMm_Yk"ԑ|CF>) (5RεWL)3!~!7y$a Tst0Ty,T ᎍZ"r,!:׹g8BqÕ7J>omQY]~ڥw;PKfXz 6pip/_vendor/rich/layout.py񿞂埒 CTq$g@!\I)%)){MT})9MV?D|j۷ )е3A4#<8XT[wW$|U]}}kc/4w}Xu> G)w,ajCU: < >I̸| KҦ5Q\m61:±YHfAl7+/w 0b|e Nrnvu&Y k .([1M;8teoF)8„`CJ@q䊇3sm^ ˪,DMԞ-#?Ҩ%@qAjW ;(us%1+JYIƠ[iKϲiQf[*=.wb/P@z /B4ז Xĵa,/piv!.Й6lqD=yG*Q]d;M zI5$!*zE'dוjw G-赇a2/"t$o+/d 9HIlaKsmnPK'52CŅ*PQR>5:#D`D\Ҋ7фGULc_%m9gKDr_zԍ72L6a @'= !]ݰtv "V8^σxn}6ED$Iy(ƼUKmN\ZIzaUx.>J5}kKR@?f/]2{P~V:t-RT~v~I (V9KH.[KE;qI]NaQ+EwBE+TӋ>_QMQ*9[/ՒSRV.E9R)ju6uͣQ^weeCʟBİ@z'͙"-ۆ]w32 2_@DXb$+K_ų U:}!Ŝ19ײ(QGn`%ޜ#ʗפp](Vp~v֌mu6_%]Y 8+!cQ'[J /h!8` f51D*[]rj( aԴ9VǦt/Κ&tCT{F2,2)98O{F%w!ٞ+ Eخ 8WAX/rniJn!SJ{Ads6VA]EqzRaSx:cSXi w(4ݤuطL~,`5KͷET:)#oOm3<<.i[ gΨBU Dg?K܍K/,Lq|VR`XV5xJ| fPF^BP#8:{b),A [^̺{5wG(6TqڵYh~K{+Ja8ҋ"BKe"ӮL.).x;^kUg+󣶴hOXOt4ZVՓ!KDe4ZZX$\y8.pjb%Up2|N!d~jՁ Ǜ/_en.7P 3wG]L]l;&,1DC&@-^QWJY P윉<ѧs;B"-!d[AĢCys'g^xDȊ:`QIg\ؘ^\QUdxlǘɵ>8AQۉ tnIPzꩬfێSM[&|g6x4w(yqR fZ3\7Ѱ݋m/}6;2-8gaNA.[XZ)4Lrp j+6k+tmf-JnX[+lmţ\zՈknãxzEt(JfL  +)R3(D31f|Vl&K(jX }C^de}8%0j3t /zFeUG 8-+M +1UdgTdwaOWsw͌^1܅f|K8zN]OrETyiI񿲍?F' ׶ )zŒ6޽TΑ*[M ) yqC;$ώ|g;k &cFlx~JXNM.L)T4JO_F}RVfkvxsvgh.u9}2*T{h )iF7;5G "ptBZ7~#hLddʉ[=,5lUGDha.Κ?g:ύ4S|yGXBd]yzOGf(`A?Ȩ2< 3؛ɲ2"V|JGP;j½]'t eMJ\B#Bg m[H{!j-QlRәržLti(i2Y5C>|)nB<0-!ނN0S-?2opkaPKfXׄ7pip/_vendor/rich/live.py]sܶ]ec^Jr'M/SGrm% Mp:TiF23m%m5 7>pn. %]TlRkvrD'IFpu-H1O-xm`#we-r:R+&E&"^gwwBQm AhW'6UyWC把?1`ӏ> 0uUI_ٝ wjW1f|.(ڮo@WHå}_2$/bYtEɍ=}a*L)w AyPĮX%)Rv?vR+y5 |kH;bOu{#,vcYNQTroŜuRllw>,{t"s eSс>qHBeD!Wvqc5絷FQI{-_Qo" 0<@zO'VN視t c _BxK(1S)\Z#ډ))x<~!Ag$Bhb-'"۲ @8Nk MBoJBzM+_Arh銵VhEgܲψ˗] Z ق ]S nxMڶOYQ3&64ڔͪNX%0å8aka&uvɀ+bX2lԕ똼љ ?/6dGf\-39ƵLZ8L*]̂>aAg,ӄk|Mm)Hy(I$EL YDAc<)b9F`"ʾ#INH_HTC8?)TG& YILBJGv}6 kM3>:XnNR| seh@I6jo*LTX}ś2-P e)"`xO.n}Qum`$w-beg`L'זiPѝ$o/Ў0n "#ۖUwu"dA  T@խvMt;k[y %!8̗> Z-o v*.BjnW μF"y"á* C\wv khkv+ BDCS*t JbSG^nzj'$&cN Ă4WRn(spfzjo S§mIT,zlKi[F!ף3 Gi: l((v(脗*Rๆ Mv-4Pߪۿ |_eNzIvΥjy9yY9܎vgW_jd32wR}+6~Ƿ_?Y}q:Mm9hXҹ ^h`, ȲEw0jP\=ry\'zs{?}#``y|!6ͰĴNl12 z+r~>ͫ3AN1ԴN`DMlNH)%kXnumh^),Y6\?c9H?j$BƊU>P=n0nme:!2i {i ݦR .;1/nyE$3=8>!**yĨqܬ8Qf؈xB/R֏6TCtNwA L N/t wcU&N l".߼RV•p )zz{^G91X!]S[|D.EBg\Tc;mțp-{;.&CO`<#'`9w:>Ի"bZHu}NNj [97пS|~Bx=Gvunr|MyC%-!@-^_z696hm +˥bS,^,]C}v.@s~R>گ 6N%܂+vH~sR&k.r@ߛfQriHƳڔXޞ9<$?r|?y?{.~q޹w?zotopwoM7nwn~PTTcHbD'SAT;bGlE/@tZ$<>Mrl[KA gR&Ζ~u جwvxpZ74 )ݥi] ˁ㌼<ѥIUM"p3"'f(oɋH:m:#_oVB^>"U,K3HvylSlLkH[PW-S~(#UO" 6TM|][Qrڵ}Y9 Œz$DP,ePJ 9Ss9*"MPoFe`'>3N[-$-ST<= pZ> 0XR ZSX'JJ݂jPKfX.Rpip/_vendor/rich/live_render.pyWKo6WE ^  `"6) ylsAI{IQIvsy|ءRuVV5;]h*c!ְ' 5[A.K"",4ȊGL-kszf#d(1DH+ݡ*H#H-Ѕ(r> zNytGQWnAK/-ԑ][@1/W>\zJߘ4 f{cUacdOktFUO*t-}# bA#59ƨ5?nLSRZK{r+3Q*!m6ďBQ X0I XĖp< kGLUo5JWM=>íڙ3iC S]D 0)hæNjY}m6cNB/7%_Y53W5}+#?/(SIw/HZwҠWRqT*tWR5nem[ '&??׫\/7nRDNdv3#wb2 WQ8,^QNn[wx;ؽd8kySHv2h]Μf6NFҏ[ξKt@#d :ʥ7+/nw 3Dž/z;3Sdy&nh!3'K-k7A[uy+)vQi=#+\2~6c3o6/9St2o2B5|w%FQqZ'%Pd ^m>23˨4߸3CY#;EPKfXo~.pip/_vendor/rich/logging.pyZms۸_MӔq'q3iEH˞o./:CbU&yd`ͪIM묠$]*R>)Ӝ1Pmb$%64'xӎrS69Cx HEMYrSzL.wuVI>&8vL~.@Ivi"Ѳl|r3ՈHoh\U%rO.0LXsX$ϕV8y$R3:*mlViLY jTMkM>g̒KVO7pMڹP? VvzD'USz+DdD̄A9O6"V>aMIVU7E#!9ȡǞc^SY']4:\>V5R&'-- -aqVzs7;iS(M@e&k %,ⲪFX E˚UyD.$!)ڕ'gY Ì0$L/ .p^ӚIVO(8ʊj#Oنsk X15Jh&+"򆮓&9+=|z™oH#B{NJG%WV(e4,lꮏ nN+\ ͅoRdxWU5Wib?keRYC[UՀ; h ּ%P3l#Z0IjR X<~`a'Vpq.EUCB *$[Uj619I6@4ZviO9u|D) mHjbpϣms5zҠvY)HH,B]8D+>+eg)v[3>6-ljc|Ul 8 @[eKh,ABGfirI:A(n8e,MAKd"zk rϒg, I&Wv?5< .x3%Hy$[+ˍ~^^t+'13Ǎ@#da ޝσqy~~s|~n\~_\~Wgͧ{p#~x_->^s@ZXM̠{\R&%r׭pgH'nPѰuqZpK}hARij'ls[XsݛL ?mo'"FmK8FmOh\ah_pf1V[>؄F_1COf0OM8̶􄧇D4щC`v_@=4Y.qZaȸX9nkIJFءIؑC. NO*iy=$萱yr ];II]G,w4=HqsC.N^N{18N,3CaLB@;exNP>qie!>ʸCLh34<"4)*0ˀ-f@mX 4I?n $ $bF%Tb,WnX""nv955q<Ǔj[dfK{mԡ5XH4q`!+:<:y,jSU{߂Ogbv( ɳ;;L|xd*{t4#-[گ '#[C;^uo X$Vk8{|zHF=ړxV) <`ԙwNH$y跢"ḥGΫw } 2{C>fohQIcYh hHHܣ 2rZT& l ]JpE˅iX|=O1\^T&Xh$h8#g|]-}56ٱՉWμI_#_ U*jd˲pFVx],bɘJܺt>T`o2#kh'VߪXNvO*cbTݍL?ʘ Qy:;QlYÙHD.J@Kx6Ou=`\.T5DMdP5-Ww5kuwyCG0yEyXż`H@9oеr<sH%a]Ԓf& A;[hcuk&JS>h-:tXu.Z:lXvj"c3VC)TV ezPҪ/'VqƤ7cFe=NiqeѲ,u6 {&K6_+l|G7^<  @hk?;1Cg%6ogL cw^aI qtr $K(SIʯ_YӟXEnλ7ǩlzHLSWSs3%`A*\W P,XW൬<Y;vaҫuَ `rIK-Y\3Lv, pU=t^VqxNNn˫NX~abөkN^){gF軄g3qT:Gȫ Mmy­xRT*bq0P#ea#u[ йՁ apMكL"Q+TVUm]fO!NO/ԓ|N&cя'$IXlgaUSy}mǯN~|"*a<^}p&j:y#ETRzX&է30/ ҿ˗_~ ĬmqC`4p0((R_-kSVp]]’b$cT,)7⩀r|UͫfL@ѫ(9GKoD:zugs}L><фg5ĕfYJÞk)?jɴ& Z(Va!!ߓaY+!dvUsT2'ZR{dJX,)?%!>'j0Fo̤Մ]Vx F|KQТbO)$. _N=]7\/>\LDC08VpDg&УPKfXRGO !pip/_vendor/rich/markup.pyr6]_2;2馏U'$6r YS$KPU}$Iә-VUY7VE]ԍx)Uf~rҫu_&+ ,ZFZdI\U{j@i8Ǘdɢi뺬u Iַ̾nyw%Fwdhtq\a4/WU+$=ugū`f`*͗pgr~ᒬz!G/^]x2Rkq%~`L3HJ!eKnERG5"B7uqu7"e$<}N8Tz. b+dfe #|E"IFZ@Lf]A)l/YB k%C(v`l jf۱NJy 13kUHԂ( f;=b۩lKmB=ܣB]L+3uAWP0ֳ6.i(Z2tVܕ*-^Fɹ I~RMbz=U+F]KaB'6fM19,8H1_nLCH(D`jKp xވlRnxV/ue%|  phpW + r2gd͍eĬ[h4j裔wj<7JcY6h3:+턅E>dM.Z~Aңr}4FLc6#U{^ dl^2'/}41@j[NJmKiL9> kB=N~E!!H ijW͚1ggmRȬ0?3 ǀ!~LEEV/. R-"EY,/yldM$]J7F"`4T} 0:1Nf*O[BVA2XIY[ڥxK]֑BcM ݥ3hʨѳYs )Q|?A]HIi?VgVj},3m gź3>i2; kCD}opDfBrjIe|a⍠= |/r?'Se1mBPR=1d뵲֓;ŭnё)+(] vI_#$'5йf'`cUszapbi?+wj!9] Zۡjp4 )!8CL<(T7[i;CXX|UAz j4Ln(m[Xr%wݽأzsQn32b+zhU;qP(J) ;z'p5ŅXxSVJƃXYdғEʨ@ iOMmˆ`ŐJ e-,&AFCŗvs A ̲'݀qt_i@3xw< ^S0T^ pYGN #b/xtߍ7>laY-ETVM} 7 9(P+7Q_79d8@Wy6n'{t!]OZpPÄ\UMÇ#[g{mRݮAyh=Tg_eeTo@M^]쒭WT1 OUN5y#)F(YBA'M{?^{al,ZpJRu0N}.^:jeՈ0ϥ3I'LIw"|@^9ȾLaO #-SC~,tn@9x'r?rːmVT§x<>y9 ŭN̾GY1XC_aG~=l6&|^?KMqOl=)hM^.mz㍬ћO-1 LŌߝ}~~mjFWLUVE L)Զ:FW5`Q_ _R9㢅^4Mۉ {OD%uLA}FPKfXlpip/_vendor/rich/measure.pyX[o6~ׯ$zu˺`h:!0Flx$4߾;)N֮ )/TÆ {°~`QA-[/_h߷@׸#a/z=@$kaacfs1TC$%#} b)dF]Ya.6OTCχX^A ASOͣ3}g` r=Da:pZ2GJtF'm(~KNЉ{ҍFw'廻C ,g-i\6ydsLy/VQDE9',#{FaQ!3'&1PІIvc%Jdp̴$o)}NJj+c'Nur Cˆ Ac_#Yreb ^T ;Ι?dHTN@Hǔz ^\s{Ktըb`5)4Mia!aWUF͈vdf2g``l NB/#O KW#:\bz3 oa>:ӄ@%PZ(+DF^jxLa}M똳Ru֨ Mgl(6D: vUk69$1wdž6Ri3jƁ'SZVx -8E}D>)yؖ< lK#&dW'ky +_ <pST憦$b,ZPKfX jpip/_vendor/rich/padding.pyX[oF~_qJ Fi'ڵ9nӋ(Vkaw08,kU|sJ o[)ﯭd 'U |C 9NV 'U*l)ut:`dvn;*Ȧn[:Gf4Yby`75%]/F.cM :y~ W)Zޒs,%:P^y), +VǾ1qtE ]KhzDŲ^r~Cj;==Vx^Ӫjg)⊊qyz8< `:Qz80_Ӏf5Yؗ:>z4,#ోW]m -aGwGx:ϔ$lh+z\<}RA*5- jGBknv]Cz< {K)CZ 5eYld͇Ξ6P/ c\*zƒpӸ\>YtC= ~7=n"`\ nfrjV5E+Ck=[B1\)So1ޖU u D`(k< I IrMZղ6+kD5|_J >{#݃NPKfXs<pip/_vendor/rich/pager.pyn0 y ]@xNk{&u;G) U͞eObߤu,c[Ur|2'ǡ͂QQv^T6uY!$IvB6 Ӎ:KJPͨfFcEz Ӊp:,`?_jiԈU~-<}#$ (Ī}|~r*=W>^>.Y e#R0VL_D pip/_vendor/rich/palette.pyVn6}W *Qt7ئAv"٦,xI:[t8nI;3UP&Ynje@Ufl[-M]*Ԗ/e.ܾodn6[Q-EwMa~ȯx7/V("Qwnm2Pu>Fnb(Ub%ylE!;1LE5|J{ظ3HSY.1 LHr%2\Vpδ(ȋ[ {Y;Z̝$^FQ'Tr!pv5pH٪jNg;?rS{zEA}/#vmk#n4^YLJhxQ*DT:\#*ɂ? Q~ ¿|Tr 3ɝڊQ8V@Y@9Fƚs?@`JՊi'F1 =%6Ȧ  R!`5)%؆8,idW~Ne۩]Wk= f|9XmZ +]^?/1pkm"Ԏm\^dVJ b+Mke"JäYĮn45Ď NWR{ϮSfEag4Z`&Nqơ3s̐_{/C^B9f9%QdHfKȗ(X d,!qn>sB!4cr:ss5jYHޠ#2;gXM|c =\ʊs<|g쨕.q*pBΫC@y6涑lT.9T5&ţpyG;v[sk.t_9JdvQ M6F/)Ojv&,'Qm'm;jG~>f e-ơðsa uˆm|;q߶Bvy9؈:QO5)#*DG ޣ4|Oaz\m¶vRL8/475 <"i|a^з5;E6 6H?`v)8N˸y[qf-PX5)΂;\ IB{1).&|oj 2ixpLbPKfX;x )pip/_vendor/rich/panel.pyZ_۶ק@ه6?iJOl5I[2{PtBLݥ]! xz-$X,?.N4WL?o;mSՋiU-Kqo{Ώ~zv~7l?>5oL/VY?7Rx5{n)odL_fj][17g DK?+diԏS֣?C.n;nh$G_}~B~W Q:ocno!}kX,6u5 שLϕ$kfrbr_IUlΪ=6[&#$aX.\իWE#S-AXھ.2=u5)]]bQi/|##] 8YkFA46]!߉YݶYSf9[|:Oܔg7^g|WK3/ PxdZmM:ZnU_m@mbꖵ Ͷ2<`rϞ-OخE.#w;N~(:pk6ȞV!bJ` ~[AZAwW 1/`2Ҳ6=쓦mxGΣfR'?/ Wc(r}L:ٖK=W{yX?fxK&Koۜtίeh^(١bq&DÁSUK䴟R4Be`]>+P侇Y)Rm{nNK뿄qTtR L6e{-̍}Y1Nܻ9ݻ+ q*URmOD NWӀ9{ST{J1_$-TxhDkЅFC+nC{'Ѓ=(7Ɗ# #H!w"j t'^l9RON& $46SJWTlĸϕ2Of/3 92Tܦ!&Ym2hHW\j/lQ:7اvAKo0S7 9Gɭxʞ@Vee &X5y.gvN]C@b^kIV}XLNDl#'d*9 A0jV2#cxJ7jҾv Q5?Ԩ2<=Z>#DtރtIڸPb FEjܵTx r=ksYDV@wpe p68'M &F^$B/Q9ՀRr_}^|* pJ),K [-Y&ܲO#8.9~N+O)p cޔݣ` xgƫ/(Rofq2;A0'FO(ق1wUc 1|8ϭ CSP!jcZq&ZRGPwm%BtW/\^˗SYۀa ~jHWU~ i|I˜59xThru)cОa[. 49)1.qT^m:-7|bwM*8+O)4;QbSWcM#<$&3\Y6βeyDSɊ߳ 3W+w}$-qLCjvij?yn_zD5N!g|-ܝK.0xZ${!9~ߵkyhj>S- PKfX}%pip/_vendor/rich/pretty.py=k۶+CFV\qS0ҦHVwsJx:a&k 8XnM۳Ů&l/1I/Uu\'A-@d6Vmg2~t~=ogoo+xmŮWqQuɫ[vN$LyE4Ugrr)[ԏv[֗/5dhHT0_<͟铿>{{򤨪bQq;Sߞb~@ G^rKmUɿ>L'mxjy[.-߶ ~`5*Qs-+:KiVO *:JX_SlƒrL'o{*|ڶM{mMqoJTT+.y/JNoouS h~pD$yrqN׬f@˖=_벿b!Ρ mykkȊzRTDGPB⸸)O_"h ,%Y2s1 %juW~&Rjͮ7Ղ)m啩z(j(3\&kjUmb_5[-ՎN3m'Rw&r`#5K\XR^M ,$lѡ~Dz :]] `SG䲿bP( `U+CM952Ra5+"Eۖ] U.wUlb^5uX24rNeږ* 5iW9hM%~RʎXiS2@۔B"UAaˌM6_[?l_T|U5RDUemNCks/N-U:%b'@>uY߻-VfAbL [eίذXf^`2#&[d,3ZiܬeKdg4'P0%Yd8e~Y`53P=`€ ijQٗTWJ d TtFi:ƈOkJ'++dƄmܴ9i3)%|j1:5[pkC/;_( YΣse.,C }@1 7dPuUƎ1#aacL=0H I>Qh@EEJ j ةOp~gT`˪Yʥa>BJMj ɻpWylCnjM8V8n}OkG.3UiM,heZ }̩}mTjúz^,@0L&CcKh,W2яJ1ܨP -QvA7ܡV 2im\[;ꅅ{,@]2 jF,Pc-X{:ScnɱVb;RxD,F:Q՗`q@7\ƲDIl+THhi1ظ +&< v湔h*qvpGKs35sQ0.4u AP$4|jb7nqyڧU[1,kImMX`i%`Ҷ;5KeqKSt=H7 S Ͷ2{~,u7Ze\IKȅx`rr#u_%wœfMb _..]>jv Z*E]q]CP B@J_ܳ uEr-kvvct@%pq /y^eF N5PEof1w;h0vGE6.0S󅅅ʐq_܈y\1pȭȣ2 CU}oXRNq3E&n^3Gن273V\Qd"ܒ#EjD:&siGfO$EtfQN$kfhef_ɶLR3#2llB\Ÿ'[ ΤĐ_b&%e#d);&W ǡ"I$:ݵG-fQdl؀\x3Ʌ7!X 7^5x(`m-/t ۞Jds52-GkFtLmia[gpD(ɒe.@I[y 9\)vz%b 'ŠFPH.2e/W%FU`~+w+ЀAբ[eԕpG5UhT;`"@ F:!ָو% =1˧*i tr Vq34/n7?2GbbzNodsa.}hoguR-Pw4hBE,E M$΁ R0BO:`QN(>h!RM7ϟ;bXf&\d7 3I+,>T3%p) g:b,!ѡ” ៛[_|δe5UEˋ. N@DƵ)?+0[GM4w;ɟgϟ|,B%7= I/=ޅMa g~0e uM#QzF[cq/( UH@f 911z_TȚL. ,y ?69<-sto6-j}=0&,Ne4[^ e,2H4}xqg:"'"K4qbABXKO;TE$MSJ*Xb1r_/;{Ơc8)J 4t@ᤵc'p܄ْ̩Bg{.uܠ~tH]i|Q,y|0@<s˦-/KhHGXíis(p31ݠڦ @^7Ӯ#S!Ds ~sύɬUW ki'Uqd&i\q83ݩ D"hdtʀ)ͮԊ?=3b좌 bf3͞e7,ĦAr2@TItېskA;ZʥYdH^yeh,_I|mrzNluqzo[?B;WZ4toy0si"Jgl["Pu#RwBPuWx@cWU$"pla7BqGD !稂+~^Nuar;} .yMzdnh;޽Ќ6u`ܩG⒧R m(vR>~ 2ޯ%zjZK:*@4--e쮕} 2cCzi:D$p%&ϭ :4`Dp>R<Zu þ_} (uZd$O,u?HP?%hWxvU.)0ՓK7Mjj(qBÌIY*Cy=ߋ꭭KLC U+w˵{ g.wm=4W1 LͦSdꢁPs0G}hfeG`HƎ5?-@R,Y"2rqɊ!0wRq7 q]w` +`RO)(8Xր(zx $؄6z`}HStH_>偍ES!߻wu1Cv4\o9%%1A&jqͯGjz{|ӭ֛M~[>@a6sBq^dxH^ #< 8fa7SazX5iv7Vm )kKY"]DތUB]Ƥgf{nՇrm9yqkTibwcDV`s2Ba֖L_e%qc~ $??kOiOAIn~Yi?c)K9,'6S/ɱa0g˒C~܍@gbOg4c{@AFzFkw|VN1Ńq"$JIzduR; G0ܥ$M/=rG:G(oKT-CNsEքz'#4@홃QaXӷmH,  +?jƍÊ3n|%]>=ZƟ ߏih4ᣗtKyJ 륯ޝ[?:!J4,R^8{KC.:>657+g?V&r쉮Jb:XXKT|N|02neO`VzĚ5DA쏪QF9rQq-%q:u*`v`Cc_bhSN]fS /hw%$ljG\ñ[d̛Al(O\s3B- =3'D #gF1Ć@(e2^9b#t! HUaqiM ˬ)hatαDd yqf9V蘐it/zܰ9咓}҆w3 Wд6vĝ)bdV[>Q!p([%iOFd٧JZs iof+oΊNO$fn6i.r)pU]e*w/kڅB/@<Yknʻ`Ls˅oj!׸!GJ."UH},>@U,s[]0$m)b #0gԛXz{Kȯo v,еn=n-:`{d $L~P0 ~NګD.\Ak$KqlruuǚJVÌ-hΖ#&a査?1kkˢƫ0`BhT#QY'g!Tj[o߶e_vWՖ ~ L(Kݛ+:Opzu_$Qq3bJ}Vs@N1)`s?IG^DZH*}I~11Fypo:%+4=OJl_wx%)"R[)NPKfXTZ.Cpip/_vendor/rich/progress.py}G~5l۞=-eY6,{,vEVqjqpOqq#?"?dK-g []UYu%e}TSmc]յ~͛ ^ۣESj_?{5[M={ t'=Jڎʛ,_.e+v/*.'A=-)grA Ve>Y[l#QΗ+f*A7Ps?Wht4<:*7E§iY-,I%e8̑/e[Lr=fЬj%IYnU>IPps1Yh9. K5_c>QmSo֣O+Z#Q fw[azy8c`So\-(_@s? 3'G5lYTHsA~6L_*'FT%Mb7٫fS $*&r <4A49@9eGx;<19Rsd.y;+Ņ[Mݬ+ X*c-V}.+\1G9^sZ OxK=כ򹤓@~~W)nuixwS>}Tx\-́C1BMX(_eeo; ˠB@ 8 էQT]DC`-'HmlL\Zv)գ葙nj\H1~*CŲŠaB +?|D?=f||+eM HQLC\皩i gL8Ye'7=aa @zOaHn*GM"ÀO@&r99 򨉞\{ 3 9sIE!תਜ{ARq@[ۅya)j2*K|>JbtY/xR_R:T]bEvC+h(<><><>#}/KhʼnvZH#߂y}[⟫PEb->s}`_* J`Glf.*a Na ]p^Vv烦Ka_ , $UVf"9}7<"VEM+GUܢ+m"M!Ce`<>p.j2#dU|!%>h]cU02-+?Ix@=Pt%Xd ._RbB>DSR#ƕ0v[h"zNvtBs@n3t . AEuEFL#p*;;rdD9 Ɲ̓cMWyzNn}Vr8=Q$.j5EtXqC"dvi1xf(5V݌ $EI"WB'(f<HF.k@[ DMuB̑. 7t NwY-j &tH{w6#b)UĚMkqY,:P"X"KPw=r8 $E!6-ˌM!4~peLT!VmEgKo0!xVYw3lPfor9a %,Q허R jSw-m[LZ`ޔ&_GY1nOo9 ;F2Y^ D fLKp9wI7Zd7}l2o~ og* Cf]gv?%erX> .bVVZo^#DeMOc24c~\ ̹UtsfOwP ,4̨"ɏyR|@@?g'SUnZUDIb:2f M|EE#-ۑVzg񝚷~hȋ 'ܴ#=gׯ?r,iqU%,@d& d,[J񺜽b4Ctː/<ǺOoo&.ҧ'''^ bW}B2$;[`2>]]x78 ҂ttęBo_.{Ft$)j!`.Q>ˁ"/^L^TG8HynJnM;Xf)>hr{c>c/c}[5^7^JRvZ- ]0Jc1З#pfAnr|.x>Jgl1{!>Xw9w 9ZjEP|<5S78 i!{<; )%~u) l@5N 4BM׭ɓ'ewB8O?W*oa񇶛jUV $R?h7z@pKHAUؖ10sOxĻt܄79|~N5vA ɟyo } . Y̋A-Ü3ػfz4e2PBMZ&\Dw^x!aE^Mt>tgwFY'*F1'L#œ| <ⷩO}ɫB>;gڒFIȗ%an޺Ă c@u}abMrSYdipΣ4QWl4-Of^ofxOE!+Ѡ< a0mtJפjEWKבּ;DMgsALbW\ bѾID\4Tziɷ_?ᓧ)gQMYF?_I>JT1w$;g˜~,_6KE3V@a6Fhȝ* |uTx1](.;TʧCiO??o?.B's;rgUiOGb(HճoQE9˒Sƒӣsvf BfO\.=ߙ/4zB\|' r 6i(6C$ܯ,è(lZ<'LVxBR 9E/d(2=p٬gjI~?lxΧ{5i;Pe36!z4QqxZ}җ9bRj/x$}略r Α#S+_́2߻yWpaY`}3CMi [*ȥl+愛5MEYyr@^?﯏۪FΞ`ֳ$u>d"Қ.%|p4ixFDXيکax{-KT-IÛ[`jC?y8kPVg0CQz-yns609A H*B,Ĵ_UV߯綠r{&i  y)>l3O2|O}2Z)sZ[3S=ٰPeIou~l6Â֌10 nl]W=t ۖYlj4x܎fP<]oAΐ V~(f_Mu٬:ipNDsϫRj~YtHwޔ!H]ߥ>f?)%E i_Śm9]Va򩷁;Ў꘰]B?0x󾾫Ә+yؖxyp\^bs//y\ap񰱰eQ\ُl1*Tӡ27GE4b V$6NzFQu5$Gu]䚙ka!|N?E`ԦM1<1juN#<\7^@VUW]ҢiT)ڪmRqѡ/Fs4.Zw-8 ,v\PRlVQМ5{ߡ% oC<Ɏ1];T2M1݆=W'ˁUaYܳ Υ#k.ΤmAjF@<5vn5ܵPTB?Zo f|+NMEare !)fJa9,-̼l ?z=12BUKBR|+rk5 *g :mT=b5H஡)NGd'CpGN*BHC حטpp;ΙPl*LQTu1àl(ۣG1:.L'ۀyd>f|yn*sxlYŔԖ,Gg(8hkKi\w~ݎgͿ;a*L%!_ktDM$Lȑ(|.K.v>.i/(/hi. 5pdnF27{SW<R E5`@hA<͕$*4[vzY6߶Is5JoJ>vK]Vi[ FjkZ9{.Rt-\rp>pzwY_ 2koqGa&S֛>D*e-t/GܟZPI5`W 4y='oȱC( h f=t @rA,"O#?m*TM ?9"RYeƁ&gz!341#@f>aݦh$}Ԑ]D\v?W/YڕH.tC~KR=e?swq5M>M%3?]-ԕZdPMqNɭD-$R+BKf~uѰS WT'`,C:åfl%~Cޔ.i^sW+;fsA[:K8H<HdUvԎ3Þ{tR!@vKodHxj.:ݙE:/\v}fS B| (1("t_[-F#+8|PB)!!"xy"qďӿ*+VeT:~F n cCwpJ̇2Gi#xFge/#y}^:Vd[Cg2n;D,7qlu8S-[ۃۥaTGusڙQ^DK.\ *>Mוtń>i ;uCL1PSZ~1A_=MMN%3!Q~U=SAuVg77L?WѢtTkH88N?Ga \4H릜1UʨpiKljagO j;w;Nm4i+OAvNn@.INrv#Xw@?Zws,6ҵ;;kGhv+ozy7EK> 3H0WQGaOi{;U_2'y !r*x&T;Q?C zQ;.ͱkgl:OG?/`9j˓fɱM;"|Bf:wٷVq1֯88_~+NJ)MM >) eoG3?aU9bv$#Dfe坔P"[3g#1koE#f>|)_S{Ot:;88=t8mB"Ӟ1xlpxmOI쮮տ8l$r?G|~@3/t |He%x xaleZ״}6_*ml,9p>#N-6dB}u.g&aM_]3zS7]tR1qF^TF# /m!2e޽'NҎp l'xN\K!y81-ctGkRpܱ(b ֩h9#rmC P8 j7kϩԍ̈́@aA7W8GoAt  3>^D<ͥ#%-O"V./$ˣK4B/| 6 J' % GX{Uz ܸ .MB.߀1u :RGI~3w,?Z7*~rl<QT`ŪaUVS[aakb.Nky9Gf r8&B&ŝǦa5*cְIY˴1h~ĺiO26H^%L"gdG)s1`2e9ΫYcŸ'}ȗ3P,P~@d{Uͱ$wJ(p4.$]9GmqDzە -h?Ŷad[wfcW MIEOf<^c%"DD[ G-$o8.,zfi7>ॢy52 #cN{ IkY%~-+f2Bg[ KJU=Ts-p7И,.v.\K2u~h`e\C1j˕4Zg75 <0."d&*u< 9('UqU,1$W? L (N MXDB+!$#-NBu|,ۉr'C4?o>9ez;ώwb&̞-OMn*i 5s@bf.JV.YL%^1A UQ}W\HN+PJjV>bֹwĒ8m bw>؝lh 6 =s}6 (c+aeyxh` 3BDvv?[ 2ouAWBP2xrbkԓ1USӚѝ q;> ӁuE )ǿI%{l!c"YTDž3XS Bio\8 ͐b fBL篬dCTݮ.?AY]{g:S+Xo>y }1\yCRjө@]Thf4>I2P/He[@ y7{aCKf)`GgVֱD.>Z콙I_8-ps%@`hq-XǦ3[OLb2Q[ HG48Rr=$޹Wh%^K0XG\_/`kr hT3=g.9^'{ FJXW|?9ǡtd4/'0'SOX0ƪACt @rHEV+hCg0ci`T >vPw ~߂ yZ͎zP hxb1H8wvkpx@M{!Ș/ |<2-DQf1y^/~AREAnO?ᦃz`%]x\tgX)\dMWZnFwAZ3yMwj9@/L̲r2s0B BGr6%|hЁcah`ƂES46Sl9A  m\7u#U1d0VU)^ͳfQ Őt1Sitα̡¶ \ӹ ZEm+r*_Xovq::.ô(XAHdžm"%ަ h` udϩ2abcrN>531LPE}T6&n:Ew"'4Y:N.X sG՚>1UQ"!N: ˲?h<^#?@ #y<(/(D2#}>uhoWoUYJ G+ ?ꆵQPѥ)2Vf_Nz~J u諔}rvn_[ZΕ AhL_ڀ4)Xel`S ULH־P6s[@ԉkӠ=l̏4ݍNO*i> "a$̚`77+jgڒqCnCv^̹2dYZ(-sQ{A5*I:&(4`,ITBh*?-(%ȑ2/?a2%z*oqߠ`9i#[LP/gLDnuѳ(؅NBNUd~EWh!#2kZeqV߀8odj,@8]uX^o L',{QQXH '0skJtj'ӍrUO|=rTM{/^ ϋd(X觚iV))V% k?>!EqaazKSK)u*Ofqul-(wdkܢU: O0~rP)m3(/ItK"=g+Is,\*u'ȼq~ (P+SY55~B 1 ?^ڼpSPx1?PY7AbAM>.[r&FLKHBCTP Lʰi yd-{,&lL)/3jh~$ц2?Nf%|*MExƼL &;!Bk=?=0A~6 &NbK^ wkA|[(cZ^,&(dn݊XB'njӰ<~[:{kϠRTo'XYǏIGA2bJ:L&M5\9ɸKxk.rݖ 7Th j=.&8}<9y@P_x?E2;za_#ko4ǁN&lAϷLH P{ƀ~'K|xOA/=Cr!/%| $Q@hMkP kc_~R.}28+>*-KmD{#;NkgGrrk;~dtc+Z5lPKfXX9opip/_vendor/rich/protocol.pyTj@+"C^ )$IL'ʲFwV,6VK}fFQ;pr bq$ dܺ #}}z[bc%(n7yA r,4fQVbe*P3o4/ Uj+%Cp -vVށ?ų 5%,'N:Q@-w\B|B>y&ŧڇͨavrָɇ}Dp5| *?8]>6mТtI.>x{冫Ș*bN\dVg+__yEDF_X=;H&n8[+ݘw!1U̡ Vx#NJ4_LJt2LFL_n>89:#԰ۇyG \- Η|ƵD])f'ҎQVvz;+v4z o)/`#}3Z~%YdF.AHMִ2.M۹Oݐ7 CF?84-k`w{&vؙuM8>ի-9A{tP_aB/#Ԕc|~s;~t` ?]N[j|B7ݡq@t>3P):$[qH~6_l$>wܸRvjb/OfjZOgUTM7tM~ZnI~b@/ރ)V%/%bt$!svkYȀt|h{sr[G /:SN$[zD>\/Gwʯjp\-3UTPKfXimEpip/_vendor/rich/rule.pyXQo4~ϯC#QtO+THҁTx8Noe`{ݫB~ c;dR /offqn腂:wI蕂|ӹK}m_kֶ-뛪e]I9Ӿ}˜K{? XW3qUQ1~go_Fr/&v:!Qߌ {'Inpo ]eJ\2KOC- P;E[ˊliR.Aleht xj r_"ORi1᮷T5F.[#2dձp2I oS D0L*c1!ޯxue{hk4IgL[֨4tZaC园JgS'U;xXqW02㭞'ʷB6E"DyyC'$$-Y[M,{˖7Sk_…7җ\2{ Ѫ!Z-fOZmuP-4l^v!"msƻkZ[Aj1r`a Iހn'x ;Jx)h2Jld۴JtKZcYi - PhuyLEMj孏3vN;jjrcvjB _>Jm/vPgɩYB\< 8$*לW}"³ .ɲ(dŁIj'.ގߑdB-IqIKIE5#ޓhv2+yAT~(!_^avi@)Qa/&a!fcWcY+EK8=BS_xtTʉH>_bo,.*AK77hN{WE 83fi2EuAr!J^{iyi ?ח.ӟ.lŬa5"w1zk yAޛ9DɠÀbFXl0i9顋t]7PHkЯs&Ja\-yy0D;GdrLϟJ&g?a/JvLwGTe%nSXsm,cHE{{fyI8eO4qW{!:Xy ag@C.#V%aCfA?.דcJw⥛ig{Fa f̚86H `kمxwn@NF?YF28k ;nCz=|TqS>{Tja󸜫]@ӷ䳚5!O{lO(KHT:ES l %~ qX'@qA۬R:Ӽ< -&me2pˌMj6P Eq$Tk?܎bK nl1n7NU p-u>+'&?ٍv*^3+ 5&LVي Fwzx 4u}#5\6[w8~#`XJSylUÄ";FZ_ qrzuÇcI=0<˄N![ {sdeWk*[]_ PKfX?5R7pip/_vendor/rich/screen.pymTێ0}+F<J۪ҶKխ:e;ݦ_6!9sf^3ثbbvVR[,?7_b+C3v~^9]\hp6\J5;c,c}Zj>>ȈY8<}OTtT?Qsvk%'0(Cj-R4jJ%H,sIz`\A2@Ԙ*s(wz0 HpV!Ւ.Kav6N=`WH%T@ؘK!O鄈4L04q"> .˜[2m"t j.8k؜eY')9}"܄ҢnSUIH]i֎rsϒ^XjPڥ~o(umcִv~7Cpay&)ȣ&QWٱaH,@UM@mlEl}xWJPf͛PaU:bi E9ԬLgJ5Bq ҷVꣾDʷÅ J0E )S!"諣qE$ upiRLgPKfX8)/^pip/_vendor/rich/segment.py:e19 |L΀it9~wy_Po t6=_de}toT6=?l]GW')"VӫnrW#z]=B~e~{q ˿9>®x{":8{S<4:=NϑyW9]^Q͟AR'p("Y2# d= ꦚ Záԩ+qy6*uXXis@b$YXAYzfBi|PcB@qP/t?]BPLPۏ ynU j0U g:{\L:~Dp퇓5b'Ċ!{d7#Mɖ@H\hP" ~H EBV#ϞޮaS;M|@ }jQx)Bd \⸤dgng3WEp֌wB3]@4`ލM4honhV]W0n|!Zt8*wY,C״ISqB''^tNXٴ |045]qѮnl _\­"җ"V Ncg ,8 ?G-MiC.fMK!qOhlazl;)J̙BrGB Y -v@cNRzƧ9ȳ<>^9udԓ1A'<0iR4^Go F^|~0 EthtdջD[2k}R}G[LĉGڪIENDS{tZn;D|]&<[(td'rχm%˝1qy#j!T;LאDs (Wٚ6 \h5iTN{md`Czn;o#o۶9;K_5B 2V6JoUb-98~?gWmKDkw?G̐2I DK»o+(Ɔmcckp/2ȘCg Y f֕-"uB~F!՟ESʋ@XVf|n;NBN,ְ>mlwkm@s AtZ0P-N~8hWFV}_T:1 E+9Vb\;\Ӻ^[{jvжRKl83y@"vC,-i$_y 0ru(_ Sa{w*]#6/jw*`}C=Gʻvxuot{Z01M,I^Yq)j)|֧-#|A 0Ec_BC*9\ŶVR;>EzwO󋲥r*Ыo7-bWּ ,FL$V[WA>0Pe+dYydʳR73쮒~;ܾDgWd.hP '50$r7;Ƒj%s !X!(䧦Mm4j9է6= Sc!ҙ)HY 5o\Jۣ('z\bGSi Xh~J[5zywg7gr 7c3rano&"+]¿/4 G}MS½0:ϡ7簻xUͣ]zOn!-en]k &þpSs l޶QɎCo `GSmZ.C:3wƆg]/tُ }^5b}cs1}6. .` [lRl/Ŋ-HG|mȠcÝu\ D'~NK:}duZv$nI?D-*۩<,0bs)S^2D[z5-<g[#+|/_Aߓc]Y*ܞ3Nn/1d| _jHe) ^[ FX0冫-ִN&8M;p)#ȴv*0X(x{1Q=E+xeI.K]0Z9}}:qL7bb|+߾ID3>|L?K˶wbr$F/ u}Q<'c~HWczq^FbwXP-o AמC_g@ڳW~c5Rxt"VG(l }Ю^u(7r/Q 4F7ܺ5$vצX1Os$R5Bi;_Ox{rjm8I5y"YJsm$_$RQ߂>eQnz*\,P9[wTӼ#uj 䳄ţڔ9&tZoqzn'cN85SKgPUQm4Cs:k[ϙGR=ycdcMz%X[m|z5&QDOTI=ojlɻ qYC s靖e 3JtF4%\1`D-_YwX:eg?r$*ZS;7(W hzE >TV*v^QpO˴GE5GJ oiPo>'pZі$.Z:jU|J@h?#|a]!*F~;t<_TY2{9`)yiX嘺j eXMjel<QQw|&nD[/'_t$]f6*rA w1ї2V !A-(${gC_|xOaN- ,3tNd =5%Z3WYK|ޡՋ!1?+ !,an{3cOf_gpNۇxG} ( H# 3r[0 PKfX*Xpip/_vendor/rich/spinner.pyWK6WLUh n͡0 kS6H:wEPvE΃Ï3`N;S6L{oD'Y[oo_o_wg̫ZJ.߾QQ4a?`Ol&4 7]pt6Kr֌#Zȝ6Va6۴LkwvdYIq`V5—j$;pȵQnkew@;dE=XT4KP^}N =GeiƈSfֶy(M,D=0IvwJo29¤G2xpy5Zxe ,x(D(g?YQ0pnK_+  M@1VM&;LQfEV5 bd5Mi5'tE5ZzsrRRBj۹/I4Cܗp]XeN#[:prmjq*SqZG;էZlu,]\Z-kMHy5O5ceף3Rr,aId@Y,,$IvrL T;0ˋ,jE")a:mNVqsT2u`u9a*FE*;Kk`DWݏ- Ð:;M.`R$GcocN yB\Hǔ'ȭƳMWQ|0ie?y\/pp}b p|PwrG}?mY1;C/) MB ǙH=gk>0C3ѥ0lNjSfQ=;8~TuPBH K-'9:֥kVۼg-EqYVq kDY ]dwEƬ4J<,k =ȑls(~% prBuq /klz]K  [@1 zدF}l==)(uO*+Y6H~H{iFMRN?% s/\6USRphɁL*y:C3Ni'8~VT iR^&_s"z*/HԶ$KpZp*$\얣} \ k@냃E%! +@^.d[_K^XHnvg7I5Lρ?vЉQ_gǿgo 0cD% XҸ_jDç WjDDi !8c+ٷvE&^ of0 "$O ZW #d=iiGt/>Eܚ~hYPaX[h\<]XRi`ZhGΞS1C~^1xrR}U;>*橱0 p+NZ1r`ZD#56&uQimVfǹ9_sWo?GQ$F#(#)` D}]`z-pJ޵*J)Oj\AO SN)Z 8e ?)CC[瑥Ҝ z=h= +A{eCh^`DTM. f P\y4@ROY"aGB:_jG$,+xa쒏qʳbUl#LM^p*/6q& JH;;StbHjYADmCRx5]?.4U#YG5[{b ״vkÝ#At#U"4ٜ,=@^ L? kFn"ǔ; ы8`D$k]kYÊh!G,XTһ-xGww~0ex|a$ߔ𾦀7}(Q-Bt$^øEƉh41l"oJVD5F[gU;*@c~!:D0 .|>Qzmn4 DFqEvM櫤(+1 +#љ #4c Vl)FpFeڔC%Hq`I[ +vۛ7 K,~zbapXFmT^j,#pGQŪΑ4S;jz]jY}j ÑvNUNUզv!IM TڳX0=^ecVL5B'TwD@;R]|8C%?;5!]4Bё!x4fp-k$lwJz싌MEtIyhBMD2ЉsiMfJr3Ykz+xa]* ZS]ziTSZy["ʭ"}RdyknEwH}aS jU:u.3H7]@zb~4%b106E썽@p'Vɲ+~Oߛ充cdU Tw}yhbLUVM ޯ ]iW~)WT9ݽ~JM`ۦIegV?$-*Pp 6 ̚ʳA=2p""4Yf.q^"D|F"f&'(hղ-Ͼ =Aԋ^ ! +U.vv}Sӷ-<%# V7+AK"g˧|weV[iy3x~@T'!17?=kޝVrZWhSm)QWI O (D/ߺuTq21G}t$NL$s6O?&KYF2-/.^AW_6`RGϠ\b&bDsc)X ^vԆ( I@w\EČ a"!hhH%楰MVYs$Uelh|DE8FH{",,5|?hd% .(}pAF`bF=yԇ •ǟxr~u[|k5ʳ0O`[Zx,?a*Umoon֦@~].xA`(pG_qk"MU S効h%vZMdAWe [yPVJDro2w4 y"zS^ ?a@1Z$&KdSb KJ4<@FD{qL7$sLz'%M) B$/[B' j*Oo;C~+\_x- UH"+xs}8jrm-Պ Ї[m!D$鳈P?a&r;7o"@k!hJFtDq-'*w:2$[JM5B=Idj78ԧZg]eVAPKxWA.zՀNHoTimgx/rkO\eߍUvp[V\?kp0M.ۏzVz2n~76;hoj {4{y@P֓zxkpį^TWJ3H#Tk!trwxFɏirЄ z;Ub2@QA܍{z_Tn3|&۟A){\VLE\<$"rRI ;<7yPKfX Ppip/_vendor/rich/styled.pyTn0 V Qi4v L$HoTSg?1Q#Y ك2^ߞLJ,<9nG_4G.mLVvV7^gͳLtluCN62i+ܩg./<6h!k6M !'.Ѭ*[`'OH|$?0|IN+/Z| R!4Е EJLR;xTo@UR^݃PyaSIFWX%F)vI%M [.D sJ XI+7j^)G|ތ\|]خo]QD۸X*nԡ!E,*N"4 JG&$ڰ~d5Hpm.24n6UI>D7gx߄}ON|)J Jps>Kp?PKfX"* pip/_vendor/rich/syntax.py=rFr#I%ВlNU"'1 ;˅=%Wʓ?f,)˾.=3===5=f۴}tG%?n_5F=BuNCۣUlz_>MboDn MT嵂{-҇~-~vuZyV.z{ы?,;uV}vۗM]Tt&B'YȀ?ow5LGrEltوJ|%>sz_N:HJ:~_ U=]F~J[Dɾy'j{6{޶M˷_Z~/MJ6עU##۫g} e/mC9sחBiUtt}Q@nz[,D<+بͥy4[0m˯ QU]|fշj4=Ň$y{sa)?&BDu}ڿDoѾݮRǏg#n^#R]t@3'?&S`'gA@X!g$J}|R+YՋleY_vѳ_~{|7'$ /4$.?Q?JNd,7yM+mp*ZZ#q]b&*R!ޯnS6E~+'j$v)ݴB؀OjTcpT %L2QA8J=b^EC Zz[і:RXZ苁FN{׻~j qY-o}nr{n/pHWLpT8@J?n膂Qw X`@ԥ;]mȃCɷ5@z`CP9?I!?ѣ],} Q#뻃lB?b(P4wJfMVc#:7&O`|>%FXO~Y)WY>L;8yox}~lc\WXu| 6VeѾSP.tW_>{?w^ʎ|sً_C-pEg{ 0&7bЎK0##s0*FȨG_-U$l։jDt$ڴG_0עǖg,nJppɕ6T[8Q/6`w#X(Dуh7$hѼw`AܴqwyLDCsä]fcaΌQzR =k4A=( ;<+Nq GBR%a5Ex_ }Q +4u*:Ȅ6FȩVO/?N{Y-@Mafԇݤ^oS9";nSvcnɩ5-wVwXllwn+'dY_Kf>`TDɽ.%mj!7 M\nX`l)'қ4ū9.ZxExe*Mq%5VVoYp\/5J=noAe&bLfdu݊Ew^? _A8yt%:^b8+go"wmQ߈ٰ&71{ : ?UbSWJ+ ~ \!V` 4HKTQM7;z1OɜZY. :A65]nTwHɉ/IdS@#93brRУ-zvHۖw)-P[,Eʘ7;A!J5h33; %zYio-ED SڌܡFhHxg<4ë7:.돛q(+ .3c09!EO6b4KĘ4Ƙ6S/cJ[~RIIՅ$#+茶p,)5V'~>f1IFw\f2f-4b2G ,pڤ ƪ738r5n`xݰ0`i鑷 `Bq@tA`/K8Q v]C[-f6ڠJe@4h'?@%/:&e^=B%J SD63 NrK~\]:zz6 'bbvBjwR8MEƖ3O˥Mb{ϊEh8JrLVŞg0۹=Z$֯酧qKƥnKp"R1tb#BSa1&`bS,z<tY u묳,OJ?ϥn]_xn-fX`i~J1)!_ʟ7)HPvVSgJgf>`-*[%œ[B.B7aėO2*3!F'na ɔɜdDFdmЙI“5wS!"WWMuue@]`fw7#UG1VpIx%bM'vlwǯGKj?SK qI~ZjX:Y R%u:iJޟ%{ivIK^A cka*|7I;'0 d'VbkEJhV&F$ Vkba5ȞIr}[2d(qc:gj$ %k) 5aPUwQAX(Hژ?+/kn>si$3"i|̥L+G'D)P?N؍"cr>A\r:=7FhN noi|DZ"C,]n'wcLIVz TowDիC-TMYu{t3;[ 9%M2 kv`Zbs[\aóA7[8}-]8#@hٔmvǔef6xgƸ&+D&a9_Fn,eV`b.}rQTM[ *o6؇׬ Š^gV)KYxJ&GO HTh&{Majz@C\ W/J*@fiůLWi˄v]Yn3گǖdCFj DժXy[-0] |&\4P ,H_ ru=lvrP PROJ:N2)^0FƎa-L>{݊@ Da[]mlj{R7rӧ[sgL-.#c\[[<~ rĈ W/"evu'INjzwaTu{/a|&PNxQ?)%u j7)4xWR8Jv,CYy K4Վ<hi)(9M-(b)Qb/.L! fCW[Vr\I+-3&9M2mRvXG(M_lRJZz9Gm42 1::1 U&#.)]$-l|\9JEW<,ƩkՁ.{veܑPDi-p!2(C΂YhVDF 9eq:0i#S}'Jpu7_UYujO(oRG[ * NwV`U|5 z)0sX.f5v}$:V3>]͹!MfK!''c[w+la~<;:Ewޟ96ko-JJ}4|޹yd {۲j +ę2^m 44yL e\lc#}VQϸ;D/)fmQA{~T2:EN'FU#Jcpk0 AZ nx0C͢*6[fw,U>w֥,+x);;R ޤe^icn@V& 60&cS0EWUZ3=&9}/6:FyM\Z9-W&qț|BNlydN\Σ!ǜ!Zߗ׾\W1lz˺G8Y U= wI#|jo] <@Vc !j-jaMRUӀ`̃o`]zғ,96MPFA8^my0$@ojk3R}n q%`'NWXՇ] #* ^˺%⽼}% =Ƨ0dJP&@)hDU m*Z0JbltK% yճ(v?U8F ᶪIAT|~\AÁܾw8/]W- _^Z./q"ZA \$hyU8G$4ۂšYUA74٤DKAk(hU?`&wv8\-JQuUq0R<.@^Y \$#Db=%\qJHd<3;DyjU0߳ -lF1;[)Y|QnC75E&  41 -p0)`,V,Fegb6^ztZ+YsCGׂ)Zr Y!e޲YGfIk={q U! d`)hAȓkff4'2fdYYW-qsТ؇.! ,`WRٸ[i׽#0'jzTsъhPhNYA\=]ko&1ԍr/}D!LgaXʽxM@Ur3Mg ?(xM-c۶Y8"Ywt`E̕%! pg.@D Z! xr(vX t5tmwi5g PXww6y7Ɍ3 =-E8_8c<TCš)6 E݁, A69\@4'tDA `5; GpTj`2I/yqSa4Q G )EU'iGNAS $.;vNɧ3o,6p:vჃz%bO=DP :yY/3 Yʶ*Ao`Z tv <ĎQR(+hڕ05$/{ZuMTƂeur`HZ (c_ɁnUM#IqxvsԸ%t1111111111ԑMv?#5Ik.[]Ease $43#= v"*!@X ̵rjm`VY|ldvRfaqe4b:=dT[l4P:s" {97#\7-f8guY/4A t8f#.Sr6-RU0wۑ!T^DtǏ0s"`Υ)nۯP.s*ty>=d@^" ]Yf.c}wLajķ5ƉL@<%?FVW]; /ċr& 'XpޝCkֳ*0^R!sf™8St T]@A|JA 1yBnl`^Ym5&#($[xp0@o[v3~W#SՍK+BƇaOrC!sVC~q0$oz-oЧYؤbȦ:MeP XlM ˝TI\`,9,4]ͅmfj %ĕ/ZOGhjσKDH B! B[.ⵦ 5M$˳I( .@,b!~,y:K( M@*h]T^/ޒb[a5VWSɝko\+^ۦoTЬ=wx#yg*K`uf#j7ڈۓ5_p[HBG:I׹Un$ ԝ8C*6^Hw䘹/f!@͈ cˏ2C<> hVǭPgH. oz3}WSjgm2Kۏ{|ksvk`2=2V82Uq9Y+Bٯ(:]Ƥ10p͑Tt~T@9xGd#Lne؍ pZ|][!FQ=C[n( BWٵS!5Dt*4DDl%:&>y;4]&2~wAeF9L1@$u<8ag1u۬n<2}) 2_V}^޽hMljZ~JX5IQvJftN|s7f?gt<>dYDJO)zYbMQ_e£!XS%l6QNi]  7+ *v C( !B9A7C%1X)>~78\tQrS?lLΈ)sm5 z'm^| ˤ022Osy- i֨Tޤ\?,6B G}A<=XHy &h3ywr0r,Eƃ5\9]r.!(l\09?.-U+l*hd6)ws0-^3̨+zα=. eɸʹD'-t`BSVWC^;%.fXvpe򷡂YYiLg0>Khdynf{S?0n1udlDp%[3U]ejއ:HṟI#&G_Tv9~zBv_\1胸eUOJNRu3[V\t:b6j-Wm駱 ]Kv/G,?3 .(¨'J C9N]見v#*vrK_Ğ]Ua5@O t5VǮ\֫s&:]*E"ٯ!C7ǘV2sqM#ޑnxO(#SK;E8hNo( Ӄ]ЋW !FVe 3U*^=IZq va.3B H}~C E]BF^quvX Wsw*PU wH\qqHO)\gΟW@Gò{Ã4 W@T"˒S `DJ(rX aߏ-lT.>a:L/c68L.rzRJ6G1&Q"pF=?wPt kÞ釖Ad0qE^eq:c#Xt/y_U5B:6V;w2 f׌68HM/5%"GY-Gl43h'I3shKs'jPD^[uJn"LMy7]}7iN/EC{8\blHO\|-*2Fļz{S7ՀC7~ ×xY6M{{$0l"L*ÑCZ# #-sEs&岮d^4le_1K4?C ; 6c>n )!I6]t µMsVyţ|K.spS>tJ~oxDLD Я~]"]tc^fDY{9'|6->ɦ8ז_$%oˬ0Vg>?ec*yY.o3Qsc=tr6nዧ܌R!k7M݄,)i<5Z:~(aީ2d|0fgK"1u${8v%\iNݧM4܎Hxz`QB#-A|o-W8/Tahm;ueStȭ+uaLGQe5O quk KE]r-jBhDW|;5qg$HAb58U%$Zq'^9~֏UV9_9s!j*[s:Ln|AJ93(NS:c~RL"!zRx'bHl26U $'c:m8aL ̦˽#Ȱʒba1ip ᥥa*c>M ͘1o-{^zwה0Z˔Ao19B>A&N]}Mއd. E.EtCtoH;sQTkmYQ7BquTnݦ~paՇ >iAR S(աjfhw6!?B+ ڟKbܹJO^呁4ǮTO?2wף ן<~9V8}# 08hO`#Ij(W{s)W8X~Fƃ m0FO"\?jh]1Sŧ`\A$K7aD J2ch$֑t.^#Y1l$=l^Rlo/CbӷM֏>Mfaah?qc*\mx,u\73 㡼\1+I0 :άh9-a\VM#gQ/I$> E7ڬoZBrsGDcلoƸ@ jdNaiWk::aS>Uu}s{ӎ#c!D9gQqޔ85% J4оX]RL1)' rzK^[ [/U33gK۹x{gݹٳ`&0^Ykv|~bHpp~Oqٌ]78T|s(YkU|wMP-#ޓb''\`.R"LYF0OWƧvimy;p{]{Ƅ#486 Dr{T^}(7F]'-fH6|>v/>̹܏7"3Mlp$goFfS^À,gSU~c^b=uWUYrԗ2yv/<ڮ_~ͻ۲yϟe'/8qgduy[{8?@?͒OӋ0> SZoHgɾh:QEPKfX:#ӿ* "pip/_vendor/rich/terminal_theme.pyVQo6~ׯ do!%hq\V7adH ݑ-r>Ԉx@c^w,Y83XNHMFO9&bxf !Ԟ{' ll;ɟkt͆¹j;徨P=W~I@ŕ Џu|d+)2cmÉ!;TS | R0?&DO H\Q`D? zIWj^f!;8!lY\WňYfX!  9]{(ţ9a=FDUbnar%F zkN}zТ@3zfTW޻4[u|#R1w^E!=ai`XZҲFZF-t+rmܢ׋؏rIֆE_K[NQCyGQW]ŗO_`48[GIJAKC pzZcH[X(˦C{KќǢ(^ᗕFLnexSQ g5fƹm v}sfyPKfX5bRd(иpip/_vendor/rich/text.py}F= őa*Fg˳ g&6< Ma l򫪲>e3gj̬BM5ŽdJ~˛̫)XWjwWj7]]ݘeWl.+~y:y>)z?Ϋ*? \usWre)֧yjו==lYΌ ^Vyۙr"^zÛ&or],r+XUy5ŋ_UQ9<Ų*Ӭ-%]HzV=m !Y5r4淥 /8ls@:t&BAah-4?,VvGG-4'->8;s@ o5wCBzw?Q~Etށ\2Nw]G}9A`d!p S0S>dj-r<[ջ$`{/l@vd_ RS?.f0m%EJjQAܽ\V=k=1ǵwF<X 9V&EՏ=4Himzeѡ Nʕy-"I{/n܂[ѓ{ftƝ,q\Yt:~4G FFR/zGC6L^]ID !7Z)a>I!zQEPv[B/i$Ly$.[#؞>>S=.⥑9ЛgxCvzUMp$MnޢY媄o" `TRMӾḻKРif<"|C||6MAPz$ӟv V[˛YгKuذ^O}B~׳ʘɞۆ@?tGxgS`yʼnUS46}_7AѮ2AnDA9j \@ef|DT<976gi$\%z:mWI |s$a1/ٛubK !Z[ºVUtmeI(2BT m-$Fj"(}xxbtbD) 2PIk:~ѤG NX,Ll܋</6q"M2< #ёgkvITƧ_x<&u2B,*HY\&sD&J҉)*!::2 +Ӫ ڇkf9a?$xD&Fus4f9K|I5f=_̘ւ@B@_6GJ27{K"m?I+K6f8w}t83q%1*mvSo?ж6J]xW=Ѹ+/Odu(r!qZ` ihi YX MR0 "eZ5)60} nO̩9z@5}NsyO)A-pi_}~ĘjXSNcysGoW,K70u=bm˩ߵߵO>3y4/:x;TmͰyF_E=ExuL!t@30BȰ?&@ okN;}=K9ҤfD,K|8D{4#_ć]=V[Õ K`h;螞'ƘkpG 3弤x6SDOg\GA 4s;&& /<  %ŸLM ҶKOqp?xrþq3[sFECꀨ%{͛ CvE%y#O n4, }'[/ʹ*߾]R,b4'B3@D5#o3Ek۴"y#Ʊ,q,I /y.´Aq=ދ~K }K~#P`|n\lHgc/K8;[ŲKTTMzCgOaWC'tpFMSYLF<YcvaybT/ڨ=Ub_ӅI}yW^G9J룄ӽQQګzħ~iolvƘ*{ؾyh/OA@d%UޠF$,Ev\ɪ^F2Dx3/Eme (Lb<1 dDWMoѨw+s>P (uGWOŒ<&gm53X-B -P&Shi)^L2ɉ!y5(`Ykʗk(͉8svU]WEgPX)1׼ёFhl%W)_Mٻ}x ;pru5c;q=ۑiGWEU\Gd`UuY̺*Ɵ;OLH[Ӯ-2vQ3UF!n*{ut]L4C ѢU**訚<4z4G"oы(Y`A|Vb%BuħK!AAm{zU!Lo6-TpEQgLV|IXV1eEȵq: HC0)o" 5yŤprؑ:^'7&)u $i ~WvRs\KBBT <-Y^+hMqO%<b$q I# vuA1Iϋbl=%<{H[%A+?R{U)l͔'e+6e] cG7Ƕm4Tl~)Za9Í} L(Mh&r9&Sq1V#yMk>a$GWVz, I`P܊fu@q)];FsCw"|4mZiׇ%cP^d'5vӉaMJ#d2;HOՀM\H|E!YU!{aYD2т*LCTs5\W1aF$g,>_|Ge%bkb&ѿ4yB:c/I\IG)VCc3tYĞ}@Jq+} ZX@P|3g#Y珪~5wzNe_H@dUo/|‹:&`fdb/wfǼ"5S#rPSS3cox וBAlpue豱%2RSP lmAyKZ׺s?=Q4q|pfF2U40{_7DG"@z؉';0+0ϳm\Ѣ^d:8/kr[2c6ߵCovӎbLCJN=M|!U#QRIҋ}6Jh=ţ3=LUϺ7[:i((41rGE}"N4^_'xCd$#"VNd,{o;0)`㴨eb 3 sBXM; ?G 7ڢj%E7d pÃgH&*?'1e>}*]"lR" =`(tHf9ReeuGq OAb A;CcZEO৙:a*AuQ?J?V##ĖSq@<:H@wF"_aveQo4zZdVb2O(:rU MMdAz v??1z>0fR^q.|3Q(mSgcBC\E\ ^ mP6"ܳ޷0aN O!!/buz!Jj> ?c CWBfQ׭5Gl &Fa_Hˠn&/'sqAƕu"8T@R,8 Zp LSQ/URDqM۲-FWjfC;%wR?z;r^1 V8nIkMYMeН݇Ct;ĹJYv1P'oGn3Ψ~ vlA:u1L –0sz(7"fO2'xq4ꃟr;"G0C%#%1!8 ?D>6 Q%ÚAœi'1y͢bfì@sA Qp^}pxA~n(QdD{ȃv<y2ӣFωf1P3 pCF|jط$Cv&3.;HU.l ٗ`J0Te ?6 rH9Z YRh\/; 6zZ6 pDadS.\3,`G^M}?:<'}mhGbNxKt` sq)d\z L9,({X A5(?V7e cّqޡIkfݪ3`j§g55&oLՑNPAmUƖ!}f1ŔYLK/>fL='1@HDwϽH1s^f~LM!&]/3 ZO4[-U +A/3(Bvܗ̝|Vp){d7rq2rS?J JNi,2kNs=(WɌXQEwSѩ9enjK22^+#D@M?>2.M;\eo/ ;+aaMؔHMINSu(?-PVt?S;1R+33SQIL,D8v(O(t-!D$}Lh|Z*fc&6 J/QWE66&@d3YT~N|%1l=bq^N2Z=>-u)Q>;k}/us|Jdu3Һs9 /8GEfUG뼤"F /t/7 ox_5_ϩLXvG\`ft>SX)At%0̖>EH\AL IЈ?}TT昡@9٥UN 5' 'wyԴ.rV9W\XZ T?]ǓE^g'?R\ '326Lrzk_r&7ՒD\M#?8y֏u.qhpÑz߲1-/-,.GR%`ֆ>`u.J .|dPRgMo!R /VG)1#_%E TTQi:_aDa 9f5}(j5"~8$фWS=H{9o_K)Fr+.oL2f~iǔ05veU/ bwJS1=kș^d蕦lʌO1?v"a#r/hݰF"j2vqlzME(zE}hr+P&^_<,嗝kԓ3{6N1 guG,x+Z#!U;"Eo]WLT>ğ@5bFM1f+0=L_bjrI|ǨvM~O @wnmv]73~' cKrH] 캮L j3 B 9qȀrW+T `ziBVzn1\k@9FmY=?YW 7_fx,&ͣhV|26*{"g~W|cyn6OO\Im5U<-IM8ӬhaKXUe0^ya žeHM*FAZ~WW51XgH, .y1\9V/|+F*u9aby~lDkHg޼7QBV<5L[jF'~(l 7` pX$~UV-W67Pq-:_ys}){zIm}hb(*f wEyj\Vi6$>׌oP4FS+i¿ZUΡ5.4=IT^$ʞ*Nل;vI5e3%,X_űv_b!SO&r^s2Y0E]:zU{TzOd䍼(Ec[}e0V>a[)37ZyeJ,ڴዄ ț;zFnF(G% jaJ x>'W^% Ƅc QU36ڵ-8'DŽ޲kt/ OA~wR4נ%!E0 stAw禅ti`ֻ~l 8>5~=)`D3*sS ݜO?;!9^jlis恾n5{˭U=.Fz:*QWMcKʝ ~Ar&g5+^ku)3gc܄/.&Xpq1iWGC9Ӌ gsYfg@LP S0]&mF/keLφN`7g \G2Gb=NK A"4ɭ(kh4{ْ39~F icj_PKfXQuPGfpip/_vendor/rich/themes.pyK+UKIMK,)/.I-V-/*Qpqus q J+-HMq*l!":5PKfXaLOspip/_vendor/rich/traceback.py=]q+RiAXhd3"eHd,pvnt3݊ y A$Fش򔿐H%x ;{OG )}/];Տh,E.?S%&:fccUdѝ} J|mǶ,JhQ }N's7un\7??xxo7O&Ok|6[yx jޭ+1Nˢ;6ʪ;rVgA7x uӨ C蠆6n-zeV) yI`zWGH"ocT sYeGiPTDWJ44F>8jيzk-t:e)ʣ\q^$AKc8ja[+@dhV{w757s"WdŞ<ϣZ|-&::mʎ $9(UHkD%UF8=>V90^kfF[$ FOc7&,̷0⅀oUF ؚ " 6p;DG(׏E884ruZ'rF:v0W4+:bv_+c lHShԆ2F^-h4zP2DH}~r,t L%6ˆ=AϠrCzUFa]%m RE髕ClBt}ys\' EZy|Xc=X z{WU6t•`djm(՗?"Z.S/4VhW 4!T!5~vO/JM/ ƫqLQ1_hMhc4?m0=SCjS}<=|GPH6_ಸO0ZSl;\ʊew4j.m+IOہ[F^Q[DL$YSMX D׮4+Hh@<@뮓 FjhTuMCPh94!-Z1c6ǴX 07{u04hi||:[qɎXB0 f`IMF űna\˞b_M_?(`-hXGMV^[Yz+[v]`V2Y3љ"8TԻ}ܰ-y vи1 n߅;S"Cìɫ#+W-Yy~@-j+"=@!o7[z\jbQnm~tKW]9 XdE}f9Ư[䁥WetNusba mCTSUQP\QD LrPb/)pi\>fI3-L Bxh’Gh.4i4U~oE9oqaugh:5wRxgPɡ_4lOMg zZKTg4aG,)<t8hШ8|km͋DCNd0zQ5%F#zS$@?-cF9LW&o.jNYXQUSPRz"#J wx> PjA?Ftqͦ9L=⅁tA̸HDE7Mh96[0ϻ!"t@À5i+&TH B"o+ K!FBn5eCE-[䠙ܾ\{c Oo'ͦZUp 56jŘaPńڊN܌GQW]S=x||Dת{d'(z-|$Sc=4 (6Q`;8z(J"X)M<=P FvvH#_@AӯJhVuJQ1ڼ[u)G[^3T~Et ["lJͩ '& -S ӼjK𢛓C{R=m~IP 6ER{^ؠI`XS_tPÕP%Hor Uy]og knleCT5aJsGQ<Ԝg6'Nկ5OmL;sDz5;e1^y%E٠vRhOc 8=(l-|;3۴9 UUp8[ s&Eⴁj ry[C,- z< l`[bbTT9i& ΌN>@{B+J;alv)kJ{AyHlճ]OyUVEŮc%Δy5^J̄&$կ0vͬW?7Pš!WS!!VqTˌVё覡\]C[:81S3o').d+|H ]:F/jH3?*FM9?P؅RM \8i0ĕįsf#N7Ƽ$W|yO|@+at\e_[f]fQUU^Q )ё&c.QFT~&*BݳtJN|w>epY:i>zj'R˔'/2Deg<$yEJbꕁ"-^@lhca`Ql4y w^Rb&$Y, e+hWO,n1f\A`#llFi80u41SxfN88RL"@u' %Dߜ%0tZ[h`9RuQ^@Iۨp N>KpCm;ˁa&MI4q8a{p*˦2!"'™{LۺAP>ӽ"\Ey$+AL:va%0MOl:@8>ЗUiGy68tmyCΐ8BmN &pI\ XP6%kJOV!U{"?XkB $m,Q̠Z.X h$Q{f;Y-;1&JIate40 60X8Ori`f I>rܚ?%_+CH mHIP|hc&_\D>os`k-t&zc+0xƜxzA;^1iY~9O҉XQ;E#cz)w `\'80 c-?unu?:dc"gxPUdCS[h%I*~"O4Β^rjʗl1V8 @VKS_65ZoW+ &^_+F:} kخZNq,z_喟B}pspLTxc4F@m.ʰ.ʁ֨P^C ԥ뭠br.puI;h (|ت7!VxȈxb}̧bla CA/1 =/ 6C⥍T7ՇgkؕMgy}OKs-t g9S$' ]D,DvuIyU~~| kIxFȪw,TeHGr~UlMxs:Q7/NN3︰5{ѻoN*A09 $Nj|֥<8DSI%j52sFf-N7=*'C{\lXF#!dds#%z2|uؤ gMPꘖʌ%g]C=[{GA]]@ ߰K7Ē`@2.PbmRs'%[)a8CnD4q~M>JqLסmvzflIDOp,lqYG70+>ۮ\)Fcv^e(܁b"o] ݤ$",vesuü$otLfg~}7l*>4vsJ򄄞 DF̀wbl!s3&J1=GBOiW6]~QBJb T8 iO!,An0FuЕL/ED 3eytNQ8-&,5G=|+q/h?l4CB}u59a7Lczb8n\! ;m9JVT:obji'^>XKTeP+8lp=}HϾKfZwF|sls|0wCkPqMu3 >1lO'{j`.*&Aq=-ŇOqZHmW;/[r7^$qI(80"IiY ʲc[_1 ,&/?_~~ٳggϞ~?z?ُ_?y~??ݯ=_ϞD `_߈r#QU &.קd^S}0; ao]Pw w6yQn&z/oN ^q&99|'F˄Sı_ smM͏l'd/aqy:ϻ(7PKfXS #pip/_vendor/rich/tree.pyZn}y /k [k^HdPÞ^^,  ^$@ /'l$%2]UuSlo,a>閉$ϊxVYᲯEYm^, c]yg xAe`# 8,+E2&}.~K4/c~Ϲn񲎵|Ӣ^kq#RE𰬋fײT([\6`oz WWJLf5h_s\1x,:aE,d YԬz]R2UYř%I uq)pzC I_z:qï_0j8nӆWMQzzM_+ㆌv]3H.Z7oYbX+uS}߾x[xW.;}DacC/__|9v_߇Km|qvzڲ-; >5{rI5o7ZѭiԼ?nmӭ[Ka'!Y0,(zs^?2=,cR(ls\ di΁ ZӳKZ/ Cf9 y/}ָ=q#9vL-塩D̷z\Ҁzh(]ވg2fBkUlb7'M{{q8oB,gOoc@{ręSHR/_Uqx+ö k"t*]gWXxVW<)VJ߬a-,1"< gJy~0sry0_,?ɑPj& Tj*ݕRNY2P/Hv2Bih( MsK^iЫ{"Й;l]R P ^n{`PFI :ŠEs-jk$ gubޚbnac9F(#gD= gd<MJlX^tVŠ&97ꮿb6 _GɥƇ IdW1:H!F֏JŰE>vbJG|1;Kh[ht.!<ݪ6Uo3~+/M2 Gaѽvt[u/Ha&S:. d~M펊ù\=ధ0}bo$p\ڍ0IyZοZ;t"R;&"IP}ͰO]Myg-UaKvM[3t@hz*ӷS NrS`"ۘj$j"oJQ IZkg!cRˇ0[idp60MdA9kp @i;^tfȽVx_@o!O is%ڷ`rVMsH[+/!J.kUK ?D"VAQNR:1XG*g}kS wu>~8v&/DE8p . )e7f#ȣ E*ll!Rk^P˶^5;:tUu R^_H'G|~>=> I}FR8OԍtDbO?rOǟ %ΥO;Kd~>ZGĂGGGgǷ~J"Y9{J3xtj,Yuy+ﭪXyt5zsoB*{7ӟT*m\6W î@(eivq :Eq&QNmNٗm&ɂ,ycl֫fSwxt`[^2 ^\k袬3W`7׶H&b^VTG)P-QK·GW'Uu_d]3zrI A$j+Nnm^!,\M4Q ߋra1U7d#S:K]lU9bj՗7Iĵ 3 „}t0cw=PKfX%pip/_vendor/tomli/__init__.py]Pˊ@+x `"a= c`2:]wttUuWߥߓBd:Ϛxu.s5-lrunx ZcnڐQg/ћ kS,#0QEA k)񅏰1`b.R*mE;mC4@bQ dsHN}/="/rq>gpf ֲ߫1Þ |#^uԺWu(oSER6kzҨPKfXiiXpip/_vendor/tomli/_parser.py]}`y4 ieI0˳8aۄ Z$^1]Ypej'(μ,T0>={3_5ggOg֓翌.ϕK7ݹ,X0yf<鵺pC{|Apë=\ġ:2]XċnyqUjvtnzl #/M9=|-7cxwi>,#P6z.k3/ {'b& Z Wc~)Kc쓂? #HC4) :XzLX9lq{#lg f|Xt{CݦH /jb;ނ=$'!7P`!M!1 d+]q/J9Z<炒%*$yQ]k-P4㶡I/HO{_H C3z͈@3l&59`y&]};$NF6|Gx[}h|*%i/aq$ m$ ֭lL+ V[.`BSgLn/kDĉӼEF)z!Q bג!Y 3@T룖ܤpg+o&-D6"C"2|jgh! :AD@0="O7 S.OA`%d3f?01:)H8DB)· l5!:,}2A0ՄiaAdIy -}Kb`D]m K- Q= AΰnqMu ʦ nA7k`z8QJ@@H:;ճk`عPWÙyz~W~CC1t!*ɣ\t$R=P6'tMmazQb-JR;^;Ԣ(k#z (inelat"09B@J$zTLWjR68=3Yso 08RXk$LtOh!^W#]yy&QNi,"H-ua`rbc/ o@E{$Cj+Bkĵ [YmUFoi LIbN SuL3np_zOEV rE~<ٿ +jL)UcoRBC x b+ʹc"X||GRSaL #+jHRi[S_`62TfW Ƌ|.=J~؃ \ %U(90긂Bƀ°_@Zg [5o,ӰZ 0Qeb Ԡ֙{G5ɨ^Jz6R( qj&iIBH2ql&/yz6rBhL]?=OW1H&Id``Xz(SJd Ne!R](j}' DV%j]*!e 93sulGY )oIzs/㵴/T2whP,gw[ ayz |C^62enkZ<蚺nS.AQOgǬ[ɠtǁq08|j6&%h̀Z ?)tć@KCI7es)jMc&fW$e5V%,}T^Jvgȉpu7L")RY[^u%mh8xX"d2s]\ )BNDDž k `<%!^3n]jvn|u(6ri , 1PMƼoU9M66co ?83W`eU2ȇb#ʓ$8U!Zr ,eǙ:b0vE o{%$e%2)SڲgVUEzl(Y[QR$i+!]4{Qm 2 -٣@5V~EMJ+fyC< >GS0!<,@5;fP]?^0(-؜E0;zH=sq2'ďˢw,uL.6$gK`G 9Hc7+K߉8L>Ȃ='5Fz)Csږ襢^!!Eg/xz6>*n~mrS(8SMzݽخfklR-P e7آrbϦ+oy^+,[+q !{ ĎX̰AU)֠vXԮKIimwg3/ (e F&;cY,}ةrу"pΑLJAf L:@d'zڪXB=;J*G&ywQcS=bpk1'6ڿ2^>G~z'AslΊmU0z;`3oΥ%Kj4V,~S͢ZvYD&GS#筊lT6rk9FnI^ڪS HdcJj4s3j|H 9'ApsکB3t L6UO+HRm)z$^/EQW@0 JitnGziׇZ\-;hI)&=EYشItob vbsB-< 0v-$j͢V.~n@^<(漢xmz]؅dcjIDsZJ5vvҤR>;bѹ`XvЙ':eڔWgaENl #= Sђx2M4#%!֚3Ib5}83l.GYmX#;np&Q)mFfpZTl -biUը}2l-k.Θ\r*ZM4e ɪ* Ul@.izqv]%h*2V+@u.YəK-#թgcz۾ҿƽ[j0V eDDP5>duXK-?} /&|ڵ`9'?&He_\I*{X;VjP yУ\=}Erp&4`DI|*>x&Bt mGL8 ۡcS!ݫ\7%zT(UA?5.7`xas/%8=f.]UϸOϪMv T7gm*:6JY87}K r,M>`u{C_f L$RP+k:d:Q]^=1{^FCx#ݹWd}@@P#{x_Oi3t6p b E܆gJPܱ$>}Evˊˎ٦~n\KBbp$ v7bo-yVe,7  E{ޖPS3| Qu L)&C"֕(c3*J :^ 2= ޿pyUit1oKqRqUm&n׍xbߊCW)Q΋#_~G,_ Lj%ZCHW>HĝVF›fv,B?'ٱ)7p`Y'[sWJSЖo'ה-ǻw?,wym[o㫲J^Ԛ:D+'^ &a// 1t6,Qg)O =0ʉ;Pyk7l^ɦC"(wlmm DξH` CZ-%C/[" QQRV}%'=LH9h4 ND@JKp5O왮wᢖ4\><a9޺r4zn0]Mwz6]7 c\@1߬KVk:9o/PKfXu1~ pip/_vendor/tomli/_re.pyVmo6_A(_T$gka i-yHU *b;نaǻuo?~svR\<1 8Ǘy/fK hoyKPWRDubbtAJFǚΗ5\FFEQV(BzC(CqYIcYZFo 厔\ˌH7Y]&~ ZGIKMR[ nocZ˂̀҃.dw&~=ͮn4ݡ15w;Y!ܟ&%ρc{bTx^B`2io>qs2vȢIgoZ'yJ3*zˎC#DfޘqiAyjjSqV#{n&k7e4NRSs<]^uӱOIk$+e5 N>|:p\8փx>I3Σ۵|>hHՉL@(C;7Ӧ(3b܍Ec-hP%YVajHF3Yt[BrHnFv.Ra|+NӋé/~y=5.j< VR0PB(1y*-Ax=չ1*FFѹxH=˚ᾬP)vuQGb6"I[T˲oW l(hTm'[Ђ.4hzAС@y>A[M4R ]Ҝ: 3B>uM>JN$ʲ++fu零Cm.*|6 ;γkijFlVkB^&ozA7U^]zAht˕f XAĀ<7N ^s2epo 1< \'PKfX+)pip/_vendor/tomli/py.typedSVM,N-RHIUH/Rp P053PKfX7 "pip/_vendor/truststore/__init__.py]j0za{I5vCSIC!KB$t-%+%o_$fwf?YcM%8Gxˆ}L!9&##1hp6YkOya<`2/PWӥA>$2^FJ51ʧxGuh3ԘFCҺ`~} >W*/ud.c[@'gA| [buW͌s!jꏼ|xYg1ֺ?t F]ӐAU(k2PKfXUr (pip/_vendor/truststore/_api.pyZ[o8~ ҇y3b4 m&` -67)TSH]lg&(y,\sMLz1hޚo*8%I| ʄZ@MX6*=-o((sb ɂ tY!46___oLȒrp{-]^r2yE> ekӌ^rQFW廝f o3NYK_BxJ!Gd'5I魉ڃ\92ܧlMKt̅7KC20xhc2jc C \U@*)NZ5|4AT4O4պќd'sҾ +Rxle*"M8h-10"$F+I8ZJ.w˒BN#OHZ[)Is$Z?j^ +oG#`i"i͙tX$tͳƃN}4fw`E-b@a]$l7H1Z0揦1P ⫿ku9oY?Ftl q)i+ʵ}p8Tj'2g:Z*-#<ۻVGvuF7fz>`)x'o꺦'.iO:SIeʆ`Q!h2Y#j23^+n΢_3#Sf[ {R UƓPlS`DzbD`ˣ-+K\/ֱY/,q,)HsT}xNaywfm?6P;'b-ɛ%/gwg7hbdoҀb%C46s ڻ S+Tlۃo^ Q`o./>_[ N O1O5H^,^FCl,z y~;&iJ6pcc\l!:/s>EOv.c BjɐOF˨p7o*ӨSΆ ^ yYߑy5dQY+==™PKfXCD pip/_vendor/truststore/_macos.py^<\ܩq(|WG+ŏ?Y?[}T bL" 94O"!|7Pl$͗L'ȖtEhMc)"'g5S=<}&~MFk6&ĝ2-7Y*Fp<% gr2>;4-_p^pm,y#lzBh=3N(gn%,6 :A€ȬI'Y6隝R TS׎N8[Ki1o5%fau9|-_p_A)D5i=<;ؾwJ̳ ߕV_ʹҌ١!8ye*i3t8ނCdVq0"࠙y\$g)³w4B;;[Akxz\Sh2q<ęq#56F(` nRMXvjtl8Q,5',9J;eFKW\sEG%j2cx1LXi*6"= 2}J'_beBkЉݔ v klYYG[ިjGh\VDHQ3qǫ;{)|0*b1RӁlr0?i'ICФIi{BD+c !-+oDdQ!O7v˺d}K YA2!lC1wlI!]R4#ȡ&dذ6SޤU+PFW]՛5?۰q}*kؓ9`N3`Uo,!Y/lSZRvW4O2e))ѩ>JB~=!`,;";OG!u%9aln, }v"?i.4McrvFfNVu~Fȝ{b|^ 9S\i^## |AՐcZHxVm(^ui^unDb֦hLy)*A^E 8i1״M#O,?3$U-)ˋ!tGt.";sU<` |M@K鑨ncO5(‰Cÿm EBIIt{s# 9%ZƭrqRR-(d@elL"MY<2A-'J4=1€5Q=#vd Ex>G"GN{\ڍx. QVAv_2 tJU!d+*m 5#{{jJaUA͋5Ӏ yN l匧1`>L9$Z13h\?gINṞd0N׬Ql:%(~[ZT2vNu_d̠, s%E/;ܿ ~3II$^C h2;fdzV 6qCUǹћ߿k>-T+=g3a&,QNOY7b}M؁"QFuqIqJ3u ´;N49!֚SOX.@Aݑm꣉J'$czlp{%5mN O>1H!M޷ 'T.A!@mtqA&xa^0ɗY+Fڜh1蘎an0NeoRT ~S7IYUWkb KXbJ>Y9e;dtŠ`EweP7RbWB!ܦR5B0%crү`b:J[zLM!m֔FNT;7:r8Radu0p+G'Cπ~0fH,-'>kWWkZ4SM= 1'\g;b(-0M:TE)UhE~k6b*q%=5gT7ACs{.Nk " uJ*)(RO$•wd.O3h~aR[Uhb: ģRZzk4DP)'Y-nVO5͡p:n2}5Ԕ:s5VPYF R\G)kz{Yb a%Jb4>/ۛqطۥ,K+Ƶvяg&zlW>A}}R4"zX2-`&)*I\;)(W2R=b*Ypyw;\SiP#chH8MqE څ7ԩ5͟`8?]>y}yrTR^T..ﮣ_.W7>yDV7w`T"KCAYB ;Cߚ=ϡl{hZZ*>לrǝnoJ, vړsp,8lmn qU%6XFh]j4:{ QAWYό(ح[+ȗ*c*S ų(kZugLP„SMW G`{6kCܘJu(~_Ű^9Y8hRDa;`K>a|ڸ#Fng9} X_=W$Lya DJ e7{KM`Els\dΩw;KRNBџ%,f?GjM(P iXL- 2ګW¼^H7ߛ@s(teP1íx1HΕ615ORQ݀1HRKRuy%[hZ^x?#X *`>o:`MeϨx:fj7 YÞ\ڨ:e5pNpb)!s'3<3`biCxȫSaiZfߜ)|'(_X+,M-JY!StqqŐ;Mt}jHC(ўwI1d~:sNL|I؋?_M `VGg-T?BAAS0 mICgQؑ3FVԒKOdj$+}$2 ?ԐOqlJQ~LߥqdA'3 9bZl7k6 qZfR24TH(~W@4H,X&lCOyJ4zlS:xSw{n(PDތqa- +j,|GGQ"Y-\c>%.zWsRNm!A5@%xPM=oLEᾚ0Vx[/_eoY. i7AǴPKfXi\j(pip/_vendor/truststore/_ssl_constants.pySn0 +H^/^Bm:ѮL_vkHvQr8Cʶ 1:e!~Y:(u _>"`ʙ!zxB A0e\ OVC:wJV |vqY,Fn2Ai[h\0XnLGx+ HXٟw`46@de/qš h_MAu'VXGf|Qᇻ,JTCQ÷]3~;||c?E[߮_k"6:$)7Nm Y11„[ce 1BE6>J|RN1b 2#`m b1 =Gն: xH֐I P42#|cm- dľ{&sl5@t_6Gu,ka 3Q=e0NE?U$8MCLF8bi Ff| 4rEc[5cw ohဌUBbGZ6&#t{]l[H6eD8d;:)Fń|O9a,yB-ਞj]j3+Gz GJ#@t>a@Ȍfא9\toGA@tH iο-Hmx& !!؏%#Q!f xљyw"/(u.6gn6.dz)G@kP)."9~eA`|;M&tW$ oY?Sa0PˀRd!އӷ{`~#]40.fq uD[^khN0j0SS:L3K9(d7(( qE5'[6`#;788j1 ҿg*u$b'v:/<A<{%:/H"sƁ|MgS!>ͮ} RiI_ǝV>uʫtw>uɏP"NXv ,.; &e'߿/P+ @ pe@0D$[BOi /IEcI{Y,ǩ4 5QRқ"ZcTx1 -“|([y7yT2#R1FG WFh넞+Hi41hChnJl3<]VIbv(i.^5)s~`Hi9d# ]/ien ikH=G@XZcwy- (BWT@ͲҏlFj7;|u- .Tm'-Sa1J?ӝBN[\E>Mk<֮w4AYk k (G8Y!.tȑuYyQ$?PI m14n_DV١goP l7Oޞݐ-LAP2U%Ghz[Bp>a^^dm!TĠ2Lq$"$_ugK|8bT~-hG4%΢- tSIG𝝝u {^cD}I=HVq9Ne5%"yd}(;R D2s"=~54Y2.JkЖ473` #>Մ|FoptV 1EhR򥮽⁥8ʙ7^"MCY<6vp[0.T9!VRNjO,Ӗth}l_},=+fKQ֭{&@CGf A~-l@7ZS){yR#\j>TAhNԔj>U5}k"JEW.*-'S-sr$!~ k^.ᨠ(!!rjzn~64$vw:bȄ2oи\T6䪽2nڋ@َ#]ʃ=hnokh UvDjM;YawF܁U# #ΰ۷.Jb?EY@\c;UDkn^1plGW{gyJ'"q # Tp9H&(dnIC95a6*r~PJzxB1,JK>J{؃.<:n'= y 'F4n4*_c'/!F::P6eU`GIJ%oCy ;=$YT\jY K[ g)ڣj 5:&[O]Ӽ j(¨h[ ,,o_tQ^$mQ>͸ \\eY;bFdWd\зkf*yZwvks2d{ܕN|K8n6R|i27!FkGjY@U;"3|>EizI^}j5yZ%isTɕV"V1u<7zXtjDAƺ)tU2BBAau !/ R ٪]^ Qu.T-]a&@08CI};jGA!)RWJVU^ (b9 ak$pG[4Wz'S3sE3m]NX_IөTwh+H^-/g^ңDωahŔ&2xG&JqM^}nfl!M!KWg2djN Hd؝b&Jz5I<bCu3ݓ%0[EI]s_rLC-uDr0_=+%l4`Vl(y[-%5sd90 Yv/_5BLg}Psj\k;wK*y HKI>/!bٌc Eik9z : Ik s!^m}z3d+]] KTěmT稼O?`s2K`}&Ml݄/>N(Kt {ޣ׻j`V~O/zb.pjm(:̨H:fێ5ge ?W)%W+ʑ+U魲;j}A"nR{x}6ILqț~Cw/4Չ^3dŭG5'SUk6SF I$`J=['iJ`t%P+EWZ4,ΖZ  فD$L}Pw>}DGNhMWCejoҠ;i57ڕj"mN_GȵaK/u_ n[ Ơ&H V$ ZIR2IZcW2}f9G,s[8E?PKfXpip/_vendor/truststore/py.typedPKfXO (j pip/_vendor/urllib3/__init__.pyVo6⠢]xJ `&mۇahlsDh/KcE!~=iNpZ-Ab7;0;A B! IRz; H6ۦLը`8֥&*0IF |ӚVa5{:I^-(qZa@햬 l/y Be jYr$w%"E+ĕK@4|J\<2r-3} I.2DʹS]C֢#qJ(Mj`bJk*[^gnq ;c==?R k*hDB8ܹG]إx3¨%`&Ӱ47C.K HӪc^rؿlZ[0 J{oKmaDx|pyq]!QJ}I-<bCW<3iq%)y>pXCʮn՟ǿ(8PKfX?& l,#pip/_vendor/urllib3/_collections.pyZmoF_j%"NPK4i$Eq\[S$C.m̾$-;ӇDggmg.,I6jk$LnV2oHGGޟ1|6 -\JEuVU%%{*΅HRQ)VS벞Pu] w2ڌc!jSUSTndz~.-[.sHOs4ِ>RPNf?OEGCTz Z0ny⫪y*G(jKUa+~%:FObJh{#R"C$yh9c糏"M^lf?~LB.LsXU:?YSO1B[f3֋o˰*7F|ݵL k+JrwC\^2RHsA ;,~K\Fj+檅fZ"2MV[fݲݮ!_a3'6ɦ*Z=׷r+/Q[&&na igei.` ,ObŌOk; ^ e :/^ i(d k@BxgR>h3/;B3Α @3m ,AAPxB#W9D. Rȥ(2 3rwE 3vP* hD Zb!Ēm3vL23 &Heu7LEvQd/vcypReղ<$@vG9&+ʊJ$V q̀*efwfJ̊h˂=Mhn$,DrEH MLJ#C)ENQ28oCu@7sN*cI1N8$=sS~ $l 1EDdDXu)Q5Ru ƗʉHD̮CG(ɒ"~ڳtC1@|X_ [F>ʒE=$_q`GAbaAĄS[*pT( )5 kZHIg#Eu#kY"m+3Ĭ[N=jZn[SF*y` |iLR|, OCfRUU^߁j\ڨJcr]ׅAtM (ІdǹE*o5o^}4f p@!ev(\*xjx wְRڐ:^JkcI;saK^%9ҝi0Q%cbz /;Q3K[++ (x,Լ%gyYVV[0F~SC /+&^ ĨOtYF hhʭ0xmXeϟ?w' Ykp<C4j,o/|Sgk^!WiG}iw1earqt^v/S'’uǫ^Z,w o9hd|c `hΗ5)9"`7xFKg9ˁPBrneXP=K 0?X= s0Z6 ,5ؗ TaON/$=4jJQ>?T"/8 8Mt㰅N6DrTAc%69|% Dэ3e u6!\ȢłUXS4I qd$ґQ#w>3sýF~Т0%W{vu؍ӈ6Au0ul&RZ KM .C g!p3ⱅkEkΟzNJ:./'"~L1Axeev`v @2Nr$Nk'׵/1;)Q!m8PaW ;~{RiB귲ؗ3Aa$GvFM~DOMK4kU%ddI^2+[Y0c&j2D>O%bFI[Yܑ'zH|ݙgTClO[u*Yz(PMKyMn94ɎĹR44nE74E9{O.AJn#Aoisˆ2s6Ht4^잣%Htǰ)nq([1~^4 OqЈ WfG`ɀlENubDBGg*Bf> ,\31 aI .ٺ B{]Q70wE+ @5z#][AnV 0fܸ݁I1V=g'̢gXJV[0o-Wl^wݘ`6^ZsLb_b*$ yADB6 S:be4ұaisC/?NJN[w>&ҩpcpXnzahFuRȟM13t蠣ӻG\Q5uthFFKGR#fݪ7϶R{D+'Hᜪr/?bS'8 FQAT%[X%5/FhluCSP;jE5[Rbg1+T+z@C¿M'sNedZ'Q 37y]%4[N?[~%}^znysJcW CTË|Zq%l43&hL=Je.qJU\kJ8(05>M#"[f<;F>ƐiSEv򤉞4{¢٤Ԓ$Kӟ[w\-b&?L9K-MpfW%%B.BV߽UuzӠzvrx$v%ޅl14u'(a<(,5UK y\.sGAa M@/il"2դxc E4.% M{ДDLZ_oИr҅}_w,kL5Q$6-Ei 4H).-xG2pQigT!8͕*ŇjG 9Dm=^b-{1L]SyKw&#|##y`G/)skG\7y},VdIޥh=/5ϦWn/BH"R,YrD=ფV~&2No/k2~əhZ]c (eEWw3.Ydpնۘ-lݪ{i/PQ~+˶q"πxOq%U<>}fY[Ym ICԚd:}C8f(Ib9Ţ[Ŀ6jYEq!aԫhvp? 9u 3v:r5-PKfXD@@pip/_vendor/urllib3/_version.pySV,VHIUE%%) e .~A\eEřy JzFfzJ\PKfXQ;FLO!pip/_vendor/urllib3/connection.pyP,Eثj(d)a%pE,Y}^CP$6TrD¾`4vB%ujPM֛D})?DyxGIb_wxj2\_|7_Y|70Gc2nG׈/KIp:#%ϭɱ垦b:-PW/3k o\4ފvw+P ^]..Xfpԁ6 SYJL "E]&j=/T~27{ hF6"OӀ:Xeb`npDOITAZ˰\ e }yK&ow~PZQeb@&Z/& [OF18Uk2!ccSH5l^;{$:\w6 RZk ;B5wΉ{$E +@ptRwCtoyeFf]h \mB$ۍɘ=[2/1 9yvTiDLd YNOuJ=s)SRmjArCP(ْm)Dnj pyH=_$eāιHhXCw8J4:DrA3x*q5LO`bcxN/e&Q#y.6< CK- QY |W&N\ֹ$ ˜ހOEe$ R6Xv>\ lӼǂlC@EaZk!ɖ͹yH!W0NFK 䒢oQ -Yn@kYXU' 9Jlu\ Ja`lSmlNrG$.yB˶hb'%Ë7%3NWLߑ*xL]jʯE_A62%ih{IVfX6ώ+M K[0d}X2oE8nMH/ !*#&2ԖlhB _+Bϐxh XԪ3cөY@m|3{Iksx <هXƏFD* V| Z(KNVo -Ch4.=-杠oxP!Tԑh6B`!P>e̒c7 H8WLR.I,_naj KBC :]lj/7,y3kQO~{2LC,WC-#۷XFbq;w7uFP1 灮 ƀ0ΥLsVC5  #A[_%`m3p w\W|aS2eDVdb}IrAH;AC eӱn =^mC,)TYGӴqܢ6O ܏*Ae%h})ÂC~k"m]{? iv#L5؞KX=|t\Du ܊p6$m)t|վ$ U5}żCRhCLoŠ!}w;W-~00KjLPz(%hDTi!7Ջ3 3Y|FwO';! :%² 8`߳nat!SlUqYF)&ca mBxË". w9| ml>j&W 3gOI+Oal__x˙<ʣ<sHgJq. 8JHeW9L@0j5bi,s%.T҉yJ\.9 èbfyǏT̯oήO*rI%RpKVE $}Z-ں1US74`f GSoGn꜎̨X_iwNKowۣuz[Hb s&\m+t^EYKV <(3/ICRЂQ(=]UAWޓNGlW C&A6fzOZt( |rO%UC5b͌&i` }qLJMq(c0AH)w_FxϺK!.W3;n[xtDmSWcN651w~ dqMm^6ɬScjWl›z=[mr5k5UCxmzxcڈΝ] 70pP˾((yx8]^7cU &gۼ` mN0O{?eUl~9Mg[ouɟ ݫ۫Gt:}6- }5XF:8? 1)l`=-$]Qbxvi6;q@XۇwdpcGE]C Ao^q*-XܠqyC*՜ғx_U"Gi{M8 ycIX򿐵t@»{?a ԍEy 4=$ cI}lt#ڱv&{I7Iּ*8/L#>^vO&iOocl_ȋTwrn7\n'MOUj*cIo7?kxEEs:؁baHCyWg7c9ȳ) ⒎p]hZhxiKp  3 1A_a̡-4|u~^U7A3^p2n=O9Wwߥq.&W&6ii%=['/!&&d snRݽ{Po9(<~V Qe%<* (6@SOE?@(cZ@"V:P*9i(XyQ'}ni7kިj`BHM퐓T_gꇪOTs</x Kw27PKfXoN*zt+]%pip/_vendor/urllib3/connectionpool.py}s֕+xDf)Ȳ&լqm%Ѭ,N6 *`vw^ 6|S&cŹs,zf˾5%zS7]]uwjƿj?z*(3z5<-[nXudmrIPXl+Ǎ٢.K芺j3?^]]\5E' uUq;lY./_|oUuQlsU^o_|;vi6˰US, ͮvqj7I( '[_u l5^iacu۽ɪʝU)_zvy?zHPoOUlKoսsz.}r}wKJjO.ζYJZ5\sf s؋u e ,;ZPTE7[U. >t}&f=p8kl`/ ر]Gokj<M̳aJOó:a\N!OψI3hGKycgvLܙ'PѓFqxLFɓdm7J)Lm/D7 ІvR.];pJ B#Cޮ¬:U;ѓvdC0}r`:xRUݖc^u Q$KDN e 1CxrttJ7DӺY-ro:ٱ^<=z]\ gy7. x2Fҳ?8;Mw^w/0&J1?,зa-UH؈cLU?&cґppXJ*]&h2Ug (MqU fۑ\Hd = *~Ԍٗ1vL/3P $첮o_!bZ#-CkvREdӷC!K`EN;:N"?NѵOĂ*}) O\\b4F`$D̲Y2Xd02gƫ2dWU^yLXz3`ݲdYY@H  =1(W2}+XjuipY\?gMĹt*Pa 0r bZ5( b MK\J4&kib2YymKv/٧݋:ɺXz +44DYgO/mo|ҲQgI9ˊҔ7đX= :DpgըRe-aeZk r ;,4E_fΝV0>$FϘ|th}du)bɢZ=J]}U*`5,^a♴4B}ڔŢʭ+rz%,V}CKg|E1 ;G)\,#:oA`2L( NPSao 4f>,ZOly*< iSn+Đ3<'zWxs>xڛ7=,nsقglnNf\E*9ĆqbUȓIWH "LGdFp* !}ufWo} KDB#Argp&AS8ܕ'xh brZmƲSmNJENu0ى_i;.JS&^zNo"wԏi2 9ô1@߇`lo~=2Tdl7I[\6$h@TWi =[0n;Zj,)#Tuݓ+T6]dOqÝr>P.مgUm=yO:0&?l]O#Z\8gҾn`Q@D3+󁶢>~U6(qoڠz+1q<?l?-y R! ص1HV߳ʚk`xs!ay]D}_8.5hs8ʎZ-YWME&tP}Ol32SͰ?NiUR!в@gIſ&ǦEYR"6ciG0D֓c$$Oړ'p@bd:hK22I}uB( ]n#Lo=-)R 3ar3%M̜ tqqwy6)I<5ŌhTٯd̞D4YײMB^Vgq2RC@'yИ.CPwa5!JCp}xF[|)5B&.j V=xVx8F4}"8OHy_q ?~xx Z A+:!₶DX gC.,e9zhFAiDy)/ -H!hL90rX+@hkfMjб?Kj)TM5$ȭ#C٨o@($93}>b ƨ;m6m SWHAcL@@@e`0QXUH:+Dm^M ta(s'kPqf[s5+ OIlO`B=uqΰ tȏG|Q9< Tg" b\iؖsC.$bң=Au;æ)cݏC-Y!!GҖ=buc$`1YIf\R:jfT$UfxTcyM)P8G)BOGUnh^]Ѓ=wn(j_e谣)Q!ּ[ bLF9晻## $/k'TMLCo=)kpOFHߤ_J:Uڤ ɩӨkխŝ|9| t8XMhY!'sEv?RxRQL nq<v+q6_kC/Òغ\/?h!d.7`rx,|:EYո[j{n@m"H[ja$NFuyf AwLݤLk$c ]ZfbX RBa1ܩ*3AI6gLZ12lsݤ e} H$@OX"9u~Gw1&Xr۴+}w0@tjs,QmktN.ȇiۄSN}&yzĒi1u. x1TXf//& }h-8hhZ(DRHp-:XҳԪ*gGcYiɃU E]egٱ>`rQp>gH9?wsΓHt?hA^"\ Sn~ջ?0M6u] Xv)MgO>:>>:Qc YKyXTU~útxJp(D|%2*mT"4u)M;-:lV񐏃S!|fقK[nO/6ZQȨ,#l4z`6ixUA'&%7Do! k}f5`8 Ynm'D65! ݺtVĮi^IXw_gT?@sد\lw@f#%N''vPRWd,'V bûZTF $cGXC u+ߡoLX*JʒXً;'!29@M 7SIK ]Ӗ`8H_xh ։9v'y{cGa4ف'- {|71$S=eq-P٧;@ÈIY׷hQ+w7 %YtY/nz\X3yY Ν2Ӑq][aZ~dǰ# J͂Yw ??Q*:g>@TY^wm|=/)'}QUw3V4qrݮbl`F=*ݷݎﳢdcLxC)LIF; }Z̊jY ?4FBMnMY&nx?JGNaxA;%)Y&'7JgF(:>2Ө.;͢d; >bGX&v.N6Ү*I98*3 M@ҳ9ƿيbxt4v05{2$6+MR8;+Z讷TlUJp\8xN'e$d KRG Gd\p;2;tPJ+JsܰIg aD9qA*/Qzp]/F(՝*9[C㱠yЬ1Mrn8ED% 耻I.0(g܀ I6IMUAbVwEA7E3DÎdjÙ.йsCxVH;8ޓx] "Gq5-2BХ-H"3_pM;q{x}bޅ^ήŻKE:9a^|>MbcH0#G*2Ar͔5l )(S#HSܗiԩ '< cIyyθ\JͦD3QvidQ4_6A9_"=9|f&^{t9aষr6G(f$#v<QF֍9G9y),V&\aZ굱JbOޅj}s9.HQTf0?1!݅Plɩ1w#(R=p@̋%u%u':Oi& Fh5n"2@hӳc؞XKdr/@(_פּW Gj FS ߾V%M^mmқiY4z%ҭE6pstPzAGT%zGp5Ph0N/W@3O<z<|9^v&gXL|Q+.*.tiM:\(mEԩS\#5#pHlZ4 ^Hm ME |ޤ'uO~N1_TpMC d6R5;=`ar(uh-J{IdU BkT T#![t]0jMxFy!e=YU\őiXrD h2IDFF':K{7/I 5ϖFIlgJ[w>%ՆVxi=s5^P4}I h9X)SbAˬ-F"P 6\"3z5*hրW)cB0S@EXR]fiQpGr=1mhu( ֳ `ՠ`3vt/\},GNRDR" jw>(̈FE=Sm엽9=0GB^Ϟ21");XdlzRJLQ GZ5Xm%ja3M˚ h^^/Ƌ(0"ڑ禩k8*L fUl@s%<,N5hvg*'Ljuew\Q㱊$hI&j@ƴAOI3gh. Z#!/mw%X;{N}j]:ȁJYD[|c|Bj3 WOML\۷g/0IFH͖'!Xe2F Mn2}M v LY  k̐L"!A1lu u9>/Ր/t,"'*A͟ pz9 b*mȊ-:ŃG\zMPo?!A{ogl@w=-Etu(?Qh ~Bq#`G'SL(C3HEVHp&5W>\KK·a=[P0&hh:4ag,ͥ^{ wZǶ:Po0ӽWSScLwHNkؽ>W+}!s*2ŁM&~9F/zNFu@t<35[{ݲF 7KT@J)U’ 1z{I1rb2,nѼNmg??dR8"ǾĖnxT$'WlqxBF{ea 6J̖`%9rZ?l8bĺ·$|m8Gǥ~1mA4] ,b#-jѦ4s)E Hž/[5D:v="ؼ`dak7Sb:+&E5LE^5bjbG%h-XVYp& ըLuw)Yck4RtmŅa4Jn0g A lF84'!6aG?斾2+yP$ãC{Vj(=| G--Ў-_&;>~:Ś4ߤ_;ήbh?y44LM0HxѪ w٘ilŏu kLJ.Iliڇ7W L1[)$nCѐv9⨃-)sEg='r 2O <+ă'mrSOYAhn^Yz/*oM5YpuơOM2Θ[xҠ0:$ r9apaR_?ycH Yӑ_/2aW 9/u =_JSn1PO)xXtpFD6 қ\Ou~qN1XlP^ƃ֣p9oV M3**Ozv$¤`dCh  Wbap'8.wS;^gt%уF_TIxq U2(~C\m] ?+5_w¦4A4M{܍(J ` ~!(:¶_~3!1j M+tO8*/U[ -:oxۣխA.( y Cqu[\$ r9WC##K,"!`,xT(¢P9qw$@KM<َT;%MCPqS.܁a7Rt&l c_AZ(8[4]YCEJQCkgn g8lgmr~q0.A:_ ԎcWƮsՕ-q};@Lfu B(68dߡ_L}կ[{u(8ϹˋyHQ/ѵ d3Rd&/%{ *H0{ZRr?NTwt8(/V|oz gu!C߯=m{<``B;.nOOy=EhaqH-׋\2P~ 's*:Qdh;݉2n Ɏ &N]%{=Hwa)&ۨVX<+1ώ)!P/E~ΫSԔ~|d8;,8{XW6Ս@sa=;i(0P}`#f&0S[PuB@ĭCub_=O#ḧ́B??>m(BꁒD|¡fqa /M.U41MaD E/Ubcimz|qS̀5[a5 xPT0>ӖcW~S^6|4)?nD}-ye}N=`;0OC5V9A=M.B060RPp:K`TFw+s:1Pux~q[vмt=yT<6|':X\medzhYO-_z< `y*${`QwB?[,p~{_ p1~_I~dϾi&I^ G7Tjc8եQQw9^5)TQ) 4]Ff}Z4 ;xAkY_ݩ!xG[PKfX^I  !pip/_vendor/urllib3/exceptions.pyY]o}ׯ  E z_:@4'qMR]rKr% o̐][CĒ wctƢhSˆ(b2˵qN '"{4YGvf,{s.T U<N 0nNJ:jFo |EVv4)}4FI5x917i(ŠeNT`ֈ %(ّzO_!֩yҍ6L bN*4(Ybj ؀W.&V)MLX p]ќj2g֑4svaMR/ڍHXU oWF. k PM0IyâP)h% ^V݊:`V,x;{Afu,HoHfN4oR .`rI X'72؆2AE!bVJĈPtn3!d0OY1Udka1R@[ d9Ϲ9kcEsnsd?p c6CK #+<4Y0ad@&abEivVʯ,T"LzDi!$КtEѡ6?N_Fh8-02TRle0I/kMSgL[ڊO:"U̇[,M1ǿBnہsD `ьlS3#J*d&tV,"A6@Apd ΋'<Ɗ+%f: cÁ]pQ'dBl9+ȦvK>Jšpr[=O?=筵鮎Iǔ]$<0(S$X=pᄥ7f/ YPmD qtYaEĸs<ށ#mѻR턑ry1֦m̊փoġf&=&MYO4/u*4+qh=]]5qQoT_]GІW*}Q6$+lh.ܡ^7@ Wj#!}@T!n9;J1چ_؉PMM`(jml˫p 9MO [ (I^ b!]I0AkdxhxouT}f iomgjGO_a*b#[VX~^6sxkʝmUBmX[ƤY 7oTh}p>arlN&1݇HNOkhb*HѳBaF[_Oܐm=Iڗ9 7㎃.$[O*e+tOP ruiHlutм^ a2@('Ҭr4kZۮ:Z+d: HZ bT~Wx-d r88q7+z62(/%Xqa\.%gk U\AhCK}DU+b_~Nܻ1D[99r5m;0D}_aoAHzPЅĩ916VK?|}  Q|kDw7 x^VPVv;^Zq\h+;N]_7-& ï+"JLo=mL@];a_|ye꤯**E\YYX;7.<Ǘ9꽱t>]/NB?:)8 "j"Roo2Dy#̺S>𾭿whLk9h \G";;e+#R%Xc6_xq\Н_yJ/Z//[Ķ PKfX(K, !pip/_vendor/urllib3/fields.pyY{o_b ֶ|A*sq$9mP+r%1Hw[Mޙ}ˇ|ɡ˝y^ẒUÐ$"/%a+~:߱$LRavɎ}녒FkdK ݱ HFQdSq!($d:Iyv|B`RXQIdgGy$ Yr<#r#rˉwYN?Kk2#q^=JsDZ+d2|Y+F5.edYhZ Ph)P? ȳt RX- p.SC&rKᲄڀݙr2ծF,A{MB,e{נ9@˺4*NhD~{777M6hc RTxc򔴰]!l)ϴ4LDI5C I.Զf%ׂ6 pJUKP{ٜ'^nC6RleE7BUO[aȪφC*¡9;Erܞogv@ py󋫋7gn̛ϧ=1zNjEPdnU`Ҿ`*ge,P`Y%i"q f`4@A^&<|\ۉ3фqrxwkϦB~z=mNrM2v8ͨf bh;aqɩ*ڌ`$Y"l(܈m_\'&fTEnsT191rPþfgfv1ϗ1̓u C+ &xO ͑:b&ϜMF,bj'vQ"*/@75 H %}u/j_ o!='z<]M\(+H<Rt cN6|13|HPduJ)dI֐zr1^xN+V'7쎣 mVJ>=@5ͫqС/9KkzfC@g]Qbfaj Zc~DЏ= Ö \Ec=\p/솲v5_93NF`wd b½B? +PFw09%3H8~:h;YѼzr ;nu}WԵg&J_4ҟϟxY&3ѡI-rM7z;;=kZ|6xgmϠ2] 㵦Փ~ma|u s3ݚ1 تB&v( 0 MnKSzNvuk 4gw`+SV.؅,=V;Nާn?fRNJ"׷MX>-*u30;;anRu|C &LtOa0ifG7S f|4&:S;֛i7R ҧ04]'t\!^&7Ao:en[F<5ݦn8ZuB.ԯuA򜘻چe{mo. rZEFIK2{+y@6@u!`xAj]CQQ8P`W q=Rj ྂ"ݹZ=\cUtHՃ;̻M%h$b9vOw#[֠0r`T^}m[u/D*ϛ{ӄڏMKT`vz:LxGo3ׄ_iҫCg?PKfX~ pip/_vendor/urllib3/filepost.pyU6+* A (\%hHz)Bњ]THjw}ɷgHQ-{7%r{aktEn0X ^Z;Iz%wmz<'7{v1Y+P6v__=o &V<,v-MUūIo>K׮O_$I-;-T>7 Гi8pk(`/y*6ЉҲ$;V)4)}- W<؋mLn3J, oTMړS ]٨-qт%a{-HaI"U UxF릖D6)E*ώu/c)AqUcu"Nѯ (-z$x!`y4.F_~&#Z1 kl%{@ĿwiZy tv;aT2Sȉ"lѦɽ40m)щf?)^lۦ]7{ٵѻ=^_꫺G~y:Y17:Uq)qMF2xkԷU0ji_UEG/ug75mV8Z@R绮;]UElx%1:d&N6o.NbJH ӱrK& p4]5|,b;L..^?_~eN$@R2 < ku_Vb)F,`'o;>Z4M-wSyU p(~RE+8}k)7j#7k`Tw : ^} Vou&>0fh0/A*%@YmtT( B:?wyUǝ˦#xmxJh6?( 5\ÏMߖ2/6y=rvDCȃǘc C?ZȬ9q)PwE]Jl f D/xQ˪5 =}qor;R IyF6Be̺^j.yBY=BWd/g;"{$#ņKotf!FEATKzL[E$8&:B5(DSӆк$Ehz45TQN81 @QO&BR9nۑU=slsnѮ#$U%wD]?h G`'֏A$uis~@HZktYWV0Ɛń3f̸첇[7tb=w9P נ40/m0y{T`x׿fW7(JY.ck+YZ~:qrB87=0aP)|e]xv_>zagKb/;Ko6q6Ȇ/y/bQ[g=U0]p|ͨ4uBBg KU4 :٨dkØ`|; H"o|t]T:TemF{}Qi֭| -n"|>= NV9_wA/81epRk's5Ϻ@5=۞8mW-eh8y&8zJ.6;Fi^;!I pQvy kC4cX9B;_ri#EPF Wt!dqa hs9?~M6JP#?(wG)tdiqT:iyJ;EȢ𼂫(t$.#~txhi`9UDVFPQC3ΡіG1_1.wl6-JUpc= [+v_WJ;1m%+F .opd9`?,B(MzŪ1Q!: b=BYĐ`=($!wT iQ0XU?Vr[$nZ7|̙-FG(<-p:ĕmg`". a.U!~&IcLO1`B0<8,l gkǟթCƥ*;<^%`/K8ZZL~ZU$x5DSD T 9P杛i 99Rl᜶>RmFb8sBC`m|Ze:̘^)_ˤY'ƅ;E}zh⇁JMɢY+XNj~Lj$`H3Qd!1K{T, $0Op}gA쇡pt/OcP'ŧlS['8z@*.tr\p ǚuOp8ʰjk-WIQf(8Gj2v2$ºcutUxr8v0e$o_5-7s%Ⱥqx0JOq{cMw[M&DsB4V!$H>7fb@6dN$g:Cg6Ʉ @;v~ ic"[+yꂻNӪjtJMae`)NNu%E^o=zq] -HR<ٵ*,g2Hp{t Oq߸p Sr"/;o m+df;;Vղm~L_P%ԃFUAے1=Vzl.0*/w,;*(3cL0745}CԄ88bo+wuqj5RWRip(v<gzJ>,JS ;$D-{F8Ø+H; c|0{6H ZA 5r].cZJϝ'77"&4s`HzEg_?K/l+"c0I' `1~xaclFR;~iSK:CnŅS"w//͢92&A| x8EGK͗?(m33go dьԄ;ʙ!^E{(@` -j[(_&a$,LblsrlEu6.hj45QaSifs*ŏy΍R^1Lů_f1v;jݎ q.cL)%7waRKM17d :ςKq9D,gG˖Y⹰YV%;PE;DO95:2v0MOڧAX6{ŗZ<~OWoL/}0Tglh,hJz@7Ca`͊ ֭&Pݪھ0&XvWWV0mm&\!mjx:+ș:5\s@ANo 9xp=}huyKl~v?nM"vBW7ރ#@7,^r%(t0a)eۇ( Q`3IX8}U%E>H @``GV|˧T2sR!D91\Ʉ͓1X·eRsndR/FFC@_ֈ2b}l?K,jd朞rۋ++k.%=zc1o[ }(SeBz'k -la߳_+-E[T7Qz5e8&xcX$ڦ\ F vvٓ `,HO[֪Κr&O=ݹ{O@Q/s=zϒ9 Jh4jN5dYBZip~Qo5FE}__R sYn1r wS!PEt[Q*$fgΉV))=s(7 EWY`I9 H.0}8{Ɩ gdbhޥWQ!f)~P?(t+N} NMnՎZk4?#FI(x`Ζ> ]maChN%8V(Mk}.풤o?6mr`~l&@Ϝ#{2 lNns1}գ8[$3~Iz2?Nyb0\9Ki"6v޿ah7gJUAt1)-|+_jz>0,)s`ΌQH[q#L;%` N/B Y ?6Sm[IO}X h)aDCq 5Z3J}24wf5{FAQPKfXY#pip/_vendor/urllib3/request.pyY]o8} 3t nL`b-dڢlN$QKRqG?;aw*5їdɹ1lbֿ/' ({U>RB`|%̭sQ>a+(*QXD/7;'t$X[A|xs/ 'nʃV2.kʑmTQC *c제i7K fВfv&EdXmDS燅 $4NG#J'*LqD0FJ '/L,؇7w_mF"/6$6~N>oAN*<??WoPU9Di/< &-ne :pOYOiS$SFw95JO>.$.߾?74#No6I8Lw ntȭ >{Hй~1~~{}^O[4a`~2k'݊z "[u.f`46II&I7\wUWg\oiO3>1-]?HT5`Eׄ^=_H\D JKZQ8ۭ-\S b'J~7WvciVGMo;s_l|/\KnEpLZZoT#Y[E OTmL,Յ(/%.ߝ{Pokxg|(6;B 7/PKfXP :c wpip/_vendor/urllib3/response.py=kw۸+493OwN8w8lړHɬ)RÊa H{auf.b2YU]D$M^T"yZWr$׿jd+ܕm\d|g8<*zdgJܪ-dQ䅈KqC/k]e^WM[~7+rRwy&oUGyr^%yV?޾I YJjθn2.ܘ:]| 6Q}n@|^ݻ6|d1}%B2Xz@z0I!N]ݿ٪sj{L "9iK)j,潑Z&VUg1 ~f2O@7`R;"h%7,IdG{{{4.K2+H+KSB.̓,&a)ӥzMIQVhE-׋l0^0q1BG"]$4}d ШlNy}y}s;y{5t=W?]\7yƇo\}zqg߈g ܷ@o *Ec=0y @{QK3.I%''G~Cץkr兤xYBTwRd;^/`ߟ_C_iI MbSsP jH2b ),p \ ])薖ξGrV?LuX^~kqR= zJYөaYX e zYnI6>I]^/ldLT8:xq(ƺ8)q:;bNŬ:`Na<,h+ 8Ӈ ';c:-^6v9hXDĂNjƗi ˁZ+gDC;()`tS_TifsC092P6$`z~d) f[<+ȗ ͋{֋ϠM뛊]!GQ$)Ğى7DtJ$Mq7,rQW5l"g ޴q&0wiY\Ҟ;@;@qUwHVhG3&=b['EV[V^cw{, Ps}jz~^M]l @TQ] V u!/Y6ͣ|TfY)s9#Ɵӆ*RAn3ieCfIJޱfZH9~/@ߣuep3d^k:,,#W{cVfջۋwWW؞u՟`8Y. :Z(7r,]c@Hx3)'8( zcX"d ~ˬDtqr+M1ɪR$19/ØL|<cXدPÇ*yxP~ %> "^3*h#qb" 5:i]:ʲhH!LԹ;t5]9 aK3 Y-.a0?pprJ G8 iiQ\/@v4"R`dp@+⎳Bŀ}0ݿOԮ3%$ii]2EC9W$P(Bec OB/W#4E>4-)ŋWwG-I\jA+zCxÓJ9%{.=1TTsHEQ: 9#naXJ]a`G` ލa'v}#y j/A:3 hp6Qne{ ۓ1xhv.ߒ)4}ar'bZ=?uq@Cbrq}}u=9<+eK6yGBJaJ7"Pc;#h%R=5Z:N&Kf<0Por`+C yCnaS[?Ms:Aa|_;Ie Cr*~ u8Iۓ*Bm_O[##91)Na<ۼGƆJCy4JҀdi|FB6h8}7 ‰oI^u~̝cη`q?Tl8  -\Cm* W *(f Z:#He|ϼNKVwOI,o'; ClL(ͷffNaT{}r!enfK?3cui  @;Yryb4!PЅAU{Q$69S(ۉ`.bJkej#YS?b[Ur>f C!:g!T i9S{^HBBzlB=P?v<ܣ`/SdyúHƩvAkNf $RB"u@I %WwE o2?ɂIRgfHҝ;M;gb Hx%Iw4L2IDEׅo+ p 1rt*W~BL"v bv0j,: "BS,.luR|`AS:ƓelN{X{p⮶PhCY9oz3zuW1+o|(Vd qB~>?9$jc!I$w2P{P Z a(j%K\M->Z)zi0cb c/9.W|5FBfGnX <]I*Wx}-p#ݨ/\YK=ewhF듯ș&AӶnvW!+<_K.9r 8>b r\-{loXD0`OdRL XJM׶0:?mP07c_M'@N\˛/ݼmz]+uJ! cq|dZvԒ/Iģxy,S bN#sL)Ǿ+ ؁Q#riAf;R=ʋ ]V5dO%<'OK 5H%}¬Քt3 }q7- /5hrj*>iլ^4q뿝\Âa'"gM#h i]ZnTDzK<37LѶH*(L!U9& ^ft!O/BXIJvyE$2ٳ*@4Ԓ\l?I,dw$uQR8*=8ykJl- HqTb3tLp:*H Yjh4ZX%/D(Ey2X%l:rI ?L~$se&+XM5}(QgB1+Rp4N+TjR bmt;LLXOBe8p<.8T[m7/,.j2NUe5ȑ8P$h/s?Fce%6_GXZ PCp .s+ۤ։f,n0^UF~pIr"f+rr-ۖ-~9%Wh;3:E>e^ךjE')TG,W 9auBl3ݒe_ZbBLؘtSpڈ8z2PWWr.N=z,NO'v_eİXquߍ`p\T,yhc$[ s'8`0Ś+0@Q FkWGѣt?t uFMܝs[f:i s+N^P~改X5c90S86ITH|@/bPn0l$B(=~d$j ą=[`Q@8?;@S'LZљY KRfapQ }\%Uo _urh-cTjSNUUvy-Mo|Bjͩ y7Tk]AS$.UȎ}Vn8'P~Gu|k蔳PH<* v`lgܤoeKJ+Ȋ:":v9&j݋NLh6Dy PnrY/}2hBwaFXG !!,Ϙj&؎;H7!5D r,ƾ\dy J'\ t+0b:[GVxL pj^X*JV)[]x1Otڮ/0!7 .x2—ʿ~}zU9ުXO\y=ԇ:Y5*?DtERml\]Cث?Ⱦqd]nq(\Q_w5>Be/v5*u*@pnt7{~!Loίa}$?IߙL1.g1BK|۪+p@1ϵ@::(pGGh69gnjt \<⸫؝R-+iQrNsXD봥xrDxDWekL}[30|]"tj6;ހI+'2 S^fc֜'+h‰Uv̽{29:wCX7u:U8L%Wؠb*fG8}6hg^ʗ`Mo{(^6'U[>Ԟ-ntI/eha/TAb IU: Ɉ_^r@kB2kR]V7_UticO ؞Y ؿ:OZ$H P/&rƕ`O?!_ɩA@q֛ Jēߛbʐ%۱RtB}IfR%v֨4*;¸C@?# Hm3Kuv` Ev#Mi^O nmJF2KԷ#=6}E]H@KZޫ\lwn"g*(zi~rrig? R<w(e k,AAYiVʃٹ-I]O8SוL{a(? 'l&>}ՕH'wwvQu-E ȔtP33Cx_]$ @0 'lwdvd'x- җĠ5)o٩1xKyg-* t}q &O;Ax.!Y@=;>pU{+\r_TB{AᵒG8pVYe^%eޗK>~aCK]Qi\>۟#v :Lʋ]kSԺ3a[_KAskQ'StqeХRtuJ^ \tߎg|d6q- \Lb6Dϓlsg'z>I|<>ϝ0`tBhPh @wUBUQ_/ƽPKfX'pip/_vendor/urllib3/contrib/__init__.pyPKfX*1pip/_vendor/urllib3/contrib/_appengine_environ.pyœAk0.bC.@ qBgJ14k!dvgzoyzo,(v0-4vq& ,Df(Eq&{W' Oi^?Q:BN4<;:Sk:atθ{"CdC1Q˞`3$?d@HF$-O5 gZvtT=XIFFp L9j!lQ}v$qzfJYuuKECǙJUG]\:`i~:+~z{v??pOJWM{u6W3`\7_}~}4Xefp8%9ߦ ~iC`;LC\-J2,;i#PKfX d +(pip/_vendor/urllib3/contrib/appengine.pyZs۸οU&cFOu_<\XN{CC$$LZUX:99_&Dݐk(=HQ65_Nt*6seIl%4|=r:;WlP[ЍH wq}EVl l͈LYɤc$LQ\2YzEJHXsQokƷq~ol'/'srb,f¿ۜ |26Yt=VC_ZP0%ܐF(uI"P h!  V Zd/ښ9O1o5cDTZ~n%/7E(a}D74RxKyurǝ\y%9e5K{:m 2EKr&*t S@e!^Q0O] o1njOXIW9 XLh.]l^T ",@{O+*9(ba^,B,1|٢Kzе90Cҷ lE~{ksrhTLv቟ɗӛ.7ɏ99iꖝD\ŸBE&\g`lr(uY.G ! v\M[+e@ kQl;&Pa"d6`$ ۆ%{q.S.64%|c4$Seie]zꁏ3kGs]F"nn>xߖ``32"T43X;xqoj &xigj~_?20t&;"YjٌY9./n(bHW̌+wԀS):!WjXJsPC~%| _ k>#T$)i( )4vu: r SL8α/tƿoDY2r\aP  q/^װRn.ehF$ +ZГeHIHd`.26͒@ϗBS ebh밿ҨȾC?C>^ZAAP59~{ˇ+V=Զ.À*m+@3 5wЖff6a߀{sT_5EN2Axv_V"")٠f `ikO_wټ _ܘ@Cb=<5NGEH,F~6 ,vXJb([:a~ ,n?f vڢ﻾_?5$JmFBgH7b<}! D([t>s ;-/E8K0u~ykdqLl ̯J%ClM!HN `Mm?᧫}p+e2%2WaZzX)YWglĢFnz̘o}aq̔KPP8>¦xP)6d?76.u;zAa; JۭQ;`ҝڈ`?^s@s[( ;=Zu)eHP&;:w5ղa9IYZM ?Jq @Xޔihס7[ީݵ[j/:5ɑrl/1Q{ⅶnIX/^cvn 2yDA ҹ׋ƼLk߭s=' ^Z9g6 s{=DžV`x.fMn%9cUT0Oir3j7g#nKr=&g^0 99B<^>~`ăj 2S1!a:>;N4 'ȉ:HamE3̖JaZA`E0Y":'^4lXNmy^r,A<1 ɡ{6&c((>ntϐ}8 àJ<_pY#56Y_|WȺ _Z}.@}2񄚰2&>6q?'Q}SvQJӗUnvOP17qDP0 TB6L(c.@Kf#~aS][OH# ̝='htչ5sm;؇ň `)C޳%3*PI1h_ObU9wo} 7 oD3s 1c݋nv-Z4WI#`/pi+B߄@W鋋 4 6l{,ƬfQ[(`ᄎ0 o N'o[(1lMj"7U} eAǛsS0"[{k+=uA Sv!23G'Դ)$ zKKcMj&=C1yEf%>{6&VVOJNNO./WgOɀ=bm2w|q8}Rw[_w;cU!/u[H;KUƒp<ʷcA5hX5U%񫫳lL%_2؝v.[\>;ٗ=o l*.2;)>9)b4_&n{O6vkbgNMw*OϗX(u:j;a lf+Avx`;]~d^3˕娩NfoQPKfXNZ;B(pip/_vendor/urllib3/contrib/pyopenssl.py[ms8_Rn*TFfdvjNZ-oT>ۙl*EA"$qL\Hdg>܋"Fwtz[G2l!sv-V2eov!DnXJ8UE^΋X %2$Abː\E@:NIS!"x(O@I !˕HݭbE<I 9/I^U$^iDz{~20=Y88#`Qx6xr_,$I@\ĹɖD deVMK9 miZw.kIDhpf\<߿'G`8x֚r(N3.t>g'poL< N[qZPMXFѽ@3^s&〗qf`ib 1ΦSb^B_teT&|`<2 Y炷YvzbJOV#alm`m"kJ` |/yTzM*-N: +pf2_ênu"w-6Ab6+#Ze֊\ԁ~|}3t*<+sE&a #drQ,%^C۳\( ?+x)TiD@!|-IWE| ,2m(DEUXsl6N3c54%QbKH j5Eqv$ 0\E0gJ&e!Bs=a)dSw6X_׼f`A̟v3V{("@X79dBGLA mTM?H Zfwin>޼ ?]k;1q'!O>U^ƒ8( 8;||I?9(:̠\M^OK-M%"W ! XYCg㛻rt7ŠI{u}7<}I=ߴoqr3>KOv8' =T3JVH*|aT榽cۀ(S~!N᧛8_n''߿;ϓy 1:P94 ҠXAVxiv`)Q~ CۃʚubpO2#HQP-F5[ŽDhms !%v MΡx!ȯXCU"kix6]́%I]ڔ];EeˏP*Wˀٖz5S+2a;>p([ jmC^cL' Cl+^*8|a2T{1 >w\n:`q+T찵 @!S4;Ip2=LԐH$.66p7.naWIVr)5,ù6~>Ĝ}86N ~ԄHzKm>nQ7wJ^l gsT,ޠKQ\_%zV?G/Za 8˰]f>܀yB=K?ߏB` L28fcݯs d.^nRe~)_`[hC\Fl*R+"?(mGf<:qjOWºV#ޫH z_&l$b5_-߈Nrʘq5c(Xe%z e.i0IVamr=nX%xrSMԽa-8XOR;lݴHJ&@*0I BbO;`"9 X{e8glGw}7IA τL+c•n'>?Ę*wj*Dh(%7@2KʵpإB+H>֦I20%A 0(1ޠJ[1}k=;MYH^,ߨޠ1Y~FyW!F<$>Oz;!4"ĕs,Qj~EAIݢt^pnzˣ1;) 6fQiŁ ;tᵿk0QN6\t C {Bed1r} b;[ ~dPFeo4Ѫ;vgl(5n3z-qx(F'r)Pȅa tէ^IdG}eTH9i.rz?O$VUcRIw#p`+\q&3?$J6Q|.͕А2@PjωpC?&d":]FZªb`<ϗo^o#N=i}@lڕIi hNctlpdc %'+3ulf}gvĴ15sw:t QuYQͱ*HnRQhf|64>o};tߡ!?'cvClˠ;V l)zwt{Gs} E؉?`]ôVs_b =?*lTtDo3; o!q=VU_1F$Ta'"8>ķL ;tjLL P$cďj:Oöik޻iSbx6zh~ iv֭9syEm/UkfXoҹ @'t "lO] {W\MR&tۜcza[Jp*++z?2|yעYn^3yyE|MyZt'NP- @{UHW3?Y٫pX:T?g`91!^ MH< ֞)3g{~'5voXϭzZ>o(\C_||ӿk*~ɰ҄r &0wԴ3ݓw[Kځ +##fZk<Gj*Ov< ٛgTl9q'ZvYY[uWuOWF}Kt=Zo#^ľ.%fq1O1@by \oBM/M<S@ i4-PKfX7t5%.pip/_vendor/urllib3/contrib/securetransport.py}s6+y"s$_FgTX>KsT("u|X +Ih4nv2,39˂df L3QfqOCmdu:Uup/sڭ]MEDq0( @,iTlb(VD0@DD"ӵÉ8͎WJfPzYFY\e\F&UX@U _:@OB/RKGi6!A8MAzaa,v$B& ~`Ή̚#Wњ}A (V4M O^t/E~%MqS(_2sY"O)} .@`4JH+Cޮ5+T H,fX@B%Nir(Ђ9p͋y$d=Jzի|By (qeF3SGb:}܎x*nn'_.Dw0}e<8<vp=YL.g/Fv4-zxb|AדlB*p~?Ÿg^a_Nn@ ng|{3 }=FF3Fgb7CL?p87 3E\prǙ8#pjW񧾸||Q @ybST|88Ɠkpr=?0Yx:x (4o'0 zM1$$J<8]Ws^ 2>eWJcNJWwr_ p&_2˒T&(V|Z<'꯼~QdeX(V Q$[graA[=۰wyUfV8{6N|MzjG+4_dqEŮm;dkx=Z/ ?I}f12~~'6*T;Y|߀ a)%wq,0@3Q^˝zvgB772Qxwԟ묧裮HIvPn 17##PO8i" =tMANJn \h1Z/Hq0Ṙe%@OAx~Pi4?c[LA^8 O V8uJ@铂 VlDQ簊3k:0\i 3ke[`iˢ9B#eiZJV!-R?ѽkIK9,ЈUv 4[Q cWB])sR__*]4lAF nG[{&  Q09;}lE"}dK%ѬA#Jsd+?IA+b!8tR8P`b?tS~9~JCvNͫ58) .&s1@sY%dDU8<4Y=V32EhinKř ^F5QP&g 2Ekae>hvR8oA\ʋj8|V[<@蕸B[V(O_5el^zт==1hxзL*OMFêlG8ÜaT-a`'ߟm Z^(n|]>_̎)#/nɯMχh. \Jgnͅr5[ghO?\(87uZ~48O>Q`4}a&Nדw?pۗy d޽o&W?y(? Ϛq~U5>Tbkt}&=u:>:}1p^/Y}=UMZq`WA (*HW^$(ӇwLP_4A%S<Ԥa%0 GckQv  *XhKx0 kP곕t|04LcܚuT&b"73ѳ toǿ_SwBNUE̦{]Ė<@q-Oot8>q$z: ?ѣ8:OCɘ>/U'c5[ZYȥh=a 1$~J{;8Ж5?F pٱ>dp F؉xzӾ{-b?/KYׅeCO86#mq68zt.q4kTU<Ԉ\b8ōfnD»M3F0?#0dK: 526tO:5`"4-_.Ehiwz7iǣ"oePMmW6hqTģ40bQ.bmdH3bAҾtDyRDx  (Kɵ:=oϱAFOQTOxSHdg@)9:L׽*Jx}D\US7S475_iv{+T1́6cJ>^-3:o.;|318~O/؈1H/^SZSձ7chZ-rquy];"jTu \+}/t;Cpx;`9.>|wA6Ǫ`{Iͮ#-r/ #C+cJM[/*.(DxgO>$Q`EThӹQ汝1ݬjG+0bcGtWRR˪"(ˡH PYZۅ :;`5 !e-(B'L{8$ ʒĢL3hSirŴxݭ0қ[uX:|F 5l .Yt JnƗ U_N͘ O*h0ҴuP@xrX\1Y԰\|c&H u,b4} D_rqu L%m@R ԦzBXaQ/qdF@woܫe0]FPZgO~Q!tN )o"IwJ*w4E2+]r:cs(ib 2AbOn=`s Γ-*"{I|Րq|]TPIQEnwUmGWK)V r.̩}Azб-. PE&9HekDaqHrGU )XW[b C"Q%Uwh`$ $x:6)aѴ4xb :Y^GG7̶̑3J0%u1T+,)~˰U77y9ě: ̕Q\\RHVU6zTdq jpc&55RX7XF ƃl$T}oxy+qȞ3RLS|n#$=Ȍꌊ ^=5X}ݭؠY(G Xe@F7((壜%qZh4h"}3(i./-> 55y_΃NceU&v+z Ak"9i2!.U] v 3T̯Kp۞EnlQʹ4p6/?s7?.⏢gѹ~:EZ<oh Fhd?2mQFā'QX<` lvJvxf0PTa)zGLcq r%<2P%3 kHVBF\1>=I2#5o4 ݚn dp.R^7}^ :6ŜL;ڰmp k攃@=E:8Cޯ`#) b9.9s)YMu@%3H 6U6`̋rt{{ %`Xͻm\6dљu;1a%]&,y%>(ˮ(Kp&lAhe[-|ڪ1<am«o/`Xa 3 6;ؐQW۩C1(319 !,KɘDB#oDE 0aV?KIBJCa%7Rf SX ֛~Lr-e^҆#w3VM7ieZjahjٰ9Oo{$NIX/Q-`\polM {ڴFh2^kqJbAaxsպt*F dW&Z/!nV-cԽ0|hD4홿e۬ 7F=;w'DOU9Kr2"K-dX {aYq%:*g#lR%PD7̣"gAX?`c5QXQ?sԇMN33Bȥ1U2 7 q-ZN Ɲbsg< 9Jh?ų L~jIT!ͺ;vC4v<‹hh|L*޽ysz"nuYC1Nn׬$EV2GmQ̂,XW/#Krw N ҖWj0ԁ- &f{4a~F UG}vL </xD,Ruۼ11Vr0M 2ϙ['D2DW[`H1=`4m6Ÿ5>-TODŽm9gE#m `%AK﨏̽GU=>E.9\x.Q/Kt̼|v"o90(pAh3! &$.4g؋a ]d*璝(ѧs*k([;&zl(e{$0~]mi-9yDضU7d؎6):^oeq8ﹾeu LLs0ipjݲ+I[~vm αtjic}S08wXMړe&neC2~tz SI-$FFk$Qy =]ʯ4ZWt1g7y*Y 1Ʌ ьdpQ8ۭ?mIQ 9,vPQỵxU5D!^u''u0ѬpM~Y Ww](3B!W3 A8Ga{1'Mݫ 5\zO#]ph/=Z;'2v _jSw{D _RAN' V!{LDwRmk͌12sVFR;:(.4&tfXE˻K@髄}s{7u ig1x}IE1BR3˜CW@Rn%4nE`- GV^_]hIɆSwB. ;^9±<$eK>=0Vix|m悷FjT0Cg|{^'uZRCʫL`L{t%hlm(J zWκ9J08Ŕxl/WfcHmOǘXs;'i *Sr%:x Ō)6GҖ6ga]Q\߶QWqߡ~'XkE @_RR}}.o緫-ƍ-SW.3ƕ߷u8R=25\Q&R#,i }[eoi5,-Q'V#%r!OjJO t}ԡR}SEHp/)<^BV>@nWsuUߡqj)_. 3.7 kGTOFYh2NlrG}vߎ6zF3umؑmqlEx8 .P|,mi>gqԭ-;oebnh:rOV{Cl(oK?)S!gL|J%n~`)L \d8~Uo8d NQ=]>9QKHdWu@bN s4>Mt 4v,2}|R:C twlܧg#Y K"f LLEeG6'T׋X\xɟWykWɭ+Wtdu_ܘ,F{ޗC;aTWʜ4'?1:Xg6-d' 2='y:3xdīk;ibeUu:lIkZ K5 ^ة;^'Łأ/n4 iU5Cm{tZ.i3PhܭS`DY̳_>Eܻrn\ wW0,pɻoA熈K}¯ NosD#V^Ht3U2`+TUcg~HXSDԑ0$ 0kς;e&voz0:>%@uq L)h}~EF|i忣o |JE[ںڈL{M_DM KXjkzrh~V xTCGu<9v{}G)>B =j{y--w^&nۛ}kؽ~Zxmm-y=;PKfXR?Y$pip/_vendor/urllib3/contrib/socks.pykoF;łAPɐ"*ZK\QYD(.]Z|6`yŚ"˻5j'a7\ȚT; uɏ1Vq)OΤZT(b%cd)RqD[g1%X#[h?HȮhsL@1ܐY4JFQhmQ4ڟ5%%*so xFNa- %0љȆ##F6 >jJ[]:߷g nzVՈ2|?%BF{c!=t)Ev!qwkb`.a}cVAuav|n(]TCJ=SL dSZ:bfVcnӤ>S]@w:2dPHJHyN0$;T}GhF|JR^{Uעx]QS"%Tt* xB/ӽp%J Ϣ6MEL^gaZDb3YA#Eט(&| = Cr*pƣd"Q..&%:Eu,hۮm(.Wbfk<)P@ e)8A41 hC)Πtss]]m0F(qgDpVL׊SEK~G P 6K SxHk t&N,f {e hK'ۢYU`^+*̳.:[eBR/ed!د$\|<ћ(ѱk 3`hj7eTP/Z4e 0dX)!L&+ry@޷ aD4tC|=L%R5D=<.#M}F@Hdg`j]ϓ1ez>åv{hWg96^!!ћ9naĨwkG]v3|v0 ;Fop,PV㯷Kr; uhAD@Am2upp73Pz"(<،|W[gSTIM Ƌe06,\̀ fNuN ͯ2 hH@F60AVmA_G =fſw%T9l8qFSm}l<] a֞礿"*~cZvSxڿU$b.={ڲ84Ƚ9vL v}z24_$L!]YaoSct÷0V4f3 2fzxA9saܛt>Mh:# +hn&*[whko-P#n;vjvvTIZ^\e hl p!A_H׽bǥ/4`E@*s)6SܟHKrw~fpcCPqk!^+ߌv] O$t ^\L /K*ɍH8`5vm¦߇R+"/&"}'X5d(cCq,?Cѿlg2&u )uBZ 13e[#*2f82]>H.!vl@5U(K1xLCuP2#QD͛P!x| sImJ&j89ޙה|_ȣ hAM?}"E&\Wԥx{dCoib e֟ :bܚ&ܙOYeHuX`OP. /ӭ#x ꐆp׸(K`hPnMʓU3`Ź]YrR 'rIj_#_9rr'@?hNE#։}&@(~Pϔ|C9͑LSArL͈GiH8ɹ Jn7Nrxxn m-|%tF]T:r04TnyRCyzL!WtSl, N m*tZOt42wk|[!jd%;,I#d|C-wD{7֕;iF s'oQGiܔ @ϭ38P/>BҾzI2::}7i 2Y byL_;(J3I(]S*cȾ(I9nᗜ=)N\Ͱ0Ժ9J`1c9T$9ƐnM(rIRTXUf'FO坺Zs vT䃲{;51&?Δ,̴!ڊZ|s`1u-9}0n΢L~bRՄsȅ-8~o^;rǶvmb6*k 0.nPL2e1qg#v`` |E,xeiW?CI]ffLd'囯67"{ݓ_ʂ;cec@dAjY|)a+kdWhB"BzݻCq*AL\l[/ȝ[;r.)[zÜ`Ch&]d#<@B8=83I^&r}8;KPf[{I$_7P tջ81 \LM3?Mx}iƶV!x6H(m|r/|a̼гI $]ᗓ |od<*՝*J2V,J[lM#E(F+eFwf+l)tealK(ʛr+*ezUܬܮ.h޺5*WJʼn7k|hs v+*/.6+]*1WB/E)i^ZHI& .\>F6YJި-r]E;V-QZF\ (b`"dP\*yki65<צ>З֪e[ F!sqB1XU??oyoELu (dm=6֨u,H~ LE)+JlGF`Q7m)Pk(L pc\;#`Ez3xίgչ8i5 Ǐ/oλxuqvz}NUI_'UvΌ!>}z4F Y Fلo parL /ŝ~TFlQ/Yo6L/W 4ߒ",IjZS D23B9?IgNRZʶY )&8w q0OQ%0`P ʍu~Pu^s*bmOG4é`U[;Yʒޑ+aZ m4D$ǣO i g8490hGZ`W՟MpQ`2Ǚ*-:2޾ 8FHU oW ;~PZQs)D=#`]B|C3XeY&;̼1,E:!=a!s@ˎdMJCeMi9/)B@C JVCxfύ+TF%=i-[])<ޑbrX"V1Qg5j9t.o ~{*1$PZC,J+$rFUq]"#k hq$c V;; 'ӺVՂI̙:bKٲXIE}U݈0~N/I+q(}x# 5}/Ȃŏv,~Nf|x*0QM윕LMY_RbS=lg")ء(y_z&&X q 7]kJ}}y( `:YϱYxgi&n]^>J:k&.:z_T\;0NP _Ł+ q[qzM˥ C ;h'=<>z,e؛Ч߇ Gzf_9efʱHf,껬cvv !](Rq,=G3@,tFSg,/a 64MA"f űSf-сEa:O99GǁN#hJk΀$7X(>@] =c g{Z. uhv|95is}o:5ᄓӺ$u03a0XZ'/P J1ԻRZBBG)*tn3*sH|&Q,8ʼn2Ԣ=`SbQ-dvF8'ԿU2f~H:3@6_7Fux2Acȑ.р K?ySĞ8V 1WŲ)Z^ߚ%~KdߛNBX_Lve r (=L&Lb!NCK/Ȱ!l}GK q΁2L 4+87jBWuQT v{,4.Ai+%ǔ2){gxQXp_VE7 tZcWa}P!DP/(!Ghb:fi%n lk][` (j̅_Q!(Q("C-7@գ|/(k wĖm-H&D+y=j(+o;?aCon"e$-;G0g@x *~+&2*ܐc$YjN,t k8Uk-6I \IV r; wbCi~?E@-XQ[*|V2E>R*.zRr1u6!F#E/Id# n+Re{Z@^AM, tP+vЬ RQmtCz !2@n'- ώ"ˮq'B۴uGI9>YU9??4[u5Ϗ?M7N)P>;wK׷ |N\lH*|Jy'iG$uu07]lsqh*iiܥiBD7yNq'?w kƩ#WyGYD4O=Oj*"lܻ/Dc@"a9SE$$@GpXLEmT%ο?PttʸĎ;08wYL-x|3ޅk0E FANO}' (\AAǸӕDW܄I7PKf>`?t +P@Eg&#}7} _2L\@.D>ƺt" >r1g@o'TGHu)}(,YBW`~cWˎh|,5+c.=+۱[7M` @>5`BN=:xqPQ=]Ƶ w[6(V3(tngP5]>7F뽊s @U=^Jbi0DKB.=摃Im<KbG}(p7* N◎6&}ޖet ԏ9>#% \q*3S7=;eA{q*"a8OHlE,`7hO_^ê8ҽ3+_Nv=* *W 웂ʒ×uU,txVQZЯioTFc#|+ywԀ$cjDH'%/o5b4RÀMH otX닭n@ofPC-Md+ I`ڠ g]D3B D~xnHg ,{AX[iڦMcʂq} KQmO,b(r:Ӑzʓ0d8{jCZ#8uYByT4FSq.eDT(3NHdގ`QYCP7C@ԦCaîKe jN(S7-:+Z2(HPWE؁[]D֖lVQ\n pIWp 22"iknmpƁs{=R_ߜy0!SyDrGQA PkyQ0Ytݒ ) ;3~.uZs7R 6eWt*3RGmv5lzFm3ѥ\; /2,~E[ ~ T!$QrqW 4C_ ,Sz=Ew6Y\}L`r>xݓ. Qʍʻ69ii*n@>~_/G}B~l\Hjzru{אIw{\ ӠC"cK#c&̏)n0 bn508q7q:uuM"%s$ <䇱C@o7 /vr^}0?HgxH"L0D.FhzCM*k1ܲZI[_Q@|S5QPS4 쯗} TbYuۿ8ɇud|,x$LOqTAt >S?$~↟} Fƒ5 k*e&K] ʯ ͱ{ሳ@e}dc{ɵFl|d9wD$X,vg(^fl(^zbKVFx 2IGgg,4 HXDN&L#1O\^r#G"ŊE<ͼ  6[4g^"^ƳgRFa d ) ?b|@\)lHd% h>`2đ9 Pv$WRV4 H$8bA]5ND*Cd h=ո 6SJ1~/˵ yDP$,?QY)00 ^j+*qGq3UVPL rJJ4=P a&>W'b|).&翎KxħՇW &gWwٻ8br|y)'@l|zq2>w_[<;':"%;=}÷# ~|utߟOġ8\>N1O+ʅ4q+''XP;u WɻcH|{ =9 jG'ӑxwxz1a!2ӇcL2 +st~v5ure?/Gp2Db5QsNdm ؐO%"sE5YƁNA)x&=%hZWYEbn{y <"Xq{y48LuB~*{YtmJz9@i_syǩJyE:qrS 4^9~p^B @S9C<^JW4LB{@8s4 ǟ_~b۳1uc/1C\蛞?tVэKI *kW.2Ad! #K(mD^֩uƌ.}X^zi0ͼMTrZ"v>#̺:y65*2hۥ.R@?;?3^xSCR1P,+bPB,Lt} 9< %%$/bfâHmSwaqz}ּӌbgd]*áI39h$23 P)qrbZ?ފZ o^^3UK7`oJWrbƞ/[+YPYIp$h]nF(q'<Qg$ q !ę;<[ʂ9缑jRQs(&ʙ)]۳l(1 *xtuuL)HXܒ!4!,YY0 1_fhH…8EěGBEw-XӮ[A0/bra} FMe1( #ݪYjn{;aU7n;/H`@ك>ٮ/1(vg nn|+Bׄg^JsT 4qF`%YTՂm[eB[0>2y̨iYu[YElhT%*󧑋-Z 6M0.wHD7@گ5R3^%z7hܬp_{BQK7GY-b%){O-i5WcNR&8to"ve`RxTipJL Z0e"M/lM|?e/"{+i 2tq8S@kLc@Z¼USa%hK5&L]l-Ps:>=~[JA 6Bi\N"R 2gezdYwU@G-e@hVL U)RpLBT ÇKܱBSS~mq˸PKDᒆ3eMtf얣 qOM2'&DƳ[~Ψq;_<&얂YR`xaLyRyBvV'ctJg =VKT+u$(c=W"]FNՏƂ.,hw\ Yz4|LF q2[ı) r 8z ;{[VIJ8#l͓"^u %LҎS~łVU{۝7OBKܱנqZq* {.:IjMIv2qV5WŘDa&pr(mvz28*:.E躾PA)͍`&"Ven^SI鹤zW=|MIo0(&x#)S7(W^ k3OTgI~Sʰ{x⣾:~մ^ s}5{|Qf?Vi] ˵MnDZыei^g)ޟfe=1;:3gpdaRGD;MQ;SJΣ6hƫo<}9M hQFq*J<=.یEVZhZvXBYUSPͶ`20bmكW6"c{ ~[4-*Ǫ ؼh X_r7jbZCTRIWLh#SWx ¤3"拯/QGMSSG:-1M_pFږW|pyWĿvvWBROibs/SSyQ΁ȩ2X I*L(N>GOJ->^pD<]\6,sϏ\ؠق7I_|#֣!/\\rruVjq&Ab'ՋAgbᩜH sS/T !UTǶ M50/mU(%~^] CS}edu2 Vl6f^zS]?vacz^`㼳Lj{#-)UDIi]5%ṣiGO:*էy\mg(.X-[x4߀ܾ͕h|nGlͭBHFy\0$jFQVslQ-b`*q60Ć|Ձ|'{ 6fi%UM;I +}Z , ʴV?3_ZtoTqR=<18\`s1?YCIQ4NHv.gmYj<|E=%<gIUl:ȦsjcP$z> 4[Y>٨08M&]Χjeӆi:ܤoM-P>"ơ]]uxN7@q[GԇCC\c1$]Xy/Y`hJ= h3j O&q/CϒAӓeͤ龜żEۑ]rإw*Qy4L!_˜whx<]2{Kzq4 tK)x`>:g  ư. j=9o*H`S`_LPdS9*(kI eDVA:2]<93:/x<}\oR.T6f ^k5¼/~Rkt5r]@Bpr:M--jN,#VTtd_ڴZ܈c.'0iD?F_`d zO!{!RtQǮfR]_}+j`(Ƴ8{5R|-tPoà/}ߧF Džx >a2!o%Jy"X&f8avtPAYuc.KtS%m7! ӊ73!*3>K WpY#ADGʵ`E[%1/SG MDgZq  E6;bp Y3nK ^ ?S(KD;JK%ҽd"MM ! &Hoabkg,(֙ep,`sh!Jeݓ]}]uu[EWkYk!](oL W?ρ(=zeE݋FgB7]UvZ%0ZN)'&Ŋm-=ode_BJ>"Y8R?0{PKfX2pip/_vendor/urllib3/packages/backports/__init__.pyPKfX޸cH2pip/_vendor/urllib3/packages/backports/makefile.pyu]k0+xKR_,XK?MǫV[ m7 2 7$qYGޢit^,3HryZQW+Ldеȑg X;)d7ꢎhuʡU! no1EX1tt-7M-0ŮJɖ_"kj9=n b|)||E]N4L$>B@@61QYe (gЍtw=i澋uAjGXСr1E!gaf;C'^fsVDzԃdpˁPiL+!(c^QD8tOZ-Ŗ0|WW<>E|;esG.~'mݺb#}:t/9%!{8ӺU?D<6<@Av<ɧ8W[hH#op~ r9`| ΅p9Nٯz4ӖMq 5boB 5Kx jH.%K] \ K40}t/M׫Q1!vPnnĢ2#4{E=._fGys4`vK4]{zwxL!H+ Mx!!*ͺ867{?+:97Ĺkf+8R.գމS// [ 5Nu]rh%0\ZY Fb>j9S(b2Sxo'M̷*X\!}esMfD"ao"?\ wu}z =rf<-bv\"s=4>G :σZCjNi\9dB|dJhB :Bis!{{k}DgH;|m5r TLb)q8syg% wwz󾳝b¥raV{?PKfX抙$pip/_vendor/urllib3/util/__init__.pymn0 ~ !l7!<4hvz؉Plb[%'OEGi%ҝh7MNȃ8IߚAVڊJwF:uPr0Ϫư wN k88"SҌ=UrJ|pP6Mw@8|]-eEz MHN(k$;WFUmt֋1Doɷn۔镽,K()Xٶ,73)[w~\\oY?7Z$ߑ >p$ݞQ{< nN.$ X]TzOa*{Rj9T>HKօmMʲNoᅔ$mg9X.G,bg#[Vn^2fvN ¡qPKfX%&pip/_vendor/urllib3/util/connection.pyXn#7}WdnJ{f2qxc'ه hQݔĘ";$[[-iv⥮N2z Ej\cxQ8`KexFq]R+g2*X]s\*_J^;Mg?3M:[ywҊ/qkτK_/>ib@NJ6F_xI:hhi2'^~kk^(G?1<a"tXsǜ3>Sx ^ğh_=YR舿u,A Ohc" MfaE\$?NIkδ}.N@@Rbb7prFwspqcь<-׍&H?6]jTR,y^ S6x]XaBBPP2vӘtC!1-~J(Bئr_z¼FN+Z.3 ,3GEl_ SL /l$!z!!^!E$ХPlkv] H>) `aJigRoѹHQyX1=ٽplxSW!2?ǑÌ-wr/jvL"zaR=5ŊmlIb2uLeȆb/ +k d-U{˴4 #nGisHFYs[-DI FKWW<J (A[g0ayA̺m9f|dK.J(8aj=o5i\&ri 4{~yap5hP2!G=1D}݅8f LDP>3O炊7v".5*c;Ue…Z1^,$pH;HS'J'_2C۹8/&c5Clxrr< lgz/#[HLJFI㧽fa/$Mg%jp4|=4;Q*ap0K% ăTlP %;1Q7t̄ .sMO9> 4 dSt1s] KA͍0OՖ33*rs`lH<'Wǵy /7}\6n-D ׇ0ΜHb@(1YRkqV !Kjr+:a}XsK07ڱ8jEi.GUwZg)L"B! _,)?RCg'V>s_[vv}Ɔ,3׍6^}& 9>E/lr'y ᫮ y`XWϞh[ 扛@ԽdB%C@PJoWęrU43o)fJ1a)o޾=sk٬->\uc͙{KLʠ{OlwICCj| 2~ĉm!$)O:Jfo PKfX \^E!pip/_vendor/urllib3/util/proxy.py}TM0+FDB\z[)V%bӱI6c\|f =t%}BE(,u~/+,~XVH$gf ? U$56Q +:H,[k|e ӓ(Hg/ р1 Z^ gzI]]?蒳a@}4M&:lfZȾZWoeO $Eowv7ox':Ų>A:gϐWJVNYE]*N X-o_IgQLSdBo$vC\`01\* SwX7x7dN<"1[qJ! O]aomf4wW 6G>/L%>Lح./M %JJ yXfeT{%[#Z L;ehIϬP zgnԑ_,C-Dt,Qy;"DC03)A`6 Ph0xCv$Րc{U)-oboJJebѫ˼3!#M,NйWiWrDVQ|'g? A۠$Bj͙T3w2@Eyzu&ShSns.'/^IlŔ:<]'` Bk4]}.xa0BeCCIGL|{w4ԔaD;dxz |Oʠٷu8΍44:ZAAm~z{'l**BcNdNnf UǫUxi=zܤ#}_%MC8pׇx#Pn 'k\Ŧ ;g S`$[ &NF8jh5: ӓKMZ8 CQJ2Z*hwqVɘ<ڂAzu}Z2\H@"W>?"Wne+NՍ1(rZ"QU*64-w`jG[pl8p3 +FN$&f3#ޖ׃xR?EOSLYr!W\ks-pvK%Y4a{mh0XHzwY&^U+[A}Itћ7L(NPmj=9tn3[-ƢXʹ 芩$)5f[.U6,>'+HI^Wq X:=ҭo ^BY:a&~c53;nLg@'PKfX6(մ` $pip/_vendor/urllib3/util/response.pyVMo6WClQun!۠. CK#DzI^e'Ȣ@u%r>4b([ZZ,jz!ԭE|JGTuF뺝wmZZ7*gej賓'L iwbre55oHduJ9fw-'"95k̆z"iZ-GQAPnQqTL|$ɉmE"+X iQNkD&nD F`Om-{%㍒ S*Wޟ4+wKi$T3$EnJAM }^Jy k܅0yUuLO1l_ɭWxr|4ɬTgYqd˚>y ӳ4FI|Oጬ_TBhx_"ܐXyNΕm];dWoe{9]"T).Bj_4nEoqq_YlѿC:QkJ݈UpMR&QWN !f8ws X28PeѰeepUEtcp1`@øt?s& OSp)3t;0v.笅ayGPKfXcU!pip/_vendor/urllib3/util/retry.pyU\%>|@(͗12'p]]\9[,fqXdR2 OYe%'ՆWW,{_Ljք勿ŒN#E7$v|0&+H}[5<{z^]]DM__̂eZAQBC_ޕH#0wA D'i\d̺; G!{WrWN/47=++Ёy!'z*00Q K^&"켚)zzz>^M.7O)z/S=/z'%ϟnPBݴ/N1x?b݄N2gu"!^%'.@818E WV^ũQ+3ʲz4U4!A|V2|ų%'Vf/`YU7gjg@l|cdzb\uk( QG"UTX'EYH9BrHZωRQEzSMɝh*߳m=쌔2A$ Ym #n_93jX Uɋ;Ga m (,QE'b;igF!bT$jZa uhHI%i+^8$.$q@UWkBY:5pڣ qjj"*6oC:&.OPH*h`iE.(11{55,0i]qbt2?fPo&_$] . 񦈑lIŷ4$r`Cm\-a3iRVzO'O azm)wR W8  n6&؟'ثo[sdax"&8`m#Gy1.٠#ڥKTz"~.C(0S&\TCb.12NG$$]!YglR (.[B@TN$`(XR \C$@ilժTG'RKuquU^-L2-xcvb(z2DB"8bxzU~S- &\ (c ҟ٭fJ t-%A)hBUC G9TRoLʙKG7UAxnT w֚a ²@C˗N2 آqFKyN8d&$7! PJl :@rk0 MO]:bq5FWD}h']PZlj^R]ƨ \BdKP`!KbȨe.`P@8&2X*9X S8RhC睆gRDLQw@:>#m%slILi@>ή#:{9^G7ٻbz3Gak,dYj@R k)91f,[%s HȦN \ѕ|3TD۳1S)"a\>,~Eer^Cן3Φtvvy >ήΧ4xXk6HupYoO X!nCsjYyL8Roڬ 4n`: QO'(2,*y6 ddިT-:CKU pׂ3K wM0C35oiu[mۥ|B҂AоP)4뮾sAX- k"`\B@y `GG-9zܑ0rm\R ́́#+ sX!VnGW9t|> ˏ)muEbҐ*[Z]x`Q'uzXSto&~줞HD2mLY iSAZynHMK>e CSo|jhGn2F>(m 3qM޸ݽno-5u Ѽ޸7nMp}<- r@[<3߄H"?A- ;0Dy[;#>9Q}̂&M#ni-tۅsbvZh irw癴更 m(A;By6t^;Nb]f&wK b~1-}63^hY`YW4 ٯXLVL5RP5  y%e-SR$ѡ eShCOJ{AG¤}t(=xЬ :A5G+:Az ;Ar+|2_-zgwQ[u@Y/|(HR M,°*v]$iR=<55 uWY4,(hTף6\E}t7d31` `G"H4HIq8T1qyZ{W1ϸ@S@+cqNDA0KN*O\fya2gY"1.JTLuunۦ@4.V1{J@!'m0$vOv*#Cd6q8iK<ścdQY;Rjri zK,o+ϟu0pMM/FJY"< uEHUA,~?:7O#On~[SUni#J!N$K:3ε/A+AϏy!c"HoU..qKUťWL([HC0r k6d\4IimM_nTYR.~\ iE)H 2 ]:'Yˢtܱm:-p*I*U򬗮0'XNi{96ڃ6< wtaKn \80W~#,O\bEa}!^ݡc󺶓A׺)SNR Tt |[DԗbKȿWrTiK]kwXQGUK+ת*Ƅ(Վd%^? ~H(o&s0|5Q㮪ҩ|J˧[UC }@CǥWh41]ij_ $THx=B([)5Y3vaåSUl!.ƹ+ш N 6 ň-[VEʴdm*U鋗 ;1Mk B6ZX nOCi\ඎ::UcYV\%~}:{p9i L$GH/A)oHMYѰDf֙6;]&o :&ɰˤCTQk "َvnL%LFO|V Sv nsFpq ]FIp z.W.uPw|[5ߍF=.h:p. mr9? v/*@C+6pZXp4t5tWYj+kSf"3|E:unڤFHJ@c_#.-7V8x}Uy49hɾq?E~R?aaρ`'-}j~x qv|>[e"J^|<0jW& hHI{v 4%$C#f!i56|)R94F=~}bZVɞ1GG N$(AdQWb) 0T^J.Vr-8ߝ?\aFPKfXǧC pip/_vendor/urllib3/util/ssl_.py/t[Hw:jcs/2-eXJv%^RlK*sNX; , K,6̳: ~&Y)bX}ʫE^Rd_x%sVn78N$vI%zCӛqQE雩7<~Ka'.~-Rh|3NwpQUbW6>y,xVpipL-vzh_ ooǻyxss>Mɪ`ȖՊ Y"a}ry*hobv)d`,$Ϸ&b6ہz3t:X(m)T،ڍnKG U\\"[Ȍ^BZK5C[X\jeHt &%;W*`/.aOZR\"Oӝ4y jψxtK\ D`M!keV/!$Z(@'2 ¡YYxzg\D@ \TƄ,bٞ GV~/*$d81˰vYsm@)c !u)d,9on߂`HZ{i8*v=*J:3D0k%&{HƎ`-)rE1m'jౠIsQ@loD  fag.S;7hrq;e?Y;٥8<磏Cxi?xZ̉'aX}=O@{}ND`)?剀{Bࣝ|}a5Wt`D\qFhG@84=6=tQSI U^V_ ĐxEk`CCnn-Hy"_:Hp4 ]T$7@!yBE^0SLn.smez4W4DpBfëIx馕 Gǃ[Ex|4SpHHl뎆`Uy!h`%tG {̉D9qзOL-sJȦrJ cu U_~ћ\5&6E/z! @);c8X 3gH%i* @>Kc7`N6I)?݂ E 4LJw!_E!oatƶel ?KCH`.#f(g!G@.n{K9.dlۭd2ڀ4LrUӂ1鳵ד(H mK*&/7d01<nTBT$I(Umؖ½2@3Ӵ0UPusp\7^]yp'YVo h6fQԫ ^DmyzT!Fuo  L~} B4;0"ol KA$D%cI8*lh^E*ġzfng bZHGh_)i!Mjeufjꠃz/ijR fYwCB3L ?JPZbUX<2j! 'ġ^Fd:)S}]&.gkUdi臀pʦ ry H6u]A 5^ ~c|0S-2 ac$/Bo+:Ȏm'G߄EbnX kpxzv^V"ag3$?llFg3mY!0Heu??:Yk E 5e f( 6$)i?͞ u+\ab<ߔLtSu=-%"P(c5ԢYF'B!˝m>"Csp Fɟ[KS74[OG`KZ?a Im u;+^۔$|[ lsH3€E]f _:#,3ȾӘA1Gl<|'!3<=M!_-EM*c ap ]AR9x90g'kH~4XϪn< Muk2d^p^`*w= ^:h*~e"I0#p"݉RUNs SԣSЫI3bPg%|F"h W)3NzRzh?ڊ()=o˲5dl  Sb.X{a7⛒t@c%:UpuբJ޺\vyẹ9&|¾!>3~>2ýņDaR%s%VϪwVHZU `GZ~ 2vJ!˃4+)ؘì1}C)Mmq B3|]@H}nV[29{=j:\k#M5ͬE5zΫ\.6?>Rrl Fɿjl7wPKfX?q~.pip/_vendor/urllib3/util/ssl_match_hostname.pyXOIEiPĘ!m6g+"e ^tٜ՞__uϣ l{~T}Uգ$ɻpb0iʕΝ2,j|߄R;%*Z/UdIF;taһTJ_B65U*J/_Ki6^F<#s0vfV\pj4R4}˨T-vZ@\\_,:ʞ?%Vw^r]iDU\l jc\N`CWk:v?~f jCW!.p/xY[\]9UeV1 8z?%cdu] k6\Jzߌ].kG~iLwj9fς"=AQ^ {)J '7QqYY-椅PgNUU)a{d<7M`/2pyxo$rT6SҕC̜N{k?jUSpII8*t?tFkQYU gvh'Jn k'ȥP>WN 8u\f@ [INvXb8~ zbf]bapP vй`~lJ֨ Q$,hn4P* G )^]6fj8%BNmXDJ+eD`CbiBAbzW %0k憈.7RX!ha6*8/ˇK>SJ) >;ZS(о>0!Xj!>N \fInyNWtqá{'/ Q(p=]p(" g*_pG)\76JUb.P;uog+%17]jwo\Tʪ0!3wk#3isQ˴ss.:CPbhP{0dz{5fJ%dB>֨}?zg#n4m4qzz P|S(N}}I~ϒQ:e)w@/.ߞ<>Y3]vfҊG?Õ<HY7!(] Ǔ-^7V|/vUg~ C 0!D\)*PۓÞ;$hO1b!3uiDaa`s? ?YP$вst' KnLl{N(0h*GbӯEg_3 ~D;7`Ղy1MUEcL׼ 4#@Oi_-x?4#:@aiԼ x[ le1R[ug_i '>yޤvUFJ"W/r3[ W1vod66;YV{q{j!l-wu2<ۯF8`߉#C#A/p"&m8Nz9?{T\\s0h=(VCܷm{CwÇ Z!}sl!D-W8~=؏B CHn_hVR݉1D;7}{ u[xH CJoFS~Ozq1 ~mlO{:}z]k @Ge~Z"PKfX(pip/_vendor/urllib3/util/ssltransport.pyYmo_pXe8n\$mQLJKRvܢ3CJ&-)õřNǤIp/[Fk+e;',||,wP/>h|oۻxFEɭep0\Ya3V$`2xI ãe)V 0B+% ?GȜfG Z6qdzǏA3 hҡ&yN6h)&Svb @kNP)uiQZ sYBc0Է {/">Nq-]D\B&Xk+^| x%?k%f l*zm S HF@umXbuJϤ*tsd(*m7wiJkt)ak2o٩-Vf]Ϝn"b@uF%Z-,TJ*RֻI$wy˓"='(pQP?Su1eEDkY _Va Q ŻglYP44kÕ`;p.C9H뉯%e-f2Ƅ0:`FDA(KltxJDt4cjyt†T Q"=/6/3W'7͡(%^;.OW9n@N 0^đU6GTуT~>K] 4"_D%G/" vr>!'yiB_'v MMmJo[u D2,FdfE ("l_E'yޑ:4{{\jtJAYQ!rcoGKCMrȦjVn ~=om\l}P[=^^[~kt $<q2ґj;5CqNtqwRBoliY[v")BeMdnBv_"bl06e/AS}izzϨ!c쳇6OX`C ,2LG5(+)B3pTii<4 4OzfcA(X*Ҁ?{|Lr*.We(a;E;|(4Adu::M#X0B7IA}?jנ\<t&:xvuJ}{*Ss^D֨W7%+h|\hܷ 6;Ia+?:Uޙ!X "K_P_vNGŪ򲛟K6 G,|h !/Y Q+R3>Qt:B%Lލ˛ MtEfEVٱ݁,ej4]aHpYQ&d/s hXzfHP`LQsEC Dnc?;ZߜuqS5\=1K'v Y da^؈! Q狣a>thg;Ә&rN\0gnNWC"uM$\(a ],ˡDE'ep>nMKd Qp}SFp9%`SӴ;SsD(}l@'dCTZǃj]TAPD#X1h-q\Tƨ*`8p|8rϡH4.2gV4BT5n5DC=5ŌĎ{pT:hPgE*_ag\"WBts:Z+~G_PA|]M@\T\ymc~ 2$io[w-PGhJz TuUN6D?ik?7Պ.M_Z@ELč;k(D֊K>,z7W>O#>g!YN wnL`_%dž3!pQ јfL-ZjRAMMTV,ÖSnґps>?G.Iy ;zxb/D0.3S| #ͣDI훐+Ð5P|[;ChC14s5G: ẋJK*vc:kps6^;{0>9@yz4d Ľ…vL\XΖf'}S4ܟ,hl١ԓe>?_7t2" /I8%!Ol:V.cM.,"9F (z~&c <{RʿPKfX+^7pip/_vendor/urllib3/util/url.py;{_HSe-#nBpG50pl6уgneɐܝ3Xnի'8. 8ɘ7L0ϸ+~Zr<1b0,TDޔY> yK6Y$y8p%)%I(ؙ72 Z< ]/˒k#Mfxy6If?saxwSeƠZa,9Eb } "ܼg"6 1a':AUq-;le3uzpxrIϽxwS1 |ME< 0'!,3UPp$># hח{m6<Oṅ(vgs7Zgp[g^4qYΩNxgf׍ͭݽ_^j7mӌ֘hȼ~`L<ӎB`0N{FfukqBcdŷ֤(GGoqMXHyup30Z;nO?\ V45/a])}2WIwԄt*TB+wһp5Pdnkfo ť{~ֿNjH &(_x5<%-iKK(NcK=xQL%nت77<3h^G_iX>/ ۳&#[$1`K*!y1`~|?|25AhFB,fzElYИ!LۑA%~2" %fFYݩC\]gz) {aNHDȹa,[!T^ (@qH o|=@4 eh'>Au1]̇\7 ,%`xĿ/i!ǰĬbae_\cqȫ!R0mX~1!EqF?4,TÄ}A+hݻhNK.@1XEUƐ]{i Zj%iC됮:$ZGhS( ,U6/VI6Sҿm;: `7Ҷ!k FgluY.'044Ht(f(A4 sq,@5" f٪,#.%Y}pDh-NM.Yuʳ/q2qצ&5Vʾi)q*X7j8Mr7^<{5 1T֌B^KƁ% 9$#p&6}n.'|ArtM9-ݐ3p.l,!,LkWЩa Sb"?L3*6Xܾ9Q`Ћ>ӺH=-Lΰ8R vo!Ƣ.$ߝzAm[uDկ.E*Vk)OF83Q}ĝFBmaC@:&RZ*X+yAJAq+A! f$1C3ekg5E:f3-L7X Aa֔ӓY>O@K9\2 mrY0Xgɖ vXAP`~̢nQ \; V6< B'Hm[;"D. 7 91 `YSJ0Rr h܏Da(Dse| Cs<&%BꌐFP\e4{fGWQ{ݡ h>8AF9j,R_j1O!2'S0`>BC/urO 6ȭ"P}XDxS{DWmT7( $GIk dJ(} $kVj׎DV$&s`-ˣQs7g; 51x/`\0oxQsc]< JE"`9 ̘" 8!lV!;V*騀*cCj}?dV^Eن˝.TRQ8<)WCyLWJct#PK$ZB_"_` :4)q-`NXg $ w[5g$Li +$No Ș9[BTDZcŠ|)NXR!IBhl*iTIH덁vX M24þz Ӣ=gP=pExcY7eڭ&+)sd nŕ^Ȫ=]ٽ`(.qQ6)i4R$ )WW Kn6+Jid%GjM&kQ !JS&-iW JG9BT^@2emq_aT=W.癗6K8U^HB[DfWџy @x`>OSO[ollg ]#GjeM,;QUR]"myq`)yY'5L AxKëf!3ha:%p͙Y NsH',6ȶ|~ZB`"M])|zaʖ:yRUf yh,t27͝(T ai"OǼhnb`)d,:~d^3]3۽c-!+%]lqd 6q;Y4dTf)3ٲ/:cn\E,h8~VWL*:XON6WUC8*۔h]ZeLVYJ˳3i l΂ Ä{Ij~-?_79 # a.M(|Z,6`݂"oK+NL+hQxˏ jLi1JwZI,{P²Ct€R)_:i}\8`-\Sp.ДCILW3u.j@jP©t a^IQq]2\x>rL-c,(Vw%PKfXVVտ pip/_vendor/urllib3/util/wait.pyX[o~篘R\Vk\ 8T2l~ b{rvg33|g.%E9[Ke/X/LTHSo{7E57F;NZiz2vz" t^ՔIjoUL豠֋w K,݈uZIW+Nog4)vs12veIG?Vy~L&Ήgaf4WQ`4p[R$YF~\~K0x{ӉB6s$ QPfZ-dSU,μTu:h#A: ٔhGrMpVK[',pmJ/-5A|FBϪ0VVx#vDV;Ś eMy] - ʢF pp[tk@l&Hp$i.u$az`Sd;Z4 DG\V uv%LjsE59pqװⰓZҨGrq"#: 0!$NaH.hKrf! X%fho6<VmMWY+j.Hk٢BWx|[0$nNҲ>4=(|H4& $~ Ґc'C+ +ŚdAf0j8J/p+TF})fT.Ŀb=6xBĀz8d}gb*z;f:U3g /Cd$n]#4t8@/ }F^ 4p sg2P[Α{۝ o:c1)ͯěh\ވWr.h IKGH1wQz*݅͗KDJ5*!אqmv7~ O8M,޽` =9y˃Ǯ;4 7<1,#[09Lϒwق3 x5 ,m.xY&%ݳ[8v ,s%/>v ǩgZw(BUCE,wp??̲ŖP0} *n Mʄ'rP^ _rVc[˺cCFZC?PKiXHN:t*pip-24.2.dist-info/AUTHORS.txtmMo#u+j9^3a.ԷDQ∜tApɺb]XUEvYNlb E x = '$${'YHs<ٺz0٭_$4M:X5E24tb&$ן^t0N'g牙U? ̖+l2*=ʍ+w y  ΖWynX4Ubrukhϕև:&tTp0ebfCNFg (/zO'&^e6W*= fcunMzZ ̴}mX]Nf3ˈMِN ~2,*l:2Mp`SW4ekґq}ѦS;k_:UTև bǝNZTUS!Y3_۲˓偶mz!.ZgMS,R?Jmq8vk9CâYX=ǥ?҅&˰CSiJOjƱ}پ?β騩*Ql5;g#ԡ7aA1lCcuQk9c(Y0J܁&suz9L3Oo>=:sZY̹)[b1&˛%%Ƣ} %s~mL`wCm1ДlʬIG77uVT96kB[ bVښKL9vMfNmv6uhBn`SbG>@H?wAz2.94U5;쪵-xҡ %=3l, kLo8=ΰv8+LqCrvX_/(ˆt뫪snlW<dlLˆ%Kf!T?i+WO_?iluEzlf=-`vXm\ ZU6pW~7kSF͛í|WAͨ#̰uUw=qh*B2c*au `_!:#&Pc/\@\#m9 ͜btm t$9U%3+xBaW,iaJ<e3U2z1,Qr̴5^B9 Ȳ-QD+gV}˅N!>D %`:`d#](Փ*F]~p^51@%eKʥƈa;b]pؼe[:u^1?oyfЃ>Gf0M^qn~_qd2N׹ ޏ'~ֽbR$d ?[!ͧRhp#11ȳu&b 27!fj/߶{w:t"gE:d4Ý@JBB d^/>5m2oɊ"-c1ycEcb[}4.xrw'" CH#CMQlz=xx$i;O/\Ce$Zs{nαe.3㆕"dX)˒oP,4MDamUu"*>d\!M[ۃw\%{y ,ޏ:n~$jmS.dsc# a:2l,dZ22T] s6}$]ߟ6zld6VY|&(b7$Ա ]0319_D߿H k !Y76kc\$d?=|M#+k'myN*$[mfq# hfQ@$9<8Z&7Xѭ/^0k q 'Xs'A#_hKr29qf, _,FEO9/dr=`2.-d' ,"]GQtq yJN`0$8c'+ e!x+ s; œhUM"@h*azxe5"Z n)ZBo;$x')@WObL& TH} aTP(Uo!er靖q /EƦW \MJ[ae|ieAWc IG3`vGJ3K:VfZ !2B03Qm=ʴ$YC>#*dcnEj3ULJe",,FKvB#F}]D`ɓۭi?L*{"`N#G=kQrv3Q!D,㨆b̜bY݉wJ2g\a\ X1jꪭ1gM;"д!)$T;{"Et 8[b!k֭MY)(4!)9$OmU,o­܋ 8Ī}|oaD*|Q\&3P #5D+ !Pl{\0]azrD1 [&#Aᆹ 'eJr3lv*"Yb)7éOcsc)NU +SUz DZ.EyFc/'Q6R` .i[Heb KܷRxi~HEd=%fIFQ 4ˆ[zTjgtU[yRү4Xb:Auۃ?/ܗW^ǑA#QO=&LJI_n_p|~5??D =8 ׬7{ gLCW$|l(9\%F %esxO%Ma?˸1!^$!%$o0VQJb#ҕ;fr.v ,`6OmFGm,R%#<6H4 X(yJ3..`2Ԕ0v}@W\^aL!R_F0n(8YVc iL8jr58Iil)Wѕ62z,$nQ;W^.괣R]xE7|$-_Xvʃgw|,6bS1Yס3[k n1$:T ak$C Ɩ_yhF)v:Y͊Mإ%vl AY2D$Ř[Š!,w*KMNe$wW܁Tt`7U= V{x++2C:x0hy7W닣/Ky2Zr꺛I:&=(>4+ѳ!~!{1WXe" +S OЫ]@Eu[֢#3g`|s;=w,|x3ו@6/Jr952Uh'W͜m9r\52ympduW GE95N;pJBkR:e WE쒫wqRm㻐^,>TMn2o:0鶌rS%X@h~ñKQcHSSTjٝ>s7Ve6Ae Z6mZmkdfsk{x j\C6}+g6yjF,|q:y>u!V;^[~z @Vũ4~ Rs+-RWGbxqYMQ`Rwӡ[-VIl4ɶHDO2S)8xgWA[R{$nJ$Xڰy׮V\S 1W Oe+1_ &$K&&$7ӛH|NĖv;)q]Zmh$np3B3~|^!~Semop򛑪;KnVTB2%~ala?Qr|p>M5'_j$73P ym<7XO xKl7~i᩶^2i MY;RNq*TME:YEn< 4*6bBkՈdp*3{hL*wOv1E],?_lU 5У+W=_:uʛ&hcd :ce.4L~ObL";is"UD٭ω;۔ Z"ZC!wCNoH,?TX!M.Ǖ5|Rey[d*ʥZ_W*'MxoHhFY/dm#vɪ0KlZk5ӚC\}0w]ÓdknGfA' jE^oBwho]@?UBاH8o%Ef^USn4]2*~M/;z:%}#á^sKVnի=5a+zS0nU:VkFsUTҪ !jIr)_SrۨPT!1D;V'l4~.Voy.NB[*6ef2y"OQTSl:*f;RaKbgyPqO+^$؜+eJM"*[j TRqֿҾTgb"jmisM(@&"kOrLNk{IpH髧xIlMɤAF͒'_.|: P2#%SjCE쪪4'rT5؃*M[R(VʽbX44{{;.aFQfUIDD;~s*=a$B.u_n\M3~%qJ#jy:({|;}_vN \7 {&7^wAPFZ=jf^vr\Ӡv؅iS)^L`[]sV~=b+ӽgޡrZkTV7kl^ ;ä Td6?1PG+iw8Wz6fy-) eo&ѫdX_{{ϻ*7+S}Bj1==],*fDv BO/u2kz,jcQdҖm|6L~|fb1pH1ҷ^ޜ%:[%VWxu^ZK~_Gm~^'i7ֈ]c#q7`ƱKJ;Q0?>}{BW!~_KB[]_h3WPKiXV+Epip-24.2.dist-info/LICENSE.txt]SOo0)rj%U;M94Fi#'x"aY#NBB!qhm==}2ƛ>n vƼ f+y`;EO{zZ3Ǫ0"nhb n*UP -xwj48@彫m|и|BU =rBkYyC'T ņ֝`0ښ8bsCޏ;{7Oy"={L@>c8mXyYQczi6=0W77]G }OYT*4*t/;}Nc:lRm@,4~p]. %R"#r{5SлVގ|[.[}3x8s+\-SD /")XY [FN(%|?EU(^ u $ۤ"r!kTK k.BdBbX ILil2بB(ȗ Uz(PXMR%)ҰYqsLEƯR*ɘXǐ5{J"ۮz D GI"spcJA10%J*d$S r~eӍ7%{I9ː$yPKiX=(pip-24.2.dist-info/METADATAWmOFb~b\k*%V{cH;;R >3A8sǣ?R)%D l U*i)zu} FdD ڀJɺ@+u x!l̎[<0TA\, _ri]뤲oWkSg2EfSvmG"s] @\c$Aqjx,u2ĞEƎ;tY!~[4ҕ,F“P`T@wو:̔Hj )nKa[у 2l-)͈r2qB\:$v"!&c8n("SȌ=wKnĀ(J#L-d]^UT sDP{@⽋Z+Ļ%_p7{FJ֮+v#i6 QO͌l4[݉G:ȄC6 :'ųhP)TsVAwѥ4;K<)AH|Vb ֕cm6Z'f(*]BÆ9ߌz4la)s!e ]۪x, m{۱iB՗l^w79(G?R蚺 #J2p&kC0la& >Dyޑk؟A%e]5olQhiHWh!<* ]Ǭ>Hs;B=߅/N'{`wkb9$RѮ_I\nDh+/dX{4g 'lI#kWF).?a4lRJy{5S2%)P_x #RO}ON4)n8$3g `NNFW'i\_PKiXWvX"\[pip-24.2.dist-info/WHEEL HM K-*ϳR03rOK-J,/R(N-)-()V07jrzd&Y)r$[)T&UrqPKiXW2##4jG265aD+ܽ(cw$lTquqE &sN\c^UK_pA4`.lm>g|q[^ڋvbL[Gz&%",B.z#.,`ݣO#%'as.Kj29~ Bw`A<p=fA02z~!j4\IoI<,tV0%G'4jEPA o'8EelX㋦9rQhp~z5uSySp: '&,84tq$>lø}2(ޅWDK+*/ҝU ψ(ݕƕ$!} ڌI`6'd^l7ܕ,ZʣYga#>ھJ\d)B:M[.}\4Whǐv#`xCqx4FG6QaoߧC޺p]S{̚w^"upGn6_8._6/ ɓ_nʹtձEOi=U.~б-JT6wDP,?>WK#[d|^iy؍-$6,؄MՖm{?(qr+N+y^䇎V?p';_G&k3edfL(W!6?do P ݑ0i(*jnu=YE:R)tHmԄC@j߽zju>e<&er!k%EUN( 켎pD Þf=79—n#~[s'@p=[D1^D0;B+/k~bƥhi(D,χIoΑ/hߤ}< ^_ G'DT Zf\ZmsՊJƣ6sm oÜ*Sgg:<7<$] lO63¾7L9}ĥ5@È71b$^\[(>04l]WrbdN'pnu 3|20?[?\Uu{2wI~sBArFCRtIdWLFt}\ksGPƹQajRvBPT'rW2JU0m~򚼁0H;X8NQK.rAKc=6?Gz # p(9sE)("1)}gpIY>pVKɞ%!Hմ'5K]6R=X?eաIQ *K#'sMHok/:x}5 xzE)H*#;⨑?d۲|ԕ[@!2F!Smi!0Dטy݅^{MQhm~k\{%.\f5FR|rr]Vov(|W{2.ƅ&>*{zIG: 5!8B|!]<' sKMy&ksh>h׼2BnrԶN~B%F`IJަ&mj=)&ݼ2Mb_"ӏ0~(NDiQR`G1 -F!kpNԐ n(xBY(c"2(<;\vS}|!Z"4w-X:}BM!ԽIn/S?/IK{](+](&,9-:ޫcQ/G۔y0Ro ň>)eq=k(g -c}}f>S,i;Yfz mzj8-m}ieiysȆ@ʜ{-NLHs0޺W}5n Uǁ R]e OEÜQm r~ݯ 'w T;I=5Ɏ9C,8$H|SҧɜccnmnKsi+i԰9Wx3(z*}uxqi9*tl)1~x]&~Xi%Ͽ)ZZiL\gytN[_pC(ff/",4P C|8S;y>.kqCäޅ]61}^B!ܣ&.A[B@hO!RnvJCf'ky%`AP{t T&\X ;߃ }x ?FvWǗ&e&R7D!LætGۂhCY2 ijW=R A` {*OM&rE795<U:|'[†L?E`Hob٫Jv҅p׮< _il{lyd ̔ƿo#J*ѹefS'2ez@['qb0n{p"Tm X쓫y]7^BǕ\̦28j~,ӨL3{͇`O_α$;E9{NXO62!䠒v'Nʯ#5mEF[=%o9#ͼ\PcX`S=QF#(8miT@HD\ϯ-MIꂺ >2:(٧Y㖍)=Z_mATaeG7x3{6k6STJĬ=|݃q+n"^rizB5h0Ľ)87%8-RxSڦ<!ƙ %Mf,]z@^&&xW]o^8h.Qo]c=plՂQҸEtس;VWS~Q_WSVG@D)=y}^xV#?_oX^b+b]'Ε#lÌ/Ym}eփ(A: D\lգ}ۙnX)S#q;K]c)~S'qAp@UP}E!ߧ赏10`\%V>%wa4R9 !ź0q9238}th*4:/>7FDlCيu!H~'5()UR0b:wSu޶4ŸśUtVa*RtNmxtv6+inz }_|ɥ>Uۊ&U- !: /^cnCH*ޜ?J=ߴe{f-*WeP.bd酝4K=;$П]\ K@'TծQ1aʷ١7]{ʾ _}=(boszF^`ioygVko$}3 `"OZ|)*L[L8sn/ FˉDMLg2I]\OF}TJqiB- zQ/o3 W)A }[gg/'9NjX[KzGk~AoWZLqR$PLe]$g0M^vc_r?\=#&bG4o.h _OIJCo|kX{Mt1h->F/&,sH=z(/S //s~:%QfFȭpRQtEI8KKdT啒,7 a[y?U{`n_3CNu]U,\$7 i񵥋FrXsI.[{.^ǐې}S?4m$/XY,=N96sZنp` wm?2Ӓl"{ࣲ?wlwgS4CsP4ݷч&6젰1\:T!Ό<錝C&Z*kom +0Sl󀘥hT EGe"Y5t3=\cF&,Oi/Dg@{푶+-xR`Yl.얿_в=iLڅJB9~+k<$bYPmfkbAc < ZZV>7(oLKƏ̠HxhhZb0kf̲4܄`(T6JN/y_Gp.M[G%=XDW_wgָvG?QCx há`!?LДJxB~te!0d>rL! 6D _V~>kpwطu~f$%8CoZ+LFprM:r]lI/m?=Ol)nM(F3+O$ ݲ_㥍 _">$ewl'm-NG%o۲eS:2ΫGbե8# u3;E\vy,xh7@83BiGDr-}okU>v$.VtaItJ \bE ]Qߓ|iű(Ko(14" ^΃ȏȇ W@iۛ>K%K1l:6mu9تe6#o?m'vroSaLڄe~ %nt;S ( qtR?'y9isL8P tҝ졅bVv77\ki6kA8GTjo<$nzCto/= $pɮc%;˜ {ɏx(-# ү@9iM-Иw@OH$HDon#_<"fu@HkөgIxR߻_ ȉGR.hvݟ;/P 4CUؙsϣ'Ga2vtIYvjEmxt-?B~u[ 3cӔ/f)nNՇT55#F "Co: 6ëQ\y" ҸWL5 6*I}K~z{=ٝ혔Q1v4ĉ[ EvnRA7QȷѿS?>h}%$o*FӖ0?֌wC>Q* jp 2P= 3 ua).8~|sޏ_~ס N_suBD UAeaoo~[o#x(_]{H8`U[Hq6A+p `c^ ޵ei- =>/*bC - ڽ@9 ۓ ې:i'uzLLJ5ss,HH蛀x>_G1Ola3*Nw *>fhҹ;R.PnkoQdL_āTf󪂦fW>|';RImi%o+ CΉdAߴ-"DpiIxPIz~)Y/TOp̝OE~`Ց͇[rtʛ'aի߂*Kdnwd~]:'4c!~~M 쩑Ǟv &H!vM-!{w}?̈́dM5*cHE`4|G͂) 嗎7@|;j%Դ8CnۓE#`چ'fr/ 8+A:Eyi&UBi%2`{%ܡ0/k c~GtbTxry+}K57GwCAb=زi+>/-Hs?a/rBYj ƯjadƪtheaL>p t4Єe[0Ź3ף~ع5_2~ď*o$l_Ӈ t|ANfn?4mKZO4_xOeUbC8Ut}C^U P_V8ʇU7^s`}IXt򭙸=oKWf?#4 sG/8h2X͎B~ SP+QF'DpjhxV6TP\FutOQ X׽AsuY%v#)Մ` G(/ð~1^5&A{ tSnIg(/ Jad{y"s&JMTǰ ʵNqPr|[;>bs88q>MQ]SFJqʑl١Jύ׷5hQ ql,{/y g,0NFF 4bf1m3Isُ sX--O6Gbe&0fz>A~?=-`-`O\9#UBjQd|qdn5kQ(+' G` ѻeu{ALt;Kuz $Cf4 1FsGRܵ=1!gD>Hւ# [!dP9Oc7;#=ߡZ0cW'2+:E?6!|XJRz|^lpGQªI3nk);dʾf +b>cd B<3kTb a@wE&R7A}sk=S38z9IIXn$%1sLN Ԝ VͷՐ@RWײ Ծ|q|{(.ܺkt;eif"oB!1jU J*ÿ/ ǫvA! t<69Gz4,fس,lvyoiH@\0]E(~"q8{dYH|ޣ~:^vq"1/È{¨-!("iά)(c-Tql!J]:1^Nf7$ }"~Z#k3j ͎;rU3 (~,q-n/}kWhMC{`w'__LW( IGn2FsX\tO[bZBYQtWE>J"=@^~n|wms"$MpNSvOUdIΝ!=Peܱ榲p-y?}:*!,*~!2\l%qf:+G|~|&bkQ[›V(m?{|#U_jԂ;njD߲ ŁV, h$wk/rv̫X\m8]˕< ,tSx!!AުlW|y8P+QZn$$( 4Mjo) g|P$PeX#ddѕQ%U\sP|k`^>7_OĖRWxtͲ iac-{wq_z.3:@JBփ53qEMb|y{J]%1n|19mH:0*{ NY$(^<ᵼrbHGC+-0908A:NGA/(*3;VMwjT57CT*cCǀ]?_בoިr.&8.gjj f\G"#SlI@.BT(uV$,-'2,]BKs%_k_g./F:3ώnGA}wӌd r7y>9rJ<~7hq#@OÚE&Y+ SRgli_xBzfyTbz>ęrAuEgW^4%L8֯$҅Cjfy}Yvaw>̊pK꼴*9rybRzGC_F3kS;,lLf|;iDŽ糪jtv8 `g$w8s"4n7<1V:Tvw8 7|! FȮqsA^e ɂ,a%m:dS޹ 'љ5`@y\>{?|ė($XJv)-"GF9r3S;D~2\FHs {QLgۣBP[!kOmT~~YR~Tm~mƱh0wBt7}BSFmskzMm{mS i$it*@uR߯n[jVO~yEAw?B6V֤-D d+ա,"4ey /  ޯdpBPa= A0aȷ-F-䂥wDL2Jκ1eő[4 ;GOϗI[3әam(*4,+5 ݂/f/nUYp}qXh^$͑l@S!ݲeWCu PzA#!d,GGB"FDyՐ$imN-?+Poy4z60Ts#2Wd;"ϣQtsS\J|…'xf_SI  sௗ bZ µ1 b'i <:O$I CU VZԂ@s&)~pXqȐ@Σ3?QV}k/Ceaf2{$"vZ0ڎ@~~9\J(S@ɀ%,@&Fγap E/[?×I]E :z.78Q튘XdtQi^z9$x)V,[vx^nt ?<:&0FCx}@O&sAY+櫺;c~26D![~R&O5\ΝQ\Ѭ9r)ݙB[28<SRFĆm(*6o"6d;ZMQ0m۟/ƿv;M+18apW(^LxK'9oi. 56R]W#L- V_{RS>)J{}$U P 3D(wA+C/[J /w_N#_Nnr` )5Ӆ9LKmyAo>G".pC.I7N!=_r w[*~~3ӑbݧGrXrzlE\R΄;;};e-y4f_VLPŏxd#uKhVϙ<6T[n0ҡ}~ Rqo>/ DՁ[M~RKHtAr#L{Ao+:W a<y]ʴ>e%8>fkGZ~ẋv'kQWظWUu?7 2t1Smv/m׺͈2z;@zwp9`X-xSfw4x\(hu@]\ĺ6M,vA8JCn{w9g C[١6_nBDT-~6_)j } J ^aE n@*>[@Kc7tRuTаvEAtSU_>;g52fd-wwoc>V9ķM c:|<׸ި[+rU*F3 d‹{ҎQv~F` wN:zTiB:BZ]<hW0ӳ~ ۶_cM+êt`rZ~-%o~\N =!H]- ;8iyF˾]\M6x }5\!nm)o}_YXt=]zɆeD[.8骲 XhO1/=Y]hI>)ɒ8+D0y ȿ7jNWmERY'TZMË KP'Qajmmc@}! {^$ݘ_}aqt1)|nŠ u@3 S;5}ZbƠYv[4#{>ağ]!$\@d![',a.a5 qpi?UY;$?t7S}LK&t9k*J{(V| , H7Q'}e[FO׃>NE7ՆpmcY/b*"D/%n#"; 8z -y]Nu;y/%eV @1LMCu? &f|^]kEe;s/H?'|H'4_wUm3t$h2"VlopjJ&݋>dzHn$Ju6>սIM$]}&܊փPrVtC%G`wX2l}S-9:LҌy2*\۔>Im5ev}f iMCM:, iG76*08gd93 +MKҭUr7$-_whJwlỦ Pq_#Md18o+^SόM=hdPH_pch XCe$ ONQrc6%,XwpˆpT;){m ܬpGFA]{eqpުD;ɇIJ6}Vq|29 !;޻RHpc8i%ڐMY|֤cO%["1˜pY}8?v Yz5tjԡØ+l%]_g5\n嫨CkWxb|qzأ ~GΒ֧h-nn[ 8,iD#hle`v89["D OOd jQ)'܈B뎃Qhd.˩ڹkJnֲ?Hf ?{&vr$ vuДFRãO6̀ ˅uf^r._oW.N>ҙ|;lz{ރW!^&O Ga&HJsؼ%g\d/p'i؀@cE^|Gm㋻dJ`%l(}({q n&ZBמ.l cʖE5j{knA2q\@pȆ̼G]ձ>pd!XFHޒ4N^ze[m|=N|x}!V @H2T~vDlb,`\Wdl͏'WK-}Ɂ3P1u{iR 3ߢgoQW9\M {1ukImlϳ`"MgBԳi(C|EӬxQqK fyxoLy.HuMk.pK|J4rqqM/Enf2k!":fuf01υE`TAɕh&[$]ˇ}Q0٥:#u92CI!'Oh >1CA݃J@b͖xU=9srg=BfqUE[49*]Z"Ql"Gؽ{Y6Ic8NbT] c"Xw]QWZ(RVh-HL~^0>{GEb1kKSijb l vATI!6jvw.EA7Z ONJC6~׍eawiS@CsXˍ|V}]6)Ԛl ch(A,mo˗~ -G"qA>o&$*%M\kₛ 'p^^[mY0O}z6w1 $ß7uDvPNme5MOX`vcgi"T5P{--23xu3 OK|{*qhіr;G Ez2d6ItdÓ-w2_ jP׹(n(_5%64) |x,U,Nj.ÁK [I%~xF9xO@cǷbg׌z& tZ=Z\7t[[.s٨:әa&%HLTaDnAѢ>n/ܗpkLPuŪnZ1'5"_;%J[kL9}/dz/ߋa1̌y/`,<@(hLw]Pa<> 3)p[%1ZH+@P3[l3w/ʄρ~mt)]mDsUZ}6OP:?EV~\Nv-ܑ/R79_;;6 b! ہi)ؗr:{~yؚΌA.s8_'8Vr~+$mO7cP81Jgc;:p#[vegd5yfCuG|E;hݪ*ٌItkGϪNWhᢻꍾq iB{TnvДSySVVYVO-^H;_ׇ#H Haxtx2s="-Rgbg *E8]ϩ&H;ȔR(|T? m |eoĿA$T᳇30HT[|Syx\T;( tFDe).+>'*U }A&&^JV\ZBad[]7}?4ʲm9K()q2F 0uKe}[RB}oLѐヮv&(hO':cz"6Ip[}ޞ֨{kˉ@)a5 Y:Ze.޶XO\]Q iN$;>iZEL؃'Iz)*yo3b `f+&$#@tNideНBia@Z뇣.4B۷{[3W"bhޡI+ c{=aXyYřzDuH(T}`#bbhǰm{=SH.G+YˠR?]*x{2:$:l^RX;FODޣhoHjeSaԪBfp '~أ|Q JO ff/ rDe4E.y.#TfMX/8oo/_~Ɲh9S\.|Nm<9Lr'婊 zf;rד נ~v*u,TeٌJ u+י$!ߕȪke'xm7pdB&>ua37"c%uDJ|JžU e)+yH0&w(WU@4ܜ̚CԯV?ޫ3Cj0OMrIᵵ`'{[ ytx~. Wg+rd|` { K3~-fOnO/B> +sApip/_internal/models/installation_report.pyPKfX<(8*REpip/_internal/models/link.pyPKfXJ?_pip/_internal/models/scheme.pyPKfX a$`pip/_internal/models/search_scope.pyPKfX)> '.gpip/_internal/models/selection_prefs.pyPKfX%(%zjpip/_internal/models/target_python.pyPKfX,Vopip/_internal/models/wheel.pyPKfXJ22!"upip/_internal/network/__init__.pyPKfX؜IQupip/_internal/network/auth.pyPKfXOѲy_ˋpip/_internal/network/cache.pyPKfXPS !pip/_internal/network/download.pyPKfX #pip/_internal/network/lazy_wheel.pyPKfXv5I pip/_internal/network/session.pyPKfX pip/_internal/network/utils.pyPKfX".pip/_internal/network/xmlrpc.pyPKfX$pip/_internal/operations/__init__.pyPKfXVG! pip/_internal/operations/check.pyPKfX6@ &"pip/_internal/operations/freeze.pyPKfXӃm#pip/_internal/operations/prepare.pyPKfX*pip/_internal/operations/build/__init__.pyPKfX;/,pip/_internal/operations/build/build_tracker.pyPKfX~K^*pip/_internal/operations/build/metadata.pyPKfX',l3pip/_internal/operations/build/metadata_editable.pyPKfX"*1hpip/_internal/operations/build/metadata_legacy.pyPKfXe3'pip/_internal/operations/build/wheel.pyPKfXק>0pip/_internal/operations/build/wheel_editable.pyPKfX} .pip/_internal/operations/build/wheel_legacy.pyPKfX{53, pip/_internal/operations/install/__init__.pyPKfX$e 3_ pip/_internal/operations/install/editable_legacy.pyPKfX!+!k)pip/_internal/operations/install/wheel.pyPKfX2g] .0pip/_internal/req/__init__.pyPKfXcG!3pip/_internal/req/constructors.pyPKfX3EGpip/_internal/req/req_file.pyPKfXo$̋ l\pip/_internal/req/req_install.pyPKfXE* ipip/_internal/req/req_set.pyPKfX4Oq-]"pip/_internal/req/req_uninstall.pyPKfX$pip/_internal/resolution/__init__.pyPKfX˩G *pip/_internal/resolution/base.pyPKfX+gpip/_internal/resolution/legacy/__init__.pyPKfX}l^+pip/_internal/resolution/legacy/resolver.pyPKfX/pip/_internal/resolution/resolvelib/__init__.pyPKfX+fpip/_internal/resolution/resolvelib/base.pyPKfXH qoM1pip/_internal/resolution/resolvelib/candidates.pyPKfXV ~.pip/_internal/resolution/resolvelib/factory.pyPKfXb7pip/_internal/resolution/resolvelib/found_candidates.pyPKfXm &/ pip/_internal/resolution/resolvelib/provider.pyPKfX4ٹ` / pip/_internal/resolution/resolvelib/reporter.pyPKfXc3Gpip/_internal/resolution/resolvelib/requirements.pyPKfX@q01/pip/_internal/resolution/resolvelib/resolver.pyPKfX$pip/_internal/utils/__init__.pyPKfXiy #%pip/_internal/utils/_jaraco_text.pyPKfXJx9?3+pip/_internal/utils/_log.pyPKfXrB—B-pip/_internal/utils/appdirs.pyPKfXyٮ_ 0pip/_internal/utils/compat.pyPKfXs)4pip/_internal/utils/compatibility_tags.pyPKfXl=;pip/_internal/utils/datetime.pyPKfX.U{"<pip/_internal/utils/deprecation.pyPKfX*j| )"Bpip/_internal/utils/direct_url_helpers.pyPKfX+@ QFpip/_internal/utils/egg_link.pyPKfXJpip/_internal/utils/encoding.pyPKfXsSppip/_internal/utils/retry.pyPKfX\a[S'8pip/_internal/utils/setuptools_build.pyPKfXXh #!ypip/_internal/utils/subprocess.pyPKfXgF ^$ pip/_internal/utils/temp_dir.pyPKfXn s@ . pip/_internal/utils/unpacking.pyPKfX?pip/_internal/utils/urls.pyPKfXM !pip/_internal/utils/virtualenv.pyPKfXXDpip/_internal/utils/wheel.pyPKfX//Tpip/_internal/vcs/__init__.pyPKfX4 ! pip/_internal/vcs/bazaar.pyPKfXyGpip/_internal/vcs/git.pyPKfXacpip/_internal/vcs/mercurial.pyPKfXe-pip/_internal/vcs/subversion.pyPKfXp"W#pip/_internal/vcs/versioncontrol.pyPKfX _ pip/_vendor/__init__.pyPKfX?{6xc  $pip/_vendor/typing_extensions.pyPKfXJoJ pip/_vendor/vendor.txtPKfX/?$0pip/_vendor/cachecontrol/__init__.pyPKfXoOM pip/_vendor/cachecontrol/_cmd.pyPKfXcHw#pip/_vendor/cachecontrol/adapter.pyPKfX?%!`pip/_vendor/cachecontrol/cache.pyPKfXK2&aH&zpip/_vendor/cachecontrol/controller.pyPKfX0['pip/_vendor/cachecontrol/filewrapper.pyPKfX&pip/_vendor/cachecontrol/heuristics.pyPKfX!pip/_vendor/cachecontrol/py.typedPKfX`+%pip/_vendor/cachecontrol/serialize.pyPKfX<e#4pip/_vendor/cachecontrol/wrapper.pyPKfX%N/+Zpip/_vendor/cachecontrol/caches/__init__.pyPKfXeJ.Ŵ-Vpip/_vendor/cachecontrol/caches/file_cache.pyPKfXFj.Upip/_vendor/cachecontrol/caches/redis_cache.pyPKfX3a+Q^pip/_vendor/certifi/__init__.pyPKfX/ upip/_vendor/certifi/__main__.pyPKfX"aQwirPpip/_vendor/certifi/cacert.pemPKfXj-[Ppip/_vendor/certifi/core.pyPKfX@Upip/_vendor/certifi/py.typedPKfXVdq|Upip/_vendor/distlib/__init__.pyPKfX71+Wpip/_vendor/distlib/compat.pyPKfXF\0pip/_vendor/distlib/database.pyPKfX%O=Qijpip/_vendor/distlib/index.pyPKfXxZ27pip/_vendor/distlib/locators.pyPKfXn :X7)pip/_vendor/distlib/manifest.pyPKfXn pip/_vendor/distlib/markers.pyPKfXBf%  pip/_vendor/distlib/metadata.pyPKfXՀ D* 9 pip/_vendor/distlib/resources.pyPKfX=`\IE pip/_vendor/distlib/scripts.pyPKfXJy~_\ pip/_vendor/distlib/t32.exePKfXzN> pip/_vendor/distlib/t64-arm.exePKfX\e X pip/_vendor/distlib/t64.exePKfXӔ H$ pip/_vendor/distlib/util.pyPKfXkO\m pip/_vendor/distlib/version.pyPKfXn`&f pip/_vendor/distlib/w32.exePKfX-D -; pip/_vendor/distlib/w64-arm.exePKfX.N$jpip/_vendor/distlib/w64.exePKfXX :*/pip/_vendor/distlib/wheel.pyPKfX`p#Zpip/_vendor/distro/__init__.pyPKfXTi<@~[pip/_vendor/distro/__main__.pyPKfXJ:mk.-[pip/_vendor/distro/distro.pyPKfX^pip/_vendor/distro/py.typedPKfXxQpip/_vendor/idna/__init__.pyPKfX[Db pip/_vendor/idna/codec.pyPKfXEAjpip/_vendor/idna/compat.pyPKfXW w1bpip/_vendor/idna/core.pyPKfXy918pip/_vendor/idna/idnadata.pyPKfXS!Ybpip/_vendor/idna/intranges.pyPKfXS pip/_vendor/idna/package_data.pyPKfXpip/_vendor/idna/py.typedPKfXP?&Lpip/_vendor/idna/uts46data.pyPKfX'z5vpip/_vendor/msgpack/__init__.pyPKfX;;ӭ9!#xpip/_vendor/msgpack/exceptions.pyPKfX:]zpip/_vendor/msgpack/ext.pyPKfXepip/_vendor/msgpack/fallback.pyPKfX'/!Fpip/_vendor/packaging/__init__.pyPKfX  !pip/_vendor/packaging/_elffile.pyPKfX]. r%#֢pip/_vendor/packaging/_manylinux.pyPKfX3 #Epip/_vendor/packaging/_musllinux.pyPKfXVb 5 ' Gpip/_vendor/packaging/_parser.pyPKfX0`$pip/_vendor/packaging/_structures.pyPKfX|#\pip/_vendor/packaging/_tokenizer.pyPKfX ) pip/_vendor/packaging/markers.pyPKfXD!#]~!pip/_vendor/packaging/metadata.pyPKfXnpip/_vendor/packaging/py.typedPKfX*- %pip/_vendor/packaging/requirements.pyPKfX6":#pip/_vendor/packaging/specifiers.pyPKfXbuIk pip/_vendor/packaging/tags.pyPKfXn,6pip/_vendor/packaging/utils.pyPKfXVR? S=pip/_vendor/packaging/version.pyPKfXW/%|Npip/_vendor/pkg_resources/__init__.pyPKfXuz W$pip/_vendor/platformdirs/__init__.pyPKfX$pip/_vendor/platformdirs/__main__.pyPKfX7kLA8##pip/_vendor/platformdirs/android.pyPKfX7^$#Qpip/_vendor/platformdirs/api.pyPKfX)7!pip/_vendor/platformdirs/macos.pyPKfX!pip/_vendor/platformdirs/py.typedPKfX;I ) Xpip/_vendor/platformdirs/unix.pyPKfX _##pip/_vendor/platformdirs/version.pyPKfX '#Lpip/_vendor/platformdirs/windows.pyPKfXK Zpip/_vendor/pygments/__init__.pyPKfXa pip/_vendor/pygments/__main__.pyPKfX?h\pip/_vendor/pygments/cmdline.pyPKfXz pip/_vendor/pygments/console.pyPKfXb/v#pip/_vendor/pygments/filter.pyPKfX([&!&pip/_vendor/pygments/formatter.pyPKfXanD%-pip/_vendor/pygments/lexer.pyPKfXk- Spip/_vendor/pygments/modeline.pyPKfX^"|cUpip/_vendor/pygments/plugin.pyPKfXCޝM Xpip/_vendor/pygments/regexopt.pyPKfX~ ]pip/_vendor/pygments/scanner.pyPKfX-i-!apip/_vendor/pygments/sphinxext.pyPKfX jpip/_vendor/pygments/style.pyPKfXvG\Rrpip/_vendor/pygments/token.pyPKfXL!ypip/_vendor/pygments/unistring.pyPKfXup /'pip/_vendor/pygments/util.pyPKfXޱ~ȝ(~pip/_vendor/pygments/filters/__init__.pyPKfX +{pip/_vendor/pygments/formatters/__init__.pyPKfX P+pip/_vendor/pygments/formatters/_mapping.pyPKfX   )pip/_vendor/pygments/formatters/bbcode.pyPKfXҢ0 (pip/_vendor/pygments/formatters/groff.pyPKfXw&U'( pip/_vendor/pygments/formatters/html.pyPKfX(Z&2pip/_vendor/pygments/formatters/img.pyPKfX9Mu&Jpip/_vendor/pygments/formatters/irc.pyPKfX0nWjK(Qpip/_vendor/pygments/formatters/latex.pyPKfXn(gpip/_vendor/pygments/formatters/other.pyPKfXs3.gnpip/_vendor/pygments/formatters/pangomarkup.pyPKfXndB .&qpip/_vendor/pygments/formatters/rtf.pyPKfX7vɱ &pip/_vendor/pygments/formatters/svg.pyPKfXRLB+pip/_vendor/pygments/formatters/terminal.pyPKfXofK -.5pip/_vendor/pygments/formatters/terminal256.pyPKfXh=G S/'npip/_vendor/pygments/lexers/__init__.pyPKfX+z=A)'pip/_vendor/pygments/lexers/_mapping.pyPKfXBp+%#pip/_vendor/pygments/lexers/python.pyPKfXx@d'pip/_vendor/pygments/styles/__init__.pyPKfX{ 'pip/_vendor/pygments/styles/_mapping.pyPKfX_'pip/_vendor/pyproject_hooks/__init__.pyPKfXkre&pip/_vendor/pyproject_hooks/_compat.pyPKfXp .$pip/_vendor/pyproject_hooks/_impl.pyPKfXd"3j'pip/_vendor/pyproject_hooks/_in_process/__init__.pyPKfX4" *6(pip/_vendor/pyproject_hooks/_in_process/_in_process.pyPKfX #g E4pip/_vendor/requests/__init__.pyPKfX%tt~#;pip/_vendor/requests/__version__.pyPKfX('.=pip/_vendor/requests/_internal_utils.pyPKfXXz̭k ?pip/_vendor/requests/adapters.pyPKfXs6Q1Zpip/_vendor/requests/api.pyPKfXލz 'oapip/_vendor/requests/auth.pyPKfXY?#mpip/_vendor/requests/certs.pyPKfX.npip/_vendor/requests/compat.pyPKfXHqpip/_vendor/requests/cookies.pyPKfX=`:"pip/_vendor/requests/exceptions.pyPKfX5Vpip/_vendor/requests/help.pyPKfXGgpip/_vendor/requests/hooks.pyPKfXwv&pip/_vendor/requests/models.pyPKfXV! pip/_vendor/requests/packages.pyPKfXku!w غpip/_vendor/requests/sessions.pyPKfXIe$pip/_vendor/requests/status_codes.pyPKfXQL[` "hpip/_vendor/requests/structures.pyPKfX )_pip/_vendor/requests/utils.pyPKfXb"pip/_vendor/resolvelib/__init__.pyPKfXO:#pip/_vendor/resolvelib/providers.pyPKfXcpip/_vendor/resolvelib/py.typedPKfXG*5A#pip/_vendor/resolvelib/reporters.pyPKfX{\P#pip/_vendor/resolvelib/resolvers.pyPKfXV0c!R2pip/_vendor/resolvelib/structs.pyPKfX)8pip/_vendor/resolvelib/compat/__init__.pyPKfX.gc0a8pip/_vendor/resolvelib/compat/collections_abc.pyPKfXa9pip/_vendor/rich/__init__.pyPKfX-> !LApip/_vendor/rich/__main__.pyPKfXj ' Mpip/_vendor/rich/_cell_widths.pyPKfX.,q# .Xpip/_vendor/rich/_emoji_codes.pyPKfXy("pip/_vendor/rich/_emoji_replace.pyPKfXZՌ7P"pip/_vendor/rich/_export_format.pyPKfXIԷۛ %pip/_vendor/rich/_extension.pyPKfXpip/_vendor/rich/_fileno.pyPKfX~t %pip/_vendor/rich/_inspect.pyPKfX jpip/_vendor/rich/_log_render.pyPKfX%^pip/_vendor/rich/_loop.pyPKfX(kpip/_vendor/rich/_null_file.pyPKfXW-pip/_vendor/rich/_palettes.pyPKfXLYpip/_vendor/rich/_pick.pyPKfX5+_qpip/_vendor/rich/_ratio.pyPKfX1T_M{pip/_vendor/rich/_spinners.pyPKfXQ_pip/_vendor/rich/_stack.pyPKfX`\)pip/_vendor/rich/_timer.pyPKfX?XU$Y"Fpip/_vendor/rich/_win32_console.pyPKfXL}gpip/_vendor/rich/_windows.pyPKfX= %]pip/_vendor/rich/_windows_renderer.pyPKfX&CL }pip/_vendor/rich/_wrap.pyPKfXkEQz!pip/_vendor/rich/abc.pyPKfXcpcɨ(#pip/_vendor/rich/align.pyPKfXZO ,pip/_vendor/rich/ansi.pyPKfXC[ ~4pip/_vendor/rich/bar.pyPKfX v O*9pip/_vendor/rich/box.pyPKfXd5Cpip/_vendor/rich/cells.pyPKfXF/GJpip/_vendor/rich/color.pyPKfXiD N!]pip/_vendor/rich/color_triplet.pyPKfXLR^pip/_vendor/rich/columns.pyPKfXLiUefpip/_vendor/rich/console.pyPKfXLIWpip/_vendor/rich/constrain.pyPKfX cw~ppip/_vendor/rich/containers.pyPKfX;!qpip/_vendor/rich/control.pyPKfX"pip/_vendor/rich/default_styles.pyPKfX9Gpip/_vendor/rich/diagnose.pyPKfX E pip/_vendor/rich/emoji.pyPKfX"H!pip/_vendor/rich/errors.pyPKfXjo5pip/_vendor/rich/file_proxy.pyPKfXB pip/_vendor/rich/filesize.pyPKfXJB q%zpip/_vendor/rich/highlighter.pyPKfXM*pip/_vendor/rich/json.pyPKfX8Xȋ Ypip/_vendor/rich/jupyter.pyPKfXz 6pip/_vendor/rich/layout.pyPKfXׄ7Cpip/_vendor/rich/live.pyPKfX.R-pip/_vendor/rich/live_render.pyPKfXo~.pip/_vendor/rich/logging.pyPKfXRGO !'pip/_vendor/rich/markup.pyPKfXlo2pip/_vendor/rich/measure.pyPKfX j8pip/_vendor/rich/padding.pyPKfXs<0>pip/_vendor/rich/pager.pyPKfX8>_D ?pip/_vendor/rich/palette.pyPKfX;x )Dpip/_vendor/rich/panel.pyPKfX}%Npip/_vendor/rich/pretty.pyPKfXTZ.C[npip/_vendor/rich/progress.pyPKfX!UL  pip/_vendor/rich/progress_bar.pyPKfXk0 (,7pip/_vendor/rich/prompt.pyPKfXX9oWpip/_vendor/rich/protocol.pyPKfXʳpip/_vendor/rich/py.typedPKfX]®upip/_vendor/rich/region.pyPKfX9Opip/_vendor/rich/repr.pyPKfXimEpip/_vendor/rich/rule.pyPKfX+t wpip/_vendor/rich/scope.pyPKfX?5R7"pip/_vendor/rich/screen.pyPKfX8)/^pip/_vendor/rich/segment.pyPKfX*Xpip/_vendor/rich/spinner.pyPKfXZ:Hpip/_vendor/rich/status.pyPKfX8<ipip/_vendor/rich/style.pyPKfX Ppip/_vendor/rich/styled.pyPKfX"* pip/_vendor/rich/syntax.pyPKfXԐb'pip/_vendor/rich/table.pyPKfX:#ӿ* ">pip/_vendor/rich/terminal_theme.pyPKfX5bRd(иBpip/_vendor/rich/text.pyPKfXdkpip/_vendor/rich/theme.pyPKfXQuPGfppip/_vendor/rich/themes.pyPKfXaLOsqpip/_vendor/rich/traceback.pyPKfXS #pip/_vendor/rich/tree.pyPKfX%.pip/_vendor/tomli/__init__.pyPKfXiiXpip/_vendor/tomli/_parser.pyPKfXu1~ Fpip/_vendor/tomli/_re.pyPKfXgpip/_vendor/tomli/_types.pyPKfX+)pip/_vendor/tomli/py.typedPKfX7 "Lpip/_vendor/truststore/__init__.pyPKfXUr (pip/_vendor/truststore/_api.pyPKfXCD pip/_vendor/truststore/_macos.pyPKfX7F "pip/_vendor/truststore/_openssl.pyPKfXi\j(pip/_vendor/truststore/_ssl_constants.pyPKfXE"pip/_vendor/truststore/_windows.pyPKfXpip/_vendor/truststore/py.typedPKfXO (j Upip/_vendor/urllib3/__init__.pyPKfX?& l,#pip/_vendor/urllib3/_collections.pyPKfXD@@pip/_vendor/urllib3/_version.pyPKfXQ;FLO!npip/_vendor/urllib3/connection.pyPKfXoN*zt+]%pip/_vendor/urllib3/connectionpool.pyPKfX^I  !>pip/_vendor/urllib3/exceptions.pyPKfX(K, !Hpip/_vendor/urllib3/fields.pyPKfX~ /Spip/_vendor/urllib3/filepost.pyPKfX;fۘN"Vpip/_vendor/urllib3/poolmanager.pyPKfXY#mpip/_vendor/urllib3/request.pyPKfXP :c wvpip/_vendor/urllib3/response.pyPKfX'Xpip/_vendor/urllib3/contrib/__init__.pyPKfX*1pip/_vendor/urllib3/contrib/_appengine_environ.pyPKfX d +(pip/_vendor/urllib3/contrib/appengine.pyPKfXi7R'Mpip/_vendor/urllib3/contrib/ntlmpool.pyPKfXNZ;B(pip/_vendor/urllib3/contrib/pyopenssl.pyPKfX7t5%.pip/_vendor/urllib3/contrib/securetransport.pyPKfXR?Y$pip/_vendor/urllib3/contrib/socks.pyPKfX8pip/_vendor/urllib3/contrib/_securetransport/__init__.pyPKfX.-MD8pip/_vendor/urllib3/contrib/_securetransport/bindings.pyPKfX*Yb69;pip/_vendor/urllib3/contrib/_securetransport/low_level.pyPKfX(pip/_vendor/urllib3/packages/__init__.pyPKfX\&!i#3pip/_vendor/urllib3/packages/six.pyPKfX25pip/_vendor/urllib3/packages/backports/__init__.pyPKfX޸cH25pip/_vendor/urllib3/packages/backports/makefile.pyPKfX +v:8pip/_vendor/urllib3/packages/backports/weakref_finalize.pyPKfX抙$g?pip/_vendor/urllib3/util/__init__.pyPKfX%&Apip/_vendor/urllib3/util/connection.pyPKfX \^E!_Ipip/_vendor/urllib3/util/proxy.pyPKfXN!Kpip/_vendor/urllib3/util/queue.pyPKfX7m#7Mpip/_vendor/urllib3/util/request.pyPKfX6(մ` $#Spip/_vendor/urllib3/util/response.pyPKfXcU!Xpip/_vendor/urllib3/util/retry.pyPKfXǧC ppip/_vendor/urllib3/util/ssl_.pyPKfX?q~.pip/_vendor/urllib3/util/ssl_match_hostname.pyPKfX(!pip/_vendor/urllib3/util/ssltransport.pyPKfX3 '#fpip/_vendor/urllib3/util/timeout.pyPKfX+^7pip/_vendor/urllib3/util/url.pyPKfXVVտ pip/_vendor/urllib3/util/wait.pyPKiXHN:t*޿pip-24.2.dist-info/AUTHORS.txtPKiXV+Epip-24.2.dist-info/LICENSE.txtPKiX=(zpip-24.2.dist-info/METADATAPKiXWvX"\[pip-24.2.dist-info/WHEELPKiXb-Yt㕉<<3 J_֢`:u&s>9H/ض* PZx q+-ta.tw{ws|hE\6Y.Wޤf"d0f]ER4d"Nf‚?=yki~ٖ^Z,B@ ^;j0{(+ώ:.pxͮUׄs[>~q%j@AAHR0x~Cxp<'¢ܔLoeDuW xigP郯'UoMd)D? =>kd 'O"NE,}ݐͱ#DPc1hQQwȺ5 $'dv'˙"W//_zv~dA-;i ˱[p Rÿ,NV8$4IjKPӛ8i_夓Rpnmjb\Q5;m^#i}Xs*-K]2,0:3*# O7 ќRKi*v;67ViHX+zm{ǵДTBCIH7amxxv85K\F  ^ʪmN )dlb=<,l1RJٜ)&'_Sw@ϷJ=آp(}9t}u>ՀA$TUہ[a9t| #)3-wdlm gv<:g:eeZJz|_c >9^uM)mT[쳅D;,ɑ>D9}q/:F~oI;:aH͆btq'͘Vdꮐmk)EHgMVc n}hڡd.ɝHl)>Q8%QŋGd#1>`M/iTblD)&>+/嚟9HWwᇨ#D;M)kzW @-O*dǛe= PKRPY .,_distutils_hack/override.py-/*PO,.)-)HLVKɏ/K-*LIPKRPYc7pkg_resources/__init__.pyzǑ8?b$p$eYbK$NC`HN3)Dѣ0ieUhrEϲU6N&;|uYh0E5[sV&M~hRV {OBgQ3Ϡ xe?aL` 9a"z8a8*,3Ύx(??vD?=-7E՛Y6gg=/+}W9>[be—^YT^~jf4^Tr%;UT73ؑAvhqR kI SMV|N,-,x<~\%ۘCLArz==_X3j 7w4rXZgQp Uv. = l ?iULUml_(Y#!␊ˠ%>pj >?nqE/9":+EyC-zup㗯$ɛzrĜ,2 , iP8H}z 8_1#/[*Mq^DĝY/copOفAҬiG e\Ӊ0J6E>u%x ZTP1k<jă.QT`p_oVys ?J^ꗵZ>m|GgfKcڗt6^"`7gA@9'qy\Vf#mS8#<#lzZ{< ' z59n~)11Q2AoNs8?lo'QrLࠧN j>EwhO͑'z@>;c ))pr{6GtshϜڷwƇ땰#Hto".Xwd~K`ǰW>8g==5oيG㩁R,}" /GQ N F0z2I{ gCi/t='fQ9+p %7\uB!zP-sL-`TR"y$#Rnk@#O^_V 1 ѐqxX h5pymgUޔY,!q97] /M߿)LaR3`Fzzvv56@D;cx@[xcՉSx6ϓ,yµ7[Q"~&{_?Py;|$އc1[ C2R̾9Zy1o ,F^`6ՀRІXH'W8‹;R?y\./l8`>Z' i_],@/ Kk`,7mܘWfˆ{Y:z9CF^u.uuF?= G̳,Kddq`u!c#:܆&ld1 ]X/h'y|c$qEcdӽv\ hkgݘ(_Z$3[O& x$Prlj!9f:6ȷUY[rҒ=%(@(Ûļ+M8c+ aub7麆;J|Z蜗MbE-NC ٴ]ݐEæ,VMkLj 6V$a8ӪA& l]5x#%J`}!Hq3BUdbɘ:Sg=ȖQYk~Eؑ$LoAo6~==Ol63 )/AlU^#}yQ^hyXags\ ͉v0z9b_'Hg%p7;RQP :<*y`Nph77-T-)>=)UK ϩOjYѴZ(A)fc_sfQ.~Ʊ3plZ $wIUO =ܒ +C~;~~ыz?oxcnҳZ 9{8 %V:aOUuwG2#T9xn m|4/Pvxqi\mBx9b/y ?=g 'F0s2~s|7V UqwܫFһ\7juՙ"ZnzHU97g,{uV6yO ;`t4!veMN,_UN7$hV&@֮rhbLn4B%MTOȍJ^!Pk L0AQEIz_r>1s9A%XXR:c9ߵ{ix4@u*7~p?xaGXv1[= Ov45-qw00H@V/$ᡃ'  !Al?Nc:g k*s4s =m#3L_ph|Cm (zBʮl09?v7 ;3Ɍ^,WGW=w聳ȁh'J}S.NMs[nt!ݳIn}o$9NO ^ZOn2yCwc/-G=dupU7x{o EƲKqm^8gݞ}$l:XЕ5>H8;ңM@$'y=O(Xo99@0Jg'a1㿎_B}нkczhَ;JOv"w79! oD gc% ɕYפy]qVgѳ_ucy&bYJa[YBԨ?o钆u0\t~鷴KEiiX_7`c2d}_x@}h'!S>J4XZVO/>~O e Kͥy g(1.f$uO,SOl_'Z]2 eJV;Z۔zogoSgo>M &ר9TzL?ff <:EJzSY^vj[~%{M Xџ9.~^yYtf@sSp^Ud[en|7>瀱9 <7oa50CY3AU;"Wn-~{ҳS=rwX- oQ9bk7_gtwB}[_A H/<%BXZs@'<$'|.j$"![!AȬ r%Dky"1 MIdB0YE 4MeNaښ{zVQ=J.KMk'"8CA*3nsoa7 rpChrEGI۹ݏFP9@iƊ~"9cMkAAC 6d1ʫbV }Jr># a^2+Kn6DF0a| Z Fs̿|;c!{'dʤ0 ;6U$~94} Sc50~Pv^FH=93ꗲd?duι]D.dIG7dHtkE1j0pDELJ6U7xd39bo$O8?74ȓĎĢcNNۍ6|b)پxBg>/Wxu$TlfF.x$013|ݴbI;.="4ȥ c@V5PŲŬll{1^2؇oMښ\nerKgXi&Ĭ Lj_P€dQ˜¼a6Apzc<',뽓,! R`3"ͬōghXo'oY*hiHϿVpXAޏKo-:_DBCpt04/ F烯e6Vqr1G @qD.G,bC+R:C@4qܐ;07p\.rBMr\:f-d2Mĉט,5ڜc0=K׎O&xiu'_(q8ƅA7Tc TIUQ |Fd!{Ĩm/2YBhəJ8+C*\Yj[/MHW_")]<~ yDRų YB Tz; F'HiK"`GG| HTc#ւG7'S>0p{M>gw-@01,Ju9ۧ$܎ܱ*i-͚* ;s#}0oF(ٛP\0 wQK+DA~@+2Hn w%6t[^o6aETsb"cqQxYQԖ;0 Y5(׾ $Mʠ֘_O[JI!j'\*kS =3L%[(ACn/O0 K:7tUՕN+1 jJl1HhhSvR$=/pƂ5f2єȯQ ?R&Z@GB70Ln2QtC쵤|$:FVBfL B5Q9ll`CH3nY8+jTg֌bR%CO4*h+}M-)Y(e7Q;iXشi=qx^dqb6/|faF63:}Q.pY!r]s]L:{=ܜ\id3lilNxΩ.npA_( S5 KKB oÓ'{ܛ"q+% 9+y,;\@7+ ڸеgD5")&nQTf>3/(_$au 6O[RRӄ/ä9u~em^d%]kHoKE ؓo4 Qw2#= _$bFR"[vnŘ%W Ɓe6%l [pcm'ŻON8t9bib\ E.Vqd RLDrP(ʞk i$#U(D=UVǹD*= ۘ#ޣ]޺iӾ&D~kƫN6;xq׉ZI^f޴OFvxY-NCJγd*Igٟ8.apByzW=[ ,rZ@ ]Z~</[z*S*b!#ZD^=Ü8UO?E7\[ zwEPD|nF-xfș|hM~~]I>~Nda$:I+k];au}8/Κ6~лH^AC872@ǬgH }3ﳢy7]?iQKd(~W O+ ͞ [lqMM=VFQ\nKN)nWehLSXhٸO@XODt{ڱ ng= Srnt j|sUO_ ocb3-Zg);7 `VO^$–ߤ*$䲒N$ ؤ\--Ʉ+dNTmYy%h^@R`²6m1d0p6AFsa2q!Nu[b=jT# W.uPjJJx=yx.R֥Sb7q;1ɹ5P}x$ 7ֵھf VixfT3Z.ҳTid[Z}vGɶT#4$Ch&Jomv;;v6E:|\@9cO9Fߏ4(}8Vs"EXzi׎xnAXI\~~N ~xN懼q__̾F.ɭ <+TT%_?RoqIԧs}_*N9Z,#{LRW`Ks,@Z̖eq“zŖ<  ߣ[Jigob0U,&{r^B^wpD+N'.$G)?g&hLƵ~k}jթAD2XKɛ4 "1۪W^^\ .ַն΄@a! [Dސá{ PE ? C▱EajM;-h a ~ȩ[a֦Z[p.2yă4o^մ0),M%[!P{?Z e,.Ңnc8?D@%M@(H+\gQVR Bmد|nfWQeIaTcS,6s3[-=r3fh9j&{.hb*ߵ&.cdžȊ֘au䓔WrQ]iu XB~>pat\ip)OĎ 12Ih' [vYtiYZWd#hDʦDw~6Vם]M5nb 0dn[2GLOɘ^{'Z i>feުCmukݓrqyeSP""5ohB8ca  $!N'c;$/(:F3#lj4 kw)- qHL)`g{Et-eD[.˾$msn_  RV::̘E%:}Xڇ)\N>U8¹pރj+TԿ ;͹+@5i<qwO牫w8ђ(O+^?x QR@36ϣ1`ɔPtJN[x"d'%(<nz`i\?3RLM%4ŇdrBd௣||pj0 }FJHb4C :;ZGɕh })\8)#Qo0-5hՁ|;Ϲm)Sw!dk&x[hњVh.yP%zDuҺ`u lL?^:qRʤI\$z™}os}yzC%Gwծ Q^RCi#јAvewj&^@9[iB"}6^jZe8AS!,.17;uᎄ [LՎjestu>vnzW_<% >X$Rқ}S|+A'-G"-R9o"mTu-xԘZ6n# KLFx \̯s_}jzrF6h(dи38ӦbDeYrR(Rj6\Z,Q-njrLpᓊ-~XI!,`hlUotT$bﱽqI^p=]%!D%'ܦ a<~חٲAGo5K"|*j$.WT2+/$c03ʨO/_v?z: Q+V]:I; aΑ,Vo),Q:e?5 Pa*$~bI"/QugʑySɦ:0z̡A7J 9Q UVL hVK&=`QFjlc.P:bznvA '':Ysx]6y>M*|Q_hONu'皈y RiXtxhȄ# ThАSs$Gڍm}֏|e^LKFOuYYaITTj>f(/5 p iS&׍R<*7nŃ[s,Ov?oiZ;WWUnKUІ J68A@ >`捺(nwO´q˼*h)[{NI} G3+Rgqt0:DH83+kSpxq i6~8ޢtStW5ި'觗o}u#i\\~iYԬgI5\hNyɇr0ܗ#/ {2xOB0 VO A*"tz?tD }"#B0* SaDb-4)1UgdMp$өXH,_(t$O qK& qS4>&>& 6u1|!źr}LQY]ژlU^pWKtfSu513*Ṿa6Y #߰codץm &yŅȩtE)fBIz3dA#N:fͽڜVvta|(\ȦHѦ\m:2(xyٕn[}/$ 3Xo#y\{\>xqz #;E|`% Dv-HxGLG#Tc6nK7VXSD$# G"yi?"sN/l^<4m$IjշIA(: 玾Ք,̵aybf|mzDOs.z%smfL&Gc4<EBs1ysu%؁i Qd" {6䴭Y>W ׵B^Ç,WR:3~lWg67" 9^TX0`# vJPHu\k,@X3\m-:Gݎ:`,x ;J;Owe@4Nt3LYdY@ o8rK)5 fWưm91ˠ7n\{kcߔ`Ѥo$~R$LKF@t0Nz"PTnP+Ec9y?8-s{m;;+ Xyr<7i.O:O#"`JM]Rsur:d+Y {⋃Dmp(_҂\oMqa..DDNK`px:>I|:cEyiZ/`Nk/KNfϢO{M/#pL 1v&Oy@/A_!e {s1#hYCCL"KنN5gª.RdSk>#E]03{(R[?~Y~aa߁_޳;/ܽq /ï"ȀT |NՑǜRTZm$G$?wo;zǢh1tXQK/osǓָϖLH\t chh{39`.ŕIUE&;k/oْEm gkCNə|9!܄^o:Szҥ?D p>`$o縗/teXd@6+O;M%= 3|d<[y:/J8$e1g`#&q"͈ 3ቒ'Ge6H;3Va2Q=H^-sy6F< sqtMqI~zECn3Dn^RydPǵ ~W , 3K,朆/. E-lss|G`Wմx$˴?+bIHH}pZ.tXZl w7ah18ܞ}/[}[l1;/unxKKc6gr$i@Eq#Ď-vkxn2y#Ga#/h0'me2QaA^v⎜{pX2^o2Mɱn902JuȊuDeguqڠ^Uβ:][PI~~b %MpNi`̱b/#΋;_4𡬸\ѫ4< }Gڛ5+eWWG/g4)9r/s/=)LRld0ޯYyŪIM3ĺFH=5IO['P04(uRB>ۓ+1ϗYEb{+fK6ZH+z#dnы_S#=Ѝ :8b.&[Z Fͱ~~J銪%5r(! b9W$b:_ޠ&$*Ѫi]c0TVĢA[vOK) TB)C6%I\ \ ̻%δ|qz8V ۅuA*^"[f)J;EIR:.&clWmT `ao}ř ׬Y䮙<Ƨƃ-î |.cB1q`tx5ezLu12a=NdHs5{ȴb&zSѪPjJG ֡w8rH7NCmӦZ'ղIC)[rr I֎2&bjFi }*@&_Ϫ-u0kjc֗~VHsvjcWAVj\> O_p|՛|5{0XNuvA.Eyճ$<)p;?`y1҄b0;E2. {=UVW%9-Fڙrܝ'ƙ},ѩSTpr8\ií+L{G9PB2r.&dkkxBB x QI*fWGkR0{_ʱr~G8Gcu:9}@ub8(cIKNEjP\;W9g[QVrDm6:8l#y#R1vA%W"`+2LX*s]$7Q%T]SXTur TL{ F,7=Ť0E-/U_P5V;׏|_aON ,eO3[)ZE g&|^-)Cx#H{aj>* a{35@FIL:-^^uORQ7Gn(,Pn> `Sj{p_njJ%nŔs+pSTt:kP- 'by?Uݱ͟B  "¶yK"^ɞcW!p0m 6Eu01˟QA6=" 0 ms 0bgs1mbi4SwyEu;H >t"xei0 ()c ,<{,?efcvߜРN@0H$' vP)7>xLBo ~t/d2LD'PDȎk sEl5"'\iNF6wI25G|$6d9fQE#+Ie*U.&?G8ŝӕ2`FHOVB)ԍ<6Ƒ DH%[QOڥ+D `^SO E.y׏W7&޲<(4~`SKaz?/ w]A(Vk 7Ϊu"qǗXqrRAZ f_ƒ%qSϢY {ӛysẂ%FAu;T^"A"WCj2[M7C؈ L}NYSJ8ToȠCt@{ :Ϛa)Viѕ}F\Eڥ}_uc!L*$NT/y{ GpG{ G?#J,I@Nt߯2K)F!h.tFeFTQ¥:LZϒ_IxSgŮp}Eњh6= ohs׳b<Ъ`naAkL4f[5]{0@AniLŮA88 3??IdL:֑104X VӶwv~8 aTe R8EO[9QQ|;*3aXӷ!ܻSb3l4 G/$O<_ =G㑦51aemR811[ݿc,Vygڠ=xWi@:ޮ8C ȅ`;ΩzOtB_T a/.-~M(b&i"b,Xr "x5% n`0ChѪ; ݶ$2YX(b cK`mZ1Vym=`ҋc8sõ75aTK-~79)Nf(l2^ՠג+U RL(u]V&\i@/2 G.8 &d(9 몘tE4.]ӎ8p,Tշ:Xr y.tSP*A0=Z,o}AȻ( wH΅w"k,[mձEm4ZXH4.rlH}2:1ݢmqqԾ2dQFzuXږHl@'?^dRDz=l0EC`YhyaeHtp$JyRDu|uTjC"P\`R@ ߒ#අԱS] R"odc{REH)b[ы Y,ikFg[1jc҉1íS)&qruT .dÔH:ѩЊwT+}nۉTeC)'@օ=oO=(暱,@ް-Pe5<sHsIB2[S'Hl+l5a4UGwIuNy&`eƽMtZP0~H)lQ՞4g2JI:f9#ӪJVvz}#c?wYJ^j#J<ϲ("SU_e5G~xo|U.Swc&`PA(u^7JѢSۖ\ަlxnZmIJi`ktF>0o=.LKGu Kj@vPe^fבUnJ:Iu/gݵ(W a-iZhC P|>?'aG -oHn'jF.ww`P޺#XiMg RjX{oItٳ,/Vؚ%`CNŎ$F}x(hg%6IFO; zh o{=3RFG>CgoL)H0! 1HbOZ8x~2CFt7":hsEJϩvUiۘ6&q $F-z٨`o !Od8 4kx'qPOKOTTwhکys2c%yuSU\jtJ\F Bz'%G:wW3-\ u,'CnQi!1*.7!`3)g< T `|$0+|m}\,i6vwe9-07@ߔ\պodb,Wn&vkd.ѵ[sAIvKRdX7=zyʐSZA1HEےhϪ -sX,tdAh٣^P5wx-uE mR;]/i&/K*nlR+3hhjwW{۪ͻGJZކvU~8_SҿG{Io~P6K gGL!R(VTR5ֿ0/Ⱦ~2b]k q–NԉiQ 8!L9n.n LCkoОbħ>O}*:/_%?Ozbvz3K ͇rդXٞ)egu;& _@'Y+LiS z#˺:,_і+ѷtLb>9t({A:3Lm*tE>u(~Kn$oe7I_tG/ʹ\eU>ZlGTywɭoټ>=v ~#riq[6t;A ' |]N8 oaΎWb{m`7Xٟcyv(g!@N~=#%(c!yoL>]ʝ+iɞ=ڃHt@x:ج섶 `zf}9h=^ A*]|3l xUlF*3Dnʦ2CU'?|wkT:rغm >0t5y)̚ :˓;}8TDSDe,aO6jI<|ׇYѷ/^:|!82Cc@K6=׹xŠ 3a,ŝxZU?׍<hÒD?4PДB6ײ9eZqjNigy[}ޑTO`WinFBз!6A ޴é!bNgԚ;' cqu \6!c4pg9eyv4z(hڒ0(EqLE b2$hW ^.ʤօ97k_b[{ͅ]]Y}{i\< ~}\wDȔa茢+6;9 7ѐ̦soPPZbQ٘ S_y|Al uf8)ܸP=qQJ6 HMX?W&[on]yeI ?$O$@odlgv'Mĥ{ ~K<3'DT!E:kj/>CN%C%V+ :ٔɲ{#$%&%6f_QP}xdnMu>[O3wOa4vڳr{lh )鼈ȣ=8 )CyUV7!)EXhjp0eB3K%/6_[#52\@3une>fiH;^ ;`޸7p77M\Pg d79TK)ڹbQ;N2U\(8ak^k)]QLM6W2ӜOJGePL)-^-AP^v=r;DQ@zkpl6~L8~f<諯>j<;eۛga}[!1m_E|{>x{J-oO, TbB5 c Tۖg6ޡjlU( O37{5~n[oPrBhx"{=Ks%1FRSjL->p?)<`y #tN&ALdn(WQ&}J$h[Z?<_a EuAE%:ʘȇ4XUFPsU6,'sS3.􅧍_ޙ NuQ0WEe@:LЍ%X-msZ8g .HEZ?~ՇC~qc*h(˄D!(CU'aF8>?C) ޸ĐnK־\ˍF=0B@ YVp?t ez {8I. L,k L94:6Kl?1(\D%~6"+G-!Dhq4X2#U#/I sQMЋ Q)@J<X\LAcK,Q -􎡭eؕ]j`8hRE35]sG&ڢߎ)ϕN{w#еcA~;s+@,7x㿎_RM`;<U1 ӷDjRZq9Y?U:g2xLt` 5h_F/o` 7҅m^̯U",t$J&AJxEM%S*c<=监<%jHqJS4X&(524Rk>J:N--%5 < y >2DA9t(d$2~/4 2zd[2uZ'2&{}v ~ǁrwaL4XNWIuW` \r _c_n@s؁jێRᘎ񸕵Ⱥa{k-T ^Ŧxee SNzl`MKHF+^ղoxJ *qԖdŊ5GraeF2I2(<qvvmh(I8>7F, L~wR} 2oK2}bo#i^gp4vLDEEvkr%*,i\MQ=p: O޷0a6 L=QJ<gj nRiҞ~u{6?$ﱻ=1뺼 bkEct[$7uMEu2q] u]_ T~jpbC}F\攏'+g`J?xY nn-E_|0ҵ$Vsy< >bk{j-+[`(*8`W"bߵ43O(]Er3E1ƹm -B03f+o]YI٘<ؖ4+a3p= xwA ʅlWf?!rぱjs̚ Sov”b%a5M29*BχqPdKaH1ksV̛m/ ~\`yIZ: XAiF}ųJ۩5}؟DS0k[[eP7V_gh3oLc&8Oш1| kZtmnOeY [๾X 6vw‘_i_=_|Bq `8;W#l '/ld| wfl>.ԇ|; &? we7NjU:U?[RڕW3W v"Y2dURF trrY:bEL5 Sqbv`\"Z }+x xrl!g1y RaAS5BLeШiM{wmK>L*18*'ordi 5KXi>1nr|ϱbiojgYh7>ƵEQ&XX9%jY^9șs!ry x+ꮶmT(ʲ6UGmIhXJ$59 H4#`Rw_{g;޳~H_6j\?0VZo"f̀h(+-!Dhz~ʦ** 8rAx%,kpmBT|u%7z2_$Ĉj(-5<)w 9nLK=$ /DBWǞ0{ɓ9X*79u瞛- >pBNd jc2zH _nHV 4n֯S5E1ګj,Ni]B<Ko.@mEW'*噞 g)zLJWo5vxbl<S9)|P?S  |A.WLiN"GD$O=^17\˝*njPn, 9 ~F}P m[vv%Pq٣6.q0jlO0M1W.wKQOH Vyur3؆w.1} LYb} OF;M.0L6"z(cXp6A`fAq8]<£]𷆺tADIbP"$]F W褆g, OkH &\9j.f?0k"3'D'V~qVߟ^];:My|>.~?]|y[kԡ(gס2>aཡ㻵n yy 1T ~awtKmK_-3ת@`g!aJ,n;sP7h3)/YYz<}G_FnEgΉ 6+WȯS:U Mk8:;ho]ۤ3r3غ ̸$CiM15DBp;_]pOk|.!TUq#a+aK4)δH55kZ\>q[T8J2amHvrcHI#W_[kܮ'@|N#x4۵fOB E(2N@: &|'PT- R/CQ.ToA@@:`ҥD<rX*[F},jDjK}MpEfa <@P.eEvq@~b$!ygZuH 2_pyo8VTc*7E2u0{ܝS7E6Zu"tN L2m1NcR05z62~wr~|黫ӓOL j4QZVsG)4e-KZgk¢4=r,1_]T8e&S1V4[F.z~y.]cԷ_$*9F7PgUO]w +T_f~b~W4l49|ˌ&ˌ]Z՝FKs;pq@qDk%)H9P4081䐆C7BN齭NTR۸3ث#$.G*u>a^=+Ӧ70 C =6с]oxQ w)̞8Fc`>7`]8:kɳHM&@R![AFc)6 #/U47L#e~ ~4+rI)Qz.~")W`HAzT4=%QzLZہztzdsZP#9߉#Npy4{嚮hDDЫh2}I}A9~$Y3tt'em=7Oݍz"j-im`LN.&fpc Bhy>sD@㮄n`UQ5]z ]\p1I~Kr<* ZA.Aq^9hӏgWCp~ZB)-ޱCTG6Ҁeˌﲪ0p濃Gf^/tPu_ާ4&uy|n* sYk{)sGΈ{Kܻrt`%n-RN͜!ߗ4p&'2,` p'S>u#OzBq5-RW\ (,Sb"#ӫ.YvLl猃lH1p45z$DŒiSIo׭]J8IkPh"6PM\V/DG!E)mhgH#i`~/HkoIRag̐3oߑO;%jNbXHջ[D8,ois&),33`PT* nv"$U4+vUٻ]fYDc\aDڕ*E'$QLr:2ˢ<ۛ] Fyo+sjb5}/rMb7CR<a}ŵ0 <VP?\1ƘoZmq1ɭ*5\ ˪ e]z2C\P{_3G셗ŧss?6 #M&MT5pa΀SEva2eKk%ۙs\*G#x.,x(3.n'9Z ,VI!f! ZddX@B%H(>꺘vېv)%&GD* ve l'vKB@}Їv F4|߅ld LmZ#F# l^''AD\~GYXho>7؋~|i,Hܴ0~ KJpc&rF`kBL9\.^L O˗D.U-еp6dl-SoYFDlyw]!ӧZ$8IxU56%LOtTD2H4)3΄.dRYRA+]>3U647$@<e1 k ~yF7樉ŋSd"%*o)! \&ߢKढ]Qt#Q&īyeƏȦi!J1-ob w"@Զx-7O &rĊȴ,iܳki5Q"TSq_y1=,,V.rp ]!Hz#!"Xj|\`DEV-_(N}:DrPFoyc|qkZ'+va^ B`U 7 k%f`J|w:&0pZcmeAؒ('"q餼JW:h2^`49+F _%pL4VPW{ĉdf@4tn~AP` wE%An-lO4~6cݔQcy9+'jddFg8nޒ$H>TW fo${؎b:,PKRPYkI)31pkg_resources/api_tests.txtZms_qA&CіzI6i;ǥNQ!8@I{;(ew{,o./E+}V8KSWfQe?Q#?QBXh+HM ++ꥬEJYUXr%iM,j6Di4Bz*UYY <\UiZ؍MDyu9WT݊EeVGPnyt RcD\;)f$><40XkrJ"N"d/D fy] Qʭ`ODmDcU}~b֗NS˺.=zn45G֬ަ_*iܭEX/Hq]ƺ6 Tԕ%0[Pi ;r4jvC"{n1oO}4]j%-.EˏUd ʎ\ִ-)"͛ wReCI*w;̪yV zC[R_ }jՑ.Vn%(jKl~fG;)"C|إ&T Z1u{/ڈO&Ӟ[ޑֱDDKq/1gl<jxh j=<$ږ#U;ͷqVۻ#>pqܷEfL8}b;ObKz,7BO(3JZ+:mQfEџTCTrqL2ͯu*R^ 4./ I$-j/ _6-c xRtW^Ӄ*+Vr_UeD DXظ4بh@'A( @k B?^Z:ATMh ~ /DK=(77 "t*-aB6$bيCސiJ {)w,a%+i8I :6[%Li CB0 EdJRMbd݀7To&g 5`9L$Pi; }*Xx.ʦ!?MuErRus;G24띕9l$DRVF=5E-P B ?7eri ̣ O[3"\T8{ŀe:a/I@@׊\im+."Pc-!gcC42MA]BGu0~[ȑG7xi'pkV3D4im` ,؆NWNa$.PЈqPdG!*ϧC3!nnU= +06P-KSjik V &Ϩ*TUԒ>:5 ]ېemvl^K95E ϧ'q$fkY*Aա ١oa9/O霁|9 է9w]!am,"ԳgvOE4bFiXg{@ uGΈsr;>7 iQUXh7{FZR>7؇_J}h~ˮVLmPgX"۰v~2gg2U DͳީpQ-ꆚ?-A^qn~c< WVR@Z!^xȃ*:;>3vTͅE]J-7Z Ehv٬)u4`Ою4Y)͕ʸs )D݀6wU=Ű8\siH^ҁB Uy Q@]M=wxwn|bc񉸅;Sy{vxm 1'{eq|*L6Q&@kr+0(~nv͗΄8;iAx45U[u# }g nGBt`F9Vx79g}`tz>wt2R\Z,KS$ѐW[1'OA E{L jw-$lvhx3Zݾ'/XG,=fhMaeno3$m8Xt$&z }#K8nT[Q5Ԛg62Ob˪dXeix+swgQD5ʍV&#, ɷ%J߿rȺ@Th|%r[ր(_k +J(o!>ξT S$N9E{;b@ҲیP5FP؛ӣLG݂ӚWx'K*;]Pvڔ~L`~+r"1 %Op~JVx uo70K`ߛm3ڔG9]䦌K{GEWAjnO->k'Y"O\Lֲ (J<e9Dco&0杜~qT%(U>~7#b?N.`b>dbH8oby>H!{D⛟wHKcC|伯d30 ]o_^}}2|]igMx@Ѓg}n4hgnVѓPKRPYpkg_resources/py.typedPKRPYpkg_resources/tests/__init__.pyPKRPY?8>.pkg_resources/tests/test_find_distributions.pySM0WC wJT!6ƓԱ-YmmFeŅl{oDuaGYmNĝVg2rq!N}=cՇoo[6Cmy4r^Nx4B&Ec"GeV#Q&c@ls=o·T>ѥ7e1ZvT8E Ķ#:@XG tAKG,*ImgxIeIN)2vz*4@: |9Yh": ^! # ڸZemI[l mFwX'^{N(i g~SxGvKW`4 8R\p5Xr׋u{#^ǻ 9ߨ 5w &lyuk:s>.sS?qOV2PKRPYJ/t6pkg_resources/tests/test_integration_zope_interface.pyTQk0~/ 8ۺ { 1Tύ[Ir$'MҤM`[>ݝLGp h8QؐLoKCgqCSK(A?ϩ4c37].{!5$_/Z`&>5sibW\xUj:)tqlPKRPY$#pkg_resources/tests/test_markers.pye 0 {"xRsŇ^ʖneZtۻ;9/b2;f .H !vFi4a:[0`hBB<*Qp762y6RPc]кX9I] [ѣگ#Hn_*`37wtIPKRPY:QUu;)pkg_resources/tests/test_pkg_resources.py[]~S,])k&-9Q%rTB,`[IN\i9lLkv,C?t<˘صM׳>ESˣ#l5@.bƾi+!Jo avMm-מڵȷB\C-k+\{ϫMq gzg'V8a͸ivy]`>o6n-QQR] G J(&%95'Lh{iڑ\c-F`⿈U\wZy%N3%[#juhG8=:}Ovz|=žuIX70P(35ЯIMi)y?Jz5@ %˒ cc9=B525G/(z-nQ Mxϗ_0\Di`ZODa[SQ7J}#0PE!`'@=]ӛN2b#D[P*G~L}5Rt 0?@Z~lo\V^EH_>-o[^PR& FԶ]bf)08oL+?la՞zwesSO-vLa4ύ)xta܆IhKƎ!vbϙM/:o_ )EyAM%yqoTVٺ9K #zn-/z^f]R\Hlsp hmM8s\CLlq>51 ÑӇY44)nj#r7w[؎99{r{sV<{TgC;gdEi5m#N ےfJ0Tc Z~*?tSd]^ ص]٫/s <$ `ES L_ސcS B:x OF%z>Ղ,ԿDHeXh\&tg!8f`9F!Vf}g?V =DIz% 6}"[q30FVU Vy>FQD6@MEƀ5Y9~b} ~Ƌ|upI%Ԙu +Dq\TRn!=A.ftj !/A9%c^ˡA>J9@|@FxaH bb="=%t`:Ә%P{6n8jt2m%X9~~qrv~Iw9s7t[4pK^%wMSi0!S8}̲&Oyqԫ5v-Fg%ljU=<^y 5\ ‰83M @5M%m#SfFX{ˆ u͝Hoc`WbC@WHsxBs;, ^\p 0ݣ?1 gۣwd*ڹƊ/3TJ}:>U(:G X09\ 9n^|)E5˔ e߃%`̟@x'έJf/ Nf@@A`U8썓%՟&O=}tNY@M+17ae# W#p,ܼq#&+U7ϑU4杆k[dX=pIafw0dCI gF$_VlO|1@BfM&U(r (+t0o-*}>ok>} [- y= !g'pxOңk ly%OrYa77`1,<g[,ħj gj0_^5{t˟`iIBcExD=(DZ+H!(Z++ g )9(>V@hQȺ_|/1VJVT8:,ȣu,FiҺC z/ATq3J)U-ߵ"0jd?BqFJM"kf &ĚO+'VUpu@CB9uz(Iâ_Ӷ o6&F~_~h#hqG^ er4gs2< +:8?#?9ys&Ҍ*04IeS/g۾ob@+th/ )\>zg3`qwjS)nكp4}y-WɌmy^dZp5I s=.a%}X01IEϬ緘fV<28~Tgsמ {/C0әp}0* ȬxKn#9qVS?_򢑴@DU*5Ī,ߘOPC<M'6q̝x 'mpVs.8W7S N=< Gm nXی#xcu] xU R[p۳ -Sj7k[mmZ6nkʡMLNrz~<>qcKYbaHܻsD۳ф?|yκ|>l 3!pW\auV9'S8 %3^C祝ҜܳrƩ:[8JɃԙ8sdz2u41:2~ygֲ@,6K;QV9 \&jtwu/\OgF.Z[BW} ge[i5e%ү_7쎶͎ JwԊNh~bъH+@+LRQ];)vۆ̩E0SJ]N7;h8q#4 N,6n- LxFwzZ[؉ 2.Y?U wkƃUft`‹Kv # f-\3==R&j/\TMo{ih$.>:zF@1,h&zA=!,N#H`O3eF'9i:} vzS%:fǧOL %RJb"/hVa?A|b9:T^v9߿7P׸`({'A`w#Ž/ PŁFG-.OLV4g)2dE\,1ZEw`S!1vY)_jZW w||j;|0')I\[lwJb g&v*r\#O xt 6+ŵbN|'ɏ ^?gs[^.P@%S D=v}?  D՛7aiAI@D(* ]*;4MBl];$=xF=^)z 8l8v;'njTȵMa0LHtGVߣPKRPY{]z%pkg_resources/tests/test_resources.py=k6W`形8]O"WMqe5*$B#P$MR3I_w z2Iխ?)ht7u%Jig|VOYẹ-*m)lk @"ZF"/|e|s=En( F1Ml7e&}z&)4JJib-4YB1oI`Dx^-|U%|-@Vߖ4aY. Q籐@UY(PoE".NXQ~CgU%BLNgac8%5o&ʢeIZ✙eޕH#q6 =`$ 6p.x':Jl`B`5$Xo+٣Jr@p*q5[9yGWQ7uM+UF 5C"ڜ'ע{ѐ~kQR6gg,*J*bn:`g]9 kޯfw<jZFR4Җ=L`)_ p/7=dRY`*Iw6RfSL/ӭDŽR5z-ZzZ**Qw9z!V> ;dAJ71 /+0xO-_.1@e^Zt8$D0o-7.I (7BQj3 [!G8K5V4z2պ%ktЧdJ3pvo3]7_ꜚD1C +:vVVATrK "5]_Q h}7?nRP HX`^WN Ki\xנQD3dXO >W0M_{|0mvu4]^%iv݃8^[85ah֛X$XmGf5&j*#RG{#̯0|"UXuI[3G4d*D(C1좥 On]<w]-NnPcs(ʱ7.y/)6psmEj8~hTV&xyQ\wps2-o݋>=`-`01ØyK=V:;̊k,HrxPGEhxj-g9*kvRּK5tl1WI.EbeAgMgɋrqلgL\{n. wVKl;~Qt:iUBL#l>+o8GQsLnqxpM%O^)rL(5Y^2 gFiO78-V/梬Z RRXP5T}AY}ӗPr<Z_<c+dQڶa U6 ӃZi;P _,j/ ,0(@iJ4ĢemS(r~颂(vK:mO Mݢ_3~Iǀ:*߽۴޴luukmf0j[F] åVrRpLKWD|1V}>β ~iUk~!%?^Qr^!E~Py>xUM.h*i_/i|pFqrSn9WAǑVWuF=gjfFsq{iޘdlD&tTcomSpb^~X\r[E)aٿvaZ~F_P .Q;ձ?ENS7yZ˗&6<ӃHj0b3_l&O;-w#T'-P䴆V4t5~V1~8lWU{j*nƹdK)nK2Zrw\Ɛ~d*5MB{!7 ]c U;E?14@Гy:]녋 D.WQQעfݪ =SXmmo&Fе G1_;DXIҔ ۢ&R$}) IN n"Q5t3RaJ?M!iq uUL:i:;$f5SW A|p3U.[ ˭x}Lת,XΔW X)3f5Ι8f)ff&y?V4$'j7xa'{ ;4ptnȃvbylQC+L\F<Wm?.{; 4GQVJ/psSQr@ Bs=BS=F2@A6sMw^SlM+0%KҢ𦫇4 H#V mm-Q*k$",y^Db?&>;ZeaH>NtgTz|ӆQ=V`?Fїx _5{+$2"UeM>&fi3Ut nooGqUcyI>zRӜ F/{ /t-D'~µ ID(Et~]rJ^d21U¶ ϼD:sR;oJ@#6\{n HSηgMdTa<,Y Mh:SjVȋ '*e;Z^I3t~;exN GIq]!ZR73Y3ᶊpyv}&@9f'nSxb _B;-[~#rILN圐~g[d*'5NdS;k0g+ng^N_mHp$;$Hрdz8@'e#eĺషc*]&4`N{Ky[y_ϴb6I}Sت1 /)bO*/ND&218n|jMh}B (h%6wnlpl+ȀkawC\Apx:JuOQ紽&^2\,ULs\#o̘_hp0iKE_|NPn/#U Fa*JgxTs2'd酫t4и`.Eĵ/ H: /|ړrr2>hr;0F NP*nsߪo?xtW>g)jd_Fee$Fn^27%RAcqC^^; C.Q_H Cq +Vњ-P~gƓU>YjpZ.X{f3٬Ys~(rFK=f=<^ket]^ɼخ(\gv>?vG:S]~wc(&^*Z U9(aςnΧ9byg}-b~'kg,x]~WUKRٞ:CfFK lZήگi Ǘ:\n@j7 j`z7e)cgx>h^}O !b ݈JWxETi>{utľnUL-D8TE]Z[[h ݾ]HM@Hߪڡbt RJhARQyH-* C갿pl®oh:Qly\߸^UGޏQwׯN?zzhO*ʻtF΋Y(!L֠zDPj^bv\!vev\ָlUa F I P_;6Oqw.tծnm4 PSg7Y \`&Jxȶ<},&s7Tp^eVXA"Rvłg=ѠޚVh-B5F hB Q϶0 xg"tim^X{;/Vi GteuNL^`> ߂ACl1ǜ̼0!CA'V>c0hd8 j%O+g^)1HDQͶrXkM6)L4۱?ÙN%UI>RUmqvGķ:VOvR-Sg`I~<E_Mg*xG `36^MeYmV :m`&>Ճ$[qBzW&k*ve'x]?.Q]O=|?rE(d\^n՚>5}RWld] a'4=̢B޸ NJ}Jm#%CN󴵘n^+֊sG~-,yu:d'.ˎltPKRPYc)rS!'pkg_resources/tests/test_working_set.pyZmo6_,̀fU7`k}X1`!ڢS6z+Ii$R/Y;x;=|xIӢ@MU Z򚬄m2b[m^^jVO&kV(߈x2dd`NWUQRFĆho*ZJ*?9-IXWL rc^T&l4Z)Ī DPY Oߘ u0}`C`'iFr#hUQߥˆF!j\}$AURȐ mf;-qA>>#GYUKsG^ py(_+,'.ꜜNqhKfi+g#Ot&F;%^Sgh%OrK{LnHGj ڤ͓ v)Dj2$G&76%z'4:IF k&19?b!IisЪ*-7%2GuyKÍ' Q(-8p⺪0f j=?L9ΈdT =LTs6W,tn-99rfȼ*xlIwt؇C*@/%2OSZR'ZB..GF4 l_?x4%q0\~XfX%sT~?NHkʽ%-/RNtߑ;&G&Pz7kF$45m~njXlͰd:mzUߐ+Бl>,^2c.Yqn?TIsN6FmPu$`lHb -MհMn\8t Ûڣ Ǘf~XuNWPV/f8$zPlZyC4McpCiǸIp8HY}r7 E^T`z-om8:\@};=[P7KU"4ktUNi6"s*F ]4Vg>}Z*6`d[`v;M|ͶشUUM+KiC3`f dfAfr|cFY7iGO"pGbwF.]` +lm_LNf(sp/+ڔoRBd+eARdf|7'F/ϝa?:I۬h~zv  Mr76`:@x8'@5a\>'2>Pr|?OCu3ވ}E ߁2PyoHP;0#bQhk7Mx'LVhOF$W4rtNrahrb D$\Л[@M,At k0|fE sۜ"!e k eUGkZ,o3cIXtk{~5j2 sÑs9s4KnyoDgLP'3/{SY[JlI`;ժyXAή^{ʑ@rϪ$W.-G <>г㗦{&p3ࣦ݊Ť6u\m_'Y~~?O*<):9)Gi/%yt=Έc*݄']>zxx^:w +>ytb]O]>|: ̚=;"$so˿;t\!u {B_+POWSWϜ cU8 S!zԥbϞԒ|%кʈQ\.&;bdcƕ%, Og{ O#A-G+X!tQڂ.V*X)ÈJDɀ\5A)$ 5"dÄ&DV&nJTX!13Ɓ.X:9 PKRPY^Ɛxepkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/PKG-INFOM-ILI,I K-*ϳR03KMRȭ-I-.-HLNLOBQ\XTi呟 Tr,-/B&f D}2S󊑴'e $"DPKRPY&{fhpkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/SOURCES.txt}A 0нwIzbE *!ğL{ݽcFP)*շ!ٯݨ{cϳ: b^~J&tHPKRPY2qpkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/dependency_links.txtPKRPY2jpkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/top_level.txtPKRPY2epkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/zip-safePKRPYSKQpkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.egg ffa```-wlB]_?y[Wܙ ?}wkЉWt=u.z(3k숐̥}.Ӊgs̚%P{˞=Sp5k▝KSŦ4md{2mSJ. (T]bdg9TԞrj6`ܳ#ɕKK>,ޣ'n uuck1M]7?b[o,S O$oNNQwKa{o]k3k2u#f eݕZ\] rc&ܺŐu礖ԆgUʼni`L"̸:vGh_#6M@)  Qb(F2 D|fF,!fBg } PKRPYb(setuptools/__init__.pyZs6]F(W\8ry\=4mf(d$m߷ Iqico Mӗw*6͕Lۦmtngbmjzru'}WUtr$m=rDյdAg seJ2?)LAq%PwM-d- 0$1$2l9k0IJz S2NuJu!KK.5~: O;`a8 q$Es*쵮 [S_ڴiӧ~œ&ks2f+HNM}iJ5蘿U#OGy*^=} 6f QZmLU`ՆI_[ QڦD|^_`;Qt)~G~e s:'`$POχє8\w^MߺIcKr1v)vxSr2IL|ax05~ ˃Q 4X8VF)d>|ݳ3Nh3Q8:"bE@H1;"u <'VY6de5Gu pB1I"5@!\O#~bW?uiΜQeME5-_[CgS|k\Qq ;M;GFJSɒi+fjSՈؗF,}76'>+;n0 \ lgCVrYm=1E\.H[A|r(Ջ>Mo:Fh Ir +3Yg!e&uWwȩ?(n5 I .p .3LḏvZLxsMd<?zxA_4x$+&A8 ( <.gu|Xzh]jnHkxwvl*quד+ evXIlRp!d^+!#q1o% QEG5(s{MNZ?0a^ߙYwI'JWaO!JUK:+6XtF[R݊]7-\*͔\Suѓ5 ۡrЀV5cѐ@+r(]& 06=w}P0$72$$V"+BLetA{: ^GPNI>|Vf=劊˟Aid z* .Pyuxq,mWx!ġT<1_dn1CxAY΃$IfRNDE;JT_ \#U| ]^e]m <|zwL,*N*Bi*{zrAmW8$>!Z'L˞<~O8|zڳP?gkDX)%u*ls~ tbcSs'dT7DɄۥ8LYq/iݱSKrFD"in,ysJ[Zj׆a-iДې,%{~J`w'㸜TVQse\cB|22Kw*՜ؿKMAzAE_W ̡.J3*RB΋$i|{G h4N w;6I#"mA0sY=㷟h"hw(c5Wnkx/*}$7i8ʜқ堣n/&LsBo1l6ڷ֓ςzIsn &{dˊţcBL6vBaÇcg*q%v:o)RL _qrepJ dЅV(F|d۩f9n JB9gl0X7>P'Բ[ucph+1LΚPzF^j6Ti[PY;w_D3n[

cWc>޵q'2CW=3N8i(FHI.1xA &'.w^.{f/?G uzFLt'(v*E5b?@D'+yK.j͜~}Ek/$Ο#'CX}"maW.&Of S tř&,W ҰesC6K*ZTޡ3ePM_eutި+x#鵻@#]4 њrC1E2-jVi3j1N \#-G]oگ%Z׼_q]&L۠ 4He z3JKbFgy0^,{8 5|tp7.Xy+kf&-_5nZDkxÖ%~-[~e!A|a*RL|]P`ތE'ug׮e x8vyMjwߞ#vgR$y¼PH[8hiR+8x; 멛pBVQ E8W~8tۭN>É.IESUƷZW*26愞NtH<*k_s@]?F|_PKRPY C&setuptools/_core_metadata.pyZ{s6ߟGOH[c]^M&Msf Ćew]R;v]PegTs⌼c MiCɼb,t. AV6EzΨdų>&d4)>k W|qʣ6L4GflhU8Q?:@9 $i9KuXvp*a> 2v۬8+h Z%8̳944ԣhXQ#|O ~d@")N/ 'Dfl,e76$o,t3ZV%2~gI C7:k ϚJf8)+^ 4$ 4+K@|`M[7ULm/H㦙hR糧'' 3ZR6' $# `<)n)Ѧr|D!?"㮝!#O&°8Z?~h6yq#I8K|R"k5R)̪͛WDg_- ~W#"jࢺϹ2@v1F Bԩu5r0 PHNOɸ3C}:s35?~kAA7,僎Z'W!h;%@ X,"߉=Ñ?'Kx`\qYмe[bI\KS_\%f?4 uֆLoAOIg`ђ9D7ꎤY@B>6 IA1sq OW߶碧mMyEwl 6;けNa3 p⩙?J/ yÞi$g $ 䤚fA 4 $i,FM֑IWanj^w8U0\Wk{HVP(@mYDN2_ h\ )eiLT5 nQKeUٱZ24e7Py6cn 0w}.E{Gwb9,:w̴φDܖ\;O5_zUT$+1"$TEz֯֡`6@1Tr*X'‡y8~D"LdC@$@PqV r*k g< _r^+JUxCmQX79 Ó]!O a{j8VVg!u[1+ <7vl{#b3:mYa[†piLC@s2[9^AEIWsRbIRvŠ)5`A,Vr^beJ`;ɤ5.y\(pUr3h`κ"vzk,Ub?5:v'Qvjyh ! ] lf꺢C Xɵjljѵ\b5DNRyx+eV*9f=P1eͧ($yLaf¯"E,yiH޼;2s8 8ֽIQcE}Ws |(ՙg4&@E3c左YJ`uƧzշT5ȒGw`]$ٰ{.M}o)^St{n{]MH2{ \Ie#ua=>~do; Y׻EG=WG 7żCtFX;Y^K#Umwո'N }IsNJl?X?C^7$Y ,1<{_ۉaofB5qVBclUjYz3!w@U! fL@UۆS+w_ڴ]dfvK`3װdMY#3A<Q`ބ\'?MY sfIF]Ek5r.&^ޅ1\vmT*r zMf*Z[1"Z vF Ezl*1Bˏ8Rc~CCK?[QZj "g5EA.̡U.2mO ~8;+ =I(}d3[y5}[SAO_=/Cppl=c"G}?6=3B>H)I@3o@9Q/>= SoJ}dBKEX6P5\bfyjl@21,CO=V ;!?yav9Oɕ͎ۏStE/UJu&n]}#oO=)Ke 3PPex:@C9Xy.R ڿ\gV(=BѬ؎tZ,ۿq r˱щSs`"+ќ9'q+_F=DҞs_A{;jd=޾i'Fw_Xtg;@+B{!G|۾#d]%LRqppdWdPKRPY setuptools/_entry_points.pyUM6W %ԡ.9v].CI!Xf",Iv ΐ,njޛ7q1_łd0n:8Wdeޗh\<⬰Viɦ3)hVtL˭ڏY 'P^7Ye2VUlUw+k^ ]<spDZv똡C0jtы TN(A;,|D>B {(޾K{9Pzғ-+t<ބ!X+Fc {GrdP7oN:d7_3JG\^آD%=kk&5ȈX`+& 5ꢕ}(WT%_R1ޜͺ$45.gzQ{Bx";jMXR' V9mtwz]#yd,^6#@fX':Z Iͺu|&͆+H$%Eo7C|Yt5 (e|\)u]\LѠӯ>!ԧø]DTt0|.i>'Wpdla4#KJq-#TW{^;N0zap+Ś'cQyOWp6_UUzC \naLa+ 7Rp0"<>R|qąΒQY!rWЦah-C@Us_6 rꪭd82ƙβBR,6~ֆzW5b]̻qޖİ.=0C4Bz͊IS=/R Jvl=0bll 1~gB.6%Bo[r7a=fgO+|3㓽Z^]Fde?PA[m|o57B%ǵlv;OҙkM䣕ӯ-mTD;=^jt4=A==qhBV4cey|9(wM;9\\?ac mzHMGo6?y :714s ָ /_ŶPKRPY(Gsetuptools/_importlib.py @ D^(nf+n)+8@x<{sM]9hh$t#ֻ-rS;>W/s %^+ jE7(Aopڗ%wXrl:Ɩm?)~OPKRPY@/Nsetuptools/_itertools.pymQN0 +Lwh*IC|BM])4M$Eӵ+GKlu`޺?tcX&IwzE54-]IjjʹQDci -F8p84<C QudO*`LuA\ ʰY#fkȪx 3􉷧 e >#ICAzEQyYJb`њb vr "?ޱ"cafF8yes]m#$-1N_MWtrk f."]$PKRPYmsetuptools/_normalization.pyX[s8~Whnkh&6 &&4l Acy%^L0н|nw8N%S&!g4_"AT!9ef 2wTĕD M8|$tT& dh4-,R#ɪ) o OnZ=4:UNZBOE鰤S(6.1~Og"/hxy?Y ^?7&({-nfxvjoۼp7z5"Ëѻ':WWlxq䷵wpvV'o8=*V&DxL>RZz?6?H%e%ȁCZLAW6-hi [5/NG@اfiBX5 bF-!>I,BWjH$)$~݆ESe+~<yG` > qrU-d:}]&U"fhOUHSn%WJQ*şP`6DC vd؟Z,8~l֙8N8*K]joTsBj*%{ c$E2%22+Su˦L+,CwfOD27YлdrQr'*Esho*rtOyq$#yb14Đ Jo\j]f} tU]?c){tx={RblVp{Ot}&:K5`4a,XB! #w&iW7j/HFq;NE^ZQ/ yw[YZh<)zeq4HzAmfa0QgW0@=Dd7%ߛɴF5VM_Xc-8f{0o1S'vCӽ47|.n~/kdwѽI +Fe8uk5'҅+1O:fk{`b}L R&ļ`;AsĦRܔm@w,S2iiıZsz|f;+, cTPIBO]s6.>&EIډ,Py)ta^$%ˡzӅ {cqgs1;%p t # ]}bݵ\o02)Ƀr.Iʕop$4_h c*tKFEu}~T6>TlaFȬ2-T4(lRB5m~_IJpݘ28GHK<01 ܲl/[ T gV!Lx*޾z񪏊o86щfu(ut>HO_LS>PM%hjiG;ql:cZâ8F'&Lc-زUwN>~m(Pc_wt{ɽ4Z՘=.r~6oFzUE(MalHX#YIL`Tzj3 ^T-&vW])GV{>|2.8 0dxSaJQ.LL`v[\Axd0IQZzL\/ JxN ' %~̿=cH]߮b\ ,5{yD9sy&@NLFC3%oV%z }XC6I~rnS|n`0"E%(iXĴͳz'ӻ >;PKRPYQsetuptools/_reqs.pyTj0+{!`hi $BǶYR%9#9ݥbKy[`h1WJ{V.IӎZKvd5{dէrRn<ڣ/mwN%A?7I-u1ssR'QQXPaSReQgʅ*{)8i6fO4]*K؝_l(?61'2M Yk,Atk|dNrN~Fzv^p\U0mXr, #a GPUjQ!PKRPYsetuptools/archive_util.pyY[6~`=,Ct(m 1cIԒTiy~shza%*5+tX}@uQL ;tj3ߟ ߮Vư$>IYh6E;{i9nY ?1:OYa %z"ju1׎``TN7EfAQe{ͱ$nx-vhWxW$=G)K#~?7~"Y=qVv Ba {բt.<ʑ;#\orͭ()MrcEM"(`ҒD(2K >1UUr>j~AyHjXRcS6[2^h=ԜdK[d}Ouu(Dha%YLdH1*$ 6$Gr&>11!Kf(RgFYnN4YIQ@O&4oL>dZ6p03Y"ӡ[ND .PjCG p1В=kP(TI\QvG[)G wQO8(EuVL;LJUUbc@X :t$1}3_M02et!tjR!8VbW(e1%t۳\vұCȊ@Lj"cy?EQpް'f͞pm3e]cw5@酦!(xJmf)H6%P|Sy?UuVzz`kD=;k!^Pȷɲ һ}-m}`Tf9ۉyZl]QTY 'M13湚4dݝGWϯ? $~BS96Y)AE;na&xO?g?9ን#L= u_ͪz/p޹Ck4_jQjor*ٜ M!pGA[4X!EFP@KqxHW)dK8 1vʀ;#.ˌ%e`9La32p.4-~I<Ӻs#m\'40s0¼BXD8ԩkQ.uLuv']o6}C?d+}?eSCqhFqJKu%?:| fC*ػ[sCvM ëoW M`Rqq樲(ǀy~Ukϼբo>?j(4NOcTJʶ|S/^uz|=ЕF 쿿ym,"EUxe|_7 H9<|7]_<^_~FqE1$[|\Sb~3R躓E ƒpem]:TQ`ɱ3KĞt6+k8}t:;{ Õ 4]קR 45?Bg%w1( tN2tPKRPY2^Nsetuptools/build_meta.pyZoR>fK"D`DVV0v (gU9fՊ3.ӅDӣ͖2Y{8|Cw" X67!̴*)Zu fk nkT"'O礅NH'Bf>9X=dؿRi6o|GrFco&y-v 6:3|]jDC@e:YIǰZh=r ʸʷoEBC%0!zE2iC+ȃK2D?jɰyByNEb,M2|wYh|Oɪho5B}[S6Mg&C@olhrr(ޔ#pY"`Q0)$yKt=^݌ioMXԷ郡|Qgө$Fl qd"Ra- &k'giwV Ah}=S =!+)s0+=P&z }(!z]Ceǂ@:Qk='49BBV1mX;] =l|D!ʝIՖ5k\ 7åfrAB t0 P!5[tU)ƃ px#ڦ͆YT,kr !#OZ yz=DGQ{l\qBZ;SčRxru>A㟣ݓ3P1,1kMlڦˈMiV-VmQH~iEzbe> +47߰+kj7 'ž+7c; [φS6L|h}`]M/ :,-& dS.Z#la-2f**;#JDl,7b<mq) :| =RI )#[ P%әw26β[@Y Wyŧv6ӿ\[JPFiaD3HʾQ g!u  e3r5E!ӓs`<ڝR[}) V{^z{54wKK=xY>A^wI_|} r G8,ǿG'Oi hL`"z))Uk`0OHt"AbCCZwICsX[Ow|{֕b4MfNo-ҋ!1wG+Lr7E&t*ZN/r ::#G?7 fπ-3Xp,1b1ݭen .1|mM3.?N&{wk')fj;53/lSuYztck8Q%GWo%O7Z* nݐvCQLAVK5E"מEoÛэ7tBf-b]աL`WA`|T8!J:i^! }n!Z#3MTyd"9/d:x6fFVU@ P~w4J)[p/d(N7z4ǹ6p$p| W3O IƤmP;^Bڌw1u.sl=2g;!IzjTٙmݚd}\OoƭWrVܞ3h󆚝 m4 @KGn3B1,T䦁V'r쨵 そnZѶݸQp *3mɟ]/^mqMb^:h<98t,/IKLMDu.7"ů2{ʄT((KNh:`V: p, qhz*z=qKSkȣ(A]P S'lh9f<̘9ЦG].ؖ_ߋg 9Znk9O`h!S3P8-D,k7+ }E>_콩3|m't$公Pur)7BzX*! dF H𺐈O+`1SJ˵4R\>JúHOUUmӧ44\ D4**|㣧=e&"Zv_RamʺJ@nmKGjVjFa4<ʫ3X0wrU| @^n_.pXh/֛G=@EEPy{:YO&]%?{"=]q8wSD S:/ktר$hؘ)߅dUfB= vT`BNjHN0YMf>tO :M[$K31suw^m*ė`Ц62Ut9]ehtA9Q~E\?+lw+}kQ;m$mm4t}C+9ٷᲯ#ЌF6snЀ7¹):R%J+$i}>ok QDمGXPxa 9B.qڊ0-?PNczN\Aêěnc. K*Xl8`U*zANmUBJ'4K=bn}f X\o:S16II_B !W_U+!8ŁvVseA~ ߣv11iK'O[g+;nڤ3:njQWTmۨ2WZøI=е@M$.3Y\c76Z=>e!;vz~2;p?l˶=;ZY$=nӄȰoFw%H_W&m'N}gN =}c+u>bg갤uL x/؛"2r &v0 Mn*HSd*Y;oBtz3/bM>4Fy2QŒQמ69D-ϪlA_}>&;/P1I`=$PJʂ32dc\``mJx7$,0}UXt<) hluuv.u%)7%Fdf;Jgrt ̋J`cN)Ldd"yNCyAWLrq`VMcr@H2wXa ]/QHyd$c0lޘXzP Z:< L~#6}ڠ-8T*L$,Y:DenF22G+RJDžo~y1ȤJZG@e$|q~uz(۲Y3g(,S$65`9JB/0 =uzsF3"x="yKXxu5!+}x Ջn FV>?=k٩>^m@ge:v_IGsy;|RBf ̗`rPKRPY5RX.setuptools/cli-32.exe:xSU7MRBiIVAXZ$m jBH_4Kذ!k3#8VtWg?gFf?Sq`|v֪=羗:wϹsϹsϽ/w$RB J2IH3_I^~zAdNW@*\^՚;T&$''PY5S%{/l ?bSo~gq0ߥccM)=#i{D`^"'-r6h$C2C2\ڃBQz!&m1>ʈxѧ`!D@d o'dg4{ Wj& Y0<)a,|qB_wQdPnz%9(hk| Z"߭S3CX;ڀ-ߪo^ߟotVIb`Q9f3nbMͤ ]5WYrn f' $?Z;9Kq@6˸%(];tqaPIѽ:B1P чQC:" Ŏ_:U-}- SUF.֞ZT|-G?6n\5(_T[StY$ˁ%W 9J|,϶x C_B }0AI42 `6WG#8NW1Pln{K#F_iIwL[QK2GW9=Ы8̈q[|-3}uS9TA)R J,9tyyPړ;ܑ })1/c|$φO^HĽ*2lQ5!Cg!y{(;:+8Ԕ+np[ЬGA?"&T%7it2ݸK& '2{܈Kֆs4r1§ -Ls"n$AʅE.Oj7KaUgܳM~bɏaRrb,!bUI+\^ƾ'{Y"r{o#V'!Ia~#N[ ý2ѵ൴[,GQq2ޓKz!+kNYAE+#&¸evHQ47_ve~W}~;>,Q7Tr*eݿf%֘<ܫ;L_:AzA$ޚ0I$>a3ਲ਼X]b:$濔ҽm QT.4+t`0o v #`G!+8wrv} u/Dz'P=/Ag@>8:sArΘ݌Psc` F1j %TǺhFS 0KX;ׂGp O8!W!rCz87-'΁wђdy;/r+[p/1ɳZ\5׉\ 5o/| Hj6_IwA9!c\ߓ z\0'H2o:&8? 3BOjeilvO?zqxj 7@G,.k 5PqNx2߬7# z,QetgrwӷSU5(a7!"4el~(eݤH.h1x r58 9VH1ۑ pۀUylz*8^y!b-totfB[+^> Ahi ^>rb7p5Fi?#={GH?3erنfU lC?;|rlcm|CxnV9f䬲! so(:B{DߖxA-z1#_q3A&53B#My$Q!V.|W$Lp/tLJg=6w Mv&>DAhz S-{Oޚp0IV!p;w B_[;ua ?1Cs}v[7 tow XA24 sظP7׍Dd'0 /2Ɲ@O<jОlx%,(dh߰ m;8C3[K6ϋ_:Ȣ8#Eaf7YFF_RJ2 L:42iB 74~ǟ/?ކ[C o:f5+gZBsgEKآ4% WkDБpn%JDŽ^rOpm-r"nw{~ʀ/g2xHt=]dzK]zzjoqK'  cwjD4Gx4ncOQ;LQHEO{(Б#GyTw_#|Ї&pF+/u}ij1g2JgG*Z3ܟWFB(P꡸CyDa({8lRE#!gI.r/hP)'GV X&P UPA9 mPB]e\J.{< #PG@{B9>z^>N.Ӥb}* ~ s0@IVz_ ê.V51f5oqjcKvZkcЕE- PvNɠnmRYi(aA־Q zTȆ]t <>)z&>VH=xZLx-oҡ5OIWK}Ûv-Y8#* jHfPg"(e@q@?f4)A ٙR+|g [&~+qᇳBz~ž\V;[),>ɕX_iu,DCⲉ utn ehnHhV*oD嫙@|'(h/D+va`H}Uzösѧ[4}J(HLMNES74# Kmi-*M|Cۓq  f!RP@{'%;o>oYh-$inBx@^6N_(ء*L]-af,ـ#,p*k|*J  _)衪P4Pg QpM ='u\ Yafe6*A k]m )A  0V22A]-A?c~>.u=ƻoRoJlpIqMR&Ȁ uC6zaCz gZ\\kG@/,<6^Vɠ4eQEKШwń5T(VN/'im]awd~_qѰX/d`uĆ<ڛ=h[ ۊ=ťb4N3]0kq^ʤLAw~ÖkVkqt ;ɒ4 99aY-$TzzQ^xzZ. 6|j]~&*d뀬_QiH@>'T0b쓮]5 GaFkƟW*>~~:5K%^SGBPB)ex =SrgGLE%"^H꫋ˊTi**+r@i٥ހ( 8L=Pr}_3[ )z=Z^ZmjflC6RY06Di iڅt @3A da0n }gʃTdeEʁTl"J s2._myn6.wSMQ]G}\`gK*i5iNhМ֜ȴjm֭Egt:O]B߭ŊWmmmKʬee칲e-(ו,,WԮYYrʝ+#+__yixsC]o ? .qq1X`\d\j ƵF.=F3ag b~n:az闦wLM E UŭT<^[~ŜʢJu2VWP;`" :[=[XzVRCߕtJl [5Um'4OEMPWOړoh?׎it:v]]G#'u׽{Itҝ}PnDnLWg7U}BF]}^xKJue2B^clҼ\ԏVYqM/?PKRPY8setuptools/cli-64.exe; tՕo,ɑQb|DNKJ; v "q> &"c,($4e*Qڦ-KԄR>'8RecpRNI/PP̧-ҳ{23Ѹ]DC­(tv8B:0<\Qx26 )~S LmBi^^Yev {X*\1fu In^ n(~Ϟo|b-޴_J2ɛŭ)Mr2ƛITf|VZ $S퓂djL4i[S |>HK y BPP!4!쳘35֔/" #u@`[tr$ƓL&Qh'FxJ++`(!M*ݢ v**- K[uV<^|TIG_x7FHGSM|`0-5s#0VY ,t&^:!XQZk&K%bQnZ'aF7|gG|ldownfK;RCgA]xhnU҇i.+0< #!N0<}+I8"Yn~Zt O?][ưV<K׹p5$[* ߡa6If#!XR{ "$\1=6>&c+[LT)t{LLH%1t9xlhvV:7&/i5̶==hX^TUMګP/nb|~&X理||סܹΰ/ =xy착ҹGkn^:,_!׼f;i3}ЁW@˅.Ӻ5vIp46 ңMp:I5k |as9|)~ttӗc&H55nwFW[4FԘK"0pGb=&S C_^eqm3aV 8M7ݛ&GKEm"^~ ˈRZvʿ:.|[@cua(}`z>];Qn[Igg9͞uk5%~#:hgrqH/8bO-Ps&yx د"^u%dha~{9-"oۻ0ӑ_B|j3;ϓt3qPXG~9:^&*nO !^*?1웴8Na~4M~,*ASvh- ө*a:^ę-56Ph{@!b;fƅZcط]gM=r1]pj%fmW3cV̡>)o tHY@A<_-%:ݯ.)d  ޅU, xn}.f7d( sHI%3(y^Qk2N`T{lC߉kQ.^k^@]0k|LC9.^`e9r+m7!o=I GǣZ<𼁢vy6s髵۲ka_|5:@t*PcNsAx@c+?bQ+ S#}f}A^-= 8yB`Б`:f'Qo,Jـ1Uk[Vs3txqe0st[f7.dS:(tDز =Re (v];. w|;[v]'M>zjjF2JwWWxObcAJ4*T y@wT̈?K 9k7r/DH $Ԛul}ְiMnE˭M]|<3&FN0~܏}~cT\ԘyH4UaAQ%٘M;8k6츱fC䴢 ^+:@u#1%)HXQ#L3Ȥ jpK[EEb^b!HKqxYAv8{k-Kc/994FL>JR \z 3>O$jKr^zN:*1mU-7:>iuHGIvɦ8g;4Ga:$&æY/z5 b4с!a1}7Ԉei2Gp>ݝr>%,Ҷ sl<rˇ|\ͅubB_)w͡t;ކlq+3~3rɫ=啉P_gґeMѴ~%S(ODa,t`hPaNvn! lw9ΰ}I~ݿW<ٸ{ 6l:.'H} }}<l)'1ǐr"@姊aNHx "0h'#rF]ɳ!ΎT 9 ^N|(0e^ sX'OƜN~e@񯌢2.䆞߈Y2:.V ]KN?Us'ҜC1>)Z=% :2wqZa՝*?IhnX{9_Rt,`9Lw"chA[V[b{tk\j oN?a-1 /XHԚRHOqΡ&'4MO@, |X+h4p[qkrY,J FI1nJOTȳH:?GW$v^q51;A:2rg r'`[tMrPA9amYbpU}P|gga^e>| oviVJ [Oqye4 bhRWϺKj)^ 'S=v=I]7V\ UAVhV® $_}č3 ;dG6\WyT,u@n--k 83%Yǘw7 vA^d6yB~OkƜ8[tA8Rv󄨅T>WƠfԀmG} K6qrX|ϓ-5 5gR<{ㅉ3Ǖ^SlսX =Y}wdXB>aL%HTcC5)//`u3k 1wx+C߯ 8́uD }#ɟR"喤5&PC{Ҋ޳۶y;AVgNۏGf H߀aۻq҃2h<'2c9q"baUh$JrqYbi ,@#rb(H{׽48ڱ5#= j Kg,ISHH' w'ivB2i68W% C4Iu4CAvnA/=|Uתid1!)7c,1ܓZh4/?"6ҘC mP@xzi)́󾷢g36'qb}B+Ic \ϥױr^e`?[=(S13Ma'xr+9Kh1}52ȷ&}N8Z_ٷ Eg/H!k=^:޿FcZsmQࣕ tnf>W`]_!D&GĒeMD,Z@0M%ztLcIIv#{~q{ ]$ʡڠH *RpPvmN7 Zpn ۼkby7BpɆw O،Ŭ0C!`ݯ~<.0M0N.MJq@N##(O'Mbyԣ#Tuy#M͜5yj { Zmc<+|WcyMGOVeYJ|>O_s>o iDA鳙>O,|~&鳇>^USnWa G^cHbDGoPFM6׍gFg^=16ި^.~L?‡TU{Zp*~ *,SfUΫcOPU~^Q,*|x>Pdi>*b?;`S110uՌ?X81hfn(!2} ^ioL-tڹ!xyހXWɜ"S"KB]lr&x¢{O=U~a_ I%dr2w\z,SRWdXת€ 70[|2Wj?F_=#d\僋, ?!7lB}\7^{7bMqO未on#ʩpfem^ԋϛ~e#iH㫀 u42C佣q7!Q:18Dp5G%F᜔_hktG(vH#I͛}b: a:wѼLCUAcfC!p7Q9t\< "Z߉_LY>PqV:~1{0}nu=䏥B,5o4Rk7MTPcjqcMђ)+'&4[idE5ɴqdڢL2l73sLHf6ddfٴ) N-]II4MN $Eř7&EC"#=DL)`+zz.#832,YLbh"˰2'w a#aM\G6@]% ߒサP,<\ ӒE$oe3qCĶl-fe8#܋t01'u#ụ`|+Gp+`ONNgì!T. ti2zL~]гpgJu/e~ˮ/[1RM6m sm-ߌmk^qE{p׿'ܰV#uأj2,$}؅ta[[%@O'TA$kiHu+uXJ}>XMh "0.W+<ժ"A6{mú<~ꕫo]L%~7ܷ 0|^Vx\.;уkPE}% `BbM-/@6% A-@J7 =wjD!D}9bD;p[B΂ 6PY1;ax7oWun&lѹ(!.8f.Fȕ#e@V<ɂhڂ_2bF(1e6zC8:3ra.q,mp{nH)|Q_EqlQQcnSPa{Dڂ3Ii&HeZ HH&O= Ud%q7'y|!x緅.[w`oU3,mG EoN2:綃m<Eάy4ڕ# +T Z:hY aoBn^ADL9l.8UC*5fs8= u3(BpS:{`0Yu4luV@l `WYni0nb *#޴467n)M,E/I]b:򢢤~w4%,e'zq|C ;g|v Xx@.sJ;'!eЧGί`yMPX:~Ćr hwy{8CUU~n#V fT0r71ExLȵ9̚s|C- p W0E84CuM bSk Ŧ#B\ZJՂQ:U-mAnP"Sna+\t|soソdmgh=_PKRPYN@6setuptools/cli-arm64.exe[ XՕ>L 3`ȏ2$\&LShSu 103 iH:f [51[`bJb냦h-il&t=|CHvp=s=ܙ/7ݶD4 h>]tj3ʍ4wڜmlv]z[I+3'%Wى[w[]P]ٓ?!o *WG<w: D~bU@ԗLs5p㴔RMR:W4iimQ28}Ҙx4XFnyF"b K\5U1ASuL/ j;RiM4'ͣQH'wG- [QytE>&ut3N6I3i-^n#+=–zU6žd5)2hjǝDzMsO#0/t6[>9'w)K&Uk\/m)Lj$NWLzwLظɤӕ3~қD]D׾igS|yJz8?b,G8Hn\(#e6]Gzb}9qw4oٳzc>4SFA$E:~œ7b7jF70Us4 Mc17 ܐz`٩htEI?FV{ ^Ua LMne>5J +J%ܜYorKw YF+009>c,a rp?&j_?z:A/O gbw' osS0B #52=oL>JؤLSv2/l3]F h3±ΊkDQ#J}iXoAY+<c|p`a306l(qsw!5Ls?F3n\أK1؃s]'yΗs5Qǰ9S X~E[z^ ;M苋z3r?lnSFQ#' '璥 3m.I䙺)>Z>֧з*cW,{XO#4p;>@mȃ rKѨ:S?o[ o_R4+1W<ʲ.>&S G:FTD9<oN7)t xyĶed> ٭c=O]xrgJE|=[s.mHUi qz uJ$ܰF^16,}rlcY?Gm|v݁uY̱_T#ݗOvσХe,w%D\hl)??'Ossr~}M T3nY> '8~O| vŶNB 'lȦfco8?F6QicLdܣ?ˑqq'xT8o?kZZ}aC> YFa]q.A_Blt4?Mģ5y6h 8`^!O4L{ oy?M|sļP%Kg\b]#tzoRzt¼ IQFcJՍ֍/IƧUз*|LNss9*qv#YB}C6fVcQU#[;WG S,~zF+ROr}yqj:55GV{领7{袼%ys~3ϜW_+g+P#$ϝOV}|,~~gt~k3Ryc&jnNk5bQBp1z̢({)޸j(矹,{"ƃi¨P],@;h 5e X <6s?7!>!NkO0&2jB迆j슉XJ6'hg߇n3ءyXϺ'uN\TQ9r\WpsIJkxz)З!X7cF79IQK r~kq/X/υ;FBg __!ߒʹaP0rR#(B48MlOubt11ıʇoWνaszkb.i-&*RՋL:䮣2{0ALl5s!x.3볢Frlt#rj}xfrSȣ/\c~+?}zz+8~.3c܂ʞ<0ı2=OM/#guq{){x$x;د?O㋐jQwqL6|c&bP=3qnJV#ɴ9[8}~^&~ N\ k/5NG8^IF0^(qfZX;0 iϩ,ȋ-@9enܪp>1!~-|JUr QBE'f13>gVr<oQs>2"Naܿ֩o$9~#"_COC^e=qD!CWM;ka[ϔ= ){(s.^~?) gXk=rv/UzLސm6'Vܽ fQH+XK,3:lKڿǔbO\.`Ƒ99|8]sTƳ.Si3,e:#r:}0li96b߃Z7m#|dە گ/; 7  Cnh?dh?lh͆/ 2 ?6OjhTP[Q_>QsM?ObDnH ZbpNX=yXq 0K" 7JxàJxOJ降||>,aMğX?x? ൉%OIj $('0Y?'J wd! pb֓H\ xrKۧcRgğ~ْ~ټXg]`=wd zmNjkS RoՂ6m;hsz4[j] OawE}~קy0Brt_Gi;4]d#XLs[Z41S4٘yEiZ]Mv/<ڙYXy]=6)wAosōrA-0a?C1{z]-جSQqy+HVzr7WU0M4#DmLWsky DJ ~Dۑkt+'cT?wΝM[򺟕Ag.2pq :]( PC_ߗ S qw<_>6&MֈX>j-}k7*[w3X_\HM{Ka't y:cvh[&KY_`胗eT5l3vup!\Cp\w'pih5q 30wq2œapKJ?g?8Uh#ʠ rׂGK#ѪUvT;Y 4+D~>Xfvf8~W̫nG{Ԑ{=dGdgmFWۨ. F'HGKXGv`.XPՎX&AK'Uwak+nO!4PFߴqxX t@֋Q=Awf$F![b/F!XFm6kZEzy%g*}RDk l b^Xfpgrqg5{㛜nyiC,'l󗞤@t g&ϫ_o~3}o22ukSވe z4 S\.\4# +nsqbGx>j," @A~&>+•}G倍2={~ }EQ}6 Po&ԳT_xC=ߘKV;F8OBeǾ_qoߜOf[q7&'3$wضkr󺼒ʈxѧ`!D@d o'dg4{ Wj& Y0<)a,|qB_wQdPnz%9(hk| Z"߭S3CX;ڀ-ߪo^ߟotVIb`Q9f3nbMͤ ]5WYrn f' $?Z;9Kq@6˸%(];tqaPIѽ:B1P чQC:" Ŏ_:U-}- SUF.֞ZT|-G?6n\5(_T[StY$ˁ%W 9J|,϶x C_B }0AI42 `6WG#8NW1Pln{K#F_iIwL[QK2GW9=Ы8̈q[|-3}uS9TA)R J,9tyyPړ;ܑ })1/c|$φO^HĽ*2lQ5!Cg!y{(;:+8Ԕ+np[ЬGA?"&T%7it2ݸK& '2{܈Kֆs4r1§ -Ls"n$AʅE.Oj7KaUgܳM~bɏaRrb,!bUI+\^ƾ'{Y"r{o#V'!Ia~#N[ ý2ѵ൴[,GQq2ޓKz!+kNYAE+#&¸evHQ47_ve~W}~;>,Q7Tr*eݿf%֘<ܫ;L_:AzA$ޚ0I$>a3ਲ਼X]b:$濔ҽm QT.4+t`0o v #`G!+8wrv} u/Dz'P=/Ag@>8:sArΘ݌Psc` F1j %TǺhFS 0KX;ׂGp O8!W!rCz87-'΁wђdy;/r+[p/1ɳZ\5׉\ 5o/| Hj6_IwA9!c\ߓ z\0'H2o:&8? 3BOjeilvO?zqxj 7@G,.k 5PqNx2߬7# z,QetgrwӷSU5(a7!"4el~(eݤH.h1x r58 9VH1ۑ pۀUylz*8^y!b-totfB[+^> Ahi ^>rb7p5Fi?#={GH?3erنfU lC?;|rlcm|CxnV9f䬲! so(:B{DߖxA-z1#_q3A&53B#My$Q!V.|W$Lp/tLJg=6w Mv&>DAhz S-{Oޚp0IV!p;w B_[;ua ?1Cs}v[7 tow XA24 sظP7׍Dd'0 /2Ɲ@O<jОlx%,(dh߰ m;8C3[K6ϋ_:Ȣ8#Eaf7YFF_RJ2 L:42iB 74~ǟ/?ކ[C o:f5+gZBsgEKآ4% WkDБpn%JDŽ^rOpm-r"nw{~ʀ/g2xHt=]dzK]zzjoqK'  cwjD4Gx4ncOQ;LQHEO{(Б#GyTw_#|Ї&pF+/u}ij1g2JgG*Z3ܟWFB(P꡸CyDa({8lRE#!gI.r/hP)'GV X&P UPA9 mPB]e\J.{< #PG@{B9>z^>N.Ӥb}* ~ s0@IVz_ ê.V51f5oqjcKvZkcЕE- PvNɠnmRYi(aA־Q zTȆ]t <>)z&>VH=xZLx-oҡ5OIWK}Ûv-Y8#* jHfPg"(e@q@?f4)A ٙR+|g [&~+qᇳBz~ž\V;[),>ɕX_iu,DCⲉ utn ehnHhV*oD嫙@|'(h/D+va`H}Uzösѧ[4}J(HLMNES74# Kmi-*M|Cۓq  f!RP@{'%;o>oYh-$inBx@^6N_(ء*L]-af,ـ#,p*k|*J  _)衪P4Pg QpM ='u\ Yafe6*A k]m )A  0V22A]-A?c~>.u=ƻoRoJlpIqMR&Ȁ uC6zaCz gZ\\kG@/,<6^Vɠ4eQEKШwń5T(VN/'im]awd~_qѰX/d`uĆ<ڛ=h[ ۊ=ťb4N3]0kq^ʤLAw~ÖkVkqt ;ɒ4 99aY-$TzzQ^xzZ. 6|j]~&*d뀬_QiH@>'T0b쓮]5 GaFkƟW*>~~:5K%^SGBPB)ex =SrgGLE%"^H꫋ˊTi**+r@i٥ހ( 8L=Pr}_3[ )z=Z^ZmjflC6RY06Di iڅt @3A da0n }gʃTdeEʁTl"J s2._myn6.wSMQ]G}\`gK*i5iNhМ֜ȴjm֭Egt:O]B߭ŊWmmmKʬee칲e-(ו,,WԮYYrʝ+#+__yixsC]o ? .qq1X`\d\j ƵF.=F3ag b~n:az闦wLM E UŭT<^[~ŜʢJu2VWP;`" :[=[XzVRCߕtJl [5Um'4OEMPWOړoh?׎it:v]]G#'u׽{Itҝ}PnDnLWg7U}BF]}^xKJue2B^clҼ\ԏVYqM/?PKRPYVޯ%Hsetuptools/depends.pyX[o6~Rt1Gކ ޖiQ M@KTF"5JCR"u1CbQ~ΡyJeH!aw'%׆*}KQjU)ِw􆋛)ͥ ɲ8_]\]uva^_~lC*.ʼeW*i]9ْ%D4ɗjUTk NV>GGGUL#ɮu Nڀp|3 pU$Ϲ&S{jCm؆p +s qVmȭlXKo6qB xYIPc W- +·BK㹷!3z'Z8AeoX6~ɖ$y/)ϓ(Yg][RZ:,YHOWA`rR< YbS’zf/>fa!DYm!ʩK:!ω5)sJ<PMt ^qVZ^O뎑 4p V PͭL88pyDiQHe`X",h7Px}5*bސN sVڶwB8Y/?WFմ!a1 }iؤ=5 ڙRR%<ϺQ{fz r{™ ,qLNwÞijMI5~Ϳ u]3@ߋoT5]bxZb@qUtJOvaV03L`eQN搩:*e?w f6TUCXӚ}gY]N p!8OyʟŚ& L}Fa1#rFJ)鮶qH`5 x>}Г;,("x2BްB Fl e:fhD4 ړkdR<9϶iov$~!8}m=~ FU<07R2pR]č0W< 谳D#rտYpfab4f[xnPv1w5LCBlDcԠrzQۣd^KDA?}[z =AŬ[Mf^=zs^-~0c;P< AlZ&T^<vʃݕ@gxJ^qKMw9I:^î9TA/`Áؖ Q; [voc˙ oMmlHPd,(adp-ҩH/Ut\yPPfY O# d`:?CKg/j/Z_q  .DrGkQ(hG|?" 53;۝,8&\돗Wg9- qse֜D/E#ulYEd;:e'w&t$g+!;p$> (2#f 3: qL m?2!v1]" 痧/?9 S@5~?^}::1G? )? Ң*zO;W?)= oƽ 0H7@7g 0_e]6_Ъa-ۉU "PnlTu2[٭ vm@eSf_pm{>xX8RGKwHzYYEE!kWQ/Ln(&u[oa;T\ۦn; DM&YɶR P U?_LI~)y&¾x _EoP󋿽}1?e*^~U{XFᥚ_mB<q{6/S=tu-1,77)k^PQL(,=WI~ 2/]ՔH,aJpfăݮfM&\9{WVL1'_%fOīMU#WC`egPl2$bݿ?c_BwUB]SmĚ(^wu/f9S0H6|^_|%51+,8plgjjcJ*@(=ro*fHi8H#!> ;t[z 3Ɩրg>(+j `F*\JQ[Y#Ztbi'b!9VuY JJmWP\]ӔHF^^J4xl#L߿>Qݾ ?uj(\%h-+ ~'Z},llb !Unĥ16GN,MDD;vKkjwdw!cXğx[JGJFҫ)#J˛YtT) kק8q5ZH\i܁^ōnj+Ҥ7P$}$D t@4]%K#jǤ;`|$C|^^d~;z7u@G:TOYc^m[zegk[Y$1jI`^pi#9PTDy!68X23ifI0E` ZiZ 8aRR+ y* 4B懱¡O:PՍ:sD͞t&TBnۤAgt]3x{y5 -lhm[*sO}Z9H-9-9d3\Ɔd2D)v4yN;1Ff$ ڂ<!+FI纷?(!~j'GYf{O $3}8Ƣ~i\NV!Zxk0ӋִBL8yPbI]=Rxs}ԣGEޥ_ol3s`D@/"SmG'bUU #„A-`zU:N* x1BG2LT EcO.!iza !,% %.2}o2P7-|]qղy&~Q-L~^.cc.ߵJdDr; L{xbEILz.?t\+::xR8N^P1d1q}M@AjY{y'<-C,BVԛs eanXp#wv ;_/t SCtz6TA.`"/"Fˢ'uzw6B_lAhUn}f$ȯj#z?߃^;D~+0h*bQЌ#J"tE4h\EAb2 6-B _'>"S76DJ?`sޛ 4رnk/:ŗ_—ȽU`+]9{\NƆ]B}ڛ`I66hYۖy} Th)V+Yx-nնDe::Ci^M]:=ExD0]؊勒v1fgA[|kxm~Y^f^(Q Gd/ꥳɑ63RщvKѴ1RF 0%&6{ך82tv5[Ѡ9\;u U]pAz$QbL{ ]` vӆxfh;uuy_t.0K>_|!ʭfU% 21LUCA<5椄xԽ=}8`ќS5Rdm |@$jR:_Sa]2J#v -SQ%ZHh+fT$T`xvY@{ 3S{nVf8@u:k1 SMB[ bpf` [R;> Љ K^AG|nd4sk x*fx:[TW8ts[$˾-12wjv(Pa7]V,łr9ǖbLo(K;d!`eAjSl΀}(h ?{,I*@A! BAhJ2^ ib~7t;V)u.%j&\'}t\9`[(\PC )Za~%σOx$nD`0HG`3p/1ZVP*.+K͉sNuS)q߬ +C)O5<aux=7 aԪ9xWq~.,dT(<CF> qWv-Eyc;"j#QTST' 5 Ku+;J NUB\@߂tV5=3䍭7EvX1’ qY7^U($]bPN]+Җā5B?[J! '$Жix[惕D2hj8{CǦ_"g]׺)M9*pL(,neO![-zN%m}* 9R+hg1/;s}My7r@f5b t á9$oNS֛t%M(EћZ8&S  GB2#FMe]f~%l_1Me@gG炵QxUAt=<.<& YfjСuFNL.X;BgR>UlcbVOMQ4%HwDUݖcK,`L_G]8/R e|-i>% ɉA9q!^1`` a6R" 0a ~Е*}עe]G6Ѕ(˜;YP u Pٚ1,Dރ*jYK瓗<c0 hWlTb7n,'ĉ# Ti I҇wRN O> ܶM;OX7(CZ FUa k]V.FX=s8D1ңa_<|k3(sׁ B+l5s1XOeh[8 ǖe<# f!ޜ*iB-6cqlo Ron̜G(c)+* t tΘH/{kv[WsVRk;:DzVM԰:>APh j-7㠚X4"`#^Y1>Ri`Ҵc_Hlj<,yVmA|hxЏ0J ;ۛyeLd1bR//kZ1"Xk5_G9j4s]SqҿkS*6xi:P** ;{+giUaKOm<>)3?"2*c&>yܧ!ZdskiUwy\{q$GM1OxL=.O> |NQ:mzS_ #=kx 2WD[=cbN8ƌKpNiJ^Nu|ѤEKGXh3FmU_dk2;Aߤ~MdMи؟N8tS3%:oBUZD炸`W[Q6 Ajwxx.Tt%eΐCY`/F38MQ~YmU@^ۺwI> Yj3#xF^w[C&Stg~1bu|dfu4GNgz!:C觬cVRghѬѷDZ(co&|R]~yu8't4$O)a? j`^4 &"44i'ݭQc?zt{9C`G0d'a7l{\ʵ57&p. fgj.e9^Z1dn\q'\fem%#uݧV0WaëPs: ND?LKm +g Ko"5-~B:Q. ~n5!\ T̮'si@,q?"ܣm0pVIџ? )ٴbp^ ]Y%akA%7I+9}!ِ~sXѪob|ᬊ\`6znaSڐgjh+el`j5K bmƅNu|͉cD9-)>+nw:pt[a}&#~yydV.L:fD3bFy2_NSO㞈ט0U.B|[+G7ORB \Ǚ FW}O۵CЦ,8r{_!ƃǖnEkRh 3ofDUnuzÿ5VA u =M+=sY6_7ewLT_jU Qt"H?x㓧 lZѕ 9˥Pʹ+/tK?ˏm{kd^uͪVs=_muY5[54meoj`\E[V$oj ǁ^u+ˈ oj {`߆VPm ^?-d6^߮qpbҏ!eQϷ9ЯYXuW̫>a'n Rg@E r52Adϫ%EUļ-68uKxړȋ i9fȋbݖWloxV/ Ћus]g~*v![h^_ 8(:ԨX!g'kZ+>Ţnsм*/(G+M'u+뮇3R,`>Q'"˲ Kt8(h]zܢ50ujKQh_!{dŘ3naQ(OCr PmuXLF>Cn($2Z(zG7KD3*4cg:e&'l0_` & @ćwTV &XRlM+s>ƹe"O=yi"4&E-A,, 4q0P[K0Aڢ4,3$=]VbH<In+n<R_*ғ"%'c"`1l8vww#܌RObijz65}+N12$hA4Rw7ъp2"1o[t=h a! %JDz8ێG[KȚP**Ts#8t&QfVrIb<`xf)dXU#}\_m#%d-畜*ʶ WjTqa$f'6j?I1ff95DaӠM7 {3s ƣ]LâYw2[Tf%HIB5g]nC'n7^F5Sg|{2B9X=.rS8yd| iҮ n,jeCV5sDqLDÏg)]!_{6@@13 No{F3,Yy*$âf{=[o=9i=Qh?w?pfaAlzCpKP1)CtĦٓq |̻Q+A\첋~U=RM F8fۗogs+ZY\ZX.6,p9ʠW (h<?tkv;@T9;s@ʀB[lQZ95x[_MEgfE}^'`ZmUJh,R ʚ=wcoPɭI/@<-ퟤ M4!gNsg|5fV]:??R%񧔘m~ p/N2)`v[T8]ڋoJ"HByu"06*\BaP+.e@RQ3vSWx+vlUwc,G걐U65M  !`igb*8N4O3O5i?W02J'*%cIh*&z% p$>V)gS9Rd BvR [|y2n>y aQ+5 <,0):zёn;'z_ՆC#Lػau" D3冞M8jkJEx/=`\aBMuGb|DL&s4(pƏߋQ4h ( c;8w-ǀdc42JG>h+!]I>tPyDy@<jȨkcTc5Kk`|1e )7n|pv)cE7plżhs1ٍ2>(8K/Zh|{w 0;I4=ِ@#iCwџ˱. %F2y&0qv m}yNlMZ9B&>{LtikOtM .[Ϧ`N>+CWacp76fgb]u d@T̋:!vLx&.~?>~suta=&XO~g|dh/sI%gC;L$W5YB{LtRK˲@[ HDUz(&.Ykpy%آ#G}٠:ע!u^TBA`7lsJq2cDZlN=+Ŝ8V otÇjR*PBh0cu`}`cmE(rpG[ThV!m5aq Dd>pM@zNq"+.Ý ֊ϯRoHHup&H.2,F,4 mrFuJ:|yehȲfTC}+r-π:K1U: ޢf0TBLvY$ _(TMn̘mb!7mW0X`uD}>!GfN"/'- X$I' vU.$)⬬~+?Fb.{ێVа5hqɝb4a@u&%=DUXOљ YI4DdqwH d7q\\Ct7W6P W 0ڟR#vjnrUƌmT͘v,%g()vuRJx Wnj}4;٢-%'FHD9( e5-`";0*,e4vG7CѺr%38r) ۽>92E5Y:\I`EgUQ `BIgr$5a&x(:XpE';S ܠ'PT!Tfe g}8qSx +Ӗܞ2Oޟ8w'/'_>?yZ Bv$RD9X->7ߴU(P=Eީ3yQ\Iu 6gr9nVf[pFiltn^lgp 8M/[ S͒1!ϋ9 4'B3gG^NVKv'*+O2~?&^!0w>yK4|adc1g)"kZMS_ +9eéQ 0}J*08GU[ZݎDrVky-uNGW'\Kg1-Yo>M&@!hc^Y^R򂃜8 M+$]\mGL8ƆŦSnjȜ}$3uъP+eMJͻ73q˜*sS6->29xw|MV+s;}kL^ms5"A8sV%>f9t435p 묅45E!W5-KY->5"5+c"n \bا`!YdK  OcaU%9¢DMl"u8{' %4ev=g+.PL`ZD;2]9=}*{Csz+ łFImGZ0 +Ǫs|s@j01TZP$~ jܿC=7NG:΂x$7 mB1 6cx{oFC(VA=F!e)clY=?ǸzwNFo߅޺JEdNk}GAhR(F'0Ay$r8e.<,^EdDtYʵLONmarlYdY}3w?,_^6d崕V]-y䘹vq ,tHHFP3^L$M  xs&U;cKEE:0/C tKj*݌yxn 8>z(N,pQ9# |= W?{?(꭯595Hwhѭx+=WHYa :KiβQb09:+Dz~Q1P&nJ~2*}.kyE䢛>|qËLeH^=?7oO!}}Oo|*i nhT-wY; q}"Ar`ͽ /N#Uwh`Dw:ʺJ Wbm.h&(2=2`%c+<);q1XG/f")Gj9؆4@M>oH80#s g=yE;):^ugΣrS"7gLׁ|]lw|Mxe#͍NRJ6>'.d[Za4dw} yrk̛S ssV&exbã g Kl#uJ=)rl>~>̾ѳ@63,T7:opOO6rSB-} AsFwk0O+{bwW _~e~$SZb N8詂c%NP_%}"l_ 'eCDsUTv=aV3ד |Qtscop8pAy> |A[S@G|W\9¥9slxkpivCxljU[ thNY }ͱ4i*FX]qwӥtM#9rϨ8b!{02NXɽ zjn2ao- L:;0ǐۙ)|Ǥn# *IX7j,mnͱ7;{ y&?`/7N} D[4.'g^v7qh%&VtBmÀU͕#S;i2U˝K&"[ aR  s29ﺏatW>^%u&;[)qg|*j wc."O:WԜ#?} Ay8LvCWݙ8W(EP d±t\G[hR\1V`:B-a񰙽W[NZxg/?wp>A5DﮗSMdS%3Fb\{@-USb& MqstA숏4+=/1PBPg,J(4["e6C5f ߘ5#:Wu6m>ĆyCl>w#?&&7jwI?i ;E} _.EC7_v"=_1p)Ln8*+!5qDyn&D8_KTZʗB7J1t.*}x7SݥqieI`1<}h18sك\jqR]'݅q)coA4zаo~۟6.@8іB|;-ێ bF"D]ttV36|f8v'*Ѫ]׿~Ч \L\?KPon1 8 {S /5 kWMOɪd%ou'bT_f#0"{G *'ڡ;읱D@r}Ld FfըU_?ZChʚwp h)ү'o_#QIj3Șl}iߴś ީ;9~۫xOrƃcfNFH }d`fw'$.QMT6T:0Zfv BMկaa0I7v(VcSlTf6n:9*v0_uY/kpv8he؃AR\FU33PQ՚q2ɈI\f-踸P!,f*s#Y\9Jζn-qX'T/ܷ)^Ba=Ҷӥ[h WhkI']z['.LŠXRxTvE;&kןUt u&y4@p7&>f/ԁpN]eaЙ2W jTS7ӃC3YXSXيv#jE Ӌ I޵ć`j bӉ>'M&zӇ^p#!11~k7z눡9^q/ƹ綅iy˦ٿhvl '㩮fJ7 Nԍ2UϞ_WX:ErN.*氽 6g N]D|Ήj9QD scVe7 Weg0nnگfjGgDm=x2veGLw7{5]6!x͎| 13%y0l:O-{c/a EO2dJ]fYw;Ȣ{KO-0P(^9L_a"C3[9X, 6ɼW)[nޣ_Նe,U xq/.ng&AW ?  #~Ed?r{#<}p=cJ͒ꅃSֈ2пW>Ib4cC/L9Vh. G=V< P-BM{">e9KYԗiO+0_ _@2 Ƙ,H JB KGdG}適K"C;.Qُ:Tƶj P1]1 `(J5HrҽysW+m}MUB_j\Xky.K\X=ڥ.~Ѕոª6SOzn恼uݽ)[4l[ڙmɟH)YKK5crs,Rծ S/ =_L2,b6sɕy38inp:7y9sj;%:´&-_tԷ9 |JY完D=w/A+Ҩ&!W]uUϸ-X:hoH̒a@szM~<յ/*?_yϞRS|  y)f <J>uS&_\.vVaW/$&AtL%RG@N<}b/Z܌vGYwoBwG SpXzgBp:!wGN "3 5-6^ )B "鿪z.߾h%[9EsHx/׽Y% ڂK\+8u[+aZɮ 0?7쓱* R;q,6Lܳ{)S/ f6N:WpwܬG@Ӡ5F|.f5i)bi95{cբ9GLgx[1, "mNlƻs @9Fn7/MܽM|exE:򝭸ހW+9xG[ـ LjQIQ V4>3[dVFW$ ߰1i|5z:'[Ư3.sܲv!hJƂtvl`hW`ИJ:P݁|MIL o֔&\UP@ڔäSX[Gi)ۥbMLM YhQ2 8_D;1zEHzk9=s^L̀';n([pyaJIx@~ e bv7cvVm AíXx# Q6 pۿAWDe<8bF)BN/8R%0i/Ջ#QfÏfv.s.|)8#̫qRk̶n:h/l`R!-cS}J}U4QX-lw8NKIZ`߃³39/p,xk<1w\U逇Ws|iw߈aîC/>r@5^M'YȤoʪI9$N>46rEǟ;z"y =_%#[Mr?<4lzw2:K NYNj 왍:g@[*9݇ w08E;6'S]Od.*S>C=Pp+r ji3HDW+t-t[+9<2Z"xO6JϤ4l^uo4LTA>f̀6---q| rW,_™Oa-G 8+-(8ʸ(c7 (%Ҳ :QmjLd(`Z?%h:c(a(& j˿woWX2)W>ؙ+cf. 5i.YwEZn|s&$Vbc (I6_`Π))MN$aa̶22ȋ&noDz|wpҋ+M e(^@ҡ*zؠ=1PKRPY8a 9setuptools/extension.pyYmo_A($^858mgrEݑzܒ\["6Β3g6FEnjWJS6NȲN:K;o̜օm?mX5*_/Ӌ?^^#v˖\ZtَN*li~>Qiah4i#ҝ4kNr$g<?,ŭID&KhɁHPbbDZy #&~3M8@Ǭ B'NӰCQ/P=fT9q &8AF Fj#2GBZ5#ª1!j pv$JK!*̅4ENvdїۯԖbZZZs].[vx/*oނu-.ڟ^6-{c!n׈(w A i>M{5G|O63jME ]^uAINY'D6*A ũć\^Z4~׷Z ڽMzQoW+1}@`7{NFCOjU=,VaJl]7B$F2â@H^f;&էO>\|yZb J& T# Kvڈ*ƲuسZů īTuWJPy.T9kCTa/Dj.vZ"xſ B̪ BX[{CKi:#8mɲm:TahV9s,8-<=;{aAiщ@~v<$/kmm6i<sJ'dLFh49 .0WY;cOz䀂:- iwfFYTf@X7R .t.n>_ ͣxSY(Sa-9\2'# 62-?(jnvc1o/KV!T6]->hKi̓ fKd;Ih 4F8n@N b[~D~ :EĮM >sZ6Gx}918=/ZZ6D H?Fb.Be͋AVUɕZ :x(6 >@(H̓*"sL]5( Emvޒ vp܋TV3-40T|Cy oҙDơ#54*s`ʾLTg/FZhcbJD)S Yn),uȾ~NA("RRn?y\\X9)SwU*]/3bl\?)Ts7gn݉6Na}QweqãrsQ c<б3[o8+uaV~ * KHY1VNcxfӱ?3zT7Smn퐢qb%S Cfm_8ev1؆&1 |-t sm DI:~GCz)Y` ~Ȍ+;\v)ƪTNNL/>m+ D-p?2;i}u|TQ?}D3!v~o*y.d1 /V0)%ps/U9ÅgwY}r~M84iKD,ZZlvl*jP:n2v5ϑkNz{Q3oX&0{턉K{1!ԪS1V婬Tk08UBnۛͱDΖ aﮯěpO_fgP-ޮڃT֓e{ي>u,KCZ=(vB~7UvG$LkǺΤEdE7k;Rօ#k3;FwҪ6{_Tw{KҘ9vCr1FԦ9 QHF0z=R y߿>Kd+NZkY-'Q4Q;MN*[%QnSd*{A2RN˼+ qK6=̆ /x`߸qSK.بntHhƌpvL+)b'v-9R9ӤȔ/5asyw+hhML֐7BoزJ4f\1sflzlKg_Bg>'gLC[Ϳ_8qc^wO9_PKRPYisetuptools/glob.pyXKoFWL%ampI{iḘξD9n TK7<փ y+lTՋOѼct^7P/and气 ]f?gIrW2 ȫM7 üXVxLpsa(PQ$5'QK#0 ZRRV$XUf09_Pli$.m5ӥT߱JF BJ녁A0bh0nA AXUonWEd1j83x_o ؈?cxqa2*PIm|r]/@ZcY9S$K[|,`@z~+ʇe8LwLQ9d 'j +)Zr'j<t 0ɬF#Ӳ'2,S,|m)^?bҹ"L u=4g\Z5hQdTxGgp ) V)T bB=^͝G JeʘUf2܌鑤u ٪\%ylŞxއpGUu о6 ("qAULT 9"ՂfN㊄;rM(C.~Gsu&6+4jIl#i y[4*ӝ &xȀiZbu@dys%nFԀdCa2}|}IGY@(8=CHkyu&^zOx\O@1,cI+qH8\ro_ Q{k,\mʙLAm%[gE}@i_7 [Ϩ} >Yg+jٶφgftK 5x\& 8 g ^b_XP/@fe6\ǫi#Pg_gacPKRPY_[.setuptools/gui-32.exe:xSU7MRBi!B(-IH)#@k 6iRB`Æ ό|.V[u\gGf?SUqt=wwKD8 ΜĀVE}CK?tKb\0]0/|Z&{$ cKњ݊-Aڡ[ Hr -SՌJ^[ҴIH7wl^G'YFmM ɶ{z `w^ף1΢F$gɌFއJ,2d҉- wgV㖺[ZHc1m B+Ar@RI0F-ۮ =Ն@[t@$N<J:@T)| pCR!hQ0s8 j9;-7Fʬe bk6-`S7' ߜ Ω6z9ٌ Vrx]Ic*PBW2. "{MʳtHGD؉+P)!D\7ܲ B$^AhEWcر!zchuߨ|JReMdxNr #r Ǖ;|5.2r1KYYm92P]=jaP%ƒhd,m<ү<Fpݯbء)##ٜZ/Gկ;f99rr\Õ{fWp(XQ>HjuMP9QF;Jmhz(;c]^mAhE1RgçsC`x(G5ǦY14vrH@= } ?65cp7)QcτXn M*L7 c b?7"Ҧ>zj%C:'9C7 oCM‚"_'΁ &n Ra#r10)e1YaJx^y~/ȈJc?$rsq'?6Iwj>]^KE9Rv]Ν(M(/mzy=9w % ]92 j..a]hFwMq4ï/rtqc!aSbkWI/0+a趆z!LP]scw^_C-K?3v](G8:T$#"~JϊLv.ݴpGp? <m9j59S=K6>#["8:<# y(JgoȮOɮ[Wi/0|%WwpNuH\Yݽ5a“>(I|aUmгX]r:$濒ҽm QT.4+yt`90o v #bG+87rv} u/2'u3P=/A@>8:uArΘ ݌Psc` F1j+ %TǺhFS 0CX;ׂq ?p.C亗rq0n!A[2x%ɲrv~=_&̋V4^ bg|*k&c"5 @T-l8ZrcǸ  鹚aN‘epLMp I0&<=QAf1/Odm۽=w[28;go^e0/k yPqΔx2Ϭw # z,Qytgrwn= QV>¼oEAhP^)EY(IA\FbBQjhqrbٱ%c1# 앷:2hUq VŚ[8 ̂6GVt|݃&b)@ }qpŮ窍>W ?Wz*,~n8j2 gpU>f6H .s. !YeC26GQ,B{Dߖx^-z1#_qA&53B#M{y%Q!Vz.|W$L-p/tVLJg6ۅ&TRC"f!W4k=V (D=r'ioMr̀[$+@|jsLF@ן%]>}K û X^2 sظP7׍Ddħ0 /2ƝDO<jОLx%,(dh߰ m;8C[K6Ϗ_:Ȣ8#U sEaf7YFF[J2 L:42iB 7v/?ށ[C g :5{-!݃9twmQqs H8 @%c‰?/9'8f9Ll)xw=?oVŠhCRlA 3Af$B٥vbzjoOzeixoU2:h!Ecۏh_Ǟ(v,EVPS'#G,9XyxAr8.^iqx`2yg1D-/$T:)y@pH,:g8y_AآSS,eG@$i4b"ݑ\\ś(N ߧg()|#e )a,/ >OaB1 8R]Rx&jM(^H#qv&TN@%X|n+Xx>x!8pV'I=Q m=*T9zRGs/-%d!r(uPPvCyOZ/teE7(-fv1[iryUVJG0tFaj]O/iRk|thUM{lMˋ,J kOLZh>$3(d 28܇3akńJ)on-^JY=?K`O.VM̈́Wo+شyL!qd=T$::V7)P7NQyI4+f2UOQi qEyh K$ˀ*a[йSHwȀ>%uK$g&ߟHES74# Kmi-*M|CSq  f!RPB{;o>oYh-$inBx@^6N_(M{fb2⪜R!f~ d<hBNe}mhN@h68 &+J-VW5:&zzsd5=ส$ik{vyY^m6b_R`wU>af,ـ#,p*k|&J  _1衪P4Pgk /=6Y]--0~ƻ[Wc)ѩM7CObkǴ|b z\,mfklvOdՆ\j-6|R[[Se4{~Hhi% v%@`* 5<,Ua RXƶ2%3l0[`ʌO<ir5k};9}\^{\w16m޸⚎Tj!eW6l"x/;z*u\BP8*4: !h^X xlv}u AiQEKШwŤ5T(V_AOH[,00>OS-2ag ^ oyd#ʵ75{|douvE [<%E%Eb4N3vW˵A/ja&LAw~kVkq,vh%hrsȷv/üZH.t]@lU`/XL#E!ۭ뀬EߔL"JZK}TN `']7p!1Œ0;͌?5fQ!U6LMlkkJ_C1&g{ cŮ` KՅ* 2LwU,T +ʳ2@iiWoT{WN(jq9-h)n+)T6t51~6RY06Di iڅt Ŷmi]m_xn }gʃThcҁTdBJIs2._myn..wSwFu^ K%J)$MhVjkU&y[,Ֆkt]VSiOXڊ巯߽}Its>[zқte:++Wܸ֬2rV6t5cxkàaba6󍋌KZh5m}ƿ1>l|xܨ0Lͦ禓L4k4l+ʳU巕?Rxyos+ +ڊXŏ*~R|o*])Lbg%K %J~S+%s47hnTji<9 {=J vN3t{t~;{Rw\݋G7#ǺOu#/uc4BߨWo/kruza,)ѕ4 zUIOsQ?]1wŵ]|PKRPY(8setuptools/gui-64.exe; tՕOd˿(18`%b%vb;S0Ȋ_0nknZkl7%Y&ũÛt?$u?2k_̘S 7.9{)̼4k,yj% xܭ4ߝN-jmNI!Nd"P)d8x1ӨRN#$]铂dbLԤi{S |>H4: &BΨD@쳌ٟ15iW/v3GǑMI%f*IO)bFF84P[Qt#<ҕ^_0t&nx߭(t?EʖuqqU$(=S"Z tca"Z,S=Vcʷ&/rqĉ'ʲ\kbh{9eNɆ<햱 mTe0m FyMy m3m 6cv2d`)D*I ׀.~d]o-q|ٲ;d_QqrR6RD}> ԭgU싲!Qj:nFȽC'T-.*iIt'!Jr1}}tu4!v9X^'gۡtun}ܦ2cjHN;ԏT}gM: 'zM' &'n3mmNm ɽri\s>.ڣ /u9vq)U]+L=CWWwM/qˈ[vY˾uyڻbD ?OVl:$6}r`^J p}xm7lji%Yߠ>+-47E.{@[{ STK&3ԥl?F2N}B|I0uRܷ U$CtBVB\ uc#3BubO+ K}g}AN- hH` b)[?l퀪mRt \XƉ`<ٰ*4 3n89M ,v.Z[`=KUI,IIu"8~Tm:9m'9w?lx/?%T.'K;@:5 / <*goQ5wv/JU9F#cR $u~C Ò݊ېbx-d9VO*=p?A_m? kg"ԣZP͉bj鷃2|QT1u6t'`-φ7<!bTw>^Xӑ>Da82; L5%Cv"Ȣ0'lY8nY$o?[yۭ+_)iY4|gW;Ǹh?,Stz.9a>X/8:K&$ֵ_E:omg.DМ;nWjΝ\-NM:OttgkTj M}v 4dKdLV8&>V~><'x}XzN?BSFZ]x lc,q)'R !$] SbM'r K'wa ޏkV:嬕á:+s[3P_ӑ%'MѴ~-K)ODf,gLyt`Qc9Ԭg;`~6y\}c ^ol;YtYkO0?#؈^rvY`K)x*&Lh; Do K+w$BG8;bxuG 3:ȐZirHqJ]?bHn 7F"Ȏݕ:bE@!PKt^~f tϲ98`Js Х SCt9y0`ª;S :RgxB8K i˗,`9[hf[{ [pb{K\jqnOzgF6/^BSH бPʒh}' ҁ< Ƞƛsf i>a%1}tlqU ;79{`[tMrIK? LzNXS&eLKݙd+yWjkO7rkiVy2l QDxQFS2,-zv!}G.[N'w`NjJ &Zh M!'rU$9w 3^4$_~NWq9Q6r"x\l⨐/αCn%ԩ{ 8sCoXqǘw7vNF͞d6yBz_kƜq2}۰b]P0-!;OHs$ j`H x\jf|"!>Ǘ 2/3YeN|.ՙS;>+qv4tuxmڷK@JX/ \#,_ jvX6X&&%Xdx}>/zm> A#gvpezP{`]*wnK؋[D݌a*uT"mhSPl 2$7+*BB:9'IKˤY\Cxҳ$!m }P_D9J`V.ssOYѵjDŽhҖ~DojѼ P?И3 P`xvtq1wӶ_$\^#Fg.S'mde鵴 sbW[=(]6|Ɖ&<=ƙTwpݟїBy_GZmOྲྀz||]xXժ}m7pLc> |4ܑ! Esa N}z}ЗUtӈ0*`vKr%U{BjDm?Fh&}C 3#mWڠHxI?Vf(6~ˌw]uAQ4} aS=6 mPث7\& %D z_"V%٤Q({-$DK5TSNpn4Zcs[U1x$W8Wy$ƖB Vf y>L$wrN(~` 3>(@w }ҧ>'ee:^p?Nh*F)w+cJq>mO;%NRhW`9O~@T=G3+ P z{1E &ԵtBYk`&B7]NP$kbf^07Ɩm,<AO@( lf?ryyBW·cZHđ Bqݸy_LI;c`۰B]dɦ AM F1t&ET# _q\RMאk&7U3L!l֑ dt2t ٤94d:RP:s8pzBQ W]N $= FX FH!3>EtKB><]ѽ"ztT}lUYXSA^fԧ}s&у^5فf/Gm!oftXsFJ*SE27A]! ߜサPɹ)bsՐ\Hsפ;T-1,=v&ؖ!Y`ìR-ObJ&Q0U''g a3W.t}cpFq+7 qYcpgS_v]_ wc摫 mnUp 7[97<*pǷߴk[ G-Րe:X~I W> a/;KW A/$U7>>4n}!_]scRZ: m|[pq:xVxw8NGf_t}kPW_dəA./oqn`  x= 8NWp_1Զ N%s5`BBR@@Z ORZ JGW0CBG𸼞;GxOksQLpHQ]d9 kGN#x:qBӵb(1* =! 0T' 8q6ܷS`bG(ᤂTlQqc(Sz=*_iT`vd3A:x`:sY|\In?]ϢТ;!VZ{B]ƾ]c6WecK1NU g pBJ\tu|@0-~Xg>7[>ͽ\;@$K صt`m!X";u#.ȡ7jM͛`J{G. Ћ!bb?ypX+ !ܖDE/1m;Ys7Ka ;}lYh9 ΫO]p3,F('d|V5S Gpf/.+g33Te9})=ǔfԔ3rl"\]6; ڹR~2edx*™P*Vϗ\Icω| *)8<{e)ago^&8T^5n!3oh]êEeEƐh+*~EnV+6y/TU [6WhQ-"HDsJ,)2iCҀX)!WnBzxH{=V 0HAc6Ʊ͵.(b^UEPov>Xd {lnҪZ\_d\<*dT.S3f2]M]]H׮v=Xp{H{C=yX~qPKRPY A6setuptools/gui-arm64.exe[ xՕ> 3h  q4Q/`RBm /H23 ['Jl*Hm}-vj(Uvm(2t=fuar=s=ܙoMf"O4J,JQ.}b:h}-Y]n;lN 6j6خz[Y+1#-_S{v[S}>)ֲ*= `Wi=s=;){ovp[U_CܟJc1ZH馋)t\ 4 ɶ(PniL&utSN6ISi^n#+?z5&6T5)2h籱jǜGsM3O!1/t6C~9'+}K%^g\;c!3Lj$2NULloLظɤӕ3vҗBD׼egSrByJf8?b,O؇HaT(j e;6zcN)rSH_sx}df×(<>H)t9<Ĝ/\0oQ9G}J'N$6 V'l*rCV륃'%(YiTjMQا+֥߫_N)/Q(ݖB3ѺC˭F /ݩSg8ì8D1Y>:~&da9Mq>u^Z˟W)<;a/Gz&dzk 9lOհIU/Mi!)ifsߙE9݌6C,(FM4 p57L&ɘkl}98 V4S cC"W1gp{J;Y;4h4{ԮgGLgL;/WY{ %c=nSԕjBQ3+vLFΡL2н@!; =ów+T`ݲn;H'g暾o>?/~ ?nk͠pB b B ,';nS)eǠ#˔ň{t՟{tK{<{pN \Dt9}-il9Qu "H\y9L19lF4Ml1*:-j1I.h5~JFrr.W@RDiɞÕhm}}b=BŲrA#Ӱ/Ԏ<؈Л<^}^+=Kfz޿Er@D=].xxΣ,c^*jD{JC3xBYpOZx(هl?]YN|KÐ =Vc7n3ȯ(qTEa!y^s5"F~YZՁ ?I^O᡿J |+"Æ"VN-,穝Ϯ۱.S9+jdY55< 5TZ>k3$?J?ZG_Xzh|`|F}7J =ojgnru;AQlf%< L52>en13 b9S^~aPλy5ԬIg8C}(-ɛn|\ZZ<[ey|cA]s8\~O,O.Q;{Tu]o~ ݎq֣EEy X/VCF18%1LF}4P7~gfڙD<- h}/ꈥC MiOHgP5u=-zyܤCW ? /gyOO<kO |}0q?ֿ |YT>DWݮ"u 7Ci2q sH?2MC_mYSFЏ_!bmU%S2rAMEFy0vr~~Mz3 -"XSJ&JeLr/t;nWh4: )j'Ӱ/V*eP`^cmh-퇠E~viQvYv]gؓJ)ƴު"Q#XQ-QV-9}˓ȱ{}^[h|qbܮb&|Vq}gƘ1;JrJ/#gu}q{I{xM%X;د?O+jQwsL6~{*bP=23ܼqnJU#Y!W:u~^"%8[:z jt_,kuOp.:986:!aX>HvY_e%LSZW^ Y7X5r\ݘU|RBwAKWD$o]2:,e,=N>b\1:=}d1+r)dy"Fsߢ|$"Nf!ܿ֩o$y~"_G'!d첞g؋&읕-g`Qlw_Iڈqy=EԀyk/-9yf$ZyhϤ< Ձ^Z#wo~l)r:Jdb59 R%1e*Xn듗 uparpNU|gY{)wdλΰ\G3[/B5-F{P_sc\fLz}C9CUCeC{}~~kC o~Cv=CqC_ ߟ j+/$#p.I̟o9XAZB)HQߓ:|AŸJ8&aJHX"Z oSuA ) ]5qmO‡%$_K}HII?*?kub?CJ W%c H?pY)WW$ǿ'IxIr_# %,9J. oKφ?~ł~0_gw=-wl zmNjkS JҒ7iA9͚m3.8}_b~קy0Ft|ASm t-nO^`1tllLv6ۘyEiz]uv/S_>pMmּqt"/wרӅp:N*%[u} ;⍀ q*%om$nzC gq+зvB~I;K%MI\[ S?Դpĉo]4N?66|,핝iP'r=FSIPJ'5}QG(}3vqSH5WڈR΂fwqw>\"R=aMQcMOw ,|gGߧp!*@3 s2)|D{!wb1s }Hƞ|b_ڮ^.ˀ[3p-w'phq  10wq2œ!p sJ?g?Ոh-ʠ*rӂkGk#ѦUw:<>-b&w `vxBU;b4vFs]/TPj̗WhwB%ah^|7zC1S+-}Š\Q~a*(h/peh1`BϞD71G&@7`}o+Tm][w #ߔOV9"a)'sqw{q*}(ޜ9eMn\KS$ڶhr󪂲qzqP*qmqE-Dv^UЩ V_3#m#6vXU\p6G{ޖ`1 -e6=-ŸXl+@nyPv_k*Zs߽g&-09h^#/ 7h[V[+]Uyx7k[G⪂Gk@+]_V^9ʘ4./D+߰COSϑў}O>ϟߟ?PKRPY_[.setuptools/gui.exe:xSU7MRBi!B(-IH)#@k 6iRB`Æ ό|.V[u\gGf?SUqt=wwKD8 ΜĀVE}CK?tKb\0]0/|Z&{$ cKњ݊-Aڡ[ Hr -SՌJ^[ҴIH7wl^G'YFmM ɶ{z `w^ף1΢F$gɌFއJ,2d҉- wgV㖺[ZHc1m B+Ar@RI0F-ۮ =Ն@[t@$N<J:@T)| pCR!hQ0s8 j9;-7Fʬe bk6-`S7' ߜ Ω6z9ٌ Vrx]Ic*PBW2. "{MʳtHGD؉+P)!D\7ܲ B$^AhEWcر!zchuߨ|JReMdxNr #r Ǖ;|5.2r1KYYm92P]=jaP%ƒhd,m<ү<Fpݯbء)##ٜZ/Gկ;f99rr\Õ{fWp(XQ>HjuMP9QF;Jmhz(;c]^mAhE1RgçsC`x(G5ǦY14vrH@= } ?65cp7)QcτXn M*L7 c b?7"Ҧ>zj%C:'9C7 oCM‚"_'΁ &n Ra#r10)e1YaJx^y~/ȈJc?$rsq'?6Iwj>]^KE9Rv]Ν(M(/mzy=9w % ]92 j..a]hFwMq4ï/rtqc!aSbkWI/0+a趆z!LP]scw^_C-K?3v](G8:T$#"~JϊLv.ݴpGp? <m9j59S=K6>#["8:<# y(JgoȮOɮ[Wi/0|%WwpNuH\Yݽ5a“>(I|aUmгX]r:$濒ҽm QT.4+yt`90o v #bG+87rv} u/2'u3P=/A@>8:uArΘ ݌Psc` F1j+ %TǺhFS 0CX;ׂq ?p.C亗rq0n!A[2x%ɲrv~=_&̋V4^ bg|*k&c"5 @T-l8ZrcǸ  鹚aN‘epLMp I0&<=QAf1/Odm۽=w[28;go^e0/k yPqΔx2Ϭw # z,Qytgrwn= QV>¼oEAhP^)EY(IA\FbBQjhqrbٱ%c1# 앷:2hUq VŚ[8 ̂6GVt|݃&b)@ }qpŮ窍>W ?Wz*,~n8j2 gpU>f6H .s. !YeC26GQ,B{Dߖx^-z1#_qA&53B#M{y%Q!Vz.|W$L-p/tVLJg6ۅ&TRC"f!W4k=V (D=r'ioMr̀[$+@|jsLF@ן%]>}K û X^2 sظP7׍Ddħ0 /2ƝDO<jОLx%,(dh߰ m;8C[K6Ϗ_:Ȣ8#U sEaf7YFF[J2 L:42iB 7v/?ށ[C g :5{-!݃9twmQqs H8 @%c‰?/9'8f9Ll)xw=?oVŠhCRlA 3Af$B٥vbzjoOzeixoU2:h!Ecۏh_Ǟ(v,EVPS'#G,9XyxAr8.^iqx`2yg1D-/$T:)y@pH,:g8y_AآSS,eG@$i4b"ݑ\\ś(N ߧg()|#e )a,/ >OaB1 8R]Rx&jM(^H#qv&TN@%X|n+Xx>x!8pV'I=Q m=*T9zRGs/-%d!r(uPPvCyOZ/teE7(-fv1[iryUVJG0tFaj]O/iRk|thUM{lMˋ,J kOLZh>$3(d 28܇3akńJ)on-^JY=?K`O.VM̈́Wo+شyL!qd=T$::V7)P7NQyI4+f2UOQi qEyh K$ˀ*a[йSHwȀ>%uK$g&ߟHES74# Kmi-*M|CSq  f!RPB{;o>oYh-$inBx@^6N_(M{fb2⪜R!f~ d<hBNe}mhN@h68 &+J-VW5:&zzsd5=ส$ik{vyY^m6b_R`wU>af,ـ#,p*k|&J  _1衪P4Pgk /=6Y]--0~ƻ[Wc)ѩM7CObkǴ|b z\,mfklvOdՆ\j-6|R[[Se4{~Hhi% v%@`* 5<,Ua RXƶ2%3l0[`ʌO<ir5k};9}\^{\w16m޸⚎Tj!eW6l"x/;z*u\BP8*4: !h^X xlv}u AiQEKШwŤ5T(V_AOH[,00>OS-2ag ^ oyd#ʵ75{|douvE [<%E%Eb4N3vW˵A/ja&LAw~kVkq,vh%hrsȷv/üZH.t]@lU`/XL#E!ۭ뀬EߔL"JZK}TN `']7p!1Œ0;͌?5fQ!U6LMlkkJ_C1&g{ cŮ` KՅ* 2LwU,T +ʳ2@iiWoT{WN(jq9-h)n+)T6t51~6RY06Di iڅt Ŷmi]m_xn }gʃThcҁTdBJIs2._myn..wSwFu^ K%J)$MhVjkU&y[,Ֆkt]VSiOXڊ巯߽}Its>[zқte:++Wܸ֬2rV6t5cxkàaba6󍋌KZh5m}ƿ1>l|xܨ0Lͦ禓L4k4l+ʳU巕?Rxyos+ +ڊXŏ*~R|o*])Lbg%K %J~S+%s47hnTji<9 {=J vN3t{t~;{Rw\݋G7#ǺOu#/uc4BߨWo/kruza,)ѕ4 zUIOsQ?]1wŵ]|PKRPYY6jsetuptools/installer.pyXmOG_"|kP7"ʼn,%hZ!tq{5C>3tbrgcOZIv'mRFlŪSg.dԣp7IIw>{eu\Ux!'TJL95,"/r{_MLeiʖ9h4h%z γDFH`۪$W3%L AU%Ac!¬u%ՋP+ʭyJLY??%R#m&BZKI|iu'jWMZ#wDHX^(LL)<lGҒ(Tm3A ǭ&ʔ-iڗp~$'ɍKTZ.5y&%{&sLi<IJj$ kMUx%NH]s QJdVe4ՊRgGa'IlFSC5S"$%פQRby'M":a}{%(W9b+[*[ʦB1!kV [E"_CA􅼅`iwI9뗦eDf=ZB2]x/KnE^9[%ӓ_hpڍE9֊ 0 @1.L&EE Ic|3 cN,drѕRf^MgvD=\Tk_6.q9X9n3z,P9?OghZ >j>Ǥ*5>5y(],zƃ}6Q__^b,K]i឴Hw_\]{[{獮uquCP$ʨ@GOcKӣQ,CǝYX P-5dehIe!&ޯ}wwQ,!WJZ zSL`l\)2OMwL[ܦ! bx 1HhGme:i6WIqJ+1l;;AefPg,|1}Rߚf@'{'e_CXA^5R<]eTF,s̸ئ)ÙʱN(S/'h1VO,LzkGϠ= M99n8P}=nt-'-Ԫ;Þw!*f/Lv -g T:zLPo<egl^m/M&3Ya>{P+\̿Q1*o`~ 5EsSS:-pu\o$}qQWarQ h_^F8I9;Nƽ .yӔ秋G R` kjHk}0n1p:6}?7O?=8-y~_΅ ?o>X؍Ofd"v5G,wM9[VCz5Lj?\7\Z,>Uu3,Wr{_f*WɎ_PKRPYPKs,setuptools/launch.pyURn `Gr-k$SUD`:_8 fv8⯚F AW4)׃Eg@ dH@=%*|VX]<'J`ǻJFfqaQ#K4tw!xflNni'0BeHKz?O#qv$l3os96]*.H0~~5ƭ&?NKKR댖%)FіNMv JgGM-BZ#ehvhgrR褬`5c/mc~r8ߔ"# UͺhC <O^hmQ}]I~`U^ C>ď3p0Nه荔:3 bBOVPKRPY$͛0setuptools/logging.pyTM0W E\W.H`űuIbֱ+i"C߼yz_i[Fe5=0{KfY&6~VSn6V2Ǣ9PioSY/76`1f6R"xK*p-WayN!NUC N:'i,hI SrCGe%#@5F|EwJB3ᑭNB} (Z(/2yy继H Ottr`|g9 q-'r3.b/*.U<|ڈ:ܗ-4Qa}eZ09L?dl̤C 0f4Ⱥ7sRt;3J]mowpMpG4wFaz`yݡذ:,hO3d?-sL](hj$+"_5:x-{.T0tظ~a;ԆG5s;]XO3CI/7w˯NJ :  PKRPYvcsetuptools/modified.pymQ boH7$#b)E?rZ~g>C+T)V(Q週+zZϽ4Ÿ&Χ^q7Kҫ?EJǍ;ܨOnkqk0'amv4ŸJ(* v7I\UU?tlWu#>]w Vc\)Ʈ;oC:t[y^4hwQ[лfx oZ>G\I!/Zvu֔;GA`- ~ ;#!Ja{2>A/cpkb 1z70~t(Hul0 RSe5wh"p[; (9?[5 Az'Ծ ڸBBh{!h 0B]o6öٙnӟ{q( `ͷ|}sK(D>*Ţߘ e\Lbx(9!ػ-5fu -ڧA\\"{I0JJ{w"DZED,A^ljjęQ"R X={Gx~'ʬK-)r&83 C *ٙhcKqܤu~lbk"ϕ(bn̦Йi/K Flδ*Yp4~VMr4їr0|rNz=+{hv5vH"!a+R+W5\b\,ɭƖhs++#C: sֱ_kUfܮCeApnhޘ#YL2!ہf垗UNQO31<&G3KMS~fLgV`Yx]BzvmKHͥ<5/H| l&%B6N8EO N8qA~e%Zk.Yơ} @>%q=::tL- >|0ۻOfǢ¼i=smAp Ae|e@)ȼ6 .@"ڌJ:'il<gC]D%^c,Cb,;ʃNw&AeI:=u,H&SXkQQ' g -g z D/ aXװvXM1JN!44*i,Z@aKBZMg5eySXNwvΖ{V%(FovД.a~DvQyQӁJg96[&d5qwNYV&Qʅ"f=s@ٯaMɖi2Dne$+dsvu9aK 7w!pC\HM@ʋ`. E"APP,uQ' ߱ *psRƑf8"t2C{M]MT Wp/%1O AE+Zc$hg0D4DUŸ $qfŦ ᱼ#UdHFzJ{|UnMT9ag@O [Jott9OlϜAD PG{ĎbLYA"GJog|%;c"9;l {9P\iտ C;Y◫(k3`BPKlI#< ܊SƮ%($qZ2><98*w{4aP q | 20}?JLJ);.d Ns`!A4YUӫO*?.Ca1Rc(-5e|GWwBn1Z0D'~ckqʦ倭?`8B$(~=col\'JEA3:/ #H+?|pSچ5!sW"鮩.ZRU|ĈTNunݣ#wQ簲~+#J.}eے5.6H Xl56fI8Q+MXsfM:UsߥXf{&fU-L6,ǣ"sufj2{Y=gTHfﵽ_WDRarEe" ,V$pr)BlhZoe<M>!31y 9hW4QƕL;hE:JͭOKUD6dq# 6O_? sTg  ̇zD՞-w:iL[ ?'#fZaH5)H{Yp <_E,`wp9,;Q3R{vQX3D̼X= y NCbSWx㞭XxFT&ыru@#~Tq>I_& KXIx{v&9z;źC/ 3} ib~#?њ;Fp=)Nj*E9mz]M(ѝGY0c0hZ[XA\dR:_f Y4_̢iN(;s$.Nd,TȁB~ (e\nJg] ɀZfO]9<$(p/gdVV% +D>4 O r(` ,<-&:POu5<4e۹0TWSfD| *kCNY9&?y zx|{Ko5vXiqs·MRp@U_h4DN%tJObW}@y|l]UXJlU54 @V`1>FX7R"]R!FdN25LAȭОa&Q$Anu.K[]< MFE5$BT34?sZ}?J7!Z=iDͷY7Jtnt+,Q,FU}jƖUe n悼J ΰ$  r :VvIAi 6m@϶o#DmR80oGRhp 5| v\ 7lkolv-Ϧ_nhvM;$v[6o2onm@lՁnE9 -,"~,@3ZN,Q笰G']ߔ΢kb֜|:LwO[8yq,v:[]2hV&\^VShjRH.klYWӤB́ۊfjSğp}>U/ְB#3+'ΐ5m 2ى =&$JPxw޾cfO7j)W9?x]XiD١eȤA L,l,0*&3b&}Xe[9,ZVfec/GV` B;mpO1~305Oa~x'\z45D4RJyk]ِj;M(+JëJ 6 ]DQJXXjkgOgĩ'b[+4ZL9W`Y xRH,ԭj\!)sYU tZ(z c7"tR>fj:8P·Uve Tc// Dt"K8!T\q9ʁN۾^k քL@?ֹ ?]>xаپRjRf_ 0bxa ;}u> fFIj c4 D^i^l;̳7<~hyΎ;#O $4+)X.÷#i#RfS$VymU$?xPA ٚTH6, G8BqX1Ly(-nZ՞!r GhnLBs5ML&vPĜ=&WVlxH(櫾m9>²QT3>a%^lVKLsM\f^Mhm挕"{zu=756mtɜéO)si8\>RI[ijjzMSE[p_)/,-$=ao4L AVPR3Qi‚C\"S>IG"Xfz5EfVth#da<8; =B%j/P](mꋚ5AIqܮ!c~S0[Nž-x68e" cs ﲌ/㨰g"w.Bˏ ec d2]eTQ;.8_3o=g)'U0^F %NaXvɿj-~[y/2m_%nu mغ䐛M|.u|į\t߄\(c sKqZ.)fWǛ<ɢ ,gwqk_”ʃbP]UD0.,B9(zY]e ߥLJ}ܧ@@}@\QY&9pnm}{ahQbRؾdajVkũ'> D^R*?.pC[CҌ^IRp #W_[*< 텊!( .{°тҔ Kn oȽQ,*h"j;tܒ%m>.R V}rL~)\橯&@K`[  gƀ0j@Bt+/."( f!X[p*`V:֧0ǣ(>`8 *o߿!5+`cSѧ,tXۙ-MEgiao[ӘZi7T*k] 3~{#m\dvrKx5x,~Ml]Z"%`(v:hy]-UU+ٌ#7^8Xv`E *-{ ծUJnyy" ԊC 4\Jq0m}lYWa=YqAQ`K֚#MMAÚvv4_]4(V ]J en|@.Չ<(e&R"bC9 yYoF?Y 1P*@8Lܒ 4TtJZ!&YŤѯd(⇆8}: >m8Wp2;)',3+Gh'/p1Knj8S4OM<4쬉-^Ran#a9*뵴g>iYV>\Px<|ކ},|ƎQIRr?еóἝWM7EO J%CD vV0p-5hvol;h"ihc/9ߣJPXF|m?\]E{ͻ-հD"t+jzˆN#74R~g74uU5aOHW=opD  p'HP@Jߒ=ο3ltحSxkRq7BQ9|2d=r6+ $,7T\o4|߭⠬r)ե"(>izjZ7ZA3=y+sbvRVsJ\#X֫RU'1 +^>Hm\j]Fu@¨wN ZcU>. m#unsf1@1>)$ݜ$J0˪=ϑiH6]kUaz34ye݈KhPղI+~q @bGd]S^+?5֩ -J7zj7܆v6u6.kދt&tv'!ᨚhLpd4߇)vGG^|*R-_QYrV|F^#۪z<M6+f8 UQp }} fAYpcۏ^aEDu* hx|U?4vW5p7P0Q)iN3-'"'v=OW< `2TӇ֟d"Y+0Y.s ]z,kY¸#㭙%יO PKRPY߶"S setuptools/namespaces.pyV]s&}_(4 tәM0XBP@qd;ξ.}hz;@ݮGֽHxvzj󃗝.;{/:Ji}R !n;]'rn W5Pm#Z$SZ8Dג$?pH^xюNfl>dVGD0Қ< W Z QnP 3 Ej5.ڣWTT<WpWnR5q@G@ " e $ɕ`GK|v/i{B/AuqG ˫OqڭG3zzfVkO C,YNނcci|Jq\W`*rу5o :2Ƈ΃ߐb-|(uFI.U#,m+=ezf#m(46QdlGڢ碊ţDn@BaчzƇjPOkd _*. ^2VV\V ؅0z3j062H3ka\3`z-`^/>jaxk[<7:P YIYyH/]t9QE㫆$< C)6]DEPkCO mYtPfoD 5ʪ p?,\ pi5*>pz*'7[9`*`v7ɬˇR-+*(q&<.9l,<~Mx4@:720>/G@P@kp=+Q ȴ9fϿƄK[a`&,8/vWxwPKRPY,-setuptools/package_index.py={FShJ[yvSLK!nXE\IN0yS;[ZbK8s`0xyKK:*K晗VeQ%i^Σ`/WUzI}u_V,jl4"T?ehZYGyYVUVg[Xj2T\4kTf3~[gM77+I;]xH['eS$m&ޮ)-_ɪwf/^$,=[l_/:ոeuCqv\YPdzګwΚj]Øe`σ^5+M[0U)*Wy]KO~t2Sb˪^&E!WIg41Zu$,.mO@[ųȸHxxYVHGif1B^V|÷ ߞy[d?/VoO)¸YT2rMρ`0d4|t+h) O6>^X|<~ O|1w׳o|j6^~8/^!_AԬ ½8)ctN#_t|V{)'ꮚxV1HyٴU^˯eΨz|Og?BG_v*tM 2%S'զ]T&^&O5H/[hڌfȇ-O,9?~>~˻ F#A^ΪphK4 N0z4l0B ԥ);X$s*f%)14^f4M@Ez44֠ eCZ3@N=x0T-1tfӚR5-@9\mC3xQVjȼ({y ]l F#`Y8hRRԮ/ϸ(+WcG~*[Pv-@:?NUV>`eߎÓ}dt >{d~uCnVbLJЏς `>UC|.EZ V=4iN`r `&57J+ N;%% $jzGۺj[?$ͽyc1[E<ʬv4n~Wkޮcݿ{9j'>-ìIńtT y&4i1%qgES2W] k@|>  %BFq$ *~#-i2ܞ\!Nv3M"V,r^ټcT~[u^G,i6i1e  #xԫJդ;|dMSb80?AW@+H74gH#ʹW|]=?apn:N0Nv{(n1;|o] V&Ftɤ769>yʱՠ{EE 3\~ake~g:꼅YDY D0Hһ ;"휧UZBzsd+^"9g얒CR+W`;p+Y۬i9qH ز4qecx}$Cyӓm*<=v2IܔHYgCJ?Pn9l'["U %vhCAj"2$&w=&ۅWIqiuR=26#ogjl7+;A2^ 1.l'mSfQajS V`+3jA %0dkxs6"AEhϲ_Cl+ciu&_mަo25~~|2 MpX,HJGhwÞEXWP3Nz#zC1G%D}@V/}Ɵn( B󼍔8I9n@ mGM@R]x m0 Lnw0&갯ݫ'0ѿ\4z~[_N̗kGZ2YDv08GQ'+ )41 u'%blc/Cu2pj,-!329MPي+5DX|nRa{5~ {N+-OC=}Yx8<:4_t0{8Ra{^@܏g?=d|ht<9W2j{{YsDF1lJuqfV4OIE݀=QXbӃ~WAH ?0.8ک1M&ke "꩚ 'IA82|92-Mɠ9V 6%\2Ra>=4IY#1 ?+G5@lyF@p{#j,A7`#CZE,vJiDZ#3Av̹-=u>M g5,=tu5by(m=J FI_'xg*iTSĈF QAM(*עds,Qk~ٞEr;s|||59+pwgW`Zgd4U4j,18lm <.1\ϵ DcH~̮U2^0% HcQ1 iZNGi6 `S #feCnnfg74mwl)`$ )Μ6!nF^w YS0[5͒Bt/(p NBȶkxd94):$E֐O X[1ZmRH`̴998XmVyT&Af]zQ5m3аI|."cT=31m)(g 6O0lPzE֊agvZ&F 'Do:-ˡzQbkO߃΂AAsMe ϠŪN[(.UwVka"R[P+MI*a%yI%Fz.~\ۓE=KbQe(X+(aNX ?(MN 6F+adelڢdF[ إQ!w0)cjiө~C x0l*> tKӥzDkM0+]b:ˀrH ]6+jAW]FY ŮNGH/QbXNn#Cv"BHMCz{aU-ۡ=]lXM KC8@"hsHqMLX7&20I贽-n'm}o*hiS\eȼ]SF+xIWYyN.S=KML2(""uBFnF( F̈'AEFoKݬmlupJ1Et֌ ;Ɠm MBhǘn LJ;,dRۛRa`ԛ>/%{Iu\նT:4Bp1oj y}zX&/ZeAj<(xkKq+}1 <ZT<_ƫ/P TrJHw!84`j^o.wm2!h,d>Ųhf'Daw #k(]i^FC;1 ! үfHm}&2Eeӣ?oN_={AFJ181'Ef9(UJe#uj/z7259Wӏ& >#]R-*>tj#=H,N47m $ E@@ t"U)nrӌ4>n*cдc,6w,#|j?.j֗T$4''w__4q =zОcC,VFQұ1 g&|D6N;40-):F6-(Qi43x\P1`,Ļ"ڳa-Ո Ţhtֱm7Uy(SB`lwҿ^Ab`Pc=V6~3@+oPM¶nʻlO h뒱(b Ll3OEI/ ԕ FE%!#141IN`F͉`!qe ȀYt =TФY|)ǷcVl..8KfjlRݘEL I7wp11,m350F-pX6{V2OV)'5Y34jKL\a;bWQ/" 10|*ڬ4 biAfwO62)VlՋ uIvi;tim'S ț|oym+_, 9:ٞo cy34ZʞGi] ɯ(s&4JNYcN!\E+!@k5ZH plU8sYcb}\c/dzj7au='ž-b yKpLVv#Җk BGu5KVbS29kGiGlKOD[vަk5PY4)wQNҁ kU#h"鏒n[qr9fq_ ﲢ@A|~LSG3`H3f E[CVvZcHD8wJWF Slݑ~7*͒nf ã߹%p*pmB[e#`2,ۋ ԑƬyd虡IS(>VAXe.]Ipg*.pחغ0xm m> ( ű1;3o] aӢŏ3cʤڒw:{/i5\_F >hO;k9M}#2}ǏN|E& bqE4KиyZiOlROlyq%Ѥ]Fİ ;T,$ήVYkaz=]b0Γ,%`Fr޶&‡=(Sm~Dži J'RpuNOdOT^Af~+ݣ!vD1~Milo}VO"22No6ey2[ >?Vq;$c,c#Gܠ8pk=i`F_Bti)OEq^~=}sgUWSϮpߩ'68VpHprñ[On5טכ7EjtjL9Fx>9iwF˝^u,p5˙#/ME=A6t4zG*qGc`A)8M$ R%˥o|BC*<<-! (`жP3L^3Uz ă1.+b:4ߎze0JNnjOV}O "XGV2!e<'RGޚytGo7(kC7"S1-J3bsfGѧX14U=_4i6f߶FG]D cy ; @\k՛A?\dHSSj<'q6w⚴o7HEY&)!GBGYD b-*ކovF&"uK[;[C騴-_O}ٸ3.aQ4Ew0ֹ7Tvݱ?Uٞ.N){])}[\QPMy kZ:%J 8Q8%QOKQ(g18x{E]eΗ%d{R\'pishEӑ13E24/6?~Nv9Rn|OsNOs> 0|S {EJMrSg | -qSU n@iPJ5UVD8tubiNwنCzO7mҮ @ *<`b52匼T: wТ5p#? o)10oE1nG9`(Ke)'JR;8[ ƂES^#S$`b 0D"?ԏ޾G˱m XFv͕̉'. cxc߸ Wtw]o_p C)NLB5ۑh`EE ϗC*UsI=`$'t޿ucTf-EI-).MAy SqڟœSÖ ߅3ճkXXGOUJc~{:yYꞱmqV7OJ Mݳϥ:On_;Ns,w<;!]=_Dwm|6+]@ \弖0ë^B8zTn}|_/_Buςρ^6j^u1'}}Zg?VҘ +G1(@rԸM@;k$a]poUtLg6~gGqPcN)P+=C$lJxU?B06^IhƵ,/}߰P"5Fml1E5s"T}荭թ6E"n;boo;si: wd{ uՔ $4_&WYOY})Kj(S4,<_mzod4{4z:~::omtOa? 9dAtPPvxA6%V_]'zZTV2=Iɷ(:g9atK}ʷm]jN?.ncU_4l!ETOk`̐p"TwY2S:G_z 2Vd=RTDC"plcsWLK;&*[6qva /:رn꽣i)%CƵ"v!]uJX{\հx$;_<ţN}__嗋_W} ]"tDi cxq/C ݵr3B{C \}xhѡ*?]aHMw2gJ1~msuu>fz,ڊA#Ue0WE1B#yj`eylC@[)op1nm5eDzK`MSuFOR/PgWE!G9Q0sV&Ij|.N.lj4RӏQцz/=6KOdA~EZ ?C7"0Nl;?+ZtQm~m.WS*UN+m U -^sZ-@<17rB(e6MpF0ǽ]+uSMsvw { L>o9ԝ,źa4[eSS @n7 S$֣좹ņVrX;KV"Y -)#5MzwLZG:1l\:dxه%V[l\v44eG?g7T59 *ݳئW"(8s V XW8Wlo;eZy*(Y Ikmǂ̐P.솞+MM\U?+}Oet18cH 6^(nŎ=QnE"%.0/mHnmR9ᮂTM7'=">QܦLyB'{x:J_Ow .Y5'I,gB6Ϩ-eUJ W-xo0J+V CNg ͟PQ7a 3@@~}'^՘{:8Eœ!V Ǻ{(CA]yl*0rlw _4+F4"eGێwY)fHX׳U6"'~A ]b=@{pI1CoZj*w@T.'E˚`e<= Ρcƍ阝gѣ9L r8/B'ƾjvd tZ? hXr*Haڬ鴕q gXL屘cl ^A16k(:68lLb\VM-I؞D_ "] s6wX ~rV]dQ.Kf"_E{1 1W1LX$:!%]U9Y?m+R Qa?=Ϟt0+ ,7Β^!Du; 6㔭!.92b]lWH4Kf."<8W;U"pKhZ;nJdL̡cjʩá7xC{vJeo Rמ?+`bF4DwUO^&GRV½PKRPY+8setuptools/sandbox.pyko~*0 ik^qz="WO%}{Wc9;;]ecY^,cmdx]7ʦV[eՕ0`~M݉]UȺi*RvBFM+$~'mo+aIMH'v@lLtV(KX|{yY:.γ?oXle. wLnRu}WV*R6A8 xn.U+M2|q:ci{6MLmT174ĸbY{ڃ,o7)+oFk)˛R)5T73Q)WigD~ݨ;q3@U5<ďL2Db,EͲWX9'/Vty]'K=G?˦"㲯Q} 7@a! 9HoȒV͊Wjɪ&ϳM-ONN$~Wb'jmY30&049FufnrYʝV$ !~?Ѓ\ӑ7֘1G9~MpH& _;VH{qyOP0Vק7EN a*ѣN<̡Ukc+k1$qm~Z!X0`!j MSo)7. (6`]Z"t;0W%<͚ٕE(鈘ANp#jS$IoE7* 0ov(}'RCs_Uc.Z!6m ǀPie#$s3Yn{ ]i%L,|T/QpG=fGTpXRu@8M&fW @){1g9!=K2_YO*UN_*&E1XcȞ|@GH. (DS)Q&506M1El29M )T{*(L`\ SQdh XאBr orϡj΅3+.("yL֢GDז8/7_wo * 4k<`ߐ cZ/25lk /b'\MT1VHBG7QY!HM-߳"D3*} u36ڲf`f>Akֆ+\XK[, sw@qHD@+!B,&|fŽmAkry[jNf4 lu7jŀfӬߊx6| oSlH|0 ƭMs.`m;uo4!9e'" f2sPͧx8E/r4pR70V>{v '=k-gx?;JY O~ieڂ!-֚ed Fd{P'c8[[[fJȔaOuF:sIG['KvR?aG_ @¢߾WO1N+̎mT+q asT bd(@(ek-M%5(Z n1eD>N`ćk Ct 2jӸc{tcY,J ϓ`A+>j݅&8=1;qOt.;z_|`hgLd,򼘌[)NM8vaN"mKׅ 5׺ ic|hQ$ǸD.}p> }8^W`9PQQt/ы !ǵ(~3Qbm\X5P H 0`9p=P&߸O"±CG@޴G&_Bi)(`:_4<^<4\m`U-+(iɤjVb/*T>=LٯٗγϿxc@L'z J,f!g>:&ZJ (/ T8zɻwo._}y /..߾///_\凷/Ż_r |A":cP(cQ (*%QJ,&{kE 6!$}H)6}}ïj|oEL5&)'ĠCK)eڄF\8H[UtT _CC".?!qrqx]x_:+h;~@*|[/v&턝#jen(NV?xEH2R.*% -3"z2 Z$4Ç' $3,a>s5c77i6:;`(<>JM!'h)ʻOlh1/PKRPYsetuptools/script (dev).tmpl= 0 " 6`a!੔[k۩o͜B/ ʢdաi9kvޒBE9m@!=' ۿw=X-*o&3|u47\% }lyЃ4E H]@ 6&1~!&_PKRPY3jsetuptools/script.tmplSVpu q v RP(.HM,22 JsS5R K3Rl♹E%@UEɩzEyS4*PKRPY+m setuptools/unicode_utils.pyVn6+!v^"6@6 6 =Y4٥H-Iuΐ-mV]lÙ73o(XnZRxTP]E#C UX{kI4 S7o,O?w+a zD6&X,FFI׏ZC%g㰄wInqH1q yRh9fZ(7O')ᄷQ^q:w:zmF>xxۇ ߕ#jr*:<`*6 T"%5/ (seLhsX-D`;?V~r[ך*7#T-wYx7#0z3Хm.: zV^_ڴߠ iSfŤ".d";OeRFR2K Z]  i) E7L&eHgE9ھ_*\ܨ1Ja6ۀ`]n.oy(M΁EƧ,Z'Qd۸|To*~W@B(|MD(!SqR9T*^NKEba)^ɚ-P8BjTIQ(Bژc!}ӠNa`6A`AuUhz'0KKcŢc![wgjyHa-}tqv`eƤ!E*WjTHK9زQC5_0o}P'"Z0/yWH,0eiIď+P5R$ҔSV(v8opBbXH/L$)#zt2<{|~4Z6_+r_K3rz}'ӧ˛^데͑E-d$rD9K*svVv`yvFSҨ<;qwiqG-@.ς1R\kݹaQ%QrUmYK2\rCLGR|4T,83?/>^@*^ZRZPS_nZf]_ΕZZP Z PKRPYѾsetuptools/warnings.pyWmOH_1p\OTR\&UUA$[lD9ͬױtCb<;;K|?Wr)RSELk4OaMU)3 L.5@Ri#sH25H ̂0\j`IX[U$To296{8zt18|M&0q*pm4"R)3*9, 2|BxVJ8R*aFB{[yj._kp#r{# ]4IFԛߙ[fW)/[dWe=/> ba]&X3O'.{hǵ^~wyXSn=l6<8m\tB;?(i^Ǹ9BpTXER,djR> 7$7/sV` r 2NT<ƿ?%e< U*{^ư&Kb9ݽA/M{jl|JE&+!Xb*XFV2KU\ԑrUH}^g*QDO8{jNenYaI(QyA-bdGLЄ6D($kRsjVY?kPddVA.z!,y&<赬b–m-pSM#z{MN=S2˾\5׉m!}*I1v-6t G&ZayR$2OY߷ZL3c||\l@9xf_Vބӽ}+YAC8T .) jPs?SCJ)$8-Jd[ePH$y%gFO2~XB/|X_f6NԏWu-HkWJ*qz~/K "8K{dO6Emn"хqe.?mSR3\~C"^nN=SުVKKl;;C[m7iQ[b sw\)VXNH{JdeV4\kF5҃`'w ;X91A 蘥`XJQN&/2t|T7dkFWSj@K4/92L!Q՝D}|DP )W޽lOkgk;#2 ŝ2;{5xG7]חM9 a2yjdcY,8uKQ{KIsl: Ǘl /q_Ƨ՟1C;\ rdm΁oTI^=_PKRPY@s= !setuptools/wheel.pyYm6_A8HjD{\tqҠ6He3+K*IH$Ioݕ>3="mZj\. qgՕw[LCVR kӽh QŢ4,f;Qf;E:?iZ-ʎ(cU]➧;1 Jԕ>24RԽW\5H?S&)*m{Π~e.UQwe+r+俷Br-XXvrd9,ߤBӂTqLPӡ;ӦdaxfSzurCT# YɫǍ?L~K|\۷sœpıymEYjϽY1’v_XYu8}y٬ =0 TWoRM0f4zRu+3<+ z8Dc"`yɝp{. *8HV`¶"XnUeeSTH ATǝHӱJ2XV$)8!ff vW6T5NcyՂ b$I>]TxhķqPbHB ˹Ңbb5jM#|0Kk;yeٯo/9چ݌Ҫod.aJA5C 8G.lǥ)M}F&Э%_Po8B#ȑӗ,9 fHYb7hk\R%d%|}e=屷(x[1;J3Xz`@W, lZh7q֧ FX2뷬lFZƑn`-0<ycJ22^L$ɺmr80&25Z:? sd ?an;AƵ=ڞdlön04-h;w)#%)hqk8K50^H/P*&k%\d 0}ɬ Ɋß/9SG! s#mfcVЙ`z3WV uIs8"ME9?ya>~aoS'*|dsƑ9&BzP >6ؚG+19 aD3 :< `s Ԟ[>ced.G36QL+HK0.d醲~,~W-3'i$>C*rB,Ab@3zi˓. 5G+:;VaϜjF #ut|_)jJjn:m3;[SͰC`L;~BK6%=RwIg#.ƍzyR\iKbE̒SZh%xnwO%2'U]0R&eעɲi08AQğoPKRPY.O> "setuptools/_distutils/_modified.pyVM@ WX$A\8QTNąZB[o2ihfB)=i"zf3ir0BZhwuY&Qݤuo m1:]Vأ6U:%l\h3MN=%􎏲,kEJ)L#67JI'26PzS$:qA+xs}oSG&L aЭhʴgpGTѵμ'_{3 i}Tpm55it@(-fz:udq;l8Ѝ8eA;!iʖ= <(͉G#'] 0^ I;p: ;Bҳw[vFV?cI YjR^iR(99.{l$\cj%eVNo-ڀVéEl h:!k1r"X…n ;.qgx BWݨe_4p,XX/_7~= v_3ŵL!E'$v8w4{lq?K%evԞ-j@`D]rAn~_!%q(~8#Bc~O㧜~'N"4So(4zZ@4T=G2d<(o[,!^pFдAmr4l!lhM^Qڸhzpg&0oL*G[$56A 48AF H9~V`ãhpܚqra\78#xG^7㝔LJļiVG@ښ5& E~Ğ_!FYK_[.!M/|JM\Æ ɵ#UZU1MR__$aKx(]$pu* PKRPY^?>Q&setuptools/_distutils/_msvccompiler.py-x[2?rʳL#Yxex;o<Dw ' 8-4rY>@r7˳%WE%UHi:=?>Jt!JsPj>aCj9b;aW) H;ַZ}q^x _)@Cjz^gGy!ne_C~o؞bwO|3W?M5,wA`7/:"I/|EeOM1ɧ| oC*91 ؋/qJOx#gPyQ)|H{5<hL˺1shO 4-1M'Ik#uQo$-}X`5q3ypm3&{TMLxXx\Ar' DGŰ(%YP׃AkBOIyg7Ӓ:*{շBbd7dsMr&+yV892æ xJ;.ʤ@-Z,@`=~+>$C($AECؑ|53`(}tQ/80fgA(mٜ'!z a BͶjS~F@Qqwt|nP<`4Lx{qX83gշ;GI% 6r87M'Qc%0"Ə>QY%KzwM&x Juz៟Nʼnvx:`AIO#A;̸wKA>+[O[7DfعeUPbuJ-U,K t8bջHEJ5:E1eF2/4.kw eB2,7%q$ 4(3 8e YmNGJGuf)P@ƒ+ ڰN"|R4maC^  ` 9xR3bⶊftӧy*"`}x\鼌ł=PYdeEB%SGHMn @rzYuVԃ.Vې ԲݹNEGj?M  "kHX 3'K~ k\Ml_|ѤEnBeElk ZTiC:hG@ %I 2KƬJ|0Ij@XJrܿEh ̆O!{ (y꯰@F+޽ RMWX T!NQ^D[ SH)J[C@l)TK $fҒ쿑HK9~:ѠR|ιD{ hu Hl!ܧRJzW Ees$:9X@AR$Rԛ]~\V!t+F16:B\ [%Jܪ43+)!g@o!HTy&Fq5%crB&T B,DdtC$"7j%d > \eE'*2#Fz >3g4B#D>:+J`MZlpopU@یZ! )5F5dXeJ2FUSH1^ a\]5T]\Iw[1iKf[êއ 'LLEU4ExnOL 5YKPe² aQ|+x@\*SyhXϘ,P!@;݀N7-LN*ðJ TEVvV< QcאAҕfI6P wN( {wD>L\:ӧ;BK2擨t|ngjB,MBj7MYD~M'.v?P۞Z$RA:ʕ|ubnGQ(}w_m=|a-ԥQËX|3r*Pr>՟!n$=ET'ĺ| ^KĵZ a\Y.~'PZ~˼v͓8EmEC{L(UT|bE^yVlyMλı 7eo4 m zќ0mIW* 04/UưƧ:҄Ɗu|d|c;ըck+֏6x3wʣKg,V>(|6:ޢ~rk-U஗4.q<&3P?S< ]'NE{Dǜ4a}-s,2]Jk9kϰ4$z-V"u+؞nE1fˆ'`c !0]>hN_*74*6Ѡ[SZڑR}2Kp PR_rlc{)~V^pHŌn(P^^0:@>v2þ5Z !lO(!+Q"hk[ګϜ:{Wf=63;xr]B1+K3&0]m[4@ŊUƽ7>Î$uG)֖|lf2W#[~}['%</!\3R3l^U㒫&VI?>o}#kc @:߫8Sk'AK-<4ƕ<<6WZf`$\^(MEؒPjj?3 .@ǥN{Wa_ e`TtX斁Ք?D+%l;=d,R`r5*Q1p[V+m2R} m"N:7]uu?0;,Y򟭻PH|jt4] VzZ2ܯhhʰs#}4XF2=];Xw7;oV_E^`JE^ݞIΕ?ng<ΔaC&t˱6SpmT ZZ:N2k4Wqٙ|zrvKe͒ *Z.kwth$_ԛBp[0M%+uQtX"R"{S `UyO_!PPHt [W_ڰR'v\Cf!l(A5stps̕5 U u8x6x t wH:o%PBNLQ-Nq+^64XUGI ?otvM+k^sFo%mĎd&%Ӹw2JQ fg{sھ[A=)SbK6 eym'>FkF8 7oMI22\!H;TCzjϸx_.ALڗ j>ʹхP ǓoQߌPA)֛[Eİ:,_WfU*ة~-2:A˵@"`D_r7Lys5DMs%ބ _L/XR ۀVa`YL<7CV"q4`,ᄄ; wsPxw?0bۖ:mbU.%έ-)3dy#68'xxT4AE-ǨdTU. =%* GiH9'HAZCܦ)~K1k">0n/(@~Ys_qqAv} Too^ap9>\PzqRb :|<@l گ*[~JmIkq즃o:b!yxf.e]PKRPYW %setuptools/_distutils/archive_util.pyYoF_eq *D۷:C.qPkEVREܥe9ff?(Z$r?~3;;ߊJZV*]wbo-}kԊMNp-5Y)+XyUAfp>j:͚ lK(f3kiTf;\|l3qV+캦3<[7feXG;ZȎNfvۖ덝'{=L|_U0MK}BβxP gh Bl ˵,Y 299|݉_o.{(dnP4fR~DM@n4 fcR>LD7%sy\)ߊބ֬Kh>!ٵ,12w[5J,J]EwXv}5Zt $mIp!mi"e)yc.3Ď8]4[ f 8H)h?DppȠC#Ġ,9R0 ŀAZKKj'H@e3vU}]s' Z<}׉ZJh{ \X^ÖmexE $->epb/]@-0vƉb5=%QFE䗁Q~Q1J-S2Fv2`bxqa.~8~Z2ۑǑb/HHSɐLÅSƏp_k&ArL|D%vt% ;ݺ9g$ox?mA%iT^KI | v`'PBԽ "B&R4,FOW}N1q@%&t'#;NB(0_vonƧ-yۅY u܅; \"Z&DyDUA85$ d]6IړC@PDlzMm7QRf M0 cLkN#3T{zW,vls vo1.9GBZ(΅iE=9+?9|T-vƋ"ݒh}.g# &B&ØkdC=h^͟O"D {*Z3(1P!"{Ϯ)zLj_U"e&+WhWzSup`_ ͔@3t )p14( ύGT6PT1:(bŲ#g 7?h"VtT)T D* GyfI sVT @ ϭ3Db=!e[#r;!-ϊɥOyLkV4i6Mb`/L@QS#'汀#ڈL nHQ6gb)M  37 5Bwt0-Å=^~tƤ ̱.x2`u*X||0L2 ׿w: us2PL~߅lߢ=Yfģ=DǸz|sW/ߜण}NLyz}&~pzJD˾22t%~e1ZE d7fidPHs"ms'W:hHtn&@ـZתP*{^m=QK_iz93xV:_&/x=q69O*ʀԿ\ J ګ?]q|^͗Pase2g7P42)D{AP:͉g:R#y&% hdN_?d*$L a>ڬ:߈|t6kӎɉ;q-SD4)]5T/6aT kI`4=Z>,)4;sjY[)@O<&[{fyFC tGCG(b};: yVN=vu/T+rYd&mrl y Fmޒل42M|~F;zo0Gǻ.QQDI\qe0oN6M^2)2ՇV攳߲V F' =d@ل0h%/MDx L%Jy [ّ&.F^@e@(6?\nOtvѦ ?Nypm豴|_;W ]BsIa~ kd(tn't|(4HglLQ풁g'դ RMmZQՒol{u\bMGZS?q_K,G>+G( 68Hַ$\ " )q)ƪIͺ v70MgUxe&:-OUhOPKRPYSsf4"setuptools/_distutils/ccompiler.py}sƱ+eK-WSWyz-َɖ+_)5%ab PKݻ=3====$/neXͶ(]stSy6O*.ڮV]r.YY&U%[?\RTk놞<.C**Թ+lKVknu=:Z75nYQVdgeY_jU€ur}U,/z&y,qFbsͺ+y隦n|Q?Ư՜x|W7?Y8ܘw/z&Xãx;ħҠf7?Ƚw]I.794-n]ݹ舉 1RPb:aZhm\ +,.˲Mzw퓍Mv-Ş#z# Y"w⪨$'WK!n fFyPYY|0i; rW9`6xkmSVk).`%60 %n=tRF:Z%@n @7٪ͪᣋ&×!EA7O\Z qvD4(Dz ^(T|˃(YY,y8MGT#P@6`%K9dZЁK K.KLuK+S\Lwk Qu(p5Y>ԵC|@7Y.K|t -,@V"ݕ"fcYl-@ 9y^VdcU`Rkvw!0}|ޕ9b˿Y(=5(X1Q쓴uuhJ4)DW*2#Ze4-|eP"J49t́XA>'Ôx~'?IUw^U^DݙHac!7yA&/-Ks!$[\.TΩ+1hbwy[%ʶL,3 I_W{c8|/"r̙2a!8/ժA!<-$,PK3(车)rU:, =膬Y]]QVdJN@v~|1 xA/醈݁@CIw-2 S48ޭ-Jf4!a3=zYe?jV&H{ H8yg$/rf@ P'I~J릸hA<3YV 9mb6Xz~"^S/z,.aaQ]r]ײD5jzh8:ТWĦF X9Z{BhEa-~n`NHeZz?mCSQ4I-WX3s1Ft\|{WW06vry:/Zj-*&QV@b(e˒mVKs#4UF"7ش6 yAK~$}+ 94u;h HZ\ 4zp{o/.w%P& l#vmkVJg:( ]vYsdWnu?䥶nr܃>iu[`b+}s.w"W[ 7{3 r"70x>C&WB 4b ,VL!}N.EsxGϓ3P3}=Bwc߿{ c<^ Mq$o!-DQ zڼ%A ",<+X$""Uyp$eQ\Q4_9&+[Xzmv w39r!-ax[oJۑf:éO#놞zmO%k÷@G=x`ȺHRYJk,4Mь̓Z%L"8vyI%+wnF|ݰ'IH '҇\ ƚ{-X8 =0yG-b숛Lhb Žq:E)gl_1:u (3T$R/5bd2tx``Cdpܸrct Xñ h8L4rI Y#ԢI@iX.=UGVyYf 9Bzr0voY7ۓkpN/[ g!h>IRRTPb.`H4Db4E#蒃S&X(|X+p8"%4$ruUުc ]q,ÀJ38ESCȮWj@yW(WUW`?hob@892C0&F"wқ$-:MOmIQt^&'E,k9(dxcf18Y êhp{NTD?qg24!;44_屰2<5n(psn!h\LWu}hh?Y$aTa t89-Kwʍ鷪ǫ{6dŨW 0 Sle["xBSý}- T<<5#yӈ|Vb:5 M{Έvhw02sP{tH'wQ/62z<6k`{BҶfKG;1!aY?Ab(N&U#Ģ,cƧ5`ZH 9-3jL٧PhpG``y !d?F#Mt L{6 oq ,H`]Z0Ib](E4o$h^t0< KxT JAj`r)70g=ɸi{~3p[Y/MQ16IL-lDq4[, lƢl* ZcwȬ5K^zQ+ d8h< RX&~d8)y!/!B>x{Wnq4nk! ]]|grpqyL\#sL:lN~PUت&eNNf|IL6H 4밗`LbExWţ6#V/f/ m2xNA<癙*Lo{G"qM8`vwGQWQOXLwM<2cv >/Q>Rkɧ+x6 m F, C"D3g\QgT6 U%5oyq$7^tގ,Ε Ÿq@o&fxm'x?gr'ąL9];|sr"iMFml٢moTTb.W\l8S= ԝ){nI!{4ha'_BomwDuj}1HzU$LB[i1R4ZB-] &KXHt=-y})No#r&L~6- :*{Mxc,dsi0i͗c>faM5mB,]c69|-c G iȊ;l`tN-F9hIFCKs 8hT\w[07.ao4FЃ&'M DQh XEĄP qTJ8oix!Q{9554y@?€nY" Ǥ)6н8@p cO45{~#ez@>ְb%\ҶOn \y.(n/90i7MuQNa mcp.iRC=霱bs @aօp82ԇIym L犀_j`|a%=SVRmᚿTi I!6eh!7FrNk5T+5݈WR,lqJ=ƌ{X3'Xh%d;ECN4D=o4mFS"0W(iHg ؕ:F#3TfѰ(cϣЫ2C /4D}o!2ʕ(֐ݱv%I2.1CY :p5(Jͩ㋬YwVxNC2]~ Ir-D:tdLx&< 1S5sƽQVӑ=69̡EsVXW:=Oɚ ̑HܾͣY/z;"J٪qp|Qץ*^fڞae8aEf86mm4*cm2瘝NE V IN%AͨXxPEE=BֺQ*4+y?e+ ̉xA} _k13E ^(W;b6V6ms8dvmQ v+%Bra XXFϤ:~6koy[/v9i1Xf\T'k-dJLHYcJ\6Ym]I[N[H$XJ$9\~YIIOlϞ{qaH޵ }0o9dQq6wI'ozw(dN̊RL,#!{)ZPwY)/fQ*kkh͟MgS)~fʚ/1[Xu7ؖЫ ;{O kIפ`ׂF)U;` b m$5'm-h54@Y/(c'SٵxnRvèqo״ί߲cAImf# T 4Īy/^}YqK!9 mwD 7My !KQl[lJIv8xE׶i*m}oHk?O6mJʕޙcϗ@C5 CjԊ3)1:o@ɿWS0+Ȁyt_hXQ I(aIs U9\y9\HO7i9]eRI=eKvN\Lw:X%6[.ٓTEt;r}1tlU])E}& @0 S H3ceUՍ**bqBݖ҉A>!Z4I|A],p^~% rpB2L0#tD D6k[w$JdÚLᄔl/%P͟5ږ<cG!#+'ÃQn0To^ }ft=+$'G?ap $DC6N;?PslJyPr?vѸM8۔Gʰb8?pD<:=2q\:#|0^y/ŝށk@{22hد  6%u Q>])TǶf$}k31t#(\A:/NF},έj7YIQ J;+B 0O;>ӷA#+Po2׆vU3Ǝ'ߜ&hnۥu(F%d'{\9Ixei0rVɸuؤ%$ wo@@5zb/%z&_H1^dQ?ƲM3U\|8KU!Y=&u#7sb2cjǯůIk*Fdkm66T}~60ʌ*m[\-< .5Flҕ_LÉ {YY~Te ݊&Mtt+O?\Vj1iph;B')ֱm`N/zj:4mVKhMYt  4ɛ@"IPOzxЦzJ)uj Oמ~c2Eޯ(2vք,Dv udȬ8ʎVS=aF^rAHep&YlTpT"#G+Fc^h i0L팥̈́(38ի06 P8ښKTEq\mG(m^MtI뻦D:#VMf2rso mxÊc T1ܟ53W͒Qs j3lsmMz Kn&J@8MR~}&QciX`$3>ؑVEAy(MJ|阨\0Ѳn%])kDnrsmuÀ+7oۡ3tO(]_Vmc:x'7f22iAAQE _x؛/41z?@IYX魀8R]̏>_4wv{) c/Ml4_DIpI s%xe^]GyxcDJ^mOE?UUvlӂJ͒B$)40LAϖ[2|GZSAҳzmDOb1Sڑݷ9K>@ӏ ñB[9':D~k? ٻٍw 66V[hCw6G'޿ZJn,kc<߀P8nzvAGwٖʁ%^)nx^aM}A#Oc8;[ ֲ/lp2RIsAhKhR̪ͷxo:C@r$3h)s˴ ]TO:$#Vǃ8|ZQ рaWP?hLtI:eD#^TȆO,3f"6>E:Ӂ1ҺE@V[^j(rur-g~NsǸnjrL-_)L/s\EmpJM鸋vIӡp.ȁytאpDKh܂JAQۋPތ|0Tx:S kqpL9E\Иǵ0 <&Y15pwz;ٵn0EG !ܩ0Y̎ ]۴h<3TO(/>v& m/æDK:,<[}W`)z%,0_)y"Ŝ.2)2ͯ2@},拉d4;Cpo$b~nJ}X_T]gɢWv5Ͽ.酄i@a.ONmMYUA6wrzz'V)[)qV:t z:[X`'?sW$RR@7ũi#ғ|uE>H03cƩ,urHx=~U=Q] >Q -\h1 iAԳs/(?ZP[8Ph3v]ⲧ laJ< E: -Ryhs([|p,m4o{%BL[stdГ7b*| OJx˱VeQ^g'Oy?c DSsXl(M&y\WR$I#Ecc0$KRER+ěxF4o:Z:TqM6:FP44d_pl&!uWvj'//:BUh1 1hGƺ kÑc7=! s8%A3xHjUǸ$1URޮ0ߣ*JL:#q:94}5zwQGЫ]} vo?㙊_u29$Ra Qޚri>?hߘ!F-&ڻ , s곷$~G F.XO8zPg]Yg~.v"hϰ1ȍ6 &u&5'D7|7Ԩ'HI.h*cE#N@$хuE"R)-Ro!p׭kN.|;[cyrՎL^]~7-$vbrj^SA9)zRs% WѪ03;%˪"2RNa2lP *馀nQL^Ut]RS39]"8'@>P,srQvŊrc/jo ^]_K Ӂ%)ByYSP0z/٠PBC2v˖̝K`=|]Ŝ<:N i1 }U.4 JYYN3Hh%ڵn3dNFGx̧pN_ h cGD-{;ЦYGwV]7L҆c@E $7t-R,ˤgijNh\}tз^ch[m(u/j}q|KTd{UQiᣏ'.+g(Cw$3Ney R)hh+.852]ON_|nO-[q_ .E?_O{XxxLc#$RZ*CI 'EA:0sHaNӖ(A$B\]~Gkڑ14΃,}  Ɍb9#% 6Uwr' o]a:Nml4kQbin$ }y9a%YAJ]rSӭ :qˁv,2IIJ-QҜ$|X~i_5>[ ey-E%>9-uw !22ۺ|u dӬt{J/ DMȔrl!eqzJSK+ep<E`qȶbDIMUgܐْkeK )מR/4~6?9LLe4o۷BQHC)N䣶kԤ7k?{YtKJLcmc HfGPKRPY5T Esetuptools/_distutils/cmd.py<ێF}hy 0`u g vK-$Ȋ~7qpX%Y]U]*:I64֍ٔ{+mxuw<mʦ0&Khv@p67uK/b77IǾFt}o6J.Ǯw2U ~9|Ս S~km?]-޼a'7 >@ȫ眩n9{ɩZ@u;(JMFFm :xn8GUeE. \_T&=` [imUlS k]rNѸn#!9ifBJ@5v7tA:N쥶gp9#m)fөC`8. X#׊O j@K dSݽ2X=`6:#ru[de ȃm4ϋݨ縿qve $Cm~.x u>%ۮ:'" O  'bp }7HLaE:L-JQX֢1 J#%8[տLp.KLr$Zy߶#Pc0LF%ukF 2A‡{}8&R!}ỡ̄zXAL)=gEx0!%Il 108ktt/+y[*R`2 ]e1⵩v,PE廮k6Np JAx_B=P*#&Yg1 ][!}RWgTkW¹%PChK ikŏʒIPRovs?TCYV- *<0 6:;3<tb2r o`&b!6Iฝl5F?Y8@ך9jR U\VJ:<h3A~  /@mfHf$Kghup*v~5Q+6k+G-7yN92<~wG@'[U@@&yڢ Q# &8`=eȋU7f{px\tG_ .Pۺ\b{vQܡ$BjC`wp8(Z65^7 .ʮ?'`7 \`Ê:Vj:i[j !x?C@RϞq<"r]M# d%,Op! T#%UñG66ii޺GuD&o LhQwH9"pⷝ@rY\H x #DEU R(@ 5s)96ˋA|ط쀇2nCMCFGF N;2{n P;)iX 3W2@8I u|8?SG?VWB?i!Vjޒ߄PuD H?Wn ; 4vO3*N $OԟXiư3q\dsws})W6`{8>]8 *>x^g{p"M[[-ĭˉ=0c>VLhYk}䑯ձ8Sbn]E+Su'pYgsd[Pa!\a /t؋-$ֶ;cjN҃؀yUHJf}A0 ^;+q*P+ 㭪: `s92SP˂ǁ5@`L\ *3a hAT#{iz,h]+m<$RhWİd^` uʜͨthNTd!AԾ)JrّHQ98uLnk+^IDVڒxN7Vh !xCHKdcVV -[ EdvK,dG5X"1N_>1:rX %_ET켸Ō% sLZL(b\ӟ?o# 0\t!f\ t 2x)~R4̽m1T}ov`t0!-0ƌ(6hyFXYcIk&Ŵ;*#}$Ϫ;Hfߞi3!Tɽ; r9`郝lՊ Gk&,s01 rIj滿 JN8OwgK2&톅Ę";k dq"?W L2GXq+7²]W( ܧdN0 4z"ʟqз`{@% ^b+%^U?C8 Y{c/ZD+> YB@Evp 80ٌ),NIƇ=5L` i(',GK7ǿ7gEx!=T)\OÌJgUiO{k7yn#:kWZ2e^yrdYJl'N@xidmvdJ.?T?Zq( 5x2wFy@'S~I*!о놹!uә?9}F:<Xrj! xl5XRcsuM 2\޿7Ö8EzHKMK}K,T 'r҅.GÒlOO`JNXs:ԣ6=DQkFDt4|MLTwi@…la̍)` 7q p%B}G-&#GW{eYgO)Ԡ)V͔KkA؎0˦To{r̦hڿT;L8׫,AȽzs٪2$uAt]Zם-H'Cuб4 1;3,ط&\: k[Or} QO|lٓ\E.kIeXF 3C6%>G7]3K­zbČ/O/"u Ÿ' %Xi_2-qX:@Ų\/+Ѡ7Į$w ua7R]p=G:/33dPJu]X+ >HtT> HK NBe}{54wOYӧ52Kr<&J8<Ϸ"׾03vH[/C獦9yĚФ$ph-\5|q-xԆ+EH0d,mG^a_cA\ko$:ƘSDu>趦}.SgEⲩr(L`pu:nvp#/|e] s(|jAf(.9_eQ3":c@&FJ07ģX[v9GRx!̆}J:Zڇ4+&3u7(V QnQBԻǔYj1rr) 0G1hX`PȔNϴqA--Tca3J1\bfG185^sKlB)vCepX8v1'S@BńTf:~ *AکK㡤20#|Ew@c "6"6в[CU@-.#&x kV~`s92JHvh).8 i27W<0v ^ؑb W&bys((iΦ9_]!^WA$$L)HmEh!+iǺ7#va)gFvQ>l͘yLQY΄ &:(S]hv 4D՟3S־~&#&ǪDwycx#-r\Z_(%pC~M34Q],hNj%w2KPHs02 Vpyfg!>E;lMjY*6mEsy <I!`AݖTyXnQy[ ޷5l/^ጢ] ~'וA_6>[| % ,GG[]Gnգ`?z/ShYYq}qQ\|泆4!a#x13Cl=T~!A ^XXt1kql1RnL,[k>[ i* t)aOwnjb-ooSv>/%XJ5NC4+q#ؗ~+e+o{hK> >AIXquʼj!YT]E:'ɗDHUa`zEүS/Gz}7vzqW2A9ߣ _fwNYީDtx-OɆ ʩ4H}[K:zM(A[EJzmU L ^tc>JX8D& %P.ư6I2۲*QҚqphab;+9Yc:8uɠ` Au >P(0L=9VZn?"߆/}oV?[_}M z '9@`=3q܊>Gvlj(X[ &})p [0>ߊCd7| m--p^`Vȋh UA$aa!K( h''`%Sړwa p`iU^#DĐa*BBWL %opn*Mn3䵮COqqK(0@ + @A.S+G{/1E2#R2pp&Y1̜`<Ձ ; TX)X8Ҹn)4PeZ9[?9h~_Ƅ"hYuTd?G-^]4x?)rxa/8C/"A g; yJ%*B*s@|Ø*~04 LM!țܐ~Ձ|K.ʙ}Hj/5z!Cte4VW17Č`or;Uͻ0T>}p27b_Xm#tWv+XFݎCF`L9ĸ65H^б\X&)8D(=>`j >% ($bwٺrOᄎ__'2L?>ӂgn%j`0kL3^JU>0>f\L[ ѵ$jQ/s,0S +;Dhy@nޞ]7tcuAz\bcVXӕOKgm bq5SA56]}]F S8a)CJ% \\h1wet^pYP#\J(A ޽ ҖQ3)e##fo'Π}|+vL7#!yx:R8M| 3g++6g`C؋EY"-,]~}̣DI,T6B"]:vChiC^[:k3?&y(nߺpAx6i2W8jzlY(4݆| 9,j݉}x.}xP쥮y?0'y 'm@S`Jzx`M! Ug}e eU#ݸB5J @3VB] CTLx `$'?<+U ~X};oI"pEKK3Jp{$gp~)6b؃¾X¢eD;BguBV)~Q퓶40Yճ|AL @tsCg3Po1N_Z( 䶒Y%-dcM[>*ilѨȓpD0GJH|P*Tႚ+Aj*_`>4JECb"MVKzJG*wFBEFğZ aKk,A;xBIփ9%B>ϣn,OMWx?(I:~A)ם)dJǜ" lI\CQ[ x q1>geNԕ1v>-D;ߤSv.#Lb,8WyGa P*E- w9CUTNs'ޤȁ|5O'y̝BSV[@`\&U옴~[W}ʊ?XW!Z&n^? <KzXk}chĝd C]*-w!uԛ}n:jmu 2qRRٔTќTHQVD*Pkcֹ]6<:(x#g6&)<% n`G3O~|A} pHv=V@ Hx=8_s_ˤ ;%M-i[LGA68U|Rou"Nv'@JƁD'236 ^ł(rTr}_S)(3ƻ]><;QPKRPYux{s.(setuptools/_distutils/cygwinccompiler.pyZoF]ņAAj%I &`)r%wiY07Ktq;fv=K3j2L]V$ؖYΫm%.K6-tba{YRXdԿXEvQXM6q=#["اHNT,Υ@o⬐&+ֻOaMlXwجb`rbxeW؊OÉyIQo!ݯ2V<[OeodU-D±WG|ÓHԪ yULVOsfLSgw'<kj%W َK8Uv#\E%+_XqC{ a^JfpC^ !om1e!EQ }$+V^$U0= NEƲ)OglY+vK1[9#jZ,>&WuU/c myjY%ޚ>2礩+f3;mqE$a*󌙥Zqxixʖ{آFmU*N./HDNn21J?ɠ'V<)}! ߘ;ψ V*;!OG>f{,zGq}7ou{3*55Zf`pjxu~dvo Scp7Rj/ O֦Ic ̮:ρak` .@Q&E̟TUj)6',vo*Çk!4_yɣO6sq^GF,Vʀ# Ěs<:fe!Sh=NRWHH7V%}5gOGDLaN?ߏ OӰNR~P iқv5g 8+D`Dj-WG&wYΚhVIɄeBN1 $7Њ( J(N3K`Mq>*%K<;w^}$æ]_t⋼3/@>n°p]Uh/ h\C4G% [^ȴeig'38Fm~xּ+&iUK>"(ޟ"+'@Æ*w ,u+?@C.{gˮng>~%XYLE`029Y$[e\{Ax5¸l{[H;ۼgg A]߿I&\= _pV vȍv ϒLJD dFv@)Ѥ3I!9+ liBžp?z=g?y%O]~# .Îϟ?ԾiScj4-N-*kه}$ldFmG7!N'9A"fj=c?B#Im=6 dW0*B,.P6*W½U.#<ڲ-3W%n F;)66fENp`yvM7LvQ$OrG`(+lEHU[F܅ msYf>go2F^a>D_rPGUtZ5VmVcd6!4ŸOLYEW43$2h?|:D!r;Qbi.Bo+DErX<&c5ͣ Ut Gg٭_ +gQW:FN-KS KuKz2oB2:iTYTs+C0ݾh}/oAd^bXu537TDROdlIM cxepo52/=-Ct+tˠ;zsh4iW'p%ɓu~Jtdʱo{:W|X0:籋dX"4`._!!!{mN&y4qMgL+I݇g/O.88+<gڠqZ W}&uUaJ ڧOaΘdͫw^X"4NI.13@"f2}t@ Jعu!尉ȼaLL|ւ@ey8IV'FG:tR7ҨhVI|ˣ)fќFYKBRTnw*Lj!;ʹRD5wC /ҽ7yDK7z8!ٶfihFwtĪ9Pxײ5֊"Ey<(uE$ܬ I=)l&% 匱%߆l5N9GE( C+aڭy^*;i;0[܎\9ٹĆn;{eĻG'Y y {m>j) 7K޿eQM]:NrN8} 3_L)pEX9LgTB l4|KHyULC2HWxyj5};co7WIh9?8 TNy MBhǮ۬嚬Tpڜ4 }tsV9=ț=v[!]2o'M.UB$$5^p@c#\4b¥|@ H׷"oZU|0%́t )tz[ڒoK͖ǖPs3n^TK8` ){`5ʡ8?E:ϊ&.+~Q2ܝL[I%{XNdGj+ =CTByZ?PKRPY_H%usetuptools/_distutils/debug.py] 0E|*HE*pk;K y)ko[8㜲"cNp_޽wOp(24RA8놢+~XjgD[=XsIa\PKRPY]!setuptools/_distutils/dep_util.pyEPj0 +D/I!㠇 c1A4,/?nS''њX6'✍ +@ +{ 13SkV<A "+P. ; ,#(c{Ui-",mmapܓ`<&[ 'GbIcQ$e^rOá \^LIUdzhPKRPYok !setuptools/_distutils/dir_util.pyYm6_zHJj! \M_zA, ZmvZ߼\+j`65 yfH/J[78]ۢfb;]kŶ3Z:uF++d[ߏl\. qjSf6Ѝz,[5Aۅgя*c:cO0g|Oc`C+k_,e-u^J6ށ=6e / r8,hs_[!JcЄ^0dD)Bպѭt/QAnum,E;׭ hJaR[^V r|]Эu-X ^SL]5j.k%MZ6j^X'eYdȞl #H )=ɸ;ϥϟ?S _zKH*w30j\_Fa,`#%|"yrŨDV( f\cFA-Q, VΠ/^0tѴ)V#A˗/șj *GcjD2Jy$E-Z!p-~~ѣ)&}XAlD\w?#i6a7GTkK)G35az8!! RȂ|vH`/$YnsŮ˶W'GN%FACOr1P=npyTy=zBv Q$S*,<Ŗ"9=(D {aKtd DLZÓ)АBq@( 9Aڄ*w̌tZ05#0l|B`imtJF&{%:F@;7Dj+27ꉞ'j{}N,~8ng(&4q# -6sٟdK&g켑dpmD]XZ8MgPaV@sxCwo~gU@_DRc9yuA:+~&4l`tiYu˧Sƚj=$|ZNP.6vAk$pvֹu Z " ȲPqHDxC5 ,$p,XxMJZ!4ȟYXq5:@EN$Jau/~{KJ '*@[LLcip#>m&t.'r8wDN8{>j3s_`w'gN&G9&gLy>ϤӓF1¤|6:4]@v<[x]2xx\Uo_!N1t]˦rCeQ5@bu69+Bi3 +Y\Kng 0).{x)PW(Ti[)1{/eɆe}`8hqO]1usLZ88o_]S{G؃žux12rs]|d+<53 ݲ^[ q />uKd0HLZ<֧)=oo9j_VO #~"z5J}75eةF=N#7uSM?@6Xc'<El}0fLG<+^`vCw 2DUF?)N#l_kG×O/Ċꧨy4M|˲wqkcPKRPY}p4ysetuptools/_distutils/dist.py}kwHw =gH^juv8ggɦ pP2GG? JܜY~UWU׫4]U]M7NN޵uR]_|j7uܔ]7Mn.eҪ]:U\q۬Dd6êrQZO4=9eSs˦Ϧ3Rk;:7e[Cd6[/qXݼ\,]UrQ\Imjc U`IWڕ˫5U3՗eղTTE]nt [⦩bo?x?նMkOya6Y{˧]״W;\!]2}zy(.Tz3OimYwW0>.ϥZ^ڦ&z'O -`D,fsr y.oZWJRz%7PW t7O,OM|}իobf5Kݡ4~d6K^%вI6\!Բi5XeOV%զl[QU/K:MCD,V\%uGgJ5`&3_ P~-6?yy4&'''0V۷Auâ+YaoS‚j s S0`gt1[ ;nCm`#Po\&~_'R~ߩ! ~QZap` Wh2/.J $b6KfY*ħBEm9̶o4@Y`E&Бz9Tu4HhvZa軷t@?"5ki$vNiګ䲢P`A/Q>A*1h8ͺly7k%N-+XUj~B?L8b'Ё-ΤVz}nUG6zl:y,Y%J R#8xBOj1Bn nkyDwx'Twкr;X/]JKBGi`yqI`$5 @vs*${S,R U~ 5t'A0jD6 IaMgSSx\BWM[n̎z =ÔV F/. |M(7dPt(3DDm wMŔMͮ`H~_n,j5$?v0dVHO3bOE.W@+V׀ h@{DQ&ʤvQATm۩0/k8DG3 RjŌԜ']x)uc ہ\ߎN>6JJ#Հ.k=PZúoѬ#f0@@:=/A+ ̊3\[UI'B('K3Lʮ៴6\I:MOiE_ Nzz=Iƫ0&IBhDd Rmv#HEFlߩv\_@7@BuQ#`K$'Lix7u2BAZ~OxbD}W 3jo<_qiדiw@1 `f>g#[l^SV0 o~Œa sdT0 0 'y8%]ʋw Z6a_iL @kb)R sf@>8lP_M&ɿ^nߺ܃܆mqtI%bw)_ T.PBv.Jcp@^@inn஥6&AŒ+N/ё8xLmt~~g:=74m%tu)͗99; af P7k}}۝NNiF?>zl7stxMxرD\ !u#]+ d4,KXwݎt +ScB5o]Dj`=cc+`T=W [P@&j ee2bv'Ⰵ%;]r>zށ$^r3jh ;t{嗁^X7|08=NOzl!4y4sУNFy(\UٗIjh-NM5e _NR5^t7 UITo^fq)T5p@r#舫EW|b.gY'`#gx\ +80_Eu!>249xV _h$_om9YjY!fOTRs>6yQv4mϋ/?g^ v/G:!REU,BD A{Ӕ<>=&HAPeeLV&<5@gktzjG+6" g@̼c8غXmșxé>`ªQF8$h2uT#1HkZJBh|ukUzMuZU#KqVl<$'3 uf$*!hOV D 4_%Mn+T9yC#׍`;Vef*\NiB ibрK8ڈ**Ke-pvE)p\p9[Ds׍O#O̞0OiE[u6S,#&EӬX̎~؇z8pYMi,o(JLD/h){0#3}4pdO>Bո Yim1*WIp؃7sY\ =--Mm ;@9zFbYABz-$vx͵Vu#Ե4; ~ܗۑbE soEˤ#Vz [-SܰXyU> - 9Mq,ĖwGD"3yM\4ՕRtmz?ʌΊ5->0,$G&Y׬Hπ"bَDٺCUHVlHv⋝[AI/[9b;ϐWph&mQಔ̆"%2rD 6S b7#ȵ0dg^,UrU%BENF'1 *$(ܐD}'ǔ!;4StS^c~`YӔRE)[~W[5ꐄ@Gn0I)O|u^bL]oz.X݈ABo P]ְ,OWTw/rA} r^6B }J)e WcB5op찯W -i^pBp[! vgr)-aJf*,Uˊ?+a`,A%q&pqazN FN֭g#5OI+pȓ xO9tS*T.z鬥SCjƤunvm<\H㕴oC̐P.K$W,ڡٖ,@G"3s oTI f,6uIbU7^m\ :vsG8ALJ:96#7eN$ƑޣB?{aD[?dܜ7^!XTmuHMDĒ,e+l*jC* "]Ц)W(6GUa(gubC4nuG=tWU&3x*p1 \Lm\sM$bV.EbVw( ,A }WfGf[l}5Lvΐ2, )Mӟo&BjbA&֥,=.AwST?e{VKCB!qTRLK`m.u#c+V! QOs ƭ۝ܹNo؆jT"Ϫ^?KS'&bmcޑ:83'_a $N4oҶ9LH]M %.{ aTuGgz"/nȁ\xZ)aOJzv:qScAɐ[CA1{JL-ƑȄ8#ttsNi:x93(Y!L(yw c !gPi%ScCc[;ظ`ˊ,:>cʎ̩9OÝ/ZIXg"D`:Zuwrʘ - Ah7I%r.ep_..CxOǠ}%xdbhRK3J^7Df7۠zWAo/ t%ؠ a"FQj#w{=Y&3L{+wq}["Z ϿB0P*DZ:Cvyf)s;N wJ5+@w/Q?ËLJ"'jWq9F{aFx!̝g=!j&AU[pBefvTf/Nh_H҅:VE筷f_% :G$J3g!_le=/!Hya$l z?]*lv>vk;frw1&ޑPN (qF5jlZu}UђW0@)1xK'U.&="ڑt"XSZͅbJHEl!!Jsq|$lSȓ==Xf`PFKTW/"41?;n666X^D;y |B:qw>E) [SJ!QS$rؤDlWh͜'E,9 ~epft5$36$r"[IROrRoW6",sP\ F1`vf'5^)[&O1`mR)vLd4Krf90pETmwh5TOwP߮8s:NE&x$й2yaju7;+Eq11ryԝ/ڏSm N0k.G[%zg⡶'s"~ΑW^0C'G=E9}J [͢ ,J G-O,;|I7ebaMҽPx}7JMYB8!9=vhk>bŕک1EwǑ}%3d&]yc0K]Vix'c2苵:A>4|DۈDRRmNnf! Ǯt޽}vR꣯"=1b+Y.@/}S1[m>~ځDQ}9p|5uR[=<;)٘ǃ vn}"NVO{BErBQˡB.'2D $i~@0+k{foF9Ob.Wq]x'miվn"V6x62tW&E#S<:tDΧS ƉLAߠncc$N.YCiDP${CCB{NC MϐTZ?|'XkXAP&{z$|dP(nFmɌ_똏:Gb_a_" ـM{u$lE G1kI ˡihsK^^\"ncz$(6Ĝk^l֕LVu8|87ϾAQ0N ^ǽa1E'SUOiq 5UG$Dre*pp_I")10 /HFgIJw_Q^Lox&եe:3\tP& ^t'ŠwW'v:}6(VMaAfuu_^e#5L5_$2ŹGftw:YM$;aN?! 4. [*#~M*$1};ur w};IVt[q#=}.yOBGȑDsb|itk;F|WMl㫭uy$Q[:T aJ;yHZh}Y69RCi O8Sc[t-|H|j޸!گ]T@-`neNN[6-KdgjL,vaC#P#*I"R5Fv<ÉƫGF19ΙZL1Dj[w\Wbi+hn=ȓ|RҊTrPp=&\X{<ڞ>(^TN]=dOTB0ZQ'0Pnut11'zEowҥNjtzÓ$؁49 wK*bUbK#x}zԄ`XRaGZ>/?}Q7^;JI5x;~)Զ6;]طޟ:e$M}Q( Fcȏ;\4G> G/1!775$^K~_Ĩ.F6a eܽyZ#~(+~&َ/9_.ФE+gTW~C{TlhrߝqF Vp9>fJCu01G+X65ܝCFFm5ԱΏՔEVHx+sGԅ|P[NxiWd| ߾9Kҟ_ޤcgjl>66:L`|tMN;f wq92$p~p[\ Xע[I ;k%#tfp-@p )F"gT66N`[nzQ4\2C+fI { ,1L`HNDoo6s|j{mӉuAɻlJ+5)Of:+ Nv'xXzxϒ dQ|9Lěk4\C1w!֝N6κnڪWĻH¼\UAւ_*wi:XjJxJy bIFf֥^'\ ld򁿟?8ӐM\dY97;~Wלw3oyFf/j}LM-˭oLgꑭ)%( :3_iEkIJJx13meF.&M]٬:C|]`k=*v.%62Rx~ӅEG^Y+ZiL'>zmkI&a&mS;97:$SV*}]K,(^MxC>GٍS)ZF7_(H]I5PZC-e WD-8[&[2 682uc&Xcԛ^&.Kֺ)x~t֑m$|7L[\kWvl$꒛,S|ڿyZdʎS(h#Pl0,"tI쫮)$F~{rG_Lu g (3{{P;?҅T.%ȗ1%f7 C̴IIUz[R PV,$-TOƉq\%& Ç8}[e#BnS+=ޭ)EP7!ulZӶR//gZaF(\Gd?d2㴤ى0e IXH&O)V-k |xr~Af̉M.e=]b`$M{=M*NTb,'cVרտ5J=Q8ZEQvaJluUC]&bC9GQg %aCCo;{\1Y: CfUn9MCI*{qOAqL.V,(Ӗ_oFMʪ_ mK}O.'9_`u<ӥKPMhmB]V6+X֬|cΡ'd_f&ֶ,~0W|Kg| 6(ȉ?6\aN.!ǽ>6+޼ OXrρ i6ی.|:nV?fd8^Ǝ %S?| #\"耻F+9}/NC^ę77\3luP-OJx鹇IK=e"3Hf<krPKRPYZ v("setuptools/_distutils/extension.pyZm۶_>uK07d_vnn4 IQBS> &l'jNvAmY:/Un' sSeEU[\$v.*RQ IWJ\=zXw&2ֹKA00:"N&V[GCd񏹮,Rt.1d΅5Bb7vV{nJ@¨ 9;UE2քDIb7Bl+ă9s!)>S4BLxX|20X Q̘Uj@hRB).Jna:LʊmE ,zY3'#4eVQ̭ 叽MSe;2$h՛F,6Rۭ9y ّlXz&/ A) /2PM4L[L^VIe OhB%*S!H?#$;PJΙ#պ"FRr)r P֘ۚ}Jq4HH+/oaGҫܖ2OTG_,|S?$qaJI)Ser+70*j݀ >$lːc#af֛ Rwst|%}f wm)n[:Uohڤ֘kY/AemH&a}u=똙;R\.T.ӱ*r`4|ŇuZ3t2 tlt%oog/<^c>^c7 ȝYj^{Ozόwp:]sq^R[F\h><#["XO-<3y=q "% tO6>)k/m.MU+Hl nQEaX8=r0mv^MjB|kE%bOn(CMFFهyKܩZxm[,n#lKa09b之β8AөcNK:>tpbE}aOgO9$Y+s+=eh4C Z7v‚_畚 xFıx? ֕hLڟU>Qڊc9\"٦OBu2?;6[!% 7i~dIè%(uwlj`Zr9 ivZf^2@Lm0p„G-R7! @,z$pϢsB&{geԳP8[N҆s,rAُUqdЈRHfA̱zh% ~}jxޟښv*@r!@4&  )ΒAx0wr~2$-4a -9‰QuٍsaMkȎ*i0/jL2ٙڷJ4DւC5qNQK;1_M鼟QP`ꋜ}C}դ-?BcU?!4>`-' _G߳/.}T'dK D2؟n3GpW4Ìv(>3d3愉it9`~l;hk"|#G9X]#nA%{K?8q0)D'YiS"t#u 6_nNnfÁA,VQಓ]B`}b{ j>N{{:WT=qz61$ff~Ko)* EQeUiا/WYw18NN17$rΨEI<8%=#n:Gxa(;*k,h_ӬE18zDR|z\^#qUT%W#.gӔ ϧ^|tNh\, ?c~ TX: 9,0u { |"ͫ)O1AQPQ)4MYY{=?*KOAGŧž0  9jiS</Jl~gPC%k*𫭽>eHDdLwd˽ft,yц׭p(XwӃei,GV(_lr5D-+ck^6f@L!玜kqdWe#@vTYv{7 դҽ 0vSy s KoR-av;n=aE:kͬCi)?f)!9`vȗ((xrbGn$/R6t5Hd'хTPw&!< uU0Z!먐UT=veaܵ}. e]ӣCFɖ+N\OAw~S(y`!H7!t\!rOU3 3cOVvS8?@ [q8OS0:ND)ʦ MH՜f6D6BQ"> .m}ʢږiED ..Gj\I? GesA;^^\M y YۈD 9% X)HҚ_5 Gu@fC誜BxIQWNJ)j.0DU``Cִ7gwaԀ pA|1kZwѝ{U}cjizaӽ(StBiXV4w^ԧkC~ }z#m?@ w G'CUڠ1_zrD )N=\5 <,2yJzncIco2hۤPdl b1I.`CYJ%OczC"|*ow=a +qL\_w)_׋ rDrDs =pE@hY1Ckpr<PKRPY`Y "setuptools/_distutils/file_util.pyYm۸_zQjN(r馛4p" pIAI#u ,Xș3ox\i[k7[Zq4zߊE۔^Ɖ¬^74Vh<Fz6 F5+1BQTg? /{RȀq.`9p࿏u%;۪{!3ʭI/ʤ'V…2 .Gw3hjc .bStCd~@effְB=~8凵UN+5GRg7ƽFhY8ByF(|۹m&f|=PA>_GRTڪMCU\ZCEԯC6Th3u4/B5M0(^uM lU<:2 ؉i!s*vMݧ`3+QB^7K@\ D0#CZIY4+ (l6j1, v/Ө,Kl_ !vDyQuB1"[h`-ѕT%s7uT 8ɌqZ1y 6)zsrXvɭ!t”ፃ]pʴ+$GS= gwB1l:0-ﺇu۱L\ZWO%+EBw yϟ'4qvvEfa&cO? cg;ĉGRk\o|9wP(=k)Bt͒Fb2 pRBft)T JK+/zx8 sDqJ@y&I8n3 8$q #^];^b/N~CT{FqjszcA+^Nv5+w( R䠟3- \aߗ^E; ޯsWwaK۰;hi _ (b0>?!ݏ)a5HU% Dž_OKiGkz7gL&3p#+ϒ 8[5ԱzWHt)4傻~?;CMzޔY,?J7aUpgwPKRPYFgjAV5!setuptools/_distutils/filelist.pyk6ARNmz m<ɞAK]YrIɎSݦpޜr<R]++=YJTk4z,fR0 ZӢdFus%KM$";݊Ո%w*j, d4G#Z7ezbvu6M@㿔Yɬj.O;*jv[OVWp:/j]VиEAٚhD{Ys7ekj&ޮFa( t$;jdi"᠃me[+zRׅ`k61VJe[XՎۥ,୬*6Wf@x3: UE t:Do /SlYtJm9&9x-HgрD+եPD%RLvFa#6dNFXLֲR-Eζ\ӟZ0;.gkXHv0yY7 t.0Rr-bz\yqK@dhF2&Nlpy}ТE3"{ǃԴP&|[PW$?o/#,g8OP-QrAtY5s^;%ۆI/_|ËF&y%28D3Ձ[ESA!N> h$pO@oD ] 023أK+ c_&Z0۶xcV'Z39h@"x+ = sLW|`h3@E^/{pD5k;py&뽝k#nyU<ŀVRx-0QblĬ :TOXhaشp&Q[q%KBlL#Sv/g^P."&_ 6pEs܏12!p*-fbVZXψm1 Fi/7>5P?>O)tA.v0 d&.IpM3**H}PK-d4SRo` M%W[C@IyD$ږ JŸLɻkpOTO0¿x jGp!+BǔrCY1X!a=)QD䠿->hD@?o#&P^ɒh%߈^wrX}N!:!HPpH ^kqb%B-WQyZ,E?d*qδ?IG&zcBz= O:m}%>,n`{w ']BJYKzYȷ~*[KHNn鬦Cml_?)-omԏ:RKzc0BQQu5z Cu `K1hBmUbSG{9*2<9G݁1$h˚^m}%ih+:)"5L aa(459 ]fs}*uĴ 0ei²Ç1 \L(im>rx~ࡰ05bߦ-iי9:f&L9-\\ !uF.>\㽀}^-5]b?^uV|"N^篋uW]~d6T} c4|D\8Z epТkz7:EoGuG8B%4g ;5RcϽpфtdxρN/G  i{E⻟4;|/OsH6vB]ˇcF'약էGfp@*:+n Df)+CM-3Ƌ}OM|KW:+z( {-hTRUͶ6=f#ūɐ29&-HJfotn 5G pxJ6s²6R#\H'vOLl!{4>@3a5u 44[N͌6>tl۵>?;{ !F]I4_|?'goUW5o'7@*݌~XYi%WMR%xkh 1d"_'-:E%ڧ(ml'y,!LL̬uEla=\cQP?3#/!#">w[6=NQ3aCfOP6by6A/iURTi%3?_BNNBWq4]fM,9Pc2r.z{jH5 e4PC):sXtYjr[`:% C"ͰnO0su@2`QnZTO~)V5 b@~׽6Eٔrz;@yMW.Ɍaʲa =!_c׬iu*2;?@>7U#FF:/,ڹEm7o ۊ鸖%f7gQuzA"6Zڭ,⧽Ha{uREdh^uT%i;od)bfo0Y L|MpX7#׻0Yu<x@)XqH w$#5n`)oA풸%/ !vK@זCȁpO.ؔIEc\'s6irdd8~r9\/8Br"IxV=4|D}N@$-~ ɥ!~~Hn5Um9,SX" Q8!MrX^zB 9HP?8-w7<'&w`N">.8 3HU̯{ ^\[C9o?PKRPYq setuptools/_distutils/log.pyS0W %`ڜJKS6[ aw -{*Rd/diiXjΚP:QA.JU O'\^{ RNT6gAi.(Md[]27na]=jek*T6+J umŕ&O1z1a~77 bؾvϣO(SY"B8Ç[9C|KT2H=$ %T)prRSG::N)SQhYm4 /ï~xf&cIO)V䄌UwS]KCq1cIgGG\!?{(56K_<9;Q B,=j" d%υ(Q Ϊ5ʚw Q"Ҟ-|! ´bpopjDnƂ&t4w \3yPKRPYk)/)setuptools/_distutils/spawn.pyW]o6}s$e(ɶ>--QIHʎ^Rh}AD~Cf>BވZcv6F\8Dv2N"(67B `P*ٚ3`$l̔R5g3\"h+k%+蔼W"g8s|>Mxh: fÜ˻ǺQgv疩`aOpp*j9.0[u?N_\a+%W|/y~IK٬%d Λ"Y( sb˦aXB%W5 ޡ%-[@8<D ךOw ~KmyYj{G~ޚUI1݆7q? `j+Yq3;Gp˫>f_ϯp_3g0au.Nap4zzy2yhT0OZNKpz}ex)$#9 꼲Y9c9SyuT`k7P]deo M}o‘[In*9G[Ln`?ݤ4D,ڵ-&/'(J:YXW;bQ0z*-P՜G|VR&jeSsas 7Jid4YG֖BaEp%0PN=wL1ڶA:L7m.=Wba -LM[ʾ-I)}Le`BV`T+H0$-bXP W-  MXZ SA-Ff(n _x:J}==R%v0q0 4,3"nήj]10ڞgo.daEXM%}NMgvC7tܑ\%4O\[.+{D? jK' Njc4p>IXEkJRL^-`KF-џfmsa_cOpm.Su+ȯs /G#X|au]1H;ph?.2`kTvγkT#HL0k:蔚eܪFE^#e$h@@yib+#\d$(пZe#T-:Vό "hREOVHm&O1~8zz9^&pL@jYXIgIfˣFaбBnѼؿ\(1YELZvE m^-F`@Ђ [/ "|0o \k حr=xtY' x(4In{ nIQ]ŋuB7s|.ewC B;  MY݁Qe'eAk8 XKCK=.XޛU~n}ƃ] w-֐[-1A7wuWL&SD)f4C?^3I6%BNNdj9=ynǀ8F!iglYf{'C;rn+CbQ] / Aށv6NI ocCZwN+%A1Ӕ38 P]WeN40 "Mf̂ifNh\F ;k1{7u0|ؿSSڼUۘ'ij^LQ9xߩf0olI'Wyd뱯~lE= '}'ฑl t<y}gDъ5-p'!"¬j[iC $,'xEPSr7׾šuZaΫ R" "M`pqǩ;Rn\>ݿEhUiHOMRd/KyBɦ ~a# qP&rS+fkP-Fn/!%"=R(Ll0@5ewdr)9Iҋ{ϖtPsB;5,w6AAr ψtE9/~ǣ&z> /̧Gƴހfu{p`t!qD228EiޭtA#5{Ez͗#JC2aM ʑIjvzrz`FCSPG}eem6:ل`Q!pd>٧D0ЃP =`]$EӥʎNTVfjͷ|0Qxͅ 9xR5f ͞<` 9moe50M[0M'1756/!-ܠUH1b,c:9 joCEeujU)6BA> s|B39aFv3!jt49?'g? dƴ܁,LSe*iU,iGiߥfhLc7gQaQiz{^#7vF'ɉc#d*{!8߃kcJg%EZ ԗWE!Nr P'"Ǖ}oZ]`bvWSbUH /3wO!k<ؽ̵'˖w/(/MS %֨T $l] D''rG^zwޞ>|{=tݫM|а!>޶q.oĬ*BRex[uC.N-TOϷ&eYg''(5(&_TAIjbYv⼨,n8NhE ~^]DD倕mg0Y3`[6x {zHLz-( `Lfnt `MRy'%h+@&n]/]gصGlގ0[" rd3AJT]t䖎{ac'*[|f[Čg}u }L/,ocM_^14Ĭ98hyбoܗ)&!`'ê>mHZ((Ġվ>gp ?q[^&f6x)wm$ϰ.KuC4ȃN*2L?LO> s,?*oTVXpa ìƒm:]dEO :zᣊj)T ͸H/1Im^H E 0bI%7 eR{#mЇi !f_>;K/Nj_|/f)'80% .~>~{,wvX~G>%^"ytSI *-^^5: Uoe1Yc؍xc:oͰ3^K5l;1sFJLjqzȾ@_WX侁/ڿ7\ 3貮HoaNu`1`܍{E/ȓJc")eM6MK4<ۄ-E\M_j,"r}з 8|? a%B YOد+/v1j6U{5 bOv0Q41BlGtRDgW*%6jjV)KvWTյP503 f9֗ r&HvJukr읖 (VHd-Zs&x,b 0=B0 KUcܠ)kOv fKqϸ0$ ٷ|)pi$(lvBb|3ۺJ AP7P ׷HS>Fg gDDs~ +~pA'X y#,%/ĕni0|F,k0?7Eҽ0.8=\m|I!i wa}*C1~>%fZ3Leb G6͝@h%`NP Q ϋ9$gej^%"&ڏ液m)]ķßGF*EziL0:[ŷ1cfNsfq*u`5Ak(ƣͥ*pnFzavU5o{Xn!aubS5t-ElcGas }Evy͇9EtqQHP~4= nM<i| a{Q_C3,\}=ƖsEsA(QManB"=kegjo*N/r J90tw#F.`^wRZ_ OEUgxT\oadSl<me-G%LNzԿz`kmU%ƪXqB E̮5;x%q K%μr6֟5˹[9J"_d=똋~-^F9ޯ0@?_ LT$눴StZEl8cUT p%5ӿ7fl 6(4`ɤ񛬪wO$x0Y7Nc U.& = Eν4?/X3lv9)b(j(۴ "`߻ + &PnuY My [9& kȸ>\̈́xnaI?`qxb;hٟ{5"j~\ïjEI|JE S3 S<}νl#4њ?4U2bMvPKRPYTB/"setuptools/_distutils/text_file.pyZm~bC@,v #h1REl@+>jWᒖ ݢՇG<>lVO(ͩ\;UcsKu>A틏xUZW4Ӫh(nCZ=Յ5iY^N%K+N*NUfGmj.Vh[,- G\MڭgMq<٪Vnnnٖ͍$KUY<Պ93 Ý؆ ֔uNMMrh\#N |Hrɱ^VplF iPsl(-rjv;S3P`ifbv3r#G4``0'>3#B;\8[:u&T]EI8jN8p_6#ꭁIZ {@3lYRoxQVfHQK2jZ+ZBltLlYZD4ǭJ F;⚩@2Ա)9\ޓ4NYԤ`Ы^8!=`;kz ,K 6~Lz/_[lzww[ȾW6scV `k[I τUH^0h;ئZf1eoxw|JܣC-ƌduӼ[Yy͊3)UtE/X#fd8.'š,+ZIC[CwA$Z)ti"prʞj8"$][X;$|1nւe#D&>e!lTz7x`/o\RX^HUQ cҒY%r@͉C?x$:j cfvO^1t#6Y¹NUEiTLA1&"W¤p' 栥%P=J.T_]wl% Wޣ;ɮ:H<#l Ԕ;=ǔC+GaelEYDwH I;ɿ^ܫ&")1 ƚUfmnTYiI0WD)9B%;#d}鬩Q5yTu2g"OR cL[lK=?>~_gUON߳8 e-ȩҹ*V/WIǴڎG%)l@S2ЊN:Ny J*cks-8Z`־C4LI G [Cr>+2GKT֗וL/Զ)P2 I.LN$i2E}[$qy YfB7PU.Cr:C>M؂䳊TK>r(92B?C{~k5TQϗˈtMk-x,z^E 6|bN,0,Oފѐs˝Z+6-}v̬2 3".f!IW,zЗPpT,AUUŖ ϭE*8gHgla=*C6vLdm/'Oq:g\cI}X)W{(Fz]m} `gThPx`mnVڒ"cAPIv[CMn(j3B WVl־/z4RӋL'( ?Q$HKy Hct~1ݬ0PiGN' %'Ho6sIr #neӋˬ*1 ȩsͱmo~xk#]fǑo}n%XٳȠjhȿC'=!վ71]v+gR}߅^v PЊ<5=ȏXVUsrtI~`.4(R,lJm&ٳC .B9S4)ő-?jƂ(v wo#={09#8<bH<6Vw)8eVFJR"2w iYZhi;F=/thqФڲx5ǃޘ~?ߒht=i mͶ C { ӾY&^ł&R]":OM;6܌]B -qu8]=[ζ )IrF_>3RDS1}+6rρ`عRcܤp)О1[7k8JQ# Dӊ%P7A E.Dn}~GR /K2K30{7CN bwn>xN{^F, \ou?X< ht/,ť "5!_˓hs)mn-cGL%͈hJjḧ׽T>+hG{9>`CڤI] q˔Nb]PUz&Dw4 ?]vr=[zR߫'/aifcdxV;]y߭if %nE-/].蓚 bAUHbą.zrA7LazrQ?Bi5wԯTH5X㩖W#\ 01>g$1סB|^E7?%L<ߙ;/yL>&ޣ) cRw|_XB]ݲ 鞯^(Rrdxk'+ueiջwWܶ.*7!=z!3lt-L5"E0gcoO 슃ҏp ӌƕ i?gHѧ#8P9"onK oHQy5^ҷ' ތC㣹yyw " B?_e)ݻa1VJMZi+枪9]Sn$vQ!kү/qqO`FS%GЏW5z>m_FT̍3U쥈Tk`+5Q;uMumwѸ\M3i>jk#Q8OशAiT왪?oRfހHH\nq,FQ" XK~+Wۚ8liDq"QTj!KXpY :^|#eWr?R9*{f~]}WH}hgUʨw](M3o &9gXp-Do+4E֏Ew!n  M\ g)*, ]Sy0 Q]F\b13㈫%D$wa/7->GF?ho!̝,OǓNÈnekiHkm\xsRI#GNUmwtGP} PKRPY:i{M<&setuptools/_distutils/unixccompiler.py;ks6WJ8{/ӖȎ:IYv, AJݽ~ Rlelqw7z vmQ,(EX˪EX#1\q =3enyB-pu"e@p=N,Jsf7>]05;𬑊b 9-=[A\WNiBQee o=ˋFdl EVl~5ei씲1o1pZ愆29Ye!dTq(JL܉ku[ , Ҍ`S]3z]xZrJ `I{s-p`6mvXYqe2^UёZ,̻M+e ?5>})/GevH{j[u)wv [ H,D3ll-)s,3 zW;؋xvZ֚9JQ72JJɲy+Hq7;;W4lTLK@L̻Ŧqx>}>je]ӈ-{~d9"z(AZbV`!ۖ|nܩu dT[܈&+*T5!H.YY.ڔ7hG x.~_1K[ea!6lU``_NJo7䢫ٲ\VF5# ؖ+VlزJ2>eW ҈EVWDK4]v*r3nqIlVVVZ0 $Rt-LRG'USPс,P7Dž&1dY5,nFh.-JQ|G|=Mb-d8]Gk I/V (/(2@x@&:iБHa1"Di! M^.`(\ -#ˮ̵y Sv-8#0xG΢3ހAUX,cˢ]&yMP` u(GC蓢wCAQX1FD1a@=bv!"Xn o5;"-_P6ބ%y0V"s5p\׿$ba`0QNgSYn -pXi4t̒kg8ˀ-h.% 3fp~Jd=bqmFŞRfngJX:s^@4W#;c55"%AAvH!)v6ԛCUODGoYDW Fp ]N0]&S7#@X&Ocz] Q7JGj{>,Ve ] x`#J42UqG{eH:˱U^cގ-EvOhPa/kz_ 4,_kC:UA3,'LG[{-@qbJKIyBbQW/[;83)*,Beܧғ\t2)jxr<蛻/pl֭8ԣ!%I0O=YYJS:3蒰Q^7go n΢-f\y`HC-6K'L=?@P>@UbbytLNBMM( PS&iCw0 +tbX.1)tAH&%`P>qo[AAw}-~km0ꂾ[Om@#^g d6eH3PK)&sbgOՌSoel|%RȽPG2tt ,idiujYd Qy0wc~jzL[%du:| `,Ye8/bu ;w4.{rAd" c0|C1{/yj*GSjѡ2|?z cK{|1ORP˼yNtDۇ֛<)&@gzR\|a6R0,` ኺۊeD3fĖVBq.NХXrS2w9A9a/j(dI 3؎؟Vt '-xMKO +%mXtmWsK;a{Wco%`WW Е@厲 .0ft{9- :sIARۢ{ѠVPրM\A2Z a94P \i^ SAGxtqw\+m^Goؿz)nD)kѬ~aj?|met=M=KU~=^}p$'E gi59R_e3;r/^_~{,KD_/'q^f *U=:^$U|vZ@+bU(Q i &ӑaL.:;^ʌ0k}nt{wѳrgW1Z;T}x.Yҕu=Bn6Pw\{愌Wp; sJ놐-~ AI-Z_{z.&%Bݤ_W~K'd͋J, a 2YH䵡kY9"NnUЛtgǐ$۟wY^#_]}:}?ߟzhCΨsr? 胗/cTG4+! PKRPYrkd}Dsetuptools/_distutils/util.py[}?D4G2$gi)&!plYʒ03H6$ei}Qyaڮ-J߳gtY;^Ԫ+ VvSTknV6UتUѪj볺Ҫ^!Qw J;mw6Yggު$Yum$QvW7-Wubgg/_ץq7,[wiSʴ 0u]SgjU[ݭR[N47կmLR v\=ĥ nBQuMџ~\ow@)^i-߷P.W8;;Julj&;;+])|H0RC(J-DEP6,ܬkPFf4A8QmH+̦0;Z]Qh0!i3c[ˎ$1;5P/-Ҳ<(nWA:FEEB 5&<[]}nT]Pd;n ~=E][{;.:mu5C9VmSAİ%^,d+۵ZU`jWVK]@TԤmD7>sE1ɔ:5iW VCf#8ݿxpX}k+ wFMkNz"sE{&픞1)5L aȰjÁ׏^w^#\w_|^p_Tɳ`-mi7AÈU6JDESWD{' H^5BL)cq^wy |MHFu%ͻS( e<>YѲ& ~٣_o%/{gOeL`hşdP&Er'~ aT]X=0+9uY/)BLMC dSR/QAތ[5U]6A+?gI@YJ^'t3~# ``,~0qlrMXX1vQ'(Z~Hѓ '@H)k6Z#$`Ck21l7K]rTa!-a}@;(qBfT M#DYwEgH`t.K·+0|LSЁM>h)d,uއmPo\쌉;!>IҲ}j{KXSLo6IBNsc ]YcN~6?Ǧ)vTyI'ã &Vy4e$lB+[+NV7 y8ɫo|Ī0 bCO͇,l6,nLG7!ljchĨĴbgW9 %\Z'M]Czs= ŭnNw(H1M\c'^xӤ纨dz\q[) jCymzCz-c?đKm#[? l8́^TyY=K3U<0UxII&ubdѥ {6fC?REyr3.;?@yuu*猱dQ@e>=?DW=y$˺:)*R?Ml:)UE&fH8Fddp*Hx\䞒w4,x\ɛ\a޶[(ߢA㾌ԥ`cW.TeekXgOՂ ԐkTxǹ U&k ^%TӞ.EޤMG3d2Ƚ#Jq' mTtШ9 1Lפݾ+#pMW ezת[lۃՋ{ V:֑V_w; RXNQpBچ.m%wrI'Vq3$9~m>7x-z8[>A9)5_ ̩+N1CBr(*(CEKy *!"Wil[~Ƴ_l(dŮ^%XbA, 1EA`0h Cv:,dmbeҎdH">#-"sx43:JE֌>\{ȏd]'ԃX Sq*/iQGLfJdhΎlI6@dm[:6 M؇@QTo:T^MV9#Sf3hi5P${OcK[D#zfvğUx{{5]touiw%0&|*]kwq Y͜\*%4])2uwbWk|ֈ@!D. ewYbx>jUԽ&AE攟wߺPָ!="] OImɰyCiUVjjW6?g}AL<=6\<~Eޑ[uژt6%SGkQk Kx$ m1$k&k>胛{0iNf5oP˼A-V\{u}&#\A(Mh@PX'.|6w06ƚQvFV-' I4TRbL|'"G) }pfK^td)귎l ]­O|ۦu]R~jȚ}9>Trx=}ӡ%=jN8W*:]uz&m ֯@{m?Au\{WL3!aUQ_!9p 񑾆I.kn,E8"U_ sAvwHͿVſ512جpU͎dgBqtEş[?,}6v/jc*gO[l!Bw*jGRguW O%o$#gƢy+d#/*5q ~U9?A"qR*ꩩIܑFl]a|2ekw3I|T5WʯduLAxm12 FgnӢ43`Į -9]i9QT= *{ތ(=QWH9_ :ȫf@*0E:~6!7` 6~`4}D~Pk_F̼zH_ _ʱ#OK_O SC,i+R\REE46@Pi4uJ琲M] R_tWy{d 5n-IQ]( 6Ym[p<FA8 PHs\ע=//JÍ*饳t}<-4wvGy8968ޱYVPӍuHBY % /~|k vT-dý?&YQIL$GK^;!@U>𹴡:޽ooȯ"NvB/Glo1?5a0K'K2ϖzGUnS`˰kW/Ic"s r?fF: 5+p&ҥ:s &%p ~ikT< H&]2,<)]W]6m(g`O_ܵX@턧:bwƔk5blPIY,Cs 4AŪ :A)O#&[\5g$-1n.]p@b8Yz'M]S9 BH.0#qo𚂤c{O߆[PSϜ y]ue7oMJ٦-mkr*3\SOy_Tf*ƈa+QJuWxX/1j+[ }z뮎b^l-eD_ٖv>(c|kq'hx2N;r |wpmSi0j~{4 Si\\3V?!eNuX^i 'ds{D{}zēɳkQ7ކ-/ ]4d2M, am>NDG 4a5$3mhӄ^-\\AnuСBE~%eVC!^T'@z\#`:UT;`mQH*„ҟnfsa|u 16q&_xʐnT|ٶK.{5-a8J{8^N͎%0?~`nbث/widԌ5C3s<9>CyKWp}S Ty>W1}MP1q>Ǔ\oׇc1iipi}#j{" ӲIY)7>5p}v&#ho=o'K%Cz*D6ȣNs*o#JǪe/NR _?^s:}qpKI#ldUt 󅺫%7i({э斤Y dO$ɻ0]CdOvhDcZvi IrOt4,"k 8VmUVByMb҂<&Zܻ){\_ۭ(t3%#]nh1NHiQGJ+lڦJmUgj.MhbMw=>->ΞL yŲ$A,PKRPYmZ1 setuptools/_distutils/version.pyZmFrb* /.Zyrܦ.gWJVXC`H/< {K.kLOO>3*+LlG%>ed&괲xS~lmJoU\?:)JU ~wvERcDi5RZEwxFߕŃMSqPٗa >NMZx\ubs4Rꇝ)?Ӄ jLK_f&Q߃yX?DoagvRhc$8 FB/xKg*3^*}!hEZhEqEfLSQ4 X1A6p; QySPy͞ȶa_)_8U#u^nkzx'9W5ɌxۓژgZ@bڅ\jAU(y!cZ[l8seMzMS5)ueS@<6S$I\6\q4DX?CKH2FjS` Pd,!5JnZ;dk#&rck (nJn|ASYFeԮyzefſt"\oMy­1_%d1dz|<ŻU:!)L$dl&ml 7j'|bZv f4x̶(If6u;jj"J(&53I4Lۧ5iBD v Ei.bҽL(tjes[VSBdƱ/bl)ֵ# GldΘ km:;!N4,,7eHI*ae$'^Jęt3SbO;#/7=ѤaO TĿ8^oA:jB.htO1y02@8)N Tuo,Պ_Caկj2o=a խȓ45b * 㹊l H&gab g7&>(aQjm`U!$c"sC` f̘p&.rdq$q&8u8'kPun@ ~$ZJ!Z &Tg~<)Y&p-<-xdA$G$D N&ȉ]KK#~FнAbz!0@w6 !BDIc?U1 fXifÕ-[KA逘'Ps*6D]1C)Z3Эs"FRP١;!ނ^ 5-f 0NH\X$(z6#m:B*'@_gW.:D|s1Tru@}{4ep s[*IQ͝!JzBg3a}4K`+;Ml1XϥZLb9lA͊Ҵx/EB־r@ K@pyzGJ$T󪘗vsyd6Rӓ 2Mꀓ%*0Pl8'RwT)ls9W9FYʿ>G|kkm>漺n4:1TTLlqme|,4 @טOȥdFSי貵]r:>~E ZbPHDJ EIK)/u^}yTpKmN3AhTS+\d {TՐH5jhc7=5DXڛ:m+j]uD|t_rTꊫPY}c{ :@V8:H2]aE|p;!H^Ke7dNۏצB`OOUKڞ'/ay!0Xn:P.F0bo0:b E8p\8hy3pOlZO A&m+% Gi]bT,ϵM瓍'KR 8`Nuo̞S$x - 8,Q8bΙsJ F,E4٘m@=G:n4ٷ`Nՙ1QFjiP>#QEtu?S>.GA&p$D, ?dce;aBbgPI\A$o}35ɂ[$h-{IĪsiC/"ӝs~\ 7r{#1]da"5 -y6gt[L:l\4L+ eF!MZ_4٤ޣ@"܍iP`Y[AĹE$ĺºrbo65 8zbݥuj`_Y;ߤzrz戗K-]ǿTELn6r92jǝa܀V/.Ov8 [Q*W363'˽u︳镓nFNV[ٖLp㲹1 Xxf%yĜAGL{#|^=X*~gqQF`I9S Tw@8+]S6K2|yggjXs^`حa 3DcKZupu9+IFf|-P䖥I<6-tL}QAi8a+VZi@"(/J[;!,h }zè%=r a;Qp}9່ϞMW(I*wL`7pI0_Y:bw\Ѷ $ VAO{+JYr(?VTt oM8v l9buj8v7./)b&K$hX䴖SLst.[ 3"$c:GHʤO],4)._7$\Q?~ԄnrI[N|}ZS øPFyp)x Q^9\{8j]pg[Pt%{ ή@sues&Ж4ُ#/jb\Lߟhp$„HԌOPߗx`I@ޖe:Z\ퟢenΫW/F2ڧW!)!uիewZJ5U16pZ/he1*fRPYxKG29gT&aslӰh+$lJ-r(Ȁ WP=^@@5!oV&tD#F1Rk@GI嘎[==M{'E|2t)Ωpw(;{)ڔE#˜\5HI%_f}(2| akvv>*wx^(ʈ ' CkK=Q2:nA*Ǎn[AHN{bspvL_ Eu|'m|^/>i:zO:iG揜A|<'Lvý_PKRPYmlUU)setuptools/_distutils/versionpredicate.pyXn8}WLRGň].mdmZmuH;q ; UXexCz{oR RT* TK}k [}Ee%$ZPyAE(e%tQߕ VUA *9ߊ4?88LRW: Tq}~uys쿞\Wpqhڛo߿p+T eP-KD\ p~,Hr\}-T$JiߢQ%+ԿϦt3zaW"4 QZs A,W*}r0>h 9i늨xRoȶF#^ _4W.̄  /ȧ "AhEUUQ+o)&j 0U\ ܑģg U)oo}]M͋|K`.?hA0UrRս#Wg&JqgLuMS=SY,Yu]˘9׵#9+JUC8{8ul[T/;Y el\Gp4z*/σa`$}E& 4Z{QVHV4Z@QhH'c.!}vUZeXb˘^o2TRbI#D-Gt>ߚhq,е 4Ea|U"r Ȥ.bDK R*Kri^hɖh$M+Qظqc]imy\[;p<4~6a/6{'RuxK| =Z6!oDɒ75y+7 ftL7!0)i8"xB?}yOóxw`PK)q9*r3)ާp_8q1DjJ8ۍzs< |Ϧ&%wS%h%%BFފ n*xb04K^sg01%+g kCP7XE  *r-F} v[RT2XdDe*T|G]lа~!4'ys_t5};I kC3x4g|:HJ'fZzm IRi=soBq|H^/ "&cv&ǀ&XO|Ix*NYsKR.esb 7K\I<[ie#,۠ǐt&,r5RvhMDg]32FG@ըy?ɾ0vU]xn'd[id5d@B-E.Ro{&;qt (";>4LHFTtRZ54sGwuz0kTҭ† ^,oλo//#%5~Ԏ#@%R:y h@c`vv'!LMɸqC NV JXH=F̄.οA ɮcRd b,1E$j"v,9mVǮ#7Ϳ!yoMu/}];PKRPYHݴ)setuptools/_distutils/command/__init__.pye1 0 EwBxRzn=@RbXuI=GYeg?ƈ)sC?`GǤȉS'HP'ZnppAZc+43t/p7n.,ݛyk۞Pa>PKRPY.&?I2setuptools/_distutils/command/_framework_compat.pyTMo0 WhRgCOf`C/Mta Y-dHr>俏g%P_,0 /ovbNdB w 6dK HV [)/ D@6Nki=lUFskUUX:匯!ȡ X&!&s%85ʻHaX ;m6Os@%*TNYŏ~J&oXU*T>41f@+*I361Ѝ2!W5'^Kee&X],6G6P=y<&m쇴݄GoE:_<͟aKnF)ݠov~3;x%X [XT0sHFѐУP17N2raNydNt:y@7oZ>§dYnc+nBqYpr&ele/wrh-7rZv̙cWPbL5Gql?DDѽͳOgE 6̳&յjGݵ`kJ]bjaY?I͙DM l#R hDĭX8Z|3*mžy>.3%> 6nw­#ҿ+ၯEӫ K?PKRPY&setuptools/_distutils/command/bdist.pyX_o6ק I} =lYb4 ,0 Ze.2T'wEJ-uD"wKq\rmZkr7EMLM̎kOGKGOB1jdڐ TW).)<(F*CO{kwbJIfЧ 7MMV]pW̬GEQɶDa4@Ņ!5H&rK5Ԍ8JRU)IۈlQbKEq\ykR:Wξ/UL~p lASnm\UK5K泴+Q̘A uMSN6A4p]8G5՚ &-ya3.-izдZsL)!8 7MYMDjVowGeiD"PT4wqdIQb,Fr;m -k7΀u[ĩ^2](nceڥe6>Lh=.ٗU܇?1A @Xa$<`;1..Džs6`ʚ*b|ArQ,ts:I#5L.!"X'$/Q*oa,*vZZ.Cw9؂>t=N1$0;xS{[+4u;b0m, , kŴc><'͈F۱FB+p>, `ISH((1^op'؁~ 0سֶ>MC^ WXֶ 'Mr"wzcmdGl`MKȆm `$=+ߞ"5OdeIDS&!C xJ g} ])$pVRՖ@TaJYK6JnI-cl{~B~~/&3E9%IXq>a<9d.Kr\ li,G2WljsK}Miq&Vk]^tVj8 WfE+5gKۅf/L m ȟ/MwZWx(/-Dx|bGtY}/hw;rpwٛ:nc. J{=$qlF@BG܎jTT,Uhβž7ܲ2_TK^^>Φ5Dugڀ 8.j0r]Cv]p ꊄ3ɼr}u9Z~U?uV&~y"Ʇ6tapk Z^b%[3,,!B8&ylP5FQD7s'PKRPYJm+setuptools/_distutils/command/bdist_dumb.pyXo8 r{RV>mBd$( mggЪ:Hl'??3iފ֔GupYU$]. a 짠̲I+cޒG ,%AhmBZPI3QBc_{cY<{qQf; xbJ' p]i&tJ[Lhua+UNKq ]8Z芌5TZnގi6&XM/?8蚫9*و l]Y9 Krc{Q$ ?5 -Kt|q 0eo@WY4n'2f;/@踾VV 2w'Gb78蓑w{//$i#u" \H!1L4ZF@bȸI?7yռxK^JܮP6KЃ>y-;vx{nOIX_!M@_8!.c)5 o$0+5G&f`bf$o7#3ۓ"mX})tw ``2'Y0UN'\op.T"Z8~<Йaq{6lV[#zDҮ/S *(ΐ:3^klڮ߇,VXNK,Ns74R-p9AsS?Ew˞NݠT]d$-]be/OX[ ٹ>tBēXJͤraْ"r"Q Q'y(E%)#ߦKTarFD0nA ^6+?JNVA*'ʔTW%d>Q7HVH}V6aZ}os9'gA$Le }5^6}Z̲{g 9c͍[X}_ʳ ìшìNcHaA'=(ºXjEjJo#LX{A\첢nlC=Cff}eJM$LBsXWjF|_iE`Jkfh ʥSFž7nX4yp|>q0g39Z,_]Q*w&};hmK:8q~I'ág!j2Qޭ0  o'0W]hegn*xE} &/{7[tC5U-6vVֺhCML]ؑ?oAJ@iWdl$2˦qw| |mV.P8g( Fa+߭̋J S4ay>NNw/;/(i5[h# H)y6|Knl7gUa g;DdOv!~HPKRPYjʿT*setuptools/_distutils/command/bdist_rpm.pyXT2OyrseqWWyͺvo_!WUp )uѿMTmGaƣ$uHN*%Sɍs+}g`Sy_ÀԈ@l|kԟ7E?Oœ Vh4߰ef1I=~|]!7:h"erRXW͂_m[3PyWb* eںaK':+z2z"A2{jzIJmNKFs `,S@bTۚ!yIB`2nH;7*+b6VaR8*g`;:#8iZ$mUr-V`l.hV|/“0GVtG `Ztr.~ 41j& WX 4 ۤvA{vǛ8\M|C <&Q"-%M[2t4圯n `!î`INy >tcQ.x*]m"m#I5Q@.f $lq=aT+-KؔXYŔPLxw`H NNzfl2j&[Z-ab 5}<ȋ!ґUpoLhK"H^3K( 1Ѥ+gE鲊+ u7 .[YN8F<_`?"=8oW? ߠЁB3o6!w1(&XM{*)x8G[BZBOXMHB2WFd J(] F-˧ּQf&8߀l M4! |cCAy *C9xfi'ESJr/-Q,t4iFшíUl'С L(1XEt.!H=/=U@/i(v )Ib6C%H 4LḢ jsj_p^ ߕ0Ӵ߀C|:ň!:PDhCxS>ppJ$ 0og~X 4KiaXE5%qN>{.fBBae@C6%٣>x@ā’ՊLڶ(.j60Œe ܕ=%9Cڶ6lhքb94ޟc N` י;_>z-P<8?w #Wo>|| wN~NKY@=8x96N;w19|ҤpH>}%wFOq'idD6mXD!vj zQ {$3nj77h {ø \dEL*Fo21u'o+щ%GjEOexrZiNx98Nq~OAͳL ZJ=6aN S$]]:F#Q:+2F"]!{kRjD En`I]]"r3RcI$bWo8{)nq2]H")j~ TТS@f$grMGq5!97*\$.r/j5tqDވHǪ"]yIa)4) 7V!Vs3Os mX Z%٬Ô- &%0x1b৊Ӛ;vo_@, ZA+hsQ/0YH`v19;,OYz2Szy620}<4\s[<;Dky 0/(k:J 6w^wC2gp$}VcZ؍֦M݀"l؛9^͖aTЌЦ_A2>@(fC_jw*un"HK2=B}4kФ#94R{<3.7,::ܸ7l3Xqڻx5q[4Hwqz,3( S`)k,|#8iM{)nh6TlB1B׀.t2Uv0Ąy43钢(`s7}%El?RCQp# GZҼ1auO 5=7}Zj^wP0zMu.-ԮbqXq.JNwŠQ]FtAǡc߻f6f _=u7[ M-K"*h2L7*z#pZZL&M.u_,oץN,EH @ # 7O~@ssBd@&zÆ>Νፊ}l5W㙍EH2uG6UQ;t{_++|=+K!L ]8ǼZSH˕ǽ.R[^]_8gA7%-Vf3`nֿo5]Hz)JBkԦNԊq4.v婤e..PAlѹ=8lR=X p:Ԍ=5GsVk+1 2=C aiv0 ,,!r7٭H; ;Zȏ]r+ySc2XqٙvWc7G'&nZ=Ɋ9NF0U:8D՞tO սV7QN/-<*Ti}Zoss bu~#QG h8D\Q'}  cTia$Ncyy7l6K Z&jHvP\{"ne3qST:"AXOo$``jP3-Q$‘ߚmD m#V<L ;GXZN+`b:u1_ѕt=x$uoW[4l0e! ZVv[O#ŲiU>xBGi3v{'-"bG 뉻q0Fh>;;{-Nj7Pju:xHR҈e3*.,iee(ô[NGwm  ϫFh4 >@NSxNuR%EXQL1fku]"G>VjsO?N$6u5ѵ{սTWq 61 ι9nӹ$?߀JD@n+ -*PA *@6'Km2IZAQSO+ǤJB=t5 + s( Qɩ港y.LG㛁]4qX~}2t+7_ois qsJ~BS fAE눚]Iy)R ]PuL西4Y& h8po+ϐ"I÷ZGpc-VTjgZ>"*^ލ4ڟwwVZ=2|I qT2֠U,Wlmj`Ƚ7[_^4 xL:l60Rwɱg7ѷU6(,SLdm6`dBˬi84 f6āεpWZ *o C3<0X {- >0Zch"8"opkQ3ś8ś:`0DZ$ߤz75]mO^sc{hLK6mw3ŒbuP|3k 짩xYw]Ѭ$tFT%U*KPqP\Ϗg bS|t]H}_=bn8f[N~X3[H Mwi ʞT ުa@c+,6碲ALAOSȮ;sLI& ( 0SRQi`쟻n2)0>/<\K޿}!VO廾WO?h)s!Eg{+,;ta>~,azUi8gv1\g`QFM&رZ3YCREyf7*0M[QOtVsk+}f nkMwP9CjԱ+dJ\Ԟz /1!~\!~8epN&2UwǨ  LA~nD6'3ltRe8~D({ H5ʟwapl%H sTvl<ƛ*weM5]=Q1rWޛ IhqhW)Ϊy_߯9O Y_H̷݉~E"Iޮ3W@ӺU@gJHib[g`GX? L4Ã|҅uv}&IՊTH>c%ŎW-)bį^:5a)%;åxA=3f'UZj#Zmǎ7L,?_xa!(WVvW ՚X2W\3])n$$"2u0\`f51p m5SiiѾ's8[EOHTuސoU$_iz`&[b5B( ŷumQ/x^ݱx>ފXkћErddo0%aڣ "rxΖfp׏ॖ4ll I "y#esnbHGx&  I?zɗiaeO ebOSi\h^[NP^V\C@3e3se .@gGQ⼔I > dYCɋ %E ُʏU lBK#KRKeEk1t5YM=3x|#As7HqC-t(Zb[awݛ42; lS7! <~Yۖ5*D;h$WC`>7ӻI)Y!Yb!\V}c\KQ`M#aUlWq"҈mS@kJnzhH~,% S=^8o)&*(> vqi It\ò#ފi7o *5ȵ;m~ʘAz0F—/D rK24\1H`d&=M8 *m^xTۨk8 b͚tS @ #$*6xoxSgR=ԆƥI+x?d,Q,`j7jOddH)Sb!mg'%`5dE hT3qF腽C [*Q Z Ʊ#hf&jHA|5ܫ`]< ݀״_ͥ=ވ?^VC$sy9a~X.8i79?Y!@5dA b5as7BL8CDLn'X6ژJtNTNI)*f{ǫrWBH^:欗 r-yG6*PKRPYb|+setuptools/_distutils/command/build_clib.pyY]}jQN4J-E1MmѤCKYTIjϹ(Q=;@bsϽ,u-+ݶ\塗Myl޶]#Ze$؟dOr6,?g=| ÆƝc2E/^`0Z1HbJu?9,6azefy޿);9q˾h_0}U`FvK'3\َ\3Svvwǔv3JyF8gh`e8;YEǽBA;aRۃxoT}{L(ȩzr:nSȶ1m7>X~d(nx ?!a66ND{VG9*zt+#H!6@j-Igv{aDS@3s jlJ BgYKC}N:I67{XHg8('FB.<vJmŸNڧTzu`Kš$9'ҝz$JȶJ#_D) GEd+mgwsiq_IetwD\1Du#J?yf"sCCwQ CJÆxf d͊&N=ZygRB`i6L;/dX 3!ZƃBCn i٫F} F6+Eز#~1-obhEi5WC2* )H:HA{O&YaJOd*>,V,{?8IHUD.>ɚNKQ$ř)Q%&J9VOBtѝP|sp{q#9 y{Kf_IrOWF_V/ns;έ\<.ֽp?~hDNĈ(oы^[<1UEx]UbtfBvt[mˎ.e.ji-oe1ؙXdI8)lNd)}^-N^=2hzJmNd>ꐓiCj\zQ✴KspL\Κ'XfgK VOp:<~̃~"U~")7Px.I׭Q[M )*9TΚnU<;nIo00?D\ڡ0km"fF(7 3s#1K ~kȸTL+I$IQ82P&5F".'~@o95(vO#/qGQd>UP]L.l{:^mtX?xv+wF Fe"Y|vcT b!qfu F Fڱ-sH? sя%6gì`-N5RPģ^+M/OsYc-y it~wݳ#;Q_OO:qgk K@/k`x1/kFXtq] N܇é۔TUu?]gNb[}‹ N#X'nPj\HU(xXċz+6V&Bzx:, Yz{MuO8+" N샍ċHU"PKRPYzM#|*setuptools/_distutils/command/build_ext.py}mw6w T.Fb^39:4g'Id5ɬ)RCRvԞ/7*nчD& j2eUu-eU,vWɭN7RmEb%Bu z^dݕM}m}%;m mBZv34 6EKqD?fTR?i:[wNmÂU5|LL?w/O]-`R庄&b6njZq_ɶmNLO|.ͮd{/gYO czMu-ػԋƴG _u}7WXF nYYo%?^ֆ3Lb urr*Z_hy'wy#eUJѬ5&ޜp X )w9z_UyJЧ@y |=J6<7?7-r~o֥A  !Uw0*T ٭ڒV2f10Ň qUַȥܮ([0|6  +q_7(@|RbhhҭT`S:2oaaX€bעۯn6y_5aR5-':lwIUAvmkK  )C(Mo;9?4Lb.d1CRHXW1LX~eEYbN5hɁZ;L!\,[d}՗[XH_x+ʬ(rdDq3Y t:QkZ!k%DZ p3ʽ,!19Օ^;44ix"P Цnm-=V* %@VwX~[iv[*G ͍ly6gҘZ@˪b,%:4`Hf X)ludU ؃a<æ:@8Oe߸[S|8˥%)ᜦJt&b%5PTOO@r`}ZSoHe]%33;db(TX@, !$|״9Ubnyn4𓠊VDk3Y麹Z $%=,m_O>ʁ_lN4kYC'Z-75Z/fhw>tf5ioWқjMWRl ޹-bU 9]R4idg' n PHp|& + HIJm[ )h_j}" !.`>5#tq4^hG_l_Dc:Yv_SY2*9LrW+Ոt(zmrAh1HY :e0sAc9U.A` TR"郮Ϸ;O$̣%br}ʅ¸dE~/ғ}v ě7!ORL*M P%,Fȧ-R424hQ!aFRJY}|m3tˋ&" ;"P+eU^ kbxpFVBh= wyY.lw]Dx'rf@?QH*EEDёe ݫ|`I;@b4dl i$Z.O((H*0|%PKd8⺑  V/ MjLM0JdTwZH:ê!F:L07rWe}`+o=-!_yt` xy4>,.ߜwux˗श pHvJ R<ɒˌUzv&_.qahUl9|WDN!Rؒ<2b/h;8tY ys Y2u:+; Qי<엦Sg23 ~&A4 շ!FÐsz o;\7_=yjpb `tmfXy3LP; 鯠A+K~K^1lbƣfe4[tSwp B6:Ѐ',5l)JVn.of,ٯ25$eBR4x,E}X'jq:4l Ϻ4$}dUv$)Lp3+M8,!2w5Z{ kʶ畬@fBkvKӧdr@[z{]~_3 廝ꓩ=v@? {5bgO]CނQ5+O>P'@+e''*ҁM0;O/aL5,qBz;x0Sg75 /w%kq/y@J++V7ru{/]c@T[#!@otOq>θdh 1-@|=c쭧 lTC8.zt$H!4Zq_Esߑ}W뵤KxI;O$_́.?)ǒNr:QlN+uиH1 . 0N1hX-('N~#- >P: Qd伻2%N}~ P+ͦɎ7adJBk;?Бi_E|<'`侞 #thx vݶK( tDSho[mک!V/1o[ HF|lJQH[ą@ôp瓈˳$5iJ8Emqp>~Ӷ*޼`,d)dx=pT/GW銋2{h'fĭ?%~G[L#K)L`D捇0aM:c \$ t<}p 5-B,Zx0ѡn&T*ӷÊ /%6 B* (ϛD#A.spvTݣ|U>$'Y<%pyj\me9ɣT_2K"oS ':#Cz"^aL !ڇcc" @pgF Cq&jU;(U[ {;-f801gĻ=r˘׷Y8eݻC[τĹ{PJQ.d֐$kW-,;dukd^a0bjGic 1R!'‹Eք9r(ӱ:w O%ཊNiu82 $|0=8IKk( =b+nٶ erp8tvfGTr݊#Zp0$螫 ]f~ `Ţzϱ sVtpt$Ч9RS)F@5|u%%M餭 Xnt01o{Jxi?޷ U/Nrۢ  aKp uf5 HO֌V܄TZY6&I ۞l `91 @0H0ZugYcaE/ՙp8#52xRC:}(0쌵9ZuO9z[nnz.DvxA:RE>Cn4=*Ú|D"l>I ~]x88*N6*DJ:Ү>)Fm Ņ1)Ù2Y#J$?_@r$ O+#? Yƙwhj)!,x:Q#vYFŨ}?L.k1c_W‹-M#xkPNsmNen}LP;6ɌV3|*]d&[etLqSZ!mF*نy V)E 7NnuH蠓#]c˵ tlpfoo[}Q㧼M2N+VshA\IDbNa((͆"?9e RW"'ήԟStLXw(gLcdWGSC}i? tMamE<< 窸&-:5`5f]l2pьPq6d$ZC 5k@GC;>6g!,j8FQ䐺ֆ!W\30V74BP֠zRre-T_EMQX`,K5"/ c4Q |a 2C|f3~L$K>;pz<499[ Z~ʱ!yq ٹsD޼!!Kl? / ryILhe{-vsq&2lFIRArƣieȹY\ZJ7Cw2p&DA/gQAB\MpqX,fxinp? s7s;p5*>J}vo.)Z: ?wf=[9؈jB¢Ƅ!glv&ijҟ?(gb6%%Q{FBfT8V|v&Ӥ>>1"=C m'(Ca H+>Kg)J۟T;ؓZ?QZޛ#*` dfʲ3Q#Nw>@̩xxC9rzM&bIq<B +$cP*Ww/ ߔL曯ٟ_/ɌhUl3`_MS0-W0:ź734>4RXʄR2o?s4 ("2Pu3؋&^ v=i1pp#ᧅ?ׅnl]I^viǔًrȸFWG܉ P@حv{0IK ,W0Ulps4%]bNkj9mޔE^?cpΠ>/Ԡg) x8Q8oBY_n>E)Zs]:prLO0b] jzjDR/U(88ImOM/bjn2aL2`|F9uҘ΢(j9W#}$Z,&i Ey!~W3}4Ɛ6i&@/^B6|`u= *7AE2?HxV;&K!QI.,qݪdsv -9nFgp2,l/PBf*2 yn,r õq]nmb)˙ۻLpN=WݐNے&y.0͛腅Y}q t҉wtDACqQRAEɹS\Q$+$_lI8[DUHwaӍ4AjL8ňdNg "!!=ˬuMX=z] 6>SתV&74]M-`k }^*Y G@hrvky?I :GC\5ū+ۦ&.H_UV/R *ѻjJh ̫1iFYߛI`,! =A[m ;!w;)nlN d:F2čpf'R3m]z؊7b̿c羲g 2Ӕ$p}g@H؟Y"ZXE,My˚ ,ؓ<@({#'뭷ըoѶk9/μ-  rQ& ,0eo"R`GXQJwit4PZKD 8_T=[כ=3u‚[(OQ% n1\4G 4pp-SDCNXFΥi@⃡P7A,~Yqqit@vfq?&Hh0L~ʫ['*fY2 hQ ]\h|)EwX^̍h HUn*" S.{hj4g`c nFmd-^΅Ha71cv0 77}aKӢmv=C;&Us rFho ]` .9e ]o7zibx䎘l>pij!)ZգG⊧1]Ԋ4 }[M#- Ěc1;ɰ|oDjpLmntI)|5ic@x$ypXGIVN^Gh`W$XdYH$6%mXK 1"vdz⡏_W>ΟaȤl/v†up Y,e(0LLsC5BtY@Q<DCndbI]h?KlFgƈ{9H4REկɃ\R:5{H|ؙ̛&cJ"^q?}R{GAUŏ5VgnO2 Fh#\V,1o@huaPye %伮u;WXF߄k`T^V5Gpɚ9CQ']5^ΗCp#T9 l&Xwj8?Ꚑ=gAFDSdX=VNqd&RLJbu@ %%tܛH TŬq4 xFx`]EA|hlߒOh׈]{c gq"\90,ao_Q膟bѢ>T;EwuT9KwPV Y-b; ׽E&ayzO^CniM1TU|O\qhn3gp?c{au6|"ۇra,IX^_j>ٿoH8R1T-ROG|CDhED snL{(Mel ;$''Iuũ TMz .Ƴ$?PL/Xv~11L&j|IJ=T wljQN]CT*^qkI8ڡhʒ$1d4™dnsullk9#MGˌN4++0SQ/IXT 6)%}yu5d G}RGD,Q$+I{֏;`yg~Y ۿ;Ti7 4|ʫ߀=4V84ɻUY:Hj*64/qL3K{U5"W(tvMAǰƄcbdb؃?`ܬSc6wCjx8mH5Am<ViYLEL #kxLUdQ$gKP5)?⃓/05?`r;:KJN׈ep}]|]NszG̠9EFLۯ#}U<)}^O6}|*xիK*WmaW~2dtHBd)`MNҶܠ%inA߱Rcu6%v5ۜU^\\z{ӗzC>@_jf},Vr~d9WP'4a:% ¼*f%iu`O%.w,D,)YUZ_ܘ)u2_`XQ?MPE7Qd%KX8Ж!(޵?jy㇎r_a^ǹ*14j.]yxމnW$A;".ȂuayВ81A'Io,ë~4pQTS|S*嬮UN2 FE6wo_\_^\]*Oo(=lf?_|:h>" UB?.߽M1@hП#PKRPYe@)setuptools/_distutils/command/build_py.py[mܶ*ER̭\$˱+N\ޚpf9$CZM\noZ~@~fYvhm'p:/mw؍竫Oc'N%}cܴəeU{ifݰ7_<gyLÉ^cp{oIWÚWbIoNW8COOMo|nCALnLÖo\!%ze?g猍 py>‹pX:!YQ̓"ӝD=ӹ!Ei71 n!^dxW,?vG4H ϲrFͶ#Wa rsڵiqb<uj.`wwr<%m޽f0G%ͻ3Χye؊' 0aI_e+;@XMkP~wgKô=+EÀo!g~eidsNշ$55=LW7o6Ɇ};q]/9XPEoXn5xgtvJ7a߂9/)k IhӲb-=4o{q-}S%yvzDɡe ݔ9]ۗb&Noj c ό\ВW^ %+CmR ^b_>aNpq4j}6Oi7P=?C v'Y>SHXsFJ"8Z`r3 H80`ǙQj{p(]hx_w@ C/Tϣ yw*juWL+~(.i+`h4O s.t)Q Qv&˻ ]XH"CXC{+b`F_f[KO?ΤX?3`8 `N FOxe?}~ F1Ux5T |ah$W@0 $X8 /D<~6FƧ,vBh:MchL Wx5 .mZ%{`Ķȓ)$ (m}d|$a."z*7h\m$a3[5az `<7yB&\~Q˰֥i@6' UGRE aӷ7r5*-{\\˃)˄4,7E.rIZzmj+Z2A)AZPdv$D l%; >ctR4tڂL\2!2w(0oQ VD' Z$G6hWj]Hmh?w']^b L7F>oUPW}@F(z&Eݠg谰Q ~\fYuAU !X::࿄NyTcįxD02$Ph.OHj<Šm\ҽ_7 "͗ G`ch@ 0{#X^k+*d[Eۿm_*n}a(nصsoFA6 ȁ@8*l Ufz/[ ݦ^7 z3bk{98| je[iYbD34\walŀmjZY(5ڝ8RoEZXo.՚PklP~#-!Cm[Ѻ4vb fРbz!FGnpF*bq>_#*UB?[ NȚš`%Y{2ķ a4=BA-l?`fh r 60taJz fgE۩^N H/7PVs_Eh9h:7qF5 e4~)/fV>ͻY[h ˪z915EGv-Չgpn=BkBZaŏodLY@wL f E* &Z;ͷ-Uu5VȇX5wДpZb-IQ)e32I4xuO="T7EFHd k~s[u"X)=˹s3饰3V +ɐ`KS)K{IN_TrqqHMlT7s_)؇dJh%0Q^FcM$npAw _IEYٺM5-?G^K0ݝM \2$ ^ `́l9XDW TSUVf%Z+JIZ8i_Kd@Q:SԿb3 Q tE?$mLVF l.!U ,4B^zO uU?ѺvUQAZ55BH j?~"iMU(r-h4V\DqvΪZSD|:VzV"VGOx"D_rhxDZӡ3.نy߁lkc'&[F+M,W2DǮ<_ׅ y<^$piґ~~*B/>k'3(%wm(jI{vѢC)೥Yi3v*$(yx1E;'Vt=3TL**L Ͽl%,(J)^%~]`ܔw0!?{=;Iզ ʙ:C@I_WNsII[R6=VrkYL W(E{ AP`9L?!!]tMYnC?裍 x="3O:/ cЎ#< 3 ]'^=WuY~4bUPb,W" *<ΝJȠ?Vѹܓqptf&s蕩K^ZH5oθ yFE`qs]16fhBQ*vλiɂis؋[vTʋ7ujU0PKRPY4 .setuptools/_distutils/command/build_scripts.pyX[o6~ׯ`uZGm[yX[4m1Zb.2/9(QP_>:k^,EixUuxmt0-#/<=YqE|WKe~_yE;'\_u%/=,ݶ6go׿zq,[dK O 5S~7t7Sf]S"e*.0%1yŒq7[)><=>;| y8ead^;j-זpbϩA)2]3+.ZR*rLS)!h 5|+n]#=&#(+52iE\[C4IrY 07MMCF3_#>+Â, XnC^Ց·8]!o7޹CdbQN(bAj=nX5ƺf9/(h0e;7 FExkmKPdpiͪ <>ڶ$D w}ٝYYe}Mu#2]t >.c2poidf (e_`4h֡%xeX:P@PpϬ1% .9CL{#E~ۓ|v,tn"4":kX xLt'd9X lŅ@[Cc[xB?adqГFvR,mb3hew '[צ.3[>*; Tj(n! @(ZP{ƆF)G,GO kK\Tn$@&uٟQ~Vj&y9e(|P ?1bt@Pm$F "ClC#1`i샙a@mA~^ ^rPFFy((7(Bz>;R16Y;t} Ft?eh$9&g ىRR h}koH`\AJ]݄e-%ISֶkDRƷη;>*jfD_\q:u`8+vT#@7,(A[M*5pmcZ\2} b;m+}}}v=3k+sJnN#d0-Y1%ij-SĿ|q&ӞNww1~E+{ˇ=,ٚp-TRɦNIHr9 GALx2"oApXV^_A{3åokG Km~ U9fbjp'V0ymH}|`J͌2*CVrv5?9C=ܩazPrpL@~WIMo@qm^  ơ$:[*,EY}|Mo8`"h9/<{,#:Ֆ | WGGhIω#h,O$w pvԛuMoqZ7F7ziU8oc"8\fK i(0yT"ɩcj v60dmT2(={׆"[pX8ZAX9n9 'jfyO'mW. -&Vo3&ݍXyO@ Ѐ}`wg;5FϏpwz%~y?PKRPYd':!&setuptools/_distutils/command/check.pyWK6W΁R@O\HS 6H!XDl(J%)ﺋ$n} rޏo8ݮaJqU}є?S7pQg~ t[}uC/5 M5g,keߡJTrRqhs$T0HT2Y}4}%ڶ.EPy3TTz~gD)qjȨ̗e8FOC[TUL0]Utj>v2,|XG\xQKBH]R})qa] !-2-g ȶR%PPkt!|X @J ,j-p{qvnsUPe<~7;2tLmdxi~ sTݑJR}&u= g~};LVQlD(5ajߠЍB$G2A^xӌ.e臡ЉGH]hy]&bAk:hti(s-Z֓%=9%NyUZ$"#"6)q4k$ٛ>PBcljgB(UڼI-zţF?))Hx7u) RꛈI q|^qؠyCr%pF-]Q00|-qr;DGdfޒG-S½Ő3Hi@Zsl3P ąI@*PA2yy9z7b.5y {+ p{ʿ{&rPZry,'n ,{1ʈH &mBV+]Z4_ qsons\fM:pnDQi|FUd Bz=Ck7dHISLN0T ln)< SKɑ1B%DNx͆7ΞgE^PKRPYX# &setuptools/_distutils/command/clean.pyVM6W Y6` $=CAc-E $3C}kͶ<슜̛74ʇ6(ֵ04 $׍MN_?ȢCI&8U%g$|PA%E +)EkΗ9)i˯777_%Xa>^t`y`vXo1IJ !7no!WN5AYwFhq;Aide)Ic֣ScӹJ.i7Iy@;OQL;tO1/}Ji .Wu΃u ʖ+)L.pbUTٝaT2&L1CsVƢxg)5EܶiCakWƀIWZҝ 1fT5(UG}O;BQwKfR3Vy8R>uPUy ֐;RrzGD'7ȓ+~Fal9fۗ۩_SUluYYca(FaЭA̓ yE9NՁ^TwҝLM34_kd2HvRn|}L$*e6/t֊ Y.x9}ul? g|OXȄOXn99QB^ݹju<8 AGXQ;"42Rr6bg93K<0X\M6)L2 bn6s=oPKRPY_6;2'setuptools/_distutils/command/config.py[mo!n4 _"p4- zk,$zޙ!i9i, {E3Ù!EQVRmRYUoMՔuXw웱#u lYIՕÊ KKԢ; XŋX'N0Edl70ՈȋU2KV -xӔEʩa[gXٌ,3)+\dKUV0^U-9YD G>(p.J`ɜ6'D.L ?XSTβ^h}+eq/S,ZtjpeD3%L,҃qu98,6(nQ-+Fbaڤ5;n|IL*RZ|~EN_R>ZKn|%VKoD-Ai]^u*+Frbe}IAQzqł4ahu`ɄJۢ%iE[/ 䋽0[h^j2a@_nhDJScH,3ΊV! FB+PP%xX0BȋZo5CI2J$jc8X7 0l92KJ :ּo@YwXtS'y1"ReO9y4.uQB<%PY߉:f'Y+ٷMDؙE-ZށôhfA>*1έF+ݡ7pAfܮ!I_}١o h,^%Zenl?pEBLO6"NvpH:vEQTcH@c Q[9|Q-5(qzZq^za2`~/<2wj@E݅\[M׭S  )%tM?b^F 2ڮ9߶QdtK6)Ѭ:|_}rP [n7< x'4gmċ8Tq"?_@xiYlmvlxX!Rc RJe`;'xN"qh"l zrpᄊAw6 ±k4\Y 1G'wazk\j@XwƟ3A8-uXСP\L8~'RWdFԪ\Lc g=͍'G/ ,,S@O>Bc  !APmۋ*x!aSnrf@`D9Wx =Fzx6~~ {ؖ6C2)y@1j E삍 q~ B&q,lG e'Wq+ѿ035CjxX+Uz?9}7(u^fƛW3>9lb TIR oM$`_g2 7\i 4"|p⿴FBPBrGQ 1@'YX-i;bC=F^{_x=K. f$VA#O+6x 4FOP8ju3m]7(0UyW; 蠥q&vyrZ-Ca\Px"d5?8>4>3N¼ڄ1c2b=L|g*d6`q,Úie5 r`s;W{H▎11ܓ.Y8a! i*a)xHEӱ@Ÿx?t }@̵%1ƪLZ "7ٳ#;T|K荂 pbE̜UqJ(L6BfcD7bDnG' )hW} a"c_{`K!N+~Lx K 3Gc=bRױ܍늁tjݮAŸ?3ܯ~uo<`Dbb]Nt+'|od[yU܀TÏXe+ ZR܋Ҟ?c-=okaglg@QCEcb7F\e[fg^Hc)_3WBז2ě0-bI=@\HLn^lEoEW@ښP g}d`':kl;[;e =S#{*SuʀEMBeVZKHUzMe-T 3w7 4R'fjR#)" c{n"`VfZ_^3 +3 )HRu{:l0(ȧ*)!Zmć{ו}@@ pli40=㿗E}cz S ܘEނafF0up233Lw +;јS t/}M%Ӣ^ZTXzث/R/\qFy4%}$Cr5DIB7+F"Ò*xM܄>oaȚXP0ϧY(X]vEJm2tu-*PKRPYZ~u(setuptools/_distutils/command/install.py=k6WMt(~frSWl\])caY;7P3{uwT,@ndʛk-6+Wlڬ(NN^lwʲmDn)"$d299ɷnYm/u[UET[sBu~}'6/kW~PNj?̿~r</^?7%e+ llN S^~ ?Yu]Սygr˴uUo鹆 9Ⱦnbp\vOﲺl(MV^y]UmDxHvRJ*nѴ6 aW[k ]Eֈ'sYq.^ם<9^t1xhf5wl˖okDj gӍVn/eѭdy SՍeZz6[/^?; kAUjC'~:T&;'CfwM|l߷zx F=^ QCk~07"_us yyi7ȃOoSj+;1Ɛ}D5h)[xIpŊw4=  +sՁ,:]#krr,zr-A|FR`}+#<{= l$`W\w\Y*<8"=}8Gli\Q߉j$ UAs3Ŝ k0؋JDZpqVD)=d#@ӧXcq!*W)_e-0"[Td Ö<_|!6ɹ eӞiObpK^ɵe #qs&5,m/VqZ㧖mWᇡV:0ߥBrϿɊF&No04frM[wyo% e]jIk?\7CCbVq$ mYlvsްnͷzqyf`eRw)kĖ,A% SWȘjҸB Όe܌RN$v&g#8ӟ}AC(=eˍfIy Ր̳f]Q;ui]9F>v!JQ@ݪ ؇]qk€npuiLny i)tX _BS?bE–RO.m *A6&žLF"5)4F<q99yQf85 4 @ɲ@SUK!e%پA\L4Uj7H,bE+Cσ⸨yEQ_r*.Hm4%@cӀ9!aF 98MXj9{zK*D#GŦN.udkԅzqוl8e_u#_c}0>kĜ'ટea=UBj:$tt|#tZ{C}~;0 8"Xo%$;[,"_-Nzp>qb[BR\ ܗLӏQYGO)W:|4 ()dt;=;~V qMO%c2%{Dٻk|1Wղ3^v blUP'`,e oA0,@#F lm1 Ν4`GYUaCT> [x2Q=[*dVچy wYz#-`ǃem X \nطz6NOOx&Ka@g C˼ͳ7X[^F޵b6L `ϔl80#ۋ_xDWr#ɺ  uXxmϚ4gᴿG=jDcO2Mʂ6hr_e{ _1-%Us!3RSTZ ˆn`#2h kzQ -Q vpT( g`®O[ht n GM?F0u~ Ę1vo(?mCCQF`*M~I%dSa(B׾N`$B<5rFQ`37/qjAPum^] By*w꼝 qG7UPBOMՒBY} ;xyO5hH2ulވ+K-:'fltqVPumY1$쳺F"f pZ=:+G) h +4Șċ67N6/1U$\0qM Mj)TГm 8zkHdZ3#*U36RTSPfFF=H[*݋x5){pAm-i' tqqת Ȃ]w@9+:ؠ#m7_fPe++[[@n!sacXhCh8nԥR׽*=T6h=p2aLXXfA(wzq ZwG`c+)`dLF?.a Za|(~PYܡ[-q?jmմSWcU zNUEd䛼^1ypC`ԕ-1čV=uv@_4/w ڬ`+,%ѡŁvE!?HzJ!nR!L{1FiGäcԧ?qô>AaJE~I9 _ q`r ya0X+$I-87`X@"S+b6)ĥi (ʙM+]N\LubCӚ&c('˖G~]VXӂpz"$ (t̵~ 8%*9XSop,72l_USJ9.i` 5(Ԩ yl6)́/' FJFAXrd&=6 Sbϩ ʩAL]#ux2TN.F Uݡ[XԘ47hDۉ+Vb-4pʔ:2Klӌ=Sf*&в_s DǤ ù!e2J!Z@`:i]N\?j 9 MUJ:e Nq1qĪKRnլ~li=no@V˨'S ]|n9 驋Хn$?w0/eVЪ3L!?ֻ_3"_ƃexoxEMnI#bQjD+CxV^.cLl2T\!++(}zX6(p>Zq* 4Jil_oAi]0mTEj+[8֢jorЪb9ҜTr9nje8 cxڄ|Qr.uRɩ%[GЯ0'꥓0: CafI{Aqj:gЀw.8NN+Bf2=Y<׃.~X[Q]A1LP|*&x!eoh@H|C%j+M'nspgc ]zRtf XQ;CB3~a灉I31P"~^5 Z{93KpHƥ+f ySo_O3f%Pe(X'U9ɧ%r °.o{* 5N{C.gl7Y-Sf~?wuJ?). z8wœQ58Qf~ PX1INd8 χLˬO NVUo(F(y'wDNݥN$'S=\UuoA^=9?fGwruڊHrtaI`6 mŗ;Paʣ|&b L=?07~ @c.a|J2J6Wv)$uR,Ӓ`lqi19yRs`=yaR_s] FM6 f[`C޺ ?6= JKP} K#RWĆGU.CŪ^"+Cbלŋ{n_R/.n 3;| dnoN=W㔮b h.!/# p!_Ǭ`wNύ aDv>j$ȗ=v;};2uG <7=G}z7,qn̂CH!w6ӧXYMVo%vU^k`Me?,%asj\(g#h| W)~Id!V#^1BK1k(142a6I5XI8Z8 Xږaڑ݂$Pn7gMSu<#2SuuWHCW6ojS|B\*eŴ { X0Xd ^q|ײWST]q%x9r6[.*9̫/f316(:dN?ӸxI9x{W\?âC%_.NU&Ѩ>ZhG8S'g&uǶ=69 F+rS?oj%0Bftjj̀ƥ`]Dh[hzcB !pȨ.-⫧Fn# ZDZް|v] WŞ1j\̩;Fca>|0퐑5)%#aRK=+,o&NS=^[O  Y090Ǯo.RߓtYRA7軄ktoTҫxzǸuV<Ԩ~x+.B;iuudOH$'] ].jdVC?"SlHJ{"rZ.{ub,|F B.[҉Ts' ܺG/ӾF46=P:}{8"@ƀӚ[v(wNFTW1Ul fbVW@ǘǟQ8YXrU ޒ,%lg[`;n*U| t !MR+ X^=2{Stbh+b#+ YOg0K=fjۧ3&fG~9R-GM!2s<st 9|є6ӔxQ;SfB`\!Z/Vv@& ]ul -r[zp`y}"E]2'f.oPKRPYS -setuptools/_distutils/command/install_data.pyVM6 Wmcl P-=ӱdHLl_#R8+idk:B*Dۖp"^߂;$K9dp=JUae8hrF^X'?Z e%(, dk@(pR+EZ=ӺaAqTЈSS 0Ƃs#K9W4k(:ZXbNО9axx\@Bx`єYr'_ӄ!V"!vu ic"8M&-Cs*0e~F oRMgIq_Z>˗@ z>9PZ<3b[O-凿ԑpk/r\|= ӈR\ބQS*k~^EWDcryw&7ӗ%#_H4IufDY/ {6du5,y11[VYxcy5SIOaiZYCٸb>He;JZUE)?eDm㢪.!MDfU  OKChT>;ΘHi96ҊM5(cjs+7܋渉l7,Y/5k$!Bc!n N̕u=dɢ+ ]gUš6gڇƐL.)Dj4kcS)7cr F0|غ^v)Cb"xryMSX7}t* ^o&%dw d3gXvcVo".AY.o|#/&_$5|5'=N\npwqIDPKRPY+mM 1setuptools/_distutils/command/install_egg_info.pyVmo6_qPZ-v-@:PA&f#I-u$Q& {=i}Ѝm[i4%n6MkE<S &/kI6Qn1w-d"I)Du+q>Ijg[oJnsժv .IiI!J ni@VZP|kF }t5p oޣ+̓#?H}A,\gkI`h!XP-Ǧïs1c58sCÍhdni4kr7:B=T;(#fw\oij;8 3^~R EfSլO%=.k,grz39ba'D陟$A%?iސ6f6zCrxr-_cPX/:vʅzT9>aa(EYޜ™]XB]hOۯFyNJa!6WGF"Tepۗ Ec0/XWdR@cB &'bЧIG~U+| gO֡ 1S#P/}>C4Y{;^cdOTh*u燷Y]:Cw~ Dqa=nGOT8ue9<; #@J~/v$;BCקP2imTstl'U{?`f'PKRPY⾉0setuptools/_distutils/command/install_headers.pyA0#h)SVzQl6Nl>DyɲLc 4&Ժ9T_Ac&xgTNQAlfHְգBP ],˄f,@`]l/xu-oz0 hvdRY> з@|Ha"egcI2"Ey:/je3uX5 oGȼVe21ZQ5vlMtG-Waov<nˎa_ܑX ɠ*RVqw d6Oʫ[ys,DGc$ԁ!0lm[h7[%IDGZ"I͆{!5mp~U(MfHq$0&# ?#&?55>l돚u VH#gKAV4x+6}?^~KrE?ߛ NN/fTARQI?|vO'!r ޟ4A=oMkP| w!?3\`) eDU u<# !<Ն4;e?,/2w*"d4thDyb"#2G$玿\qacx1[}aS88ۃޑC6i[89P*-y-jVqpSp`"ppcj $8pt${#w C{k膧8\>a#?XaCygT\^mA]5&Y ܃!5CW? C[cFޢdgNoVO.W=>JW|jOq'5Y(wB=Շ+p4^VTjgdE0 ]InI-I9%Ӄ6QmBE~vN&Y7/YaH ~(]x\swSEl?60s)Nox;߽ & /K0>"):nfC $ޖu֡jj,^OxֆJ+ M,@ 87Q1@J4g#8/$_򞊊 W{z.1en>DVh(n wgO+A ;ΊRTpZUܚ L<Φ1w W^W[,"ǻ7 Yi#F8Fv=ȬfU crQǾOqr9%>C{S9YZPKRPY0'0setuptools/_distutils/command/install_scripts.pyUM0W ^zY B)m ƱljZ[c$ٔdɉ~,ӛ73Jǵf0իJHmʶ-tDot;F#܇H xRBOG' oq]4Jl5lF޵($Ht=)FQ'EK;V| _Ge) W#(yޞE\pksHRgL:gC 9ڕnjII?\ !uCPgAN( 9U#p*p^Si)a+F@o@ΞiQQ-Q< ӻ0=ҊRm fN̂0e4M]@˪3Z#߉i4 ٝ<ʖ7I_&B%84UDžKߝyf' $w{c ,ZDqʥrcab:t~49-+Yv.kHz)4 ۖ^~hs`p \@a_m8>DAw(G#ˎv7>fShW~JfEs:zI|tsөIԽdQ3 ϒ3 ]!-@7uEQtsSڦY#7y791;?oxW{}Y, _ClC'h+)nHtyh^k:;ؒu[}/Ww(Ho ;x@QwESÆǛ3ylNI8kW@ڪbm#edK5 RB("Zj02ZQiff]?s_?2߽u..A HnZۀu%?Im"on~ij g}~xQYY#;q,YΑ\Ie͞{^VI?'f?Ϣ8YT\JFzhԼ YtІET%=T?+&"Kkϊ(Dw^OYy 8h$F`h$vm Ǎk =7\ d})ΠFLӉ~jgf-9͡z86׊W,GT@òʽ{;C?c??W/߾Cf(!="]#.zW;PITE5[RJAj"Y(Ľsz]7vqBoLlT'5u.n;(}Y]B[蛮@9 ՎM϶"ܾUd;wE":| h7}חwl릮.&xs9AԢCa]5<Srk.͟.l. \.]wa`mxy!Z{l?(J /ҙd-qʸSơ}dRP3t Ѯ ɃJ Q^!j Cڃ0tl|p5&\.\Q =o.z4I9D%E \5ZPFCN1aVҀtXC!蓆pp:uJCf77g A!?zF] uQ`?K;Y!\ˏB3,r[g=8Elwfm^J18[(0w4A\'M-@_1ݰϞ}R䙡b\\$ۛFs/~~X}Է;u@t ˺K^!V!>a6ɐ[PqeEv%r!:/-俴Kw@!>X`gt`S9 w5 |y35@^Qꁐ.&HI'z#'A)LhHoMbG<P@'9; 7-㾬 #0=aeDFNBrhMlb?[sF$-u9u?"RE"+M"}#gNVPN 0cVLkMuZ*P+0tQ$`M[LP5E.'Y 5I:ؤH o xb{P Gb6qYBJESr$fiƈ:jb b8 #ef  qSL(a9 alQTNEw׀;ءaȱcJ S٪ |74 2Ƿ^^ taIi/nhƗ{w7eEeE'ܕ}]W1Y(nRXqqw4j(NUHTtxV3ۊ#/c9ݎkL>B?25: 6a+CpQy}`R X+DAL(S"llH'8]hlc$VA G9aM:+JN]/(A8'6Kdny e${85bwdXothWw23~ʆ$UTls3!TiDS] ~(7Tva@ђ31Sg&`yf =w4Wx+΁xY+m{jğvTYpo:eC1i1&CXy/şߐbxtKCzjv. (`Fi:uVi\Z^+/𚷗ta УP@OԫNPJ(w6BpJ8=25KP Qa( u$-]k^*[\0t7ʙjޛ) o&סZ0#ӮhOm_`UƼt M-b-Q(8RYZQk4&?:9re}q^lh[%5kWc<6|\OTķTUl׎p3uĞq'z8HhIf€.($/B2+a1%51rҲHB5B˧20UƷHjW"QՁT`k,CLJ&z~|O[ -8sGs%Iu%H2A>qg$́ qSY-FLX .*Aͯx6?O}ۏÚ@7s qa>Pb_;H< J3:m?9XQ{Nעrr@AD[&$c3UWqA h@7 YXg,ߙy6nD-wث0z4lڬ#-cYQ/y63 )h&We+ _zB+B`Th[&o`+aݸ0K qM9;zeJjD]. Mc8a6tl9raY8/ān=air;!\K#F& fy5٤>C #Wr۳CаIw!^uJZg-J/F )a6e.~ѷ6k!UVn!͙,||Erf%(ԱvB& jU| ׀to a665gѭ+q/!&  ٰ\-.i̭oqB⴪% `ſ#AoBVLt֔} tE|, \+>r<8)? <]c+Éc4(7(?swΧL[ ⱡSS-=t;f+<Uv<;~D"ľ~NmDĺyBPه-%rD_^y $S~y]3(>u6}H0"62kJ}}d&e\T0T 5 ^1Bw_HD {jv+ yؐ8.7)طa!"\G5ve5l f,YŔ: |P4/6 }uڢIY,_$(>}D1s&8-54 tjTaZGJh:@$QBMjGKC9C T1I7.4Q][Q`#3 ca{yJ!!3>TV4G&dCx¹#LQ0F+ ouZ=ԶBdلmx}pRbCkmn$ ;t셡.9$2TUՄWoVWK!(;ʹfsyj[@N)!K7 3({uetG } Щ\Jp\ssrX ':D ɴ5%݁\e.9$2 _Ӆ7+{^Y(qIGo1)SuGőIoLl]t7'k:d٪ 5i*Z&'4'"$2#T1jhv76bX&C?X43bPU4-'wʹ  B)UF@m%22N_бk<t@fG_,U ju_^`gsY; C,KBhu˪8Y4e.֫<-s0A hj3ı[\UcJsDS)30L)d]0c"sD!' u^742 H)U }s8iL6vw-d,l-ŒV*T)^Y!daьLj8PWؿ6DND>q&(GD 5cHe31ډwl_C"Л>;:(Qo-DYK3}M4BeV>Qf4{=Z'NwQXAt]18V47厜8) Eֵ1=]̄9M?(5Lu.<ק#;qHln2OLe ڌ|P }] }Rdi'rhe:7P*'^v6Ӂl^_d ]C{ 30/m @"qd~ޮ$ѝ1MT7j z>wDgO_PKRPY!M(setuptools/_distutils/compat/__init__.pyuPN0+FV4pP%vԱ#{RNy^xgfM-]A@y!aR&ci6j[z -5McQ^ Hib4 $Չ&rؓ582mw$KRlYi1W6:9Y=(EٍwioPKRPYp'$setuptools/_distutils/compat/py38.pyj0 ~ B;-l ȫt-8ڴAu12|d!gGblrK ZE#JChT !ޗKM Jc >ϛGi жîӎEzY 9shy^&J5F8H )sceG%IT|"^-BD)72(G]KS"%c tfZ& pf\pXP܆ՕjBEs rtY̴bHqO!=UC|Z_PKRPY{$setuptools/_distutils/compat/py39.pyUo6~_q,ml'Kx0@}H NWH*[ߑ#YM}G~w#-̭RhfKs0AX+ljڲOuvsvv7Ҵy W2. o>ܧw_094lYpc[˅/V.nJxsL+ф~M,Ymѻg.Kb[=ށUP3W 0}VͶbX6[fU/}S.gޤ^t?eډLBM"O0fAQC{4ıZ@ɅxpUH:|#N"=ӜLьSs~(* :3PTp&;ePwFSA&s)dDy:%p$ݏ(ͳ_Hg<3 -; #ŇYѶw"@' TLrnuYFFVpPh_ k#ڸFrl,=g/dž-0VR%˰ɗՏbϩia&(PKRPYXt'setuptools/_distutils/tests/__init__.pyTn@ +p آ@^ ج(>}$q{nV[rCHu]W1&B4SNd*G$`e ;`K:ey5Ո(-S/fUU1,Ejz2uN൶}ͨCLp[X:Zy' Bn:ԏ@dC.72t'ǻwOήLC6Yw맀gU@RFn1ي]_O"@I htEs1{792:GY9XA뤐TUGU;/o|s(9@K$Mڹ{4iC }@j0xfΓޘQr0lT7 Ms۠RNꫠ$kKӀM/#?dʹd:yԗ~LrqDY*|Y&\ݻ uBFDF#R;y!A(Rύ]-* |-Vځj)c{bt( |9 ٘d:Liڞ-&c-gœxltm8( bR&`vZa4kZEv=6`Q5n51ڢX#"&mArynDPռ!Vl?{h"4T^Z;ÞɊdvr_?)Be1i 2̈Dzo1ve`F`E_,HÏ /L։ #RX!$n:m@T 1`'m۶3+DRہ0"2!sqM?(F0SOBn=%|x.[MrREΊ\kT$$JDQ@~ _qyp*^bCrgtrs>uikQxhWPm q>d'mF&(0TnרଭGX WOo&MԔp } J۟x*ϲԉ>( J3 qþfEv7SU ܞ?7P Wa 6{'+\[+ߓBwflYW[?w[ 6O8 bT~yȸ_6^^nĩ]T['ӬF9)ؘ_1@a>QPD5dH=n(O[|Rآ:p¯0r ʒL3؆&J̜x0wQn:sasPKRPYЂD .0setuptools/_distutils/tests/test_archive_util.pyZMyAжfb̴/,8YhQ$ldr Y Q"yUYQ$w{lhIUW﯊\-2Xe' D߼p8ě<[iXdY"@sW3yPxnʏLEBdZ)ӳIw ^/㫟o_x7põo`jjFO,.# 6|l΁(E.DY`Ŋ3C؜3\i5>Q8fnHJ7D 4%/pX8]1]swF\gBdeHF %Ľ Km*MX'xT5!_LshIc4IKTH#6ki)S@tR߃b!`!ero(4XrA +%_;뤜Gҿ2$GZߎ*Wd1f#SGǞ3Mن+Td/*p)CYO 1;dCbT`[^;#K;jo-I,G vO`dDFv²A^A?9PLڸZUʄ\tg~=,~Q~w}z<(]kkLpiVDg4ͅg%䋯1&.d:giĩd$m BzݤPq(1M: @ Dt9nO7}7]ӈGl#Qee!SAm(yqAʥ*PK;a꤯R,e'LLl܊Q*dPf9HarIDPFB:L5Fi">dqO 1oc(f@񤂉(b)ʊ8H^^ϭ. `XR/kZ+:iLiZϊZNjQL4EVQi3F*Zf8Q ~(U=LM`wu.P`GG_-H< 95'Z҂$HoK mg@gΨ,]8L LA=! E jefW2}Z71 (5qP^4p+scޏ(oЖc}eeOїrXn9׍^'h^_8cSa?BP?K\%?P~h$<*8_/ @+؄4]h= aŷa@mS.O96j'rb+t{6N3> _Taw$>f8zRQK.d_X5K釽ZkRAOwYHoO$m,hO4] }iXr8c)|ڇ㳕] f'rVhN2Y+6ͬbTbiO>'Nu= >:GbbWwwi~W}j$)rUXOFtiV)m~7sا85p Xܥ+ TЧw-d6PKRPYt)setuptools/_distutils/tests/test_bdist.pyTM0W ރmHLJ[FƎK2̖ql =Ԑ̼y<^*LٰQםZ.Tyeo`|ʀG_Ayr,˺h \N=2FPU EW4918˙`DSh@`mc#40'Pv=3kR :N-Ə\*>q(!H2kQ3AFvAZҭ.hJe1ND%dߣ#2k]EKn(&~z(¦vɪ(7 eNKu,u>iM<=nnuǃ>ތbyD#+Q ګ/]5q(|hԛ_ЙJ>Į>xKNb.DKZ9nmzKU%I %ƨ2ohfAZlW;HAUl4 pIaV-ֵx^871%PKRPY.setuptools/_distutils/tests/test_bdist_dumb.pyUMo8WAB!{ `-{HQ6 Z\K$ARq3wM-{zju;ViJ|exFo(/fWUhv?w>KSUW'L'r, k\:M i`KN_u5˖^d YZ' ^zʆA*KKW~EzVSԸyݢSEx?1F{єh[Bf 4;`L(Y#;CvbZx2NZ Ca땨33Eٶ*Y]xu([ީDT Uhiu:Wm]S Orj J^'> c~ *]h.'".,$1b <(&aS&TYC#,v0o̓}p0ZASb)(*I,ƃP]˂.Qx‚9lRU:G(fWpNiAMC.+,u/ͻ _upa (L#8;3dx!g3UvX$cM:iPKRPYO ]-setuptools/_distutils/tests/test_bdist_rpm.pyV[o6~ׯ ʀ#7K:t Cliy(@%,,/t!uOD92VT2Pʴ:JDYFkw+YF(X)2HIqvAD\XTcۃ=m@T53&o[<:sP"$1<^ij:Vu.Ww㏟A_ISce'"IIIPURzqUkro1-  7\UE;hPa5] hb Y4<{ 'sר.9pԁ#![]B qlKX*%TIo GÐi2ȇAOAIx/ %Q[eO0r.,-#m2zLq *N%1U xA:zL*QZ,7?i05:Ě; o@DmN@%@IAFnH?ɲ굞hEK2uC8P5V\_5tUo1ۺzƊA>g S+scP"t31F5XPD$i17k{A{N&v}@??Kxy>L~B0[nǰot6FY Ƒ)с{u\{ kPgN 0-Ds\mfZE't E n <₨$w;] v?tz,Ip5U?N_HLuͺ"J|y,Qn DBmfLkK__\x)809qVͩbLN98.E_$E⟒ Jx=bGepPKRPY}Pp)setuptools/_distutils/tests/test_build.pyTak0_!2c+`c:J1|Nْm>c;qvw'F+Ya˕U4U%t*s>HU8dw_~™25ǙؐvH&'J v& 7iֶWQRxϨ3"JZ0~͕&XF,<9BiQߐhx(6kI#ms@ dJ}t`~S& T|¨L Op L΁F7Շ! he`BCFefk37v²Oz2[K(˦|.l ԣ=g[bMS%NZ{4C>ou~ Oh?O/JS6ꥺң1;_*3 s}raF1/vBtA۔$;PKRPYެPZ.setuptools/_distutils/tests/test_build_clib.pyWKo6WL"9P춽9@K#ՃI;Eq5Pl7O-Zg!Re]TaDhӨ"BmrXƁ$9~@?ޜH{RYmLkUoL'765],I!6-z=qte*MxzR̀ydIFA'ηnV-bގaGI5q[&V H(z+ Tmpė=ȷe"Zx8P&;K($ )),ѥX_-SL`[0) J W ,1<%egťW4M@)E;Ht$E)ӴmFҫ= b{uo$l;4Yyܞuɔ“ӞB1ysǧBaM>.:K%L%t.AlNSvcY\rP[tՍI0Ψ#ڳ_`C9P kLð62΁9z]tx涉't^ǽ<nn&l08ïϿj_!z构Svρ5g5dFCX$]?)Ő(fkWpqgׂ"A ?;DI O^YX WF =VGӾb eǎ&vҶp޶_/= ?G!`& !RUR4).Z+|C#z)$]Oh&m-R4iJDX_BK|4'Goh*Z9X%Htԅčyzuԥ'nLNJE%y` ܙnTfcڳ;@M6Z&NThM#C Q9)G<'PKRPYNM-setuptools/_distutils/tests/test_build_ext.py\rƑO1G qrL%H'DHJ,,0˅=^+/R\Mw˂$.-,ǺQTWzZLfMfUZ'frf\/ޔsUB*b8Aizy|N$4iD Ds7i3 <(.żH9=])oX?QAe ]ʚUu<4b(,=VMiyZu %-S:Ey4bys.2jM#-Ko~bO;=4.’ֳJ%R=\ezBJ$fp{  ,#? ND*M)Q74jǬ}ـF\D2Hv(G@+iqG .xz 'b8<\5l庄Ȥ,IFL&/0sFk礞e9k%fQ;.*$=HB NOEyS*AzTzl),)t-R%kx:38Cs.[E,js$=tF! zBos Cj#3i8[,-:&XYʫrU jLAp: EedJ _3 -'47 >$*@%tOlj;@e$@,agmZ'qF2$^ )`9>J:!? uJհ'8IxuH@e@Է8$뷎Ϫ6k I#*i9J| i.kN :a ICHs37 T`%E DZb inC$%ol0>,NM7"(b2?zH$E n^K7\!`|ƷSRyGzlDuX_1ˆЈ"Qѥj hEJ^O pRT ` (-)b¡%]YH=#4K%&Mۆʬ#iXAf,)#Eb,,N9gECeDrk4`Huͱ=1 @MQ3Z!\HVe. 5'#2$U Lؼ\VU395y՛|j8dn̰:S}cm0ob7sP)@^sZzjFD 6Sdek6 VEFyZE2 EՌBэ[̧>1l;6y`ݪɋá ~ͰC**JT2sW#5+7h~2AWg?<˳7gV7 7Abm8;7 2V&uWK*2Y0&U]PV ]\CƄ*iU@ۂ d{a*zC$\3pd(kQGbSjʎHF'4u5rӵ<$cRbu-&,dj,1 :KigMbȄ94"?X#%leQXl@s}6p_@ ȵmpz>0)BMEz( rɸ3a-l:藾) 84v9V6KoBHYc@Vn"\%*:V+ˁkYKfL!7^i~/m ĢjjiZ-B:AЏ ?!IБcl% nce-^C 1`Jp6W-YBT1㙵,۞SS MT kc3hVe־{>2 mlvSIRE:Mc%]y]H\֊Ű b5J*1K7MKPW8Ia p%ۆNw;J6ⰕmƐ C5vJJo< NA,/:Lo ZOdd\mL=m#Ջ!Q4 A6${ϟ ذځPmT8c"N!w tsRxɸaZaCALAߎy름4`ן, ` yQž/NpC cZc/_ `yab%L 5< ( jfm\쨿w_%`19~ ]1`cm¶Zg,3*BL%Ձ(ܔ qo z͢=pSaQQgYp*8fOM ҁ8Qބ˻x˛ߪظ)$sy{Tb(S9I,UIR}8V{*Ky3LŠNn IXҜ/F M`ῡŝ\oO47)ѫr'y8=S`ƅIDOVig5 -2<'̸sz7 I`WU,3)c{չN]8 L8Յ aΪ+(q(3 Rᖝpc7,l| ض(n a| lz>x['`p b\eN|[O_jܪAq=Qz '` Y$75fmjQ Fc6Y5ZHw%O:Zo2[QJl5Z럂i_9 咤~5 %'P}W C?uv9^'pTj>)REE` Mؕ6F[Bw^H?EЇ;p^aqgK~i8Or29j:ӒnzYIMaKoWXX0R[8'ON6 η0dK~ P 1: ?{ݲf~q9cgCn;.CicXN :/U61#Io~{rb` [[|t_EojZ*i^fr@OHyE`JH$/l ýx[̎-j ;2 = zngC=ph;%lQLs]EoŻ~dR .:+y^*N]׺6cw]->;Z Yhsm":艩-P&R4{}sΠ[R=M&GZ2ڋϟbq:x.Ҩ3mI9(Nx8Qoq`Eěa%a._a`{ e = 9nQSឱ@";-Yj:Y !c%ڸ7/?Tֺ?]3<Ď%x0T<:1l;& 4ZPhx ސZs;n,#Ȳ0=b'-Y.Euݸ|no pڶdk{X1-F&yx9- nWD*>ᐺB7j f$/-f:#y空Kt{oQ)׿,Uv_*k%̊wG5hxDa_x!X?|7xJ>F'xE M0 R'"Hb΁Vyf$RK%L/aBs+Bþwz ~> _EͿΎ*`ʺ ^pmL K`K iQy-͎y*{ck,RSA[  __J!F]hKj_e\-Ȼ$SF2@T|]tvy*zW}a.c.wPy9y3n~~O߻K`SKPCU{cO~+[*ki%?F6 -|բdxb\o'z|_B+K;.^kh7 S-X_%aZ/̞? =V;G|KΞ 2`9 FPNU\ەfUQU+ElPж[V>:9 91!"NRFpIg}t! >"WR24q&"UnQܸ2'Wd yT:Vb]NMKG⏏FdnXEs;Ë%Q~DŽooɑGcVSGiH:RGf@yܡP<=%89RfX!x,_ӢA3(0 :cT| e<- *ӆ#τΉk7=:9pN%%'m,K޺#.H#nn&& .[h罶y" !i41k(eg@7A-S~`E[X*ݯ?PKRPYfzOq,setuptools/_distutils/tests/test_build_py.pyXo6_1 Wi[[`łoFe3HjEZ,Pmlx#)Ҋ$PӢTITdՉ2OmB)D6RFojflNK~Kh+h1ʧ4D֘^]0ɲ&i޸v'f+KDӊ[.,+R rG^Y\g>9/L[z3bG5̸"76+ P }tnQtB] 1𰭏Y,(BOTzUמ& 5h/ޱR񅭦R.G'0aŒK",)^9nǖ@n3m\6--MSG҃HR({Ge!(!%ySN Stz<$ T5(bώAC2t-S=`=* q|ldƾYR.6jpWNC99{/=_|G%$ʛ Gjkwx+}ݖۙS?I0A!zK >{ fr!cxה06LhsѝP^Oo&I2?8!f r5; oQ٫~KpJԭhEGG :q-F fFLrQvS hՠ|V0w=î+5{LTLj-֒)6 Z?a6#"QgڴXU~l'btuZ ٜ3fyHzHTP  @~K<҂F4+33 36Ͼ- |In/ =ќB~{5$6ܚ~05ZᴌYI&Grg8"f`p&!i&}Qu{p0G k$n[ "Lq *Ss7nCW/>sM?6r}͠ef, Xj~IkfaA2֖:QxwdSm<53OhTN6&}|@胀uVNtD< !5|V vZ>J*d(X  *`wL2ߥXFO$h/)%2h6WsUbbT@ u<3pЗ^Kӳ@(6Vgy: R(6O*|VՐ;$*?0Sڒm{ P)F+ձJ2r Od!Njj_+s]4P.wxSYUڽY utG ^JCoMVt'?xl`F(z&ipj%kGfWߘ:ģ!=0 GPsp.Ovӌg#N)Z, @̖G `yq~op(BNB|nX'clڹ\V?Ļ_FY糿PKRPY#Kp@ 1setuptools/_distutils/tests/test_build_scripts.pyVI6WȈE3i Y9dA3e0P(ID" Hu/[-w&T$ڴWh*uxc4}xHek\zAz>TGg VSK[UJ.zkk\.F<Q=VɷlxpU -X 7 CJ甚[jcdw'fY)x;\ex;Pm[ׇ72ClW;b`ikXRA<)0Kg7mi HÌ͋ӃX`tz3KAv'ZE '$E{.".e0Q4X,'aE+U97_../ly sHa yy)?.RZ[^ek(=s )wEJc-(W{T"ZꗛWꓥ^x"!;nJO4+FKI'ӯ37ah C9oo77zkx4o V%tsd^9] '|y8}wܭAY 2n?1TٝwyDd2׿5(3갼oqYx"c2~ :7ٿPKRPYHE -setuptools/_distutils/tests/test_ccompiler.pyVr6+ցd+Sqq3'rLK p$6$%qCyIaow߮tUۆRRnjvfz7.z7Kv٪%6bP;ג Z?WWW5{gFjsA;u/ԥ:lik6;oVp4D4ea'Fك}O6wc1Y(n\:.͝^$aT\p&rFLU-^= Q+3ߋY/p/%"%3\BYtM >˵880 x6WI~8̪+k1L|z3m}&hE$$jh|f@,p׳B] +qQ ޫ0 Xp$$Sof#PKRPY`+%R)setuptools/_distutils/tests/test_check.pyXKo8WAv^.E- TF[%RKRq"}g(Ê4bəjbO Z+me ֩Zӛ;͊-m{3[_ &²nɯ`޿R&,MDhsDRdES$y]O^ QȩoIC}䒯@OXHrb [X'1c&NNTas-wL~m\RY+H˛0Ǹ汥4(OO㗨/BMZJ_ԕ*-c#JHd͔\E=1`xBl/t_m`yLLܟ1 U T 0Qa5^k=qk1|HR$"T6g' 0Ӊ|w(\FGso,c:ڭswxg]tr‰Jٖg.Qà5(H{A;q{޸^&*.i:f\okQL"41 xQ{y8CdYЈ:!| LC\s3I=l읱edSnk}_|h°{vּUAna7<^8I $Mk_V{x PKRPY )setuptools/_distutils/tests/test_clean.pyT=0 +w ԹmP,:QO(7ETmu] %9DІҚa )ɢC]Ueb@{ ?E\iCкȳ*"6HTyt6ꈱUG g$cq+78r\+=LUQLmwNN3 7ۊO`15JkТC\SX.k%z5iuϼ J{0uu2o0izLLJ?Zsxƃ"|JS4K݈r؃ ,)"polnRR@TJ 3gEwާ+ޱb9O@Ln." Rؚ}J*b4!N`_@M~BjwjG63 X!rk>"7`.py)ҤW 4*0Mk^5Fsxm!>cΞE]F9du8&{wO|*M^XaN9deM"BA8`M@:)E}k몀Kݝ*XYh}k-]skSt5k*y*2ViU.N=IZˀ7~#NJX$vRgDmķ A (-sK>UR]fm?f;pFR?,P$TEZѤ;<=/ k<J<8F/? PKRPY*-h .setuptools/_distutils/tests/test_config_cmd.pyVn6+XArjk7`@C-hihH.Iv(YREhuH$͛7á4}ڲZ:yٸmU"M$37wuؕ>9֬ZS ̇#Iu( ֖p|h Jz1pq|{$?oYyu`d;X%5&Д`nS5ҫ\:F-B*繪` 9D<ڄp6GĚe-[G#XQ1ARr/-'.R7l 9c=q{p@uD>0o4ӂ'yb7T |XtB҅ JS|?yrU?X<+5[u/4:AUfU׆LE QǰG?X_o1#$$P#MnoNg=sT"L=jx2j K 5vum:İV5]6t;pXFDK3& 2if^m'{#͖}H5uٗ\/&7o(ˎǖVkTċ Y,W*iwbG->j, qp90_Yg3F-2'{!9;NID_FTBܽf1 uw0;D[jzmTǣyACSL$q/Tʣɺy|xIZL oôz0Bf-`@<,&Kr .envOs5i PKRPY_.\(setuptools/_distutils/tests/test_core.pyWˮ6+e! U]q E*7 h+I1{gHQ˾+Ù334M?,!wE(4Mvڸ8+uiGlvvGdX~c#wՈޝ$o-qHo%ղ%~V=dKԇ$w]6G!Cb1m}ܠQfÁ>ׂDҘY˥z E40mTXb^ `̯0:DE-?wRw"FX~̺JZ=s]y̚`wP( ‘lU|}‰5@ t:ΒI۲Ncxf`Y&n+[C9e3bQVR+z3Y>7g( *\(8TdҢ4l~)$! 1Ѡd̉ώ^S LmwBPG nr%a9bgTņؐѻ0>i<P@v\,/abf$ n,ʛd]0.]xOkhN3UtTU ^qrMo_mVX%M R(bbi8`7FNn"'T\vVG7P_gEr §{C|'O0I0&8KpLڸΝu*31qyӋ-P#ag! 084}sntffZ-'B[b+eofZr*IZ_B!7^x{,Sl@hby>AФВƮ 6h & RH $P߃Ƽ!/n\pI PKRPYM8x 3setuptools/_distutils/tests/test_cygwinccompiler.pyV[4~ϯ8$(e*UbU`H4L4lgs{2,jsw.T*H6&Eˢ9Su]E)7}Nd1 Hq&;}?}8={vaû}sg,>&*͚#3c:Vs,/V8ITQed*8 KPHqb22qhjXQ&\fy [h D"f`L fwɅ_ SbA^H2/G(f&2F}MPQES MPG4:h 8e][|eR~9긱ܾξղbX1%̩]H>񒧾gyd j nӓnK݋6BUվ{UiuGytF<'~,~aԥaߍȌ<7s?r.NԒZENDcjl(9>i!|a N]r l8tbI l_m1> J^lT*K%R輫TJ/D?8Ӥr׳e pov;9\ Yncff` rf}̬ؔ뵂B޷hjԸȪ^?3Ihh~W4 Yeday*2Ye+a+Yzg vil(1х @C%i ,H3E$RؤF*)MlRRhgE؀g$H`-?Շ5(x \@%9ӚX]r'6Wu\6,,$umAY{PRsu.H\5A|r Q'NVHӨ RI ,HDQ.7SwW sr٨$_ECᭇjٚD p'$+P%BĦUPH0/.R?ɜI,Bu|G~E[5^HR)]ܳ72VBnѴSR6pp.Ed._0Ԏa)w!C\DmKA'8{--QIop\rw0:,A傛/]|ehQW|]y\.rvMnVX|T?S7wXDH 7< /m4|je.HeGb GG:̢\3yhXwJc>jA"KBO)c粝7;Qwh >R`Ab?9-a͚ut8L}Gchx߼tAkdF~}4PKRPY6H(setuptools/_distutils/tests/test_dist.pyi6 Arkkf~5= A3.01ڢmu$QKJ3 =RH>&X#y5$k.HȲ*Tzwvd%aMRKa9m.xvm]嫒T'޴]X^|,0[B%<7l-xfabR|ϳq ,%t|JCeizs[ xXrk8;+vj!s>\9CKeOȗYoUJ$8]}AMfEZd 0 + edܨFTtܛ5\Q&S3lMSB?Hk_C=s szh"Dڭ ̀/[ZzǓEdĨXmQ +MId鸆Aa#Ahb$@a f?0Sc@B2gP0!$+, -IF VV"rQ; W)Q YbIvsy$gQF-2%c! \һ`pͲ"N4&hɔj7*\2SLW1POm&mwGs{& jHʂgu[ +5]2rYUNXljgI-[VI{dCj&Ȁ,!!2*!aa"+ORV4 6ԅXs.v5Kw;f%Ϙrqmd?!)+}7#ƄWBnme܃n0 ۤHA3ᓜڹl:,M-=q%-]"PzV-ہ敫-|=ĵ;)v-Yap g."0sc38292v[JL1|Mb-DT\.RZ6"MMs' 2C\=~\(OӒ.Fp쁭foyvd0< %8A(нV[|j TOh̗f}C8 9L`oӚ_sSY-qgoAYXjۏʪP6`1M *@ f[)8KƓ j3tҘqРO{<6k96dCjaASD3&c}4ur0 n{`&G8OaFbH}DLɀB6 :xB2(fJj0SdmX=c^ H@zWBpMʑj9<x(8]92K6duJ6M؀ԥ&BoX)I//4 7[[sӥ}A4VPn,3v'nApJJ8#:Pl "TC܄%-c ! ,Pu9osVیbxbY"1G U5]ae5MR= Av8ՊrK[쉛?yFUL+\Ϟ_ i]EVOssl5R2ʚJ<**'<| 䛗7ͺVS!VAGD8 %Q&ҵǢN 2ZpAStY2xn~^\3D/ò3$M!ώE(|)yQxQ:QjNY olaՏ;Ah[wpGMqr\>BDI/I~GJJ+Gcӎd [t.1SCZ O\mu\=`>1 z<Ꮨ>7cD#?:o %nticG/i?Q#;)[ C" Xc4ߺFYf64.Yl|i\@Ks)'c7_ySW(׸Q.IɫYCK`mcͷ 7VѰY8Ǣ]Fs|+ D/sl˲:?g~|iwO˦Ro"(Ay1bV8WØ,/J7MCM[{3$$ L%bڇ/LeTCWtLjT`x&ɗ]| HB\ɒguf_MH !~rJS k;R=ʜ0rԘ ^! TI-SæO|u>NjGhIl`;&-6h Քsr-*v jEAu",v 5eIBQ <ՃNEh C@A!TW#%R2R-2Cto"Z7|І@,k>a%I@&-5Оs!קƫE'g˾bIRUq4IހNj/?:z?v~oNzScJ!fjS3ߨ(d 5cВF[j~|=džq^<iT+f zTnf_M!\,uO!f$j}yCj2SGkAQ*/h/۷S1+[?++g[ o/ wD*ˊaIwFvK45/X|)GN]s飒V^i0}2+bzH9΋=x?B]*oEsf 3Aχ5֖ΦS+BLNBAM{}ÙOZkŕ:[?a.[+",KOQFr%"zGDJk7GbG*+5 _Q5&-Ų(@z/JN5QHoe'#YF,%i̫F&[֭6^ۨx5AҊ6"UFy2q֜l"YMܧK[ ~[(EQ ЈBgYAR`z88r9ˈ޷ҝGhέb5va͟<=#Ǣ;[18A,YED}V I C-7F/0<)bL'j|TgR&G>)'rxj62c6?rp-aqON- Gp@OI#5RcшҚifqVҁ'1bN{l(~t9.~_䎄r׫ѨK<hآի+{B狐P}(p t (O#_-vPeȰzL/xbV0\dD;$UX53۳io#9I uhTWEMy`Ӳ|n;GQ> >e2O=<9w}PKRPYÜ8 -setuptools/_distutils/tests/test_file_util.pyWKo6WA(h [h@hiZ"U3'W^gn .3| G2 +ǘ eaȺ10FU9j]0n ѵX6ߡ+:ZO*nv9 r/nxȧ ~WxZ1on-?Ц[Kˀgl͆L**`:ˬnM(2*,,ـ[JI4 q2E}BZz{ .(o\k+.&f>캕U¸d5 ʁrCLSHR֛;^YwTEjogc9ʹx?sfaY1jqdĴ!"Dj|؋!s"d^)~Q7qT-@e{Lf nċ"MN+n t~t 8UުG˹>]0@fl l:XKlQuK6#DdV­F\6xx$02åO}Ǜ5R'hSlU%(͔]spt޻E{3rS懲r0-X{t`N㢛oZu4wK|Fxɴ`F1$nb!freCP=člE4@_/y8Pb޴@(뾗ӹ&uDD>u"K^a2]%Xl^^@gE{aeŠ ]bQċ(q_K<\V{4~s9Q}M>EƝGB]Mv[[VjapmӽC-(|/`<$Iԛgo~JߟK K żq+ՉL: Ë==|l ubPKRPY۩s*,setuptools/_distutils/tests/test_filelist.pyZ[o8~ RGFӗEciv0Li2-Ѷ&(TsHBQ%uHl߹P:;;ĤdJ2\%)K*<;;BI.~ 6Z 5ٲ\OIŭC2!bYRpwNū SNrB)Qy, y-?TЈp{S*`dV # ^P .6,-w?->\9݌hYF6M̭>;yPo!&jvQNI;)ڴ|`Ovkm3[.Dl[(6I9CT#P  [1MBOd : *v ;9X(,{J,A,X".!#v\@ZQFVKF$tGKYmhr$oIӋŗjjx]uy}+"g67TjyuimNI"=M% hLڻDBlt !wOz8BPgd @`[UJk0"Ӏ^{@W, lMf lF;aaϰ^k%_fCc?6]hɮ6Y7ʍ2%~{]QQ}Wޅ2ۗ< og5=y>d/{< =r>vs beqS!^Þ;%.jWftl4MbK?<Р JxVچY{80:0;&ZݛR*ByHƞ&y7?iyOS8"nS= t;$$bHqi*f9?Xk q8]q3O*"-;.Nd)aGٳuUZ{F=äe#s*V]3v|,#lrrh'=ܧ#-$Uq=+ߕQ̮}ح,8WO歁3R 8CS7'C;B9-'8uک f0h17MMv=KES>fDJZ %ZDqW, >;*21y {2q"#~[7a9|$ov8礠fL1! n=3<VPMe^xOx(t[𬞌d2U2z+ԏ_W}tJ+߬ڪfI*?j]kՀ{U'a 36'Ҏ k־&`{΋a-:'C_s^(~rG*ݧzCyoeux5auu>DPKRPY˥mc !+setuptools/_distutils/tests/test_install.pymo iu .]6Z Zm^dQ !}HɎ |E,;FQt͔Vd%$YrKb2Ҵ,(&Ԥ5PzSf^MVRl{)DYIU1ߊeS#x٢2g;(t 0 qyu?W;FἃU!!RHCk>NJC:w CHm|h\)pPzռdtfEdSogjoxGdV$;f+e 8ӳ d޽ٚ}L_ko`wL7- gb+L% HuEI"#yͶ˟hELN'VڀnEEO\TCRl3PAmDj)TD04a'!9V|MMɛ7i<IFQ|U/7brjC#Wņ+WVp"XA|QMf3$J֬bXePq@ 9PB zND@.GXZ.D&&3Uer H9AlX'i5$T# x8)|;D&6tK>F(ytF:zL=-T!y,^ M@bkf] 5+9-2`t FmGimKM.n"ݢlkw-LAUlޱ9w~L&؋ɳf] {qwY݆`=c# iɠ +ۨ!r1x"!]j'ke-|yN dJ9C n;^H ,F w2@ׂ%QuiNO=3bW=XOO{3{3&%wܠzSeTV Ў k9yPE>pat %>L'lϫl̷HA-4`'AғTө;6?]U83]1hW 7%=pH AL%!c9s)*s3`%i4BHP<ozOLh);x`mO<{{>E{)r;3Mú s^ zWfπ #"cQ1u6,7'Oi~Ԡ#Pp&I\9q-ߵzoIu >#n?uxdI3 uP*"y0XOލ3`[}f ~tJkIyr;lQA-/X[TӲa.*p-aC1&;Ԍ 25岊5[mLE)ETr,1Wd:VD6q˳GW %yϕ4v.W 0R<C]7QWqh%3'cq?ǝ0A!)ӿvTgi_a{p@_ qJΎ Olg"H4w75`YHSŜCG0!a߀Ksh4 gEUk~ zT֎*H|0 n (cTz 71h!% UC\T O ''9\ T .#.}ߧtqN(s"I%ݓ#xJהW=S3ګ!Ib*9t[7]njf$8_0=,{8 859 gXO_)|63|!`Uo8 $6|dSQ3ש84KvjY \':Ñvk?Q.O$+\;>u\Мl>vq)47񆕥ooxD x]CA`%*iIfSJmJ' 4zB+t7sSou@d{cl۶ܔywsM`(i<:T~ô`^.ersh+C tk( r7z5*N{MdJH4NK-L%׸bn&kn|]\^tov2v3+d}v^}AYr"͕>ڻ{9wG zS="1d'QEi֜8G ʒ-5fv.h](a*J"YRo<+/=+>d|лet>=QF[ 3N/`PKRPYg1 0setuptools/_distutils/tests/test_install_data.pyUM0+FXnKH=Cr"!]c#l1lRUm޼X,較Xi\jRE%Eɦ5փqǯV{%ښ Lgv>D3]{>3E+o};<΢Kb'@Qs}~!I b6O/9VXN'U=,:ἴ(<|#l*"LN1#IځL/r.o`NF1hXBP@ 𝼀{ҟBc$΀Jߊ7uqd*  9gz{ߛd/x'woF<*SxOLk2<=i 6!$dB٦Y};Z,#]6ޡ/n;VoOh Cn,,Ԏ?Oq }Xc4 vʟƬP'ǸMCG==*y(͇We8@SY˹ *,MTqb~WokV=B3Xvt^ݫ?m9wde|XwZ2|vM1z7rBMgO'bօ]pX[qzҢ!0X\6[OPKRPYi3setuptools/_distutils/tests/test_install_headers.pyRn0 +,z HHJ#=mn E`tBiׁ@졛K ~vQgH8EcI5~kqu@( !0gA&8ב4ƏB\ԠUMyS@%7ѽh&dy|Z$>9:0&N_0DcA-arv9zփxYm Qpm#jzd'5ثWo̠rO;xGŌp  Z̋PRsKXWM@ySK|o"Ccm8EN Fd1<==B{mO}C7#e_TW5_ia+izls-e՛bnvwPKRPY:Й/setuptools/_distutils/tests/test_install_lib.pyKo8s(jbT @@{0ZlIp_C=)Yn\s3YV ,RRp\UE%X*DVPKjX>ߥΠ?UgJDc{VeWԟ-W^X,s0״M}ƵvϡB}v ^:+`%*j@ҪwZ+ֆA2&q @\E~( ׻}e.Jg& ⏍`%qK*?,SMe(b=䙸47Z(u#}é;r~ N[;fJJiw =5m"xQsdŤC_mFrׄYսz)Y%Yj1fv gxKо7鎗!E> )FtP}`/LF0vS[/`P -)3@wF;Naoe 3K4'$Z{{J8,yL?mMD˫RY.i$tY>mrC.~bfq=ҕ|C'og;;ڍ/#~ PKRPYb@3setuptools/_distutils/tests/test_install_scripts.pyTn0+x5I CIԁ9%_H=#5vgg]QJzK1HZs3i pZtvbWR _W{1A0 qa[]zWĦp´(U?wNq5+y̩Ю7,}EŐGZ!Hs24&;]PkO?(>c!jK = NQM:צgx8 \ GE|ϻ䢲=tؐlv+#R6H$\$$f [e4\WZl=wuƦ!)+x(n7`#*MCq/}I_Jt "9u:,) ^ Ɋ4pz~Ljnݲ-1봏fmk}$YRky7'vf PKRPY-7vC'setuptools/_distutils/tests/test_log.pym=n@=h htI"kgW+ΐ3P9A N@f4O߼7Zw$&1AW!:Rbb)bsG QJUA8EF ,Fƶ4Ty;tr48SFAeo L+C5.W.&ǭvG6!f? ޭS:l$|n8$!{|&!?hqm;-j>۵[Nx? NntAw9%f9t O^ ?B=2>CnٰIit%1DVRG\^0?wC+%[r` ~cfV(Kme|I3{t%Q$ڕCj֤D ZwE<^zPKRPY E{},setuptools/_distutils/tests/test_modified.pyW6 +n t[`mζ 0 $94Zѿo`hJ¬J -K8,ؖz~`dQFe EݱCKyuS'Ϭ$AYQ Cdɚ&e)xbxS%Vm0`Sbb y`WZm3 kNl;r)l7-QR>>i;` 1ܓ1D)(.|҃_p.-Օ_}Kimuo%Vy.̓pAׂō%" FD]TZ-@;UAYx(o G`/V(^B>K zɹJ[WĔ* 3nlle$%M'Vږ5M !]Djd=Xwc$tH]a_%7AQb3ㆋ4HFs_Z\b0zr!mtp84:M:mB~fǷN/63I+j%&2 J~_#|P0K(@h-^"R%$[+DV±l:TairaL5`{ᎆ) ][LŀHf!Yx=R={d}E^@u(kl!d*B0Pw!FēRpB x7ߦS0V))Plş=71{TsC%wwo+ d'$Sd{2M, c{_Ut ܌.yy6HJ,v}UHեÁArC֙,}bJNPKRPYr0setuptools/_distutils/tests/test_msvccompiler.pyWODS,gZTD$*(TJZQd/ػfNޣꁢ~ĉ#ĉ}fgwC3;{d$$\U3Fű 1z7𼐪$RwWʽHEw(F.̍JCa.-$U2VI+3> RRG- ukUP; VFE{qc&X=]y{;̩چz %PMR=gfk?L&qF&W*h!K WOLML|4 Y 3ز--b䛊h4ˈ\3ҷĔp0aŪpMTV"1frXc4tQ _Jf}ތW6c78+JؐHLvsV/J,-恎??Vҟ0a!l-%r[xɦf\t j=|@m{VئN}4=@Z~+A=_Rep/`Zu?'Z5W^ut^`dž͍6c2H%fL3 ۣ3,BBu$gQLб [uGRfQ4nXBA݋ G\),n4=:5 yr$z#,xPj(R7YjYK,`*{yaE)yk`ߵcɪIg&'8 Z;^ƛ:3w|Z]O]{wn߶p+H5FQ5'VsY&h ]mr9ƨ(soZSbrބ߯;2.$'F.IJyGY&}lalo3Q{;@\{\adOCC'<< OzjBHDVxzkg=AAtJPKRPYnm:)setuptools/_distutils/tests/test_sdist.pyowWVf,kvWly :lŘHKJ}w/QlI3Xޏ;]2rd,a\-Pxtt4dE]5-Tvgs/q)!Ǥ~œ3=fL뢩 kSE}՛/8kė)ZE@VA[a;m9LT5MpR'+:||pmz}-[nW LViCJo>oZ((kYVUn(' 4|jF2[GOҦzLI~2eItj}5Y2=Ɍ6gmW W Lİ_҂ͼf^0Z.^J?M 2||o4%IE^$,ɛ߽8̻,O E:ʦڰ]rǰL/}0ꖫQ Aj!cUdM uj62kH#*aaD$812hغӮ:fMǂIn,n$k|C30܉RhʒeE pWY[Z̅mQ#F_30j>Ꮷi fĬI"zzZ00QI* |L 6A2ʳqŏAR3aUg%p%+ә׵^@(x>DX_V%>8"0qN9'ߢ򕉇R/h*)kHm`[X6%'8*f8y٘Q%N:TݰEгt kq`-˪ bvhh3s" P:ɄnP5A2@reew poA8h=∲e?hx:3(}d,Pj/0ʄQt%N0ʅ fYtL% a>N)%'?-b/wG^^C"-T+% @[_s%* s7Xipc(BjX :8Ew1|MV k/ֵF RA=NL}X*Y{ڝG8S১gcx0]P!T*pEC7PȖЋm,0cRd鲅M[2L Cpveп]CVipx gxP<] oQhVKHW, s|:#ȘK鷒2C@Oa dAG "'UpR"OVc-ueJFY67^UB-lݎpf6q% ]jyř^.`=؀KsL'ȕX*5 0Twn3L|^^^liW4WFh焝0WCr<@?Q>d-5:VMY-#(Ye/} Z 9ĹH `+}'b%"Qw:.]=1JiW{`wp 0DM21FK +;<$lWpqRrA'ϤI ;m[m͟=z4Rn R2Qy?O,T5ޢ9J-HL#0/3 (v |Cj#akܹY8(~~y}W[N I&Dt/S]Õ;tʲ8SC:09*Tlϱ5&#lceftڃ˜ 'Out"]C9I85H [nS&` ]u O}UՈ0I@7O>]aFAn ~Rk`־!\V-[r`wn̡&Ӻm\F5z.kQ0kqd%c\kQA.YPnmt%fɵ %r-֝=:hLޝ}`R 65+%hwOb@SW0:i7?t`ӧKXZ.jMM/h-h;u^ۙu})0G>3;/!㬆>|T5o YpbmJ؁*)FnȼgzF<+VwO[70F< a2%9GQU:lZUvB? W?܀q%"QAC3dnH`EXAmλ>@okMIn7U3V*v3 YR 10:Z\ 5RyY{''3kіEJI-2j{mqĤ{5)mhxx$އdž r3pv[@i24E%.= HX5tň˻i閅S`3{|\z9p rǻgR3Bjd2<<8A8_8J^ л Ր^K;ZK+,mUSiD+s|OJyQuH҂qU4[*ZH^4Pސ_m /AvVuYv0^Ꮳ=-&$>̀HacIj]c_^- Pe֛53)'!~j4X=d*9a>k.>Lu{7/!l%_qJ 7 }3/*Q !5B"l~WDIum5h.IDbҸ.ذUmf=?*Gj8EA 똩L2-tm];t/9$8&s\gpd,1I,oC`M*~7hv8rE+i,Gwr|74;vNZmmMBGsBа ׸t9[`fSP y@ i 3xfT=Ֆ %݆Dzfː!.@pFs D( E%SDCH `TzE`QP~e5L7J><[Xp,n,y;6wew[1TeM6UW6Ͱ5Fg8GuxJpzOw.@ `iS#Xڤ`)P4=h$sb-r6Q] ,!؝ߡW}jwYL+f#]a^|ۑdH!gO^B쑯pH{ʒ9B_+C`PKRPY)setuptools/_distutils/tests/test_spawn.pyWKo6W0`RFC v!0e+IE{gvl ;ȡ: RCY.Pr"̖ОEc MjpZiX.zY <9lcG'ɤJحC-t;4 C~WrB۟n~]QԤd6=w 쉄Gst%7B+Y{_LA7YO[ɢ v$& MI 6͹oXQEsՍ^:f:J]Α/cHK3p?7x̛YB]UDb oV5fxdC )18RaMc\!nJUAS; G_8?Z6alj"rUzPKRPYt( .-setuptools/_distutils/tests/test_sysconfig.pyksܶ~z 'i:s3U%9֌mĮH9N A|IX FWT$)SEYL^%M86 Tл"cK`ځT2"=VRl-bTI"9˨4f.~|ZrvA ''bs̟c'";L}נ(Cl[}DP^6Gy =88HD7GxCWX QL+1BM@eɲt1x]c~Ӕ Ɣ(% b`T܄;jFp`rdRca4R#:p_DՇh!moXlU3?̬f~I;SmO2 BmXVQX=ٌ?2 FaL@AO݂, "WOZpIoP#.C0<>*#:Ttxy|yvj_Z@`+K/_3Z}ܜ@1}TÁw6k,Gh X(d74DdKރVĀϰ-T uٸIMtF?|\ݓ-Qn4L}^}%PQgks&ػ\`873v'l rI?C > sP@#Z;rtoG?b5Ҡ62_v=MpM?E<=w|p{{Zsp֠:T/U b-HQ;8tʝi!\p2t.èK !NX%T &U~8}Nď x]k'j6}uO$Or5#C}a +-g-0ąee#"+Vf1`|4O?b t {@` NhB qEP!Dž4DGI Cg1dj:|7pQП- ׺|ɬrqm,cE[~No7{o-p͋3{,oD^ 0CK~8=zyv-JWw-y(5aGSh΂OA/,JE򏣂'Ojz~YVe~KŠ&KЖ}_j34U@wxzKM-] \p0b1%Kcy42U6lU%'=0k2%"T´DP ` jVTDP^J];BI,/%P^Uz~-:)"9~UɚqKQP5Yr<$3덌<%.lAL`TbBYrS{jH!-sOGSScP0C՞FbME,YuEh,3/ : ՚i)5İM=@CIhH?xB>-R4 %#=[U]?i: Z vCNRaRQH& G˭%Xi/pfOHyx}b.:x=?qo~jI^jO y5pϋG7 &M|uW# 5-5=awW"J!Erj],ZaV0"htKhIhnosHΕ*)9߿ynp"ٲ*ie*6E ,Xa A+LwvVNW30ӞN1sڋ[̃ClpyDb3^*=Qr|| ; 1*V~CC1 \Ek[s ݻ?|nVlu LsH?@:bq"F+';U`j3 :x{CtTͮdI} !#e:6;%4ODy{_İ&[S2Z4|j{)@Ϛloycl'<`P, UeV#-~YLRUfEO0 fwNh>+*3Y*t32|tgKN3A-=s6 ;}:⿏ [ 9Sp}=?7ubR p ԍ? 9% 1O=Wh=QHJ`ѣCIt}_ " _ϸ~TVXn[U]}+u5W%{8Ӕg &pF"/0镌\/xzq}mZt'[lV|hE[+v}dZiZI|\hiYwht:f|T:rD:FĻPD PM1>>}j[p;_x3?z9zbφX" 7hxhĽzGV 9'葩MBk;I!xR VTh 3èJ6r!Y}qFw0惠*dP;%J>j#ZԳD˃VB[tQ᳿}zrAR:F;jbîWoOdC=a| G5`@;VuqNIc qF,)R!PKRPY2 -setuptools/_distutils/tests/test_text_file.pyUMo0 W!`xhr(6`r[CF,6G)㯦a|p||HT ; eqd4}vJf-`Y.])#T5.+"rbՒ֟7XvΗ3Aa wL~P$2˨00LT 0)X%h NP4S>A/1@Jw.{M $OF&'8#LqCK0{z((J8?@oV57p!aGDr&AG5j^ϨF¶R+7 Jއ=-&K/6Un[~~|b(ݴnˉxpniOS߮ͪ7`v Ζ ;*Æ'xa2z3,,' h0sוS{PuZ #=TiD95of͛D/"/&h{Z} $) Ҵ?t'04>iSnLz6q -7-AOLǶScD}kQl$>Ȗ'3q|#ZB=~u6Z7oV ZVwmy\mpE< x qШ32ޮƎ_5Æ+P+ ߔZyҎV£KMkj\* ߔkZuLkbU 韽߷;``m?v PKRPYR @.1setuptools/_distutils/tests/test_unixccompiler.pyio8 {c+II2mZ鴋L mk#*I%=RuqLw!%]|n{ΔVd*$ BSFMy}'aĤv;0NDM-WȸU;S)MBZF( f^+&=*gĤ}']ǩ .GGGYc瀞1*=sx1Zx׀+#Y*:[ ;M7kcu9 1*_TN矖; :GS-R2eNDk](e P(C)iI2947Yi~kiIourj=J)uIɞdAA:ӊQHnL2H|TbѴԉd 'ʔ0FH*^JO$:8F 7JS3ɸ! QZy{ sT^*Li0 ,&1~ y nTױ±"WGiv.>9qPR)#;O~;yW$o{lW8 ,H>{q `тf\Wp "73 8-yyD"RO@Mȋ,m1͋?y'^s˓N !c41z}mAJb }O@3~30",-]_52A%Jdp&A1%32cIȬaFM'W%QZLd0_U1  U64P0SE%z=$<0V`Y wi47K>ip aVź+C N%qy͙ݳaTkqڃO8%&1k O>/Y63bv:-= QuXJB;>Ӫ@Pڹ!XavgLV3K7#KUh׆CC SiQ&x `B7xVW]WI bJ`@B/oz^TxiXj\6 93Hc,e<(rXD*nBڰT IS/d!L08m_6T sظ]"bsZ>-jUp&wpDۆY U}7ˉQC9Dk:+|e'SeغxBL UX )1ڝ&{'[VZexov\4$ȶuŔS0]]V^:a}_;ٜ//]\F狋텙 { m"yGG}}&Tn XZlёu&s[D#%S5t*.IĆ MgҢTPdd4 ßȞ1wP\Íxh[E5aж4%R5rK%50gOE [1Fv==xM4x{z8L!Mx:-CwƻiJ63Wo'ajN% Vvf7Zú--Oh`iiibf{#>~&} ')~ rȭ8H4!U𛮣zCOp6^Ԑ i[Gp`6i(Vx Z9<<`$/z,0!/,Tie_Mp ,)qi%B* ۮ\^3oo^ |#B`Fn挓IF:SʣeBS띃GO+!b_}t;ݯelngBwcq 1uu+6K W 0ٛ c) qaVgWV @2e숒l{HeGv[ *V6`+R H\)8v]ߧQdVܨ-0_UMi5 i |l.1E:jFotxY>xEߩ v)au$ UUAEZH,[Qٷ9U4~NR#:Z'j7qWBS{Oo !NI**zyb gީ? P9> @n<DLX oeL%qP?N*J~өʡ!u~P'\P\XC i^'ħ99^,7G R$$8+.ql9(k8TN|7X‹,~ v9 `|(*] M{[ ch+i8vn(T92¹p;}W2g=_ L1m2G2<m~j }-*k]:.|[;ڱEYPKRPY79v 4(setuptools/_distutils/tests/test_util.pyn8_U$A0m)v{4E\(DٜHh=rz٩lx=ϻdhJEMixC=ϛx^He) j.d㪁q٬nV5oG]2"[B5&5Hƀa.DYdNbYTFõ"c1 VȔE? {.gb,W2jw,lS;V wTlY4 7I)dL@<(2˙0ݢ{1-jmtqQJÒb)lDQf*L) hidRl>KXJz\V.rAB 5FR//hNQdp(`7{ KQSOljbN/X܅ZgwɅ#@@_C5}BDOG4I~V'P L}; &Ѡ_O ϟjMi܏A<ei$sZ c=I" Cr___?:3 IwjVsqJU~qF\Dɂ)4|$nM03Lxl,I]\_=et~_#ϻm|h^4_%)4/ti25Hzw8}=+?trakqƖ馉aNHEyi[WQed8Š ;]}Z] ;F#/3w9C;;ZK%Knrst//$Gȉ)C!^^'Bm24 `2a;] Sx:%fJ٤$An6?w*=}kPU?AX5z Ѱ^bA:x=,CDŽc gV?+`$ׄQ<ͧbԳf_>| M7HaP`ޙi\v8cT7,_o`=冲1qoԤ4 /xxdo~fq*%O~𮛃>I"px͈e ; x=@)Fû68 POTczC5?R7EЫW!Hn~F o]CRVAR #n"c^;R}~B6<vyknN}7G΅i /W`tu6hw;U8MjN G<Yf[dNe\2-q}s3VbN/^)~ =}3 ;f>YnƢWnKɲM5"H&$z5%LUL`yLU Q+S:]zBn6 N LlD\Q  (֌lސMEUfQx;er ,b/-Hځ?ͪFkb}f1CR@sМе(TkAkkYږN4&Y** }bpT:$R0Ff-%fODZ `DTtk]}Bå ۖb!Ya}+L|3fs7nםPɀZ:/k^_[ .hIѧlƮ^]tcli}@9Y(F(cbkv3\!r[hM =\NZtc)B\ϰSjv(r9qҷDp \{ןWw+"ٴ͞Ё'wڳzn;~tzVx":LՑ?>wpb i,9.c?PKRPYUE: +setuptools/_distutils/tests/test_version.pyVAo0+,.,0mTv4׈$`dQgBH *usϏO{RIqAVT I dK꺮䛊 uu27&K=R;j08_3只৵ⵄٍ!pVYW)+2U՝EuP]i cCB "**[KcR "{p:Jߋ)I{A>)"gďCB bz! To#48obm-]W妚ˆm8ݢ:̈́-N?A5i0 #}۴\/4gdzyN'4Lc6N`A"jo2gICqjCGƼmaXMi{∈[(N$C*+Mpb}#/Ј+쁇P݂sjem٥ˮͮ{ @K0zT7bA/PgMHE,=PaJMf9Tzeiʢdc&AZCF-=7PKRPY.setuptools/_distutils/tests/compat/__init__.pyPKRPY/5*setuptools/_distutils/tests/compat/py38.pySMO0 WDNv` |HH\u9Xt(l=;%%¸#Êv4Cׇ:Qw!(Ī,"><(yG'D䥜kfJ:T Ry.mLXȦYjB`+b6T)`A2#: s`Qg\9&ҐG/n|GF]JST]dp mޏ~w G|ÓNʂk7,Y- ^^4[^ؚYO;PKRPYvsetuptools/_vendor/ruff.tomlKH)MIUUVRPKRPYD'x3 'setuptools/_vendor/typing_extensions.pyisG0x,aYg}0& {vc Q0o󪪬APwgwE*ʣ\֫6Ϧ{%֋E1m˺j^ɪ-޴i|U_54#6?s 7jOUnʯעJ}Hc^}z>w\ectǹ_m:1k^ciu~}ZN[yjV.mjWiϦU3q>l 8x<>sk,ݴEI} y>nQmy5K>r\|q.|f*N(V*^gBW Agv8ͧ&*y媘ꦞvm l;j󲊟Y^Y@Xyp`>Tۮllukf a,X$+V6ӿW̾I_ ޥGA4?^y=_j!Gu'+caM_~>y짣gO}([?(“¢r*hYT SiK] ` Ub6n^pB@^e>Hh0O?&/ 9ଘg d2hs4duL.իb3aA `{{jUkE^&(L,a ڸelh +l37 :N>$CB9{bK|oݿSحxm;p߰d݀Dejb1ў^L3q0w0Aڰ+@- {G}8jC0{ߧJ}/ŀJR~bD|p]xhU{{0 &"%l9e 4aH `SA**!4")A,1q04(J{ad^*ȟVjMt(i-KFX< =Ȃ 8.vt/R4ɾLZꩇZؽ}Pz/H\+cy؂c[% |gM0a}j-2E=k5ֺv4*"o & XA)Α?j-Yp "_ kSrθͲm&F2IziP8s LU\M@8"U@?Pj=c<-Qܺ Ϸt ȃэ8c8NE^0`/鴪kI; xh{'Yϸ>i_~^ (ݠFٺͮ Yb^PmUQ,= 1t2V& U eOYE.?>[FvM|N&tdZD#!~m4 )0ogs"ΊjD+Jh6ѬU1ga`CXFos"k=yU=FxhlMJqh/ s#P3 K` ڇST\O8I["vvmNO-:tG;=EOQa=6,l4Lj0KvQv׉f^oŲMhGxU)p-6Hˁ:Xucsju*4mHn("=ƬFu;҇WRoV!s  ѕ;JZ <Ϯ ,(1Hxh'/_li[| j,4'qDMkSbDL7054XQ8gUű.<+ ؘ` xdsnu 0D.KIFO4]Ag ghȥm7ImH犎xup*ýr;PBk%AX^@Ǯ9"Tp/R=b@ubf*xNrrϢ>G :/fS^7'GX[`hW0n9E[BuzU+3Uv׈{d xdxU\@5֑6WsLO, J2 >)8sn~cWQl<:ժh5F)|}!޽38Y}37 u:0v ٧[G{{sq2i}d!n>SLŧv!6!+mh(t٥Si1Bn(嬛tD^^OfˍcAIFxQ{,W"TϼqPzUver{vh\_ֳ5av(8|mheUTݞPy7Uq B:55hʴv :y)4:@@eVwj=`yv}Ԣȧij /QD/id蚚\i<[WȧJ&U7[c-1 = 5җhjjӷVG/OeUWtfr\q>52^ :@%ڐB}0 H^䋬Q-br߂:+LhW .  j9^|_ke6GC &P(B8~ &jN&e2鍨 DrLQ`7/Cwt4`i=i=QT+g2v%ԀZpq@ҥL_k1ŔeԵCXFK*I!Y1ag,ظӼv[ڳV[sk:> F J=zpTmf"bB֔d (;n sKhXŕ[zyGYŊQvD U@Aals)үm&Q4BjUNvu|);h.dP24-L h].ln-T5T6vE`MM=»?dC_4ؿ/ |6eLRA[% i "XҤ|GmoF~}ٜû lk*! [W:0AB+ZA; |'^O1n-uz[<֍>`V_M^!z{l zQ,\Ҋk``Oؼ>~^0afwVHo!~BCy~`m:zW~_NB!pp]ˮ]7#7[mvwZ/7b_CƱslm} kG#MY]/NF {S<wߢ{{|?DkzV9ōS|5OJj$od=i<''w \5O'\t?ԩ`a'v N{ïO=<>:%qkJ xG^^ĶG* HyZ@9"[Khb29Hs0a &¢AΪLн -C7 X mvY7\RFJ'B@UA,e7;:/AmrU͘Ё İLlg'PLݘ5nzV,ۋGSęc1G>a <$Wj!k綻%DqyQ\-6v]ÑrRȬ'Ѵg0 '#s嫖sʵE^s 5Ƣy]"Sk0iq̓P{Bdh ,'q_@8JDiMA_*K7mʓP2CS~Teji(ʌwY7hAnǭNt(U 8r \Яs\uUS@|U ]%_;*i$#ܟ3Rd/R 9$ƽE^ IY;Xa!y-zfpW]_1TU&+}{c9'HsCmVŢx F-d[*E@Rph9,4ǪZ ?x'7g&|5Vp}0y/;m FY'R7}ڒ֐cV4%k#$ق5gPvӍzv=0m%ʪq9+'@# v:ƛsjLJ/6Z(B]*n@Vm|Ĉ8:,i#SQ%=YAuѣ6'y`(D#na4JeҪ ٺi~ ksm?e=)]xP#FNJQv|H=np'~vØϼ睬tLhʰݚ@95O P!e÷OwP/;x@nn#Pf@8FP0DeCt]^f /L4A߮pf?l$ʸw2~Ĕ ;`"DIcb$z; <& 6iZR==>ǜԇ'l"Lmd5DC{5/fa >wq|bl0]Qh {"#q3o|}5O9ƠyŸAv p41FZ"DaČ0`+f s?=++4qDg wŔc?TB%U\m ⑿h'w/[>}xmx ZҞA$yW>oӎGK: J<h-#"Zv) /x]4 .,e=6Ee6r趾@-Ԛ+0?.zYmg0Qy(btQ䠉84Pvمi T#ͧ R`t WҗפM ѻR,x-[D[͇JbMMExx`&8;\R#՝ $cץ;jHߑrw,ZD *%#KT[w@Ό÷*i"qf[6 ,ⶠL!n׊B;LkMU9˞%F|S2By؈k"K׌˫;p<9ZF'»LNavƓX&Ir4~(}66[*j<tuQ4C%2+4}/!Dtه]*6[{%^{e4^cz׌zBQQ@aJ0P@8%;jǠ1}ŌE$:ȉ.l E32kCe]t5rc*̇ .`k'UW=XXS('7ǁc%~ċ_TYՠ1^ }>ȶ9raX7ES/{q@is̺jr.9Vh*Vh-dZNӷkIg?! `څDaԏDз?n2#q"ҽh~HA$xSL)٢niYdTNcU4w%m=b;qcWWXGG񩙸OC;1} ~iZ*zˌj0 ؀O`P6σQSgIB<Ga?SsxjT!mU5<)4XPP?C:D.6(C5p ?hHi@0oS^xvwOlf83:YR0WY< Qz=VneŒډJYO(T̪@rE˥7(9eZE$6mh z" sG4LHo=H ކ(9Ȼ jxﲍf2Fc{xOeo_x#"B< {~Ve7'8wkZVhbmҮf94xHn,vp`]x"UEaoNaD9xEpYn0Қ7&uA&2M&/ wj*W*6fuVjd4pYo-VCļz~w~Ӫk+QBܲE <I[+vb؟}]:%:f8I bL6dd):GZg+4=2ZR@ ~m1LzXfx6U xݍ#|z~9~/<|]k6_$^v^4fQ8.ϾܭscRZT3y#VoFs#BІbJf"0X+ y0[._Q p8J+0CQ1z@YƶE\ ’6SVCkr'-fdl#e? (lSY$ڨg S$M [90_YN܁_XGF6E(%1a :>抩[#Y;7Si@׆^2ٞuHXo?Tt]UXGOǕ)?d`v?o fwU.0gة.;(̧rlGÃ}>/U>psBRgz%0ZHtt7*P g6r cCe=؈T10MDS +E0o;yy gT70tnPT-8]f"5[Y]}GGDS[L!9o 栗[Eai'$z9`3jg@r* F꾣uM HcR9qb`zwP%kIupa%4XNЅ6 palyO;!;cGZbzwTع~w;d2|P6x|QzT܁ws¦FdxQw]cXxw]f"z UA8%|MB(㷎LkG9ZF5`Bk;T0Y̅i:P"6$pn@TJNJ)9(qZ D8& tkR\|Ì~\]"<"Zd Hi' c۬9\Wzۤ񈇂nmqea65cnP3Mhz#KB;*4,VbE1 H Byґ,zZJ&-9OMK#õe1wJSO͸:_1Xv!iuY,%ҏY$Kt`o> >T zֿ{=g>ߡ'YN^澍ZФ37Н! );QAʾUO$|ۼ6NҼ.sRsIƴZ8K6 e#y2o JߩEن[ oXkQL/$2PIQxV.g\(7+e2D~WRhn@zozD mYj(8ƛɘGC' a\1{aQ}F lGWWOq9Ξ{tRuRyb2aFAɀ&7d]Q_xOK)^`z?5[!?ǒ"ek86΍G?n^ Onw c޻MYCC~#Vd_4z3͵>(c= & Ą62t9=ern[5ʊ8@̌~0QWbٌ Q=g25Ə"IHԇ1)d[?Oae{'iQ?&zKSz(;I)k%y*1z"#L4=N#ρǃ>@e %rT6J6&2{97NmN ,El(WwbGe4oUI2怹YΡ76*by"FcvWC,0cYk\㾻Vn-K!1SGZA]1Q(VTjC=ʁi>}䈾Tީ@QQϵq]1M\G[دWϗV-'٢S{\5Ͷ"~JZh1(S˧~^V2BslfR&]!KJa}#3郄/(y0\hݤNr0!S8qa /[j8)#d`֖t̀s#+ (씧t0men2zVOJF`&Us4I1> *(<hgi#%iAK|lG݂'ٿHo=y&%}JGB rTL1t6OLucz<ۤ]{‰[ iN&* p -9Q\>l)MG\{P펤IP9t5`ޑ=d@#aE3?Y_(on ;|a_h`+A]D8Bb4ȚXa$zU^?]7 uL/`UghPerq<ȞIuFK!mqe>fB-\k"rH1|]&W!! CjtҡQ vG]Ӄޛ̑]+[oN>2wB[4/6Z_~5Jq;>otD"p]bE/<~uq `J<НwGϙ"|}I61L +<11HD8]:؜$y\-is>S1π rdc} F@P=^B'_jb܁=[uKh"I !Ҭ6H'p=K'uHwO>H27<պh5gP*U3@%r4X.蟊cJa<IPk؈8z XG]4&^!gR o5c3UB+2yRG@Lk[gsNlϞsn݁CovF# 'j)4{eI4Y\&B6POLQ(6&I^wmAh)ng{Q=ZN~sK园# %n+.%(F]9PUI.{(Fth#͛g[?= BwsOP_'v633Ӓ 3Q;dHџ䜐eƔlXl]l8-]ͽ(Kc]<(f1}@9`V5Qp9hո*BaWa9QY PHGqÑș3}1It$I -lS69XfJdm͊S;S>I`G恄:Ulk0Ǔ>|r[Fpx}:|F&Dwf3$^a+R,'~ԛci 'lEMޫ4ʦG'wՈ;bo, =)AD_*=G7_N0OýJ5F)ıy UyFS$㽥AU=2[9` ֲ2hh[a߄ `}!]YTRM#YY^ & ˛ӆe98w"mm'NΊgU?2vp{7=md3[\sbcqxF̓ ~M78҉Y[f[z`ͯ) w0XJoL k" `'_Q0F =TDG'LgPq임PR) ݁Je i vM͛B~NenQ ; MD[]"3-ZQ!c%&*uKu=ʎpӏ2Ne?ŋELUtR)'6~1PVؽ+bd ]eLlj P6VeltD6\tO2A*XD uU{1&BJipʡa.2 KxQH >˔B(˨d<(V .fٵtZ$,2agA ok>K  J;N|3v70G ruat"ɔ< Qc7bE44;n0kE9LWxe3`6s="M3 |r̦vuH3>CH`{wJN{+ *9ƴ>p{>.VwFLOt!-J:[3M-yz}S +B3&-sk`t!BH협͔OX4U@/EmjsS(C TqWb:-qZy˭^X[?ƺx?jLwBgȺ}mߌa <]8Fs욠RH-ԕ ˇ&6DLjh:f@.?y=oJ0GwӭS". MYq}̲7?E q؛w wF/S7ipF<`+'j4NDUA!25/dmÉch<\gJP3eG u 7 9XM8ɴP<$/?"c\pAG0Ru,@oص>Kb97qflsmoLW0YS&БQ0]Dt)'KPcI >”"Ðnlˢ.,M{*߭: I~t0]B ?E,XW܇3^;R3Sr.Ŝg/wՐ.KT3q!]MHA 'K9ryR+ۋe;tlB3(u'B⇮ɰ̧id2\=,|a> F yTrKW]uo8C-vbeB6\ق}|6EF*i|QR)3{dg(HG ީ,-ǒkli,z\`&Org7aYQ,UE^o.aV ܈cAf l^2V _ld[J*&MUR:߾?ҖM%".Aܭjp Rֵ` y4J }8c!zg1NT; mhH{[@o"7scX{|+^b@قܕv z'?`Sqq;NOۄi92S{ngg]9M5<AcQ/S(:0]J6bBϪWo'NSDBx'~Y;SbҠÙ &]h=njeO5-M.h1R\8jY`Ea\}IsT4dDmlGfSR<{2(JiݻT,Őآ;hBq]/*p~EΜhV[Œ & nHvbe|{. 6 ItTyIW.N422]M >QDpڔpj]*9Tǜhquy)At]t͘ l;+5y$0:<== ?=u'Ob.CHX^:X:Βz`bQ7@0N,#ɔlg:F Xu%nf-@# :Q+ ʶgɢ>9|0?p/((~#(?hyI3ølrTǙXu$g|0_ϝ]&h?J6  iՋotfo΁l %g&D5"C </ҷp6iX]@#90(9x~T骤JJr7B 7t5r|pI  3pCW " [Hnp5t'x3-lsX+G/$u&p%:B@9)0B}J̻^DV;Yd̼(歘]>2ueծ8%Qw挸O ~ET(; ;%30g9@׺{?$! (ﰓ;M@dN=Y=+.rI;D|?p8N' 'ݚ^AH){<1a ?{!κdY\tw3&՜ozf(O~\ili͋8~\mNbKpe@ĚxO&{\s\t)ئ>|KF ;HۈMIMsbG'GWYrK'ϛ 0z|-5?؍F>v 6f5 2.r|pw&mIk*k_-00ljHZ5+^9zsn*s raGLRDtWV^Lm9lW}&w;YUԖ3jQ`WAO85rtP[}@&{/Qv?$Nk**<J_r7\j9FԘLwIFP% |݊Xh*r\czXGs`s҈ͪb1 - &#_zg~*^hJ?o].*e?ۖd b޻,ȉ?LRyY0aHg~ F_dGǶ&|^R|.*?,xJPwt7 )jh'Qݨ"0Of)Rt+bz&/H_pX`%\V'=!:MO+l67b%Ý.$-2@: )}z,XWFm`|::do0!~] da' 8LnFEQMh ͥp~C glP/׼5%uIÔZ)m ;5-8k)Ry}UoD Fylg(˕֧&=M%08br7Bg:PV 1 #q4Ls+21?&& q-N#,TwE2E0t*X6*Zug!Ɩ*?+#hGFӻbz6 측y'0 c\RCz'4؏pN3PG{zIۑ9h8cOv3آD_z??f{%JV& ^QTN^ܒ2 )(_^V[wא%CRqvt[ݧ#u/bh|$Ӹp34)NS\{+u8h~/XKQR64 e~4܆+8tEQ<{袬`9 lHlmR1;pm;w@P9.)D3Ә̀M%V!`,q<0y!yԜ*mxO gHQa&u/xeڨ @*Lc'LIǙC@i$A@¦@cG, +Ae4c265ksR'.}@L,ÈX>H-ރM8jOU.H^Ò@GѨؖ-cK$eu# :*B'}Am)@U}{] '@h3["zN9V0P?1ھ?-ڙLwymu B*~0[ Q`@(&ܒ(/gR\c7#Q; }-$d?} ЌBD]+ȧN͊!e.4>TB͓JHIycғ>I1aN ,3Nj&JAbtKvf(fJ5ې nw Xa٭Jx[=-y~uhM )fT{ ;U}/ fơBEbgB<:geD-8`o'H+zj- V6Ow] )1?4T2S%yRJb6WWjo:r۷ r$ϸ6{V`Nw Y#}~];Ͷ iN}zJ*X;u }9 ұS78ju^sX2st"Zo(HP5 2q:Jd51#P>Roȗ9[7!C&`E^DEݕr^mf=WWXrp PQvkuAA$objh̸.̒uнG19op2R/F=#uUTY9|n 5kYV:'X4=Bҿx >p?}dys3s̥ 'UВ ?koדu4&J&?3v64 \}[A}}3`TM_=lb137Vhhݦ5Dm@((ʉgwǤ4{[VO}V[TJ,x{4޶/_L)QNTL.N*Jyϣ0.yb9 ,7%d<;S@%| 5[aG@Ɋ˲M@G7n^L(e]UlS"qYK4l XArU#r=r"wT_|áw.mY>L:; r,k<5!C3ٲ-@S6aCO BhCoZ`W T@/r4o~/g?oo-ٶKn?|1Q%=PK=s{BQռpW$J \u\M3Tp}?7Y`gYC<h"v,ȧ NAVhkDa~ Efц3ё9i©0zN[kj&4I0|f4Ŝ\!2?ۃڽ1mQhϻy3[`EtMp}jfc"Q̫Dמ,1H h¾ Ncy\IO(*VkvdEeԯ&hZp[1蝥՟HVrX+4h+u4%[)jdJ[%t|xi1pw9Z7xr<yۋnAIh"? i]Jo?KZoO/ 979EEF|S"6OaӒX;~q<9:1N?b5!n%ynX&e3U ;I K]'B͑V})˸wq Rk,L3J*XXLҗ+ F(N106;!TF=QQoMw xPa/Yww&A0)@ rܹAYdOPdݘa4$YKՔ Wҗ1c#/T.ױwNpn鐔[z:0bcTNk4XٮG|V`5Ҍ~z"@6m~5^Ά)Cd܏ r3Mt?V76RgV%d}C,'MGEn^>w눦F(n4^y; {僭5':>.CAFlX'x2%R"z%nRI;ĮL֡IfUΔ:Pd IR|bTf1شêwFS1c 10<;cRa )hhON`h|@;_u;Bz=QeÎOh]FD5ɬ'0=U1IſR^quNA b sa A _.e~^ 2\Џ5_#/U`,[r,eǻ`whIP.|V|9eCGJtQۺ&Hi9dcgk4w~;,SVdT%mXL-]S_;xTj 1X"֛B] FAD f(G{t:0}iqhĎKs1Pl0Hj9-%*ON"t0Mp.s=0P e륱rC~4"!|ΊuD[0RY&?3\ˢ!{INZL6@,4% rF~N"݃lht*8 UA%0ݳBI{zJ Is8k gR|4`?/9͈; jן:>DD`cgOW͝|'܅=  KC md?ȣ orQ:EB@5.ŋ2ߏ+eKVZbTg2A"qE@b1%(ڜ, &L15 `d(-1/)Ps%crI.khbzD%Oa/v~$ _T^s7 rVΉLMJ &@Iz5(Oxk䫜}`AI/+8H 0$)n:AIcIr7ҁ?.'DPQ3D6<}ܥ{+6x*1u7G,r2⊓0ΊXQOV bұa΄8xMߙq柌v`Xn+<2Aר ,p3r'Kq:nJ)tU]=P"rQAfth5LE.bO0BC% EFˬ+a<~Яr8%x 3٫Jsc{ }S&σ\U}}݊C xXWCӘO0B5QGfjj֜]URp`nI.?"({V W' kv-`e܅)=o#n ՜L,D( %{]αOcM΄ bsڲ3@ `MCGy#&eِqG_"rO6QJy ʄ$5fi*{Uo K1+Nv)~ x$n̓$UMJ01V`:GI_ӱ}*:b0fKF'N̶MƁ#}=wN1q9qg3d |_g"l}D++ωdt)FW!e ,bЬWw TF*=s8iX Yg‡lҚ|25:W,V'Oh"̄8= QAe9y $R2YpށA42i_ οMoo~z+th^v4Jkm)(m zϽ[?F\_զoqkϋMv} ?kA2(,n1tdanC?pd7%oKiUS$i"ZKrU5lIޘt^X^WG bKr<Ȟouu0MlXAC_2K2_9 dMM顋qa$a b6x$␎x~4˙8JkU .0q'srŐ)|KdȄ*>g`L5[]P_gdj Jl(ޔ|//gz{DG쇲i_萖H.96PDxl1Z' e$grO]ql]ܭfwo lr4Ѩ<=ܳpL}n,uygmz)&.ֶI[l0Rvdm {f4ǁ9Jl(R& aN2BbYVTmqLXy7=2Ole L+ӗp~~7#Fh͇V;QF!p?ngnȄ@hB Y<:һ@J\Vm̈́o8eoR|)}tj\_zgCp%pn~|*\$1p'; w=Y삳PrƤ-{់/碯9yهO8'FIB$&Qr ;.gWU҄I uu%EW%=}=D1zݿ\ 13;+YƒƝ}Ct&Mɡ3u+, TU~"B-Q3:DČlJGwC"C?N?13=|'>?% ˶;r7;?;p:YnНMQtv Mz.t' " *XSNc^d2B')Ң (0DM eEn KS-6BK7|ZY.iɦˍ$XeHE?WFL]zD:s& h)a^=\[x.Qc'2j6yU1.[xf$dӷ9c~ 3% Bn<Jܨ:̮+uU^\܈r.DpbMYBL줘/f0h1U ߊaAC~S_[40R8D(xQh][_\L^wF LͿ(J4 u6hj-8YC4E;H}"|;߽9xT.->((B%# KFrg&O3.<Mo vKӹOSʞDY/^+wT*ѩ& וO^7=єDZ^=,Z%ΠgGuob\b Pط??#ġ7^֍{ï(a3H`SDs^l3oŮ w{Lk?Ԏ ctLaM:Yy\jv vj톻OuH2:dr6ovL5V8 H7}6ݗ]F 6G]Ty$(a9PA"M='>q~$& 4Q/w8; u ,#Эt3q3*'v$0T}EMJ6r$^^Ew.ʘ~8wK2V` GmŠlF #- f[0I1Ș\Pt@e6>bM"lZ:)X^AO"u3*"V[FM.?Olu)kbkt7;JL;-k6`6QfIz˞(AnooO?9q(&q/DCk=6>gg45 +$ݏgm=B N/1 wdhu#2G?b ܘ[OȐ(uW@ ţcN(b P>2&܊M3w =kճApw ܲ+ *޿[±ߊ [ @i[Km߈Lb0`0尶gTɔ0r wH37VY'qWdrUO [ X qnlglTF7ҎK;9@ǾQaFIQI83BrݖEgE)G*˺%1ѧ N谆mmZMX>@fO-E^6Eڣ*B=GhODiikb9.5XNPgclJ&C507K &2x>v1^ JhׅO&9e>-͛すd 9.'v\2-^~ !Xb.AG'' h1p<^ի6fkh]ų#߄͢f͸`|6#UH9do|[4Nwy%%a<%ƃw7q&;ڤZ͛ OᨖMbK%|hзNeoUPQ |()< md}G[3h1t hlLwީo/@YNaoZYIqM{niD-FY^nё5jfu܆*c .tubH.{?%vEď 8{«a3 !jolbP]}ܲ.f~bgS@ox򯀃c~nQ%f:=`>a`U3?Ⱦ}S|BwFx9>+ XhVr9].!g-7ZWh~ \ (rSb}[@ uhUQUSM譪IP{HM JPh3/A s/K8u%d>׵kצ?B.hgt䭀P]>:' OtٲaM?fcf) zLnxvA5d0BtG0փm2CK#Q%ŮBٲ~~,N)&d"u'iAJ oC~ Vud F?dbg ^ E]ӹ4Hj^(jڛ*?eiF1``$Vߌ yx[AGP=B)~j$-&(Y\6hV)Ǚ1{{! [GJQpMeiF'V5NR`Wo ʎh.O: ":=^ysD6 {DCrA.EY:خVE0ϠѱpId4eq3qOE% EսYPW<{p?NX`]W+PqtTb>^W)=%5ọ@¥0ϫE %FuCyD;;H)d'eг@ gRvjGapOG |&2\ZʟxhQU=aqK7aJ}FeRTɭމ+&ucM7\_(ݽQjx ҖՌo[.&LWkTdl@^ch0T:]q(a8kOWSRVpP:;LnN㣯Mڦ@[.>'Pzzm{\߬ 0GO ͙wF`#qB'fwSSYe1-UD9lۧa8h\ LWۢA4#%pi)O0ၩJ&Խ m˗6Kp/dӊ`rF9 8?|fxBumdAbR ~6E|XtF_-nHd^WchqI%'Dl>m vf-(޺=KzAd͎Jqi϶}<})Voo`;ogro&6bhk,3&5k|v :*Zx#6w&]ßf\rrq$#_4HBߘ;87 g#x^ԛkH&::z뻫^ڄRwkޮSC 461t5a{\cfW_)GR:I'SҏyFr˧Ʒފ*tQ+t =|V- ސ OC/5Oc/ABA& >?W>Sa ZR*tE0m4dХ\aSj[S 9s7S/iAրjkOb?!%I͓1StQk )2B_csrG}(`ף]\\`׺&n:YT:z4NƯMIeoFdjW"L._| 5=Hu S \C!'ЫZ؋ Yb2wnjSXRz@ L`Z^'X鿙m՟M^7C?53։&-U]N^k&ㅅ GMj/1&^) ep55|,Ux&[ΌOhwZ3,<@s3ATpRW6x#Fa?j&A#V gKpKb 'ѷcWnefv638S3 =_3EB TGj6eA!!&ԃ!qP_7[ŭGOvt8V+הUG˕KEaнIң:7G$`ũC@g(0:8W{!>/ 1.0Y>ZAEVkEQYgqfzhUe˃VxЇӆg6\ [n4尼l.#԰5?)0Wbpi2Gng͉9ŻX^s:.3\"ƚ'`kJ"J|Y+Ku dݙg\/$YOqZ zֱuD5#eD^kcy}ǘ)3&lŁr.&ߪ=/ݵ:r;c&n<߾[rҡg-) o2SUB. Kg hMI-y+g:h]—Or`<,6s{ MV(2#+)>,Y? 0HrHֱ09^ [:^Joe;\S|\I*=qT4jm>.7)(IE¹4#dU+\ڷ ~L##@I:gBm{ &*0 J*CqV*1np֎PKRPYZ 0+setuptools/_vendor/autocommand/autoasync.pyXko#_qd(>ĭ;1~`j $ZKKvVX=RgGg@z_[vڇwƔ]+nH5vWUɮ ޷qZpPN_6CӅu .v0#USQi =+ok?J;U].MNM+I:~w5KslC2-ī`l mY;gs)[u1Swdk>6G*UO&+5|A.agudui .9U#,]ݿ 'y ]%-o=_݇AQ?IXL矐[˂vY#ǹ60OQx ڊ#laA}B}pȶUY}SF?dh8V+ nuXqª^ Eutܿio>>TvX*p^Gݺ23,|t [#]pT[ڔ&/&k˅) v{};d*Jd*PA8XF@QM:t+ \%(WcTHq $5?ߕ:l(0aɾ`Vu82'XLN='#`z#V^ k8(ll>,koK KD=*V[xfY.o7L8Dz2WJд+l Q.k[ON߇#(ًNZ>,ﲮ3Asl;Єnp&K V&0V5=Tik/pcY4.=VB`Oryy KC1Kwj_!h%ưlfɹEDݔEkB{?rmpE6GBĵ­M[.K8awq+D_>-էS \C7E]d_p&a@x [1F'NEP6BC y@YwfF;4|V֠4J42:D'?-<sp*<"- 3bbfL slb;qpqhm<7yeE0A(k{mN'hs^FV4"s(*5p/SPZƶA(j%\t'M,؋~I7ѓבxd,$ŽiOqs.ݘìwub 1[oliBI0C,/~+u8 u)pR˕']+٭V݌Z :B\g8o3jt;Nb/@#-oe qqEZtklz3,z0,4g%e"d]G|qEq]76\p) _f;1P@;^ h8hÉ:5/TpurmQ\_~=`WLxwƸ.l>fSa>?;#Fc8˕x)l+%UـA!iyZZ$W KmAnl گ p>6JN:h?}ptɈ[ƙ҇Jg+F}cmRScQIPyo޾#_>ѐ>i;ͺ,xu+j$xC\;VkOV+d)PD ,'Q`XȔI;^.Ug9; ={+lXgDПP{?d*?\WlWmU|/ҁhջ{F?p_m Ҷ. ն=invRg}ٓSSֵUAH1v򤊢'&lKebИ"TҀ؎L3?fQ_'o6.mځt)CRUf=qǃu(t>7i16h?}~lpcƨ q]p~-*_ W16bۄi2Dqz+[*/|xVh|k:jglY{|r<-^t AxLIt7@y؃iie~9g˖㢁&PKRPYД8K -setuptools/_vendor/autocommand/autocommand.pyVmoF_1RD/Dp|r{W5:3kCl3nmy =|/ϯP>W"ud@gȃ@U&vS&@2Bg3W8 JjIo*<lGaQeR$9G99L>-c74HjSu!(N$.6MfȪIf+j!9IM!X%{[|B2ӄ-q{]AfU1l 5L/<].olsZ|:ޕ\)9ny=Nfn8]O%<>-Vw#JR,ۘWpu/<[ ) y 7NOA&lC'g`lϽ/'~mM5u7cE$ՅvYFQ3)NO/ߑ$uvL7 $Xz ;5ᔹTEQ N~UE)t4Xn Uƺ*\Ojw;OF<(&QP(ԦACJsׇCS ҄Q;Q;^_V;4>]Ks2I Xy,DrL\*(fm#:0Ͳ W*䜟6+8nܤTj6qhiAwl0Ě*{ѫ̉ cQE/X{^׼"ڰ[I())/4SMY!.T&ǁA!$B^tDZ ϤG2҂ܩܨrl C˗ $ gJ/ 7/\H> WI%cdP}RG *⋂p=[ ˚BZd ytR 2A5>\kvvP:X6 @s:>O穲aq@g%oEsbX.Xn8^< ?$dtGM;kR]Z>d_PKRPY:*setuptools/_vendor/autocommand/automain.pyUYF~(-196/$D!]Yqh4Oet!(ߪnc`9࣫ꫯNw^OF o#L+.DXB.Kzqsө*k]^n!t )̤uFnkGpH{ T:PVpCSYv+xBkIQ¬ޖ2'-0-#Y4DQpRPoA = J._&}*[=TEye [b^1.LWKO_e<ןHx$}) B2B1'Od1m4Y}x,<>a |9_=0[gϋ`L 3RQ3tB6DJD̠(DO@J I,xo `.Kl.Th~IңKF$h6Q *!AIgu^Q >AezG.avvvSv-T(T剚RRZ܊ Cbn-JJy`}+3l {2CϏ[& 582-i4<U xoY֘<zgD +?p[oV0j ʚX6;DVlfij/ R*Znq{qq^m7U;Ŕm]@Tjd@r ۗŽ xzuw'^_ߊ qsq{xVܼ{ qP(mጎ ̘VfjHFq'EXT9LU kӶg>^]\5g~G#0O^z5ёUe3K]u.e5 kզUȭ YC7PMIRWF 9uN!ZSJkΝ9VTH_-'04v^w}ːb %#*T]MB` a|xtD8 WVU/ٿkpJeYQ\iAˮhQ!-+(}Ɩs3Oro4Qv@  UɢbI"7XefF4Slw~bFzg*$ }\Cv{db9K`bh !^l!5G9s #"z'y`\8DU>GӚ}0ͅ[25Tw"MWY 66@B4ESM쬾@8P}⇴e ExXE#X3)604,mt쏘,h@%]VB`LYEc!-,$UE(/B+r1k_ Y8iVmWP5$h#es_[1qOj>ut,v૘]എ+mLstG!v$EQ1JJbkxV//`֘^$$cܩ EPTXȬʈҳI/V*_Ϗ67qΖYEȝls L$C9Ad2t7Mr{f6 O8l E`h-TP P7/De2=Jif)1}{c&0=ZJ'ٗ8޲H:d=[*84 % g M& hoNK9AMŏ9@ N} o':e?mJ!2HYdξ ܍mUDMp44&x g1qZ#';$aط 4wҹ+2*QgM!ggFfX#~%erdG46I XseNxИo_]kdV>pģ!p'W0P։I3.AQ{"\e0adxtQQƇC&fm˄sr?Y!c[suLTMj^F]fiT$purJ>+Sbzf&£^__.,n.]o?iٗrlݙh,s>p=#`h6G648mfLS@dW͙z*sz fۋm"zDښdyx}-dGC#sJW1{ =MJFBĔ+-<̊cYi~'͹{i3VimMl#nRnn+!K%iXR@d'1!a'4ǯǗ ɗ8N/X%zTzCz!x@/K Elz̲S;NsL;&ND 65!qMSVXAaD`c$`&&~`M.E+P,2= 9%]G),&Sc_mNvrbfl{\G#hkr6H3/hXȹm{\X.x_%5L m ܆ |k5WC^1e6#+\<~N`Ӈ i-qYV5@v%~<>&QM_1"]+ e0 Z}m^*sGbICZ ,kz8[0䤨(Zx&#mlV0~43 )mhXrivUK3-kS"ϴ<Ђe#$K 2y3%@Gc?t 7h:T:Hix#nO;yDNܡ˲'mg3{}d6Gg%IpuM?]&ŠrrUİÿ IPKRPYRv(setuptools/_vendor/autocommand/errors.py͊0~Yd ?HKC!dױ@$;*!S(^H:9anګӇ_+'Q4BHZ*[a=L ySY*,]mL/ WӡdJ:o`XM%+SxYɞ]8,LV;,9{"MV(l%$݅PcE0}1a HEO_OzM`,3-Lޱ+ʿ䩾qry"‘9;5akϊ@:`y*Xû@VIs$+sL3W$2+lX- 6I^d2ɱ6-S*Ɗ [UF=.IlO >6~n7޷r'ƞj@8R >J8x<~kpoHjǺeY.3]^V')rC;+&P8Tʚy3t}oPKRPY[48JQ(setuptools/_vendor/backports/__init__.py/H,ɈWU-/*P/N/-QK(IK҈*KMTPPV(,HRL/JPKRPY,{72g˧0setuptools/_vendor/backports/tarfile/__init__.pyw60 |Y4MֽMgulgnWhY%NRrs}uX"0 f?ڎ8Hpyy >ɖy:,ޓ~="aUq2Nѷs3{8MzGyD(O$L[u_Ef(J(Ld|xQ&A]IEE4YO,mL"[l\"]̢8&C,.8O4"1du,ʸL  Ps&:}i/&z@P2[FV!dbLh^ܢ` " ʦMhxhb U  |8IPeGE23XP0%⽌2 *_@oTn @>3FMXLSmq@s}q!Q2EQppƸgL򮸌|1 2Vj 4(SeS ٫g?G'gW?yz4E3~:9՛<%z,:zKS_EN?D'/<Q=}q•_1'Jr[tͧ&O6۫q9tu~i`ۖvCC{H9y? "ïi1Z@w\Y,rqٲg% <)xR?$;~X,t97UQ\ Ab5ߎ @X&ԛi\ 0=ovG"ÌvJ*o O jI2ٛׯA8~::CiI8 :߄8{ -W 20XܬA$d gW Rk5^:$0"hIr%?k:DejWܠhD[=%!mθvvBt2ӪH@.V O!5M.=-|C;PȄnPI)ԷK49qhBmHW!:WI*5khb w +!u5zLE\勨x{#{ݏz"h{E1m̌Ɛ;%u"]L{$& V_ '4wHӤa[dw$ws!P)1luI"S >Uzh;dX A=~5^4|_?y%=*=Uk}a{vQdウoL`=S>~oGѽ{nY$U ?DKȧ4텎du[z_/S0Xб㪠5+dTXzɖq‚g,d>t9Dc~E>D #@)0BXFΒ]lRC# MeyC/bVK/@z1~goheTJ횞hMu!@hBZ$hatl$!kJ"/0tQz'@P|J'$Ue){~ S!)"@Rۛq\$;Hy&9s5FEAInluL?D =@d{ sq>B^_XƷe='t\[^{Y'B 9X/ʅ;f&M_4'YD3dm-ZV t>.bRKtQ ! Z;Hݮ7gAĻƖGXq$OFWX<@L&XHw #zW({ /rBMjBV5fSfΤ # w 8[0iNFH~ o@{`_h>t+R8pƒar$?3?q~ʦ=I8q]+v(!,i6xhyt@{Nnf T+DsDw`_z}Śzi |~@"E2Z$X Nxe #=TLr`n}w@$ad[/cM^zWw k%#s`ݾpGԲݨ 8ߚ@"2珽cj}k| >>vPEY"9&\IX{yZ-$bTH4)q:'2 OmS /[f8@ٙHΐiޚ;{Ԥl͈?Z4 |@vzGճ:ٸ[ `FV42tGo1x'$^6*2ށʂP>^1z]?O>$tn w,(4&DhnwZksR"[Ǣ(ψNYX{!k<uj//ĩGhzE2y}/smto'Ǡȏ7/T~ 96˸"C;ƫ'/Nxu_ Tjx<}1zѣ~<+„j*V*O.#d_ TbBf+;4bVZ Z$iD8)dac$g [Ss$S2\"D%} (gj]3S DhQAy}L;T7A[(4IlȦ7A$HSRVL1osнoeL4~`!w^N75+7Aklm<8OǵM5Az8^bENp ag#=~}kE=5nvf{@u}\H?$C>xiN +41էV-&ΡջMͧ,ǫO&2ؗ8ZOt-sCrH ߫Evp6ZE&jYp|! #dD; -xM]YHX"0D dmWACzJX%CmNS ˮ'hMwd`%?t *hO=?:?~z;UG?~S8~1z~w[ e(3<u}y!?~bv4h_ݽ]Wck7u hVD<=yP)яFK\nA30;}dBAE!⣞}Wm o P%5E[1o=JA 47fi V]LqF Z8a]$׬Nlú ᆉ1%(#}" =69;1Vޭ z<ĈjbkDsv Bhq>-``Kѧ_jUiH6!BK_hm i Ij.Cf `sĶ vo. > EJ6) y2. @ci%Цq0%T' ޷Om+z>x_jkiDڣ l Xgx]?4$.WG^ZRP\ʶj5zXn&ڞm ~nIm,i-|\ @g67K-L_2&+PVEYˠսOY4`MzBS\)mvEf+FvU<DUb3JgrgPǰxd&3 5( /!Sb[Ր aɸ<f=pl|[W@mgh =V>?a¢.omźn36&{-ŠRᔶlUN;w0P&{@)/$9LFg羙 y/} ÐC*" [ Ņ@ֺozUv^lɛڂ@JThP 7˧k} 7䌣ɚ/83l͓D]$oUV2bv9;W#;bK@ŠWzCվi>D$lieoݍ] !S0%a YL-l!{rبڙO6Fs=MO>S^k[;ڍ[;8p?R6阁 9C){]C|7ހYIQwOzS_;W.O 8̄)7啑T nL7HI>~KV@sqZkjŖ ^N=Q)KM/(((cǘVI"K`~FaQ4eX mv}kD8Z]>~}Y|j.{O7DM9E]Dqw) ҳmGC;u{@0y2scxچUϵ^!~C8zu7̮iGV02dm) Ȉ^b&ŲDaZ';3In4pPMt>ES)x Cd+%[GI, uG6|ٗ̇F.mė/#E |;*0U8+'U'KÌ^7(J䟧m/͇dO* HӔFZm!;BnNm:/(*B]:bѳPȓ//tWeYos3Njb'5ڭ#*maN QpkdWWق*U9# <Դ Y+f1̈́ʣ"= JͲk 7Ge%Sol8>UL3|WZ3k?`E`v5M'-dƷ}/Inz i3Ȃ8-z׆op;%zN@$eʛ٣]W"C<0 Uyf :@d;s8_҄^1TV×IѢ梸D2GKuU: y(G;63kC@7eM=, Fb @qv|ʒ]G-H 8"w7JOÚ V,?,=a gEk췵 |>.k>LmBukB%gY4M. ~̺KgVJj2crw-J9{Oyt9DxŁٕ䗦O@cfϘG$p[3fDJ Gm/^QԻJbʌ֙Tb Ō'5k\{lJ v1D", د,hΦ9 ,vyq$f)# }xj{-y8{ Wqڻ Q@7W k1L:MS@Uu_Rp`حXHN]K]E (B&^44jf  9U鞙3sPsy8bNq!CS1SFԅ$bBkI;4B%8X-b@bj7;# Jӊ(氹`h `?馋A*Oi^tieHH|[& 4p3CS¿%ثW4]Ew=.3j `%'Y*uԱ+> 俌oF㈖4:0&';+j9!tFCVWe^+WnVWda[`@#v))Иx聳}Gګǥadl)uD%apڵ=*%| $,miv nfNvmf-9 $;H]9I,sW 9u,Uu.]x,Lqht |8_y+Beg[ٵuR%^K6e# U6g-%i.x[_qqCWuw+'5ZqՕ`y0/=^-L]`w>@q۔GVHèS |ImpQPJ]O]Ř a_YQ*e7a|pPW1=,bT4c*lӌ؁;kv}fFG7;GF-U(oi!Ap4}P];Lj^ʖQ,0X\)j6̭ڬFjZ}mVHR3,h.ܚѣ!Y6WMSƕJ%jif~V:%`!|M |KW-tr J̼Z ITfK#g2,S!%{PbmQQݓ yJa4g~o[w N[-ݳ2SMl/~O{3}_ЫJl^*)/.P* ءIfmv| :߰(lD)7YvxNWK\HlHyôLi -_BSͅ/l&z D>ѳX9QosvD QER8~smfX}b#UԵTjݜ5gCG{p0]@=r*젙Fo;i2c;μ\rw0Дt5Zh(w o4x 'Wߣb9OKvC$VHeVk" E 0&LvxtaݸtaB:4ZuK4mk tB^܄_ קr sPn6ΜR]Ƿ<3[2p82jc1ߙ˙29ηбd;:O+mIan&I2{"*2Y.RS'''vBU%1kOc KaEATq_/9Z?^|yOfnNczneuw 9C󚲉w2O<-ox.V)"/mG°dT0 vڲ5@%(ʛENCeѪ ǩCti]>d9R R1CQ$?DILk껤c*O+6/ی{x9JuK)VO ,Lq\_ ğMdC@iͤY"TeRvP-3Ѻ^<^X轂]7'P)TغX31Srl2@IEƚm;SK8ц~mIUƦu1%0yZ:1>~){DlKn(bqVmXbE8< ɼhdl$ ]de&9fxΘ\ TG!d3{Q$ǘ& $*VbLU! 6Ivs{$>KDdaժۃO+Ё)6 cEy}zgBƯZ]SxЦ XoW j'3"CQMl>NXtr`abI sRNre|k66zV]|ɜXN/t^@k/w)͍ oOC&%6ԏ+yy>7 X sfp`_0|Y_@r@¾4DrF$Oph87`l ;tnHdץ;+oTÈ٭UcJndHNI3kuu :L&6Z[mɭ=cɋYm-M䫯;߆TbZY 8.P1 /펭[w^S`0w:"C_w)$If_}]hYowiO{f9Y9vVOji2;P'˧Mٵm hiY'ŵ1UAQ&G0HMzz-vYl pA)7!|( |mga*F (3L @g|{GYќqΘX*3bc+jaq'E..Z /"uNJ+-W|iý6\m-D/dpwpPP,5QsJC2x6+!C8jL}Jv/>=¤n͓~t9IuKCNȋl(Q6נ%|Hn]z!yHpMu[(봟0j{^C[ңOLHTWl1?'tC}*0@61Sg>W.=1.U``CtM -{C# enuʽC ,M>CibG{R~A6Ր0QF*[]-n⾛:Е [ɲ9c({</ZT,aXΊ<;gԦ4^LJ`FKxCٵs:::tZ(ق|𤛙YDò%- R>#b09IM lL(d ,J?X׽}x8xfrjUMv:`"aX!rHެ7-5$JRǫt^b0T3o޷Lki؄0$1/kyDK^w.% [[*"lőjT|jd<{㧡MSr':FטgO3*SP \`S%)I5z[&x'R=xh&֕{(vO$Y `G$t0Ξ3ALd@֊( `Q} (&L; GqHǴ4azr&Ybs?دpmdrG(Ѯ΀XiPƔ@K TM/h~3MަdѣCrQ񵙀"oGj0Qki.2evd@su%K .Y7QڟA\_)o)r*8t&@r|dب(pc Uʮj+OyWCO;J71>:rrT?md??8R%#xAŸlHjW T a5Q:iH3a{)-EDIڙƧvhb 2:opAC>OB]6iq%)޶XId.LLN}Pc1i{c+AEY[7p#9{;!9=c斠D4] 7Yޖ7v˥)Ps9>ck'X+$<6$H/.]`@j{7a`L8:=zo_]t tO@ &2S!) {Љ/ЈpktDN%~o1!/L)YIvH}U:L40rteqLxk? 8< Viu1=PQ=zq!W*ס_:csqn &7IUKqG CK̳ &yF__@Fɋ/o<^e=,Z{1\zݔ`IG`d<"Ş W.u&1̝kry2zGOGja%x2!d麓!]DH*L`@&25^ Q!MB鄻r>t : =;;oiⴸ't?r9B fh\id_{_6CQ q6)U6u֪))!(!uhZAz5z Z5uQFK=QFstn9x:{6q\| Chh{G0B ECh/?/hPkg=0O.cJcq^$aXd'JU5 ]wٮPݣ'5r1#(}iS5Cb ~xݶYK>.-#6m;VUV(1Z"]LSL#JZ\dmz1܄1쪜򦌈Gf]7<.|X8k?>{ 缦oqt7| o󝉵0߭C?y{pn _mk! 6^N SMm wP]<,uA]T/Y;Trt۠&wP*es'S6oeRslQ ޽(po!,C|N<@vsK)S(zi^HqykT37&d}< 63^[n#a0Q74̀bǧx/`Yfcz-4a8m6tz\)Cޚ>k>;1 = C(Cٹ g/,U_em~Ec,\#/Q/ ` } Copi)*V?*y&up64-<~w>@ ;eUnd_S.! 9ė/Lssp/^Zs 0o@dB7JeGN kLKIInл­` [lNDoMKzN~7l nҊ$ӭL.7ƚQ/Y4&atcCp5$a\thj i:t 'Nd!f=h>PZ7P*ck;rxyW/]!&AIB/PDotX̒rN Oqَ^ķ"ݨȢbVm'ACk(',dʎ <(lTJP0J~#)eJaTH>]ߵE%9֮ ;b{^zA%>p[*IRcgxv6ʜAz;>ū[a“%f{ t$NoϤ/P gvחɂ𹐡JڤP=;6oQ]y3NK(lwn׆xϢ" H8 Iʋ1:"SaJrl۫/0^%6q}?-юrV͘M7] P5ƣҘާכqGbb"`3Rb PM?vRo; {%8jCTCGS~cC,nEpmjcߏl[BƃyeK46P< =WUu#CՏ?=X*"2. `L~P*Pҍm{̓HĊw ҀtAN*}PG<.(#MGkѦ{ Wiew2|' l9"J4zrF"/T;| x/ Ry!Z j\P"76UM5CƙDTֹuJ+^#*y} `_2LC-xh;1tی-m&y~~^o_0JU b% K1Nm.Eဥm|nK,Ĉ]Nm^ ^Q1'Jb-FɴmBN^?;l)lv ^ N4),Ʌ '{̧-E$r&L"|#N#A@i=qc^5w}#~0WXz͖ ZPI$ 7{ShNA4*>D9 cՙUsV1֪-栶q! Ȯ‚|YDO5S)$G,yDи& nm1aEHra>ķ`,@Zhu2;; PIOVk;vkRN \z /A \ [&8AqI7 Am+@#KIgQ)b<}sDnFbV"uFEсh>mx5#c9=~)]wuyinM0EYրs$&J^,1ySu".v*ZrP5~ץ:vD} Y`G 09t&c c1]t`qV} [߬i~*n3cDn'mPK1:yPb,v@R0K!,Xaѩގ5,:oPcv?q2 a {F!K͑UxI"pN[Sy}pщ"9p꿐S'c*V Dks/wQT 5 x!ѳYGR=4qɨǀov(@oF)TڊKoMwwzE7:يFxb*j@  ry;t#40g9 nLV08U#׺Ө .b"kE#Yw==dcT ~?~K kw~\A_MX]]q iګZV CzuLo~]VoNAcV頢m>2unSGhb1Xy-M>HE OِW>.Y˓W>  zdR)j.ya5qM>uo|YV6Uky6 ͹j̖3#}M Qo;6d%ѭu{ČCfj\A[E֣ۧ[#=hvmٝeN+PcI/R49l4R5KcqLm$5Aưц?P~#Q8)?nXϑj@"vmyɒF^-|D:ס ;~\;z7Rt%ǙV;ΚNG[J 0ڴ'TSDfnʋ6e?cn7[} pMngi1,>?? @wHT$i2jqѓyؓ8#FeOXLCVƛ6)@uH/!?( 'Jӟe)3ąh^Bvt4[K9}u@1R%!*HU|J[-(u;6 ;4h*7Nb T?3&^\:] {0 $dA\+%P^g@' [9+JColƬ59ՔIHSwÞ)p:/<,{㕯\jsJ;&^p6NG(eg;]_Lz#-7UwQ 4A_ ]Y``TI餞~  ^FtԺ?tDKnY9BdS蘶./(FbEL"ĝ/q_\0Trvxe)LTugUH._v$Nc޳ .zd' sIC$^"T09zr9$;9%n3#JspW:0m|sDט7O%\깃6l.gy;_})u}7g("x8sBᮕPe MVDϏ q"m_h_Z`?Ҕ Z h ^[*u d 4[ vP Dh02ɯėWM8 J/9\O: |]F¦ơQ*ד,ObhOnPaE9RXpN|G;^\a~~&Љo?AelI8Bny|*Tw1TPTKݸ88tK~m(k*+T6&5 HSҥw)[]@?|Ur|*˘,ΙB3\d^Fնiaޙkft(8͡vUZ ez"i.>g|]X,l\&rQnܼFƕKrA!pPw 9~Q¨'%Rd eNwrLz'|T \5.YP$d:JN3(hwܖDc-`9M>l ! ނ}ы_ovH PzKRrfC et; Tq;V@Mz6 Ve kJK:]<7!hm$vHI*v([ӓyu1LKeE'\& _)%dOj W7ǶᙐE?o렉BTmHG~Qo`5?t7kqnޭR!Z_h R(qp=| \=ϫ[egq)>)?wW=g ;l|S׀͞BukؠlT:d 3˗wL?|3>j ) 1u~՛Uf6@_n׶?26 ks&EjI>Ί;M715^@ .[qOU&(KG>W9Ӈ#$ XHw^D;=rU.WTtgkw&N!$h K1^ Cs(wfSn I{,e7NC?/7{,~OfQaipa3* OfPI 1UYxbׄz O8/H//kx m|`_y )U[BbVĤj|FE|z@$հ\EV9 ݰӲ8,9 Q|Q|EA)\^y?2cpo pƾAܱ>]Dk/taz<~gQw"Aӝ/v9t" $㷞3ۃGO˜ޑV^a[lR2I:2lddZ*Pd[v9Ъ,'7K<[ Vgf+S:7!ݪj*K%Rh Ƃo۽qRI=gK?)PMDDwlXϜju\LѴUR@t< :u =9uҪ;hkgٻzJtf?p]^Y?\I'4LL͟1`_ KĬh˔odxƙQܦ,Ե0q6&X3qTSފxlnhߔğǴ@3r5{w d /īuRq pJ-(I*%/Ce ȁ槗1n]uL?>y=.Oer|`␦5~H*Ȧ*uT !zׯM^_nݬipa6EO< ݘ$\ȟ!xS%p}.Lk&`sY*Uo!7fn2lAd~3r ,ntjEHd2~5I{;KAH72~3$C)߫-jMɂ(ѳǧgoVuzPۊ(h7wIX-,@p #9ΰ$2(^vMܘ#m^ 9z(d Amˈz4 'Ÿt㼅}FV."ÂPV;zf0 _ԃv3ѭ++A4fR(KeV"Ō7a1\DGW&AQG(aHR@=fYƈQI)2J p0S̬FLpM5]&4A1`wԾM&6+릳kHp<23WC~w59dvP(Fy|k-eUphm#4I=u00ioд=_d2ĵIkdZOso;JG\s/ǂtg{BT4(`9"Yrb9UEuMq^ ֔?")I} A V`.Ք|RCɥR6 XL:m8[NW){I&ooM`~Vo׆|: Pve^2 cү<Ѓ蛍7B#Xf7yEdbPY4i۰ gb4zf48Z>|òO{rbv*wT9ݥH q38'F;}#GM{JXOL4b^K# wQiV]vȝ,\U-v$#CED'xF/E;c5Ś"LvmAmG$[v4϶y4;g:'o8& U#la$J3&7gmzGkVhp;ud z}eyk\'lmS `H [l߶~)(DQOw@TlBU'6sWhC;28g4^)t aԽk68 !epWt_i%Ww$p~*:}󎂼&P;XSڻ S>fRfSڐh{j/T=:Aa_ڿSz` xe}'xWtiȻtS6\t~wBӞNg.6Qu6p'wrkG"m@um}]H{ww ފEՄsS;"ΘWiKpp&!99H&\IUy`I}H xj7qwwP̡Æn(>!l ݂@s.kYlp 4a8 Ayd #Nqbj[2D׻5ґeevYfY4Bȵx %E*U>DrJC8B9jm,Y,{,>:gO@QPC!1ivsI 7NK,b9WV[k6 k[ kAmy+ss|+ Ÿyr~srG#N6fcj=d,2};f8F;rRa됀k7S͕wb.p-H=%vO q4~Ő~ZcsUW_OL|(槤;|9 oS)&*+QBÏF#,E،0Aʷw6%RUhĦ(rO|*~!r,gy'?hj|B4 ܨ ҫMSTZDZ.rk4 w0r3㢊 ЇUX*IIB)y]J2+6'ͳ5}u9ªþ4%zօ$Bqj=nXI q]Kj0:ܯʁfXīӨa2lx [Ԝ(CS3`Rr|DeG="1rC r׌[㙇837,8M(H}o~V؜MrL kbF`Jt#j}ۅNeogJSWzpuk3C'Ϊe.M<+@ DL%'őШcrMXc/sL {kF9?mW5'Zx|Ư9%ݏ+Pi&4KO ,kZhjQ0*$̖q'ReW$by%lc#_5B,!q,} zU|b5U4\yGUAJS}a` Q'71E᳖Fd"h 1;~ٽ| ,BT(+wJx CONT}%M)[̄ݔEC-0I0YUQؖ[HPt״ ␢Gp!jdБ9@B[g숻gH1&(o= = ;.E]M"HU@^6\em ̘cȭѸ($* FK,H oV)-@Hݣ+U NZ1`n|&5( 9c# {TC{_#-Dݝ %"nQH XlKRuw%DPq~,~? }دƁU0duz*W1, ~Dz9)ɕ^3zѾ Re욬A]0CݖFnTFE[l>+[3=EoyG|mC;B@љQ@['c kT""d}? &thc},OsH~C$!@tE;`mȔeV Mkʁ Mdڎ.P>[vF]z| AxP*~5qȥ6S, vJflj7LATN<9X" mWg'H@ 7(,tI{2<(53Y(5=P^IŤ*H޲^'2)%x۬\S+V ]zsDOF9IǵX4< E;.+ .Qh 든6DDbX9殾Z!|QM{evnbP[ cOT2[ԕ\ru9(f7eG B,faG7OÛ}tt݃ eÛƇqC%o0lG^YxeO c˫jW;Kgnt[@;vC}u,ΝL29H\dW~ R轕Xձje[:)8dhh$կPKRPYCj|7;0setuptools/_vendor/backports/tarfile/__main__.pyK+US-/*QMLSKMWUPIǫ[q)PKRPY7setuptools/_vendor/backports/tarfile/compat/__init__.pyPKRPYQk,83setuptools/_vendor/backports/tarfile/compat/py38.py 0 E=@e%C gm<5ޛ1&{d=Z݄8s` 9ltq.1 f ..QTNV{)%klCPUWڮ Ψ D኉CIgX^^䛙r-V y`Ӈ_ޓێ]> PKRPY`8$1setuptools/_vendor/importlib_metadata/__init__.py=ksƑ+pKȒ+uT葸b*ɗY&1=/KJNruLfzzzzz5DyNyTnڦʦOOR>;/eg)J Veݷj9׶ҌܪtUۮ0pz94Me M_G`T \#2{QC- 7?,GZs.\uQv 59ն^Ju ZR:*_kh}M!Y[DۺyrNuRtKRU1-k$%_65,m۩yfT&v8&T 9 p*+y-od-{Xayoq &臃<f8h-з+/6^1&YU3lE5jbY/U=tmz0e̗M0jˣ$N-;9Q8?88XVSwz޳`p"=nt[Ȓh2xy@Vj b0W:bv :"ևL&GP "> .6W C1`)HDUtꬁwJHhC![jeHA>z5^Df]^`u4 @R,TJ׼/^,öqsA4ӸWG"zWT[vl6\IQI=l؇̄ᑝ[ϟ s6JQ ( qBIxILBDo֤៝Jg7Șs+bxkx4^U(Ds״3ge/h"Hjb&R3-H z^oܔ=Kw$@éc]ΥA8*Y@£[Ȍ{T–'Δ]įjII3"+*۪C:$N}pD4u9"j:S 衿-$>S-WWy\tb3[ZX;;HV![-ٶ\X;<)΀M";Mg !q#"LIʟǁR |Y_?96;, NB<6V؂{Ysn( N]m ri%{ r^e75nߨ+#' ZC;4i.ݞݣ$C04;<`̼Q, __{VUSQjT]*{v@ ѡcG&R1>њVX-hEc`zD}#_iKWl@Jp&;0m:G :|`NLA tYTlq: o[=g[ :4\6!)M31HvfGqo9$LXZLQ;#8 O%Lԕ=igpi7_]8珁sz: gBzʃEi /S}S$*PCӒS$1[E ^h5ǀZ=$Z@-hT]44S+*V;oZ.ޕ k&$'8]Y,'d>!Fy`x<g|A{?= hY&xt O(D$C-YNspX[ܜQ3Y v4*T7HCܒ0!_\8ڈ}:(7b0> U^i\9FCu61XF3I-I3;p*tt;E.w뀞O IAf31mo]>F>ik0Ė"$CiNe.PQ?<}'A¥ZcBcx++9[܄lx)dלQY;c^מda U?@rހ1&ǀ\.o^< N,n2%~'y |oA@9yTju,01" "Om lf#ꝨZ4Ȁq_ *gvQNd"7!ZRrL1'o:?|5N] :X3<1&$V$I &c' 7ȆLi/R)IXS?Rm#'~Ywza7QLk!zlF^ ujФOІ:~ܸ eD2JoH8C KAOU8k;TV2,w-ģ91&s$ @b ќ $rbIX[F{E)8\Gg\1) fW{ -И_\DӅ7jw `#c|3 B&nLC~ 8b4[Lfec22p~O]c/S 0'F"0r tҲH'v S"JOpq.oܨ^@1$wPwIbZېh8X3o<1<`Ѻ'ى/V){Tz'h92Q"y6wO3ە}H0gy\eN;܎U>39ȋ o=k,Sj|w) FL4p <Oݖ  0nA쇥3%&O4kȲ<32}SUmPձ|x}5I]lVĆ&8PӢi-I%{?|K{ 0v`Zne2 Fo^>hy9IE?7cۓZB*Řj+g."8ZJ,*ڶѶ PtRoC1Ŵ- ɾtH#mkV\)G!%OrLa /6Y;Aorטd]-%[|ZaLr!fFJ5OjQfkb"ҰG+ǑKRX^M;EE-C̍fY W@xvuIXہŹo3CtMS dyz@1BgVYYaLh\\{u M~y-=)"){Y/WݍPVa|8ҷ4/j0=Yxcsg0|qqγh0m,Di˷d#V/4Mw 1F82,+U DS/6q B[p$=Ņβspi||YKM%F$z8 8lٿӊ ONoN!hXj A+:—ED}L綦Enol&f lJ TsRz'EKHsEmTrUh95M_>L- e{_FdHQ[і lundGmrodk1<gX$W%yƫ14Nwa>%q@Oܔ`DZohPn ݻ(7)@VX֪rP&pa[ (ޓ?oR$i(ˢ&_OAWASݽs-{ЕàVܾ⪦|M"mz:}D|",LtBgdr8[[ibU:" X{ѳt1k?2ğН0Iށ!<&r`XBN#?5fqHwqg0%ړYT ->I4:u^>4!鸈n&߶)7$v@Z=_'G;˻D8p&5+2h"7}^Z"ﻻw+Ϻ((JbX8QZ[L9KwQ`2_\;UG"p ߡm]tv'=]J5l:8Fҁ:Ó>VG{ ~_˝Ф|Üno8iK?2[)K]Zl!mH o`=f (hD8xG.sB5]g\+aBzs}9Oe[bl!kQ Dȹk>h:Y.ͶZĪrYJ_@].4;n'O vYwR(C6}}Gf|hŽz;6M֍@9 5T+ŷkhn( WXpD3w-ey"2|e YFstq)Ce+N8$`:P.iOk^Mr˶>L>r0SU 0Oj뵡qڅ!ifI 0,{ ikcLx3$$o gG8)Kn8ps䌂7_?:xzK5*m" PJܒ[I?FaZ?EdK! ~#ۋQne`(-O/3& {%!Ǹ{|؏~ѯu^XA4tqcfؒIf; m ;t֞m<Î}7f`-V̯Tb(u2N€|H'39ޜ„㠲ƭdsHʈ֋@%"tt^֢vDR273D$=u,/.$)g06 ^[5 u-{&lښO)"*q^e}w*}}3;t)3?CorzFJS$1KTغ]8d>ь UMaW.irCyܖUEE5 NZuJbo9:aQc3;/rm7Kj5 29r +sgY&лҿdӔ=ݲ#<9 09ܺiO)`mr$ /ZE6-3 &zE&sz<`W^~hqşRtLL[hfY՞| R]7yAcX`kءBS `<`ٹ2 pJU{n!b/|Jt/AB`* !K)b g=J]G T\ǰڶn@4]zt?3|֭;ft99A erEgjoŦ b|x6f㇡]M^ 73vX䳢BsPth9c{/bl4 (%v:\c}iґUUE50Gbמ핺*VMU耗EjJE_)8ť%/).=yQ`On3Q=QsӘ-I8[4NhFW"+ڙTL":44{xtCd# =J%:jۡ`j+CF𘞌өqvbgyLXO P\s%v2ӳ_<$x8YUxB!xjh5'f3ɡ"7Epxڱa|溑ޤ)LzSkѵ^qmC0UNߍ܊V3V͒jzQQBo.3;:I7MZܯ֞;jj悘rG̍o/(XNI⇢IrZƎTaoM |TGtbDG$S#1rEq^9~2 ֳ۽LsJ1X‹4 )MM?S5jypB%3oPWRM0;n 8@'%e}:R&)(12HĠ*lU bs7"4Y{tlsW\UYv$gZ}Ezݓ6ZLOT00{j83O`IqIDK{V~;LB)qC/<ƴ"7}C]drMxJ3 5]&Od~7+D. 8Ls.w'G쯦n+]L9%uMθv;/u:NsǍ NmYg[9BOPH50ᲃjOOӐ$6I(/╺׏SY7|{fʅ[f+ڿ~덏Fט>u 1E{Sιz&]AKCӿW/rͼq> m{Zđ#Cju/iaR3G%??{O)$mWؘ& Ů*y:sS7},3M1Y,N 8m"/PKRPYS 2setuptools/_vendor/importlib_metadata/_adapters.py}VMo6W%G  X; =9LKkf)%)ogH}kU`7J+㈁7o~aCŸ* FU$}i3>+QBaQ!KOglr|Z8䵅|GK.`H`zg(MFOo9F/uK72b̨PO/aw W?aK_ }BL,%}Kc^պDRqI2qnLK΂ئ䌙:;ۈgL[?67t4 -ɡmZ2UOFv~FAP'̑S5J) :_(9p!P?W%e5#n÷{FiwFRsYw4U6qf:恺b4[,>'%4Wy9ثw-i}߆T}>׷˕'9[hfF)J,Mۭ6B5n?o>}[әJ&[*ȄGwI m2h!}'x8sYMvz7$`EDwiBR#Fo^EStVT}[`߶mPKRPYROqk"0setuptools/_vendor/importlib_metadata/_compat.pyuT0+FC[ 8 VZ 'v+q5cGS_v7[Ucϼ9 '_4u}QBB(5֟ʟ%ih_jJ5z0X AYꛞC)RVJ%cӥ>)ڏ1+`Fl !!ǽvy4 C:AjO闥6 RˆqȽt>RU>sFgg:R) =S=zqL'5M7ִ1: ;b)WO>-dX|Y$rdUCpy?>9'DoZ 5t%#'Fh h'3`\Le,g(+8zio4sg hyS˹oaWPaUw\tޭY} `D_D㐣L~1}JKOA5L<Եu;.F]=L긠PW'/F't*]Pt94ݴfo~'+^}ny;:eabJz2!ٷʦ«GPKRPY:oikO 3setuptools/_vendor/importlib_metadata/_functools.pyVMo8 W!lv(6s6Sc[^InKRGl1=4(|$%]zLŮkroLf%쬩EYt:] A46WyIX,AV۽Umv4]\\$vA׵ycu P^ndd/{Z9]:s3 wAԵi%ȅ~a_E|ҹzE3]Suj- h2|Q4d{󄯪H {W^,.sO  sCF4`qA-UU]@"iC A}DRě,4\  f˪7H,rajS6 F {TMRJ!RjD@D(OlVg;s_q%h?%MR9g(2Cl ds61~j1hIRbwm v<59jŻDMNH%|/pҳGE~Xh{TLgZKmH?aٹe$r߅ų\*oo rKO6xvt%ۋ39;#|<ˡ̻UލpjNY&PKRPY:3setuptools/_vendor/importlib_metadata/_itertools.pyUMo@+FȒ-Ijs"X,1Ndy%ӪiQ[rɜe"7y^lK{1>6e)bcXϿÙtM>Kcp ,hP?'(7Z*֨Ay\tΎ*t-˛[wCX5,nO&QBr}G`j8CaN7X{H{.3niLPqJ+di8Np0,Hj-1O"n $aGjA\:s9L=`3HT%1V(nW+.Dmlֿ"X +ghf]x۰F%uKr(.0ד^,@Fp>k9y9!~ ꐔc.I)x8\8S!ZeWRXTXe8';h6)X|<Է FZI9'4ϔ-қ̉C1<&F&LY+7a5bzKN554/\}cK|9ccpAHeb}ãm- j-ÑcȽFa2m}l{vwZ;'%SL9l 9;9j7}FIg.:~F _5_ӽK+}pp\u:l(6JxNpOVuPKRPY]V .setuptools/_vendor/importlib_metadata/_meta.pyUn0 +nvv avеŚRlӉZY$~;iiGHԞP%Ϡ#lȅ,|4q']GSrf9 6kâo񻖍oN@-*2wtCXZF/ 4@p<RE4=sfzlA3f;a%9ƅMlC`` "9F07oQ "F^ ^xBiYrD+ZKNɡ>y3?P-R$˴O8-zh{^{5j68x㤔[E})rzQc=3fZhd>L_Q@PVe4WLa{h:(Dg פ[ObGׁV 0Rz1|8;=*i),BMWBl\ gm!tE@g%ʘ83^j.z)@ӜejOՒq1NHwO kjeKy/߳y[I[vQWn<*gx/=cI=bN{PKRPYxv.setuptools/_vendor/importlib_metadata/_text.pyUQO0~8C&m{ak7IӄMvhsvNw?xU+mAhԪ4[62J UhKUd9Kwc*>83Ε( d{ 9Kpȉ[`%{Dw P\X[UU3M0%AILsfϔ|l6Ӑ[T VJ"J:nS.7z/Ωcwf9&J,pG?L-n}]@-0>Umekq(\/^&="g$Tr8cMҞ jԾȫs/N=;I ;##ݽhwF.!˄ͲؠXNJ=4FKpT8ϭmHH&$j9{$ TL+irijH;bawEـ52;}{E-\ w D*Ur&4})_;#s˻=ɰ=!ú4׹&7 [;M6HnmQO#~_ߘ k$M\`LK49io_&}Z4̺͓^PKRPY#8q{1setuptools/_vendor/importlib_metadata/diagnose.pyUPъ |+h }qvUj>8;3;[ @B)lsI $X H9u< #Ha7ta n|fdwIҹݤVeOt;-lwZ8.> r<R Mn8^79z޴zMum1LVqknZ)MW<PKRPY.setuptools/_vendor/importlib_metadata/py.typedPKRPY8setuptools/_vendor/importlib_metadata/compat/__init__.pyPKRPYMx`5setuptools/_vendor/importlib_metadata/compat/py311.pyMRn0 +b+Pˡa;EǬeIIJT '^|Is GR]J8;0{"_@|.jmo&kfYd%i==>g`^E%rsϚ%Qχb6\&q! 3 X@{akj8O.)޼Ҥ@fYjHPUuue? 8ZÑ7gс'(rځh;5|ZqA+PKRPY9EN4setuptools/_vendor/importlib_metadata/compat/py39.pySKk@nkRHM)֎mV#lj|3ey P#4EK[Fy}#ߊk:z 6`l|9>íksx*!` p!USpJ("AibT*j`qd,ʮs!SS4&i0wۅ7V5N;İ j;Bh\hUe~^:eq5=Ncw|pgH#4|D5VhFyEPmHMtvE@pK,c񄿈*N.5.yvXtr`G3 b.d-;>iF+R{r4"nW e]α|Xn%FGX>R$J`,OMQ\Sd\fbkvOdh X/-?G7%;oxc`PB L>+!udf~s&:t҅ǣv g$z Wd]q+v=C+!(>X_ZW^rmǑn`zu{3ӰN[}rX|WLm'cq'_3|u6XQ}C"] ~Q_sI&oQ8\/}"re}cIe &2b _g SOx3t3r#Go|ph *~H0,yC-ees\9U30 t649%sb&hZZ{ʺtjNZH';t,r_xD?GE, ?_PKRPYC1setuptools/_vendor/importlib_resources/_common.pyX]۸} n,^u@c)Ew4E@6ʢ@JIp8g mu~aSCmgGvgjJw}Svփ|iv-疆k4K?O5ُs:Qmm׶÷תԾ ޖIyۻ>ȭGy|{RAg17>y|,ޔ EE;G~-Hdf𹻻ֺ$KlsHMiaR馒(=w Ut|!z~ŊSu^Jt]C~b_V#-rJvI[rTRV36QJu:zG(j _9R{D"zO:ٚtg^?wۨ䳘 kr VAߛsև+A:j\ T0h(Q#l_4g0b5N!s8M@HjG V+^K@[_xK-ҭ9ea2m5=Q}bvnԭ+wE3U1WLy|S{sUwRaa3P__lC+)k)=}{\Mtnd9*e~*2ƞ"3RF]:1/$#&0i$,ɠ5~ *;L}f P{KYA0ķr®>E!EsL}ڙ,wPЏj؍PkwJχ'xWY 64:u'yDG~5{ 7'&F4gX(t =Tw]Bڽhq@ To7օX#IQ#6SEȱLzQ)#[zxPpy0&"u.!Z6&Gd"!OQ;boP)!"|Wkյ, pQ,:']? S+Y1+ ?كiB n:7 (2ŖZw9˲ɿ4Tc Pa}˸w‡>0xƼ):N3`.V, i}-뾢Us4QfD( ߲#]-_M`͢*A0#?fL=2ǰ2? 銹͡8Q3sfS.?ۋW0zNtqd܍(-7@|oi+%xi#qӥ#vr~z__nԿZxUփ+x$E;jjnAa :P6˰ OA}a}J֋g ne/<}$vw\Mj8!=seԳm 'YNyɺG'uB}}~0;}*R f=?g1+ vL038J+!qH{%+alx;KG@_j2oLVY'{g1kLE)&1>(h.g_#FUC1 LSQ'7SRεi?L>"`JYQ-@;x̼r_9R apo,cφ}6Ȅ.54a,@ǂOS8C2CW*&!/$*Iyd upʫf&HM_`@s"u:C tRIklҔ5"9޼&88pE 4;}lZ=5itOmKZDs EG>!EHoM`׀KQX(!8HW7LD~n72y2kkSr^RQh߃: LR,Upw*bnY[U ΥvE2`S?Ie5&# %%FD zt!#,mE\nta[栎KG:Iv-צXPKRPYor!,4setuptools/_vendor/importlib_resources/_itertools.pyTMo@+V UU!UjPUBxYưbkIh !Ō߼z FWPikAhHkiCnw5Z9AR]0'g8KHBp*,8FAI2L]3a8$8 $ T{ ,&̍Ѧ(<Sf8_FVh0yqo)_Mn`9)YO~/?οȥa7`\iKn8gRdgY,] t~f7 N|-h^u绸TǬ>EeuȵWuxHzᾡM |JbGnkǭMgֈOXx*G~mZkłDkp,S]:'r^A9 ǢKl"t=iq#kfmIgwewgA?osھG/^+,+/zO_5οڳoeWt>kUrA= PKRPYhS*-setuptools/_vendor/importlib_resources/abc.pyXo6~_AxW{CӡCPؔtRFRi(J46i}Hiwcy1SaL`1ޚJc;ѽkJ߭5n]kq~-5^Z)q`[ƛY؟BU]#l`= [G=4?^~(ޗgvr,# l_ձ)UXy"w }^w_+ag> .s- 3Å6EZ5%58Fّh*y$k֘h_?(D$v?2um@3J:,COsZ }R4萐.<m9~bE'ՠ.d+ruc wE ua/6$96D囸N_$8kWFp <$j0h(PCpX:J'Ni~(ibE!"X?808cjW@>*#j%@R)$Zj+{ИH"] +)WN(UDLT~2sEKBS4XН~wk$x×?[4J8^!$BZGy~ %E.VhY?}~+FZW-k>'l)vw,IC t;5{lj^q,jEa95TRHejg lU:(ĔbRlQȦsר'~h @XtD%V 7(9LmS&ToY/kP%CW7ơ1Z0UG&s<5-(*,۹ߧ]9SqLTaheM#|kZq/wdw4`C0DmHFKW=DlE.`@N#!8CĐz9Lx6`G#6bf w[YoId-HvlU'Q"eɌS{9QO;>JfEeG×G:VAHsf=g,Ub)ѺVpK ,>x}NWLFB 4w.\X/J SW4=;,6TC@ SU g 6Х+=έ{ Y *o" v{^P 440SFks+!A- tu+X dSH)Lp;(9`UPG$#eq ݜ<'T9 eZ]06 1cz/zېpMލ4w%xDdkvX>?~S7\:v-n|ڑҦ#̢ht#©a"9utļ:9-(#͏ Jvnư[Yvla=uy4^DV?øoPKRPY9setuptools/_vendor/importlib_resources/compat/__init__.pyPKRPYOL,5setuptools/_vendor/importlib_resources/compat/py38.pyu PEW-hdf XY ~bJ|:)Q+M;>9x"vd/'}/S!X2I t3*re7+&Mxj޸<+Eɯ) PKRPY17v5setuptools/_vendor/importlib_resources/compat/py39.py1 1E9UQ3X+2@62AXO.Ob''"3\sh6saj5Gia b/-Q@?%T޳U!I.vW}PKRPY9setuptools/_vendor/importlib_resources/future/__init__.pyPKRPYn+| 9setuptools/_vendor/importlib_resources/future/adapters.pyVM8WXáӳ- Ĉe%e@i/;t[#ۙ)IIWWZGFNki3jR3)r?mSS_-ᖟּ,P%#veY a{2enxW`~9tc,BtBõ-pL9|rE/x0uχ#t.$&vhȭV@&\J}?=lGrZF)F} h%*GgD?7dExɾoΜ6{c>#~3"9T\H!j,}d s뎸%YLa)c2_8H`l0հng/M,h"lC= VΦvxoaEP@WjC3UR!F*FQ[CA~4Itf;w&0ؐEFq'O;FCIeƞDJ8]ԙ|T!a;Dy+:Y!++[s$[lo=%B ;l y\$_QYn wz % iTD1ƽzl:=RNS}gZU` aF(Q~d#؎Kl3Xpsy8J;zNKǑ#p:$)w 2R>xOTW*,D8y!z%sFa+]+ώdّo\6m,b7őaʮaY\q'M Yi5R) v:JюO)//;ib5AsJW]&)vʺU\GM.j@Uĉ+yUPwĄ)˟EMJ.Ql7]rɛU"=U[z PKRPYt-W Gsetuptools/_vendor/importlib_resources/tests/test_compatibilty_files.pyV]o }`O4)ԪNUBؐx].ĉqvm s?0k-*ᛷFrk!x533$RulY %eڴ(K\j]K.}悙IMͪYֲ\$IR bLlpKbX/~DդIXfXU94n+Bг҂Kf+*͈ex[%w$8F]JIˤ5,% UiޭhtfVrnUjoO9s[B^WCDsc4sօ$kJ{S_8du}z^?މV\T nlu Ty(=<(]|5Y0)8ò01@=vFDzuâi9BF,*O9N}Cmۃu[աpS҉8 ܖ eGQ{sݫ" myJᤡ' eld(dj6v-h8Grw a HFb>s8iw5#7^F+LreFl˱G5xMx`ߌ(NDbRrQL?NnՖ,߀dT1|>?ߵH]4 P2]<1늱 ? 7J2ǡ|ͽQwooҽLT8z,A/PKRPYvn'G=setuptools/_vendor/importlib_resources/tests/test_contents.pySN0'1E*,,"-EBw4q4 ,xݻzZkXC|SɵBE!tp[}"Ԋjl!D("8h^bZ eX̨M6);PY|zx70J={!o6P*Fp棏dxD0wHI a|ማz& Q{01ǝv2<|!( T$g&zW09ٍ[Ej4c?"Bҟh=uz!T&u/>HzXV^*40g}٣>J2<җLǴSNHly] R1\vـĶ22B%BŒE}zav-s;^Ip"V/ n<wQv%Pxh\T!* q2(ny!fJ'A!op CIz pqR'Mmty[Wtw{Un[wp<44Ϲdhp׎ص3vl,O)RW6C&9 S_wNwtʵvyuq[EkB&{pX񼃄8Wuhi z9evDSf@C~cREB7r&9٣#vW>0I3 `Udj0nspՓQ7%78g<p ,  aT؅Q8,>)c!EB}.Âq0 r5Chc4S $b#$^C9sL$N\hE@uKS\>ca|dpOpIqW)ɒe ?BBtYB̍1LahAB .Ia. yR1L&Ih ʝ| 8̖JʵHK-F)'''8aHE廀; @ii2'Eؗo.ȔÑ۲eeisU>z<,~VV1Ht(`QzSNƪ". ,i\0Q\:G_`Ԩ!Pk֦+`U,;6U)*,(7ȊE=imV v4{#cՈg;EXjF) ̉ܘ0{KjX*ẅh[U1|D Di ^c"BwAP5H" ی97" gWG5z&*e);I%?CEjϏ_{GN%"I%nT;2B}3QWߣٌ*i1JHLsQsޕk` L$Ե_֦R=QXkU=zP-QZ 輭agRݶ;0aK Y\t0v9#ipLw:T)"=9Bz^ř6O=2wke*khi{--oԭcZz^4q{*Уb p?7.[CV(r].EpHN MdACckKe٩~,]}eͫ[g "0ӂŅ-OSe[SD; fygr[3m[!lt5iu ;i92zą8V!rsJ4hB$̲k) L,R)FIeVy)l(inMTm1*VT#SζKר}!o]ta^˫c7= q UO#)񕣌K%|j1ZpV+Fg^Zut3q彏FD[ yN0W(M$/8L>*cGFFuRͷ~EɄ>[ ׾TpRJNܪԦxGNwG +sW<#W,A' _yQ/{XCIG4@|t8#8s﨑fѣy]UESJW=+qe_AqzvFJ`!kePKRPY[ 9setuptools/_vendor/importlib_resources/tests/test_open.pyVo0~_ʼn"MMemQ'mKU2^;% y8}ggJ[RHa-yRTTL =C!hhiGbnY,H=ϛrLɯBr4rQ.a"sn ĐXH|g;_Zc%5()D䗞㣰wr>h~6 *r6M:g8.`M,q"Dh\N*-ɷQEYxw{hH@k̀]RD*8"_\w p\K΁*%w0˺QI*\UeW̤n PP(Bn[nbb1%]ڹǪ J^+;T:T alcoWZh[Bom&˚#5\ klۗ+ J Thݝۘ&n~B Ad?n./p@N]:P82.$c'PKRPY4<9setuptools/_vendor/importlib_resources/tests/test_path.pyUr0+\$nf|4ʅaFUM"*KFZӆgv㸴c}h-ywjִf}l!HG7:a1_AAIz`!c'Iaupʻ+>#!;ژd}#L7wX4iD3FoqvGskh7tTc1vd>}IsTHI214n:ʟNwI-a zm+AkQEҮB rx؏ 3x ICY%1]ř*8Uw Y|zTUh 3tet@8Vzt6M>~_3/C RtQ򎊄ě΂QOxYe{kwjt#DƄi+bBGw\)->V5AD(=8O S& naBH? 3u:B""WH_ W<,-jԩ qL+eTz/7tfQa:LXcTrRKe}-G3K RS+ qNQUqԈ&vPim*)Cl,1:/^8p,}73RSjnג~g18kM*+%R( UIv@v9PKRPYo}( 9setuptools/_vendor/importlib_resources/tests/test_read.pyVN0}W^J!KW ԗ"Vڛ!Yn3-^k; =$uskU@L3̜JiKr)cQR1c Xh $ xrV˧#,SIBCNU)EH' 1E\ G~ >= ,<<HY_~U>D)b 4|Ф(4B蛢@sffĽO}F5Uؙ0wKmǶur=zkf- 6_^|V_lG8$/%E$B*اɖ5J0ɳ=WRGjbwr}1`6>rxJ>d_ϳsW M /q?Fd8z3y |_  Sc1ZrBPKRPYJC>;setuptools/_vendor/importlib_resources/tests/test_reader.pyX߫6~_!be}h{Q"[n4l˓6}HcɎa4/7Rw~IWTTH66-I_q~fS(Y wߺ?y[@*e2SYΕOnK#yے7ak7MV2Cw$!z4Om|~G*n29/9g$%#mĔ&@!OITrfOwf0HHXY,́^ (2o\`4JI5:8H~{!όTk ZE@^LRMrB$ G&EI!%zfZ/FN>dX%?89e,;@f/Əo --ֆ/iYߒHg7t5ŏw?{_Vi6ȘD%7[%d6B +õЌ6(<\P-)FA\& xr+b_>ݘI0SRc{974) r:-yZ>ca6aVz֌͸bkSݟL|C͍!Cޏm;Bx!A_SɊ JBc32o$KaK0\,}槍\='BHR PeN-kv'0[n7W}NiOP^sQpO ׌+̎'ёN&n?Dy4:%mq8?עDAmŔ߲\$pPKRPY=)Fj=setuptools/_vendor/importlib_resources/tests/test_resource.pyYmo6_A$,d06NaVK%:f#I%ݑWi!sLJLJH3-1k3k.KĂjnT#n3(2fW`5-JIX#1QfnEoUI#MU'|4E 3,`dDsH^ iNM#cb1@Z,rÑ%0t)Nǁr2}N7ɆhBt=!32^=Wc y}E`2@ cB(R ,1{AB&_`׷°p 81"hdZ193fx & yS2, ޶Y,`t_qgá3>d)jvŵa4AKIXhDJ"B}g\{滜P)i쮃ECU\rZ *3lM]K(.BMrnx<%'l˅rhmH&)y`}|v=ݕPG%$ '[~4/kHmk[kLi5.={RAW%KÔt7_tDFĿߺ/R, yBP `#l>Bx, n- i<5( = Ё88ģ0_~`)Hy Q؉w㷿yvU=P4Td:¡? ^Æ,ڿ V-uvXS^SXm\iX[(MC".jED#~E ;[㊯')Q'=6nG>ΊH幍ZUH-/N|u8dX*A [622HL CvMNi踣/e_:n\j^.mWxMV˫CBF6dkRrѣǗ38T&x9(7I5qCɑ9O8m]`"@h`6ofʓQ0ITeq\r p} ڛ_4V%荢6[fx!;Q%I*6i74Ksnc}1yˋdID՘ivp&oѼUI1l(Y<,`= >șKL2Pd>i7!jHL+\5B&5uR![^H!VhoO;ڄ5dl1> ˠZ\]˭>hV*{pks:=[@KBwM$P2!C'MxvPKRPYT4setuptools/_vendor/importlib_resources/tests/util.pyX[8~MQ1}E0 ZFB6f839&RYۗ8|Tխ6u>SaZ ݯKk!ҕ\7(G&G[39YQ2owFD U fɴˉeC"de^̮~r$+i- 81œ_&j"Pm+i6R4֟.xעݐEY'LԀ 1ke~)0guat[hmrAl҉0eUcl"3ߨ :) xRY`p%H8PCHB82u$/VAn#nJlpM͓.1Vd$.j#A>Ҏm L5gYF})7(! oϏNAU0_c8X"PTQx,)xuaYs:l#ܟվoq<4 \gaW žq%jY AVGp@/ i1> aXT]Q]^B9Ux:E+L*t*>nRjO#-R>u jpppN^Fy=̖@;F&aP!Wj< ?I\[gdPep y`ܤo NdU1WvcUnecO^MT,塝"b %%im/1=Ĩ-ug<(A~_Oh%v!l޹̓D/P?AQ9+0q?L{i6\9<$ԛc#? ;0]F"5!wr梤:K?Bmwl - ˃baBʇ!{-9FvEMJ/׺ 0]RN0!BۡL{ܚizRT{oRlWSzӀieI"PKRPYH>o3setuptools/_vendor/importlib_resources/tests/zip.pymQ;o0+NYR:frPl/!ɯ@Q`uW2E`L e Zerm PL7!Mhyw#k;GT v&D峂Nߒe:ȸ:'},dw@gɨ u 6j6@ŭ~/'+ζ/Bi]oېi/m2Q.\\ݓaxR~ m(ibť@0fx"9FjG#Ha+ӆ޺]C)_(cG&l1\jƬESp T^[R8MH)4$ yׂ^^PKRPY?setuptools/_vendor/importlib_resources/tests/compat/__init__.pyPKRPY9햼l<setuptools/_vendor/importlib_resources/tests/compat/py312.pymPA M/Bbx?f-[%ڴ&Zu/  >fh4f7!;a:.q(z=v^@C-3gJRjWV r9N@ÄhތT^y^DR䢸jf!_icqT%1 WbWbY#?PKRPYj6K~I;setuptools/_vendor/importlib_resources/tests/compat/py39.pyuN@ {?f#  {ocxe;Byď7#7(7Ij#s.1WC5QLx!M2iɬ=tksetuptools/_vendor/importlib_resources/tests/data01/utf-8.fileHQ qӵP(/IQPKRPYLsetuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.pyPKRPY`Lsetuptools/_vendor/importlib_resources/tests/data01/subdirectory/binary.filecaecPKRPY?setuptools/_vendor/importlib_resources/tests/data02/__init__.pyPKRPYCsetuptools/_vendor/importlib_resources/tests/data02/one/__init__.pyPKRPY Esetuptools/_vendor/importlib_resources/tests/data02/one/resource1.txtKU(J-/-JNPKRPY Wsetuptools/_vendor/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txtKT(J-/-JNPKRPYCsetuptools/_vendor/importlib_resources/tests/data02/two/__init__.pyPKRPY]o, Esetuptools/_vendor/importlib_resources/tests/data02/two/resource2.txt+)W(J-/-JNPKRPYHsetuptools/_vendor/importlib_resources/tests/namespacedata01/binary.filec`dbPKRPY"<),Hsetuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.fileσ!!tBBt ̀rhP.APKRPYšGsetuptools/_vendor/importlib_resources/tests/namespacedata01/utf-8.fileHQ qӵP(/IQPKRPYvmUsetuptools/_vendor/importlib_resources/tests/namespacedata01/subdirectory/binary.filePKRPY49vbt&setuptools/_vendor/inflect/__init__.py}6(?W'Ӟ{Ϧ$nmGU\J$ŶߙH HPvwyֻ`0 Vy>:]$*>_"q'+78_V/`or.i|w؛~z U? LZ5ξNn$3!q7ʍDK?_~7:>vNwDpn>8ɐEart,d@K!e\z GXXD(M:7y,b$Y.h&)PpxU 0q ,.NI+  YL0, "#XϤRP&%!Ki?_uF'o;'?uߴ(lj2tMuus/N/LeM& ))%o& ]e%?'.l*.C g {὘e}dh4ad!&b'jN<{|ٱ)9x9bEܚŸ˔ywk|yx fƢ;q5Wf5U8$MV @SC8/-9YMt@58!`N Ĝ  X,չxKwt"H Y2 K dj2S`+@-Bcx;QH$᝜$CF t?j9ÚX-RD^\k95O|%uӤRuɋ>abn4Ax-yvB1A'O,۸g伡.Me`~d7-'ɍ JfT% '(C؉Ap@?ײ}PN#3ARo9u^sYyIP.(!| $!IleBuƆ oe!@EfpNӀdYE Hոo)nTՋKVV(F8)tiK[0`TQ'X!3LÌ)1L-ЪAl4yb3`LildȶS .V+-*YY퓅sUMh,TEX+#k͙ܹ_JjؓHu44EX+Ye3<\( >r0O{Mcl7;:LA 0%FT)N0%e$oƈC9P01t+أE!4}ʂ5D@Q7ofB儤FFξ2? :yu*zߨE 534UOL,饞86-'䀂54b-M3IA8KMDdn F߀eX J{,55wSj-~D"``< *QB3b@\֘I}Oy 9'caL}JY!J4`i d"}ğ%/aByb@K޹?#=KB sA뼌'~#f ZHFA]% JWߐr.US嗦LI/%Y`>`}ypdD>!%yE> g0, *Xf;3O /AfL˾xJCyrAVc"}1.UD%WF/M\?L%˨O^E?g7R$/I=HWS%VkiB]T u&k4Q.B+&{9az> E#{=riYAAŵU-a JH1 AQ8 ؑjF5q+6ù|l4 (S!r,Lz=l9GPAW.zZ+]=`·%pʪ[_:a`*nt! ̒ҍfX(#\5 H|Kc܂0 Lk~K(z.@&A0A~ɫiW 4ΰS;8 WYVȋGoJ~t;9.{)?fR0$H\@dbMzI17e4zʰEr$hR뺔7`*3xXxF7{26TPmo9ز(u:[(XӚKinHqx4!p*ɠQI=La;I}Fko²kzKzz<| B;f0x PtC%|Fx%&0o5S `"Rʹ&KyB4 p;͹V=b- [G_fTokw"uRʷ"e@mSM|14+USTig)a۸Bzǽ^Aq_&S$B5vu &Q#a,4KyмdB=c80RuhV*OM`*P}Rdt[T~K6FtJus|3xvN;> "ϺNoƺ@$l0Pb+P(ὀӒg@xPD5*XϫT*EOaP&ZVY2 pjb1Q苹˂n=RueLq爷Ѷ1a@uUNa` ‡5Lfؚ - [F5h@}~7_`1za 8hC<΋4$07CӜ8t@3DMދ06PCq8}X|c͝8_O=' @lZQW@Vsgm6 XK\.v/tz49Z,kVsS=]8ara0P[Rc6Y 4>:*?py; 0*0odΈ4홅k›0b@pAЬGDڎ p0<&1Ĕ׌dS}%Nׁ8ZNG"&CN5fQjy4ύuAY6|\Y DZ #P /xsoΤEB1,trMzxSFy:sֹxHgSwHtu^0QI"V ۯ_So?X&Ώ^p ܭ-?B?snqBAțPĻgi~u"9;6 |6ʰt' X`Yo&0/_p}w2xUC0 ]u y K:) )6C\xfMH@h1 $ak9CMX2L2SQ b)'+1uYVn BøY߬묘$Y:[ $A1yfMUfVktN#eI$ *j5H) ٷ0}2ه>Ux})ct 3- 2brK2NR^:!3p=-1Y,E.hBjьiP$e 53x%YXmzž5TNQsKYw0}x^s'Xmw <:0Ep浾?&zj,ᾦ䈾a'`Tm]MTYrŎd& X,.` " REYXe[:zkҖE6P3cJ !_Noxa ky8eQR[[vHr^P&򐽩;܇)īlҶīlIaNJF?y?09B#wY&<7zPqfپ⋓ }SڶJjj"c(SSlҶِT7_#v=ֲY%!} -͛mUWX7[ʷQ.Iv^:Ln<\쁥/* DYYFCyf#JUkV9eNnprAGg2c4g7P?"ɲ-R $ dk-lB"rmXW*z߈(-(Q1m8o֣k )H6N_PٽsxN(o-{MD7j=L*i]$oȱ8Zv+Ar;[YE+0@ [U6 Y7Xn;Lo@ #-Uw.{ΛU___tNvg7^n_ $f^+WyFp{+4s{vJp0e%`8/:l:]1.[RU3c_,6ZHsWL\iyb-G \⌝&@7o6WSWxoI-mG-28P%op܈AAGnaV|c:u[鶥r¡Xfm:OefWa4_ A0p`N=y#a^y J9~8Y9KWc(_yb3'"p$Y?ox'~P :<Ǡy_wP&4^=^E>H("=!7Am|iS+UFr(y.`طϾZs\ym}("pRshL $^UK K s;4|čQ+9,$E 'Nھ HUagr̯A,oʐXCv{•XjM㰽r&).BW<g?[u1 ƔT{n> &[&w/?X9Ăv$^~UPo -B;"#waK0Ļ2ja!l~e.O haƒ3/+Ymԍ+zeF;Fvf@l#^AXpAlĨGACrQj%LHV,CKA`̋hǃ Wn464 W"*#h##3NW*4+y}VyQF4q(0vbN0VxgDr#2  -eFx}ĝ).E+Ae7lFO3gNujp9Ii' ?N`ȂbBAٝ,X}1\>H36(DSq^OZ?Fdqk+PxxDɇ\*T†u./޹Z,0]k#fbF 4LyPO <B%F 4rʼn@cAemAWf1QN@jxߩSq[/[oEvȿi.3tI" 8+3syT,ĈA^ff3D\ĺ j7ޝF^)fOͷx 4 _7UC^n_ykrT0?˫^i&M<"f86'sX o{n0u2q15N⇛ކ`s"VqsHHf3·ikd^ kXTk| O0qAiys\rEH`ԕQ}ZR4JXY] )øp7~{V: Hll|[~l֚t-q*(b9G w̲l&CYDKOM8,bdk*~ p"^G6‰,+_L!~kK1Z_8Ë&1񁈅_`4sAhF!g _QhKX'#bP!.޸iL U` 1cec$ &T襉jXdDfx)`j$:D>hDfGK[I|f >)/LY-"^!|bxbD+]'S#8 XxFYU2/:/EM,kXݘA2fkؽc!7h1 I">K#O7_ D ڪ:Lq34sx  p}=1 /PW{7~;/L"_C8Jk*>M"AO2D@ӫF g_ࠣ(h$+Fupa㿡|1ҨUg)YOSUbiLȕbf=Wa4̈́]jP-ِ!LcΠ\kу؍t<(ƵL{vRU*O3+o*xT$ Q.s9ˋ34^y?!PZ^)IbC[)) m2LE yB=#*?^kdٽKsSB~^wuwVK$"A b=K$`]T!/oU3G^+F+hZƞtŵ:Tfjg=od}rrݯ%Q1zr7;qrG+G;M9'4v鞄 &.< B KR-}A`BFie#M D_)dbLʍ|LW*e[yK`.Ø=o҇xcsvh&o.b%.+ P%bB5]eq-'Y |EnZ 禬V2zo$NȕgQ2 U5R Wʌv^Z@d)Ek]5j-yZ2X7bz%i;9;e͐t%'/qcǃz[-sOOnםϩ'msm6Kl&̼zs.Jis1Vr$  p(F l:^:jS"/%>tO[]TR (> ݐ -o"\7axU-GG:Ixl\UE<6D˾_#}>}5|M9i;tKĶ40bB뮛N+|bWStΆwlZ~a4 S?M%5-d)Q8YO{i |ŧI4P]>,CQsp'a6ˠ)GnfaPM$s \d6gV"s+ ڢz7J|NJa+߯@6z%* }TDS  %z)9@/"'$^U6q ẅ)] t1[O ?|3lw.A*zc|H:SiIcHM9vwoZRuWn]rMy_U?>f(gWgC_u~:#zoX8r04½4]|i5|tsE/b'V7[}ߤ_4z8z`W' @O8U֧J˕Q->#R%nOvLst$_t^_tzt1$\='ѣr6 , /-/<JБzzP$ ܹ~*ҽ=E0HdVshЇ/kR}&RY"U*jQYG*F?Y4c K2Ee5YCLQT>V;Uݗ^B>lF(BPxF*wrSXޙZȅ\"n<]4e@msaAa F‰5F~YV ,hYج \&k҈8YΘ]`FN3.5s#ԝ<<6bPZI1BTLynTOgk+1фL'e^}Mw+( i"Β`A gTNR ȇU_41ޚ>qgz~+*1 =e<ZD&jO匿&>⏬*jOoƿI Nޜ _7A*HjP_7_o~e"P#Ni2fE|5@iO4 \)،슸׹^G'W[TEv^iG\JtS| oF|l8H69joU ,7^E;SDӿj®=P:%i^kc.v {DDFj0Ul|v%QB$ M҈lhAT4oCPQ6שt /LזR;ץbP[f_`x?ޥtgpva okRyPW@)h͡E *=͐hA, _ۨEn#`=ZZz =#L$pOQ ]V|̐eztddw_b,R]{}y&7VU||R Ja.ST$N ڷժ4+-3f5Mt 0G;ѓ+<ΡEG e_bH_`gG,cJuZ-)^;^:DK>%Sxprmx{ F*z?w9nFS˞e&dKÍ'<+j|cQsNL 2Wڀ0iնSVˇ^6~Jj|+q ͗x*\KV"gC/H؃40 |uY~RЄ(9XoJE>$>l~'ӋGSf22sFA[#7ǬO YPn-"J֚i8v[j˂BSUG%+]xCȢ`q-9LFS2F1ّF_ql|Ga i1XF3Y%(drMY=]Bjȟ,Crȡf-lgEeM4VTfCèNkaՆhC i *v}l"nLr|4; ~AL ˈ 4:6D*;Tooݺ&L Ȫ;2ʞ^I`d^:B2 NFB*BUsy:IJI,iY#ao)PTd <5E Ct#72P!Oɥ^Gs(@Stp>>F,C |?>f#nK( .Wsxcg@([ɠqvL2޿G7RM++.99r%kJI \oR0ϋ[ x54ոRL<&nːm[[R -v@_NTm}مaTExa'wA)?֟TWj/UgxI,))GKtYUlxA6 .E*4\G|^RDgxB/_Y? З+^Jz Zq~nn^֟8, dkW洜P΂'v#d9ɣM;3I!7MhT;(.- g  lږ `-(O,q`(L-$2R'ʪLjSS ҡ'4;]PrNuj/Lt/v9jb(ckQ42ҙp(@kv[wIIKqcgukΜ|(95_ܳCz-c B*鬆;loXϦ6 Pk!m K@nX 98l9&݄_oj nL`||5}R񐴜و53Ɂ'(Qr@꾢N`mAYRap&*3BUE\L-ϫ34S,;J"¼ l[8rJt-x.ay ԧ?\Zp>j/I!šHgh}4GAiPMXP}48ƒrf*iMn_ Kz }X]y8đ\o*hvnj4Wvxyc!kk$Il7J|Ac_ n"r%( MΧSkϐ*Aw%V2 1IDCXsl$jNQ'5aZϜ3ԕN}OkYH *ǧXyDY@/`^/{Kĉ P𨘕F*= 9aFsFc UA>*VnteQj0iҔCC̶ i#f&m/:N4ӲEa-,#5Z{6-86^=ՖoVm*k;:7yc)g9|H-r-N- 1E-h@]!aw%4ON  Ewlҳ#dsdwҼ<Et\0fsSI*G$q[,F|QSGG:v=neR{\~>R"pVhF+z9kILT|SH4mg@΂r(/Ar!]5*zT#{CuCmqe*`xUްs`t_nw}S k4T-[&sg>٦DZWCzˡ_ƶɁԑ({U½ l0@|~XXXvBq4l]rGU^ INHckqӘd@\J.Z3)]~Q;j*yrȓYyi 3O`E,U&,!'$Xg5 ЅY| war-9$׌&_&F.1NDr1mB+!lѥ2SUsD Iվ`W "Y!i+i F_.BnŔP3Io.ue󼘌bhf".ijR[d{=v@ie7GK1k y^J~5^4xU+{SC:i B.F:2oD1e(P3}|%_=vNs-N[ ìJ|){GTp7sX9ZGesY/:l2V y>5/܇kxuIdt˓v7=flE6 ҈eB~[ ?#7qу^Ao~qӋGn" `Y(*s`X$Ƞt9œR"Z||u«̈oB5[#O^#oB4*yyvoEye)S+k[2z$6tkZõ,ʤ=mtܕ @hѭFs_dB&XIS,-!@#1u&/g7xj]UWWw.9dCJII&J<0J5dIet!XDh٨k͛|?b4~j@Pa,UAR9uݾ$]Jb)4|aRW7T<ߑ`ֹLYy6Y%59hE3䐙ݰ&Gc2xؕ1n|QNrSZ07Q~ֽAx4e !$ 彷rWIVinKFeQ#X3\s\'ϯ)&RY;oe {4Ќ}am6k}6FZU)POi+bĂQ]6)lBʌF >6ȭ wqS䴈'&˳@8dڜLQ*71]=  Rg5Ù{x#f3ޝ 'ތK谄(  7Ϫ%ܽZBuN@wRzq8Vl.",8.WLۑG74oJv;& K$Zk1"~V7>#tk;`웥S4aIkZDn,3ZJ^{&婂B8/7ZσbŖe't G^r@vk .+6EVnGIteKBǝNf |>me?6ǒhd߻wtv DA⢎Q-l"zP6G4@{jlx:x"~Y.;27;=m̜0H&-/.yˢKVt żv1`-ġˊmXlTFSY8p!+rVsq=AY+.o'۸˻vkRLC~fKN{Buѥ1v.{m^шu$%+Z Һ'K/=_s5ȕZo2_TzГ*9T*G/K&,[}؍ Kߡ[ zv_آBЄ8C35|6(I϶e (.wbӂ9ۮVZҷBrt-U}5#f{a[Kh+>Yoѻ5dsêӋ- j$vDo(q4KQyQe7ydNzoHf ^潟 Yp8SJE /q"Fo!ďA+Dn(Z*^RxC{8œ+.̭MgжL̟[Njom^2(7~8ۿwyʡr3Er? r'.UPh*O? 26MsG = ܬ}>[mG#oxch72~;t,8`-5ioF^~gU:vt9ePh*nޓ *dƆstr#> fN'CgOo N˙,JV翨/e X*~@h}&Dg47U]TiFċc4[Ӭ1`T[k3Z|jao֗nV_i,-Ff797\iU",\[A8aMv4&n8# l Fjry?ۓ9j&>Q]D>JT6~+O5r`e#ĉxDo h&aQVMIV⋌(5vgMyU&UٹP%>gSI:q-A7Tњz-|etlP};If/tS4-i!@ i(j|75$TWyΛ| fKxhwZPOIK'QjGDV~S;7)4_uNZzT,-;$-0S}bPhn[}I ?vy#_v+˸&-1U uEO~+F>zXeT6xvY.x/6ri}}O;E8>rQG@)@FuL|˰_~Bܷ0@MTF߲,jpBTNJ $sx-NQ}e8oǬʀ;ɭkֹ;yo"÷PzPo(w+9o'rr;rrZlt OsM"Ն*z+mnxv1i NY#7tB%oBrvVt=%<^".:Iu^!yHKV-kb@q>[$"m2Q vopJ>E%K>sJ7D-(({rɂrA]d,R;g VfaoON;KvH%Op;IYj1\&r;w'Z36-.8ι;6>@imUY&I!_bde[^8ٲVm"d&3z^ٜZO E %Z SE S;`#t%fN٩[̻"e7k׋dnKW^?ځm̖"̋6b%-{BGtWn+mFv,ӹq?`ǭwEi4 DptWjMMWxK$Aޑ} ٶAޕF,L¸)b" Rw%ț= ;7F7m+ߔ/L`d-]dv\<Ά2tŚ>{+'q߫oXhNX=z ;¶;f{ ;e0>?IÒܮ $ۘn]w6kTLD"z˟:K"jx]pyn"AvL|ޚU "|ɩu^nPi-S^ DSRWOqst'i :vopvr :AfqUz,h Ml[`yi4F MiktLύGw#m͗HK UHgO xVo"ҺL/\_NI"]F{yh img @VX<|o%ҍIݐVHzt&Ҭ<':&KAees0eƫ o7huY?JFn=@[uN03Ԝtb]/)trF?g(*#Dёw;YOM /vjeKmMhA*fYs]$Aʧ&Υ-7fʿuGvQ-4`VwK;0TS[yf8^G[wKgϠLsҩRAq)1/VK\gyނZWG K~#P ԖŁ_dCl?9J,;[t2b]`פX՗ݣRN%%crWZy|sSub\'D`ӘiSZ{k.d$fJkk}cd*!*g0ANW5I;VfSsZVSM )!KvdTl]Ղjݦz #ɒЩV>~?~+{,odQY K5'4杂HL36gwX;,RJ)ՔZ4|xXW7N-;ayIg$0b{x8hj-,CWJ{?4c}a`FK7~NuMtҪA<~ݹ ܟRD[/fY kpc`J"l$6f A\Q7Qƿ/Ua 9کyamQĽOeZ-l; E_DLlGۨ¤4 i#0R[Bϔ[qPdm$ɪsV١!<6 !l=VɠA$N3zԊ \*ax-= Bkb+wmOYҊFMӟQRlNv)_yP9Ƅ0c X$$raql>8H!]^_dM?uB0rxG6xw#/;* qVθoNǎˋMloɓHYn߱xnkFY` X;d(dA/qſj4őηO|D 0tݐ{w S8c=gޝƶs/JvPR˟J Iq.BI%Et6gw϶qufq:QO]yw%) X.ƿ'Ei2vYUTCM6oKf}/6?ԂOrxhJcZK٤䅇PjYex'-wۆ,RU;F#Kym%E"BS;yg,b\ͪ0YX.AU[:=",ʒGOug2C`Vu#E%󠰛 }]?v+?,` Gr-ppinW6 Gd۝UVF|nJ!q1 PK7ex!qU9.i$aJ_YF: $`tJ6L_0ˏoċПnarՑ@`]߮z.%L꡽a9-8?l#,f ·P)ZZ^洅 4zQx<#8EN$s W;]u:^>ש 2=KH j%iCI\ R=Xj0-;w5{[wq渁4J9iB1Oi**j\5q#+(- ؒB] .2H MDBvQ>rZ*ESxD֌aV\W?eͲP,S30rJgJ̅<L4 K|IRZ&ɅH9g0ydl%Y~& f˴-D iVXmz@e4_eݩ@bIյl6!r:8bfWX%8B_oc\%-X䉖RչƸC6 fZ4雿{JU1_1~#zrqjhLͅ8Ec'cnDOzL+ ffSb3/{i/8u5%e qR) o1EOqc#_ߧ‡{ic|fƎ-2vKee|wi2#g/;&:^-ԖUK ZvMqk9.>d>PKRPY#setuptools/_vendor/inflect/py.typedPKRPY-setuptools/_vendor/inflect/compat/__init__.pyPKRPYH:t)setuptools/_vendor/inflect/compat/py38.pyeͱ 1~bFACS6Gͱ`vcMөy3劲"a\t +=.;Gh "DgȗTgalwP/]YG[^x>PKRPY_ە P%$setuptools/_vendor/jaraco/context.pyZ[6~_>HjAhEڢ(t \ZmȒJRc;m~7Q=IC$\de׽9]+5MjQnl-~d7nZV06/:ٖB Ŷ[U߽g.ůPڏlf.V>tҿN Ⱦ" ̫fղXqƮn. /i<4FQ+a&/ub)Vf.+yÔwX#ͷսA7GӷvK|9nal-ړ'@@e7NX#fRtqWGs7uv% ^NVSBE9I jA\5J#Y[Bg04 fgv;/F]ۥG4OK꓊)tNy^ۢ-L̓)'HBHIlR"b58?-YO:]| D&ģӧ}I,}u&-ݻdds:b4Fe2WuQ@ -v#"^!tOq%1HQ>ҖMs[i7WnnmiP mP=_s3((nFU+r]nFr##&\OضTuʹ4'!a?J0%eEք-wY-ҘuȦMvlFߕr*eJTK9QΧ}ڪ1-nZPdMB7~H2ǛF ӳ _tRuHNTp!/p!ySn 2k_ ]=ޗ \/ f6<޵Qѳ8aqn ̫C5K QtTxd9S~&R#ŞdOͽ4K lɐH`Q(߀+u5,#z@eXP#;}\]Y{vUk!0Gd%q\zpOKʝ+sl M^E ithp+ 0a<ѵp >PG&ß8ҋA߷&*SrvtMm B?ٶRlXXW+F>05ϒێ?Y,I2a~RH}q5x"q1w׼"MYS:x _S8/."Pc%a8(xZ%Ub-^JCf$K!A(+,C<_TOi !t9_qG RV>*@^^ke/WpnΏ%c~-$6eFw1nYC4f,d|wh7Wj3l+Q 7\V-x.U{GEM$S%UHæ,M.]DkbP;94j_ht84V:Ȳ_X<<iEi xvy Q,|vQ|+F݉;]c{M>mzD0k@bNǔF8MtPWx$^#?`\8uV]!'r $ҥE~,//G̈́~oټW'Eq ^Xj[oI'jA}W| ڢrszxPh_"A׳A%{F[NOG<*w$pbJfisaU ~tZųO>73[{,Q6(ryOA]'Xg2)+ESgiai x\7JD0k*UYD\MG5`Rde% C3Yh-4Yg@t~5f8'0/PKRPY^ǢEh1setuptools/_vendor/jaraco/collections/__init__.py8X/ Vt.9E;Vf?~\%TD6_C9N_X2S VV&MU HV ~CI$b,/eӏӫۨgQf]5uִgORuR(yH,8#%P:QGuV0V۪Z#ݚn$j+!쮶,oϘgԳ/M Tz$OdiR^M+碽<}8Tz]Ə pEHbqJ:V"д'?ͯ,HeZfijm8\//~0enчOӑȋѸO"7`"B?Ez=F~$Ir|t4 )+9p1D5y23+n(R2in I޵Ģ e4f7! *h3<-AtriD,kQ: \7EѴ0w=tx+dWbN>BlQeX I_MI(6`z&DOs^,k -սP] XsxQ.FDD_ GG9fb"nvd1K-,t:f< PשH+5(5%"R//=u\ـ=e`ǩh`ۥ1gE||v}|Ds2gA j!FQ`Bh=&\L|MKm$8g)2>ee  7)Hi#"]r?2#,!nJLKj8dr(\_͗WM41w|[Nƾ7ӓ!oRmI [zCPWx$WǻƘO {$"êh]>"IP(Hy:;a&Z-YbM$9%^!L۫xXE@io[QezzjO@4E-["lU6$FJT͠=j{c*R`clʀ7`y^ҸDK)"ϱmUohj2/r+Iq`A g$]VhSHDsa\ S Y_ʒ4AA^}\dϛZu67?tx2\x&Ç?eFf`MܯfۢWvl`oN}E~gC6LmPmu~\`$eJGr=YlchtݯXCd|M" Ec1\# bԽa!L!1w$U㏩D)al02f;([0MB8,G>9i4׉Bx%}><ӡt>FͿCN;WaM=ONLfea34G.K =^ƽv!S⠖'wpw6P+M'4'}:4hb2z DS6fbsHUBo;319?8[Reػ 2U~evӨeT7qգ P$L' y pktqv9>B+'c6eݍk |m374ޗs5W;WvN'NCYhTA4slTc/"a8*Ck$ɰ7J4𓖢=?#/%`^I.Z:hHT#Lt@?NƾgC[a^_66 hq&nR{: }轱۾ơ4m)E CviJR0Z{1UXi16ld,#zy3?2{q 4zݐMMA.`a1t"7 FKa_r3VL*e#Ġ+w)L FEE0e[5W4. KȴpWkӊ˵`z#r r[V{@ܚlj2 Ap0P saP]iZY3̨֣K!zg^c`Juf63ΕiyX YsH4'k#y%[3Hl͟Hb2*5 dߠD5"DmB:An\&Ȃ?^ (Xq>Yɒ7 (gU2)tƮH1f jWS8J,H ˱ )Dv0ӾM9ؚ ՠh )A8b^Κ&(އ2ѕjFK6mUl Uz28`<(f3܂3pÞ0 DjdW~ Vmth~c?m69~ p7ևy&\zG8It_C$Nj;WH,ilWC| +^Hot 3`^w5'530FC#F~z{w&93W?"ҀVezd:74RIas0Jx}=+Fz[!Y??sh6fQzя>/ bo5zr 5Z7( SBjwH%'uY۞i4rx3.r饁':j3Mk$/ +Dtmd K(Z,Zתhjl[ wʪV0IKx5pRҎJ/m~/審PyY.ñzGX,sX˫j]7އ7๡ŢYgsb-P8QUǐz^5 myֆgɚjmyKjL>T;7u93 qh.b3%4%SvG0e"[ٙ.U cr WcZr4?\۪鹷1Ԑ~vPyS篳c/@~!R) T/Rr feyjo;SRGm|vbLeگ~_ö IbE{ N/i"lU:t{)E+r W!lVۖk%ss-oC8Ѓ觘=s%H0$ϓ{b4x*mE(ޔ%@R{qB_6\sin(ssFæ*o6tTǦ9?@82LEUHF6*%3OŽ>}uụ̈̀ni F>kx{,AtyJ~jCiɧ䍊MEt)jq:[eirY:ҵtrfXmsi9a;o;8%$2H6;c\ɴe4"4W] gKgưb{ sQ`J2Y L@ծٶP\m)v; ^YCPMdgw6۪9>Ou,C/Q˂/.̾k<o|ЗlݬI2Vq#TCrU} V-Y\A1E'``<-mK ~QEuhCX3BVo( 6$J:1ٷG=Ӝ.#sĠaqmVŚ_<RwןS-@m.Ҽ{R!xc<0qgş4c<ړuƮEa0lMO<C_f\}\9K {ߓ}9 ɡhc/XU+>IE^#+\ M#z{'^@}A{ 2C pg9j<{fDGUK ڇj?)жC{ꚶy/k*bc}BWZtx1;'mA!ei/wh{ׅ8m9#op]WHO)R\[9>Aw0~THb_?UEػ2+%Ve^:ٓJմ}b=~ٰ萿򥹬1joX{4hq3 mch FjL~!fV¶j.~ܤ>FB~mP jKM'УrC Y,*4Щ {s! oL6Og8/?n_5%ߜ1ux"1 K{pcLWqٞ|TETT8 \/Mt[ͅ](`B/w|Q3~{yd+O_{_F F P|,BQ$7 4v} sj]ƓX l:eoۊڧ8͎V%=4OgۆF<7%$ۦnRs`w'ږ;ܟTX3]w)`SZa/QPk5щt\T؋1+9 (+q~ժxpB~/=3z/{5^5'<>](T/_VUY]ͧ΢y8mK>r ec$ |1=::H;`2#P\s6@cr!.=/Qf@ RYϒfAMs㯒[޸z`t% r Qօâ[ocr3%{f/āuD$[&qکDcHL7sPKRPY.setuptools/_vendor/jaraco/collections/py.typedPKRPYA/setuptools/_vendor/jaraco/functools/__init__.py;ks6+pfhRKrf5EC$d!H-ARR/ E{|۩ w7ZvVuYuzX~r;[ it[7[v&L|Me;w_ld=¬-t&y *]TmWQZun80nkJ3]Jy;}l.7{<)RYvYjAseEg|LWES?Sˀ"tdHʲ~t Hem@j=LmVmB붰H ncޮ >٧*m?::p>E!Zpf\`s՝I.ҋgzsx9o}{??LJAzK$_YX'kXi}$qz]ELF'ڠ?]nhTP 㛑kTl|DήmXk69 @S+e*5V#NQ0^ՙ- `آz P,aBV&^T)׭{ P "E/@t`!Vu$6a^"/O C˙eJgZbtف$:P} f^A+`eWA S-iO#zq91oa>܀?Ԡ37ϐv 2Lv>1vu*"Dz4UW&h۶IdAf1uf+5 }X1Y۪kxhO"xj֪iĖa3;}Rf㫶 ִvyK5E;Y^[ 2%,~ \Ш\ eCw&m)36,Q> K^~ 4҂vluܡ Q$9L~2Fæmwoua`u qjΛ7>|xLmͶž@6μ!U9 dM@C]_:ڵ5㈋aV!<+}bؕ:7d}K S e& .~O=D U0~@f|"YVeY:y6 F&Opp F|Z1h+R(]I`eXR̾[1Md?M;Hr^28*Ov6 )_"J!svU1F8!okQ^#MeѱaE`Uc 0ऐ! bLIbj [b^"7ֹuz@<8 { CYݱf,Gg x|9Q&`Lf@uyE!Tavź}ZχJc%bO73ד= d.U}IlhX՟(fr`bK(gcNvw]^D)#`y*6$b!0M; O:'OM<D 1 ?Fi]{TKaj4˗hl6luɌޗzq!jT"(sِ1cM͚/?~pC+AY4۶4bS\QP; 7fxPjxX'\QN!FZ{deD0b=TfeWgg Gܐs%!sf8гzJ[ + uiՑ%2kKp|QZv8,E@B'aX40qf9n!?k*w`>P)RY3]p+v5/ 3l X6BIh(qɯl vc1t݈otP߷rYPp'3 R-D!hq@! )I @~ U>M`:{QsIZ 6l6]N3YHh;4{׮*UlH91H|XFa@9TKˢ:;0@E&..W@{ lv:\LcX $p% acLր4)G2s VYY!PI 9wm7BmB }0m΅4W1n~R 5"UXqD5#__rnsblXS|Ϯ|bӜh-oH $)br -M ie&^))كĈ <A*C{J{NURkAx)=h$,+#:C Q 3^z۹HWSW`,ڏl~ZLNvGS7g +(\:C+\b FMIF͏`&pKcY; 3}qmKW Yi(;Q㕀E0_ ,C2d~Ppl>Le9ikFȀ9./4E4:(`"(_U8 eR4(fBwoqLDCn|h NUo¹bUHO@\xAD'#:,؂*BQ +c39O{s4'vNG| d7f,pc{Y?Dp)Ș'om~6VW#7o?-T7ͧ_yҍIRxOʅjm+M2&Z!'|x`svnз~ ?ф}s l_\@[_XXrV%4N-9F})ﯚʝSJH\veCꯩEIA(騾!V!5DFJdl ~65noy'lbYRO*=j1k&i|Y3RJч' h-6MSwwE*JMSOtsy!M?'}vlI/̥F 1 MPvhxDnm{H6<$kaBQމŀ :PLoL~NUV `1-hJgl~/]7cax(SHEJ<ψ(aw +>=j!F0N@fT UZ]- 3LTX-|xGsM&Ah A n33"26fR A"nXv 9SMqHo*i1wgxG9,O|olXPr/"X-PtꈑNЩa;1حE)mJ^02A: sDž*m ao3e.›yMO⒣2D)0]j `brH}55p}ro4FJEE͋V53 *" "Oi/&m 0N#zQ&l*!}i)8uBer9]V@pԁ\S b2e i5&0.s ;H+uO~d/^X@-^FdEr ,BJb;›߇3z1ǥKlش,PKRPYZL&0setuptools/_vendor/jaraco/functools/__init__.pyiWo6 ~_!`u /[r{*öb-H!0tC7^ɐ&ǏDv\vVEG#RH. r] lrW * !0u_jL ư\ Q֤fRrvVlr 22(ϭj782wZ dJLxY IQ>Fh A?]B&ߎOL̘dE y  G4G#:#u|GgwQ#@܈Ҏ(Z ]҈š\tQp ^,׏0Rsh_YBGBul~zbF`M-ܨм&?ܹZgu96gON 2 |VALJ\vVMQ[V9F(2߂qR7Бo̓6|e编Uo]o 8ֻ{bhY&gpS#ή9ԦL2F{ﵕyXHy^AѦj>-Kbؘ(GeM,"5]+U>sZ+TrM2Kww-L7U|eu.b([=wɑ ax"wZ9;Uc\8 RW y{؋>lBK|;m'G̻OZ/L(Pc ꠰ !PKRPY,setuptools/_vendor/jaraco/functools/py.typedPKRPYWœ7.setuptools/_vendor/jaraco/text/Lorem ipsum.txtMTK0 )xw(]hnzFbx$1QYև|?WmInbMQAe,j kQ7Aˍ$)6D\ QF7\4j2%9/aک>EOiA,%ΡvNn8LjK !m$;W-dkr85نv8`JһPДN@j7A Vdb.#4! i7bkUWѕB`icMzՠLQ459 vrCWۻ5CpL^`}?BJ#j=:[_e`ue/hF{ J+;u ,[fU+,Cn2Eߗ\Ǣ;:Ct< Hdp/d7wh~N ?usPۤ-/s3Yvlfq^ wTʳ#W åp-cH!b~}$*|BtcXG;Ѯ &d S;E8ҷ9tlA/L7f'jpGN}Τ·-PIIX q eT_f#`3J.G$roOgYÓJw0KJPKRPYqz?*setuptools/_vendor/jaraco/text/__init__.py[r6_O䪲:ˉbg7ڳ9ם1$f1dHPg_7rsF3@w/`#u'mTchQ檑@߲6z4&S8q_Z *+3Uq05MLFʪKX ldV%='UsQf]i&dUI{_]oIZ[FTW3{RH: F\jUdHITޚFƒ*fHPv]L ;6]at:ApV~PSeDM+ZezyVFN6ϠsvPU%Eeְ,R>{1#k؋ oq}h0.[݁?2.4\YnHˡzvY{90-TVrjZ:g&bjا%glVy^QH~oGwcжuriZ4[U,V $M&$9[<O-`0[}2gS|*=h6TNp-۵#M& 6%ILuY@&!O9 !+Mދ (@+I`Zr>S(<aZ{f ( eN763J#=65R GOgSzס U/laBc JUJj?ʻ E媁}3BJj.BV.{fZgؖ9RhlR,n\2C-#3(e"cf$(j02w44 8gQt{j&nyQdgtdI"kȫ̉h(ߠde]QC5,>n`9 x:}pfX[T Zyyi/KD?ҏaMH7;:^.AQ :IZ56C/W@]<7}Оy&um\VF@MC@PA!s]6c&pʞ2ݵ*TSivȧ (Gz,W(M!žf\bHn;ZVP[Z5v(R' X#V%/F򭮅 %M"^Y!MܺtW7 @M967_BLP}PT;IT:L򾮦| QTJi<7YWԒkXL\BõR bf*hˎ+Q:kqFW C8 YK9mԠV_ƹI+*ݱ^47_{?A`|T-hPm'9JGq˶ ' r~qyE:Vҫ'ލ@lON{3֑,bsapN*gkd.H:Ԁl>C "Wٕ7O! `. vsEkcH (Rҙ-I5l :H~4$D=%D.`i5(~3?z  2J~t}>͸+@( TGM+Pi8>Vu(Z1/ęKH(eMj}i`+@Ma԰vɣdXKE$V9F&I;.a76ox>G1+`oCj=2`chi 뢨>tƈq-1&dȌ,> 7#|,~ߌǘYsNج:m &_$`"km1nT]CR uGCBD^j  G~\Y?zT{vGU,AORJC +]k@$7"‡~|ݕ[zso]o2Χ RSI5em5 6okiۭZ+j$g0·(kamV& |ckCCFք+GhWi4O0yќ!dJE G'@*{dM 9s2 a򼼥1"x2T6n'YY R@}"yHmu`_)qMŧ? RTW0J0HAAenn9˓TyXuZhvV!G&O);;&;HM6E#Yu-ٮ/ヘ@OAp MwរS{w7s )-rE_|}&|Oxd6v#B5?* Xyv9^w ɠS t`kD ;fB{m)뎎Q\[ۙg)U;%l>ȳO(( 11=ȇi؍M=o\m;{C;/sq=Ԩ ItпO6Fsns;Nu gG/[l/W܎U*UF'ߡZ[qx- OѼ%Sw[|\[Q\r ./Z.YQb#& T฿ 1,1͡*" 7"靤v }{3oa MFlQ&4Ya ^L"Y5UWǏl!ۚd[8,kqeFK+kYFN ;c!drecȲ9Nӵj8_W/?*ѐA"Қ ղ'*gA}!Aĺ\Se)aywQ7g"9<|-c4Y'~~ pQ*H.ˍ/_cQm<&$RkH4ߟ]?[_} )wP &?&e@]tOI.ǐA"l9+~g8#&B-Wh0)ke#0{ɸ КmTuT慛\Їc}KQ~Ξ u1$b iF~^kc꣇u `[ vm$#}.;~yd 0wtGB.{9-2m/%'6p^i%Cѣ̫ nɿ \FfCrWmEvx\(3cyq07FCzhrė--~}xO\^+I}Nwa]~$O²diFx .8D .XfҪVc}vto|n/&U s?P|cM~]/2zDiUAm?zCMM5X^) -w=EJ'bCJ跒ժFI7lRe=Xֲg1[(CÌPKRPYFT)setuptools/_vendor/jaraco/text/layouts.pyOɮ0M!qqy AAR?_h{{s1iAdϗmqHy}\Y(ŕLvv rVo$lZ͔툰j<,K Je]C<"݃ڎXn,<Kɝi52?vqX-T\s3"E!-ؕklMl]8bmS䙸܍\:ryEο7\z{R7q Id TjpV;Ջ .փzR1YV=r/`Z~7-'6FɇE+PKRPY~J.setuptools/_vendor/jaraco/text/strip-prefix.pyU=o @w~H'[:Z ĹҖG:%ʱa;Ēd]cibG?dKp%y΄@!)\yv]גJjs7N6w1$+$BPi+b,𥌭@6lqk?.#q|z~Q1-2ݞg~CI^ 3<`!%9 #PKRPY-{:]w+setuptools/_vendor/jaraco/text/to-dvorak.py=A @ F";+f&)I,x b7cg Uw#\e+MP`"t9;"clC?JC{.?PKRPYq]w+setuptools/_vendor/jaraco/text/to-qwerty.py=A 0 F}O ,?;P0&G59>օ27<ONTJ n LĺPFVY=EyW/PKRPYbp-setuptools/_vendor/more_itertools/__init__.pyeA 09(kBhO*x{s930"r)[Y+XԦw0#Y_̷iZEĹŘgS52ӯ^cBx?qpoPKRPYI!+.setuptools/_vendor/more_itertools/__init__.pyiK+U/JU-/*QJ&g#PKRPYC)setuptools/_vendor/more_itertools/more.pyksG(]G 4䱹Cd͌slz7 46nI;o> %ۻp t3++++j]7lo6ojOxeDpҋnrgwL(`l5!W>cgKwwWdZ C4ɖpYӳ U?J0;f'0{1>/0p_gzܛ}Y,POm\fpd+UV,Vfr$ٶ-<{yXV' kS4SN.i<g!;Bt)!Nv:eH_yƔĭ 5@+= x6r%9}9Ĭ#"S`POpQ]} ?4߫C8F HZk̼~q4Ŧ?Jxz0 ?eULz U8ĸ 7mx}+` 4Jhhl3y-WG:t pK<&c8?fR%/"+G0 nϘQ1"O?́+lL_4/`Wd.iiSbd仯Lr ]q.*<7!OSLihipy0>e_enkd,a[-]7-;b;OJ7|1cdP*̮J + sBwJ/=3 FtAG$c[j#{OCzAOX(ofh9\ UXK½}_770Dϳfݞ~kenO_p%:oCMDޤ7 ( ѧGG?J6bN/uP}03q6)12 ŲB>~$p ]pN$ "{f|Zb+ &%4ܐg}欐jSw&ݮOxxwa(xj@tQ}r ,. 2׈cU+^}-&&#|,k(v|:槈8h=AF>'dxޖS̩)`=>eouՃw1" {9z=Cҩz_`y0FwQp]vd}dOh]D;>=zץXmh=im [IO3Z]]gOaEi2RC9/L"E2j?ƍ ǃ2>ڿp{]T?><3-qB́ucaˉlT'5C,ouFJWVҒZý~׼!Ώ.vn픯JI<.t/oFLgESBVyjِhƏ+rQBMr^p{+f76&P{o( \CsSd\G-?шvյ7I'Mج-_}@&`2o&~[,C Ã/FrW$*y& Šse]/uaI3~ 4% ( O%m< eTj1', AQB\cʍ Bce5GP̬fDk?Di~5P H;o"~7zlƌ/Lp@!Pjd6Zm]Kө)1?49dU1pZ7s!Rؕ{ k9XLrg?,QY-2D ?Ei橥޸ z.UPJ'5M>+$ 78EA@'#cIb`7xRـC{JC]9M tN2;s˅%]@By9"!lyN&nQ0Ni{1B{ ۀЖS:] x2/9|W7gP_oux{*GG(S#:$"Mv9CYʫ- Mpr,mzi+w]P5g7U%P?H܎zٟ>Mp`8rD}tf8 {Tˠs# BeU(X@=jdztA`H+u[oaR+z7QS#өtgT mm{|<FӃ[d6(rehdP#gOҝ 4GwH.ϐIQ=BOj펴wXL@?t(dgFY?EB[A68񆸅sd34%iH?i7O&7.jv7x#,o=šo+f 6,,k\r6&+K 'C}ĥf L(\8Q% 2l]I7d^pwhH2q9<Ǹ袧|BtY JN8P0>b"Sx ;o<{<8~O^/O5!j"K;3X X%ϯ+К+*~CF_}jYjT`rN+p̀JS1X]a,Q<5~ѳv5>ip[g>g2{2l~z^a؋UGʁߌ塑P|) u'd|qf! jޚd k=xxsګ%KY o鮁ZB6e5ȸw\96Ǜ Y5c+Ep:fdt- ;H `@-p(.Q;~I0.zu%tjX`PosxGĶ` 蘺(M{W!O5`~7m bi3(+٘[. ["ebt(6 O[x vI -ɻɗE>c[UǏ\XUhY;&O/C>v6Jo~\oaL@"W!a gl\;uz##('zֹ&b;Y hIwYnnS 3kNzKnVe=xjߟNdTUj;>ϲEPσ',OLjH57T;"#B/s/q^M*ս1xp&ZA`5ikx2av3$ǃr4]l$VcY)"d6 r`F+83r\_+EoDn< kln+"l!vO: JR&|;y:MCOLrw.7N\duK߫5Ze|qHXH`xD x!2I$Py~O 罷IϿ o7"ۮ0ֿpE=&^>,b"˙ *-u,5"7.KZd@s7,fp@{Im Za Jdr}6Gm_G6m '-عh'ge k,+gߠX>G$Z GHYhy>+-Fj)rV{_h! "E :7y\tbloOYn2SvMcRi0E"?j7ҷd-_M&F;Vt7z!I1VF&א0l|%!Hsp(N Qtqn7dd#|?ݹBe/Wuly;ݎn˛,D=b\_R\pfmAVYgQ"fyy Y(cEV`ܒ'`ɪ,Г]T1pv8]%&CT?t@`*B)wڸҎpp!j.tE׋ys[ uH=A⣸ nrSÌ`s PEN/OOѥV\j Pm,Q ;;ed/9*7FШɵKzCkNi4Roxeh[8&;P/aoMp =ȆޢKqc[A>tЁrBQ3s)(#S#þ\ML^]34Ll7|9JTH*.j,{bR?49Oa[92[7a}|xڝ"SA m؏d(LOmBVa~>} m;/p)rzr6jdqI7+4PD-sO;E̾qdW۠=y;Db܄x<߆.菉/0C_swҗ`4E8UMZ"%H;(bs[@є0 DxCE}._\<+&Q7r!+mO CsY9}Ohձe/|d>%cbnr4c{l%vfPWjw,d" c#մ4#"p`,YビM HQl*g4{y]7VjR5n0Y6iGdĭApsjr5 ȇp܄i $M!/G$P¹f~o&)|zW=wcz vO/z$ 8X/OjURI@҆Uǵ3x؃Q޺X/ձ1 iPtxNyֳd;UvN?N_s$Ao8c6dYid;ᔅkqAEOÙ}i=BkǸ7%}ƴv/Z} S)ڢy!&&tU-[˧Ìۦ|s_,f?_ZdX\g:ݧۂ 72:oI!Sp%+5o!Q ާp#.0ExԮZ3z|r!QXGgh2QKٵrE䏤G2HL-2(:eIΗIsEll|6 $HIUaQRj6+C鲻#@. ) )EFH ]#3GLi. 5pwU@'854 IQD(0Fkv˔z{ 4َ7SU0nIsEv+)2c_VaRXMrf1V^tֿ>m=s|keP?|xkuEeLoS9m@y:NX>tyχ5E/ci=4IֲOH⛝K#d,Cm@Ŵ1H8іN5I%|i,n((3V))a+-0`^]S4F8'7\GԬ .ǁ& s!0)} {ʔń:_}wԚ9N8BE2_: NYÖ[>Q2=P3 9U0}A#O~ߊAWUWܑ>Xc['ajXԊ VO&ѽ,+ ,)~6q$xmOHȔ.8WO^s!REQ;C[dƚ6Trf-ep >ʪv`Y0q=DF`dRT ?۝J4\9MџBө)~ 3sN%IpJ?\8=sƘtOu%98ӹJʷ\Cx!xrf0'=y 1tbC'C}ڌ=v,gv+Z\ڶcS6qP:'Nl =Dn l^aSF&d(2 vjRlB;gQ]\&pMH}_]G&_Ѧ 1^%t3fƀ@aøbgJl)_ܮ %2qXস?px׮wLh{FczBg${w;? KWT#݌3g"Z9Sw4UVwυc'f^-Xildq"[qX|C;h^z9V7%Rk߈j] :hrxX<!1&wDYhq!SFP%G,rA. 2J"/#+bLn< Z^ Z}#Pl8xh8g=& ppc6hP[==A "M?jHc/(IgPzVM 3)A [{4;c>?Ps-n4xdAXJ~0aF[5ۏOϽki͞S[ 9Jac)!ѝ1%H1]x bHA޲uN~:Ѹ^D'jz?_r:GI0P |1as8ԆmBwhSLĆ bU^fo2|W)G QeXî_jbplP%Q/,yZ  |7[c v$C8:0E;* t(p]:W@GaPa96Ị hK9dƁ5r.=R,H> ~;OC\PȬ`Y]q Lﭨ2 9>仴(X)t/ٌHHlu'4< -#g PI$,bDizX:p- ֗a= 2E4uq̈́ÐJ_w m:j] NpЙIcX}d/pixvח=:1&o $֑u( <5(.D]|4Q> mhVø*Y`lzǔ$' m 4Tj㾄*E^&{KͲx@q4"<Յ7O3"Le"[ ]0eBA6\H6QvӕqdRxe] mX\3J.(n`8^䵜SYvx)OS_Ք!ɤBKJkJb"hRU`8e wA^M,Ukk0PriٕNRh.fpܾ5mǢW}oJȱJxЁz|㹐}P'rDRa3 f,mTۣUe}XAB;D}, za6}etG礀&9SmeM;ojOd^Ť1 D[RРUqH׀T՟~9NcX{얿3 $)a gj䕊_Xu0`zɍʅSK:ٳ.>by=+s)*9PD|\Ɵs}'b\XmWO%3wFl)%>geD Li朗doP kK^r/1?F;ObgX籯A()O2QҔi,>v+!U&*Åp}МX{EeUְ)W+2 pjH+x('=jV#.7Dv>~Lb>fx j| "rʡI luBdm(ڴ:/ah tdUSPy #$@?\'xfn:Ӡ;]02_> Ph1I]n_Lٰ?~I4q_\ )[UP%6"qI@hΈ7]˾O\,>gbvu}1Fr[J hY.Ğ45UNC59 _=\[-a$ /:fF2, BW2 ;=2:oD-b+KN[d$s;#17!i8wȧbzrڶ!fUòޮyn}W,۵0řHv\a&TDh&1! "u,~́)Wte"z!¯U\^콈/Q"\V[$˳,|s㜋5(<s4$i7(Rvqm*;Cνiϕ }B WN/M/JvU26=sxv= OURv*Og7x,M+` RaCqk) jWY75zQ=ԓΤX,FM^utC,"сe)l*X[^Yi52tEvO{ ,o C4 4k9{Ifyrx5!kə/{- Rd#~tR-Cne{!WDxefCbhUxr#B*W<7)<]ob$.oVZ)JVw$!Shaq0 v-fL{Kl~V:69a,~bmU] +钆ah_*Qjb 3u'o hF.JFfSJ-o5zks73"z$R8L!3.ZIp^7̇ z뜪Z0u L® ,K`|zz,)EpH.Ǐ"xLC*K<̬J8,WA<(&:(*/Rc\lຨN*svL>A'(>?&U$קKx(׆jx 0v*,p.@@gu.RNۏ]391O-);QbY͖y'䃊 5i\ D{ñȶ?F^Vcdʔp3%.P#!Vq&z]UhJAd1)꠽(rX8pBS&+~ݕ.ʕ7H퉏=W!.'cS7`:|gr|dބN12"j2,TlEՊ'8vk^HDj$G>,7 qPJⱤVltciFg:|xa5Ý>w};If;%Ms4 d!e=}xMj)vR#n M_Y0S\ĐEVcɔh?3˫e<ϐ<ڑlmġn./:&U m(єmN8,G*Laܟ HDj Ӷm1׫k+8v"F 3kQF/Ǻ Mr޸Y2ٗmɎCYῐwP0@r r@ ߥgxW2͑%Qdg'mrbWc92ML~ޛ@)}s D K138?8 ^R6Jx-/#Se;4l 0aw9E_BpG[Q@0˗ΑMyST!\Np!h8]0glǭ/VuҕG ` e di:+qh/=_Q7E1{H| ]JIav]hY;bQ+p}8;·z0n Ma.5ZX9J~KٽS>p7UشgCQY}ߓ:W!rH41#bipIMp*P0Vlj!w JKx<8Π5 Z &Gy9{,@JHb*QA; %-o &|N)+DY(ψAf0mwɋjT,ӫɟZ!r).)$o EIVtuWHdJxOOs0aWVz-Ke07޽@X)=T5l vS˗`D)x./*pH%UN6ԲjZ{MK* Iw2vģ$=XohK08~zҐ;p7 .>|(ǏC03Mu}?77Ϳ~ד/޼}W `%I3vKtj֐Q\, 6tmIy]i4.Lswr'~@yڌvBgD,/l,]lQ:FM;yig[c*Xsw"u$S/2 ~a߇{|fcη1:;c}v CUH 9$zGaOq{:QǿlpKOXi`QMH^KL{[p__Vq ݣ} iN,dgOR7ȐNiC .)\c uqu"r}*D FsL 0A\X=Vm9^kY? 3{nOH.yTs3T6C'aa! bۍU> b0;d1YX~`S4N`N. uDAd>BU8QhzSOpkq"#IbSrd7@"SKhe񐒿˥ 6j!98WڂFH;%y!%˼tp(6d -8(]q2tw!Z&b%ΰRUhcLj+:.X)EqXEM5Fa"ZPD=٬n\I^q>fa +Pj6۔˦)9w/P4f@[rz; /]{k(Xo 01я$aw( y{iOSmo0A]b8.Y 6ہ ({JzJ_~rUMur{bIEg9" @do&]LT2\ީ=ce`~vȻgruFX'QDqF2;QW`(ܭ{@w5L;=:?;<Ҍ騏)  ӖUmXnM!w8X'2QE|b#ߛ8)lhI;]g^5,;8T-̍SȬDZ.d ٞb}r[% 9p=~Hy +IEB3f>lbه ΅ +b9*`{f8harB\㶲\gG5¢y8R:-p FdA9xݼo)CVƾv]qy;"cMS ᘹ Ͷ'V)̔1'DM)VDbIN=8q1+xMbq[Pa˴5e"-E'Rѓ6.4_ec'Z0ؾ`۶+m귶mٵ>4UB+t\$X0RpD(j3U}88Kފ0JM;?twhS= s%zyIWj&{%a^M$ay<$Gŷ^GgُXlebչS)6p)P|y߷DN~Z:룐)DEf.]284A;%H#K |aqg`ć0s KCR!+=8Oh.?:zE]'RW?eC-`ބk&\G JG[J*.EфF 7l#DYYʜʬ{m7x~`aK[#[V o+\m%$Fc-/9\bP{\c@Vb\]b#Nc Q:f}>%~dXvȖBDyJ64yCV2}t.ѻǚkTMs"̜/MW ګFi7mյ ' q~湂[ѦlH2⡓˜s*seZ s>(~ډF,$g }<¡@׋v;$w p95՝Ȓx2> wB8Hdmn͗O&]3X-[yjgUuUs+-c­-hns,PUI4PWe-*G ͸FMV4w%y5Ԗ9^r$2+|c7FTQr^O6-:ENa ok2 X/ ɮ3׷s覼d$@wɪhq.S`ҽr+‘^JZ^ts݌$0+f˽;ލܖcN^oC ~KzA~2HeɅf'w`59r]J\aܳaA-;K="^m]r$Ƃdd#&/XEJNo2_ 7iDi m` mnP֦)&Ű#B[]1;bMRVcaF_DGϘI҄=N EP?1{e,Z(LZwGcmqa'|?Y 10zle FFLzEיd٦7wcLji4! . {^w$ʠoaKFCؠoV 7d睫g(>Q|Qؚ<{EY4'Q$0-~t$ϞV#;DR@sAؑchFQVLTL.$߅cKf9c0dyT9J~_O(JKp<0W"p䦸߉!cl{6x0Hl,<8YI' %3k٨==0şƥp2JC M领3X!TZQ.r"2Cm?t`lu4졹}S?㠩.w r(1>IaCo&ETc E⍷:qHdp.ďM&Z7$| X pӉ_dO8H0hx"͊|ٿ 8AWsݶ2N?<,] ˙G{zCjU]9,[h"cT4{sQ8$DpB-ٲy%&ۑW[hŌ38< ƆE;'l,d:);WqOC/CaJ|ٺ# G={=1!9wɎᠻ/~p !h9Dx2`<рN}ԅ{kwwkO}׽ I T~Ye턘g0nq d ( F7LV]N y攇OCKk`T< 92gF>v)11 11>)h_GLL~)FQph+ZM0S.&9ɡL6vapZ>(?n@XW!v ʖMkuM5dl , YgKGg0DS2 cb?|^4}/{]C1#zCZ4piv.*!AW_0H 4ԀޔkZkhm,hbAYGMo 1w'GG>ّO%0rdA;6eӯHtI\)?yšle=^xsI٢.3E&KPwRšEEgPL Ie~GF'sk΃!{q35b`\id4RttqUM ::pw&. Ysp@:bSidNP<}1-ТnAd=%a]9ǧ/0'h򬢸;CYEު) 1۶$vC\V 먂mm?FR/>=]eґ؀s= t'GGa33Oc̊D]:Ǖp82GtnͺtBNN/vƥ;Y&p墜e{/Y{5ٸ#໺S@N9]IP TY/;V "q5h31)Nj7ql spfg=%hڱ$~sv~tɽfQ! ]G"yƥ3 5Av%rvCqHe2DYڙTn ,\g/LFI9hK9rS#H:S6][zhĽM^{a70'NTWFDi$zhPB%Ga넣JPy^7wDH.&iIDHŝ^;2Uwđml7?6n}|_GQsutt%#a`rZ$Ytxl 6$ZUBqs@3IF{Ę)hȈ$]$.s} S zIb%oyRwJ[lqatE.B}n,n)d䏟O=# ^voJޑixOdrrM͈]P=nDUz4f"e]@/xLMЎ鳡6& =HMΒNNZ.~2p:Ĉt]t|UbGxnQQ< SA/ȔESxA#Wj&YFF7$9.(Z 55jJO(o_vC&@.6V%g[ѺFfn#Sڑw_w)MMԸ8tDjR&75ݫ~ P %ӆ7‡QL>!;ipVd-`=h,W ErZZ-o$QKGO&Ƹ8ţU^]D9}7%Sx%JL٬EJ'nY6N@pN/I-C auМmNWjQoED+ݺM.p@ER> nC{^$^Kߝb1 b&i(` 똨5ff"{ )Sѫ8Vܻn8]rc<<&I Jluʪ50fF'eFO!qQsXda"wj1XV,SlP:oС'3zSP^;;/t9p'RK  *+T"J?R]>7S#na^0eB:ʉ3*$]q50Ԍ( SPN1h⁦4(PaG`-X"oU*?!f ͋*{n\rLCSÝ`e78f-Q)/~)qYfrBr6_\UUN/F4ZsC9k - U.g㑹mKOkz)WMP1ɇ×IF%qΛp D-,KZmD[tV 01 L-(,;F@hN=)nX!~$-沒^J۰Tem}/IR N1>,D49 ($9v谺D1ŶQ \tkqf-(dcf*Q$vTcd'v]œ7GK?7rSXĥËMғ:Z?](K!.(;<.* Uдgrqf0QWM,sY"b<͒sC/j9^ !D/JPUvvS%%TgG'1Y[=*?8q9gH@6n[s.|7B7hNmr&f#(_A?@5}ݫ㣄v6BPvg%V,nCk  a^Kna+ ]Zf:bq8]GǑbm_tcSC.qUcq8N|)b .cc҆~J\Z(P|Ur7+֪+-٧Yיlj%1^Xq^Q[r8C@9 !yL:܃h ]OIÚ_'=E2-G[&XL njbIU0,E>eBfI[Q6IX8fNQJStc/0C{H/SciKi Xϙ/aCV"ǻgPfN_mgHGz>Qvt*h.2̢(HCvX̕vч}jpZ]\\<]ٵ#|f_?2p QąMyOԪѶ|(jEr0∹6o? 18FTND#wѰ&Mq,YۼF!\Hq0ScV)LfY{_اpApu n]sMuB~Wxika+WJ?Q0" nt8`Q P̺t4>#>bIjBMJHPg}ٶ]I:Q'0:hbk@K47@dֵ}رٷAzR= ]n6*)탑#״#7(oR[Q; :Fp!'ϻ؍'RDFc搇_{PRr:Q-ӱ< ΂'Tsnī˂K * lYf/i",W;$(ԋOi(Uf< 4TM J҉ӣ̈́I ]Q)4yX3(,jo75怠B)aHӅ>NRm;c={9i9vY6i97.иrq SfHόof"p;6L4ީ ZHJ%Igexv95J[uB>j>:ˮL|DF,vQ=Z>at0+tjZVH/Ek)+0=%ѡ'^zoE2'ӡk _1ZFA w(<6n 4c /2\NK Zje#r3]Ͷ`ˉ诚s#m=/h{PPdT'ް"5 K9q9xSd-Df. 4͵#F㛳r6'qy̮oy IL IL IL {G\ta7/v7 =X5 `\/a~Iʴ5/ڣg<~F<{EgU kP`I7q$3CjNH涻#RCIiaqJf*rT6>g|`1mKR\YvSMPSlV7d8"Ba5JۤzQnLh ěݗ玺vՆ.[  #rCcJLsl(V1g KU&:OE#E@v7nh_XP؛I{].6p^N[nMR%*Zď{sGMc ]H3)<-/IYH6Pp`[r`7~>M1=J2E'BM?;JLm?VԤ[eLņƏ0@-&B6\Olʫ*&C+ژ1'^}ѱpkO\zCӬLJHH滽bݶf؄rފ|;Ĕbȡ:V&%=R#|Pv@2(AhdNbL@2 a$ A؁d`29StMj[Jf|*a1=[I\ XJJI?;Ol~{n<|-#t _GdwË7)뻢B=[VD•4\ 6DjIb>h"t!sg>" r?ny5v-gG2'q߱I.gbud<_X/1N1Xvt*N)A=Fg],0@ˆ hǒuߣmd=w\)#LK,ݳxnL1$ғqF3YWv5/Tƙi!zilN%mBh:*4ϼ+hݬN2N?Fm @A~)9ª~o0*[b?$y82 2BgRooj%a.7%,va^vLC.C@ iZ4Lgb6hIfi@cJHTbGw'?y@O1nFo0>&[ JhQ5ޓP5U2k=9ޝ6Y1CΒ"+ pдb;4]PY82|o)_ܻ XN/3auK9hU4;JiobI^CH\HfV J"jfYZ^eۊ,6U;KL:Kyh-6}QHZ r ]1/ l3J;ĬW.1!9V5@Y?* 1a'pg0/q{8v. 8牡!W"hkXud)⦮'1Cu޲hn܉{q6*BA\ʖ\49 =A 윛 t|{uөp\:/tsj EmX-F548~DzG_o}3y_|=ۗ_~%.R_-(*(r?诟i !0 {&W]# wpQgvl_~JiQ a`,l0N0ޖ-[u(=hO'ٙthawsmfbCp0B\Ex½n$bj1mx'J旡-uQL#Miyi,Ex M7]&򦰾nw#>He3/TNxD#Dv]mMI;'+sD‡}hS+d**WgC#g rmn7e+5 g Pu\Y00ʼUvTO4 ]AГ&Yc1wXbڐjhnAagUT^wRb9{,MG%ΐBlL5\zX"[ysZgzZ j&'75P?1&3d5rINP6 o91hE$Ms+F8ˇd%՛=&(-g8gcuWWO‹*4F37vkz _ՖLv,j+Ogk?֒5ja|W[㍓%_# a]ۢאvG47TWo4/. xGvA5zNI:]I9y#I#N1k( %cP 4UϙN[+H)<%B0j|MQq)64y'DuɠO 旳Xv\ZD^Ɠhi>|5g-.ƒ)Ԍ3a;!boX9Pɮ!jCI䕾$ 1#nJX eYI`iV"j~<# n)? t'Cw;k6%̯Dʶt4nme=94SRoطT gBjE9+a\]&9uM1ajRUTZMMR&L5mĐqζ*aN'4&$Aisf22+;XЃ HhwRZX_ sOT%_ѵGx8[3 ?s>QJ-TcEƕڲ:`F.BrD\Q 3ݘ,؟w`M9;ӄ}9G$ɦGۃOv 4IuIS6Z\:Gxr)v9A Rib2áQP 7"j+qV&(Rb)J tIËN]Q;Q8@8N|I ̇*î=hMԸLXҮlgsE*>m7wЃ㣣O<=xeU2G.ugJ#I`G(Z%1 r 6@"gdiI rW!%I{A@kfY]]]]ojXߖ;a&v ;@rRY[.[(d4D#*J0tOrKiȟMQF"PSFt4g ϗj㦰 ɬwSpjG(HqlEl o3z[hT1Yfn]з u&@솣Mׇ={StP؟b?@G>?6oм&|I ~|\[MkVFAXivӮW/ RFD9k=L@Ey6wK<¼fB^kYKKm nPf8gsP_cFpg憘0ӼKl]Gfn=yGTzi)@E Gӵل(= ܓJW~[7&YBnד8UJ*{XZ \6 I;zVz֭+"B/VC* )-YSj wq=|A$GWgew2 W!ep@kWdlG=)TT݊w%ܒY_3N#VFo&E7#/RK4/.+r3>ڱ̈́Қ"J9 !s؇,s'Tawch+6g^t7 =W#4$뚰(G67Fj=S#ӈI=f$qvaLJ߸Mv(, ^y_bII!L *ZL#4dQm^X'q%\M8E"@3#I .؟Ig{ڂ>uxBvxo9OfM3"{;/߼tvfXۇOU.I$ˢhҗUT;6c헙y#ʇX'!8Ht6^TY_]C<\qW jh" |򙲹D.ឨɩXCckSv(_Zrn7;J0: oo`# w*{QPyXn-}VJuijo66?/*h[UP*^~yvjNVDl2#v67O^ TBWo.t_H5zo*&ݍU4K4ʩdF׽TCpw.bzHk˧̝|0V3=CŻaG=\PÚ!^q0)XɤyGi?9?PuTml 鈷]*ˁ97ٯkTU;zq2"mJIHlbU>b X0g1D$~G4D=>"rVor$+m96B99HJjin`I\YYf7>džc!bT"S330L5'%shSk cfǤN7emn0Ǜz#Y(zo=PKcB.ǥDv&=IEiC"sGET$Qt-b):\}71rl '%N"HZx"Ǟz(Y @C ; Õ.dNVHMRiE<-e |ܤkf!3 ˸ pE/#b$MSBu{v?xޣ,{yvj d*Fn7ln{Xmϭt6SS\&'>?{_IW;4;Of|hj+ =[Y8deb~ۭ1_5VڼB!>~)iFɂиl9gmXumLnP+' |v{WQ*t _kH)nɮAX߳VL=NE4}+pu1na&h`޵܃oWAQύǵ>2*Jҝ2T|z*+S᫿=J;Kt?argdnB}jIudLC/ R~ qcͱ הhk7PƱ wre=ZE#V{| (@qJP 2.Cu ^1ɱV~(O*nc:>1i7jjF2 ,TAʆ/LA-uI' WzOxjfO ܑr0(Et^,tjP WI^jcL'l '׺>\8N9sqV@ M7]kVeIW\F'fHNuKFl,"˝w.aXsQ7 <f׼ [n  K.zL,(wTU-7sv(Zo6Olt`ۘFQliY) ݃FUS4^o:Ìnj݄1rݮhho(aE 8GLB7,DE_ Re~U(v&~L>LbL]qDK 䦐$+0(Mld%ڃsvα\b㝜־Ȥb/7&ՇBOm$W$~W;lF\it~zuhUlpU 9We$jWKRbw% -?O8+*YoXU}cڂM\TV2JHSW؋<(w2p2?,PH¶eu'9M ^!bnɹrE?J-0g6{&7%ɭе^o9F/;p5綝An D@Kƪ\Sa"4k sj<&Ar2\EDOZk\>XoHJLC=t2GK-j>CUU  iVIt9 ׼fTŬlu8v [믛wŽuv7 \?˾MZ1Zub—=cGevգx nݗԒX!T@+JbCü1}9Jqt [^ZXHCUjjM0fUn;yĸ߽ [Ŋ3F#Ja,MwcYn]<:7&$.!4)Ρ+n$!9̼:2"< q3F J,g*悮dƳWmX7F8vnzY^-K*m\ 2zt:"|I3Հ56XP@Hj~tLCn]k ΃'yF:w_GmPeWz??L߅48GޚD|d 4)>w:xc258Xȸ vS@b Ҳ灒 ̵M9+E6gb2\sBuXnJJ0VR ߦmkn944d4L')w+ 'Z;E}Y(z>^Y "vMt3k@Q7!L'!N/ͤpvL*-˟}H04 qj3,ʬ5H*'% F節MdE+4~ⶮͽW8hFUb٨OH62yݻHBaԝh9U;eNU'9=,S W@TB1s 1nqLe5WjW$N/f⃪IHwX:viC#&1VI0Clr+*5 |@ǟU:4 i Mqdoc Kkec 9}H v51Gw -D D#[^[0`gяP~sWpDS݉(1XSa5ZXp: W%%n쒺j&Gs(9,>Κxsj\.IK{:uW6q0$(ǁwj;2debiSJmQC'&kǯіdg2cΊL"[+5Cnǁ:ɑ*A֓J#N\ӓP/ƶD$@ u1nLXsd]o2*Cȏ8XT?^$~K첼unD`;;Fn5jO Bp4]yë_ˎtliʫ+p\/sDX^}1h.;Ӧڠ킃D=[nYi{7>C~:AI0ڣ;{oC? Om;;HL".>xS1Bi4 :/8|#5\Pej+KdͰ7h#3ƙ&x}Lκ@>UmECgO8&Ov5T"|41"rҸA.;Wf7~ 5lkWh?z0 &sr-a5ڶN/z 7 ~qq9`W^9*0+:{3Cl9zWxG#oވ6DlWdݘQI9% Y%=r3$PGb4rxal"r3m PKRPYGgS*setuptools/_vendor/more_itertools/more.pyi]o==7p[-ZܵzEыAK͵DR%6EÙp8ŮffQA낿WW;V vhZвXપ#N x{Zm~N+/( 橮a#y m_ ~~/3釿E+$jX?V8O&i7W[K>߉(cZ2eQ]@ !̳Ew 08WPQI"';ZQrt`g\~Mw^6leG飂ڇ ߯Yć;sT-u[Uo߮ecƜFk\]*+0 ʊB{2Ɉis&2 2pHY4) UbqOl%'n-Zf:9 ;ՑzQCK9].h%+ZpLŠ,`wUP.ȍԌ;ʸXƧ2(;l%im8آu 'F5{%f( N;| k9`-+bRtऔ=3:Z JrO;B{[MPןTr#wV] -r43IwhK–ʀl*{҂T=X:SZ?.0\9ҝ`yN.~?uxD|W&5ڣHq~e$A`n?hT'ɮw }U3bt` b"*l>t*OWoDi4CU\-]ʼnWtuC,teX!3QRXahc,RX4X_Wԯj&I, 'Y_ǛK+' H @r/&jY2X>V3 ^MNw;¤q4pT!hPw䑪5mbΏfb6+Y>a!k_sOɣ/g4.ehH3.tQkz Wj}#=%~#fsOOoX >Df7F 43HAfY[!]ud~.8CS <5{`N8䜌AJQթlp{aQz-0C@w"Y΢H$^ѣ~d Rt*c^\L=eCj7/̄d{%Tx-T&R(;܍8[uH@&T%.F -%PT4O,_{90ËEIL苆_(6D VRo'o D1NВ'pq #ܛ `cփJAhrջ/=xCgh&/w}20ndu*s/h!U_YZ6Wuo{B s^]WB|:񢸬\nFyz:Ǧz="'Ngr\697mBGBjd)/TQd}ϑ$3cCm&|&q [x<df/]vSܯ2xv#P@- (YhH(l&O)R`B&K^o-o­cvMNR^@&R?4n>44ǂAoA4^v'h\B3cƂNyX,Я˲/Qc`kѲ\I[C7 q59s+eҰAyqO)/VsSKIb@zW]~jh#blL/9@/ ֔=mT@ |\'ӵ\f.qF.-<(f09fWEwoBuњJɖZy^n9~iohrKN'TN/l"? b~?w\u6hn@slt=|{m?!4x&KZgz^ &!bSYՐ1+QrW1jRt!oVv| םB,`9ɺ9?UnOuQyD4@uy|Q]FZ0nʤF_eoChEv %32-)=HXcWyx ,}`Ԩ\..^ Gxt̫Oq![Yģ;x^(9E7}i~% (ohr%no@Y:ssJ L;$o:S ,a͎"z%7Y;ׇ[)1Vӻq؉t}wbsLt)muDcPKRPY*setuptools/_vendor/more_itertools/py.typedPKRPY+D"o,setuptools/_vendor/more_itertools/recipes.py=ksƑ+v+E qEJs][SY.J!Ab(p*1v_m {FO<ٖUSʍj*Zzde5=]5e*-W._^Z j]&W@˳eT>\GˍVdusTlaeծNY5*lV#Nna7IX$u4x\eu܌0n6Sѓ'O2 lr)#ݪsm&mZ'˕m9E܂HF$0IdI2#VIV,vOݷ]ј\ǫm%le^]atӡ[uTd_mmyY\ *)RDoUl`_fvڵU 9:ϓB,F[ R널nJu2VTKHACYf`#WIg˶^Fjrf3VǧʟŮXbuFkҿ`e%[ì_,?oz1@nx;LL*;'bk]? )h@[iug$@c6qpE\5 2W7}bh1_h^/KD A$Ƙ,pSynQb[X ܷ0` FJޯ 2NPL5fKi읗ǁru%70Le:xb, gXS5>Y `DQAlV{IQ>V; ,=tT)k$ gB@R2 ۓ WO2 `no@sk) :Y /RԑhM@+Dt[p/ik_!'}j~0!`{4-*DvSI¼+cƻ}cdIyjU)n 6ʃbJ Wp[<%ULt!XBlgMZ?5Z^Mh@9mCYf]鸱|.^/>9]4F?;996N=!,ns}>蔙j¹T(tM\Ɓ |ӢQ/iV(.{E1lk FuE` Zx[.ibC̒3ޛ#zoQ {|?20t?MHi=_ E h^ ῑ4x1Ƥ`4Yna6$ V bD*ln[$wqf9awF/kezwX%n+E7h-!56UXU{s`흎"Iߐ*:]hǵS5체4|Л3(N0iP: ujj5CO`620 XܐFG} "*LuvS_j4<5 x?PU gu:G 9we#HܴF^k2Ml &[wXFq[Ab.bXl)E#EABaIgrUQVzZK fK_?WN0FP,KV v$}2L=>3H+y"P٧~, yX+![rʥ-&l:"'Plur{`d t_}XɎaК_h\?mQDc3X])KWe*eR7wX\Bϱ!w!G3oHw7.vd#rU0Ѭ)_eWwAi42`ypEPcu!ik겺srsHf;>.i |(0u@t, Bd;lq9RSH֎5=*ae`,8usF-4̬R٘(⁓ qQLxL+@pe .~hYRhgll}uӔ?j'"-&p0'oa0 /1+L`&Vˡ F6ͅ>T ډ

  • k-{4VݖuMeXNAZ,w]&I2` LLƆj k,X,%P -XR٨I7}4@ ۤZTUChGw*Ov0r܇ⓛ@\G0^5$URIeVdbhͭ%k]RNJ;bI{k͛odv"@[Fs91u՜%7-y\,ZW&ujBljCTc:\AJb],La0G DcP@MKRODž"` NVYmTr[f):;0T4yÂeXO/{4>gɯ[ !dcnCfn6؟BʢzGDh$ M.ɘb;Ģh\~L '`P`hjk'gTpsr՚׆8|ip؂}EŞq-WoZ rB0^t}aZI;B.x t*^PwjiucNrTweuZbk4k1c~+;?fRj⌄f0IP" U0xL]E{ Δey5V:Hwu umʕJsr6 g;x[nc S48<_6EtnJJo|ރ_}p_>0)s5˜'g{}CGh"WBo @ɃXa#r BLT[q]hKܡSe)qDFxĝ iNxƾ0͸y%P)̱IK<>4D2d \C5 UY'< ʢpG#jhWm2$9WvVBLw\$wq>Jӑ ˟'TGfh\zHFʨ<6Iǵ66+18T}GdEo Y\>"c^dS  {Uvꁣ^Dd)+]ֲȡf;2l՜fk*rMglE:7kBU"% [0Kֹ]vH8̊_H ExmrkJ68Lߘ/\m00_v~Xu5=jFqt7ڻ#Q2{Z]FNb CyVUl6chfA򮱹FTIkOcYaT{$C2`f>rJ-6nWP&rS Y.ȑP_)*G?j$$xCF P! 80ͭ]:@ 5 a-۶;358]H<`m?Noa)VyH>OJyrٟs~u5Wj ή ,F " <2PQ!0CDgIJ&=D߇ )a9cӗ<~q.R_Z0 HS~V۴"M14KX;cO(IP=5aE `![tEL jB`.Ç i.Ϗ )(5oXRϰ_?wՅ+mt0GY;'F cVܷ˻MHشپ@-rq .x˜( j lum:[TWAU E<Ubqa~8@`U,κ34@VAq?B ?@iMnDf!ۅ00; X.4Zr<9spļIl/4Lq=ɹ, &=U37|LNl'rn ӧ(Wa9ѳNP;Xke ljZGm@G 6Cyny|ϴhg\.?T.@ 2x˜H&‡u=*}9DoAϢb.Z[&@^_31tN!go]"Kj-S!RW.8hiEWlБ~"Z:{ "1_x@ c^P CD3ژJwqf#%+:+dmL69Rn蓛ۊcFîhJ|j $.`7T`/`dPm|Դm- LS.M}F'U5*i ԍ9pc]:D8W/1"yf9$q."Ē qZȻq'Ptѳ4tv)/ &)NOOޝƌhcWl Pš3ՋEjBTyM둋#|lVrpⲬ|) `wC%E$~_NΌ#aNG L¦5U")j1 Pè*cXUc5_c9sm9J,๿@C4A0.4ačGɚ I|ǸqlCh2&sswHY:PmګpzRӎ>4C ˫}@64? m8E ?}q5MߋćQ0ƙ<+x o},n ?CFU&H6SwwO6`K$Ejkjɭ=`c9g/ l>})dN]U2T<`AZR ;WGL/hsz|5dM(ܵz%8E7&XɚVp`bVE9}4wD?@ !_ +"7@ 3="2ߎ')='uuS8K]4]`mF^N|\_\~t,T^8OJL N6-ÍxX-=wDO{yo T|wC#Qt<j._0Ǡ4 t- }L\V*d{EQ7fr )ؑn.ud(ߟe1%/;/&= h7[/+yZϯ cmoef ׍it:9ŔG+PKRPYd -setuptools/_vendor/more_itertools/recipes.pyiXKo6Wa@ ` tZ@0Z%ܥH!)٢9|f\~ѐBiR* [V)a4d\.BPZԶ3R&r%Msƞ+.dA'yN0!Q@%|Y×:S̚soW2 'C'9\n~åUxqwN,.mJxޞnwDpcdž<<<47`Zfb1)K)1i A[s1 MUf7L?@ƣπc?'S2L9_߁:OZ HwWЬC`1/p!R8XrGdiyqF4=xt"BWT ܺ!zu_fLʕ&'V:Z\VX: DΝ.P.ٮiN%~G@n9l37n/\QZ Jvi8E|gb͗9d-m۴u74DGޓ'H L􋫖 f#)楬mva3稿Y7 <LJdSPMi2iMQ'gJuON&7ījaמ&./#U^{u;&Cs|lGbslsG<GRR챩?0ybUW22i(̛ Z$*|J@,L^ fd g˥r})PRUPF` vPbbЌwpW3_PKRPY'/(setuptools/_vendor/packaging/__init__.pyMQKk0 Wڤ-= e 2v ^$bl?NŸKCG!VC-Z@A7z.='rɴ5|ĶX¾ܮAYh/SBV6aYwĞ:v8(FH 6 <"6z">rs9CB'Y5o(?TUO22V<_@_Y?}]OlPK:I Ji-[q)8S{IW'-2#nt !N[Y<͎AmwX௿PKRPY  (setuptools/_vendor/packaging/_elffile.pyVn8}WꋴuK&M,- m)T7!%R$]>X+>x~M5tGj}r'}zuj0@@#Gdm&F[Iaf>4FC|Xг<"gRTe9Cs}iz'a0(SJ[6~oRpC u6xMEzB\¤qyV^ְ31>"pbWl'Y% o7?q?y+u'=;韘4f6g<''ReX%T,ͪ#ZQD, YfV#[)d]1JefE=%!v,{H'7$ "טdL C[[m&3SQ(o]rې+uH/sz:ʹZxPCaر/w^;j=i/^nE; *<Ux#kww4iR0?a} y2a&+RŶ6 ߣmĻ)>m+K(R=0!a0K[XJa}V2 Km$_ra"7ָ*H;5xNXvJ PMv*|lj2639U7Ump8]X!Qv(@B@jE%dLJaE?09(ޚ?lq& ^K޴.Wvj5+bL%`H7Q^_O.|i]Em!K1|4M^9E~+F+K/lk0OvQ@s`aZ:082KCl/h%-lִb /8O a_vP*(?PKRPY]. r%*setuptools/_vendor/packaging/_manylinux.pyZs6̴RW$_I=׳7fsry>:y|'{>8=c^䃸g*lIɀ,OF҄y/GLLi<(^{{镰`4ck wx*x1 _)`14)kW7gYF} E ;( LC8ebVapP |>miς:*#-Z2 ևU{LD[.waE(Zx" 0?NKuб{9y/Di,qeRʥ<  "wC+C(.l0Q'Xd)Z*{,V:eIWf`VbTǑ`(2.t,"BcT,<#kVricU#”c`$wE@{01lk=v2x t7kC*hҪa(Cx=vr5}qyȀD b}.|瑦32d&xdBzDJmRSd0&D$ m9"$жntL8hx%F >#%$)*`ųeNo-b+t( LOctZ<,02&+72I*EFLi '#dmT7O`b:B%.ɂ"^ko!md 3E-;cNLr)_bZ`fmM_ZѦN,.K!ov{hB$ئl*{ Z!*ֶEYU %nGsJ?;omyP؊Q4ŀc"}g*C`t^,mj蠭Ì*K Aϊ Q֒xZ3 .)?P9Nz9@F"eAaYxѬbaL oMGd?1V,Gu> ԣt h׸L0)ZE\?귐e-j,}$1YRa;LGnܰA-4_p8j-YXPΉ(C5FqSnƃxu!aJq1 nw9ekv0ɤCU3p3r.j݆mU-C|Z#̇G1×FkU+WG^~ w6-kx:wDy)s;+|;SʘAXÚckG9c`nB8nvGg04u ۶Nʦ4Dߠe>=ggNN_\>_x.G-=Y5T`^( ZGM$ $i nɤ䠎U8(ઍbkTtf,4[%BhX%^*Lg4#Gk\ZJS?BvYW8|+|W^G|wnW 6"aorʬ2|7] Ř?f|n n$`YA z P /͖y">V//Xexwh7%(q7 YE&عT1:n~ ~o+,3hp_̋ĸxCT@QnF9rFM&̠qg7wjG[> 9nUm ]3P8hF pTř;:SO߼,v|"A7jכp=%mZnT(K&&vZ8fx'5g5/21JEט7=UR֜,E^}>׃owmc$bp)~wj!n*5I~-n,DVrp wXҫȩ?PKRPY3 *setuptools/_vendor/packaging/_musllinux.pyVmo6_q>Lla `0a.@~q N6H*d;m $)Mӛ \u"InAk^!ȶSآ =Vd~PҺ:z77KX wjBqh wXIIXBY6-%A6^xdkz]yc',ovT5wpѷ?t0֣-ַ=]zuC8Eid߽yC$I*%x(_$@Veq(8L(;a J9w_6/g'?h htX 85d ;eq.:,\6Ys":7: +9 @aaZZ7KH94?$78,>nvW|<2 ^%AΚ.|=`uJl_Vc~y|ªbO}51a>!^84fAgW#نe:d#I=P-Z!+F4 L5Zm HrA 0zWԖA. W5l)PӢiJbL) WWr[AUy*F/r}=\ƚ- Ǐ#G߃4]3H6A8h;Fj"٬ "ڎx5Ov??\[˵Q>/SS3X<ʉJ &eS.Sݱ`DlrB ۛkJ>1?WM>TN Ϭ)عLjS[ ցca 3G2LL쟀@eڎhHY`4鸁 X0ͩ ^*j%NeJ1 i8pAB vS 䣙1]@4EC6pr,a#fIdlcb?3Cr'Wte(!EnO' ?$*$E=1Ѕe(XO6ߎ}>)P<BjDbDfLx)Tu^B0#( K ٤OG;nO|gHzeIwǒ]YyYᒝV,薄P:_эp*Yl"D 1Pb㢖1)u tpklFto 3+[)PuwFW|M6i9?,tN|5~xθqPKRPYVb 5 ''setuptools/_vendor/packaging/_parser.pyZ[o8~h,}5vԙYiD,i()if{xHJ/\V@b9<׏$(4'[!I6$ Q0F^o}O& Fڦޣ ږIXDi4)phr>| 7YDQa((IR^\]4`F>9mi۲() 6(IqyW^b@( >uS oiAv0GMM>"  G tn+Y@VtW,7K euU"I#͟J8ayk $j 0Dy ?$,i=<*cf?Oj;f<-iG26$+2&Ȁ4-6 ZTw@}^Czz9, ~ 6V87x2 `1q+' Q#7Yi!E/ٌ p6-Ay;V?!W *uXf2xV ...' % action) thedir = convert_path(words[1]) patterns = [convert_path(word) for word in words[2:]] elif action in ('graft', 'prune'): if len(words) != 2: raise DistlibException( '%r expects a single ' % action) dir_pattern = convert_path(words[1]) else: raise DistlibException('unknown action %r' % action) return action, patterns, thedir, dir_pattern def _include_pattern(self, pattern, anchor=True, prefix=None, is_regex=False): """Select strings (presumably filenames) from 'self.files' that match 'pattern', a Unix-style wildcard (glob) pattern. Patterns are not quite the same as implemented by the 'fnmatch' module: '*' and '?' match non-special characters, where "special" is platform-dependent: slash on Unix; colon, slash, and backslash on DOS/Windows; and colon on Mac OS. If 'anchor' is true (the default), then the pattern match is more stringent: "*.py" will match "foo.py" but not "foo/bar.py". If 'anchor' is false, both of these will match. If 'prefix' is supplied, then only filenames starting with 'prefix' (itself a pattern) and ending with 'pattern', with anything in between them, will match. 'anchor' is ignored in this case. If 'is_regex' is true, 'anchor' and 'prefix' are ignored, and 'pattern' is assumed to be either a string containing a regex or a regex object -- no translation is done, the regex is just compiled and used as-is. Selected strings will be added to self.files. Return True if files are found. """ # XXX docstring lying about what the special chars are? found = False pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) # delayed loading of allfiles list if self.allfiles is None: self.findall() for name in self.allfiles: if pattern_re.search(name): self.files.add(name) found = True return found def _exclude_pattern(self, pattern, anchor=True, prefix=None, is_regex=False): """Remove strings (presumably filenames) from 'files' that match 'pattern'. Other parameters are the same as for 'include_pattern()', above. The list 'self.files' is modified in place. Return True if files are found. This API is public to allow e.g. exclusion of SCM subdirs, e.g. when packaging source distributions """ found = False pattern_re = self._translate_pattern(pattern, anchor, prefix, is_regex) for f in list(self.files): if pattern_re.search(f): self.files.remove(f) found = True return found def _translate_pattern(self, pattern, anchor=True, prefix=None, is_regex=False): """Translate a shell-like wildcard pattern to a compiled regular expression. Return the compiled regex. If 'is_regex' true, then 'pattern' is directly compiled to a regex (if it's a string) or just returned as-is (assumes it's a regex object). """ if is_regex: if isinstance(pattern, str): return re.compile(pattern) else: return pattern if _PYTHON_VERSION > (3, 2): # ditch start and end characters start, _, end = self._glob_to_re('_').partition('_') if pattern: pattern_re = self._glob_to_re(pattern) if _PYTHON_VERSION > (3, 2): assert pattern_re.startswith(start) and pattern_re.endswith(end) else: pattern_re = '' base = re.escape(os.path.join(self.base, '')) if prefix is not None: # ditch end of pattern character if _PYTHON_VERSION <= (3, 2): empty_pattern = self._glob_to_re('') prefix_re = self._glob_to_re(prefix)[:-len(empty_pattern)] else: prefix_re = self._glob_to_re(prefix) assert prefix_re.startswith(start) and prefix_re.endswith(end) prefix_re = prefix_re[len(start): len(prefix_re) - len(end)] sep = os.sep if os.sep == '\\': sep = r'\\' if _PYTHON_VERSION <= (3, 2): pattern_re = '^' + base + sep.join((prefix_re, '.*' + pattern_re)) else: pattern_re = pattern_re[len(start): len(pattern_re) - len(end)] pattern_re = r'%s%s%s%s.*%s%s' % (start, base, prefix_re, sep, pattern_re, end) else: # no prefix -- respect anchor flag if anchor: if _PYTHON_VERSION <= (3, 2): pattern_re = '^' + base + pattern_re else: pattern_re = r'%s%s%s' % (start, base, pattern_re[len(start):]) return re.compile(pattern_re) def _glob_to_re(self, pattern): """Translate a shell-like glob pattern to a regular expression. Return a string containing the regex. Differs from 'fnmatch.translate()' in that '*' does not match "special characters" (which are platform-specific). """ pattern_re = fnmatch.translate(pattern) # '?' and '*' in the glob pattern become '.' and '.*' in the RE, which # IMHO is wrong -- '?' and '*' aren't supposed to match slash in Unix, # and by extension they shouldn't match such "special characters" under # any OS. So change all non-escaped dots in the RE to match any # character except the special characters (currently: just os.sep). sep = os.sep if os.sep == '\\': # we're using a regex to manipulate a regex, so we need # to escape the backslash twice sep = r'\\\\' escaped = r'\1[^%s]' % sep pattern_re = re.sub(r'((? y, '!=': lambda x, y: x != y, '<': lambda x, y: x < y, '<=': lambda x, y: x == y or x < y, '>': lambda x, y: x > y, '>=': lambda x, y: x == y or x > y, 'and': lambda x, y: x and y, 'or': lambda x, y: x or y, 'in': lambda x, y: x in y, 'not in': lambda x, y: x not in y, } def evaluate(self, expr, context): """ Evaluate a marker expression returned by the :func:`parse_requirement` function in the specified context. """ if isinstance(expr, string_types): if expr[0] in '\'"': result = expr[1:-1] else: if expr not in context: raise SyntaxError('unknown variable: %s' % expr) result = context[expr] else: assert isinstance(expr, dict) op = expr['op'] if op not in self.operations: raise NotImplementedError('op not implemented: %s' % op) elhs = expr['lhs'] erhs = expr['rhs'] if _is_literal(expr['lhs']) and _is_literal(expr['rhs']): raise SyntaxError('invalid comparison: %s %s %s' % (elhs, op, erhs)) lhs = self.evaluate(elhs, context) rhs = self.evaluate(erhs, context) if ((_is_version_marker(elhs) or _is_version_marker(erhs)) and op in ('<', '<=', '>', '>=', '===', '==', '!=', '~=')): lhs = LV(lhs) rhs = LV(rhs) elif _is_version_marker(elhs) and op in ('in', 'not in'): lhs = LV(lhs) rhs = _get_versions(rhs) result = self.operations[op](lhs, rhs) return result _DIGITS = re.compile(r'\d+\.\d+') def default_context(): def format_full_version(info): version = '%s.%s.%s' % (info.major, info.minor, info.micro) kind = info.releaselevel if kind != 'final': version += kind[0] + str(info.serial) return version if hasattr(sys, 'implementation'): implementation_version = format_full_version(sys.implementation.version) implementation_name = sys.implementation.name else: implementation_version = '0' implementation_name = '' ppv = platform.python_version() m = _DIGITS.match(ppv) pv = m.group(0) result = { 'implementation_name': implementation_name, 'implementation_version': implementation_version, 'os_name': os.name, 'platform_machine': platform.machine(), 'platform_python_implementation': platform.python_implementation(), 'platform_release': platform.release(), 'platform_system': platform.system(), 'platform_version': platform.version(), 'platform_in_venv': str(in_venv()), 'python_full_version': ppv, 'python_version': pv, 'sys_platform': sys.platform, } return result DEFAULT_CONTEXT = default_context() del default_context evaluator = Evaluator() def interpret(marker, execution_context=None): """ Interpret a marker and return a result depending on environment. :param marker: The marker to interpret. :type marker: str :param execution_context: The context used for name lookup. :type execution_context: mapping """ try: expr, rest = parse_marker(marker) except Exception as e: raise SyntaxError('Unable to interpret marker syntax: %s: %s' % (marker, e)) if rest and rest[0] != '#': raise SyntaxError('unexpected trailing data in marker: %s: %s' % (marker, rest)) context = dict(DEFAULT_CONTEXT) if execution_context: context.update(execution_context) return evaluator.evaluate(expr, context) PK7QY= DDA__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.py# -*- coding: utf-8 -*- # # Copyright (C) 2012 The Python Software Foundation. # See LICENSE.txt and CONTRIBUTORS.txt. # """Implementation of the Metadata for Python packages PEPs. Supports all metadata formats (1.0, 1.1, 1.2, 1.3/2.1 and 2.2). """ from __future__ import unicode_literals import codecs from email import message_from_file import json import logging import re from . import DistlibException, __version__ from .compat import StringIO, string_types, text_type from .markers import interpret from .util import extract_by_key, get_extras from .version import get_scheme, PEP440_VERSION_RE logger = logging.getLogger(__name__) class MetadataMissingError(DistlibException): """A required metadata is missing""" class MetadataConflictError(DistlibException): """Attempt to read or write metadata fields that are conflictual.""" class MetadataUnrecognizedVersionError(DistlibException): """Unknown metadata version number.""" class MetadataInvalidError(DistlibException): """A metadata value is invalid""" # public API of this module __all__ = ['Metadata', 'PKG_INFO_ENCODING', 'PKG_INFO_PREFERRED_VERSION'] # Encoding used for the PKG-INFO files PKG_INFO_ENCODING = 'utf-8' # preferred version. Hopefully will be changed # to 1.2 once PEP 345 is supported everywhere PKG_INFO_PREFERRED_VERSION = '1.1' _LINE_PREFIX_1_2 = re.compile('\n \\|') _LINE_PREFIX_PRE_1_2 = re.compile('\n ') _241_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Summary', 'Description', 'Keywords', 'Home-page', 'Author', 'Author-email', 'License') _314_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Supported-Platform', 'Summary', 'Description', 'Keywords', 'Home-page', 'Author', 'Author-email', 'License', 'Classifier', 'Download-URL', 'Obsoletes', 'Provides', 'Requires') _314_MARKERS = ('Obsoletes', 'Provides', 'Requires', 'Classifier', 'Download-URL') _345_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Supported-Platform', 'Summary', 'Description', 'Keywords', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Classifier', 'Download-URL', 'Obsoletes-Dist', 'Project-URL', 'Provides-Dist', 'Requires-Dist', 'Requires-Python', 'Requires-External') _345_MARKERS = ('Provides-Dist', 'Requires-Dist', 'Requires-Python', 'Obsoletes-Dist', 'Requires-External', 'Maintainer', 'Maintainer-email', 'Project-URL') _426_FIELDS = ('Metadata-Version', 'Name', 'Version', 'Platform', 'Supported-Platform', 'Summary', 'Description', 'Keywords', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Classifier', 'Download-URL', 'Obsoletes-Dist', 'Project-URL', 'Provides-Dist', 'Requires-Dist', 'Requires-Python', 'Requires-External', 'Private-Version', 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension', 'Provides-Extra') _426_MARKERS = ('Private-Version', 'Provides-Extra', 'Obsoleted-By', 'Setup-Requires-Dist', 'Extension') # See issue #106: Sometimes 'Requires' and 'Provides' occur wrongly in # the metadata. Include them in the tuple literal below to allow them # (for now). # Ditto for Obsoletes - see issue #140. _566_FIELDS = _426_FIELDS + ('Description-Content-Type', 'Requires', 'Provides', 'Obsoletes') _566_MARKERS = ('Description-Content-Type', ) _643_MARKERS = ('Dynamic', 'License-File') _643_FIELDS = _566_FIELDS + _643_MARKERS _ALL_FIELDS = set() _ALL_FIELDS.update(_241_FIELDS) _ALL_FIELDS.update(_314_FIELDS) _ALL_FIELDS.update(_345_FIELDS) _ALL_FIELDS.update(_426_FIELDS) _ALL_FIELDS.update(_566_FIELDS) _ALL_FIELDS.update(_643_FIELDS) EXTRA_RE = re.compile(r'''extra\s*==\s*("([^"]+)"|'([^']+)')''') def _version2fieldlist(version): if version == '1.0': return _241_FIELDS elif version == '1.1': return _314_FIELDS elif version == '1.2': return _345_FIELDS elif version in ('1.3', '2.1'): # avoid adding field names if already there return _345_FIELDS + tuple(f for f in _566_FIELDS if f not in _345_FIELDS) elif version == '2.0': raise ValueError('Metadata 2.0 is withdrawn and not supported') # return _426_FIELDS elif version == '2.2': return _643_FIELDS raise MetadataUnrecognizedVersionError(version) def _best_version(fields): """Detect the best version depending on the fields used.""" def _has_marker(keys, markers): return any(marker in keys for marker in markers) keys = [key for key, value in fields.items() if value not in ([], 'UNKNOWN', None)] possible_versions = ['1.0', '1.1', '1.2', '1.3', '2.1', '2.2'] # 2.0 removed # first let's try to see if a field is not part of one of the version for key in keys: if key not in _241_FIELDS and '1.0' in possible_versions: possible_versions.remove('1.0') logger.debug('Removed 1.0 due to %s', key) if key not in _314_FIELDS and '1.1' in possible_versions: possible_versions.remove('1.1') logger.debug('Removed 1.1 due to %s', key) if key not in _345_FIELDS and '1.2' in possible_versions: possible_versions.remove('1.2') logger.debug('Removed 1.2 due to %s', key) if key not in _566_FIELDS and '1.3' in possible_versions: possible_versions.remove('1.3') logger.debug('Removed 1.3 due to %s', key) if key not in _566_FIELDS and '2.1' in possible_versions: if key != 'Description': # In 2.1, description allowed after headers possible_versions.remove('2.1') logger.debug('Removed 2.1 due to %s', key) if key not in _643_FIELDS and '2.2' in possible_versions: possible_versions.remove('2.2') logger.debug('Removed 2.2 due to %s', key) # if key not in _426_FIELDS and '2.0' in possible_versions: # possible_versions.remove('2.0') # logger.debug('Removed 2.0 due to %s', key) # possible_version contains qualified versions if len(possible_versions) == 1: return possible_versions[0] # found ! elif len(possible_versions) == 0: logger.debug('Out of options - unknown metadata set: %s', fields) raise MetadataConflictError('Unknown metadata set') # let's see if one unique marker is found is_1_1 = '1.1' in possible_versions and _has_marker(keys, _314_MARKERS) is_1_2 = '1.2' in possible_versions and _has_marker(keys, _345_MARKERS) is_2_1 = '2.1' in possible_versions and _has_marker(keys, _566_MARKERS) # is_2_0 = '2.0' in possible_versions and _has_marker(keys, _426_MARKERS) is_2_2 = '2.2' in possible_versions and _has_marker(keys, _643_MARKERS) if int(is_1_1) + int(is_1_2) + int(is_2_1) + int(is_2_2) > 1: raise MetadataConflictError('You used incompatible 1.1/1.2/2.1/2.2 fields') # we have the choice, 1.0, or 1.2, 2.1 or 2.2 # - 1.0 has a broken Summary field but works with all tools # - 1.1 is to avoid # - 1.2 fixes Summary but has little adoption # - 2.1 adds more features # - 2.2 is the latest if not is_1_1 and not is_1_2 and not is_2_1 and not is_2_2: # we couldn't find any specific marker if PKG_INFO_PREFERRED_VERSION in possible_versions: return PKG_INFO_PREFERRED_VERSION if is_1_1: return '1.1' if is_1_2: return '1.2' if is_2_1: return '2.1' # if is_2_2: # return '2.2' return '2.2' # This follows the rules about transforming keys as described in # https://www.python.org/dev/peps/pep-0566/#id17 _ATTR2FIELD = {name.lower().replace("-", "_"): name for name in _ALL_FIELDS} _FIELD2ATTR = {field: attr for attr, field in _ATTR2FIELD.items()} _PREDICATE_FIELDS = ('Requires-Dist', 'Obsoletes-Dist', 'Provides-Dist') _VERSIONS_FIELDS = ('Requires-Python', ) _VERSION_FIELDS = ('Version', ) _LISTFIELDS = ('Platform', 'Classifier', 'Obsoletes', 'Requires', 'Provides', 'Obsoletes-Dist', 'Provides-Dist', 'Requires-Dist', 'Requires-External', 'Project-URL', 'Supported-Platform', 'Setup-Requires-Dist', 'Provides-Extra', 'Extension', 'License-File') _LISTTUPLEFIELDS = ('Project-URL', ) _ELEMENTSFIELD = ('Keywords', ) _UNICODEFIELDS = ('Author', 'Maintainer', 'Summary', 'Description') _MISSING = object() _FILESAFE = re.compile('[^A-Za-z0-9.]+') def _get_name_and_version(name, version, for_filename=False): """Return the distribution name with version. If for_filename is true, return a filename-escaped form.""" if for_filename: # For both name and version any runs of non-alphanumeric or '.' # characters are replaced with a single '-'. Additionally any # spaces in the version string become '.' name = _FILESAFE.sub('-', name) version = _FILESAFE.sub('-', version.replace(' ', '.')) return '%s-%s' % (name, version) class LegacyMetadata(object): """The legacy metadata of a release. Supports versions 1.0, 1.1, 1.2, 2.0 and 1.3/2.1 (auto-detected). You can instantiate the class with one of these arguments (or none): - *path*, the path to a metadata file - *fileobj* give a file-like object with metadata as content - *mapping* is a dict-like object - *scheme* is a version scheme name """ # TODO document the mapping API and UNKNOWN default key def __init__(self, path=None, fileobj=None, mapping=None, scheme='default'): if [path, fileobj, mapping].count(None) < 2: raise TypeError('path, fileobj and mapping are exclusive') self._fields = {} self.requires_files = [] self._dependencies = None self.scheme = scheme if path is not None: self.read(path) elif fileobj is not None: self.read_file(fileobj) elif mapping is not None: self.update(mapping) self.set_metadata_version() def set_metadata_version(self): self._fields['Metadata-Version'] = _best_version(self._fields) def _write_field(self, fileobj, name, value): fileobj.write('%s: %s\n' % (name, value)) def __getitem__(self, name): return self.get(name) def __setitem__(self, name, value): return self.set(name, value) def __delitem__(self, name): field_name = self._convert_name(name) try: del self._fields[field_name] except KeyError: raise KeyError(name) def __contains__(self, name): return (name in self._fields or self._convert_name(name) in self._fields) def _convert_name(self, name): if name in _ALL_FIELDS: return name name = name.replace('-', '_').lower() return _ATTR2FIELD.get(name, name) def _default_value(self, name): if name in _LISTFIELDS or name in _ELEMENTSFIELD: return [] return 'UNKNOWN' def _remove_line_prefix(self, value): if self.metadata_version in ('1.0', '1.1'): return _LINE_PREFIX_PRE_1_2.sub('\n', value) else: return _LINE_PREFIX_1_2.sub('\n', value) def __getattr__(self, name): if name in _ATTR2FIELD: return self[name] raise AttributeError(name) # # Public API # def get_fullname(self, filesafe=False): """ Return the distribution name with version. If filesafe is true, return a filename-escaped form. """ return _get_name_and_version(self['Name'], self['Version'], filesafe) def is_field(self, name): """return True if name is a valid metadata key""" name = self._convert_name(name) return name in _ALL_FIELDS def is_multi_field(self, name): name = self._convert_name(name) return name in _LISTFIELDS def read(self, filepath): """Read the metadata values from a file path.""" fp = codecs.open(filepath, 'r', encoding='utf-8') try: self.read_file(fp) finally: fp.close() def read_file(self, fileob): """Read the metadata values from a file object.""" msg = message_from_file(fileob) self._fields['Metadata-Version'] = msg['metadata-version'] # When reading, get all the fields we can for field in _ALL_FIELDS: if field not in msg: continue if field in _LISTFIELDS: # we can have multiple lines values = msg.get_all(field) if field in _LISTTUPLEFIELDS and values is not None: values = [tuple(value.split(',')) for value in values] self.set(field, values) else: # single line value = msg[field] if value is not None and value != 'UNKNOWN': self.set(field, value) # PEP 566 specifies that the body be used for the description, if # available body = msg.get_payload() self["Description"] = body if body else self["Description"] # logger.debug('Attempting to set metadata for %s', self) # self.set_metadata_version() def write(self, filepath, skip_unknown=False): """Write the metadata fields to filepath.""" fp = codecs.open(filepath, 'w', encoding='utf-8') try: self.write_file(fp, skip_unknown) finally: fp.close() def write_file(self, fileobject, skip_unknown=False): """Write the PKG-INFO format data to a file object.""" self.set_metadata_version() for field in _version2fieldlist(self['Metadata-Version']): values = self.get(field) if skip_unknown and values in ('UNKNOWN', [], ['UNKNOWN']): continue if field in _ELEMENTSFIELD: self._write_field(fileobject, field, ','.join(values)) continue if field not in _LISTFIELDS: if field == 'Description': if self.metadata_version in ('1.0', '1.1'): values = values.replace('\n', '\n ') else: values = values.replace('\n', '\n |') values = [values] if field in _LISTTUPLEFIELDS: values = [','.join(value) for value in values] for value in values: self._write_field(fileobject, field, value) def update(self, other=None, **kwargs): """Set metadata values from the given iterable `other` and kwargs. Behavior is like `dict.update`: If `other` has a ``keys`` method, they are looped over and ``self[key]`` is assigned ``other[key]``. Else, ``other`` is an iterable of ``(key, value)`` iterables. Keys that don't match a metadata field or that have an empty value are dropped. """ def _set(key, value): if key in _ATTR2FIELD and value: self.set(self._convert_name(key), value) if not other: # other is None or empty container pass elif hasattr(other, 'keys'): for k in other.keys(): _set(k, other[k]) else: for k, v in other: _set(k, v) if kwargs: for k, v in kwargs.items(): _set(k, v) def set(self, name, value): """Control then set a metadata field.""" name = self._convert_name(name) if ((name in _ELEMENTSFIELD or name == 'Platform') and not isinstance(value, (list, tuple))): if isinstance(value, string_types): value = [v.strip() for v in value.split(',')] else: value = [] elif (name in _LISTFIELDS and not isinstance(value, (list, tuple))): if isinstance(value, string_types): value = [value] else: value = [] if logger.isEnabledFor(logging.WARNING): project_name = self['Name'] scheme = get_scheme(self.scheme) if name in _PREDICATE_FIELDS and value is not None: for v in value: # check that the values are valid if not scheme.is_valid_matcher(v.split(';')[0]): logger.warning("'%s': '%s' is not valid (field '%s')", project_name, v, name) # FIXME this rejects UNKNOWN, is that right? elif name in _VERSIONS_FIELDS and value is not None: if not scheme.is_valid_constraint_list(value): logger.warning("'%s': '%s' is not a valid version (field '%s')", project_name, value, name) elif name in _VERSION_FIELDS and value is not None: if not scheme.is_valid_version(value): logger.warning("'%s': '%s' is not a valid version (field '%s')", project_name, value, name) if name in _UNICODEFIELDS: if name == 'Description': value = self._remove_line_prefix(value) self._fields[name] = value def get(self, name, default=_MISSING): """Get a metadata field.""" name = self._convert_name(name) if name not in self._fields: if default is _MISSING: default = self._default_value(name) return default if name in _UNICODEFIELDS: value = self._fields[name] return value elif name in _LISTFIELDS: value = self._fields[name] if value is None: return [] res = [] for val in value: if name not in _LISTTUPLEFIELDS: res.append(val) else: # That's for Project-URL res.append((val[0], val[1])) return res elif name in _ELEMENTSFIELD: value = self._fields[name] if isinstance(value, string_types): return value.split(',') return self._fields[name] def check(self, strict=False): """Check if the metadata is compliant. If strict is True then raise if no Name or Version are provided""" self.set_metadata_version() # XXX should check the versions (if the file was loaded) missing, warnings = [], [] for attr in ('Name', 'Version'): # required by PEP 345 if attr not in self: missing.append(attr) if strict and missing != []: msg = 'missing required metadata: %s' % ', '.join(missing) raise MetadataMissingError(msg) for attr in ('Home-page', 'Author'): if attr not in self: missing.append(attr) # checking metadata 1.2 (XXX needs to check 1.1, 1.0) if self['Metadata-Version'] != '1.2': return missing, warnings scheme = get_scheme(self.scheme) def are_valid_constraints(value): for v in value: if not scheme.is_valid_matcher(v.split(';')[0]): return False return True for fields, controller in ((_PREDICATE_FIELDS, are_valid_constraints), (_VERSIONS_FIELDS, scheme.is_valid_constraint_list), (_VERSION_FIELDS, scheme.is_valid_version)): for field in fields: value = self.get(field, None) if value is not None and not controller(value): warnings.append("Wrong value for '%s': %s" % (field, value)) return missing, warnings def todict(self, skip_missing=False): """Return fields as a dict. Field names will be converted to use the underscore-lowercase style instead of hyphen-mixed case (i.e. home_page instead of Home-page). This is as per https://www.python.org/dev/peps/pep-0566/#id17. """ self.set_metadata_version() fields = _version2fieldlist(self['Metadata-Version']) data = {} for field_name in fields: if not skip_missing or field_name in self._fields: key = _FIELD2ATTR[field_name] if key != 'project_url': data[key] = self[field_name] else: data[key] = [','.join(u) for u in self[field_name]] return data def add_requirements(self, requirements): if self['Metadata-Version'] == '1.1': # we can't have 1.1 metadata *and* Setuptools requires for field in ('Obsoletes', 'Requires', 'Provides'): if field in self: del self[field] self['Requires-Dist'] += requirements # Mapping API # TODO could add iter* variants def keys(self): return list(_version2fieldlist(self['Metadata-Version'])) def __iter__(self): for key in self.keys(): yield key def values(self): return [self[key] for key in self.keys()] def items(self): return [(key, self[key]) for key in self.keys()] def __repr__(self): return '<%s %s %s>' % (self.__class__.__name__, self.name, self.version) METADATA_FILENAME = 'pydist.json' WHEEL_METADATA_FILENAME = 'metadata.json' LEGACY_METADATA_FILENAME = 'METADATA' class Metadata(object): """ The metadata of a release. This implementation uses 2.1 metadata where possible. If not possible, it wraps a LegacyMetadata instance which handles the key-value metadata format. """ METADATA_VERSION_MATCHER = re.compile(r'^\d+(\.\d+)*$') NAME_MATCHER = re.compile('^[0-9A-Z]([0-9A-Z_.-]*[0-9A-Z])?$', re.I) FIELDNAME_MATCHER = re.compile('^[A-Z]([0-9A-Z-]*[0-9A-Z])?$', re.I) VERSION_MATCHER = PEP440_VERSION_RE SUMMARY_MATCHER = re.compile('.{1,2047}') METADATA_VERSION = '2.0' GENERATOR = 'distlib (%s)' % __version__ MANDATORY_KEYS = { 'name': (), 'version': (), 'summary': ('legacy', ), } INDEX_KEYS = ('name version license summary description author ' 'author_email keywords platform home_page classifiers ' 'download_url') DEPENDENCY_KEYS = ('extras run_requires test_requires build_requires ' 'dev_requires provides meta_requires obsoleted_by ' 'supports_environments') SYNTAX_VALIDATORS = { 'metadata_version': (METADATA_VERSION_MATCHER, ()), 'name': (NAME_MATCHER, ('legacy', )), 'version': (VERSION_MATCHER, ('legacy', )), 'summary': (SUMMARY_MATCHER, ('legacy', )), 'dynamic': (FIELDNAME_MATCHER, ('legacy', )), } __slots__ = ('_legacy', '_data', 'scheme') def __init__(self, path=None, fileobj=None, mapping=None, scheme='default'): if [path, fileobj, mapping].count(None) < 2: raise TypeError('path, fileobj and mapping are exclusive') self._legacy = None self._data = None self.scheme = scheme # import pdb; pdb.set_trace() if mapping is not None: try: self._validate_mapping(mapping, scheme) self._data = mapping except MetadataUnrecognizedVersionError: self._legacy = LegacyMetadata(mapping=mapping, scheme=scheme) self.validate() else: data = None if path: with open(path, 'rb') as f: data = f.read() elif fileobj: data = fileobj.read() if data is None: # Initialised with no args - to be added self._data = { 'metadata_version': self.METADATA_VERSION, 'generator': self.GENERATOR, } else: if not isinstance(data, text_type): data = data.decode('utf-8') try: self._data = json.loads(data) self._validate_mapping(self._data, scheme) except ValueError: # Note: MetadataUnrecognizedVersionError does not # inherit from ValueError (it's a DistlibException, # which should not inherit from ValueError). # The ValueError comes from the json.load - if that # succeeds and we get a validation error, we want # that to propagate self._legacy = LegacyMetadata(fileobj=StringIO(data), scheme=scheme) self.validate() common_keys = set(('name', 'version', 'license', 'keywords', 'summary')) none_list = (None, list) none_dict = (None, dict) mapped_keys = { 'run_requires': ('Requires-Dist', list), 'build_requires': ('Setup-Requires-Dist', list), 'dev_requires': none_list, 'test_requires': none_list, 'meta_requires': none_list, 'extras': ('Provides-Extra', list), 'modules': none_list, 'namespaces': none_list, 'exports': none_dict, 'commands': none_dict, 'classifiers': ('Classifier', list), 'source_url': ('Download-URL', None), 'metadata_version': ('Metadata-Version', None), } del none_list, none_dict def __getattribute__(self, key): common = object.__getattribute__(self, 'common_keys') mapped = object.__getattribute__(self, 'mapped_keys') if key in mapped: lk, maker = mapped[key] if self._legacy: if lk is None: result = None if maker is None else maker() else: result = self._legacy.get(lk) else: value = None if maker is None else maker() if key not in ('commands', 'exports', 'modules', 'namespaces', 'classifiers'): result = self._data.get(key, value) else: # special cases for PEP 459 sentinel = object() result = sentinel d = self._data.get('extensions') if d: if key == 'commands': result = d.get('python.commands', value) elif key == 'classifiers': d = d.get('python.details') if d: result = d.get(key, value) else: d = d.get('python.exports') if not d: d = self._data.get('python.exports') if d: result = d.get(key, value) if result is sentinel: result = value elif key not in common: result = object.__getattribute__(self, key) elif self._legacy: result = self._legacy.get(key) else: result = self._data.get(key) return result def _validate_value(self, key, value, scheme=None): if key in self.SYNTAX_VALIDATORS: pattern, exclusions = self.SYNTAX_VALIDATORS[key] if (scheme or self.scheme) not in exclusions: m = pattern.match(value) if not m: raise MetadataInvalidError("'%s' is an invalid value for " "the '%s' property" % (value, key)) def __setattr__(self, key, value): self._validate_value(key, value) common = object.__getattribute__(self, 'common_keys') mapped = object.__getattribute__(self, 'mapped_keys') if key in mapped: lk, _ = mapped[key] if self._legacy: if lk is None: raise NotImplementedError self._legacy[lk] = value elif key not in ('commands', 'exports', 'modules', 'namespaces', 'classifiers'): self._data[key] = value else: # special cases for PEP 459 d = self._data.setdefault('extensions', {}) if key == 'commands': d['python.commands'] = value elif key == 'classifiers': d = d.setdefault('python.details', {}) d[key] = value else: d = d.setdefault('python.exports', {}) d[key] = value elif key not in common: object.__setattr__(self, key, value) else: if key == 'keywords': if isinstance(value, string_types): value = value.strip() if value: value = value.split() else: value = [] if self._legacy: self._legacy[key] = value else: self._data[key] = value @property def name_and_version(self): return _get_name_and_version(self.name, self.version, True) @property def provides(self): if self._legacy: result = self._legacy['Provides-Dist'] else: result = self._data.setdefault('provides', []) s = '%s (%s)' % (self.name, self.version) if s not in result: result.append(s) return result @provides.setter def provides(self, value): if self._legacy: self._legacy['Provides-Dist'] = value else: self._data['provides'] = value def get_requirements(self, reqts, extras=None, env=None): """ Base method to get dependencies, given a set of extras to satisfy and an optional environment context. :param reqts: A list of sometimes-wanted dependencies, perhaps dependent on extras and environment. :param extras: A list of optional components being requested. :param env: An optional environment for marker evaluation. """ if self._legacy: result = reqts else: result = [] extras = get_extras(extras or [], self.extras) for d in reqts: if 'extra' not in d and 'environment' not in d: # unconditional include = True else: if 'extra' not in d: # Not extra-dependent - only environment-dependent include = True else: include = d.get('extra') in extras if include: # Not excluded because of extras, check environment marker = d.get('environment') if marker: include = interpret(marker, env) if include: result.extend(d['requires']) for key in ('build', 'dev', 'test'): e = ':%s:' % key if e in extras: extras.remove(e) # A recursive call, but it should terminate since 'test' # has been removed from the extras reqts = self._data.get('%s_requires' % key, []) result.extend(self.get_requirements(reqts, extras=extras, env=env)) return result @property def dictionary(self): if self._legacy: return self._from_legacy() return self._data @property def dependencies(self): if self._legacy: raise NotImplementedError else: return extract_by_key(self._data, self.DEPENDENCY_KEYS) @dependencies.setter def dependencies(self, value): if self._legacy: raise NotImplementedError else: self._data.update(value) def _validate_mapping(self, mapping, scheme): if mapping.get('metadata_version') != self.METADATA_VERSION: raise MetadataUnrecognizedVersionError() missing = [] for key, exclusions in self.MANDATORY_KEYS.items(): if key not in mapping: if scheme not in exclusions: missing.append(key) if missing: msg = 'Missing metadata items: %s' % ', '.join(missing) raise MetadataMissingError(msg) for k, v in mapping.items(): self._validate_value(k, v, scheme) def validate(self): if self._legacy: missing, warnings = self._legacy.check(True) if missing or warnings: logger.warning('Metadata: missing: %s, warnings: %s', missing, warnings) else: self._validate_mapping(self._data, self.scheme) def todict(self): if self._legacy: return self._legacy.todict(True) else: result = extract_by_key(self._data, self.INDEX_KEYS) return result def _from_legacy(self): assert self._legacy and not self._data result = { 'metadata_version': self.METADATA_VERSION, 'generator': self.GENERATOR, } lmd = self._legacy.todict(True) # skip missing ones for k in ('name', 'version', 'license', 'summary', 'description', 'classifier'): if k in lmd: if k == 'classifier': nk = 'classifiers' else: nk = k result[nk] = lmd[k] kw = lmd.get('Keywords', []) if kw == ['']: kw = [] result['keywords'] = kw keys = (('requires_dist', 'run_requires'), ('setup_requires_dist', 'build_requires')) for ok, nk in keys: if ok in lmd and lmd[ok]: result[nk] = [{'requires': lmd[ok]}] result['provides'] = self.provides # author = {} # maintainer = {} return result LEGACY_MAPPING = { 'name': 'Name', 'version': 'Version', ('extensions', 'python.details', 'license'): 'License', 'summary': 'Summary', 'description': 'Description', ('extensions', 'python.project', 'project_urls', 'Home'): 'Home-page', ('extensions', 'python.project', 'contacts', 0, 'name'): 'Author', ('extensions', 'python.project', 'contacts', 0, 'email'): 'Author-email', 'source_url': 'Download-URL', ('extensions', 'python.details', 'classifiers'): 'Classifier', } def _to_legacy(self): def process_entries(entries): reqts = set() for e in entries: extra = e.get('extra') env = e.get('environment') rlist = e['requires'] for r in rlist: if not env and not extra: reqts.add(r) else: marker = '' if extra: marker = 'extra == "%s"' % extra if env: if marker: marker = '(%s) and %s' % (env, marker) else: marker = env reqts.add(';'.join((r, marker))) return reqts assert self._data and not self._legacy result = LegacyMetadata() nmd = self._data # import pdb; pdb.set_trace() for nk, ok in self.LEGACY_MAPPING.items(): if not isinstance(nk, tuple): if nk in nmd: result[ok] = nmd[nk] else: d = nmd found = True for k in nk: try: d = d[k] except (KeyError, IndexError): found = False break if found: result[ok] = d r1 = process_entries(self.run_requires + self.meta_requires) r2 = process_entries(self.build_requires + self.dev_requires) if self.extras: result['Provides-Extra'] = sorted(self.extras) result['Requires-Dist'] = sorted(r1) result['Setup-Requires-Dist'] = sorted(r2) # TODO: any other fields wanted return result def write(self, path=None, fileobj=None, legacy=False, skip_unknown=True): if [path, fileobj].count(None) != 1: raise ValueError('Exactly one of path and fileobj is needed') self.validate() if legacy: if self._legacy: legacy_md = self._legacy else: legacy_md = self._to_legacy() if path: legacy_md.write(path, skip_unknown=skip_unknown) else: legacy_md.write_file(fileobj, skip_unknown=skip_unknown) else: if self._legacy: d = self._from_legacy() else: d = self._data if fileobj: json.dump(d, fileobj, ensure_ascii=True, indent=2, sort_keys=True) else: with codecs.open(path, 'w', 'utf-8') as f: json.dump(d, f, ensure_ascii=True, indent=2, sort_keys=True) def add_requirements(self, requirements): if self._legacy: self._legacy.add_requirements(requirements) else: run_requires = self._data.setdefault('run_requires', []) always = None for entry in run_requires: if 'environment' not in entry and 'extra' not in entry: always = entry break if always is None: always = {'requires': requirements} run_requires.insert(0, always) else: rset = set(always['requires']) | set(requirements) always['requires'] = sorted(rset) def __repr__(self): name = self.name or '(no name)' version = self.version or 'no version' return '<%s %s %s (%s)>' % (self.__class__.__name__, self.metadata_version, name, version) PK7QYՀD*D*B__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.py# -*- coding: utf-8 -*- # # Copyright (C) 2013-2017 Vinay Sajip. # Licensed to the Python Software Foundation under a contributor agreement. # See LICENSE.txt and CONTRIBUTORS.txt. # from __future__ import unicode_literals import bisect import io import logging import os import pkgutil import sys import types import zipimport from . import DistlibException from .util import cached_property, get_cache_base, Cache logger = logging.getLogger(__name__) cache = None # created when needed class ResourceCache(Cache): def __init__(self, base=None): if base is None: # Use native string to avoid issues on 2.x: see Python #20140. base = os.path.join(get_cache_base(), str('resource-cache')) super(ResourceCache, self).__init__(base) def is_stale(self, resource, path): """ Is the cache stale for the given resource? :param resource: The :class:`Resource` being cached. :param path: The path of the resource in the cache. :return: True if the cache is stale. """ # Cache invalidation is a hard problem :-) return True def get(self, resource): """ Get a resource into the cache, :param resource: A :class:`Resource` instance. :return: The pathname of the resource in the cache. """ prefix, path = resource.finder.get_cache_info(resource) if prefix is None: result = path else: result = os.path.join(self.base, self.prefix_to_dir(prefix), path) dirname = os.path.dirname(result) if not os.path.isdir(dirname): os.makedirs(dirname) if not os.path.exists(result): stale = True else: stale = self.is_stale(resource, path) if stale: # write the bytes of the resource to the cache location with open(result, 'wb') as f: f.write(resource.bytes) return result class ResourceBase(object): def __init__(self, finder, name): self.finder = finder self.name = name class Resource(ResourceBase): """ A class representing an in-package resource, such as a data file. This is not normally instantiated by user code, but rather by a :class:`ResourceFinder` which manages the resource. """ is_container = False # Backwards compatibility def as_stream(self): """ Get the resource as a stream. This is not a property to make it obvious that it returns a new stream each time. """ return self.finder.get_stream(self) @cached_property def file_path(self): global cache if cache is None: cache = ResourceCache() return cache.get(self) @cached_property def bytes(self): return self.finder.get_bytes(self) @cached_property def size(self): return self.finder.get_size(self) class ResourceContainer(ResourceBase): is_container = True # Backwards compatibility @cached_property def resources(self): return self.finder.get_resources(self) class ResourceFinder(object): """ Resource finder for file system resources. """ if sys.platform.startswith('java'): skipped_extensions = ('.pyc', '.pyo', '.class') else: skipped_extensions = ('.pyc', '.pyo') def __init__(self, module): self.module = module self.loader = getattr(module, '__loader__', None) self.base = os.path.dirname(getattr(module, '__file__', '')) def _adjust_path(self, path): return os.path.realpath(path) def _make_path(self, resource_name): # Issue #50: need to preserve type of path on Python 2.x # like os.path._get_sep if isinstance(resource_name, bytes): # should only happen on 2.x sep = b'/' else: sep = '/' parts = resource_name.split(sep) parts.insert(0, self.base) result = os.path.join(*parts) return self._adjust_path(result) def _find(self, path): return os.path.exists(path) def get_cache_info(self, resource): return None, resource.path def find(self, resource_name): path = self._make_path(resource_name) if not self._find(path): result = None else: if self._is_directory(path): result = ResourceContainer(self, resource_name) else: result = Resource(self, resource_name) result.path = path return result def get_stream(self, resource): return open(resource.path, 'rb') def get_bytes(self, resource): with open(resource.path, 'rb') as f: return f.read() def get_size(self, resource): return os.path.getsize(resource.path) def get_resources(self, resource): def allowed(f): return (f != '__pycache__' and not f.endswith(self.skipped_extensions)) return set([f for f in os.listdir(resource.path) if allowed(f)]) def is_container(self, resource): return self._is_directory(resource.path) _is_directory = staticmethod(os.path.isdir) def iterator(self, resource_name): resource = self.find(resource_name) if resource is not None: todo = [resource] while todo: resource = todo.pop(0) yield resource if resource.is_container: rname = resource.name for name in resource.resources: if not rname: new_name = name else: new_name = '/'.join([rname, name]) child = self.find(new_name) if child.is_container: todo.append(child) else: yield child class ZipResourceFinder(ResourceFinder): """ Resource finder for resources in .zip files. """ def __init__(self, module): super(ZipResourceFinder, self).__init__(module) archive = self.loader.archive self.prefix_len = 1 + len(archive) # PyPy doesn't have a _files attr on zipimporter, and you can't set one if hasattr(self.loader, '_files'): self._files = self.loader._files else: self._files = zipimport._zip_directory_cache[archive] self.index = sorted(self._files) def _adjust_path(self, path): return path def _find(self, path): path = path[self.prefix_len:] if path in self._files: result = True else: if path and path[-1] != os.sep: path = path + os.sep i = bisect.bisect(self.index, path) try: result = self.index[i].startswith(path) except IndexError: result = False if not result: logger.debug('_find failed: %r %r', path, self.loader.prefix) else: logger.debug('_find worked: %r %r', path, self.loader.prefix) return result def get_cache_info(self, resource): prefix = self.loader.archive path = resource.path[1 + len(prefix):] return prefix, path def get_bytes(self, resource): return self.loader.get_data(resource.path) def get_stream(self, resource): return io.BytesIO(self.get_bytes(resource)) def get_size(self, resource): path = resource.path[self.prefix_len:] return self._files[path][3] def get_resources(self, resource): path = resource.path[self.prefix_len:] if path and path[-1] != os.sep: path += os.sep plen = len(path) result = set() i = bisect.bisect(self.index, path) while i < len(self.index): if not self.index[i].startswith(path): break s = self.index[i][plen:] result.add(s.split(os.sep, 1)[0]) # only immediate children i += 1 return result def _is_directory(self, path): path = path[self.prefix_len:] if path and path[-1] != os.sep: path += os.sep i = bisect.bisect(self.index, path) try: result = self.index[i].startswith(path) except IndexError: result = False return result _finder_registry = { type(None): ResourceFinder, zipimport.zipimporter: ZipResourceFinder } try: # In Python 3.6, _frozen_importlib -> _frozen_importlib_external try: import _frozen_importlib_external as _fi except ImportError: import _frozen_importlib as _fi _finder_registry[_fi.SourceFileLoader] = ResourceFinder _finder_registry[_fi.FileFinder] = ResourceFinder # See issue #146 _finder_registry[_fi.SourcelessFileLoader] = ResourceFinder del _fi except (ImportError, AttributeError): pass def register_finder(loader, finder_maker): _finder_registry[type(loader)] = finder_maker _finder_cache = {} def finder(package): """ Return a resource finder for a package. :param package: The name of the package. :return: A :class:`ResourceFinder` instance for the package. """ if package in _finder_cache: result = _finder_cache[package] else: if package not in sys.modules: __import__(package) module = sys.modules[package] path = getattr(module, '__path__', None) if path is None: raise DistlibException('You cannot get a finder for a module, ' 'only for a package') loader = getattr(module, '__loader__', None) finder_maker = _finder_registry.get(type(loader)) if finder_maker is None: raise DistlibException('Unable to locate finder for %r' % package) result = finder_maker(module) _finder_cache[package] = result return result _dummy_module = types.ModuleType(str('__dummy__')) def finder_for_path(path): """ Return a resource finder for a path, which should represent a container. :param path: The path. :return: A :class:`ResourceFinder` instance for the path. """ result = None # calls any path hooks, gets importer into cache pkgutil.get_importer(path) loader = sys.path_importer_cache.get(path) finder = _finder_registry.get(type(loader)) if finder: module = _dummy_module module.__file__ = os.path.join(path, '') module.__loader__ = loader result = finder(module) return result PK7QY˺fHH@__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.py# -*- coding: utf-8 -*- # # Copyright (C) 2013-2023 Vinay Sajip. # Licensed to the Python Software Foundation under a contributor agreement. # See LICENSE.txt and CONTRIBUTORS.txt. # from io import BytesIO import logging import os import re import struct import sys import time from zipfile import ZipInfo from .compat import sysconfig, detect_encoding, ZipFile from .resources import finder from .util import (FileOperator, get_export_entry, convert_path, get_executable, get_platform, in_venv) logger = logging.getLogger(__name__) _DEFAULT_MANIFEST = ''' '''.strip() # check if Python is called on the first line with this expression FIRST_LINE_RE = re.compile(b'^#!.*pythonw?[0-9.]*([ \t].*)?$') SCRIPT_TEMPLATE = r'''# -*- coding: utf-8 -*- import re import sys from %(module)s import %(import_name)s if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(%(func)s()) ''' # Pre-fetch the contents of all executable wrapper stubs. # This is to address https://github.com/pypa/pip/issues/12666. # When updating pip, we rename the old pip in place before installing the # new version. If we try to fetch a wrapper *after* that rename, the finder # machinery will be confused as the package is no longer available at the # location where it was imported from. So we load everything into memory in # advance. if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # Issue 31: don't hardcode an absolute package name, but # determine it relative to the current package DISTLIB_PACKAGE = __name__.rsplit('.', 1)[0] WRAPPERS = { r.name: r.bytes for r in finder(DISTLIB_PACKAGE).iterator("") if r.name.endswith(".exe") } def enquote_executable(executable): if ' ' in executable: # make sure we quote only the executable in case of env # for example /usr/bin/env "/dir with spaces/bin/jython" # instead of "/usr/bin/env /dir with spaces/bin/jython" # otherwise whole if executable.startswith('/usr/bin/env '): env, _executable = executable.split(' ', 1) if ' ' in _executable and not _executable.startswith('"'): executable = '%s "%s"' % (env, _executable) else: if not executable.startswith('"'): executable = '"%s"' % executable return executable # Keep the old name around (for now), as there is at least one project using it! _enquote_executable = enquote_executable class ScriptMaker(object): """ A class to copy or create scripts from source scripts or callable specifications. """ script_template = SCRIPT_TEMPLATE executable = None # for shebangs def __init__(self, source_dir, target_dir, add_launchers=True, dry_run=False, fileop=None): self.source_dir = source_dir self.target_dir = target_dir self.add_launchers = add_launchers self.force = False self.clobber = False # It only makes sense to set mode bits on POSIX. self.set_mode = (os.name == 'posix') or (os.name == 'java' and os._name == 'posix') self.variants = set(('', 'X.Y')) self._fileop = fileop or FileOperator(dry_run) self._is_nt = os.name == 'nt' or (os.name == 'java' and os._name == 'nt') self.version_info = sys.version_info def _get_alternate_executable(self, executable, options): if options.get('gui', False) and self._is_nt: # pragma: no cover dn, fn = os.path.split(executable) fn = fn.replace('python', 'pythonw') executable = os.path.join(dn, fn) return executable if sys.platform.startswith('java'): # pragma: no cover def _is_shell(self, executable): """ Determine if the specified executable is a script (contains a #! line) """ try: with open(executable) as fp: return fp.read(2) == '#!' except (OSError, IOError): logger.warning('Failed to open %s', executable) return False def _fix_jython_executable(self, executable): if self._is_shell(executable): # Workaround for Jython is not needed on Linux systems. import java if java.lang.System.getProperty('os.name') == 'Linux': return executable elif executable.lower().endswith('jython.exe'): # Use wrapper exe for Jython on Windows return executable return '/usr/bin/env %s' % executable def _build_shebang(self, executable, post_interp): """ Build a shebang line. In the simple case (on Windows, or a shebang line which is not too long or contains spaces) use a simple formulation for the shebang. Otherwise, use /bin/sh as the executable, with a contrived shebang which allows the script to run either under Python or sh, using suitable quoting. Thanks to Harald Nordgren for his input. See also: http://www.in-ulm.de/~mascheck/various/shebang/#length https://hg.mozilla.org/mozilla-central/file/tip/mach """ if os.name != 'posix': simple_shebang = True elif getattr(sys, "cross_compiling", False): # In a cross-compiling environment, the shebang will likely be a # script; this *must* be invoked with the "safe" version of the # shebang, or else using os.exec() to run the entry script will # fail, raising "OSError 8 [Errno 8] Exec format error". simple_shebang = False else: # Add 3 for '#!' prefix and newline suffix. shebang_length = len(executable) + len(post_interp) + 3 if sys.platform == 'darwin': max_shebang_length = 512 else: max_shebang_length = 127 simple_shebang = ((b' ' not in executable) and (shebang_length <= max_shebang_length)) if simple_shebang: result = b'#!' + executable + post_interp + b'\n' else: result = b'#!/bin/sh\n' result += b"'''exec' " + executable + post_interp + b' "$0" "$@"\n' result += b"' '''\n" return result def _get_shebang(self, encoding, post_interp=b'', options=None): enquote = True if self.executable: executable = self.executable enquote = False # assume this will be taken care of elif not sysconfig.is_python_build(): executable = get_executable() elif in_venv(): # pragma: no cover executable = os.path.join(sysconfig.get_path('scripts'), 'python%s' % sysconfig.get_config_var('EXE')) else: # pragma: no cover if os.name == 'nt': # for Python builds from source on Windows, no Python executables with # a version suffix are created, so we use python.exe executable = os.path.join(sysconfig.get_config_var('BINDIR'), 'python%s' % (sysconfig.get_config_var('EXE'))) else: executable = os.path.join( sysconfig.get_config_var('BINDIR'), 'python%s%s' % (sysconfig.get_config_var('VERSION'), sysconfig.get_config_var('EXE'))) if options: executable = self._get_alternate_executable(executable, options) if sys.platform.startswith('java'): # pragma: no cover executable = self._fix_jython_executable(executable) # Normalise case for Windows - COMMENTED OUT # executable = os.path.normcase(executable) # N.B. The normalising operation above has been commented out: See # issue #124. Although paths in Windows are generally case-insensitive, # they aren't always. For example, a path containing a ẞ (which is a # LATIN CAPITAL LETTER SHARP S - U+1E9E) is normcased to ß (which is a # LATIN SMALL LETTER SHARP S' - U+00DF). The two are not considered by # Windows as equivalent in path names. # If the user didn't specify an executable, it may be necessary to # cater for executable paths with spaces (not uncommon on Windows) if enquote: executable = enquote_executable(executable) # Issue #51: don't use fsencode, since we later try to # check that the shebang is decodable using utf-8. executable = executable.encode('utf-8') # in case of IronPython, play safe and enable frames support if (sys.platform == 'cli' and '-X:Frames' not in post_interp and '-X:FullFrames' not in post_interp): # pragma: no cover post_interp += b' -X:Frames' shebang = self._build_shebang(executable, post_interp) # Python parser starts to read a script using UTF-8 until # it gets a #coding:xxx cookie. The shebang has to be the # first line of a file, the #coding:xxx cookie cannot be # written before. So the shebang has to be decodable from # UTF-8. try: shebang.decode('utf-8') except UnicodeDecodeError: # pragma: no cover raise ValueError('The shebang (%r) is not decodable from utf-8' % shebang) # If the script is encoded to a custom encoding (use a # #coding:xxx cookie), the shebang has to be decodable from # the script encoding too. if encoding != 'utf-8': try: shebang.decode(encoding) except UnicodeDecodeError: # pragma: no cover raise ValueError('The shebang (%r) is not decodable ' 'from the script encoding (%r)' % (shebang, encoding)) return shebang def _get_script_text(self, entry): return self.script_template % dict( module=entry.prefix, import_name=entry.suffix.split('.')[0], func=entry.suffix) manifest = _DEFAULT_MANIFEST def get_manifest(self, exename): base = os.path.basename(exename) return self.manifest % base def _write_script(self, names, shebang, script_bytes, filenames, ext): use_launcher = self.add_launchers and self._is_nt if not use_launcher: script_bytes = shebang + script_bytes else: # pragma: no cover if ext == 'py': launcher = self._get_launcher('t') else: launcher = self._get_launcher('w') stream = BytesIO() with ZipFile(stream, 'w') as zf: source_date_epoch = os.environ.get('SOURCE_DATE_EPOCH') if source_date_epoch: date_time = time.gmtime(int(source_date_epoch))[:6] zinfo = ZipInfo(filename='__main__.py', date_time=date_time) zf.writestr(zinfo, script_bytes) else: zf.writestr('__main__.py', script_bytes) zip_data = stream.getvalue() script_bytes = launcher + shebang + zip_data for name in names: outname = os.path.join(self.target_dir, name) if use_launcher: # pragma: no cover n, e = os.path.splitext(outname) if e.startswith('.py'): outname = n outname = '%s.exe' % outname try: self._fileop.write_binary_file(outname, script_bytes) except Exception: # Failed writing an executable - it might be in use. logger.warning('Failed to write executable - trying to ' 'use .deleteme logic') dfname = '%s.deleteme' % outname if os.path.exists(dfname): os.remove(dfname) # Not allowed to fail here os.rename(outname, dfname) # nor here self._fileop.write_binary_file(outname, script_bytes) logger.debug('Able to replace executable using ' '.deleteme logic') try: os.remove(dfname) except Exception: pass # still in use - ignore error else: if self._is_nt and not outname.endswith('.' + ext): # pragma: no cover outname = '%s.%s' % (outname, ext) if os.path.exists(outname) and not self.clobber: logger.warning('Skipping existing file %s', outname) continue self._fileop.write_binary_file(outname, script_bytes) if self.set_mode: self._fileop.set_executable_mode([outname]) filenames.append(outname) variant_separator = '-' def get_script_filenames(self, name): result = set() if '' in self.variants: result.add(name) if 'X' in self.variants: result.add('%s%s' % (name, self.version_info[0])) if 'X.Y' in self.variants: result.add('%s%s%s.%s' % (name, self.variant_separator, self.version_info[0], self.version_info[1])) return result def _make_script(self, entry, filenames, options=None): post_interp = b'' if options: args = options.get('interpreter_args', []) if args: args = ' %s' % ' '.join(args) post_interp = args.encode('utf-8') shebang = self._get_shebang('utf-8', post_interp, options=options) script = self._get_script_text(entry).encode('utf-8') scriptnames = self.get_script_filenames(entry.name) if options and options.get('gui', False): ext = 'pyw' else: ext = 'py' self._write_script(scriptnames, shebang, script, filenames, ext) def _copy_script(self, script, filenames): adjust = False script = os.path.join(self.source_dir, convert_path(script)) outname = os.path.join(self.target_dir, os.path.basename(script)) if not self.force and not self._fileop.newer(script, outname): logger.debug('not copying %s (up-to-date)', script) return # Always open the file, but ignore failures in dry-run mode -- # that way, we'll get accurate feedback if we can read the # script. try: f = open(script, 'rb') except IOError: # pragma: no cover if not self.dry_run: raise f = None else: first_line = f.readline() if not first_line: # pragma: no cover logger.warning('%s is an empty file (skipping)', script) return match = FIRST_LINE_RE.match(first_line.replace(b'\r\n', b'\n')) if match: adjust = True post_interp = match.group(1) or b'' if not adjust: if f: f.close() self._fileop.copy_file(script, outname) if self.set_mode: self._fileop.set_executable_mode([outname]) filenames.append(outname) else: logger.info('copying and adjusting %s -> %s', script, self.target_dir) if not self._fileop.dry_run: encoding, lines = detect_encoding(f.readline) f.seek(0) shebang = self._get_shebang(encoding, post_interp) if b'pythonw' in first_line: # pragma: no cover ext = 'pyw' else: ext = 'py' n = os.path.basename(outname) self._write_script([n], shebang, f.read(), filenames, ext) if f: f.close() @property def dry_run(self): return self._fileop.dry_run @dry_run.setter def dry_run(self, value): self._fileop.dry_run = value if os.name == 'nt' or (os.name == 'java' and os._name == 'nt'): # pragma: no cover # Executable launcher support. # Launchers are from https://bitbucket.org/vinay.sajip/simple_launcher/ def _get_launcher(self, kind): if struct.calcsize('P') == 8: # 64-bit bits = '64' else: bits = '32' platform_suffix = '-arm' if get_platform() == 'win-arm64' else '' name = '%s%s%s.exe' % (kind, bits, platform_suffix) if name not in WRAPPERS: msg = ('Unable to find resource %s in package %s' % (name, DISTLIB_PACKAGE)) raise ValueError(msg) return WRAPPERS[name] # Public API follows def make(self, specification, options=None): """ Make a script. :param specification: The specification, which is either a valid export entry specification (to make a script from a callable) or a filename (to make a script by copying from a source location). :param options: A dictionary of options controlling script generation. :return: A list of all absolute pathnames written to. """ filenames = [] entry = get_export_entry(specification) if entry is None: self._copy_script(specification, filenames) else: self._make_script(entry, filenames, options=options) return filenames def make_multiple(self, specifications, options=None): """ Take a list of specifications and make scripts from them, :param specifications: A list of specifications. :return: A list of all absolute pathnames written to, """ filenames = [] for specification in specifications: filenames.extend(self.make(specification, options)) return filenames PK7QYJy~~=__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/t32.exeMZ@ !L!This program cannot be run in DOS mode. $qv%%%[^;%%Ӎ%%Ӎ=%%Ӎ %%h0%%%%Ӎ %%Ӎ9%%Ӎ>%%Rich%PEL b  ;@2@l<`S @\.text `.rdatab,.@@.datad7  @.rsrcS`T@@.reloc(n@BU"A3ʼnE}uEEPu hhP$Ph< A9@P j@M3< U"A3ʼnE}uEEPu hhP^Phx A@P j@M3 UMW3FP.APQQ t.A ;uHE+D0ϋ_]U,VWh AE3h;AP}}8 3;h AQjWuw$uE$UE;}}WuuJ$uhjSS9 ;t+EjY}E~V+EEYE;}}Wuu#uVju>u3;h AuPUE+EjEYu}E7 ,MMj)Muu}#uWjS3; AVPf A$f;u]TEy3jPu,#uWjS3;VP$Df Af;tH;sEu%EY_^U Vj.u3u YYtVh=AhVuV@ttFqWh AEPEP#uui;uIEP AWu Vh=AhPuV@uEPWV ;u3Fu Y_^U}t }v)}w#h;At%;Ajphp;Aj P @3@]UuL@tuEujju@]3@]UQf}rotkUW8k;rWSVh @t<^ YE};s++ttt P/%Y;]ruY^[_UVWh @yuYYx PYWUY_^]UVW P Pu @P Et; ;t;;t;;5@@SjjjE։E( P*# P#5H@YY;t9]u3Sj֋E;t9Eu jjփeE;t9Eu jjփeE;u3;Eue;Eue=X@tt Sjj39]t}t uSj9]t}t uSj[_^Ud "A3ʼnEESVW3WW<@3;h Ah;AQYYPjpp;AVj 5h;A,@tpu3@3h, AP ;A0YYjpVj 5h;A @hL APjDWPcP4@5@@jjjS$l APKVh AP4h AP h=APWWWjWWW@;u=D@WQRQPWh @Ph AW15=A5h;A@YPh8@H=w PT@jh@P@h, AP0YY5=AX@Wj5=A@P5=A$@hL APYY@UQSVW=L@p ASu׋t>FEft"tjPYYu Su׋uӅt ]]j h| ASa3ɅSh AQg{ftjPBYYt3@3Sh AP8 ftjPYYuf?tjPYYuf9ujPYYt3fW`Sh AjX=APf;"u&3f>"ShH AP3f jh ASk tf{"t3f>"Sh APa ft&jP?YYt3fjP*YYt fuE 0_^[U0"A3ʼnESVW@f8"tj j"YQP7YYu Dž A$pjPYYt fu牵W;AVj(@f=;A"t Dž;A3ɍf B.AP3hAPNY3Y;s t tA;r3hAPYYWP+VSjh0@33;hDAP3fuYYf9tjPYYtf9u3f>#hpAPYYj_jP}YYt f;u3f>!hAPhYYjPMYYt f;u荅PVS3hAP%39hAPj[SWh A$uvh;AhP4 PP@f"u+j[G j"P 3WhH AP3f_PPPT@ǍPffu+Hffu+Hffu+ȋPffu+jt1VD3h<APWhpAVVS2 0Sy; "Au@j hPA#3}3];;uP#3{3u ;;t3f9>;t!E;u #ɉ}f9;u #jEPh"A$% PuVSEE EO#u^YËUVuu"j^0 $huu  t3t"^]ËUEfU f;tfuf9t3]j hpA"3u3;;u'"| K39} ;t߉uV5Y}V%؍EPWu Vr&EVS&E EU"udYËU}t-uj5$2Al@uV!D@PF!Y^]ËUQeVEPu u1 u9EtU!t L!M^ËUEVF uc=FHlHhN; h+At )AHpu;F;((AtF )AHpu3FF@puHpF  @F^]U3SW9E]u  } tVuM0ExuA+;Ar Zw Ar Zw MtDft?f;t8EPP?EPP?Mt ftf;t+}^tMap_[ËU=T2AVuy39Euu cM t+Ar Zw Ar Zw Mt ftf;t+juu u^]ËUS]woVW=$2AuCjGBhW?YYt3@Pj5$2Ap@u&j ^98At SDYu00_^SCY 3[]ø Aá`WAVj^u;}ƣ`WAjPTFYYDGAujV5`WA;FYYDGAujX^3ҹ ADGA  "A|j^3ҹ AW FAt;tu1 Bp A|_3^H=2AtF5DGAYËUVu A;r"`"Aw+QJN Y Vt@^]ËUE}PIE H Y]ËE Pt@]ËUE A;r=`"Aw` +PHY]à Px@]ËUME }` QHY]à Px@]̋D$ StRT$3ۊ\$ t 2trt2urWߋ_t 2t@u[Ãr 3˿~3σtJ2t#2t2t 2t_B[ÍB_[ÍB_[ÍB_[ËUEt8uPaY]ËUQQ"A3ʼnESV3W;uj^0O,uVJYY;Er3fՋE @;u)f9tAr Zw ff9u3SSjVWPJȃM;u|*q9Ms3f[j"];~Cj3Xr7D =w J;tPY;t M؅u  놋E QSjVWpdItSuVl j*YSYƍe_^[M3)ËUuMUMEPu n}YYtMapËUju u ]ËUEPjuuu uP ]ËUMS] VW}M]t}tug3_^[Ëut 39Ev!t SjQR t39Ew}F }tFEEF tDFt=;r;}W6uuQ)~>}+߃)}};]r\}t3;v uu+ ;w;Ew[PuVYPMP t{tdE+)E$VXIYtR}t"MEFKME&E} tu jugQ "N +3uN j hA3u9ut/9ut*9uu-} tu Vu Q I3uaYuuuuu uEEEuYËUuuu juZ]j hA3ۉ]3};;u 39] ;t܉}WY]G @uoWYttȃ FAx+AA$u)tt FAx+A@$t"wM9]u#WEPSu WPEWVE EeutYËUQf9Eu3øf9EsE -AAEPjEPj|@u!EEM #ËUEuf]Ë@]ËUE.A]ËU("A3ʼnES]WtS[YjLjPN0 ffffffEMDž0IM M@j@P@uu tSZYM_3[ËUV5.A@u@.A^]ËVjVj V@P@^ËU5.A@t]uuuu u3PPPPPËUQEu~3Vu t MuuU3Wft.>u ftf;t fuf>t fuf9Mt tat0rt#wtA3a 3ۃM M3AWf;y@St  tRHtCt- t!9EE @@EE ljE}utE nTtZtEHt0 tuE G}u;eE1}u% UEut3 ؃f}j _f9>tjVh@g f9>tf>=uuf9>tjh@VV u Ajh@V7 u "jh@V uf> t3f9>thuE SuPft3 E.AMH M x8xxH_^[jhA33}j-Y]3u;5`WADGA9t[@ uHuAFwFP,YDGA4VvYYDGA@ t PVYYF둋}cj8p(Y DGA;tNhDGA P@DGAu4YDGA Pt@DGA<}_ ;tg ___OE Ë}j+YËUE3;͐"AtA-rHwj X]Ë͔"A]DjY;#]Au#AÃ.u#Aà ËUVMQY0^]hA@d5D$l$l$+SVW"A1E3PeuEEEEdËMd Y__^[]Q̋US] Vs35"AWEE{t N3 8N F3 8E@fMUS[ EMt_I[LDEEtEx@GE؃u΀}t$t N3 8N V3 :E_^[]EɋM9csmu)=8GAt h8GAdtUjR8GAM UE 9X th"AWӋE MH t N3 8N V3 :rEH*9S Oh"AWASVWT$D$L$URPQQhC@d5"A3ĉD$d%D$0XL$,3p t;T$4t;v.4v\ H {uhCReCded_^[ËL$At3D$H3Uhp pp> ]D$T$UL$)qqq( ]UVWS33333[_^]Ëjd33333USVWjRhD@Q~_^[]Ul$RQt$ ]UVuVPdYYt| ;u3@;u`3@.AF uNSW<2A?u S#YuFjFXFF ?~>^^N 3_@[3^]ËU}t'Vu F tV %f f&fY^]ËU@ @txtPudYYf;u]]ËUx"A3ʼnEESVu 3W}u 9u*L8t `p ;t3҉f; j[ AfXw(A3HAjZ; $YQ@3  tJt6t%+t    f*u,j X k ɍDЉ= 1 f*u&  k ɍDЉItWhtFltwf>lu 6uf~4ud3uf~2u@d7i.o%uxX QDž|d/St~At+tY+t+ Dž@Dž0 0u u u -AQPbYYtFF9|X+++3F tBPƅPP2ayf6t:Ht3t+Dž-AP `Ypegitqnt(oDžtaU7_c t ffDž@Dž Wufgu]DžQ9~~7]VnYt Dž5@GPPSP5.AЋtuPS5$.AYYfguuPS5 .AYY;-uCSDž$si+Dž'Džlj0XfQfGM t@tGGG@t3҉@t|s؃ځu3} Dž9~ u! t-RPWS^0؋9~N뽍+Ft_tƀ80tT0=u -ADž Kf8tu+@t+tj-tj+tj YfDž++ u$j OYtPS8YYt/u&j0OYt⃽uk~aPWPK[~$(Y.%7YY|3t*j OYtރtYft/kct `pM_^3[NÐH@F@G@cG@G@G@H@ I@jhj@3Ʌ$2AËUMtj3X;E ss 3]M VuF3wVj5$2Ap@u2=8AtV_YuҋEt 3 Mt ^]-t"t t Ht3øøøøËVWh3FWP'3ȋ~~~  ~$A F+ο@Ou@Nu_^ËU"A3ʼnESWPv@3@;rƅ t0;w+@P j R& Cujv vPWPjj]3SvWPWPWv S}\DSvWPWPhv SX\$3EtLtL @;rRDž3)ЍZ w LQ w L QA;rƋM_3[jj hA( )AGptltwhuj Y@j Yewhu;5((At6tV@u$AtVY((AGh5((AuV@E뎋uj YËUS3SM(2Au(2A@8]tEMapE,(AD;FG;v}>uЋuE}urlj{CijC C4(AZf1f0JuL@;v~0C@IuCC Ss3ȋ {95(2ATM_^3[ajhAM}_huqE;CWh :Y؅Fwh#SuYYEuvh@uFh=$AtPY^hS=@Fp )Aj YeC82AC<2AC @2A3E}fLCf E,2A@3E=} L &A@3E=}('A@5((A@u((A=$AtPY((ASE0j Y%u $AtSY]eEÃ=,GAujVY,GA3ËUSV5@W}W֋tP֋tP֋tP֋tP֍_PE{$)At tPփ{t CtPփMu֋P_^[]ËUW}SV5@W֋tP֋tP֋tP֋tP֍_PE{$)At tPփ{t CtPփMu֋P^[_]ËUSVu3W;to=8.Ath;t^9uZ;t9uPZYY;t9uP?ZYYYY;tD9u@-P+P+Pu=()At9uPEVLYY~PE$)At;t 9uP'Y9_tG;t 9uPYMuVY_^[]ËUW} t;Et4V0;t(W8jYtV>Yu*AtVsY^3_]j h8A )AFpt"~ltpluj $Yj Ye5h+AlVYYYEEj Yuj@@V5p+A@u5H2A@V5p+A@^ál+AtP5P2A@Ѓ l+Ap+AtP@ p+AjhXAhL@@uF\Af3G~~pƆCƆKCFh$Aj Yevh@E>j uY}E Fluh+AFlvlYEa3Guj ^Yj UYËVWD@5l+AЋuNhjl YYt:V5l+A5L2A@ЅtjVYY@N VY3W@_^ËVujY^jhAduF$tPGYF,tP9YF4tP+YF7֋5(GA֋5$GA9]u9Et]܉]ЉE؋}ԋ]E@}@sEtЃEE@}@sEtЃEE }u)2Aj Yu}tjYËUjju ]ËUjju ]jjj jjjz ËUu2Yh̋U3M; @t @r3]Ë@]ËU"A3ʼnESVuWV3Y;lj\Yj\Yu ="A6h@h2AW h2AVSf4A(@uh@SV t 3PPPPPV0@YWL@t3%>uN@ uNhF P@t,F N@Ch5FA@3_[^ÃUVW3uYu'98AvV@;8Avuʋ_^]ËUVW3ju u} u'98AvV@;8AvuË_^]ËUVW3u ubXYYu,9E t'98AvV@;8Avu_^]ËUVW3uu uX u,9Et'98AvV@;8Avu_^]jhAt3ۉ]jY]j_};=`WA}TDGA9tE@ tPVYtE|(DGA P@DGA4 YDGAGE E3j6YËUSVuF Ȁ3ۀu@t9FW>+~,WPVYP_ ;uF yF N _Ff^[]ËUVuu V5Y/V|YtF @tV臿P_YY3^]jhA(3}}jBY}3u;5`WADGA98t^@ tVPVYY3BUDGAH t/9UuPJYtE9}utP/Yu E܉}F3uDGA4VYYE}EtEjYjYËVW38A<+Au+A8h0@t F$|3@_^Ã$+A3S@V+AW>t~t WWݲ&Y,A|ܾ+A_t ~uPӃ,A|^[ËUE4Ÿ+Ax@]j hA3G}39$2Auj\hlYYu4+A9tmjY;u 3Pj XY]9u+hW@uW Y ] >WYE E&j )YËUEV4Ÿ+A>uP#YujWY6t@^]ËU SW3j3Y}]9]u8荾}Vu ;t;ufkE;w}uEuEBuuPuUE;t5;|"MxEEPSYYtE39]\>^_[ËU}uֽ]S]VuWuu9u u3t} uD4uuu;v*8CSVh@uG 8"uY8PWVh@D>u}u8"u%yu" _^[]ËUujuuu u]ËUE~ PuYYuuPuu u@]ËU39E vMf9t @;E r]QL$+ȃ YgQL$+ȃ YgUQVu VtE F Yu N /@t "S3ۨt^NF F F ^] u,ٱ ;t ͱ@;u u 8YuVhYF WF>HN+IN;~WPu X EM F yM tt FAx+A@ tjSSQeg#ƒt%FM3GWEPu oX E9}t N E%_[^ËUVuuںF @t F F u VgYFvvV赸YPg FF uQV苸Yt0VYt$WVrV< FAbYY_x+A@$'} ~0EM PE>u?*u˰?P} Ճ?uE^ËU"A3ʼnES] Vu3W}u¤u+Et `p7 F @u^VGYx+Attȃ FAA$uttȃ FA@$q3;g C39y B@Dž W @9} DžjugucDžW9~~=]VYt Dž5@GPPSP5.AЋtuPS5$.AYYguuPS5 .AYY;-uCSDž*snHHXDž'Dž2Qƅ0Dž t@tGGG@t3҉@t|sځu39} Dž9~ u!u t-RPWS)0؋9~N뽍E+Ftbt΀90tW0@?If90tu+(u -AI8t@u+@t5t ƅ-t ƅ+ tƅ Dž++ u% OFtP2YYt.u%˰0O7Ftヽtu~qPjEPPcVu69t.EPYYu#P]YY|2t) O^Et߃tYtrt `pM_^3[Ð>~@=|@m|@|@}@"}@h}@~@%EAËUVuV蚩YuA MWuju P@uD@3t P1Y FAD0 _^]jhPA#]u Ź x;FAr蹹 螹 ҋ< FAD0tS"YeD0tuu S ED L ME E謹Ë]SjYËUQC @VEt {uE C'} ~5EM P2E>Yu?*uj?Y} Ѓ?uE^ËUx"A3ʼnES]Vu3Wu} ?u+0腣t `p 3;tf; jY9x BfXw A3k 0 Aj^;O $@3 ƒ tHt4+t$+t   f*u+f T k ʍDЉ9 - f*u%  k ʍDЉƒItQht@ltwf?lu 6uf4um3uf2uOdFi=o4u+x"XRDž賹Yƒd1StAt+tZ+t+ Dž@Dž0 0u u [u -AQP* YYtFF9|X++3F tBPƅPPfyf6t:Ht3t+Dž-APTYpegitnnt$otbV[x t ffDž@Dž ދCSufguWDžK;~ȁ~7]VYt Dž5@CPPWP5.AЋtuPW5$.AYYfguuPW5 .AYY?-uGWDž$s{+Dž'Dž|j0XfQfWW t@tCC@Ct3҉@t|s؃ځu3} Dž9~ u! t-RPWS$0؋9~N뽍+Ft^tƀ80tS0=Yxt"jWYYtAVWP脠 uI4~f>u5.A%.A# GA3Y[_^5p2A%p2A3PPPPP袔̋V@3;u3^f9tf9uf9uS+ƍXWSYu V@_[^SVW UVuF ttvcf 3YFF^]ËUE8csmu*xu$@= t=!t="t=@u"3]h@@3ËUV2N\UW9t ;r;s9t3tPu3u `3@M S^`N`Hj$Y~\d9 |~d=u Fd~=u Fdn=u Fd^=u FdN=u Fd>=u Fd.=u Fd=u Fd=uFdvdjY~d`QY^`[_^]Ã=,GAuV5.AW3u<=tGVzYtujGW YY=h2Atˋ5.AS3VI>=YXt"jSYYt?VSPN uG>u5.A%.A' GA3Y[_^5h2A%h2A3PPPPP裑̋UQMS3VU 9Et ]EE>"u39E"FE<tBU PFEYt} t M E FU Mt2}u t utBe>< t< uFN>}t EE3C3FA>\t>"u&u}t F8"u 339EEtIt\BuU tU}u< tK< tGt=Pt#8DYt M E FM E  DYtFU FVtBU ME^[t ËU S3VW9,GAu蘼h:AVS;A @WW6x Ej[+PD=P6j% ;݃ FAD$2M0 FAD$M ʀ}u!Etȃ FAD M#;u~EtxuX@juEjPuE%Pu $@;u4D@Pȃ FAD 6脊Y6 FAEUSSSSS蛆jhpAɛ3}3u;;uhj^0辆Y39};t9}tE%@tʉ}uuu uEP\EEE;t芛3u9}t(9}t FAD 6 YËUjuuuuu !]ËU}u3]ËU MMtft f;u +]̋UMMZf9t3]ËA<8PEu3ҹ f9H‹]̋UEH<ASVq3WDt} H ;r X;r B(;r3_^[]̋UjhAhA@dPSVW"A1E3PEdeEh@*tTE-@Ph@Pt:@$ЃEMd Y_^[]ËE3ҁ9‹ËeE3Md Y_^[]USVWUjjh(@u>]_^[]ËL$At2D$H3TuUhP(RP$R]D$T$SVWD$UPjh0@d5"A3PD$dD$(Xp t:|$,t;t$,v-4v L$ H |uhDID_뷋L$d _^[3d y0@uQ R 9QuSQ-A SQ-AL$ KCk UQPXY]Y[ËUEuΗ 3]Åx;FAr賗 ދȃ FAD@]ËU"A3ʼnESVu F @W6VYx+At.VڀYt"V΀V< FA辀YYÊ@$$<V蝀Yt.V葀Yt"V腀V< FAuYYÊ@$$<VTYt.VHYt"V<V< FA,YY@t]uEjPEPX1t]39}~0NxL=AD=VPJYYtG;}|fE Fx Ef EVP7YYM_^3[rËVW3.A@.A(r_^á"A39$;A̋L$t$tNu$$~Ѓ3ƒtAt2t$tt͍AL$+ÍAL$+ÍAL$+ÍAL$+ËUSVu 3;t9]t8uE;t3f3^[uMsE9XuE;tf8]tE`p3@ˍEPPYYt}E~%9M| 39]RuQVj p0@EuM;r 8^t8]fMapZg*8]tE`p;39]PuEjVj p0@:뺋Ujuu u]ËUu MrEMA%}tMapËUjuYY]VD$ u(L$D$ 3؋D$d$ȋd$Gȋ\$T$ D$ ud$ȋD$r;T$ wr;D$v N+D$T$3+D$T$ ؃ʋӋًȋ^U"A3ʼnEUS3VW;~EI8t@;u+H;}@E]9]$u E@E$50@39](SSuuPu$֋};u3R~Cj3Xr7D?=wZ;tP5sY;t E]9]tWuuuju$օ5@SSWuuu ։E;Mt)E ;9EPuWuuu };~Bj3Xr6D?;w;thPxrY;t 3;t?uWuuuu օt"SS9] uSSu uuWSu$@EW uYuuEYe_^[M3mËUuMou(Eu$u uuuuu P$}tMapËUQQ"A3ʼnES3VW]9]u E@E50@39] SSuuPu֋;u3~<w4D?=w^;tP9qY;t ؅t?PjS WSuujuօtuPSu |@ESsEYe_^[M3lËUuMnu$Euuuuu P}tMapËUVucvmvmv mvmvmvm6mv mv$mv(mv,mv0mv4mvmv8mvl3l(llllkkkkkkkkkk@ kkukjk_k Tk$Ik(>k,3k0(k4k8k<k@jDjHj@LjPjTjXj\j`j^]ËUVutY;8.AtP~jYF;<.AtPljYF;@.AtPZjYF0;h.AtPHjYv4;5l.AtV6jY^]ËUVuF ;D.AtPjYF;H.AtPiYF;L.AtPiYF;P.AtPiYF;T.AtPiYF ;X.AtPiYF$;\.AtPiYF8;p.AtPiYF<;t.AtPiYF@;x.AtPniYFD;|.AtP\iYFH;.AtPJiYvL;5.AtV8iY^]UV3PPPPPPPPU I t $uI t $s ^ËUUVWt} u臊j^0u3Eu+ @tOuuQj"Y3_^]̋T$L$u<:u. t&:au% t:Au t:au uҋ3Ðt:u ttf:u t:au tUWVu M};v;r=EAtWV;^_uy,ur)$@Ǻr $@$@$@@@@d@#ъFGFGr$@I#ъFGr$@#ъr$@I@Ը@̸@ĸ@@@@@DDDDDDDDDDDDDD$@@@@(@E^_ÐE^_ÐFGE^_ÍIFGFGE^_Ðt1|9u$r $@$<@IǺr +$@$@@Ĺ@@F#шGr$@IF#шGFGr$@F#шGFGFGV$@I@@H@P@X@`@h@p@@DDDDDDDDD D DDDD$@@@@Ⱥ@E^_ÐFGE^_ÍIFGFGE^_ÐFGFGFGE^_UV3PPPPPPPPU I t $u t $sF ^jhA4襢@xte3@ËeE)Mh0@@0;AËUE4;A8;A<;A@;A]ËUE L AV9Ptk u ;rk M^;s9Pt3]5<;A@j hA舅3}}؋] KtjY+t"+t+tY+uCY}؅uT4;A4;AUw\]YpQÃt2t!HtЄ%p빾<;A<;A8;A8;A @;A@;AEP@E3}9Euj49EtP߰Y3Et tuO`MԉG`u>OdMGdu, @ AM܋ D A @ A9M}Mk W\DEEuwdSUY]}؃}tjpYSUYt tuEԉG`uEЉGd37ËUEH;A]ËUEL;A]ËUQSV5@W5(GA5$GA؉]֋;+GruS'؍GY;sH;s;rPuOYYuC;r>Pu9YYt/P4@(GAu=@׉Vף$GAE3_^[ËVjj 襪YYV@(GA$GAujX^Ã&3^j hAeuYEE EעËUuYH]̋U$"A3ʼnEESEE VWE7e=P;AEu}h A(@؅=@h ASׅ5@Ph ASP;APh AST;APhh ASX;AP֣`;AthP ASP֣\;A\;AM5@;tG9 `;At?P5`;A֋؅t,t(ׅtMQj MQjPӅtEu M 3T;A;Et)Pօt"ЉEtX;A;EtPօtuЉE5P;Aօtuuuu3M_^3[a]ËUVuWt} uȀj^0l_^]ËMu3f݋f:tOut+f ftOu3ufvj"Y몋UUS]VWuu9U u3_^[]Åt} u;j^0k݅u3fЋMu3fԋƒu+fft'Ou"+ fftOtKuu3fy3uM jPfDJXdfj"YjUMx~ u.A]á.A .A]qj]ËU}u u `Y]Vu u u]Y3MW0uFVuj5$2A,@u^98At@V3YtvV#Y~ 3_^]~D@P~Y~D@Py~YʋUM S3;vj3X;Es~ 3AMVW9]t u"YVuYYt;s+VjS _^[]ËU"A3ʼnEE VuW34809}u3;u~8}JiS FAL8$$?tu'Mu} }hD8 tjjjVwVYD@l39H P44@3;`;t 8?P0@4 3,9E#@?g $3 ǃx8tP4UM`8jEPKPYt:4+M3@;jDSPQ C@jSDP- n3PPjMQjDQP C@@=j,PVEP$4@ @089,j,PjEP$E 4@,08<t<u!33Ƀ @D<t<uRDYf;DI8t)j XPDYf;D80E9@8T4D83ɋD8?D49M3+4H;Ms&CA u 0 @F@FrՋH+j(PVHP$4@C(8;;+4;El%?49MH@+4jH^;MsCΉ u0j [f @@fƁ@rH+j(PVHP$4@i(8;a+4;EGK4,9Mu,@+4jH^;Ms;,,΃ uj [f@@fƁ@r3VVhU QH++PPVh@;j(P+P5P$4@t (; D@D;\,+48;E ?Q(Qu448@t(D8 D@D8ulDt-j^9Duw w0?DwY1$D@t48u3$www 8+0[M_3^SjhAw]uCw (w x;FArw w Vbҋ< FAD0tSfYeD0tuu Sn Ev v ME EwË]SfYjh0Av]u\v x;FAr=v aڋ< FADtSeYeDt1SDeYP8@u D@Ee}tuMu ME E6vË]SeYA @tyt$Ix  QP{YYu ËU"A3ʼnES] Vu3W}uStu+tC`t `pa F @u^VE^Yx+Attȃ FAA$uttȃ FA@$q3;g C9 B@Dž GW @} DžjugucDžW9~~=]VYt Dž5@GPPSP5.AЋtuPS5$.AYYguuPS5 .AYY;-uCS*stHH[Dž'Dž5Qƅ0Dž t@tGGG@t3҉@t|s؃ځu3} Dž9~ u!u t-RPWS0؋9~N뽍E+Ftct΀90tX0@@If8tu+(u -AI8t@u+@t5t ƅ-t ƅ+ tƅ Dž++ u% OztPYYt.u%˰0Otヽtu~qPjEPPIu69t.EPqYYu#PCYY|2t) ODt߃tHYt3dt t `pM_^3[EÍIZ@W@@@1@=@@@QL$+#ȋ%;r Y$-UQQE VuEEWVE,XY;uh NjJuMQuP@E;uD@t PhYϋ FAD0 EU_^jhPAh]܉]Euhh Mh Ëx;FAr@h %h zSы< FAL1tPWYeD0tuuu uE܉Ug g ]܉]E E܋U&huWYËU.AhYMAt I AI AAAAa]fQSuƒt7$ffAfA fA0fA@fAPfA`fApHuЅt7tIfIHut3tIJutAHu[XËۃ+3RӃtAJutIKuZUj <@EA3ËUSVu 3W};u;v E;t3{E;tv;fj^0QVuMDE9XfEf;v6;t;v WSV豞 e*e8]tMap_^[;t&;w ej"^0Q8]tE`pyE;t8]HN++ˉN~WPu D EN F =M tt FAx+A@ tSjjQ#ƒt-F]fjEPu ]f] E9}t N %_[^jYWƃуtefofoNfoV fo^0ffOfW f_0fof@fonPfov`fo~pfg@foPfw`fpJutItfofvJut$t vIuȃt FGIuX^_]ú++Q‹ȃt FGIut vHuY tjY.Atjh@j}E jq~̋U}u[F]uj5$2A\@]ËUQ=.Au.AujMQjMQPD@tfEËUS39]u3AVWupjV9 ;tuVWQ u SSSSSE3_^[]UWVSM tMu} AZ I& t' t#:r:w:r:w:u u3:t rً[^_3PPjPjh@h, A$@.Aá.At tPX@̋D$L$ ȋL$ u D$S؋D$d$؋D$[%@$2L^v,<P`pF4$ $0H`r0BXdr~,BT`r  :J`zR"@X@S@@_@@:#@ bM.AP/AccsUTF-8UTF-16LEUNICODEHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunKERNEL32.DLLFlsFreeFlsSetValueFlsGetValueFlsAlloc  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CorExitProcessmscoree.dllruntime error TLOSS error SING error DOMAIN error R6033 - Attempt to use MSIL code from this assembly during native code initialization This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain. R6032 - not enough space for locale information R6031 - Attempt to initialize the CRT more than once. This indicates a bug in your application. R6030 - CRT not initialized R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data R6010 - abort() has been called R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point support not loaded `@@ @ h@@@h@@@P@@p@ @@@ @!@x@y@zh@`@@@Microsoft Visual C++ Runtime Library ...<program name unknown>Runtime Error! Program: (null)(null)EEE50P( 8PX700WP `h````xpxxxx ((((( H h(((( H H  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  GetProcessWindowStationGetUserObjectInformationWGetLastActivePopupGetActiveWindowMessageBoxWUSER32.DLLEEE00P('8PW700PP (`h`hhhxppwppCONOUT$Fatal error in launcher: %s Fatal error in launcher: %s rbFailed to open executableUnable to find an appended archive.Unable to read from file#!PATHEXT;Job creation failedJob information querying failedJob information setting failedmaking stdin inheritable failedmaking stdout inheritable failedmaking stderr inheritable failedUnable to create process using '%ls': %lscontrol handler setting failedFailed to get exit code of process.exe/usr/bin/envExpected to find a command ending in '.exe' in shebang line: %lsExpected to find whitespace after '/usr/bin/env': %lsUnable to find executable in environment: %lsExpected terminating double-quote for executable in shebang line: %ls<launcher_dir>\Terminating quote without starting quote for executable in shebang line: %lsFailed to find shebangExpected to find terminator in shebang lineExpected to decode shebang line using UTF-8Expected to find '#' at start of shebang lineExpected to find '!' following '#' in shebang lineExpected to find executable in shebang lineExpected to find arguments (even if empty) in shebang lineExpected to be able to allocate command line memory"%ls" %ls "%ls" %lsH"A0ARSDS#YDkE@WC:\Users\Vinay\Projects\simple_launcher\dist\t32.pdbAC0g@a@()@Q*@d/@o1@43@p2@?6@7@8@T:@;@;@@@T@X@*\@U]@d]@_@#_@c@j@ l@k@m@Ty@ @,@ۧ@@P@T@=@@@@@ L$2L^v,<P`pF4$ $0H`r0BXdr~,BT`r  :J`zRExitProcessGetCommandLineWSearchPathWqSetInformationJobObjectCreateProcessWpSetHandleInformationWaitForSingleObjectExAssignProcessToJobObject^FormatMessageWGetExitCodeProcessGetModuleFileNameWQueryInformationJobObjectgMultiByteToWideCharcGetStartupInfoWGetTempPathWCreateJobObjectAdGetStdHandleGetLastErrorSetStdHandleGetFileType-SetConsoleCtrlHandlerMSetCurrentDirectoryWRCloseHandleKERNEL32.dllPathRemoveFileSpecWEStrStrIW:PathCombineWSHLWAPI.dllHeapFreeHeapAllocEnterCriticalSection9LeaveCriticalSectioniGetStringTypeWUnhandledExceptionFilterSetUnhandledExceptionFilterIsDebuggerPresentEncodePointerDecodePointerTerminateProcessGetCurrentProcessInitializeCriticalSectionAndSpinCountGetCommandLineAHeapSetInformationRtlUnwindHeapCreaterGetCPInfoInterlockedIncrementInterlockedDecrementhGetACP7GetOEMCP IsValidCodePageTlsAllocTlsGetValueTlsSetValueTlsFreeGetModuleHandleWsSetLastErrorGetCurrentThreadIdEGetProcAddress%WriteFileoSetHandleCountDeleteCriticalSectionSleep-LCMapStringWReadFilefSetFilePointeraFreeEnvironmentStringsWGetEnvironmentStringsWGetModuleFileNameAWideCharToMultiByteQueryPerformanceCounterGetTickCountGetCurrentProcessIdyGetSystemTimeAsFileTimeCreateFileW?LoadLibraryWHeapReAllocGetConsoleCPGetConsoleModeWFlushFileBuffersIsProcessorFeaturePresentdCompareStringWWSetEnvironmentVariableWSSetEndOfFileJGetProcessHeapHeapSize$WriteConsoleW`GA`GAN@D        ! 5A CPR S WY l m pr   )     abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$A`y!@~ڣ @ڣ AϢ[@~QQ^ _j21~CH@D@@@<@8@4@0@(@ @@ @@@@@@@@@@@@@@@@@@@@@@@@t@l@`@T@P@L@@@,@ @ @@@@@@@@@@@@@l@d@\@T@L@D@<@4@,@$@@@ @@@@@D@@@@@@p@\@T@L@8@@@$)A$)A$)A$)A$)A8.AA0AA()A*AA @A0AAA 4@4@4@4@4@4@4@4@4@4@..0.A(;A(;A(;A(;A(;A(;A(;A(;A(;A4.A,;A,;A,;A,;A,;A,;A,;A8.A.K0x 8Pehf 0 @Pb8e(`fohpt%h(hZ( @...GGGWWWiiiuuu ̀ ww ww||wwwwwwwwfwwwww|fwwwwwwffwwwwwwffwwwwwfflwwffffffwfffffflwffffffwffffff|ffffffffR\Ilffl)ffح2L18Ϥ"A< ΣTπU  ؀ ???????( 444MMMSSSzzzp p{p{ffkof_fffk_fff[f}UUUfL4UUU_kJqO_~'[U_Uwwwww{~( @%%%+++000===AAAIIIMMMQQQVVVYYY]]]~dFgggjjjmmmrrruuu}}}u?z=~;gEkCoAr@:IbpƏKУk(,1?5<\CKQsU[cbð/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq_______CCBABADL*(%$""&GABJIIDDJC??AD_-(''%$GG#_DIJIIJIIIDIJDD_+)(''%GG _JMCEJ?ABAECA?BA_,+)('%%"!_IM@AJACDCIDI____.,++>________JMJJJJJJJJJF_..,+)('%$"! #GIMCEJJJI?J__...,+(('%$"! &_JM?AJJJJCJ__...,+)(''%$" _IMJJJJJJJJ_K=...,++(''%$! _JMCDJJJJAJ_K_______L*%$"!_I_?AMNJJEJ_ L'%$"_I_MMMMMMJJ_ _('%%_I_CEMIJJMEM _(''*_I_?BMDJEMDMF _)(-LI_MMMCMMMMM_________< ____I_CEM1;MACDMEJM__I_?A_D1@IJJMJMM_FF_I__6_@/EMMMNMM_FF_I_C80EJDMJCJFF?:AA20?_M_MIEM______MIC4BC/ N______MMMMJIDAI_9/ HJJMMJMMMJ??BAI_A7503 IJMMCBCBA44CCI___BAO;6___C_MJIDIDMI_CI___O; @__C_C?J?AJI_?A_DJJI@ O_CM?;I?JI_________H9MAIJJIJI_CD_____JJI73C;IJIJI_?AMDJJDIMJIE5:JIJI__________MMIA:IJJJJJJJJJJJJJJJJMJ???( 444MMMRRRYYY~eGuuu}}}x>iErCE~7?HVbx/!P7pLcyϏ1Qq/Pp",6@J[1qQq/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq!%///* !*/"(%%'%/) /!#''////+/+"*(/ / !%(/ ( (*/ (///) */   )*  /"///// /+/// # + !%//  +"*+'#+//+'!%*++$++!+! !!!<(0`  !!$& &"   WܱNj+<<:5pi$!!!4888&SNJFB=950,(%%%5ǎVRNIEѹ|Jq?o@ZUQMID@<73/+&"-Ɍ444"ք̴wq?]YUPLHC?;72.*%!"""4888&dya\XTPKGC>:61-)% OÑ%%%5ʎA{;ys`\WSOJFB>951,($(9|:z;xq?o@mAkBiCgCdDuZ;73.*Ǒ%%%5̎È>89}:{;yq?o@mAjBhCfD~dEuZ?:625Оa789}:{;yr>p?n@lAjBhCfD}dEB>:5^ό555"܄ѳ„7789}:{;xr?p@n@lAjBgCeDFA=9"""4;;;&ŌC89~9|:z;xr?p@mAkAiBgCIELɑQQQJnnn~~~Įq?o@mAkBiCHHH"""vvv9~:{;yq?o@mAkB:::'''___sssttt8Ϧuǣvyp?n@lA888T---6fffnddd%%%"""OOOSSSċDҧuʤv{;yr?p?xM<<r?̷999VVV###)))444ѳ͝b@~9|:z;}Cg˶Ӎ󑑑ZZZlll;;;!!!""")))___&&&2:::ppp{{{___WWWWWW:::!!!"""***www"""4888&,̑999ԖJJJ|||lll:::"""BBBXXX|||$$$6,uuuKKKCCC@@@...www* Ҍ666"KKKaaaLLLWWW@$"""4;;;&nnnfff!!!$$$999444]ttt|ȇɑ&&&5ЎvvvmmmVVV{{{OOOڥaaaCCCpppό555"ބ|||MMMfff"""4;;;&\\\Ǒ%%%5Ύݧܦ͌555"ۄۥ"""4:::&ڤÑ%%%5ˎܤׇ ww?ww??ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwwwwwwwwwwwwwww?ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwww?wwwwwwww( @ !!!0\\\JeeeQ666D555A0$ vH<602\7qڴvvvj&&&D1"gLF@;5?кVQKE?9(aV[UPJD>82-uuun{{{j`ZTOVo@lAb_YSMGB<60+%<aVmt>q?n@bb^XRLFA;5/)$Ywwwn}}}j~Cv=s>p?bba]WQKE@:4.(+{;xbba[VPJD?93-'aV~:{;xr?o@lAiBfD}dE|cE|cEiB<61?9}:z;w=t>q?n@kAiCfD}cE|cE}dFGA;=aVңi89|:yq?n@kBhCeD|cE|cELF@mzzznjʓP8~9{;yp?mAjBgCeD|cEPJ\¯mAjBgC~dEaV}:z;xq?n@lAiCJJJőPyq?n@~YVVV???wwwiiiΡkA|;y>>3@@@y~~~obbb000kkk@@@---U<<<&&&[[[6uuusssWWWIII$$$&&&qqqlllg|||s4bbbhhhƑUUU000QQQ}}}---{bbb(iiiLLLBBBaVggg+++NNN|||nj]]]tttkkkrrrwwwӦaVӦzzznjӦˉ ?????(  C﫫oIਨS=?_QF4aZмoEcaXMB70~Iq?c`VK@58z;u=qv>3Eyn@iB~dE}dFGHYYYuuuġ=xmAhC}dE}eGS444|||gC}cEMMM~>q?kAiGRRR¢Gu=xKʺ~AAAAAAAAAAAAAAAA ( h00 %   h4VS_VERSION_INFO?fStringFileInfoB080904b0JCompanyNameSimple Launcher User^FileDescriptionSimple Launcher Executable2 FileVersion1.1.0.140InternalNamet32.exej#LegalCopyrightCopyright (C) Simple Launcher User8OriginalFilenamet32.exe@ProductNameSimple Launcher6 ProductVersion1.1.0.14DVarFileInfo$Translation  PAPADDINGXXPAD 0A0Z0t000001)1A12h2y22 33)3S3_3o3333333/44=5q55!6<6H6M6c6l6r666666667,7B7r77777777 88%8+808>8D8M8S8`8f8k888888(999999X:f:::::::;I;m;};;;;>}??? 00,070X120262E22222222222 3/3A3O3d3n3333342458R99999::::;;;<<'<, ?~????000-0M00000*1W1b11111152Z2g22223445P6X6i6u66689S9]9u9999f::::::::::/;4;>;x;};;;;< <<<<$<+<2<9<@>?/?????@T0(0R0c0p0w00000111D1q1112222N3u33445566690;z<<<=>P Y1]1a1e1i1m1q1u111111{222?4P444444445 5$5.5A5e5555T6q66)7H77777 88808I8e8n8t8}8888889R999=:;.;;;; <:}>>>>>3?9?O?T?\?b?i?o?v?|?????????????????`0 0000$0)000?0D0J0S0s0y00P1V1_1f11122#2(2:2D2I2e2o2222222223'3M3T3n3u33B4U4g44444445;5H5]5555%6L6Y6_66666$7+7@7777778F8X8888888%9.9:9s9|999999::D:Q:V:d:?;b;m;;;&<-<7>> >,>U>]>l 0001'191L1^111444555?5V5{55K6X7]7o777788899(9i999992:{:,;2;8;H;S;<<>W>>?:0]004455)5O5a5s5555555566'6777788 8898_8}88888888888888b9m99999999: :$:(:,:0:4:8:<::::::3;j;p;u;;;;;;;;;&<++>4>C>f>k>p>>>???&?+?>$>>&?;?j??40011r111233S555555666667Hh1l1p1t1x11111>>>>>>>>? ???$?,?4?>> >>>>> >$>8><>@>D>H>L>P>T>X>\>h>l>p>t>x>|>>>>PK7QYzA__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/t64-arm.exeMZ@ !L!This program cannot be run in DOS mode. $z)))薜()薚(o)薛()()()()薞()))I()I`))))I()Rich)PEdb" (84@ `H\<T D JTJ8.text, `.rdata@@.data8%p R@.pdata ^@@.rsrcTVl@@.relocD@B0@AT_{011"@1@GI>c2 __S[cks{CsP@uXAw`ByhC{pDa(@@?{EsDkCcB[ASƨ_S[cks{CsP@uXAw`ByhC{pDa(@@?{EsDkCcB[ASƨ_ T!_ "Tb6 ` b6 ` b6"@9b9_BTBcT! BT? @aT @`T L$ L!@!`` Ld LB"Tb06 @" A$B&C!!@!``b dfcBbTb06 L` Lb(6 L`Lb 6 pL`pLb6 p `p b6 ` b6 ` b6"@9b9_!!_ T6!c ` ` 6!c ` ` b6"_8b8_BTBT!BT? @aT @T! @L!$ @L!!c` Lcd LBT!&C$Bc" A @!!fdb `BbT06!c @L` L(6!c @L`L 6!@c@ p@L`pL6! c p@ `p 6!c ` ` 6!c ` ` b6"_8b8_{S[cks!@SP@UXAW`BYhC[pD](@?@BsFkEcD[CSB{A_@xb 4@7 @`T,@_?Tt@Lqn"&"4@| ՠtLqn"&5@`N!Npn&BR@_!@ˢ$@x4!T$@x5ѠA_`7? #T @T,@_?Tc@ˠt@Lqn"&4!˥? CT#CtLqn"&4caT!@T! ˥ˠtLqn"&b4$@xB4!TA_c@ˢ$@x"4!TclT_@8 4 @@T,@_? Tp@L1n"&4@|pL1n"&5@a N!N0n&B R_֥Ѡ_!@ˢ@8B4!T ?@#T @T,@_?lTc@ˠp@L1n"&4!˥?@CT#DpL1n"&B4caT! @T!@˥ˠpL1n"&4@84!T_c@ˢ@84!TclT_C11@c1_1@1@c0TC_ {C{A_Q @s/3CT_t1@?@?T_ NNNN_Tf ib8 * $! )&&&&&&&&&&&&&&&&@q @! @! _@q @! @ _@q @! A9_@q @! _@q @! _@q @ _@q A9_@q _H@ qL@qL_R_TIE)@LTB@_H @TAB@qLIF     )@!LTB@B_+T@LBT__@lTChhb8c`(($TJ ) @ $Z_@(@Tc  `$Z_D@(D@Tc `$Z_@8(@8`$Z_@(@Tc  `$Z_D@(D@Tc `$Z_$@x($@xTc`$Z_@8(@8`$Z_@(@Tc  `$Z_D@(D@Tc `$Z_$@x($@xc`$Z__@(@Tc  `$Z_D@(D@c `$Z_@(@c  `$Z_@(@Tc  `$Z_@8(@8`$Z_@(@Tc  `$Z_$@x($@xc`$Z_@(@Tc  `$Z_$@x($@xTc`$Z_@8(@8`$Z__+TB(($!T_ !T(($aT_ aTBjTB_@mTB @(@TB lT TB chhb8c`J ) @ $Z_c  `$Z_ΐ|ؚtl\JH_S {@{ @SŨ_S {@- q{ @S¨_S[{@ q{@[ASŨ_S {@h{ @SŨ_S {@q{ @S¨_{ 5 @R1 uM@ R? {Ĩ_{5@R M@ R?{Ĩ_S[c{89* h(@ q"ѓ{cB[ASè_S[{ )!)C; q @BRRn @ R|@ @Q?q3*d @ !#@$@c @h%h~@ j3$Ҩ# R K?q @4*RG @!j#!yh&@cj@h%~@ j3/"D)R @( sB(*( @ !K#С^Ё2B`5iQ @?q!R @ !3#FhBҁ24s"T @ {è@[ASè_S[{RR6Р@2R?44R$AC&!@* @!S5 @ac @@2R?5ca `4R @!q2{è@[ASè_{qTQqT(B`(H@R!R y @I? R{_{U@?ր4qaT@T@"R!R? R{A__S{  7g  {S_S[c{R  R @R TS TTS TTdT@ T@ ?@@?@`?R 5 R 2 XTA@ ?ҿWTA@@?ҿVTA@`? (T=@?A@ ?ֈ HT=@?A@@?h HT=@?A@`?{cB[ASè_{S[C <S_q$(@T+@t}@ _ T(+ F vtbbT҈@hT`CDs"T5 \)@ R?Q qTE@?C[BSA{è_S[C"{CI@?(1V( @VDR!R?֠4#@ RAq@TRh@RVD!R 2 @i?}}}}}}1@?g@rT@ ?@@?@`?!g@G2g[Q@R$R?ր55@?1@*RCRR?CRL!@@VD?;@@y8(@!R?!U=@@?9@@R?Y@@?CM@#@?S[{YAB?s`@y4q@TR 5ZAB`"?s"8qb@y4R `4 RR! .@x4R* @5h@y4R* `5h.@xh5`@yR `4ys @yqTh@yqys `4>@yqTh@yq `@y4R `4ys h@y4R* `4h.@xh5{@[ASè_S[c{@?@yqATqJR RAS @y4R*w `4.@xh5()%@ R?ֈ@y |@q`T )  Rz)x*H(9!xj BT 8?5qT?)qT CTѿ!"e-@K9 RcR R?"*qUh~!Tci)xc3@y4R** `4h.@xh5h@y !#qAR* `4h.@xh5h@y !a$q4R* `4h.@xh5C A%# @&5 UA?֨>@yqTARy QA ?yh4(-x5y-h4H-x5yLh4(-x5y+h4H-x5H A*AKt"/''""c C@R`>C_{R{_C@`>C_{ RV $*i% RS4*Z*!54!i %SH4E#5R{A_R{R{_{y&%{_S { RS( 4RC9dS4BNq` Th5(RB!A 3#`4RBa ! #HRB5RC9*qh@SH4s@aA?AR`?eh@Sh4`@$"$@z$@h*ZS4U5#R R* *OS4C@9H5#*{¨ @S¨_R?R=*#*#{{_{`4,!9 @H_hK ȩ5`T!9H_hK ȩ5;R{_ R{*Hy9q)R)I99Sh5R&S5R R{_S{4z9*h5qTu4s5(A9%5(9%4R (A9))9 )*) * (R:9 R{S_֠R{IR (@y kT,=@*, RH@ kATH1@y-qT ),()@y a) @y,) _ @TI @A)TH @  A)TJ jR H%@h6R RRR{¨_{S45(!9ȿ;{A_{(y9S)SH45*%*B R{A_{)()GaT$ A9%q`{A_{Z{_S{4@sXAT c ?@) (? @ |@) ? @ |@) ?#@C@ @H  @?X(( {èS_ 2-+3-+R_ R_R_(A:( (:_{V@ @  {_(@q_(_(_`>_{A ?֠@yIR k!T<@ R (I@? kaTH1@y-qTH@9qTH@h4 RR{_'(! S{@)h@ kTh@q!Ti"@H(K q T?kTR{S_ֲ@$csm @S[{a< 5<!!BTt@bA?ր?#T{[AS¨_S[{< 5<!!BTt@bA?ր?#T{[AS¨_(Eq_@y-<S54|= A  `N `N+>N7)>N S%Ț*`TIh 86<`N0:n>N1 `N(>N  H!Q qS%ɚ( @T  J(>N )(}@Ӊ H AIh5F N |=  `NsnR `N1 `NN>N/>N7 SI>NJ%Ț(>N  ( `T  ki _ k+T-T(}@ $(!Q qSJ%ɚHI?TT K}@ Ap<`NsnNQ:n(>NHR `NH>Nh H>N )(}@i H+Aj@y_ k`_S[ck#{f@@ ˨@h6 y@52A9HJ@?qZ@ R jT@kBTaжR4@_C(T @_C("T@4@q T*@"C( c`7qmT@) kThA` o_ 4sAaA?!R`?@"R @ C(@@"@@!C(h?} @@kTRB@@˟ kT *R4 *@_C(#T @_C(T@r`T R4R4R4R+@B(T @B("T@@ kT @ @ kTk kT * kT @@4B(@z!T *@J @ R"C)S@ * @ k *T R{è#@kCcB[ASŨ_csm{Sh5RSh5 R{_{Sh5 R{_S{C9@ kT@qT @  K qT@ @4@)@@ 6 @4@4@ @aA?`?{èS_ csm  {{_{ {_;@T_{`{_R#S[{@1aT8 ?*@ ? T@  ?`5 @ ȳ ?4(hz@  ?J * ?{[AS¨_{a( ?1T;  ?֠4(hz RR{A_{`@1T ?h R{A_{=(a RR ?4 HiO R IiR{_S[{jO4=sQ`R ?jO Qj35 R{@[ASè_S{ 3%RA{¨S_U{@T%R*N*S{q%R"Lh@*H6"R*%gh@;rTh@(9~@j@), F @yk ҩ!h@"9Oi@;?rT_q!Tyk!*@96yk!*96a@gh@; SH50%Rh@;6 _qATA{S_S[ck#{*~@);F @h{z +! (Ix9q6h@h5L }@h@*i@h9U 7V>ԩ֚>BR*p%aT`@*h@;Sh4 S?q*HH#R*X%aT!lTh@;S4h@;!Sh5@o"h{z @)! *@9 6 S?q*HHV> ֚(֚  {¨#@kCcB[ASŨ_{S[ck  $s/<h@*h5Ii"@ R*)*I@)3F@hzuWA"!@ %hzu"I@? AT@@ R# ?4R*$`@B( T#,A(# _ BTH95qT_ "TH9)qTJS8J)kJT#H@kDcC[BSA{Ũ_H *S_q( T *Aӟ %@x)qkaT` 郈 8J)q_ aT_ֲT(S[c{ K(s @tTuWRRR=* RR\8x"828B8R8*I *9?qcT!TR({cB[ASè_S[{@t T?ֵ"aT6({[AS¨_S[c{* @qcT#(R} R{¨cB[ASè_RRR(ҿ 87E k+TzsH z3RRg(*E s  |@(*F)@yj ! i!(S[c{*7(EkbTh~@)6F@zu "*@_TqT34qT qaT`@   ?zuR"4l#(R_#{cB[ASè_ |@(*F)@yj ! iA(S[c{R'R8qTs6!3*HE IufS*~@ F +yj(Rh9R'*{¨cB[ASè_@T@9H6! ?ֈ@9(6A ?ֵ@"  ɚ ~@ F  @ Hyli! (R(9Hyli! -sS[{*S7(EkTh~@)5F@zt "I@96H@ TqT34qT qaT`@   ?֨zt R"*"(R"{@[ASè_{1T""(R 7(EkT |@(*F)@yj +! i@9i6`@""(RV{_S[ck{hOh5@R qiR(h}@&&GhRh`Ҳ&&Gh 7tR 9RR`(GF@j(ziI!+@h  HTy"sbQ5R{kCcB[ASĨ_ |@ ! _S[{,*')tRG`jh%*Gijh @?s"Q5G&{[AS¨_! A S {*T"R{¨ @S¨_h@y4@y5"RC* @"R*3+s @* @{!RR R`!@R{A_S{!Rh@;5 S4e)*)d`6`@`&)*{S_S{ 3!Rc{¨S_h@;1 Sh4)q*r*{ <SR?k3<S`T?qTEA yix  C'y"R#yK R*4#@y R{¨A__S[c{*B,@AaA?*`?{cB[ASè_ @ hG*)3-ʚS*R @ ШGjlR K ,Ț( ʨ-ʚ_S{ @ *@*{¨S_S{ @*@*{¨S_{S[cs!R?T5s @x9c9SW kCyS9OS#*V6Ts5 @T73bTWs69 @@Tj(8SB(%@9S4@HC yI*.cC[BSA{Ĩ_t @!T38{S[c RV@T5 @x9c9SW kC9yS9OS#*V6Ts5 @T73bTWs6y @@Tz(xSB$@9S4@HC yI*cC[BSA{Ĩ_t @!T3xS {TF RRB3hTBhT Rf+uRB$3R҇$*{ @S¨_S {T RRB3~hTBhT R<+uRBb$3R]$*{ @S¨__qT_ qDLz T_4q T(S QR? j RR__q@T_ qTH0QqiT(<S ~ QR? jT RR_ 0B `@,BA h $ R 8@q @zTQ8B5>*I *( qTh +$@ 9 $@) $ K P $@H$_ 0B ` ,BB( h $ R 8@q @zTQ8B5>*I *( =SqTh *K=S $@h(y$@ $ A P$@ $_ 0B `@,BA h $R O|@8@q @TQ8O>+Ϛi ( LqT ,$@ 9 $@) $ K P $@H$_ 0B ` ,BB(O|@ h $R 8@q @TQ8O>+Ϛi (=S L=SqT *L=S $@(y$@ $ A P$@ $_S[c{*q7RMT@ @;(1 S4@ @@*5/1T@  ?1Tsk+T{cB[ASè_S[c{*q7RmTR@ @;(1 S4@ @@>S.?# kT@  ?1Tsk+T{@cB[ASĨ_S[{*q7RmT*5 @1TskT{@[ASè_S[{*q7RmT>S9 @1TskT{@[ASè_{b9($@hA5 )@i(a"`H@h D@i *`@aB*i@(C72*R(jb9{A_{SCh@@.h@S@jAh@,@i @K@@*@#KCys9?CG*CB"c@9C4@HC yI*.*C@SA{è_{SCh@@x.h@S@jAh@,@i @K@@*@#KC9ys9?CG*CBX"c@9C4@HC yI*.*C[@SA{è_(@ }@9*@L94* *? kT8*h5 4h94RS Q? j`Th8h5i*9_qT*8_qT(_ k,h885_-@ 9@Sh8?qT@ 8Sihx7Sh8?qAT 9?q }@m @*9j98 *8*5_S[{ @ u@BR@C ( @` @qT@ @?T RRh@h5U4u{¨[AS¨_S[{ @p u@BR@C ( @`b @qT@ @?T RRh@h5U4u{¨[AS¨_S{`6B  SH4h@hrD ir? qTR.d j*@i 7l9 S?iqT}@ +}ӊmij Rh.@ *}Kitk.!q`TqT (I8( /Sh5R{S_~)h~)9R950qTa]*j@ @* K!kl_l66h2@ Kj6 2i2(R:q`Taj@ @* K!kh_ h:qh:@)i:ASh4h@ 9i9h@)5 ihrD ir? qT`*@S{h6Bhh@Rm}hrD ir? qTR.b j*@i 7l9 S?iqT}@ +}ӊhijR  h.@) *}Kitk.!q TqhTi (I8( RS4a9b` :~)h~)9R94[/qTa)j@ @* K!kl_l66h2@ Kj6 2i2(R:q`Taj@ @* K!kh_ qh:)i:kS4h@ 9i9h@i5 ih.@qGzThrD ir? qT`*@{S_֩S{h6Bhh@,RshrD ir? q TR.\ j*@i 7k@yRh =S?iqTh }ӉLii Rh.@ *}Litl.!q@TqTI (I8( 6S4:~)h~)9R94/qTau)j@ @* K!kl_l66h2@ Kj6 2i2(R:q`Taj@ @* K!kh_ qh:)i:QSH4h@ @yiyh@)5 ihrD ir? qT`*@{S_ֲS{h6Bhh@RWzhrD ir? qTR._ j*@iJ 7k@yRh =S?iqTh }ӉLii Rh.@ ) *}Litl.!q TqhT (I8( *RbjR9 *` :~)h~)9R94d/qTa)j@ @* K!kl_l66h2@ Kj6 2i2(R:q`Taj@ @* K!kh_ qh:)i:83S4h@ @yiyh@5 ih.@qGzThrD ir? qT`*@{S_֬9qTqTq`TqTqT0@ 2 0@ 2 0@ 20@ 20@ 2 0 R_@yqTqTq`TqTqT0@ 2 0@ 2 0@ 20@ 20@ 2 0 R_{R;Sh5Rh6B`9 @;(1 S4h6B @a6B+1Th*@ i*h* R{A_{(R`@yhR9h6B @;(1 S4h6B @a6Bz*R! kTh*@ i*h* R{A_{`9R91Th@ @*@K`xhR4h6B @;(1 S4h6B @a6B*1Th*@ i*h*h@ 8i9h5R4R R{A_{a9R9?1Th@ @*@KaxhR4b`h@ 8i9h5`RR R{A_{ 9?qT@ 7R ,S`?9qaT@h 7 R ,DRRT<@(5?qTT?%qT?1q@T?QqT?qT @(9qT( )R=IR;R<9 R6 @*9_qT(9qaTJR_q!T(9qTjR( < $HaQ S?qTiX(%Ț6)RR?qT?q T?qT?q!TRRR  @(9qT( RiR < R{_  { 9?qT@ 7R ,%S`?9qaT@h 7 R ,RRT<@(5?qTT?%qT?1q@T?QqT?qT @(9qT( )R=IR;R<9 R6 @*9_qT(9qaTJR_q!T(9qTjR( < $HaQ S?qTiX(%Ț6)RR?qT?q T?qT?q!TRRR  @(9qT( RiR < R{_  { @y?qT@ 7R ,Sa?9qaT@ 7 R ,dRRU<@(5?qTT?%qT?1q@T?QqT?qT @(@yqT(  )R>IR<R<: R7 @*@y_qT(@yqaTJR_q!T(@yqTjR( < %RH =S?qTHX%ɚ6)RR?qT?q T?qT?q!TRRR  @(@yqT(  RiR < R{_ { @y?qT@ 7R ,Sa?9qaT@ 7 R ,RRU<@(5?qTT?%qT?1q@T?QqT?qT @(@yqT(  )R>IR<R<: R7 @*@y_qT(@yqaTJR_q!T(@yqTjR( < %RH =S?qTHX%ɚ6)RR?qT?q T?qT?q!TRRR  @(@yqT(  RiR < R{_ S {h9 Q_qT(Y ( R$M!fh2@ 2i2ARR i2@(Sh4(2h2R"RRR RhRi")SH 4hA9 5l2@Cy  9S4Sh4Rl6hRS4RC9+m9RS aQ? jTSh4.RRS QR* N55CRhi)8aqTqRAT RGhi)8k i6@ *hR@r)K4KTc*R`h6B @;(1 S4h6B @h*@  i*dBc*C`,i2@( S4( S5c*R`Rh*@(7h2@ S4c*R` RR{¨ @S¨_S {h9 Q_qT (Y ( R$o!h2@ 2i2ARR-i2@(Sh4(2h2R"RRR RhRi")<S 4hA9H 5l2@Cy  9S4Sh4Rl6hRS4RC9+m9RS aQ? jTSh4.RRS QR* N55CRhi)8aqTqRAT RGhi)8k i6@ *hR@r)K4KTc*R`dBc*C`i2@( S4( S5c*R`rR=h*@(7h2@ S4c*R`e RR{¨ @S¨_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy{SFh@y Q_qTi(Y ( R9$!rh2@ 2i2ARRi2@(Sh4(2h2R"RRR RhRi")iS 4hA9 5k2@  yhS4hSh4Rk6hRhS4Ry*l@yRaQ jThSh4-R RQR  M55R(y*xaqTqRAT R (y*xJ i6@ *hR@r)K4KTc*R`h6B @;(1 S4h6B @h*@  i*dBc*`i2@( S4( S5c*R`gRh*@(7h2@ S4c*R`Z RR@SA{è_{S[hh@y Q_qhT (Y ( R[$!h2@ 2i2ARR i2@(Sh4(2h2R"RRR RhRi")S 4hA9( 5k2@  yhS4hSh4Rk6hRhS4Ry*l@yRaQ jThSh4-R RQR  M55R(y*xaqTqRAT R (y*xJ i6@ *hR@r)K5KTc*R`tdBc*xi2@( S4( S5c*RR h*@(7h2@ S4c*R RR[BSA{è_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxS {j@ @* K!ku_@b>@a9`@*t&@yS4(RhR9)}S H%h&I%(85H%)R9iR R{ @S¨_S {j@ @* K!ku_@b>@a@y`@t&@yS4(RhR9)}S H%h&I%(85H%)R9iR R{ @S¨_S{Ch2@4Rj:@ 2i2J6hA9R Q? jRR*j: *5h9qT RqaTt:*RHu}@`btS(5h2Bh@h.BA uQi:ib(B(h&j@ @* K!kp_a2Ba@h.BAӡ@abcb h.B#H"Ag"@ e9f:@#h2@ S4h:@5a@`&@hA9R Q? jTh2@ S5a@`&@j&@K9qTh2@Jj& 2i2K9h%Q S?qTX(%Țh79qTh2@kRk9 yi2K9 k4(85( hR RC{¨S_ !S{Ch2@4Rj:@ 2i2J6h@yR Q? jRR*j: *5h@yqT RqaTt:*RHu}@`bS(5h2Bh@h.BA uQi:ib(B(h&j@ @* K!kp_a2Ba@h.BAӡ@abcb h.B#H"Ag"@ e 9f:@C#h2@ S4h:@5a@`&@Ah@yR Q? jTh2@ S5a@`&@j&@K9qTh2@Jj& 2i2K9h%Q S?qTX(%Țh79qTh2@kRky yi2K9 k4(85( hR RC{¨S_ !{b>@a9`@j@S4 @* K!kc_xa2B@abh.BAd@`B 4(Rh9ib(B, @* K!kh89(RhRib(B R(h&{A_S {5RuR9j@ @* K!kb>@a@y`@t_xibS5(BC9Cc@G9 h@ 6u9(B(yib(B RuR(h&{¨ @S¨_S[c{j>@*XS_-q(TI(I8( t@6 Sh@4 !i)85}@7 !i5_83tj@@V S 4 @* K!khx}@% @* K!ku_xtj@@ S @* K!ku_tj@@ S 4 @* K!ku @* K!ku_҉@(S4)2j:@6(Rh:(yA}@`b@ yR9"**T*)@ S4hR@4h&@ 9?q Th&@ R i&*9hR@ iR RRR{cB[ASè_ֱS[c{j>@*XS_-q(Ti(I8( t@6 Sh@4 !i)85}@7 !i5_83tj@@V S 4 @* K!khx}@% @* K!ku_xtj@@ S @* K!ku_tj@@ S 4 @* K!ku @* K!ku_҉@(S4)2j:@9Rj6y:(yA}@`bU@ yyR9"**T#*@ S4hR@4h&@ @y?q Th&@ R i&*yhR@ iR RVRR{@cB[ASĨ_ְS{j@ @* K!kt_{"4j>@_-qTi(I8( j* h*@hRyyh99(Rh9 R%RR{S_S {@ @* K! G) s_9@15& S4($&3$(R~@R9 (%&3%~@ *R R{ @S¨_S {@ @* K! G) s_@y@15&S4($&3$(R~@R9*(%&3% RqTh94 S@ @*@KkxrhkTR R{ @S¨_{@;1 S5Bq |@ TjFyji@ ,!  95q TjFyji@ +!  h@96R9R R{_ @I@ THa@94H@ IH@a@9H@ I @H @ I @H@9 @ Rh@ i_ @I@ THa@94H@ IH@a@9H@ I @H @ I @H@y @ Rh@ i_{SChRA9(4hR@qTu&@R&@xd@# 5@4h6B @;(1 S4h6B @h*@  i*dBc#`2hR@kATh*h6BbR@a&@ @;(1 S4h6B @h*@  i*dBc` RCe@SA{è_{STChRA94hR@qMTu&@R&@xd@#5@b4dBc#`hR@kT h*bR@dBa&@c` RC3@SA{è_S[c{hRA95hR@q-Tu&@RRc@#yCh@ *q-Th6B#@y @;(1 S4h6B @a6Ba # kTh*@ i*w*hR@6kTw*h6BbR@a&@ @;(1 S4h6B @h*@  i*dBc` R{¨cB[ASè_S[{hRA95hR@qMTu&@Rc@#yCh@ *qmT#@yb`hR@6kT h*bR@dBa&@c`8 R{¨[AS¨_S[{*4@*@ T(a@94h@  H @~@1@H@ I@H @ I @Ha@95Thh@ i{@[ASè_S[{*4@*@ T(a@94h@  H @~@1Ӳ@H@ I@H @ I @Ha@95Thh@ i{@[ASè_S[ck{3@*38u@T@8 @;(1 S4@ @)@1T @` @qT@ @;(1 S4@ @@R1T@ !Th@h5U4u{kCcB[ASĨ_S[ck#{@*~@v@7?TR@ '@x @;(1 S4@ @I@9R! kT@`q@qT@ @;(1 S4@ @@R$# kT@ ?Th@h5V4v{#@kCcB[ASŨ_{DRBc+C#C {Ȩ_{&RBc+C#C{Ȩ_S[ck{7R9sTiT@1T@qT"@h81AT!T@qT 691THRRy{kCcB[ASĨ_S[ck{7R9sTiT@1T@qT"@h1xAT!T@qT 6y1TyHRvR'{kCcB[ASĨ_S { *SaR{¨ @S¨_֟ qT#*K*"*S{_q Th@; R jTh@;rTh@qT`@; |@*F)@yj +! i9)7h955"RҨ@h@ (ˋ )ӟ kThӟkT j"@  ?lTh@( THhi@ R(KhR{S_S {h@*;5 S5 R8jRI_)yI5;*Sh5qTR{h@hi@;( S4jRI_)uI5; h@;)R qTh@;!Sh5@Rh"`@;*F@TR{ @S¨_!|@O{$@T RdRbyJHiix(%xh4!сy HRR@RR{_@@@@y4*@y * 4 * *kT-@x *i5i4,@x5@yH4)@y *)4 @y * * kT-@x*h55,@xh5$x @@_{k RA`H@{_S{ @h@@ |@*F)@ yj)! *@96:*G (R@*{¨S_{1T- 5 (R7EkT |@*F)@yj )! *@9J6S)Ccs  (R{è_S {*IaTR@qaTH!C97 qATHB96 R9@R6T*2 ?5 ?**~@ F @(yk I! ?94* R{ @S¨_S[{`R^ R{R"S)4(yh4) ( A6A RR`5SvR`RZ*{[AS¨_RIS {3yh4(-x5(i@A(y h4H-x5H ˿"T`@xuxqT(`4i@h@  { @S¨_R#R{a R@;{_{S[cK RRlcTy@@@yJ4RH =S?eqhTHy.@x*5RUR Ri*5& HR# @G~@Ty HR@R= A? T<LT|Dӊs/sR4RhsB R @@*@ R.41* HRTRh_R kaT`B8*EcC[BSA{Ĩ_S{C?co@94 @HC yI{èS_C߈CbR%@x+$@xHQeqIhQLieqhK5l4BB_{Ah5 RKA{_S[{ R4=VsR9C@h@(&&@xqBT @ ylx6h@il8Sc@<S&@xqBT @ ylx6h@ il8 Sc@ <S K5t4sѓ@94 @HC yI{è@[ASè_S[ck#{- R{è#@kCcB[ASŨ_ֳ ؚTTR3 ؚTh@; R j`Ti"@ R  Rh@; R j Tw@4 77BT*_C7 Ta@~@ӂ  aRv h@B7j@ZC7 KHA7ih~@B)T{@ W4I5>   K_C7CTh@hf@* 4@7 |@Z @@ 1T@Z(@9i"@  TR4 HRzjRI_)2I5jRI_)2I5;@ ؚlS[{ uTRy R*{¨@[ASè_<,9S[{*-sj@K_  T(AkT? T @ T Ra(AaT[w@v@"q TI+A?)A? T@I v@ kT@T  kT  kTI  kT  k*!T(R4R%RR"hRtRHRTRRR kT kTI kT  k*TRR RRRRHRTRhaA?*R?vaA?*?wR{@[ASè_֑@__ @h@*)*-ʚ___S{ @h@*)3-ʚsRaA?`?{S_ @ RIi K,ɚ h_S[c{((v"R8qTqUR@  8h9s8*q! 4@  9h9s545q`T&qT8R9(4q`T%qT94v"(@ R )9+R R8JqqTqTJ749qaTq RJ}S*4JQsw9s@  *59 45qIzTK4`99s!! 4@  9h9s@  s9s@  V(@ ){@cB[ASĨ_{bTB> š?T)|  )T !& O {A_S[{*u 4QqTRRSB RB(3@sh9H5Bc,A"R R0cq!T@tQHYC [*4 @   @ H@ h@)iY  R*{è[AS¨_S[{a`@h@HN@4t@@RRRn |@vA @*RR` @4R2#Ҹ @`@Ұ {[AS¨_S{@hRP s /`RҒ  *{S_S{@hR s Z`Rs q *{S_S[{9 4q)h4H85H8H5 - 94i4H85H?qT! u`5"? h@8 @4 2 / {@[ASè_RyS[{@y Ҩ4qk h4(-x5( A* @y5` 3@y4= =Sh4(-x5( A7_qTA u`5" h@ @  {@[ASè_R'S {@h@HRRR|@u! b@*RRs@4R!"ҩ h@R { @S¨_S{@@`TSh@ @ {S_S{@@`TSh@y @u {S_{a`@@h@h`4`5`@{A_zS{a`"@Sh@J @F @Sh@> @: {S_S{@a`@@h@h~`4V`5`@{S_tS[{( *Cӿvд@bA?ր?sT{@[ASè_S[{`Tu@bA?֠?ր5TR{[AS¨_S{ @ `@9 {¨S_S {"E95)R ;Ո@ @5 @K(@ `TI3-˚aA?R`?A?qT@ @5 a !  @ @5(R"9 @)R 9{ @S¨_k_csm{*)b5A ?֠@yIR k!T<@ R (I@? kaTH1@y-qTH@9qTH@h4*3cC9SC#HRIR)sGy@4{ĨA_*{* qT1@ @*!SJ5 ?ֈ! * ?*a * ?S{( (a *CR ?4) @ ?aA?*`? @A ?{¨S__"RARR"RRR}RARz @@ RIk K T ,˚* ʊ_ցRRh{RFR J;R{_{@Qur!T0@qT!(;R{R,R{_|@?@q- F@yl !*@9+9OT? @q T(@@Qyr@T?AqTH2(9(Ryl%H9 H2(9HRH(9H2(9yl%_9o5Rk5RqR(R _{ ? ? R{_a__S[{ @ C9'"`Tɂ h@ T ["`s"@ {è[AS¨_)R ;_{SCcCRR){¨_{*ZCJR)RrI1 Ts4q`T qTR y2H  *{A_A;_{qTRy H_@ 5;*{_!_S{ @? *@` *{¨S_S{ @- y*@N *{¨S_S[c{@ @- @@* ʩ@V-˚* ʩ @N-˚* M-˚ TC @(  U#T!Tu!Ҽ @  *C 胊kT @@ RJ KR @*-ʚK  @ RI K@.ɚ  !I@ R+ @J K -ʚ@+ H@ R  @HK@-Ț+ H@ {cB[ASè_S[ck#{@ @k?L@i@* i@U-Κ* ʩ? T-ΚHT "џT@`T  ʙhcA3-Κ?`?@L@+@h@  h@M-Κ  K-Κ`XT    T=L@@ @,@H@ @*@L R{#@kCcB[ASŨ_A{ScCIRHR){è_`  @@ T@ R_{ScC'HRIR){Ĩ_ ( R_{A R{_{ R{_{@d!! R{A_{RS{_S{jDH_QH 5;(5`DBTBh R{S_{`D`D`@`@ R{A_{A) S{_{S4GH RA) S{_{  @aA?`?"{$@T RRb9JHi8(8h4!с9HR@RR{_{,!`R;!)AH6`>`R57 66R?kT R_RS[c{h@*wSR|4 QqTC6y@R@-49m @S ix69 lq2q `TqT,49l Ru4BqaTB S?%qhTQ ~ S?eqhT^Q S?eqQITh4HR9RkS aQ? jTqRlѵl49 kTx*l@lt9lRqU5> KB S?%qhTQ ~ S?eqhT^Q S?eqQIT1@TkT kT k KziTR" Rh@7* 9lh49kT=7@9y4 @HC yIi@ih@(R1**HS4'HRw7@964 @HC yIi@ih@(R4 @HC yIi@ih@(W6K@94 @HC yIi@ih@(*{è@cB[ASĨ_S[c{@*uSRo4 QqTCV@R3@y( @%@x*R;@52qhQR jT@%@xzrRTqTqbThQp R k Tq TqbThQgq TqbThQa%q# T%qbTh%Q['qc T'qbTh'QU)q T)qbTh)QO+q T+qbTh+QI-q# T-qbTh-QC1qcT1qbTh1Q=3qT3qbTh3Q75qT5qbTh5Q1B9q#Tj9qbThB9Q+B;qcTj;qbThB;Q% KqTqbThQp R k Tq TqbThQgq TqbThQa%q# T%qbTh%Q['qc T'qbTh'QU)q T)qbTh)QO+q T+qbTh+QI-q# T-qbTh-QC1qcT1qbTh1Q=3qT3qbTh3Q75qT5qbTh5Q1B9q#Tj9qbThB9Q+B;qcTj;qbThB;Q%{ƨ[AS¨_{SC9Cc#R) R)sGC@9@q@ {Ĩ_S{i@;( q!T?rTh.@ Kkq-Ta@*k TjRI_)2I5; h@; S4jRI_)yI5;R{S_{R`5h@;- S4`5R{A_ R{h@;5 S4h@;S4`@mjR (I_) I5;~{A_{RC@h  R{¨A_|P;_S[{G)ᏹa( ѶT@Sh@;5 S(5kRh_ 2i 5;7h*7 _h  _RR_jRI_)2I5;x{[AS¨_S {C @y A ,@x?qT5R?q`T?qT?q!T3`RR*3!RJR RRRR)RDRREҨ@y** 4MqTTq TqTqTq@T9qTIqa T5s2s2=rTs22'R4f5&R37j3305s2/Rq$QqTqTqTqTq TqTr`Ts2rTs2 5Jy5J2.RqraTs2s`6 Rs2)R?q  5 q@y.@xqT5@yH4R@ @{¨ @S¨_ֈ b 5(@y(-@xqTq!T4 @y.@xqTP5h2IAG5h2  >`5h2jixqT H-@xqT5c9S {*&#@9h5@0R*C5HO@ IjRI_) *I5;@~h{è @S¨_ha {CH@  @@{¨_S{ @@ @*E@I_)I5;`@9{¨S_S{ @h@@`J@^`J@DT T@H5J@{¨S_S{ @@ @@!@@@`@{¨S_S{ @@ @ E@_Q 5;5A@T`@{¨S_{cR#c#RR)'+R'R (/h A%@C @AK@(E@iRIyy@ y@pC{Ũ_{O{A_{RRRR) @hA%?T 7@8@4@-@1@1@.@5@+@%@(@)@%@=@"@A@@AScCssC:{Ĩ_S{J@DJ@T T@H5Js{S_S {h ?*B1 T}TB`4y ҬB҇5B~>h * ?{ @S¨_nS{B1TG@TB[4y wBRҜM5BI ҏ{S_?S {h ?*B1 TTB&`4y BBg5BZh * ?{ @S¨_{ 1aTRR R{_{`B1Th R{A_S {hT(h!E R ?`h!`44ER?R{ @S¨_{A #RC{¨_{A #RCҞ{¨_S { 95 yKC@*R( @ kaT' q (@s@9hy R@9H4 @HC yI-@9cw4@# @qTkKT @!RQ @5( @(T94 @@#R @!R? 5?HRR{è @S¨_ҡS {#y @TSR7sh{@TRR+@)R @ kT#@ycS`qmT@@#@yqT@TRHR@R@94@HC yI{Ĩ @S¨_tu9S(Rh*S#RCR 4@5S`Rh ?qT@TRPHRt@Rc<S{Di@?TI C?jaT`{A_{Di@?TI C?jaT `{A_S[ck#{CK@9qS*.(TxHR)@R@HtaT@*R* `49 R+  R*iSKA 9 9Rh9@sRIS6y_)LRT{9@@8(Rh9ws t5R@}@ @(9(9@ @IRҟqmT@ +@h%š =S+j=S_qiTH =SHQj9=s!DӔQ6b7@S4kRl9S Q? jaT{8Tq@T i9h8h8qT*RsB49RqHkSk Ai9@l Ht ?*?hRh9_9 T }H ɚ  9 aT_ T H ɚ  i9k D J TIH ɚ  i9kH i99R@94@HC yIC{è#@kCcB[ASŨ_S[{*  `@_C1CS*@[@*Cqqן  H `49 +@RC***{¨@[ASè_S[ck{*qhŸ %)wS*STlHR@R{èkCcB[ASĨ_C64@q*qmTH9 h4(85(  @@RqaT9q Th9@h9(}@ @*9j8@ 33 Hi"12% 5` w4Rh9@ 9?q T@ Qm6 Kz9qkT}( `h 9+}l}K R h 9)qkT}( `h9+}l}K  h9 Kh9 h9? qT9qTb@94 @HC yIRRҦ QgfffS[c{C*S[@Rw4HQkT@q**H_i388@qTRh9s@q,T5@ 9(R?q@TR4h4t h9h4(85(tmx9t(qT9h4(85(^@}@ @*99@6Kq VzԢt4h9h4(85(`4G~@R@94 @HC yIR{ècB[ASè_S[c{@*C?}C*S*@c@*C*q@3Q v`49@ Q?1$UzT kTh8587@$RC*\ 7@&RC***{¨@cB[ASĨ_{)S(*T9R{_4R98@TcшS R-ySNQo/ ,yk9 h4H85H 臟  + /yk`5RRһS_{@W< *@K%ךs=S5"q7*5@h @*%ךL=S!qiT RT(!ך * _@TqTK @*%ךKS)L` qT34@qTs4@HR{_AS¨_S[{C*RpRwT+qTQ qRHT&RG7@tT@aT R   aTRs(*K`2S*]SD 2[@{qlTQyrTqTq+@ * *  :qTqT+@ **  +@} *#@**q'@   ˁo`49+@R*_ +@ * *  C{¨[AS¨_{S[C@<S;1 S 51@T1T*h~@ Fhyl @ I!  (9 S?q T1@T1T*h~@ Fhyl @ I!  (96*#<5@RqT#8!1T@sk TR@ Q6*<S@y@* *CA@[BSA{Ĩ_(@ Q)I6(@9)@S**_֨@)D @? _{@R_`T R[TI`5R R{A_S{Sh4 RFTA'@R?Ta'HO Ij@;R_jTjRKPRI_) *I5;Ո@ҭ@ RhrhIRhii"h R@R{S_{S4h@;% S4jR PI_) I5;"~{A_{A5HR A{@_T{_S {sR*-R#U{@TC@@f**!R5RQ@94 @HC yI{è @S¨_AH5S {CgsR#{@TR@@c@**"Rc_5RQ@94 @HC yI{è @S¨_S[c{C*q**Ta~@{k***C{cB[ASè_{<SR#y kaTR%c#@yqTh& @ ykx6@@ik8S@ @%RK#RC R `5#@y'@y@94@HC yI{Ĩ_S{3gR{S_h@;5 S(4h@;1 S5h@;SjR4I_)2I5;I_)2I5;h@; R jaTh@hb"@a@:`qTq RR+jRI_) *I5;h@;rT1`T1T*~@) F @)yk H% ( @9IR  qTjRI_)2I5;h"@qaTh@;S4h@;!Sh5Rh"h@j@ QiH@@9hbT_S[{*4h@94` @39~N95h@hh@94` @'9@R` qqh9i 5h @yR!R*|@5H ?֊@%i@ iTh@94` @9R` qqh9i5d @ *!R*|@I(hR{[AS¨_S {*4h@94` @9~R@y5h@hh@94` @9 ҕR` qqh9i5h @9RR*n|@5H ?%F@'i@ iTh@94` @9jR` qqh9i@5d @ *R*F|@I(hR{@ @S¨_S[ck#{RRq@HSRRCC9G9K9@i*t5Ȏ@hWB(C( C탉 ҭj@H9 h4(85(  T" WB T˂@H9h4(85(I!@5@wk4"TR *C@T*{Ĩ#@kCcB[ASŨ_R>S[c{9h4(85(4 TR{@cB[ASĨ_!қD5> 5i@?T`@Ҁ҅`Үi@ (iC  TҬ @ҝRҘ* `" i i@5h@ !iRR{S[c# X 9Q S?qhTi&Ț7TT 9?qATTy(Q S?qTh&Țh6)R R?qKc9e@)R @ k!Tc@94@HC yI"RIc@954@HC yI"R4@HC yIRC@RqRH R ?T1*^&@)7C39%@)R @ k!T@94@HC yI"R @954@HC yI"R4@HC yIR3+@q9qT9h4qaT94*35A9h4H  ?֠5"@  +C T @ aARA9h4H  ?cB9h4C@* #@cC[BSA{Ũ_ 4S {*h@9H49~8@y5h@hh@9H495HR@R9+h @9RR*C |@)H ?@h@?Td @*R*-|@I(hR{ @S¨_{Sa H! T|@Ӣ RC ?5H ?R)SS##9[@)R @ k!Tc@94@HC yI"R?c@954@HC yI"R4@HC yIRC{#@ .SA{¨_S[{ @H@ @*E@Aa'@ " R_R" R2RV@ @*E@Le@%h% Th}TB@ @*@H_QH 5;(5@ @ @A@T@ @@*@hE@H@*@KE@i_)i5;@%{¨[AS¨_qTq`TqThA q h h h _{*C?  1T(R( I(! 1!T(R( I( ?*1T(R( @ @@94 @HC yI*{èA_S{b" RR AhaB) R ˟His8)Qh85fhe  Rhii8JQ(85{S_{ i`@(Rk THA C ? 4R(8qT R[@99[4*@9qTI(8 kiT(-@85e@R  R!Rҕg@ RaA R Rg@ RaA R@Rof,R R%@x6iB,Kig8(a@92(a9 6iB,Kif8(a@92(a9 RKi/8JQ5  R RhQeqTh}QjB(nSIa@9(2Ha9 hQeq(Th}QjB(Ia@9(2iHa9.SRh e9kQ5 @{¨_S[{*6SS*%@*E@ @ kaTREҟ@ERE@**1T`R*{Ĩ[AS¨_V5N@ E@H_QH 5;5@E@(A@T(R@E@I*C_jT'RR)ScCqV4@ @IS {CI?jTJ@hF@RF@@Th_Qh 5;5A`Tc@Fi_)i5;ՠR{ @S¨_ S{h9h5'(Ah )Ah&@cB!R](R(9 R{S_{B'{_{S[1Cv*4! R U}@Ө~ iv?k@ TJ_q#TRk@ TH Ȁ>S ?ր4(RkaTh:y pHA * ?֠4ub" RR&@t qT@9(4(@94+@9kHT Kj Jj8kQ2J*8Jk5(-@8(5)R)Ji8?q2J)8cT`@)R` Ri J59wb" RRA! ҎRB2 j@9j4h@9(4_kTMqBTJm8Jig8(*J-8h@9_kTj-@85Q5(Rt)* `l2R*kQJyhx%xk5 RC@[BSA{Ĩ_S {*C**@jS* e@9?jaT4@@ jx*  Rj5R R@94 @HC yI{è @S¨_*҃RRRkTRK%qTTR(%h7qaTRӚRkT(՛RkiTh֛RkTRk`T(RkAT!Ha RKqR釟kHTRK%qTTRH%7qӚRkT(՛RkITh֛Rk)TRkT(Rk`T!xR?q?qi4GHa S[{H ?U@y4 =h4(-x5( A*k h@y5h 7A*RRR|@**RR`4H  ?{@[ASè_S {H ?t#@y4 =h4(-x5( A*k h@y5h 5AzsҜH  ?{ @S¨_S[ck#{**RRH V`Tt@9@Tst4@ t@@ATdt4 /`Xt@T@H %N@t@ @5@ i8?q$@z`T@Cu@(zu0z5zu(@((@h.Җz54ˡ ?#T?T }t49h4(854ˀ !uR `5 *_q_85HR RR*{#@kCcB[ASŨ_R"S[ck{*eRR V`TT@@y(@TT@4G T@(@ATT4h hґ@(T@4 ^@҇T@A@5@ yyx?q$@z`T@C˕@Hzuix5zu(@((@hgXT z54ˡ ?T?TSD }TW4yh4(-x5(A AuR 5(H q?x  ? 5HR @  @RR *{¨kCcB[ASĨ_RUS[{{[AS¨_h@ H@) Ti@(9 h4H85U ˠ!Ұj3js b@j5i@R|S[{{[AS¨_h@ H@) ti@(y h4H-x5H AAuj3Ҟjs b@5i@ҔRA{ 1@*@K @7Cm@Rq@T R{¨_H J RRq(H _S{A%`@@@Ta`@@@T\`@@@TW`@@@TR`@@@TM`"@"@@TH`&@&@@TC`6@6@@T>`:@:@@T9`>@>@@T4`B@B@@T/`F@F@@T*`J@J@@T%{S_S{A%`@@@T`@@@T` @ @@T `.@.@@T`2@2@@T{S_S {(@ҟ @sT{ @S¨_{```BA``@`@`@``b`B`A`B `RA`VA`ZA`^A{A_bRII @y 4(@y_kT!) @y(@y K_{S[ck+****t5H@ @q)R(R!R**%*v5R;~@ A? T<LT|Dӕs/sR?RhsBR**!R*`4Ha ** ?*Rh_R kaT`BEHc@94J@HC yI*_K+@kDcC[BSA{ƨ_ @I_)I5; p@I_)I5; x@I_)I5; t@I_)I5; @I_)I5;Ո ! RH_ TL@_)5;H^L__)5;JkQk5@US[{i~@iA%?Thr@@h5`z@@5`~@r`v@@5`~@`r@`~@h@@5h@h@h@`@`@2!vtR_T@@5@^_@H5"Q5{@[ASè_֠H2 T pH_H 5;*_{sH2Th^A;Ո5{A_֠H2 T pH_QH 5;*_ @I_)QI5; p@I_)QI5; x@I_)QI5; t@I_)QI5; @I_)QI5;Ո ! RH_ TL@_)Q5;H^L__)Q5;JkQk5@_S{9CI?j`TJ@SRWDB Rv{S_S{@aTt@5 `T{S_S[{U ՚TR]ҵ~jnUTR{[AS¨_{H ?ֈ {_ֈ  R_S[{@TWv@bA??S4sBT`TTs"h_u@bA?R?sBh"TR R{@[ASè_S[{TVu_bA?R?sBT R{[AS¨_ֈ_S{SHaA?`?`4 RR{S_{R @+HE*S-˚R{A_S{ @z @+HE*T-˚`@{¨S_qTq T<q`TTqTXq`T(! (a((_{SCcChRiR){¨_ֈ(_S[c{*R3RC9"q,T`T qTqTq T$.q@T>qTVQqT*!a5{è@@cB[ASĨ_֩@H E*(@kT)A? aT uR&7!RC9s4`R@4(@ V-˚`T.qT"R%6@"qT@R"qTH E@  KiEH _T_JA(@s4`RaTR"qaTHaA?a@R?HaA?*?֟.qhT"R%6"qTs4`R`Rg{1T(R7EkT |@*F)@yj )! *@9@(RR{_S[c{Uh7RtR }H 6}~@|iw- 4`6Qk-T |"(ih7qT }|JH ihR{cB[ASè_S{ @h@@ |@*F)@ yj)! *@9 6H ?`4R H ?*(R@>*{¨S_{1T(R7EkT |@*F)@yj )! *@9J6S)Ccsw(R({è_{S[ck+ͯ*~@:F@H{y xC"3" (@/hC"I(! ?#C@RR @'T~@)F+R{9_ k8R T+yh R h-"*94qKT@q TH{y"*@9 8. K6Tch"c *,i8kQH85 Rq-Tch8I J_k)8kT H{yQ  &k_9M5cHRq)R8@:`TQi@98(kTq*RIRX@#C&Ts6*I{y & l@9qT& j9B 9hR 9h991j9HS x6@v TB1T"1 T#@ҥR*Rs* 4H/@ s* ? 43@@jK@T k T+qTR3yH s"Rc ? 4@4@@TF'@@RT H{y Ji8 )&j9}@_ T ! RmT H{y"+ Ji8j9}@_ TH{y " *9J{y* h@92h9H ? @CB94?@HC yI@*+@kDcC[BSA{ƨ_{S[/(ҵs/ |@ *F)@yj RtB")! 7@TccRc1bTi9s?)qT 9! 8 TK H C*c ?@4@)@ ?kCTTH ? @@/(s/`@[BSA{Ĩ_{S[N/(hs/ |@ *F)@yj RtB")! 6@%cRтc1bTi@ys ?)qT y! %x Tc  AH CzSc ?@4@)@ ?kCTcTH ? @@/(s/[BSA{è_{S[ck+O(s/ |@*F)@yj vB")!  9@"T(cR*cBTi@ys ?)qaTy %x T AҥR#cR R*4R4#A4ȢKC?@4@ kTiKT( ?@ @O(s/+@kDcC[BSA{ƨ_S[c{** 1T+3(R,7Ek"Th~@F8@ {w)#*@96*y{w)#*@97(R *****(R{¨@@cB[ASĨ_{S[ck+Y**43R~@;F@h{z "T9 S?qHTU7H@9(6BR*T*4h{z"*9*64H@ @h{z"*9*4h{z"( @ ?4T4qBz TyB5 RRT&@x*" k!T* *q!TR<S5qT)T( ? @C2**h{z"I964qT q!T** ****8@@ ( * ?5( ?3(@) @HI @@h5@4qTR(RERd)bh{z"*@906h9iq TBR5UKR+@kDcC[BSA{ƨ_bR@8+@8HQeqIhQLieqhK5l4BB_{A5Rǻ A{@_T{_S {RT{@TsRCe@ @@8 ij8@8ij8 K5i4s@94 @HC yI{è @S¨_S {SRR{¨ @S¨_ue4trAT****C*@44i*F)@ yj*! I@9(H9`@GT4u*S[ck{*~@*F9)@yj *)! *96uj!TC5@ jATs2i ?@q:RXRT(A@Qyr`T(@QyrT(AQyrT9 3*(`Rh  qT99 r T9 07@ R RR kT R kT R k! T @ 4 qTq Tq! T3R4bRC*q`Az1T@qT qTkaT9*BR*R*T/@7~S=R kT&RߟR k!TRA*`T9R*`TS49RqT qTߟRSRsR4RC4bK*1T k TR{¨kCcB[ASĨ_Rҝ@S[{*9r**R TqT q T 6 r`TRRR h?qT?yr`T?qT?qT? qTIRRiR?qT?q T?q Tdh@ R)Ri BqTqTqTqTqTP  R khRHR(RR Rh)86h92h9x7HjTC5@!@qTh9a2h9@6IJ(** j87(RhT06h@j@ 2ii@H2h*2j`6h@ 2ih6h@ 2i(6h@ 2 6h@ 2i{¨@[ASè_R @S{*i~@*F yj)@)!  R+@9jaTK86BRT)@ qT/@"R#yC*v#@yq ZzT*O1TR*@TR{¨S_S[ck#{****?@H%@cJ @1h%j T@1!TR(RG@+RF)Ks* C@[#*E*(A  ?kE) D)T7@ R( kT6(A 6y E*#* ?aT *Fyj)@*! I@9(+iH9(?֊@(  ?`5( ?*| *F)@yj*! I@9(H9)( ?5RqTc92 qTc92c9@ Ҹ2*Fc9yj)@)!  89KFykI@)! ?936@*4@R*gc@C9H%@J @C*h%j @*u4*}@ F @(yk C9K! i9KFykI@,! @9(ASJ*S R h J9 jTs6 *Fyj)@+! i@9(2h9 R kT6(  ?(A z D)E*# ?aT( ? *Fyj)@+! i@9(h9@  *Fyj)@)! R{Ȩ#@kCcB[ASŨ_***%R{*C[hqT@@ sx R@94 @HC yI{èA_{Cg T@R kR)Siy{¨A_S[ck#{@6yҚRh9h5"h9h5Bh 9q"C: T`@kTIT A@QR)J*yR U3.xy UA ҟy~HR{¨#@kCcB[ASŨ_uҖh9h5"h9h5Bh 9q @TAT{_ .a59?`raT9?PrT* R?<rTR(KqTJ R?( rATkTj R ( a2i 8!|Slh*9@__'HR{_S {**5h9qෟ& @5h9qTTiU4(9(8qT5h_8 RqTh9qTq RaT qTh9qTq R@TR{ @S¨_S[{RRDa_q9H ?)TSRR*3R@v9u9h4R8BQ_q T97@**SH4(969(8qT(9h9qT@  jH9 h4(85( aPR{[AS¨_S[C@H4'@4 QQ 5*@_qT@C[AS¨_5@J5> ( q藟 C[AS¨_ ҟ1T }@  xiK N>h ΚQ }@ 1Th` )q(RKRh C[AS¨_ kT K k *Th}@ H}@.xi xikTJQ_ kkQTBT 4Q .xjQ 5xj(R RZJK S?qTRK4&!.*"qT Q +xjh%*ҥQ% 7}@Ӧ kT|@ xiRQI xiQ  xj4@%֚! q(!ԚOT Q  xjh%  *@C> Ú@Ƚ }@өT` %@@?T~@ӯ}@j}@ _Ti ? J )T R'4}@ *xiH-* `  xl_ kH Kk%x,k#TA$IT R4Ҩ }@ H xl+xhk(A+  x,O`ӃT*}@QQe6@ *_kTH}@ x)@J_kCT 4kQi xij5 k5C[AS¨_C[AS¨_{S[ck+,*c @7R}qaT9c 9@RRRR( it)@`T+@6h?Th@aT(R   aTRhs(*Kh2qT qT q`TqTh!?53Rhhh1@5Rh@g t)R_)@9 @3(RLRJ)T dl`* )ZR x(Kyrq)RHR+KqcT3XRR, 4 R33YjYj kA TJ_ qATQQ }S'RK)(!ƚQ3hQ(Yh*RR%* ZHIK K S_qZ ?q T k藟  6 qHTQQkT K Q kT3NYhR? kT3YiR  %(!J*3jY,Qk`TK@O@R43?Y( kTO@KRKRQQ }S'RK)(!ƚQ3hQ(Yh*RR%* ZHIK K S_qZ ?q T k藟  6 qHTQQkT K Q kT3NYhR? kT3YiR  %(!J*3jY,Qk`TK@O@R43?Y( kTO@KRKq Ts%XRR[ c 4 Rs%3YjYj kTJ_ qATZ(RIKR K S_qZ ? q'V qTRKQ?1T(Q? kT3JYi R kT3hYhRHy3hY))Q?1`TK@O@KȆRKt~S~~Rh)R)!*IY4}~s_0hTˣ6q Z*RHIKR K S_qZ ?q'V qTRKQ?1T(Q? kT3JYi R kT3hYhRH}3hY))Q?1`TK@O@KR9RpBBHU!7~`YS4IR?q Q)=3 Rt @9u@9~ӈ Ui@yH~ @ uC?qTC5RqTw4 R RsYk} A)Y+kkI`!T4BqTsIY(BBR RqT *@"}~_0sTC9RHR;BB34q T 4 R RsYk} A)Y+kkI`!T?k'?ksc1?ksb1?k$1qRR4fXn5kT?Y.1R*Re4qTkTY- LXg+Xmk} A/=*A+  )X-7@ET/4q TkTY-HYm A/IY-/`E/5q TkT*}~_0sTҢ9RHRʳBB)R4 @I9K5@HS uS* Z  K4h!iQ Yi 4_qT4 R R sYk} A)Y+kkI`!T)4BqTsIY(B"4 R R3M҈Yk} A)Y+kkI`!T)!4K@qT3IY(K@KKH`Sw4IRq Q)=3 Rt @9u@9~ӈ Ii@yH~ @ iC?qTC5RKq`TV4 R R3Yk} A)Y+kkI`!Ti4K@qT3IY(K@KO@RKRqT *K3@"}~_03T79R ~HR/gI)S4q T 4 R R3Yk} A)Y+kkI`!T?k'?k3c1?k3b1?k$1qRR4fXn5kTY.2R*R4qTkTY- LXg+Xmk| A+, *A/  )X-7@ETO4q@ TkTY-iYm}@ A)jY-O`E5q TkTK~~_03Tǡ9RHRK@O@(RH4 @IK5S uS* X K K4h!iQ Yi4_qT4 R R 3Yk} A)Y+kkI`!TI4K@q"T3IY(K@KK@KK93c#<@(qT)RBi9s4 R RsNҨYk} A)Y+k kI`!T)4BqTsIY(B9sz5Qh9s@@7_k  #@ ?A*H}@)145TK@ N4 R R3 XYk} A)Y+kkI`!T)4K@qT3IY(K@KK93Ac#K@ R*Kq9h} k `ӊ}SHuS L k KjH}STqhJ-8Q1T9%)(T@99q@9h4c*,+@kDcC[BSA{ƨ_Rʚ;S {sR@'RرR{ @S¨_ֿST͠RRTSR*{ {_S {C9h@;r Th.@R Khhi"@q*QjMTa@**i@kC9(9"qIT |@*F)@yj +! h  h@9/6BRQTjRI_)2I5; R"RCq{¨ @S¨_S {#yQh@;r Th.@R Kh hi"@q* QjMTa@*b*i@k#@y(y"qIT |@*F)@yj +! h  h@9/6BR TjRI_)2I5; RBRC<q{¨ @S¨_{@; Sh4 R"@;rT$@ @T@;բT( #RC ?ր4(a c ?֠4#A?R{¨A_S{*h@;rT=(RjRI_)2I5;Gh@;1 SH4.HRjRI_)2I5h@;6jRSh4h@hI_)yI5;jRI_)2I5;jRI_)yI5;h@; R jTHSh5S5jRI_)2I5I_)2I5{S_S{*~h@;rT(RjRI_)2I5;RGh@;1 SH4HRjRI_)2I5h@;6KjRSh4h@hI_)yI5;jRI_)2I5;jRI_)yI5;h@; R jTSh5P>SS5jRI_)2I5I_)2I5>{S_S[c{C*q**T~@C*qTa~@=*44***kh} y* HRC{cB[ASè_{S[ck+C*Aq***Ta~@*1TqT~@*1kTw5@ @S45k@TqTq,T(A A#* ? 4qMTH @ qTH;@9J;H4K@9 4@9H@9?k*!Kz TH-@85`RqMTH @ qTH;@9J;H4K@9 4)@9H@9?k*!KzTH-@85 R|R*!R**X4 A? RT<LT|Dds/CtRBT **!R*@4R*!R**64~ A? T<LT|D8s/CsRRhsBҳ**!R*4@@****R3h_R kT`BR_R kaTB*@RR_C+@kDcC[BSA{ƨ_S[c{C****۱****c@94 @HC yI{è@cB[ASĨ_{jHO! It`ҝh@jRI_)2I5;R I_)2I5;hrhHRh"h@h{A_{S[ck+Rɮ+@kDcC[BSA{ƨ_vY?T(ci# 7 ֚*_!HTTTbA? ?qt”TTH9kщi8i*8I8kT@HA}bAt? ?qT_Tjh8I9H9i8LbA? ?qT_TLH9kщi8i*8I8kbA? ?qTTH9kщi8i*8I8kTBTbA? ?qT (TbA? ?qT;˿)ThcA? ?qTTTlH9kщi8i*8I8k7 @TIT(aA? ?4 ; ThcA? ?4 @ W@ T_Twk{#7T9Txk{#_bT,7kѵ"W{# +@x@#{AR c9"9RíR{_LTi8h84)щ i8h84)iJJJ9iT8 R9HR@R{JR }@?BT?i*8qKT)@9i4-R+C( iil8!H *)@8hi,8)5 @9i4+R( )Cj!(il8_jT @8)5-{_ֈS{ReSTC@ @h5` kkџ Th@9 e@9I7h @j @@94 @HC yI{èS_{S[ck+CC*Eq***Ta~@ kw5@ @Hs@*R)RRqA**e*x5R A? RT<LT|D՝s/CtRB **!R*> 4R***U 49P66 4kTD@***{*u59~ A? T<LT|Dӕs/CsR?RhsB***S4*R*5R*5h_R kaT`BFR_R kaTB>*_CCJ+@kDcC[BSA{ƨ_D@*h_R kT`B*S[c{C****2@****#@94@HC yIC{è@cB[ASĨ_{Sq{_S[{ SC9R;9@)R @ k!T@94 @HC yI"R@954 @HC yI"R4 @HC yIR 5ڮ@)R @ k!T#A94@HC yI"R#A954@HC yI"R4@HC yIRCb`5 3@K@ ?A93@*A93@Ru4B9h4K@*{˨[AS¨_{%R֫ h E (A R ?{_S[{<$dHT!vE R ?ր!(4 4ER?֠R{[AS¨_{#y4S!RC`4#@yR{¨_S[c{"R*K*BRF T TMT!RR*>@ R*"*1TRs *mT@1T@qTR@!*RR* @T* ? 5}R ( ?*ks@R**{cB[ASè_{țChA)j -?.?(G?g [H @y5@987OqQh qaTLR h qaTlRhqTRR)R K(! Q+  * L@9 SK@ S? qAzT kT 8qaT  * T? T)KKL y SI yRhKqiTADq"TR R(R) (yhkTOq__HRCc{_{*Ax   jTRR9`RR0`-R{A_{``R{A_{`@`@IC @5@h@ kT@Rh@ k@T R{¨A_{ C5 @C@h(25R R{¨A_f )L T@`T %RR#RH/&RaR;@TERRCR X X Tn`t \8pp \ \ \+qf }`r;g;{y*sz | \8 yOT \RX yBXu+qR }yK]Yg^`g^;"Tz \gR1:p.fRn2\ 2lȵm}\l ~\b(-Lgt+KiQ}@8b HAu rymH :uP\VQU\q\st\KT7 yBUymFW\t wfY*u_VX }yc]Rg^`K^_ V]4x?Q#Ib?ƺ??^?AG;BIb?WUUUUU?B.?_D; R J}S rTPq T`qTpq `R R@RRr R_qRqR**qKRI*q**} SK * j *K*`*_(D;*r R_qRqOR**qJ*}SK * j *@ *_rTq TqT q  D; }@(X+Sjq Iq q *q @Iq * qI)* H D_`? r(D; X S KqjqHK qiq *I)D_`(94Th85_{s`DTH (A RdRbRR ?`{A_hD T _S[{wD ** ?*5 ?qTD T ?H (A RdRbRR ? * ?**{@[ASè_|S H2rKh2rjH2rKh2rjH 2rK rTPq T`qTpqTk2k2k2rh2`_*RjRTSH2rKh2rjH2rKh2r`L86 2_(D;}@(D{, *D; R J*,**  N*k T mSH2rKh2rjH2rKh2rjH2 rKrTq TqT qTk 2k 2k 2h2rRj @*DՋ{_S {*6@6 Ҥsz6H6@Ҟsz 6P6Ҙsz6X6u 6ґsz 6`6Ҍszq{ @S¨_{S[c#'yX (@`****bpg*5 qT@iR;(3#C**)RS(44@mm@AcS`5*&@*"@5@p'@#@cC[BSA{Ũ_Mg_RS[c{  @** @? 6 @H@ 2I6 @H@ 2I6 @TH@ 2I6 @H@ 2I6 @H@ 2Ih@ @ HӨ @)*iJ*, J h@ @ I @)*iJ*, J h@ @ JӨ @ )*iJ*, J h@ @ K @)*iJ*, J h@ @ LӨ @)*h3 6 @H @ 2I 6 @H @ 2I 6 @H @ 2I 6 @H @ 2I 6 @H @ 2I h@  r`T_Pq`T_`qT_pq!T @H@ 2 *RJR @(@H3( @H@ uI @@ J*+-h J @H!@ 2I! @h!@V4 mi! @@P @ha@ 2ia @Ha@ mIa @@QQ)R( 3h! @@0 @Ha@ 2Ia @)Rha@( 3ha @@1)Z C"RR* ? @H @ 6h@ wiH @6h@ viH @6h@ uiH @6h@ tiH @6h@ siH@ r T?qT? qT? qTh@ j )h@(jhIh@ hi4PQ@Q)@{¨cB[ASè_ {qTQqTHR(R{_(D;}@ *D_D; R J!*-)|@|@  i D_(D; }@K+D_(D;}@_<@ R (I)@yL @y( a4 I@?@)TH@  ?@)Tk kJT_S{4`5R aˀ`R$@h* R{S_@yIR kaT<@ R (I@? kTH1@y R-q@TR_{h@ @+u(kj}@I*@!ڔ R{_!594  |j7p= S %Ț N2 NI>N*`TIH>N )I87(}@` Hw }@H S %Ț 1 )>N*TH }@Ӏ IilA< N0:n>N1 N(>N }S(>N +j}SA*AV4 N|=   N4n1 Nr N,>NO>N 7 S)>NJ%ȚH>N-  (!Q qSJ%ɚOL ҆RkL ki _ kcTl>Nk>NJ86ki  K H <4n Nq NR N+>N/>NM>NL>N) (!ʚ * KډR) K HQ(!Ț * `TI  K(}@ H_954  |j7p= S %Ț N2 NI>N*`TIH>N )I87(}@` Hr }@H S %Ț 1 )>N*TH }@Ӏ IdlA< N0:n>N1 N(>N }S(>N +j}SA*AQh5N  | 73 Np= SJ%Ț NR N3nH>N1 N)>N.>N  , `TH>N *l _ k+T-T(}@` , }@( SI%Ț0  >N0   10.1 (>N  _ TTH }@ 3 NkAp< N3nNQ:n(>NHR NH>Nh H>N )(}@i H+Aj9_!k`__ BT@8!k`TBт_t3 @3.1 (>N ?qT(}@ _ @1gJ _A cT6 N_TpE@ir = mAn6n0=+A76nJT6n6nNN1N2:nH>N(_T_A#TpN_A"T_!Tp@3.1 (>N ?qT(}@` 53;nh>N(:n>Nh N  N :n>N N  N>Nh >N )(}@ 1 N(>Nh (>N )(}@i A J!k!h@8!k`TJъh__{(@@k {_a{@ @? k{_a{ ȨC@94( @c)ȱc*H@ kaTc( @?qTc(ȩ!@ kTc( !@ kTc(i!@ kTKc()3@Dl ձS?S ߈{A_a csm !"{ @J {_a{R& {_a{@ @x ՠ @5 {_a{ @@, {_a{ @@ {_a{`R {_a{ @@ {_a{@@ {_a{@@ {_a{@ġ {_a{R {_a{@@ {_a{R {_a{R {_a{R {_a{C@94`R {_a{@H4@@4i*Fh)@ yj*! I@9(H9`@y {_a{@ @R r? k{_aH_Z_r_______ `"`2`H`Z`j`````````e~epedeTe\avaaaaaabb"b.b><<!==!=[]operator->*++---+&->*/%<<=>>=,()~^|&&||*=+=-=/=%=>>=<<=&=|=^=`vftable'`vbtable'`vcall'`typeof'`local static guard'`string'`vbase destructor'`vector deleting destructor'`default constructor closure'`scalar deleting destructor'`vector constructor iterator'`vector destructor iterator'`vector vbase constructor iterator'`virtual displacement map'`eh vector constructor iterator'`eh vector destructor iterator'`eh vector vbase constructor iterator'`copy constructor closure'`udt returning'`EH`RTTI`local vftable'`local vftable constructor closure' new[] delete[]`omni callsig'`placement delete closure'`placement delete[] closure'`managed vector constructor iterator'`managed vector destructor iterator'`eh vector copy constructor iterator'`eh vector vbase copy constructor iterator'`dynamic initializer for '`dynamic atexit destructor for '`vector copy constructor iterator'`vector vbase copy constructor iterator'`managed vector copy constructor iterator'`local static thread guard'operator "" operator co_awaitoperator<=> Type Descriptor' Base Class Descriptor at ( Base Class Array' Class Hierarchy Descriptor' Complete Object Locator'`anonymous namespace'(null)(null)   mscoree.dllCorExitProcess@@@@X@p8@p8@ @@P@P@@@@@@H@p8@x6@p8@@@p8@(@@p8@        ! 5A CPR S WY l m pr  )   Y* `@@@ @p@@ @`@@@ @`@@@`@@@@@8@api-ms-win-core-datetime-l1-1-1api-ms-win-core-fibers-l1-1-1api-ms-win-core-file-l1-2-2api-ms-win-core-localization-l1-2-1api-ms-win-core-localization-obsolete-l1-2-0api-ms-win-core-processthreads-l1-1-2api-ms-win-core-string-l1-1-0api-ms-win-core-synch-l1-2-0api-ms-win-core-sysinfo-l1-2-1api-ms-win-core-winrt-l1-1-0api-ms-win-core-xstate-l2-1-0api-ms-win-rtcore-ntuser-window-l1-1-0api-ms-win-security-systemfunctions-l1-1-0ext-ms-win-ntuser-dialogbox-l1-1-0ext-ms-win-ntuser-windowstation-l1-1-0advapi32kernel32ntdllapi-ms-win-appmodel-runtime-l1-1-2user32api-ms-ext-ms-AreFileApisANSICompareStringExFlsAllocFlsFreeFlsGetValueFlsSetValueInitializeCriticalSectionExLCMapStringExLocaleNameToLCIDAppPolicyGetProcessTerminationMethodccsUTF-8UTF-16LEUNICODE ((((( H   !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ ((((( H ( 0@@@@D@D@H@H@L@L@P@H@`@L@p@H@@L@INFinfNANnanNAN(SNAN)nan(snan)NAN(IND)nan(ind)e+000`@d@h@l@p@t@x@|@@@@@@@@@@@@@@@@@@@@@@@@$@,@4@@@P@X@h@t@x@@@@@@@@@@@@@@ @8@P@`@x@@@@@@@@@@@@@@@@@ @0@@@P@h@x@@@@@@@@SunMonTueWedThuFriSatSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanFebMarAprMayJunJulAugSepOctNovDecJanuaryFebruaryMarchAprilJuneJulyAugustSeptemberOctoberNovemberDecemberAMPMMM/dd/yydddd, MMMM dd, yyyyHH:mm:ssSunMonTueWedThuFriSatSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanFebMarAprMayJunJulAugSepOctNovDecJanuaryFebruaryMarchAprilJuneJulyAugustSeptemberOctoberNovemberDecemberAMPMMM/dd/yydddd, MMMM dd, yyyyHH:mm:ssen-USja-JPzh-CNko-KRzh-TWuk@@@@@@@@ @ @ @ @ @ @(@0@8@@@H@P@X@`@h@p@x@@@@@@ @!@"\@#@$@%@&@'@)@*@+@,@-@/@6@7@8 @9(@>0@?8@@@@AH@CP@DX@F`@Gh@Ip@Jx@K@N@O@P@V@W@Z@e@dE@@@@P@@@@ @ @ 0@ @@ P@`@p@@ @@@@@@@@@@@@ @0@@@ P@!`@"p@#@$@%@&@'@)@*@+@,@-@/(@28@4H@5X@6h@7x@8@9@:@;@>@?@@@A@C@D @E0@F@@GP@I`@Jp@K@L@N@O@P@R@V@W@Z@e@k @l0@@@P@0@`@ p@ @ @@@@@@@,@; @>0@C@@kX@ h@ x@ @ @ @ @ @; @k @@@ @ 0@ @@ P@`@;p@@@@ @ @ @@;@@ @ (@ 8@H@;`@p@ @ @@;@ @ @ @; @$@ $@ $(@;$8@(H@ (X@ (h@,x@ ,@ ,@0@ 0@ 0@4@ 4@ 4@8@ 8@<(@ <8@@H@ @X@ Dh@ Hx@ L@ P@|@|@arbgcazh-CHScsdadeelenesfifrhehuisitjakonlnoplptroruhrsksqsvthtruridbesletlvltfavihyazeumkafkafohimskkkyswuzttpagutateknmrsamnglkoksyrdivar-SAbg-BGca-EScs-CZda-DKde-DEel-GRfi-FIfr-FRhe-ILhu-HUis-ISit-ITnl-NLnb-NOpl-PLpt-BRro-ROru-RUhr-HRsk-SKsq-ALsv-SEth-THtr-TRur-PKid-IDuk-UAbe-BYsl-SIet-EElv-LVlt-LTfa-IRvi-VNhy-AMaz-AZ-Latneu-ESmk-MKtn-ZAxh-ZAzu-ZAaf-ZAka-GEfo-FOhi-INmt-MTse-NOms-MYkk-KZky-KGsw-KEuz-UZ-Latntt-RUbn-INpa-INgu-INta-INte-INkn-INml-INmr-INsa-INmn-MNcy-GBgl-ESkok-INsyr-SYdiv-MVquz-BOns-ZAmi-NZar-IQde-CHen-GBes-MXfr-BEit-CHnl-BEnn-NOpt-PTsr-SP-Latnsv-FIaz-AZ-Cyrlse-SEms-BNuz-UZ-Cyrlquz-ECar-EGzh-HKde-ATen-AUes-ESfr-CAsr-SP-Cyrlse-FIquz-PEar-LYzh-SGde-LUen-CAes-GTfr-CHhr-BAsmj-NOar-DZzh-MOde-LIen-NZes-CRfr-LUbs-BA-Latnsmj-SEar-MAen-IEes-PAfr-MCsr-BA-Latnsma-NOar-TNen-ZAes-DOsr-BA-Cyrlsma-SEar-OMen-JMes-VEsms-FIar-YEen-CBes-COsmn-FIar-SYen-BZes-PEar-JOen-TTes-ARar-LBen-ZWes-ECar-KWen-PHes-CLar-AEes-UYar-BHes-PYar-QAes-BOes-SVes-HNes-NIes-PRzh-CHTsrdE@B@,,@q@,@ ,@0,@@,@P,@`,@p,@,@,@,@,@,@,@C,@,@-@@)-@(-@k@!@-@c@P-@D`-@}p-@@-@E@-@G-@@-@H@-@-@-@I-@.@@A.@@(.@J@8.@H.@X.@h.@x.@.@.@.@.@.@.@K.@.@@ /@/@(/@8/@H/@X/@h/@x/@/@/@/@/@/@/@/@/@0@0@(0@@#80@e@*H0@l@&X0@h@ h0@L @.x0@s@ 0@0@0@0@M0@0@@>0@h@70@@ 1@N(@/1@tx@(1@81@Z @ H1@O@(X1@j@h1@a(@x1@P0@1@1@Q8@1@R@-1@r8@11@x@:1@@@@?1@1@S@@22@y@%2@g@$(2@f82@@+H2@mX2@@=h2@@;x2@0@02@2@w2@u2@UH@2@2@T2@P@2@`@63@~X@3@V`@(3@W83@H3@X3@h3@h@x3@Xp@3@Y@<3@3@3@v3@@3@[@"3@d3@4@4@(4@84@H4@@X4@\@h4@4@4@4@@4@4@]H@34@z@@4@p@85@x@95@@(5@^85@n@H5@_X@5X5@|\@ h5@b@x5@`P@45@5@{@'5@i5@o5@5@5@6@6@(6@86@FH6@paf-zaar-aear-bhar-dzar-egar-iqar-joar-kwar-lbar-lyar-maar-omar-qaar-saar-syar-tnar-yeaz-az-cyrlaz-az-latnbe-bybg-bgbn-inbs-ba-latnca-escs-czcy-gbda-dkde-atde-chde-dede-lide-ludiv-mvel-gren-auen-bzen-caen-cben-gben-ieen-jmen-nzen-phen-tten-usen-zaen-zwes-ares-boes-cles-coes-cres-does-eces-eses-gtes-hnes-mxes-nies-paes-pees-pres-pyes-sves-uyes-veet-eeeu-esfa-irfi-fifo-fofr-befr-cafr-chfr-frfr-lufr-mcgl-esgu-inhe-ilhi-inhr-bahr-hrhu-huhy-amid-idis-isit-chit-itja-jpka-gekk-kzkn-inkok-inko-krky-kglt-ltlv-lvmi-nzmk-mkml-inmn-mnmr-inms-bnms-mymt-mtnb-nonl-benl-nlnn-nons-zapa-inpl-plpt-brpt-ptquz-boquz-ecquz-pero-roru-rusa-inse-fise-nose-sesk-sksl-sisma-nosma-sesmj-nosmj-sesmn-fisms-fisq-alsr-ba-cyrlsr-ba-latnsr-sp-cyrlsr-sp-latnsv-fisv-sesw-kesyr-syta-inte-inth-thtn-zatr-trtt-ruuk-uaur-pkuz-uz-cyrluz-uz-latnvi-vnxh-zazh-chszh-chtzh-cnzh-hkzh-mozh-sgzh-twzu-za Tc-^k@tFМ, a\)cd4҇f;lDِe,BbE"&'O@V$gmsmrd'c%{pk>_nj f29.EZ%qVJ.C|!@Ί Ą' |Ô%I@T̿aYܫ\ DgR)`*! VG6K]_܀ @َЀk#cd8L2WBJa"=UD~ $s%rс@b;zO]3AOmm!3VV%(w;I-G 8NhU]i<$qE}A'JnWb쪉"f37>,ެdNj5jVg@;*xh2kůid&_U JW {,Ji)Ǫv6 UړǚK%v t:H孎cY˗i&>r䴆["93uzKG-wn@  _l%Bɝ s|-Ciu+-,W@zbjUUYԾX1EL9MLy;-"m^8{yrvxyN\lo};obwQ4Y+XW߯_w[R/=OB R E]B.4o?nz(wKgg;ɭVl H[=J6RMq! EJjت|Lu<@rd 6x)Q9%0+L ;<(wXC=sF|bt!ۮ.P9B4Ҁy7P,=87MsgmQĢR:#שsDp:RRN/M׫ Ob{!@fu)/wdq=v/}fL3. iLs&`@< q!-7ڊ1BALlȸ|Rabڇ3ah𔽚j-6zƞ) ?IϦw#[/r5D¨N2Lɭ3v2!L.2>p6\BF8҇i>o@@w,=q/ cQrFZ**F΍$'#+GK ŎQ1VÎX/4Bycg6fvPbag ;s?.❲ac*&pa%¹u !,`j;҉s}`+i7$fnIoۍut^6n16B(Ȏy$dAՙ,C瀢.=k=yICyJ"pפldNnEtTWtøBncW[5laQۺNPqc+/ޝ"^̯p?m- }oi^,dH94X<H'W&|.ڋu;-Hm~$P  %-5 > H R ] i u -C Y p        %  d'@Bʚ;01#INF1#QNAN1#SNAN1#IND??Xt?0 ?A??m?'?~?R?+M?0??ZR???'??$?\g?A)??@L?a???Ȇ?9??3?G?#??@D?M??@2?j?@Bt?@?X?R%?@>r?r? ?T??@_?01?^y?? ?(N??`??a?@?? -*?k?@@??B.?y|6>gsh>ƈ[^>/T,X>0S:zb>|si\a>酲j%M>zz[>ܥY#4o>wHn>G2k>)l>YHȆ>0AvVL>3/c>v ka>zzk>RUWk>q9a>de>B!Ѳm>dNpm>6/EiU>[ >$'<>F(o>BĮ^>&qN]k>YWm>bj ;>L!\>G[%_f>PHIZ>w_FGm>{]>`hj>>duo>3>ҾC`>\_>h_=N>qCF>WN@l>^b @>L-n>4b>\ngd>Z=@pn>6ނBg>?xb>8rZ>Oc>m>Bĩ*Vc>LHT>z\P>[0>'>m>[a>"߹oI>bAe>USY>kX>,HR>log10CONOUT$Fatal error in launcher: %s Fatal error in launcher: %s rbFailed to open executableUnable to find an appended archive.Unable to read from file#!PATHEXT;Job creation failedJob information querying failedJob information setting failedmaking stdin inheritable failedmaking stdout inheritable failedmaking stderr inheritable failedUnable to create process using '%ls': %lscontrol handler setting failedFailed to get exit code of process.exe/usr/bin/envExpected to find a command ending in '.exe' in shebang line: %lsExpected to find whitespace after '/usr/bin/env': %lsUnable to find executable in environment: %lsExpected terminating double-quote for executable in shebang line: %ls<launcher_dir>\Terminating quote without starting quote for executable in shebang line: %lsFailed to find shebangExpected to find terminator in shebang lineExpected to decode shebang line using UTF-8Expected to find '#' at start of shebang lineExpected to find '!' following '#' in shebang lineExpected to find executable in shebang lineExpected to find arguments (even if empty) in shebang lineExpected to be able to allocate command line memory"%ls" %ls "%ls" %lsbZL8b \L\8b pLp88p@@~@RSDS?嚌kFNTsC:\Users\Vinay\Projects\simple_launcher\ARM64\Release\t64-arm.pdbGCTL.text.text$mn.text$x.idata$5.00cfg.CRT$XCA.CRT$XCAA.CRT$XCZ.CRT$XIA.CRT$XIAA.CRT$XIAC.CRT$XIC.CRT$XIZ.CRT$XPA .CRT$XPX0.CRT$XPXA8.CRT$XPZ@.CRT$XTAH.CRT$XTZPx.rdataL.rdata$zzzdbgO.rtc$IAA O.rtc$IZZ(O.rtc$TAA0O.rtc$TZZ@O .xdataH\(.idata$2p\.idata$3\.idata$4H_V.idata$6p .dataz(.bss .pdataP.rsrc$01PQ.rsrc$02`"Ђ*Ђ**Ȃ*Ȃ*p@p90ȄpBȂ&@tȂ&@@ -@(@hP\@Ђ$=233 4043 @4p=5686 @@@'@"@"!@@".P(@"=|@@d@B@9@@0@ JɆȂ,JɆȂ,@0@ JɆȂ,JɆȂ,@@9H)@8!@ ɊȆB ɊȆBb0ɈȄpP @"=8DdDl@VP$@Ȃ&=$MMMXN.P @Ȃ&=TKKKK/P @Ђ$=@RXR @ P @"=SSl+@@Ȃ&@;@"J0Єp;0ЄpPЄp<0ЄpbPRȄpcPSȄpp"=UU @p"=UU20ЄpPȄpP@Ђ$=l!p"=D>P4@Ȃ$=$ħ((0Ȅp *P@Ȃ&=l@@ɆȂ*J@?@Ȃ&R@G@Ȃ&5@0@CP>@Ђ$=lhp"=@HH!pȂ$=p"=Hp"=H = FpцȂ(= HNpцȂ(=@p=5pȂ$=x1p"=H;pȂ$=4p=\@@Ђ$;@6@Ђ$.@*@"p"=(HHp"=Hp"=PHp"=Hs@E@Ђ$/7*52@ @@@ɆȂ(=`$o0Ȅp@ @"h`Ђ$@@ɆȂ*d@@цȂ(PшȄpB0pJ`$0Ȅp2P-@Ђ$=5T6\@+@Ȃ$0pVpȂ$=|/0H@@ɆȂ*@@ɆȂ(9@@Ȃ$:@@Ȃ$o0 ɈȄpP@"=@OTO8p=dRRXP%@цȂ(=T\UxUVxp"=RRH-p"=XWWFpцȂ(=ab0 ɈȄp40 ɈȄpN0ȄpL0Ȅp_0 ɈȄp6P @Ђ$=Pgxg@@@Ȃ&@@ɆȂ(j@F@ɆȂ**@@Ђ$gP V ɈȄp@=Ȃ$0 ɈȄpP  ɈȄp8@@+P'pP ɈȄpr0pNP D шȄpp"=ػ @@ @@@BB c\a(_PaH_Z_r_______ `"`2`H`Z`j`````````e~epedeTe\avaaaaaabb"b.bM[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq_______CCBABADL*(%$""&GABJIIDDJC??AD_-(''%$GG#_DIJIIJIIIDIJDD_+)(''%GG _JMCEJ?ABAECA?BA_,+)('%%"!_IM@AJACDCIDI____.,++>________JMJJJJJJJJJF_..,+)('%$"! #GIMCEJJJI?J__...,+(('%$"! &_JM?AJJJJCJ__...,+)(''%$" _IMJJJJJJJJ_K=...,++(''%$! _JMCDJJJJAJ_K_______L*%$"!_I_?AMNJJEJ_ L'%$"_I_MMMMMMJJ_ _('%%_I_CEMIJJMEM _(''*_I_?BMDJEMDMF _)(-LI_MMMCMMMMM_________< ____I_CEM1;MACDMEJM__I_?A_D1@IJJMJMM_FF_I__6_@/EMMMNMM_FF_I_C80EJDMJCJFF?:AA20?_M_MIEM______MIC4BC/ N______MMMMJIDAI_9/ HJJMMJMMMJ??BAI_A7503 IJMMCBCBA44CCI___BAO;6___C_MJIDIDMI_CI___O; @__C_C?J?AJI_?A_DJJI@ O_CM?;I?JI_________H9MAIJJIJI_CD_____JJI73C;IJIJI_?AMDJJDIMJIE5:JIJI__________MMIA:IJJJJJJJJJJJJJJJJMJ???( 444MMMRRRYYY~eGuuu}}}x>iErCE~7?HVbx/!P7pLcyϏ1Qq/Pp",6@J[1qQq/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq!%///* !*/"(%%'%/) /!#''////+/+"*(/ / !%(/ ( (*/ (///) */   )*  /"///// /+/// # + !%//  +"*+'#+//+'!%*++$++!+! !!!<(0`  !!$& &"   WܱNj+<<:5pi$!!!4888&SNJFB=950,(%%%5ǎVRNIEѹ|Jq?o@ZUQMID@<73/+&"-Ɍ444"ք̴wq?]YUPLHC?;72.*%!"""4888&dya\XTPKGC>:61-)% OÑ%%%5ʎA{;ys`\WSOJFB>951,($(9|:z;xq?o@mAkBiCgCdDuZ;73.*Ǒ%%%5̎È>89}:{;yq?o@mAjBhCfD~dEuZ?:625Оa789}:{;yr>p?n@lAjBhCfD}dEB>:5^ό555"܄ѳ„7789}:{;xr?p@n@lAjBgCeDFA=9"""4;;;&ŌC89~9|:z;xr?p@mAkAiBgCIELɑQQQJnnn~~~Įq?o@mAkBiCHHH"""vvv9~:{;yq?o@mAkB:::'''___sssttt8Ϧuǣvyp?n@lA888T---6fffnddd%%%"""OOOSSSċDҧuʤv{;yr?p?xM<<r?̷999VVV###)))444ѳ͝b@~9|:z;}Cg˶Ӎ󑑑ZZZlll;;;!!!""")))___&&&2:::ppp{{{___WWWWWW:::!!!"""***www"""4888&,̑999ԖJJJ|||lll:::"""BBBXXX|||$$$6,uuuKKKCCC@@@...www* Ҍ666"KKKaaaLLLWWW@$"""4;;;&nnnfff!!!$$$999444]ttt|ȇɑ&&&5ЎvvvmmmVVV{{{OOOڥaaaCCCpppό555"ބ|||MMMfff"""4;;;&\\\Ǒ%%%5Ύݧܦ͌555"ۄۥ"""4:::&ڤÑ%%%5ˎܤׇ ww?ww??ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwwwwwwwwwwwwwww?ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwww?wwwwwwww( @ !!!0\\\JeeeQ666D555A0$ vH<602\7qڴvvvj&&&D1"gLF@;5?кVQKE?9(aV[UPJD>82-uuun{{{j`ZTOVo@lAb_YSMGB<60+%<aVmt>q?n@bb^XRLFA;5/)$Ywwwn}}}j~Cv=s>p?bba]WQKE@:4.(+{;xbba[VPJD?93-'aV~:{;xr?o@lAiBfD}dE|cE|cEiB<61?9}:z;w=t>q?n@kAiCfD}cE|cE}dFGA;=aVңi89|:yq?n@kBhCeD|cE|cELF@mzzznjʓP8~9{;yp?mAjBgCeD|cEPJ\¯mAjBgC~dEaV}:z;xq?n@lAiCJJJőPyq?n@~YVVV???wwwiiiΡkA|;y>>3@@@y~~~obbb000kkk@@@---U<<<&&&[[[6uuusssWWWIII$$$&&&qqqlllg|||s4bbbhhhƑUUU000QQQ}}}---{bbb(iiiLLLBBBaVggg+++NNN|||nj]]]tttkkkrrrwwwӦaVӦzzznjӦˉ ?????(  C﫫oIਨS=?_QF4aZмoEcaXMB70~Iq?c`VK@58z;u=qv>3Eyn@iB~dE}dFGHYYYuuuġ=xmAhC}dE}eGS444|||gC}cEMMM~>q?kAiGRRR¢Gu=xKʺ~AAAAAAAAAAAAAAAA ( h00 %   h4VS_VERSION_INFO?fStringFileInfoB080904b0JCompanyNameSimple Launcher User^FileDescriptionSimple Launcher Executable2 FileVersion1.1.0.140InternalNamew32.exej#LegalCopyrightCopyright (C) Simple Launcher User8OriginalFilenamew32.exe@ProductNameSimple Launcher6 ProductVersion1.1.0.14DVarFileInfo$Translation  Т (0PX`pУ 0@P`pФ 0@P`pХ 0@P`pЦ 0@P`pЧ 0@P`pШ 0@P`pЩ 0@P`dP`pxȪЪت(08@HȬЬج (08@HPXȫЫث (08ȬЬج (08@HPX`hpxȭЭح (08@HPX`hpxȮЮخ (08@HPXxȣأ(8HXhxȤؤ(8HXhxȥإ(8HXhxȦئ(8HXhxȧا(8HXhxȨب(8HXhxȩة(8HXhxȪت(8HXhxȫث(8HXhxȬج(8HXhxȭح(8HXhxȮخ(8HXhxȯد(8HXhxȠؠ(8HXhxЭ 0@P`pЮ 0@P`pЯ  0@P`pР 0@P`pС 0@P`pТ 0@P`pУ 0@P`pФ 0@P`pХ 0@P`pЦ 0@P`pЧ 0@P`pШ 0@P`pЩ 0@P`pЪ 0@P`pЫ@ت𪰫pH(HhPX`hpxȩЩةPK7QY\e=__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/t64.exeMZ@ !L!This program cannot be run in DOS mode. $`v%%%tՖ%%%ƛ%%%%%%%%%%%%%%%Rich%PEd b"  |B@@.<S@ l0.text! `.rdataD8:@@.dataDA@.@.pdata@  B@@.rsrcSTN@@.relocT@BumLISMCMK HHH3H3H$0LʺICDBHL$0HD$ *HLD$0HH`H ̅umLISMCMK HHH33H3H$0LʺICDBHL$0HD$ jLD$0HH`H SH\$Ht$WH BHH3LLBILHtBHA;IDII+LD9Ht$8HH\$0H _H\$Ht$H|$ UATAUAVAWHH@LL' H0SHM8E3Le8pA̅H HM8ED$3D*HM8!HM8LcAAHE3*LM8E|$AIDIHHHtHMED$H%HcI+HHM8AHAHE3)LM8DIHHHxAHN HHHMHA覱HcHH+H]EHM8E3EH+1)LM8LII3AH HAEf; uMfHM8AHE3(LM8LIIAH HH1N\+M;r fA9t M+M;sMHM8+L\$@II[0Is@I{HIA_A^A]A\]H\$UVWH03HW.H|$` H-SHt-AE3H3H|$(Hl$ 4}L HT$hHL$X/)HT$hHL$XuRHL$X$ALH3H|$(Hl$ u3LD$`H HuHL$X H\$PHH#H0_^]H(t v1w,H fOHt 5O LrOA YH(@SH Ht#uuHDH [H%&H [H\$WH HH HHx ) HHHHH\$0H _HHXHhHpHx ATAUAVH HHHH0uHHH`dHHtH;GH;>HtH;/H;&HtH;H;zLlL^HnH(aHH0(E3I;tI;u3ҹ6MI;tI;u3ҹMH;tH;u3ҹII;MDI;MDH;IDMtItI3ҹMtItI3ҹHtHtH3ҹH\$@Hl$HHt$PH|$XH A^A]A\HHXHpHx UATAUHH Hw,H3H L333HHHLH vLL\$P LLDˋL\$ t 9\$PuO3HxH ,L RL0L;LDˋ(Hiv3HL$`DBhfHL$`OEu}SHEH7HHxH%HbH/HLHAmHuH}H]HbKE3E3HD$HHD$`IHD$@Hd$8Hd$0d$(3D$ AuKHd$0HAD3DL$(HL$ *LHM3HJH Jf}rtHUHtkHc:EHLH;rZH HtH^L$LI;s1HH+H;tH;tH;t HH&HHI;rIHUй=w HMH HKpH JH IE3 H IHT$PH+0L$PH\$Hl$Ht$WATAVH HHH%E3AHHtDKft+f"t%AuHHKHHuHt IHHA Hc AHLxHwftALuAHLIHft AuHfD9&t Au HfD9#u AtfD#HHAHHLHf?"u)f;"AHLfD#HHHHAHet f"tf;"AHLm ft%AEtfD#A0t HfuH]H\$@Hl$HHHt$PH A^A\_HHXHpHxUATAUAVAWH8HH?'H3Ho"f98tOHH3DfHu L-X#LhA}tIAEfuHGA3Jf9=Gt L5G L5GHHpfA4Vx6PHHH HHHH;s9 t9 t HH;rHHH@7HD$P+LAԹDD$(HD$ ΅HHcft|PH|$Pf9t$PtAnt Hf97uf?#HdA?t Hfuf?!H2A t HfuHT$@HHt$@HHLL|$@MHH DIu|LEH``H`SfA9T$u*IL$ Z[HnHMHaf7HcH`HMDL3IIIɍPfIHLAIfIHHLIfIHHLIfHI\HHHH@ƋLl$8Lt$0L LHHL|$(Ld$ 9 HQH({ffH; #uHfuHq"H\$Ht$WATAUH0Hd$ EHHE3AHu*3AHtAfD9*t4(HHD$PHu )fD9.u")H HL$ <*3LEHH%HHZHH\$XHt$`H0A]A\_@SH ILHHuC)$AHIHHt3)H [ f;tHfuf;uH3HHPHHL@LH SVWH H3Hu(sK3HtHt$PH)LE3HT$HH&+H׋F*HEH _^[Ht7SH LH T73u/(HR'H [@SH d$@LD$@5HHu9D$@t'Ht 'L$@HH [@SH HAHuCHCHHHHKH;+t'uhAHH&H9CtHC 'u q8HCHCuCHH [HHXHhHpHx ATH@E3IHHAMHu& HtHL$ IL\$ E9cu?H+>fAr fZwf fAr fZwf HHt@ft;f;t4HT$ DHT$  DHHHt ftf;t+D8d$8t HL$0H\$PHl$XHt$`H|$hH@A\H(3LL9>5uwMtzHu% H(HtL+C fAr fZwf AfAr fZwf IIt ftf;t+ȋH(E3UH(H\$Ht$WH HHw|HHEH e4Hu JGCH @4L3HHu,9:tH!Jt $ $ HI$ 3H\$0Ht$8H _Ha@SH [u;LHcȺq[(MHEKHu$PHˉT[ MH(KHuv3HHH0HHt HJE3HEHILHIHIHkXLIt ItMuIH0Iu3H [H(gP=X3tMH JH(a@SH HH HH;r>HH;w2HH*H+HHHH?LRkH [HK0H [H%@SH Hڃ}QkH [HJ0H [H%HH;r5H=H;w)qH+H*HHHH?LPH0H%d} rjPHJ0H%GMt 8tHIuIHH#@UAUAVH@Hl$0H]0Hu8H}@LeHHH3HEE3MHHHuQ" o_TH;rfD3IEHtTALúDt$(Lt$ SLcu?!*!fAr fZwf fHfD93u3II;sfD3!"]~g3HBHHrXKL$Hw1HAH;w HHSH+H|$0Ht)HHtHIHu1! /IEALËHDd$(H|$ RtLHH *HO9u}HMH3gH]0Hu8H}@LeHHeA^A]]H\$WH@HHHL$ ILD$ HH|$8t HL$0H\$PH@_E3LMK H8IC(ICIcH8H\$ UVWATAUAVAWH LLHL$hHMMHHT$pMtMtMu'3H\$xH A_A^A]A\_^]H$Ht3HIL;v)HtL3ISHHt3HIL;wIIG HtDO$ADL$`HXG At^LcwEtP I;DBEL;LHHL$h]D)wALt$hH+HHL$pDL$`LH+Lt$hEI;rhEt 3I;v AEA HDID+ DI;EGAH;woH ELt$hI֋;\tkH+vHStXHL$pHt'ADO$HIHDL$`Lt$hHL$pHHt L3IoR&"5O H+3HI(OIHHXHpHxL` AUH0IMHLMt`Mt[H\$`Hu"Ht L3Qc/HH\$ LMHINHHWH3H\$@Ht$HH|$PLd$XH0A]H8LL$ MLH@H8HHPHHL@LH SVWATH(H33Hu3HtLd$`!G@H*t*t%HcHHL+AHkXIH !H !HLAB8u%ttHcHHHkXI A8tR u*H@ME3HT$XH\H׋HH(A\_^[fL$SH f;u3Ef;sH$H&LL$@HT$0DO3ɅtL$@#H [H(HuCAH(H $H\$Ht$UWATH$HHH3HAكtUfd$pHL$t3AVOL\$pHEHML\$HHD$PLHT$@IE3Ht7Hd$8HT$@HL$`HL$0HL$XLHL$(HMMHL$ 3rHHHHHt$p|$tHE!3ɋHL$Huu tpeHH3L$I[(Is0IA\_]H\$WH HH t#HHH[#HH\$0H _H(AAH`HH(H%H\$Hl$Ht$WH0HH "AIH[DLHHHt!LT$`LT$ H\$@Hl$HHt$PH0_HD$`HD$ ^H8Hd$ E3E333wH8H(E3MLMu3HtHu5IHu-IfE9tEfD;tHDfEufD9t HfuH+IfE9tEfD;tHDfEufD9u HfD9ufDHH;I IDH(HHXHhHpHx ATAUAVH HHu2Z{Lc}c3ADBcxҋSu +s;L_<+kt=u'tt u 3ZHDH 3 ( H\$0Hl$8H _H(u  Mx1; 09s)HcH @9HƒHHkXHDtH  IHH(HHXHpHxL` AVH HcLIL58HkXK4|3 u4O B|3 uHL3#D3 AtK HLH\$0Ht$8H|$@Ld$HH A^HcH N8HƒHHkXHHLH%@H\$Ht$H|$ATAUAVH@HDE3^ CAuB3H7|$$@LcJHH\$0JH H;C{ u< A{ u!HKu DhDl$(C @EudHK_Ct HKWHHEu?CH3L.7K+H.袋.HLIIH?LDDd$ HXHH6D;XJ:HD$0HtsHcL6IЃ6 I H H;s@H0@ ` HXHD$0|$ HcHHHkXID[DD|$ m?AH\$`Ht$hH|$pH@A^A]A\H\$Ht$H|$UATAUHHP3MLHHMDC(3IH]EHu^MtHtEBHuHuI?v EC$ELMHLE@HMHAՋHt\xIMxHEЈHEHHEHU3}Ct!HEMxHU3`Ct9]fB\fÍCL\$PI[ Is(I{0IA]A\]H\$Hl$Ht$WATAUH0E3IIHHMMuHuH3HHI;vP"LFH O]HD$xLHD$(HD$pHHD$ Rup8"H ]LD HD$xLHD$(HD$pHHD$ fDl_uHu8"u4D *y)fD/uo" bH\$PHl$XHt$`H0A]A\_H8HD$`HD$(Hd$ H8H\$Hl$Ht$WH AAH٨uj3AAu vH9D[Ey AD[AtAtA rC$HDNj֋QZ@ōEH\$0Hl$8Ht$@H _H\$Ht$HL$WH A؋H3Hu7-t tu`DËHHH\$8Ht$@H _H\$Ht$WH =V4H7HHu3H9tujH$hy huWHHtKHtFHgHH Ht3gH;vH ft' tuEEЃ@@@E|@uvpEubEA cTtOtILt$PnjE3҅EZ Etf77D$pA@A AT$HDt MI9A rIEtLt$PA@tMFEFA@tMcFEFLt$PA@t MyIADu A rEy AA;AOt$tIHH#ʉL$HυMt3IIcHLB09~ƈHԋt$@H|$D+HDE0t8HALjufD;uAAA;AAO|$DA;~']HccHEHpH؋D|$DDIH ILt$PAHcHE߭HMHL$0MDωL$(HMLHD|$ AtEuH DHUHйgfD;uuH yHUHп-@8;uAHH^jt$@E3DAt+fD$`At fD$`x|$H |$H Dt$\Ll$xE+D+A uLL$@MABHuLL$@HL$`MŋHt$ AtAuLL$@0MAB39D$XufE~aHAHELMHL$dLc HagE3Lc~%HT$xL$dLD$@+BIE3҅Ll$x)Ll$xt$@LL$@MAHHt$ \E3ҋt$@x"AtLL$@ MABt$@E3Lt$PA HEHEH|$DE3LUA +AŃItPhtCl;tXwA fA9XuIA AE AfA86ufAx4uIAfA83ufAx2uIAdfA9ifA9ofA9tuHfA9gA fA9ZfA9PDT$lHT$xLD$@AD$X@t$@E3fA*u)A>IXLt$P|$D|$D Aō|HЉ|$DADT$DfA*u,AIXLt$PD$\A؉D$\D$\ AōDHЉD$\AA;t>#t2+;t#-;t0;XuZATAIACA6HtDl18AEAADm`tu ШtL`ШtA;AB؋LHuc xMH3DBjL }LKnL\0@KnIA D0HL0 A:AKnAAIVE`DD0 EtbKnL09A:tQtM KnAHE`DD09Au.KnL0:A:tt KnHE`ADD0:KnLMDH 1H|$ ~HcU܅|H;qL|DKnD05At A> uL0d0IcIMIHEL;A AE<A:t HIHEHL;sIE8 uI~LKnLMHUXH 1AIH|$ ~u |uf9}taL{KnD0Ht}X tD#KnEXD1 ;I;u }X u +MHAHZh}X L{tL{D#HL;m KnD0@uL0 AEHDE+}`EHuHI;rHB8pQt BpQub*u;uHcH]KnD0Ht;HÈL0 |KnHÈD19uKnHÈD1:HcH+MHAHc9gELmPA+DMƉD$(3ҹLl$ zDuz;Ë]H=zJn@E|0HҺ t fA9uL0d0IcIMIHE`L;eA AEf.fA;tfHI HE`HL;sIEf9u ILKnLMHUH 1AIH|$ ~{uy9}LTyKnD0Ht; f9Ut@fD#EKnD1 EKnD19KnT0:LI;u f9Uuf7MHHDBe Lxf9Ut LxfD#HL;m`"KnD0@uL0 AEfHDE+]LmPM;tIzAD܋Yxu Amu뵋,38x 1HXA_A^A]A\_^[]H\$Ht$L$WATAUAVAWH ALHcuJ3ۉ! 3ۅ;=nLLIL=sAMkXKBL tiAuW1KBD tDIՋ 蟭c H\$XHt$`H A_A^A]A\_H\$Ht$WH IIHMu3VHuɧ#~4AMLHIŃ?u;*uLHձ?у;uD#H\$@Hl$HHt$PH A]A\_H\$UVWATAUAVAWH$0HHƸH3H3HHL$pHT$hHMIMD$dDD$XD$DD$LD$\D$TEE3HEHu,踥E3D8]t HEAC@L mtH#H(A;t(t#LcL DtIAHMkXMn LL !tA@8u)A;ttHcHƒHHkXInB8t,HE3D8]t HEAE3LD$hMtE ADT$@DT$HALUEH]AILD$hAD$I,E3҅A tf77D$\pA@A T$LDuA s MI.IA tA@tMFEFA@tMcFEFA@t MyIADu A rEy AA;AOt$dIHH#ʉL$LυMt3IIcHLB09~ƈHԋt$@H|$D+HÉD$HEt ;0 HD$H0uAguCD$D9A;AO|$D~&]HcHEHtH؋D$DIH IAHcHEApHMDHL$0L$xLƉL$(L$DHӉL$ HMAt39D$DuH oHUHAguuH woHUHЀ;-uAHH,t$@E3҉D$HD9T$\ZA@t1AsD$P- AtD$P+|$LAtD$P |$LDd$XHt$pD+d$HD+A uLL$@LAԱ HELL$@HL$PLƋHD$ /AtAuLL$@LAԱ0|$H39D$Ttg~cHDHHMAH]E3҅u/Ut(HELD$pLL$@HHD$ E3҅u(AD|$@"HELL$@LƋHHD$ E3ҋt$@x!AtLD$pLL$@AԱ t$@E3HEHtH E3LU|$DLD$hT$`AL lE EGD8Ut HMHH3賌H$ HA_A^A]A\_^]AIt8Aht)Alt AwuA A8lu IA AA yAA<6uAx4uIAX<3uAx2uIA?t$@E3A*u A>I|$DAD|$D Ač|HЉ|$DoADT$DbA*uAID$XIAD$X AčDHЉD$X)A tAA#t1A+t"A-tA0AAAAADT$xDT$\DT$XDT$LEAD|$DDT$T衛@8u%1H\$Ht$WH HcA辟Hu裴 RDE3H;luj3t 諴HHHHHHkXdH\$0Ht$8H _H\$L$VWATAUAVH ADHcu,  xs;=WskHLIL5`HkXKLtEDKDtDAԋ螳 賳 貟蝳 u .H\$XH A^A]A\_^@SH B@It HzuA"f;u H [̅~LH\$Hl$Ht$WH IILH?tH\$0Hl$8Ht$@H _H\$UVWATAUAVAWH$ HHH3H3HHL$xHUHMIMLL$PD$pDD$XD$HD$LD$lD$D艊TE3HEHu,CE3D8]t HE\ LEMtE(AEELUT$@fE! H]NYD^!ILE AfA+f;wH 6ALAHcH IcHHD ADL$hA AEJM E'P AŹd;5ACQEGSX{ZtOac"Dl$D-D9T$l]A@/Af|$\|$LIILt$PHt9HXHt0-A sDoԙDl$D+DD8EDT$DHcH+$E3L_A0uE 9t$HIDILt$PESHEHDHD8HU%#E3҅tHAHD;|A0uE AIAfD$`Dl$DLt$PEt4D$dHEDT$eLc LMHT$dHM7!E3҅y Dl$lfEH]E}EfEgA@H]Ћ\AD|$He8g;~ǹi; no;ptasu;x;AHHAHDǶDl$DH fD9tHuH+HDAAD$pEi Ey|fQfDl$\AQfD$^kAEyQD LI>ILt$PE3҅D$@EZ EtfD$lA@A A0T$LDt MI9A rIEtLt$PA@tMFEFA@tMcFEFLt$PA@t MyIADu A rEy A;ODt$pIHH#ʉL$LυMt 3IIcHLB09~AƈHLt$PH|$H+HDDt D8+HAD+ufD;u?A;AO|$HA;~']HcHEHhH؋D|$HDIH ۴ILt$PAHcHE9cHMHL$0MDωL$(HMLHD|$ AtEuH bHUHйgfD;uuH qbHUHп-@8;uAHHE3D-Dl$DAt+fD$\At fD$\x|$L |$L Dt$XHt$xE+D+A uLL$@LABHELL$@HL$\LƋHD$ UAtAuLL$@0LAEufE~aHAHELMHL$`Lc HE3Lc~%HT$xL$`LD$@IE3҅Ht$x-Ht$xT$@#HELL$@LAHHD$ 譬E3ҋT$@x_AtYLL$@ LAWLt$PE3A T$@HEHSH|$HE3LUT$@A 5Lt$PA AŃItPhtCl;tXwA fA9XuIA AE AfA86ufAx4uIAfA83ufAx2uIAdfA9ifA9{ofA9luHfA9_A fA9RfA9HDT$hHT$xLD$@AD$DE3fA*u(A>IXLt$P|$Ht$H Aō|HЉ|$HADT$HfA*u,AIXLt$PD$XA؉D$XD$X AōDHЉD$XAA;t>#t2+;t#-;t0;XuWAQAFA@A9A3DUDT$lDT$XDT$LEt$HDT$D|$HDL$hLEXE(fEEtAu=D8Ut HMHH3U}H$0HA_A^A]A\_^]葧JE3D8]t HEH\$Hl$Ht$WHP3IHHMu3Hu7HtIwHL$0I7L\$0AKuGH+fAr fZwf  fAr fZwf HHt ftf;t+GDLǺt$(H\$ Lu'葦@8l$HTHD$@C@8l$Ht HL$@H\$`Hl$hHt$pHP_H(E3LD9 ouxHu'H(HtIwL+AfAr fZwf  fAr fZwf HIt ftf;t+H(H(DHHfuH+HHH\$Hl$WH0Hd$@HԴHHtud$(Hd$ DL33V[HctxHϺHD$@HtaLD33ɉ|$(HD$ [t:HL$@3KxHHHu3H\$HHl$PH0_HL$@Ht HL$@|HHXHhHpHx ATH0H(E3AHuf=tHH\CfuGHc HHγHtHҭfD9#tSHf;=pt.HcHHHtxLHHuQHHcHCfD9#uHyH{L%jL'e3H\$@Hl$HHt$PH|$XH0A\E3E333Ld$ ЉH O{L%H\$Hl$Ht$WH >[3HHtLf9tHf9uHf9u+ǃHcHiHHtLHHHHZHH\$0Hl$8Ht$@H _@SH AHt"AtHIzc3HHCCH [H(H8csmu+xu%@ = t=!t="t=@u'3H(H(H +Y3H(H\$Hl$Ht$WH H袽E3HHHH99tHHH;rHH;s99tIHRLAMEIu LIA@4Iu&HHy0HHLLH|9uǃ9uǃ9u ǃz9u ǃf9u ǃR9u ǃ>9u ǃ*9u ǃ9ǺD‰AЉ LIIAH3H\$0Hl$8Ht$@H _H\$Hl$Ht$WH0=)u>H3Hu<=tHFH\uGHcHHHtH;tPH;=pt.HcHHHtsLHHv"uKHHcH؀;uHPHwH%@H'B3H\$@Hl$HHt$PH0_Hd$ E3E333貅H 1wH%ٮHHXHhHpHx ATAUAVH Ll$`MIAeLHAHtLI3;"u3@"HË9AEHtH3HËItAEHtHH@tu@ t@ uHt GH3;; t; uH;MtI<$IA3H;\t;"u6utHC8"uH 33҅Ht\HAEutOu< tG< tCt7HHttHÈHAEH tHAEAEHYHtHAEMtI$$AH\$@Hl$HHt$PH|$XH A^A]A\H\$Ht$ WH0=.uCH=A3H8UH!H=ڬHt;uHHD$HLL$@E33HHD$ Hct$@HH;s\HcL$HHsQHH;rHH%HHt8LHD$HLL$@HHHD$ gD\$@H=A3DH\$PHt$XH0_HHXHhHpHx ATH@UTE3HHHfD9 tHfD9#uHfD9#uLd$8H+Ld$0HL3DK3Dd$(Ld$ THctQHKHHtALd$8Ld$0DKL33ɉl$(HD$ Su HsIHSH HS3H\$PHl$XHt$`H|$hH@A\H\$WH HtH=tHHtHH;rH\$0H _H\$WH H_tH=XtHHtHH;rH\$0H _H\$WH HHd$0H2-+H;t HHvHL$0SH\$0RDI3\RDI3RHL$8DI3RL\$8L3HL#H3-+L;LDLILH\$@H _HMZf9t3HcHEA IcEHTE+;)DE;D}AHc DeXHAHHkXIƀd8Dd8HcHƒHHkXI Ƌƀd8D8@8}u @tHc HHHkXIƀL A#;AHMIEDEHMPH|$0D$(ALMD$ AJHu5H轒LcIAHMkXIBd |rHcHʃHHkXI H -E3E333H|$ AxH\$WH@d$03H|$pHux3Htك|$xtAtDL$(DD$ DLHHL$0؉D$4|$0t,t!HcHHHHkXH€d}rjH\$PH@_H8ADL$`ELD$(HL$ DAIH8Mu3ftf;u HHIu +H(u ސ Bx.; 4s&HcHDHHHkXHD@蟐 Xw3H(H\$Hl$ VWATH@H߉H3HD$0B@HHtH-L%ɴt5Htt(HtHHcHtDAMkXMLAC8$< HZtt5HMtt(H@tHHcH1tDAMkXMLAC8$<Htt1Hst$HsHHcHsHkXI,EHT$$HL$ DA*53ۅt 9\$ ~>Hl$$OxHEHHHMHȃtH;\$ |@HcOHOx&Hf1HcGHGxHf0H H1<HL$0H3DdH\$pHl$xH@A\_^H\$WH H H AEHHHuH\$0H _H 3HH9 dHHXHpHxL` UHHPE3IHHHtMtD8"u%HtfD!3H\$`Ht$hH|$pLd$xHP]HMIfL]E9cu#HtfD8et HEHUHMD A~0A;|+IAHLǺ D$(H\$ _CHMuHc H;r&D8gt D8e6HM&*D8et HEAAHAQLljD$(HEH\$ HB E3@SH@HL$ dHD$ DH@BY%|$8t HL$0H@[@SH@HL$ 3dHD$ DH@BY%|$8t HL$0H@[ffHHHtfHt_uI~IHMHLHI3I#tHPtQtGHt9t/Ht!tt uHDHDHDHDHDHDHDHD@UATAUAVAWHPHl$@H]@HuHH}PHH3HE]`3MEU~*DIA@88t HEuAA+;ÍX|DexEuHD`DMẢ|$(H|$ @Lcu3I~^3HBIHrOKL-Hw*HAH;wIHڼH+H|$@HtdHHt HHtDMƺADl$(H|$ ;@LDu!t$(H!t$ AELAAHc"AEt7Mp ;HEhL$(ELAAHD$ lA~g3HBHHrXHL6I;w5HAH;w HH޻H+H\$@HcHHtH3HtnELAAΉt$(H\$ @3ɅtVH [HSH HHIH; tVHK H; tVHK(H; tUHK0H; tUHK8H; tUHK@H; tUHKHH; tUHKhH; tUHKpH; tUHKxH; چtsUHH; ͆t^UHH; tIUHH; t4UH [@SH Ht HtMuDc}dH [LM+ACItHuHu*}"3ffH+LtB :uVHtWHuIJ ffwHJ H;uI~LHHI3ItHH3ffft't#HttHtt tu3HHffH+Ir"tf: u,HIuMIuMt: u HIuH3ÐIt7HH; u[HAH;D uLHAH;D u=HAH;D u.H IuIMItHH; uHIuIHHHH HHH;ffMtuH+LItB H:uWItNtJHuJ ffwHJ H;uHII~vHLI3It H3HHÄt't#HttHtt tuH3H(wHHt)H(H(H S1HH(H H H H H H%1H\$Ht$WATAUAVAWH03|$`3уtbtMtXtSt.tt5y`@L%H L%H |L%H lHHurHHLcgK9YtHIHHH;rIHHH;s9Yt3LaM,$ L%H }|$`0LIu3Mu AM̅t3货t t tL|$(,LL|$(HuDdžDt$`u9 JщL$ J;}*HcHHHd‰T$ XJْI$t3;u AA;t t L; DH\$hHt$pH0A_A^A]A\_H iH i@SH J艠HH.HjH[HuCH#3H [H\$Ht$H|$ATAUAVH LkH #e.LH U.HI;HI+LoII&HI;sUH;HBHH;rIQ3Hu3HV H;rII5Ht[*3[}t HMH$H`_^]Ht0Hu)[_"A@8}eHMUHt}HEe(AKHE(HD$8Hd$0LE8A3҉|$(Ht$ Xt}(3HtzHtHt L3H苎BZ"@}HEH8Hd$ -H8HHXHhHpHx ATH0IcIDE~HIHHcD$hH|$`~ HH܋t tD$(DLƋAH|$ +ظHHDH\$@Hl$HHt$PH|$XH0A\H\$T$UVWATAUAVAWH03LHu5Y?L!M=I0LHL;f9hH5XhDAH;5Rhuo3HHuZHH9uHcTHHHuH zHEHtH+HHHH/Hu3H/|$xH5gHHgtIHtD軴Hawyy覲tp1XH$H0A_A^A]A\_^]Et3Hu#HHOgHtH(H5PgHu H:gHtH(H5+gHHtHM+HILl$pMcHtE=MHIG3ɅuHfB94hfB9 hHHHuH5fH+HE3L9mHcHL.EtfL9ltHLHHHDHL9luHcHH;H TfA艀Ht{rH5;fH+HsLdM.\EyߍG;tLcHL;^H(HHHcL$LlM.HeD9l$xtuI螰H ~HHtUI~MHHIuQHD$pHHGfD*HEIEo uU*H-Et I-M.E3E333Ll$ ;IY-M.H\$Ht$WH@HHL$ AA-HD$(DA|utHD$ H@BY#3t|$8t HL$0H\$PHt$XH@_̋AE33rHHXHhHpHx ATAUAWH H33DG5LHtPDG3ҋHt=HH+H AWHE# HHu1T TH\$@Hl$HHt$PH|$XH A_A]A\úDDI;HEMNjt HH+H~MT8u #T HAԋm LH3w Uy]E3HՋ:HT>H< HHHHu%S SH HE3IՋH3H\$LcHwMAIMkXJ BD8F\ADA@tXtHt(t uHBLJBd8BL80BLJBd8BL8BdBLJ Bd8EuA%@H\$H(HuRW9 "l3H(H\$Hl$VWATH DHH6SHc‚uLR K 8@t .R"3t{HCHSC{C u/'-H0H;t-H`H;u uHC+HS+kHBHC$C~DŋUW S6R6^6p666666667787H7^7x777777748333%@a@`@̧@@&@ bM"S@T@ccsUTF-8UTF-16LEUNICODEHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSun  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CorExitProcessmscoree.dllruntime error TLOSS error SING error DOMAIN error R6033 - Attempt to use MSIL code from this assembly during native code initialization This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain. R6032 - not enough space for locale information R6031 - Attempt to initialize the CRT more than once. This indicates a bug in your application. R6030 - CRT not initialized R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data R6010 - abort() has been called R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point support not loaded `@@ @ P@@@@@ @p @ @ @@ @ @ @ @ p @!@x`@y@@z @@@Microsoft Visual C++ Runtime Library ...<program name unknown>Runtime Error! Program: (null)(null)EEE50P( 8PX700WP `h````xpxxxx ((((( H h(((( H H  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  GetProcessWindowStationGetUserObjectInformationWGetLastActivePopupGetActiveWindowMessageBoxWUSER32.DLLEEE00P('8PW700PP (`h`hhhxppwppCONOUT$Fatal error in launcher: %s Fatal error in launcher: %s rbFailed to open executableUnable to find an appended archive.Unable to read from file#!PATHEXT;Job creation failedJob information querying failedJob information setting failedmaking stdin inheritable failedmaking stdout inheritable failedmaking stderr inheritable failedUnable to create process using '%ls': %lscontrol handler setting failedFailed to get exit code of process.exe/usr/bin/envExpected to find a command ending in '.exe' in shebang line: %lsExpected to find whitespace after '/usr/bin/env': %lsUnable to find executable in environment: %lsExpected terminating double-quote for executable in shebang line: %ls<launcher_dir>\Terminating quote without starting quote for executable in shebang line: %lsFailed to find shebangExpected to find terminator in shebang lineExpected to decode shebang line using UTF-8Expected to find '#' at start of shebang lineExpected to find '!' following '#' in shebang lineExpected to find executable in shebang lineExpected to find arguments (even if empty) in shebang lineExpected to be able to allocate command line memory"%ls" %ls "%ls" %lsRSDS|+GE Z0C:\Users\Vinay\Projects\simple_launcher\dist\t64.pdbd 4 R pC @ @2p`0C!!Z t d T 4 r- 5td 4 3 rP|0  4 rp  b 42 p`P  t d 4RC,,tbBp`0C-F.@  20. d4 p P|  4 2p42 pC33T42 p  td42C*6K6 td 4 rCI7p768 td4P d T 4 Rpd42pCI<X<RP  t d 4RC]==>>42 pCc?m?4 2 p `C@@  4 RpCAWBWB   d T 4 rp dT4 Rpd 4R pCHI7t42   20dT42p/ td4P|p  4 2pC[\Rr04r p`P|8  t d 4RC``R20Cddm  4 2pCFePeeee2P42pCfg+gbg4  P42 p d4rpCjk20- dQTP4OJp|@ tT4 t dT42d 4R pCtu7 t d 4 RCfvv-vvtd42td42Cxx2 t d T 4Rd 4R pd T42p  p ` 0 P d 4 2pC d T 42p4 2 p `CϖdT42p0 4 p`P|dT 4 pT 4 R pd T 4Rpd 4 R p  4 2p BCWP$ $4$p`P  4 rpCr!T4r p `|0 td 4 P- Etd4C P|Hd4 p- 5td43r P|0d4 p2 0 BC d4 R pCU t d 42C p`P0|Hd42 p6 %4q%f p`P| 4 2 p `C4 2 p `Ck0 4dZ p`P|4 2 p `C4p ` P 4R p ` Pd 4 r p t d T 424T 42 p `  b,|0, |0  4 Rp`P td4rP d T 42p t d T 423 "te"dd"4c"^P| 7 &t&d&4&P|B /3131122(2:2R2j222222233,3<3L3\3j333(888734 4$4<4N4j444444445&5N5`5n55555555555 6 6,6>6R6^6p666666667787H7^7x777777748333ExitProcessGetCommandLineW+SearchPathW~SetInformationJobObjectCreateProcessW}SetHandleInformation WaitForSingleObjectExAssignProcessToJobObjectdFormatMessageWGetExitCodeProcessGetModuleFileNameWQueryInformationJobObjectiMultiByteToWideCharjGetStartupInfoWGetTempPathWCreateJobObjectAkGetStdHandleGetLastErrorSetStdHandleGetFileType;SetConsoleCtrlHandler[SetCurrentDirectoryWRCloseHandleKERNEL32.dllPathRemoveFileSpecWEStrStrIW:PathCombineWSHLWAPI.dllHeapFreeHeapAllocEnterCriticalSection;LeaveCriticalSectionpGetStringTypeWUnhandledExceptionFilterSetUnhandledExceptionFilterIsDebuggerPresent&RtlVirtualUnwindRtlLookupFunctionEntryRtlCaptureContextEncodePointerDecodePointerTerminateProcessGetCurrentProcessInitializeCriticalSectionAndSpinCountGetCommandLineA%RtlUnwindExHeapSetInformationGetVersionHeapCreatexGetCPInfonGetACP>GetOEMCP IsValidCodePageZFlsGetValue[FlsSetValueYFlsFreeSetLastErrorGetCurrentThreadIdXFlsAllocLGetProcAddressGetModuleHandleW4WriteFile|SetHandleCountDeleteCriticalSectionSleep/LCMapStringWReadFiletSetFilePointergFreeEnvironmentStringsWGetEnvironmentStringsWGetModuleFileNameA WideCharToMultiByteQueryPerformanceCounterGetTickCountGetCurrentProcessIdGetSystemTimeAsFileTimeCreateFileWALoadLibraryWHeapReAllocGetConsoleCPGetConsoleMode]FlushFileBuffersdCompareStringWeSetEnvironmentVariableWaSetEndOfFileQGetProcessHeapHeapSize3WriteConsoleW@q@@q@2-+] f        ! 5A CPR S WY l m pr   )     abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZPE@`y!@~ڣ @ڣ AϢ[@~QQ^ _j21~CH@D@@@<@8@4@0@(@ @@@@@@@@@@@@@@@@@@@@@@@|@t@l@`@X@H@8@0@,@ @@@ @@@@@@@@@@x@`@P@8@0@(@ @@@@@@@@@@@@@@@@p@`@H@8@ @@@@@@@J@J@J@J@J@R@`@@p@J@PM@d@ @@`@b@p@p@p@p@p@p@p@p@p@p@..R@R@c@c@c@c@c@c@c@c@c@R@c@c@c@c@c@c@c@.Kr .t.O,P@.}0.. (b$d(t.(O.P\\.\..  P# T#!S!(t!"#"E"$H""("-#(0#F$#H$$.$%,%&(&&.& '( '='(')#))#***$,*c,$d, - $ -)-P$,-Z.X$\..$....?0$@0{0$|00.01* 1>1P$@11.23t.34$44&4j5$l55.56$68%89X%9!;p%$;B;P$D;;&;r<%t</=,0=2>%4>>(>?$??%?@@$@@A&A{BD&|BB.BCh&CEp&EH&HJ&\J|J.|JJ.JJ(K$K&0KHK&PKQK&`KaK&dK5L&8LoL&pL M* MXt*XVX.XXX$XY&Yp['p[*\0',\\T'\1_\'4_ax'aM[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq_______CCBABADL*(%$""&GABJIIDDJC??AD_-(''%$GG#_DIJIIJIIIDIJDD_+)(''%GG _JMCEJ?ABAECA?BA_,+)('%%"!_IM@AJACDCIDI____.,++>________JMJJJJJJJJJF_..,+)('%$"! #GIMCEJJJI?J__...,+(('%$"! &_JM?AJJJJCJ__...,+)(''%$" _IMJJJJJJJJ_K=...,++(''%$! _JMCDJJJJAJ_K_______L*%$"!_I_?AMNJJEJ_ L'%$"_I_MMMMMMJJ_ _('%%_I_CEMIJJMEM _(''*_I_?BMDJEMDMF _)(-LI_MMMCMMMMM_________< ____I_CEM1;MACDMEJM__I_?A_D1@IJJMJMM_FF_I__6_@/EMMMNMM_FF_I_C80EJDMJCJFF?:AA20?_M_MIEM______MIC4BC/ N______MMMMJIDAI_9/ HJJMMJMMMJ??BAI_A7503 IJMMCBCBA44CCI___BAO;6___C_MJIDIDMI_CI___O; @__C_C?J?AJI_?A_DJJI@ O_CM?;I?JI_________H9MAIJJIJI_CD_____JJI73C;IJIJI_?AMDJJDIMJIE5:JIJI__________MMIA:IJJJJJJJJJJJJJJJJMJ???( 444MMMRRRYYY~eGuuu}}}x>iErCE~7?HVbx/!P7pLcyϏ1Qq/Pp",6@J[1qQq/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq!%///* !*/"(%%'%/) /!#''////+/+"*(/ / !%(/ ( (*/ (///) */   )*  /"///// /+/// # + !%//  +"*+'#+//+'!%*++$++!+! !!!<(0`  !!$& &"   WܱNj+<<:5pi$!!!4888&SNJFB=950,(%%%5ǎVRNIEѹ|Jq?o@ZUQMID@<73/+&"-Ɍ444"ք̴wq?]YUPLHC?;72.*%!"""4888&dya\XTPKGC>:61-)% OÑ%%%5ʎA{;ys`\WSOJFB>951,($(9|:z;xq?o@mAkBiCgCdDuZ;73.*Ǒ%%%5̎È>89}:{;yq?o@mAjBhCfD~dEuZ?:625Оa789}:{;yr>p?n@lAjBhCfD}dEB>:5^ό555"܄ѳ„7789}:{;xr?p@n@lAjBgCeDFA=9"""4;;;&ŌC89~9|:z;xr?p@mAkAiBgCIELɑQQQJnnn~~~Įq?o@mAkBiCHHH"""vvv9~:{;yq?o@mAkB:::'''___sssttt8Ϧuǣvyp?n@lA888T---6fffnddd%%%"""OOOSSSċDҧuʤv{;yr?p?xM<<r?̷999VVV###)))444ѳ͝b@~9|:z;}Cg˶Ӎ󑑑ZZZlll;;;!!!""")))___&&&2:::ppp{{{___WWWWWW:::!!!"""***www"""4888&,̑999ԖJJJ|||lll:::"""BBBXXX|||$$$6,uuuKKKCCC@@@...www* Ҍ666"KKKaaaLLLWWW@$"""4;;;&nnnfff!!!$$$999444]ttt|ȇɑ&&&5ЎvvvmmmVVV{{{OOOڥaaaCCCpppό555"ބ|||MMMfff"""4;;;&\\\Ǒ%%%5Ύݧܦ͌555"ۄۥ"""4:::&ڤÑ%%%5ˎܤׇ ww?ww??ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwwwwwwwwwwwwwww?ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwww?wwwwwwww( @ !!!0\\\JeeeQ666D555A0$ vH<602\7qڴvvvj&&&D1"gLF@;5?кVQKE?9(aV[UPJD>82-uuun{{{j`ZTOVo@lAb_YSMGB<60+%<aVmt>q?n@bb^XRLFA;5/)$Ywwwn}}}j~Cv=s>p?bba]WQKE@:4.(+{;xbba[VPJD?93-'aV~:{;xr?o@lAiBfD}dE|cE|cEiB<61?9}:z;w=t>q?n@kAiCfD}cE|cE}dFGA;=aVңi89|:yq?n@kBhCeD|cE|cELF@mzzznjʓP8~9{;yp?mAjBgCeD|cEPJ\¯mAjBgC~dEaV}:z;xq?n@lAiCJJJőPyq?n@~YVVV???wwwiiiΡkA|;y>>3@@@y~~~obbb000kkk@@@---U<<<&&&[[[6uuusssWWWIII$$$&&&qqqlllg|||s4bbbhhhƑUUU000QQQ}}}---{bbb(iiiLLLBBBaVggg+++NNN|||nj]]]tttkkkrrrwwwӦaVӦzzznjӦˉ ?????(  C﫫oIਨS=?_QF4aZмoEcaXMB70~Iq?c`VK@58z;u=qv>3Eyn@iB~dE}dFGHYYYuuuġ=xmAhC}dE}eGS444|||gC}cEMMM~>q?kAiGRRR¢Gu=xKʺ~AAAAAAAAAAAAAAAA ( h00 %   h4VS_VERSION_INFO?fStringFileInfoB080904b0JCompanyNameSimple Launcher User^FileDescriptionSimple Launcher Executable2 FileVersion1.1.0.140InternalNamet64.exej#LegalCopyrightCopyright (C) Simple Launcher User8OriginalFilenamet64.exe@ProductNameSimple Launcher6 ProductVersion1.1.0.14DVarFileInfo$Translation  PAPADDINGXXPADآPX4Ƞؠ(8HXhxȡء@ȪЪت (08@HPX`hpxȫЫث (08@HPX`hpxȬЬج (08@Hح8xPLpxȢТآ (08HPX`hpxPK7QYM\zz=__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.py# # Copyright (C) 2012-2023 The Python Software Foundation. # See LICENSE.txt and CONTRIBUTORS.txt. # import codecs from collections import deque import contextlib import csv from glob import iglob as std_iglob import io import json import logging import os import py_compile import re import socket try: import ssl except ImportError: # pragma: no cover ssl = None import subprocess import sys import tarfile import tempfile import textwrap try: import threading except ImportError: # pragma: no cover import dummy_threading as threading import time from . import DistlibException from .compat import (string_types, text_type, shutil, raw_input, StringIO, cache_from_source, urlopen, urljoin, httplib, xmlrpclib, HTTPHandler, BaseConfigurator, valid_ident, Container, configparser, URLError, ZipFile, fsdecode, unquote, urlparse) logger = logging.getLogger(__name__) # # Requirement parsing code as per PEP 508 # IDENTIFIER = re.compile(r'^([\w\.-]+)\s*') VERSION_IDENTIFIER = re.compile(r'^([\w\.*+-]+)\s*') COMPARE_OP = re.compile(r'^(<=?|>=?|={2,3}|[~!]=)\s*') MARKER_OP = re.compile(r'^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*') OR = re.compile(r'^or\b\s*') AND = re.compile(r'^and\b\s*') NON_SPACE = re.compile(r'(\S+)\s*') STRING_CHUNK = re.compile(r'([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)') def parse_marker(marker_string): """ Parse a marker string and return a dictionary containing a marker expression. The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in the expression grammar, or strings. A string contained in quotes is to be interpreted as a literal string, and a string not contained in quotes is a variable (such as os_name). """ def marker_var(remaining): # either identifier, or literal string m = IDENTIFIER.match(remaining) if m: result = m.groups()[0] remaining = remaining[m.end():] elif not remaining: raise SyntaxError('unexpected end of input') else: q = remaining[0] if q not in '\'"': raise SyntaxError('invalid expression: %s' % remaining) oq = '\'"'.replace(q, '') remaining = remaining[1:] parts = [q] while remaining: # either a string chunk, or oq, or q to terminate if remaining[0] == q: break elif remaining[0] == oq: parts.append(oq) remaining = remaining[1:] else: m = STRING_CHUNK.match(remaining) if not m: raise SyntaxError('error in string literal: %s' % remaining) parts.append(m.groups()[0]) remaining = remaining[m.end():] else: s = ''.join(parts) raise SyntaxError('unterminated string: %s' % s) parts.append(q) result = ''.join(parts) remaining = remaining[1:].lstrip() # skip past closing quote return result, remaining def marker_expr(remaining): if remaining and remaining[0] == '(': result, remaining = marker(remaining[1:].lstrip()) if remaining[0] != ')': raise SyntaxError('unterminated parenthesis: %s' % remaining) remaining = remaining[1:].lstrip() else: lhs, remaining = marker_var(remaining) while remaining: m = MARKER_OP.match(remaining) if not m: break op = m.groups()[0] remaining = remaining[m.end():] rhs, remaining = marker_var(remaining) lhs = {'op': op, 'lhs': lhs, 'rhs': rhs} result = lhs return result, remaining def marker_and(remaining): lhs, remaining = marker_expr(remaining) while remaining: m = AND.match(remaining) if not m: break remaining = remaining[m.end():] rhs, remaining = marker_expr(remaining) lhs = {'op': 'and', 'lhs': lhs, 'rhs': rhs} return lhs, remaining def marker(remaining): lhs, remaining = marker_and(remaining) while remaining: m = OR.match(remaining) if not m: break remaining = remaining[m.end():] rhs, remaining = marker_and(remaining) lhs = {'op': 'or', 'lhs': lhs, 'rhs': rhs} return lhs, remaining return marker(marker_string) def parse_requirement(req): """ Parse a requirement passed in as a string. Return a Container whose attributes contain the various parts of the requirement. """ remaining = req.strip() if not remaining or remaining.startswith('#'): return None m = IDENTIFIER.match(remaining) if not m: raise SyntaxError('name expected: %s' % remaining) distname = m.groups()[0] remaining = remaining[m.end():] extras = mark_expr = versions = uri = None if remaining and remaining[0] == '[': i = remaining.find(']', 1) if i < 0: raise SyntaxError('unterminated extra: %s' % remaining) s = remaining[1:i] remaining = remaining[i + 1:].lstrip() extras = [] while s: m = IDENTIFIER.match(s) if not m: raise SyntaxError('malformed extra: %s' % s) extras.append(m.groups()[0]) s = s[m.end():] if not s: break if s[0] != ',': raise SyntaxError('comma expected in extras: %s' % s) s = s[1:].lstrip() if not extras: extras = None if remaining: if remaining[0] == '@': # it's a URI remaining = remaining[1:].lstrip() m = NON_SPACE.match(remaining) if not m: raise SyntaxError('invalid URI: %s' % remaining) uri = m.groups()[0] t = urlparse(uri) # there are issues with Python and URL parsing, so this test # is a bit crude. See bpo-20271, bpo-23505. Python doesn't # always parse invalid URLs correctly - it should raise # exceptions for malformed URLs if not (t.scheme and t.netloc): raise SyntaxError('Invalid URL: %s' % uri) remaining = remaining[m.end():].lstrip() else: def get_versions(ver_remaining): """ Return a list of operator, version tuples if any are specified, else None. """ m = COMPARE_OP.match(ver_remaining) versions = None if m: versions = [] while True: op = m.groups()[0] ver_remaining = ver_remaining[m.end():] m = VERSION_IDENTIFIER.match(ver_remaining) if not m: raise SyntaxError('invalid version: %s' % ver_remaining) v = m.groups()[0] versions.append((op, v)) ver_remaining = ver_remaining[m.end():] if not ver_remaining or ver_remaining[0] != ',': break ver_remaining = ver_remaining[1:].lstrip() # Some packages have a trailing comma which would break things # See issue #148 if not ver_remaining: break m = COMPARE_OP.match(ver_remaining) if not m: raise SyntaxError('invalid constraint: %s' % ver_remaining) if not versions: versions = None return versions, ver_remaining if remaining[0] != '(': versions, remaining = get_versions(remaining) else: i = remaining.find(')', 1) if i < 0: raise SyntaxError('unterminated parenthesis: %s' % remaining) s = remaining[1:i] remaining = remaining[i + 1:].lstrip() # As a special diversion from PEP 508, allow a version number # a.b.c in parentheses as a synonym for ~= a.b.c (because this # is allowed in earlier PEPs) if COMPARE_OP.match(s): versions, _ = get_versions(s) else: m = VERSION_IDENTIFIER.match(s) if not m: raise SyntaxError('invalid constraint: %s' % s) v = m.groups()[0] s = s[m.end():].lstrip() if s: raise SyntaxError('invalid constraint: %s' % s) versions = [('~=', v)] if remaining: if remaining[0] != ';': raise SyntaxError('invalid requirement: %s' % remaining) remaining = remaining[1:].lstrip() mark_expr, remaining = parse_marker(remaining) if remaining and remaining[0] != '#': raise SyntaxError('unexpected trailing data: %s' % remaining) if not versions: rs = distname else: rs = '%s %s' % (distname, ', '.join(['%s %s' % con for con in versions])) return Container(name=distname, extras=extras, constraints=versions, marker=mark_expr, url=uri, requirement=rs) def get_resources_dests(resources_root, rules): """Find destinations for resources files""" def get_rel_path(root, path): # normalizes and returns a lstripped-/-separated path root = root.replace(os.path.sep, '/') path = path.replace(os.path.sep, '/') assert path.startswith(root) return path[len(root):].lstrip('/') destinations = {} for base, suffix, dest in rules: prefix = os.path.join(resources_root, base) for abs_base in iglob(prefix): abs_glob = os.path.join(abs_base, suffix) for abs_path in iglob(abs_glob): resource_file = get_rel_path(resources_root, abs_path) if dest is None: # remove the entry if it was here destinations.pop(resource_file, None) else: rel_path = get_rel_path(abs_base, abs_path) rel_dest = dest.replace(os.path.sep, '/').rstrip('/') destinations[resource_file] = rel_dest + '/' + rel_path return destinations def in_venv(): if hasattr(sys, 'real_prefix'): # virtualenv venvs result = True else: # PEP 405 venvs result = sys.prefix != getattr(sys, 'base_prefix', sys.prefix) return result def get_executable(): # The __PYVENV_LAUNCHER__ dance is apparently no longer needed, as # changes to the stub launcher mean that sys.executable always points # to the stub on OS X # if sys.platform == 'darwin' and ('__PYVENV_LAUNCHER__' # in os.environ): # result = os.environ['__PYVENV_LAUNCHER__'] # else: # result = sys.executable # return result # Avoid normcasing: see issue #143 # result = os.path.normcase(sys.executable) result = sys.executable if not isinstance(result, text_type): result = fsdecode(result) return result def proceed(prompt, allowed_chars, error_prompt=None, default=None): p = prompt while True: s = raw_input(p) p = prompt if not s and default: s = default if s: c = s[0].lower() if c in allowed_chars: break if error_prompt: p = '%c: %s\n%s' % (c, error_prompt, prompt) return c def extract_by_key(d, keys): if isinstance(keys, string_types): keys = keys.split() result = {} for key in keys: if key in d: result[key] = d[key] return result def read_exports(stream): if sys.version_info[0] >= 3: # needs to be a text stream stream = codecs.getreader('utf-8')(stream) # Try to load as JSON, falling back on legacy format data = stream.read() stream = StringIO(data) try: jdata = json.load(stream) result = jdata['extensions']['python.exports']['exports'] for group, entries in result.items(): for k, v in entries.items(): s = '%s = %s' % (k, v) entry = get_export_entry(s) assert entry is not None entries[k] = entry return result except Exception: stream.seek(0, 0) def read_stream(cp, stream): if hasattr(cp, 'read_file'): cp.read_file(stream) else: cp.readfp(stream) cp = configparser.ConfigParser() try: read_stream(cp, stream) except configparser.MissingSectionHeaderError: stream.close() data = textwrap.dedent(data) stream = StringIO(data) read_stream(cp, stream) result = {} for key in cp.sections(): result[key] = entries = {} for name, value in cp.items(key): s = '%s = %s' % (name, value) entry = get_export_entry(s) assert entry is not None # entry.dist = self entries[name] = entry return result def write_exports(exports, stream): if sys.version_info[0] >= 3: # needs to be a text stream stream = codecs.getwriter('utf-8')(stream) cp = configparser.ConfigParser() for k, v in exports.items(): # TODO check k, v for valid values cp.add_section(k) for entry in v.values(): if entry.suffix is None: s = entry.prefix else: s = '%s:%s' % (entry.prefix, entry.suffix) if entry.flags: s = '%s [%s]' % (s, ', '.join(entry.flags)) cp.set(k, entry.name, s) cp.write(stream) @contextlib.contextmanager def tempdir(): td = tempfile.mkdtemp() try: yield td finally: shutil.rmtree(td) @contextlib.contextmanager def chdir(d): cwd = os.getcwd() try: os.chdir(d) yield finally: os.chdir(cwd) @contextlib.contextmanager def socket_timeout(seconds=15): cto = socket.getdefaulttimeout() try: socket.setdefaulttimeout(seconds) yield finally: socket.setdefaulttimeout(cto) class cached_property(object): def __init__(self, func): self.func = func # for attr in ('__name__', '__module__', '__doc__'): # setattr(self, attr, getattr(func, attr, None)) def __get__(self, obj, cls=None): if obj is None: return self value = self.func(obj) object.__setattr__(obj, self.func.__name__, value) # obj.__dict__[self.func.__name__] = value = self.func(obj) return value def convert_path(pathname): """Return 'pathname' as a name that will work on the native filesystem. The path is split on '/' and put back together again using the current directory separator. Needed because filenames in the setup script are always supplied in Unix style, and have to be converted to the local convention before we can actually use them in the filesystem. Raises ValueError on non-Unix-ish systems if 'pathname' either starts or ends with a slash. """ if os.sep == '/': return pathname if not pathname: return pathname if pathname[0] == '/': raise ValueError("path '%s' cannot be absolute" % pathname) if pathname[-1] == '/': raise ValueError("path '%s' cannot end with '/'" % pathname) paths = pathname.split('/') while os.curdir in paths: paths.remove(os.curdir) if not paths: return os.curdir return os.path.join(*paths) class FileOperator(object): def __init__(self, dry_run=False): self.dry_run = dry_run self.ensured = set() self._init_record() def _init_record(self): self.record = False self.files_written = set() self.dirs_created = set() def record_as_written(self, path): if self.record: self.files_written.add(path) def newer(self, source, target): """Tell if the target is newer than the source. Returns true if 'source' exists and is more recently modified than 'target', or if 'source' exists and 'target' doesn't. Returns false if both exist and 'target' is the same age or younger than 'source'. Raise PackagingFileError if 'source' does not exist. Note that this test is not very accurate: files created in the same second will have the same "age". """ if not os.path.exists(source): raise DistlibException("file '%r' does not exist" % os.path.abspath(source)) if not os.path.exists(target): return True return os.stat(source).st_mtime > os.stat(target).st_mtime def copy_file(self, infile, outfile, check=True): """Copy a file respecting dry-run and force flags. """ self.ensure_dir(os.path.dirname(outfile)) logger.info('Copying %s to %s', infile, outfile) if not self.dry_run: msg = None if check: if os.path.islink(outfile): msg = '%s is a symlink' % outfile elif os.path.exists(outfile) and not os.path.isfile(outfile): msg = '%s is a non-regular file' % outfile if msg: raise ValueError(msg + ' which would be overwritten') shutil.copyfile(infile, outfile) self.record_as_written(outfile) def copy_stream(self, instream, outfile, encoding=None): assert not os.path.isdir(outfile) self.ensure_dir(os.path.dirname(outfile)) logger.info('Copying stream %s to %s', instream, outfile) if not self.dry_run: if encoding is None: outstream = open(outfile, 'wb') else: outstream = codecs.open(outfile, 'w', encoding=encoding) try: shutil.copyfileobj(instream, outstream) finally: outstream.close() self.record_as_written(outfile) def write_binary_file(self, path, data): self.ensure_dir(os.path.dirname(path)) if not self.dry_run: if os.path.exists(path): os.remove(path) with open(path, 'wb') as f: f.write(data) self.record_as_written(path) def write_text_file(self, path, data, encoding): self.write_binary_file(path, data.encode(encoding)) def set_mode(self, bits, mask, files): if os.name == 'posix' or (os.name == 'java' and os._name == 'posix'): # Set the executable bits (owner, group, and world) on # all the files specified. for f in files: if self.dry_run: logger.info("changing mode of %s", f) else: mode = (os.stat(f).st_mode | bits) & mask logger.info("changing mode of %s to %o", f, mode) os.chmod(f, mode) set_executable_mode = lambda s, f: s.set_mode(0o555, 0o7777, f) def ensure_dir(self, path): path = os.path.abspath(path) if path not in self.ensured and not os.path.exists(path): self.ensured.add(path) d, f = os.path.split(path) self.ensure_dir(d) logger.info('Creating %s' % path) if not self.dry_run: os.mkdir(path) if self.record: self.dirs_created.add(path) def byte_compile(self, path, optimize=False, force=False, prefix=None, hashed_invalidation=False): dpath = cache_from_source(path, not optimize) logger.info('Byte-compiling %s to %s', path, dpath) if not self.dry_run: if force or self.newer(path, dpath): if not prefix: diagpath = None else: assert path.startswith(prefix) diagpath = path[len(prefix):] compile_kwargs = {} if hashed_invalidation and hasattr(py_compile, 'PycInvalidationMode'): if not isinstance(hashed_invalidation, py_compile.PycInvalidationMode): hashed_invalidation = py_compile.PycInvalidationMode.CHECKED_HASH compile_kwargs['invalidation_mode'] = hashed_invalidation py_compile.compile(path, dpath, diagpath, True, **compile_kwargs) # raise error self.record_as_written(dpath) return dpath def ensure_removed(self, path): if os.path.exists(path): if os.path.isdir(path) and not os.path.islink(path): logger.debug('Removing directory tree at %s', path) if not self.dry_run: shutil.rmtree(path) if self.record: if path in self.dirs_created: self.dirs_created.remove(path) else: if os.path.islink(path): s = 'link' else: s = 'file' logger.debug('Removing %s %s', s, path) if not self.dry_run: os.remove(path) if self.record: if path in self.files_written: self.files_written.remove(path) def is_writable(self, path): result = False while not result: if os.path.exists(path): result = os.access(path, os.W_OK) break parent = os.path.dirname(path) if parent == path: break path = parent return result def commit(self): """ Commit recorded changes, turn off recording, return changes. """ assert self.record result = self.files_written, self.dirs_created self._init_record() return result def rollback(self): if not self.dry_run: for f in list(self.files_written): if os.path.exists(f): os.remove(f) # dirs should all be empty now, except perhaps for # __pycache__ subdirs # reverse so that subdirs appear before their parents dirs = sorted(self.dirs_created, reverse=True) for d in dirs: flist = os.listdir(d) if flist: assert flist == ['__pycache__'] sd = os.path.join(d, flist[0]) os.rmdir(sd) os.rmdir(d) # should fail if non-empty self._init_record() def resolve(module_name, dotted_path): if module_name in sys.modules: mod = sys.modules[module_name] else: mod = __import__(module_name) if dotted_path is None: result = mod else: parts = dotted_path.split('.') result = getattr(mod, parts.pop(0)) for p in parts: result = getattr(result, p) return result class ExportEntry(object): def __init__(self, name, prefix, suffix, flags): self.name = name self.prefix = prefix self.suffix = suffix self.flags = flags @cached_property def value(self): return resolve(self.prefix, self.suffix) def __repr__(self): # pragma: no cover return '' % (self.name, self.prefix, self.suffix, self.flags) def __eq__(self, other): if not isinstance(other, ExportEntry): result = False else: result = (self.name == other.name and self.prefix == other.prefix and self.suffix == other.suffix and self.flags == other.flags) return result __hash__ = object.__hash__ ENTRY_RE = re.compile( r'''(?P([^\[]\S*)) \s*=\s*(?P(\w+)([:\.]\w+)*) \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? ''', re.VERBOSE) def get_export_entry(specification): m = ENTRY_RE.search(specification) if not m: result = None if '[' in specification or ']' in specification: raise DistlibException("Invalid specification " "'%s'" % specification) else: d = m.groupdict() name = d['name'] path = d['callable'] colons = path.count(':') if colons == 0: prefix, suffix = path, None else: if colons != 1: raise DistlibException("Invalid specification " "'%s'" % specification) prefix, suffix = path.split(':') flags = d['flags'] if flags is None: if '[' in specification or ']' in specification: raise DistlibException("Invalid specification " "'%s'" % specification) flags = [] else: flags = [f.strip() for f in flags.split(',')] result = ExportEntry(name, prefix, suffix, flags) return result def get_cache_base(suffix=None): """ Return the default base location for distlib caches. If the directory does not exist, it is created. Use the suffix provided for the base directory, and default to '.distlib' if it isn't provided. On Windows, if LOCALAPPDATA is defined in the environment, then it is assumed to be a directory, and will be the parent directory of the result. On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home directory - using os.expanduser('~') - will be the parent directory of the result. The result is just the directory '.distlib' in the parent directory as determined above, or with the name specified with ``suffix``. """ if suffix is None: suffix = '.distlib' if os.name == 'nt' and 'LOCALAPPDATA' in os.environ: result = os.path.expandvars('$localappdata') else: # Assume posix, or old Windows result = os.path.expanduser('~') # we use 'isdir' instead of 'exists', because we want to # fail if there's a file with that name if os.path.isdir(result): usable = os.access(result, os.W_OK) if not usable: logger.warning('Directory exists but is not writable: %s', result) else: try: os.makedirs(result) usable = True except OSError: logger.warning('Unable to create %s', result, exc_info=True) usable = False if not usable: result = tempfile.mkdtemp() logger.warning('Default location unusable, using %s', result) return os.path.join(result, suffix) def path_to_cache_dir(path, use_abspath=True): """ Convert an absolute path to a directory name for use in a cache. The algorithm used is: #. On Windows, any ``':'`` in the drive is replaced with ``'---'``. #. Any occurrence of ``os.sep`` is replaced with ``'--'``. #. ``'.cache'`` is appended. """ d, p = os.path.splitdrive(os.path.abspath(path) if use_abspath else path) if d: d = d.replace(':', '---') p = p.replace(os.sep, '--') return d + p + '.cache' def ensure_slash(s): if not s.endswith('/'): return s + '/' return s def parse_credentials(netloc): username = password = None if '@' in netloc: prefix, netloc = netloc.rsplit('@', 1) if ':' not in prefix: username = prefix else: username, password = prefix.split(':', 1) if username: username = unquote(username) if password: password = unquote(password) return username, password, netloc def get_process_umask(): result = os.umask(0o22) os.umask(result) return result def is_string_sequence(seq): result = True i = None for i, s in enumerate(seq): if not isinstance(s, string_types): result = False break assert i is not None return result PROJECT_NAME_AND_VERSION = re.compile('([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-' '([a-z0-9_.+-]+)', re.I) PYTHON_VERSION = re.compile(r'-py(\d\.?\d?)') def split_filename(filename, project_name=None): """ Extract name, version, python version from a filename (no extension) Return name, version, pyver or None """ result = None pyver = None filename = unquote(filename).replace(' ', '-') m = PYTHON_VERSION.search(filename) if m: pyver = m.group(1) filename = filename[:m.start()] if project_name and len(filename) > len(project_name) + 1: m = re.match(re.escape(project_name) + r'\b', filename) if m: n = m.end() result = filename[:n], filename[n + 1:], pyver if result is None: m = PROJECT_NAME_AND_VERSION.match(filename) if m: result = m.group(1), m.group(3), pyver return result # Allow spaces in name because of legacy dists like "Twisted Core" NAME_VERSION_RE = re.compile(r'(?P[\w .-]+)\s*' r'\(\s*(?P[^\s)]+)\)$') def parse_name_and_version(p): """ A utility method used to get name and version from a string. From e.g. a Provides-Dist value. :param p: A value in a form 'foo (1.0)' :return: The name and version as a tuple. """ m = NAME_VERSION_RE.match(p) if not m: raise DistlibException('Ill-formed name/version string: \'%s\'' % p) d = m.groupdict() return d['name'].strip().lower(), d['ver'] def get_extras(requested, available): result = set() requested = set(requested or []) available = set(available or []) if '*' in requested: requested.remove('*') result |= available for r in requested: if r == '-': result.add(r) elif r.startswith('-'): unwanted = r[1:] if unwanted not in available: logger.warning('undeclared extra: %s' % unwanted) if unwanted in result: result.remove(unwanted) else: if r not in available: logger.warning('undeclared extra: %s' % r) result.add(r) return result # # Extended metadata functionality # def _get_external_data(url): result = {} try: # urlopen might fail if it runs into redirections, # because of Python issue #13696. Fixed in locators # using a custom redirect handler. resp = urlopen(url) headers = resp.info() ct = headers.get('Content-Type') if not ct.startswith('application/json'): logger.debug('Unexpected response for JSON request: %s', ct) else: reader = codecs.getreader('utf-8')(resp) # data = reader.read().decode('utf-8') # result = json.loads(data) result = json.load(reader) except Exception as e: logger.exception('Failed to get external data for %s: %s', url, e) return result _external_data_base_url = 'https://www.red-dove.com/pypi/projects/' def get_project_data(name): url = '%s/%s/project.json' % (name[0].upper(), name) url = urljoin(_external_data_base_url, url) result = _get_external_data(url) return result def get_package_data(name, version): url = '%s/%s/package-%s.json' % (name[0].upper(), name, version) url = urljoin(_external_data_base_url, url) return _get_external_data(url) class Cache(object): """ A class implementing a cache for resources that need to live in the file system e.g. shared libraries. This class was moved from resources to here because it could be used by other modules, e.g. the wheel module. """ def __init__(self, base): """ Initialise an instance. :param base: The base directory where the cache should be located. """ # we use 'isdir' instead of 'exists', because we want to # fail if there's a file with that name if not os.path.isdir(base): # pragma: no cover os.makedirs(base) if (os.stat(base).st_mode & 0o77) != 0: logger.warning('Directory \'%s\' is not private', base) self.base = os.path.abspath(os.path.normpath(base)) def prefix_to_dir(self, prefix, use_abspath=True): """ Converts a resource prefix to a directory name in the cache. """ return path_to_cache_dir(prefix, use_abspath=use_abspath) def clear(self): """ Clear the cache. """ not_removed = [] for fn in os.listdir(self.base): fn = os.path.join(self.base, fn) try: if os.path.islink(fn) or os.path.isfile(fn): os.remove(fn) elif os.path.isdir(fn): shutil.rmtree(fn) except Exception: not_removed.append(fn) return not_removed class EventMixin(object): """ A very simple publish/subscribe system. """ def __init__(self): self._subscribers = {} def add(self, event, subscriber, append=True): """ Add a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be added (and called when the event is published). :param append: Whether to append or prepend the subscriber to an existing subscriber list for the event. """ subs = self._subscribers if event not in subs: subs[event] = deque([subscriber]) else: sq = subs[event] if append: sq.append(subscriber) else: sq.appendleft(subscriber) def remove(self, event, subscriber): """ Remove a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be removed. """ subs = self._subscribers if event not in subs: raise ValueError('No subscribers: %r' % event) subs[event].remove(subscriber) def get_subscribers(self, event): """ Return an iterator for the subscribers for an event. :param event: The event to return subscribers for. """ return iter(self._subscribers.get(event, ())) def publish(self, event, *args, **kwargs): """ Publish a event and return a list of values returned by its subscribers. :param event: The event to publish. :param args: The positional arguments to pass to the event's subscribers. :param kwargs: The keyword arguments to pass to the event's subscribers. """ result = [] for subscriber in self.get_subscribers(event): try: value = subscriber(event, *args, **kwargs) except Exception: logger.exception('Exception during event publication') value = None result.append(value) logger.debug('publish %s: args = %s, kwargs = %s, result = %s', event, args, kwargs, result) return result # # Simple sequencing # class Sequencer(object): def __init__(self): self._preds = {} self._succs = {} self._nodes = set() # nodes with no preds/succs def add_node(self, node): self._nodes.add(node) def remove_node(self, node, edges=False): if node in self._nodes: self._nodes.remove(node) if edges: for p in set(self._preds.get(node, ())): self.remove(p, node) for s in set(self._succs.get(node, ())): self.remove(node, s) # Remove empties for k, v in list(self._preds.items()): if not v: del self._preds[k] for k, v in list(self._succs.items()): if not v: del self._succs[k] def add(self, pred, succ): assert pred != succ self._preds.setdefault(succ, set()).add(pred) self._succs.setdefault(pred, set()).add(succ) def remove(self, pred, succ): assert pred != succ try: preds = self._preds[succ] succs = self._succs[pred] except KeyError: # pragma: no cover raise ValueError('%r not a successor of anything' % succ) try: preds.remove(pred) succs.remove(succ) except KeyError: # pragma: no cover raise ValueError('%r not a successor of %r' % (succ, pred)) def is_step(self, step): return (step in self._preds or step in self._succs or step in self._nodes) def get_steps(self, final): if not self.is_step(final): raise ValueError('Unknown: %r' % final) result = [] todo = [] seen = set() todo.append(final) while todo: step = todo.pop(0) if step in seen: # if a step was already seen, # move it to the end (so it will appear earlier # when reversed on return) ... but not for the # final step, as that would be confusing for # users if step != final: result.remove(step) result.append(step) else: seen.add(step) result.append(step) preds = self._preds.get(step, ()) todo.extend(preds) return reversed(result) @property def strong_connections(self): # http://en.wikipedia.org/wiki/Tarjan%27s_strongly_connected_components_algorithm index_counter = [0] stack = [] lowlinks = {} index = {} result = [] graph = self._succs def strongconnect(node): # set the depth index for this node to the smallest unused index index[node] = index_counter[0] lowlinks[node] = index_counter[0] index_counter[0] += 1 stack.append(node) # Consider successors try: successors = graph[node] except Exception: successors = [] for successor in successors: if successor not in lowlinks: # Successor has not yet been visited strongconnect(successor) lowlinks[node] = min(lowlinks[node], lowlinks[successor]) elif successor in stack: # the successor is in the stack and hence in the current # strongly connected component (SCC) lowlinks[node] = min(lowlinks[node], index[successor]) # If `node` is a root node, pop the stack and generate an SCC if lowlinks[node] == index[node]: connected_component = [] while True: successor = stack.pop() connected_component.append(successor) if successor == node: break component = tuple(connected_component) # storing the result result.append(component) for node in graph: if node not in lowlinks: strongconnect(node) return result @property def dot(self): result = ['digraph G {'] for succ in self._preds: preds = self._preds[succ] for pred in preds: result.append(' %s -> %s;' % (pred, succ)) for node in self._nodes: result.append(' %s;' % node) result.append('}') return '\n'.join(result) # # Unarchiving functionality for zip, tar, tgz, tbz, whl # ARCHIVE_EXTENSIONS = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz', '.whl') def unarchive(archive_filename, dest_dir, format=None, check=True): def check_path(path): if not isinstance(path, text_type): path = path.decode('utf-8') p = os.path.abspath(os.path.join(dest_dir, path)) if not p.startswith(dest_dir) or p[plen] != os.sep: raise ValueError('path outside destination: %r' % p) dest_dir = os.path.abspath(dest_dir) plen = len(dest_dir) archive = None if format is None: if archive_filename.endswith(('.zip', '.whl')): format = 'zip' elif archive_filename.endswith(('.tar.gz', '.tgz')): format = 'tgz' mode = 'r:gz' elif archive_filename.endswith(('.tar.bz2', '.tbz')): format = 'tbz' mode = 'r:bz2' elif archive_filename.endswith('.tar'): format = 'tar' mode = 'r' else: # pragma: no cover raise ValueError('Unknown format for %r' % archive_filename) try: if format == 'zip': archive = ZipFile(archive_filename, 'r') if check: names = archive.namelist() for name in names: check_path(name) else: archive = tarfile.open(archive_filename, mode) if check: names = archive.getnames() for name in names: check_path(name) if format != 'zip' and sys.version_info[0] < 3: # See Python issue 17153. If the dest path contains Unicode, # tarfile extraction fails on Python 2.x if a member path name # contains non-ASCII characters - it leads to an implicit # bytes -> unicode conversion using ASCII to decode. for tarinfo in archive.getmembers(): if not isinstance(tarinfo.name, text_type): tarinfo.name = tarinfo.name.decode('utf-8') # Limit extraction of dangerous items, if this Python # allows it easily. If not, just trust the input. # See: https://docs.python.org/3/library/tarfile.html#extraction-filters def extraction_filter(member, path): """Run tarfile.tar_filter, but raise the expected ValueError""" # This is only called if the current Python has tarfile filters try: return tarfile.tar_filter(member, path) except tarfile.FilterError as exc: raise ValueError(str(exc)) archive.extraction_filter = extraction_filter archive.extractall(dest_dir) finally: if archive: archive.close() def zip_dir(directory): """zip a directory tree into a BytesIO object""" result = io.BytesIO() dlen = len(directory) with ZipFile(result, "w") as zf: for root, dirs, files in os.walk(directory): for name in files: full = os.path.join(root, name) rel = root[dlen:] dest = os.path.join(rel, name) zf.write(full, dest) return result # # Simple progress bar # UNITS = ('', 'K', 'M', 'G', 'T', 'P') class Progress(object): unknown = 'UNKNOWN' def __init__(self, minval=0, maxval=100): assert maxval is None or maxval >= minval self.min = self.cur = minval self.max = maxval self.started = None self.elapsed = 0 self.done = False def update(self, curval): assert self.min <= curval assert self.max is None or curval <= self.max self.cur = curval now = time.time() if self.started is None: self.started = now else: self.elapsed = now - self.started def increment(self, incr): assert incr >= 0 self.update(self.cur + incr) def start(self): self.update(self.min) return self def stop(self): if self.max is not None: self.update(self.max) self.done = True @property def maximum(self): return self.unknown if self.max is None else self.max @property def percentage(self): if self.done: result = '100 %' elif self.max is None: result = ' ?? %' else: v = 100.0 * (self.cur - self.min) / (self.max - self.min) result = '%3d %%' % v return result def format_duration(self, duration): if (duration <= 0) and self.max is None or self.cur == self.min: result = '??:??:??' # elif duration < 1: # result = '--:--:--' else: result = time.strftime('%H:%M:%S', time.gmtime(duration)) return result @property def ETA(self): if self.done: prefix = 'Done' t = self.elapsed # import pdb; pdb.set_trace() else: prefix = 'ETA ' if self.max is None: t = -1 elif self.elapsed == 0 or (self.cur == self.min): t = 0 else: # import pdb; pdb.set_trace() t = float(self.max - self.min) t /= self.cur - self.min t = (t - 1) * self.elapsed return '%s: %s' % (prefix, self.format_duration(t)) @property def speed(self): if self.elapsed == 0: result = 0.0 else: result = (self.cur - self.min) / self.elapsed for unit in UNITS: if result < 1000: break result /= 1000.0 return '%d %sB/s' % (result, unit) # # Glob functionality # RICH_GLOB = re.compile(r'\{([^}]*)\}') _CHECK_RECURSIVE_GLOB = re.compile(r'[^/\\,{]\*\*|\*\*[^/\\,}]') _CHECK_MISMATCH_SET = re.compile(r'^[^{]*\}|\{[^}]*$') def iglob(path_glob): """Extended globbing function that supports ** and {opt1,opt2,opt3}.""" if _CHECK_RECURSIVE_GLOB.search(path_glob): msg = """invalid glob %r: recursive glob "**" must be used alone""" raise ValueError(msg % path_glob) if _CHECK_MISMATCH_SET.search(path_glob): msg = """invalid glob %r: mismatching set marker '{' or '}'""" raise ValueError(msg % path_glob) return _iglob(path_glob) def _iglob(path_glob): rich_path_glob = RICH_GLOB.split(path_glob, 1) if len(rich_path_glob) > 1: assert len(rich_path_glob) == 3, rich_path_glob prefix, set, suffix = rich_path_glob for item in set.split(','): for path in _iglob(''.join((prefix, item, suffix))): yield path else: if '**' not in path_glob: for item in std_iglob(path_glob): yield item else: prefix, radical = path_glob.split('**', 1) if prefix == '': prefix = '.' if radical == '': radical = '*' else: # we support both radical = radical.lstrip('/') radical = radical.lstrip('\\') for path, dir, files in os.walk(prefix): path = os.path.normpath(path) for fn in _iglob(os.path.join(path, radical)): yield fn if ssl: from .compat import (HTTPSHandler as BaseHTTPSHandler, match_hostname, CertificateError) # # HTTPSConnection which verifies certificates/matches domains # class HTTPSConnection(httplib.HTTPSConnection): ca_certs = None # set this to the path to the certs file (.pem) check_domain = True # only used if ca_certs is not None # noinspection PyPropertyAccess def connect(self): sock = socket.create_connection((self.host, self.port), self.timeout) if getattr(self, '_tunnel_host', False): self.sock = sock self._tunnel() context = ssl.SSLContext(ssl.PROTOCOL_SSLv23) if hasattr(ssl, 'OP_NO_SSLv2'): context.options |= ssl.OP_NO_SSLv2 if getattr(self, 'cert_file', None): context.load_cert_chain(self.cert_file, self.key_file) kwargs = {} if self.ca_certs: context.verify_mode = ssl.CERT_REQUIRED context.load_verify_locations(cafile=self.ca_certs) if getattr(ssl, 'HAS_SNI', False): kwargs['server_hostname'] = self.host self.sock = context.wrap_socket(sock, **kwargs) if self.ca_certs and self.check_domain: try: match_hostname(self.sock.getpeercert(), self.host) logger.debug('Host verified: %s', self.host) except CertificateError: # pragma: no cover self.sock.shutdown(socket.SHUT_RDWR) self.sock.close() raise class HTTPSHandler(BaseHTTPSHandler): def __init__(self, ca_certs, check_domain=True): BaseHTTPSHandler.__init__(self) self.ca_certs = ca_certs self.check_domain = check_domain def _conn_maker(self, *args, **kwargs): """ This is called to create a connection instance. Normally you'd pass a connection class to do_open, but it doesn't actually check for a class, and just expects a callable. As long as we behave just as a constructor would have, we should be OK. If it ever changes so that we *must* pass a class, we'll create an UnsafeHTTPSConnection class which just sets check_domain to False in the class definition, and choose which one to pass to do_open. """ result = HTTPSConnection(*args, **kwargs) if self.ca_certs: result.ca_certs = self.ca_certs result.check_domain = self.check_domain return result def https_open(self, req): try: return self.do_open(self._conn_maker, req) except URLError as e: if 'certificate verify failed' in str(e.reason): raise CertificateError('Unable to verify server certificate ' 'for %s' % req.host) else: raise # # To prevent against mixing HTTP traffic with HTTPS (examples: A Man-In-The- # Middle proxy using HTTP listens on port 443, or an index mistakenly serves # HTML containing a http://xyz link when it should be https://xyz), # you can use the following handler class, which does not allow HTTP traffic. # # It works by inheriting from HTTPHandler - so build_opener won't add a # handler for HTTP itself. # class HTTPSOnlyHandler(HTTPSHandler, HTTPHandler): def http_open(self, req): raise URLError('Unexpected HTTP request on what should be a secure ' 'connection: %s' % req) # # XML-RPC with timeouts # class Transport(xmlrpclib.Transport): def __init__(self, timeout, use_datetime=0): self.timeout = timeout xmlrpclib.Transport.__init__(self, use_datetime) def make_connection(self, host): h, eh, x509 = self.get_host_info(host) if not self._connection or host != self._connection[0]: self._extra_headers = eh self._connection = host, httplib.HTTPConnection(h) return self._connection[1] if ssl: class SafeTransport(xmlrpclib.SafeTransport): def __init__(self, timeout, use_datetime=0): self.timeout = timeout xmlrpclib.SafeTransport.__init__(self, use_datetime) def make_connection(self, host): h, eh, kwargs = self.get_host_info(host) if not kwargs: kwargs = {} kwargs['timeout'] = self.timeout if not self._connection or host != self._connection[0]: self._extra_headers = eh self._connection = host, httplib.HTTPSConnection(h, None, **kwargs) return self._connection[1] class ServerProxy(xmlrpclib.ServerProxy): def __init__(self, uri, **kwargs): self.timeout = timeout = kwargs.pop('timeout', None) # The above classes only come into play if a timeout # is specified if timeout is not None: # scheme = splittype(uri) # deprecated as of Python 3.8 scheme = urlparse(uri)[0] use_datetime = kwargs.get('use_datetime', 0) if scheme == 'https': tcls = SafeTransport else: tcls = Transport kwargs['transport'] = t = tcls(timeout, use_datetime=use_datetime) self.transport = t xmlrpclib.ServerProxy.__init__(self, uri, **kwargs) # # CSV functionality. This is provided because on 2.x, the csv module can't # handle Unicode. However, we need to deal with Unicode in e.g. RECORD files. # def _csv_open(fn, mode, **kwargs): if sys.version_info[0] < 3: mode += 'b' else: kwargs['newline'] = '' # Python 3 determines encoding from locale. Force 'utf-8' # file encoding to match other forced utf-8 encoding kwargs['encoding'] = 'utf-8' return open(fn, mode, **kwargs) class CSVBase(object): defaults = { 'delimiter': str(','), # The strs are used because we need native 'quotechar': str('"'), # str in the csv API (2.x won't take 'lineterminator': str('\n') # Unicode) } def __enter__(self): return self def __exit__(self, *exc_info): self.stream.close() class CSVReader(CSVBase): def __init__(self, **kwargs): if 'stream' in kwargs: stream = kwargs['stream'] if sys.version_info[0] >= 3: # needs to be a text stream stream = codecs.getreader('utf-8')(stream) self.stream = stream else: self.stream = _csv_open(kwargs['path'], 'r') self.reader = csv.reader(self.stream, **self.defaults) def __iter__(self): return self def next(self): result = next(self.reader) if sys.version_info[0] < 3: for i, item in enumerate(result): if not isinstance(item, text_type): result[i] = item.decode('utf-8') return result __next__ = next class CSVWriter(CSVBase): def __init__(self, fn, **kwargs): self.stream = _csv_open(fn, 'w') self.writer = csv.writer(self.stream, **self.defaults) def writerow(self, row): if sys.version_info[0] < 3: r = [] for item in row: if isinstance(item, text_type): item = item.encode('utf-8') r.append(item) row = r self.writer.writerow(row) # # Configurator functionality # class Configurator(BaseConfigurator): value_converters = dict(BaseConfigurator.value_converters) value_converters['inc'] = 'inc_convert' def __init__(self, config, base=None): super(Configurator, self).__init__(config) self.base = base or os.getcwd() def configure_custom(self, config): def convert(o): if isinstance(o, (list, tuple)): result = type(o)([convert(i) for i in o]) elif isinstance(o, dict): if '()' in o: result = self.configure_custom(o) else: result = {} for k in o: result[k] = convert(o[k]) else: result = self.convert(o) return result c = config.pop('()') if not callable(c): c = self.resolve(c) props = config.pop('.', None) # Check for valid identifiers args = config.pop('[]', ()) if args: args = tuple([convert(o) for o in args]) items = [(k, convert(config[k])) for k in config if valid_ident(k)] kwargs = dict(items) result = c(*args, **kwargs) if props: for n, v in props.items(): setattr(result, n, convert(v)) return result def __getitem__(self, key): result = self.config[key] if isinstance(result, dict) and '()' in result: self.config[key] = result = self.configure_custom(result) return result def inc_convert(self, value): """Default converter for the inc:// protocol.""" if not os.path.isabs(value): value = os.path.join(self.base, value) with codecs.open(value, 'r', encoding='utf-8') as f: result = json.load(f) return result class SubprocessMixin(object): """ Mixin for running subprocesses and capturing their output """ def __init__(self, verbose=False, progress=None): self.verbose = verbose self.progress = progress def reader(self, stream, context): """ Read lines from a subprocess' output stream and either pass to a progress callable (if specified) or write progress information to sys.stderr. """ progress = self.progress verbose = self.verbose while True: s = stream.readline() if not s: break if progress is not None: progress(s, context) else: if not verbose: sys.stderr.write('.') else: sys.stderr.write(s.decode('utf-8')) sys.stderr.flush() stream.close() def run_command(self, cmd, **kwargs): p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, **kwargs) t1 = threading.Thread(target=self.reader, args=(p.stdout, 'stdout')) t1.start() t2 = threading.Thread(target=self.reader, args=(p.stderr, 'stderr')) t2.start() p.wait() t1.join() t2.join() if self.progress is not None: self.progress('done.', 'main') elif self.verbose: sys.stderr.write('done.\n') return p def normalize_name(name): """Normalize a python package name a la PEP 503""" # https://www.python.org/dev/peps/pep-0503/#normalized-names return re.sub('[-_.]+', '-', name).lower() # def _get_pypirc_command(): # """ # Get the distutils command for interacting with PyPI configurations. # :return: the command. # """ # from distutils.core import Distribution # from distutils.config import PyPIRCCommand # d = Distribution() # return PyPIRCCommand(d) class PyPIRCFile(object): DEFAULT_REPOSITORY = 'https://upload.pypi.org/legacy/' DEFAULT_REALM = 'pypi' def __init__(self, fn=None, url=None): if fn is None: fn = os.path.join(os.path.expanduser('~'), '.pypirc') self.filename = fn self.url = url def read(self): result = {} if os.path.exists(self.filename): repository = self.url or self.DEFAULT_REPOSITORY config = configparser.RawConfigParser() config.read(self.filename) sections = config.sections() if 'distutils' in sections: # let's get the list of servers index_servers = config.get('distutils', 'index-servers') _servers = [server.strip() for server in index_servers.split('\n') if server.strip() != ''] if _servers == []: # nothing set, let's try to get the default pypi if 'pypi' in sections: _servers = ['pypi'] else: for server in _servers: result = {'server': server} result['username'] = config.get(server, 'username') # optional params for key, default in (('repository', self.DEFAULT_REPOSITORY), ('realm', self.DEFAULT_REALM), ('password', None)): if config.has_option(server, key): result[key] = config.get(server, key) else: result[key] = default # work around people having "repository" for the "pypi" # section of their config set to the HTTP (rather than # HTTPS) URL if (server == 'pypi' and repository in (self.DEFAULT_REPOSITORY, 'pypi')): result['repository'] = self.DEFAULT_REPOSITORY elif (result['server'] != repository and result['repository'] != repository): result = {} elif 'server-login' in sections: # old format server = 'server-login' if config.has_option(server, 'repository'): repository = config.get(server, 'repository') else: repository = self.DEFAULT_REPOSITORY result = { 'username': config.get(server, 'username'), 'password': config.get(server, 'password'), 'repository': repository, 'server': server, 'realm': self.DEFAULT_REALM } return result def update(self, username, password): # import pdb; pdb.set_trace() config = configparser.RawConfigParser() fn = self.filename config.read(fn) if not config.has_section('pypi'): config.add_section('pypi') config.set('pypi', 'username', username) config.set('pypi', 'password', password) with open(fn, 'w') as f: config.write(f) def _load_pypirc(index): """ Read the PyPI access configuration as supported by distutils. """ return PyPIRCFile(url=index.url).read() def _store_pypirc(index): PyPIRCFile().update(index.username, index.password) # # get_platform()/get_host_platform() copied from Python 3.10.a0 source, with some minor # tweaks # def get_host_platform(): """Return a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. on Linux, the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. """ if os.name == 'nt': if 'amd64' in sys.version.lower(): return 'win-amd64' if '(arm)' in sys.version.lower(): return 'win-arm32' if '(arm64)' in sys.version.lower(): return 'win-arm64' return sys.platform # Set for cross builds explicitly if "_PYTHON_HOST_PLATFORM" in os.environ: return os.environ["_PYTHON_HOST_PLATFORM"] if os.name != 'posix' or not hasattr(os, 'uname'): # XXX what about the architecture? NT is Intel or Alpha, # Mac OS is M68k or PPC, etc. return sys.platform # Try to distinguish various flavours of Unix (osname, host, release, version, machine) = os.uname() # Convert the OS name to lowercase, remove '/' characters, and translate # spaces (for "Power Macintosh") osname = osname.lower().replace('/', '') machine = machine.replace(' ', '_').replace('/', '-') if osname[:5] == 'linux': # At least on Linux/Intel, 'machine' is the processor -- # i386, etc. # XXX what about Alpha, SPARC, etc? return "%s-%s" % (osname, machine) elif osname[:5] == 'sunos': if release[0] >= '5': # SunOS 5 == Solaris 2 osname = 'solaris' release = '%d.%s' % (int(release[0]) - 3, release[2:]) # We can't use 'platform.architecture()[0]' because a # bootstrap problem. We use a dict to get an error # if some suspicious happens. bitness = {2147483647: '32bit', 9223372036854775807: '64bit'} machine += '.%s' % bitness[sys.maxsize] # fall through to standard osname-release-machine representation elif osname[:3] == 'aix': from _aix_support import aix_platform return aix_platform() elif osname[:6] == 'cygwin': osname = 'cygwin' rel_re = re.compile(r'[\d.]+', re.ASCII) m = rel_re.match(release) if m: release = m.group() elif osname[:6] == 'darwin': import _osx_support try: from distutils import sysconfig except ImportError: import sysconfig osname, release, machine = _osx_support.get_platform_osx(sysconfig.get_config_vars(), osname, release, machine) return '%s-%s-%s' % (osname, release, machine) _TARGET_TO_PLAT = { 'x86': 'win32', 'x64': 'win-amd64', 'arm': 'win-arm32', } def get_platform(): if os.name != 'nt': return get_host_platform() cross_compilation_target = os.environ.get('VSCMD_ARG_TGT_ARCH') if cross_compilation_target not in _TARGET_TO_PLAT: return get_host_platform() return _TARGET_TO_PLAT[cross_compilation_target] PK7QYN\\@__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.py# -*- coding: utf-8 -*- # # Copyright (C) 2012-2023 The Python Software Foundation. # See LICENSE.txt and CONTRIBUTORS.txt. # """ Implementation of a flexible versioning scheme providing support for PEP-440, setuptools-compatible and semantic versioning. """ import logging import re from .compat import string_types from .util import parse_requirement __all__ = ['NormalizedVersion', 'NormalizedMatcher', 'LegacyVersion', 'LegacyMatcher', 'SemanticVersion', 'SemanticMatcher', 'UnsupportedVersionError', 'get_scheme'] logger = logging.getLogger(__name__) class UnsupportedVersionError(ValueError): """This is an unsupported version.""" pass class Version(object): def __init__(self, s): self._string = s = s.strip() self._parts = parts = self.parse(s) assert isinstance(parts, tuple) assert len(parts) > 0 def parse(self, s): raise NotImplementedError('please implement in a subclass') def _check_compatible(self, other): if type(self) != type(other): raise TypeError('cannot compare %r and %r' % (self, other)) def __eq__(self, other): self._check_compatible(other) return self._parts == other._parts def __ne__(self, other): return not self.__eq__(other) def __lt__(self, other): self._check_compatible(other) return self._parts < other._parts def __gt__(self, other): return not (self.__lt__(other) or self.__eq__(other)) def __le__(self, other): return self.__lt__(other) or self.__eq__(other) def __ge__(self, other): return self.__gt__(other) or self.__eq__(other) # See http://docs.python.org/reference/datamodel#object.__hash__ def __hash__(self): return hash(self._parts) def __repr__(self): return "%s('%s')" % (self.__class__.__name__, self._string) def __str__(self): return self._string @property def is_prerelease(self): raise NotImplementedError('Please implement in subclasses.') class Matcher(object): version_class = None # value is either a callable or the name of a method _operators = { '<': lambda v, c, p: v < c, '>': lambda v, c, p: v > c, '<=': lambda v, c, p: v == c or v < c, '>=': lambda v, c, p: v == c or v > c, '==': lambda v, c, p: v == c, '===': lambda v, c, p: v == c, # by default, compatible => >=. '~=': lambda v, c, p: v == c or v > c, '!=': lambda v, c, p: v != c, } # this is a method only to support alternative implementations # via overriding def parse_requirement(self, s): return parse_requirement(s) def __init__(self, s): if self.version_class is None: raise ValueError('Please specify a version class') self._string = s = s.strip() r = self.parse_requirement(s) if not r: raise ValueError('Not valid: %r' % s) self.name = r.name self.key = self.name.lower() # for case-insensitive comparisons clist = [] if r.constraints: # import pdb; pdb.set_trace() for op, s in r.constraints: if s.endswith('.*'): if op not in ('==', '!='): raise ValueError('\'.*\' not allowed for ' '%r constraints' % op) # Could be a partial version (e.g. for '2.*') which # won't parse as a version, so keep it as a string vn, prefix = s[:-2], True # Just to check that vn is a valid version self.version_class(vn) else: # Should parse as a version, so we can create an # instance for the comparison vn, prefix = self.version_class(s), False clist.append((op, vn, prefix)) self._parts = tuple(clist) def match(self, version): """ Check if the provided version matches the constraints. :param version: The version to match against this instance. :type version: String or :class:`Version` instance. """ if isinstance(version, string_types): version = self.version_class(version) for operator, constraint, prefix in self._parts: f = self._operators.get(operator) if isinstance(f, string_types): f = getattr(self, f) if not f: msg = ('%r not implemented ' 'for %s' % (operator, self.__class__.__name__)) raise NotImplementedError(msg) if not f(version, constraint, prefix): return False return True @property def exact_version(self): result = None if len(self._parts) == 1 and self._parts[0][0] in ('==', '==='): result = self._parts[0][1] return result def _check_compatible(self, other): if type(self) != type(other) or self.name != other.name: raise TypeError('cannot compare %s and %s' % (self, other)) def __eq__(self, other): self._check_compatible(other) return self.key == other.key and self._parts == other._parts def __ne__(self, other): return not self.__eq__(other) # See http://docs.python.org/reference/datamodel#object.__hash__ def __hash__(self): return hash(self.key) + hash(self._parts) def __repr__(self): return "%s(%r)" % (self.__class__.__name__, self._string) def __str__(self): return self._string PEP440_VERSION_RE = re.compile(r'^v?(\d+!)?(\d+(\.\d+)*)((a|alpha|b|beta|c|rc|pre|preview)(\d+)?)?' r'(\.(post|r|rev)(\d+)?)?([._-]?(dev)(\d+)?)?' r'(\+([a-zA-Z\d]+(\.[a-zA-Z\d]+)?))?$', re.I) def _pep_440_key(s): s = s.strip() m = PEP440_VERSION_RE.match(s) if not m: raise UnsupportedVersionError('Not a valid version: %s' % s) groups = m.groups() nums = tuple(int(v) for v in groups[1].split('.')) while len(nums) > 1 and nums[-1] == 0: nums = nums[:-1] if not groups[0]: epoch = 0 else: epoch = int(groups[0][:-1]) pre = groups[4:6] post = groups[7:9] dev = groups[10:12] local = groups[13] if pre == (None, None): pre = () else: if pre[1] is None: pre = pre[0], 0 else: pre = pre[0], int(pre[1]) if post == (None, None): post = () else: if post[1] is None: post = post[0], 0 else: post = post[0], int(post[1]) if dev == (None, None): dev = () else: if dev[1] is None: dev = dev[0], 0 else: dev = dev[0], int(dev[1]) if local is None: local = () else: parts = [] for part in local.split('.'): # to ensure that numeric compares as > lexicographic, avoid # comparing them directly, but encode a tuple which ensures # correct sorting if part.isdigit(): part = (1, int(part)) else: part = (0, part) parts.append(part) local = tuple(parts) if not pre: # either before pre-release, or final release and after if not post and dev: # before pre-release pre = ('a', -1) # to sort before a0 else: pre = ('z',) # to sort after all pre-releases # now look at the state of post and dev. if not post: post = ('_',) # sort before 'a' if not dev: dev = ('final',) return epoch, nums, pre, post, dev, local _normalized_key = _pep_440_key class NormalizedVersion(Version): """A rational version. Good: 1.2 # equivalent to "1.2.0" 1.2.0 1.2a1 1.2.3a2 1.2.3b1 1.2.3c1 1.2.3.4 TODO: fill this out Bad: 1 # minimum two numbers 1.2a # release level must have a release serial 1.2.3b """ def parse(self, s): result = _normalized_key(s) # _normalized_key loses trailing zeroes in the release # clause, since that's needed to ensure that X.Y == X.Y.0 == X.Y.0.0 # However, PEP 440 prefix matching needs it: for example, # (~= 1.4.5.0) matches differently to (~= 1.4.5.0.0). m = PEP440_VERSION_RE.match(s) # must succeed groups = m.groups() self._release_clause = tuple(int(v) for v in groups[1].split('.')) return result PREREL_TAGS = set(['a', 'b', 'c', 'rc', 'dev']) @property def is_prerelease(self): return any(t[0] in self.PREREL_TAGS for t in self._parts if t) def _match_prefix(x, y): x = str(x) y = str(y) if x == y: return True if not x.startswith(y): return False n = len(y) return x[n] == '.' class NormalizedMatcher(Matcher): version_class = NormalizedVersion # value is either a callable or the name of a method _operators = { '~=': '_match_compatible', '<': '_match_lt', '>': '_match_gt', '<=': '_match_le', '>=': '_match_ge', '==': '_match_eq', '===': '_match_arbitrary', '!=': '_match_ne', } def _adjust_local(self, version, constraint, prefix): if prefix: strip_local = '+' not in constraint and version._parts[-1] else: # both constraint and version are # NormalizedVersion instances. # If constraint does not have a local component, # ensure the version doesn't, either. strip_local = not constraint._parts[-1] and version._parts[-1] if strip_local: s = version._string.split('+', 1)[0] version = self.version_class(s) return version, constraint def _match_lt(self, version, constraint, prefix): version, constraint = self._adjust_local(version, constraint, prefix) if version >= constraint: return False release_clause = constraint._release_clause pfx = '.'.join([str(i) for i in release_clause]) return not _match_prefix(version, pfx) def _match_gt(self, version, constraint, prefix): version, constraint = self._adjust_local(version, constraint, prefix) if version <= constraint: return False release_clause = constraint._release_clause pfx = '.'.join([str(i) for i in release_clause]) return not _match_prefix(version, pfx) def _match_le(self, version, constraint, prefix): version, constraint = self._adjust_local(version, constraint, prefix) return version <= constraint def _match_ge(self, version, constraint, prefix): version, constraint = self._adjust_local(version, constraint, prefix) return version >= constraint def _match_eq(self, version, constraint, prefix): version, constraint = self._adjust_local(version, constraint, prefix) if not prefix: result = (version == constraint) else: result = _match_prefix(version, constraint) return result def _match_arbitrary(self, version, constraint, prefix): return str(version) == str(constraint) def _match_ne(self, version, constraint, prefix): version, constraint = self._adjust_local(version, constraint, prefix) if not prefix: result = (version != constraint) else: result = not _match_prefix(version, constraint) return result def _match_compatible(self, version, constraint, prefix): version, constraint = self._adjust_local(version, constraint, prefix) if version == constraint: return True if version < constraint: return False # if not prefix: # return True release_clause = constraint._release_clause if len(release_clause) > 1: release_clause = release_clause[:-1] pfx = '.'.join([str(i) for i in release_clause]) return _match_prefix(version, pfx) _REPLACEMENTS = ( (re.compile('[.+-]$'), ''), # remove trailing puncts (re.compile(r'^[.](\d)'), r'0.\1'), # .N -> 0.N at start (re.compile('^[.-]'), ''), # remove leading puncts (re.compile(r'^\((.*)\)$'), r'\1'), # remove parentheses (re.compile(r'^v(ersion)?\s*(\d+)'), r'\2'), # remove leading v(ersion) (re.compile(r'^r(ev)?\s*(\d+)'), r'\2'), # remove leading v(ersion) (re.compile('[.]{2,}'), '.'), # multiple runs of '.' (re.compile(r'\b(alfa|apha)\b'), 'alpha'), # misspelt alpha (re.compile(r'\b(pre-alpha|prealpha)\b'), 'pre.alpha'), # standardise (re.compile(r'\(beta\)$'), 'beta'), # remove parentheses ) _SUFFIX_REPLACEMENTS = ( (re.compile('^[:~._+-]+'), ''), # remove leading puncts (re.compile('[,*")([\\]]'), ''), # remove unwanted chars (re.compile('[~:+_ -]'), '.'), # replace illegal chars (re.compile('[.]{2,}'), '.'), # multiple runs of '.' (re.compile(r'\.$'), ''), # trailing '.' ) _NUMERIC_PREFIX = re.compile(r'(\d+(\.\d+)*)') def _suggest_semantic_version(s): """ Try to suggest a semantic form for a version for which _suggest_normalized_version couldn't come up with anything. """ result = s.strip().lower() for pat, repl in _REPLACEMENTS: result = pat.sub(repl, result) if not result: result = '0.0.0' # Now look for numeric prefix, and separate it out from # the rest. # import pdb; pdb.set_trace() m = _NUMERIC_PREFIX.match(result) if not m: prefix = '0.0.0' suffix = result else: prefix = m.groups()[0].split('.') prefix = [int(i) for i in prefix] while len(prefix) < 3: prefix.append(0) if len(prefix) == 3: suffix = result[m.end():] else: suffix = '.'.join([str(i) for i in prefix[3:]]) + result[m.end():] prefix = prefix[:3] prefix = '.'.join([str(i) for i in prefix]) suffix = suffix.strip() if suffix: # import pdb; pdb.set_trace() # massage the suffix. for pat, repl in _SUFFIX_REPLACEMENTS: suffix = pat.sub(repl, suffix) if not suffix: result = prefix else: sep = '-' if 'dev' in suffix else '+' result = prefix + sep + suffix if not is_semver(result): result = None return result def _suggest_normalized_version(s): """Suggest a normalized version close to the given version string. If you have a version string that isn't rational (i.e. NormalizedVersion doesn't like it) then you might be able to get an equivalent (or close) rational version from this function. This does a number of simple normalizations to the given string, based on observation of versions currently in use on PyPI. Given a dump of those version during PyCon 2009, 4287 of them: - 2312 (53.93%) match NormalizedVersion without change with the automatic suggestion - 3474 (81.04%) match when using this suggestion method @param s {str} An irrational version string. @returns A rational version string, or None, if couldn't determine one. """ try: _normalized_key(s) return s # already rational except UnsupportedVersionError: pass rs = s.lower() # part of this could use maketrans for orig, repl in (('-alpha', 'a'), ('-beta', 'b'), ('alpha', 'a'), ('beta', 'b'), ('rc', 'c'), ('-final', ''), ('-pre', 'c'), ('-release', ''), ('.release', ''), ('-stable', ''), ('+', '.'), ('_', '.'), (' ', ''), ('.final', ''), ('final', '')): rs = rs.replace(orig, repl) # if something ends with dev or pre, we add a 0 rs = re.sub(r"pre$", r"pre0", rs) rs = re.sub(r"dev$", r"dev0", rs) # if we have something like "b-2" or "a.2" at the end of the # version, that is probably beta, alpha, etc # let's remove the dash or dot rs = re.sub(r"([abc]|rc)[\-\.](\d+)$", r"\1\2", rs) # 1.0-dev-r371 -> 1.0.dev371 # 0.1-dev-r79 -> 0.1.dev79 rs = re.sub(r"[\-\.](dev)[\-\.]?r?(\d+)$", r".\1\2", rs) # Clean: 2.0.a.3, 2.0.b1, 0.9.0~c1 rs = re.sub(r"[.~]?([abc])\.?", r"\1", rs) # Clean: v0.3, v1.0 if rs.startswith('v'): rs = rs[1:] # Clean leading '0's on numbers. # TODO: unintended side-effect on, e.g., "2003.05.09" # PyPI stats: 77 (~2%) better rs = re.sub(r"\b0+(\d+)(?!\d)", r"\1", rs) # Clean a/b/c with no version. E.g. "1.0a" -> "1.0a0". Setuptools infers # zero. # PyPI stats: 245 (7.56%) better rs = re.sub(r"(\d+[abc])$", r"\g<1>0", rs) # the 'dev-rNNN' tag is a dev tag rs = re.sub(r"\.?(dev-r|dev\.r)\.?(\d+)$", r".dev\2", rs) # clean the - when used as a pre delimiter rs = re.sub(r"-(a|b|c)(\d+)$", r"\1\2", rs) # a terminal "dev" or "devel" can be changed into ".dev0" rs = re.sub(r"[\.\-](dev|devel)$", r".dev0", rs) # a terminal "dev" can be changed into ".dev0" rs = re.sub(r"(?![\.\-])dev$", r".dev0", rs) # a terminal "final" or "stable" can be removed rs = re.sub(r"(final|stable)$", "", rs) # The 'r' and the '-' tags are post release tags # 0.4a1.r10 -> 0.4a1.post10 # 0.9.33-17222 -> 0.9.33.post17222 # 0.9.33-r17222 -> 0.9.33.post17222 rs = re.sub(r"\.?(r|-|-r)\.?(\d+)$", r".post\2", rs) # Clean 'r' instead of 'dev' usage: # 0.9.33+r17222 -> 0.9.33.dev17222 # 1.0dev123 -> 1.0.dev123 # 1.0.git123 -> 1.0.dev123 # 1.0.bzr123 -> 1.0.dev123 # 0.1a0dev.123 -> 0.1a0.dev123 # PyPI stats: ~150 (~4%) better rs = re.sub(r"\.?(dev|git|bzr)\.?(\d+)$", r".dev\2", rs) # Clean '.pre' (normalized from '-pre' above) instead of 'c' usage: # 0.2.pre1 -> 0.2c1 # 0.2-c1 -> 0.2c1 # 1.0preview123 -> 1.0c123 # PyPI stats: ~21 (0.62%) better rs = re.sub(r"\.?(pre|preview|-c)(\d+)$", r"c\g<2>", rs) # Tcl/Tk uses "px" for their post release markers rs = re.sub(r"p(\d+)$", r".post\1", rs) try: _normalized_key(rs) except UnsupportedVersionError: rs = None return rs # # Legacy version processing (distribute-compatible) # _VERSION_PART = re.compile(r'([a-z]+|\d+|[\.-])', re.I) _VERSION_REPLACE = { 'pre': 'c', 'preview': 'c', '-': 'final-', 'rc': 'c', 'dev': '@', '': None, '.': None, } def _legacy_key(s): def get_parts(s): result = [] for p in _VERSION_PART.split(s.lower()): p = _VERSION_REPLACE.get(p, p) if p: if '0' <= p[:1] <= '9': p = p.zfill(8) else: p = '*' + p result.append(p) result.append('*final') return result result = [] for p in get_parts(s): if p.startswith('*'): if p < '*final': while result and result[-1] == '*final-': result.pop() while result and result[-1] == '00000000': result.pop() result.append(p) return tuple(result) class LegacyVersion(Version): def parse(self, s): return _legacy_key(s) @property def is_prerelease(self): result = False for x in self._parts: if (isinstance(x, string_types) and x.startswith('*') and x < '*final'): result = True break return result class LegacyMatcher(Matcher): version_class = LegacyVersion _operators = dict(Matcher._operators) _operators['~='] = '_match_compatible' numeric_re = re.compile(r'^(\d+(\.\d+)*)') def _match_compatible(self, version, constraint, prefix): if version < constraint: return False m = self.numeric_re.match(str(constraint)) if not m: logger.warning('Cannot compute compatible match for version %s ' ' and constraint %s', version, constraint) return True s = m.groups()[0] if '.' in s: s = s.rsplit('.', 1)[0] return _match_prefix(version, s) # # Semantic versioning # _SEMVER_RE = re.compile(r'^(\d+)\.(\d+)\.(\d+)' r'(-[a-z0-9]+(\.[a-z0-9-]+)*)?' r'(\+[a-z0-9]+(\.[a-z0-9-]+)*)?$', re.I) def is_semver(s): return _SEMVER_RE.match(s) def _semantic_key(s): def make_tuple(s, absent): if s is None: result = (absent,) else: parts = s[1:].split('.') # We can't compare ints and strings on Python 3, so fudge it # by zero-filling numeric values so simulate a numeric comparison result = tuple([p.zfill(8) if p.isdigit() else p for p in parts]) return result m = is_semver(s) if not m: raise UnsupportedVersionError(s) groups = m.groups() major, minor, patch = [int(i) for i in groups[:3]] # choose the '|' and '*' so that versions sort correctly pre, build = make_tuple(groups[3], '|'), make_tuple(groups[5], '*') return (major, minor, patch), pre, build class SemanticVersion(Version): def parse(self, s): return _semantic_key(s) @property def is_prerelease(self): return self._parts[1][0] != '|' class SemanticMatcher(Matcher): version_class = SemanticVersion class VersionScheme(object): def __init__(self, key, matcher, suggester=None): self.key = key self.matcher = matcher self.suggester = suggester def is_valid_version(self, s): try: self.matcher.version_class(s) result = True except UnsupportedVersionError: result = False return result def is_valid_matcher(self, s): try: self.matcher(s) result = True except UnsupportedVersionError: result = False return result def is_valid_constraint_list(self, s): """ Used for processing some metadata fields """ # See issue #140. Be tolerant of a single trailing comma. if s.endswith(','): s = s[:-1] return self.is_valid_matcher('dummy_name (%s)' % s) def suggest(self, s): if self.suggester is None: result = None else: result = self.suggester(s) return result _SCHEMES = { 'normalized': VersionScheme(_normalized_key, NormalizedMatcher, _suggest_normalized_version), 'legacy': VersionScheme(_legacy_key, LegacyMatcher, lambda self, s: s), 'semantic': VersionScheme(_semantic_key, SemanticMatcher, _suggest_semantic_version), } _SCHEMES['default'] = _SCHEMES['normalized'] def get_scheme(name): if name not in _SCHEMES: raise ValueError('unknown scheme name: %r' % name) return _SCHEMES[name] PK7QYn`ff=__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/w32.exeMZ@ !L!This program cannot be run in DOS mode. $>imimim'vmimEmimpmimDmim}mimimim@mimtmimsmimRichimPEL b  I>@i @P@Sl @.text: `.rdataX-.@@.data\7@.rsrcS@T@@.relocV@BUVh\@T@%Aut6hh@VL@%Ath jhh@uj V@3^]UVh\@T@%Aut6h|@VL@%Ath jhh@uj V@3^]UA3ʼnE}u4EPu hhP&Pej@M3 UA3ʼnE}u4EPu hhPQVPj@M3@ UMW3FPAPQ! tA ;uHE+D0ϋ_]U,VWh@E3hAP}} 3;h@Q0jWu;&uoE$UE;}}Wuu&uhjSoS9 ;t+EjY}E~VEEYE;}}Wuu%uVjuu3;h@uPfE+EjEYu}E,MMj)MuuA%uWjS3; @VPf <@$f;u]TEy3jPu$uWjSU3;VP$Df<@f;tH;sEui'EY_^U Vj.u3u" YYtVhAhVuV@ttFqWh@@EPEPn%uu9;uIEPP@Wu VhAhPuV@uEPWV ;u3FuY_^U}t }v)}w#hAt%AjphpAj P @3@]UVW3VVVVd@VVVEPt@j5Ah@VVVjVVVVVhX@hp@Vp@VVVWEPl@Wx@_^UuX@tuEujju@]3@]UQf}rotkUW8k;rWSVh@t1<^ YE};s++ttt P&Y;]ruY^[_UVWh@upYYx P)YWY_^]UVWP Pu@P Et; ;t;;t;;5D@SjjjE։EP$ P{$5P@YY;t9]u3Sj֋E;t9Eu jjփeE;t9Eu jjփeE;u3;Eue;Eue=d@tt Sjj39]t}t uSj9]t}t uSj[_^Ud A3ʼnEESVW3WW@@3;h@hAQYYPjppAVj 5hA0@tpu3@3h@P A0YYjpVj 5hA @h@PYjDWP/ZP8@5D@jjjS$@PVh@Ph@P AVPWWWjWWW@;u=H@WQRQPWh$@Ph@@W5A5hA @YPh<@H=w P`@jh-@\@h@PV4 5Ad@Wj5A@P5A(@h@PYY@UQSVW=X@@Su׋t>FEft"tjPYYu Su׋uӅt ]]j h@S 3ɅSh@Q {ftjPYYt3@3ShD@P ftjPjYYuf?tjPQYYuf9ujP8YYt3fWSh|@jXAPdf;"u&3f>"Sh@PF3f jh@S tf{"t3f>"Sh@P ft&jPYYt3fjPYYt fuE 0_^[U0A3ʼnESVW@f8"tj j"YQP8YYu DžT@$pjPYYt fu牵WAVj,@f=A"t DžA3ɍf BAP3hh@PY3Y;s t tA;r3h@PYYWP+VSjh4@33;h@P3fuYYf9tjPYYtf9u3f>#h@P?YYj_jPYYt f;u3f>!h@P YYjPYYt f;u荅PVS3h<@P39hh@Pj[SWh@G$uvhAhP P\@f"u+j[G j"P 3Wh@PM3f_PPPT@ǍPffu+Hffu+Hffu+ȋPffu+jt1V3h@PWh@VVS 0Sq; Auj h@%3}3];;u$3{3u ;;t3f9>;t#E;u x$ɉ}f9;u c$jEPhA& PuVS EE E$uYËUVuu$j^0P$huu  t3#^]ËUEfU f;tfuf9t3]ËUh@@th@PL@tu]ËUuYu@je(Yj'YËV)+V*V V*V*V(V(^ËUVu3utу;u r^]ËU=T7AthT7Ao1Yt uT7AY0h@h@YYuTVWh7Q@$0@@Y;stЃ;r=X7A_^thX7A1Yt jjjX7A3]j h@"jY'Ye3@9A AEA} 5L7A5@֋؉]Ѕth5H7A֋}ԉ]܉}؃};rK)9t;r>7֋)5L7A֋5H7A9]u9Et]܉]ЉE؋}ԋ]E@}@sEtЃEE@}@sEtЃEE }u)Ajq%Yu}tj[%Y!ËUjju ]ËUjju ]jjj jjjz ËU1u60Yh̋U}t-uj5A@uV H@PI Y^]ËUQeVEPu u1 u9EtX t O M^ËUEVF uc)FHlHhN; At p AHpu;F;x AtF p AHpu3FF@puHpF  @F^]U3SW9E]u } tVuM0ExuA+;Ar Zw Ar Zw MtDft?f;t8EPP.;EPP;Mt ftf;t+}^tMap_[ËU= AVuy39Euu cM t+Ar Zw Ar Zw Mt ftf;t+juu u^]ËUS]woVW=Au7/j-hYYt3@Pj5A@u&j ^9$At S%Yu00_^Sl%Y 3[]øAá@7AVj^u;}ƣ@7AjP<YY,'AujV5@7A<YY,'AujX^3ҹA,'A  A|j^3ҹAW &At;tu1 BpA|_3^7?=At=5,'AYËUVuA;r"`Aw+Q!N Y V@^]ËUE}P~!E H Y]ËE P@]ËUEA;r=`Aw` +P\ Y]à P@]ËUME }` Q- Y]à P@]̋D$ StRT$3ۊ\$ t 2trt2urWߋ_t 2t@u[Ãr 3˿~3σtJ2t#2t2t 2t_B[ÍB_[ÍB_[ÍB_[ËUEt8uP^Y]ËUQQA3ʼnESV3W;uj^0C,uV;?YY;Er3fՋE @;u)f9tAr Zw ff9u3SSjVWP>ȃM;u|*q9Ms3f[j"];~Cj3Xr7D =w>;tPY;t M؅u  놋E QSjVWp>tSuV` j*YSYƍe_^[M3ËUuMRMEPu n}YYtMapËUju u ]ËUEPjuuu uD ]ËUMS] VW}M]t}tu[3_^[Ëut 39Ev!t SjQHG t39Ew}F }tFEEF tDFt=;r;}W6uuVF)~>}+߃)}};]r\}t3;v uu+ ;w;Ew[PuVYPD t{tdE+)E$V>YtR}t"MEFKME&E} tu juF "N +3uN j h@3u9ut/9ut*9uu-} tu VuE I3u^Yuuuuu uEEEuYËUuuu juZ]ËUQf9Eu3øf9EsE AAEPjEPj@u!EEM #ËUEur]Ë@]ËUEA]ËU(A3ʼnES]WtS EYjLjPzD0 ffffffEMDž0IM M@j@P@uu tSDYM_3[BËUV5A@u@A^]ËVjVj V@P@^ËU5A@t]uuuu u3PPPPPËUQEu3Vu t Muua3Wft.>u ftf;t fuf>t fuf9Mt tat0rt#wt53a 3ۃM M3AWf;y@St  tRHtCt- t!9EE @@EE ljE}utE nTtZtEHt0 tuE G}u;eE1}u% UEut3 ؃f}j _f9>tjVh @BQ f9>tf>=uuf9>tjh@VS u Ajh @V4 u "jh4@V uf> t3f9>thuE SuPhPt3 EAMH M x8xxH_^[jh(@33}j`Y]3u;5@7A,'A9t[@ uHuAFwFP\Y,'A4VsYY,'A@ t PVYYF둋}cj8Y ,'A;tNh,'A P@,'Au4Y,'A P@,'A<}_ ;tg ___OE Ë}jpYËUE3;͐AtA-rHwj X]Ë͔A]DjY;#] uAÃuAà ËUVMQY0^]h0D@d5D$l$l$+SVWA1E3PeuEEEEdËMd Y__^[]Q̋US] Vs35AWEE{t N3 89N F3 8)E@fMUS[ EMt_I[LDEEtEx@GE؃u΀}t$t N3 8N V3 :E_^[]EɋM9csmu)= 'At h 'A tUjR 'AM UE 9X thAWӋE MH t N3 8 N V3 :EH*9S OhAWASVWT$D$L$URPQQhPF@d5A3ĉD$d%D$0XL$,3p t;T$4t;v.4v\ H {uhCMCMd_^[ËL$At3D$H32Uhp pp> ]D$T$UL$)qqq( ]UVWS33333[_^]ËjL33333USVWjRhF@Q>_^[]Ul$RQt$ ]VW3PA<AuA8h0@t F$|3@_^Ã$A3S@VAW>t~t WWG&Y A|ܾA_t ~uPӃ A|^[ËUE4A@]j hH@3G}39Au j h YYu4A9tmjeY;ud 3Pj XY]9u+hW@uWvY/ ] >W[YE Ej )YËUEV4A>uP#YujY6@^]jhh@C@xte3@ËeEJhH@@AËUEAAAA]ËUE @V9Ptk u ;rk M^;s9Pt3]5A@j h@Y3}}؋] KtjY+t"+t+tY+uC}؅uTAAUw\]YpQÃt2t!Ht빾AAAA AAEP@E3}9Euj89EtPCY3Et tuO`MԉG`u>OdMGdu, @M܋ @ @9M}Mk W\DEEuwdSUY]}؃}tjYSUYt tuEԉG`uEЉGd3ËUEA]ËUEA]ËUEA]ËU5A@tuYt3@]3]j@@V5$A@u5A@V5$A@^á AtP5A@Ѓ A$AtP@ $Avjh@hD@@uF\X@f3G~~pƆCƆKCFhPAj \Yevh@E>j ;Y}E Flu AFlvlYE3Guj $Yj YËVWH@5 AЋuNhjYYt:V5 A5A@ЅtjVYY@N VY3W@_^ËVujY^jh@uF$tPwYF,tPiYF4tP[YFPuYYt/P4@L7Au=@׉VףH7AE3_^[ËVjj (YYV@L7AH7AujX^Ã&3^j h@QeuYEE E"0ËUuYH]ËV@@W;stЃ;r_^ËV@@W;stЃ;r_^ËVW3(A@(A(r_^ËUMMZf9t3]ËA<8PEu3ҹ f9H‹]̋UEH<ASVq3WDt} H ;r X;r B(;r3_^[]̋Ujh@h0D@dPSVWA1E3PEdeEh@*tTE-@Ph@Pt:@$ЃEMd Y_^[]ËE3ҁ9‹ËeE3Md Y_^[]ËU3M; @t @r3]Ë@]ËUA3ʼnESVuWV3Y;ljGYjGYu =A6hL@hAW h AVSfA,@uh@SVf t 3PPPPPV,.@YCYPPV@M_^3[jQFYtjDFYu=Auh%hYYjhj@3ɅAËUMtj3X;E sr 3]M VuF3wVj5A@u2=$AtVYuҋEt 3 Mt ^]-t"t t Ht3øøøøËVWh3FWP03ȋ~~~  ~PA F+ο@Ou@Nu_^ËUA3ʼnESWPv@3@;rƅ t0;w+@P j Rm Cujv vPWPjjG3SvWPWPWv SOFDSvWPWPhv S*F$3EtLtL @;rRDž3)ЍZ w LQ w L QA;rƋM_3[j h8@'ep AGptltwhuj Y?j Yewhu;5x At6tV@uPAtVYx AGh5x AuV@E뎋uj tYËUS3SMAuA@8]tEMapE| AD;FG;v}>uЋuE}urlj{CijC C AZf1f0JuL@;v~0C@IuCC Ss3ȋ {95ATM_^3[jhX@MX}_huqE;CWh Y؅Fwh#SuYYEuvh@uFh=PAtPY^hS=@Fpp Aj +YeCACAC A3E}fLCf EA@3E=} LpA@3E=}xA@5x A@ux A=PAtPYx ASE0j Y%u PAtSY\eEÃ=P7AujVYP7A3ËUSV5@W}W֋tP֋tP֋tP֋tP֍_PE{t At tPփ{t CtPփMu֋P_^[]ËUW}SV5@W֋tP֋tP֋tP֋tP֍_PE{t At tPփ{t CtPփMu֋P^[_]ËUSVu3W;to=8Ath;t^9uZ;t9uPDYY;t9uPDYYYY;tD9u@-P+P+P|q=x At9uP@HYY~PEt At;t 9uP#Y9_tG;t 9uP YMuVY_^[]ËUW} t;Et4V0;t(W8jYtV>Yu AtVsY^3_]j hx@p AFpt"~ltpluj VYj (Ye5 AlVYYYEEj !YuËUf9ESVu MuN3;uEHfwf Kjf9EsuYEYt, URjURPQEtE8]tMap^[ËULVEP8@j@j ^VlYY3;u &A5&A;s6Hf@ Hf@ @! H3H/5 &A@P;rSWf9ME;EþE;|9&A}k$&Aj@j YYtQ&A ;s1H```3f@ f@ @/@΍P;r҃9&A|&A3~rEt\tWM tMu PX@t=4 &AEEFhF P@FEGE;|3ۋ5 &At tNqFujX CPD@tBt>WX@t3%>uN@ uNhF P@t,F N@Ch5&A@3_[^ÃUVW3uYu'9(AvV@;(Avuʋ_^]ËUVW3ju u! u'9(AvV@;(AvuË_^]ËUVW3u uAYYu,9E t'9(AvV@;(Avu_^]ËUVW3uu u+B u,9Et'9(AvV@;(Avu_^]jh@3ۉ]jY]j_};=@7A}T,'A9tE@ tPYtE|(,'A P@,'A4詾Y,'AGE EjlYËUSVuF Ȁ3ۀu@t9FW>+~,WPVYPH ;uF yF N _Ff^[]ËUVuu V5Y/V|YtF @tVPHYY3^]jh@3}}jxY}3u;5@7A,'A98t^@ tVPVYY3BU,'AH t/9UuPJYtE9}utP/Yu E܉}F3u,'A4VYYE}EtELjYjYËU SW3j3Y}]9]u}Vu ;t;uakE;w}uEuEBuuPuUE;t5;|"MxEEPSYYtE39]\>^_[ËU}u]S]VuWuu9u u3t} uuuu;v*8CSVhJ@uG[8"uYQ8PWVhJ@D>u}u'8"u%yu"Q_^[]ËUujuuu u]ËUE~ PuYYuuPuu u@]ËU39E vMf9t @;E r]QL$+ȃ YZSQL$+ȃ YDSUQVu VE F Yu+ N /@t "S3ۨt^NF F F ^] u,& ;t @;u u TYuV:TYF WF>HN+IN;~WPu C EM F yM tt &A A@ tjSSQR#ƒt%FM3GWEPu C E9}t N E%_[^ËUVuuF @t F F u V#SYFvvVYPg FF uQVYt0VYt$WVV< &AYY_ A@$Yu?*uj?~Y} Ѓ?uE^̋UxA3ʼnES]Vu3Wu} 臮u+t `p 3;tf; jY9x BfXw@3k 0@j^;O $@3 ƒ tHt4+t$+t   f*u+f T k ʍDЉ9 - f*u%  k ʍDЉƒItQht@ltwf?lu 6uf4um3uf2uOdFi=o4u+x"XRDžYƒd1StAt+tZ+t+ Dž@Dž0 0u u [u AQPGYYtFF9|X++3F tBPƅPPEyf6t:Ht3t+DžAPYpegitnnt$otbV[Dx t ffDž@Dž ދCSufguWDžK;~ȁ~7]VYt Dž5@CPPWP5@AЋtuPW5LAYYfguuPW5HAYY?-uGWDž$s{+Dž'Dž|j0XfQfWW t@tCC@Ct3҉@t|s؃ځu3} Dž9~ u! t-RPWSC0؋9~N뽍+Ft^tƀ80tS0=Yxt"jWYYtAVWP uI4~f>u5 A蛟% A#D7A3Y[_^5Au%A3PPPPP̋V(@3;u3^f9tf9uf9uS+ƍXWSYu V$@_[^SVWa UVuF ttvf 3YFF^]ËUE8csmu*xu$@= t=!t="t=@u3]h@@3ËUVJ2N\UW9t ;r;s9t3tPu3u `3@M S^`N`Hj$Y~\d9 |~d=u Fd~=u Fdn=u Fd^=u FdN=u Fd>=u Fd.=u Fd=u Fd=uFdvdjY~d`QY^`[_^]ËVW39=P7Au5$'AuO@< wt.t$<"u 3ɅPU@YtFF< wFu_^Ã=P7AuDV5AW3u<=tGVYtujGWYY=Atˋ5AS3Vr>=YXt"jSbYYt?VSPG uG>u5A=%A'D7A3Y[_^5A%A3PPPPP̋UQMS3VU 9Et ]EE>"u39E"FE<tBU PF?Yt} t M E FU Mt2}u t utBe>< t< uFN>}t EE3C3FA>\t>"u&u}t F8"u 339EEtIt\BuU tU}u< tK< tGt=Pt#!>Yt M E FM E  =YtFU FVtBU ME^[t ËU S3VW9P7Auh0AVS4A,@$'A5A;tE8uuUEPSS} E =?sJMsB;r6PY;t)UEPWV}E HA5A3_^[ËU SV(@3;u3wf93tf90uf90uW=0@VVV+V@PSVVE׉E;t8PYE;t*VVuPuSVVׅu u0YuS$@E S$@3_^[ËUAeeSWN@;t t УAeVEP@@u3u<@3@38@3EP4@E3E3;uO@u G 5A։5A^_[ËU4S3EV]܈]]E ]t ]E E]EP>YEuE@u9EtME+ùtCHt(Ht ¸襸j^0MEt EuE@UEjY+t7+t*+t+t@u9UEEE E]E#¹W;3t(;t$;t=tT=u-ETEKEB=t4=t$;t)÷j^0 _^[EEEEt A#MxE@tMMMt } t M tM貧;u!F )`E=D@juuEPuuu ׉E;upM#;u+Et%ejuEuPuuu ׉E;u76 &AD0 H@P谶Y脶EfuX@uD6 &AD0 H@VjYud@u1 렃uM@ uMu6FЃ &AYYMLЃ &AD$ MeHMuEtpjS6 ;u谵8tP6ZejEP6 uf}uǙRP68 ;tjj67 ;tE(@@}uE#u M EE#;tD=t)=@t"=t)=@t"=t=@uEM#;u EEE3E@}E#=@=tq;yE;nvv+[E3HHGEjjWW6e, tWWW6T,#ƒ;jEP6Q ;vtj}uXEE;iWjWW6+ JWWW6+#;E%=u6RY耳j^0u_=uWj6M ;E>WW63 Ej[+PD=P6 ;݃ &AD$2M0 &AD$M ʀ}u!Etȃ &AD M#;u~Etxud@juEjPuE%Pu D@;u4H@Pyȃ &AD 6Y6 &AEUSSSSSjh @>3}3u;;uݱj^0'Y39};t9}tE%@tʉ}uuu uEP\EEE;t3u9}t(9}t &AD 6艡YËUjuuuuu !]ËU}u3]ËU MMtft f;u +]USVWUjjhȒ@ul;]_^[]ËL$At2D$H3貋UhP(RP$R]D$T$SVWD$UPjhВ@d5A3PD$dD$(Xp t:|$,t;t$,v-4v L$ H |uhDID_뷋L$d _^[3d yВ@uQ R 9QuSQA SQAL$ KCk UQPXY]Y[rtjtY Atjh@j* j]UWVu M};v;r=&AtWV;^_u|4ur)$@Ǻr $@$@$$@@@@#ъFGFGr$@I#ъFGr$@#ъr$@I@t@l@d@\@T@L@D@DDDDDDDDDDDDDD$@@@@ȕ@E^_ÐE^_ÐFGE^_ÍIFGFGE^_Ðt1|9u$r $,@$ܖ@IǺr +$0@$,@@@d@@F#шGr$,@IF#шGFGr$,@F#шGFGFGV$,@I@@@@@@@#@DDDDDDDDD D DDDD$,@<@D@T@h@E^_ÐFGE^_ÍIFGFGE^_ÐFGFGFGE^_ËU}u?]uj5AH@]jY̋L$t$tNu$$~Ѓ3ƒtAt2t$tt͍AL$+ÍAL$+ÍAL$+ÍAL$+ËU$A3ʼnEESEE VWEe=<AEu}h\@@؅=L@hP@Sׅ5@Ph@@S<APh,@S@APh@SDAP֣LAth@SP֣HAHAM5@;tG9 LAt?P5LA֋؅t,t(ׅtMQj MQjPӅtEu M 3@A;Et)Pօt"ЉEtDA;EtPօtuЉE5<Aօtuuuu3M_^3[ËUVuWt} u趩j^0_^]ËMu3f݋f:tOut+f ftOu3ufdj"Y몋UUS]VWuu9U u3_^[]Åt} u)j^0s݅u3fЋMu3fԋƒu+fft'Ou"+ fftOtKuu3fy3uM jPfDJXdf蚨j"YjUMx~ u$A]á$A $A]_訓]ËUA3ʼnEUS3VW;~EI8t@;u+H;}@E]9]$u E@E$54@39](SSuuPu$֋};u3R~Cj3Xr7D?=w7;tP_Y;t E]9]tWuuuju$օ5@SSWuuu ։E;Mt)E ;9EPuWuuu };~Bj3Xr6D?;w};thP袈Y;t 3;t?uWuuuu օt"SS9] uSSu uuWSu$0@EWMYuDEYe_^[M3腁ËUuMu(Eu$u uuuuu P$}tMapËUQQA3ʼnES3VW]9]u E@E54@39] SSuuPu֋;u3~<w4D?=w;;tPcY;t ؅t?PjS WSuujuօtuPSu @ESEYe_^[M3XËUuMu$Euuuuu P}tMapËUVucv#vv v vv6v v$v(܃v,ԃv0̃v4ăv較v8贃v<謃@v@衃vD虃vH葃vL艃vP聃vTyvXqv\iv`avdYvhQvlIvpAvt9vx1v|)@ق΂Â踂譂袂藂茂聂v@h]RG<1&ف΁Á@ 赁誁蟁蔁艁 ~$s(h,]0R4G8<<1@&DH@LPTX\ր`ˀ^]ËUVutY;8AtP言YF;<AtP薀YF;@AtP脀YF0;hAtPrYv4;5lAtV`Y^]ËUVuF ;DAtP:YF;HAtP(YF;LAtPYF;PAtPYF;TAtPYF ;XAtPYF$;\AtPYF8;pAtPYF<;tAtPYF@;xAtPYFD;|AtPYFH;AtPtYvL;5AtVbY^]UV3PPPPPPPPU I t $uI t $s ^ËUUVWt} u跟j^03Eu+ @tOuu聟j"Y3_^]̋T$L$u<:u. t&:au% t:Au t:au uҋ3Ðt:u ttf:u t:au tUV3PPPPPPPPU I t $u t $sF ^ËU}u u IY]Vu u u}Y3MW0uFVuj5A@u^9$At@VYtvVY( 3_^]H@PǝYH@P话YʋUM S3;vj3X;Esʝ 3AMVW9]t uYVuYYt;s+VjS _^[]ËUfA3ʼnEE VuW34809}u3;uE8+tS &AL8$$?tu'Mu ̜D8 tjjjVV|YD@l39H P4@3;`;t 8?P@4 3,9E#@?g $3 ǃx8tP4UM`8jEPKPYt:4+M3@;jDSP C@jSDPn n3PPjMQjDQP C@0@=j,PVEP$4@ @089,j,PjEP$E 4@,08<t<u!33Ƀ @D<t<uRD Yf;DI8t)j XPD Yf;D80E9@8T4D83ɋD8?D49M3+4H;Ms&CA u 0 @F@FrՋH+j(PVHP$4@C(8;;+4;El%?49MH@+4jH^;MsCΉ u0j [f @@fƁ@rH+j(PVHP$4@i(8;a+4;EGK4,9Mu,@+4jH^;Ms;,,΃ uj [f@@fƁ@r3VVhU QH++PPVh0@;j(P+P5P$4@t (; H@D;\,+48;E ?Q(Qu448@t(D8 H@D8ulDt-j^9Du 0?DY1$D@t48u3$譖赖 8+0[M_3^qjh@@輖]uy ^ x;&ArR 7 老ҋ< &AD0tS诅YeD0tuu Sn Eݕ ME EEË]SYjh`@]u蒕 x;&Ars 輀ڋ< &ADtSYeDt1SnYP|@u H@Ee}tM ME ElË]SYA @tyt$Ix  QPaYYu ËUQC @VEt {uE >'} ~0EM E>u?*u˰?~} Ճ?uE^ËUA3ʼnES] Vu3W}usѓu+“ t `pa F @u^V }Y Attȃ &AA$uttȃ &A@$q3;g C9 B@Dž GW @} DžjugucDžW9~~=]V,Yt Dž5@GPPSP5@AЋtuPS5LAYYguuPS5HAYY;-uCS*stHH[Dž'Dž5Qƅ0Dž t@tGGG@t3҉@t|s؃ځu3} Dž9~ u!u t-RPWSc0؋9~N뽍E+Ftct΀90tX0@@If8tu+(u AI8t@u+@t5t ƅ-t ƅ+ tƅ Dž++ u% OtPYYt.u%˰0Otヽtu~qPjEPP5u69t.EPsYYu#PEYY|2t) Ot߃tgYt3dt t `pM_^3[IcÍI@@@q@@ɱ@@A@QL$+#ȋ%;r Y$-UQQE VuEEWVEwY;u豇 NjJuMQuP @E;uH@t P裇Yϋ &AD0 EU_^jh@蔇]܉]EuH - Ëx;&Ar  Nrы< &AL1tP}vYeD0tuuu uE܉U裆 諆 ]܉]E E܋UuvYËUAhMYMAt I AI AAAAa]ËUEu 3]Åx;&Ar @qދȃ &AD@]ËUA3ʼnESVu F @W6V#oY At.VoYt"VoV< &AnYYÊ@$$<VnYt.VnYt"VnV< &AnYYÊ@$$<VnYt.VnYt"VtnV< &AdnYY@t]uEjPEP t]39}~0NxL=AD=VP>YYtG;}|fE Fx Ef EVPh YYM_^3[d_áA39XAËUSVu 3;t9]t8uE;t3f3^[uMcE9XuE;tf8]tE`p3@ˍEPPYYt}E~%9M| 39]RuQVj p4@EuM;r 8^t8]fMapZ\*8]tE`p;39]PuEjVj p4@:뺋Ujuu u]ËUu MbEMA%}tMapËUjuYY]VD$ u(L$D$ 3؋D$d$ȋd$Gȋ\$T$ D$ ud$ȋD$r;T$ wr;D$v N+D$T$3+D$T$ ؃ʋӋًȋ^fQSuƒt7$ffAfA fA0fA@fAPfA`fApHuЅt7tIfIHut3tIJutAHu[XËۃ+3RӃtAJutIKuZUj x@&A3ËUVu~ Vu茥YYE~ PuxYYttPuVuu ut@+ujX 3D^]ËUV5A$WPuz ux=tftu֋+A^]Ë+AUQW3υtL9t @9uV@jP袟YYuuj y_Yt+P 7Yu&E^_ËUEV3u;u_kSW];tej=S\YY;tU;tQ3f9wEA;Au 6A;uxA9u t3;t/菿 A詾yWtN_[^9u;ujaYA;tډ095AujFYA;t0A;t+}u}FY;9346O^3Y9EMM39u twj[SuLYPYY;tZuu0YPWGu E3ɍGfM#QWp@uM~*W]Y9utu]EY0ENG49u?NjW5A 5A+9uuY;}ߍG;=?zPj5Aȝ ;aU qM1AVVVVVhu\EY03+UuMX]E MUTu}tMA#E3t3@}tMapËUjjuj]ËUSVW3jSSu]]JE#ƒUtYjSSu.#ʃtAu }+;Sjh@P@Eu| |_^[huYYE| ;rPuu t6+xӅuϋuuuYYujh@P@3S|8u 6| u;q|;skSuu u3#ƒDu;kYPl@HE#‰Uu){ {H@u#uSuuu#ƒ3US] Vu &A ΊA$Wy@tPtBt&tu=I L1$⁀'I L1$₀a I L1$!_^[u]%@]ËUEuz fjX]Ë dA3]WƃуtefofoNfoV fo^0ffOfW f_0fof@fonPfov`fo~pfg@foPfw`fpJutItfofvJut$t vIuȃt FGIuX^_]ú++Q‹ȃt FGIut vHuY UQ=AuAujMQjMQPL@tfEËUSVu 3W};u;v E;t3{E;tv#yj^0mdVuMXE9XfEf;v6;t;v WSVI x*x8]tMap_^[;t&;w xj"^0c8]tE`pyE;t8]HN++ˉN~WPu EN F =M tt &A A@ tSjjQs#ƒt-F]fjEPu ]f] E9}t N %_[^ËUS39]u3AVWuȴpjVU ;tuVWl u SSSSS0a3_^[]UWVSM tMu} AZ I& t' t#:r:w:r:w:u u3:t rً[^_3PPjPjh@hL@D@AáAt tPd@̋D$L$ ȋL$ u D$S؋D$d$؋D$[%@lz 2H^z&>V6& 4DP\t$L^t0<JV`l~&@PfHr%@P@@\@/@7@@&@ bMHHCorExitProcessmscoree.dll(AAccsUTF-8UTF-16LEUNICODEKERNEL32.DLLFlsFreeFlsSetValueFlsGetValueFlsAllocruntime error TLOSS error SING error DOMAIN error R6033 - Attempt to use MSIL code from this assembly during native code initialization This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain. R6032 - not enough space for locale information R6031 - Attempt to initialize the CRT more than once. This indicates a bug in your application. R6030 - CRT not initialized R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data R6010 - abort() has been called R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point support not loaded @X@ @ @`@@@`@@@0@@p@0@h@ @!@x@y@z@@@Microsoft Visual C++ Runtime Library ...<program name unknown>Runtime Error! Program: HH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSun  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ((((( H h(((( H H  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  GetProcessWindowStationGetUserObjectInformationWGetLastActivePopupGetActiveWindowMessageBoxWUSER32.DLL(null)(null)EEE50P( 8PX700WP `h````xpxxxxEEE00P('8PW700PP (`h`hhhxppwppCONOUT$user32.dllMessageBoxTimeoutAMessageBoxTimeoutWFatal Error in LauncherFatal Error in LauncherrbFailed to open executableUnable to find an appended archive.Unable to read from file#!PATHEXT;PyLauncherSTATICJob creation failedJob information querying failedJob information setting failedmaking stdin inheritable failedmaking stdout inheritable failedmaking stderr inheritable failedUnable to create process using '%ls': %lscontrol handler setting failedFailed to get exit code of process.exe/usr/bin/envExpected to find a command ending in '.exe' in shebang line: %lsExpected to find whitespace after '/usr/bin/env': %lsUnable to find executable in environment: %lsExpected terminating double-quote for executable in shebang line: %ls<launcher_dir>\Terminating quote without starting quote for executable in shebang line: %lsFailed to find shebangExpected to find terminator in shebang lineExpected to decode shebang line using UTF-8Expected to find '#' at start of shebang lineExpected to find '!' following '#' in shebang lineExpected to find executable in shebang lineExpected to find arguments (even if empty) in shebang lineExpected to be able to allocate command line memory"%ls" %ls "%ls" %lsHA@RSDS.9vH'yHa7C:\Users\Vinay\Projects\simple_launcher\dist\w32.pdb0DPFВe@K"@,@1@3@5@4@8@:@H;@<@ >@>@9C@H@H@H@J@L@L@DN@PN@P@R@R@5X@\@_@@d@e@e@dq@s@@ѭ@@@dPd@Tlz 2H^z&>V6& 4DP\t$L^t0<JV`l~&@PfHrExitProcessGetCommandLineWSearchPathWqSetInformationJobObjectbFreeLibraryCreateProcessWpSetHandleInformationWaitForSingleObjectExAssignProcessToJobObject^FormatMessageWGetExitCodeProcessGetModuleFileNameWQueryInformationJobObjectgMultiByteToWideCharcGetStartupInfoWGetTempPathWCreateJobObjectAdGetStdHandleGetLastErrorEGetProcAddressSetStdHandle<LoadLibraryAGetFileType-SetConsoleCtrlHandlerMSetCurrentDirectoryWRCloseHandleKERNEL32.dllnCreateWindowExW3PeekMessageW&WaitForInputIdle6PostMessageW]GetMessageWDestroyWindowUSER32.dllPathRemoveFileSpecWEStrStrIW:PathCombineWSHLWAPI.dllGetModuleHandleWDecodePointerHeapFreeHeapAllocEnterCriticalSection9LeaveCriticalSectioniGetStringTypeWUnhandledExceptionFilterSetUnhandledExceptionFilterIsDebuggerPresentEncodePointerTerminateProcessGetCurrentProcessInitializeCriticalSectionAndSpinCountGetCommandLineAHeapSetInformationRtlUnwindDeleteCriticalSection?LoadLibraryWTlsAllocTlsGetValueTlsSetValueTlsFreeInterlockedIncrementsSetLastErrorGetCurrentThreadIdInterlockedDecrement%WriteFileHeapCreaterGetCPInfohGetACP7GetOEMCP IsValidCodePageoSetHandleCountSleep-LCMapStringWReadFilefSetFilePointeraFreeEnvironmentStringsWGetEnvironmentStringsWGetModuleFileNameAWideCharToMultiByteQueryPerformanceCounterGetTickCountGetCurrentProcessIdyGetSystemTimeAsFileTimeCreateFileWHeapSizeHeapReAllocGetConsoleCPGetConsoleModeWFlushFileBuffersIsProcessorFeaturePresentdCompareStringWWSetEnvironmentVariableWSSetEndOfFileJGetProcessHeap$WriteConsoleW@'A@'AN@D        ! 5A CPR S WY l m pr   )    @@@@@@@@@@ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZPA`y!@~ڣ @ڣ AϢ[@~QQ^ _j21~C@@@@@@@@@@@@|@p@l@h@d@`@\@X@T@P@L@H@D@@@8@,@$@@\@@ @@@@@@@@@@@ @@@@|@t@l@\@L@<@(@@@@@@@@@@@@@@@@@l@`@T@@H@<@,@@@@@@@@@@t At At At At A8AP@@X@x A AT@ P@R@ ..0APAPAPAPAPAPAPAPAPA4ATATATATATATATA8A.@t@K0x 8Pehf 0 @PB8E(`FOhpT%zh(hZ( @...GGGWWWiiiuuu ̀ ww ww||wwwwwwwwfwwwww|fwwwwwwffwwwwwwffwwwwwfflwwffffffwfffffflwffffffwffffff|ffffffffR\Ilffl)ffح2L18Ϥ"A< ΣTπU  ؀ ???????( 444MMMSSSzzzp p{p{ffkof_fffk_fff[f}UUUfL4UUU_kJqO_~'[U_Uwwwww{~( @%%%+++000===AAAIIIMMMQQQVVVYYY]]]~dFgggjjjmmmrrruuu}}}u?z=~;gEkCoAr@:IbpƏKУk(,1?5<\CKQsU[cbð/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq_______CCBABADL*(%$""&GABJIIDDJC??AD_-(''%$GG#_DIJIIJIIIDIJDD_+)(''%GG _JMCEJ?ABAECA?BA_,+)('%%"!_IM@AJACDCIDI____.,++>________JMJJJJJJJJJF_..,+)('%$"! #GIMCEJJJI?J__...,+(('%$"! &_JM?AJJJJCJ__...,+)(''%$" _IMJJJJJJJJ_K=...,++(''%$! _JMCDJJJJAJ_K_______L*%$"!_I_?AMNJJEJ_ L'%$"_I_MMMMMMJJ_ _('%%_I_CEMIJJMEM _(''*_I_?BMDJEMDMF _)(-LI_MMMCMMMMM_________< ____I_CEM1;MACDMEJM__I_?A_D1@IJJMJMM_FF_I__6_@/EMMMNMM_FF_I_C80EJDMJCJFF?:AA20?_M_MIEM______MIC4BC/ N______MMMMJIDAI_9/ HJJMMJMMMJ??BAI_A7503 IJMMCBCBA44CCI___BAO;6___C_MJIDIDMI_CI___O; @__C_C?J?AJI_?A_DJJI@ O_CM?;I?JI_________H9MAIJJIJI_CD_____JJI73C;IJIJI_?AMDJJDIMJIE5:JIJI__________MMIA:IJJJJJJJJJJJJJJJJMJ???( 444MMMRRRYYY~eGuuu}}}x>iErCE~7?HVbx/!P7pLcyϏ1Qq/Pp",6@J[1qQq/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq!%///* !*/"(%%'%/) /!#''////+/+"*(/ / !%(/ ( (*/ (///) */   )*  /"///// /+/// # + !%//  +"*+'#+//+'!%*++$++!+! !!!<(0`  !!$& &"   WܱNj+<<:5pi$!!!4888&SNJFB=950,(%%%5ǎVRNIEѹ|Jq?o@ZUQMID@<73/+&"-Ɍ444"ք̴wq?]YUPLHC?;72.*%!"""4888&dya\XTPKGC>:61-)% OÑ%%%5ʎA{;ys`\WSOJFB>951,($(9|:z;xq?o@mAkBiCgCdDuZ;73.*Ǒ%%%5̎È>89}:{;yq?o@mAjBhCfD~dEuZ?:625Оa789}:{;yr>p?n@lAjBhCfD}dEB>:5^ό555"܄ѳ„7789}:{;xr?p@n@lAjBgCeDFA=9"""4;;;&ŌC89~9|:z;xr?p@mAkAiBgCIELɑQQQJnnn~~~Įq?o@mAkBiCHHH"""vvv9~:{;yq?o@mAkB:::'''___sssttt8Ϧuǣvyp?n@lA888T---6fffnddd%%%"""OOOSSSċDҧuʤv{;yr?p?xM<<r?̷999VVV###)))444ѳ͝b@~9|:z;}Cg˶Ӎ󑑑ZZZlll;;;!!!""")))___&&&2:::ppp{{{___WWWWWW:::!!!"""***www"""4888&,̑999ԖJJJ|||lll:::"""BBBXXX|||$$$6,uuuKKKCCC@@@...www* Ҍ666"KKKaaaLLLWWW@$"""4;;;&nnnfff!!!$$$999444]ttt|ȇɑ&&&5ЎvvvmmmVVV{{{OOOڥaaaCCCpppό555"ބ|||MMMfff"""4;;;&\\\Ǒ%%%5Ύݧܦ͌555"ۄۥ"""4:::&ڤÑ%%%5ˎܤׇ ww?ww??ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwwwwwwwwwwwwwww?ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwww?wwwwwwww( @ !!!0\\\JeeeQ666D555A0$ vH<602\7qڴvvvj&&&D1"gLF@;5?кVQKE?9(aV[UPJD>82-uuun{{{j`ZTOVo@lAb_YSMGB<60+%<aVmt>q?n@bb^XRLFA;5/)$Ywwwn}}}j~Cv=s>p?bba]WQKE@:4.(+{;xbba[VPJD?93-'aV~:{;xr?o@lAiBfD}dE|cE|cEiB<61?9}:z;w=t>q?n@kAiCfD}cE|cE}dFGA;=aVңi89|:yq?n@kBhCeD|cE|cELF@mzzznjʓP8~9{;yp?mAjBgCeD|cEPJ\¯mAjBgC~dEaV}:z;xq?n@lAiCJJJőPyq?n@~YVVV???wwwiiiΡkA|;y>>3@@@y~~~obbb000kkk@@@---U<<<&&&[[[6uuusssWWWIII$$$&&&qqqlllg|||s4bbbhhhƑUUU000QQQ}}}---{bbb(iiiLLLBBBaVggg+++NNN|||nj]]]tttkkkrrrwwwӦaVӦzzznjӦˉ ?????(  C﫫oIਨS=?_QF4aZмoEcaXMB70~Iq?c`VK@58z;u=qv>3Eyn@iB~dE}dFGHYYYuuuġ=xmAhC}dE}eGS444|||gC}cEMMM~>q?kAiGRRR¢Gu=xKʺ~AAAAAAAAAAAAAAAA ( h00 %   h4VS_VERSION_INFO?fStringFileInfoB080904b0JCompanyNameSimple Launcher User^FileDescriptionSimple Launcher Executable2 FileVersion1.1.0.140InternalNamew32.exej#LegalCopyrightCopyright (C) Simple Launcher User8OriginalFilenamew32.exe@ProductNameSimple Launcher6 ProductVersion1.1.0.14DVarFileInfo$Translation  PAPADDINGXXPAD0 000&0+0@0P0^0d0k0x00000001T1t1111122 3[3333333C4M4X4a4z44444444444$5526f66717=7B7X7a7g77777777 8!878g88888888899!9&9;9A9J9P9]9c9h9|99999%::::::U;c;;;;;;;>>>1????? 000000000011#1=1H1P1`1f1w111112232222l3t3334^555555666)696@6O6[6h6666666$737<7`77u8<<<3=E=%>/><>j>p>{>>>>>>0L00`11112V2i2222353Q3~333333;4M4444455[56 7$888888;9:j;;;;;$e>k>q>w>}>>>>>>>>>>>>>>>>>???%?*?0?6?L?S?b?@D1Q1p111272B2x222222222R3n33333B45$5<5W555567 7*7<7S7a7g777777778D8888889999!919`9f9n99999:: ::::::;&;5;B;H;g;n;z;;;;;;;;;;;;;;;;<%<:<`<<<<<<< =0====>>`>f>|>>>>>>>>>>>>>>>>>>>>>??)?/?7?>?!?2?k?`F0l0r00000D1N1y111122C2f2l22222220393E3333333444!445*5M557?77@9G9U:l:;3;;>>>??p<>0|0002l222223D3`4K5c5589;R;~;;=???000 00;12&2222$3/393J3U3q3384>45555576A666666s888888 99+9S9999999: ::@:H:;u<<<=$=7=I===~0001 1*1A1f11622!3-33333J4|4444444445$5(5,5054585<5@5555556 6(6/64686<6]66666666666&7,707478777T8w8888888888888888999X9r99;;;A;;#<h2&282J2\2222222233$363H3Z3+515=5t556z67=7-8V88::;;)>_>i>V??T0=00003466678^;b;f;j;n;r;v;z;;;<3N>>A?L??\^032822222333334)484D44F5[55566077777 8899:/;M;<<=====6>H111111122;;$;,;4;<;D;L;T;\;d;l;t;|;;;;;;;;;X<0@000181X1x1111122 2@2`2|22222223,303P3p333333484X4x4400(5,5054585<5@5D5H5L5x9x:|:::::::::::::::::::::::::::::::::;;; ;;;;; ;0;4;8;<;@;D;H;L;P;T;X;\;`;d;h;l;p;t;x;|;;;;;;;;;;;;;;;;;;;;;;;;8>8><>@>D>H>L>P>T>X>\>h>l>p>t>x>|>>>>>>PK7QY-D A__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/w64-arm.exeMZ@ !L!This program cannot be run in DOS mode. $Lơ---F-F3-F-X-X-X-F---X-XW--?-X-Rich-PEdb" "5@`'PTp @T8.textl `.rdata֑@@.dataH%@ @.pdata p (@@.rsrcTV4@@.reloc@@B@AT_{1"@1@G>c2 __S[cks{CsP@uXAw`ByhC{pDa(@@?{EsDkCcB[ASƨ_S[cks{CsP@uXAw`ByhC{pDa(@@?{EsDkCcB[ASƨ_ T!_ "Tb6 ` b6 ` b6"@9b9_BTBcT! BT? @aT @`T L$ L!@!`` Ld LB"Tb06 @" A$B&C!!@!``b dfcBbTb06 L` Lb(6 L`Lb 6 pL`pLb6 p `p b6 ` b6 ` b6"@9b9_!!_ T6!c ` ` 6!c ` ` b6"_8b8_BTBT!BT? @aT @T! @L!$ @L!!c` Lcd LBT!&C$Bc" A @!!fdb `BbT06!c @L` L(6!c @L`L 6!@c@ p@L`pL6! c p@ `p 6!c ` ` 6!c ` ` b6"_8b8_{S[cks!@SP@UXAW`BYhC[pD](@?@BsFkEcD[CSB{A_@xb 4@7 @`T,@_?Tt@Lqn"&"4@| ՠtLqn"&5@`N!Npn&BR@_!@ˢ$@x4!T$@x5ѠA_`7? #T @T,@_?Tc@ˠt@Lqn"&4!˥? CT#CtLqn"&4caT!@T! ˥ˠtLqn"&b4$@xB4!TA_c@ˢ$@x"4!TclT_@8 4 @@T,@_? Tp@L1n"&4@|pL1n"&5@a N!N0n&B R_֥Ѡ_!@ˢ@8B4!T ?@#T @T,@_?lTc@ˠp@L1n"&4!˥?@CT#DpL1n"&B4caT! @T!@˥ˠpL1n"&4@84!T_c@ˢ@84!TclT_C1@c1_@1@c0TC_ {C{A_Q @s/3CT_t1@?@?T_ NNNN_Tf ib8 * $! )&&&&&&&&&&&&&&&&@q @! @! _@q @! @ _@q @! A9_@q @! _@q @! _@q @ _@q A9_@q _H@ qL@qL_R_TIE)@LTB@_H @TAB@qLIF     )@!LTB@B_+T@LBT__@lTChhb8c`(($TJ ) @ $Z_@(@Tc  `$Z_D@(D@Tc `$Z_@8(@8`$Z_@(@Tc  `$Z_D@(D@Tc `$Z_$@x($@xTc`$Z_@8(@8`$Z_@(@Tc  `$Z_D@(D@Tc `$Z_$@x($@xc`$Z__@(@Tc  `$Z_D@(D@c `$Z_@(@c  `$Z_@(@Tc  `$Z_@8(@8`$Z_@(@Tc  `$Z_$@x($@xc`$Z_@(@Tc  `$Z_$@x($@xTc`$Z_@8(@8`$Z__+TB(($!T_ !T(($aT_ aTBjTB_@mTB @(@TB lT TB chhb8c`J ) @ $Z_c  `$Z_ΐ|ؚtl\J(_S {@q{ @S¨_S[{@q{@[ASŨ_S {@q{ @S¨_S {(9@?5BA(M@?(]@?R  "wRR#?{ @S¨_ S {(9@?5B(M@?(]@?R "wRR#?{ @S¨_ { `5 OU@ R? {Ĩ_{`5oU@ R?{Ĩ_S[c{9* n[( q"ѓ{cB[ASè_S[{! !)Cґ qA @BRR @V R|@ @Q?q3* @ !M@$@c @h%h~@ j3$n R K?q @4*R @!0}h&@cj@h%~@ j3D)R @( sB(* @ !bbB`5iQ @?q!R @ !bJhBҁ4s"T @O {è@[ASè_S[{RR/@2R?44R$C@* @~S5 @a"c @@2R?5ca"ҏ `4R @|q2{è@[ASè_{qTQqT(B`(H@R!R y @I? R{_{qAR?uARR?5F(iA?HAeA!RRRRRR?mARRR?aA?{ĨA_{a@?ր4qaT@T@"R!R? R{A__S{ S7  {S_S[c{R  R @R TS TTS TTdT@ T@ ?@@?@`?R Q R N XTE@ ?ҿWTE@@?ҿVTE@`? (TA@?E@ ?ֈ HTA@?E@@?h HTA@?E@`?{cB[ASè_{S[C <S_q$(@T+@t}@ _ T(+ b vtbbT҈@hT`Cs"TQ \)@ R?Q qTI@?Cz[BSA{è_S[C"{CQ@?1V( @VDR!R?֠4#@ RAq@TRAh@RVD!R 2 @i?}}}}}}1@?g@rT@ ?@@?@`?A ` [a Vg@G2g[Y@R$R?ր55@?1@*RCRR? CR!@@VD?;@@y8!(@!R?a EA@@?=@@R?e@@? U@#@?S[{YA ?s`@y4q@TR$ 5ZA `"?s"8 ~Aqb@y4R `4 RRa .@x4R* @5h@y4R* `5h.@xh5`@yR `4ys A@yqTh@yqys !9`4>@yqTh@yq`@y4R `4ys h@y4R* `4h.@xh5{@[ASè_S[c{@?@yqATqJR RAm1 @y4R* `4.@xh5)%@ R?ֈ@y |@q`T )  Rz)x H(9~@j BT 8?5qT?)qT CTѿa--@K9 RcR R?!*qh~!Tci)xc3@y4R*D `4h.@xh5h@y!q R*7 `4h.@xh5h@y!qR** `4h.@xh5C  @A!|5 ! UA?֨>@yqTARy ҨQA ?yh4(-x5y-h4H-x5yLh4(-x5y+h4H-x5H A*AKt"IA!""{C@R`>C_{R{_C@`>C_{@R* RS4/a2Z54'GSH4k5R{A_R{R{_{yV{_S { RS( 4RC9dSBNq` Th5(RB!! a }`4RBA  YHRB4RC9*qh@SH4s@}A?AR`?eh@Sh4`@Ob<S*d*pS4T58R R* *eS4C@9H5(*{¨ @S¨_R?R=*7*#{{_{`4 !9 @H_hK ȩ5`T!9H_hK ȩ5;R{_ R{ Hy9q)R)I99Sh5RNS5R R{_S{z9*h5qT4s5A9594R A9 )9 )*) * (R:9 R{S_֠R{IR (@y kT,=@*, RH@ kATH1@y-qT ),()@y a) @y,) _ @TI @A)TH @  A)TJ jR H%@h6R RRR{¨_{S445!9ȿ;{A_{y9S)SH45**X R{A_{ ()GaT* A9Hq`{A_{Z{_S{@sXAT c ?@) (? @ |@)ʨ ? @ |@)ʨ ?#@C@ @H  @?X( {èS_ 2-+3-+R_ R_R_A:(! :_{@ @  {_@q___`>_{C}C}}}}}1 ?O@@yrHR {Ȩ_ּ{a ?֠@yIR k!T<@ R (I@? kaTH1@y-qTH@9qTH@h4 RR{_.(A S{@)h@ kTh@q!Ti"@H(K q T?kTR{S_ֲ@csm @S[{a.5.!!BTt@~A?ր?#T{[AS¨_S[{.5.!!BTt@~A?ր?#T{[AS¨_)Eq_@y-<S54|= A  `N `N+>N7)>N S%Ț*`TIh 86<`N0:n>N1 `N(>N  H!Q qS%ɚ( @T  J(>N )(}@Ӊ H AIh5F N |=  `NsnR `N1 `NN>N/>N7 SI>NJ%Ț(>N  ( `T  ki _ k+T-T(}@ $(!Q qSJ%ɚHI?TT K}@ Ap<`NsnNQ:n(>NHR `NH>Nh H>N )(}@i H+Aj@y_ k`_S[ck#{f@@ ˨@h6 y@52A9HJ@?qZ@ R jT@kBTR4@_C(T @_C("T@4@q T*@"C( c*`7qmT@) kThA`S 4sA}A?!R`?@"R @ C(@@"@@!C(h? @@kTRB@@˟ kT *R4 *@_C(#T @_C(T@r`T R4R4R4R+@B(T @B("T@@ kT @ @ kTk kT * kT @@4B(@z!T *@J @ R"C)@ * @ k *T R{è#@kCcB[ASŨ_csm{Sh5RSh5 R{_{Sh5 R{_S{C9@ kT@qT @  K qT@ @4@)@@ 6 @4@4@ @}A?`?{èS_ csm  {{_{ {_;@T_{`{_lS[{@1aT8 ?֨*@ ? T@  ?`5 @ ȳ ?4(hz@  ? * ?{[AS¨_{ ( ?1T;  ?֠4(hz RR{A_{`@1T! ?h R{A_{=( RR ?4 HiO R IiR{_S[{jO4=sQ`R ?jO Qj35 R{@[ASè_S{ 3RA{¨S_U{@TR*N*S{R"Lvh@*H6"R*gh@;rTh@(9~@j@ , F @yk ҩ!h@"9Oi@;?rT_q!Tyk!*@96yk!*96a@gh@; SH5JRh@;6 _qATA{S_S[ck#{*~@ ;F @h{z +! (Ix9q6h@h5L }@h@*i@h9U 7V>ԩ֚>BR*aT`@*h@;Sh4 S?q*HH#R*raT!lTh@;S4h@;!Sh5@o"h{z @)! *@9 6 S?q*HHV> ֚(֚  {¨#@kCcB[ASŨ_{S[ck Ҫs/h@*h5Ii"@ R*)*I@ 3F@hzuWA"!@%hzu"I@? AT@@ R# ?4R*`@B( T#,A(# _ BTH95qT_ "TH9)qTJS8J)kJT#H@CkDcC[BSA{Ũ_H *S_q( T *Aӟ %@x)qkaT` 郈 8J)q_ aT_ֲn!S[c{ e!s @tTuWRRRW# RR\8x"828B8R8*I *9?qcT!Tl!{cB[ASè_S[{@t T?ֵ"aTP!{[AS¨_S[c{* @qcT(R} R{¨cB[ASè_RRl!ҿ E k+TzsH z3RR!*E s  |@*F)@yj ! iA(S[c{*7EkbTh~@ 6F@zu "*@_TqT34qT qaT`@ !  ?zuR"4(Ry{cB[ASè_ |@*F)@yj ! ia(S[c{R RqTs6!3 HE IufS*~@ F +yj(Rh9R!*{¨cB[ASè_@T@9H6A ?ֈ@9(6a ?ֵ@"  ɚ ~@ F  @ Hyli! (R(9Hyli! -sS[{*S7EkTh~@ 5F@zt "I@96H@ TqT34qT qaT`@ !  ?֨zt R"*(R{@[ASè_{1T(R 7EkT |@*F)@yj +! i@9i6`@(RV{_S[ck{hOh5@R qiR(h}@GhRh`Gh 7tR 9RR`!GF@j(ziI!+@h  HTy"sbQ5R{kCcB[ASĨ_ |@ ! _S[{F#A"tRG`jh?#Gijh @?s"Q5G{[AS¨_A a S {*T8R{¨ @S¨_h@y4@y5*RC!# @"R*M$s @*# @{ RR R`@R{A_S{Rh@;5 S4"*" `6`@`7"*{S_S{ 3Rc{¨S_h@;1 Sh4"q*r*{ <SR?k3<S`T?qTEA yix  C'y"R#yK R#4#@y R{¨A__S[c{*\%@A}A?*`?{cB[ASè_ @hG*)3-ʚS*R @GjlR K ,Ț( ʨ-ʚ_S { *SIR{¨ @S¨_֟ qT*K**S{_q Th@; R jTh@;rTh@qT`@; |@*F)@yj +! i9)7h955"RҐ@h@ (ˋ )ӟ kThӟkT j"@  ?lTh@( THhi@ R(KhR{S_S {h@*;5 S5R8jRI_)yI5;*Sh5qTRc!h@hi@;( S4jRI_)uI5; h@;)R qTh@;!Sh5@Rh"`@;*.@TR{ @S¨_!|@O{$@TR2RbyJHiix(%xh4!сyHR @RR{_@@@@y4*@y * 4 * *kT-@x *i5i4,@x5@yH4)@y *)4 @y * * kT-@x*h55,@xh5$x @@_{SRA`H@{_{S[c9R?T5 @x9c9SW kCyS9OS#*V6Ts5 @T73bTWs69 @@Tj(8SBZ@9S4@HC yI*cC[BSA{Ĩ_t @!T38{S[cRn@T5 @x9c9SW kC9yS9OS#*V6Ts5 @T73bTWs6y @@Tz(xSB@9S4@HC yI*icC[BSA{Ĩ_t @!T3xS {TxRRB3hTBhT R#uRB3Rҹ*{ @S¨_S {TNRRB3~hTBhT Rn#uRB3Rҏ*{ @S¨__qT_ qDLz T_4q T(S QR? j RR__q@T_ qTH0QqiT(<S ~ QR? jT RR_ 0B `@,BA h $ R 8@q @zTQ8B5>*I *( qTh +$@ 9 $@) $ K P $@H$_ 0B ` ,BB( h $ R 8@q @zTQ8B5>*I *( =SqTh *K=S $@h(y$@ $ A P$@ $_ 0B `@,BA h $R O|@8@q @TQ8O>+Ϛi ( LqT ,$@ 9 $@) $ K P $@H$_ 0B ` ,BB(O|@ h $R 8@q @TQ8O>+Ϛi (=S L=SqT *L=S $@(y$@ $ A P$@ $_S[{*q7RmT*s@1TskT{@[ASè_S[{*q7RmT>Sw@1TskT{@[ASè_{b9($@h}A5 )@im!a"`H@h D@i @#`@aBQ#i@(C72*R(jb9{A_(@ }@9*@L94* *? kT8*h5 4h94RS Q? j`Th8h5i*9_qT*8_qT(_ k,h885_-@ 9@Sh8?qT@ 8Sihx7Sh8?qAT 9?q }@m @*9j98 *8*5_S[{ @ u@BR@C ! @` @qT@ @?T RRh@h5U4u{¨[AS¨_S[{ @r u@BR@C ! @`d @qT@ @?T RRh@h5U4u{¨[AS¨_S{h6Bhh@FR}hrD ir? qTR.b j*@i 7l9 S?iqT}@ +}ӊhijR  h.@) *}Kitk.!q TqhTi (I8( RS4a9b`F:~)h~)9R94/qTa[)j@ @* K!kl_l66h2@ Kj6 2i2(R:q`Taj@ @* K!kh_ qh:)i:S4h@ 9i9h@i5 ih.@qGzThrD ir? qT`*@{S_֩S{h6Bhh@RMzhrD ir? qTR._ j*@iJ 7k@yRh =S?iqTh }ӉLii Rh.@ ) *}Litl.!q TqhT (I8( *RbjR9 *`:~)h~)9R94d/qTa)j@ @* K!kl_l66h2@ Kj6 2i2(R:q`Taj@ @* K!kh_ qh:)i:%S4h@ @yiyh@5 ih.@qGzThrD ir? qT`*@{S_֬9qTqTq`TqTqT0@ 2 0@ 2 0@ 20@ 20@ 2 0 R_@yqTqTq`TqTqT0@ 2 0@ 2 0@ 20@ 20@ 2 0 R_{a9R9?1Th@ @*@KaxhR4b`h@ 8i9h5RyR R{A_{ 9?qT@ 7R ,S`?9qaT@h 7 R ,R]RT<@(5?qTT?%qT?1q@T?QqT?qT @(9qT( )R=IR;R<9 R6 @*9_qT(9qaTJR_q!T(9qTjR( < $HaQ S?qTiX(%Ț6)RR?qT?q T?qT?q!TRRR  @(9qT( RiR < R{_  { @y?qT@ 7R ,9Sa?9qaT@ 7 R ,VRRU<@(5?qTT?%qT?1q@T?QqT?qT @(@yqT(  )R>IR<R<: R7 @*@y_qT(@yqaTJR_q!T(@yqTjR( < %RH =S?qTHX%ɚ6)RR?qT?q T?qT?q!TRRR  @(@yqT(  RiR < R{_ S {h9 Q_qT (Y ( R$!h2@ 2i2ARROi2@(Sh4(2h2R"RRR RhRi")^S 4hA9H 5l2@Cy  9S4Sh4Rl6hRS4RC9+m9RS aQ? jTSh4.RRS QR* N55CRhi)8aqTqRAT RGhi)8k i6@ *hR@r)K4KTc*R`8dBc*C`Ti2@( S4( S5c*R`(Rh*@(7h2@ S4c*R` RR{¨ @S¨_yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy{S[h@y Q_qhT (Y ( R[$!h2@ 2i2ARR i2@(Sh4(2h2R"RRR RhRi")S 4hA9( 5k2@  yhS4hSh4Rk6hRhS4Ry*l@yRaQ jThSh4-R RQR  M55R(y*xaqTqRAT R (y*xJ i6@ *hR@r)K5KTc*R`tdBc*i2@( S4( S5c*RrRGh*@(7h2@ S4c*Re RRi[BSA{è_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxS {j@ @* K!ku_@b>@a9`@t&@yS4(RhR9)}S Hh&I(85H)R9iR R{ @S¨_S {j@ @* K!ku_@b>@a@y`@t&@yS4(RhR9)}S Hh&I(85H)R9iR R{ @S¨_S{Ch2@4Rj:@ 2i2J6hA9R Q? jRR*j: *5h9qT RqaTt:*RHu}@`b`S(5h2Bh@h.BA uQi:ib(B(h&j@ @* K!kp_a2Ba@h.BAӡ@abcb h.B#H"Ag"@ e9f:@ h2@ S4h:@5a@`&@hA9R Q? jTh2@ S5a@`&@j&@K9qTh2@Jj& 2i2K9h%Q S?qTX(%Țh79qTh2@kRk9 yi2K9 k4(85( hR RC{¨S_ !S{Ch2@4Rj:@ 2i2J6h@yR Q? jRR*j: *5h@yqT RqaTt:*RHu}@`bS(5h2Bh@h.BA uQi:ib(B(h&j@ @* K!kp_a2Ba@h.BAӡ@abcb h.B#H"Ag"@ e 9f:@] h2@ S4h:@5a@`&@]h@yR Q? jTh2@ S5a@`&@,j&@K9qTh2@Jj& 2i2K9h%Q S?qTX(%Țh79qTh2@kRky yi2K9 k4(85( hR RC{¨S_ !{b>@a9`@j@S4 @* K!kc_xa2B@abh.BAd@`B 4(Rh9ib(B, @* K!kh89(RhRib(B R(h&{A_S {5RuR9j@ @* K!kb>@a@y`@t_xibS5(BC9Cc@G9 h@ 6u9(B(yib(B RuR(h&{¨ @S¨_S[c{j>@*XS_-q(TI(I8( t@6 Sh@4 !i)85}@7 !i5_83tj@@V S 4 @* K!khx}@% @* K!ku_xtj@@ S @* K!ku_tj@@ S 4 @* K!ku @* K!ku_҉@(S4)2j:@6(Rh:(yA}@`b@ yR9"**Tr*@ S4hR@4h&@ 9?q Th&@ R i&*9hR@ iR RRR{cB[ASè_ֱS[c{j>@*XS_-q(Ti(I8( t@6 Sh@4 !i)85}@7 !i5_83tj@@V S 4 @* K!khx}@% @* K!ku_xtj@@ S @* K!ku_tj@@ S 4 @* K!ku @* K!ku_҉@(S4)2j:@9Rj6y:(yA}@`bA@ yyR9"**T*@ S4hR@4h&@ @y?q Th&@ R i&*yhR@ iR RtR R{@cB[ASĨ_ְS{j@ @* K!kt_4j>@_-qTi(I8( j* h*@hRyyh99(Rh9 RCRR{S_S {@ @* K! G) s_9@15&S4(&3(R~@R9P (&3~@*R R{ @S¨_S {@ @* K! G) s_@y@15&S4(&3(R~@R9 *(&3 RqTh94 S@ @*@KkxrhkTR R{ @S¨_ @I@ THa@94H@ IH@a@9H@ I @H @ I @H@9 @ Rh@ i_ @I@ THa@94H@ IH@a@9H@ I @H @ I @H@y @ Rh@ i_{SVChRA94hR@qMTu&@R&@xd@#F5@b4dBc#`DhR@kT h*bR@dBa&@c`6 RC5@SA{è_S[{hRA95hR@qMTu&@Rc@#yCh@ *qmT#@yb`hR@6kT h*bR@dBa&@c`8 R{¨[AS¨_S[{*4@*@ T(a@94h@  H @~@12@H@ I@H @ I @Ha@95Thh@ i{@[ASè_S[{*4@*@ T(a@94h@  H @~@1@H@ I@H @ I @Ha@95Thh@ i{@[ASè_S[ck{7R9sTiT @a1T @qT " @Oh81AT!T @qT  691T HR R{kCcB[ASĨ_S[ck{7R9sTiT] @q1TR @qTN "K @_h1xAT!T< @qT8  6y1T1 HR. R{kCcB[ASĨ_S{ @[h@@ |@*F)@ yj)! *@96:* (R@*{¨S_{1T  (R7EkT |@*F)@yj )! *@9J6S)Ccs  (Rr{è_S {*aTR@qaTH!C97 qATHB96 R@RT* ?5 ?**~@ F @(yk I! ?94* R{ @S¨_{ ? ? R{_!_A_S[{`Rt R R"S)4(yh4) ( A6AY RR`5SvR`R*{[AS¨_RS {I3yh4(-x5(i@A(y h4H-x5H ˿"T`@xuxqT`4i@h@  { @S¨_R#R{ R@;{_{S[c RRl$cTy@@@yJ4RH =S?eqhTHy.@x*5RUR R*5 HR @G~@Ty HR]@R= A? T<LT|DӠs/sRRhsB R @@*@ R4* HRTRh_R kaT`B*[cC[BSA{Ĩ_S{C_co@94 @HC yI{èS_C߈CbR%@x+$@xHQeqIhQLieqhK5l4BB_{}Ah5D RA{_S[{- R=VsR9C @h@(&@xqBT @ ylx6h@il8ScA@<S&@xqBT @ ylx6h@ il8 Sc1@ <S K5t4sѓ@94 @HC yI{è@[ASè_S[ck#{ Rn{è#@kCcB[ASŨ_ֳ ؚTTR3 ؚTh@; R j`Ti"@ R  Rh@; R j Tw@4 77BT*_C7 Ta@~@ӂ  aR +h@B7j@ZC7 KHA7ih~@B)T{@ W4I5>   K_C7CTh@hf@* 4@7 |@Z @@ O1T@Z(@9i"@  TRJQ HRzjRI_)2I5jRI_)2I5;@ ؚlS[{ uTR# R{¨@[ASè_,<S[{*sj@K_  T(AkT? T @ T Ra(AaT[w@v@"q TI+A?)A? T@I v@ kT@T  kT  kTI  kT  k*!T(R4R%RR"hRtRHRTRRR kT kTI kT  k*TRR RRRRHRTRh}A?*R?v}A?*?wR{@[ASè_֑1@_1_ @h@*)*-ʚ___S{ @h@*)3-ʚsR}A?`?{S_ @ RIi K,ɚ h_S[c{((v"R8qTqUR@  8h9s8* 4@  9h9s545q`T&qT8R9(4q`T%qT94v"(@ R )9+R R8JqqTqTJ749qaTq RJ}S*4JQsw9s@  *59 45qIzTK4`99s 4@  9h9s@  s9s@  V(@ ){@cB[ASĨ_{bTB> š?T)|  )T !  {A_S[{*u 4QqTR$RSe RV(3@sh9H5c,A"kR R0cq!T@t QH C *4 @   @ H@ h@)i Җ  R*{è[AS¨_S[{!`@h@HN@4t@@RRR|@vAE @*RR@4R b @`@Z {[AS¨_S{@hRs /`R< : *{S_S{@hR<s Z`R  *{S_S[{9 4q)h4H85H8H5  94i4H85H?qT! u`5" h@ @  {@[ASè_RS[{@y Ҩ4qk h4(-x5( A* @y5` 3@y4= =Sh4(-x5( A7_qTAu u`5" h@ @ Ҋ ҇ {@[ASè_RҡS{@@`TSh@m @i {S_S{@@`TSh@W @S {S_S{!`"@Sh@< @8 @Sh@0 @, {S_S{ @H?Ri@9?qhT)4t4?qaTq *@4ss?qTh@8*5{S_S[{( *Cӿv@~A?ր?sT{@[ASè_S[{`Tu@~A?֠?ր5TR{[AS¨_S{ @ `@ {¨S_S {E95)R ;Ո@ @5 @K(@ `TI3-˚}A?R`?!?qTp@ @5 A  @ @5(R9 @)R 9{ @S¨_k_csm{*)b5a ?֠@yIR k!T<@ R (I@? kaTH1@y-qTH@9qTH@h4*3cC9SC#HRIR)sGy@4{ĨA_*{*qT1@ @*!SJ5A ?ֈa * ?* * ?S{ ( *CR ?4 @a ?}A?*`? @ ?{¨S__"RARR"RRR}RARz @@ RIk K T ,˚* ʊ_gRRh{{RR J;R{_{@Qur!T0@qT!(;RaRR{_|@?@q- F@yl !*@9+9OT? @q T(@@Qyr@T?AqTH2(9(Ryl%H9 H2(9HRH(9H2(9yl%_9o5Rk5RqR(R _S[{ @ C9'г"`Tɂ h@ T - `s"@ {è[AS¨_)R ;_{SCcCRR){¨_{*ZCJR)RrI1 Ts4q`T qTRz y2H  *{A_A;_{qTR_ H_@ 5;*{__S{ @? *@` *{¨S_S{ @- y*@N *{¨S_S[c{@ @- @@* ʩ@V-˚* ʩ @N-˚* M-˚ TC @(  U#TTuҼ @  *C 胊kT @@ RJ KR @*-ʚK  @ RI K@.ɚ  !I@ R+ @J K -ʚ@+ H@ R  @HK@-Ț+ H@ {cB[ASè_S[ck#{@ @k?L@i@* i@U-Κ* ʩ? T-ΚHT {"џT@`T  ʙhA3-Κ?`?@L@+@h@  h@M-Κ  K-Κ`XT    T=L@@ @,@H@ @*@L R{#@kCcB[ASŨ_!{ScCIRHR){è_`  @@ T@ R_{ScC'HRIR){Ĩ_ ( R_{! R{_{ R{_{@6  R{A_{RS{_S{jDH_QH 5;(5`DBTBh R{S_{`D`D` @ `@ R{A_{AS{_{S4GH RAS{_{  @h}A?`?"{$@T RRb9JHi8(8h4!с9HR@RR{_{`R )AH6`>`RO7 66R?kT R_RS[c{h@*wSRb4 QqTCy@R@-49m @S ix69 lq2q `TqT,49l Ru4BqaTB S?%qhTQ ~ S?eqhT^Q S?eqQITh4HR9RkS aQ? jTqRlѵl49 kTxl@lt9lRqU5> KB S?%qhTQ ~ S?eqhT^Q S?eqQIT1@TkT kT k KziTR" Rh@7* 9lh49kT=7@9y4 @HC yIi@ih@(R1**HS4'HRw7@964 @HC yIi@ih@(R4 @HC yIi@ih@(W6K@94 @HC yIi@ih@(*{è@cB[ASĨ_S[c{@*uSRo4 QqTC@R3@y( @%@x*R!@52qhQR jT@%@xzrRTqTqbThQp R k Tq TqbThQgq TqbThQa%q# T%qbTh%Q['qc T'qbTh'QU)q T)qbTh)QO+q T+qbTh+QI-q# T-qbTh-QC1qcT1qbTh1Q=3qT3qbTh3Q75qT5qbTh5Q1B9q#Tj9qbThB9Q+B;qcTj;qbThB;Q% KqTqbThQp R k Tq TqbThQgq TqbThQa%q# T%qbTh%Q['qc T'qbTh'QU)q T)qbTh)QO+q T+qbTh+QI-q# T-qbTh-QC1qcT1qbTh1Q=3qT3qbTh3Q75qT5qbTh5Q1B9q#Tj9qbThB9Q+B;qcTj;qbThB;Q%hA>CRl3h}A?`?{S_ %{h:h:CRQh}A?`? R{A_S[ck#{Ch;*h!;*C R*.9h}A?;@*** ? Rh *** ?C{#@kCcB[ASŨ_S{ha;h;C `Rh}A?`?ha ?{S_S{h;h;*C Rh}A?*?h * ?{S_S{h{ƨ[AS¨_{SC9Cc#R) R)sGC@9@q@ {Ĩ_S{i@;( q!T?rTh.@ Kkq-TIa@*k TjRI_)2I5; h@; S4jRI_)yI5;R{S_{R`5h@;- S4c`5R{A_ R{h@;5 S4h@;S4`@mjR (I_) I5;~{A_{RC@h  R{¨A_|P;_S[{G)ᏹa( ѶT@Sh@;5 S(5kRh_ 2i 5;7h*7} _h  _RR_jRI_)2I5;^{[AS¨_S {C @y A ,@x?qT5R?q`T?qT?q!T3`RR*3!RJR RRRR)RDRREҨ@y** 4MqTTq TqTqTq@T9qTIqa T5s2s2=rTs22'R4f5&R37j3305s2/Rq$QqTqTqTqTq TqTr`Ts2rTs2 5Jy5J2.RqraTs2s`6 Rs2)R?q  5 q@y.@xqT5@yH4R@ @{¨ @S¨_h>b~ 5(@y(-@xqTq!T4 @y.@xqTh?5h2IhA?5h2  h?`5h2jixqT H-@xqT5c9S {*&#@9h5@0R*CB5HO@ IjRI_) *I5;@~h{è @S¨_hA {CH@  @@{¨_S{ @@ @*E@I_)I5;`@9{¨S_S{ @h@@`J@0`J@DT T@H5J@{¨S_S{ @@ @@!@@@`@{¨S_S{ @@ @ E@_Q 5;5A@T`@{¨S_{cR#c#RR)'+R'R (/h A@C @AK@(E@iRIyy@ y@pC{Ũ_{O{A_{RRRR) @hA?T 7@8@4@-@1@1@.@5@+@%@(@)@%@=@"@A@@AScCssC:{Ĩ_S{J@kDJ@T T@H5Js{S_S {h ?*РB1 T}TB`4y ҬB҇5B~>h * ?{ @S¨_nS{ЀB1TG@TB[4y wBRҜM5BI ҏ{S_?S {h ?*РB1 TTB&`4y BBg5BZh * ?{ @S¨_{"1aTRR R{_{`B1Th R{A_S {hT(hE R ?`h`4w4ER?R{ @S¨_{A #RC{¨_{A #RCҞ{¨_S { 95 yKCl@*R( @ kaT' q (@s@9hy R@9H4 @HC yI-@9c4@# @qTkKT @!R% @5( @(T94 @@#R @!R 5?HRR{è @S¨_ҡS {#y @TSR7sh{@TRR+@)R @ kT#@yc-S`qmT@@#@yqT@TRHR@R@94@HC yI{Ĩ @S¨_tu9S(Rh*S#RCR 4@5S`RH ?qT@TRHRZ@R{Di@?TI C?jaT`{A_{Di@?TI C?jaT `{A_S[ck#{CK@9qS*l.(T|HR@R@HtaT@*R* `49 R}&  R*iSKA 9 9Rh9@sRIS6y_)LRT{9@@8(Rh9ws t5R@}@ @(9(9@ @IRҟqmT@ +@h%š =S+j=S_qiTH =SHQj9=s!DӔQ6b7@S4kRl9S Q? jaT{8Tq@T i9h8h8qT*RsB49RqHkSk Ai9@l Ht ?*?hRh9_9 T }H ɚ  9 aT_ T H ɚ  i9k D J TIH ɚ  i9kH i99R@94@HC yIC{è#@kCcB[ASŨ_S[{*  `@_C1CS*@[@*Cqqן  H %`49 +@RC***{¨@[ASè_S[ck{*qhŸ %)wS*STpHR@R{èkCcB[ASĨ_CO64@q*qmTH9 h4(85(  @r@RqaT9q Th9@h9(}@ @*9j8@ 33 Hi"1#) 5` w4Rh9@ 9?q T@ Qm6 Kz9qkT}( `h 9+}l}K R h 9)qkT}( `h9+}l}K  h9 Kh9 h9? qT9qTb&@94 @HC yIRRz QgfffS[c{C*S@Rw4HQkT@q**H_i388@qTRh9s@q,T5@ 9(R?q@TR4h4t h9h4(85(tx9t(qT9h4(85(@}@ @*99@6Kq VzԢt4h9h4(85(`4~@R@94 @HC yIR{ècB[ASè_S[c{@*C?}C*S*S@c@*C*q@3Q `49@ Q?1$UzT kTh8587@$RC*\ 7@&RC***{¨@cB[ASĨ_{)S(*T9R{_4R98@TcшS R-ySNQo ,yk9 h4H85H 臟  +  yk`5RRҏS_{@W< *@K%ךs=S5"q7*n5@h @*%ךL=S!qiT RT(!ך * _@TqTK @*%ךKS)L` qT34@qTs4@HR{_AS¨_S[{C*RZRwT+qTQ qRHT&RG7@tT@aT R   aTRs(*K`2S*]SD 2[@{qlTQyrTqTq+@ * *  :qTqT+@ **  +@} *J#@**q'@   ˁ`49+@R*_ +@ * *  C{¨[AS¨_֨@)D @? _{}A54R A{@_T{_S {sR*R#U{@TC@@**!Rw5RQ@94 @HC yI{è @S¨_S[c{C*q**Ta~@k***%C{cB[ASè_{<SR#y kaTR%c#@yqTh @ ykx6@@ik8S@ @%RK#RC R `5#@y'@y@94@HC yI{Ĩ_S{3R*{S_h@;5 S(4h@;1 S5h@;SjR4I_)2I5;I_)2I5;h@; R jaTh@h[b"@a@f`qTq RR+jRI_) *I5;h@;rTB1`T>1T:*7~@) F @)yk H% ( @9IR  qTjRI_)2I5;h"@qaTh@;S4h@;!Sh5Rh"h@j@ QiH@@9hbT_S[{*4h@94` @_9~N95h@hh@94` @S9@$R` qqh9i 5h @yR!R*|@5H ?ֶ@%i@ iTh@94` @*9R` qqh9i5d @ *!R*|@I(hR{[AS¨_S {*4h@94` @9~R@y5h@hh@94` @9 R` qqh9i5h @9RR*n|@5H ?Qr@'i@ iTh@94` @9R` qqh9i@5d @ *R*F|@I(hR{@ @S¨_S[ck#{:RRq@HSRRCC9G9K96@i*t5Ȏ@hWB(C( C탉 ҭj@H9 h4(85(  T"H WB T˂@H9h4(85(I!@5@wk4"TR1 *C@'T"*{Ĩ#@kCcB[ASŨ_R:S[c{9h4(85(4 TR{@cB[ASĨ_!h5b 5i@?T`@Ҁұ`i@ (iC  TҪ@R* `" i i@5h@ !iRR{S[c# X 9Q S?qhTi&Ț7xT 9?qATTy(Q S?qTh&Țh6)R R?qKc9@)R @ k!Tc@94@HC yI"Ruc@954@HC yI"R4@HC yIRC@RqRH R ?T1*^&@)7C39@)R @ k!T@94@HC yI"R5@954@HC yI"R4@HC yIR3+@q9qT9h4qaT94*35A9h4H  ?֠5"@  +C T!@ aeRA9h4Ha  ?cB9h4C@* Y#@cC[BSA{Ũ_ 4S {*h@9H49~8@y5h@hh@9H49aHR@R9+h @9RR*C |@)H ?&G@h@?Td @*R*-|@I(hR{ @S¨_{S H! T|@Ӣ RC ?5H ?R)SS##9@)R @ k!Tc@94@HC yI"Rkc@954@HC yI"R4@HC yIRC{#@ SA{¨_S[{ @t@ @*E@Aa'@ " RR" RRh@ @*E@Le@%h% Th}TT@ @*@H_QH 5;(5@ @ @A@T@ @@*@hE@H@*@KE@i_)i5;@Q{¨[AS¨_qTq`TqTHA>q H>H=H=_{*Cf?  1T(R( I( 1!T(R( I( ?*1T(R( @ @@94 @HC yI*{èA_S{b" RRF AhaB) R ˟His8)Qh85fhe  Rhii8JQ(85{S_{ `@(Rk TH! C ? 4R(8qT R[@99[4*@9qTI(8 kiT(-@85e@R  R!Rғg@ RaA R R)g@ RaA R@Rof,R R%@x6iB,Kig8(a@92(a9 6iB,Kif8(a@92(a9 RKi/8JQ5  R RhQeqTh}QjB(nSIa@9(2Ha9 hQeq(Th}QjB(Ia@9(2iHa9.SRh e9kQ5 @{¨_S[{*6SS*%@*E@ @ kaTRE@ERE@**1TR*{Ĩ[AS¨_V5z@ E@H_QH 5;5@E@(A@T(R@E@I*C_jT'RR)ScCqV4@ @IS {CI?jTJ@hF@RF@@Th_Qh 5;5A`T@Fi_)i5;ՠR{ @S¨_5S{h9h5'(Ah )Ah&@cB!R](R(9 R{S_{n'{_{S[ɿCv*4! R U}@Ө~ iv?k@ TJ_q#TRk@ TH Ȁ>S ?ր4(RkaTh:y pH! * ?֠4ub" RR@t qT@9(4(@94+@9kHT Kj Jj8kQ2J*8Jk5(-@8(5)R)Ji8?q2J)8cT`@)R` Ri J59wb" RRA! ҎRB2 j@9j4h@9(4_kTMqBTJm8Jig8(*J-8h@9_kTj-@85Q5(Rt)* `l2R*kQJyhx%xk5 RC8@[BSA{Ĩ_S {*C**=@jS* e@9?jaT4@@ jx*  Rj5R R@94 @HC yI{è @S¨_*҃RRRkTRK%qTTR(%h7qaTRӚRkT(՛RkiTh֛RkTRk`T(RkAT!Ha RKqR釟kHTRK%qTTRH%7qӚRkT(՛RkITh֛Rk)TRkT(Rk`T!xR?q?qi4GHA S[{H ?U@y4 =h4(-x5( A*k h@y5h 7A*RRR|@**RR`4Ha  ?{@[ASè_S {H ?t#@y4 =h4(-x5( A*k h@y5h 5AӦsHa  ?{ @S¨_S[ck{*WRR lV`TT@@y(@TT@4G T@(@ATT4h Z҃@(T@4 P@yT@A@5@ yyx?q$@z`T@C˕@Hzu[x5zu(@((@h+JT z54ˡ ?T?T6 }TW4yh4(-x5(A AuR !5(HAq?x  ? 5HR @  @RR*{¨kCcB[ASĨ_RS[{{[AS¨_h@ H@) ti@(y h4H-x5H AAҡj3js b@5i@Rm{ 1@*@K @7C@Rq@T R{¨_H J RRq(H _S{A%`@@@T`@@@T`@@@T`@@@T`@@@T{`"@"@@Tv`&@&@@Tq`6@6@@Tl`:@:@@Tg`>@>@@Tb`B@B@@T]`F@F@@TX`J@J@@TS{S_S{A%`@@@TC`@@@T>` @ @@T9`.@.@@T4`2@2@@T/{S_S {(@ҟ @sT{ @S¨_{```BA``@`@`@``b`B`A`B `RA`VA`ZA`^A{A_bRII @y 4(@y_kT!) @y(@y K_{S[ck+=****Nt5H@ @q)R(R!R**'*v5R;~@ A? T<LT|D/s/sRmRhsBR)**!R*`4HA ** ?*Rh_R kaT`BsHc@94J@HC yI*_+@kDcC[BSA{ƨ_ @I_)I5; p@I_)I5; x@I_)I5; t@I_)I5; @I_)I5;Ո ! RH_ TL@_)5;H^L__)5;JkQk5@US[{i~@iA%?Thr@@h5`z@@5`~@r`v@@5`~@`r@`~@h@@5h@h@h@`@`@2!vtR_T@@5@^_@H5"Q5{@[ASè_֠H# T pH_H 5;*_{sH#Th^A;Ո5{A_֠H# T pH_QH 5;*_ @I_)QI5; p@I_)QI5; x@I_)QI5; t@I_)QI5; @I_)QI5;Ո ! RH_ TL@_)Q5;H^L__)Q5;JkQk5@_S{gCI?j`TJ@SRDB R{S_S{@aTt@5 `T{S_S[{U ՚TRҵ~nUTR{[AS¨_{H! ?ֈ {_ֈ  R_S[{@TWv@~A??S4sBT`TTs"h_u@~A?R?sBh"TR R{@[ASè_S[{TVu_~A?R?sBT R{[AS¨_ֈ_S{SH}A?`?`4 RR{S_{R @+HE*S-˚R{A_S{ @ @+HE*T-˚`@{¨S_qTq T<q`TTqTXq`T(! (a((_{SCcChRiR){¨_ֈ(_S[c{*R3RC9"q,T`T qTqTq T$.q@T>qTVQqT*!5{è@@cB[ASĨ_֩@H)C*(@kT)A? aT R:7!RC9s4`R*@4(@ V-˚`T.qT"R%6@"qT@R"qTH -C@  Ki1CH _T_JA(@s4`R!aTR"qaT(}A?a@R?(}A?*?֟.qhT"R%6"qTs4`R`R{1T>(R7EkT |@*F)@yj )! *@9@*(RR{_S[c{UH(RtR }H 6}~@|iw 4`6Qk-T |"(ih7qT }|JH> ihR{cB[ASè_S{ @-h@@ |@*F)@ yj)! *@9 6( ?`4R ( ?*(R@R*{¨S_{1T(R7EkT |@*F)@yj )! *@9J6S)Ccs(R<{è_{S[ck+g*~@:F@H{y xC"3" (@/hC")( ?#iC@RR @'T~@)F+R{9_ k8R T+yh R h-"*94qKT@q TH{y"*@9 8. K6Tch"c *,i8kQH85 Rq-Tch8I J_k)8kT H{yQ  &k_9M5cHRq)R8@`TQi@98(kTq*RIRX@#CTs6*I{y & l@9qT& j9B 9hR 9h99_j9HS x6@v TB1T"1 T#@ҥR*Rs* 4(!/@ s* ? 43@@jK@T k T+qTR3y(! s"Rc ? 4@4@@TF'@@RT H{y Ji8 )&j9}@_ T ! RmT H{y"+ Ji8j9}@_ TH{y " *9J{y* h@92h9( ? @CB94?@HC yI@*J+@kDcC[BSA{ƨ_{S[5/(Os/ |@ *F)@yj RtB")! 7@TccRc1bTi9s?)qT 9! 8 TK (! C*c ?@4@)@ ?kCTT( ? @@/(s/@[BSA{Ĩ_{S[/(s/ |@ *F)@yj RtB")! 6@%cRтc1bTi@ys ?)qT y! %x Tc  A(! CzSc ?@4@)@ ?kCTcT( ? @@/(s/[BSA{è_{S[ck+O(ҳs/ |@*F)@yj vB")!  9@"T(!cR*cBTi@ys ?)qaTy %x T AҥR#cR R*4R4#A4ȢKC?@4@ kTiKT( ?@ @O(s/Q+@kDcC[BSA{ƨ_S[c{** 1TYa(R,7Ek"Th~@F8@ {w)#*@96*{w)#*@97G(R:*****.6(R{¨@@cB[ASĨ_{S[ck+**43R~@;F@h{z "T9 S?qHTU7H@9(6BR**4h{z"*9*6bH@ @h{z"*9*4h{z"( @ ?4T4qBz TyB5 RRT&@x*} " k!T* *q!TRt <S5qT)T( ? @C2**h{z"I964qT q!T** ****8@@ (! * ?5( ?3(@) @HI @@h5@4qT(RsRdWbh{z"*@906h9iq TpRcUKR>+@kDcC[BSA{ƨ_S {SWRR{¨ @S¨_ue4trAT****C*@44i*F)@ yj*! I@9(H9`@T4u*S[ck{*~@*F9)@yj *)! *96uj!TC5@ jATs2i ?@q:RXRT(A@Qyr`T(@QyrT(AQyrT9 3*(`Rh  qT99 r T9 07@ R RR kT R kT R k! T @ 4 qTq Tq! T3R4bRC*q`Az1T@qT qTkaT9*BR*?R*:T@7~S=R kTRߟR k!TRA*$`T9R*`TS49RqT qTߟRSRsR4RC4bK*1T k TR{¨kCcB[ASĨ_R@S[{*9r**R TqT q T] 6 r`TRRR h?qT?yr`T?qT?qT? qTIRRiR?qT?q T?q T8h@ R)Ri BqTqTqTqTqT$  R khRHR(RR Rh)86h92h9x7HjTC5@!@qTh9a2h9@6IJ(** j87(RhT06h@j@ 2ii@H2h*2j`6h@ 2ih6h@ 2i(6h@ 2 6h@ 2i{¨@[ASè_RV @S{*i~@*F yj)@)!  R+@9jaTK86BR?T@ qT@"R#yC*#@yq ZzT*[ 1TR*#@TR{¨S_S[ck#{****?@H%@cJ @1h%j Tw}@ 1!TlrR(RG@+RF)Ks* C@[#*E*(  ?kE) D)T7@ R( kT6(6y E*#* ?aT *Fyj)@*! I@9(+iH9(?@(  ?`5( ?* *F)@yj*! I@9(H9)( ?5RqTc92 qTc92c9@N Ҹ2*Fc9yj)@)!  89KFykI@)! ?936@*4@*gc@C9H%@J @C*h%j @*u4*}@ F @(yk C9K! i9KFykI@,! @9(ASJ*S R h J9 jTs6 *Fyj)@+! i@9(2h9 R kT6(  ?( z D)E*# ?aT( ?t *Fyj)@+! i@9(h9@r  *Fyj)@)! R{Ȩ#@kCcB[ASŨ_***%R{*CWhqT@@ sx R@94 @HC yI{èA_{Cs T@R kR)Siy{¨A_S[ck#{@6yҚRh9h5"h9h5Bh 9q"CF T`@kTIT A@QR)J*yR U3.xy UA ҟyHR{¨#@kCcB[ASŨ_uҖh9h5"h9h5Bh 9q @TAT{_ .a59?`raT9?PrT* R?<rTR(KqTJ R?( rATkTj R ( a2i 8!|Slh*9@__HR{_S {**5h9qෟ& @5h9qTTiU4(9(8qT5h_8 RqTh9qTq RaT qTh9qTq R@TR{ @S¨_S[{iRRDa_q9H ?)T\SRXR*3R@v9u9h4R8BQ_q T97@**SH4(969(8qT(9h9qT@  jH9 h4(85( aBR{[AS¨_S[C@H4'@4 QQ 5*@_qT@C[AS¨_5@J5> ( q藟 C[AS¨_ ҟ1T }@  xiK N>h ΚQ }@ 1Th` )q(RKRh C[AS¨_ kT K k *Th}@ H}@.xi xikTJQ_ kkQTBT 4Q .xjQ 5xj(R RZJK S?qTRK4&!.*"qT Q +xjh%*ҥQ% 7}@Ӧ kT|@ xiRQI xiQ  xj4@%֚! q(!ԚOT Q  xjh%  *@C> Ú@Ƚ }@өT` %@@?T~@ӯ}@j}@ _Ti ? J )T R'4}@ *xiH-* `  xl_ kH Kk%x,k#TA$IT R4Ҩ }@ H xl+xhk(A+  x,O`ӃT*}@QQe6@ *_kTH}@ x)@J_kCT 4kQi xij5 k5C[AS¨_C[AS¨_{S[ck+,*c@7R}qaT9c9@RRRR(it)@`T+@6H1?Th@aT(R   aTRhs(*Kh2qT qT q`TqTH!253RH2H1H1@5Rh@g t)R_)@9 @3(RLRJ)T dl`* )ZR x(Kyrq)RHR+KqcT3XRR, 4 R33YjYj kA TJ_ qATQQ }S'RK)(!ƚQ3hQ(Yh*RR%* ZHIK K S_qZ ?q T k藟  6 qHTQQkT K Q kT3NYhR? kT3YiR  %(!J*3jY,Qk`TK@O@R43?Y( kTO@KRKRQQ }S'RK)(!ƚQ3hQ(Yh*RR%* ZHIK K S_qZ ?q T k藟  6 qHTQQkT K Q kT3NYhR? kT3YiR  %(!J*3jY,Qk`TK@O@R43?Y( kTO@KRKq Ts%XRR[ c 4 Rs%3YjYj kTJ_ qATZ(RIKR K S_qZ ? q'V qTRKQ?1T(Q? kT3JYi R kT3hYhRHy3hY))Q?1`TK@O@KȆRKt~S~~Rh)R)!*IY4}~s_0hT6q Z*RHIKR K S_qZ ?q'V qTRKQ?1T(Q? kT3JYi R kT3hYhRH}3hY))Q?1`TK@O@KR9RbiBBHU!7~`YS4IR?q Q).3 Rt @9u@9~ӈ Gi@yH ~ @ gC?qTC5RqTw4 R RsYk} A)Y+kkI`!T4BqTsIY(BBR RqT *@"}~_0sT59R HRBB34q T 4 R RsYk} A)Y+kkI`!T?k'?ksc1?ksb1?k$1qRR4fXn5kT?Y.1R*Re4qTkTY- LXg+Xmk} A/=*A+  )X-7@ET/4q TkTY-HYm A/IY-/`E/5q TkT*}~_0sTī9RHR6BB)R4 @I9K5@HS uS* Z  K4H!1iQ Yi 4_qT4 R R sYk} A)Y+kkI`!T)4BqTsIY(B"4 R R3M҈Yk} A)Y+kkI`!T)!4K@qT3IY(K@KKH`Sw4IRq Q).3 Rt @9u@9~ӈ ;i@yH ~ @ [C?qTC5RKq`TV4 R R3Yk} A)Y+kkI`!Ti4K@qT3IY(K@KO@RKRqT *K3@"}~_03T)9RHRgI)S4q T 4 R R3Yk} A)Y+kkI`!T?k'?k3c1?k3b1?k$1qRR4fXn5kTY.2R*R4qTkTY- LXg+Xmk| A+, *A/  )X-7@ETO4q@ TkTY-iYm}@ A)jY-O`E5q TkTK~~_03T9RHR+K@O@(RH4 @IK5S uS* X K K4H!1iQ Yi4_qT4 R R 3Yk} A)Y+kkI`!TI4K@q"T3IY(K@KK@KK93c#<@(qT)RBi9s4 R RsNҨYk} A)Y+k kI`!T)4BqTsIY(B9sz5Qh9s@@7_k  #@ ?A*H}@)145TK@ N4 R R3 XYk} A)Y+kkI`!T)4K@qT3IY(K@KK93Ac#K@ R*Kq9h} k `ӊ}SHuS L k KjH}STqhJ-8Q1T9%)(T@99q@9h4c*,+@kDcC[BSA{ƨ_R?ʚ;S {sR@RDR{ @S¨_ֿSTRRTSR+*{{_S[c{C*q**T~@*qTa~@*44***kh} y* HRC{cB[ASè_{jHO! I|`ҥh@jRI_)2I5;R I_)2I5;hrhHRh"h@h{A_{S[ck+ R+@kDcC[BSA{ƨ_vY?T(ci# 7 ֚*_!HTTT~A? ?qt”TTH9kщi8i*8I8kT@HA}~At? ?qT_Tjh8I9H9i8L~A? ?qT_TLH9kщi8i*8I8k~A? ?qTTH9kщi8i*8I8kTBT~A? ?qT (T~A? ?qT;˿)ThA? ?qTTTlH9kщi8i*8I8k7 @TIT(}A? ?4 ; ThA? ?4 @ W@ T_Twk{#7T9Txk{#_bT,7kѵ"W{# +@x@#{AR c9"9RR{_LTi8h84)щ i8h84)iJJJ9iT8 R9HR@R{R }@?BT?i*8qKT)@9i4-R+C( iil8!H *)@8hi,8)5 @9i4+R( )Cj!(il8_jT @8)5{_`S{RSSTC@ @h5` kkџ Th@9 e@9I7h @j @@94 @HC yI{èS_{S[ck+_CC*Eq***Ta~@kw5@ @Hs@*R)RRqA**A*x5R A? RT<LT|DIs/CtRB **!R* 4R***U 49P66 4kTD@****u59~ A? T<LT|D s/CsRGRhsB***[4*R*5R*5h_R kaT`BNR_R kaTBF*_CC+@kDcC[BSA{ƨ_D@*h_R kT`B2S[c{C****@****#@94@HC yIC{è@cB[ASĨ_{Sq{_{R6 h E ( R ?{_S[{$HTvE R ?ր4- 4ER?֠eR{[AS¨_{#y4S!RC`4#@yR{¨_S[c{"R**BR T TMT!d1RR*@ R*"*1TRs *mT@1T @qTR@i!*dRR*@T*!a ? 5R ( ?*@R*j*{cB[ASè_{ChA)j .?.?(G?g [H @y5@987OqQh qaTLR h qaTlRhqTRR)R K(! Q+  * L@9 SK@ S? qAzT kT 8qaT  * T? T)KKL y SI yRhKqiTADq"TR R(R) (yhkTOq__vHRCI{_{*Ax   jTRR9`_RR0`-R{A_{``R{A_{`@`@IC @5@h@ kT@Rh@ k@T R{¨A_{ C5 @C@h(25R R{¨A_f )L T@`T %RR#RH/&RaR;@TERRCR X X Tn`t \8pp \ \ \+qf }`r;g;{y*sz | \8 yOT \RX yBXu+qR }yK]Yg^`g^;"Tz \gR1:p.fRn2\ 2lȵm}\l ~\b(-Lgt+KiQ}@8b HA2u rymH::uP\VQU\q\st\KT7 yBUymFW\t wfY*u_VX }yc]Rg^`K^_ V]4x?Q#Ib?ƺ??^?AG;BIb?WUUUUU?B.?_D; R J}S rTPq T`qTpq `R R@RRr R_qRqR**qKRI*q**} SK * j *K*`*_(D;*r R_qRqOR**qJ*}SK * j *@ *_rTq TqT q  D; }@(X+Sjq Iq q *q @Iq * qI)* H D_`? r(D; X S KqjqHK qiq *I)D_`(94Th85_{s`DTH ( RdRbRR ?`{A_hD T _S[{AwD ** ?*5 ?qTD T ?H ( RdRbRR ?A * ?**{@[ASè_|S H2rKh2rjH2rKh2rjH 2rK rTPq T`qTpqTk2k2k2rh2`_*RjRTSH2rKh2rjH2rKh2r`L86 2_(D;}@(D{, *D; R J*,**  N*k T mSH2rKh2rjH2rKh2rjH2 rKrTq TqT qTk 2k 2k 2h2rRj @*DՋ{_S {*6@6 Ҥsz6H6@Ҟsz 6P6Ҙsz6X6u 6ґsz 6`6Ҍszq{ @S¨_{S[c#'yX (@`****bpg*5 qT@iR;(3#C**)"S(44@mm@Ac#`5*&@*"@5@V'@#@cC[BSA{Ũ_Mg_RS[c{  @** @? 6 @H@ 2I6 @H@ 2I6 @TH@ 2I6 @H@ 2I6 @H@ 2Ih@ @ HӨ @)*iJ*, J h@ @ I @)*iJ*, J h@ @ JӨ @ )*iJ*, J h@ @ K @)*iJ*, J h@ @ LӨ @)*h3 6 @H @ 2I 6 @H @ 2I 6 @H @ 2I 6 @H @ 2I 6 @H @ 2I h@  r`T_Pq`T_`qT_pq!T @H@ 2 *RJR @(@H3( @H@ uI @@ J*+-h J @H!@ 2I! @h!@V4 mi! @@P @ha@ 2ia @Ha@ mIa @@QQ)R( 3h! @@0 @Ha@ 2Ia @)Rha@( 3ha @@1)Z C"RR* ? @H @ 6h@ wiH @6h@ viH @6h@ uiH @6h@ tiH @6h@ siH@ r T?qT? qT? qTh@ j )h@(jhIh@ hi4PQ@Q)@{¨cB[ASè_ {qTQqT[HRX(R{_(D;}@ *D_D; R J!*-)|@|@  i D_(D; }@K+D_(D;}@_<@ R (I)@yL @y( a4 I@?@)TH@  ?@)Tk kJT_S{T`5R aˀ`R$@h* R{S_@yIR kaT<@ R (I@? kTH1@y R-q@TR_{h@ @+u(kj}@I*@! R{_!594  |j7p= S %Ț N2 NI>N*`TIH>N )I87(}@` Hw }@H S %Ț 1 )>N*TH }@Ӏ IilA< N0:n>N1 N(>N }S(>N +j}SA*AV4 N|=   N4n1 Nr N,>NO>N 7 S)>NJ%ȚH>N-  (!Q qSJ%ɚOL ҆RkL ki _ kcTl>Nk>NJ86ki  K H <4n Nq NR N+>N/>NM>NL>N) (!ʚ * KډR) K HQ(!Ț * `TI  K(}@ H__ BT@8!k`TBт_t3 @3.1 (>N ?qT(}@ _ @1gJ _A cT6 N_TpE@ir = mAn6n0=+A76nJT6n6nNN1N2:nH>N(_T_A#TpN_A"T_!Tp@3.1 (>N ?qT(}@` 53;nh>N(:n>Nh N  N :n>N N  N>Nh >N )(}@ 1 N(>Nh (>N )(}@i A J!k!h@8!k`TJъh__{(@@ {_a{@ @? k{_a{ ȨC@94( @c)ȱc*H@ kaTc( @?qTc(ȩ!@ kTc( !@ kTc(i!@ kT5c()3@.p ձS?S ߈{A_a csm !"{ @4 {_a{R* {_a{@ @| ՠ @ {_a{ @@ {_a{`R  {_a{ @@ {_a{@@$ {_a{@@ {_a{@ {_a{R {_a{ @@گ {_a{@@ {_a{R {_a{R {_a{R {_a{C@94`R {_a{@H4@@4i*Fh)@ yj*! I@9(H9`@c {_a{@ @R r? k{_a+"+:+T+p+~+++++++,",2,B,Z,h,x,,,,,,,,11111x1d1R18111--- .$.:.X.l.z........ /"/4/@/R/^/r////////00,0:0D0V0h0x000000000---L-:-&--\-l-&@4@83@3@Q@u@#@@@R@J@J@B@@@Ȫ@ت@ @ @ @ @ $@0@ @@ P@X@ h@ x@ @@@@@@@@@@@ī@ȫ@̫@Ы@ԫ@ث@ܫ@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@<@@@ P@ `@h@x@@@@ج@@@8@X@#@@ ȭ@@&@0@@@D@P@`@#@@ @@Ю@@%@$@@%h@+@@ @"@(8@*h@@ @@ @@ذ@@@0@@ȫ@ܫ@@@@@P@__based(__cdecl__pascal__stdcall__thiscall__fastcall__vectorcall__clrcall__eabi__swift_1__swift_2__ptr64__restrict__unalignedrestrict( new delete=>><<!==!=[]operator->*++---+&->*/%<<=>>=,()~^|&&||*=+=-=/=%=>>=<<=&=|=^=`vftable'`vbtable'`vcall'`typeof'`local static guard'`string'`vbase destructor'`vector deleting destructor'`default constructor closure'`scalar deleting destructor'`vector constructor iterator'`vector destructor iterator'`vector vbase constructor iterator'`virtual displacement map'`eh vector constructor iterator'`eh vector destructor iterator'`eh vector vbase constructor iterator'`copy constructor closure'`udt returning'`EH`RTTI`local vftable'`local vftable constructor closure' new[] delete[]`omni callsig'`placement delete closure'`placement delete[] closure'`managed vector constructor iterator'`managed vector destructor iterator'`eh vector copy constructor iterator'`eh vector vbase copy constructor iterator'`dynamic initializer for '`dynamic atexit destructor for '`vector copy constructor iterator'`vector vbase copy constructor iterator'`managed vector copy constructor iterator'`local static thread guard'operator "" operator co_awaitoperator<=> Type Descriptor' Base Class Descriptor at ( Base Class Array' Class Hierarchy Descriptor' Complete Object Locator'`anonymous namespace'(null)(null)   mscoree.dllCorExitProcess0@@h@@:@:@p@@(.@X.@@@(@@@@@:@@:@`@@:@x@H@:@        ! 5A CPR S WY l m pr  )   Y* @@ @`@@@`@@@ @`@@@P@@@@ @0@x@api-ms-win-core-datetime-l1-1-1api-ms-win-core-fibers-l1-1-1api-ms-win-core-file-l1-2-2api-ms-win-core-localization-l1-2-1api-ms-win-core-localization-obsolete-l1-2-0api-ms-win-core-processthreads-l1-1-2api-ms-win-core-string-l1-1-0api-ms-win-core-synch-l1-2-0api-ms-win-core-sysinfo-l1-2-1api-ms-win-core-winrt-l1-1-0api-ms-win-core-xstate-l2-1-0api-ms-win-rtcore-ntuser-window-l1-1-0api-ms-win-security-systemfunctions-l1-1-0ext-ms-win-ntuser-dialogbox-l1-1-0ext-ms-win-ntuser-windowstation-l1-1-0advapi32kernel32ntdllapi-ms-win-appmodel-runtime-l1-1-2user32api-ms-ext-ms-AreFileApisANSICompareStringExFlsAllocFlsFreeFlsGetValueFlsSetValueInitializeCriticalSectionExLCMapStringExLocaleNameToLCIDAppPolicyGetProcessTerminationMethodccsUTF-8UTF-16LEUNICODE ((((( H   !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~ ((((( H ( 0@@@@@@@@@@@@@@@@INFinfNANnanNAN(SNAN)nan(snan)NAN(IND)nan(ind)e+000@@@@@@@@@@@@@@ @@@@@ @$@(@,@0@4@8@@@H@T@\@@d@l@t@@@@@@@@@@@@@@@ @(@0@@@P@`@x@@@@@@@@@@@@@@@@(@@@P@@`@p@@@@@@@@@@8@P@SunMonTueWedThuFriSatSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanFebMarAprMayJunJulAugSepOctNovDecJanuaryFebruaryMarchAprilJuneJulyAugustSeptemberOctoberNovemberDecemberAMPMMM/dd/yydddd, MMMM dd, yyyyHH:mm:ssSunMonTueWedThuFriSatSundayMondayTuesdayWednesdayThursdayFridaySaturdayJanFebMarAprMayJunJulAugSepOctNovDecJanuaryFebruaryMarchAprilJuneJulyAugustSeptemberOctoberNovemberDecemberAMPMMM/dd/yydddd, MMMM dd, yyyyHH:mm:ssen-USja-JPzh-CNko-KRzh-TWuk@@@@@ @(@0@ 8@ @@ H@ P@ X@`@h@p@x@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@) @*(@+0@,8@-@@/H@6P@7X@8`@9h@>p@?x@@@A@C@D@F@G@I@J@K@N@O@P@V@W@Z@e@@@@ @@0@@@P@`@ P@ p@ @ @@@@`@@@@@@@ @0@@@P@`@p@@ @!@"@#@$@%@&@'@)@* @+0@,@@-X@/h@2x@4@5@6@7@8@9@:@;@>@?@@(@A8@CH@D`@Ep@F@G@I@J@K@L@N@O@P@R@V @W0@Z@@eP@k`@lp@@@p@@ @ @ @@@@@ @8@,H@;`@>p@C@k@ @ @ @ @ @ @ @; @k 0@@@P@`@ p@ @ @@;@@@@ @ @ @ @;8@H@ X@ h@ x@@;@@ @ @@;@ @ @ (@; 8@$H@ $X@ $h@;$x@(@ (@ (@,@ ,@ ,@0@ 0@ 0@4@ 4(@ 48@8H@ 8X@<h@ <x@@@ @@ D@ H@ L@ P@|@|@arbgcazh-CHScsdadeelenesfifrhehuisitjakonlnoplptroruhrsksqsvthtruridbesletlvltfavihyazeumkafkafohimskkkyswuzttpagutateknmrsamnglkoksyrdivar-SAbg-BGca-EScs-CZda-DKde-DEel-GRfi-FIfr-FRhe-ILhu-HUis-ISit-ITnl-NLnb-NOpl-PLpt-BRro-ROru-RUhr-HRsk-SKsq-ALsv-SEth-THtr-TRur-PKid-IDuk-UAbe-BYsl-SIet-EElv-LVlt-LTfa-IRvi-VNhy-AMaz-AZ-Latneu-ESmk-MKtn-ZAxh-ZAzu-ZAaf-ZAka-GEfo-FOhi-INmt-MTse-NOms-MYkk-KZky-KGsw-KEuz-UZ-Latntt-RUbn-INpa-INgu-INta-INte-INkn-INml-INmr-INsa-INmn-MNcy-GBgl-ESkok-INsyr-SYdiv-MVquz-BOns-ZAmi-NZar-IQde-CHen-GBes-MXfr-BEit-CHnl-BEnn-NOpt-PTsr-SP-Latnsv-FIaz-AZ-Cyrlse-SEms-BNuz-UZ-Cyrlquz-ECar-EGzh-HKde-ATen-AUes-ESfr-CAsr-SP-Cyrlse-FIquz-PEar-LYzh-SGde-LUen-CAes-GTfr-CHhr-BAsmj-NOar-DZzh-MOde-LIen-NZes-CRfr-LUbs-BA-Latnsmj-SEar-MAen-IEes-PAfr-MCsr-BA-Latnsma-NOar-TNen-ZAes-DOsr-BA-Cyrlsma-SEar-OMen-JMes-VEsms-FIar-YEen-CBes-COsmn-FIar-SYen-BZes-PEar-JOen-TTes-ARar-LBen-ZWes-ECar-KWen-PHes-CLar-AEes-UYar-BHes-PYar-QAes-BOes-SVes-HNes-NIes-PRzh-CHTsr@BP@,@@q@P@`@p@@@@@@@@@@@C @0@@@8@)P@h@k@!@c@@D@}@@@E@@G@ @@H(@@@(@I8@H@@AX@0@h@J8@x@@@@@@@@@@@K(@8@@@ H@X@h@x@@@@@@@@@@@(@8@H@X@h@@#x@e@@*@l @&@hH@ @L`@.@sP@ @@@@M@@@>(@@78@X@ H@Nh@/X@t@h@x@Z`@ @O0@(@j@@ah@@Pp@@@Qx@@RX@-@rx@1@x@:@@@?(@8@S@2H@y@%X@g@$h@fx@H@+@m@@=@@;@p@0@@w@u@U@@@T(@@8@@6H@~@X@V@h@Wx@@@@@@X@@Y@<@@@v@@@[@"(@d8@H@X@h@x@@@@\@@@@@@@@]@3(@z@@8@@8H@@9X@@h@^x@n@@_@5@|@ @b@@`@4@@{(@'@i@o@(@8@H@X@h@x@F@paf-zaar-aear-bhar-dzar-egar-iqar-joar-kwar-lbar-lyar-maar-omar-qaar-saar-syar-tnar-yeaz-az-cyrlaz-az-latnbe-bybg-bgbn-inbs-ba-latnca-escs-czcy-gbda-dkde-atde-chde-dede-lide-ludiv-mvel-gren-auen-bzen-caen-cben-gben-ieen-jmen-nzen-phen-tten-usen-zaen-zwes-ares-boes-cles-coes-cres-does-eces-eses-gtes-hnes-mxes-nies-paes-pees-pres-pyes-sves-uyes-veet-eeeu-esfa-irfi-fifo-fofr-befr-cafr-chfr-frfr-lufr-mcgl-esgu-inhe-ilhi-inhr-bahr-hrhu-huhy-amid-idis-isit-chit-itja-jpka-gekk-kzkn-inkok-inko-krky-kglt-ltlv-lvmi-nzmk-mkml-inmn-mnmr-inms-bnms-mymt-mtnb-nonl-benl-nlnn-nons-zapa-inpl-plpt-brpt-ptquz-boquz-ecquz-pero-roru-rusa-inse-fise-nose-sesk-sksl-sisma-nosma-sesmj-nosmj-sesmn-fisms-fisq-alsr-ba-cyrlsr-ba-latnsr-sp-cyrlsr-sp-latnsv-fisv-sesw-kesyr-syta-inte-inth-thtn-zatr-trtt-ruuk-uaur-pkuz-uz-cyrluz-uz-latnvi-vnxh-zazh-chszh-chtzh-cnzh-hkzh-mozh-sgzh-twzu-za Tc-^k@tFМ, a\)cd4҇f;lDِe,BbE"&'O@V$gmsmrd'c%{pk>_nj f29.EZ%qVJ.C|!@Ί Ą' |Ô%I@T̿aYܫ\ DgR)`*! VG6K]_܀ @َЀk#cd8L2WBJa"=UD~ $s%rс@b;zO]3AOmm!3VV%(w;I-G 8NhU]i<$qE}A'JnWb쪉"f37>,ެdNj5jVg@;*xh2kůid&_U JW {,Ji)Ǫv6 UړǚK%v t:H孎cY˗i&>r䴆["93uzKG-wn@  _l%Bɝ s|-Ciu+-,W@zbjUUYԾX1EL9MLy;-"m^8{yrvxyN\lo};obwQ4Y+XW߯_w[R/=OB R E]B.4o?nz(wKgg;ɭVl H[=J6RMq! EJjت|Lu<@rd 6x)Q9%0+L ;<(wXC=sF|bt!ۮ.P9B4Ҁy7P,=87MsgmQĢR:#שsDp:RRN/M׫ Ob{!@fu)/wdq=v/}fL3. iLs&`@< q!-7ڊ1BALlȸ|Rabڇ3ah𔽚j-6zƞ) ?IϦw#[/r5D¨N2Lɭ3v2!L.2>p6\BF8҇i>o@@w,=q/ cQrFZ**F΍$'#+GK ŎQ1VÎX/4Bycg6fvPbag ;s?.❲ac*&pa%¹u !,`j;҉s}`+i7$fnIoۍut^6n16B(Ȏy$dAՙ,C瀢.=k=yICyJ"pפldNnEtTWtøBncW[5laQۺNPqc+/ޝ"^̯p?m- }oi^,dH94X<H'W&|.ڋu;-Hm~$P  %-5 > H R ] i u -C Y p        %  d'@Bʚ;01#INF1#QNAN1#SNAN1#IND??Xt?0 ?A??m?'?~?R?+M?0??ZR???'??$?\g?A)??@L?a???Ȇ?9??3?G?#??@D?M??@2?j?@Bt?@?X?R%?@>r?r? ?T??@_?01?^y?? ?(N??`??a?@?? -*?k?@@??B.?y|6>gsh>ƈ[^>/T,X>0S:zb>|si\a>酲j%M>zz[>ܥY#4o>wHn>G2k>)l>YHȆ>0AvVL>3/c>v ka>zzk>RUWk>q9a>de>B!Ѳm>dNpm>6/EiU>[ >$'<>F(o>BĮ^>&qN]k>YWm>bj ;>L!\>G[%_f>PHIZ>w_FGm>{]>`hj>>duo>3>ҾC`>\_>h_=N>qCF>WN@l>^b @>L-n>4b>\ngd>Z=@pn>6ނBg>?xb>8rZ>Oc>m>Bĩ*Vc>LHT>z\P>[0>'>m>[a>"߹oI>bAe>USY>kX>,HR>log10CONOUT$user32.dllMessageBoxTimeoutAMessageBoxTimeoutWFatal Error in LauncherFatal Error in LauncherrbFailed to open executableUnable to find an appended archive.Unable to read from file#!PATHEXT;PyLauncherSTATICJob creation failedJob information querying failedJob information setting failedmaking stdin inheritable failedmaking stdout inheritable failedmaking stderr inheritable failedUnable to create process using '%ls': %lscontrol handler setting failedFailed to get exit code of process.exe/usr/bin/envExpected to find a command ending in '.exe' in shebang line: %lsExpected to find whitespace after '/usr/bin/env': %lsUnable to find executable in environment: %lsExpected terminating double-quote for executable in shebang line: %ls<launcher_dir>\Terminating quote without starting quote for executable in shebang line: %lsFailed to find shebangExpected to find terminator in shebang lineExpected to decode shebang line using UTF-8Expected to find '#' at start of shebang lineExpected to find '!' following '#' in shebang lineExpected to find executable in shebang lineExpected to find arguments (even if empty) in shebang lineExpected to be able to allocate command line memory"%ls" %ls "%ls" %lsbZb b 8@@@N@RSDS=IפU+C:\Users\Vinay\Projects\simple_launcher\ARM64\Release\w64-arm.pdbGCTL.textHs.text$mnP.text$x.idata$5.00cfg.CRT$XCA.CRT$XCAA.CRT$XCZ.CRT$XIA .CRT$XIAA(.CRT$XIAC0.CRT$XICH.CRT$XIZP.CRT$XPAX.CRT$XPXh.CRT$XPXAp.CRT$XPZx.CRT$XTA.CRT$XTZt.rdata.rdata$zzzdbg.rtc$IAA.rtc$IZZ.rtc$TAA.rtc$TZZ .xdata'<.idata$2(.idata$3(.idata$4+.idata$6@ .dataJ8.bssp .pdataP.rsrc$01PQ.rsrc$02*Ȃ*Ȃ*،@،90Ȅ،BȂ&@tȂ&@@ -@(@hP\@Ђ$?P4x5Px555Px5 @4p?X78x8 @@@'@"@"!@@".P(@"?dBxBxBB@9@@0@ JɆȂ,JɆȂ,@0@ JɆȂ,JɆȂ,@@9H)@8!@ ɊȆB ɊȆBb0ɈȄ،P @"? FLF@VP$@Ȃ&? OlO̒O@P̒.P @Ȃ&?P4@Ȃ$?̎lDD0Ȅ، *P@Ȃ&?D`@@ɆȂ*J@?@Ȃ&R@G@Ȃ&5@0@CP>@Ђ$?L p"?d!pȂ$? lp"?dp"?8Dd ?H`` FpцȂ(?\ГNpцȂ(?TГp?̒5pȂ$?01p"?;pȂ$?4p?@@Ђ$;@6@Ђ$.@*@"p"?xdp"?Phdp"?dp"?ds@E@Ђ$/7*52@ @@@ɆȂ(=`$@ @"h`Ђ$@@ɆȂ*d@@цȂ(PшȄ،B0،J`$0Ȅ،2P-@Ђ$?X\@+@Ȃ$0،VpȂ$?8d@@ɆȂ(:@@Ȃ$o0 ɈȄ،P@"?,,xp?/0P%@цȂ(?D2233p"?L0h0d-p"?4l5 FpцȂ(?t??Г0 ɈȄ،40 ɈȄ،N0Ȅ،L0Ȅ،_0 ɈȄ،6P @Ђ$?CC@@@Ȃ&@@ɆȂ(j@F@ɆȂ**@@Ђ$gP V ɈȄ،@=Ȃ$P  ɈȄ،8@@+P'،P ɈȄ،r0،NP D шȄ،p"?@@ @@ @@@BB c(-*z-*-+"+:+T+p+~+++++++,",2,B,Z,h,x,,,,,,,,11111x1d1R18111--- .$.:.X.l.z........ /"/4/@/R/^/r////////00,0:0D0V0h0x000000000---L-:-&--\-l-GetStartupInfoWSetConsoleCtrlHandler.SetInformationJobObjectAQueryInformationJobObjectSearchPathW-SetHandleInformationGetCommandLineWGetStdHandle$AssignProcessToJobObjecttGetModuleFileNameWGetTempPathWMultiByteToWideCharFormatMessageWaGetLastErrorLoadLibraryAWaitForSingleObjectExCloseHandleKSetStdHandle SetCurrentDirectoryWGetProcAddressCreateJobObjectA`ExitProcessCreateProcessWFreeLibraryOGetFileType=GetExitCodeProcessKERNEL32.dllPeekMessageWWaitForInputIdlevCreateWindowExWDestroyWindowPostMessageWGetMessageWUSER32.dll=PathCombineWPathRemoveFileSpecWOStrStrIWSHLWAPI.dllDQueryPerformanceCounterGetCurrentProcessIdGetCurrentThreadIdGetSystemTimeAsFileTimebInitializeSListHeadnSetUnhandledExceptionFilterxGetModuleHandleWRtlUnwindEx1SetLastErrorFlsAllocFlsGetValueFlsSetValueFlsFree3EnterCriticalSectionLeaveCriticalSection_InitializeCriticalSectionExDeleteCriticalSectionYRaiseExceptionjReadFileGetCommandLineAWriteFileGetCurrentProcessTerminateProcesswGetModuleHandleExW#SetFilePointerExGetConsoleModegReadConsoleWDHeapAllocHHeapFree^InitializeCriticalSectionAndSpinCountTlsAllocTlsGetValueTlsSetValueTlsFreeLoadLibraryExWCompareStringWLCMapStringWGetStringTypeWwFindClose}FindFirstFileExWFindNextFileWIsValidCodePageGetACPGetOEMCPGetCPInfoWideCharToMultiByte8GetEnvironmentStringsWFreeEnvironmentStringsWSetEnvironmentVariableWGetProcessHeapFlushFileBuffersGetConsoleOutputCPCreateFileWMHeapSizeKHeapReAllocSetEndOfFileWriteConsoleW2-+] f     @@D@D@D@D@D@PI@p@@@B@D@C abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`y!@~ڣ @ڣ AϢ[@~QQ^ _j21~I@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@ Z@I@Z@Z@Z@Z@Z@Z@Z@..uKDPH,d8p@`  #|#`#$#''0'P'' ']x]P  !`!f!Qe8$ eH%]%&]a&UbP'fH)0*,-e /,2<23 383X34(4h55P6]6P7 89aX8Ea8Ia89b8:5:Y`;};0<e<e?iA=A%BBB C@CXDyaDEaEUpEmeE`FebGIKfLeLPMfN@Pe0QQ!RuS`TaaTbXUUyXVXWW bX- ZH[A[]4^H_pcmecmePdafdfdhg5bi)bla@mopectdPwwxz|a}c~5f=bxP@deeEЊE|P@Eh5UbxMȓAe( ȗ x e]bQ؝qaH}b@yb< L (UbUbbxbqex]ئ x @h \ AQ 1`ЬapMЭ !`f Iix=A`H-xMa]b`]a%E0$!hH!Hȸaax))P!cix!gIi!Eb`aapyme%ieb@Yaimbqbpqbhiue!!"a`bea(ia," P"h(-`X|""0""-a`mbH`"8p"M(9a`-`0-``u"MaMaPqi8#fg,#pL#h1dYf`@X#hd#p# #X ###8$aHb$$$P#qb!#8(%eP \$P"p$@#E`#-b$bh%Q%a&$)Qe+Ia,$-yb-(.1h.e(/a/Qb/$00 %01`01$3}4f4@%5(6%:%0<%`=%>`%?%(C&DL&F<&`I8JNaa@OIO`&0QRRQ0T& X&it&hjjfHkak&p&p&qbHr'Puu!vMhv0w=`pwf y$'zyah{1a{e|]eae4'=0T'،9Px  ̒  D dГ  4X x  0&@t'0x 8Pehf 0 @P8(`hp%h(h}( @...GGGWWWiiiuuu ̀ ww ww||wwwwwwwwfwwwww|fwwwwwwffwwwwwwffwwwwwfflwwffffffwfffffflwffffffwffffff|ffffffffR\Ilffl)ffح2L18Ϥ"A< ΣTπU  ؀ ???????( 444MMMSSSzzzp p{p{ffkof_fffk_fff[f}UUUfL4UUU_kJqO_~'[U_Uwwwww{~( @%%%+++000===AAAIIIMMMQQQVVVYYY]]]~dFgggjjjmmmrrruuu}}}u?z=~;gEkCoAr@:IbpƏKУk(,1?5<\CKQsU[cbð/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq_______CCBABADL*(%$""&GABJIIDDJC??AD_-(''%$GG#_DIJIIJIIIDIJDD_+)(''%GG _JMCEJ?ABAECA?BA_,+)('%%"!_IM@AJACDCIDI____.,++>________JMJJJJJJJJJF_..,+)('%$"! #GIMCEJJJI?J__...,+(('%$"! &_JM?AJJJJCJ__...,+)(''%$" _IMJJJJJJJJ_K=...,++(''%$! _JMCDJJJJAJ_K_______L*%$"!_I_?AMNJJEJ_ L'%$"_I_MMMMMMJJ_ _('%%_I_CEMIJJMEM _(''*_I_?BMDJEMDMF _)(-LI_MMMCMMMMM_________< ____I_CEM1;MACDMEJM__I_?A_D1@IJJMJMM_FF_I__6_@/EMMMNMM_FF_I_C80EJDMJCJFF?:AA20?_M_MIEM______MIC4BC/ N______MMMMJIDAI_9/ HJJMMJMMMJ??BAI_A7503 IJMMCBCBA44CCI___BAO;6___C_MJIDIDMI_CI___O; @__C_C?J?AJI_?A_DJJI@ O_CM?;I?JI_________H9MAIJJIJI_CD_____JJI73C;IJIJI_?AMDJJDIMJIE5:JIJI__________MMIA:IJJJJJJJJJJJJJJJJMJ???( 444MMMRRRYYY~eGuuu}}}x>iErCE~7?HVbx/!P7pLcyϏ1Qq/Pp",6@J[1qQq/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq!%///* !*/"(%%'%/) /!#''////+/+"*(/ / !%(/ ( (*/ (///) */   )*  /"///// /+/// # + !%//  +"*+'#+//+'!%*++$++!+! !!!<(0`  !!$& &"   WܱNj+<<:5pi$!!!4888&SNJFB=950,(%%%5ǎVRNIEѹ|Jq?o@ZUQMID@<73/+&"-Ɍ444"ք̴wq?]YUPLHC?;72.*%!"""4888&dya\XTPKGC>:61-)% OÑ%%%5ʎA{;ys`\WSOJFB>951,($(9|:z;xq?o@mAkBiCgCdDuZ;73.*Ǒ%%%5̎È>89}:{;yq?o@mAjBhCfD~dEuZ?:625Оa789}:{;yr>p?n@lAjBhCfD}dEB>:5^ό555"܄ѳ„7789}:{;xr?p@n@lAjBgCeDFA=9"""4;;;&ŌC89~9|:z;xr?p@mAkAiBgCIELɑQQQJnnn~~~Įq?o@mAkBiCHHH"""vvv9~:{;yq?o@mAkB:::'''___sssttt8Ϧuǣvyp?n@lA888T---6fffnddd%%%"""OOOSSSċDҧuʤv{;yr?p?xM<<r?̷999VVV###)))444ѳ͝b@~9|:z;}Cg˶Ӎ󑑑ZZZlll;;;!!!""")))___&&&2:::ppp{{{___WWWWWW:::!!!"""***www"""4888&,̑999ԖJJJ|||lll:::"""BBBXXX|||$$$6,uuuKKKCCC@@@...www* Ҍ666"KKKaaaLLLWWW@$"""4;;;&nnnfff!!!$$$999444]ttt|ȇɑ&&&5ЎvvvmmmVVV{{{OOOڥaaaCCCpppό555"ބ|||MMMfff"""4;;;&\\\Ǒ%%%5Ύݧܦ͌555"ۄۥ"""4:::&ڤÑ%%%5ˎܤׇ ww?ww??ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwwwwwwwwwwwwwww?ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwww?wwwwwwww( @ !!!0\\\JeeeQ666D555A0$ vH<602\7qڴvvvj&&&D1"gLF@;5?кVQKE?9(aV[UPJD>82-uuun{{{j`ZTOVo@lAb_YSMGB<60+%<aVmt>q?n@bb^XRLFA;5/)$Ywwwn}}}j~Cv=s>p?bba]WQKE@:4.(+{;xbba[VPJD?93-'aV~:{;xr?o@lAiBfD}dE|cE|cEiB<61?9}:z;w=t>q?n@kAiCfD}cE|cE}dFGA;=aVңi89|:yq?n@kBhCeD|cE|cELF@mzzznjʓP8~9{;yp?mAjBgCeD|cEPJ\¯mAjBgC~dEaV}:z;xq?n@lAiCJJJőPyq?n@~YVVV???wwwiiiΡkA|;y>>3@@@y~~~obbb000kkk@@@---U<<<&&&[[[6uuusssWWWIII$$$&&&qqqlllg|||s4bbbhhhƑUUU000QQQ}}}---{bbb(iiiLLLBBBaVggg+++NNN|||nj]]]tttkkkrrrwwwӦaVӦzzznjӦˉ ?????(  C﫫oIਨS=?_QF4aZмoEcaXMB70~Iq?c`VK@58z;u=qv>3Eyn@iB~dE}dFGHYYYuuuġ=xmAhC}dE}eGS444|||gC}cEMMM~>q?kAiGRRR¢Gu=xKʺ~AAAAAAAAAAAAAAAA ( h00 %   h4VS_VERSION_INFO?fStringFileInfoB080904b0JCompanyNameSimple Launcher User^FileDescriptionSimple Launcher Executable2 FileVersion1.1.0.140InternalNamew32.exej#LegalCopyrightCopyright (C) Simple Launcher User8OriginalFilenamew32.exe@ProductNameSimple Launcher6 ProductVersion1.1.0.14DVarFileInfo$Translation   (08@X`hУ 0@P`pФ 0@P`pХ 0@P`pЦ 0@P`pЧ 0@P`pШ 0@P`pЩ 0@P`pdȦЦئ (0HXhpx (08@HPX`hpx (08@HPX`hpx (08@HPX`hpxȩЩة (0@HPX`hpxȪЪت (08@HPX`hpxȯد(8HXhxȠؠ(8HXhxȡء(8HXhxȢآ(8HXhxȣأ(8HXhxȤؤ(8HXhxȥإ(8HXhxȦئ(8HXhxȧا(8HXhxȨب(8HXhxȩة(8HXhxȪت(8HXhxȫث(8HXhxȬج(8HXhxȭح 0@P`pЪ 0@P`pЫ 0@P`pЬ 0@P`pЭ 0@P`pЮ 0@P`pЯ 0@P`pР 0@P`pС 0@P`pТ 0@P`pУ 0@P`pФ 0@P`pХ 0@P`pЦ 0@P`pЧ 0h@@H(HhPX`hpxȩЩةPK7QY.=__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/w64.exeMZ@ !L!This program cannot be run in DOS mode. $ܭg*ddd,!dd(d/RichPEd b"  F@@8PS d.text `.rdata9:@@.data0A0@.pdata  *@@.rsrcST6@@.relocJ@BLISMCMK SWHHH#H3H$0LʺICHL$0DB3HD$ =.H 6HHHNNHu,HtJH=HH-NHu H#L.HT$0A3D$( f|$ й7̅LISMCMK SWHHH"H3H$0LʺICHL$0DB3HD$ )cH j|HHzMHu,HtJHYHHHYMHu H#LHT$0A3D$( f|$ йkH\$Ht$WH  2HH3LLBILHt1HA;IDII+LD9Ht$8HH\$0H _H\$Ht$H|$ UATAUAVAWHH@LLHpBHM8E3Le80A̅HxHM8ED$3-HM8$HM8LcAAHE3,LM8E|$AIDIHHHtHMED$HœHcI+HHM8AHAHE3a,LM8DIHHHxAHHHHMHAFHcHH+HIEHM8E3EH++LM8LIIAHH.AEf;uMfHM8AHE3+LM8LIIAHHHN\+M;rfA9t M+M;sMHM8h.L\$@II[0Is@I{HIA_A^A]A\]H\$UVWH03HW.H|$`bH-GBHt-AE3H3H|$(Hl$ }LHT$hHL$X+HT$hHL$XuRHL$X$ALH3H|$(Hl$ %u3LD$`HHuHL$XH\$PHH#H0_^]H(t v1w,H >Ht 5> L>A H(@SHE3E333;HL$`E3E33HH I> Hd$XHd$PHd$HHD$@d$8d$0d$(d$ LHE33d$ HL$`HE3E3HHHĐ[@SH Hqt#uuHDH [H%H [H\$WH HH HHx 1"HHHHH\$0H _HHXHhHpHx ATAUAVH JHH:HH0uH)HH`dHHtH;GH;>HtH;/H;&HtH;H;LLHH*HH0*E3I;tI;u3ҹMI;tI;u3ҹMH;tH;u3ҹII;MDI;MDH;IDMtItI3ҹuMtItI3ҹTHtHtHh3ҹ3H\$@Hl$HHt$PH|$XH A^A]A\HHXHpHx UATAUHH HH3H L333HHH;H ;L\$P L ;DˋL\$ Lt 9\$PuO3HH : :0L:DˋHj3HL$`DBh]HL$`Eu}HHHHxHaHbHkHLH}mHuH}H]HD$`H9E3H\$HHD$@Hd$8Hd$0d$(E3I3D$ uKCHd$0HAD3DL$(HL$ LHM3nH_9H P9f}r{HUHtrHc:EHLH;raH HtH^L$LI;s1HH+H;tH;tH;t HH(HHI;rIH8HUй<=w HMqH WH]HH 8DH m8E3H Z8HT$PHXL$P?H\$Hl$Ht$WATAVH HHJHE3AHHtDKft+f"t%AuHHKHHuHt IHHA H AHL\HwftADuAHL-Hft AuHfD9&t Au HfD9#u AtfD#HHLAHHLHf?"u)f;"AHLfD#HHHHAH t f"tf;"AHLQ ft%A=tfD#A(t HfuH]H\$@Hl$HHHt$PH A^A\_HHXHpHxUATAUAVAWH8HHH3H"f98tOHH3DfHu L-\#LhAutIAEfuH46A3f9=6t L56 L5 6HHpfA4V %POHHHHHHH;s9 t9 t HH;rHHH@7HD$P+LAԹDD$(HD$ 8΅HHcft|PH|$Pf9t$PtAft Hf97uf?#HHA7t Hfuf?!HAt HfuHT$@HHt$@HHLL|$@MHH 7DIu|Li4H`X!H`kSfA9T$u*IL$ ZWHHMHEf7HcH`HMD L3IIIɍPfIHLAIfIHHLIfIHHLIfHI\HHHH@ƋLl$8Lt$0L -LHHL|$(Ld$ a HAH({ffH; QuHfuH$H\$Ht$WATAUH0Hd$ EHHE3AHu&,3AHtAfD9*tT*HHD$PHu +fD9.u"+H HL$ \,3LEHH!'HH HH\$XHt$`H0A]A\_@SH ILHHuc+$AHIHHt31+H [ f;tHfuf;uH3@SH H HtHHHtH [@SH ̹-̹,@SH 0HH0HH~0Hn0H.HH [-H;s-H\$WH HHHHtHH;rH\$0H _H\$WH 3HHH;suH HtHH;rH\$0H _H\$WH H= MtH L5tL%5HH ~uZH 4z4HH=HHtHH;rH=LtH L5tE33APL3H\$0H _H\$Ht$DD$WATAUAVAWH@ED,=&D%H LHHD$0HH KHHD$ LHt$(LHD$8HH|$ H;rp.H9uH;r_HH.HH KHH pKzL;uL;tLH\$(HH\$0LHD$8HHD$ HH pHH }Et*Eu&)AAH\$pHt$xH@A_A^A]A\_E33fE3APX33DBK̺3D9@SH g64E3APHt7SH LH +3`u#'H&H [@SH d$@LD$@6HHu9D$@t&Ht &L$@HH [@SH HAHui.HCHHHHKH;tuBHHH9CtHC u 9HCHCuCHH [HHXHhHpHx ATH@E3IHHAMHu%z HtHL$ IL\$ E9cu?H+>fAr fZwf fAr fZwf HHt@ft;f;t4HT$ gAHT$ WAHHHt ftf;t+D8d$8t HL$0H\$PHl$XHt$`H|$hH@A\H(3LL9)uwMtzHu$z H(HtL+C fAr fZwf AfAr fZwf IIt ftf;t+ȋH(E3UH(H\$Ht$WH HHw|HHEH (Hu ?30[H (L3QHHu,9(tH*t # # H)# 3H\$0Ht$8H _H@SH Fu;LHcȺFCHy6Hu$PHˉxFCH\6Huv3HWHH0HHt H/6E3HOEHIL4IHIHkXLIt ItMuIH0Iu3H [H(F=tyDH 5H(a@SH HH H;r>H0H;w2HH*H+HHHH?Lt%kH [HK0H [H%@SH Hڃ}B%kH [HJ0H [H%WHH;r5HH;w)qH+H*HHHH?L#H0H%} r#HJ0H%Mt 8tHIuIHH#@UAUAVH@Hl$0H]0Hu8H}@LeHH>H3HEE3MHHHuE!oHH;rfD3IEHtTALúDt$(Lt$ GLcu? * fAr fZwf fHfD93u3II;sfD3 "]~g3HBHHrXKL$Hw1HAH;w HHGH+H|$0Ht)HHtHIHu% /IEALËHDd$(H|$ FtLHH *HO9u}HMH3;H]0Hu8H}@LeHHeA^A]]H\$WH@HHHL$ ILD$ HH|$8t HL$0H\$PH@_E3LMK H8IC(ICIcH8H\$ UVWATAUAVAWH LLHL$hHMMHHT$pMtMtMu'u3H\$xH A_A^A]A\_^]H$Ht3HIL;v)HtL3IHHHt3HIL;wIIG HtDO$ADL$`HXG At^LcwEtP I;DBEL;LHHL$hRD)wALt$hH+HHL$pDL$`LH+Lt$hEI;rhEt 3I;v AEA HDID+ DI;EGAH;woHELt$hI֋oPtkH+vHGtXHL$pHt'ADO$HIHDL$`Lt$hHL$pHHt L3IF"5O H+3HI(OIHHXHpHxL` AUH0IMHLMt`Mt[H\$`Hu"Ht L3'F3/HH\$ LMHINHHWH3H\$@Ht$HH|$PLd$XH0A]H8LL$ MLH@H8fL$SH f;u3Ef;sHH&LL$@HT$0D+3ɅtL$@#H [H(HuCAH(H H\$Ht$UWATH$HHDH3HAكtOd$pHL$t3ADL\$pHEHML\$HHD$PLHT$@IE3Ht7Hd$8HT$@HL$`HL$0HL$XLHL$(HMMHL$ 3躱HHHHHt$p|$tHE3ɋHL$Hؽuu tNHH3L$I[(Is0IA\_]H\$WH HH XRHHH?HH\$0H _H(AAH`HH(H%gH\$Hl$Ht$WH0HH AIHϼDLHHHt!LT$`LT$ H\$@Hl$HHt$PH0_HD$`HD$ ^H8Hd$ E3E333wH8H(E3MLMu)3HtHu5IHu-IfE9tEfD;tHDfEufD9t HfuH+IfE9tEfD;tHDfEufD9u HfD9ufDHH;I IDH(HHXHhHpHx ATAUAVH HHuVZ{Lc}c3ADBOMxҋSu +s;L(+kt=Gu'tt u 3HDH 37 L H\$0Hl$8H _H(u&  Mx1; %s)HcH %HƒHHkXHDtH  IHH(HHXHpHxL` AVH HcLIL5j%HkXK4|3 u4O k|3 uHL3#D3 ?tK HL\H\$0Ht$8H|$@Ld$HH A^HcH $HƒHHkXHHLH%H\$Ht$H|$ATAUAVH@HDE3^ u3H{$|$$@LcJHH\$0JH H;C{ u< L{ u!HKƶu DhDl$(C EudHK;Ct HK3HHEu?CH3L#K+H.袋.HLIIH?LDDd$ HXHH#D;XJ2HD$0HtsHcLL#IЃ%# I H H;s@H0@ ` HXHD$0|$ HcHHHkXID[DD|$ AH\$`Ht$hH|$pH@A^A]A\H\$Ht$H|$UATAUHHP3MLHHMDC(3IH];HuMtHtEBHuHuI?v EC$ELMHLE@HMHAՋHt\xIMxHEЈHEHHEHU38t!HEMxHU38t9]fB\fÍCL\$PI[ Is(I{0IA]A\]H\$Hl$Ht$WATAUH0E3IIHHMMuHuH3HHI;vPFLFH oGHD$xLHD$(HD$pHHD$ Rup8"H #GLD HD$xLHD$(HD$pHHD$ fDl_uHu8"u4D *y)fD/u" H\$PHl$XHt$`H0A]A\_H8HD$`HD$(Hd$ H8H\$Hl$Ht$WH AAH٨uj3AAu vHV1D[Ey AD[AtAtA rC$HDNj֋C@ōEH\$0Hl$8Ht$@H _H\$Ht$HL$WH A؋H3Hu[-t tuDËHHH\$8Ht$@H _H\$Ht$WH =1HHHu3H9tu;THRy &RuWHHtKHtFHQHH Ht3QH;vH f &A@tavH5HH\$8H _H\$WH HcHtYHu @u ;u@`tHH;tHsu 13ۋLHHAH_H MkXBDt 3H\$0H _H\$L$VWATH HcكuB  xe;s]HHHL%HkXIL8t76ID8t   .H\$PH A\_^H\$WHHL$0AMZH=kfD9ct31HcHǁ8PEu f9Hu3ۃv 9É$Tu"=Euu"=ui%y 2HHXVHTUy ARy qtQD$lT$pA DEL3HD$ uo$uawH$HĠ_H(VH(RHL$HH 7HHD$XE3HT$`HL$X荞HD$PH|$PtAHD$8HD$HHD$0HD$@HD$(HXHD$ LL$PLD$XHT$`3;"H$H$H$HHH H{H$H|R LHHD$hHHD$pBR;3"H  =u *;4 HHĈLI[IkIs ISWATAUAVAWH@MyM1AIy8M+MLHfIcqHIKMCH;7HH\ CL;CL;{;tHL$0IIЅ~t}csmu(H=tH tHKAIInID$@SLcMHD$(ID$(ILIHD$ $oH;793MA 3E3M+Ǩ t;39v5HOAL;rL;v H;sHLul DIcqHH;7sUHHHߋCL;r9CL;s1EtD;+t1t;kt(;uHT$xFAD$HDCMAH;7rL\$@I[0Ik@IsHIA_A^A]A\_H\$Hl$Ht$ WATAUAVAWH05 E3IE~ EHLEEEfD9:u HfD9;tAat0rt#wt3C AA  HAfȃSytjA+ tGt>t' tuEEЃ@@@E|@uvpEubEA cTtOtHfDHL$HT$DD$I ffH\$Ht$H|$ATH L%@33Iu&HcƺH H~H HQt&H$|ɸH\$0Ht$8H|$@H A\HcHI$3H\$Hl$Ht$WH $HH+Ht{tHHH#HHuHHKHt ;uǡHHuH\$0Hl$8Ht$@H _HcHFHH H% H\$Ht$H|$AUH HcپH=u ND HHL-I|ty(HHuf 3X fHI|u-ߠuH* 3 I\H RH\$0Ht$8H|$@H A]H\$WH HcH=<HH<uuHMH H\$0H _H%H([HHtTH(H(H H`H(H YH ZH [H \H IH%bH\$Ht$WATAUAVAWH03|$`3уtbtMtXtSt.tt5v@L%H L%H |L%H lHHurHHLc9YtHIHHH;rIHHH;s9Yt3LaM,$ L%8H 1|$`RLIu3Mu AMl̅t3t t tL|$(,LL|$(HuDdžDt$`u9 ͸щL$ Ÿ;}*HcHHHd‰T$ I$t3v;u AA;t t L; DH\$hHt$pH0A_A^A]A\_H H H @SH HH HtHЅt3H [3H%7H( Bt o 0H(H\$WH HHHͶHaAǁƁtCƁCH<H ;H & HHuHXHHe H\$0H _H\$WH \ VvHHuHHHHt3 +HRH˅t3VHK3ۋ6HH\$0H _@SH qHHuHHH [H)H\$WH HHI8HtHKHHtHKXHtHKhHtHKpHt|HKxHtnHHt]HHH;tE HHL$0Ht uHgHL$0H;t ` VHHt+H=H;=tH!H;t?u H HH\$8H _@SH Et`H itHHHt1 GHnt3H rHK3H [@SH JHHՙHfHWHuCH#3H [H\$Ht$H|$ATAUAVH LOH !LH HI;HI+LoIIQHI;sUH;HBHH;rII3Hu3HV H;rII-HtKHcu K 4@t "3t{HCHKC{C u/ӳH0H;tųH`H;u ]uHQ]C+HS+kHBHC$ȉC~DŋMW K?t#tHHHHHkXH H dA t3ҋDB[HHKD$0HT$0DkM;D$0H\$8Hl$@Ht$HH _ffHIrSIII@rHكtL+HHMI?Iu9MIItfffHHIuMt HIu@fffffIs0HHQHQH@HQHQIHQHQHQufDHHQHQH@HQHQIHQHQHQu $TH\$Ht$WH HHut A@t AA u [HAHHcDG$HWGGu_H2t6HtDl18AEAADm`tu ШtL`ШtA;AB؋LHu# 8MH3DBsWL LK^L\0@K^IA D0HL0 A:AK^AAIVE`DD0 EtbK^L09A:tQtM K^AHE`DD09Au.K^L0:A:tt K^HE`ADD0:K^LMDH 1H|$ gvHcU܅|H;qLDK^D05At A> uL0d0IcIMIHEL;A AE<A:t HIHEHL;sIE8 uI~LK^LMHUXH 1AIH|$ uu suf9}taL)K^D0Ht}X tD#K^EXD1 ;I;u }X u +MHAH>U}X LӂtLȂD#HL;m K^D0@uL0 AEHDE+}`EHuHI;rHB8At BAu"*u;uHcH]K^D0Ht;HÈL0 |K^HÈD19uK^HÈD1:HcH+MHAHcTELmPA+DMƉD$(3ҹLl$ qDur;Ë]HmJ^@E|0HҺ t fA9uL0d0IcIMIHE`L;eA AEf.fA;tfHI HE`HL;sIEf9u ILK^LMHUH 1AIH|$ ru,q9}LK^D0Ht; f9Ut@fD#EK^D1 EK^D19K^T0:LI;u f9Uuf7MHHDBrR Lf9Ut LfD#HL;m`"K^D0@uL0 AEfHDE+]LmPM;tIFAD܋Y!pus Amu뵋,3_88 ͳHXA_A^A]A\_^[]H\$Ht$L$WATAUAVAWH ALHcu 3ۉ 3ۅ;=LLIL=AMkXKBL tiAu|WͷKBD tDIՋJ _;J# 踲H\$XHt$`H A_A^A]A\_H\$Ht$WH IIHMu3VHue S .=  誰H\$XH A^A]A\_^@SH B@It HzuAxPf;u H [̅~LH\$Hl$Ht$WH IILH?tH\$0Hl$8Ht$@H _H\$Hl$Ht$WATAUH A@@H\$`ID#ILt IxuAC#~9AMLHI?u;*u?LH̃;uD#H\$@Hl$HHt$PH A]A\_H\$UVWATAUAVAWH$ HHH3H3HHL$xHUHMIMLL$PD$pDD$XD$HD$LD$lD$D虡XE3HEHu,GܮE3D8]t HE\ LEMtE(AEELUT$@fE! H]NYD^!ILE AfA+f;wH ALAHcH IcHHՆD ADL$hA AEJM E'P AŹd;5ACQEGSX{ZtOac"Dl$D-D9T$l]A@/Af|$\|$LIILt$PHt9HXHt0-A sDoԙDl$D+DD8EDT$DHH"E3L_A0uE 9t$HIDILt$PESHEHDHD8HU!PE3҅tHAHD;|A0uE AIAfD$`Dl$DLt$PEt4D$dHEDT$eLc LMHT$dHM3NE3҅y Dl$lfEH]E}EfEgA@H]Ћ\AD|$He8g;~ǹi; no;ptasu;x;AHHAHDkDl$DH fD9tHuH+HDAAD$pEi Ey|fQfDl$\AQfD$^kAEyQD LI>ILt$PLE3҅D$@EZ EtfD$lA@A A0T$LDt MI9A rIEtLt$PA@tMFEFA@tMcFEFLt$PA@t MyIADu A rEy A;ODt$pIHH#ʉL$LυMt 3IIcHLB09~AƈHLt$PH|$H+HDDt D8+HAD+ufD;u?A;AO|$HA;~']HcMHEHhH؋D|$HDIH _ILt$PAHcHEeHMHL$0MDωL$(HMLHD|$ AtEuH "LeHUHйgfD;uuH 'eHUHп-@8;uAHH E3D-Dl$DAt+fD$\At fD$\x|$L |$L Dt$XHt$xE+D+A uLL$@LAHELL$@HL$\LƋHD$ AtAuLL$@0LAhEufE~aHAHELMHL$`Lc HIE3Lc~%HT$xL$`LD$@IE3҅Ht$x-Ht$xT$@#HELL$@LAHHD$ 5E3ҋT$@x_AtYLL$@ LALt$PE3A T$@HEHSH|$HE3LUT$@A 5Lt$PA AŃItPhtCl;tXwA fA9XuIA AE AfA86ufAx4uIAfA83ufAx2uIAdfA9ifA9{ofA9luHfA9_A fA9RfA9HDT$hHT$xLD$@AD$D$E3fA*u(A>IXLt$P|$Ht$H Aō|HЉ|$HADT$HfA*u,AIXLt$PD$XA؉D$XD$X AōDHЉD$XAA;t>#t2+;t#-;t0;XuWAQAFA@A9A3DUDT$lDT$XDT$LEt$HDT$D|$HDL$hLEXE(fEEtAu=D8Ut HMHH39H$0HA_A^A]A\_^]蕽*E3D8]t HEH\$Hl$Ht$WHP3IHHMu3Hu;УHtIwHL$0IGL\$0AKuGH+fAr fZwf  fAr fZwf HHt ftf;t+GDLǺt$(H\$ jGu'蕼@8l$HTHD$@C@8l$Ht HL$@H\$`Hl$hHt$pHP_H(E3LD9 uxHu+H(HtIwL+AfAr fZwf  fAr fZwf HIt ftf;t+H(H(DHHfuH+HHH\$Hl$WH0Hd$@HhHHtud$(Hd$ DL33]HctxHϺnHD$@HtaLD33ɉ|$(HD$ ]t:HL$@3FxHHHu3H\$HHl$PH0_HL$@Ht HL$@菓HHXHhHpHx ATH0HE3AHuf=tHH\CfuGHcHHbHtHfD9#tSHf;=pt.HcH_HHtxLHHѭuQHHcHCfD9#uH=H豒L%.L'3H\$@Hl$HHt$PH|$XH0A\E3E333Ld$ 谟H _L%H\$Hl$Ht$WH ]3HHtLf9tHf9uHf9u+ǃHcHHHtLHHHH]HH\$0Hl$8Ht$@H _@SH AHt"AtHI誑c3HHCCH [H(H8csmu+xu%@ = t=!t="t=@u3H(H(H [3H(H\$Hl$Ht$WH H薿E3HHHH99tHHH;rHH;s99tIHRLAMEIu LIA@4Iu&HHy0HHLLH|9uǃ9uǃ9u ǃz9u ǃf9u ǃR9u ǃ>9u ǃ*9u ǃ9ǺD‰AЉ LIIAH3H\$0Hl$8Ht$@H _H\$WH 39=uHHkHHD؀; w ;t3t);"u 3 FtHH< w HÊuHH\$0H _H\$Hl$Ht$WH0=AujH;3Hu<=tHH\uGHcHHHtH;tPH;=pt.HcHHHtsLHH uKHHcH؀;uHHH%H'^3H\$@Hl$HHt$PH0_Hd$ E3E333H ōH%HHXHhHpHx ATAUAVH Ll$`MIAeLHAHtLI3;"u3@"HË9AEHtH3HË1DtAEHtHH@tu@ t@ uHt GH3;; t; uH;MtI<$IA3H;\t;"u6utHC8"uH 33҅Ht\HAEutOu< tG< tCt7TCHttHÈHAEH tHAEAEHYHtHAEMtI$$AH\$@Hl$HHt$PH|$XH A^A]A\H\$Ht$ WH0=FuoH=A3HhWHH=Ht;uHHD$HLL$@E33HHD$ Hct$@HH;s\HcL$HHsQHH;rHH9HHt8LHD$HLL$@HHHD$ gD\$@H=7A3D'H\$PHt$XH0_HHXHhHpHx ATH@VE3HHHfD9 tHfD9#uHfD9#uLd$8H+Ld$0HL3DK3Dd$(Ld$ >VHctQH_HHtALd$8Ld$0DKL33ɉl$(HD$ Vu H3IHUH HU3H\$PHl$XHt$`H|$hH@A\H\$WH HHd$0H2-+H;t HHvHL$0UH\$0UDI3TDI3pUHL$8DI3WUL\$8L3HL#H3-+L;LDLILH\$@H _H\$LD$HL$UVWATAUAVAWHH3AAHEDg}@}XH}Et}ADeDHMVB)u@u9EtE AA#At[tAt88 ޯrH$HĀA_A^A]A\_^]D@tuA@EM`DuAt-t#tt@uE;A AA׋ƹU#AtFA;t9=t*=t=t,=t(=t;t$EA AEṀMAt"EhADȉM@@tAUĉMDu sA ȉM@ t @tMu!褮8 zoHE@DEHMPEH|$0D$(LMADd$ RHEHA#;uC@t9EDEHMPAH|$0D$(LMADd$ DuRHEHu:Hc L5þHHHkXIƀdVP覭8HZPuKHc L5|HHHkXIƀdPȋ袭HM4PuO A;uA@ uAHU 踖Hc L5HAHE IHkXD|Hc HHHkXIƀd8A$HEEAtu EŃOEȃuά8tM 裡 HUAf}Iuf}uHcUȋ /<tċ E33tAE"@@u E#u  #;tC=t)=@t"=t(=@t!=t=@uDEX#;u DmX@}XA@D}}Aǹ#=@ =tp;{ErE;vAv-A]MXDFE E3/Ht̋ E33/H HUAwA;tua}u D@DEXE=u =u E3AXDmX E33:=EtxE;A E3.H E33.Hu>EA IcEHTE+ DE;D}AHc DeXHAHHkXIƀd8Dd8HcHƒHHkXI Ƌƀd8D8@8}u @tHc HHHkXIƀL A#;AHMbLEDEHMPH|$0D$(ALMD$ AMHu5K腩LcIAHMkXIBd brHcHʃHHkXI H -E3E333H|$ H\$WH@d$03H|$pHuèW3Htك|$xtAtDL$(DD$ DLHHL$0؉D$4|$0t,t!HcHHH<HkXH€d9rjH\$PH@_H8ADL$`ELD$(HL$ DAIH8Mu3ftf;u HHIu +H(gHt hytA@AHffLH+Irat6t  IȈHtf IfHt  IHMIuQMItH HHIuIMuI@ HIuIffffffffffffI sBH LT H HALQHD LT IHALQuIqffffHr  D @HuH@L LT L LQLL LT LILQLL LT (H@LILQLL LT LILQuIIq $fffffffffffIIrat6t HɊ IȈtHf Ift H IMIuPMItHH IHuIMuIHɊ IȈuIffffffffffffI sBHD LT H HALQHD L IHALuIsfffffHw H D @uH@LL LT LILQLL LT LILQLL LT H@LILQLL L LILuIIq $H(Hu诊HH(LH h3H(H%H̹r|ffHHHtfHt_uI~IHMHLHI3I#tHPtQtGHt9t/Ht!tt uHDHDHDHDHDHDHDHD@SUVWATAUAVHPHH3HD$HALLD3H9HH aFHHHZaHiEHzH7FH(aHHN@EHFH`HH6 EHEH`HHEHELHHt"Hi`HDHEHHߧH֧LקH;tbL;t]HEH H ELHtLcu3~gHL;wXKL$Hw1HAH;w HH H+H\$0HtvHHtHHHtM3HMEMƺDd$(H\$ =tLM`DHAQ>HK9usHMH3`nH]@HuHH}PHeA_A^A]A\]H\$Ht$WH`HHL$@AIsD$$HL$@D\$0D$(H$DLNjHD$ E|$Xt HL$PH\$pHt$xH`_HSH HHIrHKrHKrHK rHK(rHK0rH rHK@rHKHrHKPrHKXrHK`|rHKhsrHK8jrHKparHKxXrHLrH@rH4rH(rHrHrHrHqHqHqHqHqHqHqHqHqHqHqHtqHhqH \qH(PqH0DqH88qH@,qHH qHPqHpqHxpHpHpHpHpHhpHpHpHpHpHpHxpHlpH`pHTpHHpH#~4AMLHIŃ?u;*uLHձ?у;uD#H\$@Hl$HHt$PH A]A\_H\$UVWATAUAVAWH$0HHlH3H3HHL$pHT$hHMIMD$dDD$XD$DD$LD$\D$T-_E3HEHu,ۅplE3D8]t HEAC@L 7HiHyA;t(t#LcL 7IAHMkXM^ LL m7A@8u)A;ttHcHƒHHkXI^B8t,$kE3D8]t HEA$E3HT$hHtD"ADT$@DT$HELUEH]AHHT$hAD$Hl$$OxHEHHHMH踟ȃtH;\$ |@HcOHOx&Hf1HcGHGxHf0H H HL$0H3JH\$pHl$xH@A\_^H 1]3HH9 ,}HHXHpHxL` UHHPE3IHHHtMtD8"u%HtfD!3H\$`Ht$hH|$pLd$xHP]HMIPL]E9cu#HtfD8et HEHUHMD A~0A;|+IAHLǺ D$(H\$ HMuHc H;r&D8gt D8e6HM&$v*D8et HEAAHAQLljD$(HEH\$ HU E3@SH@HL$ NHD$ DH@BY%|$8t HL$0H@[@SH@HL$ 3NHD$ DH@BY%|$8t HL$0H@[HHXHhHpHx ATH0IcIDE~HI`HHcD$hH|$`~ HHDt tD$(DLƋAH|$ +ظHHDH\$@Hl$HHt$PH|$XH0A\H\$T$UVWATAUAVAWH03LHuatZL!M=IILHL;f9hH5jDAH;5juo3HHuZHH9uHc HHHuH ]LHEHtH+H HHH/Hu3H/|$xH5iHHuitIHtDHi蟸yyηtp]sH$H0A_A^A]A\_^]Et3Hu#HҒH iHtH(H5 iHu 譒HhHtH(H5hHHtHM+HILl$pMcHtE=MHIo3ɅuHfB94hfB9 hHHHuH5hH+HE3L9mHcHLKEtfL9ltHLHHHDHL9luHcHH;H hAAHt{rH5gH+HsLdM.\EyߍG;tLcHL;^HHHHcL$LlM.HgD9l$xtuIƵH 薑HHtUI覵MHHduQHD$pHHGfD*HEIEuq*HIEt IIM.E3E333Ll$ VIIM.H\$Ht$WH@HHL$ AAIHD$(DA|utHD$ H@BY#3t|$8t HL$0H\$PHt$XH@_̋AE33rHHXHhHpHx ATAUAWH H33DGLHtPDG3ҋoHt=HH+HAWHEHHu1o oH\$@Hl$HHt$PH|$XH A_A]A\úDDI;HEMNjt HH+H~yo8u Oo HAԋLH3[Uy]E3HՋHTYHHHHHu%n nHvHE3IՋ-H3H\$LcHMAIMkXJ BD8F\ADA@tXtHt(t uHBLJBd8BL80BLJBd8BL8BdBLJ Bd8EuA%@H\$H(Hum_T s3H(fL$H8H \cHu !H JcHu%Hd$ LL$HHT$@AtD$@H8H\$fDL$ UVWHH`IHHHuMtHt!3Ht IvmSdHU@HMFL]A{E8f;vJHtHt L3H3l*l}t HMH$H`_^]Ht0Hu)ml_"S@8}eHMUHt}HEe(AKHE(HD$8Hd$0LE8A3҉|$(Ht$ lt}(3HtwzHtHt L3H7k"BR}HEH8Hd$ -H8H\$Hl$VWATH DHHOSHc‚uDk K 8@t &k"3t{HCHSC{C u/+GH0H;tGH`H;u uHC+HS+kHBHC$C~Dŋ=W S&R&b&v&&&&&&&'' '0'F'R'^'t''''''''''' (&(@(V(l((((((r)(%%%$$$$$$<*@W@Hf@X@@+@ bMCorExitProcessmscoree.dll@D@D@ccsUTF-8UTF-16LEUNICODEruntime error TLOSS error SING error DOMAIN error R6033 - Attempt to use MSIL code from this assembly during native code initialization This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain. R6032 - not enough space for locale information R6031 - Attempt to initialize the CRT more than once. This indicates a bug in your application. R6030 - CRT not initialized R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data R6010 - abort() has been called R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point support not loaded @ @ @ p@@@`@@@@@@`@@@@ @!@x@y`@z@@8@@Microsoft Visual C++ Runtime Library ...<program name unknown>Runtime Error! Program: HH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSun  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ((((( H h(((( H H  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~  GetProcessWindowStationGetUserObjectInformationWGetLastActivePopupGetActiveWindowMessageBoxWUSER32.DLL(null)(null)EEE50P( 8PX700WP `h````xpxxxxEEE00P('8PW700PP (`h`hhhxppwppCONOUT$user32.dllMessageBoxTimeoutAMessageBoxTimeoutWFatal Error in LauncherFatal Error in LauncherrbFailed to open executableUnable to find an appended archive.Unable to read from file#!PATHEXT;PyLauncherSTATICJob creation failedJob information querying failedJob information setting failedmaking stdin inheritable failedmaking stdout inheritable failedmaking stderr inheritable failedUnable to create process using '%ls': %lscontrol handler setting failedFailed to get exit code of process.exe/usr/bin/envExpected to find a command ending in '.exe' in shebang line: %lsExpected to find whitespace after '/usr/bin/env': %lsUnable to find executable in environment: %lsExpected terminating double-quote for executable in shebang line: %ls<launcher_dir>\Terminating quote without starting quote for executable in shebang line: %lsFailed to find shebangExpected to find terminator in shebang lineExpected to decode shebang line using UTF-8Expected to find '#' at start of shebang lineExpected to find '!' following '#' in shebang lineExpected to find executable in shebang lineExpected to find arguments (even if empty) in shebang lineExpected to be able to allocate command line memory"%ls" %ls "%ls" %lsRSDSŁU&{Aނ܉oC:\Users\Vinay\Projects\simple_launcher\dist\w64.pdbd 4 R plG"5":"N"42 p d4rplG$%  t d T 4 r- 5td 4 3 rPt0  4 rp  b 42 p`P  t d 4RlGd1}1.. d4 p Ptd T 4Rp42 plG]7g7T42 p  td42lG99H td 4 rlG::c\:; td4P d T 4 Rpd42plG??  t d 4RlG@`AnAA42 plGBB4 2 p `lGD;D  4 plG7EEE   d T 4 rp dT4 Rpd 4R plGfLMtd42dT42ptd42lGPP BlGYQ]Q]Q d4 R plGRS  4 2plGTT-T UM42plGlVV-VVM2P t d 42lGWXh  4 2p BlG'ZZZZZ- dQTP4OJpt@/ td4Ptp  4 2plG`9ar04r p`Pt8  t d 4RlGHee20lGii4  P tT4 t dT42d 4R plGo:p t d 4 RlGqqIqq#bd T42p  p ` 0 P d 4 2plG>d42 p4 2 p `lG>0 4 p`PtdT 4 pT 4 R p t d T 42d 4 R p  4 2p$ $4$p`PRP  4 rplGeW p`P0tH20- Etd4C PtHd4 p- 5td43r Pt0d4 p2 0  206 %4q%f p`Pt 4 2 p `lGK>4 2 p `lG/dT42p d T 42p0 4dZ p`Pt4 2 p `lGm>!T4r p `t0 td 4 P t d T 4R 4R p ` Pd 4 r p t d T 424  b4p ` PT 42 p `d 4R p  0  4 Rp`P2 p0t02  p0t0 d T 42p td4rP3 "te"dd"4c"^Pt 7 &t&d&4&PtB$X"$8"8%"""""""#(#D#V#l######## $$,$<$J$b$z$`)P)6)$))(((D%X%h%t%%%%%%%&$&>&R&b&v&&&&&&&'' '0'F'R'^'t''''''''''' (&(@(V(l((((((r)(%%%$$$$$$ExitProcessGetCommandLineW+SearchPathW~SetInformationJobObjecthFreeLibraryCreateProcessW}SetHandleInformation WaitForSingleObjectExAssignProcessToJobObjectdFormatMessageWGetExitCodeProcessGetModuleFileNameWQueryInformationJobObjectiMultiByteToWideCharjGetStartupInfoWGetTempPathWCreateJobObjectAkGetStdHandleGetLastErrorLGetProcAddressSetStdHandle>LoadLibraryAGetFileType;SetConsoleCtrlHandler[SetCurrentDirectoryWRCloseHandleKERNEL32.dllnCreateWindowExW7PeekMessageW.WaitForInputIdle:PostMessageW_GetMessageWDestroyWindowUSER32.dllPathRemoveFileSpecWEStrStrIW:PathCombineWSHLWAPI.dllGetModuleHandleWDecodePointerHeapFreeHeapAllocEnterCriticalSection;LeaveCriticalSectionpGetStringTypeWUnhandledExceptionFilterSetUnhandledExceptionFilterIsDebuggerPresent&RtlVirtualUnwindRtlLookupFunctionEntryRtlCaptureContextEncodePointerTerminateProcessGetCurrentProcessInitializeCriticalSectionAndSpinCountGetCommandLineA%RtlUnwindExDeleteCriticalSectionALoadLibraryWZFlsGetValue[FlsSetValueYFlsFreeSetLastErrorGetCurrentThreadIdXFlsAlloc4WriteFileHeapSetInformationGetVersionHeapCreatexGetCPInfonGetACP>GetOEMCP IsValidCodePage|SetHandleCountSleep/LCMapStringWReadFiletSetFilePointergFreeEnvironmentStringsWGetEnvironmentStringsWGetModuleFileNameA WideCharToMultiByteQueryPerformanceCounterGetTickCountGetCurrentProcessIdGetSystemTimeAsFileTimeCreateFileWHeapSizeHeapReAllocGetConsoleCPGetConsoleMode]FlushFileBuffersdCompareStringWeSetEnvironmentVariableWaSetEndOfFileQGetProcessHeap3WriteConsoleWa@a@2-+] f        ! 5A CPR S WY l m pr   )    @@@@@@@@@@ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ7@`y!@~ڣ @ڣ AϢ[@~QQ^ _j21~C@@@@@@@@@@p@`@T@H@D@@@<@8@4@0@,@(@$@ @@@@@@@4@@@@@@@@@@@p@`@ X@P@H@@@8@0@(@@@@@@@@@@@@x@p@h@`@X@P@H@@@0@@@@x@@@@@@@p@d@\@H@ @@$=@$=@$=@$=@$=@B@@@@P @0=@?@D@ @@B@..B@B@S@S@S@S@S@S@S@S@S@B@S@S@S@S@S@S@S@. @ @KAD-x0y0|.l0qxXL!L!V!0p!!!m"p"""# #6#P####0#$$$$C&<|&&&&&%'('''(l(|)0|)2*<*++C+0D++++d,O.P.....01111`1.202V20`233334044(44`4k50l5"7X$7|7<|7)8,88`8L90L99p:$<$<>=@=>>>`>b?d???@@A8A B BBBBxBCCoDpD F FF0 FjGlGiIlIILLLM,M N0 N,N0,NrNNNXNN`NNdNNhNxOlxOOPPQDQDQgQhQQ0QST7TDTiT0lT!U$UUUUUVDWWWWWXXX0X$Y$Y\Y\YY ZaZZ\\3]04]]0]&^(^^^``^a `aaDaedLhdFfhHfpf0giisitiiijjmmnnnn!o$oo(oVpXppp q q r rrsHtHtft`htttt0tIuTuuhu]wppwZx\xyyӀԀw/0( z|480THQTٔܔU0Xp0p@@(Xtl[\֥إ `8x0ĩĩ0 ȪȪЬЬUX'(h0h24ʱ0̱*@,hxxu@P0BD[\(_@`d/00(mDpD^`DD C0D(d0dx`x@}Td0 x .x.HHcxc~xxxxx-x-HxMhxh~xxxxxx#>x>WxWx0x 8Pehf 0 @P8(`hp%h(hZ( @...GGGWWWiiiuuu ̀ ww ww||wwwwwwwwfwwwww|fwwwwwwffwwwwwwffwwwwwfflwwffffffwfffffflwffffffwffffff|ffffffffR\Ilffl)ffح2L18Ϥ"A< ΣTπU  ؀ ???????( 444MMMSSSzzzp p{p{ffkof_fffk_fff[f}UUUfL4UUU_kJqO_~'[U_Uwwwww{~( @%%%+++000===AAAIIIMMMQQQVVVYYY]]]~dFgggjjjmmmrrruuu}}}u?z=~;gEkCoAr@:IbpƏKУk(,1?5<\CKQsU[cbð/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq_______CCBABADL*(%$""&GABJIIDDJC??AD_-(''%$GG#_DIJIIJIIIDIJDD_+)(''%GG _JMCEJ?ABAECA?BA_,+)('%%"!_IM@AJACDCIDI____.,++>________JMJJJJJJJJJF_..,+)('%$"! #GIMCEJJJI?J__...,+(('%$"! &_JM?AJJJJCJ__...,+)(''%$" _IMJJJJJJJJ_K=...,++(''%$! _JMCDJJJJAJ_K_______L*%$"!_I_?AMNJJEJ_ L'%$"_I_MMMMMMJJ_ _('%%_I_CEMIJJMEM _(''*_I_?BMDJEMDMF _)(-LI_MMMCMMMMM_________< ____I_CEM1;MACDMEJM__I_?A_D1@IJJMJMM_FF_I__6_@/EMMMNMM_FF_I_C80EJDMJCJFF?:AA20?_M_MIEM______MIC4BC/ N______MMMMJIDAI_9/ HJJMMJMMMJ??BAI_A7503 IJMMCBCBA44CCI___BAO;6___C_MJIDIDMI_CI___O; @__C_C?J?AJI_?A_DJJI@ O_CM?;I?JI_________H9MAIJJIJI_CD_____JJI73C;IJIJI_?AMDJJDIMJIE5:JIJI__________MMIA:IJJJJJJJJJJJJJJJJMJ???( 444MMMRRRYYY~eGuuu}}}x>iErCE~7?HVbx/!P7pLcyϏ1Qq/Pp",6@J[1qQq/Pp  =1[Qyq/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq!%///* !*/"(%%'%/) /!#''////+/+"*(/ / !%(/ ( (*/ (///) */   )*  /"///// /+/// # + !%//  +"*+'#+//+'!%*++$++!+! !!!<(0`  !!$& &"   WܱNj+<<:5pi$!!!4888&SNJFB=950,(%%%5ǎVRNIEѹ|Jq?o@ZUQMID@<73/+&"-Ɍ444"ք̴wq?]YUPLHC?;72.*%!"""4888&dya\XTPKGC>:61-)% OÑ%%%5ʎA{;ys`\WSOJFB>951,($(9|:z;xq?o@mAkBiCgCdDuZ;73.*Ǒ%%%5̎È>89}:{;yq?o@mAjBhCfD~dEuZ?:625Оa789}:{;yr>p?n@lAjBhCfD}dEB>:5^ό555"܄ѳ„7789}:{;xr?p@n@lAjBgCeDFA=9"""4;;;&ŌC89~9|:z;xr?p@mAkAiBgCIELɑQQQJnnn~~~Įq?o@mAkBiCHHH"""vvv9~:{;yq?o@mAkB:::'''___sssttt8Ϧuǣvyp?n@lA888T---6fffnddd%%%"""OOOSSSċDҧuʤv{;yr?p?xM<<r?̷999VVV###)))444ѳ͝b@~9|:z;}Cg˶Ӎ󑑑ZZZlll;;;!!!""")))___&&&2:::ppp{{{___WWWWWW:::!!!"""***www"""4888&,̑999ԖJJJ|||lll:::"""BBBXXX|||$$$6,uuuKKKCCC@@@...www* Ҍ666"KKKaaaLLLWWW@$"""4;;;&nnnfff!!!$$$999444]ttt|ȇɑ&&&5ЎvvvmmmVVV{{{OOOڥaaaCCCpppό555"ބ|||MMMfff"""4;;;&\\\Ǒ%%%5Ύݧܦ͌555"ۄۥ"""4:::&ڤÑ%%%5ˎܤׇ ww?ww??ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwwwwwwwwwwwwwww?ww?ww?ww?ww?ww?ww?ww?ww?ww?ww?wwwwwwwwwwwwwwww?wwwwwwww( @ !!!0\\\JeeeQ666D555A0$ vH<602\7qڴvvvj&&&D1"gLF@;5?кVQKE?9(aV[UPJD>82-uuun{{{j`ZTOVo@lAb_YSMGB<60+%<aVmt>q?n@bb^XRLFA;5/)$Ywwwn}}}j~Cv=s>p?bba]WQKE@:4.(+{;xbba[VPJD?93-'aV~:{;xr?o@lAiBfD}dE|cE|cEiB<61?9}:z;w=t>q?n@kAiCfD}cE|cE}dFGA;=aVңi89|:yq?n@kBhCeD|cE|cELF@mzzznjʓP8~9{;yp?mAjBgCeD|cEPJ\¯mAjBgC~dEaV}:z;xq?n@lAiCJJJőPyq?n@~YVVV???wwwiiiΡkA|;y>>3@@@y~~~obbb000kkk@@@---U<<<&&&[[[6uuusssWWWIII$$$&&&qqqlllg|||s4bbbhhhƑUUU000QQQ}}}---{bbb(iiiLLLBBBaVggg+++NNN|||nj]]]tttkkkrrrwwwӦaVӦzzznjӦˉ ?????(  C﫫oIਨS=?_QF4aZмoEcaXMB70~Iq?c`VK@58z;u=qv>3Eyn@iB~dE}dFGHYYYuuuġ=xmAhC}dE}eGS444|||gC}cEMMM~>q?kAiGRRR¢Gu=xKʺ~AAAAAAAAAAAAAAAA ( h00 %   h4VS_VERSION_INFO?fStringFileInfoB080904b0JCompanyNameSimple Launcher User^FileDescriptionSimple Launcher Executable2 FileVersion1.1.0.140InternalNamew64.exej#LegalCopyrightCopyright (C) Simple Launcher User8OriginalFilenamew64.exe@ProductNameSimple Launcher6 ProductVersion1.1.0.14DVarFileInfo$Translation  PAPADDINGXXPADD (08PXȣУ(8HXhxȭح(80ȧЧا 08@HPX`hpxȭЭح (08@HPX`hpxȮЮخ (08@HPX`hpxȯЯد@PXxؠ08@HPXȢ (08HPX`hpxPK7QY!ڡ˫˫>__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.py# -*- coding: utf-8 -*- # # Copyright (C) 2013-2023 Vinay Sajip. # Licensed to the Python Software Foundation under a contributor agreement. # See LICENSE.txt and CONTRIBUTORS.txt. # from __future__ import unicode_literals import base64 import codecs import datetime from email import message_from_file import hashlib import json import logging import os import posixpath import re import shutil import sys import tempfile import zipfile from . import __version__, DistlibException from .compat import sysconfig, ZipFile, fsdecode, text_type, filter from .database import InstalledDistribution from .metadata import Metadata, WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME from .util import (FileOperator, convert_path, CSVReader, CSVWriter, Cache, cached_property, get_cache_base, read_exports, tempdir, get_platform) from .version import NormalizedVersion, UnsupportedVersionError logger = logging.getLogger(__name__) cache = None # created when needed if hasattr(sys, 'pypy_version_info'): # pragma: no cover IMP_PREFIX = 'pp' elif sys.platform.startswith('java'): # pragma: no cover IMP_PREFIX = 'jy' elif sys.platform == 'cli': # pragma: no cover IMP_PREFIX = 'ip' else: IMP_PREFIX = 'cp' VER_SUFFIX = sysconfig.get_config_var('py_version_nodot') if not VER_SUFFIX: # pragma: no cover VER_SUFFIX = '%s%s' % sys.version_info[:2] PYVER = 'py' + VER_SUFFIX IMPVER = IMP_PREFIX + VER_SUFFIX ARCH = get_platform().replace('-', '_').replace('.', '_') ABI = sysconfig.get_config_var('SOABI') if ABI and ABI.startswith('cpython-'): ABI = ABI.replace('cpython-', 'cp').split('-')[0] else: def _derive_abi(): parts = ['cp', VER_SUFFIX] if sysconfig.get_config_var('Py_DEBUG'): parts.append('d') if IMP_PREFIX == 'cp': vi = sys.version_info[:2] if vi < (3, 8): wpm = sysconfig.get_config_var('WITH_PYMALLOC') if wpm is None: wpm = True if wpm: parts.append('m') if vi < (3, 3): us = sysconfig.get_config_var('Py_UNICODE_SIZE') if us == 4 or (us is None and sys.maxunicode == 0x10FFFF): parts.append('u') return ''.join(parts) ABI = _derive_abi() del _derive_abi FILENAME_RE = re.compile( r''' (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))? -(?P\w+\d+(\.\w+\d+)*) -(?P\w+) -(?P\w+(\.\w+)*) \.whl$ ''', re.IGNORECASE | re.VERBOSE) NAME_VERSION_RE = re.compile(r''' (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))?$ ''', re.IGNORECASE | re.VERBOSE) SHEBANG_RE = re.compile(br'\s*#![^\r\n]*') SHEBANG_DETAIL_RE = re.compile(br'^(\s*#!("[^"]+"|\S+))\s+(.*)$') SHEBANG_PYTHON = b'#!python' SHEBANG_PYTHONW = b'#!pythonw' if os.sep == '/': to_posix = lambda o: o else: to_posix = lambda o: o.replace(os.sep, '/') if sys.version_info[0] < 3: import imp else: imp = None import importlib.machinery import importlib.util def _get_suffixes(): if imp: return [s[0] for s in imp.get_suffixes()] else: return importlib.machinery.EXTENSION_SUFFIXES def _load_dynamic(name, path): # https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly if imp: return imp.load_dynamic(name, path) else: spec = importlib.util.spec_from_file_location(name, path) module = importlib.util.module_from_spec(spec) sys.modules[name] = module spec.loader.exec_module(module) return module class Mounter(object): def __init__(self): self.impure_wheels = {} self.libs = {} def add(self, pathname, extensions): self.impure_wheels[pathname] = extensions self.libs.update(extensions) def remove(self, pathname): extensions = self.impure_wheels.pop(pathname) for k, v in extensions: if k in self.libs: del self.libs[k] def find_module(self, fullname, path=None): if fullname in self.libs: result = self else: result = None return result def load_module(self, fullname): if fullname in sys.modules: result = sys.modules[fullname] else: if fullname not in self.libs: raise ImportError('unable to find extension for %s' % fullname) result = _load_dynamic(fullname, self.libs[fullname]) result.__loader__ = self parts = fullname.rsplit('.', 1) if len(parts) > 1: result.__package__ = parts[0] return result _hook = Mounter() class Wheel(object): """ Class to build and install from Wheel files (PEP 427). """ wheel_version = (1, 1) hash_kind = 'sha256' def __init__(self, filename=None, sign=False, verify=False): """ Initialise an instance using a (valid) filename. """ self.sign = sign self.should_verify = verify self.buildver = '' self.pyver = [PYVER] self.abi = ['none'] self.arch = ['any'] self.dirname = os.getcwd() if filename is None: self.name = 'dummy' self.version = '0.1' self._filename = self.filename else: m = NAME_VERSION_RE.match(filename) if m: info = m.groupdict('') self.name = info['nm'] # Reinstate the local version separator self.version = info['vn'].replace('_', '-') self.buildver = info['bn'] self._filename = self.filename else: dirname, filename = os.path.split(filename) m = FILENAME_RE.match(filename) if not m: raise DistlibException('Invalid name or ' 'filename: %r' % filename) if dirname: self.dirname = os.path.abspath(dirname) self._filename = filename info = m.groupdict('') self.name = info['nm'] self.version = info['vn'] self.buildver = info['bn'] self.pyver = info['py'].split('.') self.abi = info['bi'].split('.') self.arch = info['ar'].split('.') @property def filename(self): """ Build and return a filename from the various components. """ if self.buildver: buildver = '-' + self.buildver else: buildver = '' pyver = '.'.join(self.pyver) abi = '.'.join(self.abi) arch = '.'.join(self.arch) # replace - with _ as a local version separator version = self.version.replace('-', '_') return '%s-%s%s-%s-%s-%s.whl' % (self.name, version, buildver, pyver, abi, arch) @property def exists(self): path = os.path.join(self.dirname, self.filename) return os.path.isfile(path) @property def tags(self): for pyver in self.pyver: for abi in self.abi: for arch in self.arch: yield pyver, abi, arch @cached_property def metadata(self): pathname = os.path.join(self.dirname, self.filename) name_ver = '%s-%s' % (self.name, self.version) info_dir = '%s.dist-info' % name_ver wrapper = codecs.getreader('utf-8') with ZipFile(pathname, 'r') as zf: self.get_wheel_metadata(zf) # wv = wheel_metadata['Wheel-Version'].split('.', 1) # file_version = tuple([int(i) for i in wv]) # if file_version < (1, 1): # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME, # LEGACY_METADATA_FILENAME] # else: # fns = [WHEEL_METADATA_FILENAME, METADATA_FILENAME] fns = [WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME] result = None for fn in fns: try: metadata_filename = posixpath.join(info_dir, fn) with zf.open(metadata_filename) as bf: wf = wrapper(bf) result = Metadata(fileobj=wf) if result: break except KeyError: pass if not result: raise ValueError('Invalid wheel, because metadata is ' 'missing: looked in %s' % ', '.join(fns)) return result def get_wheel_metadata(self, zf): name_ver = '%s-%s' % (self.name, self.version) info_dir = '%s.dist-info' % name_ver metadata_filename = posixpath.join(info_dir, 'WHEEL') with zf.open(metadata_filename) as bf: wf = codecs.getreader('utf-8')(bf) message = message_from_file(wf) return dict(message) @cached_property def info(self): pathname = os.path.join(self.dirname, self.filename) with ZipFile(pathname, 'r') as zf: result = self.get_wheel_metadata(zf) return result def process_shebang(self, data): m = SHEBANG_RE.match(data) if m: end = m.end() shebang, data_after_shebang = data[:end], data[end:] # Preserve any arguments after the interpreter if b'pythonw' in shebang.lower(): shebang_python = SHEBANG_PYTHONW else: shebang_python = SHEBANG_PYTHON m = SHEBANG_DETAIL_RE.match(shebang) if m: args = b' ' + m.groups()[-1] else: args = b'' shebang = shebang_python + args data = shebang + data_after_shebang else: cr = data.find(b'\r') lf = data.find(b'\n') if cr < 0 or cr > lf: term = b'\n' else: if data[cr:cr + 2] == b'\r\n': term = b'\r\n' else: term = b'\r' data = SHEBANG_PYTHON + term + data return data def get_hash(self, data, hash_kind=None): if hash_kind is None: hash_kind = self.hash_kind try: hasher = getattr(hashlib, hash_kind) except AttributeError: raise DistlibException('Unsupported hash algorithm: %r' % hash_kind) result = hasher(data).digest() result = base64.urlsafe_b64encode(result).rstrip(b'=').decode('ascii') return hash_kind, result def write_record(self, records, record_path, archive_record_path): records = list(records) # make a copy, as mutated records.append((archive_record_path, '', '')) with CSVWriter(record_path) as writer: for row in records: writer.writerow(row) def write_records(self, info, libdir, archive_paths): records = [] distinfo, info_dir = info # hasher = getattr(hashlib, self.hash_kind) for ap, p in archive_paths: with open(p, 'rb') as f: data = f.read() digest = '%s=%s' % self.get_hash(data) size = os.path.getsize(p) records.append((ap, digest, size)) p = os.path.join(distinfo, 'RECORD') ap = to_posix(os.path.join(info_dir, 'RECORD')) self.write_record(records, p, ap) archive_paths.append((ap, p)) def build_zip(self, pathname, archive_paths): with ZipFile(pathname, 'w', zipfile.ZIP_DEFLATED) as zf: for ap, p in archive_paths: logger.debug('Wrote %s to %s in wheel', p, ap) zf.write(p, ap) def build(self, paths, tags=None, wheel_version=None): """ Build a wheel from files in specified paths, and use any specified tags when determining the name of the wheel. """ if tags is None: tags = {} libkey = list(filter(lambda o: o in paths, ('purelib', 'platlib')))[0] if libkey == 'platlib': is_pure = 'false' default_pyver = [IMPVER] default_abi = [ABI] default_arch = [ARCH] else: is_pure = 'true' default_pyver = [PYVER] default_abi = ['none'] default_arch = ['any'] self.pyver = tags.get('pyver', default_pyver) self.abi = tags.get('abi', default_abi) self.arch = tags.get('arch', default_arch) libdir = paths[libkey] name_ver = '%s-%s' % (self.name, self.version) data_dir = '%s.data' % name_ver info_dir = '%s.dist-info' % name_ver archive_paths = [] # First, stuff which is not in site-packages for key in ('data', 'headers', 'scripts'): if key not in paths: continue path = paths[key] if os.path.isdir(path): for root, dirs, files in os.walk(path): for fn in files: p = fsdecode(os.path.join(root, fn)) rp = os.path.relpath(p, path) ap = to_posix(os.path.join(data_dir, key, rp)) archive_paths.append((ap, p)) if key == 'scripts' and not p.endswith('.exe'): with open(p, 'rb') as f: data = f.read() data = self.process_shebang(data) with open(p, 'wb') as f: f.write(data) # Now, stuff which is in site-packages, other than the # distinfo stuff. path = libdir distinfo = None for root, dirs, files in os.walk(path): if root == path: # At the top level only, save distinfo for later # and skip it for now for i, dn in enumerate(dirs): dn = fsdecode(dn) if dn.endswith('.dist-info'): distinfo = os.path.join(root, dn) del dirs[i] break assert distinfo, '.dist-info directory expected, not found' for fn in files: # comment out next suite to leave .pyc files in if fsdecode(fn).endswith(('.pyc', '.pyo')): continue p = os.path.join(root, fn) rp = to_posix(os.path.relpath(p, path)) archive_paths.append((rp, p)) # Now distinfo. Assumed to be flat, i.e. os.listdir is enough. files = os.listdir(distinfo) for fn in files: if fn not in ('RECORD', 'INSTALLER', 'SHARED', 'WHEEL'): p = fsdecode(os.path.join(distinfo, fn)) ap = to_posix(os.path.join(info_dir, fn)) archive_paths.append((ap, p)) wheel_metadata = [ 'Wheel-Version: %d.%d' % (wheel_version or self.wheel_version), 'Generator: distlib %s' % __version__, 'Root-Is-Purelib: %s' % is_pure, ] for pyver, abi, arch in self.tags: wheel_metadata.append('Tag: %s-%s-%s' % (pyver, abi, arch)) p = os.path.join(distinfo, 'WHEEL') with open(p, 'w') as f: f.write('\n'.join(wheel_metadata)) ap = to_posix(os.path.join(info_dir, 'WHEEL')) archive_paths.append((ap, p)) # sort the entries by archive path. Not needed by any spec, but it # keeps the archive listing and RECORD tidier than they would otherwise # be. Use the number of path segments to keep directory entries together, # and keep the dist-info stuff at the end. def sorter(t): ap = t[0] n = ap.count('/') if '.dist-info' in ap: n += 10000 return (n, ap) archive_paths = sorted(archive_paths, key=sorter) # Now, at last, RECORD. # Paths in here are archive paths - nothing else makes sense. self.write_records((distinfo, info_dir), libdir, archive_paths) # Now, ready to build the zip file pathname = os.path.join(self.dirname, self.filename) self.build_zip(pathname, archive_paths) return pathname def skip_entry(self, arcname): """ Determine whether an archive entry should be skipped when verifying or installing. """ # The signature file won't be in RECORD, # and we don't currently don't do anything with it # We also skip directories, as they won't be in RECORD # either. See: # # https://github.com/pypa/wheel/issues/294 # https://github.com/pypa/wheel/issues/287 # https://github.com/pypa/wheel/pull/289 # return arcname.endswith(('/', '/RECORD.jws')) def install(self, paths, maker, **kwargs): """ Install a wheel to the specified paths. If kwarg ``warner`` is specified, it should be a callable, which will be called with two tuples indicating the wheel version of this software and the wheel version in the file, if there is a discrepancy in the versions. This can be used to issue any warnings to raise any exceptions. If kwarg ``lib_only`` is True, only the purelib/platlib files are installed, and the headers, scripts, data and dist-info metadata are not written. If kwarg ``bytecode_hashed_invalidation`` is True, written bytecode will try to use file-hash based invalidation (PEP-552) on supported interpreter versions (CPython 3.7+). The return value is a :class:`InstalledDistribution` instance unless ``options.lib_only`` is True, in which case the return value is ``None``. """ dry_run = maker.dry_run warner = kwargs.get('warner') lib_only = kwargs.get('lib_only', False) bc_hashed_invalidation = kwargs.get('bytecode_hashed_invalidation', False) pathname = os.path.join(self.dirname, self.filename) name_ver = '%s-%s' % (self.name, self.version) data_dir = '%s.data' % name_ver info_dir = '%s.dist-info' % name_ver metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') record_name = posixpath.join(info_dir, 'RECORD') wrapper = codecs.getreader('utf-8') with ZipFile(pathname, 'r') as zf: with zf.open(wheel_metadata_name) as bwf: wf = wrapper(bwf) message = message_from_file(wf) wv = message['Wheel-Version'].split('.', 1) file_version = tuple([int(i) for i in wv]) if (file_version != self.wheel_version) and warner: warner(self.wheel_version, file_version) if message['Root-Is-Purelib'] == 'true': libdir = paths['purelib'] else: libdir = paths['platlib'] records = {} with zf.open(record_name) as bf: with CSVReader(stream=bf) as reader: for row in reader: p = row[0] records[p] = row data_pfx = posixpath.join(data_dir, '') info_pfx = posixpath.join(info_dir, '') script_pfx = posixpath.join(data_dir, 'scripts', '') # make a new instance rather than a copy of maker's, # as we mutate it fileop = FileOperator(dry_run=dry_run) fileop.record = True # so we can rollback if needed bc = not sys.dont_write_bytecode # Double negatives. Lovely! outfiles = [] # for RECORD writing # for script copying/shebang processing workdir = tempfile.mkdtemp() # set target dir later # we default add_launchers to False, as the # Python Launcher should be used instead maker.source_dir = workdir maker.target_dir = None try: for zinfo in zf.infolist(): arcname = zinfo.filename if isinstance(arcname, text_type): u_arcname = arcname else: u_arcname = arcname.decode('utf-8') if self.skip_entry(u_arcname): continue row = records[u_arcname] if row[2] and str(zinfo.file_size) != row[2]: raise DistlibException('size mismatch for ' '%s' % u_arcname) if row[1]: kind, value = row[1].split('=', 1) with zf.open(arcname) as bf: data = bf.read() _, digest = self.get_hash(data, kind) if digest != value: raise DistlibException('digest mismatch for ' '%s' % arcname) if lib_only and u_arcname.startswith((info_pfx, data_pfx)): logger.debug('lib_only: skipping %s', u_arcname) continue is_script = (u_arcname.startswith(script_pfx) and not u_arcname.endswith('.exe')) if u_arcname.startswith(data_pfx): _, where, rp = u_arcname.split('/', 2) outfile = os.path.join(paths[where], convert_path(rp)) else: # meant for site-packages. if u_arcname in (wheel_metadata_name, record_name): continue outfile = os.path.join(libdir, convert_path(u_arcname)) if not is_script: with zf.open(arcname) as bf: fileop.copy_stream(bf, outfile) # Issue #147: permission bits aren't preserved. Using # zf.extract(zinfo, libdir) should have worked, but didn't, # see https://www.thetopsites.net/article/53834422.shtml # So ... manually preserve permission bits as given in zinfo if os.name == 'posix': # just set the normal permission bits os.chmod(outfile, (zinfo.external_attr >> 16) & 0x1FF) outfiles.append(outfile) # Double check the digest of the written file if not dry_run and row[1]: with open(outfile, 'rb') as bf: data = bf.read() _, newdigest = self.get_hash(data, kind) if newdigest != digest: raise DistlibException('digest mismatch ' 'on write for ' '%s' % outfile) if bc and outfile.endswith('.py'): try: pyc = fileop.byte_compile(outfile, hashed_invalidation=bc_hashed_invalidation) outfiles.append(pyc) except Exception: # Don't give up if byte-compilation fails, # but log it and perhaps warn the user logger.warning('Byte-compilation failed', exc_info=True) else: fn = os.path.basename(convert_path(arcname)) workname = os.path.join(workdir, fn) with zf.open(arcname) as bf: fileop.copy_stream(bf, workname) dn, fn = os.path.split(outfile) maker.target_dir = dn filenames = maker.make(fn) fileop.set_executable_mode(filenames) outfiles.extend(filenames) if lib_only: logger.debug('lib_only: returning None') dist = None else: # Generate scripts # Try to get pydist.json so we can see if there are # any commands to generate. If this fails (e.g. because # of a legacy wheel), log a warning but don't give up. commands = None file_version = self.info['Wheel-Version'] if file_version == '1.0': # Use legacy info ep = posixpath.join(info_dir, 'entry_points.txt') try: with zf.open(ep) as bwf: epdata = read_exports(bwf) commands = {} for key in ('console', 'gui'): k = '%s_scripts' % key if k in epdata: commands['wrap_%s' % key] = d = {} for v in epdata[k].values(): s = '%s:%s' % (v.prefix, v.suffix) if v.flags: s += ' [%s]' % ','.join(v.flags) d[v.name] = s except Exception: logger.warning('Unable to read legacy script ' 'metadata, so cannot generate ' 'scripts') else: try: with zf.open(metadata_name) as bwf: wf = wrapper(bwf) commands = json.load(wf).get('extensions') if commands: commands = commands.get('python.commands') except Exception: logger.warning('Unable to read JSON metadata, so ' 'cannot generate scripts') if commands: console_scripts = commands.get('wrap_console', {}) gui_scripts = commands.get('wrap_gui', {}) if console_scripts or gui_scripts: script_dir = paths.get('scripts', '') if not os.path.isdir(script_dir): raise ValueError('Valid script path not ' 'specified') maker.target_dir = script_dir for k, v in console_scripts.items(): script = '%s = %s' % (k, v) filenames = maker.make(script) fileop.set_executable_mode(filenames) if gui_scripts: options = {'gui': True} for k, v in gui_scripts.items(): script = '%s = %s' % (k, v) filenames = maker.make(script, options) fileop.set_executable_mode(filenames) p = os.path.join(libdir, info_dir) dist = InstalledDistribution(p) # Write SHARED paths = dict(paths) # don't change passed in dict del paths['purelib'] del paths['platlib'] paths['lib'] = libdir p = dist.write_shared_locations(paths, dry_run) if p: outfiles.append(p) # Write RECORD dist.write_installed_files(outfiles, paths['prefix'], dry_run) return dist except Exception: # pragma: no cover logger.exception('installation failed.') fileop.rollback() raise finally: shutil.rmtree(workdir) def _get_dylib_cache(self): global cache if cache is None: # Use native string to avoid issues on 2.x: see Python #20140. base = os.path.join(get_cache_base(), str('dylib-cache'), '%s.%s' % sys.version_info[:2]) cache = Cache(base) return cache def _get_extensions(self): pathname = os.path.join(self.dirname, self.filename) name_ver = '%s-%s' % (self.name, self.version) info_dir = '%s.dist-info' % name_ver arcname = posixpath.join(info_dir, 'EXTENSIONS') wrapper = codecs.getreader('utf-8') result = [] with ZipFile(pathname, 'r') as zf: try: with zf.open(arcname) as bf: wf = wrapper(bf) extensions = json.load(wf) cache = self._get_dylib_cache() prefix = cache.prefix_to_dir(self.filename, use_abspath=False) cache_base = os.path.join(cache.base, prefix) if not os.path.isdir(cache_base): os.makedirs(cache_base) for name, relpath in extensions.items(): dest = os.path.join(cache_base, convert_path(relpath)) if not os.path.exists(dest): extract = True else: file_time = os.stat(dest).st_mtime file_time = datetime.datetime.fromtimestamp(file_time) info = zf.getinfo(relpath) wheel_time = datetime.datetime(*info.date_time) extract = wheel_time > file_time if extract: zf.extract(relpath, cache_base) result.append((name, dest)) except KeyError: pass return result def is_compatible(self): """ Determine if a wheel is compatible with the running system. """ return is_compatible(self) def is_mountable(self): """ Determine if a wheel is asserted as mountable by its metadata. """ return True # for now - metadata details TBD def mount(self, append=False): pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) if not self.is_compatible(): msg = 'Wheel %s not compatible with this Python.' % pathname raise DistlibException(msg) if not self.is_mountable(): msg = 'Wheel %s is marked as not mountable.' % pathname raise DistlibException(msg) if pathname in sys.path: logger.debug('%s already in path', pathname) else: if append: sys.path.append(pathname) else: sys.path.insert(0, pathname) extensions = self._get_extensions() if extensions: if _hook not in sys.meta_path: sys.meta_path.append(_hook) _hook.add(pathname, extensions) def unmount(self): pathname = os.path.abspath(os.path.join(self.dirname, self.filename)) if pathname not in sys.path: logger.debug('%s not in path', pathname) else: sys.path.remove(pathname) if pathname in _hook.impure_wheels: _hook.remove(pathname) if not _hook.impure_wheels: if _hook in sys.meta_path: sys.meta_path.remove(_hook) def verify(self): pathname = os.path.join(self.dirname, self.filename) name_ver = '%s-%s' % (self.name, self.version) # data_dir = '%s.data' % name_ver info_dir = '%s.dist-info' % name_ver # metadata_name = posixpath.join(info_dir, LEGACY_METADATA_FILENAME) wheel_metadata_name = posixpath.join(info_dir, 'WHEEL') record_name = posixpath.join(info_dir, 'RECORD') wrapper = codecs.getreader('utf-8') with ZipFile(pathname, 'r') as zf: with zf.open(wheel_metadata_name) as bwf: wf = wrapper(bwf) message_from_file(wf) # wv = message['Wheel-Version'].split('.', 1) # file_version = tuple([int(i) for i in wv]) # TODO version verification records = {} with zf.open(record_name) as bf: with CSVReader(stream=bf) as reader: for row in reader: p = row[0] records[p] = row for zinfo in zf.infolist(): arcname = zinfo.filename if isinstance(arcname, text_type): u_arcname = arcname else: u_arcname = arcname.decode('utf-8') # See issue #115: some wheels have .. in their entries, but # in the filename ... e.g. __main__..py ! So the check is # updated to look for .. in the directory portions p = u_arcname.split('/') if '..' in p: raise DistlibException('invalid entry in ' 'wheel: %r' % u_arcname) if self.skip_entry(u_arcname): continue row = records[u_arcname] if row[2] and str(zinfo.file_size) != row[2]: raise DistlibException('size mismatch for ' '%s' % u_arcname) if row[1]: kind, value = row[1].split('=', 1) with zf.open(arcname) as bf: data = bf.read() _, digest = self.get_hash(data, kind) if digest != value: raise DistlibException('digest mismatch for ' '%s' % arcname) def update(self, modifier, dest_dir=None, **kwargs): """ Update the contents of a wheel in a generic way. The modifier should be a callable which expects a dictionary argument: its keys are archive-entry paths, and its values are absolute filesystem paths where the contents the corresponding archive entries can be found. The modifier is free to change the contents of the files pointed to, add new entries and remove entries, before returning. This method will extract the entire contents of the wheel to a temporary location, call the modifier, and then use the passed (and possibly updated) dictionary to write a new wheel. If ``dest_dir`` is specified, the new wheel is written there -- otherwise, the original wheel is overwritten. The modifier should return True if it updated the wheel, else False. This method returns the same value the modifier returns. """ def get_version(path_map, info_dir): version = path = None key = '%s/%s' % (info_dir, LEGACY_METADATA_FILENAME) if key not in path_map: key = '%s/PKG-INFO' % info_dir if key in path_map: path = path_map[key] version = Metadata(path=path).version return version, path def update_version(version, path): updated = None try: NormalizedVersion(version) i = version.find('-') if i < 0: updated = '%s+1' % version else: parts = [int(s) for s in version[i + 1:].split('.')] parts[-1] += 1 updated = '%s+%s' % (version[:i], '.'.join(str(i) for i in parts)) except UnsupportedVersionError: logger.debug('Cannot update non-compliant (PEP-440) ' 'version %r', version) if updated: md = Metadata(path=path) md.version = updated legacy = path.endswith(LEGACY_METADATA_FILENAME) md.write(path=path, legacy=legacy) logger.debug('Version updated from %r to %r', version, updated) pathname = os.path.join(self.dirname, self.filename) name_ver = '%s-%s' % (self.name, self.version) info_dir = '%s.dist-info' % name_ver record_name = posixpath.join(info_dir, 'RECORD') with tempdir() as workdir: with ZipFile(pathname, 'r') as zf: path_map = {} for zinfo in zf.infolist(): arcname = zinfo.filename if isinstance(arcname, text_type): u_arcname = arcname else: u_arcname = arcname.decode('utf-8') if u_arcname == record_name: continue if '..' in u_arcname: raise DistlibException('invalid entry in ' 'wheel: %r' % u_arcname) zf.extract(zinfo, workdir) path = os.path.join(workdir, convert_path(u_arcname)) path_map[u_arcname] = path # Remember the version. original_version, _ = get_version(path_map, info_dir) # Files extracted. Call the modifier. modified = modifier(path_map, **kwargs) if modified: # Something changed - need to build a new wheel. current_version, path = get_version(path_map, info_dir) if current_version and (current_version == original_version): # Add or update local version to signify changes. update_version(current_version, path) # Decide where the new wheel goes. if dest_dir is None: fd, newpath = tempfile.mkstemp(suffix='.whl', prefix='wheel-update-', dir=workdir) os.close(fd) else: if not os.path.isdir(dest_dir): raise DistlibException('Not a directory: %r' % dest_dir) newpath = os.path.join(dest_dir, self.filename) archive_paths = list(path_map.items()) distinfo = os.path.join(workdir, info_dir) info = distinfo, info_dir self.write_records(info, workdir, archive_paths) self.build_zip(newpath, archive_paths) if dest_dir is None: shutil.copyfile(newpath, pathname) return modified def _get_glibc_version(): import platform ver = platform.libc_ver() result = [] if ver[0] == 'glibc': for s in ver[1].split('.'): result.append(int(s) if s.isdigit() else 0) result = tuple(result) return result def compatible_tags(): """ Return (pyver, abi, arch) tuples compatible with this Python. """ class _Version: def __init__(self, major, minor): self.major = major self.major_minor = (major, minor) self.string = ''.join((str(major), str(minor))) def __str__(self): return self.string versions = [ _Version(sys.version_info.major, minor_version) for minor_version in range(sys.version_info.minor, -1, -1) ] abis = [] for suffix in _get_suffixes(): if suffix.startswith('.abi'): abis.append(suffix.split('.', 2)[1]) abis.sort() if ABI != 'none': abis.insert(0, ABI) abis.append('none') result = [] arches = [ARCH] if sys.platform == 'darwin': m = re.match(r'(\w+)_(\d+)_(\d+)_(\w+)$', ARCH) if m: name, major, minor, arch = m.groups() minor = int(minor) matches = [arch] if arch in ('i386', 'ppc'): matches.append('fat') if arch in ('i386', 'ppc', 'x86_64'): matches.append('fat3') if arch in ('ppc64', 'x86_64'): matches.append('fat64') if arch in ('i386', 'x86_64'): matches.append('intel') if arch in ('i386', 'x86_64', 'intel', 'ppc', 'ppc64'): matches.append('universal') while minor >= 0: for match in matches: s = '%s_%s_%s_%s' % (name, major, minor, match) if s != ARCH: # already there arches.append(s) minor -= 1 # Most specific - our Python version, ABI and arch for i, version_object in enumerate(versions): version = str(version_object) add_abis = [] if i == 0: add_abis = abis if IMP_PREFIX == 'cp' and version_object.major_minor >= (3, 2): limited_api_abi = 'abi' + str(version_object.major) if limited_api_abi not in add_abis: add_abis.append(limited_api_abi) for abi in add_abis: for arch in arches: result.append((''.join((IMP_PREFIX, version)), abi, arch)) # manylinux if abi != 'none' and sys.platform.startswith('linux'): arch = arch.replace('linux_', '') parts = _get_glibc_version() if len(parts) == 2: if parts >= (2, 5): result.append((''.join((IMP_PREFIX, version)), abi, 'manylinux1_%s' % arch)) if parts >= (2, 12): result.append((''.join((IMP_PREFIX, version)), abi, 'manylinux2010_%s' % arch)) if parts >= (2, 17): result.append((''.join((IMP_PREFIX, version)), abi, 'manylinux2014_%s' % arch)) result.append((''.join( (IMP_PREFIX, version)), abi, 'manylinux_%s_%s_%s' % (parts[0], parts[1], arch))) # where no ABI / arch dependency, but IMP_PREFIX dependency for i, version_object in enumerate(versions): version = str(version_object) result.append((''.join((IMP_PREFIX, version)), 'none', 'any')) if i == 0: result.append((''.join((IMP_PREFIX, version[0])), 'none', 'any')) # no IMP_PREFIX, ABI or arch dependency for i, version_object in enumerate(versions): version = str(version_object) result.append((''.join(('py', version)), 'none', 'any')) if i == 0: result.append((''.join(('py', version[0])), 'none', 'any')) return set(result) COMPATIBLE_TAGS = compatible_tags() del compatible_tags def is_compatible(wheel, tags=None): if not isinstance(wheel, Wheel): wheel = Wheel(wheel) # assume it's a filename result = False if tags is None: tags = COMPATIBLE_TAGS for ver, abi, arch in tags: if ver in wheel.pyver and abi in wheel.abi and arch in wheel.arch: result = True break return result PK7QYԝ88Q__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/LICENSE.txtA. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others. In 1995, Guido continued his work on Python at the Corporation for National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) in Reston, Virginia where he released several versions of the software. In May 2000, Guido and the Python core development team moved to BeOpen.com to form the BeOpen PythonLabs team. In October of the same year, the PythonLabs team moved to Digital Creations (now Zope Corporation, see http://www.zope.com). In 2001, the Python Software Foundation (PSF, see http://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation is a sponsoring member of the PSF. All Python releases are Open Source (see http://www.opensource.org for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases. Release Derived Year Owner GPL- from compatible? (1) 0.9.0 thru 1.2 1991-1995 CWI yes 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes 1.6 1.5.2 2000 CNRI no 2.0 1.6 2000 BeOpen.com no 1.6.1 1.6 2001 CNRI yes (2) 2.1 2.0+1.6.1 2001 PSF no 2.0.1 2.0+1.6.1 2001 PSF yes 2.1.1 2.1+2.0.1 2001 PSF yes 2.2 2.1.1 2001 PSF yes 2.1.2 2.1.1 2002 PSF yes 2.1.3 2.1.2 2002 PSF yes 2.2.1 2.2 2002 PSF yes 2.2.2 2.2.1 2002 PSF yes 2.2.3 2.2.2 2003 PSF yes 2.3 2.2.2 2002-2003 PSF yes 2.3.1 2.3 2002-2003 PSF yes 2.3.2 2.3.1 2002-2003 PSF yes 2.3.3 2.3.2 2002-2003 PSF yes 2.3.4 2.3.3 2004 PSF yes 2.3.5 2.3.4 2005 PSF yes 2.4 2.3 2004 PSF yes 2.4.1 2.4 2005 PSF yes 2.4.2 2.4.1 2005 PSF yes 2.4.3 2.4.2 2006 PSF yes 2.4.4 2.4.3 2006 PSF yes 2.5 2.4 2006 PSF yes 2.5.1 2.5 2007 PSF yes 2.5.2 2.5.1 2008 PSF yes 2.5.3 2.5.2 2008 PSF yes 2.6 2.5 2008 PSF yes 2.6.1 2.6 2008 PSF yes 2.6.2 2.6.1 2009 PSF yes 2.6.3 2.6.2 2009 PSF yes 2.6.4 2.6.3 2009 PSF yes 2.6.5 2.6.4 2010 PSF yes 3.0 2.6 2008 PSF yes 3.0.1 3.0 2009 PSF yes 3.1 3.0.1 2009 PSF yes 3.1.1 3.1 2009 PSF yes 3.1.2 3.1 2010 PSF yes 3.2 3.1 2010 PSF yes Footnotes: (1) GPL-compatible doesn't mean that we're distributing Python under the GPL. All Python licenses, unlike the GPL, let you distribute a modified version without making your changes open source. The GPL-compatible licenses make it possible to combine Python with other software that is released under the GPL; the others don't. (2) According to Richard Stallman, 1.6.1 is not GPL-compatible, because its license has a choice of law clause. According to CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 is "not incompatible" with the GPL. Thanks to the many outside volunteers who have worked under Guido's direction to make these releases possible. B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON =============================================================== PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python. 4. PSF is making Python available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License Agreement. BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 ------------------------------------------- BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 --------------------------------------- 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013". 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1. 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. ACCEPT CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 -------------------------------------------------- Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. PK7QYΠ~~N__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/METADATAMetadata-Version: 2.1 Name: distlib Version: 0.3.9 Summary: Distribution utilities Home-page: https://github.com/pypa/distlib Author: Vinay Sajip Author-email: vinay_sajip@red-dove.com License: PSF-2.0 Project-URL: Documentation, https://distlib.readthedocs.io/ Project-URL: Source, https://github.com/pypa/distlib Project-URL: Tracker, https://github.com/pypa/distlib/issues Platform: any Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Python Software Foundation License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2 Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Software Development License-File: LICENSE.txt |badge1| |badge2| .. |badge1| image:: https://img.shields.io/github/actions/workflow/status/pypa/distlib/package-tests.yml :alt: GitHub Workflow Status (with event) .. |badge2| image:: https://img.shields.io/codecov/c/github/pypa/distlib :target: https://app.codecov.io/gh/pypa/distlib :alt: GitHub coverage status What is it? ----------- Distlib is a library which implements low-level functions that relate to packaging and distribution of Python software. It is intended to be used as the basis for third-party packaging tools. The documentation is available at https://distlib.readthedocs.io/ Main features ------------- Distlib currently offers the following features: * The package ``distlib.database``, which implements a database of installed distributions, as defined by :pep:`376`, and distribution dependency graph logic. Support is also provided for non-installed distributions (i.e. distributions registered with metadata on an index like PyPI), including the ability to scan for dependencies and building dependency graphs. * The package ``distlib.index``, which implements an interface to perform operations on an index, such as registering a project, uploading a distribution or uploading documentation. Support is included for verifying SSL connections (with domain matching) and signing/verifying packages using GnuPG. * The package ``distlib.metadata``, which implements distribution metadata as defined by :pep:`643`, :pep:`566`, :pep:`345`, :pep:`314` and :pep:`241`. * The package ``distlib.markers``, which implements environment markers as defined by :pep:`508`. * The package ``distlib.manifest``, which implements lists of files used in packaging source distributions. * The package ``distlib.locators``, which allows finding distributions, whether on PyPI (XML-RPC or via the "simple" interface), local directories or some other source. * The package ``distlib.resources``, which allows access to data files stored in Python packages, both in the file system and in .zip files. * The package ``distlib.scripts``, which allows installing of scripts with adjustment of shebang lines and support for native Windows executable launchers. * The package ``distlib.version``, which implements version specifiers as defined by :pep:`440`, but also support for working with "legacy" versions and semantic versions. * The package ``distlib.wheel``, which provides support for building and installing from the Wheel format for binary distributions (see :pep:`427`). * The package ``distlib.util``, which contains miscellaneous functions and classes which are useful in packaging, but which do not fit neatly into one of the other packages in ``distlib``.* The package implements enhanced globbing functionality such as the ability to use ``**`` in patterns to specify recursing into subdirectories. Python version and platform compatibility ----------------------------------------- Distlib is intended to be used on and is tested on Python versions 2.7 and 3.6 or later, pypy-2.7 and pypy3 on Linux, Windows, and macOS. Project status -------------- The project has reached a mature status in its development: there is a comprehensive test suite and it has been exercised on Windows, Ubuntu and macOS. The project is used by well-known projects such as `pip `_ and `caniusepython3 `_. This project was migrated from Mercurial to Git and from BitBucket to GitHub, and although all information of importance has been retained across the migration, some commit references in issues and issue comments may have become invalid. Code of Conduct --------------- Everyone interacting in the distlib project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the `PyPA Code of Conduct`_. .. _PyPA Code of Conduct: https://www.pypa.io/en/latest/code-of-conduct/ PK7QYnnK__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/WHEELWheel-Version: 1.0 Generator: bdist_wheel (0.37.1) Root-Is-Purelib: true Tag: py2-none-any Tag: py3-none-any PK7QYQ/S__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/top_level.txtdistlib PK7QYY!!L__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/RECORDdistlib/__init__.py,sha256=dcwgYGYGQqAEawBXPDtIx80DO_3cOmFv8HTc8JMzknQ,625 distlib/compat.py,sha256=2jRSjRI4o-vlXeTK2BCGIUhkc6e9ZGhSsacRM5oseTw,41467 distlib/database.py,sha256=mHy_LxiXIsIVRb-T0-idBrVLw3Ffij5teHCpbjmJ9YU,51160 distlib/index.py,sha256=lTbw268rRhj8dw1sib3VZ_0EhSGgoJO3FKJzSFMOaeA,20797 distlib/locators.py,sha256=oBeAZpFuPQSY09MgNnLfQGGAXXvVO96BFpZyKMuK4tM,51026 distlib/manifest.py,sha256=3qfmAmVwxRqU1o23AlfXrQGZzh6g_GGzTAP_Hb9C5zQ,14168 distlib/markers.py,sha256=X6sDvkFGcYS8gUW8hfsWuKEKAqhQZAJ7iXOMLxRYjYk,5164 distlib/metadata.py,sha256=zil3sg2EUfLXVigljY2d_03IJt-JSs7nX-73fECMX2s,38724 distlib/resources.py,sha256=LwbPksc0A1JMbi6XnuPdMBUn83X7BPuFNWqPGEKI698,10820 distlib/scripts.py,sha256=BJliaDAZaVB7WAkwokgC3HXwLD2iWiHaVI50H7C6eG8,18608 distlib/t32.exe,sha256=a0GV5kCoWsMutvliiCKmIgV98eRZ33wXoS-XrqvJQVs,97792 distlib/t64-arm.exe,sha256=68TAa32V504xVBnufojh0PcenpR3U4wAqTqf-MZqbPw,182784 distlib/t64.exe,sha256=gaYY8hy4fbkHYTTnA4i26ct8IQZzkBG2pRdy0iyuBrc,108032 distlib/util.py,sha256=vMPGvsS4j9hF6Y9k3Tyom1aaHLb0rFmZAEyzeAdel9w,66682 distlib/version.py,sha256=s5VIs8wBn0fxzGxWM_aA2ZZyx525HcZbMvcTlTyZ3Rg,23727 distlib/w32.exe,sha256=R4csx3-OGM9kL4aPIzQKRo5TfmRSHZo6QWyLhDhNBks,91648 distlib/w64-arm.exe,sha256=xdyYhKj0WDcVUOCb05blQYvzdYIKMbmJn2SZvzkcey4,168448 distlib/w64.exe,sha256=ejGf-rojoBfXseGLpya6bFTFPWRG21X5KvU8J5iU-K0,101888 distlib/wheel.py,sha256=DFIVguEQHCdxnSdAO0dfFsgMcvVZitg7bCOuLwZ7A_s,43979 distlib-0.3.9.dist-info/LICENSE.txt,sha256=gI4QyKarjesUn_mz-xn0R6gICUYG1xKpylf-rTVSWZ0,14531 distlib-0.3.9.dist-info/METADATA,sha256=GfbwA0gg2QzJ2oWxlg-OHyPG1Q_wWM2NzEtWg-EfxDc,5246 distlib-0.3.9.dist-info/WHEEL,sha256=z9j0xAa_JmUKMpmz72K0ZGALSM_n-wQVmGbleXx2VHg,110 distlib-0.3.9.dist-info/top_level.txt,sha256=9BERqitu_vzyeyILOcGzX9YyA2AB_xlC4-81V6xoizk,8 distlib-0.3.9.dist-info/RECORD,, PK7QYZۯ@__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.py""" A platform independent file lock that supports the with-statement. .. autodata:: filelock.__version__ :no-value: """ from __future__ import annotations import sys import warnings from typing import TYPE_CHECKING from ._api import AcquireReturnProxy, BaseFileLock from ._error import Timeout from ._soft import SoftFileLock from ._unix import UnixFileLock, has_fcntl from ._windows import WindowsFileLock from .asyncio import ( AsyncAcquireReturnProxy, AsyncSoftFileLock, AsyncUnixFileLock, AsyncWindowsFileLock, BaseAsyncFileLock, ) from .version import version #: version of the project as a string __version__: str = version if sys.platform == "win32": # pragma: win32 cover _FileLock: type[BaseFileLock] = WindowsFileLock _AsyncFileLock: type[BaseAsyncFileLock] = AsyncWindowsFileLock else: # pragma: win32 no cover # noqa: PLR5501 if has_fcntl: _FileLock: type[BaseFileLock] = UnixFileLock _AsyncFileLock: type[BaseAsyncFileLock] = AsyncUnixFileLock else: _FileLock = SoftFileLock _AsyncFileLock = AsyncSoftFileLock if warnings is not None: warnings.warn("only soft file lock is available", stacklevel=2) if TYPE_CHECKING: FileLock = SoftFileLock AsyncFileLock = AsyncSoftFileLock else: #: Alias for the lock, which should be used for the current platform. FileLock = _FileLock AsyncFileLock = _AsyncFileLock __all__ = [ "AcquireReturnProxy", "AsyncAcquireReturnProxy", "AsyncFileLock", "AsyncSoftFileLock", "AsyncUnixFileLock", "AsyncWindowsFileLock", "BaseAsyncFileLock", "BaseFileLock", "FileLock", "SoftFileLock", "Timeout", "UnixFileLock", "WindowsFileLock", "__version__", ] PK7QY% 88<__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.pyfrom __future__ import annotations import contextlib import inspect import logging import os import time import warnings from abc import ABCMeta, abstractmethod from dataclasses import dataclass from threading import local from typing import TYPE_CHECKING, Any, cast from weakref import WeakValueDictionary from ._error import Timeout if TYPE_CHECKING: import sys from types import TracebackType if sys.version_info >= (3, 11): # pragma: no cover (py311+) from typing import Self else: # pragma: no cover ( None: self.lock = lock def __enter__(self) -> BaseFileLock: return self.lock def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None, ) -> None: self.lock.release() @dataclass class FileLockContext: """A dataclass which holds the context for a ``BaseFileLock`` object.""" # The context is held in a separate class to allow optional use of thread local storage via the # ThreadLocalFileContext class. #: The path to the lock file. lock_file: str #: The default timeout value. timeout: float #: The mode for the lock files mode: int #: Whether the lock should be blocking or not blocking: bool #: The file descriptor for the *_lock_file* as it is returned by the os.open() function, not None when lock held lock_file_fd: int | None = None #: The lock counter is used for implementing the nested locking mechanism. lock_counter: int = 0 # When the lock is acquired is increased and the lock is only released, when this value is 0 class ThreadLocalFileContext(FileLockContext, local): """A thread local version of the ``FileLockContext`` class.""" class FileLockMeta(ABCMeta): def __call__( # noqa: PLR0913 cls, lock_file: str | os.PathLike[str], timeout: float = -1, mode: int = 0o644, thread_local: bool = True, # noqa: FBT001, FBT002 *, blocking: bool = True, is_singleton: bool = False, **kwargs: Any, # capture remaining kwargs for subclasses # noqa: ANN401 ) -> BaseFileLock: if is_singleton: instance = cls._instances.get(str(lock_file)) # type: ignore[attr-defined] if instance: params_to_check = { "thread_local": (thread_local, instance.is_thread_local()), "timeout": (timeout, instance.timeout), "mode": (mode, instance.mode), "blocking": (blocking, instance.blocking), } non_matching_params = { name: (passed_param, set_param) for name, (passed_param, set_param) in params_to_check.items() if passed_param != set_param } if not non_matching_params: return cast(BaseFileLock, instance) # parameters do not match; raise error msg = "Singleton lock instances cannot be initialized with differing arguments" msg += "\nNon-matching arguments: " for param_name, (passed_param, set_param) in non_matching_params.items(): msg += f"\n\t{param_name} (existing lock has {set_param} but {passed_param} was passed)" raise ValueError(msg) # Workaround to make `__init__`'s params optional in subclasses # E.g. virtualenv changes the signature of the `__init__` method in the `BaseFileLock` class descendant # (https://github.com/tox-dev/filelock/pull/340) all_params = { "timeout": timeout, "mode": mode, "thread_local": thread_local, "blocking": blocking, "is_singleton": is_singleton, **kwargs, } present_params = inspect.signature(cls.__init__).parameters # type: ignore[misc] init_params = {key: value for key, value in all_params.items() if key in present_params} instance = super().__call__(lock_file, **init_params) if is_singleton: cls._instances[str(lock_file)] = instance # type: ignore[attr-defined] return cast(BaseFileLock, instance) class BaseFileLock(contextlib.ContextDecorator, metaclass=FileLockMeta): """Abstract base class for a file lock object.""" _instances: WeakValueDictionary[str, BaseFileLock] def __init_subclass__(cls, **kwargs: dict[str, Any]) -> None: """Setup unique state for lock subclasses.""" super().__init_subclass__(**kwargs) cls._instances = WeakValueDictionary() def __init__( # noqa: PLR0913 self, lock_file: str | os.PathLike[str], timeout: float = -1, mode: int = 0o644, thread_local: bool = True, # noqa: FBT001, FBT002 *, blocking: bool = True, is_singleton: bool = False, ) -> None: """ Create a new lock object. :param lock_file: path to the file :param timeout: default timeout when acquiring the lock, in seconds. It will be used as fallback value in \ the acquire method, if no timeout value (``None``) is given. If you want to disable the timeout, set it \ to a negative value. A timeout of 0 means that there is exactly one attempt to acquire the file lock. :param mode: file permissions for the lockfile :param thread_local: Whether this object's internal context should be thread local or not. If this is set to \ ``False`` then the lock will be reentrant across threads. :param blocking: whether the lock should be blocking or not :param is_singleton: If this is set to ``True`` then only one instance of this class will be created \ per lock file. This is useful if you want to use the lock object for reentrant locking without needing \ to pass the same object around. """ self._is_thread_local = thread_local self._is_singleton = is_singleton # Create the context. Note that external code should not work with the context directly and should instead use # properties of this class. kwargs: dict[str, Any] = { "lock_file": os.fspath(lock_file), "timeout": timeout, "mode": mode, "blocking": blocking, } self._context: FileLockContext = (ThreadLocalFileContext if thread_local else FileLockContext)(**kwargs) def is_thread_local(self) -> bool: """:return: a flag indicating if this lock is thread local or not""" return self._is_thread_local @property def is_singleton(self) -> bool: """:return: a flag indicating if this lock is singleton or not""" return self._is_singleton @property def lock_file(self) -> str: """:return: path to the lock file""" return self._context.lock_file @property def timeout(self) -> float: """ :return: the default timeout value, in seconds .. versionadded:: 2.0.0 """ return self._context.timeout @timeout.setter def timeout(self, value: float | str) -> None: """ Change the default timeout value. :param value: the new value, in seconds """ self._context.timeout = float(value) @property def blocking(self) -> bool: """:return: whether the locking is blocking or not""" return self._context.blocking @blocking.setter def blocking(self, value: bool) -> None: """ Change the default blocking value. :param value: the new value as bool """ self._context.blocking = value @property def mode(self) -> int: """:return: the file permissions for the lockfile""" return self._context.mode @abstractmethod def _acquire(self) -> None: """If the file lock could be acquired, self._context.lock_file_fd holds the file descriptor of the lock file.""" raise NotImplementedError @abstractmethod def _release(self) -> None: """Releases the lock and sets self._context.lock_file_fd to None.""" raise NotImplementedError @property def is_locked(self) -> bool: """ :return: A boolean indicating if the lock file is holding the lock currently. .. versionchanged:: 2.0.0 This was previously a method and is now a property. """ return self._context.lock_file_fd is not None @property def lock_counter(self) -> int: """:return: The number of times this lock has been acquired (but not yet released).""" return self._context.lock_counter def acquire( self, timeout: float | None = None, poll_interval: float = 0.05, *, poll_intervall: float | None = None, blocking: bool | None = None, ) -> AcquireReturnProxy: """ Try to acquire the file lock. :param timeout: maximum wait time for acquiring the lock, ``None`` means use the default :attr:`~timeout` is and if ``timeout < 0``, there is no timeout and this method will block until the lock could be acquired :param poll_interval: interval of trying to acquire the lock file :param poll_intervall: deprecated, kept for backwards compatibility, use ``poll_interval`` instead :param blocking: defaults to True. If False, function will return immediately if it cannot obtain a lock on the first attempt. Otherwise, this method will block until the timeout expires or the lock is acquired. :raises Timeout: if fails to acquire lock within the timeout period :return: a context object that will unlock the file when the context is exited .. code-block:: python # You can use this method in the context manager (recommended) with lock.acquire(): pass # Or use an equivalent try-finally construct: lock.acquire() try: pass finally: lock.release() .. versionchanged:: 2.0.0 This method returns now a *proxy* object instead of *self*, so that it can be used in a with statement without side effects. """ # Use the default timeout, if no timeout is provided. if timeout is None: timeout = self._context.timeout if blocking is None: blocking = self._context.blocking if poll_intervall is not None: msg = "use poll_interval instead of poll_intervall" warnings.warn(msg, DeprecationWarning, stacklevel=2) poll_interval = poll_intervall # Increment the number right at the beginning. We can still undo it, if something fails. self._context.lock_counter += 1 lock_id = id(self) lock_filename = self.lock_file start_time = time.perf_counter() try: while True: if not self.is_locked: _LOGGER.debug("Attempting to acquire lock %s on %s", lock_id, lock_filename) self._acquire() if self.is_locked: _LOGGER.debug("Lock %s acquired on %s", lock_id, lock_filename) break if blocking is False: _LOGGER.debug("Failed to immediately acquire lock %s on %s", lock_id, lock_filename) raise Timeout(lock_filename) # noqa: TRY301 if 0 <= timeout < time.perf_counter() - start_time: _LOGGER.debug("Timeout on acquiring lock %s on %s", lock_id, lock_filename) raise Timeout(lock_filename) # noqa: TRY301 msg = "Lock %s not acquired on %s, waiting %s seconds ..." _LOGGER.debug(msg, lock_id, lock_filename, poll_interval) time.sleep(poll_interval) except BaseException: # Something did go wrong, so decrement the counter. self._context.lock_counter = max(0, self._context.lock_counter - 1) raise return AcquireReturnProxy(lock=self) def release(self, force: bool = False) -> None: # noqa: FBT001, FBT002 """ Releases the file lock. Please note, that the lock is only completely released, if the lock counter is 0. Also note, that the lock file itself is not automatically deleted. :param force: If true, the lock counter is ignored and the lock is released in every case/ """ if self.is_locked: self._context.lock_counter -= 1 if self._context.lock_counter == 0 or force: lock_id, lock_filename = id(self), self.lock_file _LOGGER.debug("Attempting to release lock %s on %s", lock_id, lock_filename) self._release() self._context.lock_counter = 0 _LOGGER.debug("Lock %s released on %s", lock_id, lock_filename) def __enter__(self) -> Self: """ Acquire the lock. :return: the lock object """ self.acquire() return self def __exit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None, ) -> None: """ Release the lock. :param exc_type: the exception type if raised :param exc_value: the exception value if raised :param traceback: the exception traceback if raised """ self.release() def __del__(self) -> None: """Called when the lock object is deleted.""" self.release(force=True) __all__ = [ "AcquireReturnProxy", "BaseFileLock", ] PK7QYJ8>__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.pyfrom __future__ import annotations from typing import Any class Timeout(TimeoutError): # noqa: N818 """Raised when the lock could not be acquired in *timeout* seconds.""" def __init__(self, lock_file: str) -> None: super().__init__() self._lock_file = lock_file def __reduce__(self) -> str | tuple[Any, ...]: return self.__class__, (self._lock_file,) # Properly pickle the exception def __str__(self) -> str: return f"The file lock '{self._lock_file}' could not be acquired." def __repr__(self) -> str: return f"{self.__class__.__name__}({self.lock_file!r})" @property def lock_file(self) -> str: """:return: The path of the file lock.""" return self._lock_file __all__ = [ "Timeout", ] PK7QY|=__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.pyfrom __future__ import annotations import os import sys from contextlib import suppress from errno import EACCES, EEXIST from pathlib import Path from ._api import BaseFileLock from ._util import ensure_directory_exists, raise_on_not_writable_file class SoftFileLock(BaseFileLock): """Simply watches the existence of the lock file.""" def _acquire(self) -> None: raise_on_not_writable_file(self.lock_file) ensure_directory_exists(self.lock_file) # first check for exists and read-only mode as the open will mask this case as EEXIST flags = ( os.O_WRONLY # open for writing only | os.O_CREAT | os.O_EXCL # together with above raise EEXIST if the file specified by filename exists | os.O_TRUNC # truncate the file to zero byte ) try: file_handler = os.open(self.lock_file, flags, self._context.mode) except OSError as exception: # re-raise unless expected exception if not ( exception.errno == EEXIST # lock already exist or (exception.errno == EACCES and sys.platform == "win32") # has no access to this lock ): # pragma: win32 no cover raise else: self._context.lock_file_fd = file_handler def _release(self) -> None: assert self._context.lock_file_fd is not None # noqa: S101 os.close(self._context.lock_file_fd) # the lock file is definitely not None self._context.lock_file_fd = None with suppress(OSError): # the file is already deleted and that's what we want Path(self.lock_file).unlink() __all__ = [ "SoftFileLock", ] PK7QYb=__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.pyfrom __future__ import annotations import os import sys from contextlib import suppress from errno import ENOSYS from pathlib import Path from typing import cast from ._api import BaseFileLock from ._util import ensure_directory_exists #: a flag to indicate if the fcntl API is available has_fcntl = False if sys.platform == "win32": # pragma: win32 cover class UnixFileLock(BaseFileLock): """Uses the :func:`fcntl.flock` to hard lock the lock file on unix systems.""" def _acquire(self) -> None: raise NotImplementedError def _release(self) -> None: raise NotImplementedError else: # pragma: win32 no cover try: import fcntl except ImportError: pass else: has_fcntl = True class UnixFileLock(BaseFileLock): """Uses the :func:`fcntl.flock` to hard lock the lock file on unix systems.""" def _acquire(self) -> None: ensure_directory_exists(self.lock_file) open_flags = os.O_RDWR | os.O_TRUNC if not Path(self.lock_file).exists(): open_flags |= os.O_CREAT fd = os.open(self.lock_file, open_flags, self._context.mode) with suppress(PermissionError): # This locked is not owned by this UID os.fchmod(fd, self._context.mode) try: fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB) except OSError as exception: os.close(fd) if exception.errno == ENOSYS: # NotImplemented error msg = "FileSystem does not appear to support flock; use SoftFileLock instead" raise NotImplementedError(msg) from exception else: self._context.lock_file_fd = fd def _release(self) -> None: # Do not remove the lockfile: # https://github.com/tox-dev/py-filelock/issues/31 # https://stackoverflow.com/questions/17708885/flock-removing-locked-file-without-race-condition fd = cast(int, self._context.lock_file_fd) self._context.lock_file_fd = None fcntl.flock(fd, fcntl.LOCK_UN) os.close(fd) __all__ = [ "UnixFileLock", "has_fcntl", ] PK7QY!N=__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.pyfrom __future__ import annotations import os import stat import sys from errno import EACCES, EISDIR from pathlib import Path def raise_on_not_writable_file(filename: str) -> None: """ Raise an exception if attempting to open the file for writing would fail. This is done so files that will never be writable can be separated from files that are writable but currently locked. :param filename: file to check :raises OSError: as if the file was opened for writing. """ try: # use stat to do exists + can write to check without race condition file_stat = os.stat(filename) # noqa: PTH116 except OSError: return # swallow does not exist or other errors if file_stat.st_mtime != 0: # if os.stat returns but modification is zero that's an invalid os.stat - ignore it if not (file_stat.st_mode & stat.S_IWUSR): raise PermissionError(EACCES, "Permission denied", filename) if stat.S_ISDIR(file_stat.st_mode): if sys.platform == "win32": # pragma: win32 cover # On Windows, this is PermissionError raise PermissionError(EACCES, "Permission denied", filename) else: # pragma: win32 no cover # noqa: RET506 # On linux / macOS, this is IsADirectoryError raise IsADirectoryError(EISDIR, "Is a directory", filename) def ensure_directory_exists(filename: Path | str) -> None: """ Ensure the directory containing the file exists (create it if necessary). :param filename: file. """ Path(filename).parent.mkdir(parents=True, exist_ok=True) __all__ = [ "ensure_directory_exists", "raise_on_not_writable_file", ] PK7QY<ց@__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.pyfrom __future__ import annotations import os import sys from contextlib import suppress from errno import EACCES from pathlib import Path from typing import cast from ._api import BaseFileLock from ._util import ensure_directory_exists, raise_on_not_writable_file if sys.platform == "win32": # pragma: win32 cover import msvcrt class WindowsFileLock(BaseFileLock): """Uses the :func:`msvcrt.locking` function to hard lock the lock file on Windows systems.""" def _acquire(self) -> None: raise_on_not_writable_file(self.lock_file) ensure_directory_exists(self.lock_file) flags = ( os.O_RDWR # open for read and write | os.O_CREAT # create file if not exists | os.O_TRUNC # truncate file if not empty ) try: fd = os.open(self.lock_file, flags, self._context.mode) except OSError as exception: if exception.errno != EACCES: # has no access to this lock raise else: try: msvcrt.locking(fd, msvcrt.LK_NBLCK, 1) except OSError as exception: os.close(fd) # close file first if exception.errno != EACCES: # file is already locked raise else: self._context.lock_file_fd = fd def _release(self) -> None: fd = cast(int, self._context.lock_file_fd) self._context.lock_file_fd = None msvcrt.locking(fd, msvcrt.LK_UNLCK, 1) os.close(fd) with suppress(OSError): # Probably another instance of the application hat acquired the file lock. Path(self.lock_file).unlink() else: # pragma: win32 no cover class WindowsFileLock(BaseFileLock): """Uses the :func:`msvcrt.locking` function to hard lock the lock file on Windows systems.""" def _acquire(self) -> None: raise NotImplementedError def _release(self) -> None: raise NotImplementedError __all__ = [ "WindowsFileLock", ] PK7QYHmc00?__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.py"""An asyncio-based implementation of the file lock.""" # noqa: A005 from __future__ import annotations import asyncio import contextlib import logging import os import time from dataclasses import dataclass from threading import local from typing import TYPE_CHECKING, Any, Callable, NoReturn, cast from ._api import BaseFileLock, FileLockContext, FileLockMeta from ._error import Timeout from ._soft import SoftFileLock from ._unix import UnixFileLock from ._windows import WindowsFileLock if TYPE_CHECKING: import sys from concurrent import futures from types import TracebackType if sys.version_info >= (3, 11): # pragma: no cover (py311+) from typing import Self else: # pragma: no cover ( None: # noqa: D107 self.lock = lock async def __aenter__(self) -> BaseAsyncFileLock: # noqa: D105 return self.lock async def __aexit__( # noqa: D105 self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None, ) -> None: await self.lock.release() class AsyncFileLockMeta(FileLockMeta): def __call__( # type: ignore[override] # noqa: PLR0913 cls, # noqa: N805 lock_file: str | os.PathLike[str], timeout: float = -1, mode: int = 0o644, thread_local: bool = False, # noqa: FBT001, FBT002 *, blocking: bool = True, is_singleton: bool = False, loop: asyncio.AbstractEventLoop | None = None, run_in_executor: bool = True, executor: futures.Executor | None = None, ) -> BaseAsyncFileLock: if thread_local and run_in_executor: msg = "run_in_executor is not supported when thread_local is True" raise ValueError(msg) instance = super().__call__( lock_file=lock_file, timeout=timeout, mode=mode, thread_local=thread_local, blocking=blocking, is_singleton=is_singleton, loop=loop, run_in_executor=run_in_executor, executor=executor, ) return cast(BaseAsyncFileLock, instance) class BaseAsyncFileLock(BaseFileLock, metaclass=AsyncFileLockMeta): """Base class for asynchronous file locks.""" def __init__( # noqa: PLR0913 self, lock_file: str | os.PathLike[str], timeout: float = -1, mode: int = 0o644, thread_local: bool = False, # noqa: FBT001, FBT002 *, blocking: bool = True, is_singleton: bool = False, loop: asyncio.AbstractEventLoop | None = None, run_in_executor: bool = True, executor: futures.Executor | None = None, ) -> None: """ Create a new lock object. :param lock_file: path to the file :param timeout: default timeout when acquiring the lock, in seconds. It will be used as fallback value in \ the acquire method, if no timeout value (``None``) is given. If you want to disable the timeout, set it \ to a negative value. A timeout of 0 means that there is exactly one attempt to acquire the file lock. :param mode: file permissions for the lockfile :param thread_local: Whether this object's internal context should be thread local or not. If this is set to \ ``False`` then the lock will be reentrant across threads. :param blocking: whether the lock should be blocking or not :param is_singleton: If this is set to ``True`` then only one instance of this class will be created \ per lock file. This is useful if you want to use the lock object for reentrant locking without needing \ to pass the same object around. :param loop: The event loop to use. If not specified, the running event loop will be used. :param run_in_executor: If this is set to ``True`` then the lock will be acquired in an executor. :param executor: The executor to use. If not specified, the default executor will be used. """ self._is_thread_local = thread_local self._is_singleton = is_singleton # Create the context. Note that external code should not work with the context directly and should instead use # properties of this class. kwargs: dict[str, Any] = { "lock_file": os.fspath(lock_file), "timeout": timeout, "mode": mode, "blocking": blocking, "loop": loop, "run_in_executor": run_in_executor, "executor": executor, } self._context: AsyncFileLockContext = (AsyncThreadLocalFileContext if thread_local else AsyncFileLockContext)( **kwargs ) @property def run_in_executor(self) -> bool: """::return: whether run in executor.""" return self._context.run_in_executor @property def executor(self) -> futures.Executor | None: """::return: the executor.""" return self._context.executor @executor.setter def executor(self, value: futures.Executor | None) -> None: # pragma: no cover """ Change the executor. :param value: the new executor or ``None`` :type value: futures.Executor | None """ self._context.executor = value @property def loop(self) -> asyncio.AbstractEventLoop | None: """::return: the event loop.""" return self._context.loop async def acquire( # type: ignore[override] self, timeout: float | None = None, poll_interval: float = 0.05, *, blocking: bool | None = None, ) -> AsyncAcquireReturnProxy: """ Try to acquire the file lock. :param timeout: maximum wait time for acquiring the lock, ``None`` means use the default :attr:`~BaseFileLock.timeout` is and if ``timeout < 0``, there is no timeout and this method will block until the lock could be acquired :param poll_interval: interval of trying to acquire the lock file :param blocking: defaults to True. If False, function will return immediately if it cannot obtain a lock on the first attempt. Otherwise, this method will block until the timeout expires or the lock is acquired. :raises Timeout: if fails to acquire lock within the timeout period :return: a context object that will unlock the file when the context is exited .. code-block:: python # You can use this method in the context manager (recommended) with lock.acquire(): pass # Or use an equivalent try-finally construct: lock.acquire() try: pass finally: lock.release() """ # Use the default timeout, if no timeout is provided. if timeout is None: timeout = self._context.timeout if blocking is None: blocking = self._context.blocking # Increment the number right at the beginning. We can still undo it, if something fails. self._context.lock_counter += 1 lock_id = id(self) lock_filename = self.lock_file start_time = time.perf_counter() try: while True: if not self.is_locked: _LOGGER.debug("Attempting to acquire lock %s on %s", lock_id, lock_filename) await self._run_internal_method(self._acquire) if self.is_locked: _LOGGER.debug("Lock %s acquired on %s", lock_id, lock_filename) break if blocking is False: _LOGGER.debug("Failed to immediately acquire lock %s on %s", lock_id, lock_filename) raise Timeout(lock_filename) # noqa: TRY301 if 0 <= timeout < time.perf_counter() - start_time: _LOGGER.debug("Timeout on acquiring lock %s on %s", lock_id, lock_filename) raise Timeout(lock_filename) # noqa: TRY301 msg = "Lock %s not acquired on %s, waiting %s seconds ..." _LOGGER.debug(msg, lock_id, lock_filename, poll_interval) await asyncio.sleep(poll_interval) except BaseException: # Something did go wrong, so decrement the counter. self._context.lock_counter = max(0, self._context.lock_counter - 1) raise return AsyncAcquireReturnProxy(lock=self) async def release(self, force: bool = False) -> None: # type: ignore[override] # noqa: FBT001, FBT002 """ Releases the file lock. Please note, that the lock is only completely released, if the lock counter is 0. Also note, that the lock file itself is not automatically deleted. :param force: If true, the lock counter is ignored and the lock is released in every case/ """ if self.is_locked: self._context.lock_counter -= 1 if self._context.lock_counter == 0 or force: lock_id, lock_filename = id(self), self.lock_file _LOGGER.debug("Attempting to release lock %s on %s", lock_id, lock_filename) await self._run_internal_method(self._release) self._context.lock_counter = 0 _LOGGER.debug("Lock %s released on %s", lock_id, lock_filename) async def _run_internal_method(self, method: Callable[[], Any]) -> None: if asyncio.iscoroutinefunction(method): await method() elif self.run_in_executor: loop = self.loop or asyncio.get_running_loop() await loop.run_in_executor(self.executor, method) else: method() def __enter__(self) -> NoReturn: """ Replace old __enter__ method to avoid using it. NOTE: DO NOT USE `with` FOR ASYNCIO LOCKS, USE `async with` INSTEAD. :return: none :rtype: NoReturn """ msg = "Do not use `with` for asyncio locks, use `async with` instead." raise NotImplementedError(msg) async def __aenter__(self) -> Self: """ Acquire the lock. :return: the lock object """ await self.acquire() return self async def __aexit__( self, exc_type: type[BaseException] | None, exc_value: BaseException | None, traceback: TracebackType | None, ) -> None: """ Release the lock. :param exc_type: the exception type if raised :param exc_value: the exception value if raised :param traceback: the exception traceback if raised """ await self.release() def __del__(self) -> None: """Called when the lock object is deleted.""" with contextlib.suppress(RuntimeError): loop = self.loop or asyncio.get_running_loop() if not loop.is_running(): # pragma: no cover loop.run_until_complete(self.release(force=True)) else: loop.create_task(self.release(force=True)) class AsyncSoftFileLock(SoftFileLock, BaseAsyncFileLock): """Simply watches the existence of the lock file.""" class AsyncUnixFileLock(UnixFileLock, BaseAsyncFileLock): """Uses the :func:`fcntl.flock` to hard lock the lock file on unix systems.""" class AsyncWindowsFileLock(WindowsFileLock, BaseAsyncFileLock): """Uses the :func:`msvcrt.locking` to hard lock the lock file on windows systems.""" __all__ = [ "AsyncAcquireReturnProxy", "AsyncSoftFileLock", "AsyncUnixFileLock", "AsyncWindowsFileLock", "BaseAsyncFileLock", ] PK7QY=__virtualenv__/filelock-3.16.1-py3-none-any/filelock/py.typedPK7QY/ ?__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.py# file generated by setuptools_scm # don't change, don't track in version control TYPE_CHECKING = False if TYPE_CHECKING: from typing import Tuple, Union VERSION_TUPLE = Tuple[Union[int, str], ...] else: VERSION_TUPLE = object version: str __version__: str __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE __version__ = version = '3.16.1' __version_tuple__ = version_tuple = (3, 16, 1) PK7QYR4 N__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/METADATAMetadata-Version: 2.3 Name: filelock Version: 3.16.1 Summary: A platform independent file lock. Project-URL: Documentation, https://py-filelock.readthedocs.io Project-URL: Homepage, https://github.com/tox-dev/py-filelock Project-URL: Source, https://github.com/tox-dev/py-filelock Project-URL: Tracker, https://github.com/tox-dev/py-filelock/issues Maintainer-email: Bernát Gábor License-Expression: Unlicense License-File: LICENSE Keywords: application,cache,directory,log,user Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: The Unlicense (Unlicense) Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Topic :: Internet Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: System Requires-Python: >=3.8 Provides-Extra: docs Requires-Dist: furo>=2024.8.6; extra == 'docs' Requires-Dist: sphinx-autodoc-typehints>=2.4.1; extra == 'docs' Requires-Dist: sphinx>=8.0.2; extra == 'docs' Provides-Extra: testing Requires-Dist: covdefaults>=2.3; extra == 'testing' Requires-Dist: coverage>=7.6.1; extra == 'testing' Requires-Dist: diff-cover>=9.2; extra == 'testing' Requires-Dist: pytest-asyncio>=0.24; extra == 'testing' Requires-Dist: pytest-cov>=5; extra == 'testing' Requires-Dist: pytest-mock>=3.14; extra == 'testing' Requires-Dist: pytest-timeout>=2.3.1; extra == 'testing' Requires-Dist: pytest>=8.3.3; extra == 'testing' Requires-Dist: virtualenv>=20.26.4; extra == 'testing' Provides-Extra: typing Requires-Dist: typing-extensions>=4.12.2; (python_version < '3.11') and extra == 'typing' Description-Content-Type: text/markdown # filelock [![PyPI](https://img.shields.io/pypi/v/filelock)](https://pypi.org/project/filelock/) [![Supported Python versions](https://img.shields.io/pypi/pyversions/filelock.svg)](https://pypi.org/project/filelock/) [![Documentation status](https://readthedocs.org/projects/py-filelock/badge/?version=latest)](https://py-filelock.readthedocs.io/en/latest/?badge=latest) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Downloads](https://static.pepy.tech/badge/filelock/month)](https://pepy.tech/project/filelock) [![check](https://github.com/tox-dev/py-filelock/actions/workflows/check.yml/badge.svg)](https://github.com/tox-dev/py-filelock/actions/workflows/check.yml) For more information checkout the [official documentation](https://py-filelock.readthedocs.io/en/latest/index.html). PK7QYtWWK__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/WHEELWheel-Version: 1.0 Generator: hatchling 1.25.0 Root-Is-Purelib: true Tag: py3-none-any PK7QYaV__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/licenses/LICENSEThis is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to PK7QYndy""L__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/RECORDfilelock/__init__.py,sha256=_t_-OAGXo_qyPa9lNQ1YnzVYEvSW3I0onPqzpomsVVg,1769 filelock/_api.py,sha256=GVeBEGjpDD8S1bYqG6_u0MZfbYHS6XrHs_n3PVKq-h0,14541 filelock/_error.py,sha256=-5jMcjTu60YAvAO1UbqDD1GIEjVkwr8xCFwDBtMeYDg,787 filelock/_soft.py,sha256=haqtc_TB_KJbYv2a8iuEAclKuM4fMG1vTcp28sK919c,1711 filelock/_unix.py,sha256=-FXP0tjInBHUYygOlMpp4taUmD87QOkrD_4ybg_iT7Q,2259 filelock/_util.py,sha256=QHBoNFIYfbAThhotH3Q8E2acFc84wpG49-T-uu017ZE,1715 filelock/_windows.py,sha256=eMKL8dZKrgekf5VYVGR14an29JGEInRtUO8ui9ABywg,2177 filelock/asyncio.py,sha256=3D4JP4Ms5IXTGib5eOekyr6uH6rZlieV_moVGY36juA,12463 filelock/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 filelock/version.py,sha256=KSOBzuLwiqiVWDPGfMj1ntr25YrY6JBDr8RvinQX_FM,413 filelock-3.16.1.dist-info/METADATA,sha256=LXL5-XQe_eTKkdNs76A6jSicQ1DBSTXqkDcjsprWvIM,2944 filelock-3.16.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87 filelock-3.16.1.dist-info/licenses/LICENSE,sha256=iNm062BXnBkew5HKBMFhMFctfu3EqG2qWL8oxuFMm80,1210 filelock-3.16.1.dist-info/RECORD,, PK7QYmI W WG__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.py""" Utilities for determining application-specific dirs. See for details and usage. """ from __future__ import annotations import os import sys from typing import TYPE_CHECKING from .api import PlatformDirsABC from .version import __version__ from .version import __version_tuple__ as __version_info__ if TYPE_CHECKING: from pathlib import Path from typing import Literal if sys.platform == "win32": from platformdirs.windows import Windows as _Result elif sys.platform == "darwin": from platformdirs.macos import MacOS as _Result else: from platformdirs.unix import Unix as _Result def _set_platform_dir_class() -> type[PlatformDirsABC]: if os.getenv("ANDROID_DATA") == "/data" and os.getenv("ANDROID_ROOT") == "/system": if os.getenv("SHELL") or os.getenv("PREFIX"): return _Result from platformdirs.android import _android_folder # noqa: PLC0415 if _android_folder() is not None: from platformdirs.android import Android # noqa: PLC0415 return Android # return to avoid redefinition of a result return _Result if TYPE_CHECKING: # Work around mypy issue: https://github.com/python/mypy/issues/10962 PlatformDirs = _Result else: PlatformDirs = _set_platform_dir_class() #: Currently active platform AppDirs = PlatformDirs #: Backwards compatibility with appdirs def user_data_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, roaming: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param roaming: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: data directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, roaming=roaming, ensure_exists=ensure_exists, ).user_data_dir def site_data_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, multipath: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param multipath: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: data directory shared by users """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, multipath=multipath, ensure_exists=ensure_exists, ).site_data_dir def user_config_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, roaming: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param roaming: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: config directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, roaming=roaming, ensure_exists=ensure_exists, ).user_config_dir def site_config_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, multipath: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param multipath: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: config directory shared by the users """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, multipath=multipath, ensure_exists=ensure_exists, ).site_config_dir def user_cache_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: cache directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).user_cache_dir def site_cache_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `opinion `. :param ensure_exists: See `ensure_exists `. :returns: cache directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).site_cache_dir def user_state_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, roaming: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param roaming: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: state directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, roaming=roaming, ensure_exists=ensure_exists, ).user_state_dir def user_log_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: log directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).user_log_dir def user_documents_dir() -> str: """:returns: documents directory tied to the user""" return PlatformDirs().user_documents_dir def user_downloads_dir() -> str: """:returns: downloads directory tied to the user""" return PlatformDirs().user_downloads_dir def user_pictures_dir() -> str: """:returns: pictures directory tied to the user""" return PlatformDirs().user_pictures_dir def user_videos_dir() -> str: """:returns: videos directory tied to the user""" return PlatformDirs().user_videos_dir def user_music_dir() -> str: """:returns: music directory tied to the user""" return PlatformDirs().user_music_dir def user_desktop_dir() -> str: """:returns: desktop directory tied to the user""" return PlatformDirs().user_desktop_dir def user_runtime_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `opinion `. :param ensure_exists: See `ensure_exists `. :returns: runtime directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).user_runtime_dir def site_runtime_dir( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> str: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `opinion `. :param ensure_exists: See `ensure_exists `. :returns: runtime directory shared by users """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).site_runtime_dir def user_data_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, roaming: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param roaming: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: data path tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, roaming=roaming, ensure_exists=ensure_exists, ).user_data_path def site_data_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, multipath: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param multipath: See `multipath `. :param ensure_exists: See `ensure_exists `. :returns: data path shared by users """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, multipath=multipath, ensure_exists=ensure_exists, ).site_data_path def user_config_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, roaming: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param roaming: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: config path tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, roaming=roaming, ensure_exists=ensure_exists, ).user_config_path def site_config_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, multipath: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param multipath: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: config path shared by the users """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, multipath=multipath, ensure_exists=ensure_exists, ).site_config_path def site_cache_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `opinion `. :param ensure_exists: See `ensure_exists `. :returns: cache directory tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).site_cache_path def user_cache_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: cache path tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).user_cache_path def user_state_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, roaming: bool = False, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param roaming: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: state path tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, roaming=roaming, ensure_exists=ensure_exists, ).user_state_path def user_log_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `roaming `. :param ensure_exists: See `ensure_exists `. :returns: log path tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).user_log_path def user_documents_path() -> Path: """:returns: documents a path tied to the user""" return PlatformDirs().user_documents_path def user_downloads_path() -> Path: """:returns: downloads path tied to the user""" return PlatformDirs().user_downloads_path def user_pictures_path() -> Path: """:returns: pictures path tied to the user""" return PlatformDirs().user_pictures_path def user_videos_path() -> Path: """:returns: videos path tied to the user""" return PlatformDirs().user_videos_path def user_music_path() -> Path: """:returns: music path tied to the user""" return PlatformDirs().user_music_path def user_desktop_path() -> Path: """:returns: desktop path tied to the user""" return PlatformDirs().user_desktop_path def user_runtime_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `opinion `. :param ensure_exists: See `ensure_exists `. :returns: runtime path tied to the user """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).user_runtime_path def site_runtime_path( appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> Path: """ :param appname: See `appname `. :param appauthor: See `appauthor `. :param version: See `version `. :param opinion: See `opinion `. :param ensure_exists: See `ensure_exists `. :returns: runtime path shared by users """ return PlatformDirs( appname=appname, appauthor=appauthor, version=version, opinion=opinion, ensure_exists=ensure_exists, ).site_runtime_path __all__ = [ "AppDirs", "PlatformDirs", "PlatformDirsABC", "__version__", "__version_info__", "site_cache_dir", "site_cache_path", "site_config_dir", "site_config_path", "site_data_dir", "site_data_path", "site_runtime_dir", "site_runtime_path", "user_cache_dir", "user_cache_path", "user_config_dir", "user_config_path", "user_data_dir", "user_data_path", "user_desktop_dir", "user_desktop_path", "user_documents_dir", "user_documents_path", "user_downloads_dir", "user_downloads_path", "user_log_dir", "user_log_path", "user_music_dir", "user_music_path", "user_pictures_dir", "user_pictures_path", "user_runtime_dir", "user_runtime_path", "user_state_dir", "user_state_path", "user_videos_dir", "user_videos_path", ] PK7QYxZ/G__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.py"""Main entry point.""" from __future__ import annotations from platformdirs import PlatformDirs, __version__ PROPS = ( "user_data_dir", "user_config_dir", "user_cache_dir", "user_state_dir", "user_log_dir", "user_documents_dir", "user_downloads_dir", "user_pictures_dir", "user_videos_dir", "user_music_dir", "user_runtime_dir", "site_data_dir", "site_config_dir", "site_cache_dir", "site_runtime_dir", ) def main() -> None: """Run the main entry point.""" app_name = "MyApp" app_author = "MyCompany" print(f"-- platformdirs {__version__} --") # noqa: T201 print("-- app dirs (with optional 'version')") # noqa: T201 dirs = PlatformDirs(app_name, app_author, version="1.0") for prop in PROPS: print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 print("\n-- app dirs (without optional 'version')") # noqa: T201 dirs = PlatformDirs(app_name, app_author) for prop in PROPS: print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 print("\n-- app dirs (without optional 'appauthor')") # noqa: T201 dirs = PlatformDirs(app_name) for prop in PROPS: print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 print("\n-- app dirs (with disabled 'appauthor')") # noqa: T201 dirs = PlatformDirs(app_name, appauthor=False) for prop in PROPS: print(f"{prop}: {getattr(dirs, prop)}") # noqa: T201 if __name__ == "__main__": main() PK7QYl/#/#F__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.py"""Android.""" from __future__ import annotations import os import re import sys from functools import lru_cache from typing import TYPE_CHECKING, cast from .api import PlatformDirsABC class Android(PlatformDirsABC): """ Follows the guidance `from here `_. Makes use of the `appname `, `version `, `ensure_exists `. """ @property def user_data_dir(self) -> str: """:return: data directory tied to the user, e.g. ``/data/user///files/``""" return self._append_app_name_and_version(cast(str, _android_folder()), "files") @property def site_data_dir(self) -> str: """:return: data directory shared by users, same as `user_data_dir`""" return self.user_data_dir @property def user_config_dir(self) -> str: """ :return: config directory tied to the user, e.g. \ ``/data/user///shared_prefs/`` """ return self._append_app_name_and_version(cast(str, _android_folder()), "shared_prefs") @property def site_config_dir(self) -> str: """:return: config directory shared by the users, same as `user_config_dir`""" return self.user_config_dir @property def user_cache_dir(self) -> str: """:return: cache directory tied to the user, e.g.,``/data/user///cache/``""" return self._append_app_name_and_version(cast(str, _android_folder()), "cache") @property def site_cache_dir(self) -> str: """:return: cache directory shared by users, same as `user_cache_dir`""" return self.user_cache_dir @property def user_state_dir(self) -> str: """:return: state directory tied to the user, same as `user_data_dir`""" return self.user_data_dir @property def user_log_dir(self) -> str: """ :return: log directory tied to the user, same as `user_cache_dir` if not opinionated else ``log`` in it, e.g. ``/data/user///cache//log`` """ path = self.user_cache_dir if self.opinion: path = os.path.join(path, "log") # noqa: PTH118 return path @property def user_documents_dir(self) -> str: """:return: documents directory tied to the user e.g. ``/storage/emulated/0/Documents``""" return _android_documents_folder() @property def user_downloads_dir(self) -> str: """:return: downloads directory tied to the user e.g. ``/storage/emulated/0/Downloads``""" return _android_downloads_folder() @property def user_pictures_dir(self) -> str: """:return: pictures directory tied to the user e.g. ``/storage/emulated/0/Pictures``""" return _android_pictures_folder() @property def user_videos_dir(self) -> str: """:return: videos directory tied to the user e.g. ``/storage/emulated/0/DCIM/Camera``""" return _android_videos_folder() @property def user_music_dir(self) -> str: """:return: music directory tied to the user e.g. ``/storage/emulated/0/Music``""" return _android_music_folder() @property def user_desktop_dir(self) -> str: """:return: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``""" return "/storage/emulated/0/Desktop" @property def user_runtime_dir(self) -> str: """ :return: runtime directory tied to the user, same as `user_cache_dir` if not opinionated else ``tmp`` in it, e.g. ``/data/user///cache//tmp`` """ path = self.user_cache_dir if self.opinion: path = os.path.join(path, "tmp") # noqa: PTH118 return path @property def site_runtime_dir(self) -> str: """:return: runtime directory shared by users, same as `user_runtime_dir`""" return self.user_runtime_dir @lru_cache(maxsize=1) def _android_folder() -> str | None: # noqa: C901 """:return: base folder for the Android OS or None if it cannot be found""" result: str | None = None # type checker isn't happy with our "import android", just don't do this when type checking see # https://stackoverflow.com/a/61394121 if not TYPE_CHECKING: try: # First try to get a path to android app using python4android (if available)... from android import mActivity # noqa: PLC0415 context = cast("android.content.Context", mActivity.getApplicationContext()) # noqa: F821 result = context.getFilesDir().getParentFile().getAbsolutePath() except Exception: # noqa: BLE001 result = None if result is None: try: # ...and fall back to using plain pyjnius, if python4android isn't available or doesn't deliver any useful # result... from jnius import autoclass # noqa: PLC0415 context = autoclass("android.content.Context") result = context.getFilesDir().getParentFile().getAbsolutePath() except Exception: # noqa: BLE001 result = None if result is None: # and if that fails, too, find an android folder looking at path on the sys.path # warning: only works for apps installed under /data, not adopted storage etc. pattern = re.compile(r"/data/(data|user/\d+)/(.+)/files") for path in sys.path: if pattern.match(path): result = path.split("/files")[0] break else: result = None if result is None: # one last try: find an android folder looking at path on the sys.path taking adopted storage paths into # account pattern = re.compile(r"/mnt/expand/[a-fA-F0-9-]{36}/(data|user/\d+)/(.+)/files") for path in sys.path: if pattern.match(path): result = path.split("/files")[0] break else: result = None return result @lru_cache(maxsize=1) def _android_documents_folder() -> str: """:return: documents folder for the Android OS""" # Get directories with pyjnius try: from jnius import autoclass # noqa: PLC0415 context = autoclass("android.content.Context") environment = autoclass("android.os.Environment") documents_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOCUMENTS).getAbsolutePath() except Exception: # noqa: BLE001 documents_dir = "/storage/emulated/0/Documents" return documents_dir @lru_cache(maxsize=1) def _android_downloads_folder() -> str: """:return: downloads folder for the Android OS""" # Get directories with pyjnius try: from jnius import autoclass # noqa: PLC0415 context = autoclass("android.content.Context") environment = autoclass("android.os.Environment") downloads_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DOWNLOADS).getAbsolutePath() except Exception: # noqa: BLE001 downloads_dir = "/storage/emulated/0/Downloads" return downloads_dir @lru_cache(maxsize=1) def _android_pictures_folder() -> str: """:return: pictures folder for the Android OS""" # Get directories with pyjnius try: from jnius import autoclass # noqa: PLC0415 context = autoclass("android.content.Context") environment = autoclass("android.os.Environment") pictures_dir: str = context.getExternalFilesDir(environment.DIRECTORY_PICTURES).getAbsolutePath() except Exception: # noqa: BLE001 pictures_dir = "/storage/emulated/0/Pictures" return pictures_dir @lru_cache(maxsize=1) def _android_videos_folder() -> str: """:return: videos folder for the Android OS""" # Get directories with pyjnius try: from jnius import autoclass # noqa: PLC0415 context = autoclass("android.content.Context") environment = autoclass("android.os.Environment") videos_dir: str = context.getExternalFilesDir(environment.DIRECTORY_DCIM).getAbsolutePath() except Exception: # noqa: BLE001 videos_dir = "/storage/emulated/0/DCIM/Camera" return videos_dir @lru_cache(maxsize=1) def _android_music_folder() -> str: """:return: music folder for the Android OS""" # Get directories with pyjnius try: from jnius import autoclass # noqa: PLC0415 context = autoclass("android.content.Context") environment = autoclass("android.os.Environment") music_dir: str = context.getExternalFilesDir(environment.DIRECTORY_MUSIC).getAbsolutePath() except Exception: # noqa: BLE001 music_dir = "/storage/emulated/0/Music" return music_dir __all__ = [ "Android", ] PK7QYV($$B__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.py"""Base API.""" from __future__ import annotations import os from abc import ABC, abstractmethod from pathlib import Path from typing import TYPE_CHECKING if TYPE_CHECKING: from typing import Iterator, Literal class PlatformDirsABC(ABC): # noqa: PLR0904 """Abstract base class for platform directories.""" def __init__( # noqa: PLR0913, PLR0917 self, appname: str | None = None, appauthor: str | None | Literal[False] = None, version: str | None = None, roaming: bool = False, # noqa: FBT001, FBT002 multipath: bool = False, # noqa: FBT001, FBT002 opinion: bool = True, # noqa: FBT001, FBT002 ensure_exists: bool = False, # noqa: FBT001, FBT002 ) -> None: """ Create a new platform directory. :param appname: See `appname`. :param appauthor: See `appauthor`. :param version: See `version`. :param roaming: See `roaming`. :param multipath: See `multipath`. :param opinion: See `opinion`. :param ensure_exists: See `ensure_exists`. """ self.appname = appname #: The name of application. self.appauthor = appauthor """ The name of the app author or distributing body for this application. Typically, it is the owning company name. Defaults to `appname`. You may pass ``False`` to disable it. """ self.version = version """ An optional version path element to append to the path. You might want to use this if you want multiple versions of your app to be able to run independently. If used, this would typically be ``.``. """ self.roaming = roaming """ Whether to use the roaming appdata directory on Windows. That means that for users on a Windows network setup for roaming profiles, this user data will be synced on login (see `here `_). """ self.multipath = multipath """ An optional parameter which indicates that the entire list of data dirs should be returned. By default, the first item would only be returned. """ self.opinion = opinion #: A flag to indicating to use opinionated values. self.ensure_exists = ensure_exists """ Optionally create the directory (and any missing parents) upon access if it does not exist. By default, no directories are created. """ def _append_app_name_and_version(self, *base: str) -> str: params = list(base[1:]) if self.appname: params.append(self.appname) if self.version: params.append(self.version) path = os.path.join(base[0], *params) # noqa: PTH118 self._optionally_create_directory(path) return path def _optionally_create_directory(self, path: str) -> None: if self.ensure_exists: Path(path).mkdir(parents=True, exist_ok=True) def _first_item_as_path_if_multipath(self, directory: str) -> Path: if self.multipath: # If multipath is True, the first path is returned. directory = directory.split(os.pathsep)[0] return Path(directory) @property @abstractmethod def user_data_dir(self) -> str: """:return: data directory tied to the user""" @property @abstractmethod def site_data_dir(self) -> str: """:return: data directory shared by users""" @property @abstractmethod def user_config_dir(self) -> str: """:return: config directory tied to the user""" @property @abstractmethod def site_config_dir(self) -> str: """:return: config directory shared by the users""" @property @abstractmethod def user_cache_dir(self) -> str: """:return: cache directory tied to the user""" @property @abstractmethod def site_cache_dir(self) -> str: """:return: cache directory shared by users""" @property @abstractmethod def user_state_dir(self) -> str: """:return: state directory tied to the user""" @property @abstractmethod def user_log_dir(self) -> str: """:return: log directory tied to the user""" @property @abstractmethod def user_documents_dir(self) -> str: """:return: documents directory tied to the user""" @property @abstractmethod def user_downloads_dir(self) -> str: """:return: downloads directory tied to the user""" @property @abstractmethod def user_pictures_dir(self) -> str: """:return: pictures directory tied to the user""" @property @abstractmethod def user_videos_dir(self) -> str: """:return: videos directory tied to the user""" @property @abstractmethod def user_music_dir(self) -> str: """:return: music directory tied to the user""" @property @abstractmethod def user_desktop_dir(self) -> str: """:return: desktop directory tied to the user""" @property @abstractmethod def user_runtime_dir(self) -> str: """:return: runtime directory tied to the user""" @property @abstractmethod def site_runtime_dir(self) -> str: """:return: runtime directory shared by users""" @property def user_data_path(self) -> Path: """:return: data path tied to the user""" return Path(self.user_data_dir) @property def site_data_path(self) -> Path: """:return: data path shared by users""" return Path(self.site_data_dir) @property def user_config_path(self) -> Path: """:return: config path tied to the user""" return Path(self.user_config_dir) @property def site_config_path(self) -> Path: """:return: config path shared by the users""" return Path(self.site_config_dir) @property def user_cache_path(self) -> Path: """:return: cache path tied to the user""" return Path(self.user_cache_dir) @property def site_cache_path(self) -> Path: """:return: cache path shared by users""" return Path(self.site_cache_dir) @property def user_state_path(self) -> Path: """:return: state path tied to the user""" return Path(self.user_state_dir) @property def user_log_path(self) -> Path: """:return: log path tied to the user""" return Path(self.user_log_dir) @property def user_documents_path(self) -> Path: """:return: documents a path tied to the user""" return Path(self.user_documents_dir) @property def user_downloads_path(self) -> Path: """:return: downloads path tied to the user""" return Path(self.user_downloads_dir) @property def user_pictures_path(self) -> Path: """:return: pictures path tied to the user""" return Path(self.user_pictures_dir) @property def user_videos_path(self) -> Path: """:return: videos path tied to the user""" return Path(self.user_videos_dir) @property def user_music_path(self) -> Path: """:return: music path tied to the user""" return Path(self.user_music_dir) @property def user_desktop_path(self) -> Path: """:return: desktop path tied to the user""" return Path(self.user_desktop_dir) @property def user_runtime_path(self) -> Path: """:return: runtime path tied to the user""" return Path(self.user_runtime_dir) @property def site_runtime_path(self) -> Path: """:return: runtime path shared by users""" return Path(self.site_runtime_dir) def iter_config_dirs(self) -> Iterator[str]: """:yield: all user and site configuration directories.""" yield self.user_config_dir yield self.site_config_dir def iter_data_dirs(self) -> Iterator[str]: """:yield: all user and site data directories.""" yield self.user_data_dir yield self.site_data_dir def iter_cache_dirs(self) -> Iterator[str]: """:yield: all user and site cache directories.""" yield self.user_cache_dir yield self.site_cache_dir def iter_runtime_dirs(self) -> Iterator[str]: """:yield: all user and site runtime directories.""" yield self.user_runtime_dir yield self.site_runtime_dir def iter_config_paths(self) -> Iterator[Path]: """:yield: all user and site configuration paths.""" for path in self.iter_config_dirs(): yield Path(path) def iter_data_paths(self) -> Iterator[Path]: """:yield: all user and site data paths.""" for path in self.iter_data_dirs(): yield Path(path) def iter_cache_paths(self) -> Iterator[Path]: """:yield: all user and site cache paths.""" for path in self.iter_cache_dirs(): yield Path(path) def iter_runtime_paths(self) -> Iterator[Path]: """:yield: all user and site runtime paths.""" for path in self.iter_runtime_dirs(): yield Path(path) PK7QY  D__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.py"""macOS.""" from __future__ import annotations import os.path import sys from typing import TYPE_CHECKING from .api import PlatformDirsABC if TYPE_CHECKING: from pathlib import Path class MacOS(PlatformDirsABC): """ Platform directories for the macOS operating system. Follows the guidance from `Apple documentation `_. Makes use of the `appname `, `version `, `ensure_exists `. """ @property def user_data_dir(self) -> str: """:return: data directory tied to the user, e.g. ``~/Library/Application Support/$appname/$version``""" return self._append_app_name_and_version(os.path.expanduser("~/Library/Application Support")) # noqa: PTH111 @property def site_data_dir(self) -> str: """ :return: data directory shared by users, e.g. ``/Library/Application Support/$appname/$version``. If we're using a Python binary managed by `Homebrew `_, the directory will be under the Homebrew prefix, e.g. ``/opt/homebrew/share/$appname/$version``. If `multipath ` is enabled, and we're in Homebrew, the response is a multi-path string separated by ":", e.g. ``/opt/homebrew/share/$appname/$version:/Library/Application Support/$appname/$version`` """ is_homebrew = sys.prefix.startswith("/opt/homebrew") path_list = [self._append_app_name_and_version("/opt/homebrew/share")] if is_homebrew else [] path_list.append(self._append_app_name_and_version("/Library/Application Support")) if self.multipath: return os.pathsep.join(path_list) return path_list[0] @property def site_data_path(self) -> Path: """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" return self._first_item_as_path_if_multipath(self.site_data_dir) @property def user_config_dir(self) -> str: """:return: config directory tied to the user, same as `user_data_dir`""" return self.user_data_dir @property def site_config_dir(self) -> str: """:return: config directory shared by the users, same as `site_data_dir`""" return self.site_data_dir @property def user_cache_dir(self) -> str: """:return: cache directory tied to the user, e.g. ``~/Library/Caches/$appname/$version``""" return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches")) # noqa: PTH111 @property def site_cache_dir(self) -> str: """ :return: cache directory shared by users, e.g. ``/Library/Caches/$appname/$version``. If we're using a Python binary managed by `Homebrew `_, the directory will be under the Homebrew prefix, e.g. ``/opt/homebrew/var/cache/$appname/$version``. If `multipath ` is enabled, and we're in Homebrew, the response is a multi-path string separated by ":", e.g. ``/opt/homebrew/var/cache/$appname/$version:/Library/Caches/$appname/$version`` """ is_homebrew = sys.prefix.startswith("/opt/homebrew") path_list = [self._append_app_name_and_version("/opt/homebrew/var/cache")] if is_homebrew else [] path_list.append(self._append_app_name_and_version("/Library/Caches")) if self.multipath: return os.pathsep.join(path_list) return path_list[0] @property def site_cache_path(self) -> Path: """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" return self._first_item_as_path_if_multipath(self.site_cache_dir) @property def user_state_dir(self) -> str: """:return: state directory tied to the user, same as `user_data_dir`""" return self.user_data_dir @property def user_log_dir(self) -> str: """:return: log directory tied to the user, e.g. ``~/Library/Logs/$appname/$version``""" return self._append_app_name_and_version(os.path.expanduser("~/Library/Logs")) # noqa: PTH111 @property def user_documents_dir(self) -> str: """:return: documents directory tied to the user, e.g. ``~/Documents``""" return os.path.expanduser("~/Documents") # noqa: PTH111 @property def user_downloads_dir(self) -> str: """:return: downloads directory tied to the user, e.g. ``~/Downloads``""" return os.path.expanduser("~/Downloads") # noqa: PTH111 @property def user_pictures_dir(self) -> str: """:return: pictures directory tied to the user, e.g. ``~/Pictures``""" return os.path.expanduser("~/Pictures") # noqa: PTH111 @property def user_videos_dir(self) -> str: """:return: videos directory tied to the user, e.g. ``~/Movies``""" return os.path.expanduser("~/Movies") # noqa: PTH111 @property def user_music_dir(self) -> str: """:return: music directory tied to the user, e.g. ``~/Music``""" return os.path.expanduser("~/Music") # noqa: PTH111 @property def user_desktop_dir(self) -> str: """:return: desktop directory tied to the user, e.g. ``~/Desktop``""" return os.path.expanduser("~/Desktop") # noqa: PTH111 @property def user_runtime_dir(self) -> str: """:return: runtime directory tied to the user, e.g. ``~/Library/Caches/TemporaryItems/$appname/$version``""" return self._append_app_name_and_version(os.path.expanduser("~/Library/Caches/TemporaryItems")) # noqa: PTH111 @property def site_runtime_dir(self) -> str: """:return: runtime directory shared by users, same as `user_runtime_dir`""" return self.user_runtime_dir __all__ = [ "MacOS", ] PK7QYD__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/py.typedPK7QYܖ((C__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.py"""Unix.""" from __future__ import annotations import os import sys from configparser import ConfigParser from pathlib import Path from typing import Iterator, NoReturn from .api import PlatformDirsABC if sys.platform == "win32": def getuid() -> NoReturn: msg = "should only be used on Unix" raise RuntimeError(msg) else: from os import getuid class Unix(PlatformDirsABC): # noqa: PLR0904 """ On Unix/Linux, we follow the `XDG Basedir Spec `_. The spec allows overriding directories with environment variables. The examples shown are the default values, alongside the name of the environment variable that overrides them. Makes use of the `appname `, `version `, `multipath `, `opinion `, `ensure_exists `. """ @property def user_data_dir(self) -> str: """ :return: data directory tied to the user, e.g. ``~/.local/share/$appname/$version`` or ``$XDG_DATA_HOME/$appname/$version`` """ path = os.environ.get("XDG_DATA_HOME", "") if not path.strip(): path = os.path.expanduser("~/.local/share") # noqa: PTH111 return self._append_app_name_and_version(path) @property def _site_data_dirs(self) -> list[str]: path = os.environ.get("XDG_DATA_DIRS", "") if not path.strip(): path = f"/usr/local/share{os.pathsep}/usr/share" return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)] @property def site_data_dir(self) -> str: """ :return: data directories shared by users (if `multipath ` is enabled and ``XDG_DATA_DIRS`` is set and a multi path the response is also a multi path separated by the OS path separator), e.g. ``/usr/local/share/$appname/$version`` or ``/usr/share/$appname/$version`` """ # XDG default for $XDG_DATA_DIRS; only first, if multipath is False dirs = self._site_data_dirs if not self.multipath: return dirs[0] return os.pathsep.join(dirs) @property def user_config_dir(self) -> str: """ :return: config directory tied to the user, e.g. ``~/.config/$appname/$version`` or ``$XDG_CONFIG_HOME/$appname/$version`` """ path = os.environ.get("XDG_CONFIG_HOME", "") if not path.strip(): path = os.path.expanduser("~/.config") # noqa: PTH111 return self._append_app_name_and_version(path) @property def _site_config_dirs(self) -> list[str]: path = os.environ.get("XDG_CONFIG_DIRS", "") if not path.strip(): path = "/etc/xdg" return [self._append_app_name_and_version(p) for p in path.split(os.pathsep)] @property def site_config_dir(self) -> str: """ :return: config directories shared by users (if `multipath ` is enabled and ``XDG_CONFIG_DIRS`` is set and a multi path the response is also a multi path separated by the OS path separator), e.g. ``/etc/xdg/$appname/$version`` """ # XDG default for $XDG_CONFIG_DIRS only first, if multipath is False dirs = self._site_config_dirs if not self.multipath: return dirs[0] return os.pathsep.join(dirs) @property def user_cache_dir(self) -> str: """ :return: cache directory tied to the user, e.g. ``~/.cache/$appname/$version`` or ``~/$XDG_CACHE_HOME/$appname/$version`` """ path = os.environ.get("XDG_CACHE_HOME", "") if not path.strip(): path = os.path.expanduser("~/.cache") # noqa: PTH111 return self._append_app_name_and_version(path) @property def site_cache_dir(self) -> str: """:return: cache directory shared by users, e.g. ``/var/cache/$appname/$version``""" return self._append_app_name_and_version("/var/cache") @property def user_state_dir(self) -> str: """ :return: state directory tied to the user, e.g. ``~/.local/state/$appname/$version`` or ``$XDG_STATE_HOME/$appname/$version`` """ path = os.environ.get("XDG_STATE_HOME", "") if not path.strip(): path = os.path.expanduser("~/.local/state") # noqa: PTH111 return self._append_app_name_and_version(path) @property def user_log_dir(self) -> str: """:return: log directory tied to the user, same as `user_state_dir` if not opinionated else ``log`` in it""" path = self.user_state_dir if self.opinion: path = os.path.join(path, "log") # noqa: PTH118 self._optionally_create_directory(path) return path @property def user_documents_dir(self) -> str: """:return: documents directory tied to the user, e.g. ``~/Documents``""" return _get_user_media_dir("XDG_DOCUMENTS_DIR", "~/Documents") @property def user_downloads_dir(self) -> str: """:return: downloads directory tied to the user, e.g. ``~/Downloads``""" return _get_user_media_dir("XDG_DOWNLOAD_DIR", "~/Downloads") @property def user_pictures_dir(self) -> str: """:return: pictures directory tied to the user, e.g. ``~/Pictures``""" return _get_user_media_dir("XDG_PICTURES_DIR", "~/Pictures") @property def user_videos_dir(self) -> str: """:return: videos directory tied to the user, e.g. ``~/Videos``""" return _get_user_media_dir("XDG_VIDEOS_DIR", "~/Videos") @property def user_music_dir(self) -> str: """:return: music directory tied to the user, e.g. ``~/Music``""" return _get_user_media_dir("XDG_MUSIC_DIR", "~/Music") @property def user_desktop_dir(self) -> str: """:return: desktop directory tied to the user, e.g. ``~/Desktop``""" return _get_user_media_dir("XDG_DESKTOP_DIR", "~/Desktop") @property def user_runtime_dir(self) -> str: """ :return: runtime directory tied to the user, e.g. ``/run/user/$(id -u)/$appname/$version`` or ``$XDG_RUNTIME_DIR/$appname/$version``. For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/user/$(id -u)/$appname/$version`` if exists, otherwise ``/tmp/runtime-$(id -u)/$appname/$version``, if``$XDG_RUNTIME_DIR`` is not set. """ path = os.environ.get("XDG_RUNTIME_DIR", "") if not path.strip(): if sys.platform.startswith(("freebsd", "openbsd", "netbsd")): path = f"/var/run/user/{getuid()}" if not Path(path).exists(): path = f"/tmp/runtime-{getuid()}" # noqa: S108 else: path = f"/run/user/{getuid()}" return self._append_app_name_and_version(path) @property def site_runtime_dir(self) -> str: """ :return: runtime directory shared by users, e.g. ``/run/$appname/$version`` or \ ``$XDG_RUNTIME_DIR/$appname/$version``. Note that this behaves almost exactly like `user_runtime_dir` if ``$XDG_RUNTIME_DIR`` is set, but will fall back to paths associated to the root user instead of a regular logged-in user if it's not set. If you wish to ensure that a logged-in root user path is returned e.g. ``/run/user/0``, use `user_runtime_dir` instead. For FreeBSD/OpenBSD/NetBSD, it would return ``/var/run/$appname/$version`` if ``$XDG_RUNTIME_DIR`` is not set. """ path = os.environ.get("XDG_RUNTIME_DIR", "") if not path.strip(): if sys.platform.startswith(("freebsd", "openbsd", "netbsd")): path = "/var/run" else: path = "/run" return self._append_app_name_and_version(path) @property def site_data_path(self) -> Path: """:return: data path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" return self._first_item_as_path_if_multipath(self.site_data_dir) @property def site_config_path(self) -> Path: """:return: config path shared by the users, returns the first item, even if ``multipath`` is set to ``True``""" return self._first_item_as_path_if_multipath(self.site_config_dir) @property def site_cache_path(self) -> Path: """:return: cache path shared by users. Only return the first item, even if ``multipath`` is set to ``True``""" return self._first_item_as_path_if_multipath(self.site_cache_dir) def iter_config_dirs(self) -> Iterator[str]: """:yield: all user and site configuration directories.""" yield self.user_config_dir yield from self._site_config_dirs def iter_data_dirs(self) -> Iterator[str]: """:yield: all user and site data directories.""" yield self.user_data_dir yield from self._site_data_dirs def _get_user_media_dir(env_var: str, fallback_tilde_path: str) -> str: media_dir = _get_user_dirs_folder(env_var) if media_dir is None: media_dir = os.environ.get(env_var, "").strip() if not media_dir: media_dir = os.path.expanduser(fallback_tilde_path) # noqa: PTH111 return media_dir def _get_user_dirs_folder(key: str) -> str | None: """ Return directory from user-dirs.dirs config file. See https://freedesktop.org/wiki/Software/xdg-user-dirs/. """ user_dirs_config_path = Path(Unix().user_config_dir) / "user-dirs.dirs" if user_dirs_config_path.exists(): parser = ConfigParser() with user_dirs_config_path.open() as stream: # Add fake section header, so ConfigParser doesn't complain parser.read_string(f"[top]\n{stream.read()}") if key not in parser["top"]: return None path = parser["top"][key].strip('"') # Handle relative home paths return path.replace("$HOME", os.path.expanduser("~")) # noqa: PTH111 return None __all__ = [ "Unix", ] PK7QYl) F__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.py# file generated by setuptools_scm # don't change, don't track in version control TYPE_CHECKING = False if TYPE_CHECKING: from typing import Tuple, Union VERSION_TUPLE = Tuple[Union[int, str], ...] else: VERSION_TUPLE = object version: str __version__: str __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE __version__ = version = '4.3.6' __version_tuple__ = version_tuple = (4, 3, 6) PK7QY''F__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.py"""Windows.""" from __future__ import annotations import os import sys from functools import lru_cache from typing import TYPE_CHECKING from .api import PlatformDirsABC if TYPE_CHECKING: from collections.abc import Callable class Windows(PlatformDirsABC): """ `MSDN on where to store app data files `_. Makes use of the `appname `, `appauthor `, `version `, `roaming `, `opinion `, `ensure_exists `. """ @property def user_data_dir(self) -> str: """ :return: data directory tied to the user, e.g. ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname`` (not roaming) or ``%USERPROFILE%\\AppData\\Roaming\\$appauthor\\$appname`` (roaming) """ const = "CSIDL_APPDATA" if self.roaming else "CSIDL_LOCAL_APPDATA" path = os.path.normpath(get_win_folder(const)) return self._append_parts(path) def _append_parts(self, path: str, *, opinion_value: str | None = None) -> str: params = [] if self.appname: if self.appauthor is not False: author = self.appauthor or self.appname params.append(author) params.append(self.appname) if opinion_value is not None and self.opinion: params.append(opinion_value) if self.version: params.append(self.version) path = os.path.join(path, *params) # noqa: PTH118 self._optionally_create_directory(path) return path @property def site_data_dir(self) -> str: """:return: data directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname``""" path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA")) return self._append_parts(path) @property def user_config_dir(self) -> str: """:return: config directory tied to the user, same as `user_data_dir`""" return self.user_data_dir @property def site_config_dir(self) -> str: """:return: config directory shared by the users, same as `site_data_dir`""" return self.site_data_dir @property def user_cache_dir(self) -> str: """ :return: cache directory tied to the user (if opinionated with ``Cache`` folder within ``$appname``) e.g. ``%USERPROFILE%\\AppData\\Local\\$appauthor\\$appname\\Cache\\$version`` """ path = os.path.normpath(get_win_folder("CSIDL_LOCAL_APPDATA")) return self._append_parts(path, opinion_value="Cache") @property def site_cache_dir(self) -> str: """:return: cache directory shared by users, e.g. ``C:\\ProgramData\\$appauthor\\$appname\\Cache\\$version``""" path = os.path.normpath(get_win_folder("CSIDL_COMMON_APPDATA")) return self._append_parts(path, opinion_value="Cache") @property def user_state_dir(self) -> str: """:return: state directory tied to the user, same as `user_data_dir`""" return self.user_data_dir @property def user_log_dir(self) -> str: """:return: log directory tied to the user, same as `user_data_dir` if not opinionated else ``Logs`` in it""" path = self.user_data_dir if self.opinion: path = os.path.join(path, "Logs") # noqa: PTH118 self._optionally_create_directory(path) return path @property def user_documents_dir(self) -> str: """:return: documents directory tied to the user e.g. ``%USERPROFILE%\\Documents``""" return os.path.normpath(get_win_folder("CSIDL_PERSONAL")) @property def user_downloads_dir(self) -> str: """:return: downloads directory tied to the user e.g. ``%USERPROFILE%\\Downloads``""" return os.path.normpath(get_win_folder("CSIDL_DOWNLOADS")) @property def user_pictures_dir(self) -> str: """:return: pictures directory tied to the user e.g. ``%USERPROFILE%\\Pictures``""" return os.path.normpath(get_win_folder("CSIDL_MYPICTURES")) @property def user_videos_dir(self) -> str: """:return: videos directory tied to the user e.g. ``%USERPROFILE%\\Videos``""" return os.path.normpath(get_win_folder("CSIDL_MYVIDEO")) @property def user_music_dir(self) -> str: """:return: music directory tied to the user e.g. ``%USERPROFILE%\\Music``""" return os.path.normpath(get_win_folder("CSIDL_MYMUSIC")) @property def user_desktop_dir(self) -> str: """:return: desktop directory tied to the user, e.g. ``%USERPROFILE%\\Desktop``""" return os.path.normpath(get_win_folder("CSIDL_DESKTOPDIRECTORY")) @property def user_runtime_dir(self) -> str: """ :return: runtime directory tied to the user, e.g. ``%USERPROFILE%\\AppData\\Local\\Temp\\$appauthor\\$appname`` """ path = os.path.normpath(os.path.join(get_win_folder("CSIDL_LOCAL_APPDATA"), "Temp")) # noqa: PTH118 return self._append_parts(path) @property def site_runtime_dir(self) -> str: """:return: runtime directory shared by users, same as `user_runtime_dir`""" return self.user_runtime_dir def get_win_folder_from_env_vars(csidl_name: str) -> str: """Get folder from environment variables.""" result = get_win_folder_if_csidl_name_not_env_var(csidl_name) if result is not None: return result env_var_name = { "CSIDL_APPDATA": "APPDATA", "CSIDL_COMMON_APPDATA": "ALLUSERSPROFILE", "CSIDL_LOCAL_APPDATA": "LOCALAPPDATA", }.get(csidl_name) if env_var_name is None: msg = f"Unknown CSIDL name: {csidl_name}" raise ValueError(msg) result = os.environ.get(env_var_name) if result is None: msg = f"Unset environment variable: {env_var_name}" raise ValueError(msg) return result def get_win_folder_if_csidl_name_not_env_var(csidl_name: str) -> str | None: """Get a folder for a CSIDL name that does not exist as an environment variable.""" if csidl_name == "CSIDL_PERSONAL": return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Documents") # noqa: PTH118 if csidl_name == "CSIDL_DOWNLOADS": return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Downloads") # noqa: PTH118 if csidl_name == "CSIDL_MYPICTURES": return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Pictures") # noqa: PTH118 if csidl_name == "CSIDL_MYVIDEO": return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Videos") # noqa: PTH118 if csidl_name == "CSIDL_MYMUSIC": return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Music") # noqa: PTH118 return None def get_win_folder_from_registry(csidl_name: str) -> str: """ Get folder from the registry. This is a fallback technique at best. I'm not sure if using the registry for these guarantees us the correct answer for all CSIDL_* names. """ shell_folder_name = { "CSIDL_APPDATA": "AppData", "CSIDL_COMMON_APPDATA": "Common AppData", "CSIDL_LOCAL_APPDATA": "Local AppData", "CSIDL_PERSONAL": "Personal", "CSIDL_DOWNLOADS": "{374DE290-123F-4565-9164-39C4925E467B}", "CSIDL_MYPICTURES": "My Pictures", "CSIDL_MYVIDEO": "My Video", "CSIDL_MYMUSIC": "My Music", }.get(csidl_name) if shell_folder_name is None: msg = f"Unknown CSIDL name: {csidl_name}" raise ValueError(msg) if sys.platform != "win32": # only needed for mypy type checker to know that this code runs only on Windows raise NotImplementedError import winreg # noqa: PLC0415 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders") directory, _ = winreg.QueryValueEx(key, shell_folder_name) return str(directory) def get_win_folder_via_ctypes(csidl_name: str) -> str: """Get folder with ctypes.""" # There is no 'CSIDL_DOWNLOADS'. # Use 'CSIDL_PROFILE' (40) and append the default folder 'Downloads' instead. # https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid import ctypes # noqa: PLC0415 csidl_const = { "CSIDL_APPDATA": 26, "CSIDL_COMMON_APPDATA": 35, "CSIDL_LOCAL_APPDATA": 28, "CSIDL_PERSONAL": 5, "CSIDL_MYPICTURES": 39, "CSIDL_MYVIDEO": 14, "CSIDL_MYMUSIC": 13, "CSIDL_DOWNLOADS": 40, "CSIDL_DESKTOPDIRECTORY": 16, }.get(csidl_name) if csidl_const is None: msg = f"Unknown CSIDL name: {csidl_name}" raise ValueError(msg) buf = ctypes.create_unicode_buffer(1024) windll = getattr(ctypes, "windll") # noqa: B009 # using getattr to avoid false positive with mypy type checker windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf) # Downgrade to short path name if it has high-bit chars. if any(ord(c) > 255 for c in buf): # noqa: PLR2004 buf2 = ctypes.create_unicode_buffer(1024) if windll.kernel32.GetShortPathNameW(buf.value, buf2, 1024): buf = buf2 if csidl_name == "CSIDL_DOWNLOADS": return os.path.join(buf.value, "Downloads") # noqa: PTH118 return buf.value def _pick_get_win_folder() -> Callable[[str], str]: try: import ctypes # noqa: PLC0415 except ImportError: pass else: if hasattr(ctypes, "windll"): return get_win_folder_via_ctypes try: import winreg # noqa: PLC0415, F401 except ImportError: return get_win_folder_from_env_vars else: return get_win_folder_from_registry get_win_folder = lru_cache(maxsize=None)(_pick_get_win_folder()) __all__ = [ "Windows", ] PK7QY;F\.\.T__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/METADATAMetadata-Version: 2.3 Name: platformdirs Version: 4.3.6 Summary: A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`. Project-URL: Changelog, https://github.com/tox-dev/platformdirs/releases Project-URL: Documentation, https://platformdirs.readthedocs.io Project-URL: Homepage, https://github.com/tox-dev/platformdirs Project-URL: Source, https://github.com/tox-dev/platformdirs Project-URL: Tracker, https://github.com/tox-dev/platformdirs/issues Maintainer-email: Bernát Gábor , Julian Berman , Ofek Lev , Ronny Pfannschmidt License-Expression: MIT License-File: LICENSE Keywords: appdirs,application,cache,directory,log,user Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries :: Python Modules Requires-Python: >=3.8 Provides-Extra: docs Requires-Dist: furo>=2024.8.6; extra == 'docs' Requires-Dist: proselint>=0.14; extra == 'docs' Requires-Dist: sphinx-autodoc-typehints>=2.4; extra == 'docs' Requires-Dist: sphinx>=8.0.2; extra == 'docs' Provides-Extra: test Requires-Dist: appdirs==1.4.4; extra == 'test' Requires-Dist: covdefaults>=2.3; extra == 'test' Requires-Dist: pytest-cov>=5; extra == 'test' Requires-Dist: pytest-mock>=3.14; extra == 'test' Requires-Dist: pytest>=8.3.2; extra == 'test' Provides-Extra: type Requires-Dist: mypy>=1.11.2; extra == 'type' Description-Content-Type: text/x-rst The problem =========== .. image:: https://badge.fury.io/py/platformdirs.svg :target: https://badge.fury.io/py/platformdirs .. image:: https://img.shields.io/pypi/pyversions/platformdirs.svg :target: https://pypi.python.org/pypi/platformdirs/ .. image:: https://github.com/tox-dev/platformdirs/actions/workflows/check.yaml/badge.svg :target: https://github.com/platformdirs/platformdirs/actions .. image:: https://static.pepy.tech/badge/platformdirs/month :target: https://pepy.tech/project/platformdirs When writing desktop application, finding the right location to store user data and configuration varies per platform. Even for single-platform apps, there may by plenty of nuances in figuring out the right location. For example, if running on macOS, you should use:: ~/Library/Application Support/ If on Windows (at least English Win) that should be:: C:\Documents and Settings\\Application Data\Local Settings\\ or possibly:: C:\Documents and Settings\\Application Data\\ for `roaming profiles `_ but that is another story. On Linux (and other Unices), according to the `XDG Basedir Spec`_, it should be:: ~/.local/share/ .. _XDG Basedir Spec: https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html ``platformdirs`` to the rescue ============================== This kind of thing is what the ``platformdirs`` package is for. ``platformdirs`` will help you choose an appropriate: - user data dir (``user_data_dir``) - user config dir (``user_config_dir``) - user cache dir (``user_cache_dir``) - site data dir (``site_data_dir``) - site config dir (``site_config_dir``) - user log dir (``user_log_dir``) - user documents dir (``user_documents_dir``) - user downloads dir (``user_downloads_dir``) - user pictures dir (``user_pictures_dir``) - user videos dir (``user_videos_dir``) - user music dir (``user_music_dir``) - user desktop dir (``user_desktop_dir``) - user runtime dir (``user_runtime_dir``) And also: - Is slightly opinionated on the directory names used. Look for "OPINION" in documentation and code for when an opinion is being applied. Example output ============== On macOS: .. code-block:: pycon >>> from platformdirs import * >>> appname = "SuperApp" >>> appauthor = "Acme" >>> user_data_dir(appname, appauthor) '/Users/trentm/Library/Application Support/SuperApp' >>> site_data_dir(appname, appauthor) '/Library/Application Support/SuperApp' >>> user_cache_dir(appname, appauthor) '/Users/trentm/Library/Caches/SuperApp' >>> user_log_dir(appname, appauthor) '/Users/trentm/Library/Logs/SuperApp' >>> user_documents_dir() '/Users/trentm/Documents' >>> user_downloads_dir() '/Users/trentm/Downloads' >>> user_pictures_dir() '/Users/trentm/Pictures' >>> user_videos_dir() '/Users/trentm/Movies' >>> user_music_dir() '/Users/trentm/Music' >>> user_desktop_dir() '/Users/trentm/Desktop' >>> user_runtime_dir(appname, appauthor) '/Users/trentm/Library/Caches/TemporaryItems/SuperApp' On Windows: .. code-block:: pycon >>> from platformdirs import * >>> appname = "SuperApp" >>> appauthor = "Acme" >>> user_data_dir(appname, appauthor) 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp' >>> user_data_dir(appname, appauthor, roaming=True) 'C:\\Users\\trentm\\AppData\\Roaming\\Acme\\SuperApp' >>> user_cache_dir(appname, appauthor) 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Cache' >>> user_log_dir(appname, appauthor) 'C:\\Users\\trentm\\AppData\\Local\\Acme\\SuperApp\\Logs' >>> user_documents_dir() 'C:\\Users\\trentm\\Documents' >>> user_downloads_dir() 'C:\\Users\\trentm\\Downloads' >>> user_pictures_dir() 'C:\\Users\\trentm\\Pictures' >>> user_videos_dir() 'C:\\Users\\trentm\\Videos' >>> user_music_dir() 'C:\\Users\\trentm\\Music' >>> user_desktop_dir() 'C:\\Users\\trentm\\Desktop' >>> user_runtime_dir(appname, appauthor) 'C:\\Users\\trentm\\AppData\\Local\\Temp\\Acme\\SuperApp' On Linux: .. code-block:: pycon >>> from platformdirs import * >>> appname = "SuperApp" >>> appauthor = "Acme" >>> user_data_dir(appname, appauthor) '/home/trentm/.local/share/SuperApp' >>> site_data_dir(appname, appauthor) '/usr/local/share/SuperApp' >>> site_data_dir(appname, appauthor, multipath=True) '/usr/local/share/SuperApp:/usr/share/SuperApp' >>> user_cache_dir(appname, appauthor) '/home/trentm/.cache/SuperApp' >>> user_log_dir(appname, appauthor) '/home/trentm/.local/state/SuperApp/log' >>> user_config_dir(appname) '/home/trentm/.config/SuperApp' >>> user_documents_dir() '/home/trentm/Documents' >>> user_downloads_dir() '/home/trentm/Downloads' >>> user_pictures_dir() '/home/trentm/Pictures' >>> user_videos_dir() '/home/trentm/Videos' >>> user_music_dir() '/home/trentm/Music' >>> user_desktop_dir() '/home/trentm/Desktop' >>> user_runtime_dir(appname, appauthor) '/run/user/{os.getuid()}/SuperApp' >>> site_config_dir(appname) '/etc/xdg/SuperApp' >>> os.environ["XDG_CONFIG_DIRS"] = "/etc:/usr/local/etc" >>> site_config_dir(appname, multipath=True) '/etc/SuperApp:/usr/local/etc/SuperApp' On Android:: >>> from platformdirs import * >>> appname = "SuperApp" >>> appauthor = "Acme" >>> user_data_dir(appname, appauthor) '/data/data/com.myApp/files/SuperApp' >>> user_cache_dir(appname, appauthor) '/data/data/com.myApp/cache/SuperApp' >>> user_log_dir(appname, appauthor) '/data/data/com.myApp/cache/SuperApp/log' >>> user_config_dir(appname) '/data/data/com.myApp/shared_prefs/SuperApp' >>> user_documents_dir() '/storage/emulated/0/Documents' >>> user_downloads_dir() '/storage/emulated/0/Downloads' >>> user_pictures_dir() '/storage/emulated/0/Pictures' >>> user_videos_dir() '/storage/emulated/0/DCIM/Camera' >>> user_music_dir() '/storage/emulated/0/Music' >>> user_desktop_dir() '/storage/emulated/0/Desktop' >>> user_runtime_dir(appname, appauthor) '/data/data/com.myApp/cache/SuperApp/tmp' Note: Some android apps like Termux and Pydroid are used as shells. These apps are used by the end user to emulate Linux environment. Presence of ``SHELL`` environment variable is used by Platformdirs to differentiate between general android apps and android apps used as shells. Shell android apps also support ``XDG_*`` environment variables. ``PlatformDirs`` for convenience ================================ .. code-block:: pycon >>> from platformdirs import PlatformDirs >>> dirs = PlatformDirs("SuperApp", "Acme") >>> dirs.user_data_dir '/Users/trentm/Library/Application Support/SuperApp' >>> dirs.site_data_dir '/Library/Application Support/SuperApp' >>> dirs.user_cache_dir '/Users/trentm/Library/Caches/SuperApp' >>> dirs.user_log_dir '/Users/trentm/Library/Logs/SuperApp' >>> dirs.user_documents_dir '/Users/trentm/Documents' >>> dirs.user_downloads_dir '/Users/trentm/Downloads' >>> dirs.user_pictures_dir '/Users/trentm/Pictures' >>> dirs.user_videos_dir '/Users/trentm/Movies' >>> dirs.user_music_dir '/Users/trentm/Music' >>> dirs.user_desktop_dir '/Users/trentm/Desktop' >>> dirs.user_runtime_dir '/Users/trentm/Library/Caches/TemporaryItems/SuperApp' Per-version isolation ===================== If you have multiple versions of your app in use that you want to be able to run side-by-side, then you may want version-isolation for these dirs:: >>> from platformdirs import PlatformDirs >>> dirs = PlatformDirs("SuperApp", "Acme", version="1.0") >>> dirs.user_data_dir '/Users/trentm/Library/Application Support/SuperApp/1.0' >>> dirs.site_data_dir '/Library/Application Support/SuperApp/1.0' >>> dirs.user_cache_dir '/Users/trentm/Library/Caches/SuperApp/1.0' >>> dirs.user_log_dir '/Users/trentm/Library/Logs/SuperApp/1.0' >>> dirs.user_documents_dir '/Users/trentm/Documents' >>> dirs.user_downloads_dir '/Users/trentm/Downloads' >>> dirs.user_pictures_dir '/Users/trentm/Pictures' >>> dirs.user_videos_dir '/Users/trentm/Movies' >>> dirs.user_music_dir '/Users/trentm/Music' >>> dirs.user_desktop_dir '/Users/trentm/Desktop' >>> dirs.user_runtime_dir '/Users/trentm/Library/Caches/TemporaryItems/SuperApp/1.0' Be wary of using this for configuration files though; you'll need to handle migrating configuration files manually. Why this Fork? ============== This repository is a friendly fork of the wonderful work started by `ActiveState `_ who created ``appdirs``, this package's ancestor. Maintaining an open source project is no easy task, particularly from within an organization, and the Python community is indebted to ``appdirs`` (and to Trent Mick and Jeff Rouse in particular) for creating an incredibly useful simple module, as evidenced by the wide number of users it has attracted over the years. Nonetheless, given the number of long-standing open issues and pull requests, and no clear path towards `ensuring that maintenance of the package would continue or grow `_, this fork was created. Contributions are most welcome. PK7QYtWWQ__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/WHEELWheel-Version: 1.0 Generator: hatchling 1.25.0 Root-Is-Purelib: true Tag: py3-none-any PK7QY]AA\__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/licenses/LICENSEMIT License Copyright (c) 2010-202x The platformdirs developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK7QY6  R__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/RECORDplatformdirs/__init__.py,sha256=mVCfMmBM4q24lq6336V3VJncdxaOegI4qQSmQCjkR5E,22284 platformdirs/__main__.py,sha256=HnsUQHpiBaiTxwcmwVw-nFaPdVNZtQIdi1eWDtI-MzI,1493 platformdirs/android.py,sha256=kV5oL3V3DZ6WZKu9yFiQupv18yp_jlSV2ChH1TmPcds,9007 platformdirs/api.py,sha256=2dfUDNbEXeDhDKarqtR5NY7oUikUZ4RZhs3ozstmhBQ,9246 platformdirs/macos.py,sha256=UlbyFZ8Rzu3xndCqQEHrfsYTeHwYdFap1Ioz-yxveT4,6154 platformdirs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 platformdirs/unix.py,sha256=uRPJWRyQEtv7yOSvU94rUmsblo5XKDLA1SzFg55kbK0,10393 platformdirs/version.py,sha256=oH4KgTfK4AklbTYVcV_yynvJ9JLI3pyvDVay0hRsLCs,411 platformdirs/windows.py,sha256=IFpiohUBwxPtCzlyKwNtxyW4Jk8haa6W8o59mfrDXVo,10125 platformdirs-4.3.6.dist-info/METADATA,sha256=085GgRFo5U1nc9NR8e6unEWKxUjDMsgSHDyaCETsCQ4,11868 platformdirs-4.3.6.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87 platformdirs-4.3.6.dist-info/licenses/LICENSE,sha256=KeD9YukphQ6G6yjD_czwzv30-pSHkBHP-z0NS-1tTbY,1089 platformdirs-4.3.6.dist-info/RECORD,, PK7QYyBB modules.json{ "3.13": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.py", "distlib.compat": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.py", "distlib.database": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.py", "distlib.index": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.py", "distlib.locators": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.py", "distlib.manifest": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.py", "distlib.markers": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/markers.py", "distlib.metadata": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.py", "distlib.resources": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.py", "distlib.scripts": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.py", "distlib.util": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.py", "distlib.version": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.py", "distlib.wheel": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.py", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.py", "filelock._api": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.py", "filelock._error": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.py", "filelock._soft": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.py", "filelock._unix": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.py", "filelock._util": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.py", "filelock._windows": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.py", "filelock.asyncio": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.py", "filelock.version": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.py", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.py", "platformdirs.__main__": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.py", "platformdirs.android": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.py", "platformdirs.api": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.py", "platformdirs.macos": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.py", "platformdirs.unix": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.py", "platformdirs.version": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.py", "platformdirs.windows": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.py" } }, "3.12": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.py", "distlib.compat": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.py", "distlib.database": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.py", "distlib.index": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.py", "distlib.locators": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.py", "distlib.manifest": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.py", "distlib.markers": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/markers.py", "distlib.metadata": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.py", "distlib.resources": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.py", "distlib.scripts": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.py", "distlib.util": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.py", "distlib.version": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.py", "distlib.wheel": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.py", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.py", "filelock._api": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.py", "filelock._error": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.py", "filelock._soft": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.py", "filelock._unix": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.py", "filelock._util": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.py", "filelock._windows": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.py", "filelock.asyncio": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.py", "filelock.version": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.py", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.py", "platformdirs.__main__": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.py", "platformdirs.android": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.py", "platformdirs.api": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.py", "platformdirs.macos": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.py", "platformdirs.unix": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.py", "platformdirs.version": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.py", "platformdirs.windows": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.py" } }, "3.11": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.py", "distlib.compat": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.py", "distlib.database": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.py", "distlib.index": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.py", "distlib.locators": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.py", "distlib.manifest": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.py", "distlib.markers": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/markers.py", "distlib.metadata": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.py", "distlib.resources": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.py", "distlib.scripts": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.py", "distlib.util": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.py", "distlib.version": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.py", "distlib.wheel": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.py", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.py", "filelock._api": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.py", "filelock._error": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.py", "filelock._soft": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.py", "filelock._unix": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.py", "filelock._util": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.py", "filelock._windows": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.py", "filelock.asyncio": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.py", "filelock.version": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.py", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.py", "platformdirs.__main__": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.py", "platformdirs.android": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.py", "platformdirs.api": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.py", "platformdirs.macos": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.py", "platformdirs.unix": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.py", "platformdirs.version": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.py", "platformdirs.windows": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.py" } }, "3.10": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.py", "distlib.compat": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.py", "distlib.database": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.py", "distlib.index": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.py", "distlib.locators": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.py", "distlib.manifest": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.py", "distlib.markers": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/markers.py", "distlib.metadata": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.py", "distlib.resources": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.py", "distlib.scripts": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.py", "distlib.util": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.py", "distlib.version": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.py", "distlib.wheel": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.py", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.py", "filelock._api": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.py", "filelock._error": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.py", "filelock._soft": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.py", "filelock._unix": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.py", "filelock._util": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.py", "filelock._windows": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.py", "filelock.asyncio": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.py", "filelock.version": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.py", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.py", "platformdirs.__main__": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.py", "platformdirs.android": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.py", "platformdirs.api": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.py", "platformdirs.macos": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.py", "platformdirs.unix": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.py", "platformdirs.version": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.py", "platformdirs.windows": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.py" } }, "3.9": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.py", "distlib.compat": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.py", "distlib.database": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.py", "distlib.index": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.py", "distlib.locators": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.py", "distlib.manifest": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.py", "distlib.markers": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/markers.py", "distlib.metadata": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.py", "distlib.resources": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.py", "distlib.scripts": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.py", "distlib.util": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.py", "distlib.version": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.py", "distlib.wheel": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.py", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.py", "filelock._api": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.py", "filelock._error": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.py", "filelock._soft": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.py", "filelock._unix": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.py", "filelock._util": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.py", "filelock._windows": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.py", "filelock.asyncio": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.py", "filelock.version": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.py", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.py", "platformdirs.__main__": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.py", "platformdirs.android": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.py", "platformdirs.api": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.py", "platformdirs.macos": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.py", "platformdirs.unix": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.py", "platformdirs.version": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.py", "platformdirs.windows": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.py" } }, "3.8": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.py", "distlib.compat": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.py", "distlib.database": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.py", "distlib.index": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.py", "distlib.locators": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.py", "distlib.manifest": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.py", "distlib.markers": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/markers.py", "distlib.metadata": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.py", "distlib.resources": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.py", "distlib.scripts": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.py", "distlib.util": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.py", "distlib.version": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.py", "distlib.wheel": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.py", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.py", "filelock._api": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.py", "filelock._error": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.py", "filelock._soft": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.py", "filelock._unix": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.py", "filelock._util": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.py", "filelock._windows": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.py", "filelock.asyncio": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.py", "filelock.version": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.py", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.py", "platformdirs.__main__": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.py", "platformdirs.android": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.py", "platformdirs.api": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.py", "platformdirs.macos": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.py", "platformdirs.unix": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.py", "platformdirs.version": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.py", "platformdirs.windows": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.py" } } }PK7QY:zzdistributions.json{ "3.13": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info" } }, "3.12": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info" } }, "3.11": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info" } }, "3.10": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info" } }, "3.9": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info" } }, "3.8": { "==any": { "distlib": "__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info", "filelock": "__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info", "platformdirs": "__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info" } } }PK7QY}UZ __main__.pyfrom __future__ import annotations import json import os import sys import zipfile from functools import cached_property from importlib.abc import SourceLoader from importlib.util import spec_from_file_location ABS_HERE = os.path.abspath(os.path.dirname(__file__)) class VersionPlatformSelect: def __init__(self) -> None: zipapp = ABS_HERE self.archive = zipapp self._zip_file = zipfile.ZipFile(zipapp) self.modules = self._load("modules.json") self.distributions = self._load("distributions.json") self.__cache = {} def _load(self, of_file): version = ".".join(str(i) for i in sys.version_info[0:2]) per_version = json.loads(self.get_data(of_file).decode()) all_platforms = per_version[version] if version in per_version else per_version["3.9"] content = all_platforms.get("==any", {}) # start will all platforms not_us = f"!={sys.platform}" for key, value in all_platforms.items(): # now override that with not platform if key.startswith("!=") and key != not_us: content.update(value) content.update(all_platforms.get(f"=={sys.platform}", {})) # and finish it off with our platform return content def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self._zip_file.close() def find_mod(self, fullname): if fullname in self.modules: return self.modules[fullname] return None def get_filename(self, fullname): zip_path = self.find_mod(fullname) return None if zip_path is None else os.path.join(ABS_HERE, zip_path) def get_data(self, filename): if filename.startswith(ABS_HERE): # keep paths relative from the zipfile filename = filename[len(ABS_HERE) + 1 :] filename = filename.lstrip(os.sep) if sys.platform == "win32": # paths within the zipfile is always /, fixup on Windows to transform \ to / filename = "/".join(filename.split(os.sep)) with self._zip_file.open(filename) as file_handler: return file_handler.read() def find_distributions(self, context): dist_class = versioned_distribution_class() name = context.name if name in self.distributions: result = dist_class(file_loader=self.get_data, dist_path=self.distributions[name]) yield result def __repr__(self) -> str: return f"{self.__class__.__name__}(path={ABS_HERE})" def _register_distutils_finder(self): # noqa: C901 if "distlib" not in self.modules: return class Resource: def __init__(self, path: str, name: str, loader: SourceLoader) -> None: self.path = os.path.join(path, name) self._name = name self.loader = loader @cached_property def name(self) -> str: return os.path.basename(self._name) @property def bytes(self) -> bytes: return self.loader.get_data(self._name) @property def is_container(self) -> bool: return len(self.resources) > 1 @cached_property def resources(self) -> list[str]: return [ i.filename for i in ( (j for j in zip_file.filelist if j.filename.startswith(f"{self._name}/")) if self._name else zip_file.filelist ) ] class DistlibFinder: def __init__(self, path, loader) -> None: self.path = path self.loader = loader def find(self, name): return Resource(self.path, name, self.loader) def iterator(self, resource_name): resource = self.find(resource_name) if resource is not None: todo = [resource] while todo: resource = todo.pop(0) yield resource if resource.is_container: resource_name = resource.name for name in resource.resources: child = self.find(f"{resource_name}/{name}" if resource_name else name) if child.is_container: todo.append(child) else: yield child from distlib.resources import register_finder # noqa: PLC0415 zip_file = self._zip_file register_finder(self, lambda module: DistlibFinder(os.path.dirname(module.__file__), self)) _VER_DISTRIBUTION_CLASS = None def versioned_distribution_class(): global _VER_DISTRIBUTION_CLASS # noqa: PLW0603 if _VER_DISTRIBUTION_CLASS is None: from importlib.metadata import Distribution # noqa: PLC0415 class VersionedDistribution(Distribution): def __init__(self, file_loader, dist_path) -> None: self.file_loader = file_loader self.dist_path = dist_path def read_text(self, filename): return self.file_loader(self.locate_file(filename)).decode("utf-8") def locate_file(self, path): return os.path.join(self.dist_path, path) _VER_DISTRIBUTION_CLASS = VersionedDistribution return _VER_DISTRIBUTION_CLASS class VersionedFindLoad(VersionPlatformSelect, SourceLoader): def find_spec(self, fullname, path, target=None): # noqa: ARG002 zip_path = self.find_mod(fullname) if zip_path is not None: return spec_from_file_location(name=fullname, loader=self) return None def module_repr(self, module): raise NotImplementedError def run(): with VersionedFindLoad() as finder: sys.meta_path.insert(0, finder) finder._register_distutils_finder() # noqa: SLF001 from virtualenv.__main__ import run as run_virtualenv # noqa: PLC0415, PLC2701 run_virtualenv() if __name__ == "__main__": run() PK7QYOvirtualenv/__init__.pyPK7QYC^f f virtualenv/__main__.pyPK7QYz virtualenv/info.pyPK7QY )6KKsvirtualenv/report.pyPK7QY/ygvirtualenv/version.pyPK7QYA\n!virtualenv/activation/__init__.pyPK7QY'" virtualenv/activation/activator.pyPK7QY ;< %"virtualenv/activation/via_template.pyPK7QY|NN&.virtualenv/activation/bash/__init__.pyPK7QY^Gn&0virtualenv/activation/bash/activate.shPK7QYr#X'9virtualenv/activation/batch/__init__.pyPK7QYh(<virtualenv/activation/batch/activate.batPK7QYzЙ_*Bvirtualenv/activation/batch/deactivate.batPK7QY@%REvirtualenv/activation/batch/pydoc.batPK7QYPP(Evirtualenv/activation/cshell/__init__.pyPK7QYky)CGvirtualenv/activation/cshell/activate.cshPK7QYVkD&Mvirtualenv/activation/fish/__init__.pyPK7QY  (Nvirtualenv/activation/fish/activate.fishPK7QYN~) [virtualenv/activation/nushell/__init__.pyPK7QY9 ) `virtualenv/activation/nushell/activate.nuPK7QY677,$kvirtualenv/activation/powershell/__init__.pyPK7QY-nvirtualenv/activation/powershell/activate.ps1PK7QYM>>(uvirtualenv/activation/python/__init__.pyPK7QY6- yvirtualenv/activation/python/activate_this.pyPK7QY֜2~virtualenv/app_data/__init__.pyPK7QY<N##Yvirtualenv/app_data/base.pyPK7QYOvirtualenv/app_data/na.pyPK7QYaYY Ȓvirtualenv/app_data/read_only.pyPK7QYҡ"}}&_virtualenv/app_data/via_disk_folder.pyPK7QY." virtualenv/app_data/via_tempdir.pyPK7QYgvirtualenv/config/__init__.pyPK7QYW virtualenv/config/convert.pyPK7QY5mvirtualenv/config/env_var.pyPK7QY2um m žvirtualenv/config/ini.pyPK7QY!hvirtualenv/config/cli/__init__.pyPK7QY_virtualenv/config/cli/parser.pyPK7QYvirtualenv/create/__init__.pyPK7QY0!0!=virtualenv/create/creator.pyPK7QYa5M M virtualenv/create/debug.pyPK7QY@R R , virtualenv/create/describe.pyPK7QYs/2Vvirtualenv/create/pyenv_cfg.pyPK7QY,virtualenv/create/via_global_ref/__init__.pyPK7QYV[[/<virtualenv/create/via_global_ref/_virtualenv.pyPK7QY_`:'/virtualenv/create/via_global_ref/api.pyPK7QYɋ )@virtualenv/create/via_global_ref/store.pyPK7QYyQQ(Cvirtualenv/create/via_global_ref/venv.pyPK7QY4>Rvirtualenv/create/via_global_ref/builtin/__init__.pyPK7QYbby7Rvirtualenv/create/via_global_ref/builtin/builtin_way.pyPK7QYȈ, 99/Tvirtualenv/create/via_global_ref/builtin/ref.pyPK7QYm=NN>sjvirtualenv/create/via_global_ref/builtin/via_global_self_do.pyPK7QY<|virtualenv/create/via_global_ref/builtin/cpython/__init__.pyPK7QY||r :w|virtualenv/create/via_global_ref/builtin/cpython/common.pyPK7QYT(Kϵ<virtualenv/create/via_global_ref/builtin/cpython/cpython3.pyPK7QY4q-q-:virtualenv/create/via_global_ref/builtin/cpython/mac_os.pyPK7QY9virtualenv/create/via_global_ref/builtin/pypy/__init__.pyPK7QYc7virtualenv/create/via_global_ref/builtin/pypy/common.pyPK7QYszP 6virtualenv/create/via_global_ref/builtin/pypy/pypy3.pyPK7QY virtualenv/discovery/__init__.pyPK7QY09virtualenv/discovery/builtin.pyPK7QY9bb&}virtualenv/discovery/cached_py_info.pyPK7QY{ #virtualenv/discovery/discover.pyPK7QYdccvirtualenv/discovery/py_info.pyPK7QYa!zvirtualenv/discovery/py_spec.pyPK7QYo*??(virtualenv/discovery/windows/__init__.pyPK7QY5ǭ&virtualenv/discovery/windows/pep514.pyPK7QYMMddvirtualenv/run/__init__.pyPK7QYϖ ?virtualenv/run/session.pyPK7QY! virtualenv/run/plugin/__init__.pyPK7QY%¶#Kvirtualenv/run/plugin/activators.pyPK7QY@00Gvirtualenv/run/plugin/base.pyPK7QY/v**!virtualenv/run/plugin/creators.pyPK7QY "virtualenv/run/plugin/discovery.pyPK7QYe 3 virtualenv/run/plugin/seeders.pyPK7QYOvirtualenv/seed/__init__.pyPK7QY#virtualenv/seed/seeder.pyPK7QY!Bvirtualenv/seed/embed/__init__.pyPK7QY\5{{#virtualenv/seed/embed/base_embed.pyPK7QY#= virtualenv/seed/embed/pip_invoke.pyPK7QY.virtualenv/seed/embed/via_app_data/__init__.pyPK7QY 2bvirtualenv/seed/embed/via_app_data/via_app_data.pyPK7QY:*virtualenv/seed/embed/via_app_data/pip_install/__init__.pyPK7QY ݅m m 6*virtualenv/seed/embed/via_app_data/pip_install/base.pyPK7QY6Kvirtualenv/seed/embed/via_app_data/pip_install/copy.pyPK7QYN9Pvirtualenv/seed/embed/via_app_data/pip_install/symlink.pyPK7QYxx" Yvirtualenv/seed/wheels/__init__.pyPK7QY 8!,Zvirtualenv/seed/wheels/acquire.pyPK7QY5AbGG 3lvirtualenv/seed/wheels/bundle.pyPK7QY< 9<<)svirtualenv/seed/wheels/periodic_update.pyPK7QYuzzǰvirtualenv/seed/wheels/util.pyPK7QYMY(}virtualenv/seed/wheels/embed/__init__.pyPK7QY/(6ivirtualenv/seed/wheels/embed/pip-24.2-py3-none-any.whlPK7QY{]D!!??zvirtualenv/seed/wheels/embed/setuptools-75.2.0-py3-none-any.whlPK7QYpb[:2virtualenv/seed/wheels/embed/wheel-0.44.0-py3-none-any.whlPK7QY3virtualenv/util/__init__.pyPK7QYv+CCA3virtualenv/util/error.pyPK7QY3virtualenv/util/lock.pyPK7QYҠX|3virtualenv/util/zipapp.pyPK7QY%9STT l3virtualenv/util/path/__init__.pyPK7QYx #3virtualenv/util/path/_permission.pyPK7QYHOq((ذ3virtualenv/util/path/_sync.pyPK7QY{s'';3virtualenv/util/path/_win.pyPK7QY&3virtualenv/util/subprocess/__init__.pyPK7QY{܋>3virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/METADATAPK7QYtWW;3virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/WHEELPK7QY6-DFV3virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/entry_points.txtPK7QY=,22F3virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/licenses/LICENSEPK7QY7l''<N3virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/RECORDPK7QYFqqAA4__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.pyPK7QY]I/?4__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.pyPK7QYAi4__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.pyPK7QY%O=Q=Q>q5__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.pyPK7QY>RRA95__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.pyPK7QYn X7X7A6__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.pyPK7QY],,@6__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/markers.pyPK7QY= DDA+6__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/metadata.pyPK7QYՀD*D*Bn7__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/resources.pyPK7QY˺fHH@r7__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/scripts.pyPK7QYJy~~=7__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/t32.exePK7QYzA`9__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/t64-arm.exePK7QY\e=:+<__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/t64.exePK7QYM\zz==__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/util.pyPK7QYN\\@j>__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/version.pyPK7QYn`ff=w3?__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/w32.exePK7QY-D Aҙ@__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/w64-arm.exePK7QY.=1,C__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/w64.exePK7QY!ڡ˫˫>D__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/wheel.pyPK7QYԝ88QfE__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/LICENSE.txtPK7QYΠ~~NE__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/METADATAPK7QYnnKϴE__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/WHEELPK7QYQ/SE__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/top_level.txtPK7QYY!!LE__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib-0.3.9.dist-info/RECORDPK7QYZۯ@E__virtualenv__/filelock-3.16.1-py3-none-any/filelock/__init__.pyPK7QY% 88<E__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_api.pyPK7QYJ8>E__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_error.pyPK7QY|=F__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_soft.pyPK7QYb=F__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_unix.pyPK7QY!N=F__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_util.pyPK7QY<ց@F__virtualenv__/filelock-3.16.1-py3-none-any/filelock/_windows.pyPK7QYHmc00?!F__virtualenv__/filelock-3.16.1-py3-none-any/filelock/asyncio.pyPK7QY=RF__virtualenv__/filelock-3.16.1-py3-none-any/filelock/py.typedPK7QY/ ?SF__virtualenv__/filelock-3.16.1-py3-none-any/filelock/version.pyPK7QYR4 N UF__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/METADATAPK7QYtWWK`F__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/WHEELPK7QYaVaF__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/licenses/LICENSEPK7QYndy""LfF__virtualenv__/filelock-3.16.1-py3-none-any/filelock-3.16.1.dist-info/RECORDPK7QYmI W WGskF__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__init__.pyPK7QYxZ/GF__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/__main__.pyPK7QYl/#/#FF__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/android.pyPK7QYV($$BF__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/api.pyPK7QY  D/G__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/macos.pyPK7QYD)G__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/py.typedPK7QYܖ((C)G__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/unix.pyPK7QYl) FRG__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/version.pyPK7QY''FTG__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs/windows.pyPK7QY;F\.\.T|G__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/METADATAPK7QYtWWQG__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/WHEELPK7QY]AA\{G__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/licenses/LICENSEPK7QY6  R6G__virtualenv__/platformdirs-4.3.6-py3-none-any/platformdirs-4.3.6.dist-info/RECORDPK7QYyBB Gmodules.jsonPK7QY:zzGdistributions.jsonPK7QY}UZ tH__main__.pyPK:>Hpackageurl-python-0.17.5/thirdparty/virtualenv.pyz.ABOUT000066400000000000000000000011601504466056600232610ustar00rootroot00000000000000about_resource: virtualenv.pyz name: get-virtualenv version: 20.27.0 download_url: https://github.com/pypa/get-virtualenv/raw/20.27.0/public/virtualenv.pyz description: virtualenv is a tool to create isolated Python environments. homepage_url: https://github.com/pypa/virtualenv license_expression: lgpl-2.1-plus AND (bsd-new OR apache-2.0) AND mit AND python AND bsd-new AND apache-2.0 AND isc AND (bsd-simplified OR apache-2.0) copyright: Copyright (c) The Python Software Foundation and others redistribute: yes attribute: yes track_changes: yes package_url: pkg:github/pypa/get-virtualenv@20.27.0#public/virtualenv.pyz

    xxjRݔY:,A$D铥y*}-02̌x[t<]ZyiI4r)і z C)[c3bmdev}X싡vW/Ek0`lq"9 -g@)SB\/M+ =uSw K͚2 -qa+vHE hv2w!G,\$eh|:w[ ukY1A9Q~dwCub1[+7 6]a;zjd 緀]鲭3h¡ Ĝ0Ү(խȽk44)t4],;%^]~w6\ſ&kgg/`Drˇzsη#Z7B˧W$;QZhV톜ZiZk&;dRk-t20J /lOr(9 ;Xrp, }Agu5g.;k,26+qhW /=ҽnOjOjW?z9^Fspr'(Mg(T"F_X'捺ƴ1چC?L\fς|23KCetSXN]ZK:6,n ⛇}y-㸢|ѩΠ-2 ȁĖeJUlاJ4M|;+{(e+X kk[CD&j'V6e4a,_jUq ;knuc6"ʼnSvVX]# "Ƭ߇5]Y;.̞+Uz 5;+ 5cGc c*UX9#Ff$޶jfN>Ym;c(|Xvl9Q갰[szVg} S+Ot|>DzVtK]CJBCFGS@܁,!eWem6C=Sf}JÎYmw|e) \:U)/摿tVƗ#P1 (v>̖/IYCTRsU p8 Ш#>[a9eT$z3?518\Lb-nWau&n(RE:2!L~ca3wqet(wj-jNU*a%68oF>z㣟goٟ_H*%PKRPY0`+setuptools/_vendor/packaging/_structures.py͓=k0wYpLh)BB϶"ҹ_YN?dt HQY̠V-ܿT&>O@Z|IEd  }\JeY;F"~lM0+&C6`M Kd j 4!* vIkO<ϖ,4-czԆ~TvqD!$6BRY۰ґ+MF𲧃u*NHMsӈ Q@B !xlgTZݛ]b}E?-HԵUFĚsq?Y9f9fݫ_ IU2TdKd9R pIcON?jamK5X|tNkf.5x7q/`4_rrotqѕfNj4uϼt~@sV6(7Iy3~hqDzZ4,SVfiӜOt4q3f~.ev;޿+w:,(Şu}a&GY:pt5SwM; =%w!>CrIe091/Ifdmق $l[q(*3o[9= -T);33Z jgo\yESq0R=b͂Rg~jvuU%z >Gx )k2O'`ϠPnDgm~t֢QB;GCrn_);ơ`A%OP;Z9kZYzOUfLRsZe_0QўZ1؋?CE9a2pT߸T66Z D#(IQ`Yft[ݓ;f{T-ni2MzHY|!4VydF T|6IFT Dlslz dBj[!HS8V82ΛzPH EX]zRXQBaJaI19 " Ynm#Q*>p {N"dvNIߑ`{ƒT6=K Etbl7%M)kl8iQ_`zz ;!7 c"7SJ4VZ{P.6^>w.ew8PhPI6VO=OsA*#O@K l+/HLݎ::6 /C\3AP([\epp dX)\ x3|;m0 ?.i HDCjfz GOIM):ZeA8;=U \u-׃>Dq{JtH)hT9눏pσqDͮs E˨ w^_{tEq+R- ?݄[r%4Vd:߇MNu5~w!'{R"|8)0 0|ƐřACEUGlS h~k_2JS/ 9 u},X>4cAQ+eryPRKSI:؍7{j)@q_PKRPY )'setuptools/_vendor/packaging/markers.pyZr6@. &m/3KәtRS;hd,l՗{{{]$HQa#vd.j\"cu`FTԊnޔ<,ل]TZbtĞ''ƋvI؅4wg܂UJ$D4X6e.`0\:VڰbURU.DѣS8pk*sn띶ͮŵgM[|^/wȾkdI%4MW7zcf?H S>-ר4^Id9̀ʸfpO1Fv9߽*)u)R`&O\f5nNm@מ<*d S~ohXN@l6bKhb?d!`EرVޣwVV؈œkhyh|4 x+f|–J@6Js5)HQ]&|(-a &֨HVu0D;wξ=y4|*xsimnؔ8"nX.l%2t []A1q k %K`}Y&chPF5"NqZ^]%M_pGݮ"ErŸޞӊ̏Ol zO֎* eT=-wӌ>R:A|.a;WI jmTV«Gd0ߡ꺂 (]WK\hZaZ-kwٻ=QrM@B?>$Q%rc!V T.4 Xn.I,j4o>"SGC_pST&5A\9,nElQUoMV䭐gʸZ1l 48`,v2oRQuf ˱XBLcF=2t7oMTvxޝ%Pq'~_C TPI Abi blSyR*k!bX"~OsAkw( 6%7<@\[Q.\,zaEƗ;SMj[i4w%+Mh8jcQ 0qP6S*!:{IH^b}_b_2kVn,w yWB#O'$DFmC@josv/_-j E{=&Pb#E$T.f,,ʳwZW}>-{[ċ%f^ U'Ǎ;Dhp38" u )v:E/Zȱn@j8S ؆P٭`kD:#$l?%I2CLt 𜊘 y;f5!E5P mAs8tA5/}#KǎBgU]3aR_ cè,cBh O|PmTk kMM! tNuPc-V!=h;tC#^JC^gkL,yzX7\_,bZ&S=OÑhM-)ǣ} y@VHeO|o,"IYf72,ɒ!6;Lj䯀KƏv> _WS _7ÝQXE2&UN SJ-r>MktFIy K˵u؊f1^e%֧]Yیٚ4d⮨cpH 'Bp )jcj5^_U_0܃xᾢ$r Bwb3ύصfXދyvZ{-ϿZ 1y*eOS(! ].kJJ˵1>{VP!DUxz^R*`Emp#~tqٖfJV #u-6Pd1j,XzA"FބAhOڋf-o)i㒊vՇꦮ:bVxu^͍oZjaG4X,Vzy]Dja>sʗc$MݪNٿ_ZgO'LJ00;q;ډZP0wPKWjpWiD]ZHN WHQ|0`~'D'(vUuIE+64]{KvH9n7\)oY&f4'Nˀ5tG"?!WΊ!M܎ S{iȽ5:-pJ6`oI`HV(q $ Ƴy(E6Ҽۺ.zWia\bQu> V #-CPG B#qzu7+yzïZV-1|i,ZP  / r<~=a>k{ij A2; OOU 8 v:9yU]f蕓 *ɚuDf NP?'~mR.|{h@jҴ"q<oA~龜F}0Xcc^۹GQqLf 쎻^pDhkH~D5WL9% U蜁\^]4@A V*[fsszo`$ H Wؽ~++BMB55׎6r@8j8u9;X}V (9ؕ_[q9z*v<$K߀IlSDO 8e+L'*j+uX>*pL\! #. 0Җ`'&1ceξJ-1C 48z\ DB1zB$uaF.@Pƴ6؅tk0H.)8;t% [XΛKKK:}a ٫B{N!  PKRPYD!#]~(setuptools/_vendor/packaging/metadata.py]YsG~(K8jtxcKh dnl`o^uv#l2u$j$QTueYiWest$uJl֍ϯUUӤWp*N6yyuBfk|ߓr7OӢHw?RN ~sۨYl2m{5ZOjʶFF-UjxݵyO7 (md]e]ΣS;ƞI|nF,<Tum^kzEѦN,*hYAG|6M~lN@UѨa]+)ph+6-j,m/iѱ:*,"n@aauf!;p-f2=tKW9&qg~mT=Ć¥~!gVEVnڶjiuzЀiGٕ`Tcax^U::~S5Mv0>LH4mQS$JQSpaw"m%DV\h2*%͡k[ZflD )q2Ziq"t'/-w>ez.E'[ F7jq获8$z6oܦnAلerV'(N}tCta7Y\+ְN,5`^i1qC_4e+2TGmjU5=r]W2i:A` e[t*6o`UGf4yPm[狮Td,f@2gOot(PD 55QeKe{?+m`^AVJZ;g7Oz"Dhqd $zmG,0*}>}zS--[Glk}2SͲazUZ_ZO6v{7)qlY܏d>N$롲d@j[U%]CzY@ܸ粢{W*Tgf(G&P.$.q6ao[CwC@SwZ(V9 8F>B|{AC<;6]ohaمM_7dhpSٰqCD]nBՁ)B޲U dSX(H.dXZ6t0Yvt&^m,z~ٓ'DOhAs#_x%*$`K06,Y)mNl Dβ4\wc-S߁uɗw7V7/**as ",O?9~G+t`GF_]hx`eW5PW6]Evq;?{?={lFS>#ā<?36Q NPhh`aŬ뷖GO/ߝXJ3:wXdrBD~+O?F60+ޮ!xi_(" "[gfIGݦ@˃O[BNOСJ*R"6]Hl3 Dm]Gg0l%};nxt?|&_0N2SE~dxvm2Go+"6vf]@`t GU 9WŨ@:-pzw\`$?9^1֚"d衬G锰]s` ¨(u$P行"`jʛA+cWuT`` F˔ɡ"Z,%{hs4 O1ϗWܜrvX5-+WK;w )xZ`ᦿpcb V[epd`YthX 1:D g'φA:zQ4'u#fw V'3D|@¢ gۨGs w' H(f ӝʼn/fwi|fb@dWp 5pthi :݊oB.RJlɠeO4 5#eZpԅcsN iЎ>, 3? sΕ*M4VU1;T1{DsGeǓ uNpP(󄫼2P9&[VWe ,P$ݵh?^b r k%0x q Lq+ +v<&Ap- m$o|^;eaMSi}w1Ũ XXX&Q|/L^..8{r-{izR#"=GF,H'NF`wglE^+25 :ja[rP .Hx?d C_`}}dbz: 9~ne$S+Zԭ)E~x5;pi -.AkpDh\-Ӯ^-` 5RrZ}dARLE1Io<3V'Ajthz}v n⢷' IMOل4fpSˠG\.VI-5/\ c,Ri> S.:㉋JevL%1*ÐNRzl1TB'*ND&6 Z p+DzXU=oaAI#QmkɁuOe2A҃BJvnkqL lu`s< ,ða0aqCs2  uq%c Xt]Easq[˛>FܒjۙR,F)ԡmC %bfdT0}Wx/h]W Br"JX9,+U&X#u uKqSlNj" ԳJ٤ԍf!eQ'4:+m>dV!<ʳ 'cS6_"tV˥2Ad C|Fz!'Cx[@ 69 Ȟ(ZUExnq+F pʾ#VĒ" ~S/,H~7PQ:uDH}<^$}9(hٞa='NIOTƴ$؛ІOMy_e#i;@{IAreʣJd( YQOk]M&iU2SI*|Ev1k \qW5Y%dEI#r]~_iLC+^DD.E;@{`MѤDahF.ˊi[8S6䔂X:8!=tL]'[zL KL[5 hsRL ?#!Ѓp c !-˵*(Y0&Hz lX&~m5]Yb8$244 s43XR~txBVN-:j8%x 䥜)宏`)@ D qJYW愊hMk@1ңi*^elbOXA1NOGar{e^p 怆8u F<H>.?D!ELR}tœ0yPRN2qz}1 OS$h@ƞ0bAf7Z:S޲er |q8}|8lVL9 Mc.%|ڛ'wP@t GN[n|S0An#bwz؝XPZ&5R]^>ƎYJFQtjCV IԦJYrVIysJ"es,<Z_v2cwߥHnU&ޥS^סgby/Kӽg2~,= []p͕v@XsHZB5Ȫte{x༎rEzfn҈ں!!⁷\e:$P益O5e,lÅ"TRjjE)"Ԧ55z)tEv+`zȧ~yӜFNjUɖ Y*v]Dxs@A1T/oDP e| ӧǪ#;GG7o35c.R`˞wmv2>J~yg.H~y~xb(G#1=]%19B岎O r=_=<9??ClbbI3Bˉ LTX.8G[娏P,HIBl n*el6X@7x;hak*75 b M )9!,날>9]T #Vو5E |nFgȄ䓇z|4+A;!N*G͢.GRdtbNNGDÇ(ԫAo yh_+&=>yDA)n~"tpخQ3}ĝ m3岃{Do./;]|ٹ[&+Σ#懩Bp- (ҥf2zx6ǰ" &]NW*0a:a34a*06 P2[TBTŭ29 ^1J$ (ˆ(βֱnk ZjsIEh0ւ !%YnP1\ԁ=VfV\&N~(傪Ƈ(@J8'Udx${M!hn`>o4Ri`{4PCŃіhf.xR.9:0y(/}KL`$DyOtW1!`NN͑ <DV謈nI!~3I9f)0[`kzpqNS ]>?L+1Nz'yHoANŰlrS0Rp[Zb|7lTԉZ{ʴ0^9 ˪D)]!YXY`u D"G@OQ= ;5߿^/;k\Qlu2S2eziZ:X C .v+鞐"/@k |1&3Q٧o0bq aԪ)̤wOj<"@7xhP'=;9v/Fޙ! C@r-73Fan0gEwpx!dϓDNy>Zէu/b9Hgk0D1>hz7gRxcq.`NfKA;S,Ђ&m\H,@HA#Cөk΀Y|ԅk ݩMP/ϫe+pdO*_#ʓd"`K$@w L7 o#|+~ $I%u;=ƿL¼.^ H(cGFh4 =Kտ&qDž-s#; ҃)5"?Ο2,,ǥ98mG=O7ӢFs1Qg,q^8p}.k}Ԅ^G],aޫW9rGdYs9}Q~{(̥;jg'Ip<-b6m ̾q΅\'+7 ܗ6tuS-%D/ՂܓJV?eCMg 16ʠt;ݩN:b¸Y.XϏxaҜE*h>H+^{&Gdh Yפ4pkw{|L+:9(ǽe6踛a2|߿2_yTgj~SOԎ#Jؑ <ZA>DI9o>36!A?X+8ag|)h :Ԯ_10vBƒ>fg%s.S9wW@NڌX&sн16GJL||%m0 nf^$g :?STvW0J]Ba' >£7XރJx*-{AS̔u*qίHޘWWmWj ۻ#eRapcY$:W/L/@ KޒYU|q1w.Ha[@&=<ճL:Ϙ;^>f[rty@9PZnGwsU9mLr<s'ܵ`2D]m~p(NGOLz\`~rD炡qz!z3*wtKEHIP1ƃ &[z$ [-:AZfs,<1r2ϩFOՂtg`QAI7tv&ރr-KKhR-fCNָLW/ݻO@r)2oq#]x+Lӹ4k90^5k7zUD%݇1пaE~/BhCE n U DA27zv9`#mCx2|YՕ]SU_O+eVP}W|Yӯ٭76tkwҚ$>>P>?e_s0fh_OBthm?fhQzYԿNp^0Gh3s3.o~o LV2c_ W494PCIJd#JM4ȏG3 sKk}m.juY§Ag>~-`á^ORݙqo -=un SKm?QJ{:r~K{zI tPKRPY%setuptools/_vendor/packaging/py.typedPKRPY*- ,setuptools/_vendor/packaging/requirements.pyV[o6~8P* P 0xuC, {b2T!muӃ%'q- TFwjBiF,Uٖu`9|Fmx<0,EP= dƭ2*'JiXͶFP6ŬjUm42bUڒ^,do|>K{(ؖkCNb6B%`GU_Pog[ZpTzkb`l5gOnдBf+QܲYbgCc)&K%*0Jl1p)Zgg@O$}&)3H(ȡ1(VM077˛_S>k>Paw(PF}>%)ָlYiVk'0U(I`S-J^Txd>~80\εX*[QFd* !w'fiKˊdavP*Jv)Db(xeXzgQ7Elֵ{ͧкPMitf=뗧!.%VԥB Xj,rbwp$pݘf,>p;ј.Ю2:8S2^9U8d[0oŠFs1n3JBhHD3m©bѸ #,̎ UF"|N" cwTaH`\h`٨{D[}|uׁ`^ 0@GΎYK&fI+!SCt$ŮeUr>9?wUjʎ\1NZ;|/ID۲&* d<8ȕvnLrHW܆qwa6嬒 |y[s3f19L-X5ɘ7Y~ǣ~uL0[fnyPjT"I¸[`\+{9/`8f@䮣Q9 il1ߚpbM֣ PKRPY{""*setuptools/_vendor/packaging/specifiers.py=wƑ므iS8WIܞv^& P ofkvl_6|~:4?[%YSWb(ZD(UT\OVGߋJ~(>GI>a_FWBoūgjœEQKذR,*r2e&jDYu:85Uu%r08:,M2Oy\-4JaqQXeOWG$Kga܍RHbhhtW$ϋ:aXutMZEVfPN,d@ ԏ^o~KˑU I^0Ij\ RGɗI ,DC BݏG2`ZPӏ&0wq|xAL\Ei!ʩD ɹn@^E9i^I>]=9n w'ѐ(X4KUl%eQ*<m}-(kXuMK'р`8Z5|R9\ 4WDDK 9??dENDuL=. D'T5#G{Hb끦] :S*h}T®p"Oχ 6ӯJ&o2au1#x<u+]ßvDyں BS '5Z,$K߈MLtU]lMFhi`bgA{tT4#DJtlGt ..F]-D+Cݵ4# $EVN:zօdLJѥ B5*$dzDZ'5@eY:7;DewnE.R藣 N zZVtX>G.)_+1#IV%im"B_ \~$1%s`UeqZijU~}ɲ!AWzq@)tXŁl?-@]*_ Pm9 pd;VS,8rm2ѧbL׵K#Cr'6JL 7(Y NAEF\7ET+r`l9f}N 0tBh:ObIc5+н,CHhrЎM?ܞHn$Jni JY@̭pdoҧɌ E.7th Tcf_m"9 V kju) 쑴D,#G˨PߨsOq`HQݟ9{{{{i q;`5< >itV*Mn&KP1[i Fp zIu G,kCT<ťEMݳǏOIw̴ KQ찃IC, > jZJYdܝO UcϥVO%ʼ$j[c?Vջ|74)')Ho1WV^݊^6J4(V.P$T,kZ2\_A..lOOEkIZ-&/ Oܙago7dL #Q9)]t*kYW,Vy4H Fv6_\}E6c]V^Fh!I@\`Bń7_&\ޗ|R, PxX{@1\}:)x{p|ڿMr\SX-ɭ4|X+ (1Ir0k6pE7?0A豏дmf$[^'8 oM*-<ޖޝ!ևm ؎7:Qw+wo۲el_zc>qe@^K:Z{P6#>,`K~8@/h=+RzIYP#~j^2%bϝʁ,]41᫽qbɪ.4ŐtgtGsAe3{&@uX$їտ˓dH>XJi\^w*KݵЂ٫N(NxYSKNWL\PӰ3MӋ^}Xѫ7qV9@5|6 F\UV0#RUTj21o ^0YJIGΪІF@,sHǠ3uʏ+k} a%z>A}:tqRK^C ?ŠI)?+8+kFk)MZ)dg0_0L%),c*Xu;Ny1P] N]y 7Rq!P6Q9Z~JV(f0]zH z# VgvP_oN`R3˅Go8x9s\^\g(m]f;[emhm˟yL9.gMUeRjъ9sۃI];w; ΂s$4%Hq4ۛ!` 1GIk>u#ϕb*G]BVp4'HczD28/0q*Z +ԫ9Eh(X"\ԸY%d)-4qo?HK\%|U&f^p ՓUVi MoEYZ]S"Fgq FZz=]]FOg3t RÍ8"$T3\[Z%SC8ޡ;d?@ZV)҆9 t +[AQ˘;^+)!`ߺG ѽ >r5i?h$7IҨ'dd]n6| FHtlYW(ƻadM|\lE|f# 6B&-)^ᡉz-zOhS7W퉴G]q>0΄zF֧վ,N6Aӓe2k%rVE X$mwZ`dž[vUFFƲ}3! =nj:=1P2߷Nv1I@KƘ-DI"ep C2B2koÂk_7)r&K1eisFZ/9zy \)c#{ͳܵ^ GoVrXMC$ /ċѷNJLSWE/^(um#ߑ}f7#S2dcF]Tq^GOp+%PttfDӴRiQi5G Y%^ e ]@I3&'{mB<*_%K}X!T>쬚"U3h &@mdx[kxGO>Tg0"8SyuVi S /ݪإ]0ml@(cID>άƆ ̋ k+rJ9XZ|R8z3r͂asO5Ԕ*S HϢJ B FC%ҹUH:qz$?ۢ LjjD*z\m*U޵{"SC^gs]B`J\^*gI_f;ŜC,ZThon;F%ƲK;@^C&k&DN0"+4#"P*.+}_7X/~h+39#kwe1`QWzrlúcW9[&UvdcF("̃!t(a`* 69nKqPhKv2<;{x+Spׂ7L ؁A(d,[Ak"AK'$8MgH%T(O*C ֍;NՎ`ײPgm;RgCAq+{vx~]K7n{_ #=|k?tu(g< )G,\B  j-X73kKp+PTp d!.J"LT2+X?71MK?tF+{*,r0~t,Y:˷QF1P;<,9# Kf\GǗwH ~D'z,w~0gwhk^⠩BXLOTdozf{U;,jf63pLö Yhw^ҢH!2(U%VI.~C$} o>Zz{q]a\N?z:"[ nF߭ a*pJ!+*(MedF~4aꤼY`mDQ2) \[f=V?>@Kr)Y0̘dOD!}}Z^[4m?V\+QcSmzJfRlNl5r`5/'EҔ9NmD3ɨ*WyV"͢W+8#@mC=DmwiIdT EkWv6 o\v5w_?vhW 4*0y@GSðwq-oaqDhV.d`)0/ /H˘-0Ye<.ے^`FAltk g*Ng,X±QGն7.:1@ZUЫ(S (M8‹vb 8ț9cP  7T]v7U|;ʏ}&tSn!`1GjUQ9[(`)nOrrW=9܇G 4U֤ܶj,kLYӞjM b!;ƽ8>B}GIܽP`% qͲyzĚ*vۙgS×ۍ>⹬bίk+d"e~UJ ȽS$}#64.k`jo-ȒdDo[>^v!U@x d1'!k?8.[WIyI-y^L Lf[@J#g.vOQI\c[az&ҴToۚ5G1*6UEf<ѝr@=H!/gNx|><>Q5u#"dᛷ3z.xͺ[;IxG'5}϶W' m%Q|m>rW(P;C允ݯg. _q]CP' fqBR$o"`FK>KoR,씓nk DRTG5-Azy.bP\`;?M FgeW1?avx4 Ye=? `5N9.~^o?'keITwM*^SDU#WfEٛbp;hQB=kzoE\e 4.&>dQs}eKat~&/&hƼ'krZ[A|R;἗hޯ|{jWl:|-GK5gp2IKH N7bis"]_xu5bދm- ֎kA /;nݺԆz}9B>!E7/_AvMՀF-?Z )tU\PC5-E7M>۠:mi;g(K;s7b3 To)oix{DYmgKUڧPmP`9Y}J0pcYGd{%Ŧub>C/ ǝvKi%Ї:`l_pڱ{'%cJmsE#$L95ԧW.*:`؅ eΩ:VS5Cť%,*KJUmaQQ8J=LOT IY*OUtCߝ$˼P4&(+7r֌1sRV(7ԓBˑ6%c_"s^ ɝҜ#ħn>Ŵ38Mw΢1yThH#V.`$it 󆪱@1c&0~(*OD!qT%;>/[Ft7R*2-_}+[lJvݞm0F)QٻZc;eGN6<=U:ϩ+ WS6|yնZ!#v Zhq/ShL^5ݠ}CgT|h>=סE@QuQFڧfCn^kºKik=n<ޥ~؟o2,OɫFѺL*r ":QGE?$4"U~%Y7Q( pj01@>{3u:Z358CmG[]@AcuJju#*Rfʥ1x,/\zGsE/ OmW3N-5U0beћ~}㎗ۨk†+q:ia)H1-SV$+E2H1qթR 6Ys"ţ 6}AjBa=35D u/Rd7ٛݕT{w._^]pz9V;?PKRPYbuI$setuptools/_vendor/packaging/tags.py)AF$ (#.`kn!">@K$%U.X2X?dkzO@_GĊ ,hW)Q꤬\kCth~R ^#1d~ B:~Ō6#6Oh#H=OKC֬\kFy c%cc"wψ43*Jk3C;fg)@ѯ!F|vof1+dLgߏDdFo,4cVb.(ؑoQ{wA-U+p'7xUx_R*X0 (s:m+D<(ރb9za4>DhC c;>8+ڡł/J)BBdžQcMTr3BzUB8;:OzRbYQh4YY림70.S0DzǤ$*tUHu#X<#4R)^s4w^_~5dlR z&8g&U޸3aꎞTau,/TI:TEXC!쥂 8@.,CS u4@HiY`XkY3r(+. K$errtf/`^V~:# , \vM`fTڴ*ޠ$ݵ+++, O?1$9JɑAx'c , kX ,N _H_g0jL⬲P)%4 p^Xl8.Ec1y5T5{'yr?",Y 먪 @hCUQTLb?f7(j^aT ω8*-N+,Ȓ5 d B& s:X rɓ, ѓ\ODYּ|2m5={_̒aJd[&&('`q[?x;@5؊Z4^lܙaJwgRwGo%C3g߇'p݇71` #7 &֞C쬕ԩXd1QZo8Pq$NY=Xyw[88z/m\7O2t 9jrP:LE1d"u&̛aQ%5KVj2g4f8exKJ$wF/ PСw&lVxw罻E6h$* .ǵ\W(٤51훆(9>03?ՍEo)~EjRިk7 np)N7/]f¿z-!1? >@P4\(Q ?$ws=?bb6E b+liՠvSSYBZm [=ٚTQm|zlIL*PCZ? QuDQht"T!",]/WŦKZ6k1T=%{$#?08 j0& #(]K povN7p^CGA|B̝񸃮{g@bkGI/et!Л#leurfaqFB} $M7MWsFj;. 5,TA$Rg>Mg;/ϞNtAmW1bdOCOg04qu)VGw99kl Qb<6(qcv_7<>䄄 ƠXQ @]NMUkD9&m5>0te\}5Jz<98+jt]D ){`էD馬:JD_rAi/3e P_0٩Jn AtiZٗU/-螢 .]D12 YQQ?}L"lyޔ t3uB6ō $['7Rz{n;inU^GSK?%JnèYD7[$:hŸ唺[@l,.+u~(w+0f֠V}n!ZduLOFw {OvߩU[qsqLa:cWh S;`LٖÍJ'G:sяu_]KuTtzYS;@ T0Fa/o螹Y}JD] 7?/P!e@׼ ICO{(Us( U[+Q&D2iDISvFțpS|azoLQzQ2Wu?:HUyCR$̢'g$2>=#eVd GkvʮSM*B㥢rHT7TՖSL1QʠMEhTiv#:>5@&=5"X_iTΟ3FKpD&= Ofp)erΆbkNe?,_ע/nxvPOg,|UNv|Z1M%tj* 9 FBBb nXtBVX ^S}6az[|%D+~!4@F{π{}dME[=#E"A[c=,!ݗppٌNLr*A)z:܂7a'S uL&e~(߶,lovz}b #Y F<æ~H6Cxb}"‰ήdBA^Ũٹ)\=O; F':C](4M085TWnwxo1iD%t4nNPN1IyO0gƕN؇MdJYGѼCvtvӰ=Wn7;s\mTD-ߔnfeޒ&D+ CqJxh>|Iiy "lR j/Pؽp'ˇ):,ޘĎ. rJo3zԽ2A&c9 lCʍI}L9Ф}S/7Zç*h+wG߳!~SWs5P"|Xzbim{?*R尲cQI;ZU= V6묤~* [3Qjzm{SpVib煒.a r5Z{ܞS>dt{fs/ yG`\ ڵPKRPYn%setuptools/_vendor/packaging/utils.pyXmo6_("%f)yȆ4u[4i T:jeQ#8/ߑ"ؙ[(j7>wܩr 2M3 4#Y:\@B<NMN "eK~@hhLH.pt14s}mCD*E{SɄ- $$M3:Δi)KqLED9Tb(qJZi>#X^e>GLz(LXK: HAuuk+s_,M  (2@+7csq?Ns!y9#h]H= 8 aG0q㺮<`+9^ ,1sVf 6Ug:?tS2dV >ט|XJCR!KȰ !%GnB]"J;"]r8mB%%*IXb3TsUcI~b>ø3j5znxzr1t|'МD:0:pQ6k$B{wU =Eޟ;'7i RM@rqX-JD[H]LP,Y*C'bև}J|/]U LI:ꟁjĂ< Weh56TU4|BV.̵SP:W4©k Tـܫ+݊z_!'Vj/Ttj^PWHŒ-{aȋf3{ˠ2iKE;]4F AJiá0fU%V'MQSK4:GdžR݆h["EQݭAǨ$sq 'QN!6RuޒTIIVd - a'TXhʻ@GogB~-7(VL.9Zd_ HIQЏۣ[fEs*#`R Acؓ"Eyr}Q]]{T>wC7Cx_Z*YU.T50F=*GA!aTdEͮ玠<㑄-ypr`v /&&gh oSWK޷kXZ&}qΐnlv*imܷUj7s,Zɲj(&;EyW5*z\zcÝڥFQ=<7\3wӄ.iNg2n$W8٬ԃ[3Hw sG8\VwQĪ^kYMش*d ZY*qlyP^TNd$ݖzj &Te/0XhqU4O5qiZ~J8f-W7zdw @ tj] Ih[^ϣHpo` PնJM4:IaTgKx+IccY][Q .5/8P vKِ*Vጳ~@f͚ЏrS.=[/uŴ@kw[6!ꆐב1섳6+)\Ha!Fo-]ZloS GkpJyCӬ0 ))8'sOq.`\)WLH+<7\SNX.)iՋ1#Y&Z SK]ETl֨\L:JFŭ݄ TmGtmPKRPYe/IjF?'setuptools/_vendor/packaging/version.py[_s۸ק@XЬ܃ YiDd?4;~8yw|z~l:L̲\ Xf*3yL0[, lj ztRj9z f2[0MpbbdUY#dWRL&iTg<eHzGgxi.VK~Z":IsgLQ-(\BTEYq',Ndo%7ߝ(OכL@0]z?t:9;8x#z$쓫^CԾgALLŝaФOhC`WW(ڵD#*Z-k&]w.~!iz|p3fD|2VYϳvyU020J/r0`օ1E?HWbr{b'0鴣EQn&# ,2<%Y%\2Ѩ@- pyseڔs&b_V ЌG,BcR wDT`H\t$&<#R(^YjM6 m?t~|}MjӣOxf QsrxH!2BuhF) s@gBY נ]eV1qkf#ttGR%!O՜(H$ܕr"  ӔMΠPn!VP[M@jۨY*+Np!+(u`[4vt39hDC_&^F`K_w{3%'geAIנR Rp)k2O'@ì5A=je. z0` 5v*cH1ԆS+f/H rA Dة-0ŵw23t s4ʄ=@3{zk]o=V<%cu'%S;̩PN-cˮt=0&Pp^րKbAHT057*y1B*7Zhˤ5O}R;j7Mm L\cCiE>:21#Ɛz@A:sALZHq>kp 7C'Dy%T+0xU6u.(դJᆰqKΎa _"u]QU5nr'C7+^iKI~?vTa/YѪ0\GYKj[lfǛ1>aNtwv٫f5؀guGRof/aAqSUw0r%A.3bb7j6 Nxǀ 6ƴVc #y+!4C9|gCig L2t9w N<ir_z.W]B*΍FUv/>EÛB^1ţ[e9j<`is7z <@b", @R& 8N݃`sAt籸h4OEYAZnE3ig-9`Y&ܷZjFr[iH!ӘV 6Zv+O+ .D} ǔn2~Z?]NY_2ڞRUf1a]6:]c\^_1#R~|/7 A,Q":Yd><-NS)S3K )MPsxf+~;2,h,$5\,']I!i4wLہ B̓ 6GKZB+ ^M^#T>Hh?) "3_K(v8 H+-8hV<R0KϚt<(,,x"qfU'ߴ,Bz1B .A2 Qfk MNQ2AQh\O w!6!J/qP hPmr+o G1w7ŘZ9`}l *T1Wi73ʼnx!ϤߤL6ps"i1(+ť9J["Td ɝ.DaE+&DͮJـ>nEvРg(99:X'N1hrsԵ|7/ o f|)EtTEߙ~/fw`m'մgb]4ӑ.8g_q[dw" ybvzt(]'$V0Givo*Q)nqb%S|NRH䛹7y=S]=/O/nPtd:D&ᘻ,Ta'bda7x~b}xPg@Gśv?94a :d_9-%U諈L˒ы'7ᢛ?KH=eàe:N0ˌs($KiU fEVX@֜Cnuf^:U 3^{BkMib%T$S:J'4ocgt5pTK{Ux5:ë`S({RѻxEF Ub-Ф]9iS*9^Hm+*R\bMsifkzSmS{(%K+ M~MP5=JCisE|l_p!Um{v|0#Ľ܈C+\9OCf7/1-v8O[yo➱a7ն{#Vxz\eo;٩6v51*O奚~7c"u+bŲSz)}]?PKRPYůqV+setuptools/_vendor/platformdirs/__init__.py\_o8SXٗVݽhS)w^[]ݝuiang 6&&4 x<3< aD$G %!pt`؃ =>Nhq&t{${$܍ȸP}% qQ=n3NH\w4A pq8FG4Ȧ0X8v?w)c/YGܬdx@ zJ14͐jD iI!07NsJ81p)br˽ztkMeVn wY_!=藏L;q}GLK6l/M;\L 0 G eB]E$~S~"ϡ=lFgG_ܣMcׇ (n`wo%~ ؈Μr"PeGɌ9K*<0 *lڴ4fIaAJz$e1RG}0n$A z ?b>(Ct0)+1+2 B~.SHc$~I 8t qG?,ҋCy,;CXvioObr !_|MTjn&.+G&@4%]0 D=az${27 KyɤYbPOkL8m\eTx4/&h(%1ajIj!?C3*ǭ"L1{J qh$OʍGlYT2*M깒2VJ{i5a:r[:,L*W*;p˃tI4D*ka=Vs<3)jFgO0D2.kO7$ƞ(ViC-gMڐs-gAI{m3zX@;#qk$lKAK7!I#C{[ٹu2Pd@?pش(6eg.uh59bc3^ .>vjoDO|81ZEJ;3zo\drq8j07K捥L p6mn 2\WIol}ͧ@]} +ojW]ρ^/TZd^co47 /T WDZirٹ4) /R WEcYaMp36U W7D=U BV+RE0T5Z կ*]*i*kY5WTQ:,2-2u7 LׅAFiFJmAwPx9glh@aWB6}i-F5p\F>ʓ$B0y|*)(/z =_-KXv[U<舥n26y#ʾd)ē O6js2U guVcP_pV?LVeh{Z#VEMⷻk~r[3vGXD59h^or ]^-IL@V:n]59y]TH=%ja}:-u:<PKRPY7kLA8#*setuptools/_vendor/platformdirs/android.pyXmo6_A8fcd]iPq`y1C2#Q1D*HQo-v:`?زxGf9`^ĩg5FÏ 98",D1.Fü"}H$"+9D:CŎ)I<:89wogo;BS,Tj`hvH#1uh4 vRG<@rJuL=\&z)ڟJmc!{C)frgjIO (q_ ax4ITd9%aq:&H-EXAAynwPS/l^PI^Lq_͵hR JJR937ZLpNR[ k!1M|jdsjlUެk] hz"5;0z PX%NP1d];l%N?,U|yPjd=D( L9qd ao!Sz)A>zrZ 6퀓>_^-£d+waR-2|&Y  Cl2kKtMs Ƌ;po_EjV-/Bꪣo]'R }j2jypK=ڟopƤZbAݚk ?Uf'#?7uHoD{ #~3Igk`:YAoWXtO?c 0}٢ W7م5I^ ec}Cg~^A㓋^Ycѓ+ LH怟H\{ot *ا:JiK_XR?ztG!!*OM;GwPqYD젯PXNVKu6IH X^=5 ͔fHe#K55#6?c.gveP8S^-X bી-*ͭ"lJzKaEFI.5K>7~~Ϥ5L!ٌ[51 K2QU$j#u?}V{%W$c,ܻ$hdX6cҼ&hWa 0ܽQ` .e4] .@3M#fdzqlbRzY/<9Xt?܎"S,,") `mi9J̓PG $ @э v* KkHb0.tCU M}GDVI5xRKb5:Rtܶ[|} `8Z]"d5ҝ*.˔례] I ]SU8AN%yN B' AWc %ɋTq]9r-3&mr%'v{_z!F ;0%U\\'''TЅdaHx 2"SN(..pNbrg x z}xןD7?k]k&rH>qLz^PMBT `D|3ᨓ b#h($E3e1d<: KKyFS6""EԔ /?hʰG&,Ykh)h JDPj.o·rXZ$:PNnح,:bzd?j񨌅毯$J26_]E+JV12vw` /UhHVa:[UhVaKpqMXS_'#r;c܈)~`e͎kSi4qCo ,%;D f*4&bH&ØbH9&]@ޱ)!j@tmxltǭBbpdSMN@^Uf4`4:K,%©Dυ|n ɥ򄩡9%&' N\-Ť̉+ʯ0 F^ϴTh)GR(1T)˞NZI4^</ *vT-Z^o-?*Fd> KsP 3I`3bxQ3S ddž&F,u$2[h0kJNgͤ7iln+wZ)Pe %:.U^5Oљ9ۇ-JhrN;cOJHW>Ed O;ʙtn7ٿ-6~ޱt=j&]c+̞Ʃ37]9{'I~+'xTZ-Prhڪ W;/HdO^5s_DǼ *%$/!pgu!͏+?\f8YgA%Hf_s#$?dUBa>fqKDobdqeȺY[θM}_A z܎Ic~rk⑳| XVG`=Jg{̇[aV[Y# W3$pÇOʦ@E@&e[o}R]Y昦/CK/8ϻSh^.2lLC-3!_|Dlⳙ?8$ ?HXh[kjPgBC60bhU_Wj63Y>SK!^@N+";UioVlYQE;^P('Kz~D6 &#+WomdbӜ[4v 8"".4ٝHQ|'FVFuۧ'~DWXlr zQGUq=x'ΛBriB3lp8rڈXcZqF4`+m㢗w)]U b}FXB#܏|\פo= 5\ ~\Na2\LJJAR|@)-)J:xGх &%P&ᚯ .` F"7! ~h-xZ X< \@ biBG'0 4x|{zAp-~(2Li$g0DwwPKRPY(setuptools/_vendor/platformdirs/py.typedPKRPY;I )'setuptools/_vendor/platformdirs/unix.pyZs۸x&ҌL&pu/:s4<|C"(o.>(M"J]o_<*叾yN,Ŝa y&&4MTu:?',D1fT*&s#߅ReT~\OB?e᪴!KE03G5_DM ?C"(QPv@^8(9t⊬)W,5+3Z>Kjpb yyGX@3C੧@3v M!.M36)xEh]7mleʹm/;+q-Z^zqtLOh=JNteX1 c9$+Y_[* UB;:V;mQy>v\7u6N6;h_]ɂڶ5魏8: v{h;GE])J7=Dla Z(lPE&qcSԱ_8K%v7ªf6е&6eS03TcFvmh<3jv.& l.ۥqN4CШ1g-]8a(W$mHHi ж ISjxzTjo$lJ meZX-d࢒V6ڷ[<O_NWӳŵN#?J> ̕}4|^sLNqCdz}"|fz < 5I­s\fnR"q۵Jx ]4nU2!xR2OW7|w[;7}>DʩM}/ϐK\w;˺[Dg[!x<;-{{PϜ& cnXj2vʓ.;,,fG O%&,0]gaGSJ\NY PKC=x]ɴbӘ<(f(ڞX".oXY`sc j(ZzK)*>ӽ:4LZ( 誧Oؒrzax!Yj=[4>Dx< `(,h8,Z/Cov|5 liFn;/TrG+~9+aG.1E_}%|ET5ׯyC~Iլ= r,Rwi''Βoy[h[ inT~q)ok0+ZuKN_,v.O ;kK70PMX͢Ids b UpC02q0WH sVƜ褘03b^fp N% yLY}Ǟj"zYO2nCYɜ:ː1_jޅzw<X?Qc4/K0]\YH&M^35z$ ^]?/wRqK6ݻn\;W˥ᒥ(yF ?5騊p$L5w$6HQNw -b6/qRl^7h)Qȵ.0:خAލ 2_O *C\qw‘mϭ258:lL=i%zް2g1IPʮ^$ ͺ+bB\ܵt(F7/T| i&i?|31 { _PKRPY '*setuptools/_vendor/platformdirs/windows.pymSH;-a #"3u5*LMThC9C:nTnn=OwH ZV{wS,?? X, ÐOmr2&$$(;.'1q8ɹ'"ϯ4-zǣrI 0&qN =9J@;_\5Y ~>u饮d+f^tƋ>td*46^b{ >}rLj&D[Stv,"bvĿ6ܙN/Ek&jR3BHd鴮 Lz=zˠDfEݤX:xBW|{:%Z]~7nn[ztUJo'2>7[MLur*`^m1x<țFz<%4rx4ϯ[MS_: 7ld/%׀2FԈkL2%y#X(Pul<̴T(JpPڤO&\r.}]-zx| F6#1daĎN -Xm#8(e/j > I^>)~;lՎQ}Q?GJ$R32ϵPM NA tCtC\uOmqf? Iյ* }oF|0aXMf /!yЍEb;|pB/s$z6Pri-3H FjJ뇏/vuuccCf2Oz)d/?Ӿ^9x^=AΔ'7^+^) gں%D.)KңKm-N5ڼwBj$;Kc[pY4uղ;Up@V#3o;dtQ|B<"^ݥ)e5pcժP'Jz__SGVzuuyy D61ZQ!3k=5Ć!m RR$xU`%WEwSŊ>rw $ 8cGfxZ*6jVd I>6*DVP9i2 @e6+;6ŠBYS&HPcϱI<'kj}nzX7ft (1j|~.n& Q4ڵ:S{"G*я~` l!؆R a$ R{BAI2EBrM+m/eJ,#tA68Ɔ|{i0k}-PKRPY]A@setuptools/_vendor/platformdirs-4.2.2.dist-info/licenses/LICENSE]RKo0 W9u=J#/N[58V )G:i`"Rkb{zu0k㗧ǧ?PNcz뎝q:[gh7vaN_).i vhAG,4+v3 (p2 Hm.8AmM||Shf[T7~t323=ń83-qD`vA\+*"yTk$+qQ|^װ.D`s)_*,gY̨Y;خH/eSke)UJDh!+Udu"I+ >]GTSL߆_PKRPY%$setuptools/_vendor/tomli/__init__.py]Pˊ@+x `"a= c`2:]wttUuWߥߓBd:Ϛxu.s5-lrunx ZcnڐQg/ћ kS,#0QEA k)񅏰1`b.R*mE;mC4@bQ dsHN}/="/rq>gpf ֲ߫1Þ |#^uԺWu(oSER6kzҨPKRPYiiX#setuptools/_vendor/tomli/_parser.py]}`y4 ieI0˳8aۄ Z$^1]Ypej'(μ,T0>={3_5ggOg֓翌.ϕK7ݹ,X0yf<鵺pC{|Apë=\ġ:2]XċnyqUjvtnzl #/M9=|-7cxwi>,#P6z.k3/ {'b& Z Wc~)Kc쓂? #HC4) :XzLX9lq{#lg f|Xt{CݦH /jb;ނ=$'!7P`!M!1 d+]q/J9Z<炒%*$yQ]k-P4㶡I/HO{_H C3z͈@3l&59`y&]};$NF6|Gx[}h|*%i/aq$ m$ ֭lL+ V[.`BSgLn/kDĉӼEF)z!Q bג!Y 3@T룖ܤpg+o&-D6"C"2|jgh! :AD@0="O7 S.OA`%d3f?01:)H8DB)· l5!:,}2A0ՄiaAdIy -}Kb`D]m K- Q= AΰnqMu ʦ nA7k`z8QJ@@H:;ճk`عPWÙyz~W~CC1t!*ɣ\t$R=P6'tMmazQb-JR;^;Ԣ(k#z (inelat"09B@J$zTLWjR68=3Yso 08RXk$LtOh!^W#]yy&QNi,"H-ua`rbc/ o@E{$Cj+Bkĵ [YmUFoi LIbN SuL3np_zOEV rE~<ٿ +jL)UcoRBC x b+ʹc"X||GRSaL #+jHRi[S_`62TfW Ƌ|.=J~؃ \ %U(90긂Bƀ°_@Zg [5o,ӰZ 0Qeb Ԡ֙{G5ɨ^Jz6R( qj&iIBH2ql&/yz6rBhL]?=OW1H&Id``Xz(SJd Ne!R](j}' DV%j]*!e 93sulGY )oIzs/㵴/T2whP,gw[ ayz |C^62enkZ<蚺nS.AQOgǬ[ɠtǁq08|j6&%h̀Z ?)tć@KCI7es)jMc&fW$e5V%,}T^Jvgȉpu7L")RY[^u%mh8xX"d2s]\ )BNDDž k `<%!^3n]jvn|u(6ri , 1PMƼoU9M66co ?83W`eU2ȇb#ʓ$8U!Zr ,eǙ:b0vE o{%$e%2)SڲgVUEzl(Y[QR$i+!]4{Qm 2 -٣@5V~EMJ+fyC< >GS0!<,@5;fP]?^0(-؜E0;zH=sq2'ďˢw,uL.6$gK`G 9Hc7+K߉8L>Ȃ='5Fz)Csږ襢^!!Eg/xz6>*n~mrS(8SMzݽخfklR-P e7آrbϦ+oy^+,[+q !{ ĎX̰AU)֠vXԮKIimwg3/ (e F&;cY,}ةrу"pΑLJAf L:@d'zڪXB=;J*G&ywQcS=bpk1'6ڿ2^>G~z'AslΊmU0z;`3oΥ%Kj4V,~S͢ZvYD&GS#筊lT6rk9FnI^ڪS HdcJj4s3j|H 9'ApsکB3t L6UO+HRm)z$^/EQW@0 JitnGziׇZ\-;hI)&=EYشItob vbsB-< 0v-$j͢V.~n@^<(漢xmz]؅dcjIDsZJ5vvҤR>;bѹ`XvЙ':eڔWgaENl #= Sђx2M4#%!֚3Ib5}83l.GYmX#;np&Q)mFfpZTl -biUը}2l-k.Θ\r*ZM4e ɪ* Ul@.izqv]%h*2V+@u.YəK-#թgcz۾ҿƽ[j0V eDDP5>duXK-?} /&|ڵ`9'?&He_\I*{X;VjP yУ\=}Erp&4`DI|*>x&Bt mGL8 ۡcS!ݫ\7%zT(UA?5.7`xas/%8=f.]UϸOϪMv T7gm*:6JY87}K r,M>`u{C_f L$RP+k:d:Q]^=1{^FCx#ݹWd}@@P#{x_Oi3t6p b E܆gJPܱ$>}Evˊˎ٦~n\KBbp$ v7bo-yVe,7  E{ޖPS3| Qu L)&C"֕(c3*J :^ 2= ޿pyUit1oKqRqUm&n׍xbߊCW)Q΋#_~G,_ Lj%ZCHW>HĝVF›fv,B?'ٱ)7p`Y'[sWJSЖo'ה-ǻw?,wym[o㫲J^Ԛ:D+'^ &a// 1t6,Qg)O =0ʉ;Pyk7l^ɦC"(wlmm DξH` CZ-%C/[" QQRV}%'=LH9h4 ND@JKp5O왮wᢖ4\><a9޺r4zn0]Mwz6]7 c\@1߬KVk:9o/PKRPYu1~ setuptools/_vendor/tomli/_re.pyVmo6_A(_T$gka i-yHU *b;نaǻuo?~svR\<1 8Ǘy/fK hoyKPWRDubbtAJFǚΗ5\FFEQV(BzC(CqYIcYZFo 厔\ˌH7Y]&~ ZGIKMR[ nocZ˂̀҃.dw&~=ͮn4ݡ15w;Y!ܟ&%ρc{bTx^B`2io>qs2vȢIgoZ'yJ3*zˎC#DfޘqiAyjjSqV#{n&k7e4NRSs<]^uӱOIk$+e5 N>|:p\8փx>I3Σ۵|>hHՉL@(C;7Ӧ(3b܍Ec-hP%YVajHF3Yt[BrHnFv.Ra|+NӋé/~y=5.j< VR0PB(1y*-Ax=չ1*FFѹxH=˚ᾬP)vuQGb6"I[T˲oW l(hTm'[Ђ.4hzAС@y>A[M4R ]Ҝ: 3B>uM>JN$ʲ++fu零Cm.*|6 ;γkijFlVkB^&ozA7U^]zAht˕f XAĀ<7N ^s2epo 1< \'PKRPY+)!setuptools/_vendor/tomli/py.typedSVM,N-RHIUH/Rp P053PKRPYBW?(setuptools/_vendor/typeguard/__init__.pyUn0+Xb? @ p QDJ&LE%{(KV>KXKS[BeT4Rդ,C|Sۦ.``+.%IPnLJ4 }&t*# `籴RZ̈mJKjBVhu*]WZJ>_p Yqkm^I }R^gv _ySA)@]$[~*Li^c(ڴ;UZS堬w77aL+u^ zw)9 b|ͅmaR*ƙ$RL+!S К{lX{xoµ*F=hg1yGࠑC?dށ ; 0ʪ( 랖f0 zJ>61-(CMݐR]g08Bd"*JZU4Ke"EigR\g~N(~"`Y3o4b,I%W|YDO^1s4/V}8R  !L:9$fyN{:o^\Шь.οL-HleԘpQ]bWYn]_;cޘ9Z9q\VV!f^OmzJI1\&tlB0hf|dw?Wqɖay'_zF&3Gj6'PKRPYz)setuptools/_vendor/typeguard/_checkers.py=]sFC] *%Vu,$Ҫ`JX_wHʎe&3======ES/Y-ݺYƊn:WU]QW` fuYt]Azl7mV~( t7<ϫR| E^ʛ|;ތYʼmb]JIj^,xO[>fF|uhM&lΫN#՛р14m&uy' mQF./|Zr c~E7?+V>;l픽7odKՌ' R-W 7 `º*]gW?oW _?D`5 ud"xՒw3sz4u#5!{YWG$fV\Tu@,|0xLk;n9.M,mms@k2zY}Qsh̘#̒ 1L9[V/5o5}ed(p̼ ئ ` 2 pHhyi6E׈ګ,fUKx|wgW4czGQu.º+J _:xxﲶgW%xF: bQ9=2ZI%SZC6j̞>MNY1;IXS.Ec"9GeQ˛ ne@L4NX - Dۣg(VE Ijp7 {*E 0tZ^pu)JӌWL\>1;h<ꞩS p<]E3j(FqVd!I.ҩaҝkpP tFoZCBɹȭ>&ےtfF&2AXb!b@7_kF%e~8r.5|ˮuź\gW7)GsTÿ❒{BB5R(],XCvM,DY: }fό|a%<}KW8g61l:m7m pMo#(߱)8w07j\GC( 2^>`G̝î>h?K"|XǂS\b\y1mX6*ä7tA mn=~,E[&QRQw?\gbO= Wf$` 6Kkqb Bc^ F@őE&Ip9֕v'6?`n]\pWj P呬\Uc EHo (j_p@pXxks uvdHp L4nKG ,~p ־̗|N -#W\M9|4+C-8y˅Lܴ AsMNأ[z:Ww/Tl\)q1]wwGV*W(U U ԭ[HŪ-^sTDzجHRF&<@EFEeb#S%o,5lUݍ)61?ԨKcOjߵLBh]$V#heS}5{$b|yO݆(ߔ7$kZ6rPwWn-:ϓD)>+Z+G(dȚmטO6#QN|˥׊t9$ba_296D䙓7M YrNЙ#"V>ܙ4WF"^4anh"7T@LuJ\~qP~Λɘp1)qHU".^WQrH\!^'˗`xbBX^kf]\a /t舯>vH[ӫZ+v2 5M]YQ.ם+~ no6Z|+_jǰULJ$T)Zw¦u]1niƳj$}fwj">gQP؉Dk{)ӌv /eʼ z M^MZmO9Z ps|Xr62͒aJIkcK0|iT vk1F C/x xr.Quѕ ,<\L=8q}O!#,AB36+>>Ewu=2(&w~`a-OLqԒx\:e0v"f q9%GM8,KI_n#@Y Z`43Q(cb 6"F(/ۚ,HO -rI*SU &H:*ϧNֈ1RF>j)9wy6\ LaDN!яgHŒŌ)5[bMW[!h+?:# qE-6qaK+źkL,s1D8;j5\U5 {|ҤY;fDFʘ-:^1*^0=IH{g VAw j# ɚz`L_ ޭĦlΞ?>NіR7'탼0{?roMz_-@ub#'\BD& +NXV]!qY Mb˟he٠X3 9Ie D01԰W},GN#$04K]sy3 &-[+L8P](\>uG'a\ yp^^Լ IsFP:аnnd6)T֞U"=bU]bCwmxӋ}XzX']_ !zfeYF>`/l1ga09c u QJ'&U%02 RMŶ-a֜) 9;W4-mS/i[7Amk( >D "zreihp=QÂ-3ТzT26)hYy{Bh z*buyB nxpHi&ш GVGzz024'n4onN9/@K"O͝Lmqh-#'tF$ڼcr.7p?𲅏‰w)} xޜ<;?PܖI7t۽oڶrzluʇ'}#&'#o!6C 3ewvJI Ӣ,ǢmE|i$h=U:|V3rG[9޳R46[QXCgNQiw@x7ŷ.<@DÒIIح$daS./r{ 涘S~rHZonl#cW\D?!s:D&an ^jvS Q<(DSBE>WRDnMcoUá$]׼qR*Qt)/W!ܵrȍƀt# hMjU3ie۵#:y?a[uvD=J!"բ37Q(g*kAE̶Gn3r)jf{xbʴ5vMSw1iﳟs8^FGe C#*蘄lE!uJR7ռGQEݾ׻5V6;n5Q7n_h &VOFEvzŢ:n%Nji2-~a/$}M @ۭmǵ~CX#atI~|n]~Mjѓp9VQfʅHHz];K"B2l,[bXV ?PǑQ߁b2I(Cμu[?[4KB1|s."xG;g^YKȞ7vA$ȃ!9$G>Q *"X3]% tFTOlweBaP*Y)Fԅ{^Ũf4Y..^g7 aFHƜh㒈-85zԯS-Sۏ0;L3VxF:;DB]+R|>}xħ h(wٗt=_: `60I19J ӡL=Q"ٓm_)/XoVYPv%au5Ҏzb/'`+ z@&>(G.۷Z.zo߲@|R,yG(} ?b8pD6MQ ac C 9lU)e۷o~}uOGϲg_}8{̎~zsɫ뢩۪ fdAJ閩 +qّ"xu8#s-,9= :3##~ N%Gg <0iXtߺ0ϻ%&c 2VtA`{;a=K&PKRPYV~`V 'setuptools/_vendor/typeguard/_config.pyVM6W{]8T p6 CM,M$Aߞ^Et-j8|3͓ ,U☉Cc\)Z ((&RBWBfmҁᩄ:(g[ Pա}3+gT kn<-ۜJMQ0|P5. n!{Bι)^`l3Nn67 B(pR_!gE(0`{r ypHب%bJF|0,Jh&~JV`vHi O俐 ̍~' ;y? /duR)t?|dJ}j5dY^; ܍Ҷ.!hs{mt#|*>a1b(u :7{i8>W nّRIi%{#T"̭%INd{aT? p$lM*(#'u(NnZof@{X[ӦBppK>\g>0s(( 1[~  :zl}?](qUń=~]Μ2~سonB'=t{ ckKþi'-51Q8[ODxs e]Ce)WS|nO[9ҳÐqH+QSY ꈞG!6vni w : M9T`/Z5PZ DoHJn<[,OъKҿ'.| 6tzfk#+QW(^-qMm\" Ht3OpY8%O퓎eqCG-1BaeAx_j-dhBe̚2r:o?Ew*$=y~lsۓ /p1Xi[\?jвvZ #k} 3R}N˥Lw4׊h0#}WxUs{U~C+cD 5T$5=s'uʱo?זVPKRPY?st I#+setuptools/_vendor/typeguard/_decorators.pyZ_۸`upABam-dC.dYʢ#R٦iɛ\65pf8즗V͠5+NR ٩ʭ)ފNy5~TOj P%֑-+wC{? !jR=>ekZhL-J OG>"\ɚBʮZz41oJُSʮʶ-w-rwI"SVR&xʲ6@( ~^GYQɮwN=W{^ݿ}ݓ[ي VZ+[NJIN~8W#w u)Z<뮬5HөFwHv3=s )qXu4lޢ {Y: xWZ"_1xM6:Sn. l^\]qqHqT\GYyCtBuq}.. _QJU$@uRY=6 u\EJ F%XZVu@0VDd; P_V7s_z<gQvr[dYF} JYF=lʋv9WR4q[v5BIVU+(*3#Ft5xkwjSFL߮oX}> -8nE; [uzE:^- z (qIpQ-'3xK$g2YZ"@ڗ$$>eN|ag|iF[ny{GO%{ePlŖ^V%_桵yUfYZwXbxO $l @Vj* bvGz%+6L2;zhhݠ9&Ă788DO]FsҼ&6e ;Rwol_*}y<1?A;kYvSP9a٣{Qm`RJ^m>2䯏<^?Ml61x N(,81jPCШ:BQ%wVVe.#W d2ɬP'eJmp goqk('e4_tet< cuf]8 uշ̆5p)D>5ma=!Z1#':򏼂VN^M?XlHIĿz๛yN裸hNP2f5 wCk3`ik$\)w}cnC=I،u{AF ׁiɬ#%k9L ÀD )]6Sx> +}ע'ozEi(8"OxJ<>w%%9:_^?M cO|9$8, |EE1}i{XHMo 5lb{sѳTLdq|ֳ愺0KLX,B Uȷ5n't8=:'jZëbPHEWx.'ԎUHh1/ :J0O(-H&宎Oz$$ڠPwIO'4ӌ=W>+`@Yv댚:63^=!}f:"c& |4q-uk?z偽Y-鴰Dy-1ղ"oʡ촰D~8c68q[~ "u-!|8&d;)O 9"M) ڙJy%HqG*TZ|,Eh!fWBݚnɲ0G¦aNC^ƨ }q @@J Kq#b/@SLC|QZ;qҷu,-[ 6=eE*@~h^z:if6\ϗe3!Y> ^\vj3Վ;[x/4Ԥ`EXJCq#6GH12K2o3@&(f2hx@|);5 =0†K n8{N?*e8tTE=ZQˀ n] =2_~CGRs2fq=eQsg׼h E $ߜWg fגf=f,?q/ X5 Ŏ?,nK4v%I;z*+ = sK nG-TDM}BĶ(S0]A 椶Ix< sof^a]iADCB(eߝp?₲Øưr d#f:UA,MkRsua\ Xy2FPKRPY>Ua+setuptools/_vendor/typeguard/_exceptions.pySK0 ϯzKy$a2; I]8iiX!$H춧0BVl v:2Or֟~] 3D|m|4䵨Hs߁(}XvpЃI2rBMWEIȴFLe|J^|9`%Ӝ&C#- ?-F!PyY71vCXoiJFlMTVZUk7^ӈ^L_Ne@B a R8:lE |ɧ^_I@<|k1&_>w?cWBu U;x65e)wA}_fqx{$ꙣ\u.i2n nE(y( PԟVZc=)t>^!PKRPYwhw] (*setuptools/_vendor/typeguard/_functions.pyZ[۸~ׯ R 4h";ۢ02-Q6rHjf4{)ʢ%x2&dd<|MMlu+Y^ TF 螩rT .*(>z)1yAn*7[EL{*c1inZVJd%S Zu|wL*揯\Wϯ^d_^o9&U氌 ͤU/%m ׋XN?kI5bF[Vx=ELF^+M rz]&nNW奔iz֬nF}^CנռnΔݰ*&[Z"f@1!?.I\\Dqf"y6 ހˊSJQ7pW3Kҁ \\-w'+J]j5Gu= VaS~CoSpV):VWsX$+AC:ؚ$m2rϳ?P$ =2-!h]|#Jo o9` 44Fɸeg&P9#t3Tu$}) FD&IzMjA'^kȮbLUGP3"][MV |5W\I#j7yEZJD[o$Mi]P0]-H* N4x#ݰFtC0/  Đ&\Ks~K*Ҟ Mʚo`K^{jUXQ' _$5)[)q2ʶÊeAKh kiJY4\l?P۪ـQ;!nMA55aj6]NkF*[ErP-H7J0FapG, zO;*Ы#iP9Ȁh=yHI+@1E|"$;zÌ AH'@ԾfUs=]=;5.u=Rq91%F9bPt)tc|CnPkb%Lu uZ9&3u{5)ig걞YOftGI+=kBs+O @`rSse;([ G$FvXyOf?;"lj\ ˙ǎa^ξhJ ?BA C*^6nտ4+ VwxaiݬC:4-2̩bTMn~/+HˁTh,}c?b:"$O=ջUSF"3$AJ~-^0WGG͵xC:֒Mm^)eo^ZZv*% _ؒZu9. i&dnNPB&h>.CCKo|*aZn[0ם~! CD^ cCҏa&#$! 6&B“yrtTL’zS,Y|qANלl >,]A;.36XWՓ*O,B=.;;,xHљ,m$ b\E꽭qegg.c?hv'rlI,6` \ {}UxEhW Ng+N*\tT]|Mxu~͗QSdo;<y+yX(@C>t1gSBDRvNŕ^tFy]X1ZYًjrI.;.r̝Y~ۢ6L? ֦GݨOaߚ'iN7a+!Cov.Q`VxJ./&Z?dWF"lTVRc!}rz'ev3?t($(6)18(HO5Ntg]ΰ zX*QΙg4wzƆ@oGS޷Y5Sp^Lکc|T.kD̤8"l 7'_Fw&'lOٷƓ[cx^htY;* &cù?s&x~Q_[Q PKRPYdf+setuptools/_vendor/typeguard/_importhook.pyYێ}WtjBk³% +;@&E6%F[nΎ |IxCrDʲ XYtB\Q^VnM*(/=˙Uj*uқri]2r'#n~],)zKmLLO:=/cά>m; vn_X2R~{{ ʪ^Kuиj7VlG#~~}`XF^e[TWG'{:@^VoZgQĄS&ao0BZ}k~/\+4uE%{TGr"_gB=a"Îg|"$jM ڪ#ݳ\C_XSԬ5?nn͏5I aB~K$onK_׹#WTeAns _݊yZ\F04XYV3HJ X} v ֬ ;;O  ;:vYT]| jր]:E?H k4yƵ7V"\̇s_˛dz`3.y][]+=&:1j^g+TLʌlbV6j8"JS܉.N5.kMG^􅲈?x32 NjY#eK#]9@˚<%WbX8ܣ֕PzLO'Q:C 0 8}/B r|d>O$sO7Pxr{'^G.XɆΕz~e^VtnN/ w`U10I|*Yd|)"r7D3dj y[ys=Cz%|j82ӱN?KV3/"iEGJh 5%=Y[3M)N^g]̟bv:&Va3,8xJBzP(Rw7H Ցk$hUlM̓Zvɲ&K>d ጺ@MKFv"jZ w؄-~͍q iX,(3YDCnaANw0?0 銚o2 \iD`2tb%W9MԷnL#NcI C ~e: ?n`X~gi<{7Q2NڠLh} f)33 Y}cyGWܻ˙@qfJ`Z`A*BBڕDCtMpueX>@%u> {YhF.؆nnᧀf^G]1&ɈϙZހO_CeVc Г  BkQ1xX^f[% mw4Y7n<ݻ] Tܹ{H>m^)56PGgN.KQE>Gfb= z>9O u$I;jL=^_e1J?B9;Ď c6G5p4 J†*૮xvt~i2 P)}r08 /m-H"!RW ߤ릂n\bUz-s0syMәÖ=Z&|q_#EJp7?'ࣵ6gM W `FL,^歆5oAoTnܐUqFKpC\DSW&}v*OvӋDN ʳpFz+Um3Js',xUE`^4Z7PuMPj/&!V ߬%{mRsfY|O V8~6U~ %Ui+8݅4{Rq4ArPKRPY'Ja6@.setuptools/_vendor/typeguard/_pytest_plugin.pyWߏ6~篰x9)ն=:ړ*,­Mv]lvCdxo3R]Z|~r?'撐$ ՙ"hz8z'8\[;BG'YIH4Yu;Z'֠UjT''hWZfQ` ՟f]K ڰ$D $49 唥, yB{ y`R ҉PVkb| XҺ7wȈӏ .Dΐ0!a˺V^3Y=^7k Z,ǂO""¨8vT3x~}OnHZ:<o+wl{`tf' L}Ef3nZ? ;3)EvѾ sq:1cDL4D`69q 6I)$ =:a$3Ln `e%&rӺ~P>ޤùӛE9Y-E \=T]R `!tSor~5={’CAZLZ*C1Rclr#*FDuw$PCpDb% JVCkW:xLט-_$ՒwQ]ںA7o`9?: ]wRtRQ09gGqeAcBxMᨯCDU3ڎ1WG~ 8S$҆R9BǯVƸ)Ȯ28Z!sK_ +m8$XeH*,(vG8E6]C{}sv)ɶsѡNzmTsFiSJZ^wQE|=Ю mXOp?1$[ L%sGٙvK[a8YN4œ7< %!'T/Sz걬Burv ܾ`AU-j{x!!үnUK,*Zeq9<~KcXQd;@ y@[tqVfOϱ ɟ\@{_p@@\@ibC?hhpΖy޻p0I Lw:M]+3N.%%i@ṼGc; % 2qgH/Rh)8@! &$䞎s6q6L،!8/(q\wH)i0{ m6̦"yEqٱ̡s=7P|Da*QƏS™|/P8/&7`4^;+GcN`k(TiڨBȼtXjv Ow֐2t51ƓXe, ^sħkǩ!9s%R"IT3B4"\f\;E,r{I)>)׍f9P[хLm#퇙͝UWٖrmJb9B z{wBFsެ6=tc׍jǬ Πs.l-U׵uGߗ/-2jU9dr`گqru<}A;ۍh_a?FΧf/PKRPYb=.!,setuptools/_vendor/typeguard/_transformer.py=k۸W+ٲN.S:^;qe׻vRRMi94ØC*$flf(h4Fw*[wЈ:+ueyU]u՞wmEMnocw/… $9?l򡪞mqQɟMyy6Ʒb'v]S:!.2({Vm~Z>?R>y:C׷F?y@-xYuؿR*K ]m~he\7N>?GR|~_ 5Mx]o&]\ _~ɧ~4?YX[ndo4^{+tVrk=eK6f]O~%tkvŇU=R]<;qs]7u^̘Q7uY V1Vr:?ȳ7*E%ɔ8j#T8WY囫/DroLb6 08Wsh&P3SyU7sf<ߋ:9P+6[ʑ9a( ݜ i5; b-f}H6 U<0H $nHϭh # IY New5 d@lHЋm+evz+659Yk"RlY`!o fPb#u}Ti6)B h#AEJNzw=n|5-O\_vl>%#[^㻲ŧ-0ucYSm;i4+z-Noe>RHS9?dg=xf*Ou] Qx7Cwyu(Wm2hXїE$ HlZTE|QQENI˪ˏ؊jTnfu]B>"G)밉g6 7K cIis Sj4,," #46fc*g4%z(meޮVZMd;lfAan y>Zkx# 30>@#@1qEd i4\Dc1خcT]qqhՀغ<PZwhldvBE7ŒE^O[Qf㯉ЧD)j Jՙ΀o~w}Y`DFL1, ž~;jO5:AV%|U7ΐаЍd!c):J%=o{ȱ.,)#ghmMDϢd/6k–86 ZfxeTWH6FJ3eEM#ЂAYquɏjfS~0g̨+x1+0rS,S<;r^7"UX%}WլWL쭊*f[KgyJ^Hyⱛ]oކ }So@1dJ3M9;3Φ5/z&{Mh=5~$4/v-b.˧!ͭBne\L-@?dI]KW\"  @w HrFu5Ө "X7]:e Z ̗7&IHSbv˳}ᄓ AM>ۉbc78mع82FMʢՓY( ?=M@ Q?{S8{^#-WRq$MzOj-AkVX:F:n˰*\Nb DQ5q~J;r(کO)}NvÉ,nI% uq^Yu4rC5_˛XOЩMBDS<eD + wkD?1-0h|$Gt-w"l%{eϮ(OLנclCU^t_{y9,  ^.Jhńjfs3W0٣)$ww ~6KBR M(K\q_Xb0&)t@LB#'USO<4xƧIgo;DOa4:C"@@vT%*ܩH"Y⏽x};>*\mBW𼜠Aᙽ~o5PY i"|T8G5|E /2v[sd(i]X9KowR k(oʣC.i;'uH 5E  'Xv J,EaZ"=v=GoJƨ w7k;t0[g!r,3,RwyÇܤ^][*kS,sи)2iU@ͧ+@U&mv G?jA7s#(5$We7aY~pz-3ϸB3 -Z Wd)17S̆oM芫i]> D5^txဏV @2~^,xMudbӺz \U}cwX)`/`he{`\x)Kc0!hV3@+PcQV̋06]T=fpGeY0`k, [ast>Ƴl-Nn1聸~, !aM<{0'2}p* N&meb̕t>wisׯ8@7I:ˏmdot;$K}>ܕ=?&:{_ ~-aMp#]:iӑ6<6fdbbﮭP+7i޼g<(Cn UA6ija".Jͱn,З[#0#5I.FGt7>C0%c PQ`;x/,v,㯫>g_Ǔ6~:nء',>qQ9gYfdFT͜m.9HJEgm%"([*ul'NrE%% *6b?N#du;1ՙHI+MQ =r{~r;T\ 9^Ww[U9[xxbd"UɏAƑk130 Yx{,=#zj{)١+-cx8ȍ s0r jT`JGTGS+= Qz?|0f\qlͻ.HgD7ع(8DP qPPϓ ͙FbUW-|,TzÚ9!PPI"app S40u4<+hTTb+ %.Kf:=uChحg*\wmYjE#們r/+N޻NG );Aj*sR/Z9{a0Aan`g}ӰNnL[4p?DT|E,,Qo0MMFDhþԿh$%r֐Ud5Ha>Zx:''ݮ̷5`,!2lgY :7pLcsUㄴp96ݛ l{| yL{vÝfEObM 8zEW7qOt.oX"6dJ߉!A6nI/S1Nk ).S^[<̖7;"^'A*eYۢMTgm*b|<)y[>qN8vj(xVezZ6=gtdǗ|(}_C[ 6#q7a<oW'\9*mMs<[Ex"yFqѥ_1Q.~ LuF|~{!KvA/%0FM&0x[dLo1vY?!hSrWE S|KdjC7Y04YXqLn>%i̸٥BZAү#C4Jj֠P|0,Rſt@D2?}g.Np$k\Q[Qs3H|mEf duvPgohTm,^!]=tnS`O;x/ ܫ]}fZ(a;C*nB_ō`n[) \Ri |R_{B,M;bـe]b;/?.CQV!xKՎO"BHkakV-;ݙT]?ǰb5HQMƏiG&bxqx TN~47M7L {-Z26TŦK>\tri{ia5,|TlʚVLj['C&4fߝ4yO{\/\2]$!A{60IF 76h%i%*]\w/ݱ FL:KpCu8Z# 멓zVm#QPe}E!sR>K`nXSIdhפQP%Z+X|ug A;Xie ~V~[MHp+/㕻/SaкHYTzF&,cֲr6(3C@:@GFFӘ MYT5jh2Gh9yTc̷~7ElѬ_ex4~مixtƍG`Y(C^Sw .s_QL\ KFGt~~tB@|sM"O$BG=dոp C7$Lr9 )5PNk X2+vc)ePqy{iQ5 { Z|uލ0>K˲ϔaͿZ;Jkqx%޼]/^)Y$_J~•D }`qXSG8}eZ<"#ލd7Ԙ/m^٨#'/_j q˝A4iήN*UiUP pMN15Qn8'dj9 `3, n sF!oA{aj(["5!5o } mԒ1 p L`0:c7ϋ0u?]8W cHF9Ogҥ_foț:~䜼:T},HUWr[(f'iycRf?ECdMU{-&<:X ܒ"5\ /A(aq=1qEEÎ唡/ !]Q ̲]{_&qͳ7Nߞ=uw"?#-yQ[;ɩI(쑩:%1XhnwӲ]a0Zk]ƧhA Kl6X/a@lTtPGP>f*yF-!äMkZ cġr%'SA(3"PopYro| #-EƼ t{y dxhr7tMX Ftd[:ܻFEmtP,*YOy2YK#(GT|嶘u(򫔴/ERJoi/>Ixi:b~j7B<|s(\c=fħh>F Bݴx_?z '75]x.@lo+rORh.7u,Up$f&)\_L#|<@ f?PKRPY8կ]J2setuptools/_vendor/typeguard/_union_transformer.pyuTK0 WHÔfai)(3lgm{e;LC"Kϒ,Ľn(Bj$(=vw0j2io{TК =="7b Fuho7E%2N-zk4GM 6ㄑ^H$[į$%$n|tmO͖36ʴE2 :T(ݏBV}+nr`{۵ޕZ_k^P!7Xs!B1mO~_bql%0ђƇhJQadiGI{l%IÞN|U_k4wjY\7̀ bpΩ'%8d" M43]*UhE5j67XhP5VTjAtrYg׽llwf#wk@BÝxf<Q0֌fT1"wC ]ndN6QAiUvخ_klXQJ4xy+pjO6Ao??g??Wn_s޶|բtnZMAv 5צ x~D vJk=ĢI U ?+^yO0i `PT15=y$9$Zĭ3?{R.V\L6/˂eyI ,BU< B%}/Fow0: vBM ̒p+;Ǖ6ҌuԹ$5cUؓk(YP>!3xvHL*q[WPT+ի?M_{@ި=.H%f+lInRLK/L]:2GZ;qükӲ}CNHV[Q[/b5f\QN?%3*}w*G).X,pUSEtG/։!5zB60̅ml6uGW5nY$eV1H C;HTn-1% *gU߉!4 i,i6vW]YD0 GUR%/( |2"]=\Ae0; .G_Jӊ']ْ4CǼWv,`x~13\W(pr5@iVR gLG7a#M?6}kO Ȫ[ H+,)2v2QnJ2oD X\QbTG\3J淚`F Wz.h H‰,-d˯aՊ!N7ރ NB g&!ũFijA]s[_ NYL}9 Ô_N gf##|u4[xW~w4,k8]nKfD & |m7TL]vj!x$܁㕊[N4qX(Yŵ'+}Rwvl}N6Wyh[} w2`Pid6⠹+$Qb`3Z ݙmS3^ITQ#ɲz ʪcZw,8L6ȓ zh%4e|L8]Sz<9$J.k7p+H]p+UbJPxy@aAJlfX.S "U+EYpsD葿FI,l Y-\ #Xn`=Kc`B6,A+>徑#-~pzmofѭ1\eZMZN#鈪A#PKRPY%setuptools/_vendor/typeguard/py.typedPKRPY]:;$setuptools/_vendor/wheel/__init__.pyK+UO+-)-JW-/*QH/I,+⊏/K-* Jz&zJ\PKRPY?n$setuptools/_vendor/wheel/__main__.py]Pn Vzhr(uv*DgA;6?i6'{UU BiBj$}'&89aW(5.q78hഡ@0O(p 7sʌioPU]: ~!8nnS+}o;27G$v>3َR$$H.vT ?$\ <;xpûUTM%m#<;VVd d%n9[:n=`-b͢h6mţuYT07ϋ&FXޞzVSzf7XڤI/R?\Zױ%y7Eq~:aGsUYd"%IˬA_cIMŹ] q=Oo/O_O;ռi˦(2EK]8)8OC8nyUAq-E8)/Q&&JI%m&^ꕼӸf)E5ELY<-*eİvW')2t#M>ミ^<5h(I$WPhڠM*qZ87j 4Uk^%p؛݉fayj ^_Xs߻O?yM"$OWDT3\Z@j#HPE[1=߉`3_/^D/\?fݤBM AF=門HPNf b {_Ȑjc蛨EJ3IX"="z*IFJQ2X-/I x Hv7=8|̼<}]߾&[) 8aaNqߗe$| ]d "β9l7Qrpji)a)u-0{`Ϗ|M>@_l.6A']vʣu*@fŜ%4܂*:Hh ,'[u@`:")RN&Es_a ?-`JyyVERh@/hGXͬ˟_}{~蓹d6 $7\`ᄽ ~y{Mpm"qluJ<ܧÄ#g uY"C)'2~N; GfS(]Ƿt~&;2X[ C̩Vl|tp8qFBF.U 9q;=N]8 T<:!W+LP+.0qZ_yG8v୙{{l]aZ/~>]2(O M_U \e# /+fݨ*A|>)Kү82Ģh+{&GЭ;"LC í1K% Yd̓-wAl8M_$mޫ} _E*h"ZYjt78Clǃ$]t_7諺I3ܘKuWX|ƊP5zdQ^AkSH A0k| %6X88z\ovp(Y4oq}tTۗ( lT]u_5L ! adžnb)^gǙNfb-@Ӹֈ~R9޿fȓU|FikVE87#A` o S0mh5Q5Hk(:Fu#"e{GQc01$:Ba'䙃.|R!lǾ6ʶ1^GQ(0#9:;Q/ζai莬H6aN Vt|nal`UC|NewB/ uLg)(vZ+hŕk\=EoϗaVlS?^@Ւmmx9ڀx-CE:̺:LEMyU5,xf lDϲ*J^5.: U/1m3u#hϣܙ6Nݸ>`2J7vk)'փٓOE}8aL A[;Ufxޓm6f!?H)V C:6^GL3v0^o#ޚH[ib0׶7#-+oB0z#bw?St:ab $#:!!g<|{gPKٚ& h:0s4@GNJ`_%NTo?aFu@YwEuDgi8?[z@Q%@ZGv`QJn9[/A+A~QɘSքlV@l&`5ַ$@O»GdD5jmz -ê6ws0sZ+Dōd1z/- &XV>̢uf7̊GFL@ LGGb% -7}#-2W.]3=NO{ {2 T\Ը/Clx+yV(_z OVfK-|dp+n 炼_`22צRph*}(-"N.JO͗nhi@ueYHmCx݃vBޚ Ԕ: _@u4غ~G\ĄVh7i˭g[:9ˁe9sA4/bwCpv-ز vTp`8khHtZ;Y`-{#v]cT ϯ<2ǩzλYԣlc^ӽRK;BI gBeת90@ ,9wq7:#{+Mu׈Y J8dz D0^VwpbT=1Ч_]12^J" \gO::] >|z0yCt%ڽ 8Kߞ`w|nVȂ'im iR#it?Ax5xa1ubEѨm9J'O?BLNP2/* q Ñ_(nIp-׶9:OEގ +jdrCv:J'hTRA$(v}n^ˉF^aջUz@"L]Vp+tSZ.LK(xl}qz ![^1HkhʉNOn%Ѣ\*Օ&NB6跃\g' gmNy] 3(шrNE|~5 u( fu8زyC:ilyPwqb뿻jTl 3""֦/0Htg^,d`0uWms֍DNǨ0DQ{wzy3*:ΦZ#R?m736`+:v-F7a#wT.Qe=k΢J5GW͹C/}GfS`muJC>e6c͚+_v ?PKRPYL(U>*setuptools/_vendor/wheel/macosx_libfile.pykoFs+ 52v|FlWN Ii{>]+5IRr73K8mQN kgKu˛`I.b,-ylH2RVf<^'Qh|@,sXHXNcj.eߓ]J$eMVހ%`xK3@!SxT !)"0_ξ>Le Y1A VI/4V%!\FinB)JplF2ųh֕т j'@<+|~᠜Z7+ [腬+Е5@w"숃uQX X=D_P"^+UO8<n6z9\Z|_6 \L禆ծ_]i u6\Aʊp+KeUJ^7&;7SFġԃqh8tޟ^O{Z)k~<×B̐?*Pה?5 +~H*LL⩪zGvn(+ mlgKx=T lM  <ϳr]^Oq/whR>aF5xFg̸jmDF& 7]02,Jx $W2'O7v Y^lq^Uz(*4~Jj%:</u!xEx-R ˁ%>Fu3Zɍ )CPt)GeCy'NnPh5j*Jk=%k!&/P,kBbfY5WWUѾ>P>#C?U X?vխܣl/'X7a#E?ZPd/ ' _جqxy$ ႃUs# lv{>;Xr.`L٠`d}v_J{ ?[ -a_CHF29= C%Lb^>mTRAM|\qFLM V4Kh`zPqLcz* c$)jd+?Y3nj&s@Hm2GgqXo|h,g\UG Yvx8*XV"sN7%8 #^Ǔm5OD0fj3;4hsʏȒ@)zyUɑ:ڹf´/LLPg:G&' 漼m% =º7bn>q0郇gQu҆{PU׍Gv8I;kt00"E1W_>,CEkަjlQS1Bk* Yf^;7m2fqXt?͏eAdo؏FB]AAmzznaf_y#}Kζe6>ڡ"x g=9 ;i@`h2a]9aoqvZlw556hgP=b!fcX@O'°pl#^}V[f RWG}14OdfH*.iQEKnn2Y2wݮ:o=W*$W fl䞱v98z~BH)e^2AgNGOpct7mh 5'lI.CyVcbna&U::2ϣDn7pw=;$Һz]kJ}5dVzXO}F9]ۣo/,B|o ڂ2M\;ZĞl͸Ze@Yh ZKjHm>@ :ά= sV^j>*BϺz/l@ם,+G̼XpN4|\Cվ`u$FPuzDa )gʯߒG*#ǡW[^)\{<2Xgu1Ǯ2BC=uG6k4 ǧϬQˌ8) Ak(\Ll|֊mvh 4-4$ bCub0#>t7E]~]/]fDܳ[)?E7DFghӛ%4nEGgnG U7dn/&!PKRPY$setuptools/_vendor/wheel/metadata.pyX{_"l=$hšHHϕe+S*Iݮw iyk}55̓8qzIAzP?o S!չgmeSԊD$XU4B.Ȟ*q- ˑ*Kg$hԱĤ4~k# GpAd8JC ,w)J>u7qSJPٳE;7Uq&S}Ӏ?4=hJ2:JAc_~ dR$2t{hÐ$y"9W4;D+;YoLn"{[c zuBJ+{vYiKVŸ蛑ω4G̈́FYzTap&1Tʱq<ӚP>$u O⇨# q eαq(xFF 弡d'"ǑXp@Ē# Tno.6bFUDbnQ,T{Au`),Dg$mk#3(4 b.@OK3VIq0k2 R-F6p.ZM4mD,Ē9̈@sdKTH/QvS ^lE}X/ A;O!oi>q/ xrMqCp(i$=X8/mY)h.5g3zv+@(5. I4gB8=| HM@AHtb t!Ak(_Q- GzJɩW'zx ?igb W8[j!iH p0~T<>-?6"Eю? AVj)625::GYݵHx!ܿ'OKRyy|N)[O۱xoWs+Ph'ͶZ< АFn`׆WF<.=t<& xޱ6v%=tNOL Zߠf+kCu>t@pVoBRQYS,ZYZ VVA{fٍnf(AJY.'8 :+ܑkAO$PsTٖw[TdWc Ng+,Ц{v^sp!:#] J/ANLP]Kk|%UL~Wޢ' "O}+ p'I{#GãBnއyMZR MGWڽ2ؙWd1<`ݐ,O]] kioճ%wWH„WIf&9}#SžAL/d`+Ž=/RAiz=b=ɐ $e9yd绞J7yt,(-۰O^cy@r&=ӯON76PtcoόXh ios #^yN'@C[wHO7hBAa?`4w;ͅKʀ']t2]<_ױ4]<[ +"%<]◭U CP1 DPKRPYZm setuptools/_vendor/wheel/util.pyQj0+_jrMsC@8YI_I!i:cvgfUQ8UNm }`.(\+MMdMkk!R%k")y>"62bcZ=_"\zV0[i=QhdDZ<[Fh\/ߏjp//FF~Q ah*@5lP1Mz7x8t5v7d9E&תREh(_*xUT~e mPKRPYܣ %setuptools/_vendor/wheel/wheelfile.pyYs8} \U&<@0ېTmy%;Cn=^. "3f4 Up`! u2;#+"QJᣄ!;OfYBSULA@Bp//0=UsS XM p%S 1[PU+kzEحHCUk^WF(8%FD실V$%5W ߥ)9x0PZsX[Yd:'^-[n*ԏ@ayHd}kzAE>8ᅁ蚀4X_% DLr*J$9rCV 0P?-^@KHW WjvV+$KX%f%DuVQ&rz"* Y0t%R_II?w&@y7%YFR3lb2c`\53q $MB`U/ \+]RI H 0PâUX9=bvҥ:?GDnč Vu} B7 BԴ#UiUx#s} !g̔Jt ȁ?"Mp8N,44뛩ϒ}~W"Hd r* @S8`ZI*"<Z6~U?\P_6ߥ? pxG#+TbJȢ`{IĹ!J\UWXgPE~iY++t ջQat1mTo%A RPퟕ s&iET埬սT j)gFU%$@Š#EG=#=XAp\d%EgkW5x&]/t"@ s9ojƻu[\=>?<|u[12tԣ[ƍ1YՎ3nutMVù) m ʎ ڂ{wjjѝ;n;աjSeg Lg:[CƊ&K; !2ÂX٭oUƛ{㴃]x&9ln6xhHP9ב:/"Χ™lD{j5wSs5 3wo+'j@wxMv\Kw. u]s=ocoK]3%^NPKRPY s(setuptools/_vendor/wheel/cli/__init__.pyWKo6Wh[KHݸm@m!p%.H ZǾty|g쯣-)Z%j;z7}Ǫj?Ȫbzкw©^,{0ce\6~ٓ"KTscc'r1ɲnF[Z_#lԃU@&S"_eD$Q> ^ѺmKz'FYޜf:+ ݨڦc&BսƭR K뭌hNG ZtҲ-i?M+[<ܱN] pt}#^NMeLi6>\YdASLN҃Q=kN,*rU!CH xe9{5癲G5lX+jndNN;TQd ߣsnG`{pyS~_{ѪGaDa&Aha$zpΗ?>W޽&hZ>Y^jJђ}^wpQ2 q-NH&X^D Xwe=?!%q/{"$A#x(z*f,ʨ)هujhx-xY zwb%ؽhh2 {F 5DUd(FGb͹x靄[u'@5$X#\h\נL }aJVk_XP6?vЂl̀P=Y S_}4Y'YN4.^X)A /Roc -!8"k}#5™3ص{.5'uc,+<'ߜy+ u*Jϱx~:?h{aLOpa&: ᢀI7g#>`t۞3ۯ޿]f /' u0G 0ŊԵ:/!#m?@€EۛsVtF zT(oS+Uh4#@Gas^(P| X VN ΜED,Q,hoҦ7τer?鍗kOS/PKRPY$1 $'setuptools/_vendor/wheel/cli/convert.pyZm_S4rIz1 #6⠎!i{IpI+̾pI)#wgfmٵA׻[^ }hNvbj7V';]N.?}IeghzYG3{z?z-Ţ(1b)u4z_ZI YQt{%R 6E NZUU;ٗUjeĴ:&;29u{JWiB #_ם1v0vIY[ҪM˭JZ|a-ܗroa4ju>[!E m&L )eg@b{:ֻ;Os&H--/1?&-@Aywp^uɻ)6+ ץX}Dwrq#HKu={ZiX8hAVj۞,2h\{OC'p߶uluѥHȆ=ݖSvd.I`΋ BbC'G%X5=jm;ngw<-`lQ,׮E;9GXu߭LwZS;C⫢\.р/]%9ag"?j]Ȍ,GsBrAXmN þ>AZ,;9ۄWw: <)G *e$O2xOXtAۉNrWVne÷2X҆5l98o^r#^hrI, ISںڬ ތdv#LQ<` J4Χ3,M4OSPå#뺽NBq٩xb*D$G5Ԏi\ZˢS!RXOAu9Hc" 5]d@X 9Oxs%3Aur+;iQ| M_`0x@ɠΔc2kYO=L!S=B[ 40;RBat5DJ:-ۯ-&K+"(W`:]1tŌ瞉?N6'j6^}Q@*qC,0W0q߫\|UED򖡷RnDYP0 sa`IKͥ/{}p4/).|0P}Cׂ#ntp+ ["dHmC:j2mF̯}L!_Q-.(f_E^xܵ+ wV^&06D'zN :gȦɉXʌp'0k#&] R_D,hP"ƾ08$Etf865lɎ1XC^,白1Gy{WGA79@eJ&TYtÉN.ZvHUS"MXrvl.q%lSeEyfΒ76j\hA҄Ve:[GM-U s`+L+#]0l]x˘\cWb>4;;Lt2P&1磉ə6wCR͙b6tcLڋм$64FRR;K1 w/7_'g;s&\ с# h'nΖ$~c.a0P[h;&c}xI">-F{Je_;<ǒQDȃQ#Yܶr)l7;*ԅvcށtC}nrNhsgPvio^G]IkH;"&M^V|7p9Bb*ut`A'#)8ٍB9Vލu4q oj>;peh`Ņ+W}ήa[.FU-'#!N|gTh`C>eN\E8g#+G '2%jpxe}؄#=ȼEBs΅iIaqjQJ>s9lϵnt҉j@uעQ(663$0ܩi?7IP# ,5yj;+THfC4&]zή;Gƻng'&W('Qq?zfX) jHw 7|xJŶf8v ^9yy : ˷!_Ԓ3 i{(oedŔ#'iQ],~\ xɇcrt QC PKRPY,t{ $setuptools/_vendor/wheel/cli/pack.pyVKs6Wldm1[vid䠸H\JhIV<{w>ELy>?|@yٙNA3Q2KnD#u2q5:k :5HP4jрm-WBV9VT>JS PFA]x~^9ťD'~Pyvr苤Nj4BeCFQT@Z7)xƴQmrNTE.z NľFBf,bq| q*xMGIAdc,&iPU¶_}?:;mت 06=faf @XwFl XU E 7Ã9VA`2BvoBZz&6*ilvN)fRIZjN8&yNr  ++TJFhBTN#ʡ%2Igr28Egi]V0Yjux.+ [?ϔWgcXŅ'2 qmur+0:4f]\0&6φig~.xlFDvp/Vcj]UӵIܷ-$/hv\33;lꘜȉ1:ic+дi{PO-c/]ͧgKtx_B,AĸaŐ@mH]5D̊0,XP_^.PHyX$96S{ɂ~{GȨ>܌C_^GoF%}yqotЯL&$[n6p\C1yAN 2 zG;'<ҁwS\Ђ$lzHz n0.Nؔe|;Hu`1d6,ú0&VyYS`!U'FQ<Q8v ]ħɹan!OO7&^rB;{<l6s.l4:a6z1Wwp\Dm1_A9Ow76w3qlU(Qé&3BiRpLP[qR/78v-̟nRFe ` QȄ Qt$Yա{шFp[gN|D? ] PKRPY{&setuptools/_vendor/wheel/cli/unpack.py]S0#*U eM{h"%Jmnȁqp 6Mhʿw@o޼ycjt[@c $1 M }'B btP I ՟9JmF+ i{f JWL \$1y& 0궅#XCgt S8)y pؤ4sh87ux$R feǠ%QB"(yD.  *4] x*.4HF# :Cy^bR$kD"d'y'>' &ֹw:KtzU,(K;Z8;l{O0~ߏGwt8 ("cWhLS9D*L(XVj0$ >xӉVJpq{Rͤ& tf,"0Ds.z3 en$ 7~8D iRNp{x8+th^MO>3j}MF+.`ޤ8B=\͞=})rU>Ȟכ)W%( {3$c v#9\k ۧ5#rʎYF(3ÜC-; 0'FRڄvG\+w䛻\^BR~n!l`ؤ*p#5.yGxVl:vU2Pv{J>"ӈ5r(f&'L$L±4Ҍx (M Q -u¨9z4|ޒW({JwI"S1>3#<5UlXAByY^7 ]L<ĬS7 IP@[>9Y&ыx{zu~WWW5~WvUx(7FgjxG/=LFgs/XB޶H3d Q'mx >0sAoJϤ@UPsS b ^el>V|N޴ÊVb VZw~ZWh8We883 v3=̌x4z{A.iwg&*22WB!sԆ LoPKRPYw, t%9setuptools/_vendor/wheel/vendored/packaging/_manylinux.pyZis6_QfZ+Ӓ$]ױS*'Nx=4DBj^%L>/bN&)x+,5 (idh#9/WE4-iuJG'2YEL3`+1{-scv˫K]Eb̮2Gcv#,D`ڲ/BF=8Rc\\dg7OoNnŎ|b>{go;瓷c3v*L>{q$Ne@RHZ҄y/LLi<^{{`qJc4g$?kMy2 _|+ gb?¿-|u%wG[ } i&9f|>z}RDabdn@d n̹_yTQdQװ$ɤxyC$By$j0T xn/kݱ'l.X(4L^̚' BJP,]HȄNPD:SG;;Js @y:wJw;C{^.*5tR`.t'lؒIeLʈy' xtog') Nro=c7f!${v."Tucq:h4/X..^na `sٕƘ7r?TO/^ᴫeAB$Kj䩹iʥ WK\d=;22buOB18U?؞M_m,*-s%qwWo ?XW-}or0`_iG}Wu*k]~:2d ItTgL )ߌxcn+۬y ѤB%j짂 ѭS3h'~`"Ztu=%8vjϨnl;!Ӽy0lMm}(.Q!wXٍHu]&NC ij6n#;ါ@JdޞC>>z:):4{nLitRbc]l U">Kl:cjغ(8&6?5 &K1R "E/)BPBv9B@Beq"yzSV [N7mCj[k&#\+sQʖlgLoHQ͖}UGrdMYmx.bbL Mwd?F1V. M+5-?n ܸԣΤapaUMwk< &mg?t@2GC>oi,)Q7 mOiܰa-ȆC`4w,,ÎYM(/C;IڦiSnO8v)f* elr/)^]\N&LĘ8vٙ6n d}e*JZ(Cħ9 tm1\~m./DI+|Xޭ8 ]< )s;|;ژACltc1{7|UUKwF cv`~B]<۵^ʦ4Dߠs| {o֖?;{}r/u5o!_ݰq64K Y2֡|0n@vid 24At8hALq6R ?92._K'I: KŃ鑊<zI5Eݕ6M+fj2A'3jyn J3pc%4аnO1xiT36SH]H)JM~KApZ2c-~CRͮaސv-R8b'HNaYծ}\rǫqnaMe$}kv¨8GJL"i@ ƥ4(yoE:A mwľafv0ޡvp~`GV ۷t9e﻾oŘ?fn[Pwp7o`6& sk]ӭgp6q)<67$5zǵ\ԷHm9 ZnL7! &vZ:fx' g5/=21*E77=U Qt[wL_kNmm`Qz9nV>ֳ6c&b1P:qУnWh$!-B[mɵWS PKRPY?8Ɯr 9setuptools/_vendor/wheel/vendored/packaging/_musllinux.pyVmo6_q>Lla `0a6@~q N6H*Qd;m $)Mӛ \u"InAk^!ȶSآ =Vd~Pҹ:z77KX wjBq h wXIIBfhz]yc7,ovT3wpIcM бxcg^X >t r#ӣ0Eid ߽yC$I*%/rS:; Я}\J=.NX%^g]a:꧌%44MC ]uJ 9WLzSpïp $V֫ū5|L]YhVjtpt6hXam/kgiY]RYwEbv϶/P/+Q1fR<ȱh#DԣW޶tU2EALj'34&3V`ry^R4#\_B:,$3}8CxF ݈j\ȘnQh|fa6zP/??A"1IG9_Al }f$^YXW-y^ib׊EI}Zk2X.%z-8c}KXub(!qSXZ tPky,Y,ゥP|*I]xH<'1J1EIJ5WO(K*܄fNgyG:Ye9 [I("xu'hSī.c OIlލ/'`~9-t:g&k t 07#G8*HE< ̍\cSz|H6n%%yAcNȌrS"*3wˇw7 q1aF@|\G&P0p,,ͩ1͟muN7K>bzO( >uU qN0GUEGu煼ɶb8r$Z1 S_c3%8)},&eEӀUA,#8,Y@wyf0+nzd{>wI|xYVc i O+\0X)Wt Z`!_sO+R\~ WJ,& 2d+PDY6q°x8M5{gIAW5<" !h2S-" \Xpj2w(4ϋhn4]ߏGs~+ƒ_js5eJ8+u>/SEIr G-'Fzxuo gpXr 9RiH^6D~^RWB2KMKc9;8|2P 1zq㮒ٔT BP8P "׭Y.p.~^oU$ߔ^<&m n*gE=uKSP S׮gđ\;1gPdhl)ٌafě㩌hB]J`I iŗkwM\.] H5a9چw9b/*B],\q%ccAV_h!=J)uez\xHxA-ա砰4X3vT[>gٴt#`3=7lM '~ =.8#&G6\%X@svJyrf-Ɨ?W+G˫w/UNF|xhDPO_>TZU:ߖj]] -aWxDŷ3˴V䭞rj&E!Fi*K(,l=ʡ c=•j;0v{LRCżSև<-4T (VgB[ى +`G䏄H!C$j3ǡS[4>Ƕ~\SۮI)!$c#Ki˖ΡQPzSb8?eUڴZf%3=uc,ѧYӏ"n۵2I{ӧ%0?T\#;ˎ-GU~cMLca/?ajui8&#.gѻ`Ϙ=$<4YAA` ;pFxft8Ya[͐mǒ=픣yw[Xߒ:e>ȯ$X'{1@xnW51r !fZm׶>4ZE>6yHJjQQyT~IPjtFgcNYo,^ϏYjM )dt0n;7),uP?:82:nw[h5}iNf7hUIrxʪTZ0}؊OovOgް>/GRQ-PKRPY0`:setuptools/_vendor/wheel/vendored/packaging/_structures.py͓=k0wYpLh)BB϶"ҹ_YN?dt HQY̠V-ܿT&)oogw(kM-a 9s?{=qv{woڻ_ڻ{_tYPl^{rM tkΨ9{M;=f1BvDBq:u!/Jfl 9'M.ν٭6*q ꤬Fdv#Z jg6o_zy=esq8Q*=` S~j1d/vPjԗ5eI 3()m~4z׏nzqo8.Gy`2;k N?wN~Uִ\K%55|g+svՈLǞ) ǥ)#@2!@I2!O66F[ܲih*(GKRf oG{o7M7i{`斴}eC*>j&?QuG^r *7B<>^`bV9M>}ɔ/f/`YI3ݬݎ6"6K=)ب0m`Y9b "Yy-#W*Ō.3sҁ' cw-2;QʤH0|タLrKSI*BNDEb2u$M)k7iiz/(9@wIoE`_HB2x8F1E砫FMnhj p{>L40TwR~7!4hJ680+H+~{^AU4b aiRYkd -JmLW0aϹq%VVFYYWrc }& (=Ŗ,W.h9<)C(YnV*)Gv^%RyA# ohD>LdRkѐ'8T\  c|*XDddhA0;]U Bmu׽Gq{JI.v)hT;pɋz֛'%ר%M?y{ L-x/GJ\`lDe',Bt #ˁW0y<$lժ]\&jV>~?'r0 t-(ƹOA*݃Æ,2( * _{=M1A~Z*_+Q]=xvp(h/36dѲVєJ[%[Gf;.0?V>~=y'j[,@zۈӔը<PKRPYhi ( 6setuptools/_vendor/wheel/vendored/packaging/markers.pyY_o6O.%mѢ0IP'bXK*$e{kp>Dje8>9g~3C[Ɇ-iÿ́f E1[F S;Mƾh ~qdK;SK8"ߖ/ƒ@Ss/oߜ;?SR4Po#kaaVuR) ûO]K ݅w׋;b%yCۖ^xm;[|;$pKYuTi0/~ꊩFѻegwYxT^qc#T*yk\2; CoϔS9Jݱo8[|+i˛0$ã_0~ װ/V cEU!U:,2Ԇ ּck)5WR0uO-[S֋{H8JY/Ʌ--jM%s{4Pʼnekj)?8Y^!VmˁO9cG v^heScخ30@524iq Nwy@P1OD6/EnAsarN+V !unݒp ^Twa! -t cYz`0fnl$jFҁ"eC `trzJ2T6 ߰mT"YOlPMQW}y86͚^@!CbE{>7\is2zt ) h\6K`AQ,#r.w #[z :a+ r#UY5zi( -aF"32gL+Ѭ6ǐo]S8f( +yv62=fM/j )Z̸pLL#"{]8*7&lM2yilq{7tҐHYq!f|ϴBX찆9YNÌdgEn<#Opp6 )Mv%x7af],,Dc*0@g,\ ΁0 i.!O,B@D&G~R7ʠAٚ0z J+;M?$U2|9 ' k$@08U?~OQCO1j<ۇ4'_W1؋9Ӟ֘N<ޱNl(g/@sOe? H"7x&~:8fiN +FvtF\>a;H55+Zfox 6ampy;yR*.=hl=$H& 8zjBO= IG]X,,, &yddAWN2]~Z,dn`M=>G:}.i^gd5}8䀘䡺8ef*UֻƲf*_V냅*Zfݩ:¼&najuj0 mBs),^c82lI2M< Li4[SbCgc-U¯ ˷M߶յi#OH cei݋rG?KH6T+5+C~:%8PlڲkHO17F2ZlFϫEvB$J׶ĝr <0fVkHݻa fF:k.'<½ cDaCPd<=\2&w#^p ӊٕAIm9$%bT +}z&+ɷX K zPxuT_*ĝ|1MU/?riy?cHgVCAuPEDܯjp/=WZm|v|XEhp_א% T`v_˸紡PI'?4JJ$[7k5rh4qD>BH+h3/aIW> (}C g$YEUg+wswa _J}$_hg8,vKw2w#V޸9U&uW(2&,;=; ~.e퍆2rje(TՒ|ǯܣf;= 1|<71'OO+ު լSiްAcV}|EL/^lc~< B"B"@TEKom^;$ b&[1p&H{E*UOhAz{ P˚!{.!f1xP _,Hx^oHk!l0Wl!˲3̝U9*o{ap,tք&/t^M.QWFC^/x@eo!#HCU [HE=ʄO C(]}e FXȋָo@p)YgO`ٲ5+ǀq.f{8}נcML{%Ѵ1  Pe`pW؛\@p r/z݃8<{ b_PKRPYq'u ;setuptools/_vendor/wheel/vendored/packaging/requirements.pyVo6_qP* Q 0xMC, {N1WtI*W/GwGPe#jUBphtӍX2rJfG]BY?x~uwTh7y`pt숯z!脬|6^mzhTr 7pq䑨s2ZyR@ ipʁPvNE%o^G`ca)W+.6`~x-u-TĻ|GҒEE[(5ҷ[ wg^TH,oL<+=yn| ͏wҴź'>1=ģnMۯ'S=loȯOB^J((Ru-B. ~+0t?~K86ue `lpgLM qe'g5}[pŠԋ~a@; 8X)tUbѥZx˚Y؏"?;z`vZF䫬HtHݼ(nCHa^t;Gk3F]((h/oY\I(qm"oyi,C'Te:P*OJ<CnI~5jѻ! T:5 R$]c-6̱_j?ٸhslJޏCJ՘Ivۈ1ivzy/ˢ%^b+ 8>x/ѼryO5x}XQAU_PKRPYr"b9setuptools/_vendor/wheel/vendored/packaging/specifiers.py=ksǑ+V`''JNWhXCp. o~{gI7i]*ɢ,hD7"ExL7<}'*-Q|֏|Fþ|G<ًW9=+fذR,*r2e&jDYu:85Uu%r08:,M2Oy\-4NaqQXeROWG$Kga-c`)q1GY2_SX]Y֛%@SPJ,d@ԫ`q/5Ldj^o>s+`($/t H(Frr\ GΗI .DC)GU]^`0P.i~Gh};R\2G=t'EEvutt4hZr?CtzІQVi^I>]=? ߹hH Wj,m%U`wIʲ(%lOI"yԵX._E4-ED9khh7I0*Ј^I9*ZCBqqqaɊlFuL8<. y'%TE8x>EAtSh*(}T¬pRNχ M/#< o|LdZbFω-Fx4V"?Չu iEtoDTL*uLRnU6&r+0@bgA{tT76Ri^oG*َ\]\J?*;SD+Cݵ4# $EVN:mօd g`ഒl?d !ѺQ.? ûû'û z RvrЅ~ I:DjAs)'R#@ ue`Q܂^6"6xٮ ڐ01rh}mZ␙RA`Iv0qutH)ѧcZMU = irxM6tjbDgy؊gCI9IAzˍ< jWJ4Q-/P$~w*5- pKҧ"|r\xs6SeY5?iB jW=篻= gm:3"+ ?.5ڂ&1Hrk6pE7?w0A豏DӴmz$[$w8 m*<ޕ޽!ևmv l`JCv;@G0/`tWn[& 'J\~Cp-z[T"1:%VҴQGnt֕ThOPd|a3.~/|} S$ pPw6n"K<v<\9+}9 DrZЭ#,9mfɬ=oJ.x}94Ůio) b4Kr  5%-_e$}ZtZo7+Z*;BlUh^O7|݋4UvIIM c.|gg`埞}3YO cׂg1Q'Q&j79)Typ_vWKY~HG4Ok3@D~SH~@Sl",2f I?S+.4P ZF@ W*ltŤp|,!):@S/@1GOzKW>UzP dUbԚ;Niہ+1 |(>}:XuX$QUa2$ûW")7]kTxw-fY?ޟtzxjff _R(հ3MQӋ^}Xk-ѫCc~Ty8ᠡ3'e5Sܬ&a?]n"tYn>]co7VOo|LGnYAAeL\i=1cb%e?_N -DtY&Y Dj fDXoMQA4Ui;M2DyR+( >s7 _e1+5+}+1HMΣKi;PCv98}tu-[<8loޠ"> YU+vʉ"7VⴲxdV'ˇXݐڡ7Bx@mU{EՆT+^zy1y( m#p2#Gq˳l WtuT$l`ߕ_vErif|x&?歈;d+:'Y|vb'O/vXCb C/8 J!ӷ%]yvz|,ZB;Oxшǣ' 1a~e .:6KznKJ,4d}u1o 8B+-3:l'-h֙cS|M cQR]JQuɴo󢨟c:=$ 5sպjX]AE E=r,>%yHr4ޛ!` 1GIk>u#rѕb$<},W;1i-;n9̂ޯLN/Q3],&iӋ!?؇ Gq۰ƴG  Z@[r^)HC傳fL6nc vX;a"+0Q{ju}UqZQ `ArkzgrVuWWuFoП={:z"_׃kUet6bQ(5E"jGd? 1w/=!wz٢C{O*tNM5s>їeU֨.o95W.6ЖV̹|E0*IyQ CyљMrJR;6J&tVpX x%J2  ZN'df '{C<2e%K}X"TJ쬚"U3P9:@ mT'꽠x2kxGO>eOaDq<g|ui 3 /ݪإ]0mlZP T'lfu?m56X`^dXaIS‘&-n4 {jo\CMo"7@,JZȂz5dbtab*g[QIM|SEr\f˻vWglKhU Lӛ\rq3vh͞UAuq Vz{rPWЎªzo \BrW, i6I4HРdtg^AY2~ǍhK49P!$we1` W3_lTU##"g$/FtT FG4СS7C&xw[ڍB[ʓn,`1~n cV5,nwvc:)wrEH4{o~b<\ 7m)nD 7!MBP 9X7g/ khAM̙\1vtEΣ~dي|F/=KHV3م:OUٗM*8@p ݟ1eS)kc 3NOwz:,28T[ЬnUH;uQLfF6=-Iv%;mMzĎQq8խJmNV^:4).(gu'4-$M"7Ǵ³,˞R&V*(j^^G)\E֓"t)x&Xz%[rR0J6X?7k1MBT_-= b9?~|6f^4#GP.<졌,D{>Sʲ`.O࣓{}ڇ~D'j,wq0gɦ֌KAS169ky.x5Cwdr q}9{s.%LB9)vjaRuS+loR3">#uBO |.Y-v =|fpi =-6P_{[WCuX28k"ɊJMS.Õ3N2FF%.ܼ"tLf#Ch{1q,"],I5Ӻ[ϴLvDKU[ժ(ޚyިbğf֋1܊CL7kԸB6c)3ٲ}r^  .Tm܈f̨2y"͢W΢Ab}qweք$IFXjQQvҕ}6/G|,?nZxnaŽhV 4*e$0@GPT0"0GKA0Xe k2L Z'瞥׫|:;IcP.™`ә)*0Kp։EeѨjSd{<,@JUЫ(3:(u9‹y ;$8bPs^x׵: T]o wf&y3}&uS? Pc6-IxFIįu=ݞ^2؃Sp"އ,Fh|J޶쭍,kLYӞ츩zQ* &d!3&u{I|]ߕY}*Ծs" 7˚3ԙzĚ2vۙ[gS۵>\3qmKM:}EkU*-{'!$}-&A.k`*o-ȒdDo[>_v!Y/8T{cO.1w|ty4\;և%yr40]WuR=v=M{֏BOt 44Lo'HD"|ަYV^TNk\1-I2#THNvjw\bDQNcu^h;X^RtdͫE12. ~U\uT#>~2=>v;#GXJ׷yLa9Z,M u!\SBRӞ;Qhuq(C*h{֜[A&~;" ߫uӇ2\{zQB/¶D)(-6ZeGҗeӹ⏓v6ӣNF4PjjgD:cG{LOAgy}QLBt vӉ|~)jG'V衎L;[*,.QVNN=l%l{qBlFh P*wډD6k_Dp6%?'RR8?iWr\28 _:G5q?-aMyZ&5lwۦS=|lDj^20eZq &t[ecв?d >96_?یv/RRm3uJuVa 5ɁJ_xöu5bm ֎kA /}~ Tb|6p?!h+.L۾|k٠//i l*ŤB )ͣs&-lt+u :GofHKHQUeINDu[oYfkCCux!0-9K KlĎU̶xdSߡP ׊^ec@ݧlC`PW^gދ*r+1 :$3׫Z.jN`5JgȀië2ᦫ,)eEJCN0;0Y+nwU|SoHv$d~ڼ,BV"ll( Z3Zd\#q㯸'#M|PJ΋u>:4(!>uCWr [Gk_c"*Мrnb04yK[ U1ӿ8m|QqqNImmµ|xOS^`v8² ~O |EorIߏԯe4ju.QloAđ' HbB58@,ɢ/E6Gl< =Yqӊ1e3$Zu]u+=mkX^Z}_̉tM^N,R8"NmW3`,5Y0b6 rˍmT%qaÕ|W90Xs0Rfb˲f$+E20Ҙ3r/9C%MܳykDMm_pPp~O{=}juTdr]ٖ ds:Cj@̨߯#+1A3;%[3(a1ӘŪdق~K vF,Jc{=}a6n?~sqz&L^e f)|bl*,Wdנ<8ws=+x@K7@V ͼNyW HUh|u>g"I ^EIw*2`T+0$)JvĢ[qx `*Z#VAHaU'eF[W3\ h"רXb!`vp9qӜ8.x"]Wt Z (yQFZ #i(j؀Y~̪c<1-I9$5G3b^NO"b pCۖjioCoFHǯff `!=Dl»Pw;1k3ך=ƘxI8n؍%+3 ͌|&G!ƶRgES\y ESpc3.ȯ ӂ8VR\j/XhƬ,LP#ߪ*;[*WOn`xU6 !a@P0=9uV( 6 xQu(sh8=}ІC(}`PP@k *! e^E Qμ􂓾P)=ȮԆ~?AgAϤJ@ @8̚1\kYtPBP 6bq#&3ZvE_γ Ib{DY ܅$wz˯ƦujA0$7 b6wƝ;Lѓ2. *Qt#EXA9쥒8@.,V#gx I rp I'Jd*R̍fkU.E*$\2읎;#[AB Έ`W2wCOιQ+;TU,:w P+pZ,{F9+/})JVF̩Fo)(KªsI(ɋ`*Xe5H1 Wi>%8#Մ67(IwCOFloH08aRr0rv#W7)c 󊦆, -kX 1N Kg0jL⬲P)%4 p^XW8.yc15TI{'{r?$%&,Y :%QUAb *D~ͮQԼL+ =ԙ ى8*/N+1ȒT B3:Qg#PUO,a,LO""ʲd)*xdgg S"81hOF9i$iV,֢b, Sڽ;'߇oblۺg4 k Rά?Ooձc0GnBbM<+S1bI7ho>= yԡX9`OI zN;88z1m\7O2t 9jrPDFME1d"u&̛aQ5KtL+5P94I3OO<%b(P;# Vx{罽A6h$* .ǵǬW؍y8vQF#C;]HC? ; "ݥ~eʒRިPk ߇p!I/]%ÿz96CbX~ j}qв{p>~JpMJJja"q.ZX&kl!B`R/VUM jF(m)nuFPИi)B( hBgmQfLLZ) Sg,$\'El@'"]d8 U+]v } 2g8omSO;G3E&+ O\T;1JAѪpU{'bU5*⾍Z9+GE.y:]6Qv;줯>n&%]`OT Uј:Km4Tc%{$w#?fqaYaLFQl2gDwGxn6ᚹ}DU7:h6;#wAa]늭'Ѿrô{M@ӎ@o>QRwץ͛EU;DXvE3BW=]_9eg1Yn 'ԹPG}t xKgRcFc;PF6x>{:eZe^Qcc ^E};8 X< i> ap#VX&Cn̯SFРĽ}2_O^d#'$L0Ųlr hҨW\#R̉׉m {HM@b!+:ന~6j\#4(xV*%guY!Uxs_u!j{tlVJ]ͨv<'Qq`$|OV`Д!,pգ/$%j~CvnɋgMLQe#h|j4v5 xdg=x DGTiЮJy(岈*./&{޹jQAl4pVlOo?\ԢYVWl7`''oHe{[+O0wggh/yoXI+ݺ߸:HUy)$#"#-&yAIEOhI8e|h{GX Xɤ!7e-@ҧ)Ɣyr2s:%;u6+[hG%6>!/\Z!7'i05Բ ZFuRnBhyK 6u%O,;hΥxt:K5kd&ܧvVW2v~1ܶia rm柔͡:mRO>kD,<+7o-iy'(?&?+)F0޸z7=ipZ-:eC-3^x_GŸ~-o>}899UM{AP&ew[]٩LO5/ͩɭɐHw쥙*I; "~O ֟aP^Yct<*Pz H4^+W3(3uwıY%ѺDsꖇݽFP*Ȫ2M4[IS w+ )v!.̰=0+7Ě[Fb~=0K=p>>h~Щ뗻 ͧ+*h+wG߱?~S^5P"|0T4]ʎE%mkTEsl+ZarX2TD5$fOɳ\7NZ*59vk9s{NН6Yq6^{k~ PKRPY4setuptools/_vendor/wheel/vendored/packaging/utils.pyXioF_)BqUN %2kq$1QdUA$-73o'TYϤ)R p"@$ ltF, >9 y^^dBr^#0g1ilc &R-ڛ1NlYd $ iqeDQgْ"Ğ /K49)1sQi^y@ xl*fibyYYȉq3>'Y4ǐQ_;Ht b#W+L3*D]=>ҬCu)kHzzUJu~%X2KJ0iM I%Ce@X[^  {Iwe4tޕ YQ:l 9>ykrP.WYbm&TR" ʼnk*!0L5P4Fi;˛0Gՙ }?zuz1r|'ҜT&ܝ0:tQ6k$Bw&:G{TO0o4Dr ZfXTNTm^x໪%u?C9H\174oP6Y*GYKTrnlA\T@ g%$.[eCrNFt _IhZQd*Z.!(<ב[af3{KE;]4F aJiá62nchIMŃ:uX"vY|Y%8:Bu)ڿ%"]=kq*q`IJN` )q$ ;)hS8U-Itd h (\| ;1 4GSujl_KQ5OaNB@% HMUЏ[V8T wC7Cx_s YWm:}2~9450VAOJalQPH[AePI#;x$axǡo!\ph7ݧAB#~ >Ւ-&2Vh6Iz7/(x|3$`;xɴ.~*9ZV.&6 |/3 EpkRvȠYb'3걥P1hs"sͩᄙ{y;F@ci|oԃ[H'ɰ  G8\VwQĪ^k]PwZY*Pɑz+zAd+U]I.31)0z+L6Vq*Hhe\&W0eAK#= x:H5wn^t$Z瑱qEc9ToRfggJONȋ&v=Rlؘht}o F{YNj7T$znNJ߽= y!k9+ ʶ]v{Ivn˥_Ջh]tw1m%] cw!Md0l1{\;}4kGBORO9ᮙ{c'|jLbBjx$sH;eXkF0MR1UE :uT[ru9L(wtk,Ci}慠ҍM;PKRPYzn^j?6setuptools/_vendor/wheel/vendored/packaging/version.py[_s۸ק@XЬ݃ YM@)_b9WK$V'i3{"*WR(+$itb ;Qן ]7R ;`OǟO>NΎ..?z>rblǯ'O>>d!OP!/I |[,Ϥ8T^MY{Ty> ~u]kI4^R?hfҕ1x +LJ GaFD=|EK'0 WM~1us+,)E"yqחaCOO$h}38rwXƳ6fRNOMAC#qw s;7qC4`Ї+hcSܝhc\WԗBmk`-3i#):dP W'ıZEPJbݓv!y(xY zB",&\{qQOAQw]n"(:k֔uq=cɜdW"Q,A4J?# Q(nwMv+Ē2^XũykkdxkxJZVl.E֐D=l $,5{b'0鴣QESm&#,<%uY%\2ѨH-  ysmڔs&b_60ЌG,Bc T wDTvH\t$&<"R(^YjM7 m?|i.J8JؖD9M-Lo= xQ&g^| +(4Ye95Tǐ"cBW_S[` J5ڋldfh { f3 O׺ҥzy!SQNJDAՋvO@0GCf@W8Y2j.; @ .yY[Z.!Qk_ׯޠyNeܨj]R,zPnGnD$wIFfeߣ`650s P z21#Ɛz@A՞:sALZKq>kaNtwv٫f5؀guGRof/aAqSUw0r%A.3bb7j6 Nxǀ `v6VøaH3cw}6A6yOȰ$CI#{aD[|n:f Y~9[;G9).GWEvtA*t8&¶Ιg)yo5.>ZZ|7*IVg$m|ZvXP+3nJuѫ;ݞ^IvbD"Q?i*OY|6f`n ^49V/=Lë.M!UFyHj}|!/QH250ȴэ>* jp2]\ނvPP5}0x繠#XXT_ - ɴgsjT,V[v~#4iL+@jA-zT SGfcNK?-ω.,/\yb.]1.טW):}>Q(z,2pv{qJmŎ pkSBmv ? [*>ɫ'tawQ~6vߔMcsAj:vUomҔq+(UyA)uU|Aq u(p\Ņ +1q^"!ˋWj/h΁^ Z+&ڂjJέ(NV 6jra(@ou\-4'v)nF7%67Pb [дzפ먭Aj\ӣN0t<1W`df)gg_ ;B$ 8•cmqkD_9b7PKRPY#-^d4#setuptools/_vendor/zipp/__init__.py;Ƒ)&e f/UtNчk+:%)IUv cr?&qWHw7R% f$7]L'R?u:>틏d-O9~hZE PܑgpS''UnXZ@ICfd&-escn6o{ިmrreػw0{xYeE3Y_0V4N?fJD:0`78`Zf`mņ5׫OOoaTCr6Y[C."d vx z1lA*U- d)-˶sxG+TX* DL&ceE}zx"a5)$F[ְ)oV𳓢@X˚Eh]-kܟ(RC>0!ҡ6,Kam/odkx(E2Tʪ``wlES.C<2b7  ִx 4n.7zF- 4Wٜm~ۥǷxJxxDĐlYfPY|x+.9H^ˏ|~R;L["2|mCUY'5,J$ _ܫǁc| jïFAA}5S' m8 0 X3dTLfPe%(sK*_e7iJ4j ,p @u}B3E[{Z4]e`)->7w\,6bXEM#.?4 9pδ˭gn{EiY ;jm[W.N],7@nc_v;Y;P̋,珊|o|T,t<o>W̗&MYZ%B:qW=xqٹ;B\[YR`C* VR:X-l ŚʶւbFն˜W8GBiL{=x>\])^D+z^ 1 $&o__z{unyHKҫ;~96-_Ұp`D >ARS\GctA>iN^ Zs3x%V"w|iaQo!GEB۱t\ƅ̧! (,]ߏ{H1/Dd}yp,;hJ[ꮂX >;) <:PI:0+% 0T̪tNȞi/N(LjMF 26 fַiTvYe;%pg뻅By\N$d/>L|4{lÇbm[7rS:tr,E7^D4 :r^$EXCM }\{7,;λ^b1zB⧵" J#t.4IHdOk:ȁ\ AE'R))P+tװGZ膧ti Z,* -BQ+!U<^OOTxP&_W ~[ j=xyG>)B]J>p;R FF:A$f!q3nk u1!|YL˥@1K'n7b )E 1=H$Kmhms *r ] 79 .\0!B P.gb N^`Ҕ6|м T _a Y-x0llXNJ &Wj-'8;b.sn i>ȝBP$ NaNsa_(v#B]tl:D~NWm[XڷOх:=K0VČ=YUό&N8 zb-Ѥ~P&q0ba5gtJ[$E#ǣ((w؃.͋}/&!\_G)zJͯGC\`aa NWcI/_c]գ򸹦}z;}VBv`Z l=>$FASج"YagjZ4S?$ƶg :^n; AzGWezK0F7(@_ZM4ltL]4Mԋq#joĜ>G7={7uWJ{["Ut :JK1M6™~>Fd%P)1;:烽x<ա(%|6 npȆl^fy`?&He(86xR%OȦÞtFt˜t, p\msxu  AG1w̩1![: +wjBHje~,0g0MւcJuGI>3xF<4  ΰ}gPo7/^1A`Uxދn$5c fvP6:ȱHGip&b@#T;<:T`w!ৃ&WB˛ն ёGU;(;Yč'.'Gif/8E[_{M53<-07g!\4tk(ti?#$#Lw4v+:*QK@TNtWsEYdoE)o2t(UѭcϮ\1thhόku@g(v<'*б/%:?PKRPYź  setuptools/_vendor/zipp/glob.pyVˎ6+n4k#3FEmEef+Ix{I(31D K{HVڂ2 >iX,/XS~N nXMqJb+Uo7/1fҔ*^^o%osg?@+e\!9rV!mJõJ>hIJqi,.&n.mj'df5,V;.zS`eԛ;:`C47u4ûjf-2]?G.T}:49YO܀PF˶2~\|PP+i_O4X_WYmWWtoI8J0bpxW31눀Uk`oR7)!pԪ}g߰O@[>?8G$*˧@a΢)K?Zh ?.|͟D-WA\N}-P`48ĉ=[%%j^drEnx_6>˜q|$u|9"5~5Gf9?Bb5|U疵X3lƫ>җyAFQT"* ƯЪu|/Jp"`<: 799 UH# 'X9Әa/k1Mpy͎+ßl??@p` )"np1OHё1T(qnJe_yyͱҵjе-X$O{akuy8saRg^6>s 랸ʺ݉>ph~,g|u(,1i1yѼMcxH$HD!K}Kutey*:]ip-F%^"F=/ 1 ?ÐfOqV1X,<9Ÿ3(X~ܟ(N_䄈ρu&Հ.{|~-kvN;q𥻍F !;6>I_ZicDPKRPY*setuptools/_vendor/zipp/compat/__init__.pyPKRPYC''setuptools/_vendor/zipp/compat/py310.py] @ y^*"PMdw+xsi6@bD&;6.K9c}+p+ٷnj+=!s|y&jd;8Ȱ)Ĵ dKm q85ϔPKRPYT8setuptools/command/__init__.pyQn0 t ۹CdKNA-Ȓ('x$A 9Ԣ)R/zJ!hRM؀R4sSRh='F?Ya %k<}4OwMp\* &5w'&hae@6B#y+[# ௗjo~RMoPKRPYC"setuptools/command/_requirestxt.pyWKs6WQ)Mq/M!LEP0P L{/d'mZlǷoZ,`ݢRV  T v ;Pv5jk.*(TW7((:?^SbH ž3¢޴0A$qKY>4+ܳ6/%(tgF/a-x43xZ{ݹߙ d27lc]5Lv |oY  ,z(OR=tT]xRmD.*)>[W)pqY)>AЉsGIPQ3`ڄ mX]fk2\(:n ]d?Kkce8NEĔ9b 3]LvFQp";S3l"ƐCS2"r+R 2isWtzrϋ펦Xt_MuH2`i;3`,!i_Fd#LitZ! po䎷Mkф{1n.uOGb4 A?6qy7_oM'|&z)ݗyiIDS /'@wcO n(r$KBCECBS&}Mi?_Vk4f|Ir NijN>T袖BЪ`@SI+x3lXY{or$⒭T˼疒U?4nDfsDFw\}8Yberf>}Բ_]vgWӷPkg5rl>9[L͛t<^G4mߔj'UQa%],Je:lTl_μ=S?oPKRPY]0O setuptools/command/alias.pyVMo0 Wp hb9 0`40[Nْ']}ԇm9XOGZKтKѶW9.Nk;!5l_Ԭ Ӆ[YŎ(E!ҽfER WklFQTW/4MgYWr M%tD*;mCs5LYs,qHdqѼ΁yX@`Z4D=$?1EOn N"~ceC0@){Z3IcV(YkUO'U p3k Lּ̲Jx<*] 9˞:_pͨAHڊ''Ҿ'=ǎ0O5mCy|/)ၻ{ !Ky3:SE:r^C`2&sS[c X7Gp6n  λ&Lы0l'~ђGϤvxӱIK3}s:d:秂Xvj4"ٮ7q{6EJ&xJz*\N2kxh9N@f8%,q<3!<ywt@Hh]`ߋ$.L)?`'u_sf7̛,y ?)+$":a  Y>0c sp2 BZf  Y c6\RSZ 6{/ F!o G#NeX0~M׼],p /;V=VOģ ߠ;M2Q) B9_IY J?G:UKړX;c pg8]!njُ3 u+hVe-zXt cYe[0c̞@c# 8k0fލPԜb_+:G|Oo@3By@¿-`nbN5hlųږl] n[}U1FW[˂ ЛI{莢x OG:R{}Ub4|3nFʰ-m=\>,Ёa/K/RFhҲ6A<%3Y !DT0HcƉpxup[S֑BYxJ9}/d$dGޮ}ZLIeg#)`80OT1a4wJ ǞmYF0M sbEu:z5מt.'Q(ά*D  D ea9Gaqyi $M,zZd}6V Y'lBgp!d .ba+3aDZ ^#OE_4Ud] FM%fAT+ Υ 9pڒAN 1?>H.zr"NUl#h2dit*[!Dy@>j~X_N c`D|ҋlz =3| HKnP?ewKzn.Y`={6UiI3VyFl_5}Q(D;h,G*O)QƚFv5kKAFj綠Ոh Ƚ.vDM ܎L9%[MOG ICRS$S=?=6N 4/QК]yҗ^ͻ.;T)q& @kNiw5z4ӭfKDy9%PGQ7.ً)>Og=s_]r1UHe'y|a#1!Gʙ-yADsPt%,L<8!Dzuث,0Uu+KQJ!Q$8ƛ9NCIrRj >اH1LWH6 /ci&\һћ7FQ(ӳdlhX"A"[s{ rx %FJjUoķ1!6L`{ =~E!G&K[k?􎽚k.77ڡRꀛ90n; Vx9Bɷ,ҍ29\Ffb|^QXns~ѡ%zzuOTf_WECL숓 #% xҗjXIDZVM5Vv# ?D9;q֛7'j775(̛r`J}ֲms#`!,E6mMu?W ~Vc*)5l ̄lNp9R \XX]M̶?*EOQU|GŠF?hK,l$aa i ݛ7/] [!_6kۜ~܉:#Hlxz0V؞&H\|>1_6E̘du R8s5㜫3M#*w-x {.a9f|2ƺ͞!>R=/ 4K3",C.Mb i$qV]]4R53g)UGZwHv]F0D\pGZx0Hn;TP?`OXٳșq`h f=U5<6bNF:@xSEE7FR [j Nr@e)xV!)ưy݋$I,{cV! vch,|/`)`(2FBn0cy F(N!C*V=e:8BCZ[udK=ITlj \my65ײˬo3Լ N(a(Y 0sǒI^ 2Z@p]z.&0h td씃H‚ xTxb"rl#f^6ԝZ [qA\ij D?l햶֢L#G$׹>4ύ!1ŧv>_x]zA bxҫ7Wo_(z>:2;[HSvat_߆Ӑ^V ZU8&:]b682} }0sLge}ﱪeYZ+`5fzuF4W 7m¢ZV'봼ӀŞ:hW8S^,feVb=? ] lǓ',C@UR(:FﴴͬY͎5^P l[(58I[*\c̶4z51KkVKP9 ۃZTmUh\kQbG!%\AL H8( hL70dqMeD$xWdnlEN/{yVAiR$ ih3Lѧ^Cձ)|s|jCF-ɮFz۲Ol_7v\v4ΤZd3cGNUR32 /^U%DJܤhRj~7־ʯ4{u|Fzatr:žĈ6&U9 q¹4Em}ֻҲuj: 璒L-ZW?O^#l=1 FrSdc5Vp+UC$vz>TJYI<#Ar&x5|")y~S,mg^k%ʊQk>L?HF!`}aeqwC{{?>Ut`DN097J`~8L~@o?P 0WORg7p芲":Š/:ʋ0XR{ȑɅhGS`:b @}Ht=d(9Yü*CS[!X'}nڂ,[pe:FGL"q-Rb 9W@4>C9j'>uІ@6=2nJX;#XeδчnSQh];-rxFhLoƃdb+:X/#/xHAKyEU+Q_UQijlJS)փ֫ IC1L'u#ϡ@xCݨ㧻6SyRM!++\_%Ȁq%D8W uiK_ 5RScI[^Eנ ?1&fp{?s(w$|yhKk ?P[qѱj쳏;E~F #ɪ>1/Kݤ*J1*Ҙk#GwxCY U۝iy[Qq\iKY N}uhq7*'?^Ț/^%gQ3=ߘF\C/mRo`83U恵.ӦB'r3;SlY/PKRPY )xrsetuptools/command/bdist_rpm.pyTk0~_q$+M0{(9%B#uV"XcpDk@g+v ?rڻ }0^kXx8,")H*ݶ\l?ִh+U;Cd?6Zyw Z+j@A._5Ժ5ZJ}Yǰf~_ D=S*"P@yjV {YǵaYɁ%ʙPs)g僢"qۣU8cM;"ZI ~pl"K!xpi wnpoDʄMoP6Ɏ5 [+GQiï}Ei߲j\e'WgoGŧrO8m}TGzra?d>m&>޳) B8L fj01*ۿϊϳb-U~ ٤!7c Z #[I|2STcѪkf0+AljL lW! "Hys8۳-qx 0ah]\9 SVA7LyUX@i=s5_@#_MRde}8!&  ۂ$z8Xw5|dBS&TGΛpC]# iQ@o59C 3 bf_c;b$ [k6sX$e fFzP?6[ri|AX$9nE|1P?̒R*H-g7U>>PQoM[ŗ$7Tr}MkJSH{`@FDXFzdp4N AUI񺈛%SemUdIrϐN)N,+gf,r v󏿼)퉠K ^K^YRn{8Q_@A`3#!z{Y=/W?G~8ya1sQmHZe{`wO{!D¥ܧ {[e t<6^_}P&K&’07_"-'# 1B/n;=0 ^xZͳ[FT>z5G2^2+LJ7{hJ2hv!>hxpfdT~l=kRwVZP̶knj 38vk^ U# )t#A{|D ^aP)t1 ڦ<=[.`ڶpbc0d<[<]OeLQpa? Ͱ \Tqwo.?[V[=o_!u컊8X9s ۿB!;fvĠ\ SL؍cM_̓^;| !ߦX5ku=1̸X%(PDiZ]IuҰl I|yv9>xyz$ ,W %U0I"bi6nӖXy` q=aH^? Ǐ#aB)é0qg xq3 %qi  KI*g˕mkaSNDxEX+.84Fqad1$>3d]VdmFuox>s2PZ@D3Z,o')0MhOG; i3nCbEH,h AÎiރ=|[ Vpގ޸ǂ`+A[4X`Cc JIl*d^8#)"U̵^7kQʪ~̐E_λx;ti0$' ]Ό Xp9Qh 1@r=Me3RfuAU"~HK=5 A!/,+ H4<"\˾:"BްQtu0>.K?o7C y,"jܚG(;hjG;d9Ț6ppB6 c"no#W9o|wK0h:EQ2sUqgadͮinBBڌhBHd N$zC#)E=v`JMbeb˄@֘JE伱F\0+0b:JV=4d6b7 Zf?"B}M=&DT_^¼D0E_P^y9b3"3N=Ii ®Ҏ ꍉ-: dn<=4I׌鸜I;(b7k;^Wg!GXlhZQU8 z``5SӻvR\8 + F၅-9}#5s< 7Y5 !`xxb4 8m]Kbkr;=|xgZ﫽*To Ҫ~t|E!|MYa!胘 sI_O/R}-ڶj?NZhv=e3gMjn$dGxvcө:=zee\ҹ뵪>LQL?0; G":;{dC mT I#4}(rG@X'^q$Bߗ-ʃS"/[am{$Kh6ʢzd3_Qn[sGECWn&`jn_q݀]H6^;k!qR`1 6HNWSSJ?P4!jndGHɪRԉYz[1 > t`I1lgYX̺*,OYFQv$f\x$tP{,~C[ygcV؉q劬w'Q< .f4XU < עxUq%I%b] Y#zͪS0>ם^o4"z<,gݴxo.Y%n]Z2bSh΁۳M2M(n]ӓȒ Vf| ka-x(\ `l5pBKu(e0NX9v0cTQ9xeey8PRt3r' 4f8}}).'9$ܖuM-"nz(jl0fAlm1Ƚ}S{>hB7J0À?f&o=mK YWPSCm)HC%\"K;p= e65|S75T&*lsu}j\[Q8z U@#QTxY )!=-7 @t$FxDO=tip;?یݢˇDۄ3wW.uY~~hJ9a GkCEpj.2!I6NLX :\{l*^r ު8NvUͥ ( a!7]f-}؄]]:0eT BިAN&î:tLvҷjZ#о!-W^n '%Ǻ'΍~rx8ą75{D,@G@^/PZ3p&d i{c "n 1akX{xq nc@^y3ፌL~Dsgi%otjëMWCL2e*ƫle.Sl#*]Mx.vU%ߺXTJv!ns3/?7!-`ܸ}PO=񎄷_E [߄GbrXDXYTڮxT)O>8~q.) h#s%,8b2Ϸ, jUm9v*ۖge~xC]^Ƌe~G5 YmIsQ$Cw,8B_ϴV5ޡZP,1+1bNˡsٚMIUm<,/wlr^dDTX ZZRԵm59ezyRtx:HZ=%l*^6k |5*@YDIaq f*JUk(#Tvo=x=},=t`(@SC e} 8MaUV`UפTvD_6 3ӳקoξCNj+h'\|wfE*PBT4)Զ%*Rmjil^{ :UY*oe?fU?oGU,j)5d2ھJ; L}>PD- tYfǰnjP!Qu\򮍻omI ss"7?fS6 :#Rq_mLNxR殱Td0-:#A``j[+bۦ__xvcUK&uVrМ} eUyWbIKօ iF9$lΉVHHF K*6o4[4Qnd\BvmwKi_j&N줛GoQtek2hjFwlDGx{x0`N! 챳s +S$_ c9paF^@wK[fcs#lipঘL!i;B/q6oGZS"ϦFn;Nht0OsyFλǟ.\=+4s ˞1Rtz HQ<|sސOB`vL\ziI/i̾x(ՇBXBфlQ|:= oY5 @kL:Vjc,\,)n){~^ʼnA)A8P pFDa:VlFDz}Oo! `E!rqNɡU[NϓՉAT@.F$_;1k 0c0FMm5L4}JUJiN ;RvO*CjGMPX6nJB_OX8xm^>NlQUZq?U&MM4>躎WsO-_qPx%bb~t~~O߾fG*f +s:gk,*B,#?ٸ"!zux*(L,qk 3)U)t)#)]\߂S_GhB؊5,^& hvR-u{e`Gp*!lΜ*KCP Q*o!idjkj2$^aTIqi[Tx y3jFC`\3XtKk~+"*1`i`C5X/ǰCQLg]OJՅS"&p&7x2⽧kek榠B#9e =jPӣW5&ЉE&5z}Kaeva-7߉mkm2MYw(iϤI+](XZS$ :<;T!9F4P\O?fxX4i+\S&~j|=z=ŠB6.UզCj& X@A*9-wWp{0z\IsH}&3Ŧ\{c,Qo]"9 kT30u$SX١c&RŮF8$S0[&V'y3l+9 n 1DuwpCE-OؘhL ATks~gnk}7/:iccb7ٸącv t37IL$~HsKVs[Ұq}?h;0@&˘s1wd_>M,(uMDI/)!}N7gm\B'i8b]*4MuM+m=eW` =$8XIU$E? ]B]oþ]M_T$3\= lF_{w[QN1|k=֬eŸGrceTQS`;NI}8T^kx&N% L6& >pzv0`bի #:RiL ?qBTFwʴ+N_x,!VѱnKg\1qgzF,R:P"qãQ L|XLI]aB?iK9s.;1Pe1G1h5//us?{ЧEz?82-o|5^g<0USB(Oi* Ʒ3Pe.xW>f%1r3n:h\mZ׮tƓkmzzH@nJ)Uvs#҆Pyixlt59s=2(|qֆ+&q4h D 0AR UƝxv]G]$ﰛ v_d|Vq%?g1?$-`!c~rnΟW\C\j0ƑF>85Ҳ{0q?"̀|NeJ΅ JpB,JSl+̘MsV/^]0Ӆ>/);YG',_ASy~?PKRPYk setuptools/command/build_clib.pyXo6 ~_8\ypP:-PbˉeHr[#%]7`^X$E~H͵* I2a,R|b_[ժ}IF$UE,BfT=0J*'cdgONµV to+[n6+5Q*Y\@Gq('a(N<:sJbBw*vъu/ލ ș{>A4^qwsvw{p}{wwvkl.{t7E\b T::{#PEeW@m;A4yJMJ}K򰕈!$c(% hͰ:a5*e_5CwcX/+AQ#'~(4aYûntlmg(ZI(e k٬ԉ|bOX56׀Q)5T<=Lc]›uzbHrNgHXsims)fĜS9z{M=In΍.-<z{|xЗrT4Cs Ͷ-+^kٖKmo^-k=?zodo+x?D`R׋^\ Ȍ`"ﺦzp$wZ =doUu;n0@z$:=w7x2&ouiordɮyYm )>Ng ~؋]"@9XY>@ ^f=X,OWCY)8z^̘f" veox%DvymKkdM'A!ZF*fe*nrreh\lD&0Ma&_nb8+ dM>5;zy4# /M9v> !̎6L`5PUcWxO?z9_Hʼm#@-lAM:\ 9gouoRvǓvo=bHy!(FμxN9nW>y6 `43hb=̈́zeggl^d]Y]}7Z;4Pv2gl]eن NI`u_tIj zKvk`TXuMxu l{B>9xn@0a> Yq'h'.j.Ld}Edчo^oS߂QV\E ef:]ʇEZ;[ߤbXX-j<YJ7.;FaVeV;!O2.0BtؾfQ#)ל~{O4Q4uwdЬ"ppi u$)Xǯ*&_$^ej:҃~vNf+*#==3q.]!P9plj>bQ$P| |e+ɣE#{ڬ)anPs9r~-uig>tEA^gvAK~)l^ eƮtZ҆ﮦ{.=s~59bnd7XDTA85J8X~/iaϦ#;Y3TfHǀTɅqwlxJC=Z4T_$s x}G>woSH UB*YpX3_MD d&s'sThITedr|"4S]VB:? })1mK y41|lK oK!DF9,3W LZ8c_腗Dԡ?< ث4kK 5HF huK8e)/.1~ˤ XKf : X& !8T*]" ;' T)ntbZ*q!j!zْEEuu)XֆٻTb9`dds2R8 ~=qK?aiGGobzjN΂c17nQAN񉘀?Ȼϑ$[tt78S;Pof#Kd `5d1 _yxgbI:)&Hb0!%i) =<2V/|X qa Uul5O9ݞx99[ioJ+Ѝk,ŠGoKOFLcOO/y?qTA EAypKHRP\{V!f"mAeϚ+Æfl{/-MD/r<)x L/fbTT>N+N='?9V/ȕkF%ݘ1ɈKV sVeUSv%mQEZxڂN8wqńn TT"h=>XjoP~@:Qy8.uD0 XC3|̾^*KU5%HXdXd_)M3? Lj&kN'FUpŸ<+m MS{&2 _W*K|I %Mob:7]-b?\L'S}) e/UϥCD2:%aa0LWcg[)tF/P**5؋k, X>Foh-> FdJ)-_/Xea~<'tY@(_D3AC uQ1ۨҖz97 mou02U,Vr%Lu9}{'O@Ō^Itߖ^zs4:{iھ}U*=OHOM@8. ae@Ӥ?SRglZK¾oX;Xc5 vE;bےWo,7IͬP]3 CAU `a>08LˋѣVaZF i QVwBg hfPN[ "*čQfW37|Lqޟ3F|Ow>H1fy;,tLsn9t;z^P2ĩA3j%;vwz/Y˺$[#YS I&Jly}h ?GaNyiV =[O2)K7aj9ֿl3FMi~?_$Ȉ^`G=2z ?pS Nv|ME?'0kNI0Qtᫌ73'T dNϿ*'a1/PKRPYТ;setuptools/command/build_py.pykoFF *ӗ .zs Is/( ǥVJښ"Y.i[M;3&)%m;i3զ,6}׷"˘7u1^Uu;YW̌m=*;vu]*;PO ϝx[ޜmM_𶓼Գ۲^ GJ&W=Ym-ץXO]ݞe(s}%ًLe}Ӏh^DZz*뾋*>iISs 5,ex2 i.oAtj ܀VS@*d)Ĝ-um^%#0',Cn MniAoZ3Y xxp9`ےXj88 m_  Q 1)Kg@d\Ђ'Im2??z@Bhqv e8T"p#y,: iR봙O G#+H=#@ oPx`_ͻo.Gw~ &xpMy>t"3Ş47ښ-pSH6xG.um=lq(1%4d]^#9:V<""\՛xPb^L Y3}C?bC?rA rgCU͈1}8=6   `Tmz)OC- 4,9r#TŃ=o/ 6r1eDec*'ѻZ v+Z}^PľV7i:9A`!@dQ2W v'>?=!%8K hM"[jxGA dC6y_v<>?\Tc+E$O\VlP$?,[M1? IlwBAHFw.~OFH2qE*MEAi3zd5?-I2\B6HbAqB2NrÁ&ԣAs'IN9!#G6ob݈gHhĬ_2u낳+raG8٪=)1*ALmRy&|ȑCIJC "[| d{8gjWS.dcd }́&MbG";H<`#G !o8o'gXKF*fW8xat3qbp4hod%w;ghEi8;l;Q@ շڄ4nHErm =&y2f_52- J()j_b$~EMkCLz@ P1@L!x=@d;) S}0}>Y +a*&طdo]ڽt^VM| 7[9<!}:>ؤȰ YJ4kav88ӖM&guV4څ%֦iœiycY M4CKXk[C$sR1ԋ1l@#x V+YA)mKO^WQ= ̓x5쟱éKi׵E e_#8;V<P7v●!7a!(:([$! § qQ#_Oq]ªQ">V w t`]{[F<RNӓ#?KrH״=9@Q_`﵋Na+ĆW =!NQj3 ]|j-"A$#9[M[8ql f3 JF2xJr/tbI]U75-cgDS/1F@ȒP%XSDq<0o3?T9hlG5mj&3(-lz_ur \߰fΧqB܃@ЯKFMG!:udU2\ X7tg9VQe.ѵ)1tő:p/̫\NkB|gEiF &M{>xThEĦI[ tml@uƛ͍lO|9c6q|MطET#W>&Kjjȶ z2k2c8+:uR<#?1CбyvVBHmZ+46r]W,ycG%6+^>zxyD[J~bixa.L($r<{Ux#| NܳXp 0ӿy?Vso+B| DtXZWu@{mN3?3HN!oyC G_ԵWHeV6Z^l[|xsO`@"bσcV!D7*CKvCy~;qBWٯa]+j b$oe3?WpAzMDTboՊH7ɫA'%("3*prr (ȑNӐ!/|435vE}qniX];8Y8MohΫUXAF}3׮b ɐi56~lu ^-4%5K4 ^GtKEQWN¢K *gDB9|IB브'Wh&xOV^̘-c5ˬ 3uS .AkЭ߱p}p8[V!zq/LZ"$4VW+wKz&<6;B`kEfޟR3 uEodWt[S˪bm j8(t6zrs.TmWg|ckwk5HF!4uy_򖪦U.^4gmJ\Yn |_~ҏl׿yk&Rqy&Q 6¦`Aw|eCh*BfpY bF%FQ*e0_u'k;FmlZϒjmUGhh1Kg:̿Hl#P< щKzo({c))PKRPYBZsetuptools/command/develop.pyYAR5߂|hkM]EʢJRu%RO7/?Bjrno6bz8G&<ӎj.4է@lXLfT]+MKm,g]=ߋ5ѽk.\pq\鄾Iͤ2|6%9~{蟙fReϬC1_~F1Y%F,4LOAH/z C2ܨH$l'yFܱFVur y0 )2p%*OWDQW!+w-$zh>!>-Ȏf-kdxD  ;@-+`Hϝ FSCqDg?N1BedG?9b ?@I.ccy"?ȖTABk":ʯySMѐ]|lO5k,{9f; 3ojlf~M(SVVc]UAkcRyK:'*p?ʖ_5ڕeɦLvqsd&If0a7Zpq= ,_~Mp]+HZӿU RQjħG٧9pmA7 (/2yR-8p~PfLf r 0瘻mSqOa @c!k=6 !hjs+->ځR4Ne =h;A5ȾGHNw̪tȍQ z6ԙ|1 .p aslwe%Cr͊tdoS2 ׁ3U)HzE z8 |fUU<,'2g,5lW6P7^bMj-wJ_& RwԃSag;M}a*`g@´[hfjF&5N g!AcE:|>}豩oSSZpbis_ @>a͗ݻY3QX"%K$UZGGt$-Q'1Bdb03a-0nzuOB{r'G7xG7Ylg-GḫLds"'ƒY?LEv ]Da-9g.d:T<{+M-e`287_,:rcu]7#wQPkpbM]k%# 2 U Ƣ^-krMQ`5 | &oV-Uak~Q_SD|do;hKL}Ke%%8%^Cw ۮF (-=phv, ļD^ e y:tW]*rdO  mm;q!;pT512o8(͗r[b5m NM/*bNX20KQH#-">3gc'oPKRPY.B setuptools/command/dist_info.pyW_O8藺rMPJJH`OBBbZ$֐9z~3Nm؞翧A.p\hRsr(D 953`/2Q!Y03Q5R&[MkD9+X&k)Ikq5l&,?p̶z:BäSzY3 {uG#rC3/d,+֣Þ-g ?_mF-Q 4gs!ڀyZ LLi#eF˶$rdF8mE'\x.rЙ ܮ5~`W7w7גe]d江(=*H=/Vek|C9;+Z/ml:NyeR|N$ e(*X~D>H%ya4 {n(5Dچ%^zՉ%*K؛8k?qpe'lB9E`c hvk0zQ!Yz?M"汏7c|HaV†-\jG'x/"?⓰җƚމڼZvfp XZPgurQtPVo={ybD?JQfЂ kg@ŇT|B>5ca&tՒu}_-M\K'ѽXh}{amB'`bJT Fv{:1L'J~O+x[~:iWI:gS! E;v><:{|Џ㛦aPKRPY@_X"setuptools/command/easy_install.pyͽi{DZ(]b]6j Ht{dIGҼ0 '0 q|[[wW/RYI,rګ=8)tnXxЃzhUvהZmfu3h~<hk-ˠM;B<;ZMYSmj`Gڇ=˦Ϛ|?j޼{#Ш C01A#$0C@G>E:V CݮYg:{s/}oȭ P[Ao^.rex]†{j;qvNkϫ45o5gK )\ z9_L`x$e3k2+Ϡ7̎[-܃68)׳z^⫾LΪʶ6 >:XWu}],R]+k@ef7?LsNH JoISB`YgBCdZ{v˦;YlЖxuW)Y`'3]=FpԴ`\/NylV345yci>^%ߵXxVonGydc] - 0c8ibǻfIC?((m`]>^p[MD8pqy=Ht.z$pSڈtSqI]冤 Z>TBP:x x6Mq_?_c_? [Q3ǯqv.~tsѳ\S<^,X NʖpQ&J`k}I5U$mO+1P0p G?CPff_+@H2l`UiD >0zFl7ZTa9ʇ JU<7xURgU0f|U[7yC3_J3|ffvYpeuim $-}!#dF y]׻B lD-CƻY1F4+?V='Vǝ|4a\7XDi7eZhP J./H{Cz8m~vD]:yRs{7~PfJHcEa"{B618^25˄%l8o0oO>S{PcO2, ,gb}\ åT<4)WA>BǴ K+pB[!Ad{ u`v@qz2&X1 @^_;Pz([jEiAe$b#"P&c䧟Vxt! mA)߮6eOi?C>pK <[p$\ g=PmWQݶru3wWQfQ׏_¬sX 3x}oO"dwOCq̑ZIY"~ 3)̡ k#* PQ~%N)$M`8Jt3PWO΋rA-"utAhv)ɪK/55S 꺞(4sY o _$zپ}86{ψ[H[LŲy ߁)q^a#n{:5pEk8b W+TTS's% ̿m϶^lqa {$5?;\4 uA*qv"GT j"~]|?{8=x/>el&@Ѕ?!${o 𸼭}eڙҿ0`(9tgr1 A :s^V  4Fz?{ mZ͜fj:z>酳c4"9. 7Gpyq<.yUxS$_˫K2f鈜YL&НD׻n~;N ^oO>cHUL !-(Um LsJf 吣 (J"d 6YKAEڈmUVc ';8Ɓ F5am*@㱨Ȳ2&3߬aZ4ؖIiY#Pc꺼^|_M(c?i|VCQ ͦE%%K EBtq3k5 >e}h].6  H)bbkiٛELh2G6ySpqVoȹT4ؼb^߰qbyϏ.l6orxBZb((p`nH P68lZ]1F/~tkGnP/Y"UyOLeFɢAV7-qqkdD9IJUƿ%ӻE F/5@n |Ϟ0㭍-\w+b vY*q w~UpB%m]H!-b/+rfKrY~ yV2xҰudLx|h% k)ޜEcI#=(,B-D$/==kZYa@$ ,dt;2A |m^y%>4]c>5:w.3n-\M>w~qp)Aˌ;/bnz63M eL lcbA*wҋ2d3p]Ҙ![{%bu˦"clۏzVpAxf@3tPu7Lm6pc0'%PA%O!B_ev٩Fsi>&Q,L~;eݮc^>'fS 6%- #U!tI-]nEy7J;- oGs^/XW҈j#j<]8]+ dw#¥UqK|dWx.,̢\OUF2Tl 4Y%ƂT`BbvUaMRIf6#O j Zmwd[xb&4`:,C#DǤ G++qg$ڼ 0V` EIHBՀ? JPf\ǁpt ۷w+??0ڳ ڞk5ّ' e $vr sTM5#Kp)WA \ e~+En yE2x~§hH Rlx1צ팬z}MsEr ў$u~䋿h~FMJZtm悅A7)>sHA+u dhTOfI/fxz1$eyM~8x,n}:y# _G8q" c?GO'Fl$EH/w]" etSA&lD{쾣f1@}pI6TY}ޓi?}ז90#0 lf$ԟ€@4X@V`L d5ˈ攵ʬM',oo૱<ȈnZGBӎ6% ({4] Neo8ٔː `D^j2Ez'SzMcaܥqq@_?;})[@ǫ^z5Ū*OJ=8_ڼXȜGL I1r oyΕ$UolRѐ=M}d@yHܢHn@XSβ.hB:vrU[8i 5?Vw1Ox-t#=OF4+ӽ&o7$FxJVgPd8ƌܡTOS^k#'뎿oTW5 r#tG"GtMv?=lH`f^{u ߽}٦\H\[\DB*Qޠu>:ErםkqGdF_q0N~XkE$F{^#!Ip՚2^iY1(Ɯ\T\6vs`[qR e,v|֓HJ/ȸG9yݒ$f+LLgW~M'v'}dip:&0Hp}5 ~CI`@pU]-Wt;7lRTˢ6w'nR`?&>a8e]O$ 8|i2Gch+um'tcΕE"۩UczMyZpН8[F~M@y$zQngW~<܋$6xkFvQ.Sx?)v99%5,\zi=l5 $uwYԚl0T/Zi,i^d:V}Vt9D7ZNfSdB9[ɞ!'R{G1?g&7}^|nb`vy\m:cy;DdxM݉Sj(s`[I r3׆׍q.ֈ#F]Ŭ?o{4%S -^>R)P+Qź8)zNd#[7g WˬcMa@8>uj%@(T.*8ekaӉAۮmV&у4}v.{ϒ^E>11ls0GnE&gwM̅a讉uMBj)loH۰D; |T k>UtSgi_'oÃpܨvez#8yѧ[ޣOxma \F\jՁr.R9@}ҭT%{Sq!}MdCzzW-ʙ{`BVzvsxzu1 x$"ktԻ*m>8SmldXŢ q)˰!1O6iM mTl`\y8a&3 6TBfyٻiǯl{^7ҺשIIr /6#{/X5 }RA?Nd]4 o[m21-w- 5M'xX`b2G )uN{a/9)0iݔ嫭qiwjPB0qTu"Mkd$vB^e(wFL41~|e)`6Mhu`?Zξtc.X֤ѩaS|l10ў g1.Sv z1 s[$Gu9[Lz=̌#*#N,nA_tU&QyߟŦc", z6hZd}HGp8[SԒ=M5 T#zt1=,%;4)?vW~A[Q@0S a5əŠfLxVٟ~a m T5*1Izj ;. OMq;~a^/e}dO-9c=bC!Hvq=ǃa-k iein~$,3Ay,ÅbZ lds{n%!z }3B.o(y>2NEbrO9YA>Q?0/M1izlI'&6/JdW9Ub}*wv'/E5s[D &z46~iՄa\B\m)nnz@-r6Ci<- dήկ~i"tQk9{8u;aݒS=L YnEkU=tFaecZ(WV97so uE*oZfJ\`[FLܹ =NAl}&Q8Vt+L-Cf}Q흿n eHvzzFB{)HX6@Oqt+-[ mvCf@bJa(08gnD;n7XN5|F'c/˗vR}djVozYOCA#)(+vR%/v:A- ܝ.l ;$\0]JY|ޣώ5WBg` s{ A ǒd7wy&U-Ck>9+:E΍oY||u Cmi>{?ǧ~-\^Z673j5T%[RC2:67*6 a },a ^fN_X͐şG.MpFĹx$S~4i\atArF>y/O-N<thl*q X/p)o;|Bfm"EG6=ĮmoqJo;A1P"NxrK7-Sw _, )}KSN߷184u!2z&aƳ\M; Ua4x]eQou5QL<ٷ3wEJS+JIzf=@lZQM|7ЖRZ1RZc.qv]ڟ2c {ᦙ !%bw2WIQttYq*Do5~(],6>b1ǽGqGStuB?mQ {nRWwխRO"=G闍K1*vm=f{D)WI_LʠFU1H׾E]~lPZ@x' !i,T2>:pߵOyս"(ɹBcZzNa zWĚ |1u@9ǍP<|j[% 3-]eͿա 37:eʈ͍b<ϠяD\(#cLDMF>+]aKیa.kg)}B8V%V>3Z'ZrAlX5VvL.VaJww3iӯz&e@2t[}3z"?'3Wq5SNhBb$1ʿ} =œ@L̲HI?銏ƬͤNѵTH+YmlQF.-7j_̃uͷ¥b -|Rx>nב5~Wz8++YhZSf9T֛|iөJmf `W33 N^#3;_ %:5?)!;iiQ vIً3'vNwnjo=/]N||s &rpcZ`@20 LXt{Y\V7%Cb>͏wҏ JO mǣO&ȒE/s`D&Qg;}qmD3f1_.$! J~&D'./0wq9pϡ6#͇" 'dm*'#C5@YQvc-4A xA6 NBbQnos,)w #Xۿ'4kAqW|<\4d\gQf;~܌'(E mWN I2]#';\ yAEwYI%FXPԭ@bWn8ڜWhQ!A9Q~+m]lե{lw!ióhTE{g[67UI;kMh>ӰW۽xJsзU\`l#Ҧ%Pr35-ݚzn/%.+apg /l9喫ŢV/؃a?DY[e a LWxJ$G&\``#˶D6gԣH3^X@0^\WUD柊jjʕ֜|]!TTT1mCZUaa0ODI6&EBuUaZK]3&p`%ϼ[d[t{|><64|of[˶Im  [ F6I&?-L;lԔqF(T'lE ٽ0A{ E_uتi&^(rfevY iG^ItS"/^?{,6Cqj 7C>hZjU1S4!&s4IƑrʷcGk8AT"!ָmGaqG [(]C4YH_ 60BfWP rgSݙȽNyR;Z !LOR3!w8ɱ:]'Rr|c}?2[Dsbeʾ/ c^:FnIL3Pfބ;=I<gW3g}v" Ǹ[&%"P|hcf5sʞ0(J+1_qq58\k'+ pxL;還tnv|YgdB?8dN|Cj΂=}: '/di>=ߡKý) H^ 6*WV* b׶G‡.* ͗4{vHCfՒo$ۘ9Z1Dɳ?N~ JIdrM<1r/ Tl6DVgžBC>{9Ӝ(y1zJ}k9Ł"1/KĽV H'20! >2Q}@jfXf4x7%oddtRv J=BV G&8d`~r1]"'KFE$)(&摸$tN"Ztei43Wfcյ%թYިPMe( qy15lAwUzQ<~rqdB'FwGRF0bg${|K*ڃR55\lRdr.^)1um<!hz-a 4?U1wH~(|Za<*Uy9W !]ڃ*Ψn*j k# QstnfAګb*'`U ‰#eN3n cUxWWсpVv홟0!:v|4۝e0nWæţ9cU1ZZiFVc~?*ܟS wPWӉ=pxT["~6-[ `V:ά z\6LME9PYu&KG7;%lh)^#y5和 (ȅAFn5(u׬"y9]zߙH@j[;;blL#^[N4r̥-]hS'䢯٢ #='rÔ7=[ yfÖ>D*v}P=ɝj$y&i,823 swr.aQ_E)2fZ(}łc̀TAuN浭3=Ѯr+("lYh=mf@m?/;б3ǏFgs#\BG׺Ih%74saES]"PkUrs55eZTaXQnwآnp++[;z+hZeyVM~&]i6R"pF&BNI3SVVQB*`X!I= OX%J6ۆu1MvY.>ʪI9jb W.TتJ#C^.*; Y68ݲ)*w^gH $(G8daEb3 !+;lT S345=Ğjfײ$u~쬩ӘF_[` YzcÈ~o[*DžI[_ڻJU"un~0oUaF//;7 A z8[@O`1]²r00Gr먋?_|<0}iyh'߃qޕWg4ΌB*3Ze5=d1?6Fu\lQ:Q]P4Z?*Ux/N~w2hqqu}?Dy%#ch F518A_+mX+WYaaj+US]m, [B,E*L(FV YK . \Zfi=,|poJ]ދowv;=3~L3 ! (Ms0}Ź*>SHm%Axv;ڶxp -7qoY!$;k15w[]#^d![k/R:p)+uVa({Ry&FCdL=T$Vn DwUۋ$CLX/c3qЯ' 4U;RvARw ܃r8!cƏ++H#}/rF\pv(D-Tϋ Cc<`Q4 ]lٽ>Cf3LaD 0ٳFyddϭFMٌ6C)Ou?|UnT:z}L&v}c޸).6$߼)ݰ}fo2lXeqg>ѿwiJ7#D@ov )qЧC("5II鏯ճ?<ɿ;;y;985 ,3JK `,L5 i/ ; 1l&eRyjE!7ܪ?pg㝮(FzI8(n:& ^NHe8"Z;IgeP촣155jOݷnJfS/SoQ!#DA!fZ!$zMfZO4M97Y !^AG~{_Q(LZ Rf&CO+^-#_۳BS{פbᙡ߽ ETLlmBB]6yh:WF1<ƪDᏉZni*IT{YM˴܉˞:! .Ǟ2+&4495QW+lowcnv2$/|[A^{hlK@?[Or7/7th,&;'MM:8|:hD1 _?9 ԹR)-6Vc"6`m6\?#&`r蘔7,N}/r߼:Nȧ)0f('~Pz)WU;\a_qU'y&ǔMyGCK?ͪM%#o;ZTxp7eĶM xm?@90wM ʇ?<#l&K<40aYA-|M9ȔҠ.v&{حgG:L&,wA)ێp#}eeX"g7b%[6 Y,RSf(@oc`W`'Kܲ3 ؿ$-^P.ݶ 6Az|]^6cU&Q^74F߿%p#NlH&.J^ݕkQaBJFtfIdiV%F \$p"Br6c 52 }-R烅l e֘jv%_iM^pNPheS&VOy9wڨԹ ]޲DLF+2|DrQR@׉@-%J}fRdX2EZyؙ~4-)BEd$z}x $;b`pgY ZFF)DBaL~!:R7笓@S_nEa~])Zf9> C%* .~XZw4 SXs窾,d ]TDn(t$X8F𖆱j ɢZR@9N@#Tn|(,*K$q(SrYY}w\nj/F{KHFI#1BЎN+ExVe'b٘peMqYM$~l ז&Yy\W0%luCߣ|]㹛~gM-qDᰥZ&ʑ}7wW=GQ+Ztn#}~AUL٠\Oꯊ_ ,h-]'xK(],00;3Y׽aut9ehkWB1Ғ٢EZJ" t7gR,C©` sd+,\fи Ƞ'6z 𼞵$o9hBܲ u:fmjLMdiT[:2q˖9&syM[K}9ec%$ ݔ\rUhĜJJc.6iW42vE]hvkJn:b8-ύM/ wP'ɽK6WEWQ${NpW"a1*zljD8a{ 06vB|Sl(>_PPgb _r@g\8e;֢oG«7w*,pt)͜F$hYGL 3QgۂD"y~(1<_O*W_~EYY2Ur% \j). 27 VGTRv&|Gw>%b݂@ "wK,,+ akC4by4,wN0L/gF`>ߩл{߱ӵD*#W% ۂXSҐRkJM_ߚڌZ k-1[֝.$q AسUTk  Z-=>qVcK,kt5#[DZ $ q7;>XT&aѢsaB: /!L 5 ir[:\$و ~$ ct# ǥ?? gH j%G逓o-g={-3ܦMxbFYJ5&&t'}u3jj;AXQ81KAk뤽X_d ӡ F^?s'c¤K ex ׋Z6q?E_cG\r7>hx.HЂ(y7F+=h3A_n*B'ez2[@^D'ZG7F<Ia+ b{Xngmi> h仛~pH("-3X\*}5`x>fWP_=kB2AihbAؠ2emӵ? J${4'oڒBxNa5\CmukeNv-!-9Y?`vzfE|5eq[,-pۇsa+kal0<7 i.$>Qg7 y|} B9~Cy ]MѶry[Qe$N\w@JRh**E0`'h"w?TGEr(d=+6-ȊVڳ+l '*nч]5ڀD6ԇlA'~KɫwosR`x ^DS/"UĪ OBI?,l u!Kǿʝ\rLy2#S"bIikkm.#{}>=bK%fݩv)^!?^{4Ҥ,#εY+h{;Rg%9QsUC I)Q@PMP}J &4{d(᧜ʼݩ1F2G-Ź}<ʽa掰(M=^ՏXj?9}+%[>95 )⪽Lr|CX)tql0ݎ,n{ډxhk~f>r=)W0=-礄u#3.#\Zap ˤ6 T2u%df T24#c7}^OL e]g,C?}suo2,u7K#;36Fi82SfZײdTC49oO?;S {K⎃GӏՎxȭ'c R`4U7[YǪet0:&gRwkL{##\U)%߇ș3kňzAE`1uh(.O\~/d*_$Xd/DGLJ蜛Ux톅X@좵bZEXj1 Z'f $puRlPɆy %(1jM6&d(;di֛jV; Sfxo)'hM[3'V&gӅ W)q6|ᆛ&{ʊ 5E3٣0z'b^x,"E"iS[jk`@ ,{8Y^ ϨlKsIoް Ƚ<}bHXXU?Ґ ,=!A[Fi1t|\-HIW٧D!쇢i.imR./QֲoY&]Kqù}=KU^ڮ$m1?}T?z"~4  D$CT')|83tFb<}˧F1tNG1fScRi[.q('9Zo6ߙW^Jd2'rj$PzLdQ '\34ԋL&YMLTRR3i^f>9}+$/[W/ 9drUq$,!^PۼM)oXo%`0q\QiY_4?}=j}Lpt6ƃB8+6VF0I d0Wr2l |tᾡH JD5`ŸJ8"PޤL7 zg/O> s)s8/Nvg=Kzݷ>{PƞfìRp_{vy E.>ܦz8i߿,LXI9_m -$󢙷cUH`Ɣ߽}üLʤT_|wx9×nPKRPY`I+f)Q$setuptools/command/editable_wheel.py}ksHw@ݙ;M4|8R4@,h-quz,wDizLUU,FN[Ru:W*m'PYѴi\; Z5妞kUV}t(],T֪Y꺪5@v5g|Ȋ[mHt*] ?ϺӹnnڪڏXeRV咺Z*-fݨYeGE<,[WBenڨAPin*B-Z۲blt:db:UiPUR ` 02[:+hp46Q^꺆A4!˳ iKU00[@t`uVIܴZ' b[=4E\5{{,+ͷ2?|kV6ͯEIp/2<^M4\ڔw~ ``kl9B ,qxfDJHd^ ZRr0ΠNm+m{2Tiӷ3"|1D]e[|ڿP6OV[`-kD%E ˳߼ʺ"]릢"snqu?V8>?6u6͜`k=(A0-Aun;˺`d3]7ID$g&WΧ#ZΊ/ y֏k b{yEx?cX^QS1묍D oѤ_Ww`~? сc(Ҝ4gZ YP@k@6vbӸD<*NjK +>DدWPך60:t_9CW@FC (o7^Dm/^|M@( =T&AE4UQ A&JLY9a'JA-q$ꨋ%I 5%AeSػ B x|>Fc,*[0hxro|CKY3mBzf\:܀H&O~2'@F!No( l~6aܴ\^DQ?ʳ;,NЮNч>rEKCi7/-KTe8": e$$#+iKD326Ɯ!BVu P_В: /|k Dɱ%cYokIA! x~w>_'>wg >tOW?:?}Ǒ1ٌg XȒRX][RFt hAX m 0i;kFEl4t>h!?pXm]gŅՉ5~݉!u!U כ;+;7;7zܯƏ]B,jr ?4jh4vAx%f Hr/F|_g0:aԧ ]B =7`tS oG2Yx=e7KTw__nA= %d2D1J3$~ K;IنLjX3l@z#>tH4[1C9:&GXד33 YdOv4Y:vAƍ9l5Je1ɭ%CD \4D#':B t8\ɻC>DI$P|RծV[BLjt7ׅ1PbO|3w5[8;  Xwnh̷1eS_e'33Hi4N+/欳 mKRz]W޸֎Mp734pPZU}OۼE2;^ F7TlYfSIQr/S*"<)pAK?2ωl=k>!ilar4);e(7-mXMaD3hْM5Phܧt\ǾE~2_hbn@Q kcQ~UfaD;?zCWփkTdMQB@pS!k 8OksFH@!M)!~8'GҰ -K$lwo}5wkqwR8 ;o KkO;ZlCEDN~R_TbW?EBO/.ΚXыk؏ 4ShonaPMӖkj:]<ɳ_֬ ЖQS'lXmlusOIf%5Lb-'Ib9Lx*M:aZGFִh?Mf@MD@ÕvUJm]v.bCv#VW)BJ`FN2Ń'I"+a. ē|7m&]#S--X]nno) @OGds1,?!y,8!V+|PcWCG؞bgYZD FۆpCOt0f1󧎮zϧ`~UA0XT<FbV v,"gyG8׽^ͳ%Ѻ40=HSLw, A.\g b?gĄ9` ^R|sPW@4, Z]LjA-qV .tQ_/+_Sƒ=xV{S܈-` y=/UlbZU:Ð0lնUstxAT*P ش.z\)h[9IiZ HrFheQЭыu>;-bV|=3Àlw&L? 'C5֧DwуsM||` =vQϡ"m^έ&7(˛? PAb񬴞/ s9zzh;/,w 1Nq8CxKZP>y6Ew?sq<52{8vľ7ϾuQ|?md ||B N&* Ĩʷ t9/3pFdi,lÎɉ2&dg8-hn-8B܇4N`BhqQDGc\!~V~ MΤ3q*;TbZpC0Rbup&1e0A9# >_Gـb׊S| Ƈx\'t6h|xi@CnH ;- Γ]2M|TMALvfyYH,KO:#;w-€jq1&&&>lQǝx?,;jnޝ'$UA3zر7.c󳻚>qZ$OBAdi&jp&aO#3$61Fq4j7j8\ U WLf5LK$/hK?hWpsgW0^1e]wu %q|P?a1]|)[' GRǡttrUV&5V}I|,$._+&ɮ#uM *`'}9"_F[čZ5{(.U<81RX|I㔎 NqD l %. *3RPLap:= C?:NG^'ƕ sڮz!n\YxN`t~_E(cw]fā#oa-FOjvѪtn m /OԴr:{f]G&^6,q5CNQH\@;hhlFsg6(oN^# nVRQ1"iw4ơB[Ŝ$D(u%%1;FOWAfd_9݁_?tdb>7Gr {kA\v=:}{ϕ9&ۻ+2*u䀸.ɍcK )P@}t>*Y"##@Lom?bH|IB3fZײ7 (0}6EHpk[):Tȭ4Qk1/v,s,[9ȿq7Nm-30DS@&A6y1+°DZqm[݄̰/z.(L9Ḁ@0 ݰq6xd4c8_cCkЯ&d~3+xٶ,nh65X꡸u*޳])Ɇ(9*kN3nׯވfkt&u70 F;¥,WZ1I(ɭ^5"}:"rө>MܛT$NR/V?kbN7`R&b)2dSv*pqDJ7zk +XmUY0.X9Z29Xۭ6#E\j[WbHLf3N.tD/h]L*sWiQYնܻ"RKVE=;|'m:k0C{vE\ub.=/~JN?=p/1V%fUHvǜLvG=<[7C 2?Dቜ0qw uڇBj;QR9"w3"nXrD56Uڻ׆qgz1RxX\6Y _Ia\6c/xгa.Cu?SZS0Vȵ+K Η/P̚aR. Pĵ)wꎊ?~~W[Dl`ԺDwgvN6]1o3# 'tv0F~#l~=g nPx jsx{VG;[ɥrOr6{|ʃ3xwW gINQb^#܉7Z/\F@YР^({XYIlDat 8MMh -0sy1Ffx#\/!^,s&[8:カ +6`nr)^A%ܦNxAt Ùݼ"tiKR:ngrIy_cG> ut}T{!aK(G GCv|C*LMO,r\YDGꏊ~EC)Ҋh-jk\Qy k^WQmZ*3ac1۔`j6+[Na(v? }՝78JAs-Vf!ӷCd$C( yK?y?s%=҈@4I]]k#yMooғ:_Ȫ S9?-ȇM}H{hXsd= Ń9a̗Q܄ 8H DŽð6JV|.ƿɌSe]4,*19ɤCrTyn p6s[S]J}b8۹v#|5ojۂEg`W #A xY;5>~S b{3m")\t"|a\D (ѽF"r{e«|f@yazHS`ִis`xk=պ Ĭ9CSŧx4Zsp5maz! b+aŋ/U 7KE2/qdK't_.,׎:di&:[67Pb^D;rE^^6&SLj "4`Ĭ~(_ !jA0BJvx#]] & ѷ@ H7Ε>G (; ̱>1;EƱuhM1j6F `P>%>;9:xTWVխX h~ %i#Zf3. >Jƀ}mҾJ;2᷻~Ǔ |/Z˝nOcӟ?2P2{ɪ,d@т\l7)*w)I=w?8/Xtkh[\B]D`G7ebY:f_67AE 0m2`JAO4=5_`r3o&1V ?L|UkU,F{d.ӈ=$alcۼ{x'y.s^44;䫩kYێ$!]uc7Ug1 YH;1Df[˥F.tk(yz7 m}k= .IJDaId0v~:>F rD5v}M @lauSۑJeVk8!bhXcY&aW7G`7ܻ`cGΈB)Z)r^RZHN" Dϻ۬V^퍷N8 #vXQh g6=Ic%.A#RʩEamw=q/Ob:}#-|Gy'" Oކ78a:;VGå/2X[e**ד`wwlӕŏk 2t[eӴ=B$zwZy竰OmJ?`ΰY;v A["7g cNCş @ig %vT; M9lHUׯnH )8H9H9v_]g?Rޑ~l-Lw_r2rAqrO~wr&ɻӫlbӣBn]E5뙻o(Qx{p9ݞA4޴+W#av|b&և\n/II_)jѝ|W<=~M7Q7-@lBfZ\P:K̢H[y`r x~ͣu_(x5'4;pl.nrS^փgC EKg`lԘOv[<ॻ<jzۙvBMы\#ę@z*6'pzoQY`O-IBC1!JRDʺXs[ByB?-'/8 /:GGs:})T1HA0;<^l( 80ȁSc-LAd38<=Mޝ%ޝN -ݣPKRPYM-dsetuptools/command/egg_info.py}r%0.>)>~}7N|py HX8Aȑx""x/4r+FJF gCfjh "-6yIQTwJE&M jIp:ed4 |U"7%vMծ? 4L/MnV\ț8)ЯG<@.rG~n`WI"- N)fW(d\X) ˵ 42*Mj-%e8&xSuSB"ܑ0o! ?0(j8E!KLg'#o7@Ap!?8)&Ȗg#PȂW9xtZ+۷FR_5;Y(yx ,|2ur9?U_*h4y惖0/w-XHPݦ2ClRY!31s'(ખi"huL{ MS#Ұ\w'Hz{_ʯQvKT D=cؽ@WĠE^-9Lw7y yœkqr.^_ CGCƺF(]U*FNJƵvmh}_rzz~htjd$S+z0-40hVpwM{9+E an]= Fitt\s5ɒ* ^-a)VτHة$87Ŵ=D(=5 _ Q21g:*$ve9&ǂp&$xI&QF޲pӒ@\ڼ0"/(Ie5FGz-\)_t[MLܲS¸ܳ|atT"dQ1ն?iZT䦃Ȟq'.mVjcGO)Y"+|RYĢ?jz訝ʢFE0 qzY |>.F>Ӌ /ϧl2P6Hi!ͅQ! 5#F=|և+M^H{d n%]*DW4{^rHao Su?{JM%čf <pV9pYmi$5ދ-5=9R7EIf/ ;}n5͏o8j7C82sޡewݫW/O:g\F)-/el脆m3P0wnvGU#X`?)$59fyk$8GrfBn2]CiFjy1 B&Rd.qk!tG(΂kTm]wh| W D8?h~`N|~&F(^=] 688ĝ (ċڱ#J aq5I`.o$`3qF ڃ\)y}%;S3GI1i/ch3gCi!zQV&q; .%<0ph%srnO)fޭ#8-_;4ǧ10{brg!v&@k&i.e)Wy6r?yg\)4rO 0ۑ$'(`M۹51VT&‡z60˸٠'9ZHm[^D#!Gւacfę,Lj݆nb͐SO'$jhaz.p0x6=/V,ò*蒗l*(ł&dE4 Qcy$fZ,\Xkp҂N`ȳve!!th"?:%/Q;tiuت$`y?.-ъX3눞[ 8>XN>b2 cFphe8:LY8d:L]՚jS WqȄS1W4E51t} 3.LX/QLӂUSf+*Ğ* 8Wٝ2wCD>~iOy` +Vow?;MX.0/b3k3YXFtlnM`n;TC>iuآOp7%-$~$.vOIX6&M^xׯ޽ c5]\s0r[u:G?U<,\{#O;A L퍉¯rs]b L^כ֩ߺ/bJ3C+,mR ]@nq]00$;$Fqg<DޯppNi`բ㾨һ/ӖRȼBWڂ9M;t$1*""fnMqa؂Q0+KuTJBD`aHK"Gƍd 9[#!MAbbk:3t^L`a@DfX)p'̓hW+"'Ag4w`鵿@  ܠ +;mpՇϚ 4q< >G4ahS3nҭ"S “`xJy+ 3~&gV8:GZ[:w5?;5P5Ϟ])jƶ!h5r='Sj`mDI]:ɛ ǷgϪ P)VNa8ֳܕA]w ] Db[8$0 [n*w;hV$Ġq4LK@"xMGCJY12XG4(7%-o LMSګX8xgpsme8@vQ^řw5GbuQ%]l@QPsm6M wNT#0{h;<7P.~T`.٦o熛ƺ`7VX8>K>+XTlq@Schkp7sݫKanyV^@*4.=X|3cT'Ӿkhޘչn\"Ԟ y+Km*zv:DBCwdh7^A' Yb]eA;gV@>hD{9z$֐MAI]uuVAJk5tF/J::k&3o*1;-x~5k 0FG :Xo%6T`{m {+eP Wfw}#^,D /B~4ďn!3hrDC5]AL%ϸP)7FMsHKlv  ZŔ#S{$or+96PUtIhx=pi˸TTGbpmݚ{}v\=#J˹ 2~c RWS9ݡsű,@O[>S] -S`nkb 2ҭN6Z!aj _n9Y9_%o/]Lr8o-+p h#0h٣ |ٝb~!}tϽfGLkⶌ-H?|{vK:HU&B ^⢪eZ=^ԎkOhԱU8bj*<r45cE!WmwJg" :%ʼ#e6j3Txvc[ϭT|q9MKxɘvY*΍NFkP//MDTK{k7<9y$^}Kg3c'tB<$\H [NDttY[Ѿlu Q&/. }t?5C\DcT{1%jSXe?|2 )]!o 1iLv35hIth;KE4_(4Ԗ/F9i44p o$ MzghO^  ]$|p ?n Agu/QMp; p}Ntv- ~-6_ao`!a=JՃĆ>ꗟnD%t8z;KwѼ͵,>ի/A#y!;WǝK7:HPKRPY(T@setuptools/command/install.pyX[۸~`=gmz&- ĀM neHѢ?PDI92#39LC|0IrG޵5w1q F4ԯ $+)FRK+Pg]7ӂɌ;F_!Ki^!+g|8!.Y(Qɪc@βؒw!viQ[S"T`C@wyxߗ2*啰1.(d>xS' nؓ9эSȇ=@`e˖Fto0:\g/ g:"E3a4uic*g,--ƀ#oNRi2wКLbe&V#0ji|~禯8P͠뤅@&6 ĝ:^BZS-VN "/k\3GA(xG7afX0e܅hh З,)~jЯ_ D&ީ 7Q|'bW/8 (\xCg88uj5P~7F:<,Lq%n.7uPϋ [ێh4~!8>q4Qh*!${(O ܰ3=HD&ۮuU$* ,Je^8O>{s9f0G,%?uRj3C$iHT ׮<^P z{ dXd\WqSԓe8ܵHt œ]rl\ A{|֓z~2e!q]߾FDťBauV1b]BOB[r$O?+p{tClKD>co)$Ց)^#"ISHSz{odq`E!hHw0vb#ԥ>xp0 v& ^x~ x4 櫜"r?)W]џۜE҄*_ոqb1Lni2`ɚ6wAK\RbQ. a{ _!x ;Ј)رҶԭ+}YV#'x)w >!`ǞTAS Hv~`weT辭 cs5 !=%prѳH`vu]guOvaK!GՍ=D=Uc|A=ub`TZ˜SHB98YzHX*E ANBr; Bq#]l$?tf̉:,UAIPar~EH=0>KYN-yzQjC#NJzޔmm:nz4Qcߤ.:ѕ-_?j>>~PKRPYbJG%!setuptools/command/install_lib.pyWo8~篰URғ.>][]D6ҿflvӻ=|3jRug;͊U*r%M kʌO7Ie*%xժJ%R6ry^GWqcǭ{x|ߡ2 0y* Q'!IRP 7b.!𻺺W28Ζ VZЃ!V^%m(TkoJug\'䚨5X<>3P ]P\K XMt'3D=D?|UUgGB@||V&ThoFt+)aȑ0HOˤH ƽîbTf꼫eŠ/]؄G):h"wB4?Y5[CIKdt٤Y0JA MK/rR.!ZZ>< >fhU]Q <|W᫉6τckN Ȏqe%4hNeHY!w`l6x @62Rt? _H'0X.ӎ=R;n'%H2eX>ږj{>fin;8wi 2⾆Tq%o ݲap,ш};"dQ[P%T4lcK1}:ktB&W>s&ioY nnI Z*[5±5JĬ#2Cx6Z,QRXW.״' ؤOܰ&߾a+1Tؑn벃->6526}9}nFT_w'B9AhMD°cj|k=d|| g`Tt,$F8dݫ~F1arB)mw>S 9P+KU)iy+{Ph3z>-1ՙEifPku"4kse9ǝbw9p( lI0&r/jit)zw$=S.޼4J%&  cj9l ,V[ /ocg,v]4}#|6Cܾ roG6s3sn 鰲 g9u?kx#kqpdU$b[_}`&'TqgIԌLJW(/!YBZ":3!iQvh__< ꐟ3o[+g7бVmJ(G$Y @3]vˆMNۖŲra02ق$0֫1x4dX%2%AWs]DY|$kwԘ8k)~=z_PKRPYFNT 6 %setuptools/command/install_scripts.pyVMo6WL,,oSP`-衇 hid+I%u}g(QIA3o|u)1Pؠvt۲rPxi:XwMB!< 6 MEm^Fh:kAyN'EEQ+ Vʂވ(!wbg.Kؿ|;xN]S7x{l[j5qog R?A5*]->Whqg^%Q˺o(ѷ3j3☑)MWyRq˺ܪCQ=~H}9DJi]R_oi:\9!V1S*ުtqt$gȓ[@MpAc_B3jUښ@TM!x-}=X:fy|?^6۽Nfgfh^6>*AЇr ڔm΍ٍc\r%ցrgnY竒+b;ByyAՠ+wQT ̺YT1䶯 PTYia1FK*mmy2 m^lŔs6P_ 1#frт,LjڜO{|ō1Li5…<0\/|wԩ?'f6L8qx.PkeBPf{0B܅*iuqja,_+( 1Ҫt8ns;1Sr#1GPKRPY])B7t(setuptools/command/launcher manifest.xmlOK11 !]kAJ҃B1;gɮooRR*&\ޛK g[AL8 ]%wPA.E覤V`% zu۩$;FYt ^׾ڢt菈j+ 8GTh1RM9Qpyk: }U_ڍoy= +`iV2DPFZLFQGC&pg`m4xyDV1PPw'r)j R%/ἽogJ<(CV(.t2q"<%Co{D8ҥ`>p{.cwBRKm7E&"yIJc5k/9i 6,"\Ar8DLrȕ\B΍9MG"?G$eݒeT.Z>C)辂q3iPּ)XKy[(o-S23G "QH)*x ')4E M~X6;Dާ7&f s%Oz${qjr}QmG^ÿ=]t׍/PKRPY^Fsetuptools/command/saveopts.pyeMj0 >.&4(),%x ;XRzʞ$^m 3IyI!8Tg$y 1јFũcEB('pC{i7ЛՃ `V*׆Tچ34(/CUA B>Mn3o82RbRwK.ƻX+QjրZla+}@9h|ӖQQ3lAJ5J/ ? wzh)u;d3jTendfj- d^~c,up2sH;{x7uCٍw~]CySPKRPYlVo msetuptools/command/sdist.pyX{oߟb+# J]}%0؅"W]]wfv/Q٭Ve6ZdZixU)˭TrUYbK O "'iJ&0\Vef)[( ilx~kiP ~Ȳۻw7?_߼Y"'8Z4WsnrDgvY!)mSnuɖ‹ xyą?e%W >쭬 ˒me) kBhГ4`Q~45UT1wZ52265y6EV"W(uZ*^I/ 1zS{}$疡 p{Yijt(8i1jЙ)uo[L=pkќݨJ?!'\PDBYL[QsQ2!%k ?ѣŠCG/FfH fZ-rZ@3{6:'AM2똞 , ˱NX' UȬbucI)x5@L>]7)+qQ3f`{Qu.rM7ZCS"|.>GƺCO0g}^ cL= e!zgiW'$;I``r( ˯N7W? )Rm,}}(Ͻ3H :@rF/bhމ7/DLMN7UlD3q$vLV[%-Y~(@ gQ|c>Ky] `LZsO@ˌ pjM>KF"ȱ bo?~.]SA0i_ABFnl-`{t^ГI4(~B癛*K"”O]q%?'H⾕88@NLtH Qb@!!txvVR2nr;vq S?Vѷ~埾$/uAa58=U(4A߫=VBЭi_WE@nsH/ুI#åx(-t 88pF - D/{9 dʡO$3JU,?BF] `C*G$`~4˓}eHq(zV'% y |d3{@EHVg-ɹ%x\ Um q/Ƨp'69zЖFL pJ*NڂͥuUHOaWFdxmM3: pda89Z3?;Ů Mn:|4nHюˆG" QXy`-Ps1yZPUd3 B DAD^7T;MT'sp3}~:%5̫Ajtʂvt:KWcnlqG3_ɯ{N}0Gp [03vm~xR@o0`^C>[W6\[^TwK.][ݬ^߯ W~nn(TE2zub$ƉqJ܍crZǯح=yh)=D8$G>#PAE3C Տ^h6gÈv@(.oЮ) =͸;4Ɔ>ܿ]5ek! r2~UG\FK*4orboJS?F 3>de]#gNNIjvמțCCC6C(Է C\'wu`u%rjS&\vy PKRPYUsetuptools/command/setopt.pyWK6W[Ao.HҞ@`!eEo )N> 9C~jH!Z*+nZ*)N$ˈz'N'ڔnox!JɋKFKg_VZj:Z&+RAཛh>TN |b[W<ByNslL+^xMbV.7s8>SW`&~\V%|MjQ:JW~Q:A,Dɡ{Lnz_in#^ud8ƲId# v8^ -Nl8Oo3_|8Nl+mT}( şcH,F{/܂B&~ $ѷ7w\"r\1{+hluzp1B6gK\V ҡ\'Z+6&P#fD/)* ›KFvfgsf@QyF) Yۑ'4|aVEcQLk0Q#'FJVlgM%#VuG$p!jpbk#m@T9L=8E4m4g`(9Y!>BB) I( 2/Gz~ǿq2Jfhb( }whiӫ7Q u̕R$}`N鑼̷Z姫o)2פ"WտPKRPYHOex?setuptools/command/test.pyTM0W !6dݴ%Bi{tbQY2iwd;GPA"ͼy)ʻZ=5s>e* cV^_W[mwSt;M8eY]4dYA[@~72ݼ<8Ja.:;nEF%.ws2'|A^ni[og?BxY'7*4DCp1aFxݣ. C$xB7Kš JC$r孯]K,z#ݴNFf-?,VSdϒHaKw }&C^^A_إf0#χ]]%3;h-~ zH Iӑ]CꠅѿUAhTyzf|WG4WL ݎǿ$m~'&$WyPKRPYsetuptools/compat/__init__.pyPKRPY_=Fksetuptools/compat/py310.py]A @1 m!Ȱ  D ku ;sTeƀ[ZV޽RuRf8|@'ΡQRO8ac@1 ީIJ_i5Cf9o[m\ ZZ -ɿ\Yq/PKRPYnsetuptools/compat/py312.pyeoK@ SFak*l&Ȝ`l[ms͝P:͛<$-5 tֵ(Pk!ךlniǝ'܋BiIptl7WY}\iH$%3[APTb Jq_T\8>^5񇲕{ jb3xŘCz6`gޮv/ۧ ض[KE`xZYODKoOV!8_I5y?^KPKRPY]|>setuptools/compat/py39.py]MO@@䀚`b~$j<ҥLeg;K%Osyޏe>InBBi9)xO:Oll)0˥kHPlN<:tP)בťɋ5T /d 5XBO+ϳw q0cC e`1Bw˦FOܠd T4=4 4zPkp`G\{c6Hq7`PɥȴV=f|&nmrs~CdJ f#NZZoPKRPYw3setuptools/config/NOTICEeOk0 As -nqQ?-ݧҴ;l>X~z>L#; Gl`aX16$.X̑OT=Yʓ E ILR8ۘCznFl.sfvI%3Y)q6JdVU?Ѡ=ɻ##үAvm^nӔڦ9 pa>j~jK.kauŎwK_2^&os ]i"npV6z["nXԗ,3][=}$GQ8mcPKRPYAQsetuptools/config/__init__.pyTMo0W¡*dъS"*J@pLx58vdODqt+%y>LGկp*vT!Y eMEmTZʚZ5xRMQDqGQNv#8;鎆Nf  ~.Jxy=4 _|a%{?&l@ϢhvGP$yU'| wW)\9)Fk7*&sc&Gpԡ] CULa+ [EVPݗO{`Pcq9'xl:gbEV[!ύh1dֿJvEY1 ʤ)F0؞Ea8O[+{2 q)w!;Uxǡ+ FBg0$IIpw,oh`HB iHW^QJˬ'2?uND*hOzn WhS?fVhoA;Lj:6dgErB݁I&c㸢ؾRs{%2)Kx΅ĽT+'Q3-*丞T[,+>Ywxؙ9߇;tm3'K`E0pGIPKRPYE-B a<)setuptools/config/_apply_pyprojecttoml.py;koHr+82$hr>[L2cf"P4ٲ9Hl+>ԣ_|g`Vwuuuy޼*Ee)d,e.mY|q-"_"Qz"DVuh) 6Dq˪`0?hÉbS$25G(D<ɲez8 SkG~\W4AcV:0 V+s.6j5%WL, >1;p6pOgϳ8$JYI&y]KQ>x7b#pw CnEY_&)Tˊ{ C,*^,7Q2JdY{^9K IwymTidKJsTaLXM1((yoZe? |T0o׳gF,ߏye]&G"390E-mT?huy ( E7rSdI9f8e^jZ)ЙQ׭ h6_W䅧&'{-4封`Sa,]gv1!4 ؎i O81>3x-t ].6lIƋ3jߖc˜}MIk&dT AV,Яټ=H `6Ji: n_~"[$c*x Rn(7)zgԲmU$<ś &J"0LJC:CvFfhBؒz.=T>xu^l˟}@ 2 pII }FGq^͡m>wtå |v9dMMWCvǤx:C͕Um&_I/vd⚃ pkɔ#7Lxć#Ժf)uZ&;a"Wh9Eˁ֮4Pa9ǃ_C<#09LP & [@lW"((E%G5XM" %02ktDTSvYe֖/[l:AåX α#`ѤFv/kԙ7(.cbݗ~ȐIQb3H㘧T xmCc(\|"$ JReu JOx\3׷k+PBDoF=RZr鈫]YۧRoBkI}[Yl4=LB40q$Ӝè')$TLS ,+XL#OI53iMyKC<^lDD!_uК66v(GNq5_ސ; fLsvy F&@tTahIe2~dF讋3 ﴯ͸?ڋ~ŏ5#ump[Y-Bweo^(5%5QӷqZ}#(e50Vx6J@)Z>)d}V.C[v\d`:0>\PF;yѯ% 82:Hz$60[=98G6&"e?{HJ@飹XvDhHQy_eB73|_'eY?9y|gĝnIpy˗XdnN#u"]}%:mVB@GscF=s{=(XbEqRa^P!`. 4LA胚}9=H]uIml?迵nM>"c m l!GHP a*0u7eKFD >ZK_4Ź4aU\4ӡY4ݗnlFy#Bhua``b{"rIbM[_mv3ia nau ҕRL>Tx9ƕUk#@foτ'hnohI,ДFtoGUrxӿT+ֆ*[ƠN7)i kQPzU!Xhﻊ}H :@Z?P9XA+@P}y[ݧ6gb/%\Wxҡl^2m!odKԻ[ F˳"JTmiuHcN/(XSq!r-g3\xþ:v5#l7kEXGuxam8W]Da*EaYe&c5?D4`C^)l L?J6ݤYDjUl%$E5^рZ&U.v9a mM_mU(ni{Dž@@vHEQAk >c%eILar\\-Ԧ˕U{o԰VB ~k#*62XkKQ2ܹiӑ#cJ_WTO$]%r\ׂ7jF8KÚ.U@ *Yr4S֎)7%VQg2+; <!S=)dfU~ 9gƍfKj,ھPKRPYP'setuptools/config/distutils.schema.jsonSQk0~ϯ8G?Iy`IzWu3U]'F7(fW.: R(*}^Rb5b_[q^vJg)`XCR 0Dر}GKVVG;I5b;3^6=tOiDhLDV)ez$N-`g1?oq_E{8FI!e)J;yzhR E?s4ZiCƼn9/509M%5m[| %6%طm6}!㽍.^ 2w x܅mD! @. DVjVI-t/ 7ͮo+%m9][ |%$X" v;'3J$5?X;a]\\ǿ}^\,t4{*߃6)EQ4l7C'LTc@̘Wh5x?h+3+c(Wa^zȋ۪@Hƿ@>gjGW`ߚ ^U4(U ͋;iaQfo]i!U[v c~DP~;-4͐9Zɉ;Ig RȈfk6f0`Ħi>{eT1+)ysCA3'«ty 2tGCe%"PufJ*07}%'6`G-i^U%͆$xбBZo%HɲII8rn6v"cz3+[,V?9#YЊt΂9\/FwkՁG%ci^O3'ft9pV84hۨz'%V*U;O83k KA5RhUh턅 +j>'h>;GJخ-oRg.]`PFg*I&{^ */d }51'6@$.\IJDFL0( /* ]p)Sxq.snNKv#s~k1M2.B:G_naIn2^rl,0Eo|U44Sŷ3zpyz"/]T7l޶ŭl #ff,[40ȷN eU KS@h*9fVw"zCȎfU:$}1v3޼jÁ:Am" /i+]m 3gd2 c;IJ xt <3=GĀIwb"@±%LX䏭N:}18= ; LNx e. v]smsuŧ8c -H>n,Zjhx]ԓ &cۿÐ#"2 cy>)Ӡ5Ȅe4+ˢ3$ɜvj޳_NBL#jZ{O\aF@S5oj~wG3%I2.Ŧnh~mc57g*&[#iUx?jV\쑱pf {5vW_ۡ'c~+ÑgW=R<ҎA2Gۯx R~mk2KhK`T 8E}6&,q (Oi@< P<q.ݧ0)"E;{;/b|v` \3HȠ\Mw^ 8诞aj~?t4 ڒZ54O{AF1@݁]l<֨?ҔG<-]؇ːծ%zv/!Bw>bumQQ|,;|sO;T"9'/LA\&Kvǻ!_L%^X44;F_C 4_'n-1 8e<{<*n%t3R1^#h ec Y64W#;IDBֵJ)&ɳд.bx"_Yg,F5GC⥓)PաY;vS\tαĞ(xJ XKC4Q)s%FHR\ P.(3 )ˊ4P+;ptA9@r<.Cȶ6ӥ;C," TE=n!U¸ɣ젘?^i~c67Ku25.w@e2k I~, W+!c ]-o" ] L0r&˹}ހ'膗mFt[ 14/Ax#‚|US2z{s0F( p4qoq\CJ+uۇ QbNc󅸁HN Q=ko>#&tMJ-buiS1:튜Ƨꨛ^7]\/1L‹xa xa"cׅoV`f)Qr؛wV+ !<_aiICL|>X }A<@jqPB#o\zr `=QvR{ _/7i(Lrxmyj8)[!^y#f7_&׉~ʑF"!B7%8c/]!t@;+D޵[`uWLӔe.ٟ@ D?DL0 S5 , [|NQϞ-9{%2OZOQ8 ܣҝC Qzs'qm3FzQMeZwk # u3ɞ{N7ͼ׾$ٗe})D[N&^jtv^>ढ़j@z 'PKRPY EF"setuptools/config/pyprojecttoml.py\_s8ק0K$fMU\vI%LMy\EA7I*u7LTScF@(Tg[o.[ծEuv>96ϻzvEd6{㧋_^_?˗+oٮ.긨mvY]GrYC`C ˶Y-rf^o&}Wj9/S]״W"+~5OfД92QYŲY'˺=)m!NyݞyٰzBBєg^'<#AzӔصXVUuGng3onpg w0 d)d]_JԲL+R 7o.EM=NW7yoy :.؛,M}`c5$I D~Gq!ja~<' vQfe}CFGtLT@tlWF5}U[,_,`T~t_>[Ň /ZTc|o/Ռ pq0\Ъel;$mv[.M1h `g$D4lw"ۦh1UJgZ%ǿU,XI^72,hG~FT{P'8x,ˊYqN7 S,M9QOpO'[e:$<"y/w_>ggQ͉hyY׉8$ HAmm}Wᄣ vqhHne@ Y_v g`j=g?Һ[C2d!0q`\+VTZ"ǁHȩ7 (ʝ[m8d..-{jn axv7qEjB70#+`ɴ_=, 숗[vEtGԷ\l$GWd7Mh\o!e;f4UA!&&XQh913ƻ>^=PW\,b*Q @ym(_|BtS*J#k$TNA3# "S'"ܙ"EE0T1nm,Պ@B*Kji5Ɛw*oq~\$aL=G-LHGU\(n|#l0u@8M¶i` gXn{ ,@Bwy2bȎr,atd()r P[_f\ȫp 9Ke:j2wEY4rXL3_EGO0a{ ,H#PAxа4ij$ YQ-EzJDIj`&Sk};dSQǨAH ssz%٦ſbuGdp1b˛2~l[8$R#f-Kx4Ds#5ӉYZnlȾ# m/v2ֶa8%}$U>@#B/آV %6̻;\8*] Y^~;uDK nѦje0^"uzC֖" DXKެl-;9QfgCXۓџEW;1%^h!IU#:YWHNqcY쩀5@>~; pFt]TPbS]btwA{⃼@YFu Zja Œ4e2*t(TK8vGڢrx#Ef,LB%0u3Wq \%Wr_{9p W!?ք!^ *46e'_w0vMrۺKGPf 6u.j&2.ɒ9hRtLz+' EyzB&Jv5㣡jDICJ YY$ d '.Vж!x޻^T8~Y`ӜG#3W((dfh! SRMdU,$s*_RaVR|Բx~@[i -ukV9xn%B51 Tk=hjwOGKr-l%z/u\=~OৰNU9WeY 8Ɍ 5+:M64HUTu-yk[W)i/K;^|g)NanIـC׫렫-CZ~\(:#CftSB]g -X^\:.0daqc}ho[ S֎@LȪH/dszu>v ~i|qi7Wq4ƊDhv f1B{3W:2UNK=c)7:6̓kʆq+DP$X!1Co V\ܫA0͉ǭ@IΜ(G zf#p}Ȏ6<´c aRoOtEcL|OyՉ㲩kwm.f/.Ֆ7*/\dYhdz0e-?l ϔU}Qv^36ݔm[8 Pdk-j 6 s >zTi8ɪ@#N6MIH{:yt~gie~_{8/vwtߌԦNmL4Qʂ*IxaTp%SXyr}1Jm8-!RIs|eTYv[[AVۭKk|ݒy~]V`-[{N7R֨Iooci{yTo i*kYL7 f~?{k ?`ۿ+/y ~U4 }|ڪ%xpc.=<޲"6¿Wt2e< 4 xJQ״֖N|¾o^vxL1yԤ cBŦSA2,QQϬˎ-="$dQG1 9adžЕ$~=(3Uq%h>`M)džHD԰#G1=`EK3Bs74^ƒ . czOSy `1# ]5L,rxn8|Ь<Ӑ% =$V O0|An~M:PUѐrт[`Ϩ&SM#q4¿F}:+OHRghcg<:+5 6*nȥ!Ww(5IrA({ ݞt.FFSP7Ͼ ii\[_uӡ] %\"tI{ntZZccfEb';O"QzMYt%yw2gNثYor7x0)ciϛx㙂}['$C֌`Q| 19x~PoRuLSOBl>$)`$ZUdKU>h2nf&O.7iە" '>pX67+!Db5#^(; K?}SQPt숑,-;Lݤ;וlKTƧ4MG7X 0g&5j0C)ܓ,yָPf?YaK?=d˼y_t)҂6DǶES|חQ=gWO]HX:;.0|0!Fv鍣9?B781F՞;0_J{ԹQpک<ƁTo-A+Zv[Xא/xH#sE/:<+>jYu[w(2b`@ahn3u_u<c^ ل!!k>)#'kmҰ-u,ݰ=u %{*zof]~PV'b_rgė-BV_9]*?YS-9wv˜9-F/U\InsA<sK3PKRPYX"dsetuptools/config/setupcfg.py=ksF+&t8qfĕ8vJR) _?f3E3==<G?q*jٴ,Z$e.*n܊Պr,u8=}z\\HS)vUv7Rdh6RۦӧY)* 2iV6q7 TVrZ]Yml#=P6MϞ,,gj3l)+Qg].E"}ي$.DץhDU'ߏnfC72߉r T`YVh E,FEQ6Dz4R`~#o2P7XfUvV^=L<[lYpqL67n6xg{kZkF'y~Ct?H)c iR6Eip0+ltAʼl{!AG˴!&j\ .iTžz m9eQe#V7Oh!Y$?!/kY qš) e LLB9R JTn,)SiȢ`נHJ{h߹u#Ne\%FwVR K06)2w&PZ!`Ս4q ?{`(hw@f yJ^3BL\) ї0ܺ6z*2`O]4;<3e4?fnQ0u% J4(|FgJs|K1E,x R2y| WEd#tTi;MUprt`1_ޔ؆yeA`"zbM> ,t2TydqLtd!rL-0Q Q3g!@j~}ԹFPU`h@ȗ8˞diSDGǴ-QDWBFO7 ,6o  G5$|k̵^v Q)#3|% yh"E/=:aC ϵD VFn{02 ^t1VHMCNأ]sb9 aJzATB !H$ox(%&ni&)Ɣ4t"oU'8>Z e,L~MDžNH}ZyI^ώ! t}I(1޹VZ*dMJ#(oIQ20+Y/!o$?BP90m,52'⬊:G1&3*sgujP'뇕:q [`u%iFUq0e=Ɇ|z hH>"_XLEmp*(VDT'bo/Xe.Q̦7trJj5ގ!!I#r)0>VFp6a{BWYA_-.W _dc.ZLfn25%+,.Z ¼F"Pٚ8O11>0UNQ7hs"kfes"kTjg`" 8@3hTFagSᲭ=G1ri!юaw<~pR`oBhl*d©]1(ǜ?,@/u0/,&HnRsL:@mI Zݢ= w0D[-jzsg ]Kp6hK0%BxX~/f-d+yyCg_6LL>UmV߽'G 8Mf'yG~t\WR`.(P}`C X_j. (d>^ X䶄Jn@lK~Q1&0Gq<;Q-\FcH%4LjGWebFo^(g U#8A8{f0 No44I n«LđN+Xji z0O+o@W qIxmg*)+$V2ȝZ]++v08L-VSݔŤ=X!>B% WNocrpP?|}V)⻓=ͷYW36MOց",)v8,̶F]qyPz[QаZ%N`ļ8V¡vs[uA@UW8xb*P*7O{AA9χiʶL[l]҃RHgzy N8HM&w$ڈS*00'6>oĢRks:Nʊ;lfV}OܔՕk5\- Q:" !ߝGsyB>ܞ{lNM./rӾ7W+A?=)}  -Yx5&jWj`A잉 X;N=KS-fG7ۘ 3ʭ?H%"ve*e'0A߁Ym%9'r}zjکKI&u7LZ6ѮTp _HZwZz8pզgΟbHo~%HԁC0)3-D/n}eljd=5)>zhYw[^ߠt,=Eʤp͐nƙ8}.&r+A0/d.&mO:]v  HR;=_=lD57 ~FJR~d+ W1upM+>U v?굢Qɲ2/T"nboo݋a6M $%Xf-,ܤі(BZbp_Y(Y`(u14/Xrt+k7۽Ppl ?QN?b_lSH}x_.4k!i>76#-[t a &%"|ZN EѱT?,͖p'Q:So s UX֚ T[,RX|-L@Ox~/'G_3O62zVOtJܼdM`U7ѕ a{vsX,9/zѮ՟a`}sC~ڄA?Sl 2=u ,8Ul׾K֌x8 3!ˇa;)=b9ks< F擮<\VTH*U`|!X~e\ċ-G& \d}<ҮTC'u5=§ ѫЀtw]tal-;zgGO4| ՛@pd袗! COZ:t+rOV7=gzPnD2}HN|DϒN5Q'Ud_U9kr>(`ȥ 77P7]Qs \ s W~oR y{@3p.hЛl-?wz{(ꤗ#fOZ-Px#G{`i^>\ -=H(=CsqQY"fx3^U5 Xo4e%\T|C>(setuptools/config/setuptools.schema.jsonks~ Q,A:iLJci,9GH^ ww/IVTIno߯[~c\KބYLtWl&l`!vE*~ej~8ޑ{zZEI(2,&xȸ <k$"`KʣRԂi@Xkzข#n7<*cYt omANbI\BB-ߦW&@)2u5fHnW`Ó A%4Ǧ OyLI]{Vm.ukȲF=^ň p1ID2~goRe 8P">a: $"*WT@,WVTEplɢzƷz3AX4 YO F|kEKXt<$l^J0' E&s#Z )kg(`VR!z8bIFM>~{~x0Pp@^rqhzCx$.9`pNdXtA&>dbA<<>{s|txqr00-#UA)IUk^ v $s(j  Y pk 7Bu貱I  ~ˀfojXr1Y$AgWN%'Go~lP"Ld)A4*頣e1E2Xkz TژBtaNz"xA;;rs0_^<0+ :Շ`2 ]F+{Sx+`G%{֛: ~F^9s D"XG)X4pF $oc`,q%6ozKNJ?7B1!Oqs&*xi9Cz~6$=^`%y4}Nbh*,(`'3Ň$:h'1wkzI=SN?>b$vq6?DI߿{'525JxVhb1@vh WSPwt0zjBU7v˥/3VeȮf}"SWT5:ZTII"d#IUumHDS97z\OR&<,rn)ہǮgcF^24^=8ѝUH^tꄭ5)JIRlh*x-m57<UeٻVJ8GTٛ"XfUK |(^_@fw]P wo+c+wqlН (kx^oG~EWGՍ  /"$3P&^Ǒy Z3:)OJAS]Bk ְ?CaR7Ig7#1 {sK,0!h2y7"?(J>F|{bD?#׾ݵA],+x}AK]# / m[0(@Ŧ6mC(ezV>Ū}D+zgoN<9?9}} \Į,*,r#*ihuyұH55f/$u/Ctzק>u!THK3|_$H;suAC0iGo]kkV+v(c c0#qr8ju^2Q 3}hs7NQ8iT; A &Fsӥu0܍p$)~3Ԗo_|b:j? u@+aJl~ fr&D 2绺Dgۺ6]]P|( v*N<0 xmu1XzRֽmK5nBda߃|2}XUV]4m>..N{ Tgᬏ="e;0P7=vrF}[@3H|B3أS75LnWypR[V1)4tƗUcz`yS3YޫywU+tJ-opqysYVu0)@`x<˛IM-Z|5ا|ui ]7K:]K4$8q=xT"2ו#ԃבwRD[«U\V[jlxfɶo/yT].nep*٦hH 8fLpUFU>H/#%a+PP<% _O3w @iu+I2#vѵڋ>Oa);~oҬzrRSZN^^:-;mm;7RFKn4Vҷo\U?@kCw\_EM>%$sۗ/iLZnB݊D\zW7jziMxZݭ!GsĊ>/!Hw+FW3>O%!,To`/8( ^0g˃˶\׊nV-nZrlWR[w MYp?hG wU9 af)2Vd}oﳏtxgOû7qe-Drm^wji]6|rAC(͔0V]]~kf[]|DR֠+͎!&69w_PKRPYLY1I,setuptools/config/_validate_pyproject/NOTICE\sF_1媫)dujhY%K:OHn~5)ۇ,Ebzz= /Fe)jm )[zkleҺQ;ڦ:jc Sn-6eWZv^F ?۲P;s/þ*}e{uzZ6Oa8S7,swrXb >o6p]-|:=}0*S ~tkvzCxht {f*b 5(h4\6*Յ̾jekSe\WBu KiX>XntQ+ w:Nնf5%UT㏣hU:04o2uUT7+*5Jȸщ-M?<|]ٵe9[nc]e~1RkSoM4",.OO/r8C:ȶ̟|=c#>#g[]io#\ sUUV_X aTz۫WayEG,-ys=J]'}~.lfъ8k̊;Ȟج]*֪(kd *`%Om?GE }ի^,WEi+zKT&- Fʮdx#°)߬l!rD=jк!Ɖtdٛjgk)T=@awhY!G5A*U`&ZDY8 \۝&CN<pPrLLUsVV@x #eˆ}:ѵ)@fj o}̦D{D#06"o V,03po VFPv~Du{q{2FUlB y4)|{wq~9To>|7~\]jz} ^/o7ŋVFjۻbnbr>[$j~}qu9~( ojaǖ7 m*F2uV}]?oWgb|y{ͦvz__MbXj:0}]/j{of wS^fKym8$}(Lui֘0͋_0Ѕx!Nn!eB ?֝;amNBfOC.ߡ¶g=ar ϊ׆! p@9},9@=wmQXV_Q#M_ꕮ6'xGip '6 tȈuO ߣ'L`d01ѿGQ6ݧA:86ěNf2Xf cԶdb+gB0XA#+@{P9HYG'8Rc-\\u*=;K &.ZRP`D%>ur JSw9d0&u] w/8hGCvO8j#re =5%=t㘘c{ohmqVıX69V@`]'&H|/Ս%BLߝ %oyNTTXej4hmC'^n͡K*eY3 ؋2zG~~>`( _K~ʗ)ʣBG+qOcT !V|GoϽs"28ꉕq3sټPjOՋq{OwfRTBOCu0A#6o/vD(stON)ȑ<{ gyMQ؈,a`FVß1t_>* >ܱӨ7D e_/dt9Wm:ӣE*'1f#]YkaA'_NbP\ UV`` i:#w5sqMM,g@ !7LbШʃ2>eqjQ8"Eo 9 !6!@b'L(3;]}tX!!i[> :TFv@Cq\`hM7d ^p}^^K/ڨ 'mv7:i=iHage,P|H,N ?a`b&lR&CvhSðOnv%Bd%Kx(X/b cn."(̈́]քcKi(%Zz"':G!]r2HtE?MjWuc ~G An[iaV0 (g\5'Ho@.aJ',PLeJ:\̮̿kJv`)? Չc~mQK?n4kƜuDv E1qqtt8|:8yh;S&V${k P.΢4JrT5>*MIwrE7L !^Wmv{U9V䫨T%^4x`^S>G!ްygujL;dF1Q{~F靺N1;`X+iI_ZIHuPXx|ua$\~ע|,q <)MJ|u$vSƆA:Dɶ5l@ ҧֆ|=}t#`lvvw% \ۍGSeuo'} ID~be:_3h[mo#F=?D+W@:͍+ ܏ߞxn:5.:p{k91ckbYjhXSon}kg#" ڷV}W^ڠ\䇼7xnnV3IjcaJB}Jmo xa3_Ual4o:#xംH.ߌ1 O.sH_ߧey7'0",Ƴ/ɓ1* ]6v~E-vmuH19?H,ڥ/nɱ)#UmL2T%1D;*@?.QŃ)8B..F+L[R>pOtMW7xx嫑MYf]ṺaUB ]g5NoŽrpR TZ<1@:Нh-#`Nnf;&UBD\r^b/ՁF_lA q䷨"p*/׏qBA88 -s9)(Q%N=i?ҤAE> ȅb9a@~CvJ]*e~U %dmESm0c "C03(HHp=a)+X/PHUlMܧHQQzsz=[^r}*2Q3u+? ,@%P!EƸQZ]x Z;g” ;w֝kyܦ0#Yiz׬'$[, ss@5y6h NN8ayPV<`k݈z4ᛀ "ۓa'}.6 ] Q R@!V\`B־WuJ G#|cg8̂ӏ/cxOނ1doC7zl;ltN[m6F lgx6@w?6̉Qlhv+8q!A g>Sz)ĺ5턁Z>_4ma j;0MGnDf#@D< HB,.aq#MH.6I-- *PĚ^80xPR7SBAP /[ُqȄs|/k-[>,a|=s) Mho~"s~wܝ>uiDůDM,E^_Ҹʒ@nHuz| o'!S;z_nչzʸ+©.1da&RCuΗ`@0Ǝٙ 8@& }3\Lu`X4,˨R Oj~1^[]z!o=Snezw5K&Vrx["27`WBbAzS;/cJ RA)t \~Jhϲ8/w?Dy (ڟKLÒpsv]Hc]Pnw;06y\@ױ>(]X:&AQ!"QneM?;g0}nbweJBQ2:0}c5m?PKRPY> %.8setuptools/config/_validate_pyproject/error_reporting.py]s6]er2wssé3umUINQiJdmOowI\ ].<+J&PO_d$[.E4?3i nM"[YLĔ]x  EyZiiMq}6*өu"K.kx}Lah,Q6983N(Ҝ l^8YB4atIcOcˍ |Br$E~`_@?KP䩴yɂ@y"y'ًR`d%/Oi͏4^( d] ?Ϯ.NVkY)g?g ˋ,E96 Ԉ2o$k"x}E(K9dXT.j  DAX[%h_L⡱D*[F}Ra23ROKE74rCt4:&|KiFU^V >Ez'bn6l 8ఁ?,^n^$QF_l6$DO0p:^̲U.^k2~m2^4:ÏGmǟɫpP/'gd/|VxpõƲҸN\E /\]F?O?ў Jl]EVwS _&%7p ;(x<̳5O_' q.*Wd\%=<כ%쓂?EVx@w"Kbw Bbw7޿Ȓ$_EBu*.6!SL0EvASDwy8j)%$|Ey( =3- at2<^\0y/b(^0 \ӄ"ݾ {/Wqܮh%TYOm A,CàV^sjZWr]Fψ~yE ϠYw\,6lO#0qrGBf<Ng@U&֡EA 輨d~Gw"=מ2y V>JgJؠA8-'X#*ȴ3Ck 3SLi ?=/eC:M:}m)5i^飍Y86Nr}DۻEQ^S7A*ݬEO%:U4Û!77YB,͚uYC AH/hpBB+JHCW+ڵnM䲒=4cc:/_մ:VQWQ+&S`)a΢s :j*Y9+`TWEr.<DJG4U\uRс_N^1\i끑0;Xmц'kl𸵠,cP<}s.DpJ vXrS7ԯk4r"Is 8@3UC߹s/ವ7ݻ$D2⾇k^7(z3Muo-JFb.jú2F9w4<}VRJ@U`k0WvRCENCm:a{ᝌ> اӏðM~xxv4:;aO!{p4<2Lԁr} W`<PީCT_gzkޭNpZiNRN/xrpsi~%Ab(c\zA`8N%.YVS17ǐv{&846I;L)GגXIhDkhӃNvIB3T+$5J~ $0yv~ y0SAEJ] *9\ zhV~f }y'{!kgȘ93 ࠍ5$pgTlJAly\K+lUfw"fC,b1L Jfj]eVY\i;Ł(zCm,Nq2WMNXB+Sv#k"N;*!:5X\<]7 voЯom*bfNZ;o FW$}Ge7L(zSbsǹHVг">Ks[/~ 3u$6=|9Z~jqɤTY\=K/Vo::;/lLݭ(7#X+ B$gsQ ѺV$4j OV#TohPNAp{ٍHگζ}#)Vӆ4zUT%6E63:$l^,xʇ*̿图Jz/rJa0%?Kz38iRDQlQ͓c}Ej+IOy ZͨuL>㐒hP%ʀ:E ukk"w?OrT A{v]@U SW7ĵ3¾m$wJrsYU!#_SkJӦ( [VQm}m[+bG1T)"h+ {At..pdݽ**RWAEv&y/Q#m-t9%;2rދ+n}#J+ j; )kB QaPvNQNXLծEP Q44AH^l[;)h"QS:KLIj/NN Ny=g}FtCh  _9e ]*Wf 4vtxCPU$uBG- o(ovZi$*;y ݢUR_P;,+ . ?}𻎸 ljͲuްufT 0$6 !kvIjyV~F m8}ZTpWڨ&·-r~u{Ei D*mFd\p=vo-;v :Rf6͊UhDmjE#&tQF8M3:2[*?dTF;!=mJs%NYVSo=qz b]4AV#JTe!)uzlB 4"ni3iSA,+ؕX^GTqKqI5dǍ.I&+#zfoSW!ԫm70!X ݻwe?"tgti\k1v|D:y"Jb1@PKRPYsjY:setuptools/config/_validate_pyproject/extra_validations.pyTk0~_q/1dkE㖍R\>'dIr7S$i,D w݉1Lct n-jtHXrpy| ޿.EЪ&0w-F(K7ҁӀźN?8EƊHۍ (na˖nZ m[Iܶq1Ƣjr\:.]kZ wg 6A[MzE)KQŬwGQKN^aPtpd(y}*^|o})m8u%I¦P.i^:?3+}o= !dxF.jF*ޓXH@_ [zg`^7EX<$4uҫyv3?=9' ?pGPKRPYo^7LBsetuptools/config/_validate_pyproject/fastjsonschema_exceptions.pyTM0W {I ZV+Vb{!Xĥ[5d'NՊgمx<3YTq`h2~ \Hʢ&Zމj"qTZ`K}T}B~CUӍ1-&YXߢ%6 8C3 q Jn NIu$pBAi)vda3u ; 72eEII笶 kqK,3)CB^_4:+MqD@Z؛$QECpXJ :".GNYWEmZø8Xx7gBQ'*:S'6Wqc@€h1x2hQ=>/92N"ss7gVTCE t]lxeQyyk|S+z˶5HBNHq{"TM[Hؑpq.p!^]#iAx`|Ԓ4 >m_5^u0?[3t&:uG0hvyD43c{.A>L7(_\]?Fɇ'l9&ͺW((ʮ' u0+Kj=qr>; :{qr$z:z'lF:y2O`:L?ׯΓޓGG;]q4L8Ex6swwI2A*:Rcf>>5\gl9NN#hT  V݇%9\d!=K't2ŠK'S0yv})O| :eWQVdbL{l0hIVNف"JeM/;"}F~O@@^6pm`]$!.$<ռOw;ﳡQ@I#=K':%DJC>?b/i+l9˧8(#[aaZ " d&&>ظlW"g4:yD`Z,y:E8,OqD$1F!p4 x1]4)&DI~ch.8O# dm*bD]tT8!_T8ъ68 0"0mt2>&O'b84_d2b4Dz0@,A?Zv/pA~3FHpH|,0Ahs2*R1ؠl3G Uu8EbXf2X-νe Ӝ>ے3?P ! .a{z\&0YK$tVa3ޤh4M7. ;9ńR6/CQOg d ZICF{篟> =Crό,LDz13 )߻(upFhΓ!SӜI%/E` Q&3UpQf ~{,7_F*^#g<md` IU7ʣ%,!Ӽ`zb;xD@b1C[Ul?(:t,+1Eh\˚C $8{>_>.y Uq^F`:qb%X|J7'_ئBE>F;!8u4!Rd -KVWcN$;kJ, 误0~+p1e fDӜ,hݟUW錐͍q&0d1).6> ǽ4G8W^p)L}J2G >]ZE N:dd}C``FO]Kd3[` %OClJ-eS0(‡G*{båI\_|.7+w_ _Nu/~/"9nH ]6I~@L 9U {PO" qoF օҤM QEqp o'a|^c, hc }zLVM2X->゘<.oJuѽ)eyȷiAܘ-mN#fZR eY#/Y +yUҚ. M3wJcpOnu&˥B$,$ $7(av@H\L52BK?%@aAP |dSjGf#,c`&d(؟SL}d*>6eft@cs.o8q\o@) &. H|p0C@ ZZ0V&t j?M{4`Јo&c-Ys|<;&\2ڝ 2 GS@ͰJY2e5,hGTwo^2r x\_6f'&'gՀys;CncVΗX{O3>0֣͊QJDŽ&(3vG"91xykSh׋{w]͎KavQ )H8s]Bq~C4&Q1 7"&`Unꀎ㨛k9h<.Fiqx % X*S0j'Y1E F1s6Z}Kلq6ʱ#pZ8R ֖JX4+Yե*_}^{kr0.M*Q{_4_k䞏>.}0v8ekU/XkaHmFz(I,'82L n jh.νG$,rdjcALct:2d1&,Xue9)g%66>2,{eHvS`d <]1q4bm1!XH]vqįvFyA㮷%gֳ<ֿ=8Щ|`2biH4?c%EOy,$aߘ+nd 0Au B|O:c1sc!?Hd(zteTD( :'k=?P˷862*8s=t-: z(Z˴?f_^e J9w"6V4:?֑PeQ O OS/p1\;.Z7\S\Qbl:QK{HG Ix "mI;P"OOOZdQvL4 nTZq'Ijk4uJ;NC)5*0 Ӄd\flNٛtɍ ԙL&<1L/ߋtVӁgI/*P0sB|<ѐV*-1挪z8PA SLҌU9e3˲c'tPCsB2%lri/;FinύW m$N"m.|9r7M"Py+I0<Ž>*oe"Y@ ed3JүǏ/ؕ(f0hzBP[n4L t;!%#%We}%hwJ *ܝ<%,SH $X*(i٢;` ~Ʊڲ+&jhR PwD/ l`/[QD%_b.<>Afx /xZ!DNDf1(IAQ%F| &N2T?*[5(af4e)CaZ:hv:! (^αeg]mi͑"'?di쏲.ș LuN)z,YtvXW C&0IkP]7}.^?Xt?f|lY$2Hmp=$5f<]tGNb۴a>ߦ aXøsͺErJ~QNbBR:"mE͓ 9/NOϠp L2)iR,"$*eJ':pAkOޜ<;CӄԻEz=˵!Q2a' G,p].3`ʅ'sєrw0c6.8͆6/]&(xeiOFnvg߽9 vDcyÇ%R'b"pф< iQD3(Ri2xACy?cX)O |Iag]ɌVx#3_DIq t2N2Yr; i:LϿ?ΘGw2uc&\@6O&}Ti$0YŢ8OOr_j6fnwGهTIϦ͖5 Z†%Rr̷Nx pIGʄ_z3FiZ1O#Y5Q #kf%_[p s`Rŀ!(q3 2"D+Tp-e&J_,Ԣ5kJp׉ ]vifq(tĨo BiP[ 0zlb2 gevݔS;w CRV3^~H,ݗ-a8lbڭY}/ܧ`~e"?]36œHxe.włL|RC,'.1=2j(O}UQ»9f -V?]cN)iU?0B&Ce_k2)sJ1XGU.r(˅ylFuk2ӟOޞ ć캪MV^d7ͷꑶ2 " <u02L Gnynl$3gK>0Bg2~G yLo06DDv{<n$>q\|&x";"OB$w*f^;nPE!i!&`ۣɝ J[3Pf^Z,z:*\qJH+Ҕgzك]cR/C12.w~mUnZ C2]n1_dVsԴc3n]j%7E/%=d!΄ (3"3*3QhETE(ET^ۇN3&"Rbc܉\ǘUr$n"wW* Ypc.[j:=CNs >1ɁJrdh!ʧ(Ǎ+Zu9aFi c^,Za4r}zv'TySB0%8Fron`!r6Åc,wP#vܚ eZ_.3=L]Xݭ1m7rZ+U.YML${"a$ݫZHޚ]Z%2$zُ2;lϒuF|&h84HTE7n\4΃xbg^RM)Mbg^K̦ Y 0S&EGOZP;/Y o `dA2p+z|f ;P43 LC=P43 LC=P43 LC=P43 LC=P43 LC=PϴK*ꙆzigꙆz ig6G6ZPρOٰqT0inz[6._ ֧={o_6;{;dW%0 `F{W7COz }r =ZӞŮy9s y.??WdSKH$'6폳/ЫX~ԭRފ6BF'feT>J)kAC*WPufMYَ;+p2VZnuX=}}_»0\E'^'(Y=9Aa-[X߂4t(|Vz7[cL7Gu{aiG ղ:q4]{3!3n/[狝-{=n aG!V%KDW:;ߴс{oy:Hg7ʫZ luڨ9`۬4.{9wH i6Nm2S9)m\d%&ET#/ˁٮt^Ua?sjB{o#Z[jZk^iڠW4|z X_ȸWd(:5e:x7+wiۼ?ݎK=xԿ*R?Kǣnex=,lQPqF$_ILh9eNeu?YT_U0rOc*;: l# ?HbP+ lB6!'i^;<J%CPrx(9<Prx(9<J%CP2 JoCa󄇒CPrx(9<J%C'PPrx(9<JDPrx(9<J%CPrn %CP}x('n"UMO'jw2vTѐgF[ .׃*W`+dT %l\ ,sC>J=+Z״,GJOjV38Nl&-uG4.@ifs͛7.{^4oF~և)%LrzP^TL>mR Q[JNx0狦-o'V)>3_X4S5 XF_`?tc|Q RvR2U2Hy}|i^M",v2@疪k|Bjf"x;)Fj [YX. ?G Fْb4^OI[;d vx^g 4PWvyΚR&KĪ {9ƛIDȴgWL6cc7 pc 4pCJA8W^) Lk&ƣI01~a8Srg*]J(#X)j{^*H~RwC}8Ɂ֑R4z{~D뗓F!2V}J)$%7-̎&f<58PO"+} 4J .&AVϜ.$3j`g"ژFȷx]ūf"C*"67"O)]k2cf69*Wl|[hL0Ż<,.# d"*k AoG."{_ԚxDv$8HiѡF뚟B[X ;Ŝ]Mb2hʫ0l#PssR(oc ĕĿw} loĒ=sۧeBG(DE^,+Ig]hzny+^ӏifQ4*(s9hw*&8hU:ϰRIEuk^wo^T8%(z+oMr5`.2d{JsNׇ ɔ;3R8q/Kzǖ/^˻ӻJL{oS+LXp8GFw63W[PS 5ß_;E;(n2jIVEQPziޞM>ɘ;[G+ՐW[[Re|rھl<̧tǻ'\=}< Eע_;Kkbs *DHuA__eKzŤ_^$ gZX9Ә;]qX3~ GzY ^M"ª׋OLjVZE-_js'ba+EXLkՠ1q_M(Cd R·'Rk0az̒l)<{.:SiK6^e# w%jZ/O՚W4ضvO68PA S,8/.'+l&p˫$l(rRr!bukkQp `KQڨ[scC[7< Vͅ1Gt`~( 懂`~( 懂`~[CP0?CP0?CP0?vpZ+iyBP0?CP0?CP0?CP0?CP0?oiB|E}`~( q;+=nX`~]|ꙆzigꙆzigsV}:-59I=@f*@QlB>7dc?ǻ@/6T@H.6w7K,[[9F-Uzu: Oic@րE jQ}3LůӰLm~uwZ ۚ b7m-p]ƭ4oou B #W5oU0*jV^شDh QGB1;۶MZ1ie~1q[uZ&PIQ/g4gJ@Cwt)u$C1/%IUeuN+mÖ1KH/jZ?1}d9zRe0r[8fu)Ī J<#&_[+Q,4ط.B+!yh_@ʈD}}WT`۳`msl2'Ib^ܡ F+R2Ns;((C@UVgw0qLŸP%*/49i2bw;ၝNx`'\6µ{;0lu&Xɟ@k\ t*P\h .DijV͸H OkQka'p_ӷNy%uR9˖1[Wqp@ `TAsߜrɛWo3"_PO:!f^$݊YS6\͂#ComWL7Zf@8xbړHώ;?Tv6hڠiiW[+O~"i.&*{x եkm˭ Nm'0D8@@T"jTʘVR8钂USdQVdC-5¶m-E (KSkמvߞ5ؔ qrO,Ŀ27v.VZ{Mjne;f4ۤ45|FnrVp[|T!`nƮmXm\{.\Z,m>r{n{.꿻?-V.me6 o:V/7oC6>^q`psJQ'Fx6'cSDsafOz,6*mPިVq_[dmeo&z}!*ZV SU.2zl-T#"d$]cKD5 ulT ~a.:q .m;Z*;}a8Cvau:ⵋY!b -g̫BbK+׽ۭDi 0a h E I/g`PX ?W=-_:9`06OL~-rM`` ɹ 0mCoXiWƲU ]Xuk%٪=*!jȶpUs[DێO޳a w`:"n'mR\-Nr|E,,znqmG/~Xi ; TDZ|KBvdV׌Z!Zlm/>M[YȮ(~U}gy 6+v'`oJܾv>]0]g׺%|uaxBĶo}"s>h?<<3ݠ߭-1S@ k,y"l&ZH_rIUqu[0۶Hoq3]{]o#-@KZH`WֹyW!z]F`c鐩 1VI?5 :bWw#mEk YVu&] N^Ml V{ۉHrHvT3oìmϖS~2K,/Rv,."@lt(q^bf\XKC3;]*uVgLz V5.ӽQgWKJmd%9|'x!5!(W{s޵&Lga ٰrR|-!ˡ]7%䖯iKW|[ݘD /͹nKlFȚ\g4XiiBU;34JU72vs/8{r$0a/e#+*/\hÚ-g$)Ӝ"gV%HT,TN^,Ow<ɂk+Dִ,m=d8y\?S'| },eXMrt lb4 ںrhh L,U2<ɗ+V[|1g2"AwNX $^(|Xֽ%ʤ uw:[tN1B2^~XX\+Q n2n3̥]QdRk &Tٲ%>_S$j,%;`+Ȭ˔y[bثKv[2\%0&AlnYT2?Kmc+RN =0TAo&Jd2 czU*[$FDcQ Sir#1{i]J0j^K{  1ND>:5쿍 c] > 9RA#A &tI__>qsaʹӏ#g'g H.+s\fw뤎RW^Ǒvehm͓рȳh .3Y2C>U˖٬ƹxAPdu#oe p7 OGcʃpsS0Gq4M(S|8<ՎyCF|0{K>ywuB %Q I)'8EfsL7Zvv H"Ö ٮU}*g9ڡ8y,XTDHP|y \!cMxL h0MMqx|ȭy7Ӣ%S\oR}ʴJj! &H9VL'=AԮvtCF>^*-i*YDt@ĭP!vA/i68b*Y:@'јyG*xN=9?ƣ`DU\Π86x*zOsP\Wc,s6/eTI*^~SLY,ų@VXI٥ljrL>c>eGşWl aqi\ 3AR6琻2` F>g]uYW.*t5:\m ~09Kdh+bs(aXZ]uC|oOc1q83xj Ӄrw+\]yGtpЊޱ/NO%PԿ93Ve$g˾5{ɴ˄|Rx_[!l`~Pkw0\VfP2BIɅ`w~Z3^dWs1[reo~l(x4G3x4}\Ud3)Me) n}1uJ K> GP]=[ՖRT*Aqnj}4^ D=Xi )B b;Hml )0=Pöx_xp4t۪꾪%aZGѵ~=!=>dM҆cu.^).۝?lL^_ߘnY֨:k1bhXrڛ;ݿri؎WCq-nWCښWD`׏p s~L.qq֍LY1V$o_6zpf]fk VE*U^]_zmR(_Zwe ?7i!58{O3&^1c]Txɏb뫕mH椸J#dZ|v,֠1| .R\Ч/1ռOw&ĀvJx x|M՗㸋'kP_ :$,\FYG`_ԏDMZ&<:Mqg1އl6÷a4 "CPK&XW= rHsPZiqwKӁ`!$AC`z$YK2NY=Sϒti䃮n|RmC(Q$haa\10i,[?!]4p{9$ίFPT8el f@14)t 0D.޳30:Nctv˃K.|;ꑷ#/Kdm6d^Sܦ )"~+ caΑW6UoR;BnV5«[ /&Bȴ{lNWi(9>g" Ww4)}A"$*״=9yv|~dB:{Au2XFɒ%-ўz\' 0# sD\"Rg O*'Ndsq Im,L_?LP^$w.WJ|}ݛ_`Gu:IsPy @t'nr6?%R[AE`4JN4cm6 iexzg[VM\? lm'|1wkH3dF+ߙ/aɀk>401b4IS8 IA&u:( d\ &i٤| PVRVH 6JIR.|Il{ F,ʄ3ƝAk t&A?NĴ8Q~Q njf=Aki16b:(çI'!lVa S#œa>?"f*9<8/3$B%`V7BX cd#yFךpXt'An9ޯTX59,1j#0hW'">U8җ@đayО29Qkgy:` %{`w"fmTi^ k^"Crjh^AS[L gDZ9t43F:0]@h# yp;PhW2iO{̦ZaZ@Pnn\Q>~#cFnvL@bh\sVbGo ]tfB[\zo9s1`gݗ܉bh@o|L},g8d"_C[] ;~d3/|&x"|X 7rbC}m 3|:뎀G<}d*#26q#^"mZF-go^z( =]uN@xC1. 4oD%l9vJk,F#`/Nz{璘~~>;o^1{~Ĥ*:;9`@ T30V51 |Fp.\ B wtw[B mt h.=+Qp.pXtIҝK0l$jt0>!"q!"q!wg8`&Q7zDթQo93Ž9Sߜ?7j${njZUY(O)w߁8/<3+1 =}ġD|O6Q+IIY8<dOgŪJUC*:ڃXlԸ;(&Im~½~5OVd.&)UW|iK:kRLtY5g8^rm0ZsM|c2c`4,khGor 6HWn %^.Q=o "YPNËCs%-gXqcnx$֍zzZ+λ}^^;_et;W$rVw?x|G ~g#X(O7x <7#K*VYe8sݛqK˖e+͖dDsz+ݲK\ֿ{Q(sNZEl-^Ñs+X=nn ;4p*\ WժpK_xE~ & 0h  &\mێzvT:CnmGXպ~^"V{/C'14WYFN;qKN;5ܯհvnQD'^ϒ"zszͺ4)ߚnގ@.OAB{6qG635|dW%tdH 2TO䣉$9Ut[[ VLB1d;.Or(`/=TjEߺjsߦ,Qp'5 \\QEV'_TRh(8 1o_ިtQ {_(wwOkV3s-7r3/>{\g S-&Wegs^UonmǛ2n6pAb,0΁|y|ͬow&-+t >1nTقy SEc{ x,(CV=)8\ZOSGQ}_oDʏo3VL!ݗgrMMWΑ~< O΋gB~D !N=DhCN i=m7Z'?)پRBV~ }RHN .,p]RHmjJ![RAH)B*vRȄ})WBթgҖ-ice76RSdc] !LArf[N"4 1M֜JV6 >n&,Lol2s-&k%v ޱ>UۗB6tk I?RfBjj]lGq/KSUI4 @)l9dev1رgUI;`54vQjrԂ7"Q' U@ۗOooSɺ:ڥ KimMɦ~i)t4rL߾ҸCH}+lVض8-땫(sVȐTZJxW"KEYni"[` B52B0S[ҠQtU'Vp8w%T6ҤF]uj*-U^ٹE=[;dDYЕY [qF"rp3aJ6*F&DNQVew%$h2Z̘J Zڷ U2d-uZ Z* BKw5lWf)ˬd[f2KZ/T0Pq,u2.d'hHȪNhmKViYBvUZ!{֭ptdzVWpjW8(i?&Dg ѮR-a!:5,䰮"l**;(c!V]3]>S7Y'`\gm}/S뻸+Ьʑf3ݦc.4 x[֬Y'^uUU!7̶Kۗ|25qUQcߊZN/v2Iehěoİ>DO"j҂VC(WC[ Vnc9$b9xDc=JLCNԱJF-׶8%o IťqkX0'E3&9=5zY53>_oL[-|પ>:jR>| Ql4${Q>\vxׄǛ;HSeJ蟸l/1ܚ dZ!So|,9E7f`-c}`8f/ud¹hΎ<̲l yxv̏qzAߑZVth^^Az_Dkc(,SbF \PC_+X˴'K\FRV30ufX{k'uE'_%g^Z#ՑXu' ֧~ߵFjx֗P6- Y,"y;bͲXׂ'=}*m%9%|$1D!%jYDVGċօ$zYV H#PV`5o!(H{MFYJI}Q`@` IQWOX b1J=\qT崸IYiѕ"{WzFILF4'K폏%Sedn7K6I@G>|m/I7|y+<Q*AzTɧMw9뛢n⼵%l/F/[ec;bzs/FRͨiN\F27ߒgo\@< 1-h>(!+?.7ͯyr5>!{:06:|??,)NpAdc8K';;ys񋃃h?>;=~wggߜ03JcTGK[lPۈݐ+dY3t;ϒ<'gؽlRcX#G):L04fy2g@6YFӫh|\ lD)4Bjp x>iI^-.z[!5x6¯TFaxP&$GNU䗓ώO޼zyǜl7mq척MXN6-#5p f3AB%&p`$R>"5t p]hFskc{`&1+XSqb6^RDD(4k&'p`S5E1 !y~#(<'9ț!(^|N9GF/߽=g~4pfzxSEw?1Čw0NbG*v.U4ˊ(bLtQ>h5 u~G 29v4 or`%XPF_ئ3͌gH Nh E YE6FIzT^qrr;Ý5 LթS^)Q?2yi΢9{/ȘU:Sycc @AR]XxD=zy¥X\Č9FۧQ:@FKQ?0Nf%O6S kčG.)Ғ)Q,a320ő p)pW%#MgW~.B"j~/"9nN!3Q &)@Lwt k9;*V\ps9*5A] Q,fs( ,c KX#9klfHuFWM118k,Ȅ"0Y(=XiaWc+ 2%eԹCV2џ<ޤO'NeU[1Ҁ((XvgtƼ@1vz`C%7L-PX?Air|LELoGV=,&RxCJhSeс8Z] We8@B8拈Ws~T.oyzpUKIHvlQi=\΃J"5<M{4ɤ#p[5ӏifYlyvM{c9h( .7W8h1+Kae(&4XF@ݛdNE:(LGӿ0TMo\ + r,_vgSu>]4xR~uH-K&'J@lX~)IF 䉊iN|=Hfe6){.U6>KF .Id2Z%` al–R/_a% :d$)6@6 $d3?аEҌUaxv/ z,'*_8D@8yl@˩r.~ݰe– [{˨9|§.7Ζ'0Bc*J}WɀoG(k` n+b.U0e04X(J>Y#lwu26{dfe2e}n + K 7 |/#H /\)V 0)Eڔd0S"EYo~\:I< (ce{kDv3X]yO߲vw$sF!'jo'-G\,S@raB tdS tx6{C_r5lz^1sAK"Nz19X rwZ)PY&v!i0cG8Y#)7|;,|,`! < Вd]Xc>{t +(zteTD Ŭҁl̖ UhPnll3]7tad, f({H,!f";U5EGÌVԂ//j.pt2; m;s;p Gpi(C2px?4\W նu#:Dw U^dlE^ ݫγϕ/!پCsHsi!994ҜCsHsi߆(9ҜCsHs+L2!99׷+BsHsҜCsHsi!992(9K߾J;ҪF;Uh\SQBU-=C/?+͟ix &xcH̼KCڠ!lKԵ5b/gy#ܹܺkyE'ƥ¢.(mmd^^X*,V{Vΰ^@]͕5+eݎʸѶ-kbk}c{[TEvj1:F&/=;91 cIoylٟNESźTcK2nnWr2ŏ9}W`oSp`paG6rQ\twJ A']fښ V]Y^7w3%V:*lCꢱymkm86~ߌ|(2B/h/ *%BcJ7i1f$*@Dڏ /hl6kz49kXf+.N58$h#a&mtN[n!bmF /[hr^J:=ld('aX(Cp1p10f$85e6<X p>9O-L*h(bM r iMKEZo4Y*0ˆ -ehض[4p6vރF|T܈],1Z%13 W//H =BP0T*?~U*dmR3 GE6GlOamX%AGå^]y#ht4ZEdNf+:-}ƂW`,d:w~ .&DN!D[[.![p':ڷKAxx/7ɏ%eW,+Ī{5:bmu̩fܖ^$AӊIgz?Fq $P\eN_R'\FD|ss!7FŖ7X("#b##`8-B*"I%l*D i(rK< #@uµPv`BtΔ CPD(u ]u F/'j̃U_5&Ў۠+to'Ԏ6VbJ'V*uJCoUՙ,:_# "RX'%k.(-p]RmjK[TAH*vӄ}驌($6Uehu&7\K|no6l٠UbA 1BYɬP~C4Te*ʒ.,aA~jiMQuيЪ-cWcmzƩץH12VV0ܒRo blBs7'v|~~=v.Ӈz[ XlA&yo]($_&_7ϫY%{6gY.'RU46ZtV}KYQ"x)+Zs;C`#AK *ͭҬvŮ)$:ٴ%& "VWcK{f\թ"ՔQNh|7 vD,lGGđC툩Q|#$v{KTg)j? 8 6Gձه*M>֢ŊhMH;'/Ì5jTf1[Pȿ"^o.3 4X#Cޡ7g4@7Om~4zTwQm/XC<_־NCj5Q1ĨV; Z.#ߒRm^cfUeY_ziOt+qYYXuQ& ^ZSZUp*T շkPa>vɟƓh..{J//.5ӰK6}R}S1ld>͗ q=}VXkV%v? ѩ5:D&h82δ!>s\i >+EN錩BƇU7-&XQϺc'i|͡"G+%j ۣ9|?!m_fsKMnE3zx1~Da$b(aalͦb%;1ol/03U+x?ϋT^bW h "V)ĨUs#sF~xJЇ^]P0.B ښ%9dI,ǵu,< m޷')~^&PE&GyZ( 4bhOT-m}c$*AXKqٳ.7f 6h9ЩXfZB>?(ZMŘ~uQ@~.LK%ox0_⭘_MKҖyJS%gU|7UG?KWM_~"~\0YO$ajX-L2[F%}¡@(-W^Lx}f',%m=}#APȨbFHO)Uj_řNrK+汛0C."⏂D%a'٘1KWN+c9Ď#$ fH0GC!s$EOy,$aZvWR9@PdFAu hO:Fp?!GG1OWFN<ϞpY* l-6lPƱ VX p6%h0PyCDMaO2QƑXRC* ʹE6w^/k:V41f_^eq3]m:e~S9w"6V4:wwW'(2(QׇdzhnfViR.K]ɖ, ɵZE.X7eU0[ZΒe46OHJU˘J"mqVp}M7kl>&0m";2A^+.nno6^ضhܛ6Ҟ䄹D"KҎm6 R_ 9yi_w ^G387Y#J" y̯ZI29EoD# |&++B^qxnX 8lW#c ]Bnj}C3k #\pO3}y(w.듙Ȟё+P6 DaڍYU/>AnY /}A,G+tFYlzSLb)'I& ~~]{oiNzK,ö+wm/ϧXť(! ]AkzXEm*@7 7JD[*]kZz'g#*ZW;C50fJίP0 QF5PaU^KTӧ"Ԫ(lr%-jգTjEVm1McG-<@+[CE*9VM՘7EIzA%TTzSY7B %0LVu穇7%z*7ϖ[AXy~ nɵvPZ}Xԥ:.fȋfcf.6o{#i{f~P7;~3fET[#yh 9ނ)LjPKRPYz20setuptools/config/_validate_pyproject/formats.pyZ{wH_9 $jcgrugvLDÎ}BH3{:>[U1Zp6Ҥ`QETeV1g~YU)(KΊ`~rh>fiK˳Sv)[OpfQY1H[.u|_%!ϋO(xΓe$cu s^d)0yt6]g`<<,JK8K%gL^.NK_+2"z}g`@hyɦUQRq:2m%9UFW<]iC'!=+~aיZ\r>vm'? C>v'ԯ`QM3Gqt]uxի˓S$[2Joxϛ֟l79_p8kڄAϗ<);ؾ 7ПLlڹy۹g p._{{֝9} B>c L͈c6E/9g#w:]QSŊ, |dgzcO "J2xPvDeQ$ߪ(, qC,_Dės2+d!L*@*$Vְ6 _c \s<͖iLgJT?Xz]ѽ0b>Ⅸp[ʲDE)v*e|^ML5v*1 V7ϊeΑeW4D_-ɫ v,_Y L-rfrg D2.pGFW޺˧CѣE̖XMcdHl`fP9"&d+mJNQia ڵjV!lU.Do" 3\2>n0/azĩA e 4yԳ"nG|GFjO򲅪89Gp7JKoc ĻHۑ/(ЀiJM#7XҜ H8.)5#_k{X/>R-rjTp`7˗/#ϊ6/JQlgC`OJ*(Fr H(/ѳŰW%՟tCSH (g@!3H⊒}*DVfTVD?ɩNetSKWjL ú o6#'p{.*ȗ3HWR9ԓqH;ԁ7;tU9#s >6'l* n;j-hf6& ʊ)NbYY!PG!AM+`W=O|OK7u>ILV]MR?c119p xa]5PKRPY;* setuptools/tests/contexts.pyVKo8WpCU n.T #m)Q%$;Ç(Nk."9oq88VSaE46vpR3`G%m bmthtcQp^Vtbh`5ҔusDkQwbWWga6vy]0H݌Ukh\^SVpsS3)常/e'&lL /IIݵ9܈^hvX,c"[0u۲#'jxaY 2ڕ+"3B}%[kpd7dr An/PO cF0,*֖KL͆DuepGzl♠E7A9;8BvynO+f>c? <ȼO 5CIt6w3/*XZ p3IԛX3i9> ^y< &u[D9MbhHN8µ9܄pECZ/5Ne,pins^%ɣt[$~I;@h{,a:*T0@vZ`=qֳ2ژG٠"\T$X,'$ 錄1AtWf-& `rދvku̶V7N^ܿf3{xHag-8ÒHYoYZFS`Ħ| NUWo\ɾVZ\V7,N:)T'h" d!9lىNs] ߗs>PKRPY}BX? setuptools/tests/environment.pyVmo6_A(,ev(Vvb@c ݰ0 Z:[lhR );;R`Ӽ<ܑh㘶3V6F`ǝl(uw|3i^eey˸eZlP7fRv6?q-Fbnf ?-؜ss5X;; )*a]넴 hI(E)z;A[=NkisU\Z&W$t}:r)*hc{+n gS5e[QhöG-z+$o(ڥ`gJ1z*1ӪԂhcm*EUhV>5 C2)ʇn]ӺđH9բ704`[ ! QiHb crIs9=-xUyS,$\76M@i::,Z x^;N>BY]Á&!G`0Zc8_jg䏁( Hֶ`' L}St#*1GL)6 Ljԫ^m*իwgS]tTCfYS֣Ӡ8cqtvA3R堁7Jv4no$+ѢU:&ɲWl z f!flr[LȪ_j9͏hވxAU^ouYRnwإf%ɀ VaGEm3Į*Dd^4[|bIF&!*W ALlJHlM@5i뿉UM_gHE&nŇV{$%kr7Xk T>m`u3Nw*}JR8P]&M5TU^,H ']ERsE9p$qc*:+h7N\HF 35o 랽_S(`EȈ%RYu()S%*eEJv4EɏQ)㘢y[ԕ7&уXfjrJ% xHE+_um8xɪ@<uS~lV}l3(|5v1_Z&g 5L߉Hmc(4,AĬ ²4=c/'Ơ&[lio FYHepC$zagC"{_GNPC`+C*4[Xs IFOWfFI F\AwUz06"BpLOnjDySoD-esK{up1j>\UF8Fv*W-Cw*`žx Qo9t~;IVFnY_ Zx!?I>DuZB~*\ 17/`tuQ ^PKRPY%setuptools/tests/mod_with_constant.py+K)MUUP/(JMQ(,RTPKRPYLWt setuptools/tests/namespaces.pyVMo6WLكWٴ)(zCK6 i3(6uPԇXlydt |Xa[;V[6Щ3{z\V5nAtҪ}*Ӄϧf 60헾3:E4ض4h N <)M R>:ސ+^z GUO"[GknUN9)\:m*"]]%ɑ2X}C"CnO%dqYЭA 4t hyVfű5hW|Czj(N ewS= g>y P*m l6pRĹy!@& )ӂ5VF9Se\KYdS9[^-Y},4&>AmјZx9S#L:׺|+Pֶ^O_"C C}X$A#fut>kA5ڰگaKtQFGer-~wH ÎOtǴUB|*D8x_AsA4V\|'R7 hG -Ð;VlSCB72xAhR=#zktW;;ڤ"U$S}v<+!<9->pw{l8<02%Z1=S;??PKRPYݝ#setuptools/tests/script-with-bom.py+J-.)QUP/H,.NMQPKRPYԈ|c setuptools/tests/server.pyVn8}W \/e-m( TIi~uڷurgfyZFPZۀA5 ۊ[w@;ykAYVQ$Fic3)ӭlB>QcnuU{pm6[EQ^qc_.do`Nwgեf zʎNCjYs A@OI x pO3k;2J| C%Ÿ{PP_TKp-;CgR(U[pP:[l ڶJUf[9w[5'ؾnQLP),bu\\ 2^'qm:o,*ԯ]!*t ҡt`=>kgt}:Ʉeԛnq:thS*!{hQv)BOѝԁٕ;2N vE”BiJ~9H|%ܨ2S!6ɖ])[[',gM-G,q=gIzAP89SZBld[]ͯĄ[̕.fBR@DPٛsl[2 oKlwi6|MoE?%3r$z]C8H`Ϙ:H~tf'AVSϵ&ub$,Z,Mc/0;LzPpU|@(YFF}%Zs1p^Xc"&"0͜kmY׭[[*-J߷t<Ŵo?r~oO[1tIg?ir}[* ͐w$ %v9Fɏ0z׳)5^we hPKRPY$)M%setuptools/tests/test_archive_util.pyuRn0 +Q^ 0zڲW][2$:N~TNbr8a@[еWlHybuvhÚFW&=c1e_ir5:Vs5]FqF; (SH p+Bm-dRx>[@T(g3ƾW a;%GtŞ~A˧8.XJY)e.:T-@ݒ a{ DcA⟱v( 'gZU+JzN!#uM8pEN%p inKws/dn9\\,%!nZ9;M}ɀ~R\d.8u۹g@w-Gxk˷;@@|-D6Vn^?>v,sf9Kz'@?PKRPYkh0+setuptools/tests/test_bdist_deprecations.py}Rn =+m^HV{C!xix8>vnT̼i}#ϖ25M)s =/+b lcFt<ژV0< >c'x+1k^ DPDȓUoO N1=ne7^9wNܬ9r: lQf9ݏJDTYʔ4z+QRNK1&!/GI/ZTQwPT1ˠk"_N?{Η[ڢ1 ~hFg;[eKO\ˑt|^UPvɦ1|R"+C("9k$]PKRPYFe0;"setuptools/tests/test_bdist_egg.pyUM0WXɎh Z+쮠nɤ1vzjK@Hpq7of0 Sx+:aȢm~(L*0 XpuV:a.qnvR{.l OvN&EhVyj:ɂ. xܺ`BL )d-WI`Ri7.'yNhՎFJF74"’XHt(B_yEMʢvyd"^İ^3 *?"0Fp@$rrC6la#+@F )4)ʴ>CsRǐ(8i qe87-1)Z0&D`Z;LDR lQ2,E(S=xB8j1?@dF6@{6}!vO#.b:T"W% RxFȨU`@Krfjxzgo|FtȾ a6RCS|F||6}ws9E+,D4VKb [Pt\ΰMTBlљbREec]ǝq~ܨ?WQJE7|xB:@?Dw_UVWdGl{gEGɇ2m35rK9pPRb'PKRPYnm_UP$setuptools/tests/test_bdist_wheel.pyzDc8I6I0GI0270m2Qjn6R_͆Q2V$/>'6M^)$=sOQƼ IgO3{y d>ox\ ?ޅ9_EeN]=s5>s ɥ_pЀGBhčG&\$to:}v=.{Kx|`79{ǽ*(4ӣ^}xx7;Is['OW)nZ'O{ϝ/vf0WN[Gz00U{aZR!%1%ORH} -Z-9K::8ؔ9MaSxZ!*aSj7ø)fh$)")V@>_:&o^DmX5c^kx=੗qF [ = z;˃/n0O<7?ݷe(@ gF£nC3E,x6&H%~.`C4Ds_I6MREf;|A!_k4JMeYAgd0Fl<)_!Ie@Pt8Do&k|A`Mj@X.}V dđfim54 #PfՄ z D8p}ё k9XƀRa7!6T>^G>" )\ZW~6b}PLW|GU]L'N-`F_ J* ^a&XF!H 6g_/p|>wݷw߲׿b[ٹ;v ՐfADzɞv)\H78dco 7?Ē*Cπ+?X76 Ga p)) ľA3W) Q|p'/Ј]{A3zeX!ŋ:0D~2*y>.h K6G+kT#syMӶ0x$d ;],E'337c>M ;L4)0 _/"aEf5F!bXkkj (T74!!tBP|uぃnO1]"IRR(5 Єh1=xfYbK7p Z͜V !M@iclжoR4!N24q젌eQ2haIn VWPLZy&y_C \F XuDmJy!(L;X7S/ƄKM<~ÂAP, N ZS2ny>N-Fi,XEQ.H qٶeЬf_hIѶXn۰,t5pC⋤4TbRc Ʋ}5 0IEuW\rLNꂩYS pe@(X0*X09<2vCp_݅(| m&Q@L 3c!m+EӨvIADdTO(4N 2Cd%FhfX H ml%t:MCDb1'/tvU`_Eq&[Z M6AA  Z[|EuC}D^5M\s:%UbusY/ch9Ws|ƒ bhKŤN:m_%:JB.fE'F̀<FMEJw΢7R^ \ Q`8>}(`2ldE7 . 9%);)=D`x_^Tl &F: vWJLgAyM+WYIr.ݾppK˼MY] X[QНYmNm5IJۉ0 y b/EzTe,IbDnۥ X jhh_YʍߔiѤbQhkعeW%R 2*RVk i|3VP0{OUaM.0mѐ|BBYL| iZfk,-T2dLkВd5)"C-=MƁzh#5=uϖ&d%Iҫv'?s wCxtR*)grӠKM<q 8vs'~͗ݗq? ,]"'>Oƺq7/ AfM8SjQH(Ǡ\ n!!aOs0rNH -_X9.UlkV b \A9źsڼjh{v eV ;B >;XOjeϞYU(.baOK4Kiok2ʽ"~AFnD:k$;==؆I06i~)2mH2nyAhgJ t^s w< :8EfLUqO’[!ez|s"v&>|l^^¥6=)!;< sK{QuU9Lo.XqQU<!rYd*ji‰rQ:Lm\hV6+ZZkf7RƦiBuuBb[roT/ޡ^q س/e/9DD]ۋ`=,D^;Y ,>Ao4BĆAY I|j1ÞA"ǦzKFL E4,ra;{شB%[0cdӘKDQ[p8:Xբٕ?)7Lmg+EEƧ>KpQwjePT0[` }V;t=.F'ϋӟӸ$Q*$ZW\ƀ>DByhn0'W#7^Cek݄ ny271KK:C˴E1M1¸jhQ.33H}[_>`rWFXadޤ ޕk@F EZXr I0K? V àҫ6k,qS.Bk.[Jn' TQ?'ya.c dD+ӠLBXĠ#m1uoq`Ji),p3J^, 9ĭg^Y-.[z3u3g.p1KKA\a,M"LǼ<(Eok1.ۅ-V]/xa11D _*=+9;'$i!%6`eUnOX)qRufABL5a4jHvE ǀnԡl--َqLTING2ɧ4Fn ph"n6T^^q'~vIO Ǣ;q$;`B23PE%`:gH l@URCDP,F@puM1~G&\lo8]rn8dt&dĪ~YN CRJU_jթ Z<0蛝8.!gw?F8JPr )R*~S r( f[ށ, 9IkA'4 GMyu"rE)w lDbR7 aĿѧ &t]r)97BjB+5RgbvqB84tu9Bx um}ʁ:Y4 sq;0`s , %dk~!ؘpUլvHv%"IïZ PKRPYzkjnsetuptools/tests/test_build.pyR=O0+,I ;R!˱/C II ]w 1 GkorVOm7`|C5H|dl>b72zW^0Ksr/ $u5`0JfBQe^;/w# hQO) 4?&:ӫ30SVK, %[Z=U9v|N J-$2 b[TŻk62+"H& #VNC}ȩ\2lj4(=qf^=f]̰`/:8T;Rd::dT~PI ~#Z=~Bކ,8su:$)*PKRPYz3 #setuptools/tests/test_build_clib.pyVKo0 WA6۵@aznA`2먑%CA>vb%Mh;4@E|H~zs4ˮX4*QYɲG#Q6jzj_Ju裬M%Fͯ|dzSu ʚ=7*sTuE~,27F^SJE?ri` r[j=// \3JQ b̋I~&Nl]F Z'p+'M {g{pz̚"1eVt`w$x~xL)}:XmUXOP}~( S)x|ozc"L9txW P?qw@9C@1و8k`[[0 {(`j.6ރi]|mtFz!\V+<y̳?E09g?BG@Z覜Bk( >Z jD?^gt<ΒPW+L D2kԥa0JmR?Vu ъJRKFL}>Lj--ҕPlGʓz>^{YavHߊxv!E,M{m[9MDj z=i8*#t58 ?f1ݬ~m i:1z*f^HkD! ǫhn_CZ5yp[qPKRPY 4'"setuptools/tests/test_build_ext.pyZko:_A(J|Kztom$-@%f#I;CEIvn/pgdy P#n-H;<)$V,Hs8\0)UfJ[ߨDTFC1]ZD *Y !{aJLtΏCU,'#檞K>DȤRUCZ+N?ALjiPT,Rd)J גNo>\BeCoK+1DJ :ĶTFgWŗ/dF07& }3 y".`h%T)r NF>1[`kN&8iXA<~UdŊhA9^1#pTkk3Œ^Igp,4*40@9O(G;A)_q8ҿEmšGSFښfr&y lJ:!2 lVFntv'41M`$t@|6{&iB'[3ł\l v1ʬc0,jC-G%ǓɨYKrlT%)LKBٵ,d'b鱉jvSx;y :< 7 Eո҈P3p=B&.djj?:ٟ~n HyBB1yv|x |m Kd(h5-E݌szUؘELnpM5Pz]̿P=(Hm;jNn񀜗&Eg>b"2Hygj6&e3Lwp";j@3Cr\uNOvbcE țΎ)Qˆyt悮wI@%pbHIbz7&kquwLpbئW\[.`Ҥ#T{v:q8v^Z+TNqeL:^Y'"F4͓7wgO;!߽t-7U̫`Qn,/zQSF(iͬG'r6]?0" 9z;i 9b @YGFxhzmai+-]Mpⱝdom26ndJ(d2c6'zBs+1 Lͯvw^%]0cہtR Y:/2 P{"c04Zj THoA)ToAÞ@I3p{aϡ9dOFi>t|ڃ@) {Ё-9knk84nz_IF5#խ1ː1Y m7 sMVC>7^h./{ʻ&AJޚs҇GD/$JqD ฃ=r)?e=7pk{oSoХo a.ړ(YsX6A(?;f 1PTrHF1#0">S;>JhW!!^QydqG~pYņ` ~햵JSZxo^BE8sˁl)&eֵ7b49!suS9-gQR@H90T\13fis#P }9^WzgR e&$rnþA⤃㣟u|2;g[d1E}xOWIP1 Lһi)2N^wsz)`ȁR"aʔyuΎhڨ-W9B͋`>RWL,Zys%̖1؃+|X.qB{B䟒6U) V-!T >Vb]^2,#]̘YV/@ /Pyu3pӄ4n]P))+{9lQC ,(OczJQUzj7%2#kP lSq~V0yA"lӹVX x,v]K9:x}>u1cf9Uz}ȶb\#{1r#,hmTGN%o4-m-kVP&X. ~ss:={ɇ3oلY+긮=xJ8С?졵svv3Dg5yɶdN߽vϦgֈY_C^@q,99u?uuv3jyx yK@Ύ@Ko&HI8] L6,E3&QŔ{YMr/˃8b}XX?hfKt6Y~Hcg1X}}ⵌ9N)PD]3}J8y,p >P]+zi#Q&+TA%22fu+dq2P βUR R`4j0O7H~PY*i6Gu Ⱦ|n<q¼lU႐5fah#hzn=$ Ÿe SvAqI0=ˆq޶mhMFF-_P2bOǰ`Tk1.XB o352v䋺z) /DM B~`ȑ}kDW4K@\fˁU҉%rE4AӓM?ő@г^E80V'oޘW)-UkQnsk"e] *~hPQ(m['կa,H @i9dVz A u$ &4,r!E#d6K%(@ivN?``’$ki*iWƤ#!`(8}2x `e da4yEm4`X$n+t?>:>|B9 3*$mȊI( bP /\%9FR.W2|)^Iz["HqBV{Z i:-S!@wy[n(JICc(\.rN,ž-k'%9}(T VbmNɨ<8 ~& }XL1 d6R[:v"[4ؤ@u'NuÙpM||U ramoPM֗+# N'DAK`qK]hlgf^|n8 'sٜ 8r$A2&J$e݀Yfj.*ЇT6r$ATTiЇu A Uex’EZ_b%7ќۄU)u(~\mY!HeS;.⸭0x20}b!ڑWPNu#"3  b9 >"H!Vu [Q :b6!SV%aدjYG$]ab넃 $$Q .<0 A@+QH1̸"QTiTh+q=Y }|#5)dPmqlbzzO UwS.ELo~k<q;lv~ §Bc0c0SH$bLam:Ictל<^ `3W*Q{DLD,picMt)W0?hܯh|c`" NT9v+ m]Vһ8Ar_p]XK"iW122dVD+/eQV‹bP[щrőHמ2uWdz1+ 7ynYu ~6EqDJRr]Ph3A\ )Waq~fUmTU Av2\Z7eϢ)\EJ#},* hf˺/Ch],X3zXk̺oTMFu@M5{aO8l  ;PQ?kq lT*cGGK6Ƽي*9BgjA…iuOK1[h\Dk< i|PJ X)sɫeLmFJ3ZB [" TLg۩u6r׃>ҥGΟuk[YTw3輍¾+ ][\N~wes#]o^^˚(㰰 qVIkZ5.[+u&KdBpň#(HAa(]i%TJhjY:>|ڸ9趕OOo54wo #W8}kwk[.'Rxgtr#[ۢ#^ExA엒:~ 8bfg^bEW;g7]z-߭kUJ [ɄsGQ6YQa3b6/v*qp0naj6͢1a0 9aC2f9sՀ@/u+roβxLiƤnhar-Tܟh}J?xN5;UAjʂ;t;LD߭itn2ܶ!=<K0 5X",,t/r@Nbf78Y8c/Z;j:xG~bǟG'g $7.q2$KEA[TaɗWbK1YA"IA@-"6Sι꘷V P]$+MZ,R7wtTPB1X KLʹ;0 d* 9Yyd_ڡ*w )H;Czl.BͰppto3p^:_u9fF7l㄁:_q0. P4#7 E B,6J]iZF^5!x Z%O:sx֖ J;HX(7(Sy%~["o)qvX}Av&iU.[GS" e d'xE?'Z22q]vr-(E S^]R^Ǝĩ)g1xd Ҽ-0Mt)J4ɼvUUt~ب%/h z [vbۨrg@fR:YUzrЧiO4S+Dr8'])=b ĤK73engev6po`zʃ3EoPv|km˽j=!(DDyڮmtd41L<~zNԁNjK m6ctSW6xhE7ҠHlTeCttcdPGOE8p9'#X S}:@R{AOZQmSvGL=gǙE9 '~ư_LYcDwKGO=v^OJ-"@Uݔ^1"u0^bRU"lpUɠM^g+A1adиM\ 0,Ijtghfdy_'_LyS 3I766kqIdɓC 4+ZO2Gu`WD1 gZܺ-n5:>CLW Jyҥ,L/t&Dե7:umZ/a}:V8>50.t cޒ:^9') AⳀ!HEBZ5*`kuL9Vvx |!Ew1HoJI. dY cp^4Ra#.ə i{nAͻ+ &P'EfQE޿IQ(*7~&+6[`F1oEl@*> )%`Z{|п"m头!I}qZwxյO~꺢szNsrƥn7gK`admovpB)",%3ĻJ}vF v bsKh}Xwˣ At5t.Oڊ5ya?~0mPjɸ 圈ǜΊc7 ul:c\g0c{ ~ Og8{Ƣ.gÐ>cJE>sx0qYX9J7Mæ])ZRկ+*ٹ'P1LUkhaRDe6}q/`nWff8-hWF@e:rc<+n믻@4,Ǜ9O1=] ISa|+L_1вX^F#첔, R F؀.oj9iofOKW|ƫ#gʏu'9+>Pm =~d(kBo#| ~)oQ:nRiEQߎ)(i-3v T0}(mA(~rlAG+t.%_1s ۱ “Z9EEAqѼg1sK֦m'c2}tv L¢h]C˔;<f.~Mie)?zWCᲚ&U7 0 Ñ?7F^zl,}ev_(+<+-n #RrQHG*rhѵ B ɳNad"V.-'}V mLАۖ+JIz+_K.-[<Ǻ\âQl|!YSKX`梳,Q(XY8x'+$"?eDMkyƷ\m٩ꓹEL\B38\[6e%<:‹0Cbz+yw'L.0>{ͩ;}w훩쇏Sĥ6eώ>UpdByzmZuHk>OHcE*b\ _SQ$9 /W>a;9 '3/&nKf8O[ZwET.=>K2b @4nir;i1*'<$xMr-;4Q6P^pf" ]WhKA J ÃpclJmx4K4)tY$=b/^PKRPYJi i7!setuptools/tests/test_build_py.pyZmo6_A(9ɦ/gݺv$Ŷ,Ѷ6(tb7%Iw%Ùg^8R2Y!DⳅHN~,ɦ5)؜䡘ɘsU,rYtga!,ˆ_.iDU*9ۯMA&cI9lOO)JIg, ޖBk|LZ J_zѼDS!,5z݀\1p%{u!y$8E `P)ft ZnL!&؄6yON'b~{B%gzEؐL0)hv.GW?_{2r>ͥ.b=GpD POX$jmL)j1} g?|AyhOFL:wGW/ҫi BHf0 VLL:2Q-3`t#ΖY,RʷJ  ɭ2dbuҔ=`CK񓁫 ]"7kFҎz$nFTH?[ p︅{wݻUA&VØ2Ta ѻƧ]lA*O/]ߙVp02Yǂޛ:yR"v>Z : F9GJ\²;  Şlh$- MޒP(ўMWxg& a==K*c zU(y0^%D)Y*{TgQ#Zfގ fk`reҳ՛uDlHs`zNbJaQCL(øQ-.z/t|b $K1i.Tj'e˰+0P͒hF`\q}ョS.$QPQ=0C<@y2d-U{`c#;;m+ dbH F<@" UtgU"/6v=*1C %m4F!?Te:T|@\Y>="Lջg+Wj[/+X[V7fo;J(I14Á-Db &yCC@~I8r@< # ^BL=>Tmk;T,-9dl6JXJ0m^HWg?`[;Pi6_y)k ihx'^%oˍJq57Gݱ{gd8l^t7E`_C>k"4# ^M{k9mzgI> aRk9?GOk(4Lw2YL)>+rMjPxAc/,qљgCv+ YK!I`*j ǐ#gcs(uc_sH~jɘ -&c)S{[)}%qɝ}x UeiSpx*hrry0]okt*#APo֠?v?%upZQ W@9x?.zE*NIVI)xK%L4a%LGFJY&n崱K xP_ $L9}6u Lҿm9S]޾'ay^,>f⺢X4O KziF\Pk,Tԉ$!ji@BJ\aJrk[hvO[Sa34Vʌ=~)N]}3ڞv\TO(̂1-??P %sDcc.c᷉5>ˌZ%ZWsWZ?@Ay}SSrk1+zv+اcѲ^KEO"'4E{_afY/?2yaMM70|9Tol:0l]w=lv;u?PKRPY+A"X)setuptools/tests/test_config_discovery.pyXȽ7@ ^jLloS=5"0k\gUծ ˞%l2uy)^0oްpI-Yɋnл.%Q@ ȐX\h.mBk{d0P-(\Ԕ{_|۟1.X}Ct .*8y7QA]]UMXmQ^..,* sv8ƍ,YiEOg>}MzEI{}5xEZ[|9'CŃh]K`.VBvTlt m ߷ޟ: r&%z(ѥ1X v U]C%$渮1MipףEإ6!ziҦ;ư/tDhB?XV)jnJҌN6'b|mվ@rOL5<=@ pCeT^#9 z +gنKCnquJƦGRVsU֠Aů,*ls! Ǔ$ I,huNO$(*ul7d<a@!NytE,۴Zh(/|ϼtI#YlH>KWuͮ-_Qn.&Ai%ZEAݏ???uQ>ƻ9 qWͬokӊz9D_z\0ϊiO<2p< G&0HAH@T;jx5#"~4"m.n.,,;00e:פFg<3a3T34)eJ=[kot@jctl=x vHc*Z8Hm0;/~8`"9َ),K1KcoAg:66imddq'%A~ؠa;S3*ƾ`^K>'68[mg<,C8fiYp|P>~#L]^ ]~X:IS:4A' ;tI|5) aSs(e_#cL\O?0Ѡy@pKGl陭UY56m'mM/%e#"v&&Qk%6!\ L3bodgf^6f5hM`tn/{OXTܖ)pI~7X*N-l!n G(6fGh]k4T&m( jKr?/XUғ%xD^](O:0Tc@eQU=Nn0v6 vNȶuDŽzVVڞ&0)5(Pn>ؽܰ}[#' oF4qmu=x Iv%]`c]$$(]ǫQ-[LN2C)Y qUtL9_3>2F;ꙨC3C(Ut_s# ~ׁN3up&EN2<o>`z}՘sjaȐ~,̒b.SrtJI6P7o_}yw>9 -$ ѧ0!t>s`_4+uԌ`uS҄|Q|}xUQu<1>$˹>Rz]y"2kB*"K8 Ya)'r tx (QHgD0rϑ3\|9 NJ}{DiJ01 cچ`~fJKx2f-5]{Zn~P sba#~ɾ`UE':IXIE-)5 [N̈;'zqan!Qናy}`2ҞĿ ^ h|ф[c'8ĝAe!bD:gd$ZG Z{b_J̳'L4$ebiX&Nһ6$ ' 'T{GF-j0_͹ .Cs3;h>dUru%a=XSx]Ǔ鲑 n{hc 0\_Nc47rC(@6=D]Ç&%Dt{[gӻ刳nu6T!R%br`vq̝xZhSl8ci%7m.p!tz,vDZ]abS)Gn[! w&4‘ց DpYװ~w.]7cߵ0(o 5r uFfvxvrEF"<ogy>V[YT0&6Jgem~3@E:MNa>]a5йߘ(0,?[:UY;u^mwpx'VuN0u(cH'~Dg@M Ēh "wǸT|>o*<[=eia2 K,aA[}ۥuL% ]+AF05"uH)Og;6j∩p"o5LIH5g0cD Ĭ+5⊍fi޶5|Îx|o?Մ;l eApò(*Wv{@8_86L ‣ƀosM~ =?0n㻷A;I_0Q5l\"(oo QԻ[3ѫryQ.)-s;o `2Z'WuMJdr%'m+moUQ;;I+# 2a~Cg #tՀ.ؚ0$>3@{Wdug)r WLʷmX}0*QaH]|ŷ, 4L[]ȇ0:)fy+- Z U /D&챨@,R-,DmF}W* R&&ՕE+ ZI(i%ǔ,QKyP)ES8z7iTaYJUNo4׷4^ԙP$qNԶŊ#pW&C%0kntxʕ}á@F+%#Y£a 6ώ̽D>HC6 yE d<6\`k&@`7=//X|׮vQknD&v؂Ym%On7f ,ZN]{\D]$XHK>ptQ Ká;Ž7_w1ty]@,3㧋}{6_40O C<k\Ho57v(MBcc#(\ ӏXm@׋/~QZ"@PTE.F 4TB x_.FߪzGhPԊI7 *L󏟞?A\_aӨM[I 7o~-,Ja7Kn3 aY9k C2i]DGԙK˳3}75P_)Kaq {UBpo.Vx1"p XCJE?͠yv  N^$4]/'KMK䦴"Q [{%VjhtMF|h3SH|1o F!88Ơ>guȫ,dx 4LK OLIW ?NٙT;yh3>b^@10J*V}􉛩(\8!#_M9z7t eIݡo VZZps K3Bj_h} t2B_;PKRPYdk /&setuptools/tests/test_core_metadata.pyZn~O:z ˱(#@PމdKKJo}}>J -:]NovnʢdU1/MR eyPLVU!t&X!WihS%Sŗz QHK8RI(K&+] ?]* )kˆl|HMQ68w{\sKKA A Zg ?Ҙ_Wٰv$@c@@#}q͵bz?aHC !c5%}$$/8R%·p.B"]+M mG2lAFr@ H|U_%Өf:pahٽ;E XTD%Ŗ uGp0DC p>2uv1] u|D!5r…MUD,/*}`j)Z t-A^y|)@Lc+ݞޔ MAhL7=_N fu ~O`$S!RQiV~ѭ9C(D# $&0~ #_М^5Hq[p$-Wp;OakhyP^UQOsN-9>ۑH+N+MM |aSs)%72i-ћ4 o@ eJ1dkCl5mK:,b-G1oCv[|G5RXz[ܪ:F"}.=5z-6}0g=! q YBwY 9+2ʇLtY 1uEX/ή;X \Y9O"–0=C`H(p]+LP@?CF ֯Ͱ*9H2X =&%Z5pX/.egIڃM`y[9kC5 qb^N$ LM (d_4z4d1zP{ 6TNU{h|7ޗn=I64f'FlĽ+V-5UVt%-d9=* ֐Qv5좨DS22j-_A 7 ,zJ pK+γJL/ĄÉkNQgKgj8E*0)ޥg y!d{}MOD0^Z ӣƧwb 2cT Y=;:fQc.[f\2{= mhE-57dG`˸`wbظcm} ]}`EHb30М|byϕ*DNNuQre;>shQߔJY]>zxG0M]7:oiMo]xPf9T0m ?#, jQbִj$v}M6 9Չѡy6Aռ%l~d&0AMmXԪb̆ /ʑe='O Y-XRZ> JG5 %0~ )9OA;+INb-Xᖵ!E %(58%4;ή SNCRRck8@w2x1jO+ P F1Nȗ"K&EPA|FZ=;bmA ba_SxzE#P| C(q1u@9.)mY:0zs5w8?b7odE /3R@w(XN2 4M ˌިr^?C%FIeL~"QPH842s)`lTQtqk0yiAށ>0ah~"ɒc=j/~050I@bo~EzIx o46+V|hP7pSPWnCxg!w9Zozhy>:A&@3wu_ӯӒ_z=(N6<T {N`/v|uEs OF=Sb z+&-*me!^˩㏾Hsˋ(xr RrUzūNm1 \>.\Xv4!z0ilA3z_+d0r)Y@+3s?̡rU"npZzU%9z#yԓ5e- z("W& lA8:w3nnjƫZUPK 9{] /:Q]|D}hGރ^p=g9z4&͋1%/YGcqhuQz&ַZ+h SV%AroMPKRPYv̆4 "setuptools/tests/test_dist.pyYms6_2!!۽O+S7qvfF1 II ۊO/$AR9}I`xvgҼd\eI$eP'N2:eE?WDA\~s#A䪔e7THNg+5eWY &K\Ee\ M$sJ #uD !,t Q^-"tsZ)Ċˈo ڀvb s[6Keڙ )#=͉LlE4"E 2<|9@ڢk8 {۠xxKc-yzǟ|s]ɻd(WC>ct 0 'Ůnu=1q״Że3إvj-?'ظTW*zV22{,Qr- 3)+h[]s0בD욤:o*=@yjc(X "k-chjs3E9_?~8~><ޝSHRƞolJ{x%cjHSls~?H۟bD$R- J.B`=C*yy tɩhC0S9 8&' 8EP$}:b?*x>O[=3۞XJ.*_[$b('cjto[[zlF?SY]Xcfb B2&~{v>{%I==0$zh~f pUߑهغ9;y\u`8>PZc T)`Uf r m]nH;(5عiMOO[s'k gUQH= m;{ij*UkQ۔H]EzZ ܻ7\{!l,\YϜ[B=ݪL_t@ ?ަ;3vQ&Ii!ltfM1nOO _F}'KRl@$[$E5vhv6;C?>LwHDIc8Oq O;oSHŻ~b!d;QNζ~zRʴUDʜ : FuSQ^tEszxzV[hָ@EQ)w@ۙ2ݛI+|+Z C${x@ֱ9v/:LAnhC'j^>({ؿ{ѡ;RнBmq돆:x4;)ڣ iU+V & L j}h8f_=q'Z TblN-gP{'8_h^c).U )#)WO kѩsD뛵"5xu0PKRPY A+setuptools/tests/test_distutils_adoption.pyX[o6~ׯ˙+l.V,i,AWAKE";lq;߹8DH`vt|6+?؅fU(:ҋ7oHt(Ւeq- +$-U^JVrEttψ!Ĩ;>"#]T.NNG^(ML=ʸ1eE90:r=q$y-dGo`DX2p )JzF^0 r3% Z#B//ff #BIz*="& ?hwȺsmЄ#[  HrIHG?pmgV=@L B+~4(N ck+ M~gC+%!; &@ sXqo|JMJI1>fBe LwNWS9nQV+R ޽ :DZZZrh,D[C49&YɞbVGf.)X9ΙC_@%+1<'_k[قˤk jN6\v›^)hp"ZTt!@ymy!-T|IKS+&_u&Dg}<LJ^%u J5h(POLJ?wz:ǃ^9WpſeN5'ܨ qIX} ,O[X}l2<]]!jtz6lBY8e CowV3f]NMU@0j鹿Pxf WCj U* cq< =8ƠO#6 gG #GjʕO` s C އSɘmS%9m{rpp㞖ڌHP&rn5U7c*-B&[ί&1ψ99xє>}z:J>&+@1Uw'W'bp9j0Wg>c^q;29m`,Y6[~Zf0TW4ey dȠSP.s ؉]@9(݃~#RзoZìY#)iQAⴚosJL>d 6!G p!"76jʳRlU)Se pc?* nq a]=6nEճY TQw{dMwes)q{N;.&6u}܍:[bڅհE{/aY-_ޮ'{n=T݅g4f. a yH[wF!TĮBz-7•YPX ],}w`'”*+8[OgF3x#t|5_Vo}~p|Ӈ,U5Z]:5@*i F|_hfݗ/CTݝnۅzRiO!a1wR8yCgCu7ӦccZÝN0Suu֮|9v6㿝03?PKRPYу/%setuptools/tests/test_easy_install.py}vƒ?B@_\mV&ulK٬@)!"^׼ݟ&$[Uh";ɜ"՝N0VAWu:NQ6_efY6oBU.Y%_̊,? aWF%UІ{9ZŘUZRi9fl w6WߦePd,@|;CZ@%u:gBV[Y]ny1V8Z/sZ"0ƭ]_&%e cTCdrAH|擘$rB*`ݬ/{xUuuVXE9Og/,AXzmQ^8藷MVĨ~'X_VʓL#,((zeeFAĹyfȓgh\򆕲0'GӔE,gx8_ (ƿotՉ`# :deYգGF<>˒E.K}4a`-f :ay_4< Q?i^ JP_I3@/VEu7E6_rH%ONuyy(jL*@2RU̷/YlAho8y&9z aa3U|^3>TD%\%tUl6e\tMa$,ePçB(G0e![ ߗY`,*ՂC`HYh[bDTF bdGS*AD1'iyY^t?GP7&+ڍa伒zÕ;Td|>Kk".NK 1F0ahDHUl } m-jĀn*6 vtyf ^&YS@r|{'8|~SWO?y4YzY ^:z}}dOl^$SX ƴobA,?󢏅T:̀U im Dl ݰ;&6&~ȞһdUP*c3 XX*HԅCbo3oM" =6.ӬbqLl۵,gܑJ$TBfm@}.ق#TJƏrbj-8ԗM]qh$W96uGmJ뺌} L氧8Sߥ5b B)IBs68ݯ0s6[?jRkVڸ0d=_@U>Hp)_4bߴ>& O2- A}dz |ҩ} ;{brg Ly{,ϖ\!O:%_5޺vOόx`V':C}<㤉[&%%[v58zܰ 栟'T8wdUՒEV]1/ʨ>t7" $_;7pY}kt<$r* f٨mgE %I !(Od@4qoXDm)/"%RTl4.m PsbUe: @?+H+14B0oBS??iq! DB.J- ^o9%" w,@vx~ uD$<MFد@?~ҝت͒>.(׊E(2v7QD? [{09iN(:-?|5e <~Ɂ⸂`>5s'6"sHڱkk+BҖe=cV)v5M{0URXy";ҥA wΝ06i+$lC|{r9䪞$È?峥TUbK):>k}yv˪$Ԣ:adSeRE֔KƚU("ɦ񣽪iyW"jNjYZ,]~{ K=Z;x9|P߯a-%KSܞM4~Io&wabԇЩ"L 㚕2# ˼(|/wGOGo9:{dv [<~4XVW⿔JT *MfP^dNhx U\nDN Va5& 3Y@0[h*70;",*32q18+)aw79Uzuc3d-@= *l€`6/?unĎ_nk5&jk&4v94AlhƞGmd[%s 4 +ViU&M, PdӌM@Yp|U܈Aj6-f*`A3b XP@MK nU-njwŲ t M2@%]-Gi1{&xw8FfGt=qӒ%y{^ ;]Ҟ2ecVJJl%vD!_gZA[t!~[⍰b#dd)VXsRcgdifSs5uEn8sv!׌-p<U mѪ6tXӪ1լ '/A v R:K Љj7_'[) 5ڦ֚FD>i4$@;F V'qL5Eۜռ dU}evy-l0% VlIkIԀ,xP(8Bim4g0=Wx;gvs`PD^-{䘒K+Zg3 `NsH TMjl՘vc/TA/fV,4[qqB‛LhK3Iиpw'oî-,pU*d*n!V'ΤŊq6_2#%4 sAU FȯS^NhsМ_Ì U=tY^peX&dK81K{Ass!C41!k[ ƝE(TxH~5+(‘EA MHYnY*(ivQDP~9zrt>DgYUZZMY>-uC{;ҮiQ6K]^77BGDGTur%>R*xAy1}L#Wl-[[`cL?gs'NlE U_F\痍_[0ǵF^щ=>Blxѣ?=8n9[EC:7!+f,8`+lm2<ſZ(G<%pV3-b˹&KAMȪ?-ZX v<&PTyYʖUX^?(vUs؅ b%Sm15GoKS h ӕ7Thb|oqIS|1Kם2t=%x>;ʖPTKNgle#jsz "bJK 7$ ŁF0`]?UiڢbBEQ@>)e6_ʼnɄlecO'6 W]s$!?[U'*t$)췹^#uJs!\v nܾKC|ש A҈P}JolF'4A}})cEAgj>< -?X9PqRUɄ H2SAO 6ƍWg txemUX:CӛC>>0S<Q囃-Ut·,hD `RщUh4X[R OoY%nR\=LkCӪ js|n&Z7PMH6'cIcDFI+Rnyi, Kysʠܻ.?Zݻ߱4ۈf'0U:6Z4.%-|L#J6$ٜ)r ,RE|z_ˈ3:TQoQɼ,ylǤD$Զxzvcqкt7Gb `'kU9TR%@ܖ\Cf./!#6s `| ;q*ApŇ$*6SѲ'~-ӷG'hG?gܶc^q); }5"Wt&}Lݣ5D#CuѠ+HHFJ̌+mOsuJ4F;*}|4}EfATӢyK{[_Z[{/"C `ifVa6؂TP$R 鮮rqγ 4T=-|(WLAlی` ATL)CF]zX4ήPxr#<+iN'܈nIG~~f`݉G= pGl:B)|}g I #CB =lhn"B)j~꥔4Agaf`;XQ'B*_ .cv ZjA荞2mw1FJz@nؠҒ(64B7Z:=Qc,SdfbCЉKj_ji]Qw]_h:_!EC+ 1x-cUM7^u(ǭA!l2^ uuhjl2%c}{36(BwDZG J$??]θy.*e/yiv2UJA r:[@zOIλ͓ 9C5tg-%0v355jV 0$6Uv͂1ۋ |)Ljn } PJ/z[JZ'!=*/W>ܝbs%/ag|}#l7nH&4D񞧑uqc|/ E8*0gK59Q 4~[Oxk mliJbMkLPNѶ<+?NdW_ K- ߵA"N !+:o}[2+" Eߡh/+dwO#c6WV*$޾ {vl>v<6!זo 8I8I~ Z,;DyP"7]EF-3vW;J|Zg㚿&|? f'n+{;3(I^G9q=$L%2 nt&6&+8"^,ΗqHZ.xUTyG7e9?\n0˱ҥl'NOa{$\{sǾK&;13-d1'V뿾 /C{2U<;1z~EdwCX𥖳8._6o{g)9/tD (6_{[oߜő%J^#7Rjm {|6܏Aw]v1_n@Cw៖Us6.:[б:[бGWÐl!tgd]2|bwT`o߃}=C:_W|ڥ̣`~Y2ozOLJFgY=c^p oTĮ;*&gsۀ7bipyhOL_"ir0EПϾM]oեg2efD1|uګ L 3a{Xڷ_ÖkS{|L׃˚.kEFjVްF͖S{ Ç3<ĺM.)k̬ܕ̰6L+cn!f_B3rC9S0:[(h7mRbnLCG MdnbS_½R6A[ ϊWWos˷"F׺WzTfg3@źF?pu[> a}UJ44T5p_le|ѼKm^QjkضD&}z3A%IlluUVg7x508'XгT/3[)?  ]@3'c27<ɛn **:nF-߿ ^3뾜hi̿VaPm[GJM.Cfz_#E[֋mlƗ:޲m}B!"Ml%#i~)5qrm{`n[p Zfl'`05Sd.L-EQ.\Os!$ۺ`MsM*LTK6Rï-ch};z2yu˺g{굘雪y8H[[GC'⹂cᇂ+k-KF`sݤ?p7Nlf&o$܆JB0Mរ4U|".F!.0[WjMȋ|y-Ae0@?r335{!POLئ7 axɿywZ[> g`gjBc:mѪ--$ ex'䷸^\ۋ wa&Q"aǺ`~N9JY nwL_ >8Lf *=@ouGBa͔&־"k o4X8Ȓ^V*x8,H;U3cvj ;U-tLeSNlҥ|]\H*dSh vJjU4NN2dW5MnwbKpϴz/L}C%QE7XU˦&iw: nY}5<"8/.kqhM,v~tLsͯF9?w̋b5y&47VR[/P?8UWCv* @%#!Gwa {x[CՑ > 6btϽ<|0-"W&I;X/QB?MguUvPܾhyDDŽpg*abS <8]-ezzM[':Z*Ob0Ø{ڎbDvta4udt s# nw PBJ(o&ʼn<޵5.B]̰^zݢ%~Iq[d~mjRrz4`i^M ΂d{yX`Ƴ ϥl 8`( #NŁ=QtQ.,=1T^ u'QZ?%㾿y?el& nX2Kg=,i\%!v\dD: )N|a;h;Owwz幷/g+B*Z"xor%ZR`eD ˽P:C\\f7,Ec'2^mHDdݑ'3N#YʣN"SUA~[ QcڊhI$'S 2SDZYw".IUKa~NӸHZ9> Y ^M`ٿx@=7((< :,OghN¥袖~ 7'GnV9BOPM{i #Ì*.9#Hi3wp~i@3Ja.B:Vti"K~F˷c$'xϊ[<k\ŗq d@̋n3AR`adP-Q5%3Mǖ-$3NFq˜ T|I:$N_ %Est͡t PwQFStfݥu=S !yʯڂfsS;:ea~R6"9UZ-e6BRA4ѕA@{.#&n(mu[ i/ft pQVĩ gs 9-)M1KeQ$.߫cPUWp"2)#Tl,hwE:A-VlѽD)zh՜/@.'N B+TȐnq<2ܲ;@:Fխ+ŤPzIF *1 ¿-$G3$q0}!谞A)Fl+5ya>գa?/)(Q!#ݪ o8 m1 c$À_ Cn:Q euR,D-^Imm/6v2BA rWNuӠTFsdLv>NcU)LRDh$tX[X1eVYl$ѧ|mu>C60Ge#O?PKRPYʹ$()setuptools/tests/test_editable_install.py=ksF+pmTHȒKV)ml]9R6RT DID$$ƥs?uIٻ {^<ϊʭgq5Ί]Vq/."R.ָ0˗x8b, 8K.k'gŌʄx8MRV(`G??9>:㟏Nx<Џ𓿨Mu]ĹfҊ[IU R׋d$[EQFI_Xt=el&[|7b1$4a6bQ^MŃq42%)<',*^\%Egj*6Gb$<-yݏVQRJV"XTI6 ;7FH<މzOPf)r^4DDpa*EQ[[[9''7բ`A5/|װ{?ci|wFl U';8$$^?]ޙdl*>6'ALف|eV<ď~>#L:4įlXU6uYQ?.l-,rn"f@5.]Cta(һhΪ- 4&9__=b1 yo,`8XSVrX$y%N%b㲚3!Ah h$ChќL `s",qы4q91{vcTwO -FeQgsCwӪIRM8 K?J 4~Р(BM 9ʞև?Nfgq lE(79.~::|QXUkZd%8Ӑx'6D asߔpiy̲xOl1bvFw;nz vK7zJ="|H(y 5(o2`  vXt.l@{ 9J𥬇/ =j><z |c8/Wuw(bmɉ1gl"+zRgl5Ur?Q$DDdAۨrw4/4N}}g^8IE)OxuTJϓ$Bzv`$Иh !mB^$y ,ne$oNP{6eOY1Ÿmf:9:ctW8p,(hr%t}ex3Yb(\Q\\n!,=;ⳗ/zY`;~g_|RϢژ}NDOXqNFnuU>d-_*v>#:JQIUQjG訣W=PΕpDX΃{`Fݒ@$zN3p><c'3I!Xͬ4㖨ٌX&|We48E2J > [\ϔވ"^IŸFp Q %چ"rB -,>f2[4uZovm6ᗟ6AYΑBOKd ? Wi%G4:7S_E5~cb:hQJʻΊKZw5F~@ jVgu1AjNސ! `594|<@yyu#rpʼHItz6E7L>3"ٯ"Œ}Ahm46nZ(i-f#Q yt B醚1>OhQLˆ4D7t+(KE\!+Uiy+:׵?WnGv[ m cA{|̈o_٪} JKU TlzyP:].|7QydDyʝH$ym#.{!TA{14t4TW{?7!9\XZ. =H u:ԢYCCæ/׽͔[Gb׺?RΊyM'obJeׂҩnتr"J1zn _utQTn (NL5*'~gz)Lkqq^y ŗL5Blo6M8 dI'I<';Eh&#QDgQڌ~+9pSUX J^֓OݒY)G|M'PAU&^MqSÇ^aE^0A"IbAL]#[ads(He4q.oI=z`Ì6ٗMvGO- ߀/xceN LVb;i'=0^Dh0^4~@Q2}BI_yO?xKfI<15ړ%faVca6^}ɜ{UEpW}*TMp8ehXbJk!|;|ڑؘ3'̠>UHг*Q䲱rOkO.dPxt^ zJގBbE'Π #w=RJMzT;:ބoAE hk۫7ӞI`{&].UV, yL Cˑv]ׅKԷ: hf$="Rr^XWZ.a? KQA 8B1O܌@ExP k${oLD^۠S^Gƃ@PqyZ^=`ZDf7ȶiݮ=5DzXv=2_ ǒB?-:3$2T9;7vC4{ED6Vy5Աm;qM82%6􍙻b-$FA}aj4'|dz2Cs?Vq &HojS<_a6gKk9GVE"oo[m`Pʼƿ}r*Ѵt[RiGӊjBGp5 Zg5r06T&WyeCmq^]*}xOr_|VQ DpaW-0dp#)jZWI` C-uJƽI tWKpȟ|4*{Wl+Ce(aj72y/jyc<ӢjRUE2{wGM7uF1J1JLO%*AߒP֑5Wψ[:g\(kT*myx 6h_yW($-`A%!KG<>'3MUHMb)YH{;^øZ7s*k<|-_ߵPs%1; Z{wDP.@3h`V{ʼuȫ^=_g Db;<M_SP x8` {0̀ ӂ<oCj8;ȓ5g, 2g,}[{k333U[!'qval ⹙xl+8fA]yVOi`j6XVIٱ؁i?Dk6i۵Zk&XCe6imm$9-]r<5bP  Q}hFyՐtm1tR_7q;u~Ӝمsمثvu`ē-Ϝo&4 _:uUOE݅a8]Uf{ƒUъZ43+0Jl6@EUtW{ބwB>mi{&i&_-5vb҆)\o'9s/ɳm?ހmPPRNCV666hj8%5#GUbJY%L4+HP$Vg +ML9qlց]h.`ĐWdA&O/a>&+ ~῎^]}wx;OmҶ_Qdm\Jov5J=$0w]QHѾ$qmӼwrK0?r|ۊYYKOs|kADpu v ,U^U,@`8#4BU;WwG;5: >jA5 P9A1\.FYyIOH(k9-6Ё|[O"=IdKa (jΩpWbu"H&ɦXu{ex$!2Ҳ/*#n iI;~[ Z[$l$t^ki%|oZo:j}j6*f}Mo^:A?YBW~\:%h`?+rgW`ًx qr#Ӽqdzo76jZ2y&FpPn/j'q!eNJ9Q >R N`A.Ƣ"2\@W9n{@opgK9K5=nS>mӺ҄s? 2cYϼDْg e(Qi2I-#@pj-8ss-6E2AwSS*}+ۥrk uȣZͽLX qqw$ 3DDN78 a/BgViէGN??/lFmq=%-IUg5iW(tJBQ~+&|l <ӳtd7 wHс{:^&\15WB)*bڂ!@ ݸ䊮H*P$Bt5Yɐ9v`sͥC,?-~NJ%"n$׸mzhBy!гYē*Zm =Rrb2,XEk KӼ?G<[0r4txʍX|BޮJi]+])RRmwJ%@"rKmr1Kq5CshpRqZ0?C#AΞ^7N9u,Kx(ϧG1XN~|gtЌtԈ],&M*i7KqC!A*c0!,y^Jv݆g6v]t- GNwT H/sCi-*eςVj ̅Fl<%t`B+~AΠ{|;ÛMuky1֊CT9 %`lQuR7k /1(dSy.$ǜ~Y.(|/!Bb*|bRFD Ylů.м4[~o^p-CtU 'ڬDMRL,m zWe4JfvRyQ9*jYcbHyGRŲ(WQ[xׄu]ʮqw?BM;-%8^ʰ=3_AhF""%x2G')"xZ LIbE9^乽1g8Kتv}p*~#Нxpb]O!N\e Ǹ/;Zބ 4Leqc/i_-a9 ,`P|p\䖠s/mWO)5`viI\~vV c3{ЩcVGɹ㈟' R r5MGfi|D̗-ҊA8ABwrJpP%_ :Fwb}rm=\ OTx (-Jʨ\αy:*iMx}JYR S[YëG/I@gsD^m𕠨cF\\Ɋtz}SYpJeढ़%AG[ PKRPY q!setuptools/tests/test_egg_info.py=iw6+0cMIf'c+Z[N2&Z&9އryb"q~(uau(5{QC&4I<@@ˈ.FQb ٥ ɓzR8Gڅ0h>!| 7Jݟ(uYbM2ꃁIi4W_'qT&88 F#h RBTaB#Nf8I`ȃ=h-\(i>b:{O C8+{P99r4 bwkm00N[&[<=:πY9F֓ rF% c I`{%*y?1)Nh5_0>Y 5:f+ [)h,kJyզ^]JQQ%9zXW-s`EGG%)wNj5Ii\`3y5I kt&֩GlZ )vRvvmmhҨV3]X&Xv5) <:'úVm)dbOt;鉻|#,y)Rg"nlI4~FOx4GAzA bs-[HN=E12u^{~|?}& LNzT2XU ˨W5zX 9>+4- m3gaRY-SrFT|FONdl:' khpX`*>ɿ^S Umx*fE,{&К#rs\zoD{߿ _$W<{YP}Ӽ4~|IEFF#SrX9%u+< `^.2m}潀ULNvӳW3t u_cCXjxv Tb=SkF./i + m(z-bCZYCf=eQ0R`̘$bdqٺ fCs.gϠpJ ,[ s󲄎3ƫ1Wc@F X{(wqv1T-Ag}c]&hr t(\zwkObkzMhtp~qo( u'c:˜s̤2n%ݕUXaU_`'4̛VtON@\DFIလSS.3ַ}Qk aPdd0giF##r>y4XuhgY'uU"/&(#aY cU}'Olү4Jl:SRGr:ap Cυ\EPT4wVĆ03 < 5(.9z L=0{ >yLv39gl==r8[10 ,G#v!y@fsԹQtJc;z^z 򬊛TŒȋE/e_,&~%_ 0Qb3XXw ܲ[o zYB*Y#!9LπN3vִ"0ϊ'.P{KayQ3OnE,TaݴD]Kq;%da~ϯT\owvOETjc6{6QC, BLTsJj&" iyݏZW>)!(`{\_)ⷵ""$#ʂǫ.g=Y2C G5`~:2G@J P{,m̩&(ÖeԷO<q ks*kܣ?>n*IwdNUY m]b,UO66E$Ւ"ȥ"т(W107+ҊYm!zZ҉ q.!:'=A_]@tCV: $"_C5nU(q2ܤNjy"%1 $vrNF蕜K4KL@+W yЄ<۳LM5%s*['=r.ݰ"mU°>YG\aP5;+5%jO|X27ESe?Wį7Ŭ TҹZ6.sbQu2l8jx#L#R;J]izoPMn4S"bV&lo:9Ok keC3pX,9ء?U|T0DNg`;`]6f !o)%[.wKdMS:lkX4Hop͍Dۅ ۭHbE02 -9CKiEoSG8B`SGZY`mL"{#+ JGSʬ'^Sq&Iz;|Ջ=uSCnýϓ8xp6b>]AMtdqpLq3w|cmimy&vZCfHNB{lAA:FbW7Gn[C]qQ߼k%Ж; sӶ ܒJ%>m!~r)llg2FTxh[eTEg)l?rf>j@#8[լ@xRh _IQ`f ,y|qdA{ӻ@%vb e%/Rei0g> w>KLL+%Lw|a˿[5Yg".ioinkMYVV]#Qa|Em'tUɻ__y6[|d\,m=_SLCž>.i3` /&D] , Mҳ戱wԘ)07VwR"f{!DSQN_SV:h)GшA:k-Z!K30hܐ5kyCb6&Po$>0sm|$k+ZS5YL2.zєmȪwn x#qRZ0eFXEE$cYF~yD Xگ͝C ?_,͍CX7=IfcJk3M[I_@$A !ٖs]wqUavGk6b !B HUyS)-Wxp5 % ?c!sj[;_~Z/2L_]I/c` aDJ_RǹJ!zzq`w,E'QO?kcܮOTgxV$2I'bP[ܣ֧2*'-&3x>VR,5׺[fu-VP|/ZJ Ɇw8T$Y0Ք]RիmPutM o= či8) Q >: jeg KSJShfiCJhl |\U)$] Ѳ@PMK?)%$:< x< _ᤷ9-{F7;~iS"6e}juVɕ7szdqxiʎ%:..ӎo(ҹIX)uI85 =~A~>T|=1/Q0!xVC>Ї]nj8d{~lyȏo|cLu֬<*$},F'Ecrnl S5Q@p 0iEۏ>Y hzy0*4(ʬ%eh~&vI#-J238`I5௙!k0Rcfk^6 kIj %D$Z{LKv\=)K' 9 ';Ύk]a}Dh64xU+[`ZKVuaGG{*e53qJKs͚mOȷVt)qD ;O_;kAi?ncsٗ H˂(s{sfNإN,0z>Uq9wnFSc}"Uӊ1~aI_c]OKlz]bד]O@@ϖҸlq e7I1xU ӺܘDx$. ‚0UU9q]z)U,ꛙyvhb\0z4˯jtL }/Y3VK d,Gtrr)mMfΖ~rUZ7\?}zaЊZ\K"W)72T]jd!Xş1hMTMPKRPY (setuptools/tests/test_extern.pyMO; } FX2tԭ@$8~F4ŋXrE}Te7t6JZsTҊzUob47Ylœ`#X6OP܂O7f4Y\DkMv8RăTwr! KN!;zl1PKRPY]ȑW&setuptools/tests/test_find_packages.pyYKo6W‘pE -=蘵$"-;Çx>$&̓3Ù!=ϿpɊZ˜i%I*T"yu糙KYi"i;X5v̉."ny', qd]!uϘ֟,{畓'2/?ftϳ1$cJ49vFLs2v+bKN^"q~H{CiU]W HYʧTcuyӡ,$ F܏"[:oA"u3232Q$؁{HiyLX甎 O.!cz;In:ko=J(t(фNv-9 0 /Vd)ղNٲA;4:8 ωqȎ'<9 (fuoc[8sJuiiƥ!b #eB].K4V$m6ǿ/ n,xL]g "U?(kYZOWoUlGC@Iy5ҧEdy/edRfXhU 9'K+Y\8X s'.j$Jq6&{o[Plԕ|gx Em[RRH"^LSgY<_bNUȮS1! k^QQ:e_w*y"v+b([[M_ɲ, b#^PӗbsQ?:ȁ;0Q= (,y::׮qŪ-),Xec\&= gD^ m7JS.۔:OF86z2 ZLTcs d iʶLFZ@8F!,Lǻ;5/rm{Ͱؚ:x.B`s;(r%)Ylؿ4Ye?)oUP5|R<o oe&eh w6e2W#Vm\<Ӟ;5M`u.Nfdg.Wʰ&wH ^z< _-=c0CkhNb eXX:NwL!uF$va55n/Ҕ7;PoI?,嚯|bFtYW^rbeu^VjoCz)mo&`JQ&V}ʲ'vTؽBVx g@OmT7f?ܸu%q 9FU3u8= $h~c[tߥ_rU.% J#/#U+֮\>;Ν:v)ک`z iۇp`NZfVݝ׉c5VGB6 j4TOJJS1|6 !YDo=/ͯ8P/UѮ؇ȃ.d\PKRPY1Z!d (setuptools/tests/test_find_py_modules.pyU=o0+vЩ C2%@t(`KQ1!TI*HQ'Hj1)߽{<{gT*Hk STpC=R%hkf0QEEʌ˦EVf*UlW5פSW\Lh 0U!6kX2߱>UKB+rɤi5tE& wy`%rau"K9w~ΫJPh8+!@rDכoחhFrM[a,}F睢>5EaԲ"אk8/lCaewY>ub c<1=Һ-;!o\8uR#Eϩ%nA/R'5/VoE:j깛lľ/2At5D7qwHPeL$\a:MޏxH+S#0& lG⩒O3 Rd QU3EjA뵗7Te, 2Jdn:QsYŠF͈Qr}vۿBmOhg= lrˆ͜h }¹/}GHN=R&1OEa]CCs}K|?eS[s\F=w 7`k Q\>X>n>!?$׳Y0 ڦJ~D҄uPPAcڸ/Yή 􃗜.PTCT] 5 ]eHw&sK;cݿNPKRPY_KTqsetuptools/tests/test_glob.pySJ0S$ y'"inٚ&$Pw7?kuxo.r*VA9np +s;vJ5nU!\' *9P1$wFs ?γi3(+wܢ,vL`/$Wp&IʙoSvI|}ocaכ<%zyohSAwڨ=/ux7?-0d#n*lq4P/?$kapk0=NdI] "2ؠFb7GTzZ(ڈMn30k7~#‘ۉ!fvψ/PKRPYqq (setuptools/tests/test_install_scripts.pym6S\D)+0 ڱM1}hW\Inwߑ?eh.0C#'߉H(블͍( Q8?^,J+i--uUqU`g忸ºo꜈rS"ZxK..:XH[E)^aZǫa 3mVkM?Ŕj}y>[zRi=;GLw}HěƚMTU[7R\nBmGbY_Fb$e$߬VT18_QNهF[&}9基*nn(txY-+ TփZ.TOy,X|65M/󤞁pUXŖΏB/v9\hÂJ(2БBgb!Z"jZ1iO؝9l'r2'|/fֵqrdDk2G)5 jt,IV U jW5\%-k^ (P8TIi{th2 c+x,FRѽ8M8M4! ){߫7FCnB[ {Y5((;.U0,`.JAH5֓^[l<6IYO6!?iסmP/k?ͫ(i³PD|aP9ãܣG1|wh[?PKRPYlߴ/ setuptools/tests/test_logging.pyUn6+!e7FHm !HF2cwHJZiCupqP6T*֍Md4He;(ܴlt]KUOK;d KݧOdO^p 쾗Jw1?cȅLy&?\>fFJtv4sY+̑u`3o`jDx7 nWoooioso VBEBRq[!k V# ήbRG 7@Bnd&H!]=Ȓ(Wrү8LҺITrzQ.r`hzDQ@C..Ry0LS8g17Z;BB7HU$GxpҸw 7Dz=jGoEl #;gM&?X7g웑'N]JP.1=]}MczVe(`(J;bt{*t }0EQ~=bmBUJi6zDJV *I]C"X"RYaVUFqcsAt6E0e:ϙ_tMT1\y:#Mil`l84AS_aՏZn 受}9κJ&?/#F".z뇤ΛWWylfcQ?OW̞^kK +x!zRg}8ݐ kWV0ғkVύDqL?bb-zxM*YcXd {Kl{]r5 ɕȂp SlἒLrOʍV@IȑʭQ U@:1MXkh,\=o?63FPKRPY˪FPII!setuptools/tests/test_manifest.pyko~ŞB!SKs0K\IKRZ˷(S%?be>σ$1#QOCA< c֠&)"PXa^N~;""%ԍ5O'Aw(ӇAͷA#I$I,YJiK Kԉ,, SvX= qJJ!AM9 4Go@4._P)h>0\|sz(Ey!`8iF0zXbORcψs}H#y+#%^Z_?4ٯ OۉqEVB dB~9 Gw}3EUlg4o$ .VkciV Ho=(ezh~AѼqpcrɌK(]@ UH@wܙqRHb2T ~R sԸǃ0.3}~í_pݽIVIm}{o_޽{~/7#_lcE M~p`yGؗ~_>ӈ")Ě11lz8(#{caOB*ظ|X/3NI ߧl . EBigA> |nX7k>)FH^A45!Ɇ\e1fZ.R/T 9a6dn-Y0#ʗp߭rTÂ*9JPZ a-y ʅ QzezPVCk p 7[[e[u 7#HCެ1 :f )c05(2I B6JSMS6Yg qUs7k 2 3gbeo$ܶڤEV=R'2_ s,_A3c5 49Sn7I—t;Ӌpis}؟Ic`8MRs{ C!YjP X2ɜFrUը؟%=%ߕ-l_x !^A]4] JSo=KZtRSz5h16uPqy,J !ϡֺrI`t#QK"qPk}D suR܃7!/,˱`Ił \ }<A:sR1>낺Db8ZX"sĀg !!  Rt4OKyUtQ^NgjX34 @ldNAb/ +J.حTgNq6Ĝ.̈9MY}>ѭ5R z>HbkX@;%%$ĜVE5ƱJ_N|0⻦ę'y:Cбsp2ZW+:_ ɯo 2Q.9(e0jSl"8lJ3 Ȕ' jN3e7PX U`$]魼uŤtV+)i73o=֣p'fuX7 =xӘ[i=, xP2Օ*u %;X h_.2]+jj kZSB7PrNFrj.]6+?JR& ş0TM [P " 6RТvg'؄X Y_8-4 mL=*TYf2K`>pk皳 #tiuTsiLR~ j:>IfÈU;/Y[P6[c`) _5[]"|zϭJ0O4L ]}vqw5a* ޚjZ \ҤƱS_v(s ,/@/ja lMR*%бw{T`;GIz,rh˥EQS=+CgTkwLa(fuZ͞tz 0d͘^#ʳdU>Geu:nad@ҜC 'G7\ \ Jiui6x}7tvԕg.qLuJD /+b97Z=m@^G[e?]%$]n$6|ѭM׷XIH Ζ?Jninɤ /-^ro䔆h{j,` 9@̀u\4QU Klub\H \H2#/e؊QINwǰ..O;1"IO:53E) ;)z&4,*v,LR0I- an+Y@'֪4ԥNnUOL^9IC{V@$Kq/ v.DcaX݉BM4C컂0{|bUïdճԁ< j+n7yA:&HZ{5YyyZrZZ!o,z#VUv >u7?k$ 3`0w=`ͨ<%&ljD!d@q tW@xCkvC 7{04s lȆ36sE%ȹ }݁!._M\Wqb;tc^\;]ܱІUaj2X# uCp5#-'C@sbL\BnVN .;-9J2p *d+ʐ㷇5ϒh {gf 9[bߖ;&.L,Yar/1Xr( l 7!$~ HҞ["Lu=ydbDJgqn?~Syosў \iɤk] 㒝6h ӧ+u+ ,OQWsw J_n'.0}J It$ 9WGpL]n Ӂ=a7vqQ Qpkw$_eB\[cd>+Z2t.C"D9[gnǬyl!4ZUEH59v|o9L(#lx?p`2O,it>qo 4N'1׷׉Fn[Jɩb|AKܦ6R$jG#1Sϕ0燨f->[[wr_k*ql%_'~5X'a/ZA0N#<ϒwK(kwϘ,YœnϾSbXu|$y)Vpgt½]IqjRCO!PKRPY_?F#setuptools/tests/test_namespaces.pyW=o0+ pԽE(.i,EuTK@Rq{%Y2`'1`H=IVHe@a@k[+FSFT&>k&sVM,sZg N牔k ͝"\q%/1d_>:(2 EsNH`0~H݊r0ENh0zݰ%eRր.hҟpVYppng9 NO_&&6hb?AkJhmEj([jF^k;&<*½Eilou瀱'9c7ڨYU!$7+w b[&bW^3Ś/+O4获ɨ=kd(Q+J5F"N"࿾;xK^>ѭ.םFA;%;(OoZvȦS܌zًFoxi9o@ĠKfdv@u!l%Qb鶩VXz~wYPKRPYL #%setuptools/tests/test_packageindex.pyko8{~EOrȎ7iW"h{,@%b#*I9. %YO;IY읋25΃,S!5 N/,;<_dä&׌)Hy ^h oIWa˟,BDIwC>W:jggNjR3Q" \V, T.HMfBcC&qg\$3[7FVw}&ã't LLz?/) % fB%b<>ИW p5 ޟrbg @25DJKC'2ݍG#e+801˷.H/ANs]vF̢]鿃3?gq"2/ b'\5j9CEoŏy,|AipI0F#R+0&&s~6VR632F^ԖU+PMDaF`;2(2g#" pN>!\+B}| jf[1(FBvl,=N w2ew\/ >DA>K6ޢX,p߀3Fȁ(FCٻT.԰¬VmRhVbex&A֒PlC3sa\ &5O"a`mr/y\,8^l~"r®1IIT7gIyYsXN/'2wM'YVI+$J;Ʒit8M(&X- |I3ǂd1#X&M LSߗ<  (|K1Mnqb5XY<6>f1up}CҼT<]iHր8ZLj2׈|kR;xpoyɷ٦P*(olK2Α?N91V]6Q5"(^riݥ\FIj[JM RN R@R {&vlvm]mˏTY$J`ujX2r%GcXK:U 5&E31Q+WY[6qTidyodKk%*h\CU?Zd5ホu@U(RWgָL2->*5oJҙ24Nl` E?N8H:Nzaz!q՜)Q "Z&m 0,5+d]C`YPdĪfSX9Ox`[sᨵ͡PKR npfJ% o,"xb_Af#P! ' HR ,|𕉘+qؾώ7FhJs= B(00.\*w%ݸmM Sf:陾@7>;cYv5U"Wk$vk3ArRq$`Zplt*. Z)& l^6Y:N%u4+Q{0\X2<+^A uqnn7<-:6 hȼKUh]Ԕ,드 PZrbʫqJ;4RCĘn D|@S#52iy%٫Q~r~R I2R9V}ʾcD1 NS6ZvY&&ܺvی UaAY?ݰ'qx|f(`M&ǓÉ?e~pzrx|w\mW ?xtʘLdAޟYK&qRe4YwFC#E=6xRZũ^qŷ'`kqޞ g7; 򓚿J "RjTxSrwFy"1S怇Ρ/"UЙf߶.B|)D=ҾRBWn%]\zE+QvX-5;sԮ;h;ŵYY: gJRYRX+aO, k'ծ=i GWnVvP@sJMV!,`%0^-GL千epgG/޹]DJi,X.3)ؐB}ū8D/A75Xrh) (FKg8ZgLwwÝPKRPYn5 setuptools/tests/test_sandbox.pyWM6W*JWC.ڤ[@)Mz &V&UI}Pp,],7o8( 8@)+b@EbTHݾs:ۭקm@ZYh0ue,u(X,iMnA)`gDek(7KbUU 7R6*nsXi%dG X ,֟a{0;Yt63]/_GfYpFKBtI@bj!Jd34&>t <(@.bȢc(Ιy pav. RIb$MϤC%3M%K(uDKSjBI=Coh2Fv܁v8Y熐5ׯ_.j^+m2ooCB;eAZ"%B g+BԐS"c6ygt pC'ϋjeNVC Zz܆Ʀ&.iObJcxKu9V0ntBRɀf.K[ERh/TFg(d/o_?z+ؔwV <-QgAn'4zSd}vHјchM[0FJ:g*a{Nc߆οU>.۵~^S1h*&gn2ݴVs&5#MZ]N؟c ƋN43m;BPKRPY~setuptools/tests/test_sdist.py=ks6+Hre*Ist=&s9}a(X%(ڌ?s @RivSMKp7@DU\T󼝝$[eŢ"M&$)͒|B[j!V irg 2O"qX;ӲXS5y\DPu O,0DdEtifkXQcc3ޑ(R?/ )z%*)2G,4lm 0UXOͪ|>I>-L0O0 /y$F6hUke2Y[<Pk+4LҠȃPDI0# /yqacAB6?a^%eP;;㣳7cv0dh7%Wac#~p<>] 꼷`=ڷ:V `ސHrx y;>OjY+-~V Oc5M0M=t :' YӓϤh‹B$7}&LY^ PUG ԃ(wʜ%_! yJ#T'QONocȨ cv.[ iAKyޜ`6,#Ei/zC[u1 Ftt5OΖP5m&⋊ʲ(! .{i*yPTuC(@VL,lh!o``o-Db.!Ӱad٥}NC}<,Hm<.yV\zN6֎%k @ʐaoh˙P=E~W8+J,& &z Te9mpCFR0a_%e3Y_Ύg/ߟN^s#jR7䭁 blxiU+4T1#0Ah0(UUq{g-} h5f8&o8}ɢ SAS  v X{<8qyn ^PR#L rHhk>KFzEh,ߗ`E +rtC%gul 6~-!e)Ux=ThR ߥ)PGl"jǁB6ߏh* 1Ȯ2@v½CDss7r.25 /aCX 'OVeuaIz7($#:ux-3p~Qn'"L gmm8ɒ4,L]3R|j@b\=P7hT uH[Ry8oX&ǃn Z^FH޸<ria1'ED %ZȮl.,h(AlUX=9fW'gNn{:xi&C\2`Tb&urㅺ؎}ż@>=Mv܋B"d]bgA{e3PiuYZؠ)n}"8}v]Cܕ-ich{, IDp"oizE!yx;$aHoW?v5#P< V1Yץ.($椈FaAeQ$ӕ:t)I5uMdgm47"R.Kb^X*qgvAֽp[{dV'bG\a}zy1vŽtF">gt34Y^M}QdNQQ`~)kkt 2c:ܤu, 4k_4ljʇP&`)8VMD`H, U,Vkís`cM0jpc5#xTa B#䛧tʼE+b~f%d`+ǖ Z(p} tC1g\d+SXR LfL] tC;N8AӤݳZU W,FnBkk2d]:GfR@VN-o{&?H8 g7:=;߫t5L梿)5|XECn˶CZ6(d\샂Ӣ=Bl4i$g% zNQӳbVO;{5_J:٫G3?wY%CxeRyqh"_TFπR*@N*ձZgY2k|(P*}G UD=d߾.ëe1Iy&$t\3pJk9gZ暗 ,#@& ~;2Ղlf 8.\m]ҕͱvhAK,kJpmzi rF+By\*MovQL@U `9hZMѺJ<4cTa0W#b??zu||qǞro{س7gߝͽ;ѹfFt$C>si}Y'WF$ %͸శİ>NqՀ +Ƌ#)1,9fWIC+_@`ȿ:|_$,/20k:%)Wdg9)ϘRw /׮)f'd DbariR>hI[p9`Y㍇FT{Ȫ(Չo[sH,ΤyIu-:_4jӻ: U:kc (FM XJQ4Gŝ;En\}jP|Ӗ9!GD\2 鶒2=[Pf m^5U7]׺V Mpն\>w(ȡnau@:|Q3`e0Pv%(# sª0a>^Leט7Lfa"iIJ,`^(\p1.bws6$d]/٨ordv @^C~F5 +ڇkPsxS F+Cttߒ6/@36 V^J5Qs~K娗Rk䖫糄r)p錜w( %~3eq lx2sQWmMzo%TG;8e2šOC_?i4`-?fj e&ױkYZ:j'ng]tM"]o>.3$D;bpp.!_T5W쾿p\ %[z~vQtIb,-YWb>!Խ/&-kr/AQ5A!#g{0ǣt(N4@@/N~/'o~z̭RCK\%?}uzvX*~Ud) ,@DL&ۍԈ~MB 8R;Q)MdoXluarp5xNu=HXRxzp1Wη/!M.Ow{5]qR/ʪ d/ ->%tTd $tK_` $ЪIiHPDzyƒ!r0 X:OTy=sYFd#. lW^=>:Zf ^L~{T5jh!98{CސnX'uR_Ads2:!"-h%}U]S|HM刕@u\B54)0'}ѷ'h=[ nΑB5z];K@Կjbⳓ1.tgoΎz7Rx]ޭTw]a/4f9W"<ܳCuۨWj4=uCop{kDTC: ꫨ*;4~`V{yJg|Ru9;G#}`sx._ϓh.9_u[ESŔX\ A9.!;tNljf&<$% 氊0t_?U& e/.USvLLOіF̫ɑH6Lߙ 0%{TƸ)"#1u)&h/f"\ HLTsĨWL]Wy] tsAZ=I^.)~ZZCpoe{aW cхĿhcuø0$hd ~@1]+ 4ţ`en.I5]Je+cEК%CX>E =zDZt ꠖu@r9E1o]m hbeLRS2s_P|Yg~v9^GQZ=ukkgU{]5{ `ƻX?1bcμ鯻A9׬>J3{9o[OƚkGL}u ݨe3gY2sShmG=h5: $/AX(şTœҢhGsADuEah!f`ޅrF2c!q#ީG{{>0?~7|k|O[7 ڀhփ 䁑?@Pۏ&Cz`NbkHZH֫dZ!u?&f8Y柮4_]!@`!Zgjޛ[oPKRPYBUsetuptools/tests/test_setopt.pyŔϊ0~!ِ ..쩅X[[2҄to}=z3oTIx-i|cɮ׆@hU]ύE$X}OZ6븪@nG$hAK7W %NRtHJ52fIk٢f1?133:| i6>Hj@F%jW=ի5ˀ[0+4S)SJCqu^%W KN謬9a,nW uPdLM[^Kͥ*K9CY,ȦZ]pWcj -)ql36ZEcS=w~Sא4Fgq'ut1|~ Lg;L VWM =u.2`Ln:~tqvH) Ic1ރ>܋*k{+C7z@ nT栘!?PKRPYŠU ##setuptools/tests/test_setuptools.pyko6 `W4w@R +Q^TfH-ׇdF\*b2R: M-[./+ yRy{ȕ,g^`įW?k[ @i.nOLi.E{m:~+q*&2M&8 g^-sVd@!Kz,3nk JX~ˬ~=7[Yv,8qKRYg 'D9Yz Nȅ!cXP&pa$A}X$*  :U2 Тn"Q{'4QN# p9C:BHγe:ـR1X,xZBBp nIJKR"Dcj)Η-]]W DyA7[ "-¹YT45opP":9y>s=:gD)-8(Rf,-d"򾣼>Si`?q~Q2v^RM)5[emZya !׺N@"3la uN"e<}8-fOq? @cN[>J *oRwfT 0ZCK 5-˜N81<Ց.Iϱg2E$C|}?1ַb'[|&C qHsNh ![{:4-v+|DsXMpH0jy^;K 2ZCcNGy~*1(gǁNu>U,|OkBԬ߮KFl}aFm߃pȵj|o߿\rH:ЖRvg)A@OR,@$D!+=w^OMƾ2bEHQNE?s;ʒU0/TNOَ zr9kal` @=<@'d#4q"bf\|נkc|9LYz@}vHXbŏ8Ȯv{`ɬ㮈{90. XoǸ0P09b|{ wC`)5:4 X{_ogmG@ C zIWj 2 {2}5)wL\ۙL OEopK:c8~ƻ4@.񌇠tЍ[jJws<]$0hk2;3[8ӣY|gY)!gkij+CzE7KvqM%#y+,i2BF?yPa?ZYt^inD89_tgF[Yۀ ׏F~˜]!>ߊWVf?jRV"q\1ftĆm'( Ӓ=c8NfclIz'31Ni̳Ytdt{t^2'YHnڦq鯼$D/.c.EQ+~uF0ױ3~J.Ǔw/qybғgq4гv.`/wx6;/b$ݦxɷ_~:94^$[Ɗ$L'L$P.c0xE{@&UA!ic#۳p7D!9i2Si` t8};};0 iJ!B1~ͮO*SYAM]~_^_& 4Vئf${T;f[c}1[S6ɥ"ދc͡ Ǻ&N@c kjI)ˮGRPTs>;-][3j+[ܱiS1SJU]F3 mޙRD-jw W̴uC4I=ϛ˳ut*<=;yq~~&Ak6W'{b5 bVOLȾĩ ^ *B)@ --rR=*OT)>M[Wշh,^& ,^X4H>c4q*Qڭߥi2ڷ&jhd ;vzy/h”~\Atb?9=IH` hzP!/Kp'>_[K㐜3o=kE7_cJأ;>LΓ(V`f]er?m&{ F;" -lde<>UZ"soHaIu臽J$l{ Y~ixGxu4x-Ug.l^>@YBr! ]fEe''> 1v=-o{WWrj0a-K0:hJi3 Ȕ\"$ ;v>H4|:󶾟1(.(QNSD q]s'7n%79- ~}n@/dI楑aA8 x' `~ Bo YT7H ͒ pбoSw1C%v9!J(;^&i^69 &<'W6\hd^e։]+Qu#Sѣ(rPԸ/O>ކkԋDtGjMduFM}D $b6'v,m N4߼7x%˖-y< I[$[$29<NϡxQ"ըzs_RNZm'I ${S[2Z lW.σ7PKRPYrAj|;Ksetuptools/tests/test_wheel.pyks6*OG8̥.}v$dH"+>nCi;LdX,MכH"z,JGb1JI8I ^'WIolg~쪈s"J0S6UcmL>aT$<|^^~Q1Ao1OB<4s\13, _??}cy2v>z>~Kw'j!wp ױ[% .]pHprYY(>{> |xZ`ktJ#VuHM7s[6 in9k@`A)2*Yog`NrW=KWl΂ 9Z%*.8 s] +(K+r![[3/Zn RME. nX3F7 6hM2@@#b4xO ZU?1jֽ1I2{eũ/ԘY)BȝW:ż\d`; ~"R .L\.B 5T)동I!3Lؐs;@Pz+cxꂦςa5[śj(٧?v_0Y=bmq8`D3(bgIRH-#&DSd8A/zʐr `E:.5T!X94`5u%|G*,'W: Wl㏤T"1x|X$ʊxd4"$#dZӢ4_qVӺ!hjsV}N#Xzn^:U&2s^mS[-KLWJICȢuє1+t!z嫉ʧ^biUx@ޡ(Ǎ34u[zŋ?[~O- cJ)tbT8d2`+}!GX|@ ``i;:Z\]Q]\Pt3l)͙B8Zz$T yfJ(HVbXͮRXE F :&] @l&*,s"70-7yW=~)%>{j8URY{+f8}XK%+]aPDx$3+lKua%u0 XF&SX:և(ӌ@r00 [Ԡ vFԙIzv΢fƍti t!L4Ը!gpJfEeAer$Ux'@NyGbd@QkM%[ !F(A28FH/do1L6A-,@<"=.4޾lidrqoO|[Pӧ-'oz%{b:qg}Y6;+GCC_(Uy5JH-%]x[bפR!xm`ıi>꫆FȬJྻ*@-Б"8Zy=rjCހ 9>x8'HR,:ob85Q1vMƋ|~eFkѹ x 47 7MV.t It8=*ܻ^ٜH K ӊ3lEZ [V{ kI~Sfw;m7ǃ㓗oȳ!m׀G?y4 a-b& ðEi#c|dvrݽn7^ݹO\|"`')d C{Ż7K% m N,ɬ>yl+L/*Y ?<njl - V*.c/~:tp`e*ۺro]56X0N)2ZJ$]ōVG%:SY7ʙUÔGg &?I\ \EWT^'n{ʤn'!d0j;`S 1۰UBtk;Qy13cIç̌ZRJ(۲5im^6, E k+((N\orqㄘ4}{tTvkR_I%orWbڢ94563UY_ ^6{X{~xO>xu~ݕf֨T喚]Y?_VIkwf?H^&kP"Ivc兛mVSK>N6f:#?ta7Rok_ZX5vlsz[T@_Զ̏Uٔ_S4wNmfؖ|.?uKKsNBe=D.?&GoB4[ fss>k%'lh_yoP% ~i^uae7XI. j9#:x=5^x <sb`͡t$(ȭ4*-/%޳=8!'N}iw>aG\Iĕ%LR֍Җ5r?V¦ul5υ1CkŃ%ە0&q, .7U)E0)?b6Iؚ{ sd)7SugK"ܾL?n\NB bd$I^qcL<_& _H-{Q E֜Њ3DWcN;|]YρHkeXf U%ǒ wL p"UȽkG83l^ϚCғJ̎Hxhϟe.H]/,ưv@J]C.@H^Z4eǩl!(f : f[ۓEVL5BN}: kui3DBnrWXIR$Xk*{ʒ8ne鐆|$.mOCAZU ¼! 7ZjDE:9"!oH _ qQ4o pOfy\[.Տ?|b8&iu $#Fn;8YLE^t*$Q7(RG7lPbp A6H; Anz%?j:dRZ!6cR"x1 Ь~/%8s3 /ժvZޓRɅjlYE:;Y,(`)e>En>wBu٬6C?Ea`L<ܞK <CfbTyZ*$,>BZ} -K]|o(y\R`}$cӿ)݋7QKX)B!Vٌ Ol?(FZ"2C;B h|EF5gO9n)- 倱7ɝ9ꈵ7ֵ9mB%AOhM{Yk$f8M0є vD3 υL~^Z)0Y,x44A`u=5&E7*Q*y~ hw40rHH3dzj.eBΑ҈2-w2!j_4e#l>"J&;vyvrn0~k ErUqu;nWὓG9vطG  h$V3*.q|hٯC){ \ z`s[`ž =sux$}@ d}fMH2d@uݖ3{!'A KWVE,*+AIrvꡟ|]yICkHuqO䶢Cm[Ysgwn֍llT/((VOWp@MSof8kuHaS-?{::Gu[ e/eke:GH)Eo3˜H)V;!Y\=sct i08AtI3DǏ6NG7ۣGgY:[4'G$NqO@:@ˎptӬg%].f `,΅o.R&T{~>~ 0/h;͎ &rB3`OzrW}/ <He##h:G(RǕS7JwcY%>xkzx1RMh l\(y&j ěSywO:_vH%yW-YKlt߲̍wsgcn\9d-@Kƨ3tY.'._oDg]!UhmU&MH &[5=l/nh^= YE*>EH]78Ǯ9PZHp ͨ6Xd *x7!,35YU4MmPU$:Oӥ_aN N\A60 /PKRPYh:K3setuptools/tests/config/test_apply_pyprojecttoml.py>5 Ҟ/|'/CMg&3,$7lnGG~A1#AL SxR3db%~HK_ӏ}ݏNw«?Wzᄎ{:Cm j\`mXT|]nJSJZ+kOULjyVa7ZB 1TL,*R$gkE{:$cͅxi‰+ma=ɊhbZe@҃V+x&AbGkMi%V(!0VLU#-ay1"f8?sB]NJHZ;2[Ŕh H 0sРF̴9 ûF Pe)0ąZX7kUE-1ZLB%~>OٓҶm됿0jP .- Ö 'U{M T8Q9o}Zʠ{AN RtCX[8·n&cXU* A GZ ӾHZ'CQ+?T 8J ӻ3wxG*Bk}nkaK 1 ƣe'9(mq1>G^=ſ3!񯭗7Iy]Xɐ'FP&zCSsHǤ4 mҠY`]jȊԜ"$On=mX_7108}k[TamFeg f (ِ$1THq76`$]`SFLH:85w{謩xQhB[qFA{?~_.Rn- ERG#?P*ED|hS.WSȶ;nYB@En+poehx4yae&֭~I͵;XRc2k6Z\I7oc0==DŽMp?$[clFa|0G'pw<9ɮLz&| wXg9յnzQȑOZo|QMeNj"X$NNغO⋚M@5Y!)eH7J Q2qiRS\c]n*6 YF}k^h8S3jJ5*L>Yn@^M*)tͼ8n~bkpa]2*rt?HΏ)ЎdDRTC<20¦EOtЪ%juP!搎{Yf!l*^XQc#ݬft5EZZf7g4Z{S3e1Gn@% v\eOX~a5z^-[-!͟wsávYā0~j%dndƄU =X K̗I'p|%UpMH8 $e2( FzύWT|-ޔ1$J:Y8j\|JW'5#Ӹ1g4ͨAQi%&ȏy8&TrYKHSj8ϣnAkefl5 Rq06N*wmigлͯ'AWq͂y]K%XճM;N?pkjT8fn`yy_?ݷCZ?S%OtOϵW[tgwxfƢ,&r떻85 w.=l֎k?>+ 9|$ADᲒ'_AŴ\a \ ͛jȌM5 ,R9ԞgR, (N<E\p^.-PvV KB"wMY(e$୬X8z16r TRDxӂR?k-<އa7!.vt arw$#HKj1U aP,m` @<,CC?iQ蟶 wn,LUr-bRYUqK衹|VSɰ SRӶ(K3#o%hWlAցv8 '%vl(e96XI$<1n+ &^#6Y]J]r@9[RG+x'o^R^@T{,=L<IBďȌnsIeC _>S sD9Q"q4.uW5_Őabyֆ4< @V,1k;Q8ӲamugC~NĉWOɵ3+Yg r ug/ λ>^ۖ ƽn[A+Eu+2ʣ7X}A= 3@w8&5lo.Qs9঩H&YRZe(:k5Q"uZj5nrF[.eθzmdVù0 |R'ayOX9F>U ~Gh[!2ZEj'0OH=%A&O4#:afU)p0eb$+x$$'#{PxW5 IZ{)3`{gq:;m$}n튕o`"WGV\%Yr 0}Ph~{C0&o[3XNArŸ~;Oz=*8Ju#'C %}e&)2pmcr`&*(9y^t)Kai9ē}+ `M#P5z+/ԩ{Dw8?fgta ʏrm0Jrd!XkF9e<.' +gq t*8T/#FqGC?}?|{ďD]1A6h?`_ y#P֪n@S-NFn0Dz( `b*ǹ0oes}{ɡSCshx *ČΨNC?]5Sp$/_-#YuP-y 4tbY WlMώΘ@`B.&.='pͯp̡HkAvh* a\T c6,b*y߲א!?PKRPY rU&setuptools/tests/config/test_expand.pyYn8 R'L@-f;@ٙ3@d&D*7s9X%9I5X&y|xV$q$bTnR3;E^2!Gz`.eQ"L|ז=4_v-HVϗQI-]Tr ,@ª]O;[)yhd+dъLTE!%gUTg,j@@ ߬BnȥZؚKZ0=jQR A +hiE%{cJXKoZ.{1 }"*R/RyjJ"߲=<'k!j?%z]K\1 }kpwgOghsħ6U]rSuZx[o2h=wKpO0zK;%N9 ͔ (u68XA@nnb 2"1OjKZ d$-_%ƱdIx\.hDa{/K*,dl4JPяP|R ;t5*d,D)Rf߈g]9lO+,F$LAYĎZu @xI֠Jf2M`GM ;qLAGmGyotMhD$aBDX#hy?QG8,EZ3Jo aE} iVtd9x^^CJ_+o|W/Cf.ܰv}]ٟIvsXj$, eyèj 7g4+SmoȯtbQ("į1^<ҿr?>rςEB>b eńj"婼7brAt[Ֆqd"gwQI@"` v:*N[iBX]c Y Cͮ(3|G&ϵ5tw?*2(BKpG1.u|쯏|ۯ,茏oͫ5}ϏQ1) 8Gfzx  =̴%m ?Y~\`aĈ Mӽ GMkZ>$?d3FǤEMq<|!pDq|p|eTn!rw(|1 WWy`Nm9hXhˏ9<^mVrZZ|ܶb; 0Y~-'&4Cǵdcm}TTKvOǍ@2gV,s;ds^4@lji r̚x4% O6^C"Xlb 2hlwU,mys=J~'0] X(! Squ{xE8u}8p0W4^Y'' T.-M'\L~10LS] 6"`ВuwWC\Q ݕ۞_Yjd"NXt\*ƒ:Vk#NUSR@T;#LԸ0JO] ¬*HUz1+e(g;ar" ZfU5{޽w/_=Xi:4\vt3+Qrk>ڡnW 0K#f[< L5Iμ{嶏'@_>bۊ&֟P!BzB݌ ߲-닦 fֽW(~e )KO!˕IJB};7*SˢEW7 @3XiAٲ>p*1U#8p7ԪAv vaqo]4-Uz:ϱSgC姳 BgF - j Q9ҝWW) ó jBw~>S Ż8oXͤZ1l8=E#þUunobkaPKRPY#6M n0-setuptools/tests/config/test_pyprojecttoml.pyZs6ο0g&Ze:4iIۻQ54LBkJU@|R^sPb(ɳBB8"KHhtjTQZ"5A Y8g^ c9)JQ̒8o57$Y!5U)d,KBHg)XeE HQ\ +p%j- m^d?(C=#m}\yo}͡*Tw>S>+#`,&7S%|u#(I͑uU8o.ɜPJIy"1Qj΍fEXBۂY"PhT]:FE"U%Lݸb_: QN,E/gm~Nؑ8?Q'HCP(41&z9?ag|#g +;);!g(;6GN>#0)%c. gl4f2@Y.&J^nB{&.=2ʍHTK.J-o퇰ztjF ѮePDŝ@{f|?Q3l@}]Eq8Hj0"< [ ڪG"klcmaH; S}p~iWgYT©%.aXUKD, 0y _V,d_T%Dw<"<3~ |hj}pݻ}lKgZ.?%KBŽm[;y&n1V=wrTH7ũA j:kCR FB׿I^!5~ /KJ# kbs >HzwoQ3Q*CCol:P>61N1H!}$[/]3=4ZFg$qժ}hHy$X!306$<*a~LX_e45TB)?.= $YI C)"ҲP & %/q@,aQpSQASЕgFVckbͱ3rDm=ZQ/j\St춈51ca䥙Ǜ,;i%WԳj*a"M j Y0Vgn# X!jf6m)T >=.*@qvoky8i;|^lZqA` Oh^*]ޫ0Jg7X}h֘$J Π`I0\2ç32d6k8.:O4d¥*I+&w9otjـr/~|= l PlCR;uΰfP^@pʯ'sdmS177,Շk薐b%n^S)7|o#_ gX.f8o5Ynk}045#wriaU/d>%; _ dٗW+u3Z匰Z$ zE3VnrPx$#(Uei?Z"U4V7>#vůɿX)~@oGfR+Ǫ: \2j?mc,ꭀe (]G[}OqC턇$ys?tu) (I-$+^1WCs(݈te]ବO^[uv(?JuoC)P`^]X2j A6Rx SU=a:~ܮJJ租_ANu^K-ZHuzJ}29Cyq6S bVi-R/y6R<Ǔt'I _]@k!2g\[]h 2/Nt8k㙽_*"i8m&7FfO=߻PKRPY[܊ :setuptools/tests/config/test_pyprojecttoml_dynamic_deps.pyV=o0+fjxk A0hd3HbA{G}X4m`X޽{™I-dX@dQn0*^8ՊB.Sc`JFkv^{TNi^|.}W䢊QbVRf,t&CiTUHMS;VI%Ӱ q/7w w'@q86QS ^ƤÈGp$yz65ݢ;E%U>[tcƬ)! {t u'|Kub'DT ORn =``< +o]_]l-MY&>#K<): ?@4v)`_0)IY̕TM8,N^?u*sԷ $KM2VIne_`䳹0]?oF4b(!bGySCޖS!1/k\|b0śT?8M-[%QEIAӕ e8 e4dGa{CK545T("U="ٻo^ސɁBWO;@kD<φ }8ѐ&YB$" &s}8 S˶47/ qaq($[hwʕҟ>K\@ȃjҷ|" }y\  (+'OLU4; d HI Emdkgák(E6*/ZR>CѲ*)Z(𽃦f*Z@#dZX}V0,ԎHO-E8 2HI4C߫\Л+M8@WS{V˓q dI};\2EJ tսd&)ur<y}l%D404 -elH}8la1YMV| Qt|K{ <;~AJ}OS!]M<4VhܤQ(ɐu'XXQAjF0*KQg*1+ŭ %4<ƫxRB V7̓fMaz6KɻgO^=P ]P(Vq89D9g]j*M"yww"6vk0Ns? ωh?,#UtM=?M(`3B'Wq1% &/+Q͓0aL;%$*z_Zj=4xaF[]޲#~ FoY)T]{=SV&4(P  F0tcԠVl84._wcv*O(C˯P^WC;βP2[Q)cK>E1>zpNɾ\-t S.ިkAz]'jnuA]lY| cͶKZF?<ۓ}v?NZ DZ8)e$"фTpP [B,[pFC4T4mӶg9Yr{(!JE=e$Gsk  wEGQIY9/"9*kCasF$l6%JIbqwy9kДs9{B/f0s17);IOY6ݐ;bOc}$yqZ rxH~ y3AVހ R|:5ŝM~mmԛ6vjASWK\Jq Y%ݗRuN VgRf: C=B5dU=E?ݵgWF,wko^yx!nE֣:b Xodvs}]e7٥q]&Utݎ:4AEʮ@.8ttl10 iAyxNT~|19*uZX"k*u&W*oLh4՚^c8h޷<:wtXŚhxSZERg{dq5ţx;#fu `yU_G̴m&؁Ĩ6RLLY.Gk9/:Mir]ؿt4ٜ%ᚡ $o/}ןQΡonE_la@=A4&忾_l#Ow/r{Н!C=5+m.NӮHU~agUSA M"2AdhI*c2lƉ%q_ƳC Bf1g;?Gmk(k4FQwqrV7wЄj S[q 6js f Ќ5K;ݖS~;2-ӌc??@p q>ĎŁ' ~LI9 mdG捖V)?r5K*;aW4B8vNk5cF"y%8򐪇L*3>kٶf>YJo-<`NV{ #ؠ'%uCy, !yL'N^Bj<9)8|)и{uf#)WLn8( 2" q0I71',cF`{>pWNHnl&t03h )rI^2} =5jWL߭w.L&?C/}\"|FKU#Bn.JFrF`eF䓇32 #2d#=u{LAVԞB2M&=n#wd鸭ו`ԜAfrN'(;WқUÚlգ J;op͝ hD*8PnK1ρ"Êb&9tչp񆏝 w4c4Hr LV{>JԻwe;jlTlT;2vUu3qq)-P=,o} Io1GjЪ"$Lx}xcOCwX=>W*l lYqL1wfRC 9a(>:T *LsuBhO!<:ON;\rt:9H.ݖXy~1yUZ{׊8gs<e>QnPtuZ];6[ϜfdW ^; 8k[p_615niT딯~da+]k'`eӭW ~ԓ"mהFRQ4vZ~s#BSAmr"VY-{62G#ͺV!BڝO[H,zɑM١Zp?wQqpㆦ69nW5u2|"tCJ~ϡ*\j< Y=頽k)!8~T*K7\ G#/Z4ꜜख़ 9WJ32Yu*e;2y "0b ibn(O&\>ޭ)fuI{T O/jeö^'I|AIHD*%⌥lY=g):vy[v. 2ܾM 8؀lNl?-2ө~G&"ھqi:?YJC5uVS0%nȼ˻K|ef [H,8iFg'*a1ekF#BU"d}#д,)T"&J: ""1(r꽛L`?zLLNVfN[GwEod1DrɄ1`,`ڀ6ͳ`bh6QF}`{|s `O{2)pHZ/@m}}]ԁjĭdTa+*}☥[E:tZLXPإZ' CE0\zT{],X?ŜjWnyP㓏 Ӿ־PS9PﲍcXʶVڨj܌W a!<{}.vaC Ғcaf+י6|v'jݝbCr{t #$֭xڦbg5A]k}Q"ⷆ'b,-J\t(;8Kx|йλ?ƀҐv>8Mbֆt^6|lN@&{@f4),flCEtAe pgEBQB;EQ:G1wd#d P~A Vx(Wx^!hDբRXw*" t<~FǺ@?`Qs0+ÐPSP^ÿ:~M1egen@.G&b8$PqA+qɘ-xfx'xkO4.rDf7XMd:,ZC& !XCvQAتUXFsg03SQI_}eqCOs;qw'[ lYr.x.PGehEK(P?kFKeN b5%*Eu8J˔P8&NAղߚz=sկrSbd󴝤2Y2'V~Wȝ<kOE#5H8 70YSxi*,RcO!·#8h`c ]4K7x@@GP+ƽ&劒 \yU"ZT r ?|"1ӜqjGF0nuSB-.7½obHNLAQyo1A!/CfV^{s^r(+* gF\^\Fh…brBbe0s/2D *8ϓbM}r'S?8zq|o߾yw(xѓ'n+%-NKo:n(̾2ͷE^BP/ͽo9 ald~(7s2g, :Ύ xt*/t[̖%YRfZuH擇c!Yy~JbNrWQ|PKRPYF-setuptools/tests/config/downloads/__init__.pyUMo0 W6*C $ ]NUlX$ Q;e-|$Hjc 0Q* &32ZAm&9Gi?^/}XDp wl~l._nFQ*Q``ߒ/bNr$B,./e!tGfnN6S%ϙֹa(C5JPB>[yn\GflL- $0"8%vg@a*f% f-+DΘl=-Q lu:j"Q:[~Mmc1 g;x:d/jU]ƉOH}J<KlXA},8hcTa%Y}vPekYl:Ud_^+R;: ^"5c?x|Dﴅ tzj@eŞ!|0}@6XBv1>hGw!2DkDFf3bPbsSdUĨ ?% ^*UWԺRJCNql| ZU4m%$|9E2ΐ$cʻ ^!wDUjDL"*7J'vp;:i;KSٻjbw+i ݜ);b}ט݀E@WhkԐ28m4ED4͊q*`0=(PKRPYw+X ,setuptools/tests/config/downloads/preload.pymP;O0+NR \V$"~w)l{'0=F8'ƆDQS*Hlz o.dQD~:)y˜J*;/)s1}ǚEfmaÞ X)mK#a^&NR:(EîMVʇ IM%Ȏؿɨ~ rxE[? 6FZ8A[S;G՜NJWȫ'?BPKRPYT\:setuptools/tests/indexes/test_links_priority/external.html(ͱIOIT(JMUOOJ,53+I,KRM15OJL2l̼lD~}96`CPKRPYm"uEsetuptools/tests/indexes/test_links_priority/simple/foobar/index.htmle1 0 E¸st&*AIx"<=}@ "ӣTK4K&K𸨎lP` 0Luh!7mS^aI>i7㑺tnFkvPKRPY(setuptools/tests/integration/__init__.pyPKRPY9]I 'setuptools/tests/integration/helpers.pyVK6W CWފ|(ȥfSF6SHʎc=3òwS.&9ÏfB߱Mo M ޣ:UӠC ;: (p$C@|$oIȶ#W7XCPbBN}D,{CrPaCk_E6=(A4?d>YJ9kVpw(sv)RhN¤3WI/ I] E,?d59rj^dt.^&"Z $Hikd TT;%sT?>-ƶ-NqDOg5ҙˇ=oIdNdY! ^ÏsG$0B*"o( Xv:g]D[E^́ǓX0V$1|!*Zry46X1 . eT(ԣnV7 bAQΈO\*H4[~&$sۡI'.\/?@oc f%{C!/8MP[j*ԥSpM^^E4#I/Cpl&9(#:+#뢟OiZsaC)& 2`-Q";p|Λ 3|G/\:b2EkzB2=7W_-ׇxgRN/y{ :gX(IKQ3uQy#~AaqN<ŶDa3t pW|Q9\ڞods0pd|}Ö8kihXMqhR VQO;z˒EXNEzǭ缈aH HLg!e?JGY$TPKRPY"e ` 6setuptools/tests/integration/test_pip_install_sdist.pyY]s۸}ׯ@PYl6V;ډgX8٦ $Xgw;mOXRUN&Y%*T6)UI/u-?x5xhmb*cQG*'^xwWbSJUBWUɴR*լJx "Z7-ͶB`p&cJ$2)bb.ᵮV{%"eer|nhI3uZ-58PDLyzH%/MKnFp.DTf6QSSNz}MVj ۠#2I*RxEH [5*=PRDiRlܹ2FwvyS6xKvT4r+KSî-ba#< \x.Їy>꼪'gb%y]AXԥ0@r4<(&ZKӊc!aO#`dm [W)&E,KX &b)P[ vH2DG 2EC ~_ޣo |elx8*\S.9G5eKW̉Sm cUhFسo(aN6=a͏fĴmިm:IIq/丑gJU*B'pOnNj~LFET Q99|hQ b;,{lϳ8 AuדFS6.Sboc1Oo/Ÿ.^ן\ú{178]^=8*~4U/ vvڔ*7JmRtKϯ?^!nQ]3F@UqO,H4H&Qa<˘Z3l^>#BKddYVVGvyuDƜϵ'l l!o'Ejxi:*tjSfg 7! wO/.;Jo<[2nL1;#kdq\fIAJtRވtOS>lR"A:AԠ1{-iH&mՆ訔KjT+ǩ0v1?@ %6ͯ"!N`ͳ0qTVMlM).F9~T/pWCs.,̔qѾU2y3oh(2w$=0Uj&vBcE|V2 u:'e-M~!V 7W\|4œ..O0p?HDAIi@Ξw(P:3]z p S5ˁ7oôa$z||5BTO5-Usexp^-&! S'Mw傎t܂ٹ7)cCY6:h% ] :VQU=Ws[=e-l9|_鳃spoy.Ex !W vnޜP< $+QOGa׈v5BBGX[6j 0h@Y0>!X(؊4`ʹxR{(Rrmߚ:іGU |w3\@Ύ Pht!aݬw/wKB' lRb.ඳNgY sA ivH? /"RtǕM5ώXKbDVviE*Inj V7v\wgV"u#%16lw>akCß]@|8bO{ táEi" ѾqL7檈T瑽U?18tLI!^q<5NM(@W?j%Tkw%Tc}WI8= <"em_*@ qgC2embvVxv%*<xW Z[1C~"V2;:-s7U17X3<eJ^Kv$]>{6$*i>hlt>eb؄"Z/Z셣A=3:Sf>s>]I $ֻ/|"T\2"Ԃfm]-nJwj<4Tȳѱava͢7 9U#ε518nY,H%}iz'r{x@1צdC+o->'m4@okA)FjLvr" oفlkd{?[K,8ËW[蔋o PKRPYSEO#setuptools-75.2.0.dist-info/LICENSE]QK0Wrj%gJ02Φ906wd_<׸Ņ.@o'{zTѶ t;hz:z|)ntjhf&.r uq5AbXG`|U@km=fo#9dC\C .5ܒ.p6s9& \|:%u> . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPYg!F$setuptools-75.2.0.dist-info/METADATAY[o8~ׯ"|monIgML`ұĆU#`~ݎ@<OiL5R1H'h{i@+oyz:AYFe5 T1^Xs.h|B&%JSOHY$pBh2'wNEN =wYgCF,N)⎙E̔.5W,ga)!ޝ!2Pmua0 YXT ׌QAF{W+L| pyO8)!d:޿ +swͿ!K; $Zxd47T)6e 6Pya'c_*2> X \CCZ|E+Ke|C.BO7 T2[tPiL,u_KoXLJp`H*5i1AҐ.eAdX)ye`(M\0L#8+(;~ μ+Pd kTó}W8ތ?MXÀD 6i (۳XD tDC֞=(yZ1WUS=2#7QYo7c{o-C|R_LGM#Ypv;4 qy n:NK̤;f"9؆LrՔEXMY;=rc0slǢޥR!vpkj~;!7ϡOmovdWR|;#k4,h?qMi%X7cRC>3ɈmeZ&+-o]-娋 MP{_ų~Mi:Mn{K}?l^q=Ye_ qɃ?ltڽlvY`:i(ucTd,`RMXKauӔ8v;?stC7O8m@#M_:Y;-W 6GEP c'߻'/ {vT/ȟ8̯Qq]iqfYXp~V# 4 4a/i-\ml'4N`WG < 4bŒ<2Za;.Ïd5\H{Sc`*ieR ]b^lr q!pPJ>\H:R BR*9JF3[2hL gses2d0؆vHNpSrO>Nzo͔;LVk@^.`y˖B$b!:jRiՊa0\0hE9q}T4Xo>ӭ|S8w ʒ|d_PKRPYiT\[!setuptools-75.2.0.dist-info/WHEEL1 0 ] 2IJ)[)!]#Yr*+4 /a!f~Ksz<o㼊BDPKRPYcR ,setuptools-75.2.0.dist-info/entry_points.txtU ͡!V*{*DIB28Yw8&3{of0m0tAi4|ſLj% B\n"aZ`^$&!(IG&>ٮSHHVn-L*x k"yk .['}+zyH) uN|zàUA4=2rJ9`s{iE,>PT1!I\xB[ydeqa(/`u2sppA<@<^D"DžmD8A~&-80-WcN&c9> ^6xmxTdET4GhNbJbdsAVS)H딇zH#CY/) 7(ESx^?1Q8,<}w4_rI"N'9!K08v4Ȣ4hSk&(y}.BqI-PKRPY;*))setuptools-75.2.0.dist-info/top_level.txtA 0PP\3z9.1J;\A{#PKRPY8setuptools/_vendor/autocommand-2.2.2.dist-info/INSTALLER+,PKRPY[6 6setuptools/_vendor/autocommand-2.2.2.dist-info/LICENSEYmoܸ_AWPp}N—3K~J]6%%o̐u|89gnn?o?]ߩpmN`],?Q_cQ;xvw^{޹t -ۮۅ_X͋TvTT Jl]QX^Z ֪bgmK*WizUnuFَķST_ic4EeB0^7V ]<ö;u hKZdp qI\Th.Twڐ0uiXή Ep-20eIv\qOfm[т^o,Bq_(oГ<~R_Eq ^mwߒwF+z+ٕ+d_ԆhFS!t 5jK?<ܸfei?I"OM^dPL-}`1ԜmIbX}U_ʾh89]vr׾e_k?/z<aktp@EwuNjlqޛ*%*`}";QiZ[[(JqPA֖ 2ʮ!H@t(-\ZL%!gV$rDS[h@oy­mʎ_`qfb# ]ֶ;PRmzPN o$hӱ5*lbRWt:{R~-͎yǰ}NjzU@hshB l};tT i6IU:әgWٵ#,@aAřBQ^F'+}}[&ӕep[0R#9o 2hVd5`!Pnﷆ3xTnC:_-M+6NC0D\~$(}C3#" r-!5Y#';LrRRkzv-{r1O@UʡP }sqg%mԃxhzEzchT 薨W$#b6 = gᛥE0_dK0[e:ߌ&ڄr!~{ cc;^h0Č9ftݴ3:h>@ D1sk)rY!-DvWU EP[\-à4ӍBD /;$\Qk e Jh0Z K$L6w5pp6T\6ۢ*64h0#tC!L"lGxAh-<XeajJ\RV K!91.؝ w)ׯK0b9Qdi%]N{G8|H4.n <BAɂ&h/" t05#PC3A>Vfoxl2+M!~!͖+L|uL<-C8Hpj>Q5oƉ<ܽZPoZlɗA=zos,ONee*^AzPHtxt4>r)}4w$ ^"%/[L,rpW1wihNS%rM>I1k ę+:8F-Н)eu*ҦL2I8WW3U貰T\uLН KOaLj{=J"(wD݈HwX bN2\ Gۧ#E;f#CyL_ #7 %!3 fa:Kffc1k6qRB*@B/iFB{xF?B5"QX2$ I"Oh6u\6HfkC^,Gp͜.t4ˇTpAJ.|^᝚.Hr'Lz).CGLI[O9,P*L3DWӹz$!0<q(ea$;Xp"3T\@A,:lYQ׍nF>KR{&xY[=ZYȉXy!Pya^=C-qn>&^f )!W`h (!-]{idtKQ.[Q4agwHCԐ6T3D͗@UF(J-Q@Jp|W3vJE7Ot~T gtEd > f x(b=Rd^#∡b@D\Ze?@^.4f*x?.qE=HKputDtvF˫g[/5|:;_.0 GcmPq[לE (]cJ;jIɚf( $4i2)s8ךPKRPYڏT4:7setuptools/_vendor/autocommand-2.2.2.dist-info/METADATA[{s9r>JIdK]zTڪ'RqCi8 0y|`HJ7N* th"m>m>3]2y[ ^<^亅L5QX-FV\YRURԍ^6Z,w*,JrRKXiemmNOʮY O/[f,Oc6^v3.ɥ*deWWU, ;Epv)nI*cZi2 ݬ(]̍Q %F^ʊkֈ3Ob"~/ r.^s%BXGGk8 L? .1?J6y)Y0iJ G=W,2-(Rځ4^}xKUF8 GKR`%o%U޷f_(MѨFTfWZٞE=Io޾~$~jwu!6lC|mvҧ.l %I蓞uunUN,IګhJK,eaFiIamc^N/A}7*ϒ$˲"OL?07uRqaE'm+f n т0%8UŌ'+ԂI67çl:]窚N3rx eE)nz h8>Oj6VF׵=Gn߁yay&a4!2N+8t |tW7ph ͉M ǧNdY֐'du+b(<\.^j,&X¬GA׀M>ꦜ qA ծ[!'DGiпU# _PLO5IJeSNKbONE*>dEѬiBFqhjV;n@aX zJ'!l\s`ZťxL ?b Y23)!#/>챝Q0ZvIcpwlʄn7iVv Xmqoܓy" Gb俜NxPCZiK0T:!0掁 !Q>+.]hⷁMc!Cܽ{Rw?]|at#,ߗ<87yEh-)`DcsCpvaC #CvNϞ((LQPJ`O߿EX&DOjqכ[t2q2ER8hC߿!/ΘNȽ jpaq"Ş?q"!8'*K>pl(lR20B](bZZ3H5!J7S?bw/ 8f tv@uo>dՄMG@pX?q_ZpC_ۜNz= [wQra),D62= d;`Qnƍ~f֫-4( @+t@>2Q(|ky.QeDN"e 'WʠwmSJp tG@ 8 -gMsGnQ(~,!"BI+u&%ɲ3Wm GNRJL␗ 99G=ϟs3ǠT(JRrܶƎ`bph_( \_oP7 b5G/\߼rHzp!{9%?$C2~hK,cZetϢp&rHp? 78:%"-TaKtG4cxML$GpgAW|[v=,+>,gw _wGÞй.˸6փ`:V2zڧWrW: ] ,#Ǣm K ׀u0lm=Q3@q) 8(I/Y`խ{7y8w!\ MBȥX` p|$ Gk[r33G$F5QaF{oV|I;ڦT*D?4@v/}НX8f\uwu4HL\Xwr#WeUwMFm__:0E&?2>^u{x`#WangT1;ݨ_)gp-8n B$e8u:8p{3+L+ona(f|x~ގyuTӄkj |13>EXEMw8@BLVMֹץ*e@ $ Q  o Kvf[-U؎ޠ߸:vcltQ:HJPIsJPNӗa⶯TRHt$+cMq:ufI^ UdܯG><e{~uFZlX\Ij<*/M\ݨB +:,$CQv U*KM'e'( 7h .3e]ooM{lFB {>O,]$4X'V:dzoqZ(lP ISGiL: 9><~/aA^ Q39X: {Q;2_yn֪N"4Ewm?z= [c+S;J}~Ő7kҤX׳9J՝`Q;P.G2΁#4q*-$(Hbu.r],/7?D<0Cˤzڂ,?ʪs &ɚxP4Z?S8&Q7|MB6 $'؏PY@\`МP]Μ_DŌ9&/lKxU5?,wB(Rֆuu{:xV²w4rjkS4BPKRPYrO.y5setuptools/_vendor/autocommand-2.2.2.dist-info/RECORDIo@#? `6fivL.Cf0~xj?g?S5`S+;e LCG?ʪLZSٌc32}tVFyqa7fkwRV*AK#A@߿'UXbQwy]𻢷weEA`Vm2}ti'$ƕO? \nXRcS/l3ˍ_4.;Kp9Pv'/#2gPDbE#(BG&Ib?>l\΍ǹy2aD M(M}mFtx8A#6G8dY9"(Ja e[%+ UnZTrgSshQü PKRPY1\\4setuptools/_vendor/autocommand-2.2.2.dist-info/WHEEL HM K-*ϳR03rOK-J,/RHJ,./Q033 /, (-JLR()*M ILR(4KM̫PKRPYv <setuptools/_vendor/autocommand-2.2.2.dist-info/top_level.txtK,-OMKPKRPY>setuptools/_vendor/backports.tarfile-1.2.0.dist-info/INSTALLER+,PKRPYSEO<setuptools/_vendor/backports.tarfile-1.2.0.dist-info/LICENSE]QK0Wrj%gJ02Φ906wd_<׸Ņ.@o'{zTѶ t;hz:z|)ntjhf&.r uq5AbXG`|U@km=fo#9dC\C .5ܒ.p6s9& \|:%u> . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPYO9R=setuptools/_vendor/backports.tarfile-1.2.0.dist-info/METADATAU]S0|v@Jҡ!mbȖ}OS %yr}Ȅo4V*&"8˜0S0 aMY y@u`@' kB,T1&,a.'5|FS`.+o0uk;(my.]L<,H kTt]b`k,1C(kRGq:,+U4*EOĨ O2vs8kD?O(<7,eÅkwS|Rmp4h0dhS#kp8>=lk{Cc]0x P)d.3R9`BV]}葐$փ.;C2<2%b×Q r#"uUrvֻ,vO әGElo#oʏDkvu6ZM Y.n,sf *Lj^7y@L9'0mr^[drX7lgۉnX~l+֖Y6?mд"ěݓ7Q+oى 9TVan7F% wX4iR:{i!E [pL]:ۧw\Q ;՛_ߠ\:=G\T7s<4;Qūftu?trkagцPVSME-jLL/?PKRPYygTP;setuptools/_vendor/backports.tarfile-1.2.0.dist-info/RECORDK@F?[^ Y "oDB3i3qz_9߭{aedFh<:&&kqEM6QC꺆lzEJzinO| g[*Es:@n:ۏ? 23FNjLZxm4n<EZT7{ jL3(%y+7]u%\Q I-{)'~zL_q`nAQJ*.rd*OrӜׅ٩ex@{?VDV'7-RHF,B_cTl`6~h%ٔT](`nP5ػo=k`TXbu{ ۇIfT.Yck. +(0gt%K/kzY 雧ij2՜iu&NJ=wNxV0~Z-\*ˁ*Nm8 ,,: R'<~ɏj/%#!~Q߽ߝ ¿p885EJ[z}1RvYctn¿PKRPY>setuptools/_vendor/backports.tarfile-1.2.0.dist-info/REQUESTEDPKRPY{K\\:setuptools/_vendor/backports.tarfile-1.2.0.dist-info/WHEEL HM K-*ϳR03rOK-J,/RHJ,./Q0313 /, (-JLR()*M ILR(4KM̫PKRPYv Bsetuptools/_vendor/backports.tarfile-1.2.0.dist-info/top_level.txtKJL./*)PKRPY?setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLER+,PKRPYm^,=setuptools/_vendor/importlib_metadata-8.0.0.dist-info/LICENSEZ[s~rSi4i牱䆭CiDn&% . =dwVM5Iٳ E/˝u:^ qw}{ws-~]SW j.T;=rnk3' M#Z%;1Ie['dWtbtVTc_^>[i7X{!pKUAUB֌۝N>hxΔcX/cO+Mzw P  8s+lv[z!S@me#Ic$핐%I ZY/^Ao i ! RcWҴ$arxùxg,я71ɪG3/eFGqB_RWY*;w!#J N,`E+;U<׍+VN$ٹe \hЄvGI%/i;aA:d AFu`R+'3=6L\Z]^&Qy|x[<'$ְ[ )GZoUkM[p4IY3htqw3r!8#A^ ?Pv;Q|lpcl(?jkZ Q9|RoRyH\1=qtLH^cBRs g' NPn*-pc4 (KҘp#-1bZYdąn`x8[ dV9 X[BA[/eΰœⓋW#$Sc Wh7; $AP|#:Tp~*܊܅r8kiՃ&Wbi|66|y6yaX唃H!K4LouNՓ/ı0HVRT)h:Fj'2㤓 ND%"Ѩ'Ju"9S6/'\Q6 pHd6 ~J"KQMm7n;h#ZLjDe}5ie^f^˰H5腍l(uD>[_`FWPhd!R+K:"7@)AZV"r75wTXBJ v?V>f+kF/2DAfmprtTiǖȏx4`YC ʾo48U+lv8" ɭquNZMY[@(j_`)_DVOˎq-$obn.5?B c::e[VAn%L T"ƹd0)Y"(Ifb<2Aŗ5sgJ2%S/I 6}ԔAddITgu>Iy=@ ]'MTũezٔgTe Y V/s0#Pwa_fM[8"5P":LflȪ[w̤ս$ Gg~ UjlmDL;1 `D*虘80O[5Q*Ұ +s UƑF:ag|흹2b1]hSY<<ъӹJ$ΦyI۪IgD1&cةu|K͎ ^5@7:aRcK 88l]%;rmӚyEjf"Vׯ̀ ՗ vKR͍P_ad.1)X1D[(>C#S 7Ī|t{?3]B΁)wv#jL_5lqn N}:CC6ժFo; tr)~4jVQ+bӁړlȦ7_ ΔԟJ;jҶ]1 7yc`HKa>]Rušq?ˉs/q?[r=?,u07bu^ZX~_h~K'ф+U6&MDsRpM."{ `z\[z?]߽\|B~u^N~Y_so@6t@73NOB˝1<I䲝fjExPGʮT|ǠwՒ4c6Awa6Boy̗ZcsmhJЮ `ՙѹ-!Q ъ)Gkm&CW*QӹF:-l>ƌ6F]8WWXWϽG/no?ߠ iZz/o>%.(kiBB>F:Zr $;o)D_gh2!Nz..L@A.uԦ: @;vv7"zVp6/i?' (Nr@!c嶋hfqZݨ ݐM.r4F a|_PM<½kϤ!o9e/UBzG>HgO*.("#\setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATAWR6}W(Zp5Uf ؼƖgȖWg|}\w^`/qRfYF"&=|b9KÇ :cKw*ϙ䖳R$*'gv R䉍 .*y7 j:tOjJQ&ؖpgm5gMSwn';+50&y .SCB/E4멙BHlq;74ңɦ9ra`mFU2TL0* :e4d7X?Vq=>~ٿs7֙7$Thc畖VF)AU*_2fZbrak0'dƭ&=ˁC`yd=[ ƚbuEB,2Vc9oݗM֕#֏ν a'.ńBQd )ter#T#:ߤ:%?5k[M7:]caWD[ -W6{F;":.9 56Oba ڍ!H4a++( 0#1UYNS4,ΘH, SYء6~_zvGFkѱC DbĔzjK .hngmi */p_|Sqhm~хeQcoOT8F)wQá2̥"q&ӱHF8\GbX:TdaDXN[Wbo{"A CVͻ7Ʀ8n~×LbGcǽiG ǻ11Jŀ|AS;}2ݖ[9=gQɑrI )!C?4$__&Y5UHxSry6EVLoK*c^2QѲ!x? 5AGaZYz7g=%*% y g H륎ɭ;J-AP;qn]~ӺbRvM a5߳mE ʴ2c_ [+1F1afR"1qX \a_(j~.&ț85rD 'ܡ+q͏ (@V צHCMAmet5.En.@̂eūJ^z쑙po|zL$WzU},S,a*bTz?PKRPY5J <setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORDIH1IvsDY\J $Bc;e~CZTy C#R|!m0GXz;@i\lJu $*o>9Ned}K03 ~##?i[e?xTHID%RUkrG**I9s *04\q'0 qJ0RaݼQ|Q^T~Eyl#d>WtvF5YgCj#7底~-$7=Fh=יf F=UZn723{E+WnJe]:v N3+ U`^JE{V]DN#y~ hkGlik+`5tUfP(Gr? ZqP_됾b#:.?/68jvNo-u+SUJߔx_eq=+At?7@ufͮ2з婖av]׸O$ ϏBd66~{~K.?\KAZd (u6:48$0ymHA>}@ w9kqY<=Sb Z.j z]PKRPYZCsetuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txt-/*LM-ILI,IPKRPY@setuptools/_vendor/importlib_resources-6.4.0.dist-info/INSTALLER+,PKRPYm^,>setuptools/_vendor/importlib_resources-6.4.0.dist-info/LICENSEZ[s~rSi4i牱䆭CiDn&% . =dwVM5Iٳ E/˝u:^ qw}{ws-~]SW j.T;=rnk3' M#Z%;1Ie['dWtbtVTc_^>[i7X{!pKUAUB֌۝N>hxΔcX/cO+Mzw P  8s+lv[z!S@me#Ic$핐%I ZY/^Ao i ! RcWҴ$arxùxg,я71ɪG3/eFGqB_RWY*;w!#J N,`E+;U<׍+VN$ٹe \hЄvGI%/i;aA:d AFu`R+'3=6L\Z]^&Qy|x[<'$ְ[ )GZoUkM[p4IY3htqw3r!8#A^ ?Pv;Q|lpcl(?jkZ Q9|RoRyH\1=qtLH^cBRs g' NPn*-pc4 (KҘp#-1bZYdąn`x8[ dV9 X[BA[/eΰœⓋW#$Sc Wh7; $AP|#:Tp~*܊܅r8kiՃ&Wbi|66|y6yaX唃H!K4LouNՓ/ı0HVRT)h:Fj'2㤓 ND%"Ѩ'Ju"9S6/'\Q6 pHd6 ~J"KQMm7n;h#ZLjDe}5ie^f^˰H5腍l(uD>[_`FWPhd!R+K:"7@)AZV"r75wTXBJ v?V>f+kF/2DAfmprtTiǖȏx4`YC ʾo48U+lv8" ɭquNZMY[@(j_`)_DVOˎq-$obn.5?B c::e[VAn%L T"ƹd0)Y"(Ifb<2Aŗ5sgJ2%S/I 6}ԔAddITgu>Iy=@ ]'MTũezٔgTe Y V/s0#Pwa_fM[8"5P":LflȪ[w̤ս$ Gg~ UjlmDL;1 `D*虘80O[5Q*Ұ +s UƑF:ag|흹2b1]hSY<<ъӹJ$ΦyI۪IgD1&cةu|K͎ ^5@7:aRcK 88l]%;rmӚyEjf"Vׯ̀ ՗ vKR͍P_ad.1)X1D[(>C#S 7Ī|t{?3]B΁)wv#jL_5lqn N}:CC6ժFo; tr)~4jVQ+bӁړlȦ7_ ΔԟJ;jҶ]1 7yc`HKa>]Rušq?ˉs/q?[r=?,u07bu^ZX~_h~K'ф+U6&MDsRpM."{ `z\[z?]߽\|B~u^N~Y_so@6t@73NOB˝1<I䲝fjExPGʮT|ǠwՒ4c6Awa6Boy̗ZcsmhJЮ `ՙѹ-!Q ъ)Gkm&CW*QӹF:-l>ƌ6F]8WWXWϽG/no?ߠ iZz/o>%.(kiBB>F:Zr $;o)D_gh2!Nz..L@A.uԦ: @;vv7"zVp6/i?' (Nr@!c嶋hfqZݨ ݐM.r4F a|_PM<½kϤ!o9e/UBzG>HgO*.("#\Bmnm5kRd:l5Kȥ)SE;)$i2'Nү.fښuAy3y|[OIQ.(zmjW!L۝[DPz$/Grcq$l;6:/!J4]8?Ps-U|8/M1sh$F;mh'>m?$MwYVYes=#VfC(;M(o2V5C, 2=vc8a{WUQyÐFN \ T@"7,N rF_dY$C=owUuQ$yU6 K|ڲk&-b_#(H&(GzM>:fآ0y?q"0g}QB$JˁƮaɻ`)-ӞA8r04PPSYY02"15qk,_VbA=m*ͥN˚}ߺ&x^A.X:R˙)[x"ΣNi>QJ:<gA4KH7θjPZ\dmAhc,:E~);=s<cXVa5fd{ 8+S;u"Pn[O gmmAeJ>NA5ƧVcqWA\0bNzWi?ey^2M.,O {~}W ) /uy'^E|5iNU#-}hOy'kS䦞'fvNDkM)D ؕg,|K;iQKM} l'N,ldq@ ^yEGLu8jy {?T~֬I #P_J"``xJC+aɱEߓLq nͯ׮+qkPzFcL9oƌ5XCYy 7?VsEoYAte9;ddV:`BgJ%XFS.&ۺ_{m3a>#lseNd]ty>]n D(<(,sfg9{G,! {e]cWFwvY`\_呲rhvxGl?,'R#;Pz4mZ}uLK֥&QBʷM/A^~7ہop3)tp9q{'}EǻD2kAaw# 2t BHI? Ez£\ES'C9X5 V;5Y,:Q{"tsX~ȓgu=VNXɶa/d뵾lZ_d ̂5#Kuywlmz˨OZL ܉5±w#zCпF'O kZg!/1Q#Cs3jE8o7Sw!ʽ˚mIl7}Poxmk1V"ƌL| :U6ȇց=NHIM`#ͮL>f=M@dJ@o-G^Q Do;u02){i . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPY sWR3setuptools/_vendor/inflect-7.3.1.dist-info/METADATA0U*$A/2/>e@{7iZds<*v<1vS-`{fq&Re$zJ=(*4yE'ފ<RB޸a+ BEa06DSt(M>P8|8[ ̑+iOhW7jc* oAAӝUk*,tα4][{HLf(^f[+0PW{fJwTOxɻRza2EnʒoL!:vx9M+'4S]P,OH?or d5ha@ ÔB#Io}p#L"Cӛu|@ ; q}O;WB 1x0PW,,}c@(\+( 5<:.X|_a"ώK6;mRF=*+K:q̠*nc**PE Z@?@|o 30-2 ҥ;ŎEnpc O0Zn\L@ orx=TƝ.6ppIFga;R3=-?ayS;` {@Lw bhzRQ-qfw$(ʂ F}, V'%1_>=;NI׳I4THaVjx,t[}bt\ng wٴFg@u(NOI{=#:FFiGК:'WS>LCȄFS_ kGvbxU`0b1M\Qcnj~_uLP| u[ ։M`Nk BdZt ?Zdx6F!Nh 4Cs o6 xNI]:;BAPh+ϷimZ qKV!?AK}`u錬,-oрeп3wys7;$?$fPV I?GJƟ?Äxp6LMa`iGmG\t#rug y 2ߪVGv Aٮ["IA!15q> pC=ո'4ۂxPdtOPClT۷o?AT#Ke酟+ tM/a"rn잛:|d@tZ9sх=Ijx}j|C+VE3 T Zghb`Vq<ӵ`<)_PT.`NӛGVINk | ^"릑J^x4 _7Nyց8#ls݊wh. :fR/7z>2j.! S9,aP5}jZu,K/owCt:eLtv\6\4'eO*m<[m0C~'JaE쳞4ZFM!59v~_ #kTN9zAFA }rTݾ C| sP,2J X s3"3]xd A, ھ菮1cfbZ Lg$߯s ܞ+&o? -&H%|@*\'xPpj9.'Gϲď9,:|$^79sPnjdQ>H_\jQ//:;%U{t_vLX_s]2%j0.I['dWmHeg Ѡk)4zD%9s2\)ZR*n\-/9z^?:^ k,A} dxVǶ)_ ~ c7k +apuy'Oǣ@MeC?9'5v{֛QntB^0MoS18c4s; Y&L.xe ֜FW㻩__);Gv5^N̗;*=V%Bx Ŋ\={&"C oD$jMOy(Xa$ٍ"P Qjd>)T\\91-`$Sf/AX)μh; }l9uZgR5*?c#knN!{C|yLz`,L0&5!l{6T'^P⿫&>0p/cNnpͼPWڠKǔ cFRĭ*^`/@]#Uoi|Pv՝XT _TiAA`|jT^*5,gTdbz&hD0%8פ~f"xld'1uQ_-дPN¼9h;s6d1V;*4^HْXj~`@LGԣ`mLMPQ\0[|'̨o9 ظbJK%qx ::g-39j馤Pd>Xq0(WP->. ^fHJ )H+#[d 6 t tom3._\*G6ђY{wҨq{'}[d*u"Eue,'j@wbWϼMog ,L܊AܤȜ9{`_7 mÓnp3;; nWٸfs2B[.AjjB"5Rh'R 2i@ ͸}|`3<Dᱽ՞1f!_ F)?]7|wXнͳCC~ MO7 !!m^Da=O rfju˜?aj!rQU֮,W4h84y4c͟?L!Wa[l4y-pǥ,nThׄEUӎG44Y23(Ιdn5 aR.%ܣ0{NHU$ͩV);I6LƵl[}^Y?gu 4@,,5TТz0U=&NwB2>eAϥ0:4ݿ݌>܈ Uӡ]SMs.UIMAzHs+asy@.8Q#WązAʑ>qĻUVG$qoR8eTcUhGJoR>`=γ@FaNc*Y($2 c;d'*".>GQ'@\uQ!3B إ Tg O+/)+W3 05M"~437>4qO .BLu@&C-Sf8ӓorzc0d/˂tD8WZyD?0":'hCY1hiȖ` O`HglVHIZ.ƮSM]/Ö{kPxݭ{GQ|usN[%pbcH^aQ]hzHmT@Jn+'1kV|=#,WMq0 t.oj{LET(+(`΢r"`7{<ĈwYNX{2Pm@j}o|lSᚾDmQKq4݄`PKRPY>6\[0setuptools/_vendor/inflect-7.3.1.dist-info/WHEEL1 0 ]2N;|ҭ.|Ҁ,}&oxM O) a^#fegp[8|ֺ>λ)IPKRPY 8setuptools/_vendor/inflect-7.3.1.dist-info/top_level.txtKIM.PKRPY?setuptools/_vendor/jaraco.collections-5.1.0.dist-info/INSTALLER+,PKRPYSEO=setuptools/_vendor/jaraco.collections-5.1.0.dist-info/LICENSE]QK0Wrj%gJ02Φ906wd_<׸Ņ.@o'{zTѶ t;hz:z|)ntjhf&.r uq5AbXG`|U@km=fo#9dC\C .5ܒ.p6s9& \|:%u> . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPYCh*]>setuptools/_vendor/jaraco.collections-5.1.0.dist-info/METADATAW]SF}ׯ2v@IIi!mZʠLC^!c{gLz9SYN4ĩњRC-^E]6CqfroN8U(-Fq$T)ϴIaGgv@Tz(1L1q[u+ҕb?` [u~:)툙&I`$895UdMUPŅvb@NVMkz'2LLQu`HҚJtAʼnW5 ?^SʢPe.Ne2$o{*̗S,A{8etD.˦B#x:u(ӓwwGeWk2z+"Q:Rj<9?gI<ڍ_v8~@)th^hwUi⻑JF[? YfA؇|4uX>U3UކdXV2˜?z}U %*d,~UimWZu#ZM}p}/E%OCINC[쮁u'Yo3%망kX|#[ES5ݎ8bz^RE"Xj*,6pSy$zisw'UKxf{ȃMHDv7Χܸ^Mrz0oA?TmF'{'\π.o[QIW}P[=e[jG6m 1Τ`]\}n0 1yƙ,vk\f+G:VA+"߳HA'(:3MNw%WW ƴ- ,&( R\?r+iG "[C㽀ne#| *S]g48 Ag(dU g TAX "LB95 u-p (Cf?OG*EQRI AN`r{yb`P:2e-Xd7a1^D YtvZBL@ v_'v%uOIYMnnagBo)024{ҢW㰖!%Me}IH/\].T 3}fZu}˺@QqN&uR¦l^ =BOkBbo1,L3\׊ aC s!Wȃme-U*ږZ5E>R>,\QK2K~/Ȝ4; # s)BePFWQ'U0PG\6&1'[Yڿ(/vBC?Uzv#열LAᐅT-k ȤCHm4Vo>dw[R!ъ`3&T0%)fH[ J*/Gݾ*PKRPYZhi<setuptools/_vendor/jaraco.collections-5.1.0.dist-info/RECORD˲@}&ܑE/"EQ>P'Ybe]mq+$i);4nk B^${s?LUzEwYMr *J7auF`j2Z!a|% ˕$U~ Y@q,/e8 -d$E׸wM8:YzEk)G.8 a^-7Ux E9$ $*p67QAҒ1@"NqP[Dj`/ylTp'pk.2p3?6zP*V 8u yaSf>MHAܾ}NshKgn~Ym<<4y,3wл2_"j )zPKRPYث9 Csetuptools/_vendor/jaraco.collections-5.1.0.dist-info/top_level.txtJ,JLPKRPY;setuptools/_vendor/jaraco.context-5.3.0.dist-info/INSTALLER+,PKRPYSEO9setuptools/_vendor/jaraco.context-5.3.0.dist-info/LICENSE]QK0Wrj%gJ02Φ906wd_<׸Ņ.@o'{zTѶ t;hz:z|)ntjhf&.r uq5AbXG`|U@km=fo#9dC\C .5ܒ.p6s9& \|:%u> . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPYgL:setuptools/_vendor/jaraco.context-5.3.0.dist-info/METADATAWYsF~ǯd+1UJEY(˻hc3{(^/*L_C'J?hj t.:\aDB+.JJOw0m-Xh#6*aԂN(Qfp%4vetAE_ٞ mZkv|?NvϭnoHp;Tnp’bit G1etH KDU 8]kYA⏛+{7JϿ]}ڈkjO̰ɷ,.$=MFeKp}Һ%䢸q6uT$ ?A|I:_|,IRvߞWd YV+x/; 9wi=c]Ju47i~Fݳ; H^Pۧ͡u9bi:OGV"͊[G0{0R՛o~yT\k&Z|UEZ)QS Md!ɮNm#-m*u6{M):%GASmꌊ n=a?fy>d>lvm;QTеY.s- '?,Lh]t"zMEwMdK# olE#LKmm2Γ`F1fE KFCQ<ȏkm70]8H#t|&y8zVLJq|=&ou>L׭AS b;ǘ{Uq#0sc+uՁRndv$/nZPBIrDveFJ ]xpb-݇G=;hА},_8Z2߭i{k_tTN3KdӃΤ*x~JXzo2AVG T4C/\ѤESJC%hJpM?XXNpm\#~PR7w{=9$48UhMhoSM}5C'mK$S%1<.A#ł+B *h;!DC`(`A+_R+2B (Ēibs}lA^ ; n9Dah ZL@.9zCa[Ǝy5 &?MN '8#y^SNgC f"6GLnQ"7(܂);1mnxK)\v}(4y}PճhûZJ U_PKRPY_/ZP{8setuptools/_vendor/jaraco.context-5.3.0.dist-info/RECORD˒0ES5@Y! yM C 0k9^{3)g5=Jt` sYQ_pgΜϭG2 L^dzS0(&+KVmAxYL4cTr5ty(3\P`C@wߑh\#P^9kȍ>M=W**RGC..R$F`myc*D'rc->)f4C%%dO'KV\>ӯ0Y1d*YIƷ01xT ??oPKRPY{K\\7setuptools/_vendor/jaraco.context-5.3.0.dist-info/WHEEL HM K-*ϳR03rOK-J,/RHJ,./Q0313 /, (-JLR()*M ILR(4KM̫PKRPYث9 ?setuptools/_vendor/jaraco.context-5.3.0.dist-info/top_level.txtJ,JLPKRPY=setuptools/_vendor/jaraco.functools-4.0.1.dist-info/INSTALLER+,PKRPYSEO;setuptools/_vendor/jaraco.functools-4.0.1.dist-info/LICENSE]QK0Wrj%gJ02Φ906wd_<׸Ņ.@o'{zTѶ t;hz:z|)ntjhf&.r uq5AbXG`|U@km=fo#9dC\C .5ܒ.p6s9& \|:%u> . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPY{!K <setuptools/_vendor/jaraco.functools-4.0.1.dist-info/METADATAV[S6~8efK;SnP˔+ǎ,i%9#9&$dKx)3s:V2Xdd7Vje6z';i.ODYJ.Rqt&Ɔq_* (Ռ[-Ts]uOՠf5ҴnҎ=4Y OWM8Ctceb ;e[8-%ޅt(K,-9=m.FY^ /7pQ3xBkÚ.[:Jފkr638ߢS(o;MKcc]45>./N>ߜ-Ou4`>یtz ˠT]X=1x~Hs>$MЬg0Σ 1v3֨MݏIm켣 ^jZGʯKs =<.&XL"V̿FUQV3-DVv$v7 3wڷj:'-ith;h~0DC[WU30zk$PRk7ub'EiRi^̰2LnAD:|965Y?zt^) #զL+lJ_&]#1+kndk}kt`'̈́;dtР׊5"0=$KES3xWL4iI2:s2{Zvޛ Yυzx?s +}>/-.;r493%dmWs!?iON Aj{:;~̥oCLg,T,OMU}u&Tl;~ڕA'^9j]sgUk ~K6OiQt\pD馽 wi.0I+gTFN׉|鏔gtLjyN8 ̃}%;P|Z: 湵 Aq*D'yfI9m1!EȐWT KdFoBC~+Xe޷׻$PKRPY0K:setuptools/_vendor/jaraco.functools-4.0.1.dist-info/RECORD˒@T͛Y0\etP 4W;bɆ,RsT&b.=-0ke+r8 *D<#'?JH~o';i*Y=GcիMrSN+Ilt˖Ҝh$,vn}74_o}hD5IfLo"dPG,˾?"&@0̗[y([i󖯢ш/PKRPY{K\\9setuptools/_vendor/jaraco.functools-4.0.1.dist-info/WHEEL HM K-*ϳR03rOK-J,/RHJ,./Q0313 /, (-JLR()*M ILR(4KM̫PKRPYث9 Asetuptools/_vendor/jaraco.functools-4.0.1.dist-info/top_level.txtJ,JLPKRPY9setuptools/_vendor/jaraco.text-3.12.1.dist-info/INSTALLER+,PKRPYSEO7setuptools/_vendor/jaraco.text-3.12.1.dist-info/LICENSE]QK0Wrj%gJ02Φ906wd_<׸Ņ.@o'{zTѶ t;hz:z|)ntjhf&.r uq5AbXG`|U@km=fo#9dC\C .5ܒ.p6s9& \|:%u> . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPYJ8setuptools/_vendor/jaraco.text-3.12.1.dist-info/METADATAW_S7Oet8]0I'qc(dJ >u&|uEL?|WcPpvKtB! ~8\3.Yؾn뚛nh%B xFM+#u6)\!VpDzlw]TBS_1wWC] A\cY6jǞ5R٪'[+Jf8Ck]ka8א([a,ܹr ,-pBlx}McD|y~ӓu-.Q:A]rZaЦ8{͍hk(>hmjK$ه;Saݲ$VNki^ oQ$JI_T84uI1NN&G B"y{k& =u:m*nC^zF`xwqO|Gow(L 5ECw2ESv(R.zP-0z{_xQ&+̧Ȓ'lk޺kQ~`9L[$QkB?T/w^8 cTPf+LV{"ICݝgeL&v{t[UM0>й Гm6fZJ= źZfc^LQW=֢F=gK+n? FS;jm!PцEFG4kdʝ[Qɢ\vz-)Jt4/RBFSROߨow3Yy lv`͚$@+G?Ǚ4Zi5G>5&IrS Y^t`t넢ߵ ҏ9D{`ۼnMC43N۷ΈE=}.X RЧZϸKWP-"?nEfȵNxzX\Vk;f"[igm(+y55?\#6yeAb.$֭qRxM]R^7-K Q(m2$H2 H"x^I}zd_{`^J`Wӫ 0+bJ; ,]&t7I`MpyۜYl6֫ :s:-ficMW NyJ>jBC\߱ȃ>hw?D'J) ܁bAn|8$Cl؇z`ݿM3jdݴՃ0|>7sYco u}Rn-!$r |KE E5dFj!p7^P; PMEWUr*n.&jG,PKRPYT86setuptools/_vendor/jaraco.text-3.12.1.dist-info/RECORD˒@}yp.,Q@.rG6b#OIXfX?M38ǩAΈ١zs'`] sBFE& 6Vr0p[G?\W%t]p+,rNf$~e5 3rh P\ƈ9I 'IfwοFN[.V[q\WD(xG2`, F$3[l, $O=kƾ5Nw|2`,M}>Dõ Xbϓoנf7Ccu.z?Bliy -0![_3de zM50 ?V nDq*we;eJ#pu0?_oUDɉU,; : PKRPY9setuptools/_vendor/jaraco.text-3.12.1.dist-info/REQUESTEDPKRPY{K\\5setuptools/_vendor/jaraco.text-3.12.1.dist-info/WHEEL HM K-*ϳR03rOK-J,/RHJ,./Q0313 /, (-JLR()*M ILR(4KM̫PKRPYث9 =setuptools/_vendor/jaraco.text-3.12.1.dist-info/top_level.txtJ,JLPKRPY<setuptools/_vendor/more_itertools-10.3.0.dist-info/INSTALLER+,PKRPY k:setuptools/_vendor/more_itertools-10.3.0.dist-info/LICENSE]QK0Wrڕжco8#l#'%8¦ΐ!!!Imt.Cϟ<O>XJ;]tv78mqO6bǀpTI; hq:߸tC#]o<¢#Hkނ"65đPO-yxo $eS3oݑvu ]#؁P!ؾ'gín!Zht?4(igLYDRD+c[seVj~K(tp?z_'_  +(z`+|/IV[8yaV=|E^jQU42kHm&X"PrISIQFtO4)s4p(62\CեgH[bQElDaPk ^՚9I1EAʽ/kkgK27) \nE3ZP8~*g)d%ZVV:fB.#V2sL߇oPKRPYut ō;setuptools/_vendor/more_itertools-10.3.0.dist-info/METADATA]m۶_N?N4n\'Mnj'MP Q@ɓ]H|P&p#gb;>E+u1aFgO<k# V6ڦ8lpYsn1+' a\Ka8|͘."vfb0-+mR;o;m r0 >J! EU,"TnP\ %{`hӷEHD WD珣]%k ?z8*NEAu Uĥ_uSŭs)̄}'.e +]ed¾`CJi /؝|爝=R)D` j'g*vILE_=)K/@|~z `mVÛZio쳛g9y7P;K%P/ob[׺ ynšUxZ43Ha#V$n&G¹NLE54ڋQDjo_mF#&seو2n!Rؑ6ٸK/ii3on_1C>FD>M%94Rc0LyxT2B \zP- '0i<.Yk෠x=T(9+e@l#% b`U97djPV9Q]>,恘;{-tw̪d)zwUeIBhGi{: N-$1뉀OWX?&#"<>zP~¯ی'zYS ,V"&LEN#9#Bn_eՕxʿ7Uἴ;̐V(ݩ=\ž#D2IU Ehtn%()WoI%JRz(tj3dgW/ZHC-\Bǭk=p)shApqN(ݭh,@}DZ4% 7@OrܺDbE:169q ݳӘƅ.H1p~" yᎹ(Ou>šn%尾A |Ng K9mQ_K ~AjỳX"U(-aG@:esK Z(T!:(uf4ORjwr@<] % GJ;s0x\pU8Yp&i >'jSo}zHqdW& z[>;H}v8" C{m`I$v>Z@ݣk"eqp@yPvղArIށ 4K8 m2/mғ0ȠDR-dp"Eˤ idKBN0 Υ.vEv[tprN J- Gh?xP4^l&`ENOrZv9x&DHX9x"x}%@ftoi&)b&?*GD̩Էt5yH~>l6ij.bp08:> RSJoS\- w;%I>qe ^I#s |ӄө.J]^:5 Z ùylvє -I0;! |DF=}-+e x,+*<*nhOqltI҃ >vZoť0yUNa{Z[IIõ'"m^$$& 9 {7+(-fi.nQzZAVZ~"yCJ]m i>谬k󁯷({R#ۜ*\Hgrl>09q1pe#܂vEyU"4yH`@ܙJz2;>XZH ;(+&OfW]C 죃>Ayt=Dz $ܩ(ʯ>xEZG{5p3~gHU8ڶB=Gr 1m$̸ {V -P`2? j*GTې(w )]P31Q9z)"`p"ZJ0Ut`LLE,sA9iJ}!>WTBKڄT̠,EDBܓ z%UXwHAxvJ*Ge.b%sIzH5<&'#Av;{3{ 7PJ$wvk3ja$u=`/.[Apk!F[Q`u(zY&>*Š3͚aPMw2*%6$F#T g0ZN&.RQu ݶD#Y pc/tV u\.Fd㦴vx~6PȈ9 F^P Xɓ%*ǏrvuɼƱmm$gvv=l(iݽ&M0πa7Q c\ܲM!)~be+ۑHU9DbW|/c)76o?np|Tm>T{v~_by=e#lڹU]2)/{lI4ԃ/Q 7(.czpl Q.-r~ҟbiPV0/jtJmhLWM]Q)('l_=`X&ek]`IVl`q;hmʸ>2wĈZWSvmu"V,,ޏRq1g_"7}7?n;2av솟=xH,/W_Q8ϡ. If2]A/$ \aaJB;|FذQV7\lͦ #Xjeo^zSWwޭuY8mk0㡼{f ;9P+Ͻ,8+=t [exX|J%8K4flVe>cph]m5V Gn /P* 큱zEhQ'b / J׍-{co[]PKRPYcr9setuptools/_vendor/more_itertools-10.3.0.dist-info/RECORDI@柀ՆClc_ 2lm fljKs_Uuv *zm[]P[ l-}id!H0 *vRQw4 cR0+O8c5}k3Co'|m#H-Bl&PLWʹ12y -7Tm2r"8F $9+=T U鹟3up$aЊB(K% {KD4]v$j%J&|c>}V0*kZA?dnk>$iwvggHʚM i9>S JM*~N深G8ҁ_D󺉭#X^ v ͥ7>nb7ra`SO7>,`BX04 €!č)_'RoK 4[Ezakڶ yQVT"C]|0?v:aN U?sh{ܢ+H{_zW/~PKRPY<setuptools/_vendor/more_itertools-10.3.0.dist-info/REQUESTEDPKRPY87RQ8setuptools/_vendor/more_itertools-10.3.0.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,Q0ֳzd&Y)r$[)T&UrPKRPY5setuptools/_vendor/packaging-24.1.dist-info/INSTALLER+,PKRPYҼ3setuptools/_vendor/packaging-24.1.dist-info/LICENSEmN 0+CւP f!7襷y13 h_ ~!C&le K*$#nv;ލ/*Jꢴ4vB$(aC,@Z=(Nu=֢swJ|gr]ΩW//e6vn(}g퇡͛0ݛro^X݈wwnas[;|\[7z>!ōuP_ymfD3iDd'8l*QU6VNªޚj,qEổv D[JlbJ ȷfA{[ z{Xiջ ̡SVJPG!ao\Z1 `ӝKj'qKϔ;< i,IJz1^ jxk0`MSiUА]JӶ⠇= ⽱G?@$Fͼʼn+}KAgKB Fy)'Np_7{X!{EӾd9h&rAr%պkʖ( pU.H[ՁJ HL.Ì3qk7;ν&Qy|x [<',6[ )՞FZoUך,hMh*8Xwe3) EgVGghCpJG~_hFeq7¹;3pP~ִr/;:$DEM4c-`bz@/䘐6Ƅ2?"' NPn*-pc2(!iL8R@w1tXHn RhXJJ2B@70-/k2-dqPOagXa E+ 1de#XQ 4Fq^ (Q*VF?DcnE\8u5@ ̴Q+14>O ><0rA%lfJ Xw]}~I|zw$W Zc~^Z UV5Gȃ3n тqV]k"[˒Dh3:}) .Ҩ bL$H2lZN"KQMm7n;h#3ZLjDe}5yu^f^˰H5腭l(uD>[_`FWPhd!R+%u -+Y Tr;*,!%H+ȵrL 6 8n9:cKxi'BTS0!(hFJ&v(rzC(Ȱ#j{K|v':;d)On@dSe ("$}R:ඥ{sF›ѷs *]<~`Vb3rqz,GeURd!38@z5eB5A#L<5e3_V' єga`Xq|t q k}#!ЙK'X}[N#Y>B9'la5sG+X Z!P$PqCt-z>k= l/ѦAP /؁qe f죰MӁʈ]^f+ܺ7;^Ք ҡ审 6IdtA8wڂL-PbYc/0ScN |~ V8 (͈?hz6jE,O_8 vS&ñ?Zb 4e ͨϔh%/*+V|Ѻ Ċ໹X|24[yLvB:p %Ha@ Ċ 3 % sunDC>!R e-Bd6ˆ*bGd&%-5P8"?S8ި*Uch$bpyid03\L&VA<džy⢉RWALN_+P?G24 ˽h•L}A"MMV$T"yu6K VMpd8K&*q4N8{jvMx蠊:rzJ/I.H|x"aV6zvt>x:aͧKki `ZG^2.7T_2LwXFH57B9pR|io`? L=2xhviPCXxte9ٍ_1} ŹYd48Rg#c_A4T=‚'XɥPMӨ XxG MNj!|5PRuKZ| v9$nR-V"5/i V$wI+-j6/'νƹ@lL,7=܋Oz_n:{/??;op:I4JISќT:BKȞC,~y^/W/߮ ݯB }`e|\akansՖo Y{TӭpW8 5H5DB79Dx;S&3{V,?9}r<_b@`a'v6j 7Y@C>2ԮJu]b2ʍ/7zK<"[-9)8 .k4m'ZtWҗ\n=}bW H`xr^h@h8|gUmtɚcĘ;3|bpx ؝1A73e FT-W#c  [ r8HOq^FQ%is0kZ! /H:KO{t=,|-ro OAi9l+Zԑ+1G#ŝj;jIY0OAAW-p_造V2 NotMv9!@`%nQIQ~&=196uMjhWx0\ږ(hŔΣO+fx{d#H6dEcF.PKRPYP G@7setuptools/_vendor/packaging-24.1.dist-info/LICENSE.BSDROo0Sʚzbh'0k{Y M W-贝Q'r2.K^Z̧nuk_q!F8վmOǍ[#hdB+֥[{0&˽@&+ H0J,+# 8%\Z?k Rؔ@0DW0D*:BFl321>rXt)raQJ"pBIʩRIf9.oya@g4?u(.sN"L;P_.9PO. /IJ7t UofAWKm ihqrcZ H^cpYܣƢ8tebBRh .xB1)"И37m0@s Ś52+C8(rVr"bI+Vٗfܽ$F28ǽ PKRPYÓA: 4setuptools/_vendor/packaging-24.1.dist-info/METADATAVMo8W mZ'+ŦNH#v)%f+*I9Z$C"R37o UyK/*봩zT 2.Z˷x;iRuBCc5^khn,~iU9q`mHTi<,qaiQ\ 6qM8V.0ʫ:/tNϵZ% 5GIBh@ck&H1^ q\tZUb68ٞLU.X\LFtT֬_*5}.,Q:բl!S~zs}@ZCPC=>]^pCyuXE;U߇qqxh!O“~S\]qf-]ۡZi46S;fea/C"yi@W8nSڠۤx)喕3vXUA"cq8DBLQgWu;@~)=t,G!]lIKBvXB|LL-JjU'۷/T*9X\QI@[b;X-{.}1:ҧ[nҔ#hB */c/@v3 V^.wK!`D'Uo*+H$x+Āx51. c9f@ 1 آxY+x5%q{ZNdMSaw& TNL:-Y^_Gi(vY\#imMj54k$Ɋ/jlYQ6uk+ g蛁a *U\q}r. ŊZB oU8 }HO8xrb/}1='s=ZY^" jk?Q :,3a);yב=J6b IǓS4?DxVYWfxq~|5FeΜ`YCWj;1* =VO ЙǢ;[ TbB880LZi &~9:|rv/f C-(_^Y0rBϯ<-ŬF?PKRPYr 2setuptools/_vendor/packaging-24.1.dist-info/RECORDIHQ^ ^ B(0dQmE*y{9PaGI8}ERP `&YH8E1u]ɴ( vc^P7f Я! )d[w8&Ri9nE e߹!02"_?/?D%HV=Sbp1,KIXc '(4'^ hNp&;PNhG0K6/6DN!\&,yAv[~V!WhK _17#Q2++/z;(`gB+)C6&bЭ #KJnNcFt/* q43<]Zkr"DyIQOعB/U"H=iXӃ,IVRm$GҪ1zL%01%|y\ ].IP~1fItMo¶a-SX$;rNaƐoW%5aѾ1`\vk]do$e ӂs<-8Pd$FsKKU6ܯXyM/X7sKعA"Y`-x&$mBD8} lXq8%[]CȪ;0J(Eɽ_Ns _gϴv/¨u\ՎJ'p7E ҌЯhvxg䍀#z큅h@%{3oGNqūKRcM"I{Jf6S+7yAvMNzt p |&S9*ЫoרC/^)T6e1ͼ3O3OU P0a^%kۻѻq{|y5Tc̫Əv~/^c;/F VFU03:LƈyVw8lZ@ RSc?VCc-Ca'~Mt /JYuMaԉi9YY 5Ǔ1 0ѤHLj 2欇Tց.-笟 >ϙ$Xw %4,C=N`rtZ Cypu`ʘ, ɀv#_[䭣MJ;4R =Na4#^*ufaaiݻ]U zwâ 2h+C)ُZ#fwPX01,\9v'fb"UfFFL.kIۄgsT /_y7L @wۻg}7$|3늾Tfx\r\z}Í@Tؽ{DNJ)S0E-3‚SwEͪvPeZJ&2xly^WM^o6|@V*ĬGpG%c> Ss²پDhJlbF"J]#3QݸoMVۭۜS=Vz3#jTE2u2jYP=SU#5,it4ujF5}^T3rzDe5 akij%ZZThZ3S"dey%FY-QIR(#rQqf#x- ZB-6,,AR\["v.Ϯ.wHͰez[)-fRs_HB+-ifĹ*Ksm*3.6t]6*`}6'V2u!;N@X,j9WJi,8n۴3?\fw*jI*ZmG~Lf2 zkE2voXK%j2.)u#yeIƲ`Ϝ[A3FiYYDu켻+ "VEoȽ[54XYunu&6 B9QwwnZMg$W*Wo+7?:}9'J8N![#_3[/@Yr;Zm׳NƋ|k*\H!1Ϋ#sdUەu-**Bk3lZԬzAu?6օ 6h=&rE2Z%&O7;'v%5u Fè'\RuV2>*V }!:<-r+xX%Ρaxj1r?AT|(Z1B֫-!c-cJJXh$`SVi~l#6lTVMSL\.+ݡ4X[:\egq? 3#Egϱͻ;IXXJ(0|vqjz7ߞzUwNt1Sp] (`  ;"aC`ydRa٦EF1SfTs6Xm'5gUsjGЩ-Q~ޯObZvqRqS7<_rWp#w 7;eY.p78kع@[{ʵг\FwE#>e]Ѕz5aa L96rOX:oүK5]9Rvs>2a,bИsA CBԳqamaßF3S<( {a^p5%.ʆD@P?D‹|쵊7Iƣ.w兞Jsj*$ 0 D4qq$zE^T0cfzGAO:k M57TXjYX3{认 HW< uzH$( ܌ P'(M%:zUpdj CDZ 4RAeŝ9n) ؅ Nwb0`L*C'z+_#[_5.¼K2؅ Zw;8Y.R%`CIOH{!(Rɰ-8Bɨ4C j )W3ںаH{\⹕+Y /qrv_>upG^͆ZM |m^!i<3^Z0^i܃l*"oPKRPYj6setuptools/_vendor/platformdirs-4.2.2.dist-info/RECORDYJ; $ B ïo;}ms[Z۫9US&iQcq h;cl$ ihA?SմFa36m63F?\Wf߿%g).vقe\| 2J>u HrZqr[Dyt%ۑĻ%> oGh訥Rk!*JDn+^=E6>(pZ#^QW0y LjzcWyEX iQɰ{-C_ԹItx+Cg̰QsOM CAt'J,T,NUN>̕OÐP!!غR>8Pv:SMzb"8)< ÇḞ(/nܟDXzG@o/jRo iӂ Lᵱ{I I{vt.RJktbe%7g"?dpN?o{LQHjE8QD/b|AkU3' a Ǯj|M`2R`U">g=}tS&Ùλt,6ؼGU__XmK _a+miy@? b.NM=*]tg3 %x !qwSW5r]'In`܌1:iֻ"b$&G3 WỎv6V[vJCu' &O]}PKRPY2setuptools/_vendor/tomli-2.0.1.dist-info/INSTALLER+,PKRPY]Xuw00setuptools/_vendor/tomli-2.0.1.dist-info/LICENSE]Rn0+9%9FKtDT(:D[leN0 ps!a,v<}}`!t[7Л_85c0]phf:f|<.}hh#4"#wpi&4޻6kC`>Bҙf`v꽵bCa-aD`v;h} 3=: \g5#,AEO%Ɉ||qx3 ,^~[fH r]lD>\,ՄXܽs@v$լW:kd[4kRmpI<8S擠{3^PrAn[@4OR LLm xU&&VΪ*g[la8BvzPcv@)lكfipST0#5 Q@X]qH* :eh""Eqg"(Z$uW6W<΢}{Tsdl<> ؋c;Op/C ݖ< YDҋUQ0-UYJ!Z+lBvfiyVyǛlP1yAQ3fӪAYX>&B5pm`t4Hq KY'VKrin3ː@҂]#_f]H7ߺŬ7?YiԱ>yF+Z%O{qH"9t}Zeْ,Y"$(][ЃxsG lb%mY =' sĒѸacF5^-*ɫ<Ӏ~(N'X7Ζ8 gRM{W_7 ȱxިvg#[s }u,K,~+| {KJL^%trBeɋ [#*R1qԤe1\gh/ӮdέP,anɣ^MDA#نepecb@B_xO8DpǹpUq 0h ME, &9eH挺*W@4(ڈ dk͟(Qot޼qN7^zbmR3rtKMhl* $@ܫYbQǛ4b8ak >mC5E\Y\j%Ldz.+4qDyBU0_Z &FiXѮ٨{RRְD=<,ץuBKG;[_n!ZGը?JR(^1U$.4Iݙ0 j!)[d60z=HNjAɀqYka*4Z}@;6Q*%sqV%T [7xTd.ddZKxAL.9&q3 B1Q?YBb2&y-!6&,DrV>~].7M+KS2ahf㻬pbk\Ix%dFjr48 avz 6Q~Ý s8^w[WAQ#+SVST{L4y.ybL qkMndD4+Y;{X&^M* Po:@-%Ge/һNE"ɱ/vYp$VMjiM+DCwi7.ڈ)bjv7-ٍa_Uq+56c*UPAAeis )qq߈f [e)JEtӺ:s\CuX'h0hy3:VK>@ۣ@.\Ҧf5C)܄Zz=Qa֥^Ўh#Z 7v96-׾.KJ4 ;MTZ[Yb[υج^&tJ~Jؗ#$R '"fI)5BSg\gV.W!Co}U3}4~j~lH6esLNvuw?rڗIek KY}(ݥ}m^9F2 圎]IPۜ@luw?1o%:8smN/~9W)j>G ODέaac5hA10B!Djr "A9A>ȂPRO0 N㗖uwj85ڻiWiqr׹/ⴧT|!v?sr9=蠠Džÿ 捧[ R3Am_'{C';4' 0skmo렪Z)+]W֟ z`6= [!(x]EMA|Iri@b /H$L.:c= S)j^A2..gIj)rh4؍fl4z Mu,KF}r4[HU/bQ B8Fn]: iN}Ȏ~9yϞl=s;8=2:}s vǿl1OJt!DFr۽laa m^ lG;l4 \G~¡>J~z|^ ,P1oWIqS_pz鶹 h~C?3 ef@k_)c!wێu,%Zkx1 =ZAtߞ?vwU~A$'tK HW[c Wo>:Z)xL@56LZ&v&"7*.5{z^׎~5HPKRPYP4/setuptools/_vendor/tomli-2.0.1.dist-info/RECORDIo@{ `fsAbƱ*UF34%uo@^'͋&%IY_81V"kVU7%x5\Q(XceB?UIY`HNXxX%m#=[\k_kYb(2a|Y$gwplשDnbMB7$?su> =?,0Y>#Vk 3B\QC3c[3YV*>!by J—Z9%'MJt qm$3DŸu>]Y2op[mQB@H)ܻX~0mRAžPv(&_ ;]w w7SOwUJ25婥r[ $g8 CE/D"3$V$Je.H\0C{( ? b[ײ}ZGlO,C g)M*G  v;ChnOW4^+ sI|E !PKRPY2setuptools/_vendor/tomli-2.0.1.dist-info/REQUESTEDPKRPYlRQ.setuptools/_vendor/tomli-2.0.1.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,Q03zd&Y)r$[)T&UrPKRPY6setuptools/_vendor/typeguard-4.3.0.dist-info/INSTALLER+,PKRPY(ښj4setuptools/_vendor/typeguard-4.3.0.dist-info/LICENSE]RM0Of3ĀՐD2$ qdҹX/Ћ٤JiNKu^~|Y,܌827ۨq_|FBVf|yxj'l_Cg+!W6CU7zMlsE% :\0'_AAh8s*P;g]#]kκWBY5m̞H {Ew*nG^c@zs LjZ}*"k%@}yD0=&!XpF1뻻 *c(O9{g(Nk]5>LlC  !bƣՇ_ur]Oj* uCKPy|xݏFcQˠ*@^A)Wf,b/h~Eڜk*lr9 +,RtE*ʣm K2c$JaUF.ŭYDM[GG[I^!ƪȥc)UWb PPZHč"^,j" }y!)rUa#xNPKRPY򤻈5setuptools/_vendor/typeguard-4.3.0.dist-info/METADATAWn6ˀ."isY .hh Ej$eG/؋퐔KER{d?rJX;7Vh5Q|DkeLևyr53݈>*uL\UrIÿ́ѩwoUiYwd]6oKQpeMre^ϗ#1BT9QfUԅ̈́ι%sܺ|bjI@QJXMU׺5%υiV:g|7v.m!a^B{L2kLpKxzF#RB-9](UK:mKm_'o6 BV;.>7%jвy;_/jzǏO8ztH>ZaM#z{3maD i_NޠU0Ҙ.5֭F,YH\^> ~@ )` 8KmӴWJ =&CoKt~!J ߡGi` ܫ𚸷޷n*44e8N s;^d `\bI`yǗw}cP?2.@R|8ۺk VVt=I^ \uW*'YZ.z𑻉Uc636PYW|9b3sX$~j,巏x^ʰ oi0UT'5o,7 LI$/l_]53\"ckJyċ瞿$^c>{0˝9Inp7 <|)OYb%3p{,!T2:Wfp\fgC%_ o>ev2&dw5j&L)YLu i. GS4Zq:UxxZd=B%XY $IAb͸`WTۅ2!W1-U+%]r6G^ .5D ,Yg=j _i_n*NI0{d-< vm Y 'Cln $G(aҫ9=2UT1-R[E- ͦV3xH"*dF,gXN&à7 0!?—X \S#ԾG0]؛11\c_^\^FRF'͹†p;40fL۩bx" .p` D8_Arm^Ĵ7@=kTG*aV7vWZ.n4l\i%0Qfㅆr wph)lѵۇJSThhkaW: " dO-G{rhɷpxɣolgSjۂIr#Z6A'D8›`ck%PKRPY)Db 3setuptools/_vendor/typeguard-4.3.0.dist-info/RECORDɮFE'G 26iO1Mi _lF!^Pg*gfIUIKlcUQ,4 `:~L !(ϺUJ&?mӵaJh y_ɤsw[O0!8ieٹڷ|r,a$Iߡ y/-g*U .,,jAoI͓wl[^%}Jk7=͕yњPۜ8~[q0 ]f@"M8a= pzB4X  5DnZ㙁Y 'u71ԬtUz'⢲pݤHjם +b{Z)^=Z*YnP.Ezc/:NXƟ f~  ,$@^ ?>@uODaSjr\ D9Dž]5QR|JPU'}KBX@c^2Z'~Cmr Bֲy )jq'N Iop6Vp荸\*,D9vs;'0J` ͤ/bNt߯+\w['0 /U3ArĕyyG)6.akRxSӨ&ȑj-'-J;pTs}汷#=lb*~p2I H֞]X1т8!LƋEbI)-;ߊ"ዅĴil^Pb-i"7a.g 5Q"*~pVޔ Wf&,ZD[?T8'^R((a(YX‚10:E0?ȕZ<1NW62)yҎ-H?zN6r|}(@r%1US*xQ_ oc73FMc^tIZYYGym lVV" }FUχDU7$Y?_5*MtOd3Jٮ~a~WQ^mE:xJ~Wf?6m2}GڰjtEO=ũݦfURl#ow!{ݿTإykh/N%)hu*QlTɛ#Qo(cR늇bX`J/q4CPHeG_T%cUmZ6Ls ,ȅMD%_H029[#j(1I/5={*%B74JO˜rY?(o*&^.p EqNjCfs@`LZP*sR:@?[93}K s@an[79ma+x_6`֏@) Tao/3FI<#CqF,S ՞dD62T9w\5<W} A_7@^}znx! \9Gd{ԯut.Ԍ\+h ΌGÖcw{K_:9EkQta Jl<D:I"C o*%W_NH-L `5*D ,Y7}g, @UoYA/q7Ew7ݑz.(H3{n`I ~t}0oxe%&cp#{+5]wx\?In f߻ōsyȗx]09M_&h7[g+^6@~HC }Yo=όws;K$ʅ]՝+ê\,b`A#>ܞGMc7x"νs &wcŰ]Җ ǾoݳXF~pG|kGw k?_gm3WUID1gV;PPP $50LyDR d}o5/! SxHBњ T2`E_) LSf4TI$3*\`<7@+Mp- ("N&JYyUU2O(2 M%`| JEnps W`˫-xӂ08R!VS4 ~R-l},dջÑ;{H_*9 '~= ˆ#a_k)䤣oѐMxޟ DIB JI%PuZ%oB&vQKPBC;thd9}=VY}VYУ<ѣCb=0䓕:D(X*"kî5fb_ԟ"[hkƆo7 Ql V-612ߌ'.@<v$33K-^DyUrI 7:UruutPi^Doql~UT&9x%&DhE4TU(5Ç> ͽ&M,%=QE+֦2M ۚ<$iɓ/ -%,c_\wLfAH˖NNNPylkl|Ew^?YEhlEbh U^U-O^aնϮ/✤tPDkksrMP\wFelם.-M&fWfnbbvMCb$\=mzj&E?)3T'۝Z %մɽMg#3ܓy32Mmѱ}t^YISS i(B:תR;gXyшY='7SNy5gKu<`x@F"Ny^>7[iV9hjcG twev{qc`]uY>WwN,ik)o *yء6qvRSOGsSk#[=H_eivV-|y˃e6Wiu72ɞ6F7M;7bZνEJ\U[(^nwzYևm)`:urvϗSB[e52$;x$4BQ @!C3Z!HuN_48{F(qTY$/Xެ0dhmjc#ں{h[8{BwL 8Y ZEw>q%22 IKB0c־hj$Y1o|7~1ҷf0p@4z"a7^}gBo(e坁pz_б[Kܛ;{@ <=}p22C#ÐaZCgDUIw;Bߐc2Y9LLUnJN7N G~BaOș|uz[]`xo(Ob[G%h|6+\~5׃\ PKRPY: `) >setuptools/_vendor/typing_extensions-4.12.2.dist-info/METADATAVnF}߯@!9- iPqlZN_^qGF.>oK:Cb@@Òș3gٝA~A5#؏\8Pۀy :GbRtdQXP4 n t:GdWupM0uHWѷ/OX/S~DYJ')& t'QJpL?%8~OD &Rg#xv\je.eއBz>W8f.A'Č"ΰZ/jÜ!o%^j~Юwo%w ^R6 X RtIͅK#3齞it#xf`9aB"F#0vV"1f;2v4y@弽r vP*&A\#;g:}D\LN((~`B1N;rwҷW7MVG× wO=-to6٩?a/Ϩ?sr9͐PQuH)h:NDn@Nxi]GI4l[,r(UHQG]Nܺ?×pXiK,z7b[5tפwE֯Sȟ艸W6hL!-t P@d<.Z"T~o.*tƥW)n !xCai!VP|@?b@3> .yRZfHMfA͐y#VE}k*R:u7l'eex2E\SpXiK^q!}v5M_&{i#E5pI@DeV嵴ѧr1<}M˩aZg.I`u}$E^us?)jib{P8ӆHGbrH,%y9_Ɍ,-2w0n Ojzq= a[UyIf"'r:HV*8d \EXyA_I7#̮qO~Eq2` 5mD M_,,Rm*/+|o{ j[>B5!sh?QG 5=^RJEbBtu[2|gs_$[*Wo?^Ht]R'YjlL9D?PKRPYy OL;<setuptools/_vendor/typing_extensions-4.12.2.dist-info/RECORD;s@䟀/Y(+by ff ^ >4VIA}|ߙsð"hNHXgMY䬚DEWr dq۟&u1$U'Ou@WB\~MPLJebx+KŒzj6vc052]:~&['\yv&ȿl̾Hk_r rsA${))/ˊm}ɛ;l/@ 5B3N(GlExA7Iձ>Í%if^"HJ/}MNU_gy,R!bi2+FPwcqPKRPYRQ;setuptools/_vendor/typing_extensions-4.12.2.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,Q0ֳzd&Y)r$[)T&UrPKRPY3setuptools/_vendor/wheel-0.43.0.dist-info/INSTALLER+,PKRPYS5setuptools/_vendor/wheel-0.43.0.dist-info/LICENSE.txt]R[o0~8S+l4Ms) 4ˣ&x"8΢;MB|.l´zrԞ_gs<<dj2z܎~/or̸O_AMv9\!O9c'0=+g5y%Z| xpֳ{Lf:"- ~@g{U|9xrғW>fa7 ANւxCmHp/]HXAЙvΗhܐ@g-,Pa'}|38=]]"9E`OaqyBJw:EƟ{;u&8r RKG/_`$8ƫ3z fssM;*jQe  ̫{@=|eQ 4P 7uxیϰ½oDPYA Cq iW,@Bt[PVUÐ>Cؒk,lJDV{ 49-nQ Ϲ*2CetUJ 7 dtCYtU!c7uY,!/**k. qu*xY CQE+ %D aZ2F jKPKRPY4"`i2setuptools/_vendor/wheel-0.43.0.dist-info/METADATAUr6}Wl''i5cUXDz *3 ]bJkkr8O` A"Y4rªuHZY|kҺFt*kZiZ ;Rp 6R9XoUߕes%n6~Ro୤sv6|JR_{}GE/n喌 hB2ߵw p8ĨR(qmRY:-e$Xxm h dHwn[]|~*|&0l[g7ηWB^;4lFud}*?]DϦ޽Gmx)#/r~ XC  ~H~╓py X[еGЛAP$b79*X>*Y,u(UP§fh2i M}lhli-;FNh\PuMZ[4+c3۹A2dJ)z%_B++G B%8qik|LlE;pXNT,S =(,i()>qHH.s!Ki;ڹ>k^7)zXio92J-Qg|NC!n <)zz,5j+cJTz{rBVyz*Sy(z㻢2Xv mi *Xb_@6mcR֙Mb/faHbSvPʄ8bH^LTa4ci;$uH7fAgDB}ZpGqA33 Pv˘{F} W)!O p6>Ȗj~CKF66XNg #c)sDE*#&ݍw㏣y(!PKRPY@0setuptools/_vendor/wheel-0.43.0.dist-info/RECORDٶM`8 ( hFfMvbNQY5gۧO4$PI/1I=5WXw1*0qSUKu y7C´ഌOest#Lf g3XU6c)v%ucwS r(K A רZzmut$GΏXgi=P'jڪ-/~C/]x8iq6-z_&Hm.N0TmZ&,HͶ[Ii yF}هiTUɲm*R3LͧNqHg$vCmpͲxZu vF,ڟU^"bvPi_([<%Q9ErЊ'xy@F5G>5!aw?i9e{:鬙nM~ {x7PO+1jЄ!+(êd;o5sǹ=nZ(rӲѷ"jiAmA7eU((&ЀK6oZ ikQ'y_ߏ56CɩX2:сJT] LIׇR2,p^ y GaWHb um i3gboU>]a\ Q%Jè=h PX9vM u}BϺ!<?Nk}[K IyO}uqr4E,DYss1/Gە%JOb*\f FЏ¸n;HɔJ4l i{Ge5,%eB/fxRpeX oiwaKOQa,%ginPuӍhU^5 ]ޱ>%ߟペ K;Ńaaƒ) gv{"R˷*[ҖJRȓbe?ő1[@\"]E]/(1ۡ0|ĤGSn"03BVuXV^ 8ƼpNuԯ%)ʦnzaM]`#;&)_PKRPY3setuptools/_vendor/wheel-0.43.0.dist-info/REQUESTEDPKRPYRQ/setuptools/_vendor/wheel-0.43.0.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,Q0ֳzd&Y)r$[)T&UrPKRPYGh:setuptools/_vendor/wheel-0.43.0.dist-info/entry_points.txtN+I/N.,()*HMͱz9Vy\\)%%9zy)@I xd H"VHl..PKRPY2setuptools/_vendor/zipp-3.19.2.dist-info/INSTALLER+,PKRPYSEO0setuptools/_vendor/zipp-3.19.2.dist-info/LICENSE]QK0Wrj%gJ02Φ906wd_<׸Ņ.@o'{zTѶ t;hz:z|)ntjhf&.r uq5AbXG`|U@km=fo#9dC\C .5ܒ.p6s9& \|:%u> . OsffcGBa~b18dpʕ'Zto|MiDI`Z'[&R;? F?'.Yx0VF'8꺑՟L$">_ 3ښdV/2)x*4 s^,Rܕؓ&ߧx5 e ;i( dX̥9&l+MA[Cɵ}5{]J|,UN U 2$kU| d*O6u.RjsK ;,Bhq6FblTa4 zHkYU 霈P qgS×x'T*OPKRPYûGfiF- bpY0$-Y p{ 0˒&?hPR[9(jTg}aJ1 \0v.uJE {\KYB5MAGc"?e-+[LEzT*ǂst lɄT%,Xjkq o թ}F؝WU8R:gAyިK=L[)"tGRj~G/˝ˋ]ھ\~~GZfCwO1@`51!Q]{#]"6[V6-bk۔Ľ" yD@\-,]Hյ5m QNR<[Dwc7:1:N9Q ][zY<*5mߛTX~r(%q(z H.4r#3: &1yêOzpdz~;9ȧӎrR )sXqK ӥׅX{Zj{{S}oPKRPY2setuptools/_vendor/zipp-3.19.2.dist-info/REQUESTEDPKRPY{K\\.setuptools/_vendor/zipp-3.19.2.dist-info/WHEEL HM K-*ϳR03rOK-J,/RHJ,./Q0313 /, (-JLR()*M ILR(4KM̫PKRPYBOu6setuptools/_vendor/zipp-3.19.2.dist-info/top_level.txt,(PKRPYMU""setuptools-75.2.0.dist-info/RECORD̽I-8 D^fP@FBF` Zï/Љ{+,D4_]NugE4mDaToMԃ1wʮ4f mBk6S-tg0xf tS/Y[i^,vGc&=ÙA(<݃N`w61j,^lrn>B}[s9dʵޡjm ޵qQzyrRҏGC ȑʀ`غ 05G]V-.4K}p,'/p5hbZܬbh/Mi%I=5` j%vHd[u8of6wuս`\)(G -Nb-hS\ W< O(&(i'M/ ^WGÈAً*ԙ*I`=})c?+6׮u{LJp/dU=7 (x(&Ŧ%eij6A)1dd (ZUꋘl;x}v fQq p۵՞u–.!vȶ(08SY]Կ EQ:86@, VVW̠M9AH y l$% nh~ [?Y)OT{˴!o6v;fm?qi[ Trd4%^XJˆWndB/C) (I_/?Z͂F-x>(/1FJ =MpP51.h|km\5_e\ #64[Й2w1XW{aRA۾0jzȪϠFI|5ωam @ ۣw_;Q3qho@iL+ Q|? vU6nb]@0kT2_H_{ [=:I~};;M7AHꃽn#zٳ]Sx |\^J,Q&L^FU.nSoճ؈z(xU1r?r=m` 8N;6c}VS#]t$9p9DKwj#d7/TElȿ0)4$! -r4pXf7=6ho~|wiq' KK]HjwǦh%%>ګl&b^lYxSC#Ќte{Ь bPlSFO_l ;t!]` mZIfQWq.a^)AHv$4gCo>Li6n{S/&Ic5㔛&eD%|؋e577w&!+okuLOz}rmoADj 2^;~-b2Aݘ.'|b^,S;OmLKdNaVMR"^Cxa\0/O\PzAΜז,zz2 ʐw<0)uɒ> O^]Vץ!o}*{R.LZFّ9; C??hoys=2y $Uwn 2  jS>=@y\ ;^/) wM:{8[ZuebOp5.DcBi\H vŐGVI2]"< Lu+{o~U@~hS]Yw(}dҰMqBx(}0$囫WYXM߯,9粐 `eܻwk 0ܫt}W`حH a=PàG7uv,cͪ"j_=<8j]ܹrI֥ɂl0kͩ/TNJ*x%vI|jw\dv/`lթX0zGB浨d ^11PǬ)ups3w;V9aP2G7[agQb׀. MSWiSDHsݢ|*^w}<.V {p5Я_er//P8G0-,{hKr6,ic؇6k֗MU+^=So 7R8c:W"ڍ7zɢU3^`*j il%HNGģS~WkCuxo?s Xhh!qt̛ ZX7O|:,6#((i2p;6cVf{m"6^.̨ FpFshTֵq(zPp +Cg%/7l +WmCUM;?ݴ-znhB  1#@ x./eT++\F 蘊l13om: !*J1f/ >- HEb7F}exc%g,4ʛhH^cVTO֙xYzAmqR)za(.p;/mMYI\G;l̗-~Ò3ף.ax:U{VjQ,5:J>c/Grfg Kew $#a3֊9œ(Nhӻ)ݦ *}P9&ᰰ%{ݸ\bhiAߵ|5 ۸I-3h<1=Hǫi nh_<,+]Wz.w:JeXM&66!E/f]tusO Ą"dEGiuIn4 @O{=^cQorAcY3RSS B9rkЏ#^Pm4$/2\ċ TBpJ'~7yegkpR9hle.Pϙ }9hKY:M`@eZ&qj9aXv,x"WX OAazfGӤxއ!V1oF({j.*$8AvSڦ \2W$MD[ IُtsA}eM'W۩\b(υ]s\t[f=x悰v=SIbxWR$3bm$^Quj0lIX[Sm){saä$/+iiqu(,#(GyGf܌N8DCRtb {5ηWy[8%}t.t؝XQ[1Fz (ar{ᴇbK1mcJmt XffeŭwB\EO=![8_,hX{gEF|KR$Ft|eVVLlp'>ɯIպXrҩlm~Gv$56 mUJ\9LV7KW{Ӣ[[ٵԞ`&UM BFkl:n 2<NȡǬ (zǬ>hiE66Xt w nHyV3'%{ˎ?rxCh),lkH6/'OӧM9lc?l ` duF{ zaÐ/n8>sC輢ί|EOZڑi3L bya=~hb;x)Kb!B)Rɸ\3tFa_v7Qf_9X3=`q#·4o10q"ExrdLp?  wN~>?`l|ta"2htFӫGݩfn.Ty>N|c?b4$E3~{*PlLhw* ,^O~: ~_'fpEz(XưCD\Ixm (_+26pk uc Q)SE#IgZXaW}>%܏\͊ap<mM7N[Q__?1ǫn* 65jQ)y94gV8z AgG7CV¥CgcO[l Bu_Dp?իU"މ`춉)ↆm պ˄$}'J$ 'V+jt0$07Y(NA|\;W=[$"ͯst*B*l g40ʜ }xЄ\#fo|J?fo7cɺi6$J.$ )/ܿmS/SN,!IRS1{{3e9Z&%'/'A`e`S g6(2qDmvQ q/&(Ǯ"_`\ R_ˍ/:zJ}0@{/3yq>E-X< Z/HE|kw*Q)_O{J΁1s<ٖPYGszQBgIIj)8v xD&r`W;IJH(,S7fg:89ٔC *uILbmd=&aƼ$-JzTdf-¿>#|Sr 9e!bl΄VF¨ d(;A}|T2+`5xIV=>P VMo)- (a>sZ[㦹e%d$[lCdǼsi_J@`- ,¸U֋ݗcZ4qpɯ һ-2WHIUS6~n1Rb遲 yIn#&ZR}9+io0' p|+' ^ ?@ggS?{&JQr_]?*Vd#Tl#-#! Z7u_O0N,PX,DY`.i)H 1r3g/Ml򉰎&={״纩#k*\Wd"-u XK eb9{~1dIZ[/gZIzEѣ\/~y.㪟$:]сU \^f_$#h~a%G[D>@09e ٻ^]Sf z'ek2X;. ӥE5Z)lU <&_oBe%Oy EVQ}0hgՅd!i5)uG//@)CWJU9qaLlHGʖ:no 1/JYŢ^A<&N%v)y@ =MrGֹ{k16vNmycC I2>? q(2\ 0܈ú0=Sf@̟fC qQ :[nymQД(R Yo SfU2) s9H&_-U_AʋP鷺LW]D`P"Jn?SWOZyJZ.=OĐB˒;~aߝwdjSyڸ@.`'\CvRsۙZqK kM F!w<&C5ҥ$߅(0s⿀!HZ}~rƲeĮ !qi2P[W>Z ]Q3E~L7_)S3d/JPBsE-2Ɉ^P֘:^Nvfv*!kw%p ZS^B'~pFsR?YXY83C #2<99$=sxjjg#|^z>R.zW }R<>G1"![B6tLUa.e݊YYFS"lY+( ;<_%^S2Eyb-ȁra]SdISd/BPu?pB5Uc]>pt{1x6]j'QF8g[ˇ.|q;" f2Oʜ+U%U3{bC8YhGm` |;ßQJ/{4Z||[`Pe6!,yÞx;!>py+h]P=HI<eYӥ7 ] <i6+بuō#gm^h#ɷ &f3P[ ̈]C=!bpu.vmڧ/zsbqcB`Frea&hGBd[$J2s?@\ GL>ZĸHM32@w/aT3OһxVjH{XJlrJU ?|;XQFRV});ٴF C~?*ތmM"ClZଽa" |l wXo TPE|~JbxѠ#::֊Fw _:Zwħwn? D=gx=gM} [.,xOƥk,%u(\ӷucu6 m9͌4*)Y*:IҍO J$Ha{C $s ،a{*vFvc V%~W7F5iT5;Kf0x[LrÊ7;1_BrQ ew0$vsntdmTL]970a%UKTY=elB%Eٻ3ᑻmC"Z _佯6⃠+h8C.wDaC@=k] 'P{ aXw8\p84F^+G ЛtTz@]b~XcX(_m ׽IeGx4\ʤ|/|<`>}"ٱi%޿F-bKH!6.lk&]5;%WO1*zpzUU˅pIbǥAntaO ;>Yg#;;Jt+O /(v@P>i=Jx&~=^Jz<_*1H?Nsw@Iw2D O 曇^tE^ 1b΋A2bmn قQ}H_8s8\,`p!:;rF궿`UDIK5@ z5+ nO\@#''ҡG&ƾz0]s~4 p~@^:W==<<-BIk3A|凫ڷe {Å `S XfӀ9vӕ|rbbh-_F{hWD9$E _{?\/!$D'Jm MgE|<-] Ɗ;FjG)&J= 4ϗ?_W} 7<b\9JS}JL$t> C`ĝ%)JqH{U%X6/^*lX~qtKg$S좾LX􇵅e(nGb43zXYz'oVf-?UCAJyjR:z`=+ ORVLp".<*sm͝\o.1T[(ɾy5wI ,gw,l׭9VwOfwozW.t?x)ocu8r' eEMȀ?~X5-qvڡ{o19ByYz4ʇÀ(A¿,Ȃ?gD<&$"ЌZ|J[d !]y9ȣ>:Ht~| ?<YoOr`D4t*҅PJwmg[K9Hg l3Lx@J8jw"١9*4nͣ 8ro4swRΒVJSMg l h{M;)JaP{dLE#?4n9q🿂^A`\:4ҽ` ugpnfa#s?՜ܫa~^ r"(*@gTPKV!o}qªl$?3O?vF pIʿ8|m}xk{G/{ sY?S;93 B|Պofu(Wi*e *4hXq{{ pZ/-pqI1gS9Z=3:6_YA> l$!/. }O{gA&1G}o|]gR<tGd ޥLXZU/. (RJ]"5vp*؜@_"A> ,la\=ǽosqTQWGrv%uV)AUN<FFV=6G^å ׇu{EpI}L Kƞ;sI~ڕ-쬇*`75N1XY(h2 a})ҡi?~zh*CƫEd>aVc:2s[k)ǧ%0}5qZIJƷwi=M]P&WY}tC'0^QǺ^{@9nƲT-(6]" 5y6 񘢶}ӡWYVP!   u2*6 kKYwK+ir4b~.,3챼ph,zٿ f$2V 1̠jٸX8.:KUvR+ |=Tv4#háB RCIxCcՉ̲G9"MoMnZñ}x%+tc} 'O75w`ifkYj:G-;+҈V*i%_ee7! "7Z %-gk.q3qO ym*yp'?7Vn\?wu^d՟'e"C}^GE骲{ jdw Q{L}zfb%w\e#ᕦ5?oTCB.ha&{t(/нB ]磈<!9Bx[,lyu'%k޶s#xneXeh R+~^ ra#!x}( Doϻ:5P]l:GƉg4EޮΣ*[?CGL u􁄄ƅU=N qƳ]+Zәa0C?*LoTxI8ާ4n|̂9N/!?A%}gcqӱ|`ȃV#T7?NLnǰd姣^4V\{LJD_ջ&s.)BOk6NOWM4 7}(ɨT쎩G}kźgm(!$Br~)uӉ#߳@}hN+fiF/9$>8th_&zWSoH$S;%ȟo LP@ti7?iir N9 FВ i2 ŘN^yI9 U˟@e+TU2cr27-z.yvzU 3({Wi+Wm͎eSR7 Нck˜ $st+! ëP {h^9M,={^5auo! Kð7?|jFMQG`!-w .TܰFChc/•o8\׶]tYU+pщ=rGȀOu"Q(duzeҳks?/7TYcT{ˬ/I~7xxWQEݿN"˝7!=MCun7^^q+0]om/o#oп':=jba7lUw|x#]:oy}<ɏ4@,1 EZFl {q~y@Yf=8<܍$iez3%׾}ϣT):!dT\{_WDI |fK( p3I^|+KZ TXd3Grb6^xq%wnB'_!>?jĕT9Q ]eHQ/'aQP^ ̈KNu;K0 ###bEA|~(3b\9w Xt픡u0plHB|F ƟWi^!2?飇5XBF2zr8ӺH/Fɨ{{>לɐxۦC($<78Z PTPN;w(tTjKGa+ƦYg=hoC#1c@6{o1[wTH^DG~XOg-xI$0(in+4џwJ9AD3%>)%xT_1.jz WAmRZߣlN]n ͂0UpإƌE @R}u4IcB@bHƗ27in$XRrG} ~$Vp{*`$~Z<) (XZ`8tѾxD9`| )aXu67Gn:_7_8lusP Sw؉Ͻƅ+"YOBPK+Gii(DUjZK,<2@Rw7/D!oIY&SGnr 4ޏSRs?DGx5NeL޺=s}\f}lJG]Cje:3IߍO|_M.5$9f9s\6.dw OcvbR+M^ ȥ ^Ew{1紺L7$,Q+(* Xsw[lS)hl LT$gH6='2 w;N4y(_!c TTT,R҃12rgVy5тyF( 8y61iq`Fos/}_="aaUY+K5_6>!Lar72dfX7n~CV=C?90w3P5m$ʐH;Vrs**/aSϩ_Ie;Dl8 5CBkgg{ :p9.}!P\bl:}Ir eIuR.rnrꙉ˾E|^4j8UP {[ ]7sF`C.rD{Jw%LC ˣj._؎f,_ﳋ__Cb{*<Ψh ^cueCrMQo,D>ETi(z5͑3-ϸ⁉|zGȿE8Lj&226dǓr1!:iWTN3̷Icޞ -Yz#~:Ǔˑ{&TQ(X"|v K)Ƒ-dI@ z%gl%ayA&;B;ݹ  FBW)n[/M }Jr tAyy} B h7&楞D!v'zHY7㟾Z[^ /vL.6=qCY^_4 \~KB`x,#MϷʽH>]ʦr`ZPi .: G ^Lu>w[lpseq[@]*^7EJ]6f`<[^ydmҽE-{dݓ2T1e&lx23QjK}SEw?9HՠwiWGĭca`(~EY&8w^O<3$A dZB%(c%QtiQ"t V1h5J9![Nݤ8_gٿNO!2eLDA·rnq1B%_{3^vN#Uq9"o!ꑭ.^ĻA5Mli{#WMaᑇ5Z%t{-pG$eٻO}ޞ */[UvAVK58e YzU[W "7棹X9׫wuaX0{-űd~țGAޠ!C+RdTN?>[H;'PqZ'71=3ͽWvR#!ye9)0 e[ĐB:o&4C&6jaP2B1vڦ74Ӵ> {۟̽(X5yӮܼNȓUhfK ' oWNh+^DӦ]X }yeOLKʕ9e]rhziU2G92زm"un֯.M'&It{/"z)OCK#r04fҒI1to kvSZަikD9Ji4x'UmשteyEdvwrH %j(-8z ;~!}6iaf0K0V\H'协W\_gUSԇz-Uf}[ hUq=chmx(^ep&mƸ+fP6rơ]<݌۽BG|)*@Eu+P6XW|.㥾O}\h\YS{YmޙY?2+K>1]pm8TW,~{) D +` "gnpHJ&Up?GɗGTQPRt}K|Ԣ1^zYdN*fP%x?_Qe.׆- 㛝R0ѿ%̈!&<)SYk?uje2swH0)*^w#f޻UezPa.~X)iD/UݎWkĔ=o6)"JwGm)̕7>{o! 72/kvxEnGql; nRX!,Ni߂Wu2ϸ_KY{ӭnraH yO<Z9Rn~@{ p9^}6R.]Ia$ Ӗz!O~;FI# %/žBa4T{+>#/糃֩53hqb l^r^dbL. ^WE՛zH Kã Gp㋵+>m(?ͧ"ʉ|[3keSM.:9$zSfi}v~e#?BxF #)~S*P;Ob}o+$A6!@V эK: R}4@P^^Sʘ`v,Lsh;^mחkV^9$+'v#VB㽥 #xG{4$79pˈ5O DMnƱ?Kcj9K&6=Anl*i%q'B 5z{Œ_Yw%~!7=LE8\9 }\|Nv#^ِgl<ݍ%ő~:> #j\  ^=_?Tģ(MF0^(hZajYRIW[e'/` Zuj]gqE+n7z+ZA'MͺutEԪkK=6Fst90Ix/Aߟ[Vvt!Il!4]̅ pjYع[eD9=8=.ld[2P y yyrHݻW+-Cz zQi|]2Hv26 kD:hF34ԍ>6v. ~UJ$m,XVE=|!)~ճI&y]Ir\ bA3[_ bģA}=o`pl{hKZZj\4d/`uHP~K zzT^4n dn:[A~5.WIw<},pM&a/i:ya'=ɀOB̫]43F&JdY7T}нvn2 10~@/ozZc&mΒ@: RVuYx7-Ʋn&??'ѱBŽֳ"AtR˅<3/ͺj,ώJjk~ll!lKn_6ڢo&L`8!AL<.N7i?Bt!(kEJû[ZI4kغ4~&4|O{7Xܳ/;ԗ^z'fry m ?TBtU:{h:Nv[cBTק~]ٷf6LזhA]Y!w͐A^ArO/zxg}ua. ,wbNFfy[/wy(nRdv1׍ˮ݋zm1SdR56(ƄNOڇA&yuUjzĹFo|*-":CFm w颵lZQX>FOeugu?%f%uq?C{U륔v LqrpfGwodigM)r>_U34 zl=vz9>6'Pf<- =7ɮ4%ҳÕ 7;9zWtVkz9[1U<\i<ȶzXD8mhežZ5LRYH6Gϱ-,5NIX'<ޯטi'=s~3WӃgˎ SLzV{9fG}$Abw"rEx@ hXO9Rzŵ`k,__|0^"[rqKe,(rFëraT&pb0LwUKdcwN"$^gl;to}Z@LFF`aRCo#/u6&K憏4KMqNj}}6]Ė8[gpxu JO"XN GSGa6 ^qF8;ٱ,e Ls?m6_}"UpRex4H5ף;X7FD5$ u:OZgAqWvIvգm`Wf9Qt^~pX^,ẁ瑑T: YZo5;-˽?>O^"V.Z! 9sji$S{5v9k?Ӯ~F8ר.ir?DwQu_Axշg?lf^ }*{lA7Gf 8d.l|^6jWFm+zTtCa/SYƺTHzdξE,{Ub/9z -||4وli֠vm*?bZ.K_0,0?F56~<@q lĖ]Xa焓kⓆ?޵ {@_@}&:<[4CڅR}vixL%⦆h٥[G u >s\l YBj^K5,ƣ_ӎ F3 N;ڹ݁%F U ^2ㅩ|qj@\#J "+fx5hW}e{ߊQ'Pe1i-ϖra#حWpa#.a,ݝlfh%5'.-k?cI\؄: D(]ao%y]|-53]3t Lj5dlC^/tU밳N'}gy H\,EZWa2V0BKb ? P5޷L& o;}d{&*}Idjh+[4,^9^Ô Z?|J{BX6 =z[:(|#+KXl27Ɏy1y1 ~I ml7? b ~t:n%$Ɨha^}aGgXrj@3P#Qvn8F4 koN;Gˈcz!jNrI VNmxR<ߚ8~`R-pT"P~n!VunE{9S( ?G7{POvQko(aX]NW{6]<ݷ*ZW/D5zFLY;$+7+T֦) {Nf\ZXҍP {R*w-p`[dkqÌtّƗxϦ#U!^JnkkٜcHhRaRVP)ފn~`KG䝔z%0sr)!ᖾs}0|k?mk/ @1WAbN|0Ŝ]WFYo0q+,!R;T{;_[#=oH^Ð?E|b3z&Hݪsikrc^Gb8o8M>{ʍUCD.PuKTF5X)p<8o}cy'Oө׮o͘{ -eŸEs[:Eb[}`΄\+^\O]s}[J$I:yJj?׺- W*sK`H]ISlAákW%XN2+Us^EVRRܤK^cj &CThZ99ѢÌ~L6nO[~i_Lvl=J O&]64KP{ vUivgn}`DANa[ ;9z`MڭT)0,tk3i8_اBʆB=gTK ^L 9#ghߟ˩%@ۍ;xg*<+]x6^V&KnCsVl~r@$w=[c+˫&Tՠ26vOJH'/+l&Nn]sܱǬGN9Iks0Db wp4qU*KHvy{MJ:[VxJUqPKRPY}a~distutils-precedence.pthPKRPY8r b_distutils_hack/__init__.pyPKRPY ., _distutils_hack/override.pyPKRPYc7l pkg_resources/__init__.pyPKRPYkI)31ڍpkg_resources/api_tests.txtPKRPY)pkg_resources/py.typedPKRPY_pkg_resources/tests/__init__.pyPKRPY?8>.pkg_resources/tests/test_find_distributions.pyPKRPYJ/t6Ϟpkg_resources/tests/test_integration_zope_interface.pyPKRPY$#pkg_resources/tests/test_markers.pyPKRPY:QUu;)ɢpkg_resources/tests/test_pkg_resources.pyPKRPY{]z%ݴpkg_resources/tests/test_resources.pyPKRPYc)rS!'}pkg_resources/tests/test_working_set.pyPKRPY9Xpkg_resources/tests/data/my-test-package-source/setup.cfgPKRPYUi8pkg_resources/tests/data/my-test-package-source/setup.pyPKRPYmw@\pkg_resources/tests/data/my-test-package-zip/my-test-package.zipPKRPY^Ɛxezpkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/PKG-INFOPKRPY&{fhupkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/SOURCES.txtPKRPY2qapkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/dependency_links.txtPKRPY2jpkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/top_level.txtPKRPY2e~pkg_resources/tests/data/my-test-package_unpacked-egg/my_test_package-1.0-py3.7.egg/EGG-INFO/zip-safePKRPYSKQpkg_resources/tests/data/my-test-package_zipped-egg/my_test_package-1.0-py3.7.eggPKRPYb(*setuptools/__init__.pyPKRPY C&`setuptools/_core_metadata.pyPKRPY setuptools/_entry_points.pyPKRPY*wb setuptools/_imp.pyPKRPY(Gsetuptools/_importlib.pyPKRPY@/Nsetuptools/_itertools.pyPKRPYmsetuptools/_normalization.pyPKRPY M setuptools/_path.pyPKRPYQysetuptools/_reqs.pyPKRPYBsetuptools/archive_util.pyPKRPY2^N6setuptools/build_meta.pyPKRPY5RX.E3setuptools/cli-32.exePKRPY8Ksetuptools/cli-64.exePKRPYN@6fsetuptools/cli-arm64.exePKRPY5RX.u}setuptools/cli.exePKRPYVޯ%Hsetuptools/depends.pyPKRPYwixpRxsetuptools/discovery.pyPKRPYW(T`)%setuptools/dist.pyPKRPYyTX setuptools/errors.pyPKRPY8a 9setuptools/extension.pyPKRPYi&setuptools/glob.pyPKRPY_[..setuptools/gui-32.exePKRPY(8 setuptools/gui-64.exePKRPY A6'setuptools/gui-arm64.exePKRPY_[.W>setuptools/gui.exePKRPYY6jVsetuptools/installer.pyPKRPYPKs,M^setuptools/launch.pyPKRPY$͛0`setuptools/logging.pyPKRPYvc{bsetuptools/modified.pyPKRPY#$6 csetuptools/monkey.pyPKRPYq'GWzhsetuptools/msvc.pyPKRPY߶"S setuptools/namespaces.pyPKRPY,-ϋsetuptools/package_index.pyPKRPY+8setuptools/sandbox.pyPKRPYsetuptools/script (dev).tmplPKRPY3jsetuptools/script.tmplPKRPY+m \setuptools/unicode_utils.pyPKRPYRpl`setuptools/version.pyPKRPYѾsetuptools/warnings.pyPKRPY@s= !setuptools/wheel.pyPKRPYeusetuptools/windows_support.pyPKRPY=tg!Qsetuptools/_distutils/__init__.pyPKRPY*#*rsetuptools/_distutils/_log.pyPKRPY+1&setuptools/_distutils/_macos_compat.pyPKRPY.O> "setuptools/_distutils/_modified.pyPKRPY^?>Q&setuptools/_distutils/_msvccompiler.pyPKRPYW %esetuptools/_distutils/archive_util.pyPKRPYSsf4"9 setuptools/_distutils/ccompiler.pyPKRPY5T E@setuptools/_distutils/cmd.pyPKRPY< 3$Vsetuptools/_distutils/core.pyPKRPYux{s.(csetuptools/_distutils/cygwinccompiler.pyPKRPY_H%uMssetuptools/_distutils/debug.pyPKRPY]!ssetuptools/_distutils/dep_util.pyPKRPYok !usetuptools/_distutils/dir_util.pyPKRPY}p4yFsetuptools/_distutils/dist.pyPKRPYP} bsetuptools/_distutils/errors.pyPKRPYZ v("Dsetuptools/_distutils/extension.pyPKRPYY{E%setuptools/_distutils/fancy_getopt.pyPKRPY`Y "setuptools/_distutils/file_util.pyPKRPYFgjAV5!setuptools/_distutils/filelist.pyPKRPYq Csetuptools/_distutils/log.pyPKRPYk)/)setuptools/_distutils/spawn.pyPKRPYHt3^#K"setuptools/_distutils/sysconfig.pyPKRPYTB/"&setuptools/_distutils/text_file.pyPKRPY:i{M<&&setuptools/_distutils/unixccompiler.pyPKRPYrkd}Dy:setuptools/_distutils/util.pyPKRPYmZ1 1Tsetuptools/_distutils/version.pyPKRPYmlUU)Pesetuptools/_distutils/versionpredicate.pyPKRPY4%lsetuptools/_distutils/zosccompiler.pyPKRPYHݴ)ssetuptools/_distutils/command/__init__.pyPKRPY.&?I2tsetuptools/_distutils/command/_framework_compat.pyPKRPY&wsetuptools/_distutils/command/bdist.pyPKRPYJm+~setuptools/_distutils/command/bdist_dumb.pyPKRPYjʿT*setuptools/_distutils/command/bdist_rpm.pyPKRPYa&setuptools/_distutils/command/build.pyPKRPYb|+setuptools/_distutils/command/build_clib.pyPKRPYzM#|*setuptools/_distutils/command/build_ext.pyPKRPYe@)>setuptools/_distutils/command/build_py.pyPKRPY4 .setuptools/_distutils/command/build_scripts.pyPKRPYd':!&Csetuptools/_distutils/command/check.pyPKRPYX# &setuptools/_distutils/command/clean.pyPKRPY_6;2']setuptools/_distutils/command/config.pyPKRPYZ~u(&setuptools/_distutils/command/install.pyPKRPYS -5"setuptools/_distutils/command/install_data.pyPKRPY+mM 1h&setuptools/_distutils/command/install_egg_info.pyPKRPY⾉0+setuptools/_distutils/command/install_headers.pyPKRPYA , ,'-setuptools/_distutils/command/install_lib.pyPKRPY0'0 7setuptools/_distutils/command/install_scripts.pyPKRPYwnyI&8:setuptools/_distutils/command/sdist.pyPKRPY!M(Osetuptools/_distutils/compat/__init__.pyPKRPYp'$AQsetuptools/_distutils/compat/py38.pyPKRPY{$Rsetuptools/_distutils/compat/py39.pyPKRPYXt'gVsetuptools/_distutils/tests/__init__.pyPKRPY ED&5Ysetuptools/_distutils/tests/support.pyPKRPYЂD .04`setuptools/_distutils/tests/test_archive_util.pyPKRPYt)jsetuptools/_distutils/tests/test_bdist.pyPKRPY.clsetuptools/_distutils/tests/test_bdist_dumb.pyPKRPYO ]-:psetuptools/_distutils/tests/test_bdist_rpm.pyPKRPY}Pp)tsetuptools/_distutils/tests/test_build.pyPKRPYެPZ.\wsetuptools/_distutils/tests/test_build_clib.pyPKRPYNM-|setuptools/_distutils/tests/test_build_ext.pyPKRPYfzOq,Psetuptools/_distutils/tests/test_build_py.pyPKRPY#Kp@ 1 setuptools/_distutils/tests/test_build_scripts.pyPKRPYHE -ʚsetuptools/_distutils/tests/test_ccompiler.pyPKRPY`+%R)setuptools/_distutils/tests/test_check.pyPKRPY )setuptools/_distutils/tests/test_clean.pyPKRPYk&e 'setuptools/_distutils/tests/test_cmd.pyPKRPY*-h .Lsetuptools/_distutils/tests/test_config_cmd.pyPKRPY_.\(setuptools/_distutils/tests/test_core.pyPKRPYM8x 3$setuptools/_distutils/tests/test_cygwinccompiler.pyPKRPY <0,setuptools/_distutils/tests/test_dir_util.pyPKRPY6H(zsetuptools/_distutils/tests/test_dist.pyPKRPY\. -setuptools/_distutils/tests/test_extension.pyPKRPYÜ8 - setuptools/_distutils/tests/test_file_util.pyPKRPY۩s*,setuptools/_distutils/tests/test_filelist.pyPKRPY˥mc !+setuptools/_distutils/tests/test_install.pyPKRPYg1 0setuptools/_distutils/tests/test_install_data.pyPKRPYi3Zsetuptools/_distutils/tests/test_install_headers.pyPKRPY:Й/3setuptools/_distutils/tests/test_install_lib.pyPKRPYb@3setuptools/_distutils/tests/test_install_scripts.pyPKRPY-7vC'8setuptools/_distutils/tests/test_log.pyPKRPY@Nd2Osetuptools/_distutils/tests/test_mingwccompiler.pyPKRPY E{},setuptools/_distutils/tests/test_modified.pyPKRPYr0setuptools/_distutils/tests/test_msvccompiler.pyPKRPYnm:)setuptools/_distutils/tests/test_sdist.pyPKRPY)setuptools/_distutils/tests/test_spawn.pyPKRPYt( .-setuptools/_distutils/tests/test_sysconfig.pyPKRPY2 -!setuptools/_distutils/tests/test_text_file.pyPKRPYR @.17%setuptools/_distutils/tests/test_unixccompiler.pyPKRPY79v 4(J/setuptools/_distutils/tests/test_util.pyPKRPYUE: +9setuptools/_distutils/tests/test_version.pyPKRPY4;setuptools/_distutils/tests/test_versionpredicate.pyPKRPYl*3<setuptools/_distutils/tests/unix_compat.pyPKRPY.C=setuptools/_distutils/tests/compat/__init__.pyPKRPY/5*=setuptools/_distutils/tests/compat/py38.pyPKRPYv?setuptools/_vendor/ruff.tomlPKRPYD'x3 'Z?setuptools/_vendor/typing_extensions.pyPKRPYIh, *Ʒsetuptools/_vendor/autocommand/__init__.pyPKRPYZ 0+:setuptools/_vendor/autocommand/autoasync.pyPKRPYД8K -ksetuptools/_vendor/autocommand/autocommand.pyPKRPY:*setuptools/_vendor/autocommand/automain.pyPKRPY z-+setuptools/_vendor/autocommand/autoparse.pyPKRPYRv(ssetuptools/_vendor/autocommand/errors.pyPKRPY[48JQ(setuptools/_vendor/backports/__init__.pyPKRPY,{72g˧0?setuptools/_vendor/backports/tarfile/__init__.pyPKRPYCj|7;0Fsetuptools/_vendor/backports/tarfile/__main__.pyPKRPY7DGsetuptools/_vendor/backports/tarfile/compat/__init__.pyPKRPYQk,83Gsetuptools/_vendor/backports/tarfile/compat/py38.pyPKRPY`8$1Hsetuptools/_vendor/importlib_metadata/__init__.pyPKRPYS 2msetuptools/_vendor/importlib_metadata/_adapters.pyPKRPY5gqsetuptools/_vendor/importlib_metadata/_collections.pyPKRPYROqk"0:ssetuptools/_vendor/importlib_metadata/_compat.pyPKRPY:oikO 3usetuptools/_vendor/importlib_metadata/_functools.pyPKRPY:3zsetuptools/_vendor/importlib_metadata/_itertools.pyPKRPY]V .}setuptools/_vendor/importlib_metadata/_meta.pyPKRPYxv.~setuptools/_vendor/importlib_metadata/_text.pyPKRPY#8q{1˃setuptools/_vendor/importlib_metadata/diagnose.pyPKRPY.setuptools/_vendor/importlib_metadata/py.typedPKRPY8Bsetuptools/_vendor/importlib_metadata/compat/__init__.pyPKRPYMx`5setuptools/_vendor/importlib_metadata/compat/py311.pyPKRPY9EN4esetuptools/_vendor/importlib_metadata/compat/py39.pyPKRPYhz2setuptools/_vendor/importlib_resources/__init__.pyPKRPYzk3׊setuptools/_vendor/importlib_resources/_adapters.pyPKRPYC1setuptools/_vendor/importlib_resources/_common.pyPKRPYor!,4˗setuptools/_vendor/importlib_resources/_itertools.pyPKRPYhS*-Isetuptools/_vendor/importlib_resources/abc.pyPKRPYo[ 4setuptools/_vendor/importlib_resources/functional.pyPKRPY/setuptools/_vendor/importlib_resources/py.typedPKRPYM$O1setuptools/_vendor/importlib_resources/readers.pyPKRPYR] 0setuptools/_vendor/importlib_resources/simple.pyPKRPY9@setuptools/_vendor/importlib_resources/compat/__init__.pyPKRPYOL,5setuptools/_vendor/importlib_resources/compat/py38.pyPKRPY17v5setuptools/_vendor/importlib_resources/compat/py39.pyPKRPY9Jsetuptools/_vendor/importlib_resources/future/__init__.pyPKRPYn+| 9setuptools/_vendor/importlib_resources/future/adapters.pyPKRPY8ݶsetuptools/_vendor/importlib_resources/tests/__init__.pyPKRPYUex6 55setuptools/_vendor/importlib_resources/tests/_path.pyPKRPYt-W Gsetuptools/_vendor/importlib_resources/tests/test_compatibilty_files.pyPKRPYvn'G=setuptools/_vendor/importlib_resources/tests/test_contents.pyPKRPY5;setuptools/_vendor/importlib_resources/tests/test_custom.pyPKRPY Q% :setuptools/_vendor/importlib_resources/tests/test_files.pyPKRPYI[6!?[setuptools/_vendor/importlib_resources/tests/test_functional.pyPKRPY[ 9setuptools/_vendor/importlib_resources/tests/test_open.pyPKRPY4<9setuptools/_vendor/importlib_resources/tests/test_path.pyPKRPYo}( 9setuptools/_vendor/importlib_resources/tests/test_read.pyPKRPYJC>;>setuptools/_vendor/importlib_resources/tests/test_reader.pyPKRPY=)Fj=setuptools/_vendor/importlib_resources/tests/test_resource.pyPKRPYT4setuptools/_vendor/importlib_resources/tests/util.pyPKRPYH>o3ksetuptools/_vendor/importlib_resources/tests/zip.pyPKRPY?+setuptools/_vendor/importlib_resources/tests/compat/__init__.pyPKRPY9햼l<setuptools/_vendor/importlib_resources/tests/compat/py312.pyPKRPYj6K~I;setuptools/_vendor/importlib_resources/tests/compat/py39.pyPKRPY?setuptools/_vendor/importlib_resources/tests/data01/__init__.pyPKRPY?setuptools/_vendor/importlib_resources/tests/data01/binary.filePKRPY"<),?tsetuptools/_vendor/importlib_resources/tests/data01/utf-16.filePKRPYš>setuptools/_vendor/importlib_resources/tests/data01/utf-8.filePKRPYLlsetuptools/_vendor/importlib_resources/tests/data01/subdirectory/__init__.pyPKRPY`Lsetuptools/_vendor/importlib_resources/tests/data01/subdirectory/binary.filePKRPY?Hsetuptools/_vendor/importlib_resources/tests/data02/__init__.pyPKRPYCsetuptools/_vendor/importlib_resources/tests/data02/one/__init__.pyPKRPY E setuptools/_vendor/importlib_resources/tests/data02/one/resource1.txtPKRPY W|setuptools/_vendor/importlib_resources/tests/data02/subdirectory/subsubdir/resource.txtPKRPYCsetuptools/_vendor/importlib_resources/tests/data02/two/__init__.pyPKRPY]o, E`setuptools/_vendor/importlib_resources/tests/data02/two/resource2.txtPKRPYHsetuptools/_vendor/importlib_resources/tests/namespacedata01/binary.filePKRPY"<),H>setuptools/_vendor/importlib_resources/tests/namespacedata01/utf-16.filePKRPYšGsetuptools/_vendor/importlib_resources/tests/namespacedata01/utf-8.filePKRPYvmUHsetuptools/_vendor/importlib_resources/tests/namespacedata01/subdirectory/binary.filePKRPY49vbt&setuptools/_vendor/inflect/__init__.pyPKRPY#Tsetuptools/_vendor/inflect/py.typedPKRPY-bTsetuptools/_vendor/inflect/compat/__init__.pyPKRPYH:t)Tsetuptools/_vendor/inflect/compat/py38.pyPKRPY_ە P%$jUsetuptools/_vendor/jaraco/context.pyPKRPY^ǢEh1zasetuptools/_vendor/jaraco/collections/__init__.pyPKRPY.setuptools/_vendor/jaraco/collections/py.typedPKRPYA/setuptools/_vendor/jaraco/functools/__init__.pyPKRPYZL&0setuptools/_vendor/jaraco/functools/__init__.pyiPKRPY,setuptools/_vendor/jaraco/functools/py.typedPKRPYWœ7.setuptools/_vendor/jaraco/text/Lorem ipsum.txtPKRPYqz?*ќsetuptools/_vendor/jaraco/text/__init__.pyPKRPYFT)setuptools/_vendor/jaraco/text/layouts.pyPKRPYY/%setuptools/_vendor/jaraco/text/show-newlines.pyPKRPY~J.˴setuptools/_vendor/jaraco/text/strip-prefix.pyPKRPY-{:]w+setuptools/_vendor/jaraco/text/to-dvorak.pyPKRPYq]w+setuptools/_vendor/jaraco/text/to-qwerty.pyPKRPYbp-Hsetuptools/_vendor/more_itertools/__init__.pyPKRPYI!+.setuptools/_vendor/more_itertools/__init__.pyiPKRPYC)psetuptools/_vendor/more_itertools/more.pyPKRPYGgS*Q setuptools/_vendor/more_itertools/more.pyiPKRPY*[` setuptools/_vendor/more_itertools/py.typedPKRPY+D"o,` setuptools/_vendor/more_itertools/recipes.pyPKRPYd - setuptools/_vendor/more_itertools/recipes.pyiPKRPY'/(: setuptools/_vendor/packaging/__init__.pyPKRPY  ( setuptools/_vendor/packaging/_elffile.pyPKRPY]. r%*؎ setuptools/_vendor/packaging/_manylinux.pyPKRPY3 *N setuptools/_vendor/packaging/_musllinux.pyPKRPYVb 5 ''W setuptools/_vendor/packaging/_parser.pyPKRPY0`+Ѫ setuptools/_vendor/packaging/_structures.pyPKRPY|*z setuptools/_vendor/packaging/_tokenizer.pyPKRPY )' setuptools/_vendor/packaging/markers.pyPKRPYD!#]~( setuptools/_vendor/packaging/metadata.pyPKRPY% setuptools/_vendor/packaging/py.typedPKRPY*- , setuptools/_vendor/packaging/requirements.pyPKRPY{""*] setuptools/_vendor/packaging/specifiers.pyPKRPYbuI$ setuptools/_vendor/packaging/tags.pyPKRPYn%p" setuptools/_vendor/packaging/utils.pyPKRPYe/IjF?') setuptools/_vendor/packaging/version.pyPKRPYůqV+: setuptools/_vendor/platformdirs/__init__.pyPKRPYxZ/+~A setuptools/_vendor/platformdirs/__main__.pyPKRPY7kLA8#*yC setuptools/_vendor/platformdirs/android.pyPKRPY7^$#&K setuptools/_vendor/platformdirs/api.pyPKRPY)7(YR setuptools/_vendor/platformdirs/macos.pyPKRPY(V setuptools/_vendor/platformdirs/py.typedPKRPY;I )'W setuptools/_vendor/platformdirs/unix.pyPKRPY _*` setuptools/_vendor/platformdirs/version.pyPKRPY '* b setuptools/_vendor/platformdirs/windows.pyPKRPY]A@5l setuptools/_vendor/platformdirs-4.2.2.dist-info/licenses/LICENSEPKRPY%$o setuptools/_vendor/tomli/__init__.pyPKRPYiiX#op setuptools/_vendor/tomli/_parser.pyPKRPYu1~ < setuptools/_vendor/tomli/_re.pyPKRPYg" setuptools/_vendor/tomli/_types.pyPKRPY+)! setuptools/_vendor/tomli/py.typedPKRPYBW?(W setuptools/_vendor/typeguard/__init__.pyPKRPYz)p setuptools/_vendor/typeguard/_checkers.pyPKRPYV~`V ' setuptools/_vendor/typeguard/_config.pyPKRPY?st I#+M setuptools/_vendor/typeguard/_decorators.pyPKRPY>Ua+ setuptools/_vendor/typeguard/_exceptions.pyPKRPYwhw] (* setuptools/_vendor/typeguard/_functions.pyPKRPYdf+ setuptools/_vendor/typeguard/_importhook.pyPKRPY N%c setuptools/_vendor/typeguard/_memo.pyPKRPY'Ja6@. setuptools/_vendor/typeguard/_pytest_plugin.pyPKRPY,tg@,! setuptools/_vendor/typeguard/_suppression.pyPKRPYb=.!,o setuptools/_vendor/typeguard/_transformer.pyPKRPY8կ]J2 setuptools/_vendor/typeguard/_union_transformer.pyPKRPY& setuptools/_vendor/typeguard/_utils.pyPKRPY% setuptools/_vendor/typeguard/py.typedPKRPY]:;$ setuptools/_vendor/wheel/__init__.pyPKRPY?n$@ setuptools/_vendor/wheel/__main__.pyPKRPYUAt|/ setuptools/_vendor/wheel/_setuptools_logging.pyPKRPY8lLQ'N setuptools/_vendor/wheel/bdist_wheel.pyPKRPYL(U>* setuptools/_vendor/wheel/macosx_libfile.pyPKRPY$C1 setuptools/_vendor/wheel/metadata.pyPKRPYZm |9 setuptools/_vendor/wheel/util.pyPKRPYܣ %: setuptools/_vendor/wheel/wheelfile.pyPKRPY s(D setuptools/_vendor/wheel/cli/__init__.pyPKRPY$1 $'J setuptools/_vendor/wheel/cli/convert.pyPKRPY,t{ $ W setuptools/_vendor/wheel/cli/pack.pyPKRPY@P [$[ setuptools/_vendor/wheel/cli/tags.pyPKRPY{&a setuptools/_vendor/wheel/cli/unpack.pyPKRPY-d setuptools/_vendor/wheel/vendored/__init__.pyPKRPYL6C,Td setuptools/_vendor/wheel/vendored/vendor.txtPKRPY7d setuptools/_vendor/wheel/vendored/packaging/__init__.pyPKRPYb  7e setuptools/_vendor/wheel/vendored/packaging/_elffile.pyPKRPYw, t%99j setuptools/_vendor/wheel/vendored/packaging/_manylinux.pyPKRPY?8Ɯr 9w setuptools/_vendor/wheel/vendored/packaging/_musllinux.pyPKRPY4{ k(6| setuptools/_vendor/wheel/vendored/packaging/_parser.pyPKRPY0`: setuptools/_vendor/wheel/vendored/packaging/_structures.pyPKRPYsw)9O setuptools/_vendor/wheel/vendored/packaging/_tokenizer.pyPKRPYhi ( 6Ϗ setuptools/_vendor/wheel/vendored/packaging/markers.pyPKRPYq'u ;ٚ setuptools/_vendor/wheel/vendored/packaging/requirements.pyPKRPYr"b9Y setuptools/_vendor/wheel/vendored/packaging/specifiers.pyPKRPYmoJ3 setuptools/_vendor/wheel/vendored/packaging/tags.pyPKRPY4 setuptools/_vendor/wheel/vendored/packaging/utils.pyPKRPYzn^j?6 setuptools/_vendor/wheel/vendored/packaging/version.pyPKRPY#-^d4# setuptools/_vendor/zipp/__init__.pyPKRPYź   setuptools/_vendor/zipp/glob.pyPKRPY*  setuptools/_vendor/zipp/compat/__init__.pyPKRPYC''V setuptools/_vendor/zipp/compat/py310.pyPKRPYT8( setuptools/command/__init__.pyPKRPYC"* setuptools/command/_requirestxt.pyPKRPY]0O  setuptools/command/alias.pyPKRPY|&}@ setuptools/command/bdist_egg.pyPKRPY )xr;$ setuptools/command/bdist_rpm.pyPKRPY#wd\!& setuptools/command/bdist_wheel.pyPKRPY~~B setuptools/command/build.pyPKRPYk uK setuptools/command/build_clib.pyPKRPY#6XG=Q setuptools/command/build_ext.pyPKRPYТ;e setuptools/command/build_py.pyPKRPYBZw setuptools/command/develop.pyPKRPY.B  setuptools/command/dist_info.pyPKRPY@_X" setuptools/command/easy_install.pyPKRPY`I+f)Q$ setuptools/command/editable_wheel.pyPKRPYM-d setuptools/command/egg_info.pyPKRPY(T@, setuptools/command/install.pyPKRPY &5 setuptools/command/install_egg_info.pyPKRPYbJG%!9 setuptools/command/install_lib.pyPKRPYFNT 6 %> setuptools/command/install_scripts.pyPKRPY])B7t(B setuptools/command/launcher manifest.xmlPKRPY}Pa|D setuptools/command/rotate.pyPKRPY^FG setuptools/command/saveopts.pyPKRPYlVo mSI setuptools/command/sdist.pyPKRPYUrS setuptools/command/setopt.pyPKRPYHOex?Y setuptools/command/test.pyPKRPY]\ setuptools/compat/__init__.pyPKRPY_=Fk\ setuptools/compat/py310.pyPKRPYQ|=] setuptools/compat/py311.pyPKRPYn^ setuptools/compat/py312.pyPKRPY]|>` setuptools/compat/py39.pyPKRPYw3a setuptools/config/NOTICEPKRPYAQb setuptools/config/__init__.pyPKRPYE-B a<)e setuptools/config/_apply_pyprojecttoml.pyPKRPYP'9y setuptools/config/distutils.schema.jsonPKRPY-`+=f{ setuptools/config/expand.pyPKRPY EF"% setuptools/config/pyprojecttoml.pyPKRPYX"d7 setuptools/config/setupcfg.pyPKRPY kѩ>(ʿ setuptools/config/setuptools.schema.jsonPKRPYLY1I, setuptools/config/_validate_pyproject/NOTICEPKRPYp1\ setuptools/config/_validate_pyproject/__init__.pyPKRPY> %.8 setuptools/config/_validate_pyproject/error_reporting.pyPKRPYsjY: setuptools/config/_validate_pyproject/extra_validations.pyPKRPYo^7LB setuptools/config/_validate_pyproject/fastjsonschema_exceptions.pyPKRPYsIsdC setuptools/config/_validate_pyproject/fastjsonschema_validations.pyPKRPYz205tsetuptools/config/_validate_pyproject/formats.pyPKRPY/uOsetuptools/tests/__init__.pyPKRPY;* setuptools/tests/contexts.pyPKRPY}BX? setuptools/tests/environment.pyPKRPY*GMhsetuptools/tests/fixtures.pyPKRPY%setuptools/tests/mod_with_constant.pyPKRPYLWt setuptools/tests/namespaces.pyPKRPYݝ#setuptools/tests/script-with-bom.pyPKRPYԈ|c gsetuptools/tests/server.pyPKRPY$)M%$setuptools/tests/test_archive_util.pyPKRPYkh0+ setuptools/tests/test_bdist_deprecations.pyPKRPYFe0;"Ԣsetuptools/tests/test_bdist_egg.pyPKRPYnm_UP$Хsetuptools/tests/test_bdist_wheel.pyPKRPYzkjngsetuptools/tests/test_build.pyPKRPYz3 #setuptools/tests/test_build_clib.pyPKRPY 4'"Bsetuptools/tests/test_build_ext.pyPKRPYsNR"#setuptools/tests/test_build_meta.pyPKRPYJi i7!-setuptools/tests/test_build_py.pyPKRPY+A"X)setuptools/tests/test_config_discovery.pyPKRPYdk /& setuptools/tests/test_core_metadata.pyPKRPY1( setuptools/tests/test_depends.pyPKRPYY setuptools/tests/test_develop.pyPKRPYv̆4 " setuptools/tests/test_dist.pyPKRPYR"A*setuptools/tests/test_dist_info.pyPKRPY A+ 3setuptools/tests/test_distutils_adoption.pyPKRPYу/%9setuptools/tests/test_easy_install.pyPKRPYʹ$()hsetuptools/tests/test_editable_install.pyPKRPY q!setuptools/tests/test_egg_info.pyPKRPY (7setuptools/tests/test_extern.pyPKRPY]ȑW&setuptools/tests/test_find_packages.pyPKRPY1Z!d (%setuptools/tests/test_find_py_modules.pyPKRPY_KTqGsetuptools/tests/test_glob.pyPKRPYqq (ִsetuptools/tests/test_install_scripts.pyPKRPYlߴ/ setuptools/tests/test_logging.pyPKRPY˪FPII!setuptools/tests/test_manifest.pyPKRPY_?F#0setuptools/tests/test_namespaces.pyPKRPYL #%setuptools/tests/test_packageindex.pyPKRPYn5 ~setuptools/tests/test_sandbox.pyPKRPY~rsetuptools/tests/test_sdist.pyPKRPYBU=setuptools/tests/test_setopt.pyPKRPYŠU ##}setuptools/tests/test_setuptools.pyPKRPY?<&setuptools/tests/test_unicode_utils.pyPKRPYbA# setuptools/tests/test_virtualenv.pyPKRPYhg !^ setuptools/tests/test_warnings.pyPKRPYrAj|;KIsetuptools/tests/test_wheel.pyPKRPYv*)!setuptools/tests/test_windows_wrappers.pyPKRPYMV{)setuptools/tests/text.pyPKRPYQ:Pbk*setuptools/tests/textwrap.pyPKRPY#*setuptools/tests/compat/__init__.pyPKRPYw,=\8+setuptools/tests/compat/py39.pyPKRPY#+setuptools/tests/config/__init__.pyPKRPY8mx-,setuptools/tests/config/setupcfg_examples.txtPKRPYh:K3{/setuptools/tests/config/test_apply_pyprojecttoml.pyPKRPY rU&4Esetuptools/tests/config/test_expand.pyPKRPY#6M n0-^Nsetuptools/tests/config/test_pyprojecttoml.pyPKRPY[܊ :[setuptools/tests/config/test_pyprojecttoml_dynamic_deps.pyPKRPYg4Q(`_setuptools/tests/config/test_setupcfg.pyPKRPYF-Tvsetuptools/tests/config/downloads/__init__.pyPKRPYw+X ,ysetuptools/tests/config/downloads/preload.pyPKRPYT\:zsetuptools/tests/indexes/test_links_priority/external.htmlPKRPYm"uE{setuptools/tests/indexes/test_links_priority/simple/foobar/index.htmlPKRPY(e|setuptools/tests/integration/__init__.pyPKRPY9]I '|setuptools/tests/integration/helpers.pyPKRPY"e ` 6setuptools/tests/integration/test_pip_install_sdist.pyPKRPYSEO#setuptools-75.2.0.dist-info/LICENSEPKRPYg!F$ssetuptools-75.2.0.dist-info/METADATAPKRPYiT\[!setuptools-75.2.0.dist-info/WHEELPKRPYcR ,setuptools-75.2.0.dist-info/entry_points.txtPKRPY;*))2setuptools-75.2.0.dist-info/top_level.txtPKRPY8setuptools/_vendor/autocommand-2.2.2.dist-info/INSTALLERPKRPY[6 6setuptools/_vendor/autocommand-2.2.2.dist-info/LICENSEPKRPYڏT4:7setuptools/_vendor/autocommand-2.2.2.dist-info/METADATAPKRPYrO.y5˼setuptools/_vendor/autocommand-2.2.2.dist-info/RECORDPKRPY1\\4setuptools/_vendor/autocommand-2.2.2.dist-info/WHEELPKRPYv <Esetuptools/_vendor/autocommand-2.2.2.dist-info/top_level.txtPKRPY>setuptools/_vendor/backports.tarfile-1.2.0.dist-info/INSTALLERPKRPYSEO<setuptools/_vendor/backports.tarfile-1.2.0.dist-info/LICENSEPKRPYO9R=setuptools/_vendor/backports.tarfile-1.2.0.dist-info/METADATAPKRPYygTP;setuptools/_vendor/backports.tarfile-1.2.0.dist-info/RECORDPKRPY>setuptools/_vendor/backports.tarfile-1.2.0.dist-info/REQUESTEDPKRPY{K\\:setuptools/_vendor/backports.tarfile-1.2.0.dist-info/WHEELPKRPYv Bsetuptools/_vendor/backports.tarfile-1.2.0.dist-info/top_level.txtPKRPY?3setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLERPKRPYm^,=setuptools/_vendor/importlib_metadata-8.0.0.dist-info/LICENSEPKRPYK(>^setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATAPKRPY5J <:setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORDPKRPY?Xsetuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTEDPKRPY5[[;setuptools/_vendor/importlib_metadata-8.0.0.dist-info/WHEELPKRPYZCksetuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txtPKRPY@setuptools/_vendor/importlib_resources-6.4.0.dist-info/INSTALLERPKRPYm^,>Esetuptools/_vendor/importlib_resources-6.4.0.dist-info/LICENSEPKRPY@h?setuptools/_vendor/importlib_resources-6.4.0.dist-info/METADATAPKRPY,="setuptools/_vendor/importlib_resources-6.4.0.dist-info/RECORDPKRPY@setuptools/_vendor/importlib_resources-6.4.0.dist-info/REQUESTEDPKRPY{K\\<rsetuptools/_vendor/importlib_resources-6.4.0.dist-info/WHEELPKRPYgƞD(setuptools/_vendor/importlib_resources-6.4.0.dist-info/top_level.txtPKRPY4setuptools/_vendor/inflect-7.3.1.dist-info/INSTALLERPKRPYSEO2setuptools/_vendor/inflect-7.3.1.dist-info/LICENSEPKRPY sWR3 setuptools/_vendor/inflect-7.3.1.dist-info/METADATAPKRPYe(1(setuptools/_vendor/inflect-7.3.1.dist-info/RECORDPKRPY>6\[07*setuptools/_vendor/inflect-7.3.1.dist-info/WHEELPKRPY 8*setuptools/_vendor/inflect-7.3.1.dist-info/top_level.txtPKRPY?A+setuptools/_vendor/jaraco.collections-5.1.0.dist-info/INSTALLERPKRPYSEO=+setuptools/_vendor/jaraco.collections-5.1.0.dist-info/LICENSEPKRPYCh*]>N.setuptools/_vendor/jaraco.collections-5.1.0.dist-info/METADATAPKRPYZhi<4setuptools/_vendor/jaraco.collections-5.1.0.dist-info/RECORDPKRPY?6setuptools/_vendor/jaraco.collections-5.1.0.dist-info/REQUESTEDPKRPY \[;I7setuptools/_vendor/jaraco.collections-5.1.0.dist-info/WHEELPKRPYث9 C7setuptools/_vendor/jaraco.collections-5.1.0.dist-info/top_level.txtPKRPY;h8setuptools/_vendor/jaraco.context-5.3.0.dist-info/INSTALLERPKRPYSEO98setuptools/_vendor/jaraco.context-5.3.0.dist-info/LICENSEPKRPYgL:m;setuptools/_vendor/jaraco.context-5.3.0.dist-info/METADATAPKRPY_/ZP{8Bsetuptools/_vendor/jaraco.context-5.3.0.dist-info/RECORDPKRPY{K\\7Csetuptools/_vendor/jaraco.context-5.3.0.dist-info/WHEELPKRPYث9 ?Dsetuptools/_vendor/jaraco.context-5.3.0.dist-info/top_level.txtPKRPY=Dsetuptools/_vendor/jaraco.functools-4.0.1.dist-info/INSTALLERPKRPYSEO;ZEsetuptools/_vendor/jaraco.functools-4.0.1.dist-info/LICENSEPKRPY{!K <Hsetuptools/_vendor/jaraco.functools-4.0.1.dist-info/METADATAPKRPY0K:{Lsetuptools/_vendor/jaraco.functools-4.0.1.dist-info/RECORDPKRPY{K\\9Nsetuptools/_vendor/jaraco.functools-4.0.1.dist-info/WHEELPKRPYث9 AbOsetuptools/_vendor/jaraco.functools-4.0.1.dist-info/top_level.txtPKRPY9Osetuptools/_vendor/jaraco.text-3.12.1.dist-info/INSTALLERPKRPYSEO7'Psetuptools/_vendor/jaraco.text-3.12.1.dist-info/LICENSEPKRPYJ8Rsetuptools/_vendor/jaraco.text-3.12.1.dist-info/METADATAPKRPYT86Xsetuptools/_vendor/jaraco.text-3.12.1.dist-info/RECORDPKRPY9\setuptools/_vendor/jaraco.text-3.12.1.dist-info/REQUESTEDPKRPY{K\\5[\setuptools/_vendor/jaraco.text-3.12.1.dist-info/WHEELPKRPYث9 = ]setuptools/_vendor/jaraco.text-3.12.1.dist-info/top_level.txtPKRPY<n]setuptools/_vendor/more_itertools-10.3.0.dist-info/INSTALLERPKRPY k:]setuptools/_vendor/more_itertools-10.3.0.dist-info/LICENSEPKRPYut ō;`setuptools/_vendor/more_itertools-10.3.0.dist-info/METADATAPKRPYcr9nsetuptools/_vendor/more_itertools-10.3.0.dist-info/RECORDPKRPY<qsetuptools/_vendor/more_itertools-10.3.0.dist-info/REQUESTEDPKRPY87RQ8qsetuptools/_vendor/more_itertools-10.3.0.dist-info/WHEELPKRPY5rsetuptools/_vendor/packaging-24.1.dist-info/INSTALLERPKRPYҼ3rsetuptools/_vendor/packaging-24.1.dist-info/LICENSEPKRPY ':ssetuptools/_vendor/packaging-24.1.dist-info/LICENSE.APACHEPKRPYP G@7setuptools/_vendor/packaging-24.1.dist-info/LICENSE.BSDPKRPYÓA: 4setuptools/_vendor/packaging-24.1.dist-info/METADATAPKRPYr 2setuptools/_vendor/packaging-24.1.dist-info/RECORDPKRPY5׎setuptools/_vendor/packaging-24.1.dist-info/REQUESTEDPKRPYRQ1,setuptools/_vendor/packaging-24.1.dist-info/WHEELPKRPY9͏setuptools/_vendor/platformdirs-4.2.2.dist-info/INSTALLERPKRPYW8, ,8*setuptools/_vendor/platformdirs-4.2.2.dist-info/METADATAPKRPYj6setuptools/_vendor/platformdirs-4.2.2.dist-info/RECORDPKRPY9setuptools/_vendor/platformdirs-4.2.2.dist-info/REQUESTEDPKRPYyVW5setuptools/_vendor/platformdirs-4.2.2.dist-info/WHEELPKRPY2setuptools/_vendor/tomli-2.0.1.dist-info/INSTALLERPKRPY]Xuw00setuptools/_vendor/tomli-2.0.1.dist-info/LICENSEPKRPY4|& "1ڣsetuptools/_vendor/tomli-2.0.1.dist-info/METADATAPKRPYP4/Osetuptools/_vendor/tomli-2.0.1.dist-info/RECORDPKRPY2вsetuptools/_vendor/tomli-2.0.1.dist-info/REQUESTEDPKRPYlRQ."setuptools/_vendor/tomli-2.0.1.dist-info/WHEELPKRPY6setuptools/_vendor/typeguard-4.3.0.dist-info/INSTALLERPKRPY(ښj4setuptools/_vendor/typeguard-4.3.0.dist-info/LICENSEPKRPY򤻈5setuptools/_vendor/typeguard-4.3.0.dist-info/METADATAPKRPY)Db 3setuptools/_vendor/typeguard-4.3.0.dist-info/RECORDPKRPY{K\\2setuptools/_vendor/typeguard-4.3.0.dist-info/WHEELPKRPYg&0=Dsetuptools/_vendor/typeguard-4.3.0.dist-info/entry_points.txtPKRPYp$ :setuptools/_vendor/typeguard-4.3.0.dist-info/top_level.txtPKRPY?)setuptools/_vendor/typing_extensions-4.12.2.dist-info/INSTALLERPKRPYp6=setuptools/_vendor/typing_extensions-4.12.2.dist-info/LICENSEPKRPY: `) >setuptools/_vendor/typing_extensions-4.12.2.dist-info/METADATAPKRPYy OL;<setuptools/_vendor/typing_extensions-4.12.2.dist-info/RECORDPKRPYRQ;setuptools/_vendor/typing_extensions-4.12.2.dist-info/WHEELPKRPY3Qsetuptools/_vendor/wheel-0.43.0.dist-info/INSTALLERPKRPYS5setuptools/_vendor/wheel-0.43.0.dist-info/LICENSE.txtPKRPY4"`i2setuptools/_vendor/wheel-0.43.0.dist-info/METADATAPKRPY@0setuptools/_vendor/wheel-0.43.0.dist-info/RECORDPKRPY3setuptools/_vendor/wheel-0.43.0.dist-info/REQUESTEDPKRPYRQ/:setuptools/_vendor/wheel-0.43.0.dist-info/WHEELPKRPYGh:setuptools/_vendor/wheel-0.43.0.dist-info/entry_points.txtPKRPY2xsetuptools/_vendor/zipp-3.19.2.dist-info/INSTALLERPKRPYSEO0setuptools/_vendor/zipp-3.19.2.dist-info/LICENSEPKRPY~̎4 g)P >cv,WQXI1OR uAjb>gU8AQ*=6c@ fF%uk9uelC([*Yg0-a֬xD,Ze\&tHÈ.5&#_!D2MN~1ο~3?/UЕ/D.*~KƵrE38~4b9Ba;UO0$x6Fi2w2&K}MHʼn^\_OA탣'Q:Qq?#$Up 8/ .qsDkGaU@9w<6WV (k?wXf_(d5:WzD}3ޓzޔL &e$;(M>:xj Հǚv7,+ : e]F*tLW#L;yi2-9y H=M$;TARd+;L"cD: E,MCU͞ѩEZBJ^}=l!.ah־z^;n߂6w/{!8i)9V:ys83+ Pk#P4<s$c6?I` 6>a˲珡jR_/r ̑6``l.Ύ~8eIr5<7"c)8"Z -@J|Oc]vp{ZAhMbbaD0Al71;'p+l 0:MV'+Uoݤ}u BM[jÐJg=Z,U>GزCV ~>_{-Ӫv,X0d4FcfOD,Բ51U.!TVtVa n׫ɒ(Y3 +kc~M4r=LiN]jBҒϣxBXD=FB$v'3z:_O/ xٱ%b㞴(lcB+m!ȧ)hνyV!<6gul2h$(@LWY8 w&\SOۛ@uwx@γD3&7bb}zRoeN<ćמ{nŗneBxQM5E߄=p*nC@#i^x.74lHk8yQ7Yt||8kEX/E2C9ǤꄲzHhK"9zK 0i!㱐 8iⱚTr2Vv(Z-Wy슙*__?CĢV%Jêb3LJ]Yא UT&4VVM;;6V >T5V&CҙiȃXe4HXNh!vZ&qRNQpfR` 9$cW-Q>dԮ'(z,۟Åf؆0z08 o@-Roz4e/mժb.tcTwi3iy/v D|1hJ=c.xr1;28 4K YS^A/qmFOcґIրQ zS5OٖmtT d{~r>yjX@X5mf "{`:D䞦z&X8 'F?ɣ5Cv d6q-%=x.Sw̴cIX$YR'TmV ݊s-m+P v`FtzA\{O$PP5_@Y  G$ٶ,ِ,+8~Fl'e,eejuΗ`ϱq<9b.p?#-bȠ0 4e!1lO46lpan܆- :4IyRv[B%حsn{=]4-Ur`.xR75,hrg܌t#뀈[+ct/|U1^Bd78(DgUs*<}+2dB#X嵏$*\{{"eCc~L/v.Crj0M* JDŽPF5U_E׭#n"cfbm' =ɘF+J˳KT-qx`[S|2i!vڂq7 !"/DM*}ϵ^9'@;P\qV-&}tI7KjhnlbZ 7=?lҧCgJ\c^  oZ)m?ڠ: >޷GSpڨU97#.ASn҆BMѵ8@X\cޅ늑;E!m?FIE(d>=.ddn.;xwr엏'.ˣO.m2q6|?74I- ${|!%]Y/e\ܘ"w6Q5roGϔh}5Fc/#ΐDx汒ǦSLԋ-;t0=Xc;lSo8oc~~"M>)! =p`+6 m"XǠU'!5o }7=oX A,/?l;4gm )IA}r^IM܋v;ceA &UpXN޼:7 YK/$G]z5vǭuFY.:pJNRY6UgeY. x͝;D1MH-GHxc1GnYCڴm2; #@\vUf:>QSA;[1#K5DpOAPwFtfm ?Y(\W/FQvr&C9*o°(ISn_:cV+Y#MFVDLTU5Qх"57i2S7|l]T:* -fls;7:˘A>x?]9pВսtsJ '@Jѣ_@@`Wk:R*_2ۗ9 sZXi0Wƛ "͌&^k=^1#+e7@W x'-BD3,sMy0ۦW5,@3Rڨ0hz]Ɓsa<QNOj3LԞ)vEY /~䆇Kip+ZH k3ivmDI%SSdf}Ꮥ68!h:6mb벶ŵwY͑6Jǃ3ݩزpCLx~݄BW ]: z՞bہƍ@gBܺ>hd{2bFt tih2u()<6L )k!3Av+8aw qT:@h䵔{4l }àhL>D `5i[*9mO3:` '!G6\<m 6{y2u`qw ۥQEϼ ukUR%rH+'~G ꚢЎ%TsL{K1;}Vs\A/ ۂ.@l$G]Ϋѳ$:^ݟ;:ݍQ[&Sl#jS-a.ÅJ/bQmIT)`trA|Pڃ sc{lkA0sX.r{<||:>_N?OgHG_.:|^ '@ P>':`&ږLJXn67^.]y,yЕ%(Lj ~<(d\LN9ȔUޱHKtx'j'dʫ_A]&S:#3wkڌ 7N0mZv*N:B%MD&r.臫0@]&`:a {ǐ$LZcUK&gǍ|u4WL$1xз6t.$Lˇ Pegۊ;_͂tVcp8Er DfR >;^覻 aRrL,0a%YvEzGHeX;TW_d$(oZA"D2D"e=Y,8Kc<n(!z]Nc$0~#&eni<ֹW1;={C7;3,SkpIomSΤnP-ki4ZjaׂeD9ӏgYǖ1rtmZuQj^Q.B1AD*)3 4 -`H:jɒTSWQ\|)(ɳ~P<Ua7D]*D(PZ˔˯(@oE(_ T%͑J(Gс6Բ$+()H?gU?3pDP *h s0*:R@%3Ǻ2;@ePk`C^IŮn.Ke*lPRsV$$Ky`%CQ0?"hUw;@K $пE%+tFBd֥kU>+ޒLiU d4]jMWӿy ,CЂ<0E{Y8xH^X^| 09'U6 Eղ8(9%X3+FMdVgӓ)] /ųqn1}L\2MߝNjCtzv ק5&jp#?s:5?݇>9 Erwo?|՞5eRp'*b_A=O`.WM{͆zE̗g>*z c* 'ZQ oT`*#=GT\Xe' ~<"hZ2mC/ihC)Jp2^vPJXCم7 K>=wPP, /!*bCwk=%2czBkv=r=N=q0HC.[6),Ëf\c`mcɭs"arhkXJ+mX ncWP⣢r~aX*hYMpܣ1<"?7SVġ4raumq{2: MpxW%0[@S⇔hR@\SUhRVA VnA t0,6PKA7Ϸ@l!kȪҨt?m`Hm}dŧ;sXcEPKvKddrrbFF=EiBZ`luNu<U5I X^eY'6YPSa]W['*ڑ\-ma1+]c$@1y2dEǑ2TE(̔j[Fo13ݟ~ݕ0m/ H&ggd^ *ATM+_A Gs[a뙎 R[Rx'G!3T<ט *%.fJтV2xTBĥXC H(S JL?' =K#ʪb lX<Р@ MhS\5֥,;:bnUU,C+m'rOk_6e~(>girJĒ@=zyU5Ȇt(Vq)LX':4˺r^@ !W#,fRNޓöUMkŒӎnpcTrQ!&7%x=L" l5DX%ŝ#K-:%K[; #ōb ᪌LȁHb-\顷;9n7ҭ + TL2@1PrOOCh S.G:pX=`R:f$mʭSqefY:a%ZlF6K o|Va簸D{*B}q&jvA7C%HtnVߞ3U-} vEoUVv9E ޺b]C9a?|oHJj#Y_82wF~: 3`_.6bFLk!)WDہyVb F$pω( L4%7w;,zRz.m %s* <*`g @#rǁN}^BbBlHfdDГ`9t,hNL@V-|j"6Y9fB_25]Lϊ35Uׯ] v|;]wb naT.*$/BǠ9>_@S`IT,O6ڼMun3~G`4Z3?X_RUjPF>PB7_|ŗ_=UGRy >NiKW%]<qdIbT:0tUjr|4 -5yq!S>7o96 U@_]P>1ltqX i]s^eQLzX"62bcZ=_"\zV0[i=QhdDZ<[Fh\/ߏjp//FF~Q ah*@5lP1Mz7x8t5v7d9E&תREh(_*xUT~e mPKvY% wheel/wheelfile.pyYmS8>B1W}1^ $Ɇ( %I6Ä_d}\)2#K-uOkbSqY>aiEA,EP0ɤ 2aW+^KUPI `)ĸfBlqxszSAS^j?O~qGVP$z,f'o\;K0DY-)M0af E{BYH%HdSjYDCpw<xFT;!O\r~%30?LOʷeL 8 Y=wznRݴYs#9Syd2"xFkEDx H!G7G'ӽϟ>yKNjݝ=Gvw|~hLh?Sa.ͧ$NxP(H -rSJ 0'Η !P£+H\ kvA"X򲨄BL$9$8]TQH7 ,){S3X[e]33ϧsD??9>`M)837\2pS bE-Ү>DGe*T߿1 DTk05bXDr* &?y|_eX %Owx 4.Z-""`DqI=s>'(lQsO.[OD>X:4n75N!MMv8ZX% 0rڦkxjbeN|R̫Jgl<9/LFI4=kk. k M!gVY;/,g Ue1Dlg 'Yguٻ0ѓ8xFg 1e cی˩[t3ƙL9 Sr[6و*'j9n@`9P{O/4Ӆ-]hi {Z<{=WLNܬGSM]RwlȐ1qƅ8 1Rh)s:`"Q1WT.y}n u+sl P6 |*IjՐP3Bj ,$Wh]en<Ū [ x.VOD%L޻“.>~C'~P~3܈̫G7ywL=UV{ 蚍fsB e5+m I 2\W csEν|e8:b^CUQսPЄafCp)(1hk²Ou!ݾ{HN`5xPRgM[s\xc{J!_V;sA6 {͡Cu.F a[ Bω>m(; v0l~q- ^/U4DR>\U@̶mWݦx)@g\+9k625DurZݿsFFΛJ{,꧃-u,uG{5^a$&PKvY52wheel/cli/__init__.pyXo6_A*mнdͶmQ4) -6H*1$9va~hI~ŻS(;;Ҩg-;!9WzѪ'uy]J[¤TYɲxӆǽ2qe W+{.~7Z+eY1cS7O ýo(כ$zn RD>)=S\Qݯ5؈_oE/s qkUz?ë0lףZFLz}ƫ֛2Ÿd} @A5IDm\{'%Hv.VUͨ%zP w"仸*L ^='שF4PD<6>*zypSʼnr0M`RHڠ<0K!wsV$$maOihwY1=VdPjG~!L`Ȏpr^Jξj[ JK=g`ՠcA^n2f#< ߜa+uRۻ u*JX~aR> ۯ1YF8:û#,w#1řD g`bZ:F2O!#mw!Aar!-1TcFXNCpVqr(MS>B ;` Vos},&"V(Ɖ,t_fO ?CM'zPKvYd" (%wheel/cli/convert.pyZm_ S4|Iz1 #6⠎!i{IpI+̾pI)#wgfmٵA׻[^ }hNvbj7V';]N.?}IeghzY<_ot^CDK_yK /hybѵAxؿVozw~)TӉb.1Dš/ZWz*q 5E}h`d$I!}ϕG3{|߿~-Ţ(1"󺓷i>,JVZzxyv/;q*Nm5:o"iKuM.eDsxVȍ&"Qw|\Wn=`օ2&!F4*L;c`rV5LU^[ѕl2Z/Y%k7 |/dih/J}[BLSSKπ(Luw?v ZLZF[^b:~ `Mk\$g##41wSrmWAmu˯K2b(7G{E&ӰpI[FE=%7Y-d6ѸdiOL5mK푐 {>击-=/Z]Sx2NJDZ'Nk8z{wއoy1" Z$آX/]+w8 r.t[D12XwWEW ]_"KpsϴEd׺ QY:"S|ڜ. $A·}}صJYw ds7w $u8AxS@TBId"H G+@Yq‡oe q'kNrp߼0jFI${Yõ=* ;uݭY7JxGxU59; BiO9fY*-,hL)ÿŅxVEA,_S3ÛW3sj&دL0Y2c9Y7Omyrpu\Ь>$gyY p0Lϐ{/O}lu֡KGPu{5S=+ 2THKbk'ҸEBq7s28Ejɴ tEJ:i3+/]r5sAur+;iS|I WQ_`p|@ ޕB&C{Y׷NL"!SB[*6rbat5DJ:-o,&K+5"XW`:]1tŌ瞉?M6'j6ҫ+^*QQqC~?ty?\|UED9zRnDYPA sa`IK͵0{}g\3n>y?JIlhkvb_}՛nN~L ڹGкO6/I>4@?`NըQ@Me[]rјcI&n:ohKn H!&'qMFبP'RD([zzXnZs%piC}7NU8/ Ro^Gt]IJ];Ӹٞ:mw{F9ǧ \rX#JX8qrJ(yE#ƛ&Vca#GY\4XD}@Uqqj+ʪkO;%(|2%|?- F5\0j|a'C0|HPw߶i<~SaD:}c30D;eC* < wOmIY_W22bʑyݴ(j?y.Xveo19:phPשׁġC PKvY,t{ wheel/cli/pack.pyVKs6Wldm1[vid䠸H\JhIV<{w>ELy>?|@yٙNA3Q2KnD#u2q5:k :5HP4jрm-WBV9VT>JS PFA]x~^9ťD'~Pyvr苤Nj4BeCFQT@Z7)xƴQmrNTE.z NľFBf,bq| q*xMGIAdc,&iPU¶_}?:;mت 06=faf @XwFl XU E 7Ã9VA`2BvoBZz&6*ilvN)fRIZjN8&yNr  ++TJFhBTN#ʡ%2Igr28Egi]V0Yjux.+ [?ϔWgcXŅ'2 qmur+0:4f]\0&6φig~.xlFDvp/Vcj]UӵIܷ-$/hv\33;lꘜȉ1:ic+дi{PO-c/]ͧgKtx_B,AĸaŐ@mH]5D̊0,XP_^.PHyX$96S{ɂ~{GȨ>܌C_^GoF%}yqotЯL&$[n6p\C1yAN 2 zG;'<ҁwS\Ђ$lzHz n0.Nؔe|;Hu`1d6,ú0&VyYS`!U'FQ<Q8v ]ħɹan!OO7&^rB;{<l6s.l4:a6z1Wwp\Dm1_A9Ow76w3qlU(Qé&3BiRpLP[qR/78v-̟nRFe ` QȄ Qt$Yա{шFp[gN|D? ] PKvY{wheel/cli/unpack.py]S0#*U eM{h"%Jmnȁqp 6Mhʿw@o޼ycjt[@c $1 M }'B btP I ՟9JmF+ i{f JWL \$1y& 0궅#XCgt S8)y pؤ4sh87ux$R feǠ%QB"(yD.  *4] x*.4HF# :Cy^bR$kD"d'y'>' &ֹw:KtzU,(K;Z8;l{O0~ߏGwt8 ("cWhLS9D*L(XVj0$ >xӉVJpq{Rͤ& tf,"0Ds.z3 en$ 7~8D iRNp{x8+th^MO>3j}MF+.`ޤ8B=\͞=})rU>Ȟכ)W%( {3$c v#9\k ۧ5#rʎYF(3ÜC-; 0'FRڄvG\+w䛻\^BR~n!l`ؤ*p#5.yGxVl:vU2Pv{J>"ӈ5r(f&'L$L±4Ҍx (M Q -u¨9z4|ޒW({JwI"S1>3#<5UlXAByY^7 ]L<ĬS7 IP@[>9Y&ыx{zu~WWW5~WvUx(7FgjxG/=LFgs/XB޶H3d Q'mx >0sAoJϤ@UPsS b ^el>V|N޴ÊVb VZw~ZWh8We883 v3=̌x4z{A.iwg&*22WB!sԆ LoPKvYw, t%&wheel/vendored/packaging/_manylinux.pyZis6_QfZ+Ӓ$]ױS*'Nx=4DBj^%L>/bN&)x+,5 (idh#9/WE4-iuJG'2YEL3`+1{-scv˫K]Eb̮2Gcv#,D`ڲ/BF=8Rc\\dg7OoNnŎ|b>{go;瓷c3v*L>{q$Ne@RHZ҄y/LLi<^{{`qJc4g$?kMy2 _|+ gb?¿-|u%wG[ } i&9f|>z}RDabdn@d n̹_yTQdQװ$ɤxyC$By$j0T xn/kݱ'l.X(4L^̚' BJP,]HȄNPD:SG;;Js @y:wJw;C{^.*5tR`.t'lؒIeLʈy' xtog') Nro=c7f!${v."Tucq:h4/X..^na `sٕƘ7r?TO/^ᴫeAB$Kj䩹iʥ WK\d=;22buOB18U?؞M_m,*-s%qwWo ?XW-}or0`_iG}Wu*k]~:2d ItTgL )ߌxcn+۬y ѤB%j짂 ѭS3h'~`"Ztu=%8vjϨnl;!Ӽy0lMm}(.Q!wXٍHu]&NC ij6n#;ါ@JdޞC>>z:):4{nLitRbc]l U">Kl:cjغ(8&6?5 &K1R "E/)BPBv9B@Beq"yzSV [N7mCj[k&#\+sQʖlgLoHQ͖}UGrdMYmx.bbL Mwd?F1V. M+5-?n ܸԣΤapaUMwk< &mg?t@2GC>oi,)Q7 mOiܰa-ȆC`4w,,ÎYM(/C;IڦiSnO8v)f* elr/)^]\N&LĘ8vٙ6n d}e*JZ(Cħ9 tm1\~m./DI+|Xޭ8 ]< )s;|;ژACltc1{7|UUKwF cv`~B]<۵^ʦ4Dߠs| {o֖?;{}r/u5o!_ݰq64K Y2֡|0n@vid 24At8hALq6R ?92._K'I: KŃ鑊<zI5Eݕ6M+fj2A'3jyn J3pc%4аnO1xiT36SH]H)JM~KApZ2c-~CRͮaސv-R8b'HNaYծ}\rǫqnaMe$}kv¨8GJL"i@ ƥ4(yoE:A mwľafv0ޡvp~`GV ۷t9e﻾oŘ?fn[Pwp7o`6& sk]ӭgp6q)<67$5zǵ\ԷHm9 ZnL7! &vZ:fx' g5/=21*E77=U Qt[wL_kNmm`Qz9nV>ֳ6c&b1P:qУnWh$!-B[mɵWS PKvY?8Ɯr &wheel/vendored/packaging/_musllinux.pyVmo6_q>Lla `0a6@~q N6H*Qd;m $)Mӛ \u"InAk^!ȶSآ =Vd~Pҹ:z77KX wjBq h wXIIBfhz]yc7,ovT3wpIcM бxcg^X >t r#ӣ0Eid ߽yC$I*%/rS:; Я}\J=.NX%^g]a:꧌%44MC ]uJ 9WLzSpïp $V֫ū5|L]YhVjtpt6hXam/kgiY]RYwEbv϶/P/+Q1fR<ȱh#DԣW޶tU2EALj'34&3V`ry^R4#\_B:,$3}8CxF ݈j\ȘnQh|fa6zP/??A"1IG9_Al }f$^YXW-y^ib׊EI}Zk2X.%z-8c}KXub(!qSXZ tPky,Y,ゥP|*I]xH<'1J1EIJ5WO(K*܄fNgyG:Ye9 [I("xu'hSī.c OIlލ/'`~9-t:g&k t 07#G8*HE< ̍\cSz|H6n%%yAcNȌrS"*3wˇw7 q1aF@|\G&P0p,,ͩ1͟muN7K>bzO( >uU qN0GUEGu煼ɶb8r$Z1 S_c3%8)},&eEӀUA,#8,Y@wyf0+nzd{>wI|xYVc i O+\0X)Wt Z`!_sO+R\~ WJ,& 2d+PDY6q°x8M5{gIAW5<" !h2S-" \Xpj2w(4ϋhn4]ߏGs~+ƒ_js5eJ8+u>/SEIr G-'Fzxuo gpXr 9RiH^6D~^RWB2KMKc9;8|2P 1zq㮒ٔT BP8P "׭Y.p.~^oU$ߔ^<&m n*gE=uKSP S׮gđ\;1gPdhl)ٌafě㩌hB]J`I iŗkwM\.] H5a9چw9b/*B],\q%ccAV_h!=J)uez\xHxA-ա砰4X3vT[>gٴt#`3=7lM '~ =.8#&G6\%X@svJyrf-Ɨ?W+G˫w/UNF|xhDPO_>TZU:ߖj]] -aWxDŷ3˴V䭞rj&E!Fi*K(,l=ʡ c=•j;0v{LRCżSև<-4T (VgB[ى +`G䏄H!C$j3ǡS[4>Ƕ~\SۮI)!$c#Ki˖ΡQPzSb8?eUڴZf%3=uc,ѧYӏ"n۵2I{ӧ%0?T\#;ˎ-GU~cMLca/?ajui8&#.gѻ`Ϙ=$<4YAA` ;pFxft8Ya[͐mǒ=픣yw[Xߒ:e>ȯ$X'{1@xnW51r !fZm׶>4ZE>6yHJjQQyT~IPjtFgcNYo,^ϏYjM )dt0n;7),uP?:82:nw[h5}iNf7hUIrxʪTZ0}؊OovOgް>/GRQ-PKvY0`'wheel/vendored/packaging/_structures.py͓=k0wYpLh)BB϶"ҹ_YN?dt HQY̠V-ܿT&)oogw(kM-a 9s?{=qv{woڻ_ڻ{_tYPl^{rM tkΨ9{M;=f1BvDBq:u!/Jfl 9'M.ν٭6*q ꤬Fdv#Z jg6o_zy=esq8Q*=` S~j1d/vPjԗ5eI 3()m~4z׏nzqo8.Gy`2;k N?wN~Uִ\K%55|g+svՈLǞ) ǥ)#@2!@I2!O66F[ܲih*(GKRf oG{o7M7i{`斴}eC*>j&?QuG^r *7B<>^`bV9M>}ɔ/f/`YI3ݬݎ6"6K=)ب0m`Y9b "Yy-#W*Ō.3sҁ' cw-2;QʤH0|タLrKSI*BNDEb2u$M)k7iiz/(9@wIoE`_HB2x8F1E砫FMnhj p{>L40TwR~7!4hJ680+H+~{^AU4b aiRYkd -JmLW0aϹq%VVFYYWrc }& (=Ŗ,W.h9<)C(YnV*)Gv^%RyA# ohD>LdRkѐ'8T\  c|*XDddhA0;]U Bmu׽Gq{JI.v)hT;pɋz֛'%ר%M?y{ L-x/GJ\`lDe',Bt #ˁW0y<$lժ]\&jV>~?'r0 t-(ƹOA*݃Æ,2( * _{=M1A~Z*_+Q]=xvp(h/36dѲVєJ[%[Gf;.0?V>~=y'j[,@zۈӔը<PKvYhi ( #wheel/vendored/packaging/markers.pyY_o6O.%mѢ0IP'bXK*$e{kp>Dje8>9g~3C[Ɇ-iÿ́f E1[F S;Mƾh ~qdK;SK8"ߖ/ƒ@Ss/oߜ;?SR4Po#kaaVuR) ûO]K ݅w׋;b%yCۖ^xm;[|;$pKYuTi0/~ꊩFѻegwYxT^qc#T*yk\2; CoϔS9Jݱo8[|+i˛0$ã_0~ װ/V cEU!U:,2Ԇ ּck)5WR0uO-[S֋{H8JY/Ʌ--jM%s{4Pʼnekj)?8Y^!VmˁO9cG v^heScخ30@524iq Nwy@P1OD6/EnAsarN+V !unݒp ^Twa! -t cYz`0fnl$jFҁ"eC `trzJ2T6 ߰mT"YOlPMQW}y86͚^@!CbE{>7\is2zt ) h\6K`AQ,#r.w #[z :a+ r#UY5zi( -aF"32gL+Ѭ6ǐo]S8f( +yv62=fM/j )Z̸pLL#"{]8*7&lM2yilq{7tҐHYq!f|ϴBX찆9YNÌdgEn<#Opp6 )Mv%x7af],,Dc*0@g,\ ΁0 i.!O,B@D&G~R7ʠAٚ0z J+;M?$U2|9 ' k$@08U?~OQCO1j<ۇ4'_W1؋9Ӟ֘N<ޱNl(g/@sOe? H"7x&~:8fiN +FvtF\>a;H55+Zfox 6ampy;yR*.=hl=$H& 8zjBO= IG]X,,, &yddAWN2]~Z,dn`M=>G:}.i^gd5}8䀘䡺8ef*UֻƲf*_V냅*Zfݩ:¼&najuj0 mBs),^c82lI2M< Li4[SbCgc-U¯ ˷M߶յi#OH cei݋rG?KH6T+5+C~:%8PlڲkHO17F2ZlFϫEvB$J׶ĝr <0fVkHݻa fF:k.'<½ cDaCPd<=\2&w#^p ӊٕAIm9$%bT +}z&+ɷX K zPxuT_*ĝ|1MU/?riy?cHgVCAuPEDܯjp/=WZm|v|XEhp_א% T`v_˸紡PI'?4JJ$[7k5rh4qD>BH+h3/aIW> (}C g$YEUg+wswa _J}$_hg8,vKw2w#V޸9U&uW(2&,;=; ~.e퍆2rje(TՒ|ǯܣf;= 1|<71'OO+ު լSiްAcV}|EL/^lc~< B"B"@TEKom^;$ b&[1p&H{E*UOhAz{ P˚!{.!f1xP _,Hx^oHk!l0Wl!˲3̝U9*o{ap,tք&/t^M.QWFC^/x@eo!#HCU [HE=ʄO C(]}e FXȋָo@p)YgO`ٲ5+ǀq.f{8}נcML{%Ѵ1  Pe`pW؛\@p r/z݃8<{ b_PKvYq'u (wheel/vendored/packaging/requirements.pyVo6_qP* Q 0xMC, {N1WtI*W/GwGPe#jUBphtӍX2rJfG]BY?x~uwTh7y`pt숯z!脬|6^mzhTr 7pq䑨s2ZyR@ ipʁPvNE%o^G`ca)W+.6`~x-u-TĻ|GҒEE[(5ҷ[ wg^TH,oL<+=yn| ͏wҴź'>1=ģnMۯ'S=loȯOB^J((Ru-B. ~+0t?~K86ue `lpgLM qe'g5}[pŠԋ~a@; 8X)tUbѥZx˚Y؏"?;z`vZF䫬HtHݼ(nCHa^t;Gk3F]((h/oY\I(qm"oyi,C'Te:P*OJ<CnI~5jѻ! T:5 R$]c-6̱_j?ٸhslJޏCJ՘Ivۈ1ivzy/ˢ%^b+ 8>x/ѼryO5x}XQAU_PKvYr"b&wheel/vendored/packaging/specifiers.py=ksǑ+V`''JNWhXCp. o~{gI7i]*ɢ,hD7"ExL7<}'*-Q|֏|Fþ|G<ًW9=+fذR,*r2e&jDYu:85Uu%r08:,M2Oy\-4NaqQXeROWG$Kga-c`)q1GY2_SX]Y֛%@SPJ,d@ԫ`q/5Ldj^o>s+`($/t H(Frr\ GΗI .DC)GU]^`0P.i~Gh};R\2G=t'EEvutt4hZr?CtzІQVi^I>]=? ߹hH Wj,m%U`wIʲ(%lOI"yԵX._E4-ED9khh7I0*Ј^I9*ZCBqqqaɊlFuL8<. y'%TE8x>EAtSh*(}T¬pRNχ M/#< o|LdZbFω-Fx4V"?Չu iEtoDTL*uLRnU6&r+0@bgA{tT76Ri^oG*َ\]\J?*;SD+Cݵ4# $EVN:mօd g`ഒl?d !ѺQ.? ûû'û z RvrЅ~ I:DjAs)'R#@ ue`Q܂^6"6xٮ ڐ01rh}mZ␙RA`Iv0qutH)ѧcZMU = irxM6tjbDgy؊gCI9IAzˍ< jWJ4Q-/P$~w*5- pKҧ"|r\xs6SeY5?iB jW=篻= gm:3"+ ?.5ڂ&1Hrk6pE7?w0A豏DӴmz$[$w8 m*<ޕ޽!ևmv l`JCv;@G0/`tWn[& 'J\~Cp-z[T"1:%VҴQGnt֕ThOPd|a3.~/|} S$ pPw6n"K<v<\9+}9 DrZЭ#,9mfɬ=oJ.x}94Ůio) b4Kr  5%-_e$}ZtZo7+Z*;BlUh^O7|݋4UvIIM c.|gg`埞}3YO cׂg1Q'Q&j79)Typ_vWKY~HG4Ok3@D~SH~@Sl",2f I?S+.4P ZF@ W*ltŤp|,!):@S/@1GOzKW>UzP dUbԚ;Niہ+1 |(>}:XuX$QUa2$ûW")7]kTxw-fY?ޟtzxjff _R(հ3MQӋ^}Xk-ѫCc~Ty8ᠡ3'e5Sܬ&a?]n"tYn>]co7VOo|LGnYAAeL\i=1cb%e?_N -DtY&Y Dj fDXoMQA4Ui;M2DyR+( >s7 _e1+5+}+1HMΣKi;PCv98}tu-[<8loޠ"> YU+vʉ"7VⴲxdV'ˇXݐڡ7Bx@mU{EՆT+^zy1y( m#p2#Gq˳l WtuT$l`ߕ_vErif|x&?歈;d+:'Y|vb'O/vXCb C/8 J!ӷ%]yvz|,ZB;Oxшǣ' 1a~e .:6KznKJ,4d}u1o 8B+-3:l'-h֙cS|M cQR]JQuɴo󢨟c:=$ 5sպjX]AE E=r,>%yHr4ޛ!` 1GIk>u#rѕb$<},W;1i-;n9̂ޯLN/Q3],&iӋ!?؇ Gq۰ƴG  Z@[r^)HC傳fL6nc vX;a"+0Q{ju}UqZQ `ArkzgrVuWWuFoП={:z"_׃kUet6bQ(5E"jGd? 1w/=!wz٢C{O*tNM5s>їeU֨.o95W.6ЖV̹|E0*IyQ CyљMrJR;6J&tVpX x%J2  ZN'df '{C<2e%K}X"TJ쬚"U3P9:@ mT'꽠x2kxGO>eOaDq<g|ui 3 /ݪإ]0mlZP T'lfu?m56X`^dXaIS‘&-n4 {jo\CMo"7@,JZȂz5dbtab*g[QIM|SEr\f˻vWglKhU Lӛ\rq3vh͞UAuq Vz{rPWЎªzo \BrW, i6I4HРdtg^AY2~ǍhK49P!$we1` W3_lTU##"g$/FtT FG4СS7C&xw[ڍB[ʓn,`1~n cV5,nwvc:)wrEH4{o~b<\ 7m)nD 7!MBP 9X7g/ khAM̙\1vtEΣ~dي|F/=KHV3م:OUٗM*8@p ݟ1eS)kc 3NOwz:,28T[ЬnUH;uQLfF6=-Iv%;mMzĎQq8խJmNV^:4).(gu'4-$M"7Ǵ³,˞R&V*(j^^G)\E֓"t)x&Xz%[rR0J6X?7k1MBT_-= b9?~|6f^4#GP.<졌,D{>Sʲ`.O࣓{}ڇ~D'j,wq0gɦ֌KAS169ky.x5Cwdr q}9{s.%LB9)vjaRuS+loR3">#uBO |.Y-v =|fpi =-6P_{[WCuX28k"ɊJMS.Õ3N2FF%.ܼ"tLf#Ch{1q,"],I5Ӻ[ϴLvDKU[ժ(ޚyިbğf֋1܊CL7kԸB6c)3ٲ}r^  .Tm܈f̨2y"͢W΢Ab}qweք$IFXjQQvҕ}6/G|,?nZxnaŽhV 4*e$0@GPT0"0GKA0Xe k2L Z'瞥׫|:;IcP.™`ә)*0Kp։EeѨjSd{<,@JUЫ(3:(u9‹y ;$8bPs^x׵: T]o wf&y3}&uS? Pc6-IxFIįu=ݞ^2؃Sp"އ,Fh|J޶쭍,kLYӞ츩zQ* &d!3&u{I|]ߕY}*Ծs" 7˚3ԙzĚ2vۙ[gS۵>\3qmKM:}EkU*-{'!$}-&A.k`*o-ȒdDo[>_v!Y/8T{cO.1w|ty4\;և%yr40]WuR=v=M{֏BOt 44Lo'HD"|ަYV^TNk\1-I2#THNvjw\bDQNcu^h;X^RtdͫE12. ~U\uT#>~2=>v;#GXJ׷yLa9Z,M u!\SBRӞ;Qhuq(C*h{֜[A&~;" ߫uӇ2\{zQB/¶D)(-6ZeGҗeӹ⏓v6ӣNF4PjjgD:cG{LOAgy}QLBt vӉ|~)jG'V衎L;[*,.QVNN=l%l{qBlFh P*wډD6k_Dp6%?'RR8?iWr\28 _:G5q?-aMyZ&5lwۦS=|lDj^20eZq &t[ecв?d >96_?یv/RRm3uJuVa 5ɁJ_xöu5bm ֎kA /}~ Tb|6p?!h+.L۾|k٠//i l*ŤB )ͣs&-lt+u :GofHKHQUeINDu[oYfkCCux!0-9K KlĎU̶xdSߡP ׊^ec@ݧlC`PW^gދ*r+1 :$3׫Z.jN`5JgȀië2ᦫ,)eEJCN0;0Y+nwU|SoHv$d~ڼ,BV"ll( Z3Zd\#q㯸'#M|PJ΋u>:4(!>uCWr [Gk_c"*Мrnb04yK[ U1ӿ8m|QqqNImmµ|xOS^`v8² ~O |EorIߏԯe4ju.QloAđ' HbB58@,ɢ/E6Gl< =Yqӊ1e3$Zu]u+=mkX^Z}_̉tM^N,R8"NmW3`,5Y0b6 rˍmT%qaÕ|W90Xs0Rfb˲f$+E20Ҙ3r/9C%MܳykDMm_pPp~O{=}juTdr]ٖ ds:Cj@̨߯#+1A3;%[3(a1ӘŪdق~K vF,Jc{=}a6n?~sqz&L^e f)|bl*,Wdנ<8ws=+x@K7@V ͼNyW HUh|u>g"I ^EIw*2`T+0$)JvĢ[qx `*Z#VAHaU'eF[W3\ h"רXb!`vp9qӜ8.x"]Wt Z (yQFZ #i(j؀Y~̪c<1-I9$5G3b^NO"b pCۖjioCoFHǯff `!=Dl»Pw;1k3ך=ƘxI8n؍%+3 ͌|&G!ƶRgES\y ESpc3.ȯ ӂ8VR\j/XhƬ,LP#ߪ*;[*WOn`xU6 !a@P0=9uV( 6 xQu(sh8=}ІC(}`PP@k *! e^E Qμ􂓾P)=ȮԆ~?AgAϤJ@ @8̚1\kYtPBP 6bq#&3ZvE_γ Ib{DY ܅$wz˯ƦujA0$7 b6wƝ;Lѓ2. *Qt#EXA9쥒8@.,V#gx I rp I'Jd*R̍fkU.E*$\2읎;#[AB Έ`W2wCOιQ+;TU,:w P+pZ,{F9+/})JVF̩Fo)(KªsI(ɋ`*Xe5H1 Wi>%8#Մ67(IwCOFloH08aRr0rv#W7)c 󊦆, -kX 1N Kg0jL⬲P)%4 p^XW8.yc15TI{'{r?$%&,Y :%QUAb *D~ͮQԼL+ =ԙ ى8*/N+1ȒT B3:Qg#PUO,a,LO""ʲd)*xdgg S"81hOF9i$iV,֢b, Sڽ;'߇oblۺg4 k Rά?Ooձc0GnBbM<+S1bI7ho>= yԡX9`OI zN;88z1m\7O2t 9jrPDFME1d"u&̛aQ5KtL+5P94I3OO<%b(P;# Vx{罽A6h$* .ǵǬW؍y8vQF#C;]HC? ; "ݥ~eʒRިPk ߇p!I/]%ÿz96CbX~ j}qв{p>~JpMJJja"q.ZX&kl!B`R/VUM jF(m)nuFPИi)B( hBgmQfLLZ) Sg,$\'El@'"]d8 U+]v } 2g8omSO;G3E&+ O\T;1JAѪpU{'bU5*⾍Z9+GE.y:]6Qv;줯>n&%]`OT Uј:Km4Tc%{$w#?fqaYaLFQl2gDwGxn6ᚹ}DU7:h6;#wAa]늭'Ѿrô{M@ӎ@o>QRwץ͛EU;DXvE3BW=]_9eg1Yn 'ԹPG}t xKgRcFc;PF6x>{:eZe^Qcc ^E};8 X< i> ap#VX&Cn̯SFРĽ}2_O^d#'$L0Ųlr hҨW\#R̉׉m {HM@b!+:ന~6j\#4(xV*%guY!Uxs_u!j{tlVJ]ͨv<'Qq`$|OV`Д!,pգ/$%j~CvnɋgMLQe#h|j4v5 xdg=x DGTiЮJy(岈*./&{޹jQAl4pVlOo?\ԢYVWl7`''oHe{[+O0wggh/yoXI+ݺ߸:HUy)$#"#-&yAIEOhI8e|h{GX Xɤ!7e-@ҧ)Ɣyr2s:%;u6+[hG%6>!/\Z!7'i05Բ ZFuRnBhyK 6u%O,;hΥxt:K5kd&ܧvVW2v~1ܶia rm柔͡:mRO>kD,<+7o-iy'(?&?+)F0޸z7=ipZ-:eC-3^x_GŸ~-o>}899UM{AP&ew[]٩LO5/ͩɭɐHw쥙*I; "~O ֟aP^Yct<*Pz H4^+W3(3uwıY%ѺDsꖇݽFP*Ȫ2M4[IS w+ )v!.̰=0+7Ě[Fb~=0K=p>>h~Щ뗻 ͧ+*h+wG߱?~S^5P"|0T4]ʎE%mkTEsl+ZarX2TD5$fOɳ\7NZ*59vk9s{NН6Yq6^{k~ PKvY!wheel/vendored/packaging/utils.pyXioF_)BqUN %2kq$1QdUA$-73o'TYϤ)R p"@$ ltF, >9 y^^dBr^#0g1ilc &R-ڛ1NlYd $ iqeDQgْ"Ğ /K49)1sQi^y@ xl*fibyYYȉq3>'Y4ǐQ_;Ht b#W+L3*D]=>ҬCu)kHzzUJu~%X2KJ0iM I%Ce@X[^  {Iwe4tޕ YQ:l 9>ykrP.WYbm&TR" ʼnk*!0L5P4Fi;˛0Gՙ }?zuz1r|'ҜT&ܝ0:tQ6k$Bw&:G{TO0o4Dr ZfXTNTm^x໪%u?C9H\174oP6Y*GYKTrnlA\T@ g%$.[eCrNFt _IhZQd*Z.!(<ב[af3{KE;]4F aJiá62nchIMŃ:uX"vY|Y%8:Bu)ڿ%"]=kq*q`IJN` )q$ ;)hS8U-Itd h (\| ;1 4GSujl_KQ5OaNB@% HMUЏ[V8T wC7Cx_s YWm:}2~9450VAOJalQPH[AePI#;x$axǡo!\ph7ݧAB#~ >Ւ-&2Vh6Iz7/(x|3$`;xɴ.~*9ZV.&6 |/3 EpkRvȠYb'3걥P1hs"sͩᄙ{y;F@ci|oԃ[H'ɰ  G8\VwQĪ^k]PwZY*Pɑz+zAd+U]I.31)0z+L6Vq*Hhe\&W0eAK#= x:H5wn^t$Z瑱qEc9ToRfggJONȋ&v=Rlؘht}o F{YNj7T$znNJ߽= y!k9+ ʶ]v{Ivn˥_Ջh]tw1m%] cw!Md0l1{\;}4kGBORO9ᮙ{c'|jLbBjx$sH;eXkF0MR1UE :uT[ru9L(wtk,Ci}慠ҍM;PKvYzn^j?#wheel/vendored/packaging/version.py[_s۸ק@XЬ݃ YM@)_b9WK$V'i3{"*WR(+$itb ;Qן ]7R ;`OǟO>NΎ..?z>rblǯ'O>>d!OP!/I |[,Ϥ8T^MY{Ty> ~u]kI4^R?hfҕ1x +LJ GaFD=|EK'0 WM~1us+,)E"yqחaCOO$h}38rwXƳ6fRNOMAC#qw s;7qC4`Ї+hcSܝhc\WԗBmk`-3i#):dP W'ıZEPJbݓv!y(xY zB",&\{qQOAQw]n"(:k֔uq=cɜdW"Q,A4J?# Q(nwMv+Ē2^XũykkdxkxJZVl.E֐D=l $,5{b'0鴣QESm&#,<%uY%\2ѨH-  ysmڔs&b_60ЌG,Bc T wDTvH\t$&<"R(^YjM7 m?|i.J8JؖD9M-Lo= xQ&g^| +(4Ye95Tǐ"cBW_S[` J5ڋldfh { f3 O׺ҥzy!SQNJDAՋvO@0GCf@W8Y2j.; @ .yY[Z.!Qk_ׯޠyNeܨj]R,zPnGnD$wIFfeߣ`650s P z21#Ɛz@A՞:sALZKq>kaNtwv٫f5؀guGRof/aAqSUw0r%A.3bb7j6 Nxǀ `v6VøaH3cw}6A6yOȰ$CI#{aD[|n:f Y~9[;G9).GWEvtA*t8&¶Ιg)yo5.>ZZ|7*IVg$m|ZvXP+3nJuѫ;ݞ^IvbD"Q?i*OY|6f`n ^49V/=Lë.M!UFyHj}|!/QH250ȴэ>* jp2]\ނvPP5}0x繠#XXT_ - ɴgsjT,V[v~#4iL+@jA-zT SGfcNK?-ω.,/\yb.]1.טW):}>Q(z,2pv{qJmŎ pkSBmv ? [*>ɫ'tawQ~6vߔMcsAj:vUomҔq+(UyA)uU|Aq u(p\Ņ +1q^"!ˋWj/h΁^ Z+&ڂjJέ(NV 6jra(@ou\-4'v)nF7%67Pb [дzפ먭Aj\ӣN0t<1W`df)gg_ ;B$ 8•cmqkD_9b7PK!HGh'wheel-0.44.0.dist-info/entry_points.txtN+I/N.,()*HMͱz9Vy\\)%%9zy)@I xd H"VHl..PKvYS"wheel-0.44.0.dist-info/LICENSE.txt]R[o0~8S+l4Ms) 4ˣ&x"8΢;MB|.l´zrԞ_gs<<dj2z܎~/or̸O_AMv9\!O9c'0=+g5y%Z| xpֳ{Lf:"- ~@g{U|9xrғW>fa7 ANւxCmHp/]HXAЙvΗhܐ@g-,Pa'}|38=]]"9E`OaqyBJw:EƟ{;u&8r RKG/_`$8ƫ3z fssM;*jQe  ̫{@=|eQ 4P 7uxیϰ½oDPYA Cq iW,@Bt[PVUÐ>Cؒk,lJDV{ 49-nQ Ϲ*2CetUJ 7 dtCYtU!c7uY,!/**k. qu*xY CQE+ %D aZ2F jKPK!HRQwheel-0.44.0.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,Q0ֳzd&Y)r$[)T&UrPK!H* wheel-0.44.0.dist-info/METADATAUR6ޟ0Xk݃L‘!ɒ+ ~{{lC\>~|AHD:/ f~rlZpMCXJWFXYW?`҄'6[HelXSKJg0FV>"~~\ 6_gJ(0CwPx =GwAj']V忲1ܩ*PmȚ&$ӻFZxV eԶ*)AC;H`⬬ȔR"rK0Bcd^V*,㷡 !AǨK-U立R^;QRu;:C㷷F7Q^Ո!G6V>dP5} /|;Sxw<x uվ2\f0*(r*i;gܡ@isϕMѤejpyJO4ym-_ G^x_#V.Q:z dialV(+04]l$ZRUDjb߸VJ?A0aN/.q׏R贶ȳM;Bd$t b_Lqy[ł"oMh>%6dNLI<} ٮ-ڹuT&_2Ȕgʅcdz'^VUVvծ='9}bh6T@[(= 9\kJ&: +YQS{[/l}0Q%.P6Fujk3ߝS.ٝ^ՊKH彉cF 輚r#Qoh(!ƍXvYA(46|X*4*B޺oqg= #q)|v!t7= -Q4XQ7Y'x$ co{^![H.S:ޤ|te|;R2/PK!Hv wheel-0.44.0.dist-info/RECORDɖཟ @b<zmZy6fDdȓ}߀)Kc(]ʓ)NYu,&jp '\N؜iUB2{X(FW\#U#`8¸f?; ڰ*ð98꡸<{搶Mu$mt-@`&ܔK?w]=ueET?r`&PQkU>Z5sU˗{,^I?_'CҴ-ie$ōx ]h3† g#9J5AM_aZɎxEJ|3݋$_}&&py(z oABf $Mp*3Fdy3SKh@{\ח@eNaF={FN0hF4\+ ]gv]A8dٮO*NpD@aWz/ƹm.Be}h-_;)aӢ's4gxsb*6һa21$0{j'qI1{Y$JNjFUVxQ@q]9mPBwdNx ceU&gؘGqŶ9HIK%+֮ mY~|lנY*#um4Vľ`q糍%U#86x\:7sru;|c<.Ѽ~:4𪈢oAW->M`ۈ0wUI[<>n&0 zkζd nڊ_8B#`qݷ-]\q5ii7ʃ_n]65 uf*GyAawsy?PKvYU:;wheel/__init__.pyPKvY?niwheel/__main__.pyPKvYBC Swheel/_bdist_wheel.pyPKvY Jؐ wheel/_setuptools_logging.pyPKvYH xwheel/bdist_wheel.pyPKvYaCU@wheel/macosx_libfile.pyPKvY _F.wheel/metadata.pyPKvYZm _7wheel/util.pyPKvY% 8wheel/wheelfile.pyPKvY52Cwheel/cli/__init__.pyPKvYd" (%Iwheel/cli/convert.pyPKvY,t{ Uwheel/cli/pack.pyPKvY@P [Zwheel/cli/tags.pyPKvY{c`wheel/cli/unpack.pyPKvYbwheel/vendored/__init__.pyPKvYL6Cbwheel/vendored/vendor.txtPKvY$(cwheel/vendored/packaging/__init__.pyPKvYb  $lcwheel/vendored/packaging/_elffile.pyPKvYw, t%&hwheel/vendored/packaging/_manylinux.pyPKvY?8Ɯr &uwheel/vendored/packaging/_musllinux.pyPKvY4{ k(#zwheel/vendored/packaging/_parser.pyPKvY0`'wheel/vendored/packaging/_structures.pyPKvYsw)&Uwheel/vendored/packaging/_tokenizer.pyPKvYhi ( #wheel/vendored/packaging/markers.pyPKvYq'u (wheel/vendored/packaging/requirements.pyPKvYr"b&&wheel/vendored/packaging/specifiers.pyPKvYmoJ |wheel/vendored/packaging/tags.pyPKvY!Zwheel/vendored/packaging/utils.pyPKvYzn^j?#xwheel/vendored/packaging/version.pyPK!HGh'wheel-0.44.0.dist-info/entry_points.txtPKvYS"%wheel-0.44.0.dist-info/LICENSE.txtPK!HRQwheel-0.44.0.dist-info/WHEELPK!H* wheel-0.44.0.dist-info/METADATAPK!Hv wheel-0.44.0.dist-info/RECORDPK"" PK7QYvirtualenv/util/__init__.pyPK7QYv+CCvirtualenv/util/error.py"""Errors.""" from __future__ import annotations class ProcessCallFailedError(RuntimeError): """Failed a process call.""" def __init__(self, code, out, err, cmd) -> None: super().__init__(code, out, err, cmd) self.code = code self.out = out self.err = err self.cmd = cmd PK7QYvirtualenv/util/lock.py"""holds locking functionality that works across processes.""" from __future__ import annotations import logging import os from abc import ABC, abstractmethod from contextlib import contextmanager, suppress from pathlib import Path from threading import Lock, RLock from filelock import FileLock, Timeout class _CountedFileLock(FileLock): def __init__(self, lock_file) -> None: parent = os.path.dirname(lock_file) if not os.path.isdir(parent): with suppress(OSError): os.makedirs(parent) super().__init__(lock_file) self.count = 0 self.thread_safe = RLock() def acquire(self, timeout=None, poll_interval=0.05): if not self.thread_safe.acquire(timeout=-1 if timeout is None else timeout): raise Timeout(self.lock_file) if self.count == 0: super().acquire(timeout, poll_interval) self.count += 1 def release(self, force=False): # noqa: FBT002 with self.thread_safe: if self.count > 0: self.thread_safe.release() if self.count == 1: super().release(force=force) self.count = max(self.count - 1, 0) _lock_store = {} _store_lock = Lock() class PathLockBase(ABC): def __init__(self, folder) -> None: path = Path(folder) self.path = path.resolve() if path.exists() else path def __repr__(self) -> str: return f"{self.__class__.__name__}({self.path})" def __truediv__(self, other): return type(self)(self.path / other) @abstractmethod def __enter__(self): raise NotImplementedError @abstractmethod def __exit__(self, exc_type, exc_val, exc_tb): raise NotImplementedError @abstractmethod @contextmanager def lock_for_key(self, name, no_block=False): # noqa: FBT002 raise NotImplementedError @abstractmethod @contextmanager def non_reentrant_lock_for_key(self, name): raise NotImplementedError class ReentrantFileLock(PathLockBase): def __init__(self, folder) -> None: super().__init__(folder) self._lock = None def _create_lock(self, name=""): lock_file = str(self.path / f"{name}.lock") with _store_lock: if lock_file not in _lock_store: _lock_store[lock_file] = _CountedFileLock(lock_file) return _lock_store[lock_file] @staticmethod def _del_lock(lock): if lock is not None: with _store_lock, lock.thread_safe: if lock.count == 0: _lock_store.pop(lock.lock_file, None) def __del__(self) -> None: self._del_lock(self._lock) def __enter__(self): self._lock = self._create_lock() self._lock_file(self._lock) def __exit__(self, exc_type, exc_val, exc_tb): self._release(self._lock) self._del_lock(self._lock) self._lock = None def _lock_file(self, lock, no_block=False): # noqa: FBT002 # multiple processes might be trying to get a first lock... so we cannot check if this directory exist without # a lock, but that lock might then become expensive, and it's not clear where that lock should live. # Instead here we just ignore if we fail to create the directory. with suppress(OSError): os.makedirs(str(self.path)) try: lock.acquire(0.0001) except Timeout: if no_block: raise logging.debug("lock file %s present, will block until released", lock.lock_file) lock.release() # release the acquire try from above lock.acquire() @staticmethod def _release(lock): lock.release() @contextmanager def lock_for_key(self, name, no_block=False): # noqa: FBT002 lock = self._create_lock(name) try: try: self._lock_file(lock, no_block) yield finally: self._release(lock) finally: self._del_lock(lock) lock = None @contextmanager def non_reentrant_lock_for_key(self, name): with _CountedFileLock(str(self.path / f"{name}.lock")): yield class NoOpFileLock(PathLockBase): def __enter__(self): raise NotImplementedError def __exit__(self, exc_type, exc_val, exc_tb): raise NotImplementedError @contextmanager def lock_for_key(self, name, no_block=False): # noqa: ARG002, FBT002 yield @contextmanager def non_reentrant_lock_for_key(self, name): # noqa: ARG002 yield __all__ = [ "NoOpFileLock", "ReentrantFileLock", "Timeout", ] PK7QYҠXvirtualenv/util/zipapp.pyfrom __future__ import annotations # noqa: A005 import logging import os import zipfile from virtualenv.info import IS_WIN, ROOT def read(full_path): sub_file = _get_path_within_zip(full_path) with zipfile.ZipFile(ROOT, "r") as zip_file, zip_file.open(sub_file) as file_handler: return file_handler.read().decode("utf-8") def extract(full_path, dest): logging.debug("extract %s to %s", full_path, dest) sub_file = _get_path_within_zip(full_path) with zipfile.ZipFile(ROOT, "r") as zip_file: info = zip_file.getinfo(sub_file) info.filename = dest.name zip_file.extract(info, str(dest.parent)) def _get_path_within_zip(full_path): full_path = os.path.realpath(os.path.abspath(str(full_path))) prefix = f"{ROOT}{os.sep}" if not full_path.startswith(prefix): msg = f"full_path={full_path} should start with prefix={prefix}." raise RuntimeError(msg) sub_file = full_path[len(prefix) :] if IS_WIN: # paths are always UNIX separators, even on Windows, though __file__ still follows platform default sub_file = sub_file.replace(os.sep, "/") return sub_file __all__ = [ "extract", "read", ] PK7QY%9STT virtualenv/util/path/__init__.pyfrom __future__ import annotations from ._permission import make_exe, set_tree from ._sync import copy, copytree, ensure_dir, safe_delete, symlink from ._win import get_short_path_name __all__ = [ "copy", "copytree", "ensure_dir", "get_short_path_name", "make_exe", "safe_delete", "set_tree", "symlink", ] PK7QYx #virtualenv/util/path/_permission.pyfrom __future__ import annotations import os from stat import S_IXGRP, S_IXOTH, S_IXUSR def make_exe(filename): original_mode = filename.stat().st_mode levels = [S_IXUSR, S_IXGRP, S_IXOTH] for at in range(len(levels), 0, -1): try: mode = original_mode for level in levels[:at]: mode |= level filename.chmod(mode) break except OSError: continue def set_tree(folder, stat): for root, _, files in os.walk(str(folder)): for filename in files: os.chmod(os.path.join(root, filename), stat) __all__ = ( "make_exe", "set_tree", ) PK7QYHOq((virtualenv/util/path/_sync.pyfrom __future__ import annotations import logging import os import shutil import sys from stat import S_IWUSR def ensure_dir(path): if not path.exists(): logging.debug("create folder %s", str(path)) os.makedirs(str(path)) def ensure_safe_to_do(src, dest): if src == dest: msg = f"source and destination is the same {src}" raise ValueError(msg) if not dest.exists(): return if dest.is_dir() and not dest.is_symlink(): logging.debug("remove directory %s", dest) safe_delete(dest) else: logging.debug("remove file %s", dest) dest.unlink() def symlink(src, dest): ensure_safe_to_do(src, dest) logging.debug("symlink %s", _Debug(src, dest)) dest.symlink_to(src, target_is_directory=src.is_dir()) def copy(src, dest): ensure_safe_to_do(src, dest) is_dir = src.is_dir() method = copytree if is_dir else shutil.copy logging.debug("copy %s", _Debug(src, dest)) method(str(src), str(dest)) def copytree(src, dest): for root, _, files in os.walk(src): dest_dir = os.path.join(dest, os.path.relpath(root, src)) if not os.path.isdir(dest_dir): os.makedirs(dest_dir) for name in files: src_f = os.path.join(root, name) dest_f = os.path.join(dest_dir, name) shutil.copy(src_f, dest_f) def safe_delete(dest): def onerror(func, path, exc_info): # noqa: ARG001 if not os.access(path, os.W_OK): os.chmod(path, S_IWUSR) func(path) else: raise # noqa: PLE0704 kwargs = {"onexc" if sys.version_info >= (3, 12) else "onerror": onerror} shutil.rmtree(str(dest), ignore_errors=True, **kwargs) class _Debug: def __init__(self, src, dest) -> None: self.src = src self.dest = dest def __str__(self) -> str: return f"{'directory ' if self.src.is_dir() else ''}{self.src!s} to {self.dest!s}" __all__ = [ "copy", "copytree", "ensure_dir", "safe_delete", "symlink", "symlink", ] PK7QY{s''virtualenv/util/path/_win.pyfrom __future__ import annotations def get_short_path_name(long_name): """Gets the short path name of a given long path - http://stackoverflow.com/a/23598461/200291.""" import ctypes # noqa: PLC0415 from ctypes import wintypes # noqa: PLC0415 _GetShortPathNameW = ctypes.windll.kernel32.GetShortPathNameW # noqa: N806 _GetShortPathNameW.argtypes = [wintypes.LPCWSTR, wintypes.LPWSTR, wintypes.DWORD] _GetShortPathNameW.restype = wintypes.DWORD output_buf_size = 0 while True: output_buf = ctypes.create_unicode_buffer(output_buf_size) needed = _GetShortPathNameW(long_name, output_buf, output_buf_size) if output_buf_size >= needed: return output_buf.value output_buf_size = needed __all__ = [ "get_short_path_name", ] PK7QY&virtualenv/util/subprocess/__init__.pyfrom __future__ import annotations import subprocess CREATE_NO_WINDOW = 0x80000000 def run_cmd(cmd): try: process = subprocess.Popen( cmd, universal_newlines=True, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE, encoding="utf-8", ) out, err = process.communicate() # input disabled code = process.returncode except OSError as error: code, out, err = error.errno, "", error.strerror if code == 2 and "file" in err: # noqa: PLR2004 err = str(error) # FileNotFoundError in Python >= 3.3 return code, out, err __all__ = ( "CREATE_NO_WINDOW", "run_cmd", ) PK7QY{܋>virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/METADATAMetadata-Version: 2.3 Name: virtualenv Version: 20.26.6.dev12+g393bdd3.d20241018 Summary: Virtual Python Environment builder Project-URL: Documentation, https://virtualenv.pypa.io Project-URL: Homepage, https://github.com/pypa/virtualenv Project-URL: Source, https://github.com/pypa/virtualenv Project-URL: Tracker, https://github.com/pypa/virtualenv/issues Maintainer-email: Bernat Gabor License-Expression: MIT License-File: LICENSE Keywords: environments,isolated,virtual Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License Classifier: Operating System :: MacOS :: MacOS X Classifier: Operating System :: Microsoft :: Windows Classifier: Operating System :: POSIX Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: PyPy Classifier: Topic :: Software Development :: Libraries Classifier: Topic :: Software Development :: Testing Classifier: Topic :: Utilities Requires-Python: >=3.8 Requires-Dist: distlib<1,>=0.3.7 Requires-Dist: filelock<4,>=3.12.2 Requires-Dist: importlib-metadata>=6.6; python_version < '3.8' Requires-Dist: platformdirs<5,>=3.9.1 Provides-Extra: docs Requires-Dist: furo>=2023.7.26; extra == 'docs' Requires-Dist: proselint>=0.13; extra == 'docs' Requires-Dist: sphinx!=7.3,>=7.1.2; extra == 'docs' Requires-Dist: sphinx-argparse>=0.4; extra == 'docs' Requires-Dist: sphinxcontrib-towncrier>=0.2.1a0; extra == 'docs' Requires-Dist: towncrier>=23.6; extra == 'docs' Provides-Extra: test Requires-Dist: covdefaults>=2.3; extra == 'test' Requires-Dist: coverage-enable-subprocess>=1; extra == 'test' Requires-Dist: coverage>=7.2.7; extra == 'test' Requires-Dist: flaky>=3.7; extra == 'test' Requires-Dist: packaging>=23.1; extra == 'test' Requires-Dist: pytest-env>=0.8.2; extra == 'test' Requires-Dist: pytest-freezer>=0.4.8; (platform_python_implementation == 'PyPy' or (platform_python_implementation == 'CPython' and sys_platform == 'win32' and python_version >= '3.13')) and extra == 'test' Requires-Dist: pytest-mock>=3.11.1; extra == 'test' Requires-Dist: pytest-randomly>=3.12; extra == 'test' Requires-Dist: pytest-timeout>=2.1; extra == 'test' Requires-Dist: pytest>=7.4; extra == 'test' Requires-Dist: setuptools>=68; extra == 'test' Requires-Dist: time-machine>=2.10; (platform_python_implementation == 'CPython') and extra == 'test' Description-Content-Type: text/markdown # virtualenv [![PyPI](https://img.shields.io/pypi/v/virtualenv?style=flat-square)](https://pypi.org/project/virtualenv) [![PyPI - Implementation](https://img.shields.io/pypi/implementation/virtualenv?style=flat-square)](https://pypi.org/project/virtualenv) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/virtualenv?style=flat-square)](https://pypi.org/project/virtualenv) [![Documentation](https://readthedocs.org/projects/virtualenv/badge/?version=latest&style=flat-square)](http://virtualenv.pypa.io) [![Discord](https://img.shields.io/discord/803025117553754132)](https://discord.gg/pypa) [![Downloads](https://static.pepy.tech/badge/virtualenv/month)](https://pepy.tech/project/virtualenv) [![PyPI - License](https://img.shields.io/pypi/l/virtualenv?style=flat-square)](https://opensource.org/licenses/MIT) [![check](https://github.com/pypa/virtualenv/actions/workflows/check.yaml/badge.svg)](https://github.com/pypa/virtualenv/actions/workflows/check.yaml) A tool for creating isolated `virtual` python environments. - [Installation](https://virtualenv.pypa.io/en/latest/installation.html) - [Documentation](https://virtualenv.pypa.io) - [Changelog](https://virtualenv.pypa.io/en/latest/changelog.html) - [Issues](https://github.com/pypa/virtualenv/issues) - [PyPI](https://pypi.org/project/virtualenv) - [Github](https://github.com/pypa/virtualenv) ## Code of Conduct Everyone interacting in the virtualenv project's codebases, issue trackers, chat rooms, and mailing lists is expected to follow the [PSF Code of Conduct](https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md). PK7QYtWW;virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/WHEELWheel-Version: 1.0 Generator: hatchling 1.25.0 Root-Is-Purelib: true Tag: py3-none-any PK7QY6-DFvirtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/entry_points.txt[console_scripts] virtualenv = virtualenv.__main__:run_with_catch [virtualenv.activate] bash = virtualenv.activation.bash:BashActivator batch = virtualenv.activation.batch:BatchActivator cshell = virtualenv.activation.cshell:CShellActivator fish = virtualenv.activation.fish:FishActivator nushell = virtualenv.activation.nushell:NushellActivator powershell = virtualenv.activation.powershell:PowerShellActivator python = virtualenv.activation.python:PythonActivator [virtualenv.create] cpython3-mac-brew = virtualenv.create.via_global_ref.builtin.cpython.mac_os:CPython3macOsBrew cpython3-mac-framework = virtualenv.create.via_global_ref.builtin.cpython.mac_os:CPython3macOsFramework cpython3-posix = virtualenv.create.via_global_ref.builtin.cpython.cpython3:CPython3Posix cpython3-win = virtualenv.create.via_global_ref.builtin.cpython.cpython3:CPython3Windows pypy3-posix = virtualenv.create.via_global_ref.builtin.pypy.pypy3:PyPy3Posix pypy3-win = virtualenv.create.via_global_ref.builtin.pypy.pypy3:Pypy3Windows venv = virtualenv.create.via_global_ref.venv:Venv [virtualenv.discovery] builtin = virtualenv.discovery.builtin:Builtin [virtualenv.seed] app-data = virtualenv.seed.embed.via_app_data.via_app_data:FromAppData pip = virtualenv.seed.embed.pip_invoke:PipInvoke PK7QY=,22Fvirtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/licenses/LICENSECopyright (c) 2020-202x The virtualenv developers Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK7QY7l''<virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/RECORDvirtualenv/__init__.py,sha256=Xgxz-UdfWM8x8Waxcn9Lb50VamQJ6VtQi6CYwnSO-nM,183 virtualenv/__main__.py,sha256=f1ujGuUms6LLteuAMa3QrCCHbKH_GkY7z1ds9hZCHdY,2662 virtualenv/info.py,sha256=mryKv_4EDcEG64RjU2paXufcOPbGMsnZVaoEPothLtY,1982 virtualenv/report.py,sha256=7be1LACPNAUQxKa0j8okAkTSxY6MDXaxEQfXDQjHr5o,1355 virtualenv/version.py,sha256=A2sYWrJl3vgk6B8wJkSBtr1WKxWnj-HwLzA2PE09-qU,471 virtualenv/activation/__init__.py,sha256=usYC7WoMVgHu2ybcPhz6F2OPkBNS4IiuHW77Gv_s4SM,464 virtualenv/activation/activator.py,sha256=l_KpaUpE-sG82axgF9vz4ng3QtoJox3rkzOn1vynPTM,1419 virtualenv/activation/via_template.py,sha256=RLqcAsBa79oQxyYNVbHRSkN64HXx7ItKvSv57_Ee6C4,3043 virtualenv/activation/bash/__init__.py,sha256=-gJPcAs3VEY2EP5URBsUaXTHrlQGamSyNO6E4ohe8pw,334 virtualenv/activation/bash/activate.sh,sha256=YfUoH9KSXNKKIk1FLHxO4fD6VpD3munV81Z164AsY_c,2270 virtualenv/activation/batch/__init__.py,sha256=p9VSdsxBxWOZCExupbd5y6XMNynUCgH4JE02U3Tcq1c,756 virtualenv/activation/batch/activate.bat,sha256=Ry2NIB4tr2x5EezBFiet5KI4cdzlCR_yWMdHI72cSqI,1476 virtualenv/activation/batch/deactivate.bat,sha256=07F0HsJ5cs1VpOxPyR8LFqBgNRD2TPhK4NNxF6NIRas,537 virtualenv/activation/batch/pydoc.bat,sha256=pVuxn8mn9P_Rd0349fiBEiwIuMvfJQSfgJ2dljUT2fA,24 virtualenv/activation/cshell/__init__.py,sha256=ZUCemt69joL0KoBSqHQILHTbVeCXjSMpOL9IIofrw6Y,336 virtualenv/activation/cshell/activate.csh,sha256=Ayh2k6bO1T-gLhqSqewMa-TVjIAhxmv6VN5Mk9dInRA,1527 virtualenv/activation/fish/__init__.py,sha256=gi0Q2mhmsHLtN_vm2Ck6m_tg6ixmJ5BGQ9SZJDjOHVE,241 virtualenv/activation/fish/activate.fish,sha256=JB1wsAeB_3fIwDWchEpT-BB9iNemjgl-kJhnmfV_DUs,3089 virtualenv/activation/nushell/__init__.py,sha256=suMVpehUTmxv3MpITh7W2fa6MweRjVFs1SY-WzNHVDc,1205 virtualenv/activation/nushell/activate.nu,sha256=WAL7OB7ywDM9ZtrgUUrZFlwvhr0V_24Y8ue5gqyijOc,2772 virtualenv/activation/powershell/__init__.py,sha256=A3H7keFmOngsn821tnt1Y4Ms3lsxM62jdWVxVb6_OZ0,823 virtualenv/activation/powershell/activate.ps1,sha256=PdtKOwW9w4kFwVqNyrCvCLQ1Vtz1-JVcO66WHK-dtWY,1708 virtualenv/activation/python/__init__.py,sha256=mLxIDdV7rTjC6pfxzeCbAfsGRryoqIGFQri4hcqWzE4,830 virtualenv/activation/python/activate_this.py,sha256=CHY9wIkzvFIVzSZZPeDGN5VeHgBRdfYf-9xge_h6epw,1305 virtualenv/app_data/__init__.py,sha256=iFqz7nzy3rVkvk9zDqkTxhdJlt7yyFnpeABfEUcoKFs,1432 virtualenv/app_data/base.py,sha256=NTlg2lAEHXV3nehGihy1KLyqTorDcmPvpR9caWepFnw,2083 virtualenv/app_data/na.py,sha256=9ye51rBg5Ywz2i58s6b6XxdBeHvuIIgGmXO65P5eLFo,1500 virtualenv/app_data/read_only.py,sha256=C4jfyONJLVPAKUKE7QMHBAk_adfhmWK31xX_7TLxCc4,1113 virtualenv/app_data/via_disk_folder.py,sha256=VgumA8Qg6VdUQLtfA8rcm8_gf0qd9excoJTbNHe802Q,5501 virtualenv/app_data/via_tempdir.py,sha256=BueKPXPl6HiDpQOyEyldJj9mdDqGYLzAa-iNVbvuC2o,775 virtualenv/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/config/convert.py,sha256=UU4qyc5RcCl2c4viY8vMI1rrVvUHHJ1LEPSs9h2Jfrw,2755 virtualenv/config/env_var.py,sha256=sEC6c3u63bEZ6AC218QgzgLlxMZggBoTAq9s5xnYm9U,748 virtualenv/config/ini.py,sha256=xewh4RqbZA8mZib4ROwQgLgeUZCGwKJH_ayx4KuKPcs,2669 virtualenv/config/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/config/cli/parser.py,sha256=p3f0_8vhCX0P9mGUB6XlgKZD3rRAWevM8n9FLw4pfHE,4638 virtualenv/create/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/create/creator.py,sha256=RoUqm8UPz7ksnOdlImpZDRjuEI5JxmdFBx66OaznOEQ,8496 virtualenv/create/debug.py,sha256=tjQToAjvU0MUQZEUOugoB3l7UPIKNJRPRBnaLKQDVcI,3149 virtualenv/create/describe.py,sha256=OgGhSQJwM4NV_ECX-U9MgeKWl8qIn3Pj-ModMnumQWY,3154 virtualenv/create/pyenv_cfg.py,sha256=RQMJxJdkQ1xyrsr95bPKwaG95g9vS4WQHwifnKysxmY,1789 virtualenv/create/via_global_ref/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/create/via_global_ref/_virtualenv.py,sha256=DyA1HqfpADnEbT-r3vmR8oseP_M-sT7m8NXNIeoOixQ,4443 virtualenv/create/via_global_ref/api.py,sha256=tvZTLA9YtM2Ra2Mdo4gIHphUPXHJ8bWwzH4cSQlmlcc,4252 virtualenv/create/via_global_ref/store.py,sha256=OVRyaMUBT7Kh_sEy02m5VsHvh0tpxynpKxLjXDDXb1c,667 virtualenv/create/via_global_ref/venv.py,sha256=yS4zIlP8qNl7daUhvq7LXd4xKngQahkN95-MoKj16s4,3665 virtualenv/create/via_global_ref/builtin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/create/via_global_ref/builtin/builtin_way.py,sha256=gcw1jAjMKLfCVRKbZKRGoqixsmGXt8YuiH2NYPKI-Lg,520 virtualenv/create/via_global_ref/builtin/ref.py,sha256=96T97fbI3BECmwSHNeV8Sty469GJKYPIiZeSEWNatwc,5433 virtualenv/create/via_global_ref/builtin/via_global_self_do.py,sha256=zTjsxnASAwMFgI8tvB3YK0FSfPM08B3O6QM7DGQgF0M,4430 virtualenv/create/via_global_ref/builtin/cpython/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/create/via_global_ref/builtin/cpython/common.py,sha256=BKvU2bk-t_Ozg-QvTiSp_6bxMH1_wehXevJIspTjs0k,2530 virtualenv/create/via_global_ref/builtin/cpython/cpython3.py,sha256=HBt9OKqjvAXRWvz6rvyVA9WB-n6gKk_agakVzqGMd6c,4789 virtualenv/create/via_global_ref/builtin/cpython/mac_os.py,sha256=WRxOBRr-2_03Uo8jhkzDhzk98AoO7J-A_T015LvgzDQ,11633 virtualenv/create/via_global_ref/builtin/pypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/create/via_global_ref/builtin/pypy/common.py,sha256=WwjoRRzPqQKiRdgkLfPKiYOPWMyx4KkG2XyRDCTTZ3I,1716 virtualenv/create/via_global_ref/builtin/pypy/pypy3.py,sha256=srpqZzZWb7bdGSZk5YNPOPEJZ5cb7Wf8eISEcvlX7FU,2494 virtualenv/discovery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/discovery/builtin.py,sha256=XgWPXPXeeEub3nOQZTmxNM7fdzqPtP1yTs8CdwaSS8k,7943 virtualenv/discovery/cached_py_info.py,sha256=7arKTkXYQyk61mW1R1IO0S4vhH1r14sykzwCQMN2gOg,6498 virtualenv/discovery/discover.py,sha256=St6Kh8w5PudqlB1IuAWaNpzfLfB9NrIlqpNU2h6C-lA,1173 virtualenv/discovery/py_info.py,sha256=TayrTIOWn9YK4IwlkMPvmNDbvEdjgEXeH0IZwYlJhtY,25482 virtualenv/discovery/py_spec.py,sha256=HxddFzlAMF8FqBcbA0ofWCjZKOBGC5bns8zukuklmZ0,4637 virtualenv/discovery/windows/__init__.py,sha256=_9NwLhvYvPm2lj-EPUx4-Xtbdj9-buw1AXwC8VynYzA,1855 virtualenv/discovery/windows/pep514.py,sha256=50XtpmeWRyG_ihYMEMnqFW51tmf8bn4MYpkMy4h1-Mo,5059 virtualenv/run/__init__.py,sha256=4GXLmPoWqg7krVttq3c70twJycZSes8oeKTl0MonRqY,6244 virtualenv/run/session.py,sha256=ZAWRTo-GXs9JS6hZbzpR4bZJuEH8YkWa7Sg0XCXGjS0,2454 virtualenv/run/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/run/plugin/activators.py,sha256=rNo8gEM7Tqk0NFV8RWX8RlrZcmHc13-8R7WF8pO2bLU,2235 virtualenv/run/plugin/base.py,sha256=B9saI-0WZHjsQeu_yx7iIFhNoVfgoMknlKlPDVdA4j0,2096 virtualenv/run/plugin/creators.py,sha256=hMQQX51lp-t1HdV7zvJaAIqIg_tXYVF_DYtXh2XXjZo,3626 virtualenv/run/plugin/discovery.py,sha256=va7Xj6Bn3QD1oZJ6WqrisH6sB9xHZoK81rHmsFnWhdw,1180 virtualenv/run/plugin/seeders.py,sha256=up_Ai5SsBzqSGfWonlQMgiIKs8NJon6WtxI8CINx1vk,1050 virtualenv/seed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/seed/seeder.py,sha256=Ao-b5mtuQJWfpJigJ8WYHTRdQzYC0btQ1rkHn1fkcig,1155 virtualenv/seed/embed/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/seed/embed/base_embed.py,sha256=nVZwY7RnZBA1wGttLC4tvOIUsYBaQUZQh6UFF7gq17s,4219 virtualenv/seed/embed/pip_invoke.py,sha256=sPuzgNuwxFL1TUqlsJod5nhl1rasIiAZ1O4WcFQU9lo,2200 virtualenv/seed/embed/via_app_data/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/seed/embed/via_app_data/via_app_data.py,sha256=zC-FUMFHH0IUzrHYbt-O6Q3CwByvoqaMGN9FKc8BKMU,5875 virtualenv/seed/embed/via_app_data/pip_install/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/seed/embed/via_app_data/pip_install/base.py,sha256=KMLz18QFL9DZcod_JRXy3J4si0IDSoh_v1fP9oG9t5c,8301 virtualenv/seed/embed/via_app_data/pip_install/copy.py,sha256=g-vzGeo0RuWiV_e5OaMvPL1Oz_oHzSzGfkhAirNFcPE,1240 virtualenv/seed/embed/via_app_data/pip_install/symlink.py,sha256=sBSLyrsp244DYIpC2AIWdR-UoqospLEKUTsG3jQAU5g,2015 virtualenv/seed/wheels/__init__.py,sha256=rN6_NcnOOrsaIgPv18aYNwoTfeP10c0J5GjF8u6WMtc,204 virtualenv/seed/wheels/acquire.py,sha256=pJs1Fm4uBznCAw8eig6YERr6R2IewXXfy4vZ0YD-7zg,4552 virtualenv/seed/wheels/bundle.py,sha256=Ub8PxmsuovpuB1ns-74BuAGcuxjUEL_gfWoOoMW1Q28,1863 virtualenv/seed/wheels/periodic_update.py,sha256=0bJ0pkRQgPF4PxXVe3kP_wUiGiz5oiEb99ywoFgoQ58,15560 virtualenv/seed/wheels/util.py,sha256=cNZBMglOXir5LKC8M1-s2GZHyCt65vJKegyL7kg6Zg0,3962 virtualenv/seed/wheels/embed/__init__.py,sha256=58q6qKf4gcfEWP8pLa3DGJC2mnxmAbNSUy8XJHlGSpE,1702 virtualenv/seed/wheels/embed/pip-24.2-py3-none-any.whl,sha256=LNWBz1irf8_KTOjvptys0N5b-NCj657JJ-B0BfTZ4qI,1815170 virtualenv/seed/wheels/embed/setuptools-75.2.0-py3-none-any.whl,sha256=p_y2b2i02ejma0L5h2FQozcVWPmPoyIi_6pbztdkBvg,1249825 virtualenv/seed/wheels/embed/wheel-0.44.0-py3-none-any.whl,sha256=I3apDJjMM30YYjUnqXwxeXvQK60AM9QVRwQ6HL--RI8,67059 virtualenv/util/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 virtualenv/util/error.py,sha256=qglTAnbZCj5qKaK9iNka44gfOA0vc2S0FRhLTL4gijo,323 virtualenv/util/lock.py,sha256=k_WecmIqb0hqrAenHb_tk7mMM9cDFNY88ru67PZDwgc,4749 virtualenv/util/zipapp.py,sha256=W0Dwiq6bPIWV6Z1L42XnbEK9kRYdMr2zpJG6CgKXz2I,1209 virtualenv/util/path/__init__.py,sha256=Ujv6toeiy-5uw4yPfnG7ZFvoxYs8J4JMQOiT3IWoimg,340 virtualenv/util/path/_permission.py,sha256=cJntuU9FT_VjaO_AvKArDud4-ZmgdUEY9bBGWd83-cs,665 virtualenv/util/path/_sync.py,sha256=u2Hqn_fd85WgeSpcVin0fHV_K-erJBb3f8QaUlExRE0,2088 virtualenv/util/path/_win.py,sha256=sSbUxCZ2Bi02oTka3SThR91c3vHadI-OWzy3Mh5ip5g,807 virtualenv/util/subprocess/__init__.py,sha256=BUsxWu7PUugQGXTl9dq0eem3tjkug7_1H0yWgCV2VVM,735 virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/METADATA,sha256=m3YgHAWaATS-6vc1JcijsCq3HpB47xP5A91a-pNdYrM,4491 virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87 virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/entry_points.txt,sha256=AZly5CLXNaFe4Ib7lhw_NffJc6059sN8WYsVXOkdj34,1278 virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/licenses/LICENSE,sha256=XBWRk3jFsqqrexnOpw2M3HX3aHnjJFTkwDmfi3HRcek,1074 virtualenv-20.26.6.dev12+g393bdd3.d20241018.dist-info/RECORD,, PK7QYFqqA__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/__init__.py# -*- coding: utf-8 -*- # # Copyright (C) 2012-2023 Vinay Sajip. # Licensed to the Python Software Foundation under a contributor agreement. # See LICENSE.txt and CONTRIBUTORS.txt. # import logging __version__ = '0.3.9' class DistlibException(Exception): pass try: from logging import NullHandler except ImportError: # pragma: no cover class NullHandler(logging.Handler): def handle(self, record): pass def emit(self, record): pass def createLock(self): self.lock = None logger = logging.getLogger(__name__) logger.addHandler(NullHandler()) PK7QY]I/?__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/compat.py# -*- coding: utf-8 -*- # # Copyright (C) 2013-2017 Vinay Sajip. # Licensed to the Python Software Foundation under a contributor agreement. # See LICENSE.txt and CONTRIBUTORS.txt. # from __future__ import absolute_import import os import re import shutil import sys try: import ssl except ImportError: # pragma: no cover ssl = None if sys.version_info[0] < 3: # pragma: no cover from StringIO import StringIO string_types = basestring, text_type = unicode from types import FileType as file_type import __builtin__ as builtins import ConfigParser as configparser from urlparse import urlparse, urlunparse, urljoin, urlsplit, urlunsplit from urllib import (urlretrieve, quote as _quote, unquote, url2pathname, pathname2url, ContentTooShortError, splittype) def quote(s): if isinstance(s, unicode): s = s.encode('utf-8') return _quote(s) import urllib2 from urllib2 import (Request, urlopen, URLError, HTTPError, HTTPBasicAuthHandler, HTTPPasswordMgr, HTTPHandler, HTTPRedirectHandler, build_opener) if ssl: from urllib2 import HTTPSHandler import httplib import xmlrpclib import Queue as queue from HTMLParser import HTMLParser import htmlentitydefs raw_input = raw_input from itertools import ifilter as filter from itertools import ifilterfalse as filterfalse # Leaving this around for now, in case it needs resurrecting in some way # _userprog = None # def splituser(host): # """splituser('user[:passwd]@host[:port]') --> 'user[:passwd]', 'host[:port]'.""" # global _userprog # if _userprog is None: # import re # _userprog = re.compile('^(.*)@(.*)$') # match = _userprog.match(host) # if match: return match.group(1, 2) # return None, host else: # pragma: no cover from io import StringIO string_types = str, text_type = str from io import TextIOWrapper as file_type import builtins import configparser from urllib.parse import (urlparse, urlunparse, urljoin, quote, unquote, urlsplit, urlunsplit, splittype) from urllib.request import (urlopen, urlretrieve, Request, url2pathname, pathname2url, HTTPBasicAuthHandler, HTTPPasswordMgr, HTTPHandler, HTTPRedirectHandler, build_opener) if ssl: from urllib.request import HTTPSHandler from urllib.error import HTTPError, URLError, ContentTooShortError import http.client as httplib import urllib.request as urllib2 import xmlrpc.client as xmlrpclib import queue from html.parser import HTMLParser import html.entities as htmlentitydefs raw_input = input from itertools import filterfalse filter = filter try: from ssl import match_hostname, CertificateError except ImportError: # pragma: no cover class CertificateError(ValueError): pass def _dnsname_match(dn, hostname, max_wildcards=1): """Matching according to RFC 6125, section 6.4.3 http://tools.ietf.org/html/rfc6125#section-6.4.3 """ pats = [] if not dn: return False parts = dn.split('.') leftmost, remainder = parts[0], parts[1:] wildcards = leftmost.count('*') if wildcards > max_wildcards: # Issue #17980: avoid denials of service by refusing more # than one wildcard per fragment. A survey of established # policy among SSL implementations showed it to be a # reasonable choice. raise CertificateError( "too many wildcards in certificate DNS name: " + repr(dn)) # speed up common case w/o wildcards if not wildcards: return dn.lower() == hostname.lower() # RFC 6125, section 6.4.3, subitem 1. # The client SHOULD NOT attempt to match a presented identifier in which # the wildcard character comprises a label other than the left-most label. if leftmost == '*': # When '*' is a fragment by itself, it matches a non-empty dotless # fragment. pats.append('[^.]+') elif leftmost.startswith('xn--') or hostname.startswith('xn--'): # RFC 6125, section 6.4.3, subitem 3. # The client SHOULD NOT attempt to match a presented identifier # where the wildcard character is embedded within an A-label or # U-label of an internationalized domain name. pats.append(re.escape(leftmost)) else: # Otherwise, '*' matches any dotless string, e.g. www* pats.append(re.escape(leftmost).replace(r'\*', '[^.]*')) # add the remaining fragments, ignore any wildcards for frag in remainder: pats.append(re.escape(frag)) pat = re.compile(r'\A' + r'\.'.join(pats) + r'\Z', re.IGNORECASE) return pat.match(hostname) def match_hostname(cert, hostname): """Verify that *cert* (in decoded format as returned by SSLSocket.getpeercert()) matches the *hostname*. RFC 2818 and RFC 6125 rules are followed, but IP addresses are not accepted for *hostname*. CertificateError is raised on failure. On success, the function returns nothing. """ if not cert: raise ValueError("empty or no certificate, match_hostname needs a " "SSL socket or SSL context with either " "CERT_OPTIONAL or CERT_REQUIRED") dnsnames = [] san = cert.get('subjectAltName', ()) for key, value in san: if key == 'DNS': if _dnsname_match(value, hostname): return dnsnames.append(value) if not dnsnames: # The subject is only checked when there is no dNSName entry # in subjectAltName for sub in cert.get('subject', ()): for key, value in sub: # XXX according to RFC 2818, the most specific Common Name # must be used. if key == 'commonName': if _dnsname_match(value, hostname): return dnsnames.append(value) if len(dnsnames) > 1: raise CertificateError("hostname %r " "doesn't match either of %s" % (hostname, ', '.join(map(repr, dnsnames)))) elif len(dnsnames) == 1: raise CertificateError("hostname %r " "doesn't match %r" % (hostname, dnsnames[0])) else: raise CertificateError("no appropriate commonName or " "subjectAltName fields were found") try: from types import SimpleNamespace as Container except ImportError: # pragma: no cover class Container(object): """ A generic container for when multiple values need to be returned """ def __init__(self, **kwargs): self.__dict__.update(kwargs) try: from shutil import which except ImportError: # pragma: no cover # Implementation from Python 3.3 def which(cmd, mode=os.F_OK | os.X_OK, path=None): """Given a command, mode, and a PATH string, return the path which conforms to the given mode on the PATH, or None if there is no such file. `mode` defaults to os.F_OK | os.X_OK. `path` defaults to the result of os.environ.get("PATH"), or can be overridden with a custom search path. """ # Check that a given file can be accessed with the correct mode. # Additionally check that `file` is not a directory, as on Windows # directories pass the os.access check. def _access_check(fn, mode): return (os.path.exists(fn) and os.access(fn, mode) and not os.path.isdir(fn)) # If we're given a path with a directory part, look it up directly rather # than referring to PATH directories. This includes checking relative to the # current directory, e.g. ./script if os.path.dirname(cmd): if _access_check(cmd, mode): return cmd return None if path is None: path = os.environ.get("PATH", os.defpath) if not path: return None path = path.split(os.pathsep) if sys.platform == "win32": # The current directory takes precedence on Windows. if os.curdir not in path: path.insert(0, os.curdir) # PATHEXT is necessary to check on Windows. pathext = os.environ.get("PATHEXT", "").split(os.pathsep) # See if the given file matches any of the expected path extensions. # This will allow us to short circuit when given "python.exe". # If it does match, only test that one, otherwise we have to try # others. if any(cmd.lower().endswith(ext.lower()) for ext in pathext): files = [cmd] else: files = [cmd + ext for ext in pathext] else: # On other platforms you don't have things like PATHEXT to tell you # what file suffixes are executable, so just pass on cmd as-is. files = [cmd] seen = set() for dir in path: normdir = os.path.normcase(dir) if normdir not in seen: seen.add(normdir) for thefile in files: name = os.path.join(dir, thefile) if _access_check(name, mode): return name return None # ZipFile is a context manager in 2.7, but not in 2.6 from zipfile import ZipFile as BaseZipFile if hasattr(BaseZipFile, '__enter__'): # pragma: no cover ZipFile = BaseZipFile else: # pragma: no cover from zipfile import ZipExtFile as BaseZipExtFile class ZipExtFile(BaseZipExtFile): def __init__(self, base): self.__dict__.update(base.__dict__) def __enter__(self): return self def __exit__(self, *exc_info): self.close() # return None, so if an exception occurred, it will propagate class ZipFile(BaseZipFile): def __enter__(self): return self def __exit__(self, *exc_info): self.close() # return None, so if an exception occurred, it will propagate def open(self, *args, **kwargs): base = BaseZipFile.open(self, *args, **kwargs) return ZipExtFile(base) try: from platform import python_implementation except ImportError: # pragma: no cover def python_implementation(): """Return a string identifying the Python implementation.""" if 'PyPy' in sys.version: return 'PyPy' if os.name == 'java': return 'Jython' if sys.version.startswith('IronPython'): return 'IronPython' return 'CPython' import sysconfig try: callable = callable except NameError: # pragma: no cover from collections.abc import Callable def callable(obj): return isinstance(obj, Callable) try: fsencode = os.fsencode fsdecode = os.fsdecode except AttributeError: # pragma: no cover # Issue #99: on some systems (e.g. containerised), # sys.getfilesystemencoding() returns None, and we need a real value, # so fall back to utf-8. From the CPython 2.7 docs relating to Unix and # sys.getfilesystemencoding(): the return value is "the user’s preference # according to the result of nl_langinfo(CODESET), or None if the # nl_langinfo(CODESET) failed." _fsencoding = sys.getfilesystemencoding() or 'utf-8' if _fsencoding == 'mbcs': _fserrors = 'strict' else: _fserrors = 'surrogateescape' def fsencode(filename): if isinstance(filename, bytes): return filename elif isinstance(filename, text_type): return filename.encode(_fsencoding, _fserrors) else: raise TypeError("expect bytes or str, not %s" % type(filename).__name__) def fsdecode(filename): if isinstance(filename, text_type): return filename elif isinstance(filename, bytes): return filename.decode(_fsencoding, _fserrors) else: raise TypeError("expect bytes or str, not %s" % type(filename).__name__) try: from tokenize import detect_encoding except ImportError: # pragma: no cover from codecs import BOM_UTF8, lookup cookie_re = re.compile(r"coding[:=]\s*([-\w.]+)") def _get_normal_name(orig_enc): """Imitates get_normal_name in tokenizer.c.""" # Only care about the first 12 characters. enc = orig_enc[:12].lower().replace("_", "-") if enc == "utf-8" or enc.startswith("utf-8-"): return "utf-8" if enc in ("latin-1", "iso-8859-1", "iso-latin-1") or \ enc.startswith(("latin-1-", "iso-8859-1-", "iso-latin-1-")): return "iso-8859-1" return orig_enc def detect_encoding(readline): """ The detect_encoding() function is used to detect the encoding that should be used to decode a Python source file. It requires one argument, readline, in the same way as the tokenize() generator. It will call readline a maximum of twice, and return the encoding used (as a string) and a list of any lines (left as bytes) it has read in. It detects the encoding from the presence of a utf-8 bom or an encoding cookie as specified in pep-0263. If both a bom and a cookie are present, but disagree, a SyntaxError will be raised. If the encoding cookie is an invalid charset, raise a SyntaxError. Note that if a utf-8 bom is found, 'utf-8-sig' is returned. If no encoding is specified, then the default of 'utf-8' will be returned. """ try: filename = readline.__self__.name except AttributeError: filename = None bom_found = False encoding = None default = 'utf-8' def read_or_stop(): try: return readline() except StopIteration: return b'' def find_cookie(line): try: # Decode as UTF-8. Either the line is an encoding declaration, # in which case it should be pure ASCII, or it must be UTF-8 # per default encoding. line_string = line.decode('utf-8') except UnicodeDecodeError: msg = "invalid or missing encoding declaration" if filename is not None: msg = '{} for {!r}'.format(msg, filename) raise SyntaxError(msg) matches = cookie_re.findall(line_string) if not matches: return None encoding = _get_normal_name(matches[0]) try: codec = lookup(encoding) except LookupError: # This behaviour mimics the Python interpreter if filename is None: msg = "unknown encoding: " + encoding else: msg = "unknown encoding for {!r}: {}".format( filename, encoding) raise SyntaxError(msg) if bom_found: if codec.name != 'utf-8': # This behaviour mimics the Python interpreter if filename is None: msg = 'encoding problem: utf-8' else: msg = 'encoding problem for {!r}: utf-8'.format( filename) raise SyntaxError(msg) encoding += '-sig' return encoding first = read_or_stop() if first.startswith(BOM_UTF8): bom_found = True first = first[3:] default = 'utf-8-sig' if not first: return default, [] encoding = find_cookie(first) if encoding: return encoding, [first] second = read_or_stop() if not second: return default, [first] encoding = find_cookie(second) if encoding: return encoding, [first, second] return default, [first, second] # For converting & <-> & etc. try: from html import escape except ImportError: from cgi import escape if sys.version_info[:2] < (3, 4): unescape = HTMLParser().unescape else: from html import unescape try: from collections import ChainMap except ImportError: # pragma: no cover from collections import MutableMapping try: from reprlib import recursive_repr as _recursive_repr except ImportError: def _recursive_repr(fillvalue='...'): ''' Decorator to make a repr function return fillvalue for a recursive call ''' def decorating_function(user_function): repr_running = set() def wrapper(self): key = id(self), get_ident() if key in repr_running: return fillvalue repr_running.add(key) try: result = user_function(self) finally: repr_running.discard(key) return result # Can't use functools.wraps() here because of bootstrap issues wrapper.__module__ = getattr(user_function, '__module__') wrapper.__doc__ = getattr(user_function, '__doc__') wrapper.__name__ = getattr(user_function, '__name__') wrapper.__annotations__ = getattr(user_function, '__annotations__', {}) return wrapper return decorating_function class ChainMap(MutableMapping): ''' A ChainMap groups multiple dicts (or other mappings) together to create a single, updateable view. The underlying mappings are stored in a list. That list is public and can accessed or updated using the *maps* attribute. There is no other state. Lookups search the underlying mappings successively until a key is found. In contrast, writes, updates, and deletions only operate on the first mapping. ''' def __init__(self, *maps): '''Initialize a ChainMap by setting *maps* to the given mappings. If no mappings are provided, a single empty dictionary is used. ''' self.maps = list(maps) or [{}] # always at least one map def __missing__(self, key): raise KeyError(key) def __getitem__(self, key): for mapping in self.maps: try: return mapping[ key] # can't use 'key in mapping' with defaultdict except KeyError: pass return self.__missing__( key) # support subclasses that define __missing__ def get(self, key, default=None): return self[key] if key in self else default def __len__(self): return len(set().union( *self.maps)) # reuses stored hash values if possible def __iter__(self): return iter(set().union(*self.maps)) def __contains__(self, key): return any(key in m for m in self.maps) def __bool__(self): return any(self.maps) @_recursive_repr() def __repr__(self): return '{0.__class__.__name__}({1})'.format( self, ', '.join(map(repr, self.maps))) @classmethod def fromkeys(cls, iterable, *args): 'Create a ChainMap with a single dict created from the iterable.' return cls(dict.fromkeys(iterable, *args)) def copy(self): 'New ChainMap or subclass with a new copy of maps[0] and refs to maps[1:]' return self.__class__(self.maps[0].copy(), *self.maps[1:]) __copy__ = copy def new_child(self): # like Django's Context.push() 'New ChainMap with a new dict followed by all previous maps.' return self.__class__({}, *self.maps) @property def parents(self): # like Django's Context.pop() 'New ChainMap from maps[1:].' return self.__class__(*self.maps[1:]) def __setitem__(self, key, value): self.maps[0][key] = value def __delitem__(self, key): try: del self.maps[0][key] except KeyError: raise KeyError( 'Key not found in the first mapping: {!r}'.format(key)) def popitem(self): 'Remove and return an item pair from maps[0]. Raise KeyError is maps[0] is empty.' try: return self.maps[0].popitem() except KeyError: raise KeyError('No keys found in the first mapping.') def pop(self, key, *args): 'Remove *key* from maps[0] and return its value. Raise KeyError if *key* not in maps[0].' try: return self.maps[0].pop(key, *args) except KeyError: raise KeyError( 'Key not found in the first mapping: {!r}'.format(key)) def clear(self): 'Clear maps[0], leaving maps[1:] intact.' self.maps[0].clear() try: from importlib.util import cache_from_source # Python >= 3.4 except ImportError: # pragma: no cover def cache_from_source(path, debug_override=None): assert path.endswith('.py') if debug_override is None: debug_override = __debug__ if debug_override: suffix = 'c' else: suffix = 'o' return path + suffix try: from collections import OrderedDict except ImportError: # pragma: no cover # {{{ http://code.activestate.com/recipes/576693/ (r9) # Backport of OrderedDict() class that runs on Python 2.4, 2.5, 2.6, 2.7 and pypy. # Passes Python2.7's test suite and incorporates all the latest updates. try: from thread import get_ident as _get_ident except ImportError: from dummy_thread import get_ident as _get_ident try: from _abcoll import KeysView, ValuesView, ItemsView except ImportError: pass class OrderedDict(dict): 'Dictionary that remembers insertion order' # An inherited dict maps keys to values. # The inherited dict provides __getitem__, __len__, __contains__, and get. # The remaining methods are order-aware. # Big-O running times for all methods are the same as for regular dictionaries. # The internal self.__map dictionary maps keys to links in a doubly linked list. # The circular doubly linked list starts and ends with a sentinel element. # The sentinel element never gets deleted (this simplifies the algorithm). # Each link is stored as a list of length three: [PREV, NEXT, KEY]. def __init__(self, *args, **kwds): '''Initialize an ordered dictionary. Signature is the same as for regular dictionaries, but keyword arguments are not recommended because their insertion order is arbitrary. ''' if len(args) > 1: raise TypeError('expected at most 1 arguments, got %d' % len(args)) try: self.__root except AttributeError: self.__root = root = [] # sentinel node root[:] = [root, root, None] self.__map = {} self.__update(*args, **kwds) def __setitem__(self, key, value, dict_setitem=dict.__setitem__): 'od.__setitem__(i, y) <==> od[i]=y' # Setting a new item creates a new link which goes at the end of the linked # list, and the inherited dictionary is updated with the new key/value pair. if key not in self: root = self.__root last = root[0] last[1] = root[0] = self.__map[key] = [last, root, key] dict_setitem(self, key, value) def __delitem__(self, key, dict_delitem=dict.__delitem__): 'od.__delitem__(y) <==> del od[y]' # Deleting an existing item uses self.__map to find the link which is # then removed by updating the links in the predecessor and successor nodes. dict_delitem(self, key) link_prev, link_next, key = self.__map.pop(key) link_prev[1] = link_next link_next[0] = link_prev def __iter__(self): 'od.__iter__() <==> iter(od)' root = self.__root curr = root[1] while curr is not root: yield curr[2] curr = curr[1] def __reversed__(self): 'od.__reversed__() <==> reversed(od)' root = self.__root curr = root[0] while curr is not root: yield curr[2] curr = curr[0] def clear(self): 'od.clear() -> None. Remove all items from od.' try: for node in self.__map.itervalues(): del node[:] root = self.__root root[:] = [root, root, None] self.__map.clear() except AttributeError: pass dict.clear(self) def popitem(self, last=True): '''od.popitem() -> (k, v), return and remove a (key, value) pair. Pairs are returned in LIFO order if last is true or FIFO order if false. ''' if not self: raise KeyError('dictionary is empty') root = self.__root if last: link = root[0] link_prev = link[0] link_prev[1] = root root[0] = link_prev else: link = root[1] link_next = link[1] root[1] = link_next link_next[0] = root key = link[2] del self.__map[key] value = dict.pop(self, key) return key, value # -- the following methods do not depend on the internal structure -- def keys(self): 'od.keys() -> list of keys in od' return list(self) def values(self): 'od.values() -> list of values in od' return [self[key] for key in self] def items(self): 'od.items() -> list of (key, value) pairs in od' return [(key, self[key]) for key in self] def iterkeys(self): 'od.iterkeys() -> an iterator over the keys in od' return iter(self) def itervalues(self): 'od.itervalues -> an iterator over the values in od' for k in self: yield self[k] def iteritems(self): 'od.iteritems -> an iterator over the (key, value) items in od' for k in self: yield (k, self[k]) def update(*args, **kwds): '''od.update(E, **F) -> None. Update od from dict/iterable E and F. If E is a dict instance, does: for k in E: od[k] = E[k] If E has a .keys() method, does: for k in E.keys(): od[k] = E[k] Or if E is an iterable of items, does: for k, v in E: od[k] = v In either case, this is followed by: for k, v in F.items(): od[k] = v ''' if len(args) > 2: raise TypeError('update() takes at most 2 positional ' 'arguments (%d given)' % (len(args), )) elif not args: raise TypeError('update() takes at least 1 argument (0 given)') self = args[0] # Make progressively weaker assumptions about "other" other = () if len(args) == 2: other = args[1] if isinstance(other, dict): for key in other: self[key] = other[key] elif hasattr(other, 'keys'): for key in other.keys(): self[key] = other[key] else: for key, value in other: self[key] = value for key, value in kwds.items(): self[key] = value __update = update # let subclasses override update without breaking __init__ __marker = object() def pop(self, key, default=__marker): '''od.pop(k[,d]) -> v, remove specified key and return the corresponding value. If key is not found, d is returned if given, otherwise KeyError is raised. ''' if key in self: result = self[key] del self[key] return result if default is self.__marker: raise KeyError(key) return default def setdefault(self, key, default=None): 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od' if key in self: return self[key] self[key] = default return default def __repr__(self, _repr_running=None): 'od.__repr__() <==> repr(od)' if not _repr_running: _repr_running = {} call_key = id(self), _get_ident() if call_key in _repr_running: return '...' _repr_running[call_key] = 1 try: if not self: return '%s()' % (self.__class__.__name__, ) return '%s(%r)' % (self.__class__.__name__, self.items()) finally: del _repr_running[call_key] def __reduce__(self): 'Return state information for pickling' items = [[k, self[k]] for k in self] inst_dict = vars(self).copy() for k in vars(OrderedDict()): inst_dict.pop(k, None) if inst_dict: return (self.__class__, (items, ), inst_dict) return self.__class__, (items, ) def copy(self): 'od.copy() -> a shallow copy of od' return self.__class__(self) @classmethod def fromkeys(cls, iterable, value=None): '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S and values equal to v (which defaults to None). ''' d = cls() for key in iterable: d[key] = value return d def __eq__(self, other): '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive while comparison to a regular mapping is order-insensitive. ''' if isinstance(other, OrderedDict): return len(self) == len( other) and self.items() == other.items() return dict.__eq__(self, other) def __ne__(self, other): return not self == other # -- the following methods are only used in Python 2.7 -- def viewkeys(self): "od.viewkeys() -> a set-like object providing a view on od's keys" return KeysView(self) def viewvalues(self): "od.viewvalues() -> an object providing a view on od's values" return ValuesView(self) def viewitems(self): "od.viewitems() -> a set-like object providing a view on od's items" return ItemsView(self) try: from logging.config import BaseConfigurator, valid_ident except ImportError: # pragma: no cover IDENTIFIER = re.compile('^[a-z_][a-z0-9_]*$', re.I) def valid_ident(s): m = IDENTIFIER.match(s) if not m: raise ValueError('Not a valid Python identifier: %r' % s) return True # The ConvertingXXX classes are wrappers around standard Python containers, # and they serve to convert any suitable values in the container. The # conversion converts base dicts, lists and tuples to their wrapped # equivalents, whereas strings which match a conversion format are converted # appropriately. # # Each wrapper should have a configurator attribute holding the actual # configurator to use for conversion. class ConvertingDict(dict): """A converting dictionary wrapper.""" def __getitem__(self, key): value = dict.__getitem__(self, key) result = self.configurator.convert(value) # If the converted value is different, save for next time if value is not result: self[key] = result if type(result) in (ConvertingDict, ConvertingList, ConvertingTuple): result.parent = self result.key = key return result def get(self, key, default=None): value = dict.get(self, key, default) result = self.configurator.convert(value) # If the converted value is different, save for next time if value is not result: self[key] = result if type(result) in (ConvertingDict, ConvertingList, ConvertingTuple): result.parent = self result.key = key return result def pop(self, key, default=None): value = dict.pop(self, key, default) result = self.configurator.convert(value) if value is not result: if type(result) in (ConvertingDict, ConvertingList, ConvertingTuple): result.parent = self result.key = key return result class ConvertingList(list): """A converting list wrapper.""" def __getitem__(self, key): value = list.__getitem__(self, key) result = self.configurator.convert(value) # If the converted value is different, save for next time if value is not result: self[key] = result if type(result) in (ConvertingDict, ConvertingList, ConvertingTuple): result.parent = self result.key = key return result def pop(self, idx=-1): value = list.pop(self, idx) result = self.configurator.convert(value) if value is not result: if type(result) in (ConvertingDict, ConvertingList, ConvertingTuple): result.parent = self return result class ConvertingTuple(tuple): """A converting tuple wrapper.""" def __getitem__(self, key): value = tuple.__getitem__(self, key) result = self.configurator.convert(value) if value is not result: if type(result) in (ConvertingDict, ConvertingList, ConvertingTuple): result.parent = self result.key = key return result class BaseConfigurator(object): """ The configurator base class which defines some useful defaults. """ CONVERT_PATTERN = re.compile(r'^(?P[a-z]+)://(?P.*)$') WORD_PATTERN = re.compile(r'^\s*(\w+)\s*') DOT_PATTERN = re.compile(r'^\.\s*(\w+)\s*') INDEX_PATTERN = re.compile(r'^\[\s*(\w+)\s*\]\s*') DIGIT_PATTERN = re.compile(r'^\d+$') value_converters = { 'ext': 'ext_convert', 'cfg': 'cfg_convert', } # We might want to use a different one, e.g. importlib importer = staticmethod(__import__) def __init__(self, config): self.config = ConvertingDict(config) self.config.configurator = self def resolve(self, s): """ Resolve strings to objects using standard import and attribute syntax. """ name = s.split('.') used = name.pop(0) try: found = self.importer(used) for frag in name: used += '.' + frag try: found = getattr(found, frag) except AttributeError: self.importer(used) found = getattr(found, frag) return found except ImportError: e, tb = sys.exc_info()[1:] v = ValueError('Cannot resolve %r: %s' % (s, e)) v.__cause__, v.__traceback__ = e, tb raise v def ext_convert(self, value): """Default converter for the ext:// protocol.""" return self.resolve(value) def cfg_convert(self, value): """Default converter for the cfg:// protocol.""" rest = value m = self.WORD_PATTERN.match(rest) if m is None: raise ValueError("Unable to convert %r" % value) else: rest = rest[m.end():] d = self.config[m.groups()[0]] while rest: m = self.DOT_PATTERN.match(rest) if m: d = d[m.groups()[0]] else: m = self.INDEX_PATTERN.match(rest) if m: idx = m.groups()[0] if not self.DIGIT_PATTERN.match(idx): d = d[idx] else: try: n = int( idx ) # try as number first (most likely) d = d[n] except TypeError: d = d[idx] if m: rest = rest[m.end():] else: raise ValueError('Unable to convert ' '%r at %r' % (value, rest)) # rest should be empty return d def convert(self, value): """ Convert values to an appropriate type. dicts, lists and tuples are replaced by their converting alternatives. Strings are checked to see if they have a conversion format and are converted if they do. """ if not isinstance(value, ConvertingDict) and isinstance( value, dict): value = ConvertingDict(value) value.configurator = self elif not isinstance(value, ConvertingList) and isinstance( value, list): value = ConvertingList(value) value.configurator = self elif not isinstance(value, ConvertingTuple) and isinstance(value, tuple): value = ConvertingTuple(value) value.configurator = self elif isinstance(value, string_types): m = self.CONVERT_PATTERN.match(value) if m: d = m.groupdict() prefix = d['prefix'] converter = self.value_converters.get(prefix, None) if converter: suffix = d['suffix'] converter = getattr(self, converter) value = converter(suffix) return value def configure_custom(self, config): """Configure an object with a user-supplied factory.""" c = config.pop('()') if not callable(c): c = self.resolve(c) props = config.pop('.', None) # Check for valid identifiers kwargs = dict([(k, config[k]) for k in config if valid_ident(k)]) result = c(**kwargs) if props: for name, value in props.items(): setattr(result, name, value) return result def as_tuple(self, value): """Utility function which converts lists to tuples.""" if isinstance(value, list): value = tuple(value) return value PK7QYA__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/database.py# -*- coding: utf-8 -*- # # Copyright (C) 2012-2023 The Python Software Foundation. # See LICENSE.txt and CONTRIBUTORS.txt. # """PEP 376 implementation.""" from __future__ import unicode_literals import base64 import codecs import contextlib import hashlib import logging import os import posixpath import sys import zipimport from . import DistlibException, resources from .compat import StringIO from .version import get_scheme, UnsupportedVersionError from .metadata import (Metadata, METADATA_FILENAME, WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME) from .util import (parse_requirement, cached_property, parse_name_and_version, read_exports, write_exports, CSVReader, CSVWriter) __all__ = [ 'Distribution', 'BaseInstalledDistribution', 'InstalledDistribution', 'EggInfoDistribution', 'DistributionPath' ] logger = logging.getLogger(__name__) EXPORTS_FILENAME = 'pydist-exports.json' COMMANDS_FILENAME = 'pydist-commands.json' DIST_FILES = ('INSTALLER', METADATA_FILENAME, 'RECORD', 'REQUESTED', 'RESOURCES', EXPORTS_FILENAME, 'SHARED') DISTINFO_EXT = '.dist-info' class _Cache(object): """ A simple cache mapping names and .dist-info paths to distributions """ def __init__(self): """ Initialise an instance. There is normally one for each DistributionPath. """ self.name = {} self.path = {} self.generated = False def clear(self): """ Clear the cache, setting it to its initial state. """ self.name.clear() self.path.clear() self.generated = False def add(self, dist): """ Add a distribution to the cache. :param dist: The distribution to add. """ if dist.path not in self.path: self.path[dist.path] = dist self.name.setdefault(dist.key, []).append(dist) class DistributionPath(object): """ Represents a set of distributions installed on a path (typically sys.path). """ def __init__(self, path=None, include_egg=False): """ Create an instance from a path, optionally including legacy (distutils/ setuptools/distribute) distributions. :param path: The path to use, as a list of directories. If not specified, sys.path is used. :param include_egg: If True, this instance will look for and return legacy distributions as well as those based on PEP 376. """ if path is None: path = sys.path self.path = path self._include_dist = True self._include_egg = include_egg self._cache = _Cache() self._cache_egg = _Cache() self._cache_enabled = True self._scheme = get_scheme('default') def _get_cache_enabled(self): return self._cache_enabled def _set_cache_enabled(self, value): self._cache_enabled = value cache_enabled = property(_get_cache_enabled, _set_cache_enabled) def clear_cache(self): """ Clears the internal cache. """ self._cache.clear() self._cache_egg.clear() def _yield_distributions(self): """ Yield .dist-info and/or .egg(-info) distributions. """ # We need to check if we've seen some resources already, because on # some Linux systems (e.g. some Debian/Ubuntu variants) there are # symlinks which alias other files in the environment. seen = set() for path in self.path: finder = resources.finder_for_path(path) if finder is None: continue r = finder.find('') if not r or not r.is_container: continue rset = sorted(r.resources) for entry in rset: r = finder.find(entry) if not r or r.path in seen: continue try: if self._include_dist and entry.endswith(DISTINFO_EXT): possible_filenames = [METADATA_FILENAME, WHEEL_METADATA_FILENAME, LEGACY_METADATA_FILENAME] for metadata_filename in possible_filenames: metadata_path = posixpath.join(entry, metadata_filename) pydist = finder.find(metadata_path) if pydist: break else: continue with contextlib.closing(pydist.as_stream()) as stream: metadata = Metadata(fileobj=stream, scheme='legacy') logger.debug('Found %s', r.path) seen.add(r.path) yield new_dist_class(r.path, metadata=metadata, env=self) elif self._include_egg and entry.endswith(('.egg-info', '.egg')): logger.debug('Found %s', r.path) seen.add(r.path) yield old_dist_class(r.path, self) except Exception as e: msg = 'Unable to read distribution at %s, perhaps due to bad metadata: %s' logger.warning(msg, r.path, e) import warnings warnings.warn(msg % (r.path, e), stacklevel=2) def _generate_cache(self): """ Scan the path for distributions and populate the cache with those that are found. """ gen_dist = not self._cache.generated gen_egg = self._include_egg and not self._cache_egg.generated if gen_dist or gen_egg: for dist in self._yield_distributions(): if isinstance(dist, InstalledDistribution): self._cache.add(dist) else: self._cache_egg.add(dist) if gen_dist: self._cache.generated = True if gen_egg: self._cache_egg.generated = True @classmethod def distinfo_dirname(cls, name, version): """ The *name* and *version* parameters are converted into their filename-escaped form, i.e. any ``'-'`` characters are replaced with ``'_'`` other than the one in ``'dist-info'`` and the one separating the name from the version number. :parameter name: is converted to a standard distribution name by replacing any runs of non- alphanumeric characters with a single ``'-'``. :type name: string :parameter version: is converted to a standard version string. Spaces become dots, and all other non-alphanumeric characters (except dots) become dashes, with runs of multiple dashes condensed to a single dash. :type version: string :returns: directory name :rtype: string""" name = name.replace('-', '_') return '-'.join([name, version]) + DISTINFO_EXT def get_distributions(self): """ Provides an iterator that looks for distributions and returns :class:`InstalledDistribution` or :class:`EggInfoDistribution` instances for each one of them. :rtype: iterator of :class:`InstalledDistribution` and :class:`EggInfoDistribution` instances """ if not self._cache_enabled: for dist in self._yield_distributions(): yield dist else: self._generate_cache() for dist in self._cache.path.values(): yield dist if self._include_egg: for dist in self._cache_egg.path.values(): yield dist def get_distribution(self, name): """ Looks for a named distribution on the path. This function only returns the first result found, as no more than one value is expected. If nothing is found, ``None`` is returned. :rtype: :class:`InstalledDistribution`, :class:`EggInfoDistribution` or ``None`` """ result = None name = name.lower() if not self._cache_enabled: for dist in self._yield_distributions(): if dist.key == name: result = dist break else: self._generate_cache() if name in self._cache.name: result = self._cache.name[name][0] elif self._include_egg and name in self._cache_egg.name: result = self._cache_egg.name[name][0] return result def provides_distribution(self, name, version=None): """ Iterates over all distributions to find which distributions provide *name*. If a *version* is provided, it will be used to filter the results. This function only returns the first result found, since no more than one values are expected. If the directory is not found, returns ``None``. :parameter version: a version specifier that indicates the version required, conforming to the format in ``PEP-345`` :type name: string :type version: string """ matcher = None if version is not None: try: matcher = self._scheme.matcher('%s (%s)' % (name, version)) except ValueError: raise DistlibException('invalid name or version: %r, %r' % (name, version)) for dist in self.get_distributions(): # We hit a problem on Travis where enum34 was installed and doesn't # have a provides attribute ... if not hasattr(dist, 'provides'): logger.debug('No "provides": %s', dist) else: provided = dist.provides for p in provided: p_name, p_ver = parse_name_and_version(p) if matcher is None: if p_name == name: yield dist break else: if p_name == name and matcher.match(p_ver): yield dist break def get_file_path(self, name, relative_path): """ Return the path to a resource file. """ dist = self.get_distribution(name) if dist is None: raise LookupError('no distribution named %r found' % name) return dist.get_resource_path(relative_path) def get_exported_entries(self, category, name=None): """ Return all of the exported entries in a particular category. :param category: The category to search for entries. :param name: If specified, only entries with that name are returned. """ for dist in self.get_distributions(): r = dist.exports if category in r: d = r[category] if name is not None: if name in d: yield d[name] else: for v in d.values(): yield v class Distribution(object): """ A base class for distributions, whether installed or from indexes. Either way, it must have some metadata, so that's all that's needed for construction. """ build_time_dependency = False """ Set to True if it's known to be only a build-time dependency (i.e. not needed after installation). """ requested = False """A boolean that indicates whether the ``REQUESTED`` metadata file is present (in other words, whether the package was installed by user request or it was installed as a dependency).""" def __init__(self, metadata): """ Initialise an instance. :param metadata: The instance of :class:`Metadata` describing this distribution. """ self.metadata = metadata self.name = metadata.name self.key = self.name.lower() # for case-insensitive comparisons self.version = metadata.version self.locator = None self.digest = None self.extras = None # additional features requested self.context = None # environment marker overrides self.download_urls = set() self.digests = {} @property def source_url(self): """ The source archive download URL for this distribution. """ return self.metadata.source_url download_url = source_url # Backward compatibility @property def name_and_version(self): """ A utility property which displays the name and version in parentheses. """ return '%s (%s)' % (self.name, self.version) @property def provides(self): """ A set of distribution names and versions provided by this distribution. :return: A set of "name (version)" strings. """ plist = self.metadata.provides s = '%s (%s)' % (self.name, self.version) if s not in plist: plist.append(s) return plist def _get_requirements(self, req_attr): md = self.metadata reqts = getattr(md, req_attr) logger.debug('%s: got requirements %r from metadata: %r', self.name, req_attr, reqts) return set(md.get_requirements(reqts, extras=self.extras, env=self.context)) @property def run_requires(self): return self._get_requirements('run_requires') @property def meta_requires(self): return self._get_requirements('meta_requires') @property def build_requires(self): return self._get_requirements('build_requires') @property def test_requires(self): return self._get_requirements('test_requires') @property def dev_requires(self): return self._get_requirements('dev_requires') def matches_requirement(self, req): """ Say if this instance matches (fulfills) a requirement. :param req: The requirement to match. :rtype req: str :return: True if it matches, else False. """ # Requirement may contain extras - parse to lose those # from what's passed to the matcher r = parse_requirement(req) scheme = get_scheme(self.metadata.scheme) try: matcher = scheme.matcher(r.requirement) except UnsupportedVersionError: # XXX compat-mode if cannot read the version logger.warning('could not read version %r - using name only', req) name = req.split()[0] matcher = scheme.matcher(name) name = matcher.key # case-insensitive result = False for p in self.provides: p_name, p_ver = parse_name_and_version(p) if p_name != name: continue try: result = matcher.match(p_ver) break except UnsupportedVersionError: pass return result def __repr__(self): """ Return a textual representation of this instance, """ if self.source_url: suffix = ' [%s]' % self.source_url else: suffix = '' return '' % (self.name, self.version, suffix) def __eq__(self, other): """ See if this distribution is the same as another. :param other: The distribution to compare with. To be equal to one another. distributions must have the same type, name, version and source_url. :return: True if it is the same, else False. """ if type(other) is not type(self): result = False else: result = (self.name == other.name and self.version == other.version and self.source_url == other.source_url) return result def __hash__(self): """ Compute hash in a way which matches the equality test. """ return hash(self.name) + hash(self.version) + hash(self.source_url) class BaseInstalledDistribution(Distribution): """ This is the base class for installed distributions (whether PEP 376 or legacy). """ hasher = None def __init__(self, metadata, path, env=None): """ Initialise an instance. :param metadata: An instance of :class:`Metadata` which describes the distribution. This will normally have been initialised from a metadata file in the ``path``. :param path: The path of the ``.dist-info`` or ``.egg-info`` directory for the distribution. :param env: This is normally the :class:`DistributionPath` instance where this distribution was found. """ super(BaseInstalledDistribution, self).__init__(metadata) self.path = path self.dist_path = env def get_hash(self, data, hasher=None): """ Get the hash of some data, using a particular hash algorithm, if specified. :param data: The data to be hashed. :type data: bytes :param hasher: The name of a hash implementation, supported by hashlib, or ``None``. Examples of valid values are ``'sha1'``, ``'sha224'``, ``'sha384'``, '``sha256'``, ``'md5'`` and ``'sha512'``. If no hasher is specified, the ``hasher`` attribute of the :class:`InstalledDistribution` instance is used. If the hasher is determined to be ``None``, MD5 is used as the hashing algorithm. :returns: The hash of the data. If a hasher was explicitly specified, the returned hash will be prefixed with the specified hasher followed by '='. :rtype: str """ if hasher is None: hasher = self.hasher if hasher is None: hasher = hashlib.md5 prefix = '' else: hasher = getattr(hashlib, hasher) prefix = '%s=' % self.hasher digest = hasher(data).digest() digest = base64.urlsafe_b64encode(digest).rstrip(b'=').decode('ascii') return '%s%s' % (prefix, digest) class InstalledDistribution(BaseInstalledDistribution): """ Created with the *path* of the ``.dist-info`` directory provided to the constructor. It reads the metadata contained in ``pydist.json`` when it is instantiated., or uses a passed in Metadata instance (useful for when dry-run mode is being used). """ hasher = 'sha256' def __init__(self, path, metadata=None, env=None): self.modules = [] self.finder = finder = resources.finder_for_path(path) if finder is None: raise ValueError('finder unavailable for %s' % path) if env and env._cache_enabled and path in env._cache.path: metadata = env._cache.path[path].metadata elif metadata is None: r = finder.find(METADATA_FILENAME) # Temporary - for Wheel 0.23 support if r is None: r = finder.find(WHEEL_METADATA_FILENAME) # Temporary - for legacy support if r is None: r = finder.find(LEGACY_METADATA_FILENAME) if r is None: raise ValueError('no %s found in %s' % (METADATA_FILENAME, path)) with contextlib.closing(r.as_stream()) as stream: metadata = Metadata(fileobj=stream, scheme='legacy') super(InstalledDistribution, self).__init__(metadata, path, env) if env and env._cache_enabled: env._cache.add(self) r = finder.find('REQUESTED') self.requested = r is not None p = os.path.join(path, 'top_level.txt') if os.path.exists(p): with open(p, 'rb') as f: data = f.read().decode('utf-8') self.modules = data.splitlines() def __repr__(self): return '' % (self.name, self.version, self.path) def __str__(self): return "%s %s" % (self.name, self.version) def _get_records(self): """ Get the list of installed files for the distribution :return: A list of tuples of path, hash and size. Note that hash and size might be ``None`` for some entries. The path is exactly as stored in the file (which is as in PEP 376). """ results = [] r = self.get_distinfo_resource('RECORD') with contextlib.closing(r.as_stream()) as stream: with CSVReader(stream=stream) as record_reader: # Base location is parent dir of .dist-info dir # base_location = os.path.dirname(self.path) # base_location = os.path.abspath(base_location) for row in record_reader: missing = [None for i in range(len(row), 3)] path, checksum, size = row + missing # if not os.path.isabs(path): # path = path.replace('/', os.sep) # path = os.path.join(base_location, path) results.append((path, checksum, size)) return results @cached_property def exports(self): """ Return the information exported by this distribution. :return: A dictionary of exports, mapping an export category to a dict of :class:`ExportEntry` instances describing the individual export entries, and keyed by name. """ result = {} r = self.get_distinfo_resource(EXPORTS_FILENAME) if r: result = self.read_exports() return result def read_exports(self): """ Read exports data from a file in .ini format. :return: A dictionary of exports, mapping an export category to a list of :class:`ExportEntry` instances describing the individual export entries. """ result = {} r = self.get_distinfo_resource(EXPORTS_FILENAME) if r: with contextlib.closing(r.as_stream()) as stream: result = read_exports(stream) return result def write_exports(self, exports): """ Write a dictionary of exports to a file in .ini format. :param exports: A dictionary of exports, mapping an export category to a list of :class:`ExportEntry` instances describing the individual export entries. """ rf = self.get_distinfo_file(EXPORTS_FILENAME) with open(rf, 'w') as f: write_exports(exports, f) def get_resource_path(self, relative_path): """ NOTE: This API may change in the future. Return the absolute path to a resource file with the given relative path. :param relative_path: The path, relative to .dist-info, of the resource of interest. :return: The absolute path where the resource is to be found. """ r = self.get_distinfo_resource('RESOURCES') with contextlib.closing(r.as_stream()) as stream: with CSVReader(stream=stream) as resources_reader: for relative, destination in resources_reader: if relative == relative_path: return destination raise KeyError('no resource file with relative path %r ' 'is installed' % relative_path) def list_installed_files(self): """ Iterates over the ``RECORD`` entries and returns a tuple ``(path, hash, size)`` for each line. :returns: iterator of (path, hash, size) """ for result in self._get_records(): yield result def write_installed_files(self, paths, prefix, dry_run=False): """ Writes the ``RECORD`` file, using the ``paths`` iterable passed in. Any existing ``RECORD`` file is silently overwritten. prefix is used to determine when to write absolute paths. """ prefix = os.path.join(prefix, '') base = os.path.dirname(self.path) base_under_prefix = base.startswith(prefix) base = os.path.join(base, '') record_path = self.get_distinfo_file('RECORD') logger.info('creating %s', record_path) if dry_run: return None with CSVWriter(record_path) as writer: for path in paths: if os.path.isdir(path) or path.endswith(('.pyc', '.pyo')): # do not put size and hash, as in PEP-376 hash_value = size = '' else: size = '%d' % os.path.getsize(path) with open(path, 'rb') as fp: hash_value = self.get_hash(fp.read()) if path.startswith(base) or (base_under_prefix and path.startswith(prefix)): path = os.path.relpath(path, base) writer.writerow((path, hash_value, size)) # add the RECORD file itself if record_path.startswith(base): record_path = os.path.relpath(record_path, base) writer.writerow((record_path, '', '')) return record_path def check_installed_files(self): """ Checks that the hashes and sizes of the files in ``RECORD`` are matched by the files themselves. Returns a (possibly empty) list of mismatches. Each entry in the mismatch list will be a tuple consisting of the path, 'exists', 'size' or 'hash' according to what didn't match (existence is checked first, then size, then hash), the expected value and the actual value. """ mismatches = [] base = os.path.dirname(self.path) record_path = self.get_distinfo_file('RECORD') for path, hash_value, size in self.list_installed_files(): if not os.path.isabs(path): path = os.path.join(base, path) if path == record_path: continue if not os.path.exists(path): mismatches.append((path, 'exists', True, False)) elif os.path.isfile(path): actual_size = str(os.path.getsize(path)) if size and actual_size != size: mismatches.append((path, 'size', size, actual_size)) elif hash_value: if '=' in hash_value: hasher = hash_value.split('=', 1)[0] else: hasher = None with open(path, 'rb') as f: actual_hash = self.get_hash(f.read(), hasher) if actual_hash != hash_value: mismatches.append((path, 'hash', hash_value, actual_hash)) return mismatches @cached_property def shared_locations(self): """ A dictionary of shared locations whose keys are in the set 'prefix', 'purelib', 'platlib', 'scripts', 'headers', 'data' and 'namespace'. The corresponding value is the absolute path of that category for this distribution, and takes into account any paths selected by the user at installation time (e.g. via command-line arguments). In the case of the 'namespace' key, this would be a list of absolute paths for the roots of namespace packages in this distribution. The first time this property is accessed, the relevant information is read from the SHARED file in the .dist-info directory. """ result = {} shared_path = os.path.join(self.path, 'SHARED') if os.path.isfile(shared_path): with codecs.open(shared_path, 'r', encoding='utf-8') as f: lines = f.read().splitlines() for line in lines: key, value = line.split('=', 1) if key == 'namespace': result.setdefault(key, []).append(value) else: result[key] = value return result def write_shared_locations(self, paths, dry_run=False): """ Write shared location information to the SHARED file in .dist-info. :param paths: A dictionary as described in the documentation for :meth:`shared_locations`. :param dry_run: If True, the action is logged but no file is actually written. :return: The path of the file written to. """ shared_path = os.path.join(self.path, 'SHARED') logger.info('creating %s', shared_path) if dry_run: return None lines = [] for key in ('prefix', 'lib', 'headers', 'scripts', 'data'): path = paths[key] if os.path.isdir(paths[key]): lines.append('%s=%s' % (key, path)) for ns in paths.get('namespace', ()): lines.append('namespace=%s' % ns) with codecs.open(shared_path, 'w', encoding='utf-8') as f: f.write('\n'.join(lines)) return shared_path def get_distinfo_resource(self, path): if path not in DIST_FILES: raise DistlibException('invalid path for a dist-info file: ' '%r at %r' % (path, self.path)) finder = resources.finder_for_path(self.path) if finder is None: raise DistlibException('Unable to get a finder for %s' % self.path) return finder.find(path) def get_distinfo_file(self, path): """ Returns a path located under the ``.dist-info`` directory. Returns a string representing the path. :parameter path: a ``'/'``-separated path relative to the ``.dist-info`` directory or an absolute path; If *path* is an absolute path and doesn't start with the ``.dist-info`` directory path, a :class:`DistlibException` is raised :type path: str :rtype: str """ # Check if it is an absolute path # XXX use relpath, add tests if path.find(os.sep) >= 0: # it's an absolute path? distinfo_dirname, path = path.split(os.sep)[-2:] if distinfo_dirname != self.path.split(os.sep)[-1]: raise DistlibException('dist-info file %r does not belong to the %r %s ' 'distribution' % (path, self.name, self.version)) # The file must be relative if path not in DIST_FILES: raise DistlibException('invalid path for a dist-info file: ' '%r at %r' % (path, self.path)) return os.path.join(self.path, path) def list_distinfo_files(self): """ Iterates over the ``RECORD`` entries and returns paths for each line if the path is pointing to a file located in the ``.dist-info`` directory or one of its subdirectories. :returns: iterator of paths """ base = os.path.dirname(self.path) for path, checksum, size in self._get_records(): # XXX add separator or use real relpath algo if not os.path.isabs(path): path = os.path.join(base, path) if path.startswith(self.path): yield path def __eq__(self, other): return (isinstance(other, InstalledDistribution) and self.path == other.path) # See http://docs.python.org/reference/datamodel#object.__hash__ __hash__ = object.__hash__ class EggInfoDistribution(BaseInstalledDistribution): """Created with the *path* of the ``.egg-info`` directory or file provided to the constructor. It reads the metadata contained in the file itself, or if the given path happens to be a directory, the metadata is read from the file ``PKG-INFO`` under that directory.""" requested = True # as we have no way of knowing, assume it was shared_locations = {} def __init__(self, path, env=None): def set_name_and_version(s, n, v): s.name = n s.key = n.lower() # for case-insensitive comparisons s.version = v self.path = path self.dist_path = env if env and env._cache_enabled and path in env._cache_egg.path: metadata = env._cache_egg.path[path].metadata set_name_and_version(self, metadata.name, metadata.version) else: metadata = self._get_metadata(path) # Need to be set before caching set_name_and_version(self, metadata.name, metadata.version) if env and env._cache_enabled: env._cache_egg.add(self) super(EggInfoDistribution, self).__init__(metadata, path, env) def _get_metadata(self, path): requires = None def parse_requires_data(data): """Create a list of dependencies from a requires.txt file. *data*: the contents of a setuptools-produced requires.txt file. """ reqs = [] lines = data.splitlines() for line in lines: line = line.strip() # sectioned files have bare newlines (separating sections) if not line: # pragma: no cover continue if line.startswith('['): # pragma: no cover logger.warning('Unexpected line: quitting requirement scan: %r', line) break r = parse_requirement(line) if not r: # pragma: no cover logger.warning('Not recognised as a requirement: %r', line) continue if r.extras: # pragma: no cover logger.warning('extra requirements in requires.txt are ' 'not supported') if not r.constraints: reqs.append(r.name) else: cons = ', '.join('%s%s' % c for c in r.constraints) reqs.append('%s (%s)' % (r.name, cons)) return reqs def parse_requires_path(req_path): """Create a list of dependencies from a requires.txt file. *req_path*: the path to a setuptools-produced requires.txt file. """ reqs = [] try: with codecs.open(req_path, 'r', 'utf-8') as fp: reqs = parse_requires_data(fp.read()) except IOError: pass return reqs tl_path = tl_data = None if path.endswith('.egg'): if os.path.isdir(path): p = os.path.join(path, 'EGG-INFO') meta_path = os.path.join(p, 'PKG-INFO') metadata = Metadata(path=meta_path, scheme='legacy') req_path = os.path.join(p, 'requires.txt') tl_path = os.path.join(p, 'top_level.txt') requires = parse_requires_path(req_path) else: # FIXME handle the case where zipfile is not available zipf = zipimport.zipimporter(path) fileobj = StringIO(zipf.get_data('EGG-INFO/PKG-INFO').decode('utf8')) metadata = Metadata(fileobj=fileobj, scheme='legacy') try: data = zipf.get_data('EGG-INFO/requires.txt') tl_data = zipf.get_data('EGG-INFO/top_level.txt').decode('utf-8') requires = parse_requires_data(data.decode('utf-8')) except IOError: requires = None elif path.endswith('.egg-info'): if os.path.isdir(path): req_path = os.path.join(path, 'requires.txt') requires = parse_requires_path(req_path) path = os.path.join(path, 'PKG-INFO') tl_path = os.path.join(path, 'top_level.txt') metadata = Metadata(path=path, scheme='legacy') else: raise DistlibException('path must end with .egg-info or .egg, ' 'got %r' % path) if requires: metadata.add_requirements(requires) # look for top-level modules in top_level.txt, if present if tl_data is None: if tl_path is not None and os.path.exists(tl_path): with open(tl_path, 'rb') as f: tl_data = f.read().decode('utf-8') if not tl_data: tl_data = [] else: tl_data = tl_data.splitlines() self.modules = tl_data return metadata def __repr__(self): return '' % (self.name, self.version, self.path) def __str__(self): return "%s %s" % (self.name, self.version) def check_installed_files(self): """ Checks that the hashes and sizes of the files in ``RECORD`` are matched by the files themselves. Returns a (possibly empty) list of mismatches. Each entry in the mismatch list will be a tuple consisting of the path, 'exists', 'size' or 'hash' according to what didn't match (existence is checked first, then size, then hash), the expected value and the actual value. """ mismatches = [] record_path = os.path.join(self.path, 'installed-files.txt') if os.path.exists(record_path): for path, _, _ in self.list_installed_files(): if path == record_path: continue if not os.path.exists(path): mismatches.append((path, 'exists', True, False)) return mismatches def list_installed_files(self): """ Iterates over the ``installed-files.txt`` entries and returns a tuple ``(path, hash, size)`` for each line. :returns: a list of (path, hash, size) """ def _md5(path): f = open(path, 'rb') try: content = f.read() finally: f.close() return hashlib.md5(content).hexdigest() def _size(path): return os.stat(path).st_size record_path = os.path.join(self.path, 'installed-files.txt') result = [] if os.path.exists(record_path): with codecs.open(record_path, 'r', encoding='utf-8') as f: for line in f: line = line.strip() p = os.path.normpath(os.path.join(self.path, line)) # "./" is present as a marker between installed files # and installation metadata files if not os.path.exists(p): logger.warning('Non-existent file: %s', p) if p.endswith(('.pyc', '.pyo')): continue # otherwise fall through and fail if not os.path.isdir(p): result.append((p, _md5(p), _size(p))) result.append((record_path, None, None)) return result def list_distinfo_files(self, absolute=False): """ Iterates over the ``installed-files.txt`` entries and returns paths for each line if the path is pointing to a file located in the ``.egg-info`` directory or one of its subdirectories. :parameter absolute: If *absolute* is ``True``, each returned path is transformed into a local absolute path. Otherwise the raw value from ``installed-files.txt`` is returned. :type absolute: boolean :returns: iterator of paths """ record_path = os.path.join(self.path, 'installed-files.txt') if os.path.exists(record_path): skip = True with codecs.open(record_path, 'r', encoding='utf-8') as f: for line in f: line = line.strip() if line == './': skip = False continue if not skip: p = os.path.normpath(os.path.join(self.path, line)) if p.startswith(self.path): if absolute: yield p else: yield line def __eq__(self, other): return (isinstance(other, EggInfoDistribution) and self.path == other.path) # See http://docs.python.org/reference/datamodel#object.__hash__ __hash__ = object.__hash__ new_dist_class = InstalledDistribution old_dist_class = EggInfoDistribution class DependencyGraph(object): """ Represents a dependency graph between distributions. The dependency relationships are stored in an ``adjacency_list`` that maps distributions to a list of ``(other, label)`` tuples where ``other`` is a distribution and the edge is labeled with ``label`` (i.e. the version specifier, if such was provided). Also, for more efficient traversal, for every distribution ``x``, a list of predecessors is kept in ``reverse_list[x]``. An edge from distribution ``a`` to distribution ``b`` means that ``a`` depends on ``b``. If any missing dependencies are found, they are stored in ``missing``, which is a dictionary that maps distributions to a list of requirements that were not provided by any other distributions. """ def __init__(self): self.adjacency_list = {} self.reverse_list = {} self.missing = {} def add_distribution(self, distribution): """Add the *distribution* to the graph. :type distribution: :class:`distutils2.database.InstalledDistribution` or :class:`distutils2.database.EggInfoDistribution` """ self.adjacency_list[distribution] = [] self.reverse_list[distribution] = [] # self.missing[distribution] = [] def add_edge(self, x, y, label=None): """Add an edge from distribution *x* to distribution *y* with the given *label*. :type x: :class:`distutils2.database.InstalledDistribution` or :class:`distutils2.database.EggInfoDistribution` :type y: :class:`distutils2.database.InstalledDistribution` or :class:`distutils2.database.EggInfoDistribution` :type label: ``str`` or ``None`` """ self.adjacency_list[x].append((y, label)) # multiple edges are allowed, so be careful if x not in self.reverse_list[y]: self.reverse_list[y].append(x) def add_missing(self, distribution, requirement): """ Add a missing *requirement* for the given *distribution*. :type distribution: :class:`distutils2.database.InstalledDistribution` or :class:`distutils2.database.EggInfoDistribution` :type requirement: ``str`` """ logger.debug('%s missing %r', distribution, requirement) self.missing.setdefault(distribution, []).append(requirement) def _repr_dist(self, dist): return '%s %s' % (dist.name, dist.version) def repr_node(self, dist, level=1): """Prints only a subgraph""" output = [self._repr_dist(dist)] for other, label in self.adjacency_list[dist]: dist = self._repr_dist(other) if label is not None: dist = '%s [%s]' % (dist, label) output.append(' ' * level + str(dist)) suboutput = self.repr_node(other, level + 1) subs = suboutput.split('\n') output.extend(subs[1:]) return '\n'.join(output) def to_dot(self, f, skip_disconnected=True): """Writes a DOT output for the graph to the provided file *f*. If *skip_disconnected* is set to ``True``, then all distributions that are not dependent on any other distribution are skipped. :type f: has to support ``file``-like operations :type skip_disconnected: ``bool`` """ disconnected = [] f.write("digraph dependencies {\n") for dist, adjs in self.adjacency_list.items(): if len(adjs) == 0 and not skip_disconnected: disconnected.append(dist) for other, label in adjs: if label is not None: f.write('"%s" -> "%s" [label="%s"]\n' % (dist.name, other.name, label)) else: f.write('"%s" -> "%s"\n' % (dist.name, other.name)) if not skip_disconnected and len(disconnected) > 0: f.write('subgraph disconnected {\n') f.write('label = "Disconnected"\n') f.write('bgcolor = red\n') for dist in disconnected: f.write('"%s"' % dist.name) f.write('\n') f.write('}\n') f.write('}\n') def topological_sort(self): """ Perform a topological sort of the graph. :return: A tuple, the first element of which is a topologically sorted list of distributions, and the second element of which is a list of distributions that cannot be sorted because they have circular dependencies and so form a cycle. """ result = [] # Make a shallow copy of the adjacency list alist = {} for k, v in self.adjacency_list.items(): alist[k] = v[:] while True: # See what we can remove in this run to_remove = [] for k, v in list(alist.items())[:]: if not v: to_remove.append(k) del alist[k] if not to_remove: # What's left in alist (if anything) is a cycle. break # Remove from the adjacency list of others for k, v in alist.items(): alist[k] = [(d, r) for d, r in v if d not in to_remove] logger.debug('Moving to result: %s', ['%s (%s)' % (d.name, d.version) for d in to_remove]) result.extend(to_remove) return result, list(alist.keys()) def __repr__(self): """Representation of the graph""" output = [] for dist, adjs in self.adjacency_list.items(): output.append(self.repr_node(dist)) return '\n'.join(output) def make_graph(dists, scheme='default'): """Makes a dependency graph from the given distributions. :parameter dists: a list of distributions :type dists: list of :class:`distutils2.database.InstalledDistribution` and :class:`distutils2.database.EggInfoDistribution` instances :rtype: a :class:`DependencyGraph` instance """ scheme = get_scheme(scheme) graph = DependencyGraph() provided = {} # maps names to lists of (version, dist) tuples # first, build the graph and find out what's provided for dist in dists: graph.add_distribution(dist) for p in dist.provides: name, version = parse_name_and_version(p) logger.debug('Add to provided: %s, %s, %s', name, version, dist) provided.setdefault(name, []).append((version, dist)) # now make the edges for dist in dists: requires = (dist.run_requires | dist.meta_requires | dist.build_requires | dist.dev_requires) for req in requires: try: matcher = scheme.matcher(req) except UnsupportedVersionError: # XXX compat-mode if cannot read the version logger.warning('could not read version %r - using name only', req) name = req.split()[0] matcher = scheme.matcher(name) name = matcher.key # case-insensitive matched = False if name in provided: for version, provider in provided[name]: try: match = matcher.match(version) except UnsupportedVersionError: match = False if match: graph.add_edge(dist, provider, req) matched = True break if not matched: graph.add_missing(dist, req) return graph def get_dependent_dists(dists, dist): """Recursively generate a list of distributions from *dists* that are dependent on *dist*. :param dists: a list of distributions :param dist: a distribution, member of *dists* for which we are interested """ if dist not in dists: raise DistlibException('given distribution %r is not a member ' 'of the list' % dist.name) graph = make_graph(dists) dep = [dist] # dependent distributions todo = graph.reverse_list[dist] # list of nodes we should inspect while todo: d = todo.pop() dep.append(d) for succ in graph.reverse_list[d]: if succ not in dep: todo.append(succ) dep.pop(0) # remove dist from dep, was there to prevent infinite loops return dep def get_required_dists(dists, dist): """Recursively generate a list of distributions from *dists* that are required by *dist*. :param dists: a list of distributions :param dist: a distribution, member of *dists* for which we are interested in finding the dependencies. """ if dist not in dists: raise DistlibException('given distribution %r is not a member ' 'of the list' % dist.name) graph = make_graph(dists) req = set() # required distributions todo = graph.adjacency_list[dist] # list of nodes we should inspect seen = set(t[0] for t in todo) # already added to todo while todo: d = todo.pop()[0] req.add(d) pred_list = graph.adjacency_list[d] for pred in pred_list: d = pred[0] if d not in req and d not in seen: seen.add(d) todo.append(pred) return req def make_dist(name, version, **kwargs): """ A convenience method for making a dist given just a name and version. """ summary = kwargs.pop('summary', 'Placeholder for summary') md = Metadata(**kwargs) md.name = name md.version = version md.summary = summary or 'Placeholder for summary' return Distribution(md) PK7QY%O=Q=Q>__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/index.py# -*- coding: utf-8 -*- # # Copyright (C) 2013-2023 Vinay Sajip. # Licensed to the Python Software Foundation under a contributor agreement. # See LICENSE.txt and CONTRIBUTORS.txt. # import hashlib import logging import os import shutil import subprocess import tempfile try: from threading import Thread except ImportError: # pragma: no cover from dummy_threading import Thread from . import DistlibException from .compat import (HTTPBasicAuthHandler, Request, HTTPPasswordMgr, urlparse, build_opener, string_types) from .util import zip_dir, ServerProxy logger = logging.getLogger(__name__) DEFAULT_INDEX = 'https://pypi.org/pypi' DEFAULT_REALM = 'pypi' class PackageIndex(object): """ This class represents a package index compatible with PyPI, the Python Package Index. """ boundary = b'----------ThIs_Is_tHe_distlib_index_bouNdaRY_$' def __init__(self, url=None): """ Initialise an instance. :param url: The URL of the index. If not specified, the URL for PyPI is used. """ self.url = url or DEFAULT_INDEX self.read_configuration() scheme, netloc, path, params, query, frag = urlparse(self.url) if params or query or frag or scheme not in ('http', 'https'): raise DistlibException('invalid repository: %s' % self.url) self.password_handler = None self.ssl_verifier = None self.gpg = None self.gpg_home = None with open(os.devnull, 'w') as sink: # Use gpg by default rather than gpg2, as gpg2 insists on # prompting for passwords for s in ('gpg', 'gpg2'): try: rc = subprocess.check_call([s, '--version'], stdout=sink, stderr=sink) if rc == 0: self.gpg = s break except OSError: pass def _get_pypirc_command(self): """ Get the distutils command for interacting with PyPI configurations. :return: the command. """ from .util import _get_pypirc_command as cmd return cmd() def read_configuration(self): """ Read the PyPI access configuration as supported by distutils. This populates ``username``, ``password``, ``realm`` and ``url`` attributes from the configuration. """ from .util import _load_pypirc cfg = _load_pypirc(self) self.username = cfg.get('username') self.password = cfg.get('password') self.realm = cfg.get('realm', 'pypi') self.url = cfg.get('repository', self.url) def save_configuration(self): """ Save the PyPI access configuration. You must have set ``username`` and ``password`` attributes before calling this method. """ self.check_credentials() from .util import _store_pypirc _store_pypirc(self) def check_credentials(self): """ Check that ``username`` and ``password`` have been set, and raise an exception if not. """ if self.username is None or self.password is None: raise DistlibException('username and password must be set') pm = HTTPPasswordMgr() _, netloc, _, _, _, _ = urlparse(self.url) pm.add_password(self.realm, netloc, self.username, self.password) self.password_handler = HTTPBasicAuthHandler(pm) def register(self, metadata): # pragma: no cover """ Register a distribution on PyPI, using the provided metadata. :param metadata: A :class:`Metadata` instance defining at least a name and version number for the distribution to be registered. :return: The HTTP response received from PyPI upon submission of the request. """ self.check_credentials() metadata.validate() d = metadata.todict() d[':action'] = 'verify' request = self.encode_request(d.items(), []) self.send_request(request) d[':action'] = 'submit' request = self.encode_request(d.items(), []) return self.send_request(request) def _reader(self, name, stream, outbuf): """ Thread runner for reading lines of from a subprocess into a buffer. :param name: The logical name of the stream (used for logging only). :param stream: The stream to read from. This will typically a pipe connected to the output stream of a subprocess. :param outbuf: The list to append the read lines to. """ while True: s = stream.readline() if not s: break s = s.decode('utf-8').rstrip() outbuf.append(s) logger.debug('%s: %s' % (name, s)) stream.close() def get_sign_command(self, filename, signer, sign_password, keystore=None): # pragma: no cover """ Return a suitable command for signing a file. :param filename: The pathname to the file to be signed. :param signer: The identifier of the signer of the file. :param sign_password: The passphrase for the signer's private key used for signing. :param keystore: The path to a directory which contains the keys used in verification. If not specified, the instance's ``gpg_home`` attribute is used instead. :return: The signing command as a list suitable to be passed to :class:`subprocess.Popen`. """ cmd = [self.gpg, '--status-fd', '2', '--no-tty'] if keystore is None: keystore = self.gpg_home if keystore: cmd.extend(['--homedir', keystore]) if sign_password is not None: cmd.extend(['--batch', '--passphrase-fd', '0']) td = tempfile.mkdtemp() sf = os.path.join(td, os.path.basename(filename) + '.asc') cmd.extend(['--detach-sign', '--armor', '--local-user', signer, '--output', sf, filename]) logger.debug('invoking: %s', ' '.join(cmd)) return cmd, sf def run_command(self, cmd, input_data=None): """ Run a command in a child process , passing it any input data specified. :param cmd: The command to run. :param input_data: If specified, this must be a byte string containing data to be sent to the child process. :return: A tuple consisting of the subprocess' exit code, a list of lines read from the subprocess' ``stdout``, and a list of lines read from the subprocess' ``stderr``. """ kwargs = { 'stdout': subprocess.PIPE, 'stderr': subprocess.PIPE, } if input_data is not None: kwargs['stdin'] = subprocess.PIPE stdout = [] stderr = [] p = subprocess.Popen(cmd, **kwargs) # We don't use communicate() here because we may need to # get clever with interacting with the command t1 = Thread(target=self._reader, args=('stdout', p.stdout, stdout)) t1.start() t2 = Thread(target=self._reader, args=('stderr', p.stderr, stderr)) t2.start() if input_data is not None: p.stdin.write(input_data) p.stdin.close() p.wait() t1.join() t2.join() return p.returncode, stdout, stderr def sign_file(self, filename, signer, sign_password, keystore=None): # pragma: no cover """ Sign a file. :param filename: The pathname to the file to be signed. :param signer: The identifier of the signer of the file. :param sign_password: The passphrase for the signer's private key used for signing. :param keystore: The path to a directory which contains the keys used in signing. If not specified, the instance's ``gpg_home`` attribute is used instead. :return: The absolute pathname of the file where the signature is stored. """ cmd, sig_file = self.get_sign_command(filename, signer, sign_password, keystore) rc, stdout, stderr = self.run_command(cmd, sign_password.encode('utf-8')) if rc != 0: raise DistlibException('sign command failed with error ' 'code %s' % rc) return sig_file def upload_file(self, metadata, filename, signer=None, sign_password=None, filetype='sdist', pyversion='source', keystore=None): """ Upload a release file to the index. :param metadata: A :class:`Metadata` instance defining at least a name and version number for the file to be uploaded. :param filename: The pathname of the file to be uploaded. :param signer: The identifier of the signer of the file. :param sign_password: The passphrase for the signer's private key used for signing. :param filetype: The type of the file being uploaded. This is the distutils command which produced that file, e.g. ``sdist`` or ``bdist_wheel``. :param pyversion: The version of Python which the release relates to. For code compatible with any Python, this would be ``source``, otherwise it would be e.g. ``3.2``. :param keystore: The path to a directory which contains the keys used in signing. If not specified, the instance's ``gpg_home`` attribute is used instead. :return: The HTTP response received from PyPI upon submission of the request. """ self.check_credentials() if not os.path.exists(filename): raise DistlibException('not found: %s' % filename) metadata.validate() d = metadata.todict() sig_file = None if signer: if not self.gpg: logger.warning('no signing program available - not signed') else: sig_file = self.sign_file(filename, signer, sign_password, keystore) with open(filename, 'rb') as f: file_data = f.read() md5_digest = hashlib.md5(file_data).hexdigest() sha256_digest = hashlib.sha256(file_data).hexdigest() d.update({ ':action': 'file_upload', 'protocol_version': '1', 'filetype': filetype, 'pyversion': pyversion, 'md5_digest': md5_digest, 'sha256_digest': sha256_digest, }) files = [('content', os.path.basename(filename), file_data)] if sig_file: with open(sig_file, 'rb') as f: sig_data = f.read() files.append(('gpg_signature', os.path.basename(sig_file), sig_data)) shutil.rmtree(os.path.dirname(sig_file)) request = self.encode_request(d.items(), files) return self.send_request(request) def upload_documentation(self, metadata, doc_dir): # pragma: no cover """ Upload documentation to the index. :param metadata: A :class:`Metadata` instance defining at least a name and version number for the documentation to be uploaded. :param doc_dir: The pathname of the directory which contains the documentation. This should be the directory that contains the ``index.html`` for the documentation. :return: The HTTP response received from PyPI upon submission of the request. """ self.check_credentials() if not os.path.isdir(doc_dir): raise DistlibException('not a directory: %r' % doc_dir) fn = os.path.join(doc_dir, 'index.html') if not os.path.exists(fn): raise DistlibException('not found: %r' % fn) metadata.validate() name, version = metadata.name, metadata.version zip_data = zip_dir(doc_dir).getvalue() fields = [(':action', 'doc_upload'), ('name', name), ('version', version)] files = [('content', name, zip_data)] request = self.encode_request(fields, files) return self.send_request(request) def get_verify_command(self, signature_filename, data_filename, keystore=None): """ Return a suitable command for verifying a file. :param signature_filename: The pathname to the file containing the signature. :param data_filename: The pathname to the file containing the signed data. :param keystore: The path to a directory which contains the keys used in verification. If not specified, the instance's ``gpg_home`` attribute is used instead. :return: The verifying command as a list suitable to be passed to :class:`subprocess.Popen`. """ cmd = [self.gpg, '--status-fd', '2', '--no-tty'] if keystore is None: keystore = self.gpg_home if keystore: cmd.extend(['--homedir', keystore]) cmd.extend(['--verify', signature_filename, data_filename]) logger.debug('invoking: %s', ' '.join(cmd)) return cmd def verify_signature(self, signature_filename, data_filename, keystore=None): """ Verify a signature for a file. :param signature_filename: The pathname to the file containing the signature. :param data_filename: The pathname to the file containing the signed data. :param keystore: The path to a directory which contains the keys used in verification. If not specified, the instance's ``gpg_home`` attribute is used instead. :return: True if the signature was verified, else False. """ if not self.gpg: raise DistlibException('verification unavailable because gpg ' 'unavailable') cmd = self.get_verify_command(signature_filename, data_filename, keystore) rc, stdout, stderr = self.run_command(cmd) if rc not in (0, 1): raise DistlibException('verify command failed with error code %s' % rc) return rc == 0 def download_file(self, url, destfile, digest=None, reporthook=None): """ This is a convenience method for downloading a file from an URL. Normally, this will be a file from the index, though currently no check is made for this (i.e. a file can be downloaded from anywhere). The method is just like the :func:`urlretrieve` function in the standard library, except that it allows digest computation to be done during download and checking that the downloaded data matched any expected value. :param url: The URL of the file to be downloaded (assumed to be available via an HTTP GET request). :param destfile: The pathname where the downloaded file is to be saved. :param digest: If specified, this must be a (hasher, value) tuple, where hasher is the algorithm used (e.g. ``'md5'``) and ``value`` is the expected value. :param reporthook: The same as for :func:`urlretrieve` in the standard library. """ if digest is None: digester = None logger.debug('No digest specified') else: if isinstance(digest, (list, tuple)): hasher, digest = digest else: hasher = 'md5' digester = getattr(hashlib, hasher)() logger.debug('Digest specified: %s' % digest) # The following code is equivalent to urlretrieve. # We need to do it this way so that we can compute the # digest of the file as we go. with open(destfile, 'wb') as dfp: # addinfourl is not a context manager on 2.x # so we have to use try/finally sfp = self.send_request(Request(url)) try: headers = sfp.info() blocksize = 8192 size = -1 read = 0 blocknum = 0 if "content-length" in headers: size = int(headers["Content-Length"]) if reporthook: reporthook(blocknum, blocksize, size) while True: block = sfp.read(blocksize) if not block: break read += len(block) dfp.write(block) if digester: digester.update(block) blocknum += 1 if reporthook: reporthook(blocknum, blocksize, size) finally: sfp.close() # check that we got the whole file, if we can if size >= 0 and read < size: raise DistlibException( 'retrieval incomplete: got only %d out of %d bytes' % (read, size)) # if we have a digest, it must match. if digester: actual = digester.hexdigest() if digest != actual: raise DistlibException('%s digest mismatch for %s: expected ' '%s, got %s' % (hasher, destfile, digest, actual)) logger.debug('Digest verified: %s', digest) def send_request(self, req): """ Send a standard library :class:`Request` to PyPI and return its response. :param req: The request to send. :return: The HTTP response from PyPI (a standard library HTTPResponse). """ handlers = [] if self.password_handler: handlers.append(self.password_handler) if self.ssl_verifier: handlers.append(self.ssl_verifier) opener = build_opener(*handlers) return opener.open(req) def encode_request(self, fields, files): """ Encode fields and files for posting to an HTTP server. :param fields: The fields to send as a list of (fieldname, value) tuples. :param files: The files to send as a list of (fieldname, filename, file_bytes) tuple. """ # Adapted from packaging, which in turn was adapted from # http://code.activestate.com/recipes/146306 parts = [] boundary = self.boundary for k, values in fields: if not isinstance(values, (list, tuple)): values = [values] for v in values: parts.extend(( b'--' + boundary, ('Content-Disposition: form-data; name="%s"' % k).encode('utf-8'), b'', v.encode('utf-8'))) for key, filename, value in files: parts.extend(( b'--' + boundary, ('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename)).encode('utf-8'), b'', value)) parts.extend((b'--' + boundary + b'--', b'')) body = b'\r\n'.join(parts) ct = b'multipart/form-data; boundary=' + boundary headers = { 'Content-type': ct, 'Content-length': str(len(body)) } return Request(self.url, body, headers) def search(self, terms, operator=None): # pragma: no cover if isinstance(terms, string_types): terms = {'name': terms} rpc_proxy = ServerProxy(self.url, timeout=3.0) try: return rpc_proxy.search(terms, operator or 'and') finally: rpc_proxy('close')() PK7QY>RRA__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/locators.py# -*- coding: utf-8 -*- # # Copyright (C) 2012-2023 Vinay Sajip. # Licensed to the Python Software Foundation under a contributor agreement. # See LICENSE.txt and CONTRIBUTORS.txt. # import gzip from io import BytesIO import json import logging import os import posixpath import re try: import threading except ImportError: # pragma: no cover import dummy_threading as threading import zlib from . import DistlibException from .compat import (urljoin, urlparse, urlunparse, url2pathname, pathname2url, queue, quote, unescape, build_opener, HTTPRedirectHandler as BaseRedirectHandler, text_type, Request, HTTPError, URLError) from .database import Distribution, DistributionPath, make_dist from .metadata import Metadata, MetadataInvalidError from .util import (cached_property, ensure_slash, split_filename, get_project_data, parse_requirement, parse_name_and_version, ServerProxy, normalize_name) from .version import get_scheme, UnsupportedVersionError from .wheel import Wheel, is_compatible logger = logging.getLogger(__name__) HASHER_HASH = re.compile(r'^(\w+)=([a-f0-9]+)') CHARSET = re.compile(r';\s*charset\s*=\s*(.*)\s*$', re.I) HTML_CONTENT_TYPE = re.compile('text/html|application/x(ht)?ml') DEFAULT_INDEX = 'https://pypi.org/pypi' def get_all_distribution_names(url=None): """ Return all distribution names known by an index. :param url: The URL of the index. :return: A list of all known distribution names. """ if url is None: url = DEFAULT_INDEX client = ServerProxy(url, timeout=3.0) try: return client.list_packages() finally: client('close')() class RedirectHandler(BaseRedirectHandler): """ A class to work around a bug in some Python 3.2.x releases. """ # There's a bug in the base version for some 3.2.x # (e.g. 3.2.2 on Ubuntu Oneiric). If a Location header # returns e.g. /abc, it bails because it says the scheme '' # is bogus, when actually it should use the request's # URL for the scheme. See Python issue #13696. def http_error_302(self, req, fp, code, msg, headers): # Some servers (incorrectly) return multiple Location headers # (so probably same goes for URI). Use first header. newurl = None for key in ('location', 'uri'): if key in headers: newurl = headers[key] break if newurl is None: # pragma: no cover return urlparts = urlparse(newurl) if urlparts.scheme == '': newurl = urljoin(req.get_full_url(), newurl) if hasattr(headers, 'replace_header'): headers.replace_header(key, newurl) else: headers[key] = newurl return BaseRedirectHandler.http_error_302(self, req, fp, code, msg, headers) http_error_301 = http_error_303 = http_error_307 = http_error_302 class Locator(object): """ A base class for locators - things that locate distributions. """ source_extensions = ('.tar.gz', '.tar.bz2', '.tar', '.zip', '.tgz', '.tbz') binary_extensions = ('.egg', '.exe', '.whl') excluded_extensions = ('.pdf', ) # A list of tags indicating which wheels you want to match. The default # value of None matches against the tags compatible with the running # Python. If you want to match other values, set wheel_tags on a locator # instance to a list of tuples (pyver, abi, arch) which you want to match. wheel_tags = None downloadable_extensions = source_extensions + ('.whl', ) def __init__(self, scheme='default'): """ Initialise an instance. :param scheme: Because locators look for most recent versions, they need to know the version scheme to use. This specifies the current PEP-recommended scheme - use ``'legacy'`` if you need to support existing distributions on PyPI. """ self._cache = {} self.scheme = scheme # Because of bugs in some of the handlers on some of the platforms, # we use our own opener rather than just using urlopen. self.opener = build_opener(RedirectHandler()) # If get_project() is called from locate(), the matcher instance # is set from the requirement passed to locate(). See issue #18 for # why this can be useful to know. self.matcher = None self.errors = queue.Queue() def get_errors(self): """ Return any errors which have occurred. """ result = [] while not self.errors.empty(): # pragma: no cover try: e = self.errors.get(False) result.append(e) except self.errors.Empty: continue self.errors.task_done() return result def clear_errors(self): """ Clear any errors which may have been logged. """ # Just get the errors and throw them away self.get_errors() def clear_cache(self): self._cache.clear() def _get_scheme(self): return self._scheme def _set_scheme(self, value): self._scheme = value scheme = property(_get_scheme, _set_scheme) def _get_project(self, name): """ For a given project, get a dictionary mapping available versions to Distribution instances. This should be implemented in subclasses. If called from a locate() request, self.matcher will be set to a matcher for the requirement to satisfy, otherwise it will be None. """ raise NotImplementedError('Please implement in the subclass') def get_distribution_names(self): """ Return all the distribution names known to this locator. """ raise NotImplementedError('Please implement in the subclass') def get_project(self, name): """ For a given project, get a dictionary mapping available versions to Distribution instances. This calls _get_project to do all the work, and just implements a caching layer on top. """ if self._cache is None: # pragma: no cover result = self._get_project(name) elif name in self._cache: result = self._cache[name] else: self.clear_errors() result = self._get_project(name) self._cache[name] = result return result def score_url(self, url): """ Give an url a score which can be used to choose preferred URLs for a given project release. """ t = urlparse(url) basename = posixpath.basename(t.path) compatible = True is_wheel = basename.endswith('.whl') is_downloadable = basename.endswith(self.downloadable_extensions) if is_wheel: compatible = is_compatible(Wheel(basename), self.wheel_tags) return (t.scheme == 'https', 'pypi.org' in t.netloc, is_downloadable, is_wheel, compatible, basename) def prefer_url(self, url1, url2): """ Choose one of two URLs where both are candidates for distribution archives for the same version of a distribution (for example, .tar.gz vs. zip). The current implementation favours https:// URLs over http://, archives from PyPI over those from other locations, wheel compatibility (if a wheel) and then the archive name. """ result = url2 if url1: s1 = self.score_url(url1) s2 = self.score_url(url2) if s1 > s2: result = url1 if result != url2: logger.debug('Not replacing %r with %r', url1, url2) else: logger.debug('Replacing %r with %r', url1, url2) return result def split_filename(self, filename, project_name): """ Attempt to split a filename in project name, version and Python version. """ return split_filename(filename, project_name) def convert_url_to_download_info(self, url, project_name): """ See if a URL is a candidate for a download URL for a project (the URL has typically been scraped from an HTML page). If it is, a dictionary is returned with keys "name", "version", "filename" and "url"; otherwise, None is returned. """ def same_project(name1, name2): return normalize_name(name1) == normalize_name(name2) result = None scheme, netloc, path, params, query, frag = urlparse(url) if frag.lower().startswith('egg='): # pragma: no cover logger.debug('%s: version hint in fragment: %r', project_name, frag) m = HASHER_HASH.match(frag) if m: algo, digest = m.groups() else: algo, digest = None, None origpath = path if path and path[-1] == '/': # pragma: no cover path = path[:-1] if path.endswith('.whl'): try: wheel = Wheel(path) if not is_compatible(wheel, self.wheel_tags): logger.debug('Wheel not compatible: %s', path) else: if project_name is None: include = True else: include = same_project(wheel.name, project_name) if include: result = { 'name': wheel.name, 'version': wheel.version, 'filename': wheel.filename, 'url': urlunparse((scheme, netloc, origpath, params, query, '')), 'python-version': ', '.join(['.'.join(list(v[2:])) for v in wheel.pyver]), } except Exception: # pragma: no cover logger.warning('invalid path for wheel: %s', path) elif not path.endswith(self.downloadable_extensions): # pragma: no cover logger.debug('Not downloadable: %s', path) else: # downloadable extension path = filename = posixpath.basename(path) for ext in self.downloadable_extensions: if path.endswith(ext): path = path[:-len(ext)] t = self.split_filename(path, project_name) if not t: # pragma: no cover logger.debug('No match for project/version: %s', path) else: name, version, pyver = t if not project_name or same_project(project_name, name): result = { 'name': name, 'version': version, 'filename': filename, 'url': urlunparse((scheme, netloc, origpath, params, query, '')), } if pyver: # pragma: no cover result['python-version'] = pyver break if result and algo: result['%s_digest' % algo] = digest return result def _get_digest(self, info): """ Get a digest from a dictionary by looking at a "digests" dictionary or keys of the form 'algo_digest'. Returns a 2-tuple (algo, digest) if found, else None. Currently looks only for SHA256, then MD5. """ result = None if 'digests' in info: digests = info['digests'] for algo in ('sha256', 'md5'): if algo in digests: result = (algo, digests[algo]) break if not result: for algo in ('sha256', 'md5'): key = '%s_digest' % algo if key in info: result = (algo, info[key]) break return result def _update_version_data(self, result, info): """ Update a result dictionary (the final result from _get_project) with a dictionary for a specific version, which typically holds information gleaned from a filename or URL for an archive for the distribution. """ name = info.pop('name') version = info.pop('version') if version in result: dist = result[version] md = dist.metadata else: dist = make_dist(name, version, scheme=self.scheme) md = dist.metadata dist.digest = digest = self._get_digest(info) url = info['url'] result['digests'][url] = digest if md.source_url != info['url']: md.source_url = self.prefer_url(md.source_url, url) result['urls'].setdefault(version, set()).add(url) dist.locator = self result[version] = dist def locate(self, requirement, prereleases=False): """ Find the most recent distribution which matches the given requirement. :param requirement: A requirement of the form 'foo (1.0)' or perhaps 'foo (>= 1.0, < 2.0, != 1.3)' :param prereleases: If ``True``, allow pre-release versions to be located. Otherwise, pre-release versions are not returned. :return: A :class:`Distribution` instance, or ``None`` if no such distribution could be located. """ result = None r = parse_requirement(requirement) if r is None: # pragma: no cover raise DistlibException('Not a valid requirement: %r' % requirement) scheme = get_scheme(self.scheme) self.matcher = matcher = scheme.matcher(r.requirement) logger.debug('matcher: %s (%s)', matcher, type(matcher).__name__) versions = self.get_project(r.name) if len(versions) > 2: # urls and digests keys are present # sometimes, versions are invalid slist = [] vcls = matcher.version_class for k in versions: if k in ('urls', 'digests'): continue try: if not matcher.match(k): pass # logger.debug('%s did not match %r', matcher, k) else: if prereleases or not vcls(k).is_prerelease: slist.append(k) except Exception: # pragma: no cover logger.warning('error matching %s with %r', matcher, k) pass # slist.append(k) if len(slist) > 1: slist = sorted(slist, key=scheme.key) if slist: logger.debug('sorted list: %s', slist) version = slist[-1] result = versions[version] if result: if r.extras: result.extras = r.extras result.download_urls = versions.get('urls', {}).get(version, set()) d = {} sd = versions.get('digests', {}) for url in result.download_urls: if url in sd: # pragma: no cover d[url] = sd[url] result.digests = d self.matcher = None return result class PyPIRPCLocator(Locator): """ This locator uses XML-RPC to locate distributions. It therefore cannot be used with simple mirrors (that only mirror file content). """ def __init__(self, url, **kwargs): """ Initialise an instance. :param url: The URL to use for XML-RPC. :param kwargs: Passed to the superclass constructor. """ super(PyPIRPCLocator, self).__init__(**kwargs) self.base_url = url self.client = ServerProxy(url, timeout=3.0) def get_distribution_names(self): """ Return all the distribution names known to this locator. """ return set(self.client.list_packages()) def _get_project(self, name): result = {'urls': {}, 'digests': {}} versions = self.client.package_releases(name, True) for v in versions: urls = self.client.release_urls(name, v) data = self.client.release_data(name, v) metadata = Metadata(scheme=self.scheme) metadata.name = data['name'] metadata.version = data['version'] metadata.license = data.get('license') metadata.keywords = data.get('keywords', []) metadata.summary = data.get('summary') dist = Distribution(metadata) if urls: info = urls[0] metadata.source_url = info['url'] dist.digest = self._get_digest(info) dist.locator = self result[v] = dist for info in urls: url = info['url'] digest = self._get_digest(info) result['urls'].setdefault(v, set()).add(url) result['digests'][url] = digest return result class PyPIJSONLocator(Locator): """ This locator uses PyPI's JSON interface. It's very limited in functionality and probably not worth using. """ def __init__(self, url, **kwargs): super(PyPIJSONLocator, self).__init__(**kwargs) self.base_url = ensure_slash(url) def get_distribution_names(self): """ Return all the distribution names known to this locator. """ raise NotImplementedError('Not available from this locator') def _get_project(self, name): result = {'urls': {}, 'digests': {}} url = urljoin(self.base_url, '%s/json' % quote(name)) try: resp = self.opener.open(url) data = resp.read().decode() # for now d = json.loads(data) md = Metadata(scheme=self.scheme) data = d['info'] md.name = data['name'] md.version = data['version'] md.license = data.get('license') md.keywords = data.get('keywords', []) md.summary = data.get('summary') dist = Distribution(md) dist.locator = self # urls = d['urls'] result[md.version] = dist for info in d['urls']: url = info['url'] dist.download_urls.add(url) dist.digests[url] = self._get_digest(info) result['urls'].setdefault(md.version, set()).add(url) result['digests'][url] = self._get_digest(info) # Now get other releases for version, infos in d['releases'].items(): if version == md.version: continue # already done omd = Metadata(scheme=self.scheme) omd.name = md.name omd.version = version odist = Distribution(omd) odist.locator = self result[version] = odist for info in infos: url = info['url'] odist.download_urls.add(url) odist.digests[url] = self._get_digest(info) result['urls'].setdefault(version, set()).add(url) result['digests'][url] = self._get_digest(info) # for info in urls: # md.source_url = info['url'] # dist.digest = self._get_digest(info) # dist.locator = self # for info in urls: # url = info['url'] # result['urls'].setdefault(md.version, set()).add(url) # result['digests'][url] = self._get_digest(info) except Exception as e: self.errors.put(text_type(e)) logger.exception('JSON fetch failed: %s', e) return result class Page(object): """ This class represents a scraped HTML page. """ # The following slightly hairy-looking regex just looks for the contents of # an anchor link, which has an attribute "href" either immediately preceded # or immediately followed by a "rel" attribute. The attribute values can be # declared with double quotes, single quotes or no quotes - which leads to # the length of the expression. _href = re.compile( """ (rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*))\\s+)? href\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)) (\\s+rel\\s*=\\s*(?:"(?P[^"]*)"|'(?P[^']*)'|(?P[^>\\s\n]*)))? """, re.I | re.S | re.X) _base = re.compile(r"""]+)""", re.I | re.S) def __init__(self, data, url): """ Initialise an instance with the Unicode page contents and the URL they came from. """ self.data = data self.base_url = self.url = url m = self._base.search(self.data) if m: self.base_url = m.group(1) _clean_re = re.compile(r'[^a-z0-9$&+,/:;=?@.#%_\\|-]', re.I) @cached_property def links(self): """ Return the URLs of all the links on a page together with information about their "rel" attribute, for determining which ones to treat as downloads and which ones to queue for further scraping. """ def clean(url): "Tidy up an URL." scheme, netloc, path, params, query, frag = urlparse(url) return urlunparse((scheme, netloc, quote(path), params, query, frag)) result = set() for match in self._href.finditer(self.data): d = match.groupdict('') rel = (d['rel1'] or d['rel2'] or d['rel3'] or d['rel4'] or d['rel5'] or d['rel6']) url = d['url1'] or d['url2'] or d['url3'] url = urljoin(self.base_url, url) url = unescape(url) url = self._clean_re.sub(lambda m: '%%%2x' % ord(m.group(0)), url) result.add((url, rel)) # We sort the result, hoping to bring the most recent versions # to the front result = sorted(result, key=lambda t: t[0], reverse=True) return result class SimpleScrapingLocator(Locator): """ A locator which scrapes HTML pages to locate downloads for a distribution. This runs multiple threads to do the I/O; performance is at least as good as pip's PackageFinder, which works in an analogous fashion. """ # These are used to deal with various Content-Encoding schemes. decoders = { 'deflate': zlib.decompress, 'gzip': lambda b: gzip.GzipFile(fileobj=BytesIO(b)).read(), 'none': lambda b: b, } def __init__(self, url, timeout=None, num_workers=10, **kwargs): """ Initialise an instance. :param url: The root URL to use for scraping. :param timeout: The timeout, in seconds, to be applied to requests. This defaults to ``None`` (no timeout specified). :param num_workers: The number of worker threads you want to do I/O, This defaults to 10. :param kwargs: Passed to the superclass. """ super(SimpleScrapingLocator, self).__init__(**kwargs) self.base_url = ensure_slash(url) self.timeout = timeout self._page_cache = {} self._seen = set() self._to_fetch = queue.Queue() self._bad_hosts = set() self.skip_externals = False self.num_workers = num_workers self._lock = threading.RLock() # See issue #45: we need to be resilient when the locator is used # in a thread, e.g. with concurrent.futures. We can't use self._lock # as it is for coordinating our internal threads - the ones created # in _prepare_threads. self._gplock = threading.RLock() self.platform_check = False # See issue #112 def _prepare_threads(self): """ Threads are created only when get_project is called, and terminate before it returns. They are there primarily to parallelise I/O (i.e. fetching web pages). """ self._threads = [] for i in range(self.num_workers): t = threading.Thread(target=self._fetch) t.daemon = True t.start() self._threads.append(t) def _wait_threads(self): """ Tell all the threads to terminate (by sending a sentinel value) and wait for them to do so. """ # Note that you need two loops, since you can't say which # thread will get each sentinel for t in self._threads: self._to_fetch.put(None) # sentinel for t in self._threads: t.join() self._threads = [] def _get_project(self, name): result = {'urls': {}, 'digests': {}} with self._gplock: self.result = result self.project_name = name url = urljoin(self.base_url, '%s/' % quote(name)) self._seen.clear() self._page_cache.clear() self._prepare_threads() try: logger.debug('Queueing %s', url) self._to_fetch.put(url) self._to_fetch.join() finally: self._wait_threads() del self.result return result platform_dependent = re.compile(r'\b(linux_(i\d86|x86_64|arm\w+)|' r'win(32|_amd64)|macosx_?\d+)\b', re.I) def _is_platform_dependent(self, url): """ Does an URL refer to a platform-specific download? """ return self.platform_dependent.search(url) def _process_download(self, url): """ See if an URL is a suitable download for a project. If it is, register information in the result dictionary (for _get_project) about the specific version it's for. Note that the return value isn't actually used other than as a boolean value. """ if self.platform_check and self._is_platform_dependent(url): info = None else: info = self.convert_url_to_download_info(url, self.project_name) logger.debug('process_download: %s -> %s', url, info) if info: with self._lock: # needed because self.result is shared self._update_version_data(self.result, info) return info def _should_queue(self, link, referrer, rel): """ Determine whether a link URL from a referring page and with a particular "rel" attribute should be queued for scraping. """ scheme, netloc, path, _, _, _ = urlparse(link) if path.endswith(self.source_extensions + self.binary_extensions + self.excluded_extensions): result = False elif self.skip_externals and not link.startswith(self.base_url): result = False elif not referrer.startswith(self.base_url): result = False elif rel not in ('homepage', 'download'): result = False elif scheme not in ('http', 'https', 'ftp'): result = False elif self._is_platform_dependent(link): result = False else: host = netloc.split(':', 1)[0] if host.lower() == 'localhost': result = False else: result = True logger.debug('should_queue: %s (%s) from %s -> %s', link, rel, referrer, result) return result def _fetch(self): """ Get a URL to fetch from the work queue, get the HTML page, examine its links for download candidates and candidates for further scraping. This is a handy method to run in a thread. """ while True: url = self._to_fetch.get() try: if url: page = self.get_page(url) if page is None: # e.g. after an error continue for link, rel in page.links: if link not in self._seen: try: self._seen.add(link) if (not self._process_download(link) and self._should_queue(link, url, rel)): logger.debug('Queueing %s from %s', link, url) self._to_fetch.put(link) except MetadataInvalidError: # e.g. invalid versions pass except Exception as e: # pragma: no cover self.errors.put(text_type(e)) finally: # always do this, to avoid hangs :-) self._to_fetch.task_done() if not url: # logger.debug('Sentinel seen, quitting.') break def get_page(self, url): """ Get the HTML for an URL, possibly from an in-memory cache. XXX TODO Note: this cache is never actually cleared. It's assumed that the data won't get stale over the lifetime of a locator instance (not necessarily true for the default_locator). """ # http://peak.telecommunity.com/DevCenter/EasyInstall#package-index-api scheme, netloc, path, _, _, _ = urlparse(url) if scheme == 'file' and os.path.isdir(url2pathname(path)): url = urljoin(ensure_slash(url), 'index.html') if url in self._page_cache: result = self._page_cache[url] logger.debug('Returning %s from cache: %s', url, result) else: host = netloc.split(':', 1)[0] result = None if host in self._bad_hosts: logger.debug('Skipping %s due to bad host %s', url, host) else: req = Request(url, headers={'Accept-encoding': 'identity'}) try: logger.debug('Fetching %s', url) resp = self.opener.open(req, timeout=self.timeout) logger.debug('Fetched %s', url) headers = resp.info() content_type = headers.get('Content-Type', '') if HTML_CONTENT_TYPE.match(content_type): final_url = resp.geturl() data = resp.read() encoding = headers.get('Content-Encoding') if encoding: decoder = self.decoders[encoding] # fail if not found data = decoder(data) encoding = 'utf-8' m = CHARSET.search(content_type) if m: encoding = m.group(1) try: data = data.decode(encoding) except UnicodeError: # pragma: no cover data = data.decode('latin-1') # fallback result = Page(data, final_url) self._page_cache[final_url] = result except HTTPError as e: if e.code != 404: logger.exception('Fetch failed: %s: %s', url, e) except URLError as e: # pragma: no cover logger.exception('Fetch failed: %s: %s', url, e) with self._lock: self._bad_hosts.add(host) except Exception as e: # pragma: no cover logger.exception('Fetch failed: %s: %s', url, e) finally: self._page_cache[url] = result # even if None (failure) return result _distname_re = re.compile(']*>([^<]+)<') def get_distribution_names(self): """ Return all the distribution names known to this locator. """ result = set() page = self.get_page(self.base_url) if not page: raise DistlibException('Unable to get %s' % self.base_url) for match in self._distname_re.finditer(page.data): result.add(match.group(1)) return result class DirectoryLocator(Locator): """ This class locates distributions in a directory tree. """ def __init__(self, path, **kwargs): """ Initialise an instance. :param path: The root of the directory tree to search. :param kwargs: Passed to the superclass constructor, except for: * recursive - if True (the default), subdirectories are recursed into. If False, only the top-level directory is searched, """ self.recursive = kwargs.pop('recursive', True) super(DirectoryLocator, self).__init__(**kwargs) path = os.path.abspath(path) if not os.path.isdir(path): # pragma: no cover raise DistlibException('Not a directory: %r' % path) self.base_dir = path def should_include(self, filename, parent): """ Should a filename be considered as a candidate for a distribution archive? As well as the filename, the directory which contains it is provided, though not used by the current implementation. """ return filename.endswith(self.downloadable_extensions) def _get_project(self, name): result = {'urls': {}, 'digests': {}} for root, dirs, files in os.walk(self.base_dir): for fn in files: if self.should_include(fn, root): fn = os.path.join(root, fn) url = urlunparse(('file', '', pathname2url(os.path.abspath(fn)), '', '', '')) info = self.convert_url_to_download_info(url, name) if info: self._update_version_data(result, info) if not self.recursive: break return result def get_distribution_names(self): """ Return all the distribution names known to this locator. """ result = set() for root, dirs, files in os.walk(self.base_dir): for fn in files: if self.should_include(fn, root): fn = os.path.join(root, fn) url = urlunparse(('file', '', pathname2url(os.path.abspath(fn)), '', '', '')) info = self.convert_url_to_download_info(url, None) if info: result.add(info['name']) if not self.recursive: break return result class JSONLocator(Locator): """ This locator uses special extended metadata (not available on PyPI) and is the basis of performant dependency resolution in distlib. Other locators require archive downloads before dependencies can be determined! As you might imagine, that can be slow. """ def get_distribution_names(self): """ Return all the distribution names known to this locator. """ raise NotImplementedError('Not available from this locator') def _get_project(self, name): result = {'urls': {}, 'digests': {}} data = get_project_data(name) if data: for info in data.get('files', []): if info['ptype'] != 'sdist' or info['pyversion'] != 'source': continue # We don't store summary in project metadata as it makes # the data bigger for no benefit during dependency # resolution dist = make_dist(data['name'], info['version'], summary=data.get('summary', 'Placeholder for summary'), scheme=self.scheme) md = dist.metadata md.source_url = info['url'] # TODO SHA256 digest if 'digest' in info and info['digest']: dist.digest = ('md5', info['digest']) md.dependencies = info.get('requirements', {}) dist.exports = info.get('exports', {}) result[dist.version] = dist result['urls'].setdefault(dist.version, set()).add(info['url']) return result class DistPathLocator(Locator): """ This locator finds installed distributions in a path. It can be useful for adding to an :class:`AggregatingLocator`. """ def __init__(self, distpath, **kwargs): """ Initialise an instance. :param distpath: A :class:`DistributionPath` instance to search. """ super(DistPathLocator, self).__init__(**kwargs) assert isinstance(distpath, DistributionPath) self.distpath = distpath def _get_project(self, name): dist = self.distpath.get_distribution(name) if dist is None: result = {'urls': {}, 'digests': {}} else: result = { dist.version: dist, 'urls': { dist.version: set([dist.source_url]) }, 'digests': { dist.version: set([None]) } } return result class AggregatingLocator(Locator): """ This class allows you to chain and/or merge a list of locators. """ def __init__(self, *locators, **kwargs): """ Initialise an instance. :param locators: The list of locators to search. :param kwargs: Passed to the superclass constructor, except for: * merge - if False (the default), the first successful search from any of the locators is returned. If True, the results from all locators are merged (this can be slow). """ self.merge = kwargs.pop('merge', False) self.locators = locators super(AggregatingLocator, self).__init__(**kwargs) def clear_cache(self): super(AggregatingLocator, self).clear_cache() for locator in self.locators: locator.clear_cache() def _set_scheme(self, value): self._scheme = value for locator in self.locators: locator.scheme = value scheme = property(Locator.scheme.fget, _set_scheme) def _get_project(self, name): result = {} for locator in self.locators: d = locator.get_project(name) if d: if self.merge: files = result.get('urls', {}) digests = result.get('digests', {}) # next line could overwrite result['urls'], result['digests'] result.update(d) df = result.get('urls') if files and df: for k, v in files.items(): if k in df: df[k] |= v else: df[k] = v dd = result.get('digests') if digests and dd: dd.update(digests) else: # See issue #18. If any dists are found and we're looking # for specific constraints, we only return something if # a match is found. For example, if a DirectoryLocator # returns just foo (1.0) while we're looking for # foo (>= 2.0), we'll pretend there was nothing there so # that subsequent locators can be queried. Otherwise we # would just return foo (1.0) which would then lead to a # failure to find foo (>= 2.0), because other locators # weren't searched. Note that this only matters when # merge=False. if self.matcher is None: found = True else: found = False for k in d: if self.matcher.match(k): found = True break if found: result = d break return result def get_distribution_names(self): """ Return all the distribution names known to this locator. """ result = set() for locator in self.locators: try: result |= locator.get_distribution_names() except NotImplementedError: pass return result # We use a legacy scheme simply because most of the dists on PyPI use legacy # versions which don't conform to PEP 440. default_locator = AggregatingLocator( # JSONLocator(), # don't use as PEP 426 is withdrawn SimpleScrapingLocator('https://pypi.org/simple/', timeout=3.0), scheme='legacy') locate = default_locator.locate class DependencyFinder(object): """ Locate dependencies for distributions. """ def __init__(self, locator=None): """ Initialise an instance, using the specified locator to locate distributions. """ self.locator = locator or default_locator self.scheme = get_scheme(self.locator.scheme) def add_distribution(self, dist): """ Add a distribution to the finder. This will update internal information about who provides what. :param dist: The distribution to add. """ logger.debug('adding distribution %s', dist) name = dist.key self.dists_by_name[name] = dist self.dists[(name, dist.version)] = dist for p in dist.provides: name, version = parse_name_and_version(p) logger.debug('Add to provided: %s, %s, %s', name, version, dist) self.provided.setdefault(name, set()).add((version, dist)) def remove_distribution(self, dist): """ Remove a distribution from the finder. This will update internal information about who provides what. :param dist: The distribution to remove. """ logger.debug('removing distribution %s', dist) name = dist.key del self.dists_by_name[name] del self.dists[(name, dist.version)] for p in dist.provides: name, version = parse_name_and_version(p) logger.debug('Remove from provided: %s, %s, %s', name, version, dist) s = self.provided[name] s.remove((version, dist)) if not s: del self.provided[name] def get_matcher(self, reqt): """ Get a version matcher for a requirement. :param reqt: The requirement :type reqt: str :return: A version matcher (an instance of :class:`distlib.version.Matcher`). """ try: matcher = self.scheme.matcher(reqt) except UnsupportedVersionError: # pragma: no cover # XXX compat-mode if cannot read the version name = reqt.split()[0] matcher = self.scheme.matcher(name) return matcher def find_providers(self, reqt): """ Find the distributions which can fulfill a requirement. :param reqt: The requirement. :type reqt: str :return: A set of distribution which can fulfill the requirement. """ matcher = self.get_matcher(reqt) name = matcher.key # case-insensitive result = set() provided = self.provided if name in provided: for version, provider in provided[name]: try: match = matcher.match(version) except UnsupportedVersionError: match = False if match: result.add(provider) break return result def try_to_replace(self, provider, other, problems): """ Attempt to replace one provider with another. This is typically used when resolving dependencies from multiple sources, e.g. A requires (B >= 1.0) while C requires (B >= 1.1). For successful replacement, ``provider`` must meet all the requirements which ``other`` fulfills. :param provider: The provider we are trying to replace with. :param other: The provider we're trying to replace. :param problems: If False is returned, this will contain what problems prevented replacement. This is currently a tuple of the literal string 'cantreplace', ``provider``, ``other`` and the set of requirements that ``provider`` couldn't fulfill. :return: True if we can replace ``other`` with ``provider``, else False. """ rlist = self.reqts[other] unmatched = set() for s in rlist: matcher = self.get_matcher(s) if not matcher.match(provider.version): unmatched.add(s) if unmatched: # can't replace other with provider problems.add(('cantreplace', provider, other, frozenset(unmatched))) result = False else: # can replace other with provider self.remove_distribution(other) del self.reqts[other] for s in rlist: self.reqts.setdefault(provider, set()).add(s) self.add_distribution(provider) result = True return result def find(self, requirement, meta_extras=None, prereleases=False): """ Find a distribution and all distributions it depends on. :param requirement: The requirement specifying the distribution to find, or a Distribution instance. :param meta_extras: A list of meta extras such as :test:, :build: and so on. :param prereleases: If ``True``, allow pre-release versions to be returned - otherwise, don't return prereleases unless they're all that's available. Return a set of :class:`Distribution` instances and a set of problems. The distributions returned should be such that they have the :attr:`required` attribute set to ``True`` if they were from the ``requirement`` passed to ``find()``, and they have the :attr:`build_time_dependency` attribute set to ``True`` unless they are post-installation dependencies of the ``requirement``. The problems should be a tuple consisting of the string ``'unsatisfied'`` and the requirement which couldn't be satisfied by any distribution known to the locator. """ self.provided = {} self.dists = {} self.dists_by_name = {} self.reqts = {} meta_extras = set(meta_extras or []) if ':*:' in meta_extras: meta_extras.remove(':*:') # :meta: and :run: are implicitly included meta_extras |= set([':test:', ':build:', ':dev:']) if isinstance(requirement, Distribution): dist = odist = requirement logger.debug('passed %s as requirement', odist) else: dist = odist = self.locator.locate(requirement, prereleases=prereleases) if dist is None: raise DistlibException('Unable to locate %r' % requirement) logger.debug('located %s', odist) dist.requested = True problems = set() todo = set([dist]) install_dists = set([odist]) while todo: dist = todo.pop() name = dist.key # case-insensitive if name not in self.dists_by_name: self.add_distribution(dist) else: # import pdb; pdb.set_trace() other = self.dists_by_name[name] if other != dist: self.try_to_replace(dist, other, problems) ireqts = dist.run_requires | dist.meta_requires sreqts = dist.build_requires ereqts = set() if meta_extras and dist in install_dists: for key in ('test', 'build', 'dev'): e = ':%s:' % key if e in meta_extras: ereqts |= getattr(dist, '%s_requires' % key) all_reqts = ireqts | sreqts | ereqts for r in all_reqts: providers = self.find_providers(r) if not providers: logger.debug('No providers found for %r', r) provider = self.locator.locate(r, prereleases=prereleases) # If no provider is found and we didn't consider # prereleases, consider them now. if provider is None and not prereleases: provider = self.locator.locate(r, prereleases=True) if provider is None: logger.debug('Cannot satisfy %r', r) problems.add(('unsatisfied', r)) else: n, v = provider.key, provider.version if (n, v) not in self.dists: todo.add(provider) providers.add(provider) if r in ireqts and dist in install_dists: install_dists.add(provider) logger.debug('Adding %s to install_dists', provider.name_and_version) for p in providers: name = p.key if name not in self.dists_by_name: self.reqts.setdefault(p, set()).add(r) else: other = self.dists_by_name[name] if other != p: # see if other can be replaced by p self.try_to_replace(p, other, problems) dists = set(self.dists.values()) for dist in dists: dist.build_time_dependency = dist not in install_dists if dist.build_time_dependency: logger.debug('%s is a build-time dependency only.', dist.name_and_version) logger.debug('find done for %s', odist) return dists, problems PK7QYn X7X7A__virtualenv__/distlib-0.3.9-py2.py3-none-any/distlib/manifest.py# -*- coding: utf-8 -*- # # Copyright (C) 2012-2023 Python Software Foundation. # See LICENSE.txt and CONTRIBUTORS.txt. # """ Class representing the list of files in a distribution. Equivalent to distutils.filelist, but fixes some problems. """ import fnmatch import logging import os import re import sys from . import DistlibException from .compat import fsdecode from .util import convert_path __all__ = ['Manifest'] logger = logging.getLogger(__name__) # a \ followed by some spaces + EOL _COLLAPSE_PATTERN = re.compile('\\\\w*\n', re.M) _COMMENTED_LINE = re.compile('#.*?(?=\n)|\n(?=$)', re.M | re.S) # # Due to the different results returned by fnmatch.translate, we need # to do slightly different processing for Python 2.7 and 3.2 ... this needed # to be brought in for Python 3.6 onwards. # _PYTHON_VERSION = sys.version_info[:2] class Manifest(object): """ A list of files built by exploring the filesystem and filtered by applying various patterns to what we find there. """ def __init__(self, base=None): """ Initialise an instance. :param base: The base directory to explore under. """ self.base = os.path.abspath(os.path.normpath(base or os.getcwd())) self.prefix = self.base + os.sep self.allfiles = None self.files = set() # # Public API # def findall(self): """Find all files under the base and set ``allfiles`` to the absolute pathnames of files found. """ from stat import S_ISREG, S_ISDIR, S_ISLNK self.allfiles = allfiles = [] root = self.base stack = [root] pop = stack.pop push = stack.append while stack: root = pop() names = os.listdir(root) for name in names: fullname = os.path.join(root, name) # Avoid excess stat calls -- just one will do, thank you! stat = os.stat(fullname) mode = stat.st_mode if S_ISREG(mode): allfiles.append(fsdecode(fullname)) elif S_ISDIR(mode) and not S_ISLNK(mode): push(fullname) def add(self, item): """ Add a file to the manifest. :param item: The pathname to add. This can be relative to the base. """ if not item.startswith(self.prefix): item = os.path.join(self.base, item) self.files.add(os.path.normpath(item)) def add_many(self, items): """ Add a list of files to the manifest. :param items: The pathnames to add. These can be relative to the base. """ for item in items: self.add(item) def sorted(self, wantdirs=False): """ Return sorted files in directory order """ def add_dir(dirs, d): dirs.add(d) logger.debug('add_dir added %s', d) if d != self.base: parent, _ = os.path.split(d) assert parent not in ('', '/') add_dir(dirs, parent) result = set(self.files) # make a copy! if wantdirs: dirs = set() for f in result: add_dir(dirs, os.path.dirname(f)) result |= dirs return [os.path.join(*path_tuple) for path_tuple in sorted(os.path.split(path) for path in result)] def clear(self): """Clear all collected files.""" self.files = set() self.allfiles = [] def process_directive(self, directive): """ Process a directive which either adds some files from ``allfiles`` to ``files``, or removes some files from ``files``. :param directive: The directive to process. This should be in a format compatible with distutils ``MANIFEST.in`` files: http://docs.python.org/distutils/sourcedist.html#commands """ # Parse the line: split it up, make sure the right number of words # is there, and return the relevant words. 'action' is always # defined: it's the first word of the line. Which of the other # three are defined depends on the action; it'll be either # patterns, (dir and patterns), or (dirpattern). action, patterns, thedir, dirpattern = self._parse_directive(directive) # OK, now we know that the action is valid and we have the # right number of words on the line for that action -- so we # can proceed with minimal error-checking. if action == 'include': for pattern in patterns: if not self._include_pattern(pattern, anchor=True): logger.warning('no files found matching %r', pattern) elif action == 'exclude': for pattern in patterns: self._exclude_pattern(pattern, anchor=True) elif action == 'global-include': for pattern in patterns: if not self._include_pattern(pattern, anchor=False): logger.warning('no files found matching %r ' 'anywhere in distribution', pattern) elif action == 'global-exclude': for pattern in patterns: self._exclude_pattern(pattern, anchor=False) elif action == 'recursive-include': for pattern in patterns: if not self._include_pattern(pattern, prefix=thedir): logger.warning('no files found matching %r ' 'under directory %r', pattern, thedir) elif action == 'recursive-exclude': for pattern in patterns: self._exclude_pattern(pattern, prefix=thedir) elif action == 'graft': if not self._include_pattern(None, prefix=dirpattern): logger.warning('no directories found matching %r', dirpattern) elif action == 'prune': if not self._exclude_pattern(None, prefix=dirpattern): logger.warning('no previously-included directories found ' 'matching %r', dirpattern) else: # pragma: no cover # This should never happen, as it should be caught in # _parse_template_line raise DistlibException( 'invalid action %r' % action) # # Private API # def _parse_directive(self, directive): """ Validate a directive. :param directive: The directive to validate. :return: A tuple of action, patterns, thedir, dir_patterns """ words = directive.split() if len(words) == 1 and words[0] not in ('include', 'exclude', 'global-include', 'global-exclude', 'recursive-include', 'recursive-exclude', 'graft', 'prune'): # no action given, let's use the default 'include' words.insert(0, 'include') action = words[0] patterns = thedir = dir_pattern = None if action in ('include', 'exclude', 'global-include', 'global-exclude'): if len(words) < 2: raise DistlibException( '%r expects ...' % action) patterns = [convert_path(word) for word in words[1:]] elif action in ('recursive-include', 'recursive-exclude'): if len(words) < 3: raise DistlibException( '%r expects